diff --git a/404.html b/404.html index da0a4665..c56dc0c1 100644 --- a/404.html +++ b/404.html @@ -6,13 +6,13 @@ Page Not Found | Dashy - - + +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- - + + \ No newline at end of file diff --git a/assets/js/0276dc25.100ec631.js b/assets/js/0276dc25.100ec631.js new file mode 100644 index 00000000..a6150b5a --- /dev/null +++ b/assets/js/0276dc25.100ec631.js @@ -0,0 +1,2 @@ +/*! For license information please see 0276dc25.100ec631.js.LICENSE.txt */ +(self.webpackChunkdashy=self.webpackChunkdashy||[]).push([[158],{2733:e=>{function t(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function r(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function i(e){return void 0===e}e.exports=t,t.prototype._events=void 0,t.prototype._maxListeners=void 0,t.defaultMaxListeners=10,t.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},t.prototype.emit=function(e){var t,a,s,c,o,u;if(this._events||(this._events={}),"error"===e&&(!this._events.error||n(this._events.error)&&!this._events.error.length)){if((t=arguments[1])instanceof Error)throw t;var h=new Error('Uncaught, unspecified "error" event. ('+t+")");throw h.context=t,h}if(i(a=this._events[e]))return!1;if(r(a))switch(arguments.length){case 1:a.call(this);break;case 2:a.call(this,arguments[1]);break;case 3:a.call(this,arguments[1],arguments[2]);break;default:c=Array.prototype.slice.call(arguments,1),a.apply(this,c)}else if(n(a))for(c=Array.prototype.slice.call(arguments,1),s=(u=a.slice()).length,o=0;o0&&this._events[e].length>s&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace()),this},t.prototype.on=t.prototype.addListener,t.prototype.once=function(e,t){if(!r(t))throw TypeError("listener must be a function");var n=!1;function i(){this.removeListener(e,i),n||(n=!0,t.apply(this,arguments))}return i.listener=t,this.on(e,i),this},t.prototype.removeListener=function(e,t){var i,a,s,c;if(!r(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(s=(i=this._events[e]).length,a=-1,i===t||r(i.listener)&&i.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(n(i)){for(c=s;c-- >0;)if(i[c]===t||i[c].listener&&i[c].listener===t){a=c;break}if(a<0)return this;1===i.length?(i.length=0,delete this._events[e]):i.splice(a,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},t.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(r(n=this._events[e]))this.removeListener(e,n);else if(n)for(;n.length;)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},t.prototype.listeners=function(e){return this._events&&this._events[e]?r(this._events[e])?[this._events[e]]:this._events[e].slice():[]},t.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(r(t))return 1;if(t)return t.length}return 0},t.listenerCount=function(e,t){return e.listenerCount(t)}},4103:(e,t,r)=>{"use strict";var n=r(6571),i=r(9127),a=r(3371),s=r(7691);function c(e,t,r,i){return new n(e,t,r,i)}c.version=r(6938),c.AlgoliaSearchHelper=n,c.SearchParameters=a,c.RecommendParameters=i,c.SearchResults=s,e.exports=c},6732:(e,t,r)=>{"use strict";var n=r(2733);function i(e,t,r){this.main=e,this.fn=t,this.recommendFn=r,this.lastResults=null,this.lastRecommendResults=null}r(3014)(i,n),i.prototype.detach=function(){this.removeAllListeners(),this.main.detachDerivedHelper(this)},i.prototype.getModifiedState=function(e){return this.fn(e)},i.prototype.getModifiedRecommendState=function(e){return this.recommendFn(e)},e.exports=i},9127:e=>{"use strict";function t(e){e=e||{},this.params=e.params||[]}t.prototype={constructor:t,addParams:function(e){var r=this.params.slice();return r.push(e),new t({params:r})},removeParams:function(e){return new t({params:this.params.filter((function(t){return t.$$id!==e}))})},addFrequentlyBoughtTogether:function(e){return this.addParams(Object.assign({},e,{model:"bought-together"}))},addRelatedProducts:function(e){return this.addParams(Object.assign({},e,{model:"related-products"}))},addTrendingItems:function(e){return this.addParams(Object.assign({},e,{model:"trending-items"}))},addTrendingFacets:function(e){return this.addParams(Object.assign({},e,{model:"trending-facets"}))},addLookingSimilar:function(e){return this.addParams(Object.assign({},e,{model:"looking-similar"}))},_buildQueries:function(e,t){return this.params.filter((function(e){return void 0===t[e.$$id]})).map((function(t){var r=Object.assign({},t,{indexName:e});return delete r.$$id,r}))}},e.exports=t},2223:e=>{"use strict";function t(e,t){this._state=e,this._rawResults=t;var r=this;e.params.forEach((function(e){var n=e.$$id;r[n]=t[n]}))}t.prototype={constructor:t},e.exports=t},4054:(e,t,r)=>{"use strict";var n=r(9110),i=r(317),a=r(1383),s={addRefinement:function(e,t,r){if(s.isRefined(e,t,r))return e;var i=""+r,a=e[t]?e[t].concat(i):[i],c={};return c[t]=a,n({},c,e)},removeRefinement:function(e,t,r){if(void 0===r)return s.clearRefinement(e,(function(e,r){return t===r}));var n=""+r;return s.clearRefinement(e,(function(e,r){return t===r&&n===e}))},toggleRefinement:function(e,t,r){if(void 0===r)throw new Error("toggleRefinement should be used with a value");return s.isRefined(e,t,r)?s.removeRefinement(e,t,r):s.addRefinement(e,t,r)},clearRefinement:function(e,t,r){if(void 0===t)return i(e)?{}:e;if("string"==typeof t)return a(e,[t]);if("function"==typeof t){var n=!1,s=Object.keys(e).reduce((function(i,a){var s=e[a]||[],c=s.filter((function(e){return!t(e,a,r)}));return c.length!==s.length&&(n=!0),i[a]=c,i}),{});return n?s:e}},isRefined:function(e,t,r){var n=Boolean(e[t])&&e[t].length>0;if(void 0===r||!n)return n;var i=""+r;return-1!==e[t].indexOf(i)}};e.exports=s},3371:(e,t,r)=>{"use strict";var n=r(9110),i=r(849),a=r(4843),s=r(4728),c=r(317),o=r(1383),u=r(7507),h=r(2208),f=r(4054);function l(e,t){return Array.isArray(e)&&Array.isArray(t)?e.length===t.length&&e.every((function(e,r){return l(t[r],e)})):e===t}function m(e){var t=e?m._parseNumbers(e):{};void 0===t.userToken||h(t.userToken)||console.warn("[algoliasearch-helper] The `userToken` parameter is invalid. This can lead to wrong analytics.\n - Format: [a-zA-Z0-9_-]{1,64}"),this.facets=t.facets||[],this.disjunctiveFacets=t.disjunctiveFacets||[],this.hierarchicalFacets=t.hierarchicalFacets||[],this.facetsRefinements=t.facetsRefinements||{},this.facetsExcludes=t.facetsExcludes||{},this.disjunctiveFacetsRefinements=t.disjunctiveFacetsRefinements||{},this.numericRefinements=t.numericRefinements||{},this.tagRefinements=t.tagRefinements||[],this.hierarchicalFacetsRefinements=t.hierarchicalFacetsRefinements||{};var r=this;Object.keys(t).forEach((function(e){var n=-1!==m.PARAMETERS.indexOf(e),i=void 0!==t[e];!n&&i&&(r[e]=t[e])}))}m.PARAMETERS=Object.keys(new m),m._parseNumbers=function(e){if(e instanceof m)return e;var t={};if(["aroundPrecision","aroundRadius","getRankingInfo","minWordSizefor2Typos","minWordSizefor1Typo","page","maxValuesPerFacet","distinct","minimumAroundRadius","hitsPerPage","minProximity"].forEach((function(r){var n=e[r];if("string"==typeof n){var i=parseFloat(n);t[r]=isNaN(i)?n:i}})),Array.isArray(e.insideBoundingBox)&&(t.insideBoundingBox=e.insideBoundingBox.map((function(e){return Array.isArray(e)?e.map((function(e){return parseFloat(e)})):e}))),e.numericRefinements){var r={};Object.keys(e.numericRefinements).forEach((function(t){var n=e.numericRefinements[t]||{};r[t]={},Object.keys(n).forEach((function(e){var i=n[e].map((function(e){return Array.isArray(e)?e.map((function(e){return"string"==typeof e?parseFloat(e):e})):"string"==typeof e?parseFloat(e):e}));r[t][e]=i}))})),t.numericRefinements=r}return s(e,t)},m.make=function(e){var t=new m(e);return(e.hierarchicalFacets||[]).forEach((function(e){if(e.rootPath){var r=t.getHierarchicalRefinement(e.name);r.length>0&&0!==r[0].indexOf(e.rootPath)&&(t=t.clearRefinements(e.name)),0===(r=t.getHierarchicalRefinement(e.name)).length&&(t=t.toggleHierarchicalFacetRefinement(e.name,e.rootPath))}})),t},m.validate=function(e,t){var r=t||{};return e.tagFilters&&r.tagRefinements&&r.tagRefinements.length>0?new Error("[Tags] Cannot switch from the managed tag API to the advanced API. It is probably an error, if it is really what you want, you should first clear the tags with clearTags method."):e.tagRefinements.length>0&&r.tagFilters?new Error("[Tags] Cannot switch from the advanced tag API to the managed API. It is probably an error, if it is not, you should first clear the tags with clearTags method."):e.numericFilters&&r.numericRefinements&&c(r.numericRefinements)?new Error("[Numeric filters] Can't switch from the advanced to the managed API. It is probably an error, if this is really what you want, you have to first clear the numeric filters."):c(e.numericRefinements)&&r.numericFilters?new Error("[Numeric filters] Can't switch from the managed API to the advanced. It is probably an error, if this is really what you want, you have to first clear the numeric filters."):null},m.prototype={constructor:m,clearRefinements:function(e){var t={numericRefinements:this._clearNumericRefinements(e),facetsRefinements:f.clearRefinement(this.facetsRefinements,e,"conjunctiveFacet"),facetsExcludes:f.clearRefinement(this.facetsExcludes,e,"exclude"),disjunctiveFacetsRefinements:f.clearRefinement(this.disjunctiveFacetsRefinements,e,"disjunctiveFacet"),hierarchicalFacetsRefinements:f.clearRefinement(this.hierarchicalFacetsRefinements,e,"hierarchicalFacet")};return t.numericRefinements===this.numericRefinements&&t.facetsRefinements===this.facetsRefinements&&t.facetsExcludes===this.facetsExcludes&&t.disjunctiveFacetsRefinements===this.disjunctiveFacetsRefinements&&t.hierarchicalFacetsRefinements===this.hierarchicalFacetsRefinements?this:this.setQueryParameters(t)},clearTags:function(){return void 0===this.tagFilters&&0===this.tagRefinements.length?this:this.setQueryParameters({tagFilters:void 0,tagRefinements:[]})},setIndex:function(e){return e===this.index?this:this.setQueryParameters({index:e})},setQuery:function(e){return e===this.query?this:this.setQueryParameters({query:e})},setPage:function(e){return e===this.page?this:this.setQueryParameters({page:e})},setFacets:function(e){return this.setQueryParameters({facets:e})},setDisjunctiveFacets:function(e){return this.setQueryParameters({disjunctiveFacets:e})},setHitsPerPage:function(e){return this.hitsPerPage===e?this:this.setQueryParameters({hitsPerPage:e})},setTypoTolerance:function(e){return this.typoTolerance===e?this:this.setQueryParameters({typoTolerance:e})},addNumericRefinement:function(e,t,r){var n=u(r);if(this.isNumericRefined(e,t,n))return this;var i=s({},this.numericRefinements);return i[e]=s({},i[e]),i[e][t]?(i[e][t]=i[e][t].slice(),i[e][t].push(n)):i[e][t]=[n],this.setQueryParameters({numericRefinements:i})},getConjunctiveRefinements:function(e){return this.isConjunctiveFacet(e)&&this.facetsRefinements[e]||[]},getDisjunctiveRefinements:function(e){return this.isDisjunctiveFacet(e)&&this.disjunctiveFacetsRefinements[e]||[]},getHierarchicalRefinement:function(e){return this.hierarchicalFacetsRefinements[e]||[]},getExcludeRefinements:function(e){return this.isConjunctiveFacet(e)&&this.facetsExcludes[e]||[]},removeNumericRefinement:function(e,t,r){var n=r;return void 0!==n?this.isNumericRefined(e,t,n)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(r,i){return i===e&&r.op===t&&l(r.val,u(n))}))}):this:void 0!==t?this.isNumericRefined(e,t)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(r,n){return n===e&&r.op===t}))}):this:this.isNumericRefined(e)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(t,r){return r===e}))}):this},getNumericRefinements:function(e){return this.numericRefinements[e]||{}},getNumericRefinement:function(e,t){return this.numericRefinements[e]&&this.numericRefinements[e][t]},_clearNumericRefinements:function(e){if(void 0===e)return c(this.numericRefinements)?{}:this.numericRefinements;if("string"==typeof e)return o(this.numericRefinements,[e]);if("function"==typeof e){var t=!1,r=this.numericRefinements,n=Object.keys(r).reduce((function(n,i){var a=r[i],s={};return a=a||{},Object.keys(a).forEach((function(r){var n=a[r]||[],c=[];n.forEach((function(t){e({val:t,op:r},i,"numeric")||c.push(t)})),c.length!==n.length&&(t=!0),s[r]=c})),n[i]=s,n}),{});return t?n:this.numericRefinements}},addFacet:function(e){return this.isConjunctiveFacet(e)?this:this.setQueryParameters({facets:this.facets.concat([e])})},addDisjunctiveFacet:function(e){return this.isDisjunctiveFacet(e)?this:this.setQueryParameters({disjunctiveFacets:this.disjunctiveFacets.concat([e])})},addHierarchicalFacet:function(e){if(this.isHierarchicalFacet(e.name))throw new Error("Cannot declare two hierarchical facets with the same name: `"+e.name+"`");return this.setQueryParameters({hierarchicalFacets:this.hierarchicalFacets.concat([e])})},addFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsRefinements,e,t)?this:this.setQueryParameters({facetsRefinements:f.addRefinement(this.facetsRefinements,e,t)})},addExcludeRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsExcludes,e,t)?this:this.setQueryParameters({facetsExcludes:f.addRefinement(this.facetsExcludes,e,t)})},addDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return f.isRefined(this.disjunctiveFacetsRefinements,e,t)?this:this.setQueryParameters({disjunctiveFacetsRefinements:f.addRefinement(this.disjunctiveFacetsRefinements,e,t)})},addTagRefinement:function(e){if(this.isTagRefined(e))return this;var t={tagRefinements:this.tagRefinements.concat(e)};return this.setQueryParameters(t)},removeFacet:function(e){return this.isConjunctiveFacet(e)?this.clearRefinements(e).setQueryParameters({facets:this.facets.filter((function(t){return t!==e}))}):this},removeDisjunctiveFacet:function(e){return this.isDisjunctiveFacet(e)?this.clearRefinements(e).setQueryParameters({disjunctiveFacets:this.disjunctiveFacets.filter((function(t){return t!==e}))}):this},removeHierarchicalFacet:function(e){return this.isHierarchicalFacet(e)?this.clearRefinements(e).setQueryParameters({hierarchicalFacets:this.hierarchicalFacets.filter((function(t){return t.name!==e}))}):this},removeFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsRefinements,e,t)?this.setQueryParameters({facetsRefinements:f.removeRefinement(this.facetsRefinements,e,t)}):this},removeExcludeRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsExcludes,e,t)?this.setQueryParameters({facetsExcludes:f.removeRefinement(this.facetsExcludes,e,t)}):this},removeDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return f.isRefined(this.disjunctiveFacetsRefinements,e,t)?this.setQueryParameters({disjunctiveFacetsRefinements:f.removeRefinement(this.disjunctiveFacetsRefinements,e,t)}):this},removeTagRefinement:function(e){if(!this.isTagRefined(e))return this;var t={tagRefinements:this.tagRefinements.filter((function(t){return t!==e}))};return this.setQueryParameters(t)},toggleRefinement:function(e,t){return this.toggleFacetRefinement(e,t)},toggleFacetRefinement:function(e,t){if(this.isHierarchicalFacet(e))return this.toggleHierarchicalFacetRefinement(e,t);if(this.isConjunctiveFacet(e))return this.toggleConjunctiveFacetRefinement(e,t);if(this.isDisjunctiveFacet(e))return this.toggleDisjunctiveFacetRefinement(e,t);throw new Error("Cannot refine the undeclared facet "+e+"; it should be added to the helper options facets, disjunctiveFacets or hierarchicalFacets")},toggleConjunctiveFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return this.setQueryParameters({facetsRefinements:f.toggleRefinement(this.facetsRefinements,e,t)})},toggleExcludeFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return this.setQueryParameters({facetsExcludes:f.toggleRefinement(this.facetsExcludes,e,t)})},toggleDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return this.setQueryParameters({disjunctiveFacetsRefinements:f.toggleRefinement(this.disjunctiveFacetsRefinements,e,t)})},toggleHierarchicalFacetRefinement:function(e,t){if(!this.isHierarchicalFacet(e))throw new Error(e+" is not defined in the hierarchicalFacets attribute of the helper configuration");var r=this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(e)),i={};return void 0!==this.hierarchicalFacetsRefinements[e]&&this.hierarchicalFacetsRefinements[e].length>0&&(this.hierarchicalFacetsRefinements[e][0]===t||0===this.hierarchicalFacetsRefinements[e][0].indexOf(t+r))?-1===t.indexOf(r)?i[e]=[]:i[e]=[t.slice(0,t.lastIndexOf(r))]:i[e]=[t],this.setQueryParameters({hierarchicalFacetsRefinements:n({},i,this.hierarchicalFacetsRefinements)})},addHierarchicalFacetRefinement:function(e,t){if(this.isHierarchicalFacetRefined(e))throw new Error(e+" is already refined.");if(!this.isHierarchicalFacet(e))throw new Error(e+" is not defined in the hierarchicalFacets attribute of the helper configuration.");var r={};return r[e]=[t],this.setQueryParameters({hierarchicalFacetsRefinements:n({},r,this.hierarchicalFacetsRefinements)})},removeHierarchicalFacetRefinement:function(e){if(!this.isHierarchicalFacetRefined(e))return this;var t={};return t[e]=[],this.setQueryParameters({hierarchicalFacetsRefinements:n({},t,this.hierarchicalFacetsRefinements)})},toggleTagRefinement:function(e){return this.isTagRefined(e)?this.removeTagRefinement(e):this.addTagRefinement(e)},isDisjunctiveFacet:function(e){return this.disjunctiveFacets.indexOf(e)>-1},isHierarchicalFacet:function(e){return void 0!==this.getHierarchicalFacetByName(e)},isConjunctiveFacet:function(e){return this.facets.indexOf(e)>-1},isFacetRefined:function(e,t){return!!this.isConjunctiveFacet(e)&&f.isRefined(this.facetsRefinements,e,t)},isExcludeRefined:function(e,t){return!!this.isConjunctiveFacet(e)&&f.isRefined(this.facetsExcludes,e,t)},isDisjunctiveFacetRefined:function(e,t){return!!this.isDisjunctiveFacet(e)&&f.isRefined(this.disjunctiveFacetsRefinements,e,t)},isHierarchicalFacetRefined:function(e,t){if(!this.isHierarchicalFacet(e))return!1;var r=this.getHierarchicalRefinement(e);return t?-1!==r.indexOf(t):r.length>0},isNumericRefined:function(e,t,r){if(void 0===r&&void 0===t)return Boolean(this.numericRefinements[e]);var n=this.numericRefinements[e]&&void 0!==this.numericRefinements[e][t];if(void 0===r||!n)return n;var a,s,c=u(r),o=void 0!==(a=this.numericRefinements[e][t],s=c,i(a,(function(e){return l(e,s)})));return n&&o},isTagRefined:function(e){return-1!==this.tagRefinements.indexOf(e)},getRefinedDisjunctiveFacets:function(){var e=this,t=a(Object.keys(this.numericRefinements).filter((function(t){return Object.keys(e.numericRefinements[t]).length>0})),this.disjunctiveFacets);return Object.keys(this.disjunctiveFacetsRefinements).filter((function(t){return e.disjunctiveFacetsRefinements[t].length>0})).concat(t).concat(this.getRefinedHierarchicalFacets()).sort()},getRefinedHierarchicalFacets:function(){var e=this;return a(this.hierarchicalFacets.map((function(e){return e.name})),Object.keys(this.hierarchicalFacetsRefinements).filter((function(t){return e.hierarchicalFacetsRefinements[t].length>0}))).sort()},getUnrefinedDisjunctiveFacets:function(){var e=this.getRefinedDisjunctiveFacets();return this.disjunctiveFacets.filter((function(t){return-1===e.indexOf(t)}))},managedParameters:["index","facets","disjunctiveFacets","facetsRefinements","hierarchicalFacets","facetsExcludes","disjunctiveFacetsRefinements","numericRefinements","tagRefinements","hierarchicalFacetsRefinements"],getQueryParams:function(){var e=this.managedParameters,t={},r=this;return Object.keys(this).forEach((function(n){var i=r[n];-1===e.indexOf(n)&&void 0!==i&&(t[n]=i)})),t},setQueryParameter:function(e,t){if(this[e]===t)return this;var r={};return r[e]=t,this.setQueryParameters(r)},setQueryParameters:function(e){if(!e)return this;var t=m.validate(this,e);if(t)throw t;var r=this,n=m._parseNumbers(e),i=Object.keys(this).reduce((function(e,t){return e[t]=r[t],e}),{}),a=Object.keys(n).reduce((function(e,t){var r=void 0!==e[t],i=void 0!==n[t];return r&&!i?o(e,[t]):(i&&(e[t]=n[t]),e)}),i);return new this.constructor(a)},resetPage:function(){return void 0===this.page?this:this.setPage(0)},_getHierarchicalFacetSortBy:function(e){return e.sortBy||["isRefined:desc","name:asc"]},_getHierarchicalFacetSeparator:function(e){return e.separator||" > "},_getHierarchicalRootPath:function(e){return e.rootPath||null},_getHierarchicalShowParentLevel:function(e){return"boolean"!=typeof e.showParentLevel||e.showParentLevel},getHierarchicalFacetByName:function(e){return i(this.hierarchicalFacets,(function(t){return t.name===e}))},getHierarchicalFacetBreadcrumb:function(e){if(!this.isHierarchicalFacet(e))return[];var t=this.getHierarchicalRefinement(e)[0];if(!t)return[];var r=this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(e));return t.split(r).map((function(e){return e.trim()}))},toString:function(){return JSON.stringify(this,null,2)}},e.exports=m},6673:(e,t,r)=>{"use strict";e.exports=function(e){return function(t,r){var n=e.hierarchicalFacets[r],u=e.hierarchicalFacetsRefinements[n.name]&&e.hierarchicalFacetsRefinements[n.name][0]||"",h=e._getHierarchicalFacetSeparator(n),f=e._getHierarchicalRootPath(n),l=e._getHierarchicalShowParentLevel(n),m=a(e._getHierarchicalFacetSortBy(n)),d=t.every((function(e){return e.exhaustive})),p=function(e,t,r,n,a){return function(u,h,f){var l=u;if(f>0){var m=0;for(l=u;m{"use strict";var n=r(8965),i=r(9110),a=r(2909),s=r(849),c=r(3917),o=r(7577),u=r(4728),h=r(8601),f=a.escapeFacetValue,l=a.unescapeFacetValue,m=r(6673);function d(e){var t={};return e.forEach((function(e,r){t[e]=r})),t}function p(e,t,r){t&&t[r]&&(e.stats=t[r])}function v(e,t,r){var a=t[0];this._rawResults=t;var o=this;Object.keys(a).forEach((function(e){o[e]=a[e]}));var h=u({persistHierarchicalRootCount:!1},r);Object.keys(h).forEach((function(e){o[e]=h[e]})),this.processingTimeMS=t.reduce((function(e,t){return void 0===t.processingTimeMS?e:e+t.processingTimeMS}),0),this.disjunctiveFacets=[],this.hierarchicalFacets=e.hierarchicalFacets.map((function(){return[]})),this.facets=[];var f=e.getRefinedDisjunctiveFacets(),v=d(e.facets),g=d(e.disjunctiveFacets),y=1,R=a.facets||{};Object.keys(R).forEach((function(t){var r,n,i=R[t],u=(r=e.hierarchicalFacets,n=t,s(r,(function(e){return(e.attributes||[]).indexOf(n)>-1})));if(u){var h=u.attributes.indexOf(t),f=c(e.hierarchicalFacets,(function(e){return e.name===u.name}));o.hierarchicalFacets[f][h]={attribute:t,data:i,exhaustive:a.exhaustiveFacetsCount}}else{var l,m=-1!==e.disjunctiveFacets.indexOf(t),d=-1!==e.facets.indexOf(t);m&&(l=g[t],o.disjunctiveFacets[l]={name:t,data:i,exhaustive:a.exhaustiveFacetsCount},p(o.disjunctiveFacets[l],a.facets_stats,t)),d&&(l=v[t],o.facets[l]={name:t,data:i,exhaustive:a.exhaustiveFacetsCount},p(o.facets[l],a.facets_stats,t))}})),this.hierarchicalFacets=n(this.hierarchicalFacets),f.forEach((function(r){var n=t[y],s=n&&n.facets?n.facets:{},h=e.getHierarchicalFacetByName(r);Object.keys(s).forEach((function(t){var r,f=s[t];if(h){r=c(e.hierarchicalFacets,(function(e){return e.name===h.name}));var m=c(o.hierarchicalFacets[r],(function(e){return e.attribute===t}));if(-1===m)return;o.hierarchicalFacets[r][m].data=u({},o.hierarchicalFacets[r][m].data,f)}else{r=g[t];var d=a.facets&&a.facets[t]||{};o.disjunctiveFacets[r]={name:t,data:i({},f,d),exhaustive:n.exhaustiveFacetsCount},p(o.disjunctiveFacets[r],n.facets_stats,t),e.disjunctiveFacetsRefinements[t]&&e.disjunctiveFacetsRefinements[t].forEach((function(n){!o.disjunctiveFacets[r].data[n]&&e.disjunctiveFacetsRefinements[t].indexOf(l(n))>-1&&(o.disjunctiveFacets[r].data[n]=0)}))}})),y++})),e.getRefinedHierarchicalFacets().forEach((function(r){var n=e.getHierarchicalFacetByName(r),a=e._getHierarchicalFacetSeparator(n),s=e.getHierarchicalRefinement(r);0===s.length||s[0].split(a).length<2||t.slice(y).forEach((function(t){var r=t&&t.facets?t.facets:{};Object.keys(r).forEach((function(t){var u=r[t],h=c(e.hierarchicalFacets,(function(e){return e.name===n.name})),f=c(o.hierarchicalFacets[h],(function(e){return e.attribute===t}));if(-1!==f){var l={};if(s.length>0&&!o.persistHierarchicalRootCount){var m=s[0].split(a)[0];l[m]=o.hierarchicalFacets[h][f].data[m]}o.hierarchicalFacets[h][f].data=i(l,u,o.hierarchicalFacets[h][f].data)}})),y++}))})),Object.keys(e.facetsExcludes).forEach((function(t){var r=e.facetsExcludes[t],n=v[t];o.facets[n]={name:t,data:R[t],exhaustive:a.exhaustiveFacetsCount},r.forEach((function(e){o.facets[n]=o.facets[n]||{name:t},o.facets[n].data=o.facets[n].data||{},o.facets[n].data[e]=0}))})),this.hierarchicalFacets=this.hierarchicalFacets.map(m(e)),this.facets=n(this.facets),this.disjunctiveFacets=n(this.disjunctiveFacets),this._state=e}function g(e,t){function r(e){return e.name===t}if(e._state.isConjunctiveFacet(t)){var n=s(e.facets,r);return n?Object.keys(n.data).map((function(r){var i=f(r);return{name:r,escapedValue:i,count:n.data[r],isRefined:e._state.isFacetRefined(t,i),isExcluded:e._state.isExcludeRefined(t,r)}})):[]}if(e._state.isDisjunctiveFacet(t)){var i=s(e.disjunctiveFacets,r);return i?Object.keys(i.data).map((function(r){var n=f(r);return{name:r,escapedValue:n,count:i.data[r],isRefined:e._state.isDisjunctiveFacetRefined(t,n)}})):[]}if(e._state.isHierarchicalFacet(t)){var a=s(e.hierarchicalFacets,r);if(!a)return a;var c=e._state.getHierarchicalFacetByName(t),o=e._state._getHierarchicalFacetSeparator(c),u=l(e._state.getHierarchicalRefinement(t)[0]||"");0===u.indexOf(c.rootPath)&&(u=u.replace(c.rootPath+o,""));var h=u.split(o);return h.unshift(t),y(a,h,0),a}}function y(e,t,r){e.isRefined=e.name===(t[r]&&t[r].trim()),e.data&&e.data.forEach((function(e){y(e,t,r+1)}))}function R(e,t,r,n){if(n=n||0,Array.isArray(t))return e(t,r[n]);if(!t.data||0===t.data.length)return t;var a=t.data.map((function(t){return R(e,t,r,n+1)})),s=e(a,r[n]);return i({data:s},t)}function F(e,t){var r=s(e,(function(e){return e.name===t}));return r&&r.stats}function b(e,t,r,n,i){var a=s(i,(function(e){return e.name===r})),c=a&&a.data&&a.data[n]?a.data[n]:0,o=a&&a.exhaustive||!1;return{type:t,attributeName:r,name:n,count:c,exhaustive:o}}v.prototype.getFacetByName=function(e){function t(t){return t.name===e}return s(this.facets,t)||s(this.disjunctiveFacets,t)||s(this.hierarchicalFacets,t)},v.DEFAULT_SORT=["isRefined:desc","count:desc","name:asc"],v.prototype.getFacetValues=function(e,t){var r=g(this,e);if(r){var n,a=i({},t,{sortBy:v.DEFAULT_SORT,facetOrdering:!(t&&t.sortBy)}),s=this;if(Array.isArray(r))n=[e];else n=s._state.getHierarchicalFacetByName(r.name).attributes;return R((function(e,t){if(a.facetOrdering){var r=function(e,t){return e.renderingContent&&e.renderingContent.facetOrdering&&e.renderingContent.facetOrdering.values&&e.renderingContent.facetOrdering.values[t]}(s,t);if(r)return function(e,t){var r=[],n=[],i=(t.order||[]).reduce((function(e,t,r){return e[t]=r,e}),{});e.forEach((function(e){var t=e.path||e.name;void 0!==i[t]?r[i[t]]=e:n.push(e)})),r=r.filter((function(e){return e}));var a,s=t.sortRemainingBy;return"hidden"===s?r:(a="alpha"===s?[["path","name"],["asc","asc"]]:[["count"],["desc"]],r.concat(h(n,a[0],a[1])))}(e,r)}if(Array.isArray(a.sortBy)){var n=o(a.sortBy,v.DEFAULT_SORT);return h(e,n[0],n[1])}if("function"==typeof a.sortBy)return function(e,t){return t.sort(e)}(a.sortBy,e);throw new Error("options.sortBy is optional but if defined it must be either an array of string (predicates) or a sorting function")}),r,n)}},v.prototype.getFacetStats=function(e){return this._state.isConjunctiveFacet(e)?F(this.facets,e):this._state.isDisjunctiveFacet(e)?F(this.disjunctiveFacets,e):void 0},v.prototype.getRefinements=function(){var e=this._state,t=this,r=[];return Object.keys(e.facetsRefinements).forEach((function(n){e.facetsRefinements[n].forEach((function(i){r.push(b(e,"facet",n,i,t.facets))}))})),Object.keys(e.facetsExcludes).forEach((function(n){e.facetsExcludes[n].forEach((function(i){r.push(b(e,"exclude",n,i,t.facets))}))})),Object.keys(e.disjunctiveFacetsRefinements).forEach((function(n){e.disjunctiveFacetsRefinements[n].forEach((function(i){r.push(b(e,"disjunctive",n,i,t.disjunctiveFacets))}))})),Object.keys(e.hierarchicalFacetsRefinements).forEach((function(n){e.hierarchicalFacetsRefinements[n].forEach((function(i){r.push(function(e,t,r,n){var i=e.getHierarchicalFacetByName(t),a=e._getHierarchicalFacetSeparator(i),c=r.split(a),o=s(n,(function(e){return e.name===t})),u=c.reduce((function(e,t){var r=e&&s(e.data,(function(e){return e.name===t}));return void 0!==r?r:e}),o),h=u&&u.count||0,f=u&&u.exhaustive||!1,l=u&&u.path||"";return{type:"hierarchical",attributeName:t,name:l,count:h,exhaustive:f}}(e,n,i,t.hierarchicalFacets))}))})),Object.keys(e.numericRefinements).forEach((function(t){var n=e.numericRefinements[t];Object.keys(n).forEach((function(e){n[e].forEach((function(n){r.push({type:"numeric",attributeName:t,name:n,numericValue:n,operator:e})}))}))})),e.tagRefinements.forEach((function(e){r.push({type:"tag",attributeName:"_tags",name:e})})),r},e.exports=v},6571:(e,t,r)=>{"use strict";var n=r(2733),i=r(6732),a=r(2909).escapeFacetValue,s=r(3014),c=r(4728),o=r(317),u=r(1383),h=r(9127),f=r(2223),l=r(9228),m=r(3371),d=r(7691),p=r(7749),v=r(6938);function g(e,t,r,n){"function"==typeof e.addAlgoliaAgent&&e.addAlgoliaAgent("JS Helper ("+v+")"),this.setClient(e);var i=r||{};i.index=t,this.state=m.make(i),this.recommendState=new h({params:i.recommendState}),this.lastResults=null,this.lastRecommendResults=null,this._queryId=0,this._recommendQueryId=0,this._lastQueryIdReceived=-1,this._lastRecommendQueryIdReceived=-1,this.derivedHelpers=[],this._currentNbQueries=0,this._currentNbRecommendQueries=0,this._searchResultsOptions=n,this.recommendCache={}}function y(e){if(e<0)throw new Error("Page requested below 0.");return this._change({state:this.state.setPage(e),isPageReset:!1}),this}function R(){return this.state.page}s(g,n),g.prototype.search=function(){return this._search({onlyWithDerivedHelpers:!1}),this},g.prototype.searchOnlyWithDerivedHelpers=function(){return this._search({onlyWithDerivedHelpers:!0}),this},g.prototype.recommend=function(){return this._recommend(),this},g.prototype.getQuery=function(){var e=this.state;return l._getHitsSearchParams(e)},g.prototype.searchOnce=function(e,t){var r=e?this.state.setQueryParameters(e):this.state,n=l._getQueries(r.index,r),i=this;if(this._currentNbQueries++,this.emit("searchOnce",{state:r}),!t)return this.client.search(n).then((function(e){return i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),{content:new d(r,e.results),state:r,_originalResponse:e}}),(function(e){throw i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),e}));this.client.search(n).then((function(e){i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),t(null,new d(r,e.results),r)})).catch((function(e){i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),t(e,null,r)}))},g.prototype.findAnswers=function(e){console.warn("[algoliasearch-helper] answers is no longer supported");var t=this.state,r=this.derivedHelpers[0];if(!r)return Promise.resolve([]);var n=r.getModifiedState(t),i=c({attributesForPrediction:e.attributesForPrediction,nbHits:e.nbHits},{params:u(l._getHitsSearchParams(n),["attributesToSnippet","hitsPerPage","restrictSearchableAttributes","snippetEllipsisText"])}),a="search for answers was called, but this client does not have a function client.initIndex(index).findAnswers";if("function"!=typeof this.client.initIndex)throw new Error(a);var s=this.client.initIndex(n.index);if("function"!=typeof s.findAnswers)throw new Error(a);return s.findAnswers(n.query,e.queryLanguages,i)},g.prototype.searchForFacetValues=function(e,t,r,n){var i="function"==typeof this.client.searchForFacetValues,s="function"==typeof this.client.initIndex;if(!i&&!s&&"function"!=typeof this.client.search)throw new Error("search for facet values (searchable) was called, but this client does not have a function client.searchForFacetValues or client.initIndex(index).searchForFacetValues");var c=this.state.setQueryParameters(n||{}),o=c.isDisjunctiveFacet(e),u=l.getSearchForFacetQuery(e,t,r,c);this._currentNbQueries++;var h,f=this;return i?h=this.client.searchForFacetValues([{indexName:c.index,params:u}]):s?h=this.client.initIndex(c.index).searchForFacetValues(u):(delete u.facetName,h=this.client.search([{type:"facet",facet:e,indexName:c.index,params:u}]).then((function(e){return e.results[0]}))),this.emit("searchForFacetValues",{state:c,facet:e,query:t}),h.then((function(t){return f._currentNbQueries--,0===f._currentNbQueries&&f.emit("searchQueueEmpty"),(t=Array.isArray(t)?t[0]:t).facetHits.forEach((function(t){t.escapedValue=a(t.value),t.isRefined=o?c.isDisjunctiveFacetRefined(e,t.escapedValue):c.isFacetRefined(e,t.escapedValue)})),t}),(function(e){throw f._currentNbQueries--,0===f._currentNbQueries&&f.emit("searchQueueEmpty"),e}))},g.prototype.setQuery=function(e){return this._change({state:this.state.resetPage().setQuery(e),isPageReset:!0}),this},g.prototype.clearRefinements=function(e){return this._change({state:this.state.resetPage().clearRefinements(e),isPageReset:!0}),this},g.prototype.clearTags=function(){return this._change({state:this.state.resetPage().clearTags(),isPageReset:!0}),this},g.prototype.addDisjunctiveFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addDisjunctiveFacetRefinement(e,t),isPageReset:!0}),this},g.prototype.addDisjunctiveRefine=function(){return this.addDisjunctiveFacetRefinement.apply(this,arguments)},g.prototype.addHierarchicalFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addHierarchicalFacetRefinement(e,t),isPageReset:!0}),this},g.prototype.addNumericRefinement=function(e,t,r){return this._change({state:this.state.resetPage().addNumericRefinement(e,t,r),isPageReset:!0}),this},g.prototype.addFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addFacetRefinement(e,t),isPageReset:!0}),this},g.prototype.addRefine=function(){return this.addFacetRefinement.apply(this,arguments)},g.prototype.addFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().addExcludeRefinement(e,t),isPageReset:!0}),this},g.prototype.addExclude=function(){return this.addFacetExclusion.apply(this,arguments)},g.prototype.addTag=function(e){return this._change({state:this.state.resetPage().addTagRefinement(e),isPageReset:!0}),this},g.prototype.addFrequentlyBoughtTogether=function(e){return this._recommendChange({state:this.recommendState.addFrequentlyBoughtTogether(e)}),this},g.prototype.addRelatedProducts=function(e){return this._recommendChange({state:this.recommendState.addRelatedProducts(e)}),this},g.prototype.addTrendingItems=function(e){return this._recommendChange({state:this.recommendState.addTrendingItems(e)}),this},g.prototype.addTrendingFacets=function(e){return this._recommendChange({state:this.recommendState.addTrendingFacets(e)}),this},g.prototype.addLookingSimilar=function(e){return this._recommendChange({state:this.recommendState.addLookingSimilar(e)}),this},g.prototype.removeNumericRefinement=function(e,t,r){return this._change({state:this.state.resetPage().removeNumericRefinement(e,t,r),isPageReset:!0}),this},g.prototype.removeDisjunctiveFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().removeDisjunctiveFacetRefinement(e,t),isPageReset:!0}),this},g.prototype.removeDisjunctiveRefine=function(){return this.removeDisjunctiveFacetRefinement.apply(this,arguments)},g.prototype.removeHierarchicalFacetRefinement=function(e){return this._change({state:this.state.resetPage().removeHierarchicalFacetRefinement(e),isPageReset:!0}),this},g.prototype.removeFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().removeFacetRefinement(e,t),isPageReset:!0}),this},g.prototype.removeRefine=function(){return this.removeFacetRefinement.apply(this,arguments)},g.prototype.removeFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().removeExcludeRefinement(e,t),isPageReset:!0}),this},g.prototype.removeExclude=function(){return this.removeFacetExclusion.apply(this,arguments)},g.prototype.removeTag=function(e){return this._change({state:this.state.resetPage().removeTagRefinement(e),isPageReset:!0}),this},g.prototype.removeFrequentlyBoughtTogether=function(e){return this._recommendChange({state:this.recommendState.removeParams(e)}),this},g.prototype.removeRelatedProducts=function(e){return this._recommendChange({state:this.recommendState.removeParams(e)}),this},g.prototype.removeTrendingItems=function(e){return this._recommendChange({state:this.recommendState.removeParams(e)}),this},g.prototype.removeTrendingFacets=function(e){return this._recommendChange({state:this.recommendState.removeParams(e)}),this},g.prototype.removeLookingSimilar=function(e){return this._recommendChange({state:this.recommendState.removeParams(e)}),this},g.prototype.toggleFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().toggleExcludeFacetRefinement(e,t),isPageReset:!0}),this},g.prototype.toggleExclude=function(){return this.toggleFacetExclusion.apply(this,arguments)},g.prototype.toggleRefinement=function(e,t){return this.toggleFacetRefinement(e,t)},g.prototype.toggleFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().toggleFacetRefinement(e,t),isPageReset:!0}),this},g.prototype.toggleRefine=function(){return this.toggleFacetRefinement.apply(this,arguments)},g.prototype.toggleTag=function(e){return this._change({state:this.state.resetPage().toggleTagRefinement(e),isPageReset:!0}),this},g.prototype.nextPage=function(){var e=this.state.page||0;return this.setPage(e+1)},g.prototype.previousPage=function(){var e=this.state.page||0;return this.setPage(e-1)},g.prototype.setCurrentPage=y,g.prototype.setPage=y,g.prototype.setIndex=function(e){return this._change({state:this.state.resetPage().setIndex(e),isPageReset:!0}),this},g.prototype.setQueryParameter=function(e,t){return this._change({state:this.state.resetPage().setQueryParameter(e,t),isPageReset:!0}),this},g.prototype.setState=function(e){return this._change({state:m.make(e),isPageReset:!1}),this},g.prototype.overrideStateWithoutTriggeringChangeEvent=function(e){return this.state=new m(e),this},g.prototype.hasRefinements=function(e){return!!o(this.state.getNumericRefinements(e))||(this.state.isConjunctiveFacet(e)?this.state.isFacetRefined(e):this.state.isDisjunctiveFacet(e)?this.state.isDisjunctiveFacetRefined(e):!!this.state.isHierarchicalFacet(e)&&this.state.isHierarchicalFacetRefined(e))},g.prototype.isExcluded=function(e,t){return this.state.isExcludeRefined(e,t)},g.prototype.isDisjunctiveRefined=function(e,t){return this.state.isDisjunctiveFacetRefined(e,t)},g.prototype.hasTag=function(e){return this.state.isTagRefined(e)},g.prototype.isTagRefined=function(){return this.hasTagRefinements.apply(this,arguments)},g.prototype.getIndex=function(){return this.state.index},g.prototype.getCurrentPage=R,g.prototype.getPage=R,g.prototype.getTags=function(){return this.state.tagRefinements},g.prototype.getRefinements=function(e){var t=[];if(this.state.isConjunctiveFacet(e))this.state.getConjunctiveRefinements(e).forEach((function(e){t.push({value:e,type:"conjunctive"})})),this.state.getExcludeRefinements(e).forEach((function(e){t.push({value:e,type:"exclude"})}));else if(this.state.isDisjunctiveFacet(e)){this.state.getDisjunctiveRefinements(e).forEach((function(e){t.push({value:e,type:"disjunctive"})}))}var r=this.state.getNumericRefinements(e);return Object.keys(r).forEach((function(e){var n=r[e];t.push({value:n,operator:e,type:"numeric"})})),t},g.prototype.getNumericRefinement=function(e,t){return this.state.getNumericRefinement(e,t)},g.prototype.getHierarchicalFacetBreadcrumb=function(e){return this.state.getHierarchicalFacetBreadcrumb(e)},g.prototype._search=function(e){var t=this.state,r=[],n=[];e.onlyWithDerivedHelpers||(n=l._getQueries(t.index,t),r.push({state:t,queriesCount:n.length,helper:this}),this.emit("search",{state:t,results:this.lastResults}));var i=this.derivedHelpers.map((function(e){var n=e.getModifiedState(t),i=n.index?l._getQueries(n.index,n):[];return r.push({state:n,queriesCount:i.length,helper:e}),e.emit("search",{state:n,results:e.lastResults}),i})),a=Array.prototype.concat.apply(n,i),s=this._queryId++;if(this._currentNbQueries++,!a.length)return Promise.resolve({results:[]}).then(this._dispatchAlgoliaResponse.bind(this,r,s));try{this.client.search(a).then(this._dispatchAlgoliaResponse.bind(this,r,s)).catch(this._dispatchAlgoliaError.bind(this,s))}catch(c){this.emit("error",{error:c})}},g.prototype._recommend=function(){var e=this.state,t=this.recommendState,r=this.getIndex(),n=[{state:t,index:r,helper:this}],i=t.params.map((function(e){return e.$$id}));this.emit("fetch",{recommend:{state:t,results:this.lastRecommendResults}});var a=this.recommendCache,s=this.derivedHelpers.map((function(t){var r=t.getModifiedState(e).index;if(!r)return[];var s=t.getModifiedRecommendState(new h);return n.push({state:s,index:r,helper:t}),i=Array.prototype.concat.apply(i,s.params.map((function(e){return e.$$id}))),t.emit("fetch",{recommend:{state:s,results:t.lastRecommendResults}}),s._buildQueries(r,a)})),c=Array.prototype.concat.apply(this.recommendState._buildQueries(r,a),s);if(0!==c.length)if(c.length>0&&void 0===this.client.getRecommendations)console.warn("Please update algoliasearch/lite to the latest version in order to use recommend widgets.");else{var o=this._recommendQueryId++;this._currentNbRecommendQueries++;try{this.client.getRecommendations(c).then(this._dispatchRecommendResponse.bind(this,o,n,i)).catch(this._dispatchRecommendError.bind(this,o))}catch(u){this.emit("error",{error:u})}}},g.prototype._dispatchAlgoliaResponse=function(e,t,r){var n=this;if(!(t0},g.prototype._change=function(e){var t=e.state,r=e.isPageReset;t!==this.state&&(this.state=t,this.emit("change",{state:this.state,results:this.lastResults,isPageReset:r}))},g.prototype._recommendChange=function(e){var t=e.state;t!==this.recommendState&&(this.recommendState=t,this.emit("recommend:change",{search:{results:this.lastResults,state:this.state},recommend:{results:this.lastRecommendResults,state:this.recommendState}}))},g.prototype.clearCache=function(){return this.client.clearCache&&this.client.clearCache(),this},g.prototype.setClient=function(e){return this.client===e||("function"==typeof e.addAlgoliaAgent&&e.addAlgoliaAgent("JS Helper ("+v+")"),this.client=e),this},g.prototype.getClient=function(){return this.client},g.prototype.derive=function(e,t){var r=new i(this,e,t);return this.derivedHelpers.push(r),r},g.prototype.detachDerivedHelper=function(e){var t=this.derivedHelpers.indexOf(e);if(-1===t)throw new Error("Derived helper already detached");this.derivedHelpers.splice(t,1)},g.prototype.hasPendingRequests=function(){return this._currentNbQueries>0},e.exports=g},8965:e=>{"use strict";e.exports=function(e){return Array.isArray(e)?e.filter(Boolean):[]}},9110:e=>{"use strict";e.exports=function(){return Array.prototype.slice.call(arguments).reduceRight((function(e,t){return Object.keys(Object(t)).forEach((function(r){void 0!==t[r]&&(void 0!==e[r]&&delete e[r],e[r]=t[r])})),e}),{})}},2909:e=>{"use strict";e.exports={escapeFacetValue:function(e){return"string"!=typeof e?e:String(e).replace(/^-/,"\\-")},unescapeFacetValue:function(e){return"string"!=typeof e?e:e.replace(/^\\-/,"-")}}},849:e=>{"use strict";e.exports=function(e,t){if(Array.isArray(e))for(var r=0;r{"use strict";e.exports=function(e,t){if(!Array.isArray(e))return-1;for(var r=0;r{e.exports=function(e){return e.reduce((function(e,t){return e.concat(t)}),[])}},7577:(e,t,r)=>{"use strict";var n=r(849);e.exports=function(e,t){var r=(t||[]).map((function(e){return e.split(":")}));return e.reduce((function(e,t){var i=t.split(":"),a=n(r,(function(e){return e[0]===i[0]}));return i.length>1||!a?(e[0].push(i[0]),e[1].push(i[1]),e):(e[0].push(a[0]),e[1].push(a[1]),e)}),[[],[]])}},3014:e=>{"use strict";e.exports=function(e,t){e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}},4843:e=>{"use strict";e.exports=function(e,t){return e.filter((function(r,n){return t.indexOf(r)>-1&&e.indexOf(r)===n}))}},4728:e=>{"use strict";function t(e){return"function"==typeof e||Array.isArray(e)||"[object Object]"===Object.prototype.toString.call(e)}function r(e,n){if(e===n)return e;for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)&&"__proto__"!==i&&"constructor"!==i){var a=n[i],s=e[i];void 0!==s&&void 0===a||(t(s)&&t(a)?e[i]=r(s,a):e[i]="object"==typeof(c=a)&&null!==c?r(Array.isArray(c)?[]:{},c):c)}var c;return e}e.exports=function(e){t(e)||(e={});for(var n=1,i=arguments.length;n{"use strict";e.exports=function(e){return e&&Object.keys(e).length>0}},1383:e=>{"use strict";e.exports=function(e,t){if(null===e)return{};var r,n,i={},a=Object.keys(e);for(n=0;n=0||(i[r]=e[r]);return i}},8601:e=>{"use strict";function t(e,t){if(e!==t){var r=void 0!==e,n=null===e,i=void 0!==t,a=null===t;if(!a&&e>t||n&&i||!r)return 1;if(!n&&e=n.length?a:"desc"===n[i]?-a:a}return e.index-r.index})),i.map((function(e){return e.value}))}},7507:e=>{"use strict";e.exports=function e(t){if("number"==typeof t)return t;if("string"==typeof t)return parseFloat(t);if(Array.isArray(t))return t.map(e);throw new Error("The value should be a number, a parsable string or an array of those.")}},9228:(e,t,r)=>{"use strict";var n=r(4728);function i(e){return Object.keys(e).sort().reduce((function(t,r){return t[r]=e[r],t}),{})}var a={_getQueries:function(e,t){var r=[];return r.push({indexName:e,params:a._getHitsSearchParams(t)}),t.getRefinedDisjunctiveFacets().forEach((function(n){r.push({indexName:e,params:a._getDisjunctiveFacetSearchParams(t,n)})})),t.getRefinedHierarchicalFacets().forEach((function(n){var i=t.getHierarchicalFacetByName(n),s=t.getHierarchicalRefinement(n),c=t._getHierarchicalFacetSeparator(i);if(s.length>0&&s[0].split(c).length>1){var o=s[0].split(c).slice(0,-1).reduce((function(e,t,r){return e.concat({attribute:i.attributes[r],value:0===r?t:[e[e.length-1].value,t].join(c)})}),[]);o.forEach((function(n,s){var c=a._getDisjunctiveFacetSearchParams(t,n.attribute,0===s);function u(e){return i.attributes.some((function(t){return t===e.split(":")[0]}))}var h=(c.facetFilters||[]).reduce((function(e,t){if(Array.isArray(t)){var r=t.filter((function(e){return!u(e)}));r.length>0&&e.push(r)}return"string"!=typeof t||u(t)||e.push(t),e}),[]),f=o[s-1];c.facetFilters=s>0?h.concat(f.attribute+":"+f.value):h.length>0?h:void 0,r.push({indexName:e,params:c})}))}})),r},_getHitsSearchParams:function(e){var t=e.facets.concat(e.disjunctiveFacets).concat(a._getHitsHierarchicalFacetsAttributes(e)).sort(),r=a._getFacetFilters(e),s=a._getNumericFilters(e),c=a._getTagFilters(e),o={facets:t.indexOf("*")>-1?["*"]:t,tagFilters:c};return r.length>0&&(o.facetFilters=r),s.length>0&&(o.numericFilters=s),i(n({},e.getQueryParams(),o))},_getDisjunctiveFacetSearchParams:function(e,t,r){var s=a._getFacetFilters(e,t,r),c=a._getNumericFilters(e,t),o=a._getTagFilters(e),u={hitsPerPage:0,page:0,analytics:!1,clickAnalytics:!1};o.length>0&&(u.tagFilters=o);var h=e.getHierarchicalFacetByName(t);return u.facets=h?a._getDisjunctiveHierarchicalFacetAttribute(e,h,r):t,c.length>0&&(u.numericFilters=c),s.length>0&&(u.facetFilters=s),i(n({},e.getQueryParams(),u))},_getNumericFilters:function(e,t){if(e.numericFilters)return e.numericFilters;var r=[];return Object.keys(e.numericRefinements).forEach((function(n){var i=e.numericRefinements[n]||{};Object.keys(i).forEach((function(e){var a=i[e]||[];t!==n&&a.forEach((function(t){if(Array.isArray(t)){var i=t.map((function(t){return n+e+t}));r.push(i)}else r.push(n+e+t)}))}))})),r},_getTagFilters:function(e){return e.tagFilters?e.tagFilters:e.tagRefinements.join(",")},_getFacetFilters:function(e,t,r){var n=[],i=e.facetsRefinements||{};Object.keys(i).sort().forEach((function(e){(i[e]||[]).slice().sort().forEach((function(t){n.push(e+":"+t)}))}));var a=e.facetsExcludes||{};Object.keys(a).sort().forEach((function(e){(a[e]||[]).sort().forEach((function(t){n.push(e+":-"+t)}))}));var s=e.disjunctiveFacetsRefinements||{};Object.keys(s).sort().forEach((function(e){var r=s[e]||[];if(e!==t&&r&&0!==r.length){var i=[];r.slice().sort().forEach((function(t){i.push(e+":"+t)})),n.push(i)}}));var c=e.hierarchicalFacetsRefinements||{};return Object.keys(c).sort().forEach((function(i){var a=(c[i]||[])[0];if(void 0!==a){var s,o,u=e.getHierarchicalFacetByName(i),h=e._getHierarchicalFacetSeparator(u),f=e._getHierarchicalRootPath(u);if(t===i){if(-1===a.indexOf(h)||!f&&!0===r||f&&f.split(h).length===a.split(h).length)return;f?(o=f.split(h).length-1,a=f):(o=a.split(h).length-2,a=a.slice(0,a.lastIndexOf(h))),s=u.attributes[o]}else o=a.split(h).length-1,s=u.attributes[o];s&&n.push([s+":"+a])}})),n},_getHitsHierarchicalFacetsAttributes:function(e){return e.hierarchicalFacets.reduce((function(t,r){var n=e.getHierarchicalRefinement(r.name)[0];if(!n)return t.push(r.attributes[0]),t;var i=e._getHierarchicalFacetSeparator(r),a=n.split(i).length,s=r.attributes.slice(0,a+1);return t.concat(s)}),[])},_getDisjunctiveHierarchicalFacetAttribute:function(e,t,r){var n=e._getHierarchicalFacetSeparator(t);if(!0===r){var i=e._getHierarchicalRootPath(t),a=0;return i&&(a=i.split(n).length),[t.attributes[a]]}var s=(e.getHierarchicalRefinement(t.name)[0]||"").split(n).length-1;return t.attributes.slice(0,s+1)},getSearchForFacetQuery:function(e,t,r,s){var c=s.isDisjunctiveFacet(e)?s.clearRefinements(e):s,o={facetQuery:t,facetName:e};return"number"==typeof r&&(o.maxFacetHits=r),i(n({},a._getHitsSearchParams(c),o))}};e.exports=a},2208:e=>{"use strict";e.exports=function(e){return null!==e&&/^[a-zA-Z0-9_-]{1,64}$/.test(e)}},7749:(e,t,r)=>{"use strict";var n=r(849),i=r(8657);e.exports=function(e){var t={};return e.forEach((function(e){e.forEach((function(e,r){t[e.objectID]?t[e.objectID]={indexSum:t[e.objectID].indexSum+r,count:t[e.objectID].count+1}:t[e.objectID]={indexSum:r,count:1}}))})),function(e,t){var r=[];return Object.keys(e).forEach((function(n){e[n].count<2&&(e[n].indexSum+=100),r.push({objectID:n,avgOfIndices:e[n].indexSum/t})})),r.sort((function(e,t){return e.avgOfIndices>t.avgOfIndices?1:-1}))}(t,e.length).reduce((function(t,r){var a=n(i(e),(function(e){return e.objectID===r.objectID}));return a?t.concat(a):t}),[])}},6938:e=>{"use strict";e.exports="3.20.0"},3643:function(e){e.exports=function(){"use strict";function e(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function t(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function r(r){for(var n=1;n=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var r=[],n=!0,i=!1,a=void 0;try{for(var s,c=e[Symbol.iterator]();!(n=(s=c.next()).done)&&(r.push(s.value),!t||r.length!==t);n=!0);}catch(e){i=!0,a=e}finally{try{n||null==c.return||c.return()}finally{if(i)throw a}}return r}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function a(e){return function(e){if(Array.isArray(e)){for(var t=0,r=new Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then((function(){c();var t=JSON.stringify(e);return a()[t]})).then((function(e){return Promise.all([e?e.value:t(),void 0!==e])})).then((function(e){var t=i(e,2),n=t[0],a=t[1];return Promise.all([n,a||r.miss(n)])})).then((function(e){return i(e,1)[0]}))},set:function(e,t){return Promise.resolve().then((function(){var i=a();return i[JSON.stringify(e)]={timestamp:(new Date).getTime(),value:t},n().setItem(r,JSON.stringify(i)),t}))},delete:function(e){return Promise.resolve().then((function(){var t=a();delete t[JSON.stringify(e)],n().setItem(r,JSON.stringify(t))}))},clear:function(){return Promise.resolve().then((function(){n().removeItem(r)}))}}}function c(e){var t=a(e.caches),r=t.shift();return void 0===r?{get:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return t().then((function(e){return Promise.all([e,r.miss(e)])})).then((function(e){return i(e,1)[0]}))},set:function(e,t){return Promise.resolve(t)},delete:function(e){return Promise.resolve()},clear:function(){return Promise.resolve()}}:{get:function(e,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return r.get(e,n,i).catch((function(){return c({caches:t}).get(e,n,i)}))},set:function(e,n){return r.set(e,n).catch((function(){return c({caches:t}).set(e,n)}))},delete:function(e){return r.delete(e).catch((function(){return c({caches:t}).delete(e)}))},clear:function(){return r.clear().catch((function(){return c({caches:t}).clear()}))}}}function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{serializable:!0},t={};return{get:function(r,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},a=JSON.stringify(r);if(a in t)return Promise.resolve(e.serializable?JSON.parse(t[a]):t[a]);var s=n(),c=i&&i.miss||function(){return Promise.resolve()};return s.then((function(e){return c(e)})).then((function(){return s}))},set:function(r,n){return t[JSON.stringify(r)]=e.serializable?JSON.stringify(n):n,Promise.resolve(n)},delete:function(e){return delete t[JSON.stringify(e)],Promise.resolve()},clear:function(){return t={},Promise.resolve()}}}function u(e){for(var t=e.length-1;t>0;t--){var r=Math.floor(Math.random()*(t+1)),n=e[t];e[t]=e[r],e[r]=n}return e}function h(e,t){return t?(Object.keys(t).forEach((function(r){e[r]=t[r](e)})),e):e}function f(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n0?n:void 0,timeout:r.timeout||t,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var d={Read:1,Write:2,Any:3},p=1,v=2,g=3;function y(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:p;return r(r({},e),{},{status:t,lastUpdate:Date.now()})}function R(e){return"string"==typeof e?{protocol:"https",url:e,accept:d.Any}:{protocol:e.protocol||"https",url:e.url,accept:e.accept||d.Any}}var F="GET",b="POST";function P(e,t){return Promise.all(t.map((function(t){return e.get(t,(function(){return Promise.resolve(y(t))}))}))).then((function(e){var r=e.filter((function(e){return function(e){return e.status===p||Date.now()-e.lastUpdate>12e4}(e)})),n=e.filter((function(e){return function(e){return e.status===g&&Date.now()-e.lastUpdate<=12e4}(e)})),i=[].concat(a(r),a(n));return{getTimeout:function(e,t){return(0===n.length&&0===e?1:n.length+3+e)*t},statelessHosts:i.length>0?i.map((function(e){return R(e)})):t}}))}function _(e,t,n,i){var s=[],c=function(e,t){if(e.method!==F&&(void 0!==e.data||void 0!==t.data)){var n=Array.isArray(e.data)?e.data:r(r({},e.data),t.data);return JSON.stringify(n)}}(n,i),o=function(e,t){var n=r(r({},e.headers),t.headers),i={};return Object.keys(n).forEach((function(e){var t=n[e];i[e.toLowerCase()]=t})),i}(e,i),u=n.method,h=n.method!==F?{}:r(r({},n.data),i.data),f=r(r(r({"x-algolia-agent":e.userAgent.value},e.queryParameters),h),i.queryParameters),l=0,m=function t(r,a){var h=r.pop();if(void 0===h)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:O(s)};var m={data:c,headers:o,method:u,url:E(h,n.path,f),connectTimeout:a(l,e.timeouts.connect),responseTimeout:a(l,i.timeout)},d=function(e){var t={request:m,response:e,host:h,triesLeft:r.length};return s.push(t),t},p={onSuccess:function(e){return function(e){try{return JSON.parse(e.content)}catch(t){throw function(e,t){return{name:"DeserializationError",message:e,response:t}}(t.message,e)}}(e)},onRetry:function(n){var i=d(n);return n.isTimedOut&&l++,Promise.all([e.logger.info("Retryable failure",w(i)),e.hostsCache.set(h,y(h,n.isTimedOut?g:v))]).then((function(){return t(r,a)}))},onFail:function(e){throw d(e),function(e,t){var r=e.content,n=e.status,i=r;try{i=JSON.parse(r).message}catch(e){}return function(e,t,r){return{name:"ApiError",message:e,status:t,transporterStackTrace:r}}(i,n,t)}(e,O(s))}};return e.requester.send(m).then((function(e){return function(e,t){return function(e){var t=e.status;return e.isTimedOut||function(e){var t=e.isTimedOut,r=e.status;return!t&&!~~r}(e)||2!=~~(t/100)&&4!=~~(t/100)}(e)?t.onRetry(e):2==~~(e.status/100)?t.onSuccess(e):t.onFail(e)}(e,p)}))};return P(e.hostsCache,t).then((function(e){return m(a(e.statelessHosts).reverse(),e.getTimeout)}))}function j(e){var t={value:"Algolia for JavaScript (".concat(e,")"),add:function(e){var r="; ".concat(e.segment).concat(void 0!==e.version?" (".concat(e.version,")"):"");return-1===t.value.indexOf(r)&&(t.value="".concat(t.value).concat(r)),t}};return t}function E(e,t,r){var n=x(r),i="".concat(e.protocol,"://").concat(e.url,"/").concat("/"===t.charAt(0)?t.substr(1):t);return n.length&&(i+="?".concat(n)),i}function x(e){return Object.keys(e).map((function(t){return f("%s=%s",t,(r=e[t],"[object Object]"===Object.prototype.toString.call(r)||"[object Array]"===Object.prototype.toString.call(r)?JSON.stringify(e[t]):e[t]));var r})).join("&")}function O(e){return e.map((function(e){return w(e)}))}function w(e){var t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return r(r({},e),{},{request:r(r({},e.request),{},{headers:r(r({},e.request.headers),t)})})}var S=function(e){var t=e.appId,n=function(e,t,r){var n={"x-algolia-api-key":r,"x-algolia-application-id":t};return{headers:function(){return e===l.WithinHeaders?n:{}},queryParameters:function(){return e===l.WithinQueryParameters?n:{}}}}(void 0!==e.authMode?e.authMode:l.WithinHeaders,t,e.apiKey),a=function(e){var t=e.hostsCache,r=e.logger,n=e.requester,a=e.requestsCache,s=e.responsesCache,c=e.timeouts,o=e.userAgent,u=e.hosts,h=e.queryParameters,f={hostsCache:t,logger:r,requester:n,requestsCache:a,responsesCache:s,timeouts:c,userAgent:o,headers:e.headers,queryParameters:h,hosts:u.map((function(e){return R(e)})),read:function(e,t){var r=m(t,f.timeouts.read),n=function(){return _(f,f.hosts.filter((function(e){return!!(e.accept&d.Read)})),e,r)};if(!0!==(void 0!==r.cacheable?r.cacheable:e.cacheable))return n();var a={request:e,mappedRequestOptions:r,transporter:{queryParameters:f.queryParameters,headers:f.headers}};return f.responsesCache.get(a,(function(){return f.requestsCache.get(a,(function(){return f.requestsCache.set(a,n()).then((function(e){return Promise.all([f.requestsCache.delete(a),e])}),(function(e){return Promise.all([f.requestsCache.delete(a),Promise.reject(e)])})).then((function(e){var t=i(e,2);return t[0],t[1]}))}))}),{miss:function(e){return f.responsesCache.set(a,e)}})},write:function(e,t){return _(f,f.hosts.filter((function(e){return!!(e.accept&d.Write)})),e,m(t,f.timeouts.write))}};return f}(r(r({hosts:[{url:"".concat(t,"-dsn.algolia.net"),accept:d.Read},{url:"".concat(t,".algolia.net"),accept:d.Write}].concat(u([{url:"".concat(t,"-1.algolianet.com")},{url:"".concat(t,"-2.algolianet.com")},{url:"".concat(t,"-3.algolianet.com")}]))},e),{},{headers:r(r(r({},n.headers()),{"content-type":"application/x-www-form-urlencoded"}),e.headers),queryParameters:r(r({},n.queryParameters()),e.queryParameters)}));return h({transporter:a,appId:t,addAlgoliaAgent:function(e,t){a.userAgent.add({segment:e,version:t})},clearCache:function(){return Promise.all([a.requestsCache.clear(),a.responsesCache.clear()]).then((function(){}))}},e.methods)},A=function(e){return function(t,r){return t.method===F?e.transporter.read(t,r):e.transporter.write(t,r)}},N=function(e){return function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return h({transporter:e.transporter,appId:e.appId,indexName:t},r.methods)}},T=function(e){return function(t,n){var i=t.map((function(e){return r(r({},e),{},{params:x(e.params||{})})}));return e.transporter.read({method:b,path:"1/indexes/*/queries",data:{requests:i},cacheable:!0},n)}},H=function(e){return function(t,i){return Promise.all(t.map((function(t){var a=t.params,s=a.facetName,c=a.facetQuery,o=n(a,["facetName","facetQuery"]);return N(e)(t.indexName,{methods:{searchForFacetValues:k}}).searchForFacetValues(s,c,r(r({},i),o))})))}},Q=function(e){return function(t,r,n){return e.transporter.read({method:b,path:f("1/answers/%s/prediction",e.indexName),data:{query:t,queryLanguages:r},cacheable:!0},n)}},C=function(e){return function(t,r){return e.transporter.read({method:b,path:f("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},r)}},k=function(e){return function(t,r,n){return e.transporter.read({method:b,path:f("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:r},cacheable:!0},n)}},D=1,I=2,q=3,L=function(e){return function(t,n){var i=t.map((function(e){return r(r({},e),{},{threshold:e.threshold||0})}));return e.transporter.read({method:b,path:"1/indexes/*/recommendations",data:{requests:i},cacheable:!0},n)}};function V(e,t,n){var i,a={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:function(e){return new Promise((function(t){var r=new XMLHttpRequest;r.open(e.method,e.url,!0),Object.keys(e.headers).forEach((function(t){return r.setRequestHeader(t,e.headers[t])}));var n,i=function(e,n){return setTimeout((function(){r.abort(),t({status:0,content:n,isTimedOut:!0})}),1e3*e)},a=i(e.connectTimeout,"Connection timeout");r.onreadystatechange=function(){r.readyState>r.OPENED&&void 0===n&&(clearTimeout(a),n=i(e.responseTimeout,"Socket timeout"))},r.onerror=function(){0===r.status&&(clearTimeout(a),clearTimeout(n),t({content:r.responseText||"Network request failed",status:r.status,isTimedOut:!1}))},r.onload=function(){clearTimeout(a),clearTimeout(n),t({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(e.data)}))}},logger:(i=q,{debug:function(e,t){return D>=i&&console.debug(e,t),Promise.resolve()},info:function(e,t){return I>=i&&console.info(e,t),Promise.resolve()},error:function(e,t){return console.error(e,t),Promise.resolve()}}),responsesCache:o(),requestsCache:o({serializable:!1}),hostsCache:c({caches:[s({key:"".concat("4.23.3","-").concat(e)}),o()]}),userAgent:j("4.23.3").add({segment:"Browser",version:"lite"}),authMode:l.WithinQueryParameters};return S(r(r(r({},a),n),{},{methods:{search:T,searchForFacetValues:H,multipleQueries:T,multipleSearchForFacetValues:H,customRequest:A,initIndex:function(e){return function(t){return N(e)(t,{methods:{search:C,searchForFacetValues:k,findAnswers:Q}})}},getRecommendations:L}}))}return V.version="4.23.3",V}()},906:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>H});var n=r(6540),i=r(3643),a=r.n(i),s=r(4103),c=r.n(s),o=r(53),u=r(2602),h=r(4676),f=r(8193),l=r(3155),m=r(4586),d=r(4098),p=r(6225),v=r(5593),g=r(4798);const y="searchQueryInput_gKrp",R="searchVersionInput_yK3v",F="searchResultsColumn_u0zF",b="algoliaLogo_8CW0",P="algoliaLogoPathFill_P7SL",_="searchResultItem_AAMZ",j="searchResultItemHeading_Z8N+",E="searchResultItemPath_0ix4",x="searchResultItemSummary_jyET",O="searchQueryColumn_oQOT",w="searchVersionColumn_AEiZ",S="searchLogoColumn_tJ40",A="loadingSpinner_DlG9",N="loader_L7Al";const T=e=>{let{docsSearchVersionsHelpers:t}=e;const r=Object.entries(t.allDocsData).filter((e=>{let[,t]=e;return t.versions.length>1}));return n.createElement("div",{className:(0,o.A)("col","col--3","padding-left--none",w)},r.map((e=>{let[i,a]=e;const s=r.length>1?`${i}: `:"";return n.createElement("select",{key:i,onChange:e=>t.setSearchVersion(i,e.target.value),defaultValue:t.searchVersions[i],className:R},a.versions.map(((e,t)=>n.createElement("option",{key:t,label:`${s}${e.label}`,value:e.name}))))})))};const H=function(){const{siteConfig:{themeConfig:{algolia:{appId:e,apiKey:t,indexName:r}}},i18n:{currentLocale:i}}=(0,m.A)(),s=function(){const{selectMessage:e}=(0,l.Ww)();return t=>e(t,(0,g.T)({id:"theme.SearchPage.documentsFound.plurals",description:'Pluralized label for "{count} documents found". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One document found|{count} documents found"},{count:t}))}(),R=function(){const e=(0,d.Gy)(),[t,r]=(0,n.useState)((()=>Object.entries(e).reduce(((e,t)=>{let[r,n]=t;return{...e,[r]:n.versions[0].name}}),{}))),i=Object.values(e).some((e=>e.versions.length>1));return{allDocsData:e,versioningEnabled:i,searchVersions:t,setSearchVersion:(e,t)=>r((r=>({...r,[e]:t})))}}(),{searchValue:w,updateSearchPath:H}=(0,p.A)(),[Q,C]=(0,n.useState)(w),k={items:[],query:null,totalResults:null,totalPages:null,lastPage:null,hasMore:null,loading:null},[D,I]=(0,n.useReducer)(((e,t)=>{let{type:r,value:n}=t;switch(r){case"reset":return k;case"loading":return{...e,loading:!0};case"update":return Q!==n.query?e:{...n,items:0===n.lastPage?n.items:e.items.concat(n.items)};case"advance":{const t=e.totalPages>e.lastPage+1;return{...e,lastPage:t?e.lastPage+1:e.lastPage,hasMore:t}}default:return e}}),k),q=a()(e,t),L=c()(q,r,{hitsPerPage:15,advancedSyntax:!0,disjunctiveFacets:["language","docusaurus_tag"]});L.on("result",(e=>{let{results:{query:t,hits:r,page:n,nbHits:i,nbPages:a}}=e;if(""===t||!(r instanceof Array))return void I({type:"reset"});const s=e=>e.replace(/algolia-docsearch-suggestion--highlight/g,"search-result-match"),c=r.map((e=>{let{url:t,_highlightResult:{hierarchy:r},_snippetResult:n={}}=e;const{pathname:i,hash:a}=new URL(t),c=Object.keys(r).map((e=>s(r[e].value)));return{title:c.pop(),url:i+a,summary:n.content?`${s(n.content.value)}...`:"",breadcrumbs:c}}));I({type:"update",value:{items:c,query:t,totalResults:i,totalPages:a,lastPage:n,hasMore:a>n+1,loading:!1}})}));const[V,B]=(0,n.useState)(null),M=(0,n.useRef)(0),z=(0,n.useRef)(f.A.canUseDOM&&new IntersectionObserver((e=>{const{isIntersecting:t,boundingClientRect:{y:r}}=e[0];t&&M.current>r&&I({type:"advance"}),M.current=r}),{threshold:1})),J=()=>Q?(0,g.T)({id:"theme.SearchPage.existingResultsTitle",message:'Search results for "{query}"',description:"The search page title for non-empty query"},{query:Q}):(0,g.T)({id:"theme.SearchPage.emptyResultsTitle",message:"Search the documentation",description:"The search page title for empty query"}),$=function(e){void 0===e&&(e=0),L.addDisjunctiveFacetRefinement("docusaurus_tag","default"),L.addDisjunctiveFacetRefinement("language",i),Object.entries(R.searchVersions).forEach((e=>{let[t,r]=e;L.addDisjunctiveFacetRefinement("docusaurus_tag",`docs-${t}-${r}`)})),L.setQuery(Q).setPage(e).search()};return(0,n.useEffect)((()=>{if(V)return z.current.observe(V),()=>{z.current.unobserve(V)}}),[V]),(0,n.useEffect)((()=>{H(Q),I({type:"reset"}),Q&&(I({type:"loading"}),setTimeout((()=>{$()}),300))}),[Q,R.searchVersions]),(0,n.useEffect)((()=>{D.lastPage&&0!==D.lastPage&&$(D.lastPage)}),[D.lastPage]),(0,n.useEffect)((()=>{w&&w!==Q&&C(w)}),[w]),n.createElement(v.A,{wrapperClassName:"search-page-wrapper"},n.createElement(u.A,null,n.createElement("title",null,(0,l.s$)(J())),n.createElement("meta",{property:"robots",content:"noindex, follow"})),n.createElement("div",{className:"container margin-vert--lg"},n.createElement("h1",null,J()),n.createElement("form",{className:"row",onSubmit:e=>e.preventDefault()},n.createElement("div",{className:(0,o.A)("col",O,{"col--9":R.versioningEnabled,"col--12":!R.versioningEnabled})},n.createElement("input",{type:"search",name:"q",className:y,placeholder:(0,g.T)({id:"theme.SearchPage.inputPlaceholder",message:"Type your search here",description:"The placeholder for search page input"}),"aria-label":(0,g.T)({id:"theme.SearchPage.inputLabel",message:"Search",description:"The ARIA label for search page input"}),onChange:e=>C(e.target.value),value:Q,autoComplete:"off",autoFocus:!0})),R.versioningEnabled&&n.createElement(T,{docsSearchVersionsHelpers:R})),n.createElement("div",{className:"row"},n.createElement("div",{className:(0,o.A)("col","col--8",F)},!!D.totalResults&&s(D.totalResults)),n.createElement("div",{className:(0,o.A)("col","col--4","text--right",S)},n.createElement("a",{target:"_blank",rel:"noopener noreferrer",href:"https://www.algolia.com/","aria-label":(0,g.T)({id:"theme.SearchPage.algoliaLabel",message:"Search by Algolia",description:"The ARIA label for Algolia mention"})},n.createElement("svg",{viewBox:"0 0 168 24",className:b},n.createElement("g",{fill:"none"},n.createElement("path",{className:P,d:"M120.925 18.804c-4.386.02-4.386-3.54-4.386-4.106l-.007-13.336 2.675-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-10.846-2.18c.821 0 1.43-.047 1.855-.129v-2.719a6.334 6.334 0 0 0-1.574-.199 5.7 5.7 0 0 0-.897.069 2.699 2.699 0 0 0-.814.24c-.24.116-.439.28-.582.491-.15.212-.219.335-.219.656 0 .628.219.991.616 1.23s.938.362 1.615.362zm-.233-9.7c.883 0 1.629.109 2.231.328.602.218 1.088.525 1.444.915.363.396.609.922.76 1.483.157.56.232 1.175.232 1.85v6.874a32.5 32.5 0 0 1-1.868.314c-.834.123-1.772.185-2.813.185-.69 0-1.327-.069-1.895-.198a4.001 4.001 0 0 1-1.471-.636 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.803 0-.656.13-1.073.384-1.525a3.24 3.24 0 0 1 1.047-1.106c.445-.287.95-.492 1.532-.615a8.8 8.8 0 0 1 1.82-.185 8.404 8.404 0 0 1 1.972.24v-.438c0-.307-.035-.6-.11-.874a1.88 1.88 0 0 0-.384-.73 1.784 1.784 0 0 0-.724-.493 3.164 3.164 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.735 7.735 0 0 0-1.26.307l-.321-2.192c.335-.117.834-.233 1.478-.349a10.98 10.98 0 0 1 2.073-.178zm52.842 9.626c.822 0 1.43-.048 1.854-.13V13.7a6.347 6.347 0 0 0-1.574-.199c-.294 0-.595.021-.896.069a2.7 2.7 0 0 0-.814.24 1.46 1.46 0 0 0-.582.491c-.15.212-.218.335-.218.656 0 .628.218.991.615 1.23.404.245.938.362 1.615.362zm-.226-9.694c.883 0 1.629.108 2.231.327.602.219 1.088.526 1.444.915.355.39.609.923.759 1.483a6.8 6.8 0 0 1 .233 1.852v6.873c-.41.088-1.034.19-1.868.314-.834.123-1.772.184-2.813.184-.69 0-1.327-.068-1.895-.198a4.001 4.001 0 0 1-1.471-.635 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.804 0-.656.13-1.073.384-1.524.26-.45.608-.82 1.047-1.107.445-.286.95-.491 1.532-.614a8.803 8.803 0 0 1 2.751-.13c.329.034.671.096 1.04.185v-.437a3.3 3.3 0 0 0-.109-.875 1.873 1.873 0 0 0-.384-.731 1.784 1.784 0 0 0-.724-.492 3.165 3.165 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.75 7.75 0 0 0-1.26.307l-.321-2.193c.335-.116.834-.232 1.478-.348a11.633 11.633 0 0 1 2.073-.177zm-8.034-1.271a1.626 1.626 0 0 1-1.628-1.62c0-.895.725-1.62 1.628-1.62.904 0 1.63.725 1.63 1.62 0 .895-.733 1.62-1.63 1.62zm1.348 13.22h-2.689V7.27l2.69-.423v11.956zm-4.714 0c-4.386.02-4.386-3.54-4.386-4.107l-.008-13.336 2.676-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-8.698-5.903c0-1.156-.253-2.119-.746-2.788-.493-.677-1.183-1.01-2.067-1.01-.882 0-1.574.333-2.065 1.01-.493.676-.733 1.632-.733 2.788 0 1.168.246 1.953.74 2.63.492.683 1.183 1.018 2.066 1.018.882 0 1.574-.342 2.067-1.019.492-.683.738-1.46.738-2.63zm2.737-.007c0 .902-.13 1.584-.397 2.33a5.52 5.52 0 0 1-1.128 1.906 4.986 4.986 0 0 1-1.752 1.223c-.685.286-1.739.45-2.265.45-.528-.006-1.574-.157-2.252-.45a5.096 5.096 0 0 1-1.744-1.223c-.487-.527-.863-1.162-1.137-1.906a6.345 6.345 0 0 1-.41-2.33c0-.902.123-1.77.397-2.508a5.554 5.554 0 0 1 1.15-1.892 5.133 5.133 0 0 1 1.75-1.216c.679-.287 1.425-.423 2.232-.423.808 0 1.553.142 2.237.423a4.88 4.88 0 0 1 1.753 1.216 5.644 5.644 0 0 1 1.135 1.892c.287.738.431 1.606.431 2.508zm-20.138 0c0 1.12.246 2.363.738 2.882.493.52 1.13.78 1.91.78.424 0 .828-.062 1.204-.178.377-.116.677-.253.917-.417V9.33a10.476 10.476 0 0 0-1.766-.226c-.971-.028-1.71.37-2.23 1.004-.513.636-.773 1.75-.773 2.788zm7.438 5.274c0 1.824-.466 3.156-1.404 4.004-.936.846-2.367 1.27-4.296 1.27-.705 0-2.17-.137-3.34-.396l.431-2.118c.98.205 2.272.26 2.95.26 1.074 0 1.84-.219 2.299-.656.459-.437.684-1.086.684-1.948v-.437a8.07 8.07 0 0 1-1.047.397c-.43.13-.93.198-1.492.198-.739 0-1.41-.116-2.018-.349a4.206 4.206 0 0 1-1.567-1.025c-.431-.45-.774-1.017-1.013-1.694-.24-.677-.363-1.885-.363-2.773 0-.834.13-1.88.384-2.577.26-.696.629-1.298 1.129-1.796.493-.498 1.095-.881 1.8-1.162a6.605 6.605 0 0 1 2.428-.457c.87 0 1.67.109 2.45.24.78.129 1.444.265 1.985.415V18.17zM6.972 6.677v1.627c-.712-.446-1.52-.67-2.425-.67-.585 0-1.045.13-1.38.391a1.24 1.24 0 0 0-.502 1.03c0 .425.164.765.494 1.02.33.256.835.532 1.516.83.447.192.795.356 1.045.495.25.138.537.332.862.582.324.25.563.548.718.894.154.345.23.741.23 1.188 0 .947-.334 1.691-1.004 2.234-.67.542-1.537.814-2.601.814-1.18 0-2.16-.229-2.936-.686v-1.708c.84.628 1.814.942 2.92.942.585 0 1.048-.136 1.388-.407.34-.271.51-.646.51-1.125 0-.287-.1-.55-.302-.79-.203-.24-.42-.42-.655-.542-.234-.123-.585-.29-1.053-.503a61.27 61.27 0 0 1-.582-.271 13.67 13.67 0 0 1-.55-.287 4.275 4.275 0 0 1-.567-.351 6.92 6.92 0 0 1-.455-.4c-.18-.17-.31-.34-.39-.51-.08-.17-.155-.37-.224-.598a2.553 2.553 0 0 1-.104-.742c0-.915.333-1.638.998-2.17.664-.532 1.523-.798 2.576-.798.968 0 1.793.17 2.473.51zm7.468 5.696v-.287c-.022-.607-.187-1.088-.495-1.444-.309-.357-.75-.535-1.324-.535-.532 0-.99.194-1.373.583-.382.388-.622.949-.717 1.683h3.909zm1.005 2.792v1.404c-.596.34-1.383.51-2.362.51-1.255 0-2.255-.377-3-1.132-.744-.755-1.116-1.744-1.116-2.968 0-1.297.34-2.316 1.021-3.055.68-.74 1.548-1.11 2.6-1.11 1.033 0 1.852.323 2.458.966.606.644.91 1.572.91 2.784 0 .33-.033.676-.096 1.038h-5.314c.107.702.405 1.239.894 1.611.49.372 1.106.558 1.85.558.862 0 1.58-.202 2.155-.606zm6.605-1.77h-1.212c-.596 0-1.045.116-1.349.35-.303.234-.454.532-.454.894 0 .372.117.664.35.877.235.213.575.32 1.022.32.51 0 .912-.142 1.204-.424.293-.281.44-.651.44-1.108v-.91zm-4.068-2.554V9.325c.627-.361 1.457-.542 2.489-.542 2.116 0 3.175 1.026 3.175 3.08V17h-1.548v-.957c-.415.68-1.143 1.02-2.186 1.02-.766 0-1.38-.22-1.843-.661-.462-.442-.694-1.003-.694-1.684 0-.776.293-1.38.878-1.81.585-.431 1.404-.647 2.457-.647h1.34V11.8c0-.554-.133-.971-.399-1.253-.266-.282-.707-.423-1.324-.423a4.07 4.07 0 0 0-2.345.718zm9.333-1.93v1.42c.394-1 1.101-1.5 2.123-1.5.148 0 .313.016.494.048v1.531a1.885 1.885 0 0 0-.75-.143c-.542 0-.989.24-1.34.718-.351.479-.527 1.048-.527 1.707V17h-1.563V8.91h1.563zm5.01 4.084c.022.82.272 1.492.75 2.019.479.526 1.15.79 2.01.79.639 0 1.235-.176 1.788-.527v1.404c-.521.319-1.186.479-1.995.479-1.265 0-2.276-.4-3.031-1.197-.755-.798-1.133-1.792-1.133-2.984 0-1.16.38-2.151 1.14-2.975.761-.825 1.79-1.237 3.088-1.237.702 0 1.346.149 1.93.447v1.436a3.242 3.242 0 0 0-1.77-.495c-.84 0-1.513.266-2.019.798-.505.532-.758 1.213-.758 2.042zM40.24 5.72v4.579c.458-1 1.293-1.5 2.505-1.5.787 0 1.42.245 1.899.734.479.49.718 1.17.718 2.042V17h-1.564v-5.106c0-.553-.14-.98-.422-1.284-.282-.303-.652-.455-1.11-.455-.531 0-1.002.202-1.411.606-.41.405-.615 1.022-.615 1.851V17h-1.563V5.72h1.563zm14.966 10.02c.596 0 1.096-.253 1.5-.758.404-.506.606-1.157.606-1.955 0-.915-.202-1.62-.606-2.114-.404-.495-.92-.742-1.548-.742-.553 0-1.05.224-1.491.67-.442.447-.662 1.133-.662 2.058 0 .958.212 1.67.638 2.138.425.469.946.703 1.563.703zM53.004 5.72v4.42c.574-.894 1.388-1.341 2.44-1.341 1.022 0 1.857.383 2.506 1.149.649.766.973 1.781.973 3.047 0 1.138-.309 2.109-.925 2.912-.617.803-1.463 1.205-2.537 1.205-1.075 0-1.894-.447-2.457-1.34V17h-1.58V5.72h1.58zm9.908 11.104l-3.223-7.913h1.739l1.005 2.632 1.26 3.415c.096-.32.48-1.458 1.15-3.415l.909-2.632h1.66l-2.92 7.866c-.777 2.074-1.963 3.11-3.559 3.11a2.92 2.92 0 0 1-.734-.079v-1.34c.17.042.351.064.543.064 1.032 0 1.755-.57 2.17-1.708z"}),n.createElement("path",{fill:"#5468FF",d:"M78.988.938h16.594a2.968 2.968 0 0 1 2.966 2.966V20.5a2.967 2.967 0 0 1-2.966 2.964H78.988a2.967 2.967 0 0 1-2.966-2.964V3.897A2.961 2.961 0 0 1 78.988.938z"}),n.createElement("path",{fill:"white",d:"M89.632 5.967v-.772a.978.978 0 0 0-.978-.977h-2.28a.978.978 0 0 0-.978.977v.793c0 .088.082.15.171.13a7.127 7.127 0 0 1 1.984-.28c.65 0 1.295.088 1.917.259.082.02.164-.04.164-.13m-6.248 1.01l-.39-.389a.977.977 0 0 0-1.382 0l-.465.465a.973.973 0 0 0 0 1.38l.383.383c.062.061.15.047.205-.014.226-.307.472-.601.746-.874.281-.28.568-.526.883-.751.068-.042.075-.137.02-.2m4.16 2.453v3.341c0 .096.104.165.192.117l2.97-1.537c.068-.034.089-.117.055-.184a3.695 3.695 0 0 0-3.08-1.866c-.068 0-.136.054-.136.13m0 8.048a4.489 4.489 0 0 1-4.49-4.482 4.488 4.488 0 0 1 4.49-4.482 4.488 4.488 0 0 1 4.489 4.482 4.484 4.484 0 0 1-4.49 4.482m0-10.85a6.363 6.363 0 1 0 0 12.729 6.37 6.37 0 0 0 6.372-6.368 6.358 6.358 0 0 0-6.371-6.36"})))))),D.items.length>0?n.createElement("main",null,D.items.map(((e,t)=>{let{title:r,url:i,summary:a,breadcrumbs:s}=e;return n.createElement("article",{key:t,className:_},n.createElement("h2",{className:j},n.createElement(h.A,{to:i,dangerouslySetInnerHTML:{__html:r}})),s.length>0&&n.createElement("nav",{"aria-label":"breadcrumbs"},n.createElement("ul",{className:(0,o.A)("breadcrumbs",E)},s.map(((e,t)=>n.createElement("li",{key:t,className:"breadcrumbs__item",dangerouslySetInnerHTML:{__html:e}}))))),a&&n.createElement("p",{className:x,dangerouslySetInnerHTML:{__html:a}}))}))):[Q&&!D.loading&&n.createElement("p",{key:"no-results"},n.createElement(g.A,{id:"theme.SearchPage.noResultsText",description:"The paragraph for empty search result"},"No results were found")),!!D.loading&&n.createElement("div",{key:"spinner",className:A})],D.hasMore&&n.createElement("div",{className:N,ref:B},n.createElement(g.A,{id:"theme.SearchPage.fetchingNewResults",description:"The paragraph for fetching new search results"},"Fetching new results..."))))}}}]); \ No newline at end of file diff --git a/assets/js/0276dc25.b31c8ebe.js.LICENSE.txt b/assets/js/0276dc25.100ec631.js.LICENSE.txt similarity index 100% rename from assets/js/0276dc25.b31c8ebe.js.LICENSE.txt rename to assets/js/0276dc25.100ec631.js.LICENSE.txt diff --git a/assets/js/0276dc25.b31c8ebe.js b/assets/js/0276dc25.b31c8ebe.js deleted file mode 100644 index 5de35855..00000000 --- a/assets/js/0276dc25.b31c8ebe.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 0276dc25.b31c8ebe.js.LICENSE.txt */ -(self.webpackChunkdashy=self.webpackChunkdashy||[]).push([[158],{2733:e=>{function t(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function r(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function i(e){return void 0===e}e.exports=t,t.prototype._events=void 0,t.prototype._maxListeners=void 0,t.defaultMaxListeners=10,t.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},t.prototype.emit=function(e){var t,a,s,c,o,u;if(this._events||(this._events={}),"error"===e&&(!this._events.error||n(this._events.error)&&!this._events.error.length)){if((t=arguments[1])instanceof Error)throw t;var h=new Error('Uncaught, unspecified "error" event. ('+t+")");throw h.context=t,h}if(i(a=this._events[e]))return!1;if(r(a))switch(arguments.length){case 1:a.call(this);break;case 2:a.call(this,arguments[1]);break;case 3:a.call(this,arguments[1],arguments[2]);break;default:c=Array.prototype.slice.call(arguments,1),a.apply(this,c)}else if(n(a))for(c=Array.prototype.slice.call(arguments,1),s=(u=a.slice()).length,o=0;o0&&this._events[e].length>s&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace()),this},t.prototype.on=t.prototype.addListener,t.prototype.once=function(e,t){if(!r(t))throw TypeError("listener must be a function");var n=!1;function i(){this.removeListener(e,i),n||(n=!0,t.apply(this,arguments))}return i.listener=t,this.on(e,i),this},t.prototype.removeListener=function(e,t){var i,a,s,c;if(!r(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(s=(i=this._events[e]).length,a=-1,i===t||r(i.listener)&&i.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(n(i)){for(c=s;c-- >0;)if(i[c]===t||i[c].listener&&i[c].listener===t){a=c;break}if(a<0)return this;1===i.length?(i.length=0,delete this._events[e]):i.splice(a,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},t.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(r(n=this._events[e]))this.removeListener(e,n);else if(n)for(;n.length;)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},t.prototype.listeners=function(e){return this._events&&this._events[e]?r(this._events[e])?[this._events[e]]:this._events[e].slice():[]},t.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(r(t))return 1;if(t)return t.length}return 0},t.listenerCount=function(e,t){return e.listenerCount(t)}},4103:(e,t,r)=>{"use strict";var n=r(6571),i=r(9127),a=r(3371),s=r(7691);function c(e,t,r,i){return new n(e,t,r,i)}c.version=r(6938),c.AlgoliaSearchHelper=n,c.SearchParameters=a,c.RecommendParameters=i,c.SearchResults=s,e.exports=c},6732:(e,t,r)=>{"use strict";var n=r(2733);function i(e,t,r){this.main=e,this.fn=t,this.recommendFn=r,this.lastResults=null,this.lastRecommendResults=null}r(3014)(i,n),i.prototype.detach=function(){this.removeAllListeners(),this.main.detachDerivedHelper(this)},i.prototype.getModifiedState=function(e){return this.fn(e)},i.prototype.getModifiedRecommendState=function(e){return this.recommendFn(e)},e.exports=i},9127:e=>{"use strict";function t(e){e=e||{},this.params=e.params||[]}t.prototype={constructor:t,addParams:function(e){var r=this.params.slice(),n=this.params.findIndex((function(t){return t.$$id===e.$$id}));return-1!==n?r.splice(n,1,e):r.push(e),new t({params:r})},removeParams:function(e){return new t({params:this.params.filter((function(t){return t.$$id!==e}))})},addFrequentlyBoughtTogether:function(e){return this.addParams(Object.assign({},e,{model:"bought-together"}))},addRelatedProducts:function(e){return this.addParams(Object.assign({},e,{model:"related-products"}))},addTrendingItems:function(e){return this.addParams(Object.assign({},e,{model:"trending-items"}))},addTrendingFacets:function(e){return this.addParams(Object.assign({},e,{model:"trending-facets"}))},addLookingSimilar:function(e){return this.addParams(Object.assign({},e,{model:"looking-similar"}))},_buildQueries:function(e){return this.params.map((function(t){var r=Object.assign({},t,{indexName:e});return delete r.$$id,r}))}},e.exports=t},4054:(e,t,r)=>{"use strict";var n=r(9110),i=r(317),a=r(1383),s={addRefinement:function(e,t,r){if(s.isRefined(e,t,r))return e;var i=""+r,a=e[t]?e[t].concat(i):[i],c={};return c[t]=a,n({},c,e)},removeRefinement:function(e,t,r){if(void 0===r)return s.clearRefinement(e,(function(e,r){return t===r}));var n=""+r;return s.clearRefinement(e,(function(e,r){return t===r&&n===e}))},toggleRefinement:function(e,t,r){if(void 0===r)throw new Error("toggleRefinement should be used with a value");return s.isRefined(e,t,r)?s.removeRefinement(e,t,r):s.addRefinement(e,t,r)},clearRefinement:function(e,t,r){if(void 0===t)return i(e)?{}:e;if("string"==typeof t)return a(e,[t]);if("function"==typeof t){var n=!1,s=Object.keys(e).reduce((function(i,a){var s=e[a]||[],c=s.filter((function(e){return!t(e,a,r)}));return c.length!==s.length&&(n=!0),i[a]=c,i}),{});return n?s:e}},isRefined:function(e,t,r){var n=Boolean(e[t])&&e[t].length>0;if(void 0===r||!n)return n;var i=""+r;return-1!==e[t].indexOf(i)}};e.exports=s},3371:(e,t,r)=>{"use strict";var n=r(9110),i=r(849),a=r(4843),s=r(4728),c=r(317),o=r(1383),u=r(7507),h=r(2208),f=r(4054);function l(e,t){return Array.isArray(e)&&Array.isArray(t)?e.length===t.length&&e.every((function(e,r){return l(t[r],e)})):e===t}function m(e){var t=e?m._parseNumbers(e):{};void 0===t.userToken||h(t.userToken)||console.warn("[algoliasearch-helper] The `userToken` parameter is invalid. This can lead to wrong analytics.\n - Format: [a-zA-Z0-9_-]{1,64}"),this.facets=t.facets||[],this.disjunctiveFacets=t.disjunctiveFacets||[],this.hierarchicalFacets=t.hierarchicalFacets||[],this.facetsRefinements=t.facetsRefinements||{},this.facetsExcludes=t.facetsExcludes||{},this.disjunctiveFacetsRefinements=t.disjunctiveFacetsRefinements||{},this.numericRefinements=t.numericRefinements||{},this.tagRefinements=t.tagRefinements||[],this.hierarchicalFacetsRefinements=t.hierarchicalFacetsRefinements||{};var r=this;Object.keys(t).forEach((function(e){var n=-1!==m.PARAMETERS.indexOf(e),i=void 0!==t[e];!n&&i&&(r[e]=t[e])}))}m.PARAMETERS=Object.keys(new m),m._parseNumbers=function(e){if(e instanceof m)return e;var t={};if(["aroundPrecision","aroundRadius","getRankingInfo","minWordSizefor2Typos","minWordSizefor1Typo","page","maxValuesPerFacet","distinct","minimumAroundRadius","hitsPerPage","minProximity"].forEach((function(r){var n=e[r];if("string"==typeof n){var i=parseFloat(n);t[r]=isNaN(i)?n:i}})),Array.isArray(e.insideBoundingBox)&&(t.insideBoundingBox=e.insideBoundingBox.map((function(e){return Array.isArray(e)?e.map((function(e){return parseFloat(e)})):e}))),e.numericRefinements){var r={};Object.keys(e.numericRefinements).forEach((function(t){var n=e.numericRefinements[t]||{};r[t]={},Object.keys(n).forEach((function(e){var i=n[e].map((function(e){return Array.isArray(e)?e.map((function(e){return"string"==typeof e?parseFloat(e):e})):"string"==typeof e?parseFloat(e):e}));r[t][e]=i}))})),t.numericRefinements=r}return s(e,t)},m.make=function(e){var t=new m(e);return(e.hierarchicalFacets||[]).forEach((function(e){if(e.rootPath){var r=t.getHierarchicalRefinement(e.name);r.length>0&&0!==r[0].indexOf(e.rootPath)&&(t=t.clearRefinements(e.name)),0===(r=t.getHierarchicalRefinement(e.name)).length&&(t=t.toggleHierarchicalFacetRefinement(e.name,e.rootPath))}})),t},m.validate=function(e,t){var r=t||{};return e.tagFilters&&r.tagRefinements&&r.tagRefinements.length>0?new Error("[Tags] Cannot switch from the managed tag API to the advanced API. It is probably an error, if it is really what you want, you should first clear the tags with clearTags method."):e.tagRefinements.length>0&&r.tagFilters?new Error("[Tags] Cannot switch from the advanced tag API to the managed API. It is probably an error, if it is not, you should first clear the tags with clearTags method."):e.numericFilters&&r.numericRefinements&&c(r.numericRefinements)?new Error("[Numeric filters] Can't switch from the advanced to the managed API. It is probably an error, if this is really what you want, you have to first clear the numeric filters."):c(e.numericRefinements)&&r.numericFilters?new Error("[Numeric filters] Can't switch from the managed API to the advanced. It is probably an error, if this is really what you want, you have to first clear the numeric filters."):null},m.prototype={constructor:m,clearRefinements:function(e){var t={numericRefinements:this._clearNumericRefinements(e),facetsRefinements:f.clearRefinement(this.facetsRefinements,e,"conjunctiveFacet"),facetsExcludes:f.clearRefinement(this.facetsExcludes,e,"exclude"),disjunctiveFacetsRefinements:f.clearRefinement(this.disjunctiveFacetsRefinements,e,"disjunctiveFacet"),hierarchicalFacetsRefinements:f.clearRefinement(this.hierarchicalFacetsRefinements,e,"hierarchicalFacet")};return t.numericRefinements===this.numericRefinements&&t.facetsRefinements===this.facetsRefinements&&t.facetsExcludes===this.facetsExcludes&&t.disjunctiveFacetsRefinements===this.disjunctiveFacetsRefinements&&t.hierarchicalFacetsRefinements===this.hierarchicalFacetsRefinements?this:this.setQueryParameters(t)},clearTags:function(){return void 0===this.tagFilters&&0===this.tagRefinements.length?this:this.setQueryParameters({tagFilters:void 0,tagRefinements:[]})},setIndex:function(e){return e===this.index?this:this.setQueryParameters({index:e})},setQuery:function(e){return e===this.query?this:this.setQueryParameters({query:e})},setPage:function(e){return e===this.page?this:this.setQueryParameters({page:e})},setFacets:function(e){return this.setQueryParameters({facets:e})},setDisjunctiveFacets:function(e){return this.setQueryParameters({disjunctiveFacets:e})},setHitsPerPage:function(e){return this.hitsPerPage===e?this:this.setQueryParameters({hitsPerPage:e})},setTypoTolerance:function(e){return this.typoTolerance===e?this:this.setQueryParameters({typoTolerance:e})},addNumericRefinement:function(e,t,r){var n=u(r);if(this.isNumericRefined(e,t,n))return this;var i=s({},this.numericRefinements);return i[e]=s({},i[e]),i[e][t]?(i[e][t]=i[e][t].slice(),i[e][t].push(n)):i[e][t]=[n],this.setQueryParameters({numericRefinements:i})},getConjunctiveRefinements:function(e){return this.isConjunctiveFacet(e)&&this.facetsRefinements[e]||[]},getDisjunctiveRefinements:function(e){return this.isDisjunctiveFacet(e)&&this.disjunctiveFacetsRefinements[e]||[]},getHierarchicalRefinement:function(e){return this.hierarchicalFacetsRefinements[e]||[]},getExcludeRefinements:function(e){return this.isConjunctiveFacet(e)&&this.facetsExcludes[e]||[]},removeNumericRefinement:function(e,t,r){var n=r;return void 0!==n?this.isNumericRefined(e,t,n)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(r,i){return i===e&&r.op===t&&l(r.val,u(n))}))}):this:void 0!==t?this.isNumericRefined(e,t)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(r,n){return n===e&&r.op===t}))}):this:this.isNumericRefined(e)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(t,r){return r===e}))}):this},getNumericRefinements:function(e){return this.numericRefinements[e]||{}},getNumericRefinement:function(e,t){return this.numericRefinements[e]&&this.numericRefinements[e][t]},_clearNumericRefinements:function(e){if(void 0===e)return c(this.numericRefinements)?{}:this.numericRefinements;if("string"==typeof e)return o(this.numericRefinements,[e]);if("function"==typeof e){var t=!1,r=this.numericRefinements,n=Object.keys(r).reduce((function(n,i){var a=r[i],s={};return a=a||{},Object.keys(a).forEach((function(r){var n=a[r]||[],c=[];n.forEach((function(t){e({val:t,op:r},i,"numeric")||c.push(t)})),c.length!==n.length&&(t=!0),s[r]=c})),n[i]=s,n}),{});return t?n:this.numericRefinements}},addFacet:function(e){return this.isConjunctiveFacet(e)?this:this.setQueryParameters({facets:this.facets.concat([e])})},addDisjunctiveFacet:function(e){return this.isDisjunctiveFacet(e)?this:this.setQueryParameters({disjunctiveFacets:this.disjunctiveFacets.concat([e])})},addHierarchicalFacet:function(e){if(this.isHierarchicalFacet(e.name))throw new Error("Cannot declare two hierarchical facets with the same name: `"+e.name+"`");return this.setQueryParameters({hierarchicalFacets:this.hierarchicalFacets.concat([e])})},addFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsRefinements,e,t)?this:this.setQueryParameters({facetsRefinements:f.addRefinement(this.facetsRefinements,e,t)})},addExcludeRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsExcludes,e,t)?this:this.setQueryParameters({facetsExcludes:f.addRefinement(this.facetsExcludes,e,t)})},addDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return f.isRefined(this.disjunctiveFacetsRefinements,e,t)?this:this.setQueryParameters({disjunctiveFacetsRefinements:f.addRefinement(this.disjunctiveFacetsRefinements,e,t)})},addTagRefinement:function(e){if(this.isTagRefined(e))return this;var t={tagRefinements:this.tagRefinements.concat(e)};return this.setQueryParameters(t)},removeFacet:function(e){return this.isConjunctiveFacet(e)?this.clearRefinements(e).setQueryParameters({facets:this.facets.filter((function(t){return t!==e}))}):this},removeDisjunctiveFacet:function(e){return this.isDisjunctiveFacet(e)?this.clearRefinements(e).setQueryParameters({disjunctiveFacets:this.disjunctiveFacets.filter((function(t){return t!==e}))}):this},removeHierarchicalFacet:function(e){return this.isHierarchicalFacet(e)?this.clearRefinements(e).setQueryParameters({hierarchicalFacets:this.hierarchicalFacets.filter((function(t){return t.name!==e}))}):this},removeFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsRefinements,e,t)?this.setQueryParameters({facetsRefinements:f.removeRefinement(this.facetsRefinements,e,t)}):this},removeExcludeRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsExcludes,e,t)?this.setQueryParameters({facetsExcludes:f.removeRefinement(this.facetsExcludes,e,t)}):this},removeDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return f.isRefined(this.disjunctiveFacetsRefinements,e,t)?this.setQueryParameters({disjunctiveFacetsRefinements:f.removeRefinement(this.disjunctiveFacetsRefinements,e,t)}):this},removeTagRefinement:function(e){if(!this.isTagRefined(e))return this;var t={tagRefinements:this.tagRefinements.filter((function(t){return t!==e}))};return this.setQueryParameters(t)},toggleRefinement:function(e,t){return this.toggleFacetRefinement(e,t)},toggleFacetRefinement:function(e,t){if(this.isHierarchicalFacet(e))return this.toggleHierarchicalFacetRefinement(e,t);if(this.isConjunctiveFacet(e))return this.toggleConjunctiveFacetRefinement(e,t);if(this.isDisjunctiveFacet(e))return this.toggleDisjunctiveFacetRefinement(e,t);throw new Error("Cannot refine the undeclared facet "+e+"; it should be added to the helper options facets, disjunctiveFacets or hierarchicalFacets")},toggleConjunctiveFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return this.setQueryParameters({facetsRefinements:f.toggleRefinement(this.facetsRefinements,e,t)})},toggleExcludeFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return this.setQueryParameters({facetsExcludes:f.toggleRefinement(this.facetsExcludes,e,t)})},toggleDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return this.setQueryParameters({disjunctiveFacetsRefinements:f.toggleRefinement(this.disjunctiveFacetsRefinements,e,t)})},toggleHierarchicalFacetRefinement:function(e,t){if(!this.isHierarchicalFacet(e))throw new Error(e+" is not defined in the hierarchicalFacets attribute of the helper configuration");var r=this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(e)),i={};return void 0!==this.hierarchicalFacetsRefinements[e]&&this.hierarchicalFacetsRefinements[e].length>0&&(this.hierarchicalFacetsRefinements[e][0]===t||0===this.hierarchicalFacetsRefinements[e][0].indexOf(t+r))?-1===t.indexOf(r)?i[e]=[]:i[e]=[t.slice(0,t.lastIndexOf(r))]:i[e]=[t],this.setQueryParameters({hierarchicalFacetsRefinements:n({},i,this.hierarchicalFacetsRefinements)})},addHierarchicalFacetRefinement:function(e,t){if(this.isHierarchicalFacetRefined(e))throw new Error(e+" is already refined.");if(!this.isHierarchicalFacet(e))throw new Error(e+" is not defined in the hierarchicalFacets attribute of the helper configuration.");var r={};return r[e]=[t],this.setQueryParameters({hierarchicalFacetsRefinements:n({},r,this.hierarchicalFacetsRefinements)})},removeHierarchicalFacetRefinement:function(e){if(!this.isHierarchicalFacetRefined(e))return this;var t={};return t[e]=[],this.setQueryParameters({hierarchicalFacetsRefinements:n({},t,this.hierarchicalFacetsRefinements)})},toggleTagRefinement:function(e){return this.isTagRefined(e)?this.removeTagRefinement(e):this.addTagRefinement(e)},isDisjunctiveFacet:function(e){return this.disjunctiveFacets.indexOf(e)>-1},isHierarchicalFacet:function(e){return void 0!==this.getHierarchicalFacetByName(e)},isConjunctiveFacet:function(e){return this.facets.indexOf(e)>-1},isFacetRefined:function(e,t){return!!this.isConjunctiveFacet(e)&&f.isRefined(this.facetsRefinements,e,t)},isExcludeRefined:function(e,t){return!!this.isConjunctiveFacet(e)&&f.isRefined(this.facetsExcludes,e,t)},isDisjunctiveFacetRefined:function(e,t){return!!this.isDisjunctiveFacet(e)&&f.isRefined(this.disjunctiveFacetsRefinements,e,t)},isHierarchicalFacetRefined:function(e,t){if(!this.isHierarchicalFacet(e))return!1;var r=this.getHierarchicalRefinement(e);return t?-1!==r.indexOf(t):r.length>0},isNumericRefined:function(e,t,r){if(void 0===r&&void 0===t)return Boolean(this.numericRefinements[e]);var n=this.numericRefinements[e]&&void 0!==this.numericRefinements[e][t];if(void 0===r||!n)return n;var a,s,c=u(r),o=void 0!==(a=this.numericRefinements[e][t],s=c,i(a,(function(e){return l(e,s)})));return n&&o},isTagRefined:function(e){return-1!==this.tagRefinements.indexOf(e)},getRefinedDisjunctiveFacets:function(){var e=this,t=a(Object.keys(this.numericRefinements).filter((function(t){return Object.keys(e.numericRefinements[t]).length>0})),this.disjunctiveFacets);return Object.keys(this.disjunctiveFacetsRefinements).filter((function(t){return e.disjunctiveFacetsRefinements[t].length>0})).concat(t).concat(this.getRefinedHierarchicalFacets()).sort()},getRefinedHierarchicalFacets:function(){var e=this;return a(this.hierarchicalFacets.map((function(e){return e.name})),Object.keys(this.hierarchicalFacetsRefinements).filter((function(t){return e.hierarchicalFacetsRefinements[t].length>0}))).sort()},getUnrefinedDisjunctiveFacets:function(){var e=this.getRefinedDisjunctiveFacets();return this.disjunctiveFacets.filter((function(t){return-1===e.indexOf(t)}))},managedParameters:["index","facets","disjunctiveFacets","facetsRefinements","hierarchicalFacets","facetsExcludes","disjunctiveFacetsRefinements","numericRefinements","tagRefinements","hierarchicalFacetsRefinements"],getQueryParams:function(){var e=this.managedParameters,t={},r=this;return Object.keys(this).forEach((function(n){var i=r[n];-1===e.indexOf(n)&&void 0!==i&&(t[n]=i)})),t},setQueryParameter:function(e,t){if(this[e]===t)return this;var r={};return r[e]=t,this.setQueryParameters(r)},setQueryParameters:function(e){if(!e)return this;var t=m.validate(this,e);if(t)throw t;var r=this,n=m._parseNumbers(e),i=Object.keys(this).reduce((function(e,t){return e[t]=r[t],e}),{}),a=Object.keys(n).reduce((function(e,t){var r=void 0!==e[t],i=void 0!==n[t];return r&&!i?o(e,[t]):(i&&(e[t]=n[t]),e)}),i);return new this.constructor(a)},resetPage:function(){return void 0===this.page?this:this.setPage(0)},_getHierarchicalFacetSortBy:function(e){return e.sortBy||["isRefined:desc","name:asc"]},_getHierarchicalFacetSeparator:function(e){return e.separator||" > "},_getHierarchicalRootPath:function(e){return e.rootPath||null},_getHierarchicalShowParentLevel:function(e){return"boolean"!=typeof e.showParentLevel||e.showParentLevel},getHierarchicalFacetByName:function(e){return i(this.hierarchicalFacets,(function(t){return t.name===e}))},getHierarchicalFacetBreadcrumb:function(e){if(!this.isHierarchicalFacet(e))return[];var t=this.getHierarchicalRefinement(e)[0];if(!t)return[];var r=this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(e));return t.split(r).map((function(e){return e.trim()}))},toString:function(){return JSON.stringify(this,null,2)}},e.exports=m},6673:(e,t,r)=>{"use strict";e.exports=function(e){return function(t,r){var n=e.hierarchicalFacets[r],u=e.hierarchicalFacetsRefinements[n.name]&&e.hierarchicalFacetsRefinements[n.name][0]||"",h=e._getHierarchicalFacetSeparator(n),f=e._getHierarchicalRootPath(n),l=e._getHierarchicalShowParentLevel(n),m=a(e._getHierarchicalFacetSortBy(n)),d=t.every((function(e){return e.exhaustive})),p=function(e,t,r,n,a){return function(u,h,f){var l=u;if(f>0){var m=0;for(l=u;m{"use strict";var n=r(8965),i=r(9110),a=r(2909),s=r(849),c=r(3917),o=r(7577),u=r(4728),h=r(8601),f=a.escapeFacetValue,l=a.unescapeFacetValue,m=r(6673);function d(e){var t={};return e.forEach((function(e,r){t[e]=r})),t}function p(e,t,r){t&&t[r]&&(e.stats=t[r])}function v(e,t,r){var a=t[0];this._rawResults=t;var o=this;Object.keys(a).forEach((function(e){o[e]=a[e]}));var h=u({persistHierarchicalRootCount:!1},r);Object.keys(h).forEach((function(e){o[e]=h[e]})),this.processingTimeMS=t.reduce((function(e,t){return void 0===t.processingTimeMS?e:e+t.processingTimeMS}),0),this.disjunctiveFacets=[],this.hierarchicalFacets=e.hierarchicalFacets.map((function(){return[]})),this.facets=[];var f=e.getRefinedDisjunctiveFacets(),v=d(e.facets),g=d(e.disjunctiveFacets),y=1,R=a.facets||{};Object.keys(R).forEach((function(t){var r,n,i=R[t],u=(r=e.hierarchicalFacets,n=t,s(r,(function(e){return(e.attributes||[]).indexOf(n)>-1})));if(u){var h=u.attributes.indexOf(t),f=c(e.hierarchicalFacets,(function(e){return e.name===u.name}));o.hierarchicalFacets[f][h]={attribute:t,data:i,exhaustive:a.exhaustiveFacetsCount}}else{var l,m=-1!==e.disjunctiveFacets.indexOf(t),d=-1!==e.facets.indexOf(t);m&&(l=g[t],o.disjunctiveFacets[l]={name:t,data:i,exhaustive:a.exhaustiveFacetsCount},p(o.disjunctiveFacets[l],a.facets_stats,t)),d&&(l=v[t],o.facets[l]={name:t,data:i,exhaustive:a.exhaustiveFacetsCount},p(o.facets[l],a.facets_stats,t))}})),this.hierarchicalFacets=n(this.hierarchicalFacets),f.forEach((function(r){var n=t[y],s=n&&n.facets?n.facets:{},h=e.getHierarchicalFacetByName(r);Object.keys(s).forEach((function(t){var r,f=s[t];if(h){r=c(e.hierarchicalFacets,(function(e){return e.name===h.name}));var m=c(o.hierarchicalFacets[r],(function(e){return e.attribute===t}));if(-1===m)return;o.hierarchicalFacets[r][m].data=u({},o.hierarchicalFacets[r][m].data,f)}else{r=g[t];var d=a.facets&&a.facets[t]||{};o.disjunctiveFacets[r]={name:t,data:i({},f,d),exhaustive:n.exhaustiveFacetsCount},p(o.disjunctiveFacets[r],n.facets_stats,t),e.disjunctiveFacetsRefinements[t]&&e.disjunctiveFacetsRefinements[t].forEach((function(n){!o.disjunctiveFacets[r].data[n]&&e.disjunctiveFacetsRefinements[t].indexOf(l(n))>-1&&(o.disjunctiveFacets[r].data[n]=0)}))}})),y++})),e.getRefinedHierarchicalFacets().forEach((function(r){var n=e.getHierarchicalFacetByName(r),a=e._getHierarchicalFacetSeparator(n),s=e.getHierarchicalRefinement(r);0===s.length||s[0].split(a).length<2||t.slice(y).forEach((function(t){var r=t&&t.facets?t.facets:{};Object.keys(r).forEach((function(t){var u=r[t],h=c(e.hierarchicalFacets,(function(e){return e.name===n.name})),f=c(o.hierarchicalFacets[h],(function(e){return e.attribute===t}));if(-1!==f){var l={};if(s.length>0&&!o.persistHierarchicalRootCount){var m=s[0].split(a)[0];l[m]=o.hierarchicalFacets[h][f].data[m]}o.hierarchicalFacets[h][f].data=i(l,u,o.hierarchicalFacets[h][f].data)}})),y++}))})),Object.keys(e.facetsExcludes).forEach((function(t){var r=e.facetsExcludes[t],n=v[t];o.facets[n]={name:t,data:R[t],exhaustive:a.exhaustiveFacetsCount},r.forEach((function(e){o.facets[n]=o.facets[n]||{name:t},o.facets[n].data=o.facets[n].data||{},o.facets[n].data[e]=0}))})),this.hierarchicalFacets=this.hierarchicalFacets.map(m(e)),this.facets=n(this.facets),this.disjunctiveFacets=n(this.disjunctiveFacets),this._state=e}function g(e,t){function r(e){return e.name===t}if(e._state.isConjunctiveFacet(t)){var n=s(e.facets,r);return n?Object.keys(n.data).map((function(r){var i=f(r);return{name:r,escapedValue:i,count:n.data[r],isRefined:e._state.isFacetRefined(t,i),isExcluded:e._state.isExcludeRefined(t,r)}})):[]}if(e._state.isDisjunctiveFacet(t)){var i=s(e.disjunctiveFacets,r);return i?Object.keys(i.data).map((function(r){var n=f(r);return{name:r,escapedValue:n,count:i.data[r],isRefined:e._state.isDisjunctiveFacetRefined(t,n)}})):[]}if(e._state.isHierarchicalFacet(t)){var a=s(e.hierarchicalFacets,r);if(!a)return a;var c=e._state.getHierarchicalFacetByName(t),o=e._state._getHierarchicalFacetSeparator(c),u=l(e._state.getHierarchicalRefinement(t)[0]||"");0===u.indexOf(c.rootPath)&&(u=u.replace(c.rootPath+o,""));var h=u.split(o);return h.unshift(t),y(a,h,0),a}}function y(e,t,r){e.isRefined=e.name===(t[r]&&t[r].trim()),e.data&&e.data.forEach((function(e){y(e,t,r+1)}))}function R(e,t,r,n){if(n=n||0,Array.isArray(t))return e(t,r[n]);if(!t.data||0===t.data.length)return t;var a=t.data.map((function(t){return R(e,t,r,n+1)})),s=e(a,r[n]);return i({data:s},t)}function F(e,t){var r=s(e,(function(e){return e.name===t}));return r&&r.stats}function b(e,t,r,n,i){var a=s(i,(function(e){return e.name===r})),c=a&&a.data&&a.data[n]?a.data[n]:0,o=a&&a.exhaustive||!1;return{type:t,attributeName:r,name:n,count:c,exhaustive:o}}v.prototype.getFacetByName=function(e){function t(t){return t.name===e}return s(this.facets,t)||s(this.disjunctiveFacets,t)||s(this.hierarchicalFacets,t)},v.DEFAULT_SORT=["isRefined:desc","count:desc","name:asc"],v.prototype.getFacetValues=function(e,t){var r=g(this,e);if(r){var n,a=i({},t,{sortBy:v.DEFAULT_SORT,facetOrdering:!(t&&t.sortBy)}),s=this;if(Array.isArray(r))n=[e];else n=s._state.getHierarchicalFacetByName(r.name).attributes;return R((function(e,t){if(a.facetOrdering){var r=function(e,t){return e.renderingContent&&e.renderingContent.facetOrdering&&e.renderingContent.facetOrdering.values&&e.renderingContent.facetOrdering.values[t]}(s,t);if(r)return function(e,t){var r=[],n=[],i=(t.order||[]).reduce((function(e,t,r){return e[t]=r,e}),{});e.forEach((function(e){var t=e.path||e.name;void 0!==i[t]?r[i[t]]=e:n.push(e)})),r=r.filter((function(e){return e}));var a,s=t.sortRemainingBy;return"hidden"===s?r:(a="alpha"===s?[["path","name"],["asc","asc"]]:[["count"],["desc"]],r.concat(h(n,a[0],a[1])))}(e,r)}if(Array.isArray(a.sortBy)){var n=o(a.sortBy,v.DEFAULT_SORT);return h(e,n[0],n[1])}if("function"==typeof a.sortBy)return function(e,t){return t.sort(e)}(a.sortBy,e);throw new Error("options.sortBy is optional but if defined it must be either an array of string (predicates) or a sorting function")}),r,n)}},v.prototype.getFacetStats=function(e){return this._state.isConjunctiveFacet(e)?F(this.facets,e):this._state.isDisjunctiveFacet(e)?F(this.disjunctiveFacets,e):void 0},v.prototype.getRefinements=function(){var e=this._state,t=this,r=[];return Object.keys(e.facetsRefinements).forEach((function(n){e.facetsRefinements[n].forEach((function(i){r.push(b(e,"facet",n,i,t.facets))}))})),Object.keys(e.facetsExcludes).forEach((function(n){e.facetsExcludes[n].forEach((function(i){r.push(b(e,"exclude",n,i,t.facets))}))})),Object.keys(e.disjunctiveFacetsRefinements).forEach((function(n){e.disjunctiveFacetsRefinements[n].forEach((function(i){r.push(b(e,"disjunctive",n,i,t.disjunctiveFacets))}))})),Object.keys(e.hierarchicalFacetsRefinements).forEach((function(n){e.hierarchicalFacetsRefinements[n].forEach((function(i){r.push(function(e,t,r,n){var i=e.getHierarchicalFacetByName(t),a=e._getHierarchicalFacetSeparator(i),c=r.split(a),o=s(n,(function(e){return e.name===t})),u=c.reduce((function(e,t){var r=e&&s(e.data,(function(e){return e.name===t}));return void 0!==r?r:e}),o),h=u&&u.count||0,f=u&&u.exhaustive||!1,l=u&&u.path||"";return{type:"hierarchical",attributeName:t,name:l,count:h,exhaustive:f}}(e,n,i,t.hierarchicalFacets))}))})),Object.keys(e.numericRefinements).forEach((function(t){var n=e.numericRefinements[t];Object.keys(n).forEach((function(e){n[e].forEach((function(n){r.push({type:"numeric",attributeName:t,name:n,numericValue:n,operator:e})}))}))})),e.tagRefinements.forEach((function(e){r.push({type:"tag",attributeName:"_tags",name:e})})),r},e.exports=v},6571:(e,t,r)=>{"use strict";var n=r(2733),i=r(6732),a=r(2909).escapeFacetValue,s=r(3014),c=r(4728),o=r(317),u=r(1383),h=r(9127),f=r(9228),l=r(3371),m=r(7691),d=r(6938);function p(e,t,r,n){"function"==typeof e.addAlgoliaAgent&&e.addAlgoliaAgent("JS Helper ("+d+")"),this.setClient(e);var i=r||{};i.index=t,this.state=l.make(i),this.recommendState=new h({params:i.recommendState}),this.lastResults=null,this.lastRecommendResults=null,this._queryId=0,this._recommendQueryId=0,this._lastQueryIdReceived=-1,this._lastRecommendQueryIdReceived=-1,this.derivedHelpers=[],this._currentNbQueries=0,this._currentNbRecommendQueries=0,this._searchResultsOptions=n}function v(e){if(e<0)throw new Error("Page requested below 0.");return this._change({state:this.state.setPage(e),isPageReset:!1}),this}function g(){return this.state.page}s(p,n),p.prototype.search=function(){return this._search({onlyWithDerivedHelpers:!1}),this},p.prototype.searchOnlyWithDerivedHelpers=function(){return this._search({onlyWithDerivedHelpers:!0}),this},p.prototype.recommend=function(){return this._recommend(),this},p.prototype.getQuery=function(){var e=this.state;return f._getHitsSearchParams(e)},p.prototype.searchOnce=function(e,t){var r=e?this.state.setQueryParameters(e):this.state,n=f._getQueries(r.index,r),i=this;if(this._currentNbQueries++,this.emit("searchOnce",{state:r}),!t)return this.client.search(n).then((function(e){return i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),{content:new m(r,e.results),state:r,_originalResponse:e}}),(function(e){throw i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),e}));this.client.search(n).then((function(e){i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),t(null,new m(r,e.results),r)})).catch((function(e){i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),t(e,null,r)}))},p.prototype.findAnswers=function(e){console.warn("[algoliasearch-helper] answers is no longer supported");var t=this.state,r=this.derivedHelpers[0];if(!r)return Promise.resolve([]);var n=r.getModifiedState(t),i=c({attributesForPrediction:e.attributesForPrediction,nbHits:e.nbHits},{params:u(f._getHitsSearchParams(n),["attributesToSnippet","hitsPerPage","restrictSearchableAttributes","snippetEllipsisText"])}),a="search for answers was called, but this client does not have a function client.initIndex(index).findAnswers";if("function"!=typeof this.client.initIndex)throw new Error(a);var s=this.client.initIndex(n.index);if("function"!=typeof s.findAnswers)throw new Error(a);return s.findAnswers(n.query,e.queryLanguages,i)},p.prototype.searchForFacetValues=function(e,t,r,n){var i="function"==typeof this.client.searchForFacetValues,s="function"==typeof this.client.initIndex;if(!i&&!s&&"function"!=typeof this.client.search)throw new Error("search for facet values (searchable) was called, but this client does not have a function client.searchForFacetValues or client.initIndex(index).searchForFacetValues");var c=this.state.setQueryParameters(n||{}),o=c.isDisjunctiveFacet(e),u=f.getSearchForFacetQuery(e,t,r,c);this._currentNbQueries++;var h,l=this;return i?h=this.client.searchForFacetValues([{indexName:c.index,params:u}]):s?h=this.client.initIndex(c.index).searchForFacetValues(u):(delete u.facetName,h=this.client.search([{type:"facet",facet:e,indexName:c.index,params:u}]).then((function(e){return e.results[0]}))),this.emit("searchForFacetValues",{state:c,facet:e,query:t}),h.then((function(t){return l._currentNbQueries--,0===l._currentNbQueries&&l.emit("searchQueueEmpty"),(t=Array.isArray(t)?t[0]:t).facetHits.forEach((function(t){t.escapedValue=a(t.value),t.isRefined=o?c.isDisjunctiveFacetRefined(e,t.escapedValue):c.isFacetRefined(e,t.escapedValue)})),t}),(function(e){throw l._currentNbQueries--,0===l._currentNbQueries&&l.emit("searchQueueEmpty"),e}))},p.prototype.setQuery=function(e){return this._change({state:this.state.resetPage().setQuery(e),isPageReset:!0}),this},p.prototype.clearRefinements=function(e){return this._change({state:this.state.resetPage().clearRefinements(e),isPageReset:!0}),this},p.prototype.clearTags=function(){return this._change({state:this.state.resetPage().clearTags(),isPageReset:!0}),this},p.prototype.addDisjunctiveFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addDisjunctiveFacetRefinement(e,t),isPageReset:!0}),this},p.prototype.addDisjunctiveRefine=function(){return this.addDisjunctiveFacetRefinement.apply(this,arguments)},p.prototype.addHierarchicalFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addHierarchicalFacetRefinement(e,t),isPageReset:!0}),this},p.prototype.addNumericRefinement=function(e,t,r){return this._change({state:this.state.resetPage().addNumericRefinement(e,t,r),isPageReset:!0}),this},p.prototype.addFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addFacetRefinement(e,t),isPageReset:!0}),this},p.prototype.addRefine=function(){return this.addFacetRefinement.apply(this,arguments)},p.prototype.addFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().addExcludeRefinement(e,t),isPageReset:!0}),this},p.prototype.addExclude=function(){return this.addFacetExclusion.apply(this,arguments)},p.prototype.addTag=function(e){return this._change({state:this.state.resetPage().addTagRefinement(e),isPageReset:!0}),this},p.prototype.addFrequentlyBoughtTogether=function(e){return this._recommendChange({state:this.recommendState.addFrequentlyBoughtTogether(e)}),this},p.prototype.addRelatedProducts=function(e){return this._recommendChange({state:this.recommendState.addRelatedProducts(e)}),this},p.prototype.addTrendingItems=function(e){return this._recommendChange({state:this.recommendState.addTrendingItems(e)}),this},p.prototype.addTrendingFacets=function(e){return this._recommendChange({state:this.recommendState.addTrendingFacets(e)}),this},p.prototype.addLookingSimilar=function(e){return this._recommendChange({state:this.recommendState.addLookingSimilar(e)}),this},p.prototype.removeNumericRefinement=function(e,t,r){return this._change({state:this.state.resetPage().removeNumericRefinement(e,t,r),isPageReset:!0}),this},p.prototype.removeDisjunctiveFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().removeDisjunctiveFacetRefinement(e,t),isPageReset:!0}),this},p.prototype.removeDisjunctiveRefine=function(){return this.removeDisjunctiveFacetRefinement.apply(this,arguments)},p.prototype.removeHierarchicalFacetRefinement=function(e){return this._change({state:this.state.resetPage().removeHierarchicalFacetRefinement(e),isPageReset:!0}),this},p.prototype.removeFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().removeFacetRefinement(e,t),isPageReset:!0}),this},p.prototype.removeRefine=function(){return this.removeFacetRefinement.apply(this,arguments)},p.prototype.removeFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().removeExcludeRefinement(e,t),isPageReset:!0}),this},p.prototype.removeExclude=function(){return this.removeFacetExclusion.apply(this,arguments)},p.prototype.removeTag=function(e){return this._change({state:this.state.resetPage().removeTagRefinement(e),isPageReset:!0}),this},p.prototype.removeFrequentlyBoughtTogether=function(e){return this._recommendChange({state:this.recommendState.removeParams(e)}),this},p.prototype.removeRelatedProducts=function(e){return this._recommendChange({state:this.recommendState.removeParams(e)}),this},p.prototype.removeTrendingItems=function(e){return this._recommendChange({state:this.recommendState.removeParams(e)}),this},p.prototype.removeTrendingFacets=function(e){return this._recommendChange({state:this.recommendState.removeParams(e)}),this},p.prototype.removeLookingSimilar=function(e){return this._recommendChange({state:this.recommendState.removeParams(e)}),this},p.prototype.toggleFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().toggleExcludeFacetRefinement(e,t),isPageReset:!0}),this},p.prototype.toggleExclude=function(){return this.toggleFacetExclusion.apply(this,arguments)},p.prototype.toggleRefinement=function(e,t){return this.toggleFacetRefinement(e,t)},p.prototype.toggleFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().toggleFacetRefinement(e,t),isPageReset:!0}),this},p.prototype.toggleRefine=function(){return this.toggleFacetRefinement.apply(this,arguments)},p.prototype.toggleTag=function(e){return this._change({state:this.state.resetPage().toggleTagRefinement(e),isPageReset:!0}),this},p.prototype.nextPage=function(){var e=this.state.page||0;return this.setPage(e+1)},p.prototype.previousPage=function(){var e=this.state.page||0;return this.setPage(e-1)},p.prototype.setCurrentPage=v,p.prototype.setPage=v,p.prototype.setIndex=function(e){return this._change({state:this.state.resetPage().setIndex(e),isPageReset:!0}),this},p.prototype.setQueryParameter=function(e,t){return this._change({state:this.state.resetPage().setQueryParameter(e,t),isPageReset:!0}),this},p.prototype.setState=function(e){return this._change({state:l.make(e),isPageReset:!1}),this},p.prototype.overrideStateWithoutTriggeringChangeEvent=function(e){return this.state=new l(e),this},p.prototype.hasRefinements=function(e){return!!o(this.state.getNumericRefinements(e))||(this.state.isConjunctiveFacet(e)?this.state.isFacetRefined(e):this.state.isDisjunctiveFacet(e)?this.state.isDisjunctiveFacetRefined(e):!!this.state.isHierarchicalFacet(e)&&this.state.isHierarchicalFacetRefined(e))},p.prototype.isExcluded=function(e,t){return this.state.isExcludeRefined(e,t)},p.prototype.isDisjunctiveRefined=function(e,t){return this.state.isDisjunctiveFacetRefined(e,t)},p.prototype.hasTag=function(e){return this.state.isTagRefined(e)},p.prototype.isTagRefined=function(){return this.hasTagRefinements.apply(this,arguments)},p.prototype.getIndex=function(){return this.state.index},p.prototype.getCurrentPage=g,p.prototype.getPage=g,p.prototype.getTags=function(){return this.state.tagRefinements},p.prototype.getRefinements=function(e){var t=[];if(this.state.isConjunctiveFacet(e))this.state.getConjunctiveRefinements(e).forEach((function(e){t.push({value:e,type:"conjunctive"})})),this.state.getExcludeRefinements(e).forEach((function(e){t.push({value:e,type:"exclude"})}));else if(this.state.isDisjunctiveFacet(e)){this.state.getDisjunctiveRefinements(e).forEach((function(e){t.push({value:e,type:"disjunctive"})}))}var r=this.state.getNumericRefinements(e);return Object.keys(r).forEach((function(e){var n=r[e];t.push({value:n,operator:e,type:"numeric"})})),t},p.prototype.getNumericRefinement=function(e,t){return this.state.getNumericRefinement(e,t)},p.prototype.getHierarchicalFacetBreadcrumb=function(e){return this.state.getHierarchicalFacetBreadcrumb(e)},p.prototype._search=function(e){var t=this.state,r=[],n=[];e.onlyWithDerivedHelpers||(n=f._getQueries(t.index,t),r.push({state:t,queriesCount:n.length,helper:this}),this.emit("search",{state:t,results:this.lastResults}));var i=this.derivedHelpers.map((function(e){var n=e.getModifiedState(t),i=n.index?f._getQueries(n.index,n):[];return r.push({state:n,queriesCount:i.length,helper:e}),e.emit("search",{state:n,results:e.lastResults}),i})),a=Array.prototype.concat.apply(n,i),s=this._queryId++;if(this._currentNbQueries++,!a.length)return Promise.resolve({results:[]}).then(this._dispatchAlgoliaResponse.bind(this,r,s));try{this.client.search(a).then(this._dispatchAlgoliaResponse.bind(this,r,s)).catch(this._dispatchAlgoliaError.bind(this,s))}catch(c){this.emit("error",{error:c})}},p.prototype._recommend=function(){var e=this.state,t=this.recommendState,r=this.getIndex(),n=[{state:t,index:r,helper:this}];this.emit("fetch",{recommend:{state:t,results:this.lastRecommendResults}});var i=this.derivedHelpers.map((function(t){var r=t.getModifiedState(e).index;if(!r)return[];var i=t.getModifiedRecommendState(new h);return n.push({state:i,index:r,helper:t}),t.emit("fetch",{recommend:{state:i,results:t.lastRecommendResults}}),i._buildQueries(r)})),a=Array.prototype.concat.apply(this.recommendState._buildQueries(r),i);if(0!==a.length)if(a.length>0&&void 0===this.client.getRecommendations)console.warn("Please update algoliasearch/lite to the latest version in order to use recommendations widgets.");else{var s=this._recommendQueryId++;this._currentNbRecommendQueries++;try{this.client.getRecommendations(a).then(this._dispatchRecommendResponse.bind(this,s,n)).catch(this._dispatchRecommendError.bind(this,s))}catch(c){this.emit("error",{error:c})}}},p.prototype._dispatchAlgoliaResponse=function(e,t,r){var n=this;if(!(t0},p.prototype._change=function(e){var t=e.state,r=e.isPageReset;t!==this.state&&(this.state=t,this.emit("change",{state:this.state,results:this.lastResults,isPageReset:r}))},p.prototype._recommendChange=function(e){var t=e.state;t!==this.recommendState&&(this.recommendState=t,this.emit("recommend:change",{search:{results:this.lastResults,state:this.state},recommend:{results:this.lastRecommendResults,state:this.recommendState}}))},p.prototype.clearCache=function(){return this.client.clearCache&&this.client.clearCache(),this},p.prototype.setClient=function(e){return this.client===e||("function"==typeof e.addAlgoliaAgent&&e.addAlgoliaAgent("JS Helper ("+d+")"),this.client=e),this},p.prototype.getClient=function(){return this.client},p.prototype.derive=function(e,t){var r=new i(this,e,t);return this.derivedHelpers.push(r),r},p.prototype.detachDerivedHelper=function(e){var t=this.derivedHelpers.indexOf(e);if(-1===t)throw new Error("Derived helper already detached");this.derivedHelpers.splice(t,1)},p.prototype.hasPendingRequests=function(){return this._currentNbQueries>0},e.exports=p},8965:e=>{"use strict";e.exports=function(e){return Array.isArray(e)?e.filter(Boolean):[]}},9110:e=>{"use strict";e.exports=function(){return Array.prototype.slice.call(arguments).reduceRight((function(e,t){return Object.keys(Object(t)).forEach((function(r){void 0!==t[r]&&(void 0!==e[r]&&delete e[r],e[r]=t[r])})),e}),{})}},2909:e=>{"use strict";e.exports={escapeFacetValue:function(e){return"string"!=typeof e?e:String(e).replace(/^-/,"\\-")},unescapeFacetValue:function(e){return"string"!=typeof e?e:e.replace(/^\\-/,"-")}}},849:e=>{"use strict";e.exports=function(e,t){if(Array.isArray(e))for(var r=0;r{"use strict";e.exports=function(e,t){if(!Array.isArray(e))return-1;for(var r=0;r{"use strict";var n=r(849);e.exports=function(e,t){var r=(t||[]).map((function(e){return e.split(":")}));return e.reduce((function(e,t){var i=t.split(":"),a=n(r,(function(e){return e[0]===i[0]}));return i.length>1||!a?(e[0].push(i[0]),e[1].push(i[1]),e):(e[0].push(a[0]),e[1].push(a[1]),e)}),[[],[]])}},3014:e=>{"use strict";e.exports=function(e,t){e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}},4843:e=>{"use strict";e.exports=function(e,t){return e.filter((function(r,n){return t.indexOf(r)>-1&&e.indexOf(r)===n}))}},4728:e=>{"use strict";function t(e){return"function"==typeof e||Array.isArray(e)||"[object Object]"===Object.prototype.toString.call(e)}function r(e,n){if(e===n)return e;for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)&&"__proto__"!==i&&"constructor"!==i){var a=n[i],s=e[i];void 0!==s&&void 0===a||(t(s)&&t(a)?e[i]=r(s,a):e[i]="object"==typeof(c=a)&&null!==c?r(Array.isArray(c)?[]:{},c):c)}var c;return e}e.exports=function(e){t(e)||(e={});for(var n=1,i=arguments.length;n{"use strict";e.exports=function(e){return e&&Object.keys(e).length>0}},1383:e=>{"use strict";e.exports=function(e,t){if(null===e)return{};var r,n,i={},a=Object.keys(e);for(n=0;n=0||(i[r]=e[r]);return i}},8601:e=>{"use strict";function t(e,t){if(e!==t){var r=void 0!==e,n=null===e,i=void 0!==t,a=null===t;if(!a&&e>t||n&&i||!r)return 1;if(!n&&e=n.length?a:"desc"===n[i]?-a:a}return e.index-r.index})),i.map((function(e){return e.value}))}},7507:e=>{"use strict";e.exports=function e(t){if("number"==typeof t)return t;if("string"==typeof t)return parseFloat(t);if(Array.isArray(t))return t.map(e);throw new Error("The value should be a number, a parsable string or an array of those.")}},9228:(e,t,r)=>{"use strict";var n=r(4728);function i(e){return Object.keys(e).sort().reduce((function(t,r){return t[r]=e[r],t}),{})}var a={_getQueries:function(e,t){var r=[];return r.push({indexName:e,params:a._getHitsSearchParams(t)}),t.getRefinedDisjunctiveFacets().forEach((function(n){r.push({indexName:e,params:a._getDisjunctiveFacetSearchParams(t,n)})})),t.getRefinedHierarchicalFacets().forEach((function(n){var i=t.getHierarchicalFacetByName(n),s=t.getHierarchicalRefinement(n),c=t._getHierarchicalFacetSeparator(i);if(s.length>0&&s[0].split(c).length>1){var o=s[0].split(c).slice(0,-1).reduce((function(e,t,r){return e.concat({attribute:i.attributes[r],value:0===r?t:[e[e.length-1].value,t].join(c)})}),[]);o.forEach((function(n,s){var c=a._getDisjunctiveFacetSearchParams(t,n.attribute,0===s);function u(e){return i.attributes.some((function(t){return t===e.split(":")[0]}))}var h=(c.facetFilters||[]).reduce((function(e,t){if(Array.isArray(t)){var r=t.filter((function(e){return!u(e)}));r.length>0&&e.push(r)}return"string"!=typeof t||u(t)||e.push(t),e}),[]),f=o[s-1];c.facetFilters=s>0?h.concat(f.attribute+":"+f.value):h.length>0?h:void 0,r.push({indexName:e,params:c})}))}})),r},_getHitsSearchParams:function(e){var t=e.facets.concat(e.disjunctiveFacets).concat(a._getHitsHierarchicalFacetsAttributes(e)).sort(),r=a._getFacetFilters(e),s=a._getNumericFilters(e),c=a._getTagFilters(e),o={facets:t.indexOf("*")>-1?["*"]:t,tagFilters:c};return r.length>0&&(o.facetFilters=r),s.length>0&&(o.numericFilters=s),i(n({},e.getQueryParams(),o))},_getDisjunctiveFacetSearchParams:function(e,t,r){var s=a._getFacetFilters(e,t,r),c=a._getNumericFilters(e,t),o=a._getTagFilters(e),u={hitsPerPage:0,page:0,analytics:!1,clickAnalytics:!1};o.length>0&&(u.tagFilters=o);var h=e.getHierarchicalFacetByName(t);return u.facets=h?a._getDisjunctiveHierarchicalFacetAttribute(e,h,r):t,c.length>0&&(u.numericFilters=c),s.length>0&&(u.facetFilters=s),i(n({},e.getQueryParams(),u))},_getNumericFilters:function(e,t){if(e.numericFilters)return e.numericFilters;var r=[];return Object.keys(e.numericRefinements).forEach((function(n){var i=e.numericRefinements[n]||{};Object.keys(i).forEach((function(e){var a=i[e]||[];t!==n&&a.forEach((function(t){if(Array.isArray(t)){var i=t.map((function(t){return n+e+t}));r.push(i)}else r.push(n+e+t)}))}))})),r},_getTagFilters:function(e){return e.tagFilters?e.tagFilters:e.tagRefinements.join(",")},_getFacetFilters:function(e,t,r){var n=[],i=e.facetsRefinements||{};Object.keys(i).sort().forEach((function(e){(i[e]||[]).slice().sort().forEach((function(t){n.push(e+":"+t)}))}));var a=e.facetsExcludes||{};Object.keys(a).sort().forEach((function(e){(a[e]||[]).sort().forEach((function(t){n.push(e+":-"+t)}))}));var s=e.disjunctiveFacetsRefinements||{};Object.keys(s).sort().forEach((function(e){var r=s[e]||[];if(e!==t&&r&&0!==r.length){var i=[];r.slice().sort().forEach((function(t){i.push(e+":"+t)})),n.push(i)}}));var c=e.hierarchicalFacetsRefinements||{};return Object.keys(c).sort().forEach((function(i){var a=(c[i]||[])[0];if(void 0!==a){var s,o,u=e.getHierarchicalFacetByName(i),h=e._getHierarchicalFacetSeparator(u),f=e._getHierarchicalRootPath(u);if(t===i){if(-1===a.indexOf(h)||!f&&!0===r||f&&f.split(h).length===a.split(h).length)return;f?(o=f.split(h).length-1,a=f):(o=a.split(h).length-2,a=a.slice(0,a.lastIndexOf(h))),s=u.attributes[o]}else o=a.split(h).length-1,s=u.attributes[o];s&&n.push([s+":"+a])}})),n},_getHitsHierarchicalFacetsAttributes:function(e){return e.hierarchicalFacets.reduce((function(t,r){var n=e.getHierarchicalRefinement(r.name)[0];if(!n)return t.push(r.attributes[0]),t;var i=e._getHierarchicalFacetSeparator(r),a=n.split(i).length,s=r.attributes.slice(0,a+1);return t.concat(s)}),[])},_getDisjunctiveHierarchicalFacetAttribute:function(e,t,r){var n=e._getHierarchicalFacetSeparator(t);if(!0===r){var i=e._getHierarchicalRootPath(t),a=0;return i&&(a=i.split(n).length),[t.attributes[a]]}var s=(e.getHierarchicalRefinement(t.name)[0]||"").split(n).length-1;return t.attributes.slice(0,s+1)},getSearchForFacetQuery:function(e,t,r,s){var c=s.isDisjunctiveFacet(e)?s.clearRefinements(e):s,o={facetQuery:t,facetName:e};return"number"==typeof r&&(o.maxFacetHits=r),i(n({},a._getHitsSearchParams(c),o))}};e.exports=a},2208:e=>{"use strict";e.exports=function(e){return null!==e&&/^[a-zA-Z0-9_-]{1,64}$/.test(e)}},6938:e=>{"use strict";e.exports="3.18.0"},3643:function(e){e.exports=function(){"use strict";function e(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function t(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function r(r){for(var n=1;n=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var r=[],n=!0,i=!1,a=void 0;try{for(var s,c=e[Symbol.iterator]();!(n=(s=c.next()).done)&&(r.push(s.value),!t||r.length!==t);n=!0);}catch(e){i=!0,a=e}finally{try{n||null==c.return||c.return()}finally{if(i)throw a}}return r}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function a(e){return function(e){if(Array.isArray(e)){for(var t=0,r=new Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then((function(){c();var t=JSON.stringify(e);return a()[t]})).then((function(e){return Promise.all([e?e.value:t(),void 0!==e])})).then((function(e){var t=i(e,2),n=t[0],a=t[1];return Promise.all([n,a||r.miss(n)])})).then((function(e){return i(e,1)[0]}))},set:function(e,t){return Promise.resolve().then((function(){var i=a();return i[JSON.stringify(e)]={timestamp:(new Date).getTime(),value:t},n().setItem(r,JSON.stringify(i)),t}))},delete:function(e){return Promise.resolve().then((function(){var t=a();delete t[JSON.stringify(e)],n().setItem(r,JSON.stringify(t))}))},clear:function(){return Promise.resolve().then((function(){n().removeItem(r)}))}}}function c(e){var t=a(e.caches),r=t.shift();return void 0===r?{get:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return t().then((function(e){return Promise.all([e,r.miss(e)])})).then((function(e){return i(e,1)[0]}))},set:function(e,t){return Promise.resolve(t)},delete:function(e){return Promise.resolve()},clear:function(){return Promise.resolve()}}:{get:function(e,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return r.get(e,n,i).catch((function(){return c({caches:t}).get(e,n,i)}))},set:function(e,n){return r.set(e,n).catch((function(){return c({caches:t}).set(e,n)}))},delete:function(e){return r.delete(e).catch((function(){return c({caches:t}).delete(e)}))},clear:function(){return r.clear().catch((function(){return c({caches:t}).clear()}))}}}function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{serializable:!0},t={};return{get:function(r,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},a=JSON.stringify(r);if(a in t)return Promise.resolve(e.serializable?JSON.parse(t[a]):t[a]);var s=n(),c=i&&i.miss||function(){return Promise.resolve()};return s.then((function(e){return c(e)})).then((function(){return s}))},set:function(r,n){return t[JSON.stringify(r)]=e.serializable?JSON.stringify(n):n,Promise.resolve(n)},delete:function(e){return delete t[JSON.stringify(e)],Promise.resolve()},clear:function(){return t={},Promise.resolve()}}}function u(e){for(var t=e.length-1;t>0;t--){var r=Math.floor(Math.random()*(t+1)),n=e[t];e[t]=e[r],e[r]=n}return e}function h(e,t){return t?(Object.keys(t).forEach((function(r){e[r]=t[r](e)})),e):e}function f(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n0?n:void 0,timeout:r.timeout||t,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var d={Read:1,Write:2,Any:3},p=1,v=2,g=3;function y(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:p;return r(r({},e),{},{status:t,lastUpdate:Date.now()})}function R(e){return"string"==typeof e?{protocol:"https",url:e,accept:d.Any}:{protocol:e.protocol||"https",url:e.url,accept:e.accept||d.Any}}var F="GET",b="POST";function P(e,t){return Promise.all(t.map((function(t){return e.get(t,(function(){return Promise.resolve(y(t))}))}))).then((function(e){var r=e.filter((function(e){return function(e){return e.status===p||Date.now()-e.lastUpdate>12e4}(e)})),n=e.filter((function(e){return function(e){return e.status===g&&Date.now()-e.lastUpdate<=12e4}(e)})),i=[].concat(a(r),a(n));return{getTimeout:function(e,t){return(0===n.length&&0===e?1:n.length+3+e)*t},statelessHosts:i.length>0?i.map((function(e){return R(e)})):t}}))}function _(e,t,n,i){var s=[],c=function(e,t){if(e.method!==F&&(void 0!==e.data||void 0!==t.data)){var n=Array.isArray(e.data)?e.data:r(r({},e.data),t.data);return JSON.stringify(n)}}(n,i),o=function(e,t){var n=r(r({},e.headers),t.headers),i={};return Object.keys(n).forEach((function(e){var t=n[e];i[e.toLowerCase()]=t})),i}(e,i),u=n.method,h=n.method!==F?{}:r(r({},n.data),i.data),f=r(r(r({"x-algolia-agent":e.userAgent.value},e.queryParameters),h),i.queryParameters),l=0,m=function t(r,a){var h=r.pop();if(void 0===h)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:O(s)};var m={data:c,headers:o,method:u,url:E(h,n.path,f),connectTimeout:a(l,e.timeouts.connect),responseTimeout:a(l,i.timeout)},d=function(e){var t={request:m,response:e,host:h,triesLeft:r.length};return s.push(t),t},p={onSuccess:function(e){return function(e){try{return JSON.parse(e.content)}catch(t){throw function(e,t){return{name:"DeserializationError",message:e,response:t}}(t.message,e)}}(e)},onRetry:function(n){var i=d(n);return n.isTimedOut&&l++,Promise.all([e.logger.info("Retryable failure",w(i)),e.hostsCache.set(h,y(h,n.isTimedOut?g:v))]).then((function(){return t(r,a)}))},onFail:function(e){throw d(e),function(e,t){var r=e.content,n=e.status,i=r;try{i=JSON.parse(r).message}catch(e){}return function(e,t,r){return{name:"ApiError",message:e,status:t,transporterStackTrace:r}}(i,n,t)}(e,O(s))}};return e.requester.send(m).then((function(e){return function(e,t){return function(e){var t=e.status;return e.isTimedOut||function(e){var t=e.isTimedOut,r=e.status;return!t&&!~~r}(e)||2!=~~(t/100)&&4!=~~(t/100)}(e)?t.onRetry(e):2==~~(e.status/100)?t.onSuccess(e):t.onFail(e)}(e,p)}))};return P(e.hostsCache,t).then((function(e){return m(a(e.statelessHosts).reverse(),e.getTimeout)}))}function j(e){var t={value:"Algolia for JavaScript (".concat(e,")"),add:function(e){var r="; ".concat(e.segment).concat(void 0!==e.version?" (".concat(e.version,")"):"");return-1===t.value.indexOf(r)&&(t.value="".concat(t.value).concat(r)),t}};return t}function E(e,t,r){var n=x(r),i="".concat(e.protocol,"://").concat(e.url,"/").concat("/"===t.charAt(0)?t.substr(1):t);return n.length&&(i+="?".concat(n)),i}function x(e){return Object.keys(e).map((function(t){return f("%s=%s",t,(r=e[t],"[object Object]"===Object.prototype.toString.call(r)||"[object Array]"===Object.prototype.toString.call(r)?JSON.stringify(e[t]):e[t]));var r})).join("&")}function O(e){return e.map((function(e){return w(e)}))}function w(e){var t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return r(r({},e),{},{request:r(r({},e.request),{},{headers:r(r({},e.request.headers),t)})})}var S=function(e){var t=e.appId,n=function(e,t,r){var n={"x-algolia-api-key":r,"x-algolia-application-id":t};return{headers:function(){return e===l.WithinHeaders?n:{}},queryParameters:function(){return e===l.WithinQueryParameters?n:{}}}}(void 0!==e.authMode?e.authMode:l.WithinHeaders,t,e.apiKey),a=function(e){var t=e.hostsCache,r=e.logger,n=e.requester,a=e.requestsCache,s=e.responsesCache,c=e.timeouts,o=e.userAgent,u=e.hosts,h=e.queryParameters,f={hostsCache:t,logger:r,requester:n,requestsCache:a,responsesCache:s,timeouts:c,userAgent:o,headers:e.headers,queryParameters:h,hosts:u.map((function(e){return R(e)})),read:function(e,t){var r=m(t,f.timeouts.read),n=function(){return _(f,f.hosts.filter((function(e){return!!(e.accept&d.Read)})),e,r)};if(!0!==(void 0!==r.cacheable?r.cacheable:e.cacheable))return n();var a={request:e,mappedRequestOptions:r,transporter:{queryParameters:f.queryParameters,headers:f.headers}};return f.responsesCache.get(a,(function(){return f.requestsCache.get(a,(function(){return f.requestsCache.set(a,n()).then((function(e){return Promise.all([f.requestsCache.delete(a),e])}),(function(e){return Promise.all([f.requestsCache.delete(a),Promise.reject(e)])})).then((function(e){var t=i(e,2);return t[0],t[1]}))}))}),{miss:function(e){return f.responsesCache.set(a,e)}})},write:function(e,t){return _(f,f.hosts.filter((function(e){return!!(e.accept&d.Write)})),e,m(t,f.timeouts.write))}};return f}(r(r({hosts:[{url:"".concat(t,"-dsn.algolia.net"),accept:d.Read},{url:"".concat(t,".algolia.net"),accept:d.Write}].concat(u([{url:"".concat(t,"-1.algolianet.com")},{url:"".concat(t,"-2.algolianet.com")},{url:"".concat(t,"-3.algolianet.com")}]))},e),{},{headers:r(r(r({},n.headers()),{"content-type":"application/x-www-form-urlencoded"}),e.headers),queryParameters:r(r({},n.queryParameters()),e.queryParameters)}));return h({transporter:a,appId:t,addAlgoliaAgent:function(e,t){a.userAgent.add({segment:e,version:t})},clearCache:function(){return Promise.all([a.requestsCache.clear(),a.responsesCache.clear()]).then((function(){}))}},e.methods)},A=function(e){return function(t,r){return t.method===F?e.transporter.read(t,r):e.transporter.write(t,r)}},N=function(e){return function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return h({transporter:e.transporter,appId:e.appId,indexName:t},r.methods)}},T=function(e){return function(t,n){var i=t.map((function(e){return r(r({},e),{},{params:x(e.params||{})})}));return e.transporter.read({method:b,path:"1/indexes/*/queries",data:{requests:i},cacheable:!0},n)}},H=function(e){return function(t,i){return Promise.all(t.map((function(t){var a=t.params,s=a.facetName,c=a.facetQuery,o=n(a,["facetName","facetQuery"]);return N(e)(t.indexName,{methods:{searchForFacetValues:k}}).searchForFacetValues(s,c,r(r({},i),o))})))}},Q=function(e){return function(t,r,n){return e.transporter.read({method:b,path:f("1/answers/%s/prediction",e.indexName),data:{query:t,queryLanguages:r},cacheable:!0},n)}},C=function(e){return function(t,r){return e.transporter.read({method:b,path:f("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},r)}},k=function(e){return function(t,r,n){return e.transporter.read({method:b,path:f("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:r},cacheable:!0},n)}},D=1,I=2,q=3,L=function(e){return function(t,n){var i=t.map((function(e){return r(r({},e),{},{threshold:e.threshold||0})}));return e.transporter.read({method:b,path:"1/indexes/*/recommendations",data:{requests:i},cacheable:!0},n)}};function V(e,t,n){var i,a={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:function(e){return new Promise((function(t){var r=new XMLHttpRequest;r.open(e.method,e.url,!0),Object.keys(e.headers).forEach((function(t){return r.setRequestHeader(t,e.headers[t])}));var n,i=function(e,n){return setTimeout((function(){r.abort(),t({status:0,content:n,isTimedOut:!0})}),1e3*e)},a=i(e.connectTimeout,"Connection timeout");r.onreadystatechange=function(){r.readyState>r.OPENED&&void 0===n&&(clearTimeout(a),n=i(e.responseTimeout,"Socket timeout"))},r.onerror=function(){0===r.status&&(clearTimeout(a),clearTimeout(n),t({content:r.responseText||"Network request failed",status:r.status,isTimedOut:!1}))},r.onload=function(){clearTimeout(a),clearTimeout(n),t({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(e.data)}))}},logger:(i=q,{debug:function(e,t){return D>=i&&console.debug(e,t),Promise.resolve()},info:function(e,t){return I>=i&&console.info(e,t),Promise.resolve()},error:function(e,t){return console.error(e,t),Promise.resolve()}}),responsesCache:o(),requestsCache:o({serializable:!1}),hostsCache:c({caches:[s({key:"".concat("4.23.3","-").concat(e)}),o()]}),userAgent:j("4.23.3").add({segment:"Browser",version:"lite"}),authMode:l.WithinQueryParameters};return S(r(r(r({},a),n),{},{methods:{search:T,searchForFacetValues:H,multipleQueries:T,multipleSearchForFacetValues:H,customRequest:A,initIndex:function(e){return function(t){return N(e)(t,{methods:{search:C,searchForFacetValues:k,findAnswers:Q}})}},getRecommendations:L}}))}return V.version="4.23.3",V}()},906:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>H});var n=r(6540),i=r(3643),a=r.n(i),s=r(4103),c=r.n(s),o=r(53),u=r(2602),h=r(4676),f=r(8193),l=r(3155),m=r(4586),d=r(4098),p=r(6225),v=r(5593),g=r(4798);const y="searchQueryInput_gKrp",R="searchVersionInput_yK3v",F="searchResultsColumn_u0zF",b="algoliaLogo_8CW0",P="algoliaLogoPathFill_P7SL",_="searchResultItem_AAMZ",j="searchResultItemHeading_Z8N+",E="searchResultItemPath_0ix4",x="searchResultItemSummary_jyET",O="searchQueryColumn_oQOT",w="searchVersionColumn_AEiZ",S="searchLogoColumn_tJ40",A="loadingSpinner_DlG9",N="loader_L7Al";const T=e=>{let{docsSearchVersionsHelpers:t}=e;const r=Object.entries(t.allDocsData).filter((e=>{let[,t]=e;return t.versions.length>1}));return n.createElement("div",{className:(0,o.A)("col","col--3","padding-left--none",w)},r.map((e=>{let[i,a]=e;const s=r.length>1?`${i}: `:"";return n.createElement("select",{key:i,onChange:e=>t.setSearchVersion(i,e.target.value),defaultValue:t.searchVersions[i],className:R},a.versions.map(((e,t)=>n.createElement("option",{key:t,label:`${s}${e.label}`,value:e.name}))))})))};const H=function(){const{siteConfig:{themeConfig:{algolia:{appId:e,apiKey:t,indexName:r}}},i18n:{currentLocale:i}}=(0,m.A)(),s=function(){const{selectMessage:e}=(0,l.Ww)();return t=>e(t,(0,g.T)({id:"theme.SearchPage.documentsFound.plurals",description:'Pluralized label for "{count} documents found". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One document found|{count} documents found"},{count:t}))}(),R=function(){const e=(0,d.Gy)(),[t,r]=(0,n.useState)((()=>Object.entries(e).reduce(((e,t)=>{let[r,n]=t;return{...e,[r]:n.versions[0].name}}),{}))),i=Object.values(e).some((e=>e.versions.length>1));return{allDocsData:e,versioningEnabled:i,searchVersions:t,setSearchVersion:(e,t)=>r((r=>({...r,[e]:t})))}}(),{searchValue:w,updateSearchPath:H}=(0,p.A)(),[Q,C]=(0,n.useState)(w),k={items:[],query:null,totalResults:null,totalPages:null,lastPage:null,hasMore:null,loading:null},[D,I]=(0,n.useReducer)(((e,t)=>{let{type:r,value:n}=t;switch(r){case"reset":return k;case"loading":return{...e,loading:!0};case"update":return Q!==n.query?e:{...n,items:0===n.lastPage?n.items:e.items.concat(n.items)};case"advance":{const t=e.totalPages>e.lastPage+1;return{...e,lastPage:t?e.lastPage+1:e.lastPage,hasMore:t}}default:return e}}),k),q=a()(e,t),L=c()(q,r,{hitsPerPage:15,advancedSyntax:!0,disjunctiveFacets:["language","docusaurus_tag"]});L.on("result",(e=>{let{results:{query:t,hits:r,page:n,nbHits:i,nbPages:a}}=e;if(""===t||!(r instanceof Array))return void I({type:"reset"});const s=e=>e.replace(/algolia-docsearch-suggestion--highlight/g,"search-result-match"),c=r.map((e=>{let{url:t,_highlightResult:{hierarchy:r},_snippetResult:n={}}=e;const{pathname:i,hash:a}=new URL(t),c=Object.keys(r).map((e=>s(r[e].value)));return{title:c.pop(),url:i+a,summary:n.content?`${s(n.content.value)}...`:"",breadcrumbs:c}}));I({type:"update",value:{items:c,query:t,totalResults:i,totalPages:a,lastPage:n,hasMore:a>n+1,loading:!1}})}));const[V,B]=(0,n.useState)(null),M=(0,n.useRef)(0),z=(0,n.useRef)(f.A.canUseDOM&&new IntersectionObserver((e=>{const{isIntersecting:t,boundingClientRect:{y:r}}=e[0];t&&M.current>r&&I({type:"advance"}),M.current=r}),{threshold:1})),J=()=>Q?(0,g.T)({id:"theme.SearchPage.existingResultsTitle",message:'Search results for "{query}"',description:"The search page title for non-empty query"},{query:Q}):(0,g.T)({id:"theme.SearchPage.emptyResultsTitle",message:"Search the documentation",description:"The search page title for empty query"}),W=function(e){void 0===e&&(e=0),L.addDisjunctiveFacetRefinement("docusaurus_tag","default"),L.addDisjunctiveFacetRefinement("language",i),Object.entries(R.searchVersions).forEach((e=>{let[t,r]=e;L.addDisjunctiveFacetRefinement("docusaurus_tag",`docs-${t}-${r}`)})),L.setQuery(Q).setPage(e).search()};return(0,n.useEffect)((()=>{if(V)return z.current.observe(V),()=>{z.current.unobserve(V)}}),[V]),(0,n.useEffect)((()=>{H(Q),I({type:"reset"}),Q&&(I({type:"loading"}),setTimeout((()=>{W()}),300))}),[Q,R.searchVersions]),(0,n.useEffect)((()=>{D.lastPage&&0!==D.lastPage&&W(D.lastPage)}),[D.lastPage]),(0,n.useEffect)((()=>{w&&w!==Q&&C(w)}),[w]),n.createElement(v.A,{wrapperClassName:"search-page-wrapper"},n.createElement(u.A,null,n.createElement("title",null,(0,l.s$)(J())),n.createElement("meta",{property:"robots",content:"noindex, follow"})),n.createElement("div",{className:"container margin-vert--lg"},n.createElement("h1",null,J()),n.createElement("form",{className:"row",onSubmit:e=>e.preventDefault()},n.createElement("div",{className:(0,o.A)("col",O,{"col--9":R.versioningEnabled,"col--12":!R.versioningEnabled})},n.createElement("input",{type:"search",name:"q",className:y,placeholder:(0,g.T)({id:"theme.SearchPage.inputPlaceholder",message:"Type your search here",description:"The placeholder for search page input"}),"aria-label":(0,g.T)({id:"theme.SearchPage.inputLabel",message:"Search",description:"The ARIA label for search page input"}),onChange:e=>C(e.target.value),value:Q,autoComplete:"off",autoFocus:!0})),R.versioningEnabled&&n.createElement(T,{docsSearchVersionsHelpers:R})),n.createElement("div",{className:"row"},n.createElement("div",{className:(0,o.A)("col","col--8",F)},!!D.totalResults&&s(D.totalResults)),n.createElement("div",{className:(0,o.A)("col","col--4","text--right",S)},n.createElement("a",{target:"_blank",rel:"noopener noreferrer",href:"https://www.algolia.com/","aria-label":(0,g.T)({id:"theme.SearchPage.algoliaLabel",message:"Search by Algolia",description:"The ARIA label for Algolia mention"})},n.createElement("svg",{viewBox:"0 0 168 24",className:b},n.createElement("g",{fill:"none"},n.createElement("path",{className:P,d:"M120.925 18.804c-4.386.02-4.386-3.54-4.386-4.106l-.007-13.336 2.675-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-10.846-2.18c.821 0 1.43-.047 1.855-.129v-2.719a6.334 6.334 0 0 0-1.574-.199 5.7 5.7 0 0 0-.897.069 2.699 2.699 0 0 0-.814.24c-.24.116-.439.28-.582.491-.15.212-.219.335-.219.656 0 .628.219.991.616 1.23s.938.362 1.615.362zm-.233-9.7c.883 0 1.629.109 2.231.328.602.218 1.088.525 1.444.915.363.396.609.922.76 1.483.157.56.232 1.175.232 1.85v6.874a32.5 32.5 0 0 1-1.868.314c-.834.123-1.772.185-2.813.185-.69 0-1.327-.069-1.895-.198a4.001 4.001 0 0 1-1.471-.636 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.803 0-.656.13-1.073.384-1.525a3.24 3.24 0 0 1 1.047-1.106c.445-.287.95-.492 1.532-.615a8.8 8.8 0 0 1 1.82-.185 8.404 8.404 0 0 1 1.972.24v-.438c0-.307-.035-.6-.11-.874a1.88 1.88 0 0 0-.384-.73 1.784 1.784 0 0 0-.724-.493 3.164 3.164 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.735 7.735 0 0 0-1.26.307l-.321-2.192c.335-.117.834-.233 1.478-.349a10.98 10.98 0 0 1 2.073-.178zm52.842 9.626c.822 0 1.43-.048 1.854-.13V13.7a6.347 6.347 0 0 0-1.574-.199c-.294 0-.595.021-.896.069a2.7 2.7 0 0 0-.814.24 1.46 1.46 0 0 0-.582.491c-.15.212-.218.335-.218.656 0 .628.218.991.615 1.23.404.245.938.362 1.615.362zm-.226-9.694c.883 0 1.629.108 2.231.327.602.219 1.088.526 1.444.915.355.39.609.923.759 1.483a6.8 6.8 0 0 1 .233 1.852v6.873c-.41.088-1.034.19-1.868.314-.834.123-1.772.184-2.813.184-.69 0-1.327-.068-1.895-.198a4.001 4.001 0 0 1-1.471-.635 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.804 0-.656.13-1.073.384-1.524.26-.45.608-.82 1.047-1.107.445-.286.95-.491 1.532-.614a8.803 8.803 0 0 1 2.751-.13c.329.034.671.096 1.04.185v-.437a3.3 3.3 0 0 0-.109-.875 1.873 1.873 0 0 0-.384-.731 1.784 1.784 0 0 0-.724-.492 3.165 3.165 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.75 7.75 0 0 0-1.26.307l-.321-2.193c.335-.116.834-.232 1.478-.348a11.633 11.633 0 0 1 2.073-.177zm-8.034-1.271a1.626 1.626 0 0 1-1.628-1.62c0-.895.725-1.62 1.628-1.62.904 0 1.63.725 1.63 1.62 0 .895-.733 1.62-1.63 1.62zm1.348 13.22h-2.689V7.27l2.69-.423v11.956zm-4.714 0c-4.386.02-4.386-3.54-4.386-4.107l-.008-13.336 2.676-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-8.698-5.903c0-1.156-.253-2.119-.746-2.788-.493-.677-1.183-1.01-2.067-1.01-.882 0-1.574.333-2.065 1.01-.493.676-.733 1.632-.733 2.788 0 1.168.246 1.953.74 2.63.492.683 1.183 1.018 2.066 1.018.882 0 1.574-.342 2.067-1.019.492-.683.738-1.46.738-2.63zm2.737-.007c0 .902-.13 1.584-.397 2.33a5.52 5.52 0 0 1-1.128 1.906 4.986 4.986 0 0 1-1.752 1.223c-.685.286-1.739.45-2.265.45-.528-.006-1.574-.157-2.252-.45a5.096 5.096 0 0 1-1.744-1.223c-.487-.527-.863-1.162-1.137-1.906a6.345 6.345 0 0 1-.41-2.33c0-.902.123-1.77.397-2.508a5.554 5.554 0 0 1 1.15-1.892 5.133 5.133 0 0 1 1.75-1.216c.679-.287 1.425-.423 2.232-.423.808 0 1.553.142 2.237.423a4.88 4.88 0 0 1 1.753 1.216 5.644 5.644 0 0 1 1.135 1.892c.287.738.431 1.606.431 2.508zm-20.138 0c0 1.12.246 2.363.738 2.882.493.52 1.13.78 1.91.78.424 0 .828-.062 1.204-.178.377-.116.677-.253.917-.417V9.33a10.476 10.476 0 0 0-1.766-.226c-.971-.028-1.71.37-2.23 1.004-.513.636-.773 1.75-.773 2.788zm7.438 5.274c0 1.824-.466 3.156-1.404 4.004-.936.846-2.367 1.27-4.296 1.27-.705 0-2.17-.137-3.34-.396l.431-2.118c.98.205 2.272.26 2.95.26 1.074 0 1.84-.219 2.299-.656.459-.437.684-1.086.684-1.948v-.437a8.07 8.07 0 0 1-1.047.397c-.43.13-.93.198-1.492.198-.739 0-1.41-.116-2.018-.349a4.206 4.206 0 0 1-1.567-1.025c-.431-.45-.774-1.017-1.013-1.694-.24-.677-.363-1.885-.363-2.773 0-.834.13-1.88.384-2.577.26-.696.629-1.298 1.129-1.796.493-.498 1.095-.881 1.8-1.162a6.605 6.605 0 0 1 2.428-.457c.87 0 1.67.109 2.45.24.78.129 1.444.265 1.985.415V18.17zM6.972 6.677v1.627c-.712-.446-1.52-.67-2.425-.67-.585 0-1.045.13-1.38.391a1.24 1.24 0 0 0-.502 1.03c0 .425.164.765.494 1.02.33.256.835.532 1.516.83.447.192.795.356 1.045.495.25.138.537.332.862.582.324.25.563.548.718.894.154.345.23.741.23 1.188 0 .947-.334 1.691-1.004 2.234-.67.542-1.537.814-2.601.814-1.18 0-2.16-.229-2.936-.686v-1.708c.84.628 1.814.942 2.92.942.585 0 1.048-.136 1.388-.407.34-.271.51-.646.51-1.125 0-.287-.1-.55-.302-.79-.203-.24-.42-.42-.655-.542-.234-.123-.585-.29-1.053-.503a61.27 61.27 0 0 1-.582-.271 13.67 13.67 0 0 1-.55-.287 4.275 4.275 0 0 1-.567-.351 6.92 6.92 0 0 1-.455-.4c-.18-.17-.31-.34-.39-.51-.08-.17-.155-.37-.224-.598a2.553 2.553 0 0 1-.104-.742c0-.915.333-1.638.998-2.17.664-.532 1.523-.798 2.576-.798.968 0 1.793.17 2.473.51zm7.468 5.696v-.287c-.022-.607-.187-1.088-.495-1.444-.309-.357-.75-.535-1.324-.535-.532 0-.99.194-1.373.583-.382.388-.622.949-.717 1.683h3.909zm1.005 2.792v1.404c-.596.34-1.383.51-2.362.51-1.255 0-2.255-.377-3-1.132-.744-.755-1.116-1.744-1.116-2.968 0-1.297.34-2.316 1.021-3.055.68-.74 1.548-1.11 2.6-1.11 1.033 0 1.852.323 2.458.966.606.644.91 1.572.91 2.784 0 .33-.033.676-.096 1.038h-5.314c.107.702.405 1.239.894 1.611.49.372 1.106.558 1.85.558.862 0 1.58-.202 2.155-.606zm6.605-1.77h-1.212c-.596 0-1.045.116-1.349.35-.303.234-.454.532-.454.894 0 .372.117.664.35.877.235.213.575.32 1.022.32.51 0 .912-.142 1.204-.424.293-.281.44-.651.44-1.108v-.91zm-4.068-2.554V9.325c.627-.361 1.457-.542 2.489-.542 2.116 0 3.175 1.026 3.175 3.08V17h-1.548v-.957c-.415.68-1.143 1.02-2.186 1.02-.766 0-1.38-.22-1.843-.661-.462-.442-.694-1.003-.694-1.684 0-.776.293-1.38.878-1.81.585-.431 1.404-.647 2.457-.647h1.34V11.8c0-.554-.133-.971-.399-1.253-.266-.282-.707-.423-1.324-.423a4.07 4.07 0 0 0-2.345.718zm9.333-1.93v1.42c.394-1 1.101-1.5 2.123-1.5.148 0 .313.016.494.048v1.531a1.885 1.885 0 0 0-.75-.143c-.542 0-.989.24-1.34.718-.351.479-.527 1.048-.527 1.707V17h-1.563V8.91h1.563zm5.01 4.084c.022.82.272 1.492.75 2.019.479.526 1.15.79 2.01.79.639 0 1.235-.176 1.788-.527v1.404c-.521.319-1.186.479-1.995.479-1.265 0-2.276-.4-3.031-1.197-.755-.798-1.133-1.792-1.133-2.984 0-1.16.38-2.151 1.14-2.975.761-.825 1.79-1.237 3.088-1.237.702 0 1.346.149 1.93.447v1.436a3.242 3.242 0 0 0-1.77-.495c-.84 0-1.513.266-2.019.798-.505.532-.758 1.213-.758 2.042zM40.24 5.72v4.579c.458-1 1.293-1.5 2.505-1.5.787 0 1.42.245 1.899.734.479.49.718 1.17.718 2.042V17h-1.564v-5.106c0-.553-.14-.98-.422-1.284-.282-.303-.652-.455-1.11-.455-.531 0-1.002.202-1.411.606-.41.405-.615 1.022-.615 1.851V17h-1.563V5.72h1.563zm14.966 10.02c.596 0 1.096-.253 1.5-.758.404-.506.606-1.157.606-1.955 0-.915-.202-1.62-.606-2.114-.404-.495-.92-.742-1.548-.742-.553 0-1.05.224-1.491.67-.442.447-.662 1.133-.662 2.058 0 .958.212 1.67.638 2.138.425.469.946.703 1.563.703zM53.004 5.72v4.42c.574-.894 1.388-1.341 2.44-1.341 1.022 0 1.857.383 2.506 1.149.649.766.973 1.781.973 3.047 0 1.138-.309 2.109-.925 2.912-.617.803-1.463 1.205-2.537 1.205-1.075 0-1.894-.447-2.457-1.34V17h-1.58V5.72h1.58zm9.908 11.104l-3.223-7.913h1.739l1.005 2.632 1.26 3.415c.096-.32.48-1.458 1.15-3.415l.909-2.632h1.66l-2.92 7.866c-.777 2.074-1.963 3.11-3.559 3.11a2.92 2.92 0 0 1-.734-.079v-1.34c.17.042.351.064.543.064 1.032 0 1.755-.57 2.17-1.708z"}),n.createElement("path",{fill:"#5468FF",d:"M78.988.938h16.594a2.968 2.968 0 0 1 2.966 2.966V20.5a2.967 2.967 0 0 1-2.966 2.964H78.988a2.967 2.967 0 0 1-2.966-2.964V3.897A2.961 2.961 0 0 1 78.988.938z"}),n.createElement("path",{fill:"white",d:"M89.632 5.967v-.772a.978.978 0 0 0-.978-.977h-2.28a.978.978 0 0 0-.978.977v.793c0 .088.082.15.171.13a7.127 7.127 0 0 1 1.984-.28c.65 0 1.295.088 1.917.259.082.02.164-.04.164-.13m-6.248 1.01l-.39-.389a.977.977 0 0 0-1.382 0l-.465.465a.973.973 0 0 0 0 1.38l.383.383c.062.061.15.047.205-.014.226-.307.472-.601.746-.874.281-.28.568-.526.883-.751.068-.042.075-.137.02-.2m4.16 2.453v3.341c0 .096.104.165.192.117l2.97-1.537c.068-.034.089-.117.055-.184a3.695 3.695 0 0 0-3.08-1.866c-.068 0-.136.054-.136.13m0 8.048a4.489 4.489 0 0 1-4.49-4.482 4.488 4.488 0 0 1 4.49-4.482 4.488 4.488 0 0 1 4.489 4.482 4.484 4.484 0 0 1-4.49 4.482m0-10.85a6.363 6.363 0 1 0 0 12.729 6.37 6.37 0 0 0 6.372-6.368 6.358 6.358 0 0 0-6.371-6.36"})))))),D.items.length>0?n.createElement("main",null,D.items.map(((e,t)=>{let{title:r,url:i,summary:a,breadcrumbs:s}=e;return n.createElement("article",{key:t,className:_},n.createElement("h2",{className:j},n.createElement(h.A,{to:i,dangerouslySetInnerHTML:{__html:r}})),s.length>0&&n.createElement("nav",{"aria-label":"breadcrumbs"},n.createElement("ul",{className:(0,o.A)("breadcrumbs",E)},s.map(((e,t)=>n.createElement("li",{key:t,className:"breadcrumbs__item",dangerouslySetInnerHTML:{__html:e}}))))),a&&n.createElement("p",{className:x,dangerouslySetInnerHTML:{__html:a}}))}))):[Q&&!D.loading&&n.createElement("p",{key:"no-results"},n.createElement(g.A,{id:"theme.SearchPage.noResultsText",description:"The paragraph for empty search result"},"No results were found")),!!D.loading&&n.createElement("div",{key:"spinner",className:A})],D.hasMore&&n.createElement("div",{className:N,ref:B},n.createElement(g.A,{id:"theme.SearchPage.fetchingNewResults",description:"The paragraph for fetching new search results"},"Fetching new results..."))))}}}]); \ No newline at end of file diff --git a/assets/js/18ba09e8.a254f0fc.js b/assets/js/18ba09e8.a254f0fc.js deleted file mode 100644 index 800b9c1c..00000000 --- a/assets/js/18ba09e8.a254f0fc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdashy=self.webpackChunkdashy||[]).push([[849],{5680:(t,e,a)=>{a.d(e,{xA:()=>y,yg:()=>b});var n=a(6540);function l(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function g(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function r(t){for(var e=1;e=0||(l[a]=t[a]);return l}(t,e);if(Object.getOwnPropertySymbols){var g=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(l[a]=t[a])}return l}var i=n.createContext({}),s=function(t){var e=n.useContext(i),a=e;return t&&(a="function"==typeof t?t(e):r(r({},e),t)),a},y=function(t){var e=s(t.components);return n.createElement(i.Provider,{value:e},t.children)},h="mdxType",o={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},c=n.forwardRef((function(t,e){var a=t.components,l=t.mdxType,g=t.originalType,i=t.parentName,y=u(t,["components","mdxType","originalType","parentName"]),h=s(a),c=l,b=h["".concat(i,".").concat(c)]||h[c]||o[c]||g;return a?n.createElement(b,r(r({ref:e},y),{},{components:a})):n.createElement(b,r({ref:e},y))}));function b(t,e){var a=arguments,l=e&&e.mdxType;if("string"==typeof t||l){var g=a.length,r=new Array(g);r[0]=c;var u={};for(var i in e)hasOwnProperty.call(e,i)&&(u[i]=e[i]);u.originalType=t,u[h]="string"==typeof t?t:l,r[1]=u;for(var s=2;s{a.r(e),a.d(e,{contentTitle:()=>r,default:()=>h,frontMatter:()=>g,metadata:()=>u,toc:()=>i});var n=a(8168),l=(a(6540),a(5680));const g={},r="Credits",u={unversionedId:"credits",id:"credits",isDocsHomePage:!1,title:"Credits",description:"Sponsors",source:"@site/docs/credits.md",sourceDirName:".",slug:"/credits",permalink:"/docs/credits",editUrl:"https://github.com/Lissy93/dashy/edit/gh-pages/docs/docs/credits.md",version:"current",frontMatter:{}},i=[{value:"Sponsors",id:"sponsors",children:[]},{value:"Contributors",id:"contributors",children:[]},{value:"Helpful Users",id:"helpful-users",children:[]},{value:"Bots",id:"bots",children:[]},{value:"Newest Stargazers",id:"newest-stargazers",children:[]},{value:"Dependencies",id:"dependencies",children:[{value:"Core",id:"core",children:[]},{value:"Utilities",id:"utilities",children:[]},{value:"Frontend Components",id:"frontend-components",children:[]},{value:"Backup & Sync Server",id:"backup--sync-server",children:[]},{value:"External Services",id:"external-services",children:[]},{value:"Actions",id:"actions",children:[]}]},{value:"You",id:"you",children:[]}],s={toc:i},y="wrapper";function h(t){let{components:e,...a}=t;return(0,l.yg)(y,(0,n.A)({},s,a,{components:e,mdxType:"MDXLayout"}),(0,l.yg)("h1",{id:"credits"},"Credits"),(0,l.yg)("h2",{id:"sponsors"},"Sponsors"),(0,l.yg)("table",null,(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/github"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/9919?v=4",width:"80;",alt:"github"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"GitHub")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/koconder"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/25068?u=582657b23622aaa3dfe68bd028a780f272f456fa&v=4",width:"80;",alt:"koconder"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Vincent Koc")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/Admonstrator"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/69824?u=1e226d7a36cdd661c3e4cd486fea140d045b7d57&v=4",width:"80;",alt:"Admonstrator"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Aaron Viehl")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/tbjers"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/1117052?v=4",width:"80;",alt:"tbjers"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Torgny Bjers")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/emlazzarin"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/1141361?u=714e3487a3f2e0df721b01a0133945f075d3ff68&v=4",width:"80;",alt:"emlazzarin"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Eddy Lazzarin")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/AnandChowdhary"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/2841780?u=747e554b3a7f12eb20b7910e1c87d817844f714f&v=4",width:"80;",alt:"AnandChowdhary"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Anand Chowdhary"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/shrippen"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/2873570?v=4",width:"80;",alt:"shrippen"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/bile0026"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/5022496?u=aec96ad173c0ea9baaba93807efa8a848af6595c&v=4",width:"80;",alt:"bile0026"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Zach Biles")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/UlisesGascon"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/5110813?u=3c41facd8aa26154b9451de237c34b0f78d672a5&v=4",width:"80;",alt:"UlisesGascon"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Ulises Gasc\xf3n")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/digitalarche"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/6546135?u=564756d7f44ab2206819eb3148f6d822673f5066&v=4",width:"80;",alt:"digitalarche"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Digital Archeology")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/InDieTasten"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/7047377?u=8d8f8017628b38bc46dcbf3620e194b01d3fb2d1&v=4",width:"80;",alt:"InDieTasten"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/araguaci"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/7318668?v=4",width:"80;",alt:"araguaci"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/bmcgonag"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/7346620?u=2a0f9284f3e12ac1cc15288c254d1ec68a5081e8&v=4",width:"80;",alt:"bmcgonag"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Brian McGonagill")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/vlad-timofeev"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/11474041?u=eee43705b54d2ec9f51fc4fcce5ad18dd17c87e4&v=4",width:"80;",alt:"vlad-timofeev"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Vlad Timofeev")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/helixzz"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/12218889?u=d06d0c103dfbdb99450623064f7da3c5a3675fb6&v=4",width:"80;",alt:"helixzz"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"HeliXZz")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/patvdv"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/12430107?u=e8911c2fb91af4d30432f76da8c40927b2830bd7&v=4",width:"80;",alt:"patvdv"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Patrick Van Der Veken")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/plgonzalezrx8"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/19900049?v=4",width:"80;",alt:"plgonzalezrx8"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Pedro Gonzalez")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/mryesiller"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/24632172?u=0d20f2d615158f87cd60a3398d3efb026c32f291&v=4",width:"80;",alt:"mryesiller"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"G\xf6ksel Ye\u015filler"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/allesauseinerhand"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/32039836?v=4",width:"80;",alt:"allesauseinerhand"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/forwardemail"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/32481436?v=4",width:"80;",alt:"forwardemail"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Forward Email - Open-source & Privacy-focused Email Service (2023)")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/lamtrinhdev"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/49742151?u=c5eaca5aa6841a80605cf4f7d0e861a9e6339ef3&v=4",width:"80;",alt:"lamtrinhdev"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"LamTrinh.Dev")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/Bastii717"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/53431819?u=604977bed6ad6875ada890d0d3765a4cacc2fa14&v=4",width:"80;",alt:"Bastii717"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/getumbrel"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/59408891?v=4",width:"80;",alt:"getumbrel"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Umbrel")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/M2TD"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/85460457?v=4",width:"80;",alt:"M2TD"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/frankdez93"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/87549420?v=4",width:"80;",alt:"frankdez93"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/terminaltrove"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/121595180?v=4",width:"80;",alt:"terminaltrove"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Terminal Trove")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/NixyJuppie"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/138570196?u=b102c222487905728b858704962d32759df29ebe&v=4",width:"80;",alt:"NixyJuppie"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Nixy")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/nrvo"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/151435968?u=e1dcb307fd0efdc45cddbe9490a7b956e4da6835&v=4",width:"80;",alt:"nrvo"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))))),(0,l.yg)("h2",{id:"contributors"},"Contributors"),(0,l.yg)("table",null,(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/Lissy93"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/1862727?v=4",width:"80;",alt:"Lissy93"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Alicia Sykes")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/liss-bot"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/87835202?v=4",width:"80;",alt:"liss-bot"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Alicia Bot")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/marekful"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/10281476?v=4",width:"80;",alt:"marekful"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Marcell F\xfcl\xf6p")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/EVOTk"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/45015615?v=4",width:"80;",alt:"EVOTk"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"EVOTk")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/snyk-bot"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/19733683?v=4",width:"80;",alt:"snyk-bot"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Snyk Bot")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/azerioxal"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/5369885?v=4",width:"80;",alt:"azerioxal"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Kenneth Church"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/m42e"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/2410802?v=4",width:"80;",alt:"m42e"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Matthias Bilger")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/CrazyWolf13"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/96661824?v=4",width:"80;",alt:"CrazyWolf13"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Tobias")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/pinarruiz"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/37040888?v=4",width:"80;",alt:"pinarruiz"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Alejandro Pinar Ruiz")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/imjimmeh"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/2104997?v=4",width:"80;",alt:"imjimmeh"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/kashif-se"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/5568138?v=4",width:"80;",alt:"kashif-se"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Kashif Sohail")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/walkxcode"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/71191962?v=4",width:"80;",alt:"walkxcode"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Walkx"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/josuablejeru"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/37913833?v=4",width:"80;",alt:"josuablejeru"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Josua Blejeru ")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/evroon"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/11857441?v=4",width:"80;",alt:"evroon"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Erik Vroon")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/jammo2k5"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/8106602?v=4",width:"80;",alt:"jammo2k5"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Jammo2k5")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/lordpansar"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/14231148?v=4",width:"80;",alt:"lordpansar"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Magnus Sundstr\xf6m")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/Cereal916"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/7526937?v=4",width:"80;",alt:"Cereal916"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Kristian Brasel")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/albcp"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/3170731?v=4",width:"80;",alt:"albcp"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Alberto"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/altearius"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/270430?v=4",width:"80;",alt:"altearius"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Chris Nielsen")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/UrekD"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/38784343?v=4",width:"80;",alt:"UrekD"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"UrekD")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/z3r0l1nk"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/31653632?v=4",width:"80;",alt:"z3r0l1nk"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Mihai")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/wozboz"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/51856582?v=4",width:"80;",alt:"wozboz"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/Totto16"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/32566573?v=4",width:"80;",alt:"Totto16"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Totto16")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/toddejohnson"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/507545?v=4",width:"80;",alt:"toddejohnson"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Todd Johnson"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/remygrandin"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/1934515?v=4",width:"80;",alt:"remygrandin"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Remygrandin")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/DimitriDR"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/56969769?v=4",width:"80;",alt:"DimitriDR"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Dimitri")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/Tracreed"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/6306365?v=4",width:"80;",alt:"Tracreed"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"David Alasow")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/aviolaris"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/48277853?v=4",width:"80;",alt:"aviolaris"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Andreas Violaris")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/rubenandre"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/9402773?v=4",width:"80;",alt:"rubenandre"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"R\xfaben Silva")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/rtm516"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/5401186?v=4",width:"80;",alt:"rtm516"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Rtm516"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/zcq100"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/425234?v=4",width:"80;",alt:"zcq100"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/onedr0p"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/213795?v=4",width:"80;",alt:"onedr0p"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"\u15ea\u0454\u03bd\u03b9\u03b7 \u15f7\u03c5\u043d\u029f")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/stanly0726"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/37040069?v=4",width:"80;",alt:"stanly0726"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Stanly0726")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/Bogyie"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/82003678?v=4",width:"80;",alt:"Bogyie"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Bogyeong Kim")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/Tuzi555"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/62188066?v=4",width:"80;",alt:"Tuzi555"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Jakub Tuzar")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/berksmbl"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/10000339?v=4",width:"80;",alt:"berksmbl"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Berk S\xfcmb\xfcl"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/alucarddelta"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/20882097?v=4",width:"80;",alt:"alucarddelta"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Brent")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/k073l"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/21180271?v=4",width:"80;",alt:"k073l"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/kt-alt"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/51970249?v=4",width:"80;",alt:"kt-alt"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/mmihaly"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/50031464?v=4",width:"80;",alt:"mmihaly"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/patrickheeney"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/1407228?v=4",width:"80;",alt:"patrickheeney"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Patrick Heeney")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/rokiden"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/11071229?v=4",width:"80;",alt:"rokiden"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Denis Kazimirov"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/zigotica"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/178855?v=4",width:"80;",alt:"zigotica"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Sergi Meseguer")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/BySempron"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/15928132?v=4",width:"80;",alt:"BySempron"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Sergio")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/ssrangisetti"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/46807508?v=4",width:"80;",alt:"ssrangisetti"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/itsmejoeeey"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/9375730?v=4",width:"80;",alt:"itsmejoeeey"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Joey Miller")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/hockeymikey"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/1435185?v=4",width:"80;",alt:"hockeymikey"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/thomaswienecke"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/11446531?v=4",width:"80;",alt:"thomaswienecke"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Thomas Wienecke"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/deneor"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/1063265?v=4",width:"80;",alt:"deneor"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/daentech"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/358678?v=4",width:"80;",alt:"daentech"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Dan Gilbert")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/moemoeq"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/1808434?v=4",width:"80;",alt:"moemoeq"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"CHAIYEON CHO")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/BOZG"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/6022344?v=4",width:"80;",alt:"BOZG"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Stephen Rigney")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/a-mnich"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/56564725?v=4",width:"80;",alt:"a-mnich"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Alexander Mnich")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/alexdelprete"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/7027842?v=4",width:"80;",alt:"alexdelprete"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Alessandro Del Prete"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/alayham"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/518776?v=4",width:"80;",alt:"alayham"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Al-Ayham Saleh")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/sachahjkl"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/32895534?v=4",width:"80;",alt:"sachahjkl"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Sacha")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/shazzx"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/131521332?v=4",width:"80;",alt:"shazzx"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Shazz")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/ThinkSalat"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/31082405?v=4",width:"80;",alt:"ThinkSalat"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Shawn Salat")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/royshreyaa"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/139828242?v=4",width:"80;",alt:"royshreyaa"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/Smexhy"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/4880625?v=4",width:"80;",alt:"Smexhy"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/stavros-k"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/47820033?v=4",width:"80;",alt:"stavros-k"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Stavros Kois")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/XenonR"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/18627623?v=4",width:"80;",alt:"XenonR"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Steffen Schmidt")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/StevKast"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/17804308?v=4",width:"80;",alt:"StevKast"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Steven Kast")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/AmadeusGraves"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/18572939?v=4",width:"80;",alt:"AmadeusGraves"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"\xc1ngel Fern\xe1ndez S\xe1nchez")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/turnrye"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/701035?v=4",width:"80;",alt:"turnrye"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Ryan Turner")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/rubjo"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/42270947?v=4",width:"80;",alt:"rubjo"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/PrynsTag"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/56314705?v=4",width:"80;",alt:"PrynsTag"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Prince Carl Velasco")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/PlusaN"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/61884717?v=4",width:"80;",alt:"PlusaN"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Andrey")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/oka4shi"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/67847553?v=4",width:"80;",alt:"oka4shi"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"OKAMOTO Shigehiro")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/bubylou"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/3878640?v=4",width:"80;",alt:"bubylou"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Nicholas Malcolm")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/miclav"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/11891522?v=4",width:"80;",alt:"miclav"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Michael Lavaire")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/imsakg"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/62212589?v=4",width:"80;",alt:"imsakg"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Mert Sefa AKGUN"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/ethan-hann"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/36464732?v=4",width:"80;",alt:"ethan-hann"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Ethan Hann")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/tazboyz16"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/12215340?v=4",width:"80;",alt:"tazboyz16"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/sur1v"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/19678230?v=4",width:"80;",alt:"sur1v"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Jos\xe9 Ignacio")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/soaibsafi"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/11424812?v=4",width:"80;",alt:"soaibsafi"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Soaibuzzaman")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/pablomalo"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/25877142?v=4",width:"80;",alt:"pablomalo"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/markxoe"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/59475466?v=4",width:"80;",alt:"markxoe"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Mark Oude Elberink"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/lxjv"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/63261955?v=4",width:"80;",alt:"lxjv"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Laker Turner")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/kxenoxx"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/9744900?v=4",width:"80;",alt:"kxenoxx"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Kxenox")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/jrobles98"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/30221842?v=4",width:"80;",alt:"jrobles98"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/jnach"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/33467747?v=4",width:"80;",alt:"jnach"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Jnach")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/imlonghao"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/4951333?v=4",width:"80;",alt:"imlonghao"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Imlonghao")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/icy-comet"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/50461557?v=4",width:"80;",alt:"icy-comet"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Aniket Teredesai"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/huangshaohuai"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/24775925?v=4",width:"80;",alt:"huangshaohuai"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/flechaig"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/10887132?v=4",width:"80;",alt:"flechaig"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/dr460nf1r3"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/12834713?v=4",width:"80;",alt:"dr460nf1r3"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Nico")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/baifengheixi"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/98794233?v=4",width:"80;",alt:"baifengheixi"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/allozavrr"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/63748214?v=4",width:"80;",alt:"allozavrr"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/XertDev"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/16572811?v=4",width:"80;",alt:"XertDev"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Xert"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/emiran-orange"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/71817149?v=4",width:"80;",alt:"emiran-orange"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/edugof"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/19559978?v=4",width:"80;",alt:"edugof"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Eduardo Gomez")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/Dylan-Bs"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/35694107?v=4",width:"80;",alt:"Dylan-Bs"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Dylan Bersans")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/dougaldhub"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/25713235?v=4",width:"80;",alt:"dougaldhub"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Doug Lock")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/dkyeremeh"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/52928432?v=4",width:"80;",alt:"dkyeremeh"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Desmond Kyeremeh")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/deepsourcebot"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/60907429?v=4",width:"80;",alt:"deepsourcebot"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"DeepSource Bot"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/DawidPietrykowski"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/53954695?v=4",width:"80;",alt:"DawidPietrykowski"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/skaarj1989"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/34756939?v=4",width:"80;",alt:"skaarj1989"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"David")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/clsty"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/129247596?v=4",width:"80;",alt:"clsty"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Celestial.y")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/bskim45"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/5674934?v=4",width:"80;",alt:"bskim45"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Bumsoo Kim")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/BhasherBEL"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/45831883?v=4",width:"80;",alt:"BhasherBEL"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Brieuc Dubois")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/BeginCI"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/57495754?v=4",width:"80;",alt:"BeginCI"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Begin"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/BRAVO68WEB"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/41448663?v=4",width:"80;",alt:"BRAVO68WEB"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Jyotirmoy Bandyopadhyaya [Bravo68]")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/AaronPorts"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/32810520?v=4",width:"80;",alt:"AaronPorts"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Artyom")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/alydemah"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/652035?v=4",width:"80;",alt:"alydemah"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Aly Mohamed")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/5idereal"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/30827929?v=4",width:"80;",alt:"5idereal"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"5idereal")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/0n1cOn3"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/27576311?v=4",width:"80;",alt:"0n1cOn3"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"0n1cOn3")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/maximemoreillon"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/29086128?v=4",width:"80;",alt:"maximemoreillon"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Maxime Moreillon"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/Glitch3dPenguin"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/3271160?v=4",width:"80;",alt:"Glitch3dPenguin"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Max Kulik")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/markusdd"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/25175069?v=4",width:"80;",alt:"markusdd"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Markus Krause")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/asenov"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/280619?v=4",width:"80;",alt:"asenov"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"\u041c\u0438\u0440\u043e\u0441\u043b\u0430\u0432 \u0410\u0441\u0435\u043d\u043e\u0432")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/luispabon"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/6388823?v=4",width:"80;",alt:"luispabon"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Luis Pabon")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/LeoColman"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/1577251?v=4",width:"80;",alt:"LeoColman"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Leonardo Colman Lopes")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/KierenConnell"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/46445781?v=4",width:"80;",alt:"KierenConnell"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Kieren Connell"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/kieraneglin"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/569917?v=4",width:"80;",alt:"kieraneglin"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Kieran")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/Singebob"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/24290044?v=4",width:"80;",alt:"Singebob"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Jeremy Chauvin")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/Hellhium"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/11504877?v=4",width:"80;",alt:"Hellhium"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Jemy SCHNEPP")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/jjmung"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/6049600?v=4",width:"80;",alt:"jjmung"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"JJ Munguia")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/b1thunt3r"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/791091?v=4",width:"80;",alt:"b1thunt3r"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Ishan Jain")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/Compunctus"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/5058853?v=4",width:"80;",alt:"Compunctus"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Iaroslav Dronskii"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/nealian"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/865115?v=4",width:"80;",alt:"nealian"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Ian Neal")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/FraglyG"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/56320839?v=4",width:"80;",alt:"FraglyG"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Hendrik Strydom")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/hubortje"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/62364169?v=4",width:"80;",alt:"hubortje"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Harald T\xf6pfer")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/gbrown09"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/3360055?v=4",width:"80;",alt:"gbrown09"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Garrett Brown")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/FormatToday"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/20515769?v=4",width:"80;",alt:"FormatToday"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"FormatToday")))))),(0,l.yg)("h2",{id:"helpful-users"},"Helpful Users"),(0,l.yg)("table",null,(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/evotk"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/45015615?v=4",width:"80;",alt:"evotk"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Evotk")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/shadowking001"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/43928955?v=4",width:"80;",alt:"shadowking001"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"LawrenceP.")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/urekd"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/38784343?v=4",width:"80;",alt:"urekd"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Urekd")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/dylanbeme"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/41838333?v=4",width:"80;",alt:"dylanbeme"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"DylanH")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/milesteg1"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/29298312?v=4",width:"80;",alt:"milesteg1"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Milesteg1")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/lu4t"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/29571529?v=4",width:"80;",alt:"lu4t"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Lu4t")))))),(0,l.yg)("h2",{id:"bots"},"Bots"),(0,l.yg)("table",null,(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/liss-bot"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/87835202?v=4",width:"80;",alt:"liss-bot"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Alicia Bot")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/snyk-bot"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/19733683?v=4",width:"80;",alt:"snyk-bot"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Snyk Bot")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/netlify"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/7892489?v=4",width:"80;",alt:"netlify"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Netlify")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/viezly"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/78649443?v=4",width:"80;",alt:"viezly"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Viezly")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/muse-dev"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/42072939?v=4",width:"80;",alt:"muse-dev"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"MuseDev")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/github-actions[bot]"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/in/15368?v=4",width:"80;",alt:"github-actions[bot]"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"github-actions[bot]"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/dependabot[bot]"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/in/29110?v=4",width:"80;",alt:"dependabot[bot]"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"dependabot[bot]")))))),(0,l.yg)("blockquote",null,(0,l.yg)("p",{parentName:"blockquote"},"The above section is auto-generated, using ",(0,l.yg)("a",{parentName:"p",href:"https://github.com/marketplace/actions/contribute-list"},"contribute-list")," by @akhilmhdh.")),(0,l.yg)("h2",{id:"newest-stargazers"},"Newest Stargazers"),(0,l.yg)("p",null,(0,l.yg)("a",{parentName:"p",href:"https://github.com/Lissy93/dashy/stargazers"},(0,l.yg)("img",{parentName:"a",src:"https://reporoster.com/stars/dark/Lissy93/dashy",alt:"Recent Star Gazers"}))),(0,l.yg)("p",null,(0,l.yg)("a",{parentName:"p",href:"https://github.com/lissy93/dashy/network/members"},(0,l.yg)("img",{parentName:"a",src:"https://reporoster.com/forks/dark/lissy93/dashy",alt:"Recent Forkers"}))),(0,l.yg)("hr",null),(0,l.yg)("h2",{id:"dependencies"},"Dependencies"),(0,l.yg)("p",null,"This app definitely wouldn't have been quite so possible without the making use of the following package and components. Full credit and big kudos to their respective authors, who've done an amazing job in building and maintaining them. For a full breakdown of dependency licenses, please see ",(0,l.yg)("a",{parentName:"p",href:"https://github.com/Lissy93/dashy/blob/master/.github/LEGAL.md"},"Legal")),(0,l.yg)("h3",{id:"core"},"Core"),(0,l.yg)("p",null,"At it's core, the application uses ",(0,l.yg)("a",{parentName:"p",href:"https://github.com/vuejs/vue"},(0,l.yg)("strong",{parentName:"a"},"Vue.js")),", as well as it's services with ",(0,l.yg)("a",{parentName:"p",href:"https://vuex.vuejs.org/"},(0,l.yg)("strong",{parentName:"a"},"VueX"))," for state management. Styling is done with ",(0,l.yg)("a",{parentName:"p",href:"https://github.com/sass/sass"},(0,l.yg)("strong",{parentName:"a"},"SCSS")),", JavaScript is currently ",(0,l.yg)("a",{parentName:"p",href:"https://github.com/babel/babel"},(0,l.yg)("strong",{parentName:"a"},"Babel")),", (but I am in the process of converting to ",(0,l.yg)("a",{parentName:"p",href:"https://github.com/Microsoft/TypeScript"},(0,l.yg)("strong",{parentName:"a"},"TypeScript")),"). Linting is done with ",(0,l.yg)("a",{parentName:"p",href:"https://github.com/eslint/eslint"},(0,l.yg)("strong",{parentName:"a"},"ESLint"))," and ",(0,l.yg)("a",{parentName:"p",href:"https://prettier.io/"},(0,l.yg)("strong",{parentName:"a"},"Prettier")),", both following the ",(0,l.yg)("a",{parentName:"p",href:"https://github.com/airbnb/javascript"},(0,l.yg)("strong",{parentName:"a"},"AirBnB Styleguide")),". The config is defined in ",(0,l.yg)("a",{parentName:"p",href:"https://github.com/yaml/yaml"},(0,l.yg)("strong",{parentName:"a"},"YAML")),", with a simple ",(0,l.yg)("a",{parentName:"p",href:"https://github.com/nodejs/node"},(0,l.yg)("strong",{parentName:"a"},"Node.js"))," server to serve up the static app and the optional API endpoints, and container deployment is done with ",(0,l.yg)("a",{parentName:"p",href:"https://www.docker.com/"},(0,l.yg)("strong",{parentName:"a"},"Docker")),"."),(0,l.yg)("h3",{id:"utilities"},"Utilities"),(0,l.yg)("ul",null,(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/brix/crypto-js"},(0,l.yg)("inlineCode",{parentName:"a"},"crypto-js"))," - Encryption implementations by @evanvosberg and community ",(0,l.yg)("inlineCode",{parentName:"li"},"MIT")),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/axios/axios"},(0,l.yg)("inlineCode",{parentName:"a"},"axios"))," - Promise based HTTP client by @mzabriskie and community ",(0,l.yg)("inlineCode",{parentName:"li"},"MIT")),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/ajv-validator/ajv"},(0,l.yg)("inlineCode",{parentName:"a"},"ajv"))," - JSON schema Validator by @epoberezkin and community ",(0,l.yg)("inlineCode",{parentName:"li"},"MIT")),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/kazupon/vue-i18n"},(0,l.yg)("inlineCode",{parentName:"a"},"i18n"))," - Internationalization plugin by @kazupon and community ",(0,l.yg)("inlineCode",{parentName:"li"},"MIT")),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/frappe/charts"},(0,l.yg)("inlineCode",{parentName:"a"},"frappe-charts"))," - Lightweight charting library by @frappe ",(0,l.yg)("inlineCode",{parentName:"li"},"MIT"))),(0,l.yg)("h3",{id:"frontend-components"},"Frontend Components"),(0,l.yg)("ul",null,(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/sagalbot/vue-select"},(0,l.yg)("inlineCode",{parentName:"a"},"vue-select"))," - Dropdown component by @sagalbot ",(0,l.yg)("inlineCode",{parentName:"li"},"MIT")),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/euvl/vue-js-modal"},(0,l.yg)("inlineCode",{parentName:"a"},"vue-js-modal"))," - Modal component by @euvl ",(0,l.yg)("inlineCode",{parentName:"li"},"MIT")),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/Akryum/v-tooltip"},(0,l.yg)("inlineCode",{parentName:"a"},"v-tooltip"))," - Tooltip component by @Akryum ",(0,l.yg)("inlineCode",{parentName:"li"},"MIT")),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/jairoblatt/vue-material-tabs"},(0,l.yg)("inlineCode",{parentName:"a"},"vue-material-tabs"))," - Tab view component by @jairoblatt ",(0,l.yg)("inlineCode",{parentName:"li"},"MIT")),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/yansenlei/VJsoneditor"},(0,l.yg)("inlineCode",{parentName:"a"},"VJsoneditor"))," - Interactive JSON editor component by @yansenlei ",(0,l.yg)("inlineCode",{parentName:"li"},"MIT"),(0,l.yg)("ul",{parentName:"li"},(0,l.yg)("li",{parentName:"ul"},"Forked from ",(0,l.yg)("a",{parentName:"li",href:"https://github.com/josdejong/jsoneditor"},(0,l.yg)("inlineCode",{parentName:"a"},"JsonEditor"))," by @josdejong ",(0,l.yg)("inlineCode",{parentName:"li"},"Apache-2.0 License")))),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/shakee93/vue-toasted"},(0,l.yg)("inlineCode",{parentName:"a"},"vue-toasted"))," - Toast notification component by @shakee93 ",(0,l.yg)("inlineCode",{parentName:"li"},"MIT")),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/saintplay/vue-swatches"},(0,l.yg)("inlineCode",{parentName:"a"},"vue-swatches"))," - Color palete picker by @saintplay ",(0,l.yg)("inlineCode",{parentName:"li"},"MIT"))),(0,l.yg)("h3",{id:"backup--sync-server"},"Backup & Sync Server"),(0,l.yg)("p",null,"Although the app is purely frontend, there is an optional cloud sync feature, for off-site backup and restore. This is built as a serverless function on ",(0,l.yg)("a",{parentName:"p",href:"https://workers.cloudflare.com/"},"Cloudflare workers")," using ",(0,l.yg)("a",{parentName:"p",href:"https://developers.cloudflare.com/workers/runtime-apis/kv"},"KV")," and ",(0,l.yg)("a",{parentName:"p",href:"https://developers.cloudflare.com/workers/runtime-apis/web-crypto"},"web crypto")),(0,l.yg)("h3",{id:"external-services"},"External Services"),(0,l.yg)("p",null,"The 1-Click deploy demo uses ",(0,l.yg)("a",{parentName:"p",href:"https://play-with-docker.com/"},"Play-with-Docker Labs"),". Code is hosted on ",(0,l.yg)("a",{parentName:"p",href:"https://github.com"},"GitHub"),", Docker images are hosted on ",(0,l.yg)("a",{parentName:"p",href:"https://hub.docker.com/"},"DockerHub"),", and the demos are hosted on ",(0,l.yg)("a",{parentName:"p",href:"https://www.netlify.com/"},"Netlify"),"."),(0,l.yg)("h3",{id:"actions"},"Actions"),(0,l.yg)("p",null,"This repo makes heavy use of ",(0,l.yg)("a",{parentName:"p",href:"https://github.com/features/actions"},"GitHub actions")," to run automated workflows. The following base actions are totally awesome, and have been extremely useful. Full credit to their respective authors"),(0,l.yg)("ul",null,(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/butlerlogic/action-autotag"},(0,l.yg)("inlineCode",{parentName:"a"},"action-autotag"))," by @butlerlogic - Tags new versions when app version changes"),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/joeizzard/action-wiki-sync"},(0,l.yg)("inlineCode",{parentName:"a"},"action-wiki-sync"))," by @joeizzard - Copies the markdown docs to the GH wiki"),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/bubkoo/contributors-list"},(0,l.yg)("inlineCode",{parentName:"a"},"contributors-list"))," by @bubkoo - Generates contributors SVG"),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/akhilmhdh/contributors-readme-action"},(0,l.yg)("inlineCode",{parentName:"a"},"contributors-readme-action"))," by @akhilmhdh - Inserts contributors into credits"),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/eter-evans/create-pull-request"},(0,l.yg)("inlineCode",{parentName:"a"},"create-pull-request"))," by @eter-evans - Creates pull request"),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/JamesIves/github-pages-deploy-action"},(0,l.yg)("inlineCode",{parentName:"a"},"github-pages-deploy-action"))," by @JamesIves - Deploy app to GH pages"),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/apexskier/github-release-commenter"},(0,l.yg)("inlineCode",{parentName:"a"},"github-release-commenter"))," by @apexskier - Updates issues when fix is released"),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/JamesIves/github-sponsors-readme-action"},(0,l.yg)("inlineCode",{parentName:"a"},"github-sponsors-readme-action"))," by @JamesIves - Inserts sponsors into credits"),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/JasonEtco/is-sponsor-label-action"},(0,l.yg)("inlineCode",{parentName:"a"},"is-sponsor-label-action"))," by @JasonEtco - Label sponsors, for priority support"),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/tomsun28/issues-translate-action"},(0,l.yg)("inlineCode",{parentName:"a"},"issues-translate-action"))," by @tomsun28 - Translates non-English issues and comments"),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/sobolevn/misspell-fixer-action"},(0,l.yg)("inlineCode",{parentName:"a"},"misspell-fixer-action"))," by @sobolevn - Finds and fixes typos"),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/uhyo/please-star-first"},(0,l.yg)("inlineCode",{parentName:"a"},"please-star-first"))," by @uhyo - Closes certain issues by non-stargazers"),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/exercism/pr-commenter-action"},(0,l.yg)("inlineCode",{parentName:"a"},"pr-commenter-action"))," by @exercism - Adds info comments to PR based on the files changed"),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/snyk/actions/node"},(0,l.yg)("inlineCode",{parentName:"a"},"snyk note"))," by @snyk - Reports vulnerabilities in the code or dependencies"),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/alstr/todo-to-issue-action"},(0,l.yg)("inlineCode",{parentName:"a"},"todo-to-issue-action"))," by @alstr - Opens issues from todos in the code"),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/Simek/yarn-lock-changes"},(0,l.yg)("inlineCode",{parentName:"a"},"yarn-lock-changes"))," by @Simek - Outputs dependency changes in PR")),(0,l.yg)("hr",null),(0,l.yg)("h2",{id:"you"},"You"),(0,l.yg)("p",null,"Would you like to be listed here? Whatever your skill set, Dashy needs people like you to help support future development. Check out the ",(0,l.yg)("a",{parentName:"p",href:"/docs/contributing"},"Contributing Page")," for ways that you can get involved. Huge thank you to everyone who has already contributed! \ud83d\udc96"))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/18ba09e8.de2b7c1b.js b/assets/js/18ba09e8.de2b7c1b.js new file mode 100644 index 00000000..c31dedc2 --- /dev/null +++ b/assets/js/18ba09e8.de2b7c1b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdashy=self.webpackChunkdashy||[]).push([[849],{5680:(t,e,a)=>{a.d(e,{xA:()=>y,yg:()=>b});var n=a(6540);function l(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function g(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function r(t){for(var e=1;e=0||(l[a]=t[a]);return l}(t,e);if(Object.getOwnPropertySymbols){var g=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(l[a]=t[a])}return l}var i=n.createContext({}),s=function(t){var e=n.useContext(i),a=e;return t&&(a="function"==typeof t?t(e):r(r({},e),t)),a},y=function(t){var e=s(t.components);return n.createElement(i.Provider,{value:e},t.children)},h="mdxType",o={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},c=n.forwardRef((function(t,e){var a=t.components,l=t.mdxType,g=t.originalType,i=t.parentName,y=u(t,["components","mdxType","originalType","parentName"]),h=s(a),c=l,b=h["".concat(i,".").concat(c)]||h[c]||o[c]||g;return a?n.createElement(b,r(r({ref:e},y),{},{components:a})):n.createElement(b,r({ref:e},y))}));function b(t,e){var a=arguments,l=e&&e.mdxType;if("string"==typeof t||l){var g=a.length,r=new Array(g);r[0]=c;var u={};for(var i in e)hasOwnProperty.call(e,i)&&(u[i]=e[i]);u.originalType=t,u[h]="string"==typeof t?t:l,r[1]=u;for(var s=2;s{a.r(e),a.d(e,{contentTitle:()=>r,default:()=>h,frontMatter:()=>g,metadata:()=>u,toc:()=>i});var n=a(8168),l=(a(6540),a(5680));const g={},r="Credits",u={unversionedId:"credits",id:"credits",isDocsHomePage:!1,title:"Credits",description:"Sponsors",source:"@site/docs/credits.md",sourceDirName:".",slug:"/credits",permalink:"/docs/credits",editUrl:"https://github.com/Lissy93/dashy/edit/gh-pages/docs/docs/credits.md",version:"current",frontMatter:{}},i=[{value:"Sponsors",id:"sponsors",children:[]},{value:"Contributors",id:"contributors",children:[]},{value:"Helpful Users",id:"helpful-users",children:[]},{value:"Bots",id:"bots",children:[]},{value:"Newest Stargazers",id:"newest-stargazers",children:[]},{value:"Dependencies",id:"dependencies",children:[{value:"Core",id:"core",children:[]},{value:"Utilities",id:"utilities",children:[]},{value:"Frontend Components",id:"frontend-components",children:[]},{value:"Backup & Sync Server",id:"backup--sync-server",children:[]},{value:"External Services",id:"external-services",children:[]},{value:"Actions",id:"actions",children:[]}]},{value:"You",id:"you",children:[]}],s={toc:i},y="wrapper";function h(t){let{components:e,...a}=t;return(0,l.yg)(y,(0,n.A)({},s,a,{components:e,mdxType:"MDXLayout"}),(0,l.yg)("h1",{id:"credits"},"Credits"),(0,l.yg)("h2",{id:"sponsors"},"Sponsors"),(0,l.yg)("table",null,(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/github"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/9919?v=4",width:"80;",alt:"github"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"GitHub")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/koconder"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/25068?u=582657b23622aaa3dfe68bd028a780f272f456fa&v=4",width:"80;",alt:"koconder"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Vincent Koc")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/Admonstrator"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/69824?u=1e226d7a36cdd661c3e4cd486fea140d045b7d57&v=4",width:"80;",alt:"Admonstrator"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Aaron Viehl")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/tbjers"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/1117052?v=4",width:"80;",alt:"tbjers"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Torgny Bjers")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/AnandChowdhary"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/2841780?u=747e554b3a7f12eb20b7910e1c87d817844f714f&v=4",width:"80;",alt:"AnandChowdhary"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Anand Chowdhary")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/shrippen"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/2873570?v=4",width:"80;",alt:"shrippen"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/bile0026"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/5022496?u=aec96ad173c0ea9baaba93807efa8a848af6595c&v=4",width:"80;",alt:"bile0026"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Zach Biles")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/UlisesGascon"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/5110813?u=3c41facd8aa26154b9451de237c34b0f78d672a5&v=4",width:"80;",alt:"UlisesGascon"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Ulises Gasc\xf3n")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/digitalarche"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/6546135?u=564756d7f44ab2206819eb3148f6d822673f5066&v=4",width:"80;",alt:"digitalarche"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Digital Archeology")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/InDieTasten"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/7047377?u=8d8f8017628b38bc46dcbf3620e194b01d3fb2d1&v=4",width:"80;",alt:"InDieTasten"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/araguaci"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/7318668?v=4",width:"80;",alt:"araguaci"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/bmcgonag"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/7346620?u=2a0f9284f3e12ac1cc15288c254d1ec68a5081e8&v=4",width:"80;",alt:"bmcgonag"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Brian McGonagill"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/vlad-timofeev"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/11474041?u=eee43705b54d2ec9f51fc4fcce5ad18dd17c87e4&v=4",width:"80;",alt:"vlad-timofeev"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Vlad Timofeev")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/helixzz"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/12218889?u=d06d0c103dfbdb99450623064f7da3c5a3675fb6&v=4",width:"80;",alt:"helixzz"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"HeliXZz")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/patvdv"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/12430107?u=e8911c2fb91af4d30432f76da8c40927b2830bd7&v=4",width:"80;",alt:"patvdv"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Patrick Van Der Veken")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/plgonzalezrx8"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/19900049?u=48a58d2da520a9d712184c6e6e99927ff3cbf179&v=4",width:"80;",alt:"plgonzalezrx8"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Pedro Gonzalez")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/mryesiller"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/24632172?u=0d20f2d615158f87cd60a3398d3efb026c32f291&v=4",width:"80;",alt:"mryesiller"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"G\xf6ksel Ye\u015filler")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/allesauseinerhand"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/32039836?v=4",width:"80;",alt:"allesauseinerhand"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/forwardemail"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/32481436?v=4",width:"80;",alt:"forwardemail"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Forward Email - Open-source & Privacy-focused Email Service (2023)")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/Bastii717"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/53431819?u=604977bed6ad6875ada890d0d3765a4cacc2fa14&v=4",width:"80;",alt:"Bastii717"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/getumbrel"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/59408891?v=4",width:"80;",alt:"getumbrel"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Umbrel")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/M2TD"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/85460457?v=4",width:"80;",alt:"M2TD"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/frankdez93"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/87549420?v=4",width:"80;",alt:"frankdez93"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/terminaltrove"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/121595180?v=4",width:"80;",alt:"terminaltrove"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Terminal Trove"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/NixyJuppie"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/138570196?u=b102c222487905728b858704962d32759df29ebe&v=4",width:"80;",alt:"NixyJuppie"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Nixy")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/nrvo"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/151435968?u=e1dcb307fd0efdc45cddbe9490a7b956e4da6835&v=4",width:"80;",alt:"nrvo"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))))),(0,l.yg)("h2",{id:"contributors"},"Contributors"),(0,l.yg)("table",null,(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/Lissy93"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/1862727?v=4",width:"80;",alt:"Lissy93"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Alicia Sykes")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/liss-bot"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/87835202?v=4",width:"80;",alt:"liss-bot"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Alicia Bot")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/marekful"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/10281476?v=4",width:"80;",alt:"marekful"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Marcell F\xfcl\xf6p")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/EVOTk"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/45015615?v=4",width:"80;",alt:"EVOTk"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"EVOTk")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/snyk-bot"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/19733683?v=4",width:"80;",alt:"snyk-bot"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Snyk Bot")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/CrazyWolf13"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/96661824?v=4",width:"80;",alt:"CrazyWolf13"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Tobias"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/azerioxal"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/5369885?v=4",width:"80;",alt:"azerioxal"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Kenneth Church")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/m42e"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/2410802?v=4",width:"80;",alt:"m42e"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Matthias Bilger")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/pinarruiz"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/37040888?v=4",width:"80;",alt:"pinarruiz"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Alejandro Pinar Ruiz")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/imjimmeh"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/2104997?v=4",width:"80;",alt:"imjimmeh"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/kashif-se"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/5568138?v=4",width:"80;",alt:"kashif-se"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Kashif Sohail")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/walkxcode"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/71191962?v=4",width:"80;",alt:"walkxcode"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Walkx"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/josuablejeru"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/37913833?v=4",width:"80;",alt:"josuablejeru"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Josua Blejeru ")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/evroon"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/11857441?v=4",width:"80;",alt:"evroon"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Erik Vroon")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/jammo2k5"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/8106602?v=4",width:"80;",alt:"jammo2k5"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Jammo2k5")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/lordpansar"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/14231148?v=4",width:"80;",alt:"lordpansar"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Magnus Sundstr\xf6m")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/Cereal916"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/7526937?v=4",width:"80;",alt:"Cereal916"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Kristian Brasel")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/albcp"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/3170731?v=4",width:"80;",alt:"albcp"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Alberto"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/altearius"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/270430?v=4",width:"80;",alt:"altearius"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Chris Nielsen")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/UrekD"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/38784343?v=4",width:"80;",alt:"UrekD"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"UrekD")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/z3r0l1nk"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/31653632?v=4",width:"80;",alt:"z3r0l1nk"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Mihai")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/zcq100"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/425234?v=4",width:"80;",alt:"zcq100"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/wozboz"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/51856582?v=4",width:"80;",alt:"wozboz"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/Totto16"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/32566573?v=4",width:"80;",alt:"Totto16"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Totto16"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/toddejohnson"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/507545?v=4",width:"80;",alt:"toddejohnson"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Todd Johnson")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/remygrandin"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/1934515?v=4",width:"80;",alt:"remygrandin"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Remygrandin")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/DimitriDR"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/56969769?v=4",width:"80;",alt:"DimitriDR"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Dimitri")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/aviolaris"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/48277853?v=4",width:"80;",alt:"aviolaris"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Andreas Violaris")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/Tracreed"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/6306365?v=4",width:"80;",alt:"Tracreed"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"David Alasow")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/rubenandre"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/9402773?v=4",width:"80;",alt:"rubenandre"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"R\xfaben Silva"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/rtm516"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/5401186?v=4",width:"80;",alt:"rtm516"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Rtm516")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/onedr0p"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/213795?v=4",width:"80;",alt:"onedr0p"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"\u15ea\u0454\u03bd\u03b9\u03b7 \u15f7\u03c5\u043d\u029f")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/stanly0726"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/37040069?v=4",width:"80;",alt:"stanly0726"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Stanly0726")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/Bogyie"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/82003678?v=4",width:"80;",alt:"Bogyie"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Bogyeong Kim")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/Tuzi555"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/62188066?v=4",width:"80;",alt:"Tuzi555"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Jakub Tuzar")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/berksmbl"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/10000339?v=4",width:"80;",alt:"berksmbl"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Berk S\xfcmb\xfcl"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/alucarddelta"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/20882097?v=4",width:"80;",alt:"alucarddelta"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Brent")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/BySempron"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/15928132?v=4",width:"80;",alt:"BySempron"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Sergio")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/ssrangisetti"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/46807508?v=4",width:"80;",alt:"ssrangisetti"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/zigotica"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/178855?v=4",width:"80;",alt:"zigotica"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Sergi Meseguer")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/rokiden"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/11071229?v=4",width:"80;",alt:"rokiden"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Denis Kazimirov")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/patrickheeney"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/1407228?v=4",width:"80;",alt:"patrickheeney"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Patrick Heeney"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/mmihaly"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/50031464?v=4",width:"80;",alt:"mmihaly"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/kt-alt"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/51970249?v=4",width:"80;",alt:"kt-alt"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/k073l"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/21180271?v=4",width:"80;",alt:"k073l"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/itsmejoeeey"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/9375730?v=4",width:"80;",alt:"itsmejoeeey"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Joey Miller")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/hockeymikey"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/1435185?v=4",width:"80;",alt:"hockeymikey"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/thomaswienecke"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/11446531?v=4",width:"80;",alt:"thomaswienecke"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Thomas Wienecke"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/twsouthwick"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/583206?v=4",width:"80;",alt:"twsouthwick"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Taylor Southwick")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/GuilhermeLCS95"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/116608998?v=4",width:"80;",alt:"GuilhermeLCS95"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"GuilhermeLCS")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/deneor"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/1063265?v=4",width:"80;",alt:"deneor"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/daentech"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/358678?v=4",width:"80;",alt:"daentech"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Dan Gilbert")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/moemoeq"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/1808434?v=4",width:"80;",alt:"moemoeq"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"CHAIYEON CHO")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/BOZG"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/6022344?v=4",width:"80;",alt:"BOZG"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Stephen Rigney"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/a-mnich"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/56564725?v=4",width:"80;",alt:"a-mnich"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Alexander Mnich")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/alayham"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/518776?v=4",width:"80;",alt:"alayham"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Al-Ayham Saleh")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/alexdelprete"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/7027842?v=4",width:"80;",alt:"alexdelprete"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Alessandro Del Prete")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/turnrye"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/701035?v=4",width:"80;",alt:"turnrye"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Ryan Turner")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/sachahjkl"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/32895534?v=4",width:"80;",alt:"sachahjkl"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Sacha")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/shazzx"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/131521332?v=4",width:"80;",alt:"shazzx"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Shazz"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/ThinkSalat"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/31082405?v=4",width:"80;",alt:"ThinkSalat"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Shawn Salat")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/royshreyaa"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/139828242?v=4",width:"80;",alt:"royshreyaa"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/Smexhy"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/4880625?v=4",width:"80;",alt:"Smexhy"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/stavros-k"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/47820033?v=4",width:"80;",alt:"stavros-k"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Stavros Kois")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/XenonR"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/18627623?v=4",width:"80;",alt:"XenonR"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Steffen Schmidt")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/StevKast"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/17804308?v=4",width:"80;",alt:"StevKast"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Steven Kast"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/rubjo"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/42270947?v=4",width:"80;",alt:"rubjo"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/PrynsTag"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/56314705?v=4",width:"80;",alt:"PrynsTag"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Prince Carl Velasco")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/PlusaN"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/61884717?v=4",width:"80;",alt:"PlusaN"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Andrey")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/oka4shi"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/67847553?v=4",width:"80;",alt:"oka4shi"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"OKAMOTO Shigehiro")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/bubylou"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/3878640?v=4",width:"80;",alt:"bubylou"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Nicholas Malcolm")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/stinkybernie"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/155188453?v=4",width:"80;",alt:"stinkybernie"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Michael D"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/miclav"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/11891522?v=4",width:"80;",alt:"miclav"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Michael Lavaire")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/imsakg"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/62212589?v=4",width:"80;",alt:"imsakg"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Mert Sefa AKGUN")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/maximemoreillon"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/29086128?v=4",width:"80;",alt:"maximemoreillon"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Maxime Moreillon")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/AmadeusGraves"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/18572939?v=4",width:"80;",alt:"AmadeusGraves"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"\xc1ngel Fern\xe1ndez S\xe1nchez")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/tazboyz16"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/12215340?v=4",width:"80;",alt:"tazboyz16"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/sur1v"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/19678230?v=4",width:"80;",alt:"sur1v"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Jos\xe9 Ignacio"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/soaibsafi"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/11424812?v=4",width:"80;",alt:"soaibsafi"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Soaibuzzaman")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/pablomalo"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/25877142?v=4",width:"80;",alt:"pablomalo"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/markxoe"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/59475466?v=4",width:"80;",alt:"markxoe"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Mark Oude Elberink")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/lxjv"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/63261955?v=4",width:"80;",alt:"lxjv"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Laker Turner")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/kxenoxx"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/9744900?v=4",width:"80;",alt:"kxenoxx"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Kxenox")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/jrobles98"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/30221842?v=4",width:"80;",alt:"jrobles98"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/jnach"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/33467747?v=4",width:"80;",alt:"jnach"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Jnach")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/imlonghao"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/4951333?v=4",width:"80;",alt:"imlonghao"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Imlonghao")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/icy-comet"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/50461557?v=4",width:"80;",alt:"icy-comet"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Aniket Teredesai")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/huangshaohuai"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/24775925?v=4",width:"80;",alt:"huangshaohuai"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/flechaig"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/10887132?v=4",width:"80;",alt:"flechaig"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/dr460nf1r3"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/12834713?v=4",width:"80;",alt:"dr460nf1r3"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Nico"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/baifengheixi"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/98794233?v=4",width:"80;",alt:"baifengheixi"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/allozavrr"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/63748214?v=4",width:"80;",alt:"allozavrr"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/XertDev"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/16572811?v=4",width:"80;",alt:"XertDev"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Xert")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/Glitch3dPenguin"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/3271160?v=4",width:"80;",alt:"Glitch3dPenguin"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Max Kulik")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/emiran-orange"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/71817149?v=4",width:"80;",alt:"emiran-orange"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/edugof"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/19559978?v=4",width:"80;",alt:"edugof"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Eduardo Gomez"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/Dylan-Bs"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/35694107?v=4",width:"80;",alt:"Dylan-Bs"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Dylan Bersans")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/dyauss"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/50002238?v=4",width:"80;",alt:"dyauss"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Thandy Norberto")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/dougaldhub"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/25713235?v=4",width:"80;",alt:"dougaldhub"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Doug Lock")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/dkyeremeh"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/52928432?v=4",width:"80;",alt:"dkyeremeh"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Desmond Kyeremeh")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/deepsourcebot"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/60907429?v=4",width:"80;",alt:"deepsourcebot"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"DeepSource Bot")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/DawidPietrykowski"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/53954695?v=4",width:"80;",alt:"DawidPietrykowski"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Null"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/skaarj1989"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/34756939?v=4",width:"80;",alt:"skaarj1989"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"David")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/clsty"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/129247596?v=4",width:"80;",alt:"clsty"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Celestial.y")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/bskim45"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/5674934?v=4",width:"80;",alt:"bskim45"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Bumsoo Kim")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/BhasherBEL"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/45831883?v=4",width:"80;",alt:"BhasherBEL"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Brieuc Dubois")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/BeginCI"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/57495754?v=4",width:"80;",alt:"BeginCI"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Begin")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/BRAVO68WEB"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/41448663?v=4",width:"80;",alt:"BRAVO68WEB"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Jyotirmoy Bandyopadhyaya [Bravo68]"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/AaronPorts"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/32810520?v=4",width:"80;",alt:"AaronPorts"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Artyom")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/alydemah"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/652035?v=4",width:"80;",alt:"alydemah"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Aly Mohamed")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/5idereal"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/30827929?v=4",width:"80;",alt:"5idereal"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"5idereal")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/0n1cOn3"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/27576311?v=4",width:"80;",alt:"0n1cOn3"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"0n1cOn3")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/markusdd"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/25175069?v=4",width:"80;",alt:"markusdd"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Markus Krause")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/asenov"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/280619?v=4",width:"80;",alt:"asenov"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"\u041c\u0438\u0440\u043e\u0441\u043b\u0430\u0432 \u0410\u0441\u0435\u043d\u043e\u0432"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/luispabon"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/6388823?v=4",width:"80;",alt:"luispabon"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Luis Pabon")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/LeoColman"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/1577251?v=4",width:"80;",alt:"LeoColman"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Leonardo Colman Lopes")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/KierenConnell"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/46445781?v=4",width:"80;",alt:"KierenConnell"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Kieren Connell")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/kieraneglin"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/569917?v=4",width:"80;",alt:"kieraneglin"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Kieran")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/Singebob"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/24290044?v=4",width:"80;",alt:"Singebob"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Jeremy Chauvin")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/Hellhium"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/11504877?v=4",width:"80;",alt:"Hellhium"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Jemy SCHNEPP"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/jjmung"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/6049600?v=4",width:"80;",alt:"jjmung"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"JJ Munguia")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/b1thunt3r"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/791091?v=4",width:"80;",alt:"b1thunt3r"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Ishan Jain")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/Compunctus"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/5058853?v=4",width:"80;",alt:"Compunctus"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Iaroslav Dronskii")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/nealian"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/865115?v=4",width:"80;",alt:"nealian"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Ian Neal")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/FraglyG"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/56320839?v=4",width:"80;",alt:"FraglyG"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Hendrik Strydom")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/hubortje"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/62364169?v=4",width:"80;",alt:"hubortje"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Harald T\xf6pfer"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/gbrown09"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/3360055?v=4",width:"80;",alt:"gbrown09"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Garrett Brown")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/FormatToday"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/20515769?v=4",width:"80;",alt:"FormatToday"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"FormatToday")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/pvillaverde"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/31769405?v=4",width:"80;",alt:"pvillaverde"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Fedello")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/ethan-hann"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/36464732?v=4",width:"80;",alt:"ethan-hann"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Ethan Hann")))))),(0,l.yg)("h2",{id:"helpful-users"},"Helpful Users"),(0,l.yg)("table",null,(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/evotk"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/45015615?v=4",width:"80;",alt:"evotk"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Evotk")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/shadowking001"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/43928955?v=4",width:"80;",alt:"shadowking001"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"LawrenceP.")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/urekd"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/38784343?v=4",width:"80;",alt:"urekd"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Urekd")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/dylanbeme"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/41838333?v=4",width:"80;",alt:"dylanbeme"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"DylanH")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/milesteg1"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/29298312?v=4",width:"80;",alt:"milesteg1"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Milesteg1")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/lu4t"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/29571529?v=4",width:"80;",alt:"lu4t"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Lu4t")))))),(0,l.yg)("h2",{id:"bots"},"Bots"),(0,l.yg)("table",null,(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/liss-bot"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/87835202?v=4",width:"80;",alt:"liss-bot"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Alicia Bot")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/snyk-bot"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/19733683?v=4",width:"80;",alt:"snyk-bot"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Snyk Bot")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/netlify"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/7892489?v=4",width:"80;",alt:"netlify"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Netlify")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/viezly"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/78649443?v=4",width:"80;",alt:"viezly"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"Viezly")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/muse-dev"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/u/42072939?v=4",width:"80;",alt:"muse-dev"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"MuseDev")))),(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/github-actions[bot]"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/in/15368?v=4",width:"80;",alt:"github-actions[bot]"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"github-actions[bot]"))))),(0,l.yg)("tr",null,(0,l.yg)("td",{align:"center"},(0,l.yg)("a",{href:"https://github.com/dependabot[bot]"},(0,l.yg)("img",{src:"https://avatars.githubusercontent.com/in/29110?v=4",width:"80;",alt:"dependabot[bot]"}),(0,l.yg)("br",null),(0,l.yg)("sub",null,(0,l.yg)("b",null,"dependabot[bot]")))))),(0,l.yg)("blockquote",null,(0,l.yg)("p",{parentName:"blockquote"},"The above section is auto-generated, using ",(0,l.yg)("a",{parentName:"p",href:"https://github.com/marketplace/actions/contribute-list"},"contribute-list")," by @akhilmhdh.")),(0,l.yg)("h2",{id:"newest-stargazers"},"Newest Stargazers"),(0,l.yg)("p",null,(0,l.yg)("a",{parentName:"p",href:"https://github.com/Lissy93/dashy/stargazers"},(0,l.yg)("img",{parentName:"a",src:"https://reporoster.com/stars/dark/Lissy93/dashy",alt:"Recent Star Gazers"}))),(0,l.yg)("p",null,(0,l.yg)("a",{parentName:"p",href:"https://github.com/lissy93/dashy/network/members"},(0,l.yg)("img",{parentName:"a",src:"https://reporoster.com/forks/dark/lissy93/dashy",alt:"Recent Forkers"}))),(0,l.yg)("hr",null),(0,l.yg)("h2",{id:"dependencies"},"Dependencies"),(0,l.yg)("p",null,"This app definitely wouldn't have been quite so possible without the making use of the following package and components. Full credit and big kudos to their respective authors, who've done an amazing job in building and maintaining them. For a full breakdown of dependency licenses, please see ",(0,l.yg)("a",{parentName:"p",href:"https://github.com/Lissy93/dashy/blob/master/.github/LEGAL.md"},"Legal")),(0,l.yg)("h3",{id:"core"},"Core"),(0,l.yg)("p",null,"At it's core, the application uses ",(0,l.yg)("a",{parentName:"p",href:"https://github.com/vuejs/vue"},(0,l.yg)("strong",{parentName:"a"},"Vue.js")),", as well as it's services with ",(0,l.yg)("a",{parentName:"p",href:"https://vuex.vuejs.org/"},(0,l.yg)("strong",{parentName:"a"},"VueX"))," for state management. Styling is done with ",(0,l.yg)("a",{parentName:"p",href:"https://github.com/sass/sass"},(0,l.yg)("strong",{parentName:"a"},"SCSS")),", JavaScript is currently ",(0,l.yg)("a",{parentName:"p",href:"https://github.com/babel/babel"},(0,l.yg)("strong",{parentName:"a"},"Babel")),", (but I am in the process of converting to ",(0,l.yg)("a",{parentName:"p",href:"https://github.com/Microsoft/TypeScript"},(0,l.yg)("strong",{parentName:"a"},"TypeScript")),"). Linting is done with ",(0,l.yg)("a",{parentName:"p",href:"https://github.com/eslint/eslint"},(0,l.yg)("strong",{parentName:"a"},"ESLint"))," and ",(0,l.yg)("a",{parentName:"p",href:"https://prettier.io/"},(0,l.yg)("strong",{parentName:"a"},"Prettier")),", both following the ",(0,l.yg)("a",{parentName:"p",href:"https://github.com/airbnb/javascript"},(0,l.yg)("strong",{parentName:"a"},"AirBnB Styleguide")),". The config is defined in ",(0,l.yg)("a",{parentName:"p",href:"https://github.com/yaml/yaml"},(0,l.yg)("strong",{parentName:"a"},"YAML")),", with a simple ",(0,l.yg)("a",{parentName:"p",href:"https://github.com/nodejs/node"},(0,l.yg)("strong",{parentName:"a"},"Node.js"))," server to serve up the static app and the optional API endpoints, and container deployment is done with ",(0,l.yg)("a",{parentName:"p",href:"https://www.docker.com/"},(0,l.yg)("strong",{parentName:"a"},"Docker")),"."),(0,l.yg)("h3",{id:"utilities"},"Utilities"),(0,l.yg)("ul",null,(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/brix/crypto-js"},(0,l.yg)("inlineCode",{parentName:"a"},"crypto-js"))," - Encryption implementations by @evanvosberg and community ",(0,l.yg)("inlineCode",{parentName:"li"},"MIT")),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/axios/axios"},(0,l.yg)("inlineCode",{parentName:"a"},"axios"))," - Promise based HTTP client by @mzabriskie and community ",(0,l.yg)("inlineCode",{parentName:"li"},"MIT")),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/ajv-validator/ajv"},(0,l.yg)("inlineCode",{parentName:"a"},"ajv"))," - JSON schema Validator by @epoberezkin and community ",(0,l.yg)("inlineCode",{parentName:"li"},"MIT")),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/kazupon/vue-i18n"},(0,l.yg)("inlineCode",{parentName:"a"},"i18n"))," - Internationalization plugin by @kazupon and community ",(0,l.yg)("inlineCode",{parentName:"li"},"MIT")),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/frappe/charts"},(0,l.yg)("inlineCode",{parentName:"a"},"frappe-charts"))," - Lightweight charting library by @frappe ",(0,l.yg)("inlineCode",{parentName:"li"},"MIT"))),(0,l.yg)("h3",{id:"frontend-components"},"Frontend Components"),(0,l.yg)("ul",null,(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/sagalbot/vue-select"},(0,l.yg)("inlineCode",{parentName:"a"},"vue-select"))," - Dropdown component by @sagalbot ",(0,l.yg)("inlineCode",{parentName:"li"},"MIT")),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/euvl/vue-js-modal"},(0,l.yg)("inlineCode",{parentName:"a"},"vue-js-modal"))," - Modal component by @euvl ",(0,l.yg)("inlineCode",{parentName:"li"},"MIT")),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/Akryum/v-tooltip"},(0,l.yg)("inlineCode",{parentName:"a"},"v-tooltip"))," - Tooltip component by @Akryum ",(0,l.yg)("inlineCode",{parentName:"li"},"MIT")),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/jairoblatt/vue-material-tabs"},(0,l.yg)("inlineCode",{parentName:"a"},"vue-material-tabs"))," - Tab view component by @jairoblatt ",(0,l.yg)("inlineCode",{parentName:"li"},"MIT")),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/yansenlei/VJsoneditor"},(0,l.yg)("inlineCode",{parentName:"a"},"VJsoneditor"))," - Interactive JSON editor component by @yansenlei ",(0,l.yg)("inlineCode",{parentName:"li"},"MIT"),(0,l.yg)("ul",{parentName:"li"},(0,l.yg)("li",{parentName:"ul"},"Forked from ",(0,l.yg)("a",{parentName:"li",href:"https://github.com/josdejong/jsoneditor"},(0,l.yg)("inlineCode",{parentName:"a"},"JsonEditor"))," by @josdejong ",(0,l.yg)("inlineCode",{parentName:"li"},"Apache-2.0 License")))),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/shakee93/vue-toasted"},(0,l.yg)("inlineCode",{parentName:"a"},"vue-toasted"))," - Toast notification component by @shakee93 ",(0,l.yg)("inlineCode",{parentName:"li"},"MIT")),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/saintplay/vue-swatches"},(0,l.yg)("inlineCode",{parentName:"a"},"vue-swatches"))," - Color palete picker by @saintplay ",(0,l.yg)("inlineCode",{parentName:"li"},"MIT"))),(0,l.yg)("h3",{id:"backup--sync-server"},"Backup & Sync Server"),(0,l.yg)("p",null,"Although the app is purely frontend, there is an optional cloud sync feature, for off-site backup and restore. This is built as a serverless function on ",(0,l.yg)("a",{parentName:"p",href:"https://workers.cloudflare.com/"},"Cloudflare workers")," using ",(0,l.yg)("a",{parentName:"p",href:"https://developers.cloudflare.com/workers/runtime-apis/kv"},"KV")," and ",(0,l.yg)("a",{parentName:"p",href:"https://developers.cloudflare.com/workers/runtime-apis/web-crypto"},"web crypto")),(0,l.yg)("h3",{id:"external-services"},"External Services"),(0,l.yg)("p",null,"The 1-Click deploy demo uses ",(0,l.yg)("a",{parentName:"p",href:"https://play-with-docker.com/"},"Play-with-Docker Labs"),". Code is hosted on ",(0,l.yg)("a",{parentName:"p",href:"https://github.com"},"GitHub"),", Docker images are hosted on ",(0,l.yg)("a",{parentName:"p",href:"https://hub.docker.com/"},"DockerHub"),", and the demos are hosted on ",(0,l.yg)("a",{parentName:"p",href:"https://www.netlify.com/"},"Netlify"),"."),(0,l.yg)("h3",{id:"actions"},"Actions"),(0,l.yg)("p",null,"This repo makes heavy use of ",(0,l.yg)("a",{parentName:"p",href:"https://github.com/features/actions"},"GitHub actions")," to run automated workflows. The following base actions are totally awesome, and have been extremely useful. Full credit to their respective authors"),(0,l.yg)("ul",null,(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/butlerlogic/action-autotag"},(0,l.yg)("inlineCode",{parentName:"a"},"action-autotag"))," by @butlerlogic - Tags new versions when app version changes"),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/joeizzard/action-wiki-sync"},(0,l.yg)("inlineCode",{parentName:"a"},"action-wiki-sync"))," by @joeizzard - Copies the markdown docs to the GH wiki"),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/bubkoo/contributors-list"},(0,l.yg)("inlineCode",{parentName:"a"},"contributors-list"))," by @bubkoo - Generates contributors SVG"),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/akhilmhdh/contributors-readme-action"},(0,l.yg)("inlineCode",{parentName:"a"},"contributors-readme-action"))," by @akhilmhdh - Inserts contributors into credits"),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/eter-evans/create-pull-request"},(0,l.yg)("inlineCode",{parentName:"a"},"create-pull-request"))," by @eter-evans - Creates pull request"),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/JamesIves/github-pages-deploy-action"},(0,l.yg)("inlineCode",{parentName:"a"},"github-pages-deploy-action"))," by @JamesIves - Deploy app to GH pages"),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/apexskier/github-release-commenter"},(0,l.yg)("inlineCode",{parentName:"a"},"github-release-commenter"))," by @apexskier - Updates issues when fix is released"),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/JamesIves/github-sponsors-readme-action"},(0,l.yg)("inlineCode",{parentName:"a"},"github-sponsors-readme-action"))," by @JamesIves - Inserts sponsors into credits"),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/JasonEtco/is-sponsor-label-action"},(0,l.yg)("inlineCode",{parentName:"a"},"is-sponsor-label-action"))," by @JasonEtco - Label sponsors, for priority support"),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/tomsun28/issues-translate-action"},(0,l.yg)("inlineCode",{parentName:"a"},"issues-translate-action"))," by @tomsun28 - Translates non-English issues and comments"),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/sobolevn/misspell-fixer-action"},(0,l.yg)("inlineCode",{parentName:"a"},"misspell-fixer-action"))," by @sobolevn - Finds and fixes typos"),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/uhyo/please-star-first"},(0,l.yg)("inlineCode",{parentName:"a"},"please-star-first"))," by @uhyo - Closes certain issues by non-stargazers"),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/exercism/pr-commenter-action"},(0,l.yg)("inlineCode",{parentName:"a"},"pr-commenter-action"))," by @exercism - Adds info comments to PR based on the files changed"),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/snyk/actions/node"},(0,l.yg)("inlineCode",{parentName:"a"},"snyk note"))," by @snyk - Reports vulnerabilities in the code or dependencies"),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/alstr/todo-to-issue-action"},(0,l.yg)("inlineCode",{parentName:"a"},"todo-to-issue-action"))," by @alstr - Opens issues from todos in the code"),(0,l.yg)("li",{parentName:"ul"},(0,l.yg)("a",{parentName:"li",href:"https://github.com/Simek/yarn-lock-changes"},(0,l.yg)("inlineCode",{parentName:"a"},"yarn-lock-changes"))," by @Simek - Outputs dependency changes in PR")),(0,l.yg)("hr",null),(0,l.yg)("h2",{id:"you"},"You"),(0,l.yg)("p",null,"Would you like to be listed here? Whatever your skill set, Dashy needs people like you to help support future development. Check out the ",(0,l.yg)("a",{parentName:"p",href:"/docs/contributing"},"Contributing Page")," for ways that you can get involved. Huge thank you to everyone who has already contributed! \ud83d\udc96"))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2140bf91.05ab2842.js b/assets/js/2140bf91.05ab2842.js new file mode 100644 index 00000000..adbe0d45 --- /dev/null +++ b/assets/js/2140bf91.05ab2842.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdashy=self.webpackChunkdashy||[]).push([[146],{5680:(e,t,n)=>{n.d(t,{xA:()=>c,yg:()=>h});var a=n(6540);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},u="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=p(n),d=o,h=u["".concat(l,".").concat(d)]||u[d]||g[d]||i;return n?a.createElement(h,r(r({ref:t},c),{},{components:n})):a.createElement(h,r({ref:t},c))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,r=new Array(i);r[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:o,r[1]=s;for(var p=2;p{n.r(t),n.d(t,{contentTitle:()=>r,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var a=n(8168),o=(n(6540),n(5680));const i={},r="Pages and Sections",s={unversionedId:"pages-and-sections",id:"pages-and-sections",isDocsHomePage:!1,title:"Pages and Sections",description:"Multi-Page Support",source:"@site/docs/pages-and-sections.md",sourceDirName:".",slug:"/pages-and-sections",permalink:"/docs/pages-and-sections",editUrl:"https://github.com/Lissy93/dashy/edit/gh-pages/docs/docs/pages-and-sections.md",version:"current",frontMatter:{},sidebar:"dashySidebar",previous:{title:"Cloud Backup and Restore",permalink:"/docs/backup-restore"},next:{title:"*Dashy Showcase* \ud83c\udf1f",permalink:"/docs/showcase"}},l=[{value:"Multi-Page Support",id:"multi-page-support",children:[{value:"Using Local Sub-Pages",id:"using-local-sub-pages",children:[]},{value:"Using Remote Sub-Pages",id:"using-remote-sub-pages",children:[]},{value:"Restrictions",id:"restrictions",children:[]}]},{value:"Sub-Items",id:"sub-items",children:[]}],p={toc:l},c="wrapper";function u(e){let{components:t,...n}=e;return(0,o.yg)(c,(0,a.A)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.yg)("h1",{id:"pages-and-sections"},"Pages and Sections"),(0,o.yg)("h2",{id:"multi-page-support"},"Multi-Page Support"),(0,o.yg)("p",null,"You can have additional pages within your dashboard, with each having it's own config file. The config files for sub-pages can either be stored locally, or hosted separately. A link to each additional page will be displayed in the navigation bar."),(0,o.yg)("p",null,"You can edit additional pages using the interactive editor, exactly the same was as your primary page (so long as it's local). But please save changes to one page, before you start editing the next."),(0,o.yg)("h3",{id:"using-local-sub-pages"},"Using Local Sub-Pages"),(0,o.yg)("p",null,"To get started, create a new ",(0,o.yg)("inlineCode",{parentName:"p"},".yml")," config file for your sub-page, placing it within ",(0,o.yg)("inlineCode",{parentName:"p"},"/app/user-data"),". Then within your primary ",(0,o.yg)("inlineCode",{parentName:"p"},"conf.yml"),", choose a name, and specify the path to the new file."),(0,o.yg)("p",null,"This is an example. Make sure to add this to the topmost line above appConfig:, or anywhere else appropriately, to match the yml syntax."),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-yaml"},"pages:\n- name: Networking Services\n path: 'networking.yml'\n- name: Work Stuff\n path: 'work.yml'\n")),(0,o.yg)("p",null,"The next step is to create the new page, if you mounted ",(0,o.yg)("inlineCode",{parentName:"p"},"/app/user-data")," in the docker command and not a volume, you can simply create the new page into that folder on the host."),(0,o.yg)("p",null,"If you mounted ",(0,o.yg)("inlineCode",{parentName:"p"},"/app/user-data/conf.yml")," in docker, you can either switch to the volume or create another bind mount to your new additional page."),(0,o.yg)("p",null,"If you're sub-page is located within ",(0,o.yg)("inlineCode",{parentName:"p"},"/app/user-data"),", then you only need to specify the filename, but if it's anywhere else, then the full path is required."),(0,o.yg)("p",null,"A default template a page can be found here: ",(0,o.yg)("a",{parentName:"p",href:"https://github.com/lissy93/dashy/blob/master/user-data/conf.yml"},"https://github.com/lissy93/dashy/blob/master/user-data/conf.yml")," Keep in mind the appConfig cannot be used on subpages and should be removed, for further info see ",(0,o.yg)("a",{parentName:"p",href:"#restrictions"},"Restrictions")),(0,o.yg)("p",null,"The last very important step is to rebuild dashy, this can be easily done through to UI, by opening the settings menu on the top right, navigato to update config and then recompile application."),(0,o.yg)("p",null,"Now if you reload the page, on the top right there should be a new button to navigate to the new page. \ud83c\udf89"),(0,o.yg)("h3",{id:"using-remote-sub-pages"},"Using Remote Sub-Pages"),(0,o.yg)("p",null,"Config files don't need to be local, you can store them anywhere, and data will be imported as sub-pages on page load."),(0,o.yg)("p",null,"For example:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-yaml"},"pages:\n- name: Getting Started\n path: 'https://snippet.host/tvcw/raw'\n- name: Homelab\n path: 'https://snippet.host/tetp/raw'\n- name: Browser Startpage\n path: 'https://snippet.host/zcom/raw'\n")),(0,o.yg)("p",null,"There are many options of how this can be used. You could store your config within a Git repository, in order to easily track and rollback changes. Or host your config on your NAS, to have it backed up with the rest of your files. Or use a hosted paste service, for example ",(0,o.yg)("a",{parentName:"p",href:"https://snippet.host/"},"snippet.host"),", which supports never-expiring CORS-enabled pastes, which can also be edited later."),(0,o.yg)("p",null,"You will obviously not be able to write updates to remote configs directly through the UI editor, but you can still make and preview changes, then use the export menu to get a copy of the new config, which can then be pasted to the remote source manually.\nThe config file must, of course be accessible from within Dashy. If your config contains sensitive info (like API keys, credentials, secret URLs, etc), take care not to expose it to the internet."),(0,o.yg)("p",null,"The following example shows creating a config, publishing it as a ",(0,o.yg)("a",{parentName:"p",href:"https://gist.github.com/"},"Gist"),", copying the URL to the raw file, and using it within your dashboard."),(0,o.yg)("p",{align:"center"},(0,o.yg)("img",{width:"700",alt:"Public config in a gist demo",src:"https://i.ibb.co/55jm3LG/how-to-use-remote-config-sub-page.gif"})),(0,o.yg)("h3",{id:"restrictions"},"Restrictions"),(0,o.yg)("p",null,"Only top-level fields supported by sub-pages are ",(0,o.yg)("inlineCode",{parentName:"p"},"pageInfo")," and ",(0,o.yg)("inlineCode",{parentName:"p"},"sections"),". The ",(0,o.yg)("inlineCode",{parentName:"p"},"appConfig")," and ",(0,o.yg)("inlineCode",{parentName:"p"},"pages")," will always be inherited from your main ",(0,o.yg)("inlineCode",{parentName:"p"},"conf.yml")," file. Other than that, sub-pages behave exactly the same as your default view, and can contain sections, items, widgets and page info like nav links, title and logo."),(0,o.yg)("p",null,"Note that since page paths are required by the router, they are set at build-time, not run-time, and so a rebuild (happens automatically) is required for changes to page paths to take effect (this only applies to changes to the ",(0,o.yg)("inlineCode",{parentName:"p"},"pages")," array, rebuild isn't required for editing page content)."),(0,o.yg)("h2",{id:"sub-items"},"Sub-Items"),(0,o.yg)("p",null,"A normal section will contain zero or more items, for example:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-yaml"},"- name: Coding\n icon: far fa-code\n items:\n - title: GitHub\n url: https://github.com/\n - title: StackOverflow\n url: http://stackoverflow.com/\n")),(0,o.yg)("p",null,"But items can also be grouped together, referred to as sub-items. This is useful for a group of less frequently used items, which you don't want to take up too much space."),(0,o.yg)("p",null,"Item groups may also have an optional title."),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-yaml"},"- name: Coding\n icon: far fa-code\n items:\n - title: Normal Item 1\n - title: Normal Item 2\n - subItems:\n - title: JavaScript\n url: https://developer.mozilla.org\n icon: si-javascript\n - title: TypeScript\n url: https://www.typescriptlang.org/docs\n icon: si-typescript\n - title: Svelt\n url: https://svelte.dev/docs\n icon: si-svelte\n - title: Go\n url: https://go.dev/doc\n icon: si-go\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2140bf91.f2e2506e.js b/assets/js/2140bf91.f2e2506e.js deleted file mode 100644 index 616e523c..00000000 --- a/assets/js/2140bf91.f2e2506e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdashy=self.webpackChunkdashy||[]).push([[146],{5680:(e,t,n)=>{n.d(t,{xA:()=>c,yg:()=>h});var a=n(6540);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},u="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=p(n),d=o,h=u["".concat(l,".").concat(d)]||u[d]||g[d]||i;return n?a.createElement(h,r(r({ref:t},c),{},{components:n})):a.createElement(h,r({ref:t},c))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,r=new Array(i);r[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:o,r[1]=s;for(var p=2;p{n.r(t),n.d(t,{contentTitle:()=>r,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var a=n(8168),o=(n(6540),n(5680));const i={},r="Pages and Sections",s={unversionedId:"pages-and-sections",id:"pages-and-sections",isDocsHomePage:!1,title:"Pages and Sections",description:"Multi-Page Support",source:"@site/docs/pages-and-sections.md",sourceDirName:".",slug:"/pages-and-sections",permalink:"/docs/pages-and-sections",editUrl:"https://github.com/Lissy93/dashy/edit/gh-pages/docs/docs/pages-and-sections.md",version:"current",frontMatter:{},sidebar:"dashySidebar",previous:{title:"Cloud Backup and Restore",permalink:"/docs/backup-restore"},next:{title:"*Dashy Showcase* \ud83c\udf1f",permalink:"/docs/showcase"}},l=[{value:"Multi-Page Support",id:"multi-page-support",children:[{value:"Using Local Sub-Pages",id:"using-local-sub-pages",children:[]},{value:"Using Remote Sub-Pages",id:"using-remote-sub-pages",children:[]},{value:"Restrictions",id:"restrictions",children:[]}]},{value:"Sub-Items",id:"sub-items",children:[]}],p={toc:l},c="wrapper";function u(e){let{components:t,...n}=e;return(0,o.yg)(c,(0,a.A)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.yg)("h1",{id:"pages-and-sections"},"Pages and Sections"),(0,o.yg)("h2",{id:"multi-page-support"},"Multi-Page Support"),(0,o.yg)("p",null,"You can have additional pages within your dashboard, with each having it's own config file. The config files for sub-pages can either be stored locally, or hosted separately. A link to each additional page will be displayed in the navigation bar."),(0,o.yg)("p",null,"You can edit additional pages using the interactive editor, exactly the same was as your primary page (so long as it's local). But please save changes to one page, before you start editing the next."),(0,o.yg)("h3",{id:"using-local-sub-pages"},"Using Local Sub-Pages"),(0,o.yg)("p",null,"To get started, create a new ",(0,o.yg)("inlineCode",{parentName:"p"},".yml")," config file for your sub-page, placing it within ",(0,o.yg)("inlineCode",{parentName:"p"},"/app/public"),". Then within your primary ",(0,o.yg)("inlineCode",{parentName:"p"},"conf.yml"),", choose a name, and specify the path to the new file."),(0,o.yg)("p",null,"For example:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-yaml"},"pages:\n- name: Networking Services\n path: 'networking.yml'\n- name: Work Stuff\n path: 'work.yml'\n")),(0,o.yg)("p",null,"If you're sub-page is located within ",(0,o.yg)("inlineCode",{parentName:"p"},"/app/public"),", then you only need to specify the filename, but if it's anywhere else, then the full path is required."),(0,o.yg)("h3",{id:"using-remote-sub-pages"},"Using Remote Sub-Pages"),(0,o.yg)("p",null,"Config files don't need to be local, you can store them anywhere, and data will be imported as sub-pages on page load."),(0,o.yg)("p",null,"For example:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-yaml"},"pages:\n- name: Getting Started\n path: 'https://snippet.host/tvcw/raw'\n- name: Homelab\n path: 'https://snippet.host/tetp/raw'\n- name: Browser Startpage\n path: 'https://snippet.host/zcom/raw'\n")),(0,o.yg)("p",null,"There are many options of how this can be used. You could store your config within a Git repository, in order to easily track and rollback changes. Or host your config on your NAS, to have it backed up with the rest of your files. Or use a hosted paste service, for example ",(0,o.yg)("a",{parentName:"p",href:"https://snippet.host/"},"snippet.host"),", which supports never-expiring CORS-enabled pastes, which can also be edited later."),(0,o.yg)("p",null,"You will obviously not be able to write updates to remote configs directly through the UI editor, but you can still make and preview changes, then use the export menu to get a copy of the new config, which can then be pasted to the remote source manually.\nThe config file must, of course be accessible from within Dashy. If your config contains sensitive info (like API keys, credentials, secret URLs, etc), take care not to expose it to the internet."),(0,o.yg)("p",null,"The following example shows creating a config, publishing it as a ",(0,o.yg)("a",{parentName:"p",href:"https://gist.github.com/"},"Gist"),", copying the URL to the raw file, and using it within your dashboard."),(0,o.yg)("p",{align:"center"},(0,o.yg)("img",{width:"700",alt:"Public config in a gist demo",src:"https://i.ibb.co/55jm3LG/how-to-use-remote-config-sub-page.gif"})),(0,o.yg)("h3",{id:"restrictions"},"Restrictions"),(0,o.yg)("p",null,"Only top-level fields supported by sub-pages are ",(0,o.yg)("inlineCode",{parentName:"p"},"pageInfo")," and ",(0,o.yg)("inlineCode",{parentName:"p"},"sections"),". The ",(0,o.yg)("inlineCode",{parentName:"p"},"appConfig")," and ",(0,o.yg)("inlineCode",{parentName:"p"},"pages")," will always be inherited from your main ",(0,o.yg)("inlineCode",{parentName:"p"},"conf.yml")," file. Other than that, sub-pages behave exactly the same as your default view, and can contain sections, items, widgets and page info like nav links, title and logo."),(0,o.yg)("p",null,"Note that since page paths are required by the router, they are set at build-time, not run-time, and so a rebuild (happens automatically) is required for changes to page paths to take effect (this only applies to changes to the ",(0,o.yg)("inlineCode",{parentName:"p"},"pages")," array, rebuild isn't required for editing page content)."),(0,o.yg)("h2",{id:"sub-items"},"Sub-Items"),(0,o.yg)("p",null,"A normal section will contain zero or more items, for example:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-yaml"},"- name: Coding\n icon: far fa-code\n items:\n - title: GitHub\n url: https://github.com/\n - title: StackOverflow\n url: http://stackoverflow.com/\n")),(0,o.yg)("p",null,"But items can also be grouped together, referred to as sub-items. This is useful for a group of less frequently used items, which you don't want to take up too much space, or for action buttons (",(0,o.yg)("em",{parentName:"p"},"coming soon"),")."),(0,o.yg)("p",null,"Item groups may also have an optional title."),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-yaml"},"- name: Coding\n icon: far fa-code\n items:\n - title: Normal Item 1\n - title: Normal Item 2\n - subItems:\n - title: JavaScript\n url: https://developer.mozilla.org\n icon: si-javascript\n - title: TypeScript\n url: https://www.typescriptlang.org/docs\n icon: si-typescript\n - title: Svelt\n url: https://svelte.dev/docs\n icon: si-svelte\n - title: Go\n url: https://go.dev/doc\n icon: si-go\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/25b7c3f2.a717e408.js b/assets/js/25b7c3f2.a717e408.js deleted file mode 100644 index 206d1806..00000000 --- a/assets/js/25b7c3f2.a717e408.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdashy=self.webpackChunkdashy||[]).push([[847],{137:(e,t,a)=>{a.d(t,{A:()=>r});var c,n=a(6540);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{a.d(t,{A:()=>r});var c,n=a(6540);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{a.d(t,{A:()=>r});var c,n=a(6540);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{a.d(t,{A:()=>r});var c,n=a(6540);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{a.d(t,{A:()=>r});var c,n=a(6540);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{a.d(t,{A:()=>r});var c,n=a(6540);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{a.d(t,{A:()=>r});var c=a(6540),n=a(53),l=a(4676);function r(e){let{children:t,to:a,color:r}=e;return c.createElement(l.A,{to:a,className:(0,n.A)("button",r&&"color-btn",`btn-${r}`)},t)}},4138:(e,t,a)=>{a.r(t),a.d(t,{default:()=>ge});var c,n=a(8168),l=a(6540),r=a(5593),i=a(4586),s=a(2686),o=a(8733),d=a(137),u=a(7962),v=a(831);function h(){return h=Object.assign?Object.assign.bind():function(e){for(var t=1;tl.createElement("div",{key:t},l.createElement("h3",{className:"section-title"},t+1,". ",e.section),l.createElement("div",{className:"docs-links-section"},e.items.map(((e,a)=>l.createElement(he,(0,n.A)({key:t+a,index:t+a},e)))))))))))}},8733:(e,t,a)=>{a.d(t,{A:()=>c});const c=e=>{switch(e%4){case 0:return"pink";case 1:return"blue";case 2:return"green";case 3:return"yellow";default:return"white"}}}}]); \ No newline at end of file diff --git a/assets/js/25b7c3f2.a8802dc8.js b/assets/js/25b7c3f2.a8802dc8.js new file mode 100644 index 00000000..670724f6 --- /dev/null +++ b/assets/js/25b7c3f2.a8802dc8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdashy=self.webpackChunkdashy||[]).push([[847],{137:(e,t,a)=>{a.d(t,{A:()=>r});var n,c=a(6540);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{a.d(t,{A:()=>r});var n,c=a(6540);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{a.d(t,{A:()=>r});var n,c=a(6540);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{a.d(t,{A:()=>r});var n,c=a(6540);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{a.d(t,{A:()=>r});var n,c=a(6540);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{a.d(t,{A:()=>r});var n,c=a(6540);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{a.d(t,{A:()=>r});var n=a(6540),c=a(53),l=a(4676);function r(e){let{children:t,to:a,color:r}=e;return n.createElement(l.A,{to:a,className:(0,c.A)("button",r&&"color-btn",`btn-${r}`)},t)}},4138:(e,t,a)=>{a.r(t),a.d(t,{default:()=>he});var n,c=a(8168),l=a(6540),r=a(5593),i=a(4586),s=a(2686),o=a(8733),d=a(137),u=a(7962),v=a(831);function g(){return g=Object.assign?Object.assign.bind():function(e){for(var t=1;tl.createElement("div",{key:t},l.createElement("h3",{className:"section-title"},t+1,". ",e.section),l.createElement("div",{className:"docs-links-section"},e.items.map(((e,a)=>l.createElement(ge,(0,c.A)({key:t+a,index:t+a},e)))))))))))}},8733:(e,t,a)=>{a.d(t,{A:()=>n});const n=e=>{switch(e%4){case 0:return"pink";case 1:return"blue";case 2:return"green";case 3:return"yellow";default:return"white"}}}}]); \ No newline at end of file diff --git a/assets/js/4bdb0d83.c9654703.js b/assets/js/4bdb0d83.c9654703.js new file mode 100644 index 00000000..e24ef2df --- /dev/null +++ b/assets/js/4bdb0d83.c9654703.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdashy=self.webpackChunkdashy||[]).push([[496],{5680:(e,t,n)=>{n.d(t,{xA:()=>p,yg:()=>N});var a=n(6540);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var g=a.createContext({}),d=function(e){var t=a.useContext(g),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},p=function(e){var t=d(e.components);return a.createElement(g.Provider,{value:t},e.children)},y="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},s=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,g=e.parentName,p=o(e,["components","mdxType","originalType","parentName"]),y=d(n),s=r,N=y["".concat(g,".").concat(s)]||y[s]||m[s]||i;return n?a.createElement(N,l(l({ref:t},p),{},{components:n})):a.createElement(N,l({ref:t},p))}));function N(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,l=new Array(i);l[0]=s;var o={};for(var g in t)hasOwnProperty.call(t,g)&&(o[g]=t[g]);o.originalType=e,o[y]="string"==typeof e?e:r,l[1]=o;for(var d=2;d{n.r(t),n.d(t,{contentTitle:()=>l,default:()=>y,frontMatter:()=>i,metadata:()=>o,toc:()=>g});var a=n(8168),r=(n(6540),n(5680));const i={},l="Configuring",o={unversionedId:"configuring",id:"configuring",isDocsHomePage:!1,title:"Configuring",description:"All app configuration is specified in /user-data/conf.yml which is in YAML Format format. If you're using Docker, this file can be passed in as a volume. Changes can either be made directly to this file, or done through the UI. From the UI you can also export, backup, reset, validate and download your configuration file.",source:"@site/docs/configuring.md",sourceDirName:".",slug:"/configuring",permalink:"/docs/configuring",editUrl:"https://github.com/Lissy93/dashy/edit/gh-pages/docs/docs/configuring.md",version:"current",frontMatter:{},sidebar:"dashySidebar",previous:{title:"Deployment",permalink:"/docs/deployment"},next:{title:"App Management",permalink:"/docs/management"}},g=[{value:"There are three ways to edit the config",id:"there-are-three-ways-to-edit-the-config",children:[]},{value:"Tips",id:"tips",children:[]},{value:"Contents",id:"contents",children:[]},{value:"Top-Level Fields",id:"top-level-fields",children:[]},{value:"PageInfo",id:"pageinfo",children:[]},{value:"pageInfo.navLinks (optional)",id:"pageinfonavlinks-optional",children:[]},{value:"pages[] (optional)",id:"pages-optional",children:[]},{value:"appConfig (optional)",id:"appconfig-optional",children:[]},{value:"appConfig.auth (optional)",id:"appconfigauth-optional",children:[]},{value:"appConfig.auth.users (optional)",id:"appconfigauthusers-optional",children:[]},{value:"appConfig.auth.keycloak (optional)",id:"appconfigauthkeycloak-optional",children:[]},{value:"appConfig.auth.headerAuth (optional)",id:"appconfigauthheaderauth-optional",children:[]},{value:"appConfig.auth.oidc (optional)",id:"appconfigauthoidc-optional",children:[]},{value:"appConfig.webSearch (optional)",id:"appconfigwebsearch-optional",children:[]},{value:"appConfig.hideComponents (optional)",id:"appconfighidecomponents-optional",children:[]},{value:"section",id:"section",children:[]},{value:"section.item",id:"sectionitem",children:[]},{value:"item.displayData (optional)",id:"itemdisplaydata-optional",children:[]},{value:"section.widgets (optional)",id:"sectionwidgets-optional",children:[]},{value:"section.displayData (optional)",id:"sectiondisplaydata-optional",children:[]},{value:"section.icon and section.item.icon",id:"sectionicon-and-sectionitemicon",children:[]},{value:"section.displayData.hideForKeycloakUsers, section.displayData.showForKeycloakUsers, item.displayData.hideForKeycloakUsers and item.displayData.showForKeycloakUsers",id:"sectiondisplaydatahideforkeycloakusers-sectiondisplaydatashowforkeycloakusers-itemdisplaydatahideforkeycloakusers-and-itemdisplaydatashowforkeycloakusers",children:[]},{value:"Notes",id:"notes",children:[{value:"Editing Config through the UI",id:"editing-config-through-the-ui",children:[]},{value:"About YAML",id:"about-yaml",children:[]},{value:"Config Saving Methods",id:"config-saving-methods",children:[]},{value:"Preventing Changes",id:"preventing-changes",children:[]},{value:"Example",id:"example",children:[]}]}],d={toc:g},p="wrapper";function y(e){let{components:t,...n}=e;return(0,r.yg)(p,(0,a.A)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.yg)("h1",{id:"configuring"},"Configuring"),(0,r.yg)("p",null,"All app configuration is specified in ",(0,r.yg)("a",{parentName:"p",href:"https://github.com/Lissy93/dashy/blob/master/user-data/conf.yml"},(0,r.yg)("inlineCode",{parentName:"a"},"/user-data/conf.yml"))," which is in ",(0,r.yg)("a",{parentName:"p",href:"https://yaml.org/"},"YAML Format")," format. If you're using Docker, this file can be passed in as a volume. Changes can either be made directly to this file, or done ",(0,r.yg)("a",{parentName:"p",href:"#editing-config-through-the-ui"},"through the UI"),". From the UI you can also export, backup, reset, validate and download your configuration file."),(0,r.yg)("h2",{id:"there-are-three-ways-to-edit-the-config"},"There are three ways to edit the config"),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("strong",{parentName:"li"},"Directly in the YAML file")," ",(0,r.yg)("em",{parentName:"li"},"(5/5 reliability, 3/5 usability)"),(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Write changes directly to the conf.yml file, optionally using one of the templates provided. This can be done in your favorite editor and uploading to your server, or directly editing the file via SSH, but the easiest method would be to use ",(0,r.yg)("a",{parentName:"li",href:"https://github.com/coder/code-server"},"Code Server")))),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("strong",{parentName:"li"},"UI JSON Editor")," ",(0,r.yg)("em",{parentName:"li"},"(4/5 reliability, 4/5 usability)"),(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"From the UI, under the config menu there is a JSON editor, with built-in validation, documentation and advanced options"))),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("strong",{parentName:"li"},"UI Visual Editor")," ",(0,r.yg)("em",{parentName:"li"},"(3/5 reliability, 5/5 usability)"),(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"From the UI, enter the Interactive Edit Mode, then click any part of the page to edit. Changes are previewed live, and then saved to disk"))),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("strong",{parentName:"li"},"REST API")," ",(0,r.yg)("em",{parentName:"li"},"(Coming soon)"),(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Programmatically edit config either through the command line, using a script or a third-party application")))),(0,r.yg)("h2",{id:"tips"},"Tips"),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"You may find it helpful to look at some sample config files to get you started, a collection of which can be found ",(0,r.yg)("a",{parentName:"li",href:"https://gist.github.com/Lissy93/000f712a5ce98f212817d20bc16bab10"},"here")),(0,r.yg)("li",{parentName:"ul"},"You can check that your config file fits the schema, by running ",(0,r.yg)("inlineCode",{parentName:"li"},"yarn validate-config")),(0,r.yg)("li",{parentName:"ul"},"After modifying your config, the app needs to be recompiled, by running ",(0,r.yg)("inlineCode",{parentName:"li"},"yarn build")," - this happens automatically if you're using Docker"),(0,r.yg)("li",{parentName:"ul"},"It is recommended to keep a backup of your config file. You can download it under Config menu, or use the ",(0,r.yg)("a",{parentName:"li",href:"/docs/backup-restore"},"Cloud Backup")," feature."),(0,r.yg)("li",{parentName:"ul"},"You can make use of YAML features, like anchors, comments, multi-line strings, etc to reuse attributes and keep your config file readable"),(0,r.yg)("li",{parentName:"ul"},"Once you have finished configuring your dashboard, you can choose to ",(0,r.yg)("a",{parentName:"li",href:"#preventing-changes"},"disable UI config")," if you wish"),(0,r.yg)("li",{parentName:"ul"},"All fields are optional, unless otherwise stated.")),(0,r.yg)("p",null,"The following file provides a reference of all supported configuration options."),(0,r.yg)("h2",{id:"contents"},"Contents"),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#pageinfo"},(0,r.yg)("strong",{parentName:"a"},(0,r.yg)("inlineCode",{parentName:"strong"},"pageInfo")))," - Header text, footer, title, navigation, etc",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#pageinfonavlinks-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"navLinks"))," - Links to display in the navigation bar"))),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#pages-optional"},(0,r.yg)("strong",{parentName:"a"},(0,r.yg)("inlineCode",{parentName:"strong"},"pages")))," - List of additional config files, for multi-page dashboards"),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#appconfig-optional"},(0,r.yg)("strong",{parentName:"a"},(0,r.yg)("inlineCode",{parentName:"strong"},"appConfig")))," - Main application settings",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#appconfigwebsearch-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"webSearch"))," - Configure web search engine options"),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#appconfighidecomponents-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"hideComponents"))," - Show/ hide page components"),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#appconfigauth-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"auth"))," - Built-in authentication setup",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#appconfigauthusers-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"users"))," - List or users (for simple auth)"),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#appconfigauthkeycloak-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"keycloak"))," - Auth config for Keycloak"),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#appconfigauthheaderauth-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"headerAuth"))," - Auth config for HeaderAuth"))))),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#section"},(0,r.yg)("strong",{parentName:"a"},(0,r.yg)("inlineCode",{parentName:"strong"},"sections")))," - List of sections",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#sectiondisplaydata-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"displayData"))," - Section display settings",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#sectiondisplaydatahideforkeycloakusers-sectiondisplaydatashowforkeycloakusers-itemdisplaydatahideforkeycloakusers-and-itemdisplaydatashowforkeycloakusers"},(0,r.yg)("inlineCode",{parentName:"a"},"show/hideForKeycloakUsers"))," - Set user controls"))),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#sectionicon-and-sectionitemicon"},(0,r.yg)("inlineCode",{parentName:"a"},"icon"))," - Icon for a section"),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#sectionitem"},(0,r.yg)("inlineCode",{parentName:"a"},"items"))," - List of items",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#sectionicon-and-sectionitemicon"},(0,r.yg)("inlineCode",{parentName:"a"},"icon"))," - Icon for an item"),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#itemdisplaydata-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"displayData"))," - Item display settings",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#sectiondisplaydatahideforkeycloakusers-sectiondisplaydatashowforkeycloakusers-itemdisplaydatahideforkeycloakusers-and-itemdisplaydatashowforkeycloakusers"},(0,r.yg)("inlineCode",{parentName:"a"},"show/hideForKeycloakUsers"))," - Set user controls"))))),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#sectionwidget-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"widgets"))," - List of widgets"))),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#notes"},(0,r.yg)("strong",{parentName:"a"},"Notes")),(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#editing-config-through-the-ui"},"Editing Config through the UI")),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#about-yaml"},"About YAML")),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#config-saving-methods"},"Config Saving Methods")),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#preventing-changes"},"Preventing Changes")),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#example"},"Example"))))),(0,r.yg)("hr",null),(0,r.yg)("h2",{id:"top-level-fields"},"Top-Level Fields"),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"pageInfo"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"Basic meta data like title, description, nav bar links, footer text. See ",(0,r.yg)("a",{parentName:"td",href:"#pageinfo"},(0,r.yg)("inlineCode",{parentName:"a"},"pageInfo")))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"appConfig"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Settings related to how the app functions, including API keys and global styles. See ",(0,r.yg)("a",{parentName:"td",href:"#appconfig-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"appConfig")))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"sections"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"array")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"An array of sections, each containing an array of items, which will be displayed as links. See ",(0,r.yg)("a",{parentName:"td",href:"#section"},(0,r.yg)("inlineCode",{parentName:"a"},"section")))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"pages"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"array")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"An array additional config files, used for multi-page dashboards. See ",(0,r.yg)("a",{parentName:"td",href:"#pages-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"pages")))))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"pageinfo"},(0,r.yg)("inlineCode",{parentName:"h2"},"PageInfo")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"title"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"Your dashboard title, displayed in the header and browser tab")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"description"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Description of your dashboard, also displayed as a subtitle")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"navLinks"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"array")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Optional list of a maximum of 6 links, which will be displayed in the navigation bar. See ",(0,r.yg)("a",{parentName:"td",href:"#pageinfonavlinks-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"navLinks")))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"footerText"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Text to display in the footer (note that this will override the default footer content). This can also include HTML and inline CSS")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"logo"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The path to an image to display in the header (to the right of the title). This can be either local, where ",(0,r.yg)("inlineCode",{parentName:"td"},"/")," is the root of ",(0,r.yg)("inlineCode",{parentName:"td"},"./public"),", or any remote image, such as ",(0,r.yg)("inlineCode",{parentName:"td"},"https://i.ibb.co/yhbt6CY/dashy.png"),". It's recommended to scale your image down, so that it doesn't impact load times")))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"pageinfonavlinks-optional"},(0,r.yg)("inlineCode",{parentName:"h2"},"pageInfo.navLinks")," ",(0,r.yg)("em",{parentName:"h2"},"(optional)")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"title"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"The text to display on the link button")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"path"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"The URL to navigate to when clicked. Can be relative (e.g. ",(0,r.yg)("inlineCode",{parentName:"td"},"/about"),") or absolute (e.g. ",(0,r.yg)("inlineCode",{parentName:"td"},"https://example.com")," or ",(0,r.yg)("inlineCode",{parentName:"td"},"http://192.168.1.1"),")")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"target"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The opening method (external links only). Can be either ",(0,r.yg)("inlineCode",{parentName:"td"},"newtab"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"sametab"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"top")," or ",(0,r.yg)("inlineCode",{parentName:"td"},"parent"),". Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"newtab"))))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"pages-optional"},(0,r.yg)("inlineCode",{parentName:"h2"},"pages[]")," ",(0,r.yg)("em",{parentName:"h2"},"(optional)")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"name"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"A unique name for that page")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"path"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"The path (local or remote) to the config file to use.",(0,r.yg)("br",null),"For files located within ",(0,r.yg)("inlineCode",{parentName:"td"},"/public"),", you only need to specify filename, for externally hosted files you must include the full URL")))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"appconfig-optional"},(0,r.yg)("inlineCode",{parentName:"h2"},"appConfig")," ",(0,r.yg)("em",{parentName:"h2"},"(optional)")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"language"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The 2 (or 4-digit) ",(0,r.yg)("a",{parentName:"td",href:"https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes"},"ISO 639-1 code")," for your language, e.g. ",(0,r.yg)("inlineCode",{parentName:"td"},"en")," or ",(0,r.yg)("inlineCode",{parentName:"td"},"en-GB"),". This must be a language that the app has already been ",(0,r.yg)("a",{parentName:"td",href:"https://github.com/Lissy93/dashy/tree/master/src/assets/locales"},"translated")," into. If your language is unavailable, Dashy will fallback to English. By default Dashy will attempt to auto-detect your language, although this may not work on some privacy browsers.")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("del",{parentName:"td"},(0,r.yg)("strong",{parentName:"del"},(0,r.yg)("inlineCode",{parentName:"strong"},"startingView")))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"enum")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Which page to load by default, and on the base page or domain root. You can still switch to different views from within the UI. Can be either ",(0,r.yg)("inlineCode",{parentName:"td"},"default"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"minimal")," or ",(0,r.yg)("inlineCode",{parentName:"td"},"workspace"),". Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"default"),". NOTE: This has been replaced by an environmental variable: ",(0,r.yg)("inlineCode",{parentName:"td"},"VUE_APP_STARTING_VIEW")," in V3 onwards")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"defaultOpeningMethod"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"enum")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The default opening method for items, if no ",(0,r.yg)("inlineCode",{parentName:"td"},"target")," is specified for a given item. Can be either ",(0,r.yg)("inlineCode",{parentName:"td"},"newtab"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"sametab"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"modal"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"workspace"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"clipboard"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"top")," or ",(0,r.yg)("inlineCode",{parentName:"td"},"parent"),". Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"newtab"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"statusCheck"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"When set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),", Dashy will ping each of your services and display their status as a dot next to each item. This can be overridden by setting ",(0,r.yg)("inlineCode",{parentName:"td"},"statusCheck")," under each item. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"statusCheckInterval"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"number")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The number of seconds between checks. If set to ",(0,r.yg)("inlineCode",{parentName:"td"},"0")," then service will only be checked on initial page load, which is usually the desired functionality. If value is less than ",(0,r.yg)("inlineCode",{parentName:"td"},"10")," you may experience a hit in performance. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"0"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"webSearch"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Configuration options for the web search feature, set your default search engine, opening method or disable web search. See ",(0,r.yg)("a",{parentName:"td",href:"#appconfigwebsearch-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"webSearch")))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"backgroundImg"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Path to an optional full-screen app background image. This can be either remote (http) or local (relative to /app/public/item-icons/ inside the container). Note that this will slow down initial load")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"enableFontAwesome"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true")," font-awesome will be loaded, if set to ",(0,r.yg)("inlineCode",{parentName:"td"},"false")," they will not be. if left blank font-awesome will be enabled only if required by 1 or more icons")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"enableMaterialDesignIcons"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true")," mdi icons will be loaded, if set to ",(0,r.yg)("inlineCode",{parentName:"td"},"false")," they will not be. Where ",(0,r.yg)("inlineCode",{parentName:"td"},"true")," is enabled, if left blank material design icons will be enabled only if required by 1 or more icons")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"fontAwesomeKey"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If you have a font-awesome key, then you can use it here and make use of premium icons. It is a 10-digit alpha-numeric string from you're FA kit URL (e.g. ",(0,r.yg)("inlineCode",{parentName:"td"},"13014ae648"),")")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"faviconApi"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"enum")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Only applicable if you are using favicons for item icons. Specifies which service to use to resolve favicons. Set to ",(0,r.yg)("inlineCode",{parentName:"td"},"local")," to do this locally, without using an API. Services running locally will use this option always. Available options are: ",(0,r.yg)("inlineCode",{parentName:"td"},"local"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"faviconkit"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"iconhorse"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"google"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"clearbit"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"webmasterapi")," and ",(0,r.yg)("inlineCode",{parentName:"td"},"allesedv"),". Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"faviconkit"),". See ",(0,r.yg)("a",{parentName:"td",href:"/docs/icons#favicons"},"Icons")," for more info")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"auth"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"All settings relating to user authentication. See ",(0,r.yg)("a",{parentName:"td",href:"#appconfigauth-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"auth")))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"defaultIcon"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"An icon to be applied to any items, which don't already have an icon set. See ",(0,r.yg)("a",{parentName:"td",href:"/docs/icons#default-icon"},"Icon Docs")," for more info")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"layout"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"enum")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Layout for homepage, either ",(0,r.yg)("inlineCode",{parentName:"td"},"horizontal"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"vertical")," or ",(0,r.yg)("inlineCode",{parentName:"td"},"auto"),". Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"auto"),". This specifies the layout and direction of how sections are positioned on the home screen. This can also be modified and overridden from the UI.")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"iconSize"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"enum")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The size of link items / icons. Can be either ",(0,r.yg)("inlineCode",{parentName:"td"},"small"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"medium,")," or ",(0,r.yg)("inlineCode",{parentName:"td"},"large"),". Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"medium"),". This can also be set directly from the UI.")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"colCount"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"number")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The number of columns of sections displayed on the homepage, using the default view. Should be in integer between ",(0,r.yg)("inlineCode",{parentName:"td"},"1")," and ",(0,r.yg)("inlineCode",{parentName:"td"},"8"),". Note that by default this is applied responsively, based on current screen size, and specifying a value here will override this behavior, which may not be desirable.")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"theme"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The default theme for first load (you can change this later from the UI)")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"cssThemes"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string[]")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"An array of custom theme names which can be used in the theme switcher dropdown")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"customColors"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Enables you to apply a custom color palette to any given theme. Use the theme name (lowercase) as the key, for an object including key-value-pairs, with the color variable name as keys, and 6-digit hex code as value. See ",(0,r.yg)("a",{parentName:"td",href:"/docs/theming#modifying-theme-colors"},"Theming")," for more info")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"externalStyleSheet"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")," or ",(0,r.yg)("inlineCode",{parentName:"td"},"string[]")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Either a URL to an external stylesheet or an array or URLs, which can be applied as themes within the UI")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"customCss"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Raw CSS that will be applied to the page. This can also be set from the UI. Please minify it first.")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"hideComponents"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"A list of key page components (header, footer, search, settings, etc) that are present by default, but can be removed using this option. See ",(0,r.yg)("a",{parentName:"td",href:"#appconfighideComponents-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"appConfig.hideComponents")))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"routingMode"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Can be either ",(0,r.yg)("inlineCode",{parentName:"td"},"hash")," or ",(0,r.yg)("inlineCode",{parentName:"td"},"history"),". Determines the URL format for sub-pages, hash mode will look like ",(0,r.yg)("inlineCode",{parentName:"td"},"/#/home")," whereas with history mode available you have nice clean URLs, like ",(0,r.yg)("inlineCode",{parentName:"td"},"/home"),". For more info, see the ",(0,r.yg)("a",{parentName:"td",href:"https://router.vuejs.org/guide/essentials/history-mode.html#example-server-configurations"},"Vue docs"),". If you're hosting Dashy with a custom BASE_URL, you will find that a bit of extra server config is necessary to get history mode working, so here you may want to instead use ",(0,r.yg)("inlineCode",{parentName:"td"},"hash")," mode.Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"history"),".")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"enableMultiTasking"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to true, will keep apps open in the background when in the workspace view. Useful for quickly switching between multiple sites, and preserving their state, but comes at the cost of performance.")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"workspaceLandingUrl"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The URL or an app, service or website to launch when the workspace view is opened, before another service has been launched")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"preventWriteToDisk"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),", users will be prevented from saving config changes to disk through the UI")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"preventLocalSave"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),", users will be prevented from applying config changes to local storage")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"disableConfiguration"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to true, no users will be able to view or edit the config through the UI")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"disableConfigurationForNonAdmin"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to true, only admin users will be able to view or edit the config through the UI. disableConfiguration must not be set to true.")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"widgetsAlwaysUseProxy"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),", requests made by widgets will always be proxied, same as setting ",(0,r.yg)("inlineCode",{parentName:"td"},"useProxy: true")," on each widget. Note that this may break some widgets.")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"showSplashScreen"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),", a loading screen will be shown. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"),".")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"enableErrorReporting"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Enable reporting of unexpected errors and crashes. This is off by default, and ",(0,r.yg)("strong",{parentName:"td"},"no data will ever be captured unless you explicitly enable it"),". Turning on error reporting helps previously unknown bugs get discovered and fixed. Dashy uses ",(0,r.yg)("a",{parentName:"td",href:"https://github.com/getsentry/sentry"},"Sentry")," for error reporting. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"),".")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"sentryDsn"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If you need to monitor errors in your instance, then you can use Sentry to collect and process bug reports. Sentry can be self-hosted, or used as SaaS, once your instance is setup, then all you need to do is pass in the DSN here, and enable error reporting. You can learn more on the ",(0,r.yg)("a",{parentName:"td",href:"https://docs.sentry.io/product/sentry-basics/dsn-explainer/"},"Sentry DSN Docs"),". Note that this will only ever be used if ",(0,r.yg)("inlineCode",{parentName:"td"},"enableErrorReporting")," is explicitly enabled.")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"disableSmartSort"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"For the most-used and last-used app sort functions to work, a basic open-count is stored in local storage. If you do not want this to happen, then disable smart sort here, but you wil no longer be able to use these sort options. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"),".")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"disableUpdateChecks"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to true, Dashy will not check for updates. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"),".")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"enableServiceWorker"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Service workers cache web applications to improve load times and offer basic offline functionality, and are enabled by default in Dashy. The service worker can sometimes cause older content to be cached, requiring the app to be hard-refreshed. If you do not want SW functionality, or are having issues with caching, set this property to ",(0,r.yg)("inlineCode",{parentName:"td"},"false")," to disable all service workers.")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"disableContextMenu"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),", the custom right-click context menu will be disabled. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"),".")))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"appconfigauth-optional"},(0,r.yg)("inlineCode",{parentName:"h2"},"appConfig.auth")," ",(0,r.yg)("em",{parentName:"h2"},"(optional)")),(0,r.yg)("blockquote",null,(0,r.yg)("p",{parentName:"blockquote"},"[!NOTE]","\nSince the auth is initiated in the main app entry point (for security), a rebuild is required to apply changes to the auth configuration.\nYou can trigger a rebuild through the UI, under Config --\x3e Rebuild, or by running ",(0,r.yg)("inlineCode",{parentName:"p"},"yarn build")," in the root directory.")),(0,r.yg)("blockquote",null,(0,r.yg)("p",{parentName:"blockquote"},"[!WARNING]","\nBuilt-in auth should ",(0,r.yg)("strong",{parentName:"p"},"not be used")," for security-critical applications, or if your Dashy instance is publicly accessible.\nFor these, it is recommended to use an ",(0,r.yg)("a",{parentName:"p",href:"/docs/authentication#alternative-authentication-methods"},"alternate authentication method"),".")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"users"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"array")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"An array of objects containing usernames and hashed passwords. If this is not provided, then authentication will be off by default, and you will not need any credentials to access the app. See ",(0,r.yg)("a",{parentName:"td",href:"#appconfigauthusers-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"appConfig.auth.users")),". ",(0,r.yg)("br",null),(0,r.yg)("strong",{parentName:"td"},"Note")," this method of authentication is handled on the client side, so for security critical situations, it is recommended to use an ",(0,r.yg)("a",{parentName:"td",href:"/docs/authentication#alternative-authentication-methods"},"alternate authentication method"),".")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"enableKeycloak"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),", then authentication using Keycloak will be enabled. Note that you need to have an instance running, and have also configured ",(0,r.yg)("inlineCode",{parentName:"td"},"auth.keycloak"),". Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"keycloak"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Config options to point Dashy to your Keycloak server. Requires ",(0,r.yg)("inlineCode",{parentName:"td"},"enableKeycloak: true"),". See ",(0,r.yg)("a",{parentName:"td",href:"#appconfigauthkeycloak-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"auth.keycloak"))," for more info")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"enableHeaderAuth"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),", then authentication using HeaderAuth will be enabled. Note that you need to have your web server/reverse proxy running, and have also configured ",(0,r.yg)("inlineCode",{parentName:"td"},"auth.headerAuth"),". Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"headerAuth"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Config options to point Dashy to your headers for authentication. Requires ",(0,r.yg)("inlineCode",{parentName:"td"},"enableHeaderAuth: true"),". See ",(0,r.yg)("a",{parentName:"td",href:"#appconfigauthheaderauth-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"auth.headerAuth"))," for more info")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"enableOidc"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),", then authentication using OIDC will be enabled. Note that you need to have a configured OIDC server and configure it with ",(0,r.yg)("inlineCode",{parentName:"td"},"auth.oidc"),". Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"oidc"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Config options to point Dash to your OIDC configuration. Request ",(0,r.yg)("inlineCode",{parentName:"td"},"enableOidc: true"),". See ",(0,r.yg)("a",{parentName:"td",href:"#appconfigauthoidc-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"auth.oidc"))," for more info")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"enableGuestAccess"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"When set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),", an unauthenticated user will be able to access the dashboard, with read-only access, without having to login. Requires ",(0,r.yg)("inlineCode",{parentName:"td"},"auth.users")," to be configured. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"),".")))),(0,r.yg)("p",null,"For more info, see the ",(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"/docs/authentication"},"Authentication Docs"))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"appconfigauthusers-optional"},(0,r.yg)("inlineCode",{parentName:"h2"},"appConfig.auth.users")," ",(0,r.yg)("em",{parentName:"h2"},"(optional)")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"user"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"Username to log in with")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"hash"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"A SHA-256 hashed password")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"type"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The user type, either admin or normal")))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"appconfigauthkeycloak-optional"},(0,r.yg)("inlineCode",{parentName:"h2"},"appConfig.auth.keycloak")," ",(0,r.yg)("em",{parentName:"h2"},"(optional)")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"serverUrl"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"The URL (or URL/ IP + Port) where your keycloak server is running")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"realm"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"The name of the realm (must already be created) that you want to use")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"clientId"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"The Client ID of the client you created for use with Dashy")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"legacySupport"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If using Keycloak 17 or older, then set this to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"))))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"appconfigauthheaderauth-optional"},(0,r.yg)("inlineCode",{parentName:"h2"},"appConfig.auth.headerAuth")," ",(0,r.yg)("em",{parentName:"h2"},"(optional)")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"userHeader"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The Header name which contains username (default: REMOTE_USER). Case insensitive")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"proxyWhitelist"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"array")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"An array of Upstream proxy servers to expect authencticated requests from")))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"appconfigauthoidc-optional"},(0,r.yg)("inlineCode",{parentName:"h2"},"appConfig.auth.oidc")," ",(0,r.yg)("em",{parentName:"h2"},"(optional)")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"clientId"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"The client id registered in the OIDC server")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"endpoint"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"The URL of the OIDC server that should be used.")))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"appconfigwebsearch-optional"},(0,r.yg)("inlineCode",{parentName:"h2"},"appConfig.webSearch")," ",(0,r.yg)("em",{parentName:"h2"},"(optional)")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"disableWebSearch"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Web search is enabled by default, but can be disabled by setting this property to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"searchEngine"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Set the key name for your search engine. Can also use a custom engine by setting this property to ",(0,r.yg)("inlineCode",{parentName:"td"},"custom"),". Currently supported: ",(0,r.yg)("inlineCode",{parentName:"td"},"duckduckgo"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"google"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"whoogle"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"qwant"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"startpage"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"searx-bar")," and ",(0,r.yg)("inlineCode",{parentName:"td"},"searx-info"),". Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"duckduckgo"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"customSearchEngine"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"You can also use a custom search engine, or your own self-hosted instance. This requires ",(0,r.yg)("inlineCode",{parentName:"td"},"searchEngine: custom")," to be set. Then add the URL of your service, with GET query string included here")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"openingMethod"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Set your preferred opening method for search results: ",(0,r.yg)("inlineCode",{parentName:"td"},"newtab"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"sametab"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"workspace"),". Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"newtab"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"searchBangs"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"A key-value-pair set of custom search ",(0,r.yg)("em",{parentName:"td"},"bangs")," for redirecting query to a specific app or search engine. The key of each should be the bang you will type (typically starting with ",(0,r.yg)("inlineCode",{parentName:"td"},"/"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"!")," or ",(0,r.yg)("inlineCode",{parentName:"td"},":"),"), and value is the destination, either as a search engine key (e.g. ",(0,r.yg)("inlineCode",{parentName:"td"},"reddit"),") or a URL with search parameters (e.g. ",(0,r.yg)("inlineCode",{parentName:"td"},"https://en.wikipedia.org/w/?search="),")")))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"appconfighidecomponents-optional"},(0,r.yg)("inlineCode",{parentName:"h2"},"appConfig.hideComponents")," ",(0,r.yg)("em",{parentName:"h2"},"(optional)")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"hideHeading"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),", the page title & sub-title will not be visible. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"hideNav"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),", the navigation menu will not be visible. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"hideSearch"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),", the search bar will not be visible. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"hideSettings"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),", the settings menu will be initially collapsed. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"hideFooter"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),", the footer will not be visible. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"))))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"section"},(0,r.yg)("inlineCode",{parentName:"h2"},"section")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"name"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"The title for the section")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"icon"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"An single icon to be displayed next to the title. See ",(0,r.yg)("a",{parentName:"td",href:"#sectionicon-and-sectionitemicon"},(0,r.yg)("inlineCode",{parentName:"a"},"section.icon")))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"items"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"array")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"An array of items to be displayed within the section. See ",(0,r.yg)("a",{parentName:"td",href:"#sectionitem"},(0,r.yg)("inlineCode",{parentName:"a"},"item")),". Sections must include either 1 or more items, or 1 or more widgets.")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"widgets"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"array")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"An array of widgets to be displayed within the section. See ",(0,r.yg)("a",{parentName:"td",href:"#sectionwidget-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"widget")))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"displayData"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Meta-data to optionally override display settings for a given section. See ",(0,r.yg)("a",{parentName:"td",href:"#sectiondisplaydata-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"displayData")))))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"sectionitem"},(0,r.yg)("inlineCode",{parentName:"h2"},"section.item")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"title"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"The text to display/ title of a given item. Max length ",(0,r.yg)("inlineCode",{parentName:"td"},"18"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"description"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Additional info about an item, which is shown in the tooltip on hover, or visible on large tiles")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"url"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"The URL / location of web address for when the item is clicked")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"icon"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The icon for a given item. Can be a font-awesome icon, favicon, remote URL or local URL. See ",(0,r.yg)("a",{parentName:"td",href:"#sectionicon-and-sectionitemicon"},(0,r.yg)("inlineCode",{parentName:"a"},"item.icon")))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"target"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The opening method for when the item is clicked, either ",(0,r.yg)("inlineCode",{parentName:"td"},"newtab"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"sametab"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"modal"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"workspace"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"clipboard"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"top")," or ",(0,r.yg)("inlineCode",{parentName:"td"},"parent"),". Where ",(0,r.yg)("inlineCode",{parentName:"td"},"newtab")," will open the link in a new tab, ",(0,r.yg)("inlineCode",{parentName:"td"},"sametab")," will open it in the current tab, and ",(0,r.yg)("inlineCode",{parentName:"td"},"modal")," will open a pop-up modal, ",(0,r.yg)("inlineCode",{parentName:"td"},"workspace")," will open in the Workspace view and ",(0,r.yg)("inlineCode",{parentName:"td"},"clipboard")," will copy the URL to system clipboard (but not launch app). Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"newtab"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"hotkey"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"number")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Give frequently opened applications a numeric hotkey, between ",(0,r.yg)("inlineCode",{parentName:"td"},"0 - 9"),". You can then just press that key to launch that application.")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"tags"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string[]")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"A list of tags, which can be used for improved search")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"statusCheck"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"When set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),", Dashy will ping the URL associated with the current service, and display its status as a dot next to the item. The value here will override ",(0,r.yg)("inlineCode",{parentName:"td"},"appConfig.statusCheck")," so you can turn off or on checks for a given service. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"appConfig.statusCheck"),", falls back to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"statusCheckUrl"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If you've enabled ",(0,r.yg)("inlineCode",{parentName:"td"},"statusCheck"),", and want to use a different URL to what is defined under the item, then specify it here")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"statusCheckHeaders"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If you're endpoint requires any specific headers for the status checking, then define them here")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"statusCheckAllowInsecure"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"By default, any request to insecure content will be blocked. Setting this option to ",(0,r.yg)("inlineCode",{parentName:"td"},"true")," will disable the ",(0,r.yg)("inlineCode",{parentName:"td"},"rejectUnauthorized")," option, enabling you to ping non-HTTPS services for the current item. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"statusCheckAcceptCodes"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If your service's response code is anything other than 2xx, then you can opt to specify an alternative success code. E.g. if you expect your server to return 403, but still want the status indicator to be green, set this value to ",(0,r.yg)("inlineCode",{parentName:"td"},"403"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"statusCheckMaxRedirects"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"number")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If your service redirects to another page, and you would like status checks to follow redirects, then specify the maximum number of redirects here. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"0")," / will not follow redirects")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"color"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"An optional color for the text and font-awesome icon to be displayed in. Note that this will override the current theme and so may not display well")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"rel"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The value of the ",(0,r.yg)("inlineCode",{parentName:"td"},"rel")," attribute for the link. Useful for specifying the relationship between the target link/document and Dashy. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"noopener noreferrer"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"backgroundColor"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"An optional background fill color for the that given item. Again, this will override the current theme and so might not display well against the background")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"provider"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The name of the provider for a given service, useful for when including hosted apps. In some themes, this is visible under the item name")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"displayData"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Meta-data to optionally override display settings for a given item. See ",(0,r.yg)("a",{parentName:"td",href:"#itemdisplaydata-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"displayData")))))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"itemdisplaydata-optional"},(0,r.yg)("inlineCode",{parentName:"h2"},"item.displayData")," ",(0,r.yg)("em",{parentName:"h2"},"(optional)")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"hideForUsers"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string[]")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Current item will be visible to all users, except for those specified in this list")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"showForUsers"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string[]")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Current item will be hidden from all users, except for those specified in this list")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"hideForGuests"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Current item will be visible for logged in users, but not for guests (see ",(0,r.yg)("inlineCode",{parentName:"td"},"appConfig.enableGuestAccess"),"). Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"hideForKeycloakUsers"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Current item will be visible to all keycloak users, except for those configured via these groups and roles. See ",(0,r.yg)("inlineCode",{parentName:"td"},"hideForKeycloakUsers"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"showForKeycloakUsers"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Current item will be hidden from all keycloak users, except for those configured via these groups and roles. See ",(0,r.yg)("inlineCode",{parentName:"td"},"showForKeycloakUsers"))))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"sectionwidgets-optional"},(0,r.yg)("inlineCode",{parentName:"h2"},"section.widgets")," ",(0,r.yg)("em",{parentName:"h2"},"(optional)")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"type"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"The widget type. See ",(0,r.yg)("a",{parentName:"td",href:"/docs/widgets"},"Widget Docs")," for full list of supported widgets")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"options"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Some widgets accept either optional or required additional options. Again, see the ",(0,r.yg)("a",{parentName:"td",href:"/docs/widgets"},"Widget Docs")," for full list of options")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"updateInterval"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"number")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"You can keep a widget constantly updated by specifying an update interval, in seconds. See ",(0,r.yg)("a",{parentName:"td",href:"/docs/widgets#continuous-updates"},"Continuous Updates Docs")," for more info")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"useProxy"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Some widgets make API requests to services that are not CORS-enabled. For these instances, you will need to route requests through a proxy, Dashy has a built in CORS-proxy, which you can use by setting this option to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),". Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"),". See the ",(0,r.yg)("a",{parentName:"td",href:"/docs/widgets#proxying-requests"},"Proxying Requests Docs")," for more info")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"timeout"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"number")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Request timeout in milliseconds, defaults to \xbd a second (",(0,r.yg)("inlineCode",{parentName:"td"},"500"),")")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"ignoreErrors"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Prevent an error message being displayed, if a network request or something else fails. Useful for false-positives")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"label"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Add custom label to a given widget. Useful for identification, if there are multiple of the same type of widget in a single section")))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"sectiondisplaydata-optional"},(0,r.yg)("inlineCode",{parentName:"h2"},"section.displayData")," ",(0,r.yg)("em",{parentName:"h2"},"(optional)")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"sortBy"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The sort order for items within the current section. By default items are displayed in the order in which they are listed in within the config. The following sort options are supported: ",(0,r.yg)("inlineCode",{parentName:"td"},"most-used")," (most opened apps first), ",(0,r.yg)("inlineCode",{parentName:"td"},"last-used")," (the most recently used apps), ",(0,r.yg)("inlineCode",{parentName:"td"},"alphabetical"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"reverse-alphabetical"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"random")," and ",(0,r.yg)("inlineCode",{parentName:"td"},"default"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"collapsed"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If true, the section will be collapsed initially, and will need to be clicked to open. Useful for less regularly used, or very long sections. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"cutToHeight"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"By default, sections will fill available space. Set this option to true to match section height with content height")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"rows"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"number")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Height of the section, specified as the number of rows it should span vertically, e.g. ",(0,r.yg)("inlineCode",{parentName:"td"},"2"),". Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"1"),". Max is ",(0,r.yg)("inlineCode",{parentName:"td"},"5"),".")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"cols"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"number")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Width of the section, specified as the number of columns the section should span horizontally, e.g. ",(0,r.yg)("inlineCode",{parentName:"td"},"2"),". Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"1"),". Max is ",(0,r.yg)("inlineCode",{parentName:"td"},"5"),".")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"itemSize"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Specify the size for items within this group, either ",(0,r.yg)("inlineCode",{parentName:"td"},"small"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"medium")," or ",(0,r.yg)("inlineCode",{parentName:"td"},"large"),". Note that this will override any settings specified through the UI")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"color"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"A custom accent color for the section, as a hex code or HTML color (e.g. ",(0,r.yg)("inlineCode",{parentName:"td"},"#fff"),")")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"customStyles"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Custom CSS properties that should be applied to that section, e.g. ",(0,r.yg)("inlineCode",{parentName:"td"},"border: 2px dashed #ff0000;"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"sectionLayout"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Specify which CSS layout will be used to responsively place items. Can be either ",(0,r.yg)("inlineCode",{parentName:"td"},"auto")," (which uses flex layout), or ",(0,r.yg)("inlineCode",{parentName:"td"},"grid"),". If ",(0,r.yg)("inlineCode",{parentName:"td"},"grid")," is selected, then ",(0,r.yg)("inlineCode",{parentName:"td"},"itemCountX")," and ",(0,r.yg)("inlineCode",{parentName:"td"},"itemCountY")," may also be set. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"auto"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"itemCountX"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"number")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The number of items to display per row / horizontally. If not set, it will be calculated automatically based on available space. Can only be set if ",(0,r.yg)("inlineCode",{parentName:"td"},"sectionLayout")," is set to ",(0,r.yg)("inlineCode",{parentName:"td"},"grid"),". Must be a whole number between ",(0,r.yg)("inlineCode",{parentName:"td"},"1")," and ",(0,r.yg)("inlineCode",{parentName:"td"},"12"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"itemCountY"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"number")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The number of items to display per column / vertically. If not set, it will be calculated automatically based on available space. If ",(0,r.yg)("inlineCode",{parentName:"td"},"itemCountX")," is set, then ",(0,r.yg)("inlineCode",{parentName:"td"},"itemCountY")," can be calculated automatically. Can only be set if ",(0,r.yg)("inlineCode",{parentName:"td"},"sectionLayout")," is set to ",(0,r.yg)("inlineCode",{parentName:"td"},"grid"),". Must be a whole number between ",(0,r.yg)("inlineCode",{parentName:"td"},"1")," and ",(0,r.yg)("inlineCode",{parentName:"td"},"12"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"hideForUsers"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string[]")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Current section will be visible to all users, except for those specified in this list")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"showForUsers"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string[]")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Current section will be hidden from all users, except for those specified in this list")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"hideForGuests"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Current section will be visible for logged in users, but not for guests (see ",(0,r.yg)("inlineCode",{parentName:"td"},"appConfig.enableGuestAccess"),"). Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"hideForKeycloakUsers"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Current section will be visible to all keycloak users, except for those configured via these groups and roles. See ",(0,r.yg)("inlineCode",{parentName:"td"},"hideForKeycloakUsers"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"showForKeycloakUsers"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Current section will be hidden from all keycloak users, except for those configured via these groups and roles. See ",(0,r.yg)("inlineCode",{parentName:"td"},"showForKeycloakUsers"))))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"sectionicon-and-sectionitemicon"},(0,r.yg)("inlineCode",{parentName:"h2"},"section.icon")," and ",(0,r.yg)("inlineCode",{parentName:"h2"},"section.item.icon")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"icon"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The icon for a given item or section. ",(0,r.yg)("br",null),"See ",(0,r.yg)("a",{parentName:"td",href:"/docs/icons"},"Icon Docs")," for all available supported icon types, including: auto-fetched favicons, generative icons, emoji icons, home-lab service logos, font-awesome, simple-icons, material icons, and icons specified by URL")))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"sectiondisplaydatahideforkeycloakusers-sectiondisplaydatashowforkeycloakusers-itemdisplaydatahideforkeycloakusers-and-itemdisplaydatashowforkeycloakusers"},(0,r.yg)("inlineCode",{parentName:"h2"},"section.displayData.hideForKeycloakUsers"),", ",(0,r.yg)("inlineCode",{parentName:"h2"},"section.displayData.showForKeycloakUsers"),", ",(0,r.yg)("inlineCode",{parentName:"h2"},"item.displayData.hideForKeycloakUsers")," and ",(0,r.yg)("inlineCode",{parentName:"h2"},"item.displayData.showForKeycloakUsers")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"groups"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string[]")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Current Section or Item will be hidden or shown based on the user having any of the groups in this list")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"roles"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string[]")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Current Section or Item will be hidden or shown based on the user having any of the roles in this list")))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("hr",null),(0,r.yg)("h2",{id:"notes"},"Notes"),(0,r.yg)("h3",{id:"editing-config-through-the-ui"},"Editing Config through the UI"),(0,r.yg)("p",null,"Config can be modified directly through the UI, and then written to disk, or applied locally. This can be done wither with the raw config editor (introduced in V 0.6.5 / ",(0,r.yg)("a",{parentName:"p",href:"https://github.com/Lissy93/dashy/pull/3"},"#3"),"), or the interactive editor (introduced in V 1.8.9 / ",(0,r.yg)("a",{parentName:"p",href:"https://github.com/Lissy93/dashy/pull/298"},"#298"),")."),(0,r.yg)("p",{align:"center"},(0,r.yg)("a",{href:"https://ibb.co/CzkyMNb"},(0,r.yg)("b",null,"Interactive Editor"),(0,r.yg)("br",null),(0,r.yg)("img",{alt:"Interactive Editor demo",src:"https://user-images.githubusercontent.com/1862727/139543020-b0576d28-0830-476f-afc8-a815d4de6def.gif",width:"600"})),(0,r.yg)("br",null),(0,r.yg)("a",{href:"https://ibb.co/zRv542H"},(0,r.yg)("b",null,"JSON Editor"),(0,r.yg)("br",null),(0,r.yg)("img",{alt:"Config Editor demo",src:"https://raw.githubusercontent.com/Lissy93/dashy/master/docs/assets/config-editor-demo.gif",width:"600"}))),(0,r.yg)("h3",{id:"about-yaml"},"About YAML"),(0,r.yg)("p",null,"If you're new to YAML, it's pretty straight-forward. The format is exactly the same as that of JSON, but instead of using curly braces, structure is denoted using whitespace. This ",(0,r.yg)("a",{parentName:"p",href:"https://linuxhandbook.com/yaml-basics/"},"quick guide")," should get you up to speed in a few minutes, for more advanced topics take a look at this ",(0,r.yg)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/YAML"},"Wikipedia article"),"."),(0,r.yg)("h3",{id:"config-saving-methods"},"Config Saving Methods"),(0,r.yg)("p",null,"When updating the config through the JSON editor in the UI, you have two save options: ",(0,r.yg)("strong",{parentName:"p"},"Local")," or ",(0,r.yg)("strong",{parentName:"p"},"Write to Disk"),"."),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Changes saved locally will only be applied to the current user through the browser, and will not apply to other instances - you either need to use the cloud sync feature, or manually update the conf.yml file."),(0,r.yg)("li",{parentName:"ul"},"On the other-hand, if you choose to write changes to disk, then your main ",(0,r.yg)("inlineCode",{parentName:"li"},"conf.yml")," file will be updated, and changes will be applied to all users, and visible across all devices. For this functionality to work, you must be running Dashy with using the Docker container, or the Node server. A backup of your current configuration will also be saved in the same directory.")),(0,r.yg)("h3",{id:"preventing-changes"},"Preventing Changes"),(0,r.yg)("p",null,"If you have authentication set up, then any user who is not an admin (with ",(0,r.yg)("inlineCode",{parentName:"p"},"type: admin"),") will not be able to write changes to disk."),(0,r.yg)("p",null,"You can also prevent changes from any user being written to disk, using ",(0,r.yg)("inlineCode",{parentName:"p"},"preventWriteToDisk"),". Or prevent any changes from being saved locally in browser storage, using ",(0,r.yg)("inlineCode",{parentName:"p"},"preventLocalSave"),"."),(0,r.yg)("p",null,"To disable all UI config features, set ",(0,r.yg)("inlineCode",{parentName:"p"},"disableConfiguration"),". Alternatively you can disable UI config features for all non Admin users by setting ",(0,r.yg)("inlineCode",{parentName:"p"},"disableConfigurationForNonAdmin")," to true."),(0,r.yg)("h3",{id:"example"},"Example"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre",className:"language-yaml"},"---\npageInfo:\n title: Home Lab\nsections: # An array of sections\n- name: Section 1 - Getting Started\n items: # An array of items\n - title: GitHub\n description: Source code and documentation on GitHub\n icon: fab fa-github\n url: https://github.com/Lissy93/dashy\n - title: Issues\n description: View currently open issues, or raise a new one\n icon: fas fa-bug\n url: https://github.com/Lissy93/dashy/issues\n - title: Demo\n description: A live demo\n icon: far fa-rocket\n url: https://dashy-demo-1.netlify.app\n- name: Section 2 - Local Services\n items:\n - title: Firewall\n icon: favicon\n url: http://192.168.1.1/\n - title: Game Server\n icon: https://i.ibb.co/710B3Yc/space-invader-x256.png\n url: http://192.168.130.1/\n")),(0,r.yg)("p",null,"For more example config files, see: ",(0,r.yg)("a",{parentName:"p",href:"https://gist.github.com/Lissy93/000f712a5ce98f212817d20bc16bab10"},"this gist")),(0,r.yg)("p",null,"If you need any help, feel free to ",(0,r.yg)("a",{parentName:"p",href:"https://github.com/Lissy93/dashy/issues/new?assignees=Lissy93&labels=%F0%9F%A4%B7%E2%80%8D%E2%99%82%EF%B8%8F+Question&template=question.md&title=%5BQUESTION%5D"},"Raise an Issue")," or ",(0,r.yg)("a",{parentName:"p",href:"https://github.com/Lissy93/dashy/discussions"},"Start a Discussion")),(0,r.yg)("p",null,"Happy Configuring \ud83e\udd13\ud83d\udd27"),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))))}y.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4bdb0d83.db41030b.js b/assets/js/4bdb0d83.db41030b.js deleted file mode 100644 index 98529854..00000000 --- a/assets/js/4bdb0d83.db41030b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdashy=self.webpackChunkdashy||[]).push([[496],{5680:(e,t,a)=>{a.d(t,{xA:()=>p,yg:()=>N});var n=a(6540);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var g=n.createContext({}),d=function(e){var t=n.useContext(g),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},p=function(e){var t=d(e.components);return n.createElement(g.Provider,{value:t},e.children)},y="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},s=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,i=e.originalType,g=e.parentName,p=o(e,["components","mdxType","originalType","parentName"]),y=d(a),s=r,N=y["".concat(g,".").concat(s)]||y[s]||m[s]||i;return a?n.createElement(N,l(l({ref:t},p),{},{components:a})):n.createElement(N,l({ref:t},p))}));function N(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=a.length,l=new Array(i);l[0]=s;var o={};for(var g in t)hasOwnProperty.call(t,g)&&(o[g]=t[g]);o.originalType=e,o[y]="string"==typeof e?e:r,l[1]=o;for(var d=2;d{a.r(t),a.d(t,{contentTitle:()=>l,default:()=>y,frontMatter:()=>i,metadata:()=>o,toc:()=>g});var n=a(8168),r=(a(6540),a(5680));const i={},l="Configuring",o={unversionedId:"configuring",id:"configuring",isDocsHomePage:!1,title:"Configuring",description:"All app configuration is specified in /user-data/conf.yml which is in YAML Format format. If you're using Docker, this file can be passed in as a volume. Changes can either be made directly to this file, or done through the UI. From the UI you can also export, backup, reset, validate and download your configuration file.",source:"@site/docs/configuring.md",sourceDirName:".",slug:"/configuring",permalink:"/docs/configuring",editUrl:"https://github.com/Lissy93/dashy/edit/gh-pages/docs/docs/configuring.md",version:"current",frontMatter:{},sidebar:"dashySidebar",previous:{title:"Deployment",permalink:"/docs/deployment"},next:{title:"App Management",permalink:"/docs/management"}},g=[{value:"There are three ways to edit the config",id:"there-are-three-ways-to-edit-the-config",children:[]},{value:"Tips",id:"tips",children:[]},{value:"Contents",id:"contents",children:[]},{value:"Top-Level Fields",id:"top-level-fields",children:[]},{value:"PageInfo",id:"pageinfo",children:[]},{value:"pageInfo.navLinks (optional)",id:"pageinfonavlinks-optional",children:[]},{value:"pages[] (optional)",id:"pages-optional",children:[]},{value:"appConfig (optional)",id:"appconfig-optional",children:[]},{value:"appConfig.auth (optional)",id:"appconfigauth-optional",children:[]},{value:"appConfig.auth.users (optional)",id:"appconfigauthusers-optional",children:[]},{value:"appConfig.auth.keycloak (optional)",id:"appconfigauthkeycloak-optional",children:[]},{value:"appConfig.auth.headerAuth (optional)",id:"appconfigauthheaderauth-optional",children:[]},{value:"appConfig.webSearch (optional)",id:"appconfigwebsearch-optional",children:[]},{value:"appConfig.hideComponents (optional)",id:"appconfighidecomponents-optional",children:[]},{value:"section",id:"section",children:[]},{value:"section.item",id:"sectionitem",children:[]},{value:"item.displayData (optional)",id:"itemdisplaydata-optional",children:[]},{value:"section.widgets (optional)",id:"sectionwidgets-optional",children:[]},{value:"section.displayData (optional)",id:"sectiondisplaydata-optional",children:[]},{value:"section.icon and section.item.icon",id:"sectionicon-and-sectionitemicon",children:[]},{value:"section.displayData.hideForKeycloakUsers, section.displayData.showForKeycloakUsers, item.displayData.hideForKeycloakUsers and item.displayData.showForKeycloakUsers",id:"sectiondisplaydatahideforkeycloakusers-sectiondisplaydatashowforkeycloakusers-itemdisplaydatahideforkeycloakusers-and-itemdisplaydatashowforkeycloakusers",children:[]},{value:"Notes",id:"notes",children:[{value:"Editing Config through the UI",id:"editing-config-through-the-ui",children:[]},{value:"About YAML",id:"about-yaml",children:[]},{value:"Config Saving Methods",id:"config-saving-methods",children:[]},{value:"Preventing Changes",id:"preventing-changes",children:[]},{value:"Example",id:"example",children:[]}]}],d={toc:g},p="wrapper";function y(e){let{components:t,...a}=e;return(0,r.yg)(p,(0,n.A)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,r.yg)("h1",{id:"configuring"},"Configuring"),(0,r.yg)("p",null,"All app configuration is specified in ",(0,r.yg)("a",{parentName:"p",href:"https://github.com/Lissy93/dashy/blob/master/user-data/conf.yml"},(0,r.yg)("inlineCode",{parentName:"a"},"/user-data/conf.yml"))," which is in ",(0,r.yg)("a",{parentName:"p",href:"https://yaml.org/"},"YAML Format")," format. If you're using Docker, this file can be passed in as a volume. Changes can either be made directly to this file, or done ",(0,r.yg)("a",{parentName:"p",href:"#editing-config-through-the-ui"},"through the UI"),". From the UI you can also export, backup, reset, validate and download your configuration file."),(0,r.yg)("h2",{id:"there-are-three-ways-to-edit-the-config"},"There are three ways to edit the config"),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("strong",{parentName:"li"},"Directly in the YAML file")," ",(0,r.yg)("em",{parentName:"li"},"(5/5 reliability, 3/5 usability)"),(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Write changes directly to the conf.yml file, optionally using one of the templates provided. This can be done in your favorite editor and uploading to your server, or directly editing the file via SSH, but the easiest method would be to use ",(0,r.yg)("a",{parentName:"li",href:"https://github.com/coder/code-server"},"Code Server")))),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("strong",{parentName:"li"},"UI JSON Editor")," ",(0,r.yg)("em",{parentName:"li"},"(4/5 reliability, 4/5 usability)"),(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"From the UI, under the config menu there is a JSON editor, with built-in validation, documentation and advanced options"))),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("strong",{parentName:"li"},"UI Visual Editor")," ",(0,r.yg)("em",{parentName:"li"},"(3/5 reliability, 5/5 usability)"),(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"From the UI, enter the Interactive Edit Mode, then click any part of the page to edit. Changes are previewed live, and then saved to disk"))),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("strong",{parentName:"li"},"REST API")," ",(0,r.yg)("em",{parentName:"li"},"(Coming soon)"),(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},"Programmatically edit config either through the command line, using a script or a third-party application")))),(0,r.yg)("h2",{id:"tips"},"Tips"),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"You may find it helpful to look at some sample config files to get you started, a collection of which can be found ",(0,r.yg)("a",{parentName:"li",href:"https://gist.github.com/Lissy93/000f712a5ce98f212817d20bc16bab10"},"here")),(0,r.yg)("li",{parentName:"ul"},"You can check that your config file fits the schema, by running ",(0,r.yg)("inlineCode",{parentName:"li"},"yarn validate-config")),(0,r.yg)("li",{parentName:"ul"},"After modifying your config, the app needs to be recompiled, by running ",(0,r.yg)("inlineCode",{parentName:"li"},"yarn build")," - this happens automatically if you're using Docker"),(0,r.yg)("li",{parentName:"ul"},"It is recommended to keep a backup of your config file. You can download it under Config menu, or use the ",(0,r.yg)("a",{parentName:"li",href:"/docs/backup-restore"},"Cloud Backup")," feature."),(0,r.yg)("li",{parentName:"ul"},"You can make use of YAML features, like anchors, comments, multi-line strings, etc to reuse attributes and keep your config file readable"),(0,r.yg)("li",{parentName:"ul"},"Once you have finished configuring your dashboard, you can choose to ",(0,r.yg)("a",{parentName:"li",href:"#preventing-changes"},"disable UI config")," if you wish"),(0,r.yg)("li",{parentName:"ul"},"All fields are optional, unless otherwise stated.")),(0,r.yg)("p",null,"The following file provides a reference of all supported configuration options."),(0,r.yg)("h2",{id:"contents"},"Contents"),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#pageinfo"},(0,r.yg)("strong",{parentName:"a"},(0,r.yg)("inlineCode",{parentName:"strong"},"pageInfo")))," - Header text, footer, title, navigation, etc",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#pageinfonavlinks-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"navLinks"))," - Links to display in the navigation bar"))),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#pages-optional"},(0,r.yg)("strong",{parentName:"a"},(0,r.yg)("inlineCode",{parentName:"strong"},"pages")))," - List of additional config files, for multi-page dashboards"),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#appconfig-optional"},(0,r.yg)("strong",{parentName:"a"},(0,r.yg)("inlineCode",{parentName:"strong"},"appConfig")))," - Main application settings",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#appconfigwebsearch-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"webSearch"))," - Configure web search engine options"),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#appconfighidecomponents-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"hideComponents"))," - Show/ hide page components"),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#appconfigauth-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"auth"))," - Built-in authentication setup",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#appconfigauthusers-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"users"))," - List or users (for simple auth)"),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#appconfigauthkeycloak-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"keycloak"))," - Auth config for Keycloak"),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#appconfigauthheaderauth-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"headerAuth"))," - Auth config for HeaderAuth"))))),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#section"},(0,r.yg)("strong",{parentName:"a"},(0,r.yg)("inlineCode",{parentName:"strong"},"sections")))," - List of sections",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#sectiondisplaydata-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"displayData"))," - Section display settings",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#sectiondisplaydatahideforkeycloakusers-sectiondisplaydatashowforkeycloakusers-itemdisplaydatahideforkeycloakusers-and-itemdisplaydatashowforkeycloakusers"},(0,r.yg)("inlineCode",{parentName:"a"},"show/hideForKeycloakUsers"))," - Set user controls"))),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#sectionicon-and-sectionitemicon"},(0,r.yg)("inlineCode",{parentName:"a"},"icon"))," - Icon for a section"),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#sectionitem"},(0,r.yg)("inlineCode",{parentName:"a"},"items"))," - List of items",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#sectionicon-and-sectionitemicon"},(0,r.yg)("inlineCode",{parentName:"a"},"icon"))," - Icon for an item"),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#itemdisplaydata-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"displayData"))," - Item display settings",(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#sectiondisplaydatahideforkeycloakusers-sectiondisplaydatashowforkeycloakusers-itemdisplaydatahideforkeycloakusers-and-itemdisplaydatashowforkeycloakusers"},(0,r.yg)("inlineCode",{parentName:"a"},"show/hideForKeycloakUsers"))," - Set user controls"))))),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#sectionwidget-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"widgets"))," - List of widgets"))),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#notes"},(0,r.yg)("strong",{parentName:"a"},"Notes")),(0,r.yg)("ul",{parentName:"li"},(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#editing-config-through-the-ui"},"Editing Config through the UI")),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#about-yaml"},"About YAML")),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#config-saving-methods"},"Config Saving Methods")),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#preventing-changes"},"Preventing Changes")),(0,r.yg)("li",{parentName:"ul"},(0,r.yg)("a",{parentName:"li",href:"#example"},"Example"))))),(0,r.yg)("hr",null),(0,r.yg)("h2",{id:"top-level-fields"},"Top-Level Fields"),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"pageInfo"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"Basic meta data like title, description, nav bar links, footer text. See ",(0,r.yg)("a",{parentName:"td",href:"#pageinfo"},(0,r.yg)("inlineCode",{parentName:"a"},"pageInfo")))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"appConfig"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Settings related to how the app functions, including API keys and global styles. See ",(0,r.yg)("a",{parentName:"td",href:"#appconfig-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"appConfig")))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"sections"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"array")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"An array of sections, each containing an array of items, which will be displayed as links. See ",(0,r.yg)("a",{parentName:"td",href:"#section"},(0,r.yg)("inlineCode",{parentName:"a"},"section")))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"pages"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"array")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"An array additional config files, used for multi-page dashboards. See ",(0,r.yg)("a",{parentName:"td",href:"#pages-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"pages")))))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"pageinfo"},(0,r.yg)("inlineCode",{parentName:"h2"},"PageInfo")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"title"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"Your dashboard title, displayed in the header and browser tab")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"description"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Description of your dashboard, also displayed as a subtitle")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"navLinks"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"array")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Optional list of a maximum of 6 links, which will be displayed in the navigation bar. See ",(0,r.yg)("a",{parentName:"td",href:"#pageinfonavlinks-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"navLinks")))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"footerText"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Text to display in the footer (note that this will override the default footer content). This can also include HTML and inline CSS")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"logo"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The path to an image to display in the header (to the right of the title). This can be either local, where ",(0,r.yg)("inlineCode",{parentName:"td"},"/")," is the root of ",(0,r.yg)("inlineCode",{parentName:"td"},"./public"),", or any remote image, such as ",(0,r.yg)("inlineCode",{parentName:"td"},"https://i.ibb.co/yhbt6CY/dashy.png"),". It's recommended to scale your image down, so that it doesn't impact load times")))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"pageinfonavlinks-optional"},(0,r.yg)("inlineCode",{parentName:"h2"},"pageInfo.navLinks")," ",(0,r.yg)("em",{parentName:"h2"},"(optional)")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"title"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"The text to display on the link button")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"path"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"The URL to navigate to when clicked. Can be relative (e.g. ",(0,r.yg)("inlineCode",{parentName:"td"},"/about"),") or absolute (e.g. ",(0,r.yg)("inlineCode",{parentName:"td"},"https://example.com")," or ",(0,r.yg)("inlineCode",{parentName:"td"},"http://192.168.1.1"),")")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"target"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The opening method (external links only). Can be either ",(0,r.yg)("inlineCode",{parentName:"td"},"newtab"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"sametab"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"top")," or ",(0,r.yg)("inlineCode",{parentName:"td"},"parent"),". Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"newtab"))))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"pages-optional"},(0,r.yg)("inlineCode",{parentName:"h2"},"pages[]")," ",(0,r.yg)("em",{parentName:"h2"},"(optional)")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"name"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"A unique name for that page")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"path"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"The path (local or remote) to the config file to use.",(0,r.yg)("br",null),"For files located within ",(0,r.yg)("inlineCode",{parentName:"td"},"/public"),", you only need to specify filename, for externally hosted files you must include the full URL")))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"appconfig-optional"},(0,r.yg)("inlineCode",{parentName:"h2"},"appConfig")," ",(0,r.yg)("em",{parentName:"h2"},"(optional)")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"language"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The 2 (or 4-digit) ",(0,r.yg)("a",{parentName:"td",href:"https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes"},"ISO 639-1 code")," for your language, e.g. ",(0,r.yg)("inlineCode",{parentName:"td"},"en")," or ",(0,r.yg)("inlineCode",{parentName:"td"},"en-GB"),". This must be a language that the app has already been ",(0,r.yg)("a",{parentName:"td",href:"https://github.com/Lissy93/dashy/tree/master/src/assets/locales"},"translated")," into. If your language is unavailable, Dashy will fallback to English. By default Dashy will attempt to auto-detect your language, although this may not work on some privacy browsers.")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("del",{parentName:"td"},(0,r.yg)("strong",{parentName:"del"},(0,r.yg)("inlineCode",{parentName:"strong"},"startingView")))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"enum")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Which page to load by default, and on the base page or domain root. You can still switch to different views from within the UI. Can be either ",(0,r.yg)("inlineCode",{parentName:"td"},"default"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"minimal")," or ",(0,r.yg)("inlineCode",{parentName:"td"},"workspace"),". Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"default"),". NOTE: This has been replaced by an environmental variable: ",(0,r.yg)("inlineCode",{parentName:"td"},"VUE_APP_STARTING_VIEW")," in V3 onwards")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"defaultOpeningMethod"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"enum")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The default opening method for items, if no ",(0,r.yg)("inlineCode",{parentName:"td"},"target")," is specified for a given item. Can be either ",(0,r.yg)("inlineCode",{parentName:"td"},"newtab"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"sametab"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"modal"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"workspace"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"clipboard"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"top")," or ",(0,r.yg)("inlineCode",{parentName:"td"},"parent"),". Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"newtab"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"statusCheck"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"When set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),", Dashy will ping each of your services and display their status as a dot next to each item. This can be overridden by setting ",(0,r.yg)("inlineCode",{parentName:"td"},"statusCheck")," under each item. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"statusCheckInterval"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"number")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The number of seconds between checks. If set to ",(0,r.yg)("inlineCode",{parentName:"td"},"0")," then service will only be checked on initial page load, which is usually the desired functionality. If value is less than ",(0,r.yg)("inlineCode",{parentName:"td"},"10")," you may experience a hit in performance. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"0"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"webSearch"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Configuration options for the web search feature, set your default search engine, opening method or disable web search. See ",(0,r.yg)("a",{parentName:"td",href:"#appconfigwebsearch-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"webSearch")))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"backgroundImg"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Path to an optional full-screen app background image. This can be either remote (http) or local (relative to /app/public/item-icons/ inside the container). Note that this will slow down initial load")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"enableFontAwesome"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true")," font-awesome will be loaded, if set to ",(0,r.yg)("inlineCode",{parentName:"td"},"false")," they will not be. if left blank font-awesome will be enabled only if required by 1 or more icons")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"enableMaterialDesignIcons"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true")," mdi icons will be loaded, if set to ",(0,r.yg)("inlineCode",{parentName:"td"},"false")," they will not be. Where ",(0,r.yg)("inlineCode",{parentName:"td"},"true")," is enabled, if left blank material design icons will be enabled only if required by 1 or more icons")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"fontAwesomeKey"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If you have a font-awesome key, then you can use it here and make use of premium icons. It is a 10-digit alpha-numeric string from you're FA kit URL (e.g. ",(0,r.yg)("inlineCode",{parentName:"td"},"13014ae648"),")")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"faviconApi"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"enum")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Only applicable if you are using favicons for item icons. Specifies which service to use to resolve favicons. Set to ",(0,r.yg)("inlineCode",{parentName:"td"},"local")," to do this locally, without using an API. Services running locally will use this option always. Available options are: ",(0,r.yg)("inlineCode",{parentName:"td"},"local"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"faviconkit"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"iconhorse"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"google"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"clearbit"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"webmasterapi")," and ",(0,r.yg)("inlineCode",{parentName:"td"},"allesedv"),". Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"faviconkit"),". See ",(0,r.yg)("a",{parentName:"td",href:"/docs/icons#favicons"},"Icons")," for more info")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"auth"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"All settings relating to user authentication. See ",(0,r.yg)("a",{parentName:"td",href:"#appconfigauth-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"auth")))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"defaultIcon"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"An icon to be applied to any items, which don't already have an icon set. See ",(0,r.yg)("a",{parentName:"td",href:"/docs/icons#default-icon"},"Icon Docs")," for more info")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"layout"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"enum")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Layout for homepage, either ",(0,r.yg)("inlineCode",{parentName:"td"},"horizontal"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"vertical")," or ",(0,r.yg)("inlineCode",{parentName:"td"},"auto"),". Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"auto"),". This specifies the layout and direction of how sections are positioned on the home screen. This can also be modified and overridden from the UI.")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"iconSize"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"enum")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The size of link items / icons. Can be either ",(0,r.yg)("inlineCode",{parentName:"td"},"small"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"medium,")," or ",(0,r.yg)("inlineCode",{parentName:"td"},"large"),". Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"medium"),". This can also be set directly from the UI.")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"colCount"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"number")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The number of columns of sections displayed on the homepage, using the default view. Should be in integer between ",(0,r.yg)("inlineCode",{parentName:"td"},"1")," and ",(0,r.yg)("inlineCode",{parentName:"td"},"8"),". Note that by default this is applied responsively, based on current screen size, and specifying a value here will override this behavior, which may not be desirable.")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"theme"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The default theme for first load (you can change this later from the UI)")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"cssThemes"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string[]")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"An array of custom theme names which can be used in the theme switcher dropdown")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"customColors"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Enables you to apply a custom color palette to any given theme. Use the theme name (lowercase) as the key, for an object including key-value-pairs, with the color variable name as keys, and 6-digit hex code as value. See ",(0,r.yg)("a",{parentName:"td",href:"/docs/theming#modifying-theme-colors"},"Theming")," for more info")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"externalStyleSheet"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")," or ",(0,r.yg)("inlineCode",{parentName:"td"},"string[]")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Either a URL to an external stylesheet or an array or URLs, which can be applied as themes within the UI")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"customCss"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Raw CSS that will be applied to the page. This can also be set from the UI. Please minify it first.")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"hideComponents"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"A list of key page components (header, footer, search, settings, etc) that are present by default, but can be removed using this option. See ",(0,r.yg)("a",{parentName:"td",href:"#appconfighideComponents-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"appConfig.hideComponents")))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"routingMode"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Can be either ",(0,r.yg)("inlineCode",{parentName:"td"},"hash")," or ",(0,r.yg)("inlineCode",{parentName:"td"},"history"),". Determines the URL format for sub-pages, hash mode will look like ",(0,r.yg)("inlineCode",{parentName:"td"},"/#/home")," whereas with history mode available you have nice clean URLs, like ",(0,r.yg)("inlineCode",{parentName:"td"},"/home"),". For more info, see the ",(0,r.yg)("a",{parentName:"td",href:"https://router.vuejs.org/guide/essentials/history-mode.html#example-server-configurations"},"Vue docs"),". If you're hosting Dashy with a custom BASE_URL, you will find that a bit of extra server config is necessary to get history mode working, so here you may want to instead use ",(0,r.yg)("inlineCode",{parentName:"td"},"hash")," mode.Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"history"),".")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"enableMultiTasking"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to true, will keep apps open in the background when in the workspace view. Useful for quickly switching between multiple sites, and preserving their state, but comes at the cost of performance.")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"workspaceLandingUrl"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The URL or an app, service or website to launch when the workspace view is opened, before another service has been launched")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"preventWriteToDisk"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),", users will be prevented from saving config changes to disk through the UI")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"preventLocalSave"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),", users will be prevented from applying config changes to local storage")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"disableConfiguration"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to true, no users will be able to view or edit the config through the UI")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"disableConfigurationForNonAdmin"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to true, only admin users will be able to view or edit the config through the UI. disableConfiguration must not be set to true.")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"widgetsAlwaysUseProxy"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),", requests made by widgets will always be proxied, same as setting ",(0,r.yg)("inlineCode",{parentName:"td"},"useProxy: true")," on each widget. Note that this may break some widgets.")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"showSplashScreen"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),", a loading screen will be shown. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"),".")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"enableErrorReporting"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Enable reporting of unexpected errors and crashes. This is off by default, and ",(0,r.yg)("strong",{parentName:"td"},"no data will ever be captured unless you explicitly enable it"),". Turning on error reporting helps previously unknown bugs get discovered and fixed. Dashy uses ",(0,r.yg)("a",{parentName:"td",href:"https://github.com/getsentry/sentry"},"Sentry")," for error reporting. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"),".")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"sentryDsn"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If you need to monitor errors in your instance, then you can use Sentry to collect and process bug reports. Sentry can be self-hosted, or used as SaaS, once your instance is setup, then all you need to do is pass in the DSN here, and enable error reporting. You can learn more on the ",(0,r.yg)("a",{parentName:"td",href:"https://docs.sentry.io/product/sentry-basics/dsn-explainer/"},"Sentry DSN Docs"),". Note that this will only ever be used if ",(0,r.yg)("inlineCode",{parentName:"td"},"enableErrorReporting")," is explicitly enabled.")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"disableSmartSort"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"For the most-used and last-used app sort functions to work, a basic open-count is stored in local storage. If you do not want this to happen, then disable smart sort here, but you wil no longer be able to use these sort options. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"),".")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"disableUpdateChecks"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to true, Dashy will not check for updates. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"),".")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"enableServiceWorker"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Service workers cache web applications to improve load times and offer basic offline functionality, and are enabled by default in Dashy. The service worker can sometimes cause older content to be cached, requiring the app to be hard-refreshed. If you do not want SW functionality, or are having issues with caching, set this property to ",(0,r.yg)("inlineCode",{parentName:"td"},"false")," to disable all service workers.")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"disableContextMenu"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),", the custom right-click context menu will be disabled. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"),".")))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"appconfigauth-optional"},(0,r.yg)("inlineCode",{parentName:"h2"},"appConfig.auth")," ",(0,r.yg)("em",{parentName:"h2"},"(optional)")),(0,r.yg)("blockquote",null,(0,r.yg)("p",{parentName:"blockquote"},"[!NOTE]","\nSince the auth is initiated in the main app entry point (for security), a rebuild is required to apply changes to the auth configuration.\nYou can trigger a rebuild through the UI, under Config --\x3e Rebuild, or by running ",(0,r.yg)("inlineCode",{parentName:"p"},"yarn build")," in the root directory.")),(0,r.yg)("blockquote",null,(0,r.yg)("p",{parentName:"blockquote"},"[!WARNING]","\nBuilt-in auth should ",(0,r.yg)("strong",{parentName:"p"},"not be used")," for security-critical applications, or if your Dashy instance is publicly accessible.\nFor these, it is recommended to use an ",(0,r.yg)("a",{parentName:"p",href:"/docs/authentication#alternative-authentication-methods"},"alternate authentication method"),".")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"users"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"array")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"An array of objects containing usernames and hashed passwords. If this is not provided, then authentication will be off by default, and you will not need any credentials to access the app. See ",(0,r.yg)("a",{parentName:"td",href:"#appconfigauthusers-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"appConfig.auth.users")),". ",(0,r.yg)("br",null),(0,r.yg)("strong",{parentName:"td"},"Note")," this method of authentication is handled on the client side, so for security critical situations, it is recommended to use an ",(0,r.yg)("a",{parentName:"td",href:"/docs/authentication#alternative-authentication-methods"},"alternate authentication method"),".")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"enableKeycloak"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),", then authentication using Keycloak will be enabled. Note that you need to have an instance running, and have also configured ",(0,r.yg)("inlineCode",{parentName:"td"},"auth.keycloak"),". Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"keycloak"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Config options to point Dashy to your Keycloak server. Requires ",(0,r.yg)("inlineCode",{parentName:"td"},"enableKeycloak: true"),". See ",(0,r.yg)("a",{parentName:"td",href:"#appconfigauthkeycloak-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"auth.keycloak"))," for more info")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"enableHeaderAuth"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),", then authentication using HeaderAuth will be enabled. Note that you need to have your web server/reverse proxy running, and have also configured ",(0,r.yg)("inlineCode",{parentName:"td"},"auth.headerAuth"),". Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"headerAuth"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Config options to point Dashy to your headers for authentication. Requires ",(0,r.yg)("inlineCode",{parentName:"td"},"enableHeaderAuth: true"),". See ",(0,r.yg)("a",{parentName:"td",href:"#appconfigauthheaderauth-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"auth.headerAuth"))," for more info")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"enableGuestAccess"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"When set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),", an unauthenticated user will be able to access the dashboard, with read-only access, without having to login. Requires ",(0,r.yg)("inlineCode",{parentName:"td"},"auth.users")," to be configured. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"),".")))),(0,r.yg)("p",null,"For more info, see the ",(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"/docs/authentication"},"Authentication Docs"))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"appconfigauthusers-optional"},(0,r.yg)("inlineCode",{parentName:"h2"},"appConfig.auth.users")," ",(0,r.yg)("em",{parentName:"h2"},"(optional)")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"user"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"Username to log in with")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"hash"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"A SHA-256 hashed password")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"type"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The user type, either admin or normal")))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"appconfigauthkeycloak-optional"},(0,r.yg)("inlineCode",{parentName:"h2"},"appConfig.auth.keycloak")," ",(0,r.yg)("em",{parentName:"h2"},"(optional)")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"serverUrl"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"The URL (or URL/ IP + Port) where your keycloak server is running")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"realm"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"The name of the realm (must already be created) that you want to use")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"clientId"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"The Client ID of the client you created for use with Dashy")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"legacySupport"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If using Keycloak 17 or older, then set this to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"))))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"appconfigauthheaderauth-optional"},(0,r.yg)("inlineCode",{parentName:"h2"},"appConfig.auth.headerAuth")," ",(0,r.yg)("em",{parentName:"h2"},"(optional)")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"userHeader"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The Header name which contains username (default: REMOTE_USER). Case insensitive")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"proxyWhitelist"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"array")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"An array of Upstream proxy servers to expect authencticated requests from")))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"appconfigwebsearch-optional"},(0,r.yg)("inlineCode",{parentName:"h2"},"appConfig.webSearch")," ",(0,r.yg)("em",{parentName:"h2"},"(optional)")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"disableWebSearch"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Web search is enabled by default, but can be disabled by setting this property to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"searchEngine"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Set the key name for your search engine. Can also use a custom engine by setting this property to ",(0,r.yg)("inlineCode",{parentName:"td"},"custom"),". Currently supported: ",(0,r.yg)("inlineCode",{parentName:"td"},"duckduckgo"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"google"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"whoogle"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"qwant"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"startpage"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"searx-bar")," and ",(0,r.yg)("inlineCode",{parentName:"td"},"searx-info"),". Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"duckduckgo"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"customSearchEngine"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"You can also use a custom search engine, or your own self-hosted instance. This requires ",(0,r.yg)("inlineCode",{parentName:"td"},"searchEngine: custom")," to be set. Then add the URL of your service, with GET query string included here")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"openingMethod"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Set your preferred opening method for search results: ",(0,r.yg)("inlineCode",{parentName:"td"},"newtab"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"sametab"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"workspace"),". Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"newtab"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"searchBangs"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"A key-value-pair set of custom search ",(0,r.yg)("em",{parentName:"td"},"bangs")," for redirecting query to a specific app or search engine. The key of each should be the bang you will type (typically starting with ",(0,r.yg)("inlineCode",{parentName:"td"},"/"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"!")," or ",(0,r.yg)("inlineCode",{parentName:"td"},":"),"), and value is the destination, either as a search engine key (e.g. ",(0,r.yg)("inlineCode",{parentName:"td"},"reddit"),") or a URL with search parameters (e.g. ",(0,r.yg)("inlineCode",{parentName:"td"},"https://en.wikipedia.org/w/?search="),")")))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"appconfighidecomponents-optional"},(0,r.yg)("inlineCode",{parentName:"h2"},"appConfig.hideComponents")," ",(0,r.yg)("em",{parentName:"h2"},"(optional)")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"hideHeading"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),", the page title & sub-title will not be visible. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"hideNav"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),", the navigation menu will not be visible. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"hideSearch"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),", the search bar will not be visible. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"hideSettings"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),", the settings menu will be initially collapsed. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"hideFooter"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),", the footer will not be visible. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"))))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"section"},(0,r.yg)("inlineCode",{parentName:"h2"},"section")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"name"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"The title for the section")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"icon"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"An single icon to be displayed next to the title. See ",(0,r.yg)("a",{parentName:"td",href:"#sectionicon-and-sectionitemicon"},(0,r.yg)("inlineCode",{parentName:"a"},"section.icon")))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"items"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"array")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"An array of items to be displayed within the section. See ",(0,r.yg)("a",{parentName:"td",href:"#sectionitem"},(0,r.yg)("inlineCode",{parentName:"a"},"item")),". Sections must include either 1 or more items, or 1 or more widgets.")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"widgets"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"array")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"An array of widgets to be displayed within the section. See ",(0,r.yg)("a",{parentName:"td",href:"#sectionwidget-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"widget")))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"displayData"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Meta-data to optionally override display settings for a given section. See ",(0,r.yg)("a",{parentName:"td",href:"#sectiondisplaydata-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"displayData")))))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"sectionitem"},(0,r.yg)("inlineCode",{parentName:"h2"},"section.item")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"title"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"The text to display/ title of a given item. Max length ",(0,r.yg)("inlineCode",{parentName:"td"},"18"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"description"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Additional info about an item, which is shown in the tooltip on hover, or visible on large tiles")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"url"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"The URL / location of web address for when the item is clicked")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"icon"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The icon for a given item. Can be a font-awesome icon, favicon, remote URL or local URL. See ",(0,r.yg)("a",{parentName:"td",href:"#sectionicon-and-sectionitemicon"},(0,r.yg)("inlineCode",{parentName:"a"},"item.icon")))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"target"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The opening method for when the item is clicked, either ",(0,r.yg)("inlineCode",{parentName:"td"},"newtab"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"sametab"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"modal"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"workspace"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"clipboard"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"top")," or ",(0,r.yg)("inlineCode",{parentName:"td"},"parent"),". Where ",(0,r.yg)("inlineCode",{parentName:"td"},"newtab")," will open the link in a new tab, ",(0,r.yg)("inlineCode",{parentName:"td"},"sametab")," will open it in the current tab, and ",(0,r.yg)("inlineCode",{parentName:"td"},"modal")," will open a pop-up modal, ",(0,r.yg)("inlineCode",{parentName:"td"},"workspace")," will open in the Workspace view and ",(0,r.yg)("inlineCode",{parentName:"td"},"clipboard")," will copy the URL to system clipboard (but not launch app). Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"newtab"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"hotkey"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"number")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Give frequently opened applications a numeric hotkey, between ",(0,r.yg)("inlineCode",{parentName:"td"},"0 - 9"),". You can then just press that key to launch that application.")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"tags"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string[]")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"A list of tags, which can be used for improved search")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"statusCheck"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"When set to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),", Dashy will ping the URL associated with the current service, and display its status as a dot next to the item. The value here will override ",(0,r.yg)("inlineCode",{parentName:"td"},"appConfig.statusCheck")," so you can turn off or on checks for a given service. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"appConfig.statusCheck"),", falls back to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"statusCheckUrl"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If you've enabled ",(0,r.yg)("inlineCode",{parentName:"td"},"statusCheck"),", and want to use a different URL to what is defined under the item, then specify it here")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"statusCheckHeaders"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If you're endpoint requires any specific headers for the status checking, then define them here")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"statusCheckAllowInsecure"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"By default, any request to insecure content will be blocked. Setting this option to ",(0,r.yg)("inlineCode",{parentName:"td"},"true")," will disable the ",(0,r.yg)("inlineCode",{parentName:"td"},"rejectUnauthorized")," option, enabling you to ping non-HTTPS services for the current item. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"statusCheckAcceptCodes"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If your service's response code is anything other than 2xx, then you can opt to specify an alternative success code. E.g. if you expect your server to return 403, but still want the status indicator to be green, set this value to ",(0,r.yg)("inlineCode",{parentName:"td"},"403"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"statusCheckMaxRedirects"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"number")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If your service redirects to another page, and you would like status checks to follow redirects, then specify the maximum number of redirects here. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"0")," / will not follow redirects")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"color"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"An optional color for the text and font-awesome icon to be displayed in. Note that this will override the current theme and so may not display well")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"rel"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The value of the ",(0,r.yg)("inlineCode",{parentName:"td"},"rel")," attribute for the link. Useful for specifying the relationship between the target link/document and Dashy. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"noopener noreferrer"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"backgroundColor"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"An optional background fill color for the that given item. Again, this will override the current theme and so might not display well against the background")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"provider"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The name of the provider for a given service, useful for when including hosted apps. In some themes, this is visible under the item name")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"displayData"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Meta-data to optionally override display settings for a given item. See ",(0,r.yg)("a",{parentName:"td",href:"#itemdisplaydata-optional"},(0,r.yg)("inlineCode",{parentName:"a"},"displayData")))))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"itemdisplaydata-optional"},(0,r.yg)("inlineCode",{parentName:"h2"},"item.displayData")," ",(0,r.yg)("em",{parentName:"h2"},"(optional)")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"hideForUsers"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string[]")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Current item will be visible to all users, except for those specified in this list")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"showForUsers"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string[]")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Current item will be hidden from all users, except for those specified in this list")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"hideForGuests"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Current item will be visible for logged in users, but not for guests (see ",(0,r.yg)("inlineCode",{parentName:"td"},"appConfig.enableGuestAccess"),"). Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"hideForKeycloakUsers"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Current item will be visible to all keycloak users, except for those configured via these groups and roles. See ",(0,r.yg)("inlineCode",{parentName:"td"},"hideForKeycloakUsers"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"showForKeycloakUsers"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Current item will be hidden from all keycloak users, except for those configured via these groups and roles. See ",(0,r.yg)("inlineCode",{parentName:"td"},"showForKeycloakUsers"))))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"sectionwidgets-optional"},(0,r.yg)("inlineCode",{parentName:"h2"},"section.widgets")," ",(0,r.yg)("em",{parentName:"h2"},"(optional)")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"type"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},"Required"),(0,r.yg)("td",{parentName:"tr",align:null},"The widget type. See ",(0,r.yg)("a",{parentName:"td",href:"/docs/widgets"},"Widget Docs")," for full list of supported widgets")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"options"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Some widgets accept either optional or required additional options. Again, see the ",(0,r.yg)("a",{parentName:"td",href:"/docs/widgets"},"Widget Docs")," for full list of options")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"updateInterval"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"number")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"You can keep a widget constantly updated by specifying an update interval, in seconds. See ",(0,r.yg)("a",{parentName:"td",href:"/docs/widgets#continuous-updates"},"Continuous Updates Docs")," for more info")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"useProxy"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Some widgets make API requests to services that are not CORS-enabled. For these instances, you will need to route requests through a proxy, Dashy has a built in CORS-proxy, which you can use by setting this option to ",(0,r.yg)("inlineCode",{parentName:"td"},"true"),". Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"),". See the ",(0,r.yg)("a",{parentName:"td",href:"/docs/widgets#proxying-requests"},"Proxying Requests Docs")," for more info")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"timeout"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"number")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Request timeout in milliseconds, defaults to \xbd a second (",(0,r.yg)("inlineCode",{parentName:"td"},"500"),")")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"ignoreErrors"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Prevent an error message being displayed, if a network request or something else fails. Useful for false-positives")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"label"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Add custom label to a given widget. Useful for identification, if there are multiple of the same type of widget in a single section")))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"sectiondisplaydata-optional"},(0,r.yg)("inlineCode",{parentName:"h2"},"section.displayData")," ",(0,r.yg)("em",{parentName:"h2"},"(optional)")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"sortBy"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The sort order for items within the current section. By default items are displayed in the order in which they are listed in within the config. The following sort options are supported: ",(0,r.yg)("inlineCode",{parentName:"td"},"most-used")," (most opened apps first), ",(0,r.yg)("inlineCode",{parentName:"td"},"last-used")," (the most recently used apps), ",(0,r.yg)("inlineCode",{parentName:"td"},"alphabetical"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"reverse-alphabetical"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"random")," and ",(0,r.yg)("inlineCode",{parentName:"td"},"default"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"collapsed"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"If true, the section will be collapsed initially, and will need to be clicked to open. Useful for less regularly used, or very long sections. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"cutToHeight"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"By default, sections will fill available space. Set this option to true to match section height with content height")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"rows"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"number")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Height of the section, specified as the number of rows it should span vertically, e.g. ",(0,r.yg)("inlineCode",{parentName:"td"},"2"),". Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"1"),". Max is ",(0,r.yg)("inlineCode",{parentName:"td"},"5"),".")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"cols"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"number")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Width of the section, specified as the number of columns the section should span horizontally, e.g. ",(0,r.yg)("inlineCode",{parentName:"td"},"2"),". Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"1"),". Max is ",(0,r.yg)("inlineCode",{parentName:"td"},"5"),".")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"itemSize"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Specify the size for items within this group, either ",(0,r.yg)("inlineCode",{parentName:"td"},"small"),", ",(0,r.yg)("inlineCode",{parentName:"td"},"medium")," or ",(0,r.yg)("inlineCode",{parentName:"td"},"large"),". Note that this will override any settings specified through the UI")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"color"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"A custom accent color for the section, as a hex code or HTML color (e.g. ",(0,r.yg)("inlineCode",{parentName:"td"},"#fff"),")")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"customStyles"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Custom CSS properties that should be applied to that section, e.g. ",(0,r.yg)("inlineCode",{parentName:"td"},"border: 2px dashed #ff0000;"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"sectionLayout"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Specify which CSS layout will be used to responsively place items. Can be either ",(0,r.yg)("inlineCode",{parentName:"td"},"auto")," (which uses flex layout), or ",(0,r.yg)("inlineCode",{parentName:"td"},"grid"),". If ",(0,r.yg)("inlineCode",{parentName:"td"},"grid")," is selected, then ",(0,r.yg)("inlineCode",{parentName:"td"},"itemCountX")," and ",(0,r.yg)("inlineCode",{parentName:"td"},"itemCountY")," may also be set. Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"auto"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"itemCountX"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"number")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The number of items to display per row / horizontally. If not set, it will be calculated automatically based on available space. Can only be set if ",(0,r.yg)("inlineCode",{parentName:"td"},"sectionLayout")," is set to ",(0,r.yg)("inlineCode",{parentName:"td"},"grid"),". Must be a whole number between ",(0,r.yg)("inlineCode",{parentName:"td"},"1")," and ",(0,r.yg)("inlineCode",{parentName:"td"},"12"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"itemCountY"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"number")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The number of items to display per column / vertically. If not set, it will be calculated automatically based on available space. If ",(0,r.yg)("inlineCode",{parentName:"td"},"itemCountX")," is set, then ",(0,r.yg)("inlineCode",{parentName:"td"},"itemCountY")," can be calculated automatically. Can only be set if ",(0,r.yg)("inlineCode",{parentName:"td"},"sectionLayout")," is set to ",(0,r.yg)("inlineCode",{parentName:"td"},"grid"),". Must be a whole number between ",(0,r.yg)("inlineCode",{parentName:"td"},"1")," and ",(0,r.yg)("inlineCode",{parentName:"td"},"12"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"hideForUsers"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string[]")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Current section will be visible to all users, except for those specified in this list")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"showForUsers"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string[]")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Current section will be hidden from all users, except for those specified in this list")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"hideForGuests"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"boolean")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Current section will be visible for logged in users, but not for guests (see ",(0,r.yg)("inlineCode",{parentName:"td"},"appConfig.enableGuestAccess"),"). Defaults to ",(0,r.yg)("inlineCode",{parentName:"td"},"false"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"hideForKeycloakUsers"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Current section will be visible to all keycloak users, except for those configured via these groups and roles. See ",(0,r.yg)("inlineCode",{parentName:"td"},"hideForKeycloakUsers"))),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"showForKeycloakUsers"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"object")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Current section will be hidden from all keycloak users, except for those configured via these groups and roles. See ",(0,r.yg)("inlineCode",{parentName:"td"},"showForKeycloakUsers"))))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"sectionicon-and-sectionitemicon"},(0,r.yg)("inlineCode",{parentName:"h2"},"section.icon")," and ",(0,r.yg)("inlineCode",{parentName:"h2"},"section.item.icon")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"icon"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"The icon for a given item or section. ",(0,r.yg)("br",null),"See ",(0,r.yg)("a",{parentName:"td",href:"/docs/icons"},"Icon Docs")," for all available supported icon types, including: auto-fetched favicons, generative icons, emoji icons, home-lab service logos, font-awesome, simple-icons, material icons, and icons specified by URL")))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("h2",{id:"sectiondisplaydatahideforkeycloakusers-sectiondisplaydatashowforkeycloakusers-itemdisplaydatahideforkeycloakusers-and-itemdisplaydatashowforkeycloakusers"},(0,r.yg)("inlineCode",{parentName:"h2"},"section.displayData.hideForKeycloakUsers"),", ",(0,r.yg)("inlineCode",{parentName:"h2"},"section.displayData.showForKeycloakUsers"),", ",(0,r.yg)("inlineCode",{parentName:"h2"},"item.displayData.hideForKeycloakUsers")," and ",(0,r.yg)("inlineCode",{parentName:"h2"},"item.displayData.showForKeycloakUsers")),(0,r.yg)("table",null,(0,r.yg)("thead",{parentName:"table"},(0,r.yg)("tr",{parentName:"thead"},(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Field")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Type")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Required")),(0,r.yg)("th",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"th"},"Description")))),(0,r.yg)("tbody",{parentName:"table"},(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"groups"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string[]")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Current Section or Item will be hidden or shown based on the user having any of the groups in this list")),(0,r.yg)("tr",{parentName:"tbody"},(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("strong",{parentName:"td"},(0,r.yg)("inlineCode",{parentName:"strong"},"roles"))),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("inlineCode",{parentName:"td"},"string[]")),(0,r.yg)("td",{parentName:"tr",align:null},(0,r.yg)("em",{parentName:"td"},"Optional")),(0,r.yg)("td",{parentName:"tr",align:null},"Current Section or Item will be hidden or shown based on the user having any of the roles in this list")))),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,r.yg)("hr",null),(0,r.yg)("h2",{id:"notes"},"Notes"),(0,r.yg)("h3",{id:"editing-config-through-the-ui"},"Editing Config through the UI"),(0,r.yg)("p",null,"Config can be modified directly through the UI, and then written to disk, or applied locally. This can be done wither with the raw config editor (introduced in V 0.6.5 / ",(0,r.yg)("a",{parentName:"p",href:"https://github.com/Lissy93/dashy/pull/3"},"#3"),"), or the interactive editor (introduced in V 1.8.9 / ",(0,r.yg)("a",{parentName:"p",href:"https://github.com/Lissy93/dashy/pull/298"},"#298"),")."),(0,r.yg)("p",{align:"center"},(0,r.yg)("a",{href:"https://ibb.co/CzkyMNb"},(0,r.yg)("b",null,"Interactive Editor"),(0,r.yg)("br",null),(0,r.yg)("img",{alt:"Interactive Editor demo",src:"https://user-images.githubusercontent.com/1862727/139543020-b0576d28-0830-476f-afc8-a815d4de6def.gif",width:"600"})),(0,r.yg)("br",null),(0,r.yg)("a",{href:"https://ibb.co/zRv542H"},(0,r.yg)("b",null,"JSON Editor"),(0,r.yg)("br",null),(0,r.yg)("img",{alt:"Config Editor demo",src:"https://raw.githubusercontent.com/Lissy93/dashy/master/docs/assets/config-editor-demo.gif",width:"600"}))),(0,r.yg)("h3",{id:"about-yaml"},"About YAML"),(0,r.yg)("p",null,"If you're new to YAML, it's pretty straight-forward. The format is exactly the same as that of JSON, but instead of using curly braces, structure is denoted using whitespace. This ",(0,r.yg)("a",{parentName:"p",href:"https://linuxhandbook.com/yaml-basics/"},"quick guide")," should get you up to speed in a few minutes, for more advanced topics take a look at this ",(0,r.yg)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/YAML"},"Wikipedia article"),"."),(0,r.yg)("h3",{id:"config-saving-methods"},"Config Saving Methods"),(0,r.yg)("p",null,"When updating the config through the JSON editor in the UI, you have two save options: ",(0,r.yg)("strong",{parentName:"p"},"Local")," or ",(0,r.yg)("strong",{parentName:"p"},"Write to Disk"),"."),(0,r.yg)("ul",null,(0,r.yg)("li",{parentName:"ul"},"Changes saved locally will only be applied to the current user through the browser, and will not apply to other instances - you either need to use the cloud sync feature, or manually update the conf.yml file."),(0,r.yg)("li",{parentName:"ul"},"On the other-hand, if you choose to write changes to disk, then your main ",(0,r.yg)("inlineCode",{parentName:"li"},"conf.yml")," file will be updated, and changes will be applied to all users, and visible across all devices. For this functionality to work, you must be running Dashy with using the Docker container, or the Node server. A backup of your current configuration will also be saved in the same directory.")),(0,r.yg)("h3",{id:"preventing-changes"},"Preventing Changes"),(0,r.yg)("p",null,"If you have authentication set up, then any user who is not an admin (with ",(0,r.yg)("inlineCode",{parentName:"p"},"type: admin"),") will not be able to write changes to disk."),(0,r.yg)("p",null,"You can also prevent changes from any user being written to disk, using ",(0,r.yg)("inlineCode",{parentName:"p"},"preventWriteToDisk"),". Or prevent any changes from being saved locally in browser storage, using ",(0,r.yg)("inlineCode",{parentName:"p"},"preventLocalSave"),"."),(0,r.yg)("p",null,"To disable all UI config features, set ",(0,r.yg)("inlineCode",{parentName:"p"},"disableConfiguration"),". Alternatively you can disable UI config features for all non Admin users by setting ",(0,r.yg)("inlineCode",{parentName:"p"},"disableConfigurationForNonAdmin")," to true."),(0,r.yg)("h3",{id:"example"},"Example"),(0,r.yg)("pre",null,(0,r.yg)("code",{parentName:"pre",className:"language-yaml"},"---\npageInfo:\n title: Home Lab\nsections: # An array of sections\n- name: Section 1 - Getting Started\n items: # An array of items\n - title: GitHub\n description: Source code and documentation on GitHub\n icon: fab fa-github\n url: https://github.com/Lissy93/dashy\n - title: Issues\n description: View currently open issues, or raise a new one\n icon: fas fa-bug\n url: https://github.com/Lissy93/dashy/issues\n - title: Demo\n description: A live demo\n icon: far fa-rocket\n url: https://dashy-demo-1.netlify.app\n- name: Section 2 - Local Services\n items:\n - title: Firewall\n icon: favicon\n url: http://192.168.1.1/\n - title: Game Server\n icon: https://i.ibb.co/710B3Yc/space-invader-x256.png\n url: http://192.168.130.1/\n")),(0,r.yg)("p",null,"For more example config files, see: ",(0,r.yg)("a",{parentName:"p",href:"https://gist.github.com/Lissy93/000f712a5ce98f212817d20bc16bab10"},"this gist")),(0,r.yg)("p",null,"If you need any help, feel free to ",(0,r.yg)("a",{parentName:"p",href:"https://github.com/Lissy93/dashy/issues/new?assignees=Lissy93&labels=%F0%9F%A4%B7%E2%80%8D%E2%99%82%EF%B8%8F+Question&template=question.md&title=%5BQUESTION%5D"},"Raise an Issue")," or ",(0,r.yg)("a",{parentName:"p",href:"https://github.com/Lissy93/dashy/discussions"},"Start a Discussion")),(0,r.yg)("p",null,"Happy Configuring \ud83e\udd13\ud83d\udd27"),(0,r.yg)("p",null,(0,r.yg)("strong",{parentName:"p"},(0,r.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))))}y.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/625b1ed7.539102d9.js b/assets/js/625b1ed7.539102d9.js new file mode 100644 index 00000000..ff899a14 --- /dev/null +++ b/assets/js/625b1ed7.539102d9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdashy=self.webpackChunkdashy||[]).push([[831],{5680:(e,a,t)=>{t.d(a,{xA:()=>u,yg:()=>y});var n=t(6540);function o(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function i(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function r(e){for(var a=1;a=0||(o[t]=e[t]);return o}(e,a);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var l=n.createContext({}),p=function(e){var a=n.useContext(l),t=a;return e&&(t="function"==typeof e?e(a):r(r({},a),e)),t},u=function(e){var a=p(e.components);return n.createElement(l.Provider,{value:a},e.children)},c="mdxType",h={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},d=n.forwardRef((function(e,a){var t=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(t),d=o,y=c["".concat(l,".").concat(d)]||c[d]||h[d]||i;return t?n.createElement(y,r(r({ref:a},u),{},{components:t})):n.createElement(y,r({ref:a},u))}));function y(e,a){var t=arguments,o=a&&a.mdxType;if("string"==typeof e||o){var i=t.length,r=new Array(i);r[0]=d;var s={};for(var l in a)hasOwnProperty.call(a,l)&&(s[l]=a[l]);s.originalType=e,s[c]="string"==typeof e?e:o,r[1]=s;for(var p=2;p{t.r(a),t.d(a,{contentTitle:()=>r,default:()=>c,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var n=t(8168),o=(t(6540),t(5680));const i={},r="Authentication",s={unversionedId:"authentication",id:"authentication",isDocsHomePage:!1,title:"Authentication",description:"- Basic Auth",source:"@site/docs/authentication.md",sourceDirName:".",slug:"/authentication",permalink:"/docs/authentication",editUrl:"https://github.com/Lissy93/dashy/edit/gh-pages/docs/docs/authentication.md",version:"current",frontMatter:{},sidebar:"dashySidebar",previous:{title:"Status Indicators",permalink:"/docs/status-indicators"},next:{title:"Keyboard Shortcuts",permalink:"/docs/searching"}},l=[{value:"Built-In Auth",id:"built-in-auth",children:[{value:"Setting Up Authentication",id:"setting-up-authentication",children:[]},{value:"Hash Password",id:"hash-password",children:[]},{value:"Logging In and Out",id:"logging-in-and-out",children:[]},{value:"Enabling Guest Access",id:"enabling-guest-access",children:[]},{value:"Granular Access",id:"granular-access",children:[]},{value:"Permissions",id:"permissions",children:[]},{value:"Using Environment Variables for Passwords",id:"using-environment-variables-for-passwords",children:[]},{value:"Adding HTTP Auth to Configuration",id:"adding-http-auth-to-configuration",children:[]},{value:"Security",id:"security",children:[]}]},{value:"HTTP Auth",id:"http-auth",children:[]},{value:"Keycloak",id:"keycloak",children:[{value:"1. Deploy Keycloak",id:"1-deploy-keycloak",children:[]},{value:"2. Setup Keycloak Users",id:"2-setup-keycloak-users",children:[]},{value:"3. Enable Keycloak in Dashy Config File",id:"3-enable-keycloak-in-dashy-config-file",children:[]},{value:"4. Add groups and roles (Optional)",id:"4-add-groups-and-roles-optional",children:[]},{value:"Troubleshooting Keycloak",id:"troubleshooting-keycloak",children:[]}]},{value:"OIDC",id:"oidc",children:[]},{value:"Alternative Authentication Methods",id:"alternative-authentication-methods",children:[{value:"Authentication Server",id:"authentication-server",children:[]},{value:"VPN",id:"vpn",children:[]},{value:"IP-Based Access",id:"ip-based-access",children:[]},{value:"Web Server Authentication",id:"web-server-authentication",children:[]},{value:"OAuth Services",id:"oauth-services",children:[]},{value:"Static Site Hosting Providers",id:"static-site-hosting-providers",children:[]}]}],p={toc:l},u="wrapper";function c(e){let{components:a,...t}=e;return(0,o.yg)(u,(0,n.A)({},p,t,{components:a,mdxType:"MDXLayout"}),(0,o.yg)("h1",{id:"authentication"},"Authentication"),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#built-in-auth"},"Basic Auth"),(0,o.yg)("ul",{parentName:"li"},(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#setting-up-authentication"},"Setting Up Authentication")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#hash-password"},"Hash Password")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#logging-in-and-out"},"Logging In and Out")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#enabling-guest-access"},"Guest Access")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#granular-access"},"Per-User Access")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#using-environment-variables-for-passwords"},"Using Environment Variables for Passwords")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#adding-http-auth-to-configuration"},"Adding HTTP Auth to Configuration")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#security"},"Security Considerations")))),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#http-auth"},"HTTP Auth")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#keycloak"},"Keycloak Auth"),(0,o.yg)("ul",{parentName:"li"},(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#1-deploy-keycloak"},"Deploying Keycloak")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#2-setup-keycloak-users"},"Setting up Keycloak")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#3-enable-keycloak-in-dashy-config-file"},"Configuring Dashy for Keycloak")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#troubleshooting-keycloak"},"Toubleshooting Keycloak")))),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#alternative-authentication-methods"},"Alternative Authentication Methods"),(0,o.yg)("ul",{parentName:"li"},(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#vpn"},"VPN")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#ip-based-access"},"IP-Based Access")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#web-server-authentication"},"Web Server Authentication")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#oauth-services"},"OAuth Services")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#static-site-hosting-providers"},"Auth on Cloud Hosting Services"))))),(0,o.yg)("blockquote",null,(0,o.yg)("p",{parentName:"blockquote"},"[!IMPORTANT]","\nDashy's built-in auth is not indented to protect a publicly hosted instance against unauthorized access. Instead you should use an auth provider compatible with your reverse proxy, or access Dashy via your VPN, or implement your own SSO logic. "),(0,o.yg)("p",{parentName:"blockquote"},"In cases where Dashy is only accessibly within your home network, and you just want to add a login page, then the built-in auth may be sufficient, but keep in mind that configuration can still be accessed.")),(0,o.yg)("h2",{id:"built-in-auth"},"Built-In Auth"),(0,o.yg)("p",null,"Dashy has a basic login page included, and frontend authentication. You can enable this by adding users to the ",(0,o.yg)("inlineCode",{parentName:"p"},"auth")," section under ",(0,o.yg)("inlineCode",{parentName:"p"},"appConfig")," in your ",(0,o.yg)("inlineCode",{parentName:"p"},"conf.yml"),". If this section is not specified, then no authentication will be required to access the app, and the homepage will resolve to your dashboard."),(0,o.yg)("blockquote",null,(0,o.yg)("p",{parentName:"blockquote"},"[!NOTE]","\nSince the auth is initiated in the main app entry point (for security), a rebuild is required to apply changes to the auth configuration.\nYou can trigger a rebuild through the UI, under Config --\x3e Rebuild, or by running ",(0,o.yg)("inlineCode",{parentName:"p"},"yarn build")," in the root directory.")),(0,o.yg)("h3",{id:"setting-up-authentication"},"Setting Up Authentication"),(0,o.yg)("p",null,"The ",(0,o.yg)("inlineCode",{parentName:"p"},"auth")," property takes an array of users. Each user needs to include a username, hash and optional user type (",(0,o.yg)("inlineCode",{parentName:"p"},"admin")," or ",(0,o.yg)("inlineCode",{parentName:"p"},"normal"),"). The hash property is a ",(0,o.yg)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/SHA-2"},"SHA-256 Hash")," of your desired password."),(0,o.yg)("p",null,"For example:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-yaml"},"appConfig:\n auth:\n users:\n - user: alicia\n hash: 4D1E58C90B3B94BCAD9848ECCACD6D2A8C9FBC5CA913304BBA5CDEAB36FEEFA3\n type: admin\n - user: bob\n hash: 5E884898DA28047151D0E56F8DC6292773603D0D6AABBDD62A11EF721D1542D8\n")),(0,o.yg)("h3",{id:"hash-password"},"Hash Password"),(0,o.yg)("p",null,"Dashy uses ",(0,o.yg)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Sha-256"},"SHA-256 Hash"),", a 64-character string, which you can generate using an online tool, such as ",(0,o.yg)("a",{parentName:"p",href:"https://passwordsgenerator.net/sha256-hash-generator/"},"this one")," or ",(0,o.yg)("a",{parentName:"p",href:"https://gchq.github.io/CyberChef/"},"CyberChef")," (which can be self-hosted/ ran locally)."),(0,o.yg)("p",null,"A hash is a one-way cryptographic function, meaning that it is easy to generate a hash for a given password, but very hard to determine the original password for a given hash. This means, that so long as your password is long, strong and unique, it is safe to store its hash in the clear. Having said that, you should never reuse passwords, hashes can be cracked by iterating over known password lists, generating a hash of each."),(0,o.yg)("h3",{id:"logging-in-and-out"},"Logging In and Out"),(0,o.yg)("p",null,"Once authentication is enabled, so long as there is no valid token in cookie storage, the application will redirect the user to the login page. When the user enters credentials in the login page, they will be checked, and if valid, then a token will be generated, and they can be redirected to the home page. If credentials are invalid, then an error message will be shown, and they will remain on the login page. Once in the application, to log out: the user can click the logout button (in the top-right), which will clear cookie storage, causing them to be redirected back to the login page."),(0,o.yg)("h3",{id:"enabling-guest-access"},"Enabling Guest Access"),(0,o.yg)("p",null,"With authentication set up, by default no access is allowed to your dashboard without first logging in with valid credentials. Guest mode can be enabled to allow for read-only access to a secured dashboard by any user, without the need to log in. A guest user cannot write any changes to the config file, but can apply modifications locally (stored in their browser). You can enable guest access, by setting ",(0,o.yg)("inlineCode",{parentName:"p"},"appConfig.auth.enableGuestAccess: true"),"."),(0,o.yg)("h3",{id:"granular-access"},"Granular Access"),(0,o.yg)("p",null,"You can use the following properties to make certain pages, sections or items only visible to some users, or hide pages, sections and items from guests."),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("inlineCode",{parentName:"li"},"hideForUsers")," - Page, Section or Item will be visible to all users, except for those specified in this list"),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("inlineCode",{parentName:"li"},"showForUsers")," - Page, Section or Item will be hidden from all users, except for those specified in this list"),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("inlineCode",{parentName:"li"},"hideForGuests")," - Page, Section or Item will be visible for logged in users, but not for guests")),(0,o.yg)("p",null,"For Example:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-yaml"},"pages:\n - name: Home Lab\n path: home-lab.yml\n displayData:\n showForUsers: [admin]\n - name: Intranet\n path: intranet.yml\n displayData:\n hideForGuests: true\n hideForUsers: [alicia, bob]\n")),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-yaml"},"- name: Code Analysis & Monitoring\n icon: fas fa-code\n displayData:\n cols: 2\n hideForUsers: [alicia, bob]\n items:\n ...\n")),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-yaml"},"- name: Deployment Pipelines\n icon: fas fa-rocket\n displayData:\n hideForGuests: true\n items:\n - title: Hide Me\n displayData:\n hideForUsers: [alicia, bob]\n")),(0,o.yg)("h3",{id:"permissions"},"Permissions"),(0,o.yg)("p",null,"Any user who is not an admin (with ",(0,o.yg)("inlineCode",{parentName:"p"},"type: admin"),") will not be able to write changes to disk."),(0,o.yg)("p",null,"You can also prevent any user from writing changes to disk, using ",(0,o.yg)("inlineCode",{parentName:"p"},"preventWriteToDisk"),". Or prevent any changes from being saved locally in browser storage, using ",(0,o.yg)("inlineCode",{parentName:"p"},"preventLocalSave"),". Both properties can be found under ",(0,o.yg)("a",{parentName:"p",href:"/docs/configuring#appconfig-optional"},(0,o.yg)("inlineCode",{parentName:"a"},"appConfig")),"."),(0,o.yg)("p",null,"To disable all UI config features, including View Config, set ",(0,o.yg)("inlineCode",{parentName:"p"},"disableConfiguration"),". Alternatively you can disable UI config features for all non admin users by setting ",(0,o.yg)("inlineCode",{parentName:"p"},"disableConfigurationForNonAdmin")," to true."),(0,o.yg)("h3",{id:"using-environment-variables-for-passwords"},"Using Environment Variables for Passwords"),(0,o.yg)("p",null,"If you don't want to hash your password, you can instead leave out the ",(0,o.yg)("inlineCode",{parentName:"p"},"hash")," attribute, and replace it with ",(0,o.yg)("inlineCode",{parentName:"p"},"password")," which should have the value of an environmental variable name you wish to use."),(0,o.yg)("p",null,"Note that env var must begin with ",(0,o.yg)("inlineCode",{parentName:"p"},"VUE_APP_"),", and you must set this variable before building the app."),(0,o.yg)("p",null,"For example:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-yaml"}," auth:\n users:\n - user: bob\n password: VUE_APP_BOB\n")),(0,o.yg)("p",null,"Just be sure to set ",(0,o.yg)("inlineCode",{parentName:"p"},"VUE_APP_BOB='my super secret password'")," before build-time."),(0,o.yg)("h3",{id:"adding-http-auth-to-configuration"},"Adding HTTP Auth to Configuration"),(0,o.yg)("p",null,"If you'd also like to prevent direct visit access to your configuration file, you can set the ",(0,o.yg)("inlineCode",{parentName:"p"},"ENABLE_HTTP_AUTH")," environmental variable."),(0,o.yg)("h3",{id:"security"},"Security"),(0,o.yg)("p",null,"With basic auth, all logic is happening on the client-side, which could mean a skilled user could manipulate the code to view parts of your configuration, including the hash. If the SHA-256 hash is of a common password, it may be possible to determine it, using a lookup table, in order to find the original password. Which can be used to manually generate the auth token, that can then be inserted into session storage, to become a valid logged in user. Therefore, you should always use a long, strong and unique password, and if you instance contains security-critical info and/ or is exposed directly to the internet, and alternative authentication method may be better. The purpose of the login page is merely to prevent immediate unauthorized access to your homepage."),(0,o.yg)("p",null,(0,o.yg)("strong",{parentName:"p"},(0,o.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,o.yg)("hr",null),(0,o.yg)("h2",{id:"http-auth"},"HTTP Auth"),(0,o.yg)("p",null,"If you'd like to protect all your config files from direct access, you can set the ",(0,o.yg)("inlineCode",{parentName:"p"},"BASIC_AUTH_USERNAME")," and ",(0,o.yg)("inlineCode",{parentName:"p"},"BASIC_AUTH_PASSWORD")," environmental variables. You'll then be prompted to enter these credentials when visiting Dashy."),(0,o.yg)("p",null,"Then, if you'd like your frontend to automatically log you in, without prompting you for credentials, then also specify ",(0,o.yg)("inlineCode",{parentName:"p"},"VUE_APP_BASIC_AUTH_USERNAME")," and ",(0,o.yg)("inlineCode",{parentName:"p"},"VUE_APP_BASIC_AUTH_PASSWORD"),". This is useful for when you're hosting Dashy on a private server, and you want to prevent unauthorized access to your config files, while still allowing the frontend to access them. Note that a rebuild is required for these changes to take effect."),(0,o.yg)("p",null,(0,o.yg)("strong",{parentName:"p"},(0,o.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,o.yg)("hr",null),(0,o.yg)("h2",{id:"keycloak"},"Keycloak"),(0,o.yg)("p",null,"Dashy also supports using a ",(0,o.yg)("a",{parentName:"p",href:"https://www.keycloak.org/"},"Keycloak")," authentication server. The setup for this is a bit more involved, but it gives you greater security overall, useful for if your instance is exposed to the internet."),(0,o.yg)("p",null,(0,o.yg)("a",{parentName:"p",href:"https://www.keycloak.org/about.html"},"Keycloak")," is a Java-based ",(0,o.yg)("a",{parentName:"p",href:"https://github.com/keycloak/keycloak"},"open source"),", high-performance, secure authentication system, supported by ",(0,o.yg)("a",{parentName:"p",href:"https://www.redhat.com/en"},"RedHat"),". It is easy to setup (",(0,o.yg)("a",{parentName:"p",href:"https://quay.io/repository/keycloak/keycloak"},"with Docker"),"), and enables you to secure multiple self-hosted applications with single-sign-on using standard protocols (OpenID Connect, OAuth 2.0, SAML 2.0 and social login). It's also very customizable, you can write or use custom ",(0,o.yg)("a",{parentName:"p",href:"https://wjw465150.gitbooks.io/keycloak-documentation/content/server_development/topics/themes.html"},"themes"),", ",(0,o.yg)("a",{parentName:"p",href:"https://www.keycloak.org/extensions.html"},"plugins"),", ",(0,o.yg)("a",{parentName:"p",href:"https://wjw465150.gitbooks.io/keycloak-documentation/content/server_admin/topics/authentication/password-policies.html"},"password policies")," and more.\nThe following guide will walk you through setting up Keycloak with Dashy. If you already have a Keycloak instance configured, then skip to Step 3."),(0,o.yg)("h3",{id:"1-deploy-keycloak"},"1. Deploy Keycloak"),(0,o.yg)("p",null,"First thing to do is to spin up a new instance of Keycloak. You will need ",(0,o.yg)("a",{parentName:"p",href:"https://docs.docker.com/engine/install/"},"Docker installed"),", and can then choose a tag, and pull the container from ",(0,o.yg)("a",{parentName:"p",href:"https://quay.io/repository/keycloak/keycloak"},"quay.io/keycloak/keycloak")),(0,o.yg)("p",null,"Use the following run command, replacing the attributes (default credentials, port and name), or incorporate this into your docker-compose file."),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-bash"},"docker run -d \\\n -p 8081:8080 \\\n --name auth-server \\\n -e KEYCLOAK_USER=admin \\\n -e KEYCLOAK_PASSWORD=admin \\\n quay.io/keycloak/keycloak:15.0.2\n")),(0,o.yg)("p",null,"If you need to pull from DockerHub, a non-official image is available ",(0,o.yg)("a",{parentName:"p",href:"https://registry.hub.docker.com/r/jboss/keycloak"},"here"),". Or if you would prefer not to use Docker, you can also directly install Keycloak from source, following ",(0,o.yg)("a",{parentName:"p",href:"https://www.keycloak.org/docs/latest/getting_started/index.html"},"this guide"),"."),(0,o.yg)("p",null,"You should now be able to access the Keycloak web interface, using the port specified above (e.g. ",(0,o.yg)("inlineCode",{parentName:"p"},"http://127.0.0.1:8081"),"), login with the default credentials, and when prompted create a new password."),(0,o.yg)("h3",{id:"2-setup-keycloak-users"},"2. Setup Keycloak Users"),(0,o.yg)("p",null,"Before we can use Keycloak, we must first set it up with some users. Keycloak uses Realms (similar to tenants) to create isolated groups of users. You must create a Realm before you will be able to add your first user."),(0,o.yg)("ol",null,(0,o.yg)("li",{parentName:"ol"},"Head over to the admin console"),(0,o.yg)("li",{parentName:"ol"},"In the top-left corner there is a dropdown called 'Master', hover over it and then click 'Add Realm'"),(0,o.yg)("li",{parentName:"ol"},"Give your realm a name, and hit 'Create'")),(0,o.yg)("p",null,"You can now create your first user."),(0,o.yg)("ol",null,(0,o.yg)("li",{parentName:"ol"},"In the left-hand menu, click 'Users', then 'Add User'"),(0,o.yg)("li",{parentName:"ol"},"Fill in the form, including username and hit 'Save'"),(0,o.yg)("li",{parentName:"ol"},"Under the 'Credentials' tab, give the new user an initial password. They will be prompted to change this after first login")),(0,o.yg)("p",null,"The last thing we need to do in the Keycloak admin console is to create a new client"),(0,o.yg)("ol",null,(0,o.yg)("li",{parentName:"ol"},"Within your new realm, navigate to 'Clients' on the left-hand side, then click 'Create' in the top-right"),(0,o.yg)("li",{parentName:"ol"},"Choose a 'Client ID', set 'Client Protocol' to 'openid-connect', and for 'Valid Redirect URIs' put a URL pattern to where you're hosting Dashy (if you're just testing locally, then * is fine), and do the same for the 'Web Origins' field"),(0,o.yg)("li",{parentName:"ol"},"Make note of your client-id, and click 'Save'")),(0,o.yg)("h3",{id:"3-enable-keycloak-in-dashy-config-file"},"3. Enable Keycloak in Dashy Config File"),(0,o.yg)("p",null,"Now that your Keycloak instance is up and running, all that's left to do is to configure Dashy to use it. Under ",(0,o.yg)("inlineCode",{parentName:"p"},"appConfig"),", set ",(0,o.yg)("inlineCode",{parentName:"p"},"auth.enableKeycloak: true"),", then fill in the details in ",(0,o.yg)("inlineCode",{parentName:"p"},"auth.keycloak"),", including: ",(0,o.yg)("inlineCode",{parentName:"p"},"serverUrl")," - the URL where your Keycloak instance is hosted, ",(0,o.yg)("inlineCode",{parentName:"p"},"realm")," - the name you gave your Realm, and ",(0,o.yg)("inlineCode",{parentName:"p"},"clientId")," - the Client ID you chose.\nFor example:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-yaml"},"appConfig:\n ...\n auth:\n enableKeycloak: true\n keycloak:\n serverUrl: 'http://localhost:8081'\n realm: 'alicia-homelab'\n clientId: 'dashy'\n")),(0,o.yg)("p",null,"Note that if you are using Keycloak V 17 or older, you will also need to set ",(0,o.yg)("inlineCode",{parentName:"p"},"legacySupport: true")," (also under ",(0,o.yg)("inlineCode",{parentName:"p"},"appConfig.auth.keycloak"),"). This is because the API endpoint was updated in later versions."),(0,o.yg)("p",null,"If you use Keycloak with an external Identity Provier, you can set the ",(0,o.yg)("inlineCode",{parentName:"p"},"idpHint: 'alias-of-kc-idp'")," option to allow the IdP Hint to be passed to Keycloak. This will cause Keycloak to skip its login page and redirect the user directly to the specified IdP's login page. Set to the value of the 'Alias' field of the desired IdP as defined in Keycloak under 'Identity Providers'."),(0,o.yg)("h3",{id:"4-add-groups-and-roles-optional"},"4. Add groups and roles (Optional)"),(0,o.yg)("p",null,"Keycloak allows you to assign users roles and groups. You can use these values to configure who can access various sections or items in Dashy.\nKeycloak server administration and configuration is a deep topic; please refer to the ",(0,o.yg)("a",{parentName:"p",href:"https://www.keycloak.org/docs/latest/server_admin/index.html#assigning-permissions-and-access-using-roles-and-groups"},"server admin guide")," to see details about creating and assigning roles and groups.\nOnce you have groups or roles assigned to users you can configure access under each section or item ",(0,o.yg)("inlineCode",{parentName:"p"},"displayData.showForKeycloakUser")," and ",(0,o.yg)("inlineCode",{parentName:"p"},"displayData.hideForKeycloakUser"),".\nBoth show and hide configurations accept a list of ",(0,o.yg)("inlineCode",{parentName:"p"},"groups")," and ",(0,o.yg)("inlineCode",{parentName:"p"},"roles")," that limit access. If a users data matches one or more items in these lists they will be allowed or excluded as defined."),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-yaml"},"sections:\n - name: DeveloperResources\n displayData:\n showForKeycloakUsers:\n roles: ['canViewDevResources']\n hideForKeycloakUsers:\n groups: ['ProductTeam']\n items:\n - title: Not Visible for developers\n displayData:\n hideForKeycloakUsers:\n groups: ['DevelopmentTeam']\n")),(0,o.yg)("p",null,"Depending on how you're hosting Dashy and Keycloak, you may also need to set some HTTP headers, to prevent a CORS error. This would typically be the ",(0,o.yg)("inlineCode",{parentName:"p"},"Access-Control-Allow-Origin [URL-of Dashy]")," on your Keycloak instance. See the ",(0,o.yg)("a",{parentName:"p",href:"https://github.com/Lissy93/dashy/blob/master/docs/management.md#setting-headers"},"Setting Headers")," guide in the management docs for more info."),(0,o.yg)("p",null,"Your app is now secured :) When you load Dashy, it will redirect to your Keycloak login page, and any user without valid credentials will be prevented from accessing your dashboard."),(0,o.yg)("p",null,"From within the Keycloak console, you can then configure things like time-outs, password policies, etc. You can also backup your full Keycloak config, and it is recommended to do this, along with your Dashy config. You can spin up both Dashy and Keycloak simultaneously and restore both applications configs using a ",(0,o.yg)("inlineCode",{parentName:"p"},"docker-compose.yml")," file, and this is recommended."),(0,o.yg)("hr",null),(0,o.yg)("h3",{id:"troubleshooting-keycloak"},"Troubleshooting Keycloak"),(0,o.yg)("p",null,"If you encounter issues with your Keycloak setup, follow these steps to troubleshoot and resolve common problems."),(0,o.yg)("ol",null,(0,o.yg)("li",{parentName:"ol"},(0,o.yg)("p",{parentName:"li"},'Client Authentication Issue\nProblem: Redirect loop, if client authentication is enabled.\nSolution: Switch off "client authentication" in "TC clients" -> "Advanced" settings.')),(0,o.yg)("li",{parentName:"ol"},(0,o.yg)("p",{parentName:"li"},'Double URL\nProblem: If you get redirected to "',(0,o.yg)("a",{parentName:"p",href:"https://dashy.my.domain/#iss=https://keycloak.my.domain/realms/my-realm%22"},'https://dashy.my.domain/#iss=https://keycloak.my.domain/realms/my-realm"'),'\nSolution: Make sure to turn on "Exclude Issuer From Authentication Response" in "TC clients" -> "Advanced" -> "OpenID Connect Compatibility Modes"')),(0,o.yg)("li",{parentName:"ol"},(0,o.yg)("p",{parentName:"li"},'Problems with mutiple Dashy Pages\nProblem: Refreshing or logging out of dashy results in an "invalid_redirect_uri" error.\nSolution: In "TC clients" -> "Access settings" -> "Root URL" ',(0,o.yg)("a",{parentName:"p",href:"https://dashy.my.domain/"},"https://dashy.my.domain/"),", valid redirect URIs must be /*"))),(0,o.yg)("hr",null),(0,o.yg)("h2",{id:"oidc"},"OIDC"),(0,o.yg)("p",null,"Dashy also supports using a general ",(0,o.yg)("a",{parentName:"p",href:"https://openid.net/connect/"},"OIDC compatible")," authentication server. In order to use it, the authentication section needs to be configured:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-yaml"},"appConfig:\n auth:\n enableOidc: true\n oidc:\n clientId: [registered client id]\n endpoint: [OIDC endpoint]\n")),(0,o.yg)("p",null,"Because Dashy is a SPA, a ",(0,o.yg)("a",{parentName:"p",href:"https://datatracker.ietf.org/doc/html/rfc6749#section-2.1"},"public client")," registration with PKCE is needed."),(0,o.yg)("p",null,"An example for Authelia is shared below, but other OIDC systems can be used:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-yaml"},"identity_providers:\n oidc:\n clients:\n - client_id: dashy\n client_name: dashy\n public: true\n authorization_policy: 'one_factor'\n require_pkce: true\n pkce_challenge_method: 'S256'\n redirect_uris:\n - https://dashy.local # should point to your dashy endpoint\n grant_types:\n - authorization_code\n scopes:\n - 'openid'\n - 'profile'\n - 'roles'\n - 'email'\n - 'groups'\n")),(0,o.yg)("p",null,"Groups and roles will be populated and available for controlling display similar to ",(0,o.yg)("a",{parentName:"p",href:"#Keycloak"},"Keycloak")," abvoe."),(0,o.yg)("hr",null),(0,o.yg)("h2",{id:"alternative-authentication-methods"},"Alternative Authentication Methods"),(0,o.yg)("p",null,"If you are self-hosting Dashy, and require secure authentication to prevent unauthorized access, then you can either use Keycloak, or one of the following options:"),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#authentication-server"},"Authentication Server")," - Put Dashy behind a self-hosted auth server"),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#vpn"},"VPN")," - Use a VPN to tunnel into the network where Dashy is running"),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#ip-based-access"},"IP-Based Access")," - Disallow access from all IP addresses, except your own"),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#web-server-authentication"},"Web Server Authentication")," - Enable user control within your web server or proxy"),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#oauth-services"},"OAuth Services")," - Implement a user management system using a cloud provider"),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#static-site-hosting-providers"},"Password Protection (for cloud providers)")," - Enable password-protection on your site")),(0,o.yg)("h3",{id:"authentication-server"},"Authentication Server"),(0,o.yg)("h4",{id:"authelia"},"Authelia"),(0,o.yg)("p",null,(0,o.yg)("a",{parentName:"p",href:"https://www.authelia.com/"},"Authelia")," is an open-source full-featured authentication server, which can be self-hosted and either on bare metal, in a Docker container or in a Kubernetes cluster. It allows for fine-grained access control rules based on IP, path, users etc, and supports 2FA, simple password access or bypass policies for your domains."),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("inlineCode",{parentName:"li"},"git clone https://github.com/authelia/authelia.git")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("inlineCode",{parentName:"li"},"cd authelia/examples/compose/lite")),(0,o.yg)("li",{parentName:"ul"},"Modify the ",(0,o.yg)("inlineCode",{parentName:"li"},"users_database.yml")," the default username and password is authelia"),(0,o.yg)("li",{parentName:"ul"},"Modify the ",(0,o.yg)("inlineCode",{parentName:"li"},"configuration.yml")," and ",(0,o.yg)("inlineCode",{parentName:"li"},"docker-compose.yml")," with your respective domains and secrets"),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("inlineCode",{parentName:"li"},"docker-compose up -d"))),(0,o.yg)("p",null,"For more information, see the ",(0,o.yg)("a",{parentName:"p",href:"https://www.authelia.com/docs/"},"Authelia docs")),(0,o.yg)("h3",{id:"vpn"},"VPN"),(0,o.yg)("p",null,"A catch-all solution to accessing services running from your home network remotely is to use a VPN. It means you do not need to worry about implementing complex authentication rules, or trusting the login implementation of individual applications. However it can be inconvenient to use on a day-to-day basis, and some public and corporate WiFi block VPN connections. Two popular VPN protocols are ",(0,o.yg)("a",{parentName:"p",href:"https://openvpn.net/"},"OpenVPN")," and ",(0,o.yg)("a",{parentName:"p",href:"https://www.wireguard.com/"},"WireGuard")),(0,o.yg)("h3",{id:"ip-based-access"},"IP-Based Access"),(0,o.yg)("p",null,"If you have a static IP or use a VPN to access your running services, then you can use conditional access to block access to Dashy from everyone except users of your pre-defined IP address. This feature is offered by most cloud providers, and supported by most web servers."),(0,o.yg)("h4",{id:"apache"},"Apache"),(0,o.yg)("p",null,"In Apache, this is configured in your ",(0,o.yg)("inlineCode",{parentName:"p"},".htaccess")," file in Dashy's root folder, and should look something like:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-text"},"Order Deny,Allow\nDeny from all\nAllow from [your-ip]\n")),(0,o.yg)("h4",{id:"nginx"},"NGINX"),(0,o.yg)("p",null,"In NGINX you can specify ",(0,o.yg)("a",{parentName:"p",href:"https://docs.nginx.com/nginx/admin-guide/security-controls/controlling-access-proxied-http/"},"control access")," rules for a given site in your ",(0,o.yg)("inlineCode",{parentName:"p"},"nginx.conf")," or hosts file. For example:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-text"},"server {\n listen 8080;\n server_name www.dashy.example.com;\n location / {\n root /path/to/dashy/;\n passenger_enabled on;\n allow [your-ip];\n deny all;\n }\n }\n")),(0,o.yg)("h4",{id:"caddy"},"Caddy"),(0,o.yg)("p",null,"In Caddy, ",(0,o.yg)("a",{parentName:"p",href:"https://caddyserver.com/docs/caddyfile/matchers"},"Request Matchers")," can be used to filter requests"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-text"},'dashy.site {\n @public_networks not remote_ip [your-ip]\n respond @public_networks "Access denied" 403\n}\n')),(0,o.yg)("h3",{id:"web-server-authentication"},"Web Server Authentication"),(0,o.yg)("p",null,"Most web servers make password protecting certain apps very easy. Note that you should also set up HTTPS and have a valid certificate in order for this to be secure."),(0,o.yg)("h4",{id:"apache-1"},"Apache"),(0,o.yg)("p",null,"First crate a ",(0,o.yg)("inlineCode",{parentName:"p"},".htaccess")," file in Dashy's route directory. Specify the auth type and path to where you want to store the password file (usually the same folder). For example:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-text"},'AuthType Basic\nAuthName "Please Sign into Dashy"\nAuthUserFile /path/dashy/.htpasswd\nrequire valid-user\n')),(0,o.yg)("p",null,"Then create a ",(0,o.yg)("inlineCode",{parentName:"p"},".htpasswd")," file in the same directory. List users and their hashed passwords here, with one user on each line, and a colon between username and password (e.g. ",(0,o.yg)("inlineCode",{parentName:"p"},"[username]:[hashed-password]"),"). You will need to generate an MD5 hash of your desired password, this can be done with an ",(0,o.yg)("a",{parentName:"p",href:"https://www.web2generators.com/apache-tools/htpasswd-generator"},"online tool"),". Your file will look something like:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-text"},"alicia:$apr1$jv0spemw$RzOX5/GgY69JMkgV6u16l0\n")),(0,o.yg)("h4",{id:"nginx-1"},"NGINX"),(0,o.yg)("p",null,"NGINX has an ",(0,o.yg)("a",{parentName:"p",href:"https://nginx.org/en/docs/http/ngx_http_auth_basic_module.html"},"authentication module")," which can be used to add passwords to given sites, and is fairly simple to set up. Similar to above, you will need to create a ",(0,o.yg)("inlineCode",{parentName:"p"},".htpasswd")," file. Then just enable auth and specify the path to that file, for example:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-text"},'location / {\n auth_basic "closed site";\n auth_basic_user_file conf/htpasswd;\n}\n')),(0,o.yg)("h4",{id:"caddy-1"},"Caddy"),(0,o.yg)("p",null,"Caddy has a ",(0,o.yg)("a",{parentName:"p",href:"https://caddyserver.com/docs/caddyfile/directives/basicauth"},"basic-auth")," directive, where you specify a username and hash. The password hash needs to be base-64 encoded, the ",(0,o.yg)("a",{parentName:"p",href:"https://caddyserver.com/docs/command-line#caddy-hash-password"},(0,o.yg)("inlineCode",{parentName:"a"},"caddy hash-password"))," command can help with this. For example:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-text"},"basicauth /secret/* {\n alicia JDJhJDEwJEVCNmdaNEg2Ti5iejRMYkF3MFZhZ3VtV3E1SzBWZEZ5Q3VWc0tzOEJwZE9TaFlZdEVkZDhX\n}\n")),(0,o.yg)("p",null,"For more info about implementing a single sign on for all your apps with Caddy, see ",(0,o.yg)("a",{parentName:"p",href:"https://joshstrange.com/securing-your-self-hosted-apps-with-single-signon/"},"this tutorial")),(0,o.yg)("h4",{id:"lighttpd"},"Lighttpd"),(0,o.yg)("p",null,"You can use the ",(0,o.yg)("a",{parentName:"p",href:"https://doc.lighttpd.net/lighttpd2/mod_auth.html"},"mod_auth")," module to secure your site with Lighttpd. Like with Apache, you need to first create a password file listing your usernames and hashed passwords, but in Lighttpd, it's usually called ",(0,o.yg)("inlineCode",{parentName:"p"},".lighttpdpassword"),"."),(0,o.yg)("p",null,"Then in your ",(0,o.yg)("inlineCode",{parentName:"p"},"lighttpd.conf")," file (usually in the ",(0,o.yg)("inlineCode",{parentName:"p"},"/etc/lighttpd/")," directory), load in the mod_auth module, and configure it's directives. For example:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-text"},'server.modules += ( "mod_auth" )\nauth.debug = 2\nauth.backend = "plain"\nauth.backend.plain.userfile = "/home/lighttpd/.lighttpdpassword"\n\n$HTTP["host"] == "dashy.my-domain.net" {\n server.document-root = "/home/lighttpd/dashy.my-domain.net/http"\n server.errorlog = "/var/log/lighttpd/dashy.my-domain.net/error.log"\n accesslog.filename = "/var/log/lighttpd/dashy.my-domain.net/access.log"\n auth.require = (\n "/docs/" => (\n "method" => "basic",\n "realm" => "Password protected area",\n "require" => "user=alicia"\n )\n )\n}\n')),(0,o.yg)("p",null,"Restart your web server for changes to take effect."),(0,o.yg)("h3",{id:"oauth-services"},"OAuth Services"),(0,o.yg)("p",null,"There are also authentication services, such as ",(0,o.yg)("a",{parentName:"p",href:"https://www.ory.sh/"},"Ory.sh"),", ",(0,o.yg)("a",{parentName:"p",href:"https://developer.okta.com/"},"Okta"),", ",(0,o.yg)("a",{parentName:"p",href:"https://auth0.com/"},"Auth0"),", ",(0,o.yg)("a",{parentName:"p",href:"https://firebase.google.com/docs/auth/"},"Firebase"),". Implementing one of these solutions would involve some changes to the ",(0,o.yg)("a",{parentName:"p",href:"https://github.com/Lissy93/dashy/blob/master/src/utils/Auth.js"},(0,o.yg)("inlineCode",{parentName:"a"},"Auth.js"))," file, but should be fairly straightforward."),(0,o.yg)("h3",{id:"static-site-hosting-providers"},"Static Site Hosting Providers"),(0,o.yg)("p",null,"If you are hosting Dashy on a cloud platform, you will probably find that it has built-in support for password protected access to web apps. For more info, see the relevant docs for your provider, for example: ",(0,o.yg)("a",{parentName:"p",href:"https://docs.netlify.com/visitor-access/password-protection/"},"Netlify Password Protection"),", ",(0,o.yg)("a",{parentName:"p",href:"https://www.cloudflare.com/teams/access/"},"Cloudflare Access"),", ",(0,o.yg)("a",{parentName:"p",href:"https://aws.amazon.com/cognito/"},"AWS Cognito"),", ",(0,o.yg)("a",{parentName:"p",href:"https://docs.microsoft.com/en-us/azure/app-service/scenario-secure-app-authentication-app-service"},"Azure Authentication")," and ",(0,o.yg)("a",{parentName:"p",href:"https://vercel.com/docs/platform/projects#password-protection"},"Vercel Password Protection"),"."),(0,o.yg)("p",null,(0,o.yg)("strong",{parentName:"p"},(0,o.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/625b1ed7.b95d042d.js b/assets/js/625b1ed7.b95d042d.js deleted file mode 100644 index 77268e03..00000000 --- a/assets/js/625b1ed7.b95d042d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdashy=self.webpackChunkdashy||[]).push([[831],{5680:(e,a,t)=>{t.d(a,{xA:()=>u,yg:()=>y});var n=t(6540);function o(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function i(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function r(e){for(var a=1;a=0||(o[t]=e[t]);return o}(e,a);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var l=n.createContext({}),p=function(e){var a=n.useContext(l),t=a;return e&&(t="function"==typeof e?e(a):r(r({},a),e)),t},u=function(e){var a=p(e.components);return n.createElement(l.Provider,{value:a},e.children)},c="mdxType",h={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},d=n.forwardRef((function(e,a){var t=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(t),d=o,y=c["".concat(l,".").concat(d)]||c[d]||h[d]||i;return t?n.createElement(y,r(r({ref:a},u),{},{components:t})):n.createElement(y,r({ref:a},u))}));function y(e,a){var t=arguments,o=a&&a.mdxType;if("string"==typeof e||o){var i=t.length,r=new Array(i);r[0]=d;var s={};for(var l in a)hasOwnProperty.call(a,l)&&(s[l]=a[l]);s.originalType=e,s[c]="string"==typeof e?e:o,r[1]=s;for(var p=2;p{t.r(a),t.d(a,{contentTitle:()=>r,default:()=>c,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var n=t(8168),o=(t(6540),t(5680));const i={},r="Authentication",s={unversionedId:"authentication",id:"authentication",isDocsHomePage:!1,title:"Authentication",description:"- Basic Auth",source:"@site/docs/authentication.md",sourceDirName:".",slug:"/authentication",permalink:"/docs/authentication",editUrl:"https://github.com/Lissy93/dashy/edit/gh-pages/docs/docs/authentication.md",version:"current",frontMatter:{},sidebar:"dashySidebar",previous:{title:"Status Indicators",permalink:"/docs/status-indicators"},next:{title:"Keyboard Shortcuts",permalink:"/docs/searching"}},l=[{value:"Built-In Auth",id:"built-in-auth",children:[{value:"Setting Up Authentication",id:"setting-up-authentication",children:[]},{value:"Hash Password",id:"hash-password",children:[]},{value:"Logging In and Out",id:"logging-in-and-out",children:[]},{value:"Enabling Guest Access",id:"enabling-guest-access",children:[]},{value:"Granular Access",id:"granular-access",children:[]},{value:"Permissions",id:"permissions",children:[]},{value:"Using Environment Variables for Passwords",id:"using-environment-variables-for-passwords",children:[]},{value:"Adding HTTP Auth to Configuration",id:"adding-http-auth-to-configuration",children:[]},{value:"Security",id:"security",children:[]}]},{value:"HTTP Auth",id:"http-auth",children:[]},{value:"Keycloak",id:"keycloak",children:[{value:"1. Deploy Keycloak",id:"1-deploy-keycloak",children:[]},{value:"2. Setup Keycloak Users",id:"2-setup-keycloak-users",children:[]},{value:"3. Enable Keycloak in Dashy Config File",id:"3-enable-keycloak-in-dashy-config-file",children:[]},{value:"4. Add groups and roles (Optional)",id:"4-add-groups-and-roles-optional",children:[]}]},{value:"Alternative Authentication Methods",id:"alternative-authentication-methods",children:[{value:"Authentication Server",id:"authentication-server",children:[]},{value:"VPN",id:"vpn",children:[]},{value:"IP-Based Access",id:"ip-based-access",children:[]},{value:"Web Server Authentication",id:"web-server-authentication",children:[]},{value:"OAuth Services",id:"oauth-services",children:[]},{value:"Static Site Hosting Providers",id:"static-site-hosting-providers",children:[]}]}],p={toc:l},u="wrapper";function c(e){let{components:a,...t}=e;return(0,o.yg)(u,(0,n.A)({},p,t,{components:a,mdxType:"MDXLayout"}),(0,o.yg)("h1",{id:"authentication"},"Authentication"),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#built-in-auth"},"Basic Auth"),(0,o.yg)("ul",{parentName:"li"},(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#setting-up-authentication"},"Setting Up Authentication")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#hash-password"},"Hash Password")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#logging-in-and-out"},"Logging In and Out")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#enabling-guest-access"},"Guest Access")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#granular-access"},"Per-User Access")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#using-environment-variables-for-passwords"},"Using Environment Variables for Passwords")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#adding-http-auth-to-configuration"},"Adding HTTP Auth to Configuration")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#security"},"Security Considerations")))),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#http-auth"},"HTTP Auth")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#keycloak"},"Keycloak Auth"),(0,o.yg)("ul",{parentName:"li"},(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#1-deploy-keycloak"},"Deploying Keycloak")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#2-setup-keycloak-users"},"Setting up Keycloak")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#3-enable-keycloak-in-dashy-config-file"},"Configuring Dashy for Keycloak")))),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#alternative-authentication-methods"},"Alternative Authentication Methods"),(0,o.yg)("ul",{parentName:"li"},(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#vpn"},"VPN")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#ip-based-access"},"IP-Based Access")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#web-server-authentication"},"Web Server Authentication")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#oauth-services"},"OAuth Services")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#static-site-hosting-providers"},"Auth on Cloud Hosting Services"))))),(0,o.yg)("blockquote",null,(0,o.yg)("p",{parentName:"blockquote"},"[!IMPORTANT]","\nDashy's built-in auth is not indented to protect a publicly hosted instance against unauthorized access. Instead you should use an auth provider compatible with your reverse proxy, or access Dashy via your VPN, or implement your own SSO logic. "),(0,o.yg)("p",{parentName:"blockquote"},"In cases where Dashy is only accessibly within your home network, and you just want to add a login page, then the built-in auth may be sufficient, but keep in mind that configuration can still be accessed.")),(0,o.yg)("h2",{id:"built-in-auth"},"Built-In Auth"),(0,o.yg)("p",null,"Dashy has a basic login page included, and frontend authentication. You can enable this by adding users to the ",(0,o.yg)("inlineCode",{parentName:"p"},"auth")," section under ",(0,o.yg)("inlineCode",{parentName:"p"},"appConfig")," in your ",(0,o.yg)("inlineCode",{parentName:"p"},"conf.yml"),". If this section is not specified, then no authentication will be required to access the app, and the homepage will resolve to your dashboard."),(0,o.yg)("blockquote",null,(0,o.yg)("p",{parentName:"blockquote"},"[!NOTE]","\nSince the auth is initiated in the main app entry point (for security), a rebuild is required to apply changes to the auth configuration.\nYou can trigger a rebuild through the UI, under Config --\x3e Rebuild, or by running ",(0,o.yg)("inlineCode",{parentName:"p"},"yarn build")," in the root directory.")),(0,o.yg)("h3",{id:"setting-up-authentication"},"Setting Up Authentication"),(0,o.yg)("p",null,"The ",(0,o.yg)("inlineCode",{parentName:"p"},"auth")," property takes an array of users. Each user needs to include a username, hash and optional user type (",(0,o.yg)("inlineCode",{parentName:"p"},"admin")," or ",(0,o.yg)("inlineCode",{parentName:"p"},"normal"),"). The hash property is a ",(0,o.yg)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/SHA-2"},"SHA-256 Hash")," of your desired password."),(0,o.yg)("p",null,"For example:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-yaml"},"appConfig:\n auth:\n users:\n - user: alicia\n hash: 4D1E58C90B3B94BCAD9848ECCACD6D2A8C9FBC5CA913304BBA5CDEAB36FEEFA3\n type: admin\n - user: bob\n hash: 5E884898DA28047151D0E56F8DC6292773603D0D6AABBDD62A11EF721D1542D8\n")),(0,o.yg)("h3",{id:"hash-password"},"Hash Password"),(0,o.yg)("p",null,"Dashy uses ",(0,o.yg)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Sha-256"},"SHA-256 Hash"),", a 64-character string, which you can generate using an online tool, such as ",(0,o.yg)("a",{parentName:"p",href:"https://passwordsgenerator.net/sha256-hash-generator/"},"this one")," or ",(0,o.yg)("a",{parentName:"p",href:"https://gchq.github.io/CyberChef/"},"CyberChef")," (which can be self-hosted/ ran locally)."),(0,o.yg)("p",null,"A hash is a one-way cryptographic function, meaning that it is easy to generate a hash for a given password, but very hard to determine the original password for a given hash. This means, that so long as your password is long, strong and unique, it is safe to store its hash in the clear. Having said that, you should never reuse passwords, hashes can be cracked by iterating over known password lists, generating a hash of each."),(0,o.yg)("h3",{id:"logging-in-and-out"},"Logging In and Out"),(0,o.yg)("p",null,"Once authentication is enabled, so long as there is no valid token in cookie storage, the application will redirect the user to the login page. When the user enters credentials in the login page, they will be checked, and if valid, then a token will be generated, and they can be redirected to the home page. If credentials are invalid, then an error message will be shown, and they will remain on the login page. Once in the application, to log out: the user can click the logout button (in the top-right), which will clear cookie storage, causing them to be redirected back to the login page."),(0,o.yg)("h3",{id:"enabling-guest-access"},"Enabling Guest Access"),(0,o.yg)("p",null,"With authentication set up, by default no access is allowed to your dashboard without first logging in with valid credentials. Guest mode can be enabled to allow for read-only access to a secured dashboard by any user, without the need to log in. A guest user cannot write any changes to the config file, but can apply modifications locally (stored in their browser). You can enable guest access, by setting ",(0,o.yg)("inlineCode",{parentName:"p"},"appConfig.auth.enableGuestAccess: true"),"."),(0,o.yg)("h3",{id:"granular-access"},"Granular Access"),(0,o.yg)("p",null,"You can use the following properties to make certain pages, sections or items only visible to some users, or hide pages, sections and items from guests."),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("inlineCode",{parentName:"li"},"hideForUsers")," - Page, Section or Item will be visible to all users, except for those specified in this list"),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("inlineCode",{parentName:"li"},"showForUsers")," - Page, Section or Item will be hidden from all users, except for those specified in this list"),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("inlineCode",{parentName:"li"},"hideForGuests")," - Page, Section or Item will be visible for logged in users, but not for guests")),(0,o.yg)("p",null,"For Example:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-yaml"},"pages:\n - name: Home Lab\n path: home-lab.yml\n displayData:\n showForUsers: [admin]\n - name: Intranet\n path: intranet.yml\n displayData:\n hideForGuests: true\n hideForUsers: [alicia, bob]\n")),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-yaml"},"- name: Code Analysis & Monitoring\n icon: fas fa-code\n displayData:\n cols: 2\n hideForUsers: [alicia, bob]\n items:\n ...\n")),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-yaml"},"- name: Deployment Pipelines\n icon: fas fa-rocket\n displayData:\n hideForGuests: true\n items:\n - title: Hide Me\n displayData:\n hideForUsers: [alicia, bob]\n")),(0,o.yg)("h3",{id:"permissions"},"Permissions"),(0,o.yg)("p",null,"Any user who is not an admin (with ",(0,o.yg)("inlineCode",{parentName:"p"},"type: admin"),") will not be able to write changes to disk."),(0,o.yg)("p",null,"You can also prevent any user from writing changes to disk, using ",(0,o.yg)("inlineCode",{parentName:"p"},"preventWriteToDisk"),". Or prevent any changes from being saved locally in browser storage, using ",(0,o.yg)("inlineCode",{parentName:"p"},"preventLocalSave"),". Both properties can be found under ",(0,o.yg)("a",{parentName:"p",href:"/docs/configuring#appconfig-optional"},(0,o.yg)("inlineCode",{parentName:"a"},"appConfig")),"."),(0,o.yg)("p",null,"To disable all UI config features, including View Config, set ",(0,o.yg)("inlineCode",{parentName:"p"},"disableConfiguration"),". Alternatively you can disable UI config features for all non admin users by setting ",(0,o.yg)("inlineCode",{parentName:"p"},"disableConfigurationForNonAdmin")," to true."),(0,o.yg)("h3",{id:"using-environment-variables-for-passwords"},"Using Environment Variables for Passwords"),(0,o.yg)("p",null,"If you don't want to hash your password, you can instead leave out the ",(0,o.yg)("inlineCode",{parentName:"p"},"hash")," attribute, and replace it with ",(0,o.yg)("inlineCode",{parentName:"p"},"password")," which should have the value of an environmental variable name you wish to use."),(0,o.yg)("p",null,"Note that env var must begin with ",(0,o.yg)("inlineCode",{parentName:"p"},"VUE_APP_"),", and you must set this variable before building the app."),(0,o.yg)("p",null,"For example:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-yaml"}," auth:\n users:\n - user: bob\n password: VUE_APP_BOB\n")),(0,o.yg)("p",null,"Just be sure to set ",(0,o.yg)("inlineCode",{parentName:"p"},"VUE_APP_BOB='my super secret password'")," before build-time."),(0,o.yg)("h3",{id:"adding-http-auth-to-configuration"},"Adding HTTP Auth to Configuration"),(0,o.yg)("p",null,"If you'd also like to prevent direct visit access to your configuration file, you can set the ",(0,o.yg)("inlineCode",{parentName:"p"},"ENABLE_HTTP_AUTH")," environmental variable."),(0,o.yg)("h3",{id:"security"},"Security"),(0,o.yg)("p",null,"With basic auth, all logic is happening on the client-side, which could mean a skilled user could manipulate the code to view parts of your configuration, including the hash. If the SHA-256 hash is of a common password, it may be possible to determine it, using a lookup table, in order to find the original password. Which can be used to manually generate the auth token, that can then be inserted into session storage, to become a valid logged in user. Therefore, you should always use a long, strong and unique password, and if you instance contains security-critical info and/ or is exposed directly to the internet, and alternative authentication method may be better. The purpose of the login page is merely to prevent immediate unauthorized access to your homepage."),(0,o.yg)("p",null,(0,o.yg)("strong",{parentName:"p"},(0,o.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,o.yg)("hr",null),(0,o.yg)("h2",{id:"http-auth"},"HTTP Auth"),(0,o.yg)("p",null,"If you'd like to protect all your config files from direct access, you can set the ",(0,o.yg)("inlineCode",{parentName:"p"},"BASIC_AUTH_USERNAME")," and ",(0,o.yg)("inlineCode",{parentName:"p"},"BASIC_AUTH_PASSWORD")," environmental variables. You'll then be prompted to enter these credentials when visiting Dashy."),(0,o.yg)("p",null,"Then, if you'd like your frontend to automatically log you in, without prompting you for credentials, then also specify ",(0,o.yg)("inlineCode",{parentName:"p"},"VUE_APP_BASIC_AUTH_USERNAME")," and ",(0,o.yg)("inlineCode",{parentName:"p"},"VUE_APP_BASIC_AUTH_PASSWORD"),". This is useful for when you're hosting Dashy on a private server, and you want to prevent unauthorized access to your config files, while still allowing the frontend to access them. Note that a rebuild is required for these changes to take effect."),(0,o.yg)("p",null,(0,o.yg)("strong",{parentName:"p"},(0,o.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))),(0,o.yg)("hr",null),(0,o.yg)("h2",{id:"keycloak"},"Keycloak"),(0,o.yg)("p",null,"Dashy also supports using a ",(0,o.yg)("a",{parentName:"p",href:"https://www.keycloak.org/"},"Keycloak")," authentication server. The setup for this is a bit more involved, but it gives you greater security overall, useful for if your instance is exposed to the internet."),(0,o.yg)("p",null,(0,o.yg)("a",{parentName:"p",href:"https://www.keycloak.org/about.html"},"Keycloak")," is a Java-based ",(0,o.yg)("a",{parentName:"p",href:"https://github.com/keycloak/keycloak"},"open source"),", high-performance, secure authentication system, supported by ",(0,o.yg)("a",{parentName:"p",href:"https://www.redhat.com/en"},"RedHat"),". It is easy to setup (",(0,o.yg)("a",{parentName:"p",href:"https://quay.io/repository/keycloak/keycloak"},"with Docker"),"), and enables you to secure multiple self-hosted applications with single-sign-on using standard protocols (OpenID Connect, OAuth 2.0, SAML 2.0 and social login). It's also very customizable, you can write or use custom ",(0,o.yg)("a",{parentName:"p",href:"https://wjw465150.gitbooks.io/keycloak-documentation/content/server_development/topics/themes.html"},"themes"),", ",(0,o.yg)("a",{parentName:"p",href:"https://www.keycloak.org/extensions.html"},"plugins"),", ",(0,o.yg)("a",{parentName:"p",href:"https://wjw465150.gitbooks.io/keycloak-documentation/content/server_admin/topics/authentication/password-policies.html"},"password policies")," and more.\nThe following guide will walk you through setting up Keycloak with Dashy. If you already have a Keycloak instance configured, then skip to Step 3."),(0,o.yg)("h3",{id:"1-deploy-keycloak"},"1. Deploy Keycloak"),(0,o.yg)("p",null,"First thing to do is to spin up a new instance of Keycloak. You will need ",(0,o.yg)("a",{parentName:"p",href:"https://docs.docker.com/engine/install/"},"Docker installed"),", and can then choose a tag, and pull the container from ",(0,o.yg)("a",{parentName:"p",href:"https://quay.io/repository/keycloak/keycloak"},"quay.io/keycloak/keycloak")),(0,o.yg)("p",null,"Use the following run command, replacing the attributes (default credentials, port and name), or incorporate this into your docker-compose file."),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-bash"},"docker run -d \\\n -p 8081:8080 \\\n --name auth-server \\\n -e KEYCLOAK_USER=admin \\\n -e KEYCLOAK_PASSWORD=admin \\\n quay.io/keycloak/keycloak:15.0.2\n")),(0,o.yg)("p",null,"If you need to pull from DockerHub, a non-official image is available ",(0,o.yg)("a",{parentName:"p",href:"https://registry.hub.docker.com/r/jboss/keycloak"},"here"),". Or if you would prefer not to use Docker, you can also directly install Keycloak from source, following ",(0,o.yg)("a",{parentName:"p",href:"https://www.keycloak.org/docs/latest/getting_started/index.html"},"this guide"),"."),(0,o.yg)("p",null,"You should now be able to access the Keycloak web interface, using the port specified above (e.g. ",(0,o.yg)("inlineCode",{parentName:"p"},"http://127.0.0.1:8081"),"), login with the default credentials, and when prompted create a new password."),(0,o.yg)("h3",{id:"2-setup-keycloak-users"},"2. Setup Keycloak Users"),(0,o.yg)("p",null,"Before we can use Keycloak, we must first set it up with some users. Keycloak uses Realms (similar to tenants) to create isolated groups of users. You must create a Realm before you will be able to add your first user."),(0,o.yg)("ol",null,(0,o.yg)("li",{parentName:"ol"},"Head over to the admin console"),(0,o.yg)("li",{parentName:"ol"},"In the top-left corner there is a dropdown called 'Master', hover over it and then click 'Add Realm'"),(0,o.yg)("li",{parentName:"ol"},"Give your realm a name, and hit 'Create'")),(0,o.yg)("p",null,"You can now create your first user."),(0,o.yg)("ol",null,(0,o.yg)("li",{parentName:"ol"},"In the left-hand menu, click 'Users', then 'Add User'"),(0,o.yg)("li",{parentName:"ol"},"Fill in the form, including username and hit 'Save'"),(0,o.yg)("li",{parentName:"ol"},"Under the 'Credentials' tab, give the new user an initial password. They will be prompted to change this after first login")),(0,o.yg)("p",null,"The last thing we need to do in the Keycloak admin console is to create a new client"),(0,o.yg)("ol",null,(0,o.yg)("li",{parentName:"ol"},"Within your new realm, navigate to 'Clients' on the left-hand side, then click 'Create' in the top-right"),(0,o.yg)("li",{parentName:"ol"},"Choose a 'Client ID', set 'Client Protocol' to 'openid-connect', and for 'Valid Redirect URIs' put a URL pattern to where you're hosting Dashy (if you're just testing locally, then * is fine), and do the same for the 'Web Origins' field"),(0,o.yg)("li",{parentName:"ol"},"Make note of your client-id, and click 'Save'")),(0,o.yg)("h3",{id:"3-enable-keycloak-in-dashy-config-file"},"3. Enable Keycloak in Dashy Config File"),(0,o.yg)("p",null,"Now that your Keycloak instance is up and running, all that's left to do is to configure Dashy to use it. Under ",(0,o.yg)("inlineCode",{parentName:"p"},"appConfig"),", set ",(0,o.yg)("inlineCode",{parentName:"p"},"auth.enableKeycloak: true"),", then fill in the details in ",(0,o.yg)("inlineCode",{parentName:"p"},"auth.keycloak"),", including: ",(0,o.yg)("inlineCode",{parentName:"p"},"serverUrl")," - the URL where your Keycloak instance is hosted, ",(0,o.yg)("inlineCode",{parentName:"p"},"realm")," - the name you gave your Realm, and ",(0,o.yg)("inlineCode",{parentName:"p"},"clientId")," - the Client ID you chose.\nFor example:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-yaml"},"appConfig:\n ...\n auth:\n enableKeycloak: true\n keycloak:\n serverUrl: 'http://localhost:8081'\n realm: 'alicia-homelab'\n clientId: 'dashy'\n")),(0,o.yg)("p",null,"Note that if you are using Keycloak V 17 or older, you will also need to set ",(0,o.yg)("inlineCode",{parentName:"p"},"legacySupport: true")," (also under ",(0,o.yg)("inlineCode",{parentName:"p"},"appConfig.auth.keycloak"),"). This is because the API endpoint was updated in later versions."),(0,o.yg)("p",null,"If you use Keycloak with an external Identity Provier, you can set the ",(0,o.yg)("inlineCode",{parentName:"p"},"idpHint: 'alias-of-kc-idp'")," option to allow the IdP Hint to be passed to Keycloak. This will cause Keycloak to skip its login page and redirect the user directly to the specified IdP's login page. Set to the value of the 'Alias' field of the desired IdP as defined in Keycloak under 'Identity Providers'."),(0,o.yg)("h3",{id:"4-add-groups-and-roles-optional"},"4. Add groups and roles (Optional)"),(0,o.yg)("p",null,"Keycloak allows you to assign users roles and groups. You can use these values to configure who can access various sections or items in Dashy.\nKeycloak server administration and configuration is a deep topic; please refer to the ",(0,o.yg)("a",{parentName:"p",href:"https://www.keycloak.org/docs/latest/server_admin/index.html#assigning-permissions-and-access-using-roles-and-groups"},"server admin guide")," to see details about creating and assigning roles and groups.\nOnce you have groups or roles assigned to users you can configure access under each section or item ",(0,o.yg)("inlineCode",{parentName:"p"},"displayData.showForKeycloakUser")," and ",(0,o.yg)("inlineCode",{parentName:"p"},"displayData.hideForKeycloakUser"),".\nBoth show and hide configurations accept a list of ",(0,o.yg)("inlineCode",{parentName:"p"},"groups")," and ",(0,o.yg)("inlineCode",{parentName:"p"},"roles")," that limit access. If a users data matches one or more items in these lists they will be allowed or excluded as defined."),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-yaml"},"sections:\n - name: DeveloperResources\n displayData:\n showForKeycloakUsers:\n roles: ['canViewDevResources']\n hideForKeycloakUsers:\n groups: ['ProductTeam']\n items:\n - title: Not Visible for developers\n displayData:\n hideForKeycloakUsers:\n groups: ['DevelopmentTeam']\n")),(0,o.yg)("p",null,"Depending on how you're hosting Dashy and Keycloak, you may also need to set some HTTP headers, to prevent a CORS error. This would typically be the ",(0,o.yg)("inlineCode",{parentName:"p"},"Access-Control-Allow-Origin [URL-of Dashy]")," on your Keycloak instance. See the ",(0,o.yg)("a",{parentName:"p",href:"https://github.com/Lissy93/dashy/blob/master/docs/management.md#setting-headers"},"Setting Headers")," guide in the management docs for more info."),(0,o.yg)("p",null,"Your app is now secured :) When you load Dashy, it will redirect to your Keycloak login page, and any user without valid credentials will be prevented from accessing your dashboard."),(0,o.yg)("p",null,"From within the Keycloak console, you can then configure things like time-outs, password policies, etc. You can also backup your full Keycloak config, and it is recommended to do this, along with your Dashy config. You can spin up both Dashy and Keycloak simultaneously and restore both applications configs using a ",(0,o.yg)("inlineCode",{parentName:"p"},"docker-compose.yml")," file, and this is recommended."),(0,o.yg)("hr",null),(0,o.yg)("h2",{id:"alternative-authentication-methods"},"Alternative Authentication Methods"),(0,o.yg)("p",null,"If you are self-hosting Dashy, and require secure authentication to prevent unauthorized access, then you can either use Keycloak, or one of the following options:"),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#authentication-server"},"Authentication Server")," - Put Dashy behind a self-hosted auth server"),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#vpn"},"VPN")," - Use a VPN to tunnel into the network where Dashy is running"),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#ip-based-access"},"IP-Based Access")," - Disallow access from all IP addresses, except your own"),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#web-server-authentication"},"Web Server Authentication")," - Enable user control within your web server or proxy"),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#oauth-services"},"OAuth Services")," - Implement a user management system using a cloud provider"),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("a",{parentName:"li",href:"#static-site-hosting-providers"},"Password Protection (for cloud providers)")," - Enable password-protection on your site")),(0,o.yg)("h3",{id:"authentication-server"},"Authentication Server"),(0,o.yg)("h4",{id:"authelia"},"Authelia"),(0,o.yg)("p",null,(0,o.yg)("a",{parentName:"p",href:"https://www.authelia.com/"},"Authelia")," is an open-source full-featured authentication server, which can be self-hosted and either on bare metal, in a Docker container or in a Kubernetes cluster. It allows for fine-grained access control rules based on IP, path, users etc, and supports 2FA, simple password access or bypass policies for your domains."),(0,o.yg)("ul",null,(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("inlineCode",{parentName:"li"},"git clone https://github.com/authelia/authelia.git")),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("inlineCode",{parentName:"li"},"cd authelia/examples/compose/lite")),(0,o.yg)("li",{parentName:"ul"},"Modify the ",(0,o.yg)("inlineCode",{parentName:"li"},"users_database.yml")," the default username and password is authelia"),(0,o.yg)("li",{parentName:"ul"},"Modify the ",(0,o.yg)("inlineCode",{parentName:"li"},"configuration.yml")," and ",(0,o.yg)("inlineCode",{parentName:"li"},"docker-compose.yml")," with your respective domains and secrets"),(0,o.yg)("li",{parentName:"ul"},(0,o.yg)("inlineCode",{parentName:"li"},"docker-compose up -d"))),(0,o.yg)("p",null,"For more information, see the ",(0,o.yg)("a",{parentName:"p",href:"https://www.authelia.com/docs/"},"Authelia docs")),(0,o.yg)("h3",{id:"vpn"},"VPN"),(0,o.yg)("p",null,"A catch-all solution to accessing services running from your home network remotely is to use a VPN. It means you do not need to worry about implementing complex authentication rules, or trusting the login implementation of individual applications. However it can be inconvenient to use on a day-to-day basis, and some public and corporate WiFi block VPN connections. Two popular VPN protocols are ",(0,o.yg)("a",{parentName:"p",href:"https://openvpn.net/"},"OpenVPN")," and ",(0,o.yg)("a",{parentName:"p",href:"https://www.wireguard.com/"},"WireGuard")),(0,o.yg)("h3",{id:"ip-based-access"},"IP-Based Access"),(0,o.yg)("p",null,"If you have a static IP or use a VPN to access your running services, then you can use conditional access to block access to Dashy from everyone except users of your pre-defined IP address. This feature is offered by most cloud providers, and supported by most web servers."),(0,o.yg)("h4",{id:"apache"},"Apache"),(0,o.yg)("p",null,"In Apache, this is configured in your ",(0,o.yg)("inlineCode",{parentName:"p"},".htaccess")," file in Dashy's root folder, and should look something like:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-text"},"Order Deny,Allow\nDeny from all\nAllow from [your-ip]\n")),(0,o.yg)("h4",{id:"nginx"},"NGINX"),(0,o.yg)("p",null,"In NGINX you can specify ",(0,o.yg)("a",{parentName:"p",href:"https://docs.nginx.com/nginx/admin-guide/security-controls/controlling-access-proxied-http/"},"control access")," rules for a given site in your ",(0,o.yg)("inlineCode",{parentName:"p"},"nginx.conf")," or hosts file. For example:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-text"},"server {\n listen 8080;\n server_name www.dashy.example.com;\n location / {\n root /path/to/dashy/;\n passenger_enabled on;\n allow [your-ip];\n deny all;\n }\n }\n")),(0,o.yg)("h4",{id:"caddy"},"Caddy"),(0,o.yg)("p",null,"In Caddy, ",(0,o.yg)("a",{parentName:"p",href:"https://caddyserver.com/docs/caddyfile/matchers"},"Request Matchers")," can be used to filter requests"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-text"},'dashy.site {\n @public_networks not remote_ip [your-ip]\n respond @public_networks "Access denied" 403\n}\n')),(0,o.yg)("h3",{id:"web-server-authentication"},"Web Server Authentication"),(0,o.yg)("p",null,"Most web servers make password protecting certain apps very easy. Note that you should also set up HTTPS and have a valid certificate in order for this to be secure."),(0,o.yg)("h4",{id:"apache-1"},"Apache"),(0,o.yg)("p",null,"First crate a ",(0,o.yg)("inlineCode",{parentName:"p"},".htaccess")," file in Dashy's route directory. Specify the auth type and path to where you want to store the password file (usually the same folder). For example:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-text"},'AuthType Basic\nAuthName "Please Sign into Dashy"\nAuthUserFile /path/dashy/.htpasswd\nrequire valid-user\n')),(0,o.yg)("p",null,"Then create a ",(0,o.yg)("inlineCode",{parentName:"p"},".htpasswd")," file in the same directory. List users and their hashed passwords here, with one user on each line, and a colon between username and password (e.g. ",(0,o.yg)("inlineCode",{parentName:"p"},"[username]:[hashed-password]"),"). You will need to generate an MD5 hash of your desired password, this can be done with an ",(0,o.yg)("a",{parentName:"p",href:"https://www.web2generators.com/apache-tools/htpasswd-generator"},"online tool"),". Your file will look something like:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-text"},"alicia:$apr1$jv0spemw$RzOX5/GgY69JMkgV6u16l0\n")),(0,o.yg)("h4",{id:"nginx-1"},"NGINX"),(0,o.yg)("p",null,"NGINX has an ",(0,o.yg)("a",{parentName:"p",href:"https://nginx.org/en/docs/http/ngx_http_auth_basic_module.html"},"authentication module")," which can be used to add passwords to given sites, and is fairly simple to set up. Similar to above, you will need to create a ",(0,o.yg)("inlineCode",{parentName:"p"},".htpasswd")," file. Then just enable auth and specify the path to that file, for example:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-text"},'location / {\n auth_basic "closed site";\n auth_basic_user_file conf/htpasswd;\n}\n')),(0,o.yg)("h4",{id:"caddy-1"},"Caddy"),(0,o.yg)("p",null,"Caddy has a ",(0,o.yg)("a",{parentName:"p",href:"https://caddyserver.com/docs/caddyfile/directives/basicauth"},"basic-auth")," directive, where you specify a username and hash. The password hash needs to be base-64 encoded, the ",(0,o.yg)("a",{parentName:"p",href:"https://caddyserver.com/docs/command-line#caddy-hash-password"},(0,o.yg)("inlineCode",{parentName:"a"},"caddy hash-password"))," command can help with this. For example:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-text"},"basicauth /secret/* {\n alicia JDJhJDEwJEVCNmdaNEg2Ti5iejRMYkF3MFZhZ3VtV3E1SzBWZEZ5Q3VWc0tzOEJwZE9TaFlZdEVkZDhX\n}\n")),(0,o.yg)("p",null,"For more info about implementing a single sign on for all your apps with Caddy, see ",(0,o.yg)("a",{parentName:"p",href:"https://joshstrange.com/securing-your-self-hosted-apps-with-single-signon/"},"this tutorial")),(0,o.yg)("h4",{id:"lighttpd"},"Lighttpd"),(0,o.yg)("p",null,"You can use the ",(0,o.yg)("a",{parentName:"p",href:"https://doc.lighttpd.net/lighttpd2/mod_auth.html"},"mod_auth")," module to secure your site with Lighttpd. Like with Apache, you need to first create a password file listing your usernames and hashed passwords, but in Lighttpd, it's usually called ",(0,o.yg)("inlineCode",{parentName:"p"},".lighttpdpassword"),"."),(0,o.yg)("p",null,"Then in your ",(0,o.yg)("inlineCode",{parentName:"p"},"lighttpd.conf")," file (usually in the ",(0,o.yg)("inlineCode",{parentName:"p"},"/etc/lighttpd/")," directory), load in the mod_auth module, and configure it's directives. For example:"),(0,o.yg)("pre",null,(0,o.yg)("code",{parentName:"pre",className:"language-text"},'server.modules += ( "mod_auth" )\nauth.debug = 2\nauth.backend = "plain"\nauth.backend.plain.userfile = "/home/lighttpd/.lighttpdpassword"\n\n$HTTP["host"] == "dashy.my-domain.net" {\n server.document-root = "/home/lighttpd/dashy.my-domain.net/http"\n server.errorlog = "/var/log/lighttpd/dashy.my-domain.net/error.log"\n accesslog.filename = "/var/log/lighttpd/dashy.my-domain.net/access.log"\n auth.require = (\n "/docs/" => (\n "method" => "basic",\n "realm" => "Password protected area",\n "require" => "user=alicia"\n )\n )\n}\n')),(0,o.yg)("p",null,"Restart your web server for changes to take effect."),(0,o.yg)("h3",{id:"oauth-services"},"OAuth Services"),(0,o.yg)("p",null,"There are also authentication services, such as ",(0,o.yg)("a",{parentName:"p",href:"https://www.ory.sh/"},"Ory.sh"),", ",(0,o.yg)("a",{parentName:"p",href:"https://developer.okta.com/"},"Okta"),", ",(0,o.yg)("a",{parentName:"p",href:"https://auth0.com/"},"Auth0"),", ",(0,o.yg)("a",{parentName:"p",href:"https://firebase.google.com/docs/auth/"},"Firebase"),". Implementing one of these solutions would involve some changes to the ",(0,o.yg)("a",{parentName:"p",href:"https://github.com/Lissy93/dashy/blob/master/src/utils/Auth.js"},(0,o.yg)("inlineCode",{parentName:"a"},"Auth.js"))," file, but should be fairly straightforward."),(0,o.yg)("h3",{id:"static-site-hosting-providers"},"Static Site Hosting Providers"),(0,o.yg)("p",null,"If you are hosting Dashy on a cloud platform, you will probably find that it has built-in support for password protected access to web apps. For more info, see the relevant docs for your provider, for example: ",(0,o.yg)("a",{parentName:"p",href:"https://docs.netlify.com/visitor-access/password-protection/"},"Netlify Password Protection"),", ",(0,o.yg)("a",{parentName:"p",href:"https://www.cloudflare.com/teams/access/"},"Cloudflare Access"),", ",(0,o.yg)("a",{parentName:"p",href:"https://aws.amazon.com/cognito/"},"AWS Cognito"),", ",(0,o.yg)("a",{parentName:"p",href:"https://docs.microsoft.com/en-us/azure/app-service/scenario-secure-app-authentication-app-service"},"Azure Authentication")," and ",(0,o.yg)("a",{parentName:"p",href:"https://vercel.com/docs/platform/projects#password-protection"},"Vercel Password Protection"),"."),(0,o.yg)("p",null,(0,o.yg)("strong",{parentName:"p"},(0,o.yg)("a",{parentName:"strong",href:"#top"},"\u2b06\ufe0f Back to Top"))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c4f5d8e4.4479da3e.js b/assets/js/c4f5d8e4.4479da3e.js new file mode 100644 index 00000000..3386b946 --- /dev/null +++ b/assets/js/c4f5d8e4.4479da3e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdashy=self.webpackChunkdashy||[]).push([[634],{137:(e,t,a)=>{a.d(t,{A:()=>c});var n,r=a(6540);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{a.d(t,{A:()=>c});var n,r=a(6540);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{a.d(t,{A:()=>c});var n,r=a(6540);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{a.d(t,{A:()=>c});var n,r=a(6540);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{a.d(t,{A:()=>c});var n,r=a(6540);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{a.d(t,{A:()=>c});var n,r=a(6540);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{a.d(t,{A:()=>c});var n=a(6540),r=a(53),l=a(4676);function c(e){let{children:t,to:a,color:c}=e;return n.createElement(l.A,{to:a,className:(0,r.A)("button",c&&"color-btn",`btn-${c}`)},t)}},6094:(e,t,a)=>{a.d(t,{A:()=>r});var n=a(6540);const r=()=>n.createElement("script",{async:!0,type:"text/javascript",src:"//cdn.carbonads.com/carbon.js?serve=CWYIC53L&placement=dashyto",id:"_carbonads_js"})},7208:(e,t,a)=>{a.r(t),a.d(t,{default:()=>re});var n=a(6540),r=a(5593),l=a(4586);const c={heroBanner:"heroBanner_Kgsz",heroTitle:"heroTitle_BKcm",heroSubTitle:"heroSubTitle_VV83",starButton:"starButton_Z5jC",buttons:"buttons_3T5n",dashyDescription:"dashyDescription_wvhj",keepReading:"keepReading_3EdK",scrollDown:"scrollDown_f1kE",scrollDownText:"scrollDownText_L5rW",scrollDownIcon:"scrollDownIcon_+yvr",sponsor:"sponsor_-1sg"};var s,i=a(2686),o=a(6094);function u(){return u=Object.assign?Object.assign.bind():function(e){for(var t=1;t{document.querySelector("#go-down").scrollIntoView({behavior:"smooth"})};function C(){const{siteConfig:e}=(0,l.A)(),[t,a]=(0,n.useState)(!1);return n.createElement("header",{className:c.heroBanner},n.createElement("h1",{className:c.heroTitle},e.title),n.createElement("h3",{className:c.heroSubTitle},e.tagline),n.createElement("div",{className:c.buttons},n.createElement(i.A,{to:"/docs/quick-start",color:"pink"},n.createElement(f,null),"Get Started"),n.createElement(i.A,{to:"https://demo.dashy.to",color:"blue"},n.createElement(d,null),"Live Demo"),n.createElement(i.A,{to:"https://github.com/Lissy93/dashy",color:"green"},n.createElement(p,null),"Source Code"),n.createElement(i.A,{to:"/docs",color:"yellow"},n.createElement(b,null),"Documentation")),n.createElement("div",{className:c.dashyDescription},"Dashy is an open source, highly customizable, easy to use, privacy-respecting dashboard app.",t&&n.createElement("p",{className:c.dashyDescription},"It's packed full of useful features, to help you build your perfect dashboard. Including status checks, keyboard shortcuts, dynamic widgets, auto-fetched favicon icons and font-awesome support, built-in authentication, tons of themes, an interactive config editor, many display layouts plus loads more.",n.createElement("br",null),"All the code is free and open source, and everything is thoroughly documented, you can get support with any questions on GitHub."),n.createElement("span",{className:c.keepReading,onClick:()=>a(!t)},t?"Show Less":"Keep Reading..."),n.createElement("div",{className:c.sponsor},n.createElement("span",null,"Dashy is kindly sponsored by ",n.createElement("a",{href:"https://umbrel.com?ref=dashy",target:"_blank"},"Umbrel")," - the personal home cloud and OS for self-hosting"),n.createElement("a",{href:"https://umbrel.com?ref=dashy",target:"_blank"},n.createElement("img",{src:"/umbrel-banner.jpg"})))),n.createElement(o.A,null),!t&&n.createElement("a",{onClick:k,className:c.scrollDown,id:"go-down"},n.createElement(z,{className:c.scrollDownIcon}),n.createElement("span",{className:c.scrollDownText},"Feature List"),n.createElement(z,{className:c.scrollDownIcon})),n.createElement("a",{href:"https://github.com/lissy93/dashy"},n.createElement("img",{className:c.starButton,src:"https://img.shields.io/github/stars/Lissy93/Dashy?label=Dashy%20on%20GitHub&logo=github&style=social"})))}var x,O=a(8168),M=a(8733);function H(){return H=Object.assign?Object.assign.bind():function(e){for(var t=1;tn.createElement(ae,(0,O.A)({key:t,index:t},e)))))}function re(){const{siteConfig:e}=(0,l.A)();return n.createElement(r.A,{title:e.title,description:"Dashy, the self-hosted dashboard app for your homelab"},n.createElement(C,null),n.createElement(ne,null),n.createElement("main",{id:"top"}))}},8733:(e,t,a)=>{a.d(t,{A:()=>n});const n=e=>{switch(e%4){case 0:return"pink";case 1:return"blue";case 2:return"green";case 3:return"yellow";default:return"white"}}}}]); \ No newline at end of file diff --git a/assets/js/c4f5d8e4.a3178ce4.js b/assets/js/c4f5d8e4.a3178ce4.js deleted file mode 100644 index 129da4c5..00000000 --- a/assets/js/c4f5d8e4.a3178ce4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdashy=self.webpackChunkdashy||[]).push([[634],{137:(e,t,a)=>{a.d(t,{A:()=>c});var n,r=a(6540);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{a.d(t,{A:()=>c});var n,r=a(6540);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{a.d(t,{A:()=>c});var n,r=a(6540);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{a.d(t,{A:()=>c});var n,r=a(6540);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{a.d(t,{A:()=>c});var n,r=a(6540);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{a.d(t,{A:()=>c});var n,r=a(6540);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{a.d(t,{A:()=>c});var n=a(6540),r=a(53),l=a(4676);function c(e){let{children:t,to:a,color:c}=e;return n.createElement(l.A,{to:a,className:(0,r.A)("button",c&&"color-btn",`btn-${c}`)},t)}},6094:(e,t,a)=>{a.d(t,{A:()=>r});var n=a(6540);const r=()=>n.createElement("script",{async:!0,type:"text/javascript",src:"//cdn.carbonads.com/carbon.js?serve=CWYIC53L&placement=dashyto",id:"_carbonads_js"})},7208:(e,t,a)=>{a.r(t),a.d(t,{default:()=>re});var n=a(6540),r=a(5593),l=a(4586);const c={heroBanner:"heroBanner_Kgsz",heroTitle:"heroTitle_BKcm",heroSubTitle:"heroSubTitle_VV83",starButton:"starButton_Z5jC",buttons:"buttons_3T5n",dashyDescription:"dashyDescription_wvhj",keepReading:"keepReading_3EdK",scrollDown:"scrollDown_f1kE",scrollDownText:"scrollDownText_L5rW",scrollDownIcon:"scrollDownIcon_+yvr",sponsor:"sponsor_-1sg"};var s,o=a(2686),i=a(6094);function u(){return u=Object.assign?Object.assign.bind():function(e){for(var t=1;t{document.querySelector("#go-down").scrollIntoView({behavior:"smooth"})};function k(){const{siteConfig:e}=(0,l.A)(),[t,a]=(0,n.useState)(!1);return n.createElement("header",{className:c.heroBanner},n.createElement("h1",{className:c.heroTitle},e.title),n.createElement("h3",{className:c.heroSubTitle},e.tagline),n.createElement("div",{className:c.buttons},n.createElement(o.A,{to:"/docs/quick-start",color:"pink"},n.createElement(f,null),"Get Started"),n.createElement(o.A,{to:"https://demo.dashy.to",color:"blue"},n.createElement(h,null),"Live Demo"),n.createElement(o.A,{to:"https://github.com/Lissy93/dashy",color:"green"},n.createElement(p,null),"Source Code"),n.createElement(o.A,{to:"/docs",color:"yellow"},n.createElement(w,null),"Documentation")),n.createElement("div",{className:c.dashyDescription},"Dashy is an open source, highly customizable, easy to use, privacy-respecting dashboard app.",t&&n.createElement("p",{className:c.dashyDescription},"It's packed full of useful features, to help you build your perfect dashboard. Including status checks, keyboard shortcuts, dynamic widgets, auto-fetched favicon icons and font-awesome support, built-in authentication, tons of themes, an interactive config editor, many display layouts plus loads more.",n.createElement("br",null),"All the code is free and open source, and everything is thoroughly documented, you can get support with any questions on GitHub."),n.createElement("span",{className:c.keepReading,onClick:()=>a(!t)},t?"Show Less":"Keep Reading..."),n.createElement("div",{className:c.sponsor},n.createElement("span",null,"Dashy is kindly sponsored by ",n.createElement("a",{href:"https://umbrel.com?ref=dashy",target:"_blank"},"Umbrel")," - the personal home cloud and OS for self-hosting"),n.createElement("a",{href:"https://umbrel.com?ref=dashy",target:"_blank"},n.createElement("img",{src:"/umbrel-banner.jpg"})))),n.createElement(i.A,null),!t&&n.createElement("a",{onClick:O,className:c.scrollDown,id:"go-down"},n.createElement(z,{className:c.scrollDownIcon}),n.createElement("span",{className:c.scrollDownText},"Feature List"),n.createElement(z,{className:c.scrollDownIcon})),n.createElement("a",{href:"https://github.com/lissy93/dashy"},n.createElement("img",{className:c.starButton,src:"https://img.shields.io/github/stars/Lissy93/Dashy?label=Dashy%20on%20GitHub&logo=github&style=social"})))}var C,j=a(8168),x=a(8733);function M(){return M=Object.assign?Object.assign.bind():function(e){for(var t=1;tn.createElement(ae,(0,j.A)({key:t,index:t},e)))))}function re(){const{siteConfig:e}=(0,l.A)();return n.createElement(r.A,{title:e.title,description:"Dashy, the self-hosted dashboard app for your homelab"},n.createElement(k,null),n.createElement(ne,null),n.createElement("main",{id:"top"}))}},8733:(e,t,a)=>{a.d(t,{A:()=>n});const n=e=>{switch(e%4){case 0:return"pink";case 1:return"blue";case 2:return"green";case 3:return"yellow";default:return"white"}}}}]); \ No newline at end of file diff --git a/assets/js/main.d13b237a.js b/assets/js/main.0bf19ca0.js similarity index 99% rename from assets/js/main.d13b237a.js rename to assets/js/main.0bf19ca0.js index fa965b97..02316e31 100644 --- a/assets/js/main.d13b237a.js +++ b/assets/js/main.0bf19ca0.js @@ -1,2 +1,2 @@ -/*! For license information please see main.d13b237a.js.LICENSE.txt */ -(self.webpackChunkdashy=self.webpackChunkdashy||[]).push([[792],{5091:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"Dashy",tagline:"The Ultimate Homepage for your Homelab",url:"https://dashy.to",baseUrl:"/",onBrokenLinks:"warn",onBrokenMarkdownLinks:"warn",favicon:"img/favicon.ico",organizationName:"lissy93",projectName:"dashy",plugins:["docusaurus-plugin-sass"],themeConfig:{colorMode:{defaultMode:"dark",switchConfig:{darkIcon:"\ud83c\udf19",lightIcon:"\u2600\ufe0f",darkIconStyle:{},lightIconStyle:{}},disableSwitch:!1,respectPrefersColorScheme:!1},algolia:{apiKey:"97d967bd42096f2c69f015214ff36176",indexName:"main",contextualSearch:!1,appId:"BH4D9OD16A",searchParameters:{}},prism:{theme:{plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},darkTheme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},additionalLanguages:[]},navbar:{title:"Dashy",logo:{alt:"Dashy Logo",src:"img/dashy.png"},items:[{label:"GitHub",to:"https://github.com/lissy93/dashy",position:"left"},{label:"Live Demo",to:"https://demo.dashy.to",position:"left"},{label:"Quick Start",to:"/docs/quick-start",position:"left"},{label:"Documentation",to:"/docs",position:"left"}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"Intro",items:[{label:"GitHub",to:"https://github.com/lissy93/dashy"},{label:"Live Demo",to:"https://demo.dashy.to"},{label:"Quick Start",to:"/docs/quick-start"},{label:"Documentation",to:"/docs"}]},{title:"Setup Guide",items:[{label:"Deploying",to:"/docs/deployment"},{label:"Configuring",to:"/docs/configuring"},{label:"Management",to:"/docs/management"},{label:"Troubleshooting",to:"/docs/troubleshooting"}]},{title:"Feature Docs Pt 1",items:[{label:"Authentication",to:"/docs/authentication"},{label:"Alternate Views",to:"/docs/alternate-views"},{label:"Backup & Restore",to:"/docs/backup-restore"},{label:"Icons",to:"/docs/icons"}]},{title:"Feature Docs Pt 2",items:[{label:"Language Switching",to:"/docs/multi-language-support"},{label:"Status Indicators",to:"/docs/status-indicators"},{label:"Searching & Shortcuts",to:"/docs/searching"},{label:"Theming",to:"/docs/theming"}]},{title:"Community",items:[{label:"Developing",to:"/docs/developing"},{label:"Development Guides",to:"/docs/development-guides"},{label:"Contributing",to:"/docs/contributing"},{label:"Showcase",to:"/docs/showcase"},{label:"Credits",to:"/docs/credits"}]},{title:"Misc",items:[{label:"Privacy & Security",to:"/docs/privacy"},{label:"License",to:"/docs/license"},{label:"Legal",to:"https://github.com/Lissy93/dashy/blob/master/.github/LEGAL.md"},{label:"Code of Conduct",to:"/docs/code-of-conduct"},{label:"Changelog",to:"/docs/changelog"}]}],copyright:'Dashy - The Self-Hosted Dashboard for your Homelab
License under MIT. Copyright \xa9 2024 Alicia Sykes'},docs:{versionPersistence:"localStorage"},metadatas:[],hideableSidebar:!1},presets:[["@docusaurus/preset-classic",{docs:{sidebarPath:"/github/workspace/sidebars.js",editUrl:"https://github.com/Lissy93/dashy/edit/gh-pages/docs/"},theme:{customCss:["/github/workspace/src/styles/Colors.scss","/github/workspace/src/styles/Typography.scss","/github/workspace/src/styles/custom.scss"]}}]],scripts:[{src:"https://no-track.as93.net/js/script.js",defer:!0,"data-domain":"dashy.to"}],baseUrlIssueBanner:!0,i18n:{defaultLocale:"en",locales:["en"],localeConfigs:{}},onDuplicateRoutes:"warn",customFields:{},themes:[],titleDelimiter:"|",noIndex:!1}},9555:(e,t,n)=>{"use strict";var r=n(6540),a=n(961),o=n(4625),i=n(4599),l=n.n(i);const s=e=>{let{error:t,retry:n,pastDelay:a}=e;return t?r.createElement("div",{style:{align:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,t.message),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):a?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null},u=JSON.parse('{"/-deb":{"component":"c4f5d8e4","config":"5e9f5e1a"},"/docs-145":{"component":"25b7c3f2","config":"5e9f5e1a"},"/markdown-page-be1":{"component":"1f391b9e","content":"393be207"},"/search-d30":{"component":"0276dc25"},"/survey-f73":{"component":"ccab7630","config":"5e9f5e1a"},"/docs-156":{"component":"1be78505","versionMetadata":"935f2afb"},"/docs/alternate-views-5e5":{"component":"17896441","content":"ffd4f506"},"/docs/authentication-34f":{"component":"17896441","content":"625b1ed7"},"/docs/backup-restore-909":{"component":"17896441","content":"f52ebc2d"},"/docs/changelog-b16":{"component":"17896441","content":"9beb87c2"},"/docs/code-of-conduct-2e3":{"component":"17896441","content":"dea0f9ea"},"/docs/configuring-8aa":{"component":"17896441","content":"4bdb0d83"},"/docs/contributing-853":{"component":"17896441","content":"4d54d076"},"/docs/credits-00c":{"component":"17896441","content":"18ba09e8"},"/docs/deployment-978":{"component":"17896441","content":"a3713279"},"/docs/developing-310":{"component":"17896441","content":"68d50eef"},"/docs/development-guides-2e8":{"component":"17896441","content":"a63906ba"},"/docs/icons-c66":{"component":"17896441","content":"044d5aa6"},"/docs/license-3a7":{"component":"17896441","content":"ac5280f2"},"/docs/management-45f":{"component":"17896441","content":"1f5fb0df"},"/docs/multi-language-support-53b":{"component":"17896441","content":"f62d4472"},"/docs/pages-and-sections-c25":{"component":"17896441","content":"2140bf91"},"/docs/privacy-40e":{"component":"17896441","content":"9b4185c1"},"/docs/quick-start-5fa":{"component":"17896441","content":"72e14192"},"/docs/readme-acc":{"component":"17896441","content":"52e2a80b"},"/docs/release-workflow-b94":{"component":"17896441","content":"f9f76190"},"/docs/searching-fc4":{"component":"17896441","content":"0bfe2fe2"},"/docs/showcase-cea":{"component":"17896441","content":"27d9d47d"},"/docs/showcase/readme-43d":{"component":"17896441","content":"1745c531"},"/docs/status-indicators-973":{"component":"17896441","content":"87124b4e"},"/docs/theming-07a":{"component":"17896441","content":"e505b3a5"},"/docs/troubleshooting-832":{"component":"17896441","content":"9d9f8394"},"/docs/widgets-2a5":{"component":"17896441","content":"9be9f402"}}'),c={"0276dc25":[()=>Promise.all([n.e(869),n.e(345),n.e(593),n.e(158)]).then(n.bind(n,906)),"/github/workspace/node_modules/@docusaurus/preset-classic/node_modules/@docusaurus/theme-search-algolia/src/theme/SearchPage/index.js",906],"044d5aa6":[()=>n.e(332).then(n.bind(n,1095)),"@site/docs/icons.md",1095],"0bfe2fe2":[()=>n.e(151).then(n.bind(n,9849)),"@site/docs/searching.md",9849],"1745c531":[()=>n.e(790).then(n.bind(n,6601)),"@site/docs/showcase/readme.md",6601],17896441:[()=>Promise.all([n.e(869),n.e(345),n.e(401)]).then(n.bind(n,1268)),"@theme/DocItem",1268],"18ba09e8":[()=>n.e(849).then(n.bind(n,9315)),"@site/docs/credits.md",9315],"1be78505":[()=>Promise.all([n.e(869),n.e(345),n.e(593),n.e(896),n.e(714)]).then(n.bind(n,2379)),"@theme/DocPage",2379],"1f391b9e":[()=>Promise.all([n.e(869),n.e(345),n.e(593),n.e(896),n.e(61)]).then(n.bind(n,3933)),"@theme/MDXPage",3933],"1f5fb0df":[()=>n.e(695).then(n.bind(n,3742)),"@site/docs/management.md",3742],"2140bf91":[()=>n.e(146).then(n.bind(n,2062)),"@site/docs/pages-and-sections.md",2062],"25b7c3f2":[()=>Promise.all([n.e(869),n.e(345),n.e(593),n.e(847)]).then(n.bind(n,4138)),"@site/src/pages/docs.js",4138],"27d9d47d":[()=>n.e(138).then(n.bind(n,7980)),"@site/docs/showcase.md",7980],"393be207":[()=>n.e(134).then(n.bind(n,4666)),"@site/src/pages/markdown-page.md",4666],"4bdb0d83":[()=>n.e(496).then(n.bind(n,1058)),"@site/docs/configuring.md",1058],"4d54d076":[()=>n.e(459).then(n.bind(n,9113)),"@site/docs/contributing.md",9113],"52e2a80b":[()=>n.e(306).then(n.bind(n,4779)),"@site/docs/readme.md",4779],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,5091)),"@generated/docusaurus.config",5091],"625b1ed7":[()=>n.e(831).then(n.bind(n,2081)),"@site/docs/authentication.md",2081],"68d50eef":[()=>n.e(992).then(n.bind(n,7682)),"@site/docs/developing.md",7682],"72e14192":[()=>n.e(814).then(n.bind(n,9327)),"@site/docs/quick-start.md",9327],"87124b4e":[()=>n.e(278).then(n.bind(n,3090)),"@site/docs/status-indicators.md",3090],"935f2afb":[()=>n.e(581).then(n.t.bind(n,5610,19)),"~docs/default/version-current-metadata-prop-751.json",5610],"9b4185c1":[()=>n.e(330).then(n.bind(n,885)),"@site/docs/privacy.md",885],"9be9f402":[()=>n.e(552).then(n.bind(n,7684)),"@site/docs/widgets.md",7684],"9beb87c2":[()=>n.e(539).then(n.bind(n,4691)),"@site/docs/changelog.md",4691],"9d9f8394":[()=>n.e(13).then(n.bind(n,5791)),"@site/docs/troubleshooting.md",5791],a3713279:[()=>n.e(588).then(n.bind(n,738)),"@site/docs/deployment.md",738],a63906ba:[()=>n.e(903).then(n.bind(n,4484)),"@site/docs/development-guides.md",4484],ac5280f2:[()=>n.e(586).then(n.bind(n,1118)),"@site/docs/license.md",1118],c4f5d8e4:[()=>Promise.all([n.e(869),n.e(345),n.e(593),n.e(634)]).then(n.bind(n,7208)),"@site/src/pages/index.js",7208],ccab7630:[()=>Promise.all([n.e(869),n.e(345),n.e(593),n.e(546)]).then(n.bind(n,1596)),"@site/src/pages/survey.js",1596],dea0f9ea:[()=>n.e(228).then(n.bind(n,9025)),"@site/docs/code-of-conduct.md",9025],e505b3a5:[()=>n.e(87).then(n.bind(n,4311)),"@site/docs/theming.md",4311],f52ebc2d:[()=>n.e(676).then(n.bind(n,9812)),"@site/docs/backup-restore.md",9812],f62d4472:[()=>n.e(326).then(n.bind(n,4269)),"@site/docs/multi-language-support.md",4269],f9f76190:[()=>n.e(245).then(n.bind(n,6492)),"@site/docs/release-workflow.md",6492],ffd4f506:[()=>n.e(778).then(n.bind(n,2780)),"@site/docs/alternate-views.md",2780]};const d=function(e){const t={};return function e(n,r){Object.keys(n).forEach((a=>{const o=n[a],i=r?r+"."+a:a;"object"===typeof o&&!!o&&Object.keys(o).length?e(o,i):t[i]=o}))}(e),t};const p=function(e,t){if("*"===e)return l()({loading:s,loader:()=>Promise.all([n.e(869),n.e(345),n.e(593),n.e(90)]).then(n.bind(n,9090))});const a=u[`${e}-${t}`],o=[],i=[],p={},f=d(a);return Object.keys(f).forEach((e=>{const t=c[f[e]];t&&(p[e]=t[0],o.push(t[1]),i.push(t[2]))})),l().Map({loading:s,loader:p,modules:o,webpack:()=>i,render:(e,t)=>{const n=JSON.parse(JSON.stringify(a));Object.keys(e).forEach((t=>{let r=n;const a=t.split(".");for(let e=0;e"default"!==e));o&&o.length&&o.forEach((n=>{r[a[a.length-1]][n]=e[t][n]}))}));const o=n.component;return delete n.component,r.createElement(o,{...n,...t})}})},f=[{path:"/",component:p("/","deb"),exact:!0},{path:"/docs",component:p("/docs","145"),exact:!0},{path:"/markdown-page",component:p("/markdown-page","be1"),exact:!0},{path:"/search",component:p("/search","d30"),exact:!0},{path:"/survey",component:p("/survey","f73"),exact:!0},{path:"/docs",component:p("/docs","156"),routes:[{path:"/docs/alternate-views",component:p("/docs/alternate-views","5e5"),exact:!0},{path:"/docs/authentication",component:p("/docs/authentication","34f"),exact:!0},{path:"/docs/backup-restore",component:p("/docs/backup-restore","909"),exact:!0},{path:"/docs/changelog",component:p("/docs/changelog","b16"),exact:!0},{path:"/docs/code-of-conduct",component:p("/docs/code-of-conduct","2e3"),exact:!0},{path:"/docs/configuring",component:p("/docs/configuring","8aa"),exact:!0},{path:"/docs/contributing",component:p("/docs/contributing","853"),exact:!0},{path:"/docs/credits",component:p("/docs/credits","00c"),exact:!0},{path:"/docs/deployment",component:p("/docs/deployment","978"),exact:!0},{path:"/docs/developing",component:p("/docs/developing","310"),exact:!0},{path:"/docs/development-guides",component:p("/docs/development-guides","2e8"),exact:!0},{path:"/docs/icons",component:p("/docs/icons","c66"),exact:!0},{path:"/docs/license",component:p("/docs/license","3a7"),exact:!0},{path:"/docs/management",component:p("/docs/management","45f"),exact:!0},{path:"/docs/multi-language-support",component:p("/docs/multi-language-support","53b"),exact:!0},{path:"/docs/pages-and-sections",component:p("/docs/pages-and-sections","c25"),exact:!0},{path:"/docs/privacy",component:p("/docs/privacy","40e"),exact:!0},{path:"/docs/quick-start",component:p("/docs/quick-start","5fa"),exact:!0},{path:"/docs/readme",component:p("/docs/readme","acc"),exact:!0},{path:"/docs/release-workflow",component:p("/docs/release-workflow","b94"),exact:!0},{path:"/docs/searching",component:p("/docs/searching","fc4"),exact:!0},{path:"/docs/showcase",component:p("/docs/showcase","cea"),exact:!0},{path:"/docs/showcase/readme",component:p("/docs/showcase/readme","43d"),exact:!0},{path:"/docs/status-indicators",component:p("/docs/status-indicators","973"),exact:!0},{path:"/docs/theming",component:p("/docs/theming","07a"),exact:!0},{path:"/docs/troubleshooting",component:p("/docs/troubleshooting","832"),exact:!0},{path:"/docs/widgets",component:p("/docs/widgets","2a5"),exact:!0}]},{path:"*",component:p("*")}];var m=n(8193),h=n(5091);const g=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"quick-start","docs":[{"id":"alternate-views","path":"/docs/alternate-views","sidebar":"dashySidebar"},{"id":"authentication","path":"/docs/authentication","sidebar":"dashySidebar"},{"id":"backup-restore","path":"/docs/backup-restore","sidebar":"dashySidebar"},{"id":"changelog","path":"/docs/changelog","sidebar":"dashySidebar"},{"id":"code-of-conduct","path":"/docs/code-of-conduct","sidebar":"dashySidebar"},{"id":"configuring","path":"/docs/configuring","sidebar":"dashySidebar"},{"id":"contributing","path":"/docs/contributing","sidebar":"dashySidebar"},{"id":"credits","path":"/docs/credits"},{"id":"deployment","path":"/docs/deployment","sidebar":"dashySidebar"},{"id":"developing","path":"/docs/developing","sidebar":"dashySidebar"},{"id":"development-guides","path":"/docs/development-guides","sidebar":"dashySidebar"},{"id":"icons","path":"/docs/icons","sidebar":"dashySidebar"},{"id":"license","path":"/docs/license","sidebar":"dashySidebar"},{"id":"management","path":"/docs/management","sidebar":"dashySidebar"},{"id":"multi-language-support","path":"/docs/multi-language-support","sidebar":"dashySidebar"},{"id":"pages-and-sections","path":"/docs/pages-and-sections","sidebar":"dashySidebar"},{"id":"privacy","path":"/docs/privacy","sidebar":"dashySidebar"},{"id":"quick-start","path":"/docs/quick-start","sidebar":"dashySidebar"},{"id":"readme","path":"/docs/readme"},{"id":"release-workflow","path":"/docs/release-workflow"},{"id":"searching","path":"/docs/searching","sidebar":"dashySidebar"},{"id":"showcase","path":"/docs/showcase","sidebar":"dashySidebar"},{"id":"showcase/readme","path":"/docs/showcase/readme"},{"id":"status-indicators","path":"/docs/status-indicators","sidebar":"dashySidebar"},{"id":"theming","path":"/docs/theming","sidebar":"dashySidebar"},{"id":"troubleshooting","path":"/docs/troubleshooting","sidebar":"dashySidebar"},{"id":"widgets","path":"/docs/widgets","sidebar":"dashySidebar"}]}]}}}'),y=JSON.parse('{"defaultLocale":"en","locales":["en"],"currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr"}}}');var b=n(2654);const v=JSON.parse('{"docusaurusVersion":"2.0.0-beta.2","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.0.0-beta.2"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.0.0-beta.2"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.0.0-beta.2"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.0.0-beta.2"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.0.0-beta.2"},"docusaurus-theme-search-algolia":{"type":"package","name":"@docusaurus/theme-search-algolia","version":"2.0.0-beta.2"},"docusaurus-plugin-sass":{"type":"package","name":"docusaurus-plugin-sass","version":"0.2.5"}}}');var w=n(5920),k=n(8775),S=n(6347),E=n(5947),x=n.n(E);const T=[n(4992),n(4992),n(4992),n(119),n(3400),n(4674),n(9931),n(1501)];function C(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{var r,a;const o=null!==(a=null===(r=null==t?void 0:t.default)||void 0===r?void 0:r[e])&&void 0!==a?a:t[e];o&&o(...n)}))}const A={onRouteUpdate(){for(var e=arguments.length,t=new Array(e),n=0;n{const{component:t}=e.route;if(t&&t.preload)return t.preload()})))}const R={};const P=function(e){if(R[e.pathname])return{...e,pathname:R[e.pathname]};let t=e.pathname||"/";return t=t.trim().replace(/\/index\.html$/,""),""===t&&(t="/"),R[e.pathname]=t,{...e,pathname:t}};x().configure({showSpinner:!1});class L extends r.Component{constructor(e){super(e),this.previousLocation=null,this.progressBarTimeout=null,this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){const n=e.location!==this.props.location,{routes:r,delay:a=1e3}=this.props;if(n){const t=P(e.location);return this.startProgressBar(a),this.previousLocation=P(this.props.location),this.setState({nextRouteHasLoaded:!1}),O(r,t.pathname).then((()=>{A.onRouteUpdate({previousLocation:this.previousLocation,location:t}),this.previousLocation=null,this.setState({nextRouteHasLoaded:!0},this.stopProgressBar);const{hash:e}=t;if(e){const t=decodeURIComponent(e.substring(1)),n=document.getElementById(t);n&&n.scrollIntoView()}else window.scrollTo(0,0)})).catch((e=>console.warn(e))),!1}return!!t.nextRouteHasLoaded}clearProgressBarTimeout(){this.progressBarTimeout&&(clearTimeout(this.progressBarTimeout),this.progressBarTimeout=null)}startProgressBar(e){this.clearProgressBarTimeout(),this.progressBarTimeout=setTimeout((()=>{A.onRouteUpdateDelayed({location:P(this.props.location)}),x().start()}),e)}stopProgressBar(){this.clearProgressBarTimeout(),x().done()}render(){const{children:e,location:t}=this.props;return r.createElement(S.qh,{location:P(t),render:()=>e})}}const N=(0,S.y)(L);var D=n(2602),I=n(4586);const F="docusaurus-base-url-issue-banner-container",M="docusaurus-base-url-issue-banner",j="docusaurus-base-url-issue-banner-suggestion-container",B="__DOCUSAURUS_INSERT_BASEURL_BANNER";function z(e){return`\nwindow['${B}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${B}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${F}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{window[B]=!1}),[]),r.createElement(r.Fragment,null,!m.A.canUseDOM&&r.createElement(D.A,null,r.createElement("script",null,z(e))),r.createElement("div",{id:F}))}function $(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,I.A)(),{pathname:n}=(0,S.zy)();return t&&n===e?r.createElement(U,null):null}const q=function(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)};const G=function(){const[e,t]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{t(!0)}),[]),r.createElement(k.A.Provider,{value:{siteConfig:h.default,siteMetadata:v,globalData:g,i18n:y,codeTranslations:b,isClient:e}},r.createElement(q,null,r.createElement($,null),r.createElement(N,{routes:f},(0,w.A)(f))))};const H=function(e){if("undefined"==typeof document)return!1;const t=document.createElement("link");try{if(t.relList&&"function"==typeof t.relList.supports)return t.relList.supports(e)}catch(n){return!1}return!1}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=t,r.onerror=n;(document.getElementsByTagName("head")[0]||document.getElementsByName("script")[0].parentNode).appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))},W={};const V=function(e){return new Promise((t=>{W[e]?t():H(e).then((()=>{t(),W[e]=!0})).catch((()=>{}))}))},K={},Y={},Q=()=>!(!("connection"in navigator)||-1===(navigator.connection.effectiveType||"").indexOf("2g")||!navigator.connection.saveData),X=e=>Array.prototype.concat.apply([],e),Z={prefetch:e=>{if(!(e=>!Q()&&!Y[e]&&!K[e])(e))return!1;K[e]=!0;const t=(0,_.u)(f,e);return X(t.map((e=>{return t=e.route.path,X(Object.entries(u).filter((e=>{let[n]=e;return n.replace(/(-[^-]+)$/,"")===t})).map((e=>{let[,t]=e;return Object.values(d(t))})));var t}))).forEach((e=>{const t=n.gca(e);t&&!/undefined/.test(t)&&V(t)})),!0},preload:e=>!!(e=>!Q()&&!Y[e])(e)&&(Y[e]=!0,O(f,e),!0)};if(m.A.canUseDOM){window.docusaurus=Z;const e=a.hydrate;O(f,window.location.pathname).then((()=>{e(r.createElement(o.Kd,null,r.createElement(G,null)),document.getElementById("__docusaurus"))}))}},8193:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});const r=!("undefined"==typeof window||!window.document||!window.document.createElement),a={canUseDOM:r,canUseEventListeners:r&&!(!window.addEventListener&&!window.attachEvent),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&!!window.screen}},2602:(e,t,n)=>{"use strict";n.d(t,{A:()=>me});var r,a,o,i,l=n(6540),s=n(5556),u=n.n(s),c=n(2098),d=n.n(c),p=n(115),f=n.n(p),m=n(5228),h=n.n(m),g="bodyAttributes",y="htmlAttributes",b="titleAttributes",v={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title"},w=(Object.keys(v).map((function(e){return v[e]})),"charset"),k="cssText",S="href",E="http-equiv",x="innerHTML",T="itemprop",C="name",A="property",_="rel",O="src",R="target",P={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},L="defaultTitle",N="defer",D="encodeSpecialCharacters",I="onChangeClientState",F="titleTemplate",M=Object.keys(P).reduce((function(e,t){return e[P[t]]=t,e}),{}),j=[v.NOSCRIPT,v.SCRIPT,v.STYLE],B="data-react-helmet",z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},U=function(){function e(e,t){for(var n=0;n=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n},G=function(e){return!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])?String(e):String(e).replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")},H=function(e){var t=Q(e,v.TITLE),n=Q(e,F);if(n&&t)return n.replace(/%s/g,(function(){return Array.isArray(t)?t.join(""):t}));var r=Q(e,L);return t||r||void 0},W=function(e){return Q(e,I)||function(){}},V=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return $({},e,t)}),{})},K=function(e,t){return t.filter((function(e){return void 0!==e[v.BASE]})).map((function(e){return e[v.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),a=0;a=0;n--){var r=e[n];if(r.hasOwnProperty(t))return r[t]}return null},X=(r=Date.now(),function(e){var t=Date.now();t-r>16?(r=t,e(t)):setTimeout((function(){X(e)}),0)}),Z=function(e){return clearTimeout(e)},J="undefined"!=typeof window?window.requestAnimationFrame&&window.requestAnimationFrame.bind(window)||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||X:n.g.requestAnimationFrame||X,ee="undefined"!=typeof window?window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||Z:n.g.cancelAnimationFrame||Z,te=function(e){return console&&"function"==typeof console.warn&&console.warn(e)},ne=null,re=function(e,t){var n=e.baseTag,r=e.bodyAttributes,a=e.htmlAttributes,o=e.linkTags,i=e.metaTags,l=e.noscriptTags,s=e.onChangeClientState,u=e.scriptTags,c=e.styleTags,d=e.title,p=e.titleAttributes;ie(v.BODY,r),ie(v.HTML,a),oe(d,p);var f={baseTag:le(v.BASE,n),linkTags:le(v.LINK,o),metaTags:le(v.META,i),noscriptTags:le(v.NOSCRIPT,l),scriptTags:le(v.SCRIPT,u),styleTags:le(v.STYLE,c)},m={},h={};Object.keys(f).forEach((function(e){var t=f[e],n=t.newTags,r=t.oldTags;n.length&&(m[e]=n),r.length&&(h[e]=f[e].oldTags)})),t&&t(),s(e,m,h)},ae=function(e){return Array.isArray(e)?e.join(""):e},oe=function(e,t){void 0!==e&&document.title!==e&&(document.title=ae(e)),ie(v.TITLE,t)},ie=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute(B),a=r?r.split(","):[],o=[].concat(a),i=Object.keys(t),l=0;l=0;d--)n.removeAttribute(o[d]);a.length===o.length?n.removeAttribute(B):n.getAttribute(B)!==i.join(",")&&n.setAttribute(B,i.join(","))}},le=function(e,t){var n=document.head||document.querySelector(v.HEAD),r=n.querySelectorAll(e+"["+B+"]"),a=Array.prototype.slice.call(r),o=[],i=void 0;return t&&t.length&&t.forEach((function(t){var n=document.createElement(e);for(var r in t)if(t.hasOwnProperty(r))if(r===x)n.innerHTML=t.innerHTML;else if(r===k)n.styleSheet?n.styleSheet.cssText=t.cssText:n.appendChild(document.createTextNode(t.cssText));else{var l=void 0===t[r]?"":t[r];n.setAttribute(r,l)}n.setAttribute(B,"true"),a.some((function(e,t){return i=t,n.isEqualNode(e)}))?a.splice(i,1):o.push(n)})),a.forEach((function(e){return e.parentNode.removeChild(e)})),o.forEach((function(e){return n.appendChild(e)})),{oldTags:a,newTags:o}},se=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},ue=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(e).reduce((function(t,n){return t[P[n]||n]=e[n],t}),t)},ce=function(e,t,n){switch(e){case v.TITLE:return{toComponent:function(){return e=t.title,n=t.titleAttributes,(r={key:e})[B]=!0,a=ue(n,r),[l.createElement(v.TITLE,a,e)];var e,n,r,a},toString:function(){return function(e,t,n,r){var a=se(n),o=ae(t);return a?"<"+e+" "+B+'="true" '+a+">"+G(o,r)+"":"<"+e+" "+B+'="true">'+G(o,r)+""}(e,t.title,t.titleAttributes,n)}};case g:case y:return{toComponent:function(){return ue(t)},toString:function(){return se(t)}};default:return{toComponent:function(){return function(e,t){return t.map((function(t,n){var r,a=((r={key:n})[B]=!0,r);return Object.keys(t).forEach((function(e){var n=P[e]||e;if(n===x||n===k){var r=t.innerHTML||t.cssText;a.dangerouslySetInnerHTML={__html:r}}else a[n]=t[e]})),l.createElement(e,a)}))}(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var a=Object.keys(r).filter((function(e){return!(e===x||e===k)})).reduce((function(e,t){var a=void 0===r[t]?t:t+'="'+G(r[t],n)+'"';return e?e+" "+a:a}),""),o=r.innerHTML||r.cssText||"",i=-1===j.indexOf(e);return t+"<"+e+" "+B+'="true" '+a+(i?"/>":">"+o+"")}),"")}(e,t,n)}}}},de=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,a=e.htmlAttributes,o=e.linkTags,i=e.metaTags,l=e.noscriptTags,s=e.scriptTags,u=e.styleTags,c=e.title,d=void 0===c?"":c,p=e.titleAttributes;return{base:ce(v.BASE,t,r),bodyAttributes:ce(g,n,r),htmlAttributes:ce(y,a,r),link:ce(v.LINK,o,r),meta:ce(v.META,i,r),noscript:ce(v.NOSCRIPT,l,r),script:ce(v.SCRIPT,s,r),style:ce(v.STYLE,u,r),title:ce(v.TITLE,{title:d,titleAttributes:p},r)}},pe=d()((function(e){return{baseTag:K([S,R],e),bodyAttributes:V(g,e),defer:Q(e,N),encode:Q(e,D),htmlAttributes:V(y,e),linkTags:Y(v.LINK,[_,S],e),metaTags:Y(v.META,[C,w,E,A,T],e),noscriptTags:Y(v.NOSCRIPT,[x],e),onChangeClientState:W(e),scriptTags:Y(v.SCRIPT,[O,x],e),styleTags:Y(v.STYLE,[k],e),title:H(e),titleAttributes:V(b,e)}}),(function(e){ne&&ee(ne),e.defer?ne=J((function(){re(e,(function(){ne=null}))})):(re(e),ne=null)}),de)((function(){return null})),fe=(a=pe,i=o=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,e.apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.shouldComponentUpdate=function(e){return!f()(this.props,e)},t.prototype.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case v.SCRIPT:case v.NOSCRIPT:return{innerHTML:t};case v.STYLE:return{cssText:t}}throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")},t.prototype.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren,a=e.newChildProps,o=e.nestedChildren;return $({},r,((t={})[n.type]=[].concat(r[n.type]||[],[$({},a,this.mapNestedChildrenToProps(n,o))]),t))},t.prototype.mapObjectTypeChildren=function(e){var t,n,r=e.child,a=e.newProps,o=e.newChildProps,i=e.nestedChildren;switch(r.type){case v.TITLE:return $({},a,((t={})[r.type]=i,t.titleAttributes=$({},o),t));case v.BODY:return $({},a,{bodyAttributes:$({},o)});case v.HTML:return $({},a,{htmlAttributes:$({},o)})}return $({},a,((n={})[r.type]=$({},o),n))},t.prototype.mapArrayTypeChildrenToProps=function(e,t){var n=$({},t);return Object.keys(e).forEach((function(t){var r;n=$({},n,((r={})[t]=e[t],r))})),n},t.prototype.warnOnInvalidChildren=function(e,t){return!0},t.prototype.mapChildrenToProps=function(e,t){var n=this,r={};return l.Children.forEach(e,(function(e){if(e&&e.props){var a=e.props,o=a.children,i=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(e).reduce((function(t,n){return t[M[n]||n]=e[n],t}),t)}(q(a,["children"]));switch(n.warnOnInvalidChildren(e,o),e.type){case v.LINK:case v.META:case v.NOSCRIPT:case v.SCRIPT:case v.STYLE:r=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:r,newChildProps:i,nestedChildren:o});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:i,nestedChildren:o})}}})),t=this.mapArrayTypeChildrenToProps(r,t)},t.prototype.render=function(){var e=this.props,t=e.children,n=q(e,["children"]),r=$({},n);return t&&(r=this.mapChildrenToProps(t,r)),l.createElement(a,r)},U(t,null,[{key:"canUseDOM",set:function(e){a.canUseDOM=e}}]),t}(l.Component),o.propTypes={base:u().object,bodyAttributes:u().object,children:u().oneOfType([u().arrayOf(u().node),u().node]),defaultTitle:u().string,defer:u().bool,encodeSpecialCharacters:u().bool,htmlAttributes:u().object,link:u().arrayOf(u().object),meta:u().arrayOf(u().object),noscript:u().arrayOf(u().object),onChangeClientState:u().func,script:u().arrayOf(u().object),style:u().arrayOf(u().object),title:u().string,titleAttributes:u().object,titleTemplate:u().string},o.defaultProps={defer:!0,encodeSpecialCharacters:!0},o.peek=a.peek,o.rewind=function(){var e=a.rewind();return e||(e=de({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}})),e},i);fe.renderStatic=fe.rewind;const me=function(e){return l.createElement(fe,{...e})}},8775:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});const r=n(6540).createContext(null)},5920:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});const r=n(2831).v},4586:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540),a=n(8775);const o=function(){const e=(0,r.useContext)(a.A);if(null===e)throw new Error("Docusaurus context not provided.");return e}},4599:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function a(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t{"use strict";n.r(t);var r=n(1258),a=n(8193),o=n(5091);(e=>{if(a.A.canUseDOM){const{themeConfig:{prism:{additionalLanguages:t=[]}={}}}=o.default;window.Prism=e,t.forEach((e=>{n(8692)(`./prism-${e}`)})),delete window.Prism}})(r.A)},7929:(e,t,n)=>{"use strict";n.d(t,{zR:()=>E,TM:()=>O,yJ:()=>h,sC:()=>P,AO:()=>m,Fu:()=>g});var r=n(8168);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r=0;p--){var f=i[p];"."===f?o(i,p):".."===f?(o(i,p),d++):d&&(o(i,p),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};function l(e){return e.valueOf?e.valueOf():Object.prototype.valueOf.call(e)}const s=function e(t,n){if(t===n)return!0;if(null==t||null==n)return!1;if(Array.isArray(t))return Array.isArray(n)&&t.length===n.length&&t.every((function(t,r){return e(t,n[r])}));if("object"==typeof t||"object"==typeof n){var r=l(t),a=l(n);return r!==t||a!==n?e(r,a):Object.keys(Object.assign({},t,n)).every((function(r){return e(t[r],n[r])}))}return!1};var u=n(1561);function c(e){return"/"===e.charAt(0)?e:"/"+e}function d(e){return"/"===e.charAt(0)?e.substr(1):e}function p(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function f(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function m(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function h(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.A)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function g(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash&&e.key===t.key&&s(e.state,t.state)}function y(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=h(e,t,p(),w.location);c.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(4363),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||a}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=f(n);a&&a!==m&&e(t,a,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),h=s(n),g=0;g{"use strict";n.r(t)},9931:(e,t,n)=>{"use strict";n.r(t)},1501:(e,t,n)=>{"use strict";n.r(t)},119:(e,t,n)=>{"use strict";n.r(t)},4992:(e,t,n)=>{"use strict";n.r(t)},5947:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,t,n){return en?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),u=o.querySelector(r.barSelector),c=r.speed,d=r.easing;return o.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){s(o,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),l=e?"-100":o(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&f(a),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function u(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=p(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},5228:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(a){return!1}}()?Object.assign:function(e,a){for(var o,i,l=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),s=1;s{"use strict";n.d(t,{A:()=>o});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=d.reach);E+=S.value.length,S=S.next){var x=S.value;if(t.length>e.length)return;if(!(x instanceof a)){var T,C=1;if(b){if(!(T=o(k,E,e,y))||T.index>=e.length)break;var A=T.index,_=T.index+T[0].length,O=E;for(O+=S.value.length;A>=O;)O+=(S=S.next).value.length;if(E=O-=S.value.length,S.value instanceof a)continue;for(var R=S;R!==t.tail&&(O<_||"string"==typeof R.value);R=R.next)C++,O+=R.value.length;C--,x=e.slice(E,O),T.index-=E}else if(!(T=o(k,0,x,y)))continue;A=T.index;var P=T[0],L=x.slice(0,A),N=x.slice(A+P.length),D=E+x.length;d&&D>d.reach&&(d.reach=D);var I=S.prev;if(L&&(I=s(t,I,L),E+=L.length),u(t,I,C),S=s(t,I,new a(p,g?r.tokenize(P,g):P,v,P)),N&&s(t,S,N),C>1){var F={cause:p+","+m,reach:D};i(e,t,n,S.prev,E,F),d&&F.reach>d.reach&&(d.reach=F.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,a={value:n,prev:t,next:r};return t.next=a,r.prev=a,e.length++,a}function u(e,t,n){for(var r=t.next,a=0;a"+o.content+""},r}(),a=r;r.default=r,a.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.languages.markup.doctype.inside["internal-subset"].inside=a.languages.markup,a.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:a.languages[t]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:a.languages[t]};var o={};o[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},a.languages.insertBefore("markup","cdata",o)}}),Object.defineProperty(a.languages.markup.tag,"addAttribute",{value:function(e,t){a.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:a.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,a.languages.xml=a.languages.extend("markup",{}),a.languages.ssml=a.languages.xml,a.languages.atom=a.languages.xml,a.languages.rss=a.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},a.languages.c=a.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),a.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),a.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},a.languages.c.string],char:a.languages.c.char,comment:a.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:a.languages.c}}}}),a.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete a.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(a),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(a),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},a={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:a,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:a})}(a),a.languages.javascript=a.languages.extend("clike",{"class-name":[a.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,a.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:a.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:a.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:a.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),a.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),a.languages.markup&&(a.languages.markup.tag.addInlined("script","javascript"),a.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),a.languages.js=a.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(a),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return"(?:"+a+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(o),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(a),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(//g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+o+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+o+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~))+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(a),a.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:a.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},a.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n0)){var l=p(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s=0&&f(u,"variable-input")}}}}function c(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,a=r.inside["interpolation-punctuation"],o=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var a={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",a),a.tokens=e.tokenize(a.code,a.grammar),e.hooks.run("after-tokenize",a),a.tokens}function u(t){var n={};n["interpolation-punctuation"]=a;var o=e.tokenize(t,n);if(3===o.length){var i=[1,1];i.push.apply(i,s(o[1],e.languages.javascript,"javascript")),o.splice.apply(o,i)}return new e.Token("interpolation",o,r.alias,t)}function c(t,n,r){var a=e.tokenize(t,{interpolation:{pattern:RegExp(o),lookbehind:!0}}),i=0,c={},d=s(a.map((function(e){if("string"==typeof e)return e;for(var n,a=e.content;-1!==t.indexOf(n=l(i++,r)););return c[n]=a,n})).join(""),n,r),p=Object.keys(c);return i=0,function e(t){for(var n=0;n=p.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var a=p[i],o="string"==typeof r?r:r.content,l=o.indexOf(a);if(-1!==l){++i;var s=o.substring(0,l),d=u(c[a]),f=o.substring(l+a.length),m=[];if(s&&m.push(s),m.push(d),f){var h=[f];e(h),m.push.apply(m,h)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var g=r.content;Array.isArray(g)?e(g):e([g])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function p(e){return"string"==typeof e?e:Array.isArray(e)?e.map(p).join(""):p(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,a=n.length;r]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(a),function(e){function t(e,t){return RegExp(e.replace(//g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r*\.{3}(?:[^{}]|)*\})/.source;function o(e,t){return e=e.replace(//g,(function(){return n})).replace(//g,(function(){return r})).replace(//g,(function(){return a})),RegExp(e,t)}a=o(a).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=o(/<\/?(?:[\w.:-]+(?:+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|))?|))**\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:o(//.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:o(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r0&&n[n.length-1].tagName===i(a.content[0].content[1])&&n.pop():"/>"===a.content[a.content.length-1].content||n.push({tagName:i(a.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===a.type&&"{"===a.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===a.type&&"}"===a.content?n[n.length-1].openedBraces--:o=!0),(o||"string"==typeof a)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(a);r0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}a.content&&"string"!=typeof a.content&&l(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(a),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],a=[];/^\w+$/.test(n)||a.push(/\w+/.exec(n)[0]),"diff"===n&&a.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(a),a.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},a.languages.go=a.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),a.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete a.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,l=i.length;-1!==n.code.indexOf(a=t(r,l));)++l;return i[l]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(l){for(var s=0;s=o.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=o[a],d=n.tokenStack[c],p="string"==typeof u?u:u.content,f=t(r,c),m=p.indexOf(f);if(m>-1){++a;var h=p.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),y=p.substring(m+f.length),b=[];h&&b.push.apply(b,i([h])),b.push(g),y&&b.push.apply(b,i([y])),"string"==typeof u?l.splice.apply(l,[s,1].concat(b)):u.content=b}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(a),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(a),a.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},a.languages.webmanifest=a.languages.json,a.languages.less=a.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),a.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),a.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},a.languages.objectivec=a.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete a.languages.objectivec["class-name"],a.languages.objc=a.languages.objectivec,a.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},a.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},a.languages.python["string-interpolation"].inside.interpolation.inside.rest=a.languages.python,a.languages.py=a.languages.python,a.languages.reason=a.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),a.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete a.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(a),a.languages.scss=a.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),a.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),a.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),a.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),a.languages.scss.atrule.inside.rest=a.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(a),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(a),a.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const o=a},6969:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to WebPlatform.org documentation. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (.comment can become .namespace--comment) or replace them with your defined ones (like .editor__comment). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the highlightAll and highlightAllUnder methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},8722:(e,t,n)=>{const r=n(6969),a=n(8380),o=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...o,...Object.keys(Prism.languages)];a(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(3157).resolve(t)],delete Prism.languages[e],n(3157)(t),o.add(e)}))}i.silent=!1,e.exports=i},8692:(e,t,n)=>{var r={"./":8722};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=8692},3157:(e,t,n)=>{var r={"./":8722};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=3157},8380:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n "));var l={},s=e[r];if(s){function u(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in l))for(var i in a(t,o),l[t]=!0,n[t])l[i]=!0}t(s.require,u),t(s.optional,u),t(s.modify,u)}n[r]=l,o.pop()}}return function(e){var t=n[e];return t||(a(e,r),t=n[e]),t}}function a(e){for(var t in e)return!0;return!1}return function(o,i,l){var s=function(e){var t={};for(var n in e){var r=e[n];for(var a in r)if("meta"!=a){var o=r[a];t[a]="string"==typeof o?{title:o}:o}}return t}(o),u=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var a in n={},e){var o=e[a];t(o&&o.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+a+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+a+" because it is a component.");n[t]=a}))}return n[r]||r}}(s);i=i.map(u),l=(l||[]).map(u);var c=n(i),d=n(l);i.forEach((function e(n){var r=s[n];t(r&&r.require,(function(t){t in d||(c[t]=!0,e(t))}))}));for(var p,f=r(s),m=c;a(m);){for(var h in p={},m){var g=s[h];t(g&&g.modify,(function(e){e in d&&(p[e]=!0)}))}for(var y in d)if(!(y in c))for(var b in f(y))if(b in c){p[y]=!0;break}for(var v in m=p)c[v]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,a){var o=a?a.series:void 0,i=a?a.parallel:e,l={},s={};function u(e){if(e in l)return l[e];s[e]=!0;var a,c=[];for(var d in t(e))d in n&&c.push(d);if(0===c.length)a=r(e);else{var p=i(c.map((function(e){var t=u(e);return delete s[e],t})));o?a=o(p,(function(){return r(e)})):r(e)}return l[e]=a}for(var c in n)u(c);var d=[];for(var p in s)d.push(l[p]);return i(d)}(f,c,t,n)}};return w}}();e.exports=t},2694:(e,t,n)=>{"use strict";var r=n(6925);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},5556:(e,t,n)=>{e.exports=n(2694)()},6925:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},2551:(e,t,n)=>{"use strict";var r=n(6540),a=n(5228),o=n(9982);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n