diff --git a/404.html b/404.html new file mode 100644 index 00000000..bf6568f6 --- /dev/null +++ b/404.html @@ -0,0 +1,34 @@ + + + + + + 404 | Gridify + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/assets/app.C7lF4Xwz.js b/assets/app.C7lF4Xwz.js new file mode 100644 index 00000000..9334cd8d --- /dev/null +++ b/assets/app.C7lF4Xwz.js @@ -0,0 +1 @@ +import{U as o,a5 as p,a6 as u,a7 as l,a8 as c,a9 as f,aa as d,ab as m,ac as h,ad as g,ae as A,d as P,u as v,y,x as w,af as C,ag as R,ah as b,a3 as E}from"./chunks/framework.Cmp6zcjC.js";import{R as S}from"./chunks/theme.C7iTWSMT.js";function i(e){if(e.extends){const a=i(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=i(S),T=P({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=v();return y(()=>{w(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&C(),R(),b(),s.setup&&s.setup(),()=>E(s.Layout)}});async function _(){globalThis.__VITEPRESS__=!0;const e=D(),a=x();a.provide(u,e);const t=l(e.route);return a.provide(c,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),s.enhanceApp&&await s.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function x(){return h(T)}function D(){let e=o,a;return g(t=>{let n=A(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=import(n)),o&&(e=!1),r},s.NotFound)}o&&_().then(({app:e,router:a,data:t})=>{a.go().then(()=>{p(a.route,t.site),e.mount("#app")})});export{_ as createApp}; diff --git a/assets/chunks/@localSearchIndexroot.BYg5Nth_.js b/assets/chunks/@localSearchIndexroot.BYg5Nth_.js new file mode 100644 index 00000000..136cdb18 --- /dev/null +++ b/assets/chunks/@localSearchIndexroot.BYg5Nth_.js @@ -0,0 +1 @@ +const e='{"documentCount":105,"nextId":105,"documentIds":{"0":"/Gridify/example/api-controller#using-gridify-in-api-controllers","1":"/Gridify/example/api-controller#describing-the-scenario","2":"/Gridify/example/api-controller#solving-problems-using-gridify","3":"/Gridify/example/api-controller#what-is-the-paging-return-value","4":"/Gridify/example/api-controller#what-is-gridifyquery","5":"/Gridify/example/api-controller#sample-request-query-string","6":"/Gridify/example/api-controller#more-information","7":"/Gridify/guide/autoMapper#automapper","8":"/Gridify/guide/autoMapper#gridifyto","9":"/Gridify/guide/compile#compile-and-reuse","10":"/Gridify/guide/compile#performance","11":"/Gridify/guide/dependency-injection#dependency-injection","12":"/Gridify/guide/dependency-injection#register-gridifymapper-with-di","13":"/Gridify/guide/dependency-injection#_1-define-mapping-profiles","14":"/Gridify/guide/dependency-injection#_2-register-mapping-profiles","15":"/Gridify/guide/dependency-injection#_3-inject-and-use-mappers","16":"/Gridify/guide/extensions#extensions","17":"/Gridify/guide/extensions#applyfiltering","18":"/Gridify/guide/extensions#applyordering","19":"/Gridify/guide/extensions#applypaging","20":"/Gridify/guide/extensions#applyfilteringandordering","21":"/Gridify/guide/extensions#applyorderingandpaging","22":"/Gridify/guide/extensions#applyfilteringorderingpaging","23":"/Gridify/guide/extensions#gridifyqueryable","24":"/Gridify/guide/extensions#gridify","25":"/Gridify/guide/extensions/elasticsearch#elasticsearch","26":"/Gridify/guide/extensions/elasticsearch#gridify-elasticsearch-package","27":"/Gridify/guide/extensions/elasticsearch#installation","28":"/Gridify/guide/extensions/elasticsearch#package-manager","29":"/Gridify/guide/extensions/elasticsearch#net-cli","30":"/Gridify/guide/extensions/elasticsearch#configurations","31":"/Gridify/guide/extensions/elasticsearch#customelasticsearchnamingaction","32":"/Gridify/guide/extensions/elasticsearch#default","33":"/Gridify/guide/extensions/elasticsearch#customized","34":"/Gridify/guide/extensions/elasticsearch#examples-of-usage","35":"/Gridify/guide/extensions/elasticsearch#without-pre-initialized-mapper","36":"/Gridify/guide/extensions/elasticsearch#with-custom-mapping","37":"/Gridify/guide/extensions/elasticsearch#with-customelasticsearchnamingaction-initialized","38":"/Gridify/guide/extensions/entityframework#entity-framework","39":"/Gridify/guide/extensions/entityframework#gridify-entityframework-package","40":"/Gridify/guide/extensions/entityframework#installation","41":"/Gridify/guide/extensions/entityframework#package-manager","42":"/Gridify/guide/extensions/entityframework#net-cli","43":"/Gridify/guide/extensions/entityframework#compatibility-layer","44":"/Gridify/guide/extensions/entityframework#configuration","45":"/Gridify/guide/extensions/entityframework#entityframeworkcompatibilitylayer","46":"/Gridify/guide/extensions/entityframework#enableentityframeworkcompatibilitylayer","47":"/Gridify/guide/extensions/entityframework#disableentityframeworkcompatibilitylayer","48":"/Gridify/guide/extensions/gridify-client#gridify-client-library","49":"/Gridify/guide/extensions/gridify-client#installation","50":"/Gridify/guide/extensions/gridify-client#gridifyquerybuilder","51":"/Gridify/guide/extensions/gridify-client#conditional-operators","52":"/Gridify/guide/extensions/gridify-client#usage-example","53":"/Gridify/guide/filtering#filtering","54":"/Gridify/guide/filtering#conditional-operators","55":"/Gridify/guide/filtering#special-operators","56":"/Gridify/guide/filtering#logical-operators","57":"/Gridify/guide/filtering#case-insensitive-operator-i","58":"/Gridify/guide/filtering#escaping","59":"/Gridify/guide/filtering#using-indexers","60":"/Gridify/guide/filtering#passing-index-key-to-sub-collections-arrays-and-dictionaries","61":"/Gridify/guide/filtering#custom-operators","62":"/Gridify/guide/getting-started#getting-started","63":"/Gridify/guide/getting-started#installation","64":"/Gridify/guide/getting-started#namespace","65":"/Gridify/guide/getting-started#how-to-use","66":"/Gridify/guide/gridifyGlobalConfiguration#gridifyglobalconfiguration","67":"/Gridify/guide/gridifyGlobalConfiguration#general-configurations","68":"/Gridify/guide/gridifyGlobalConfiguration#defaultpagesize","69":"/Gridify/guide/gridifyGlobalConfiguration#casesensitivemapper","70":"/Gridify/guide/gridifyGlobalConfiguration#allownullsearch","71":"/Gridify/guide/gridifyGlobalConfiguration#ignorenotmappedfields","72":"/Gridify/guide/gridifyGlobalConfiguration#disablenullchecks","73":"/Gridify/guide/gridifyGlobalConfiguration#defaultdatetimekind","74":"/Gridify/guide/gridifyGlobalConfiguration#customoperators","75":"/Gridify/guide/gridifyMapper#gridifymapper","76":"/Gridify/guide/gridifyMapper#generatemappings","77":"/Gridify/guide/gridifyMapper#removemap","78":"/Gridify/guide/gridifyMapper#addmap","79":"/Gridify/guide/gridifyMapper#value-convertor","80":"/Gridify/guide/gridifyMapper#hasmap","81":"/Gridify/guide/gridifyMapper#clearmaps","82":"/Gridify/guide/gridifyMapper#getcurrentmaps","83":"/Gridify/guide/gridifyMapper#gridifymapperconfiguration","84":"/Gridify/guide/gridifyMapper#casesensitive","85":"/Gridify/guide/gridifyMapper#ignorenotmappedfields","86":"/Gridify/guide/gridifyMapper#allownullsearch","87":"/Gridify/guide/gridifyMapper#defaultdatetimekind","88":"/Gridify/guide/gridifyMapper#filtering-on-nested-collections","89":"/Gridify/guide/gridifyMapper#defining-mappings-for-indexable-properties","90":"/Gridify/guide/gridifyMapper#mapping-to-array-indexes","91":"/Gridify/guide/gridifyMapper#mapping-to-dictionary-keys","92":"/Gridify/guide/gridifyMapper#generic-overload-for-non-string-dictionary-keys","93":"/Gridify/guide/gridifyMapper#getexpression","94":"/Gridify/guide/gridifyMapper#getlambdaexpression","95":"/Gridify/guide/gridifyQuery#gridifyquery","96":"/Gridify/guide/gridifyQuery#isvalid","97":"/Gridify/guide/gridifyQuery#getfilteringexpression","98":"/Gridify/guide/#introduction","99":"/Gridify/guide/#features","100":"/Gridify/guide/#examples","101":"/Gridify/guide/#performance","102":"/Gridify/guide/ordering#ordering","103":"/Gridify/guide/ordering#order-by-nullable-types","104":"/Gridify/guide/queryBuilder#querybuilder"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[5,1,59],"1":[3,5,99],"2":[4,5,34],"3":[7,5,36],"4":[4,5,17],"5":[4,5,44],"6":[2,5,39],"7":[1,1,50],"8":[2,1,80],"9":[3,1,73],"10":[1,3,46],"11":[2,1,47],"12":[4,2,30],"13":[4,2,56],"14":[4,2,36],"15":[5,2,61],"16":[1,1,43],"17":[1,1,74],"18":[1,1,46],"19":[1,1,35],"20":[1,1,23],"21":[1,1,23],"22":[1,1,24],"23":[1,1,23],"24":[1,1,33],"25":[1,1,14],"26":[3,1,25],"27":[1,1,1],"28":[2,2,7],"29":[3,2,8],"30":[1,1,1],"31":[1,2,34],"32":[1,3,28],"33":[2,3,33],"34":[3,1,1],"35":[4,4,48],"36":[3,4,66],"37":[3,4,96],"38":[2,1,1],"39":[3,2,12],"40":[1,2,1],"41":[2,3,7],"42":[3,3,8],"43":[2,2,55],"44":[1,2,1],"45":[1,3,22],"46":[2,3,8],"47":[2,3,8],"48":[3,1,37],"49":[1,3,18],"50":[1,3,75],"51":[2,3,50],"52":[2,3,66],"53":[1,1,7],"54":[2,1,66],"55":[2,1,1],"56":[2,3,34],"57":[4,3,35],"58":[1,1,60],"59":[2,1,38],"60":[9,3,85],"61":[2,1,106],"62":[2,1,69],"63":[1,2,19],"64":[1,2,18],"65":[3,2,14],"66":[1,1,15],"67":[2,1,1],"68":[1,3,16],"69":[1,3,30],"70":[1,3,39],"71":[1,3,32],"72":[1,3,41],"73":[1,3,44],"74":[1,1,27],"75":[1,1,108],"76":[1,1,81],"77":[1,1,33],"78":[1,1,36],"79":[2,2,44],"80":[1,1,14],"81":[1,1,8],"82":[1,1,8],"83":[1,1,16],"84":[1,2,31],"85":[1,2,42],"86":[1,2,32],"87":[1,2,31],"88":[4,1,60],"89":[5,1,43],"90":[4,6,48],"91":[4,6,48],"92":[7,6,47],"93":[1,1,25],"94":[1,1,22],"95":[1,1,31],"96":[1,1,60],"97":[1,1,39],"98":[1,1,37],"99":[1,1,58],"100":[1,1,22],"101":[1,1,143],"102":[1,1,65],"103":[4,1,49],"104":[1,1,130]},"averageFieldLength":[2.0476190476190483,2.0380952380952397,38.76190476190477],"storedFields":{"0":{"title":"Using Gridify in API Controllers","titles":[]},"1":{"title":"Describing the Scenario","titles":["Using Gridify in API Controllers"]},"2":{"title":"Solving Problems Using Gridify","titles":["Using Gridify in API Controllers"]},"3":{"title":"What is the Paging Return Value?","titles":["Using Gridify in API Controllers"]},"4":{"title":"What is GridifyQuery?","titles":["Using Gridify in API Controllers"]},"5":{"title":"Sample Request Query String","titles":["Using Gridify in API Controllers"]},"6":{"title":"More Information","titles":["Using Gridify in API Controllers"]},"7":{"title":"AutoMapper","titles":[]},"8":{"title":"GridifyTo!","titles":["AutoMapper"]},"9":{"title":"Compile and Reuse","titles":[]},"10":{"title":"Performance","titles":["Compile and Reuse"]},"11":{"title":"Dependency Injection","titles":[]},"12":{"title":"Register GridifyMapper with DI","titles":["Dependency Injection"]},"13":{"title":"1. Define Mapping Profiles","titles":["Dependency Injection"]},"14":{"title":"2. Register Mapping Profiles","titles":["Dependency Injection"]},"15":{"title":"3. Inject and Use Mappers","titles":["Dependency Injection"]},"16":{"title":"Extensions","titles":[]},"17":{"title":"ApplyFiltering","titles":["Extensions"]},"18":{"title":"ApplyOrdering","titles":["Extensions"]},"19":{"title":"ApplyPaging","titles":["Extensions"]},"20":{"title":"ApplyFilteringAndOrdering","titles":["Extensions"]},"21":{"title":"ApplyOrderingAndPaging","titles":["Extensions"]},"22":{"title":"ApplyFilteringOrderingPaging","titles":["Extensions"]},"23":{"title":"GridifyQueryable","titles":["Extensions"]},"24":{"title":"Gridify","titles":["Extensions"]},"25":{"title":"Elasticsearch","titles":[]},"26":{"title":"Gridify.Elasticsearch Package","titles":["Elasticsearch"]},"27":{"title":"Installation","titles":["Elasticsearch"]},"28":{"title":"Package Manager","titles":["Elasticsearch","Installation"]},"29":{"title":".NET CLI","titles":["Elasticsearch","Installation"]},"30":{"title":"Configurations","titles":["Elasticsearch"]},"31":{"title":"CustomElasticsearchNamingAction","titles":["Elasticsearch","Configurations"]},"32":{"title":"Default","titles":["Elasticsearch","Configurations","CustomElasticsearchNamingAction"]},"33":{"title":"Customized:","titles":["Elasticsearch","Configurations","CustomElasticsearchNamingAction"]},"34":{"title":"Examples of usage","titles":["Elasticsearch"]},"35":{"title":"Without pre-initialized mapper","titles":["Elasticsearch","Examples of usage"]},"36":{"title":"With custom mapping","titles":["Elasticsearch","Examples of usage"]},"37":{"title":"With CustomElasticsearchNamingAction initialized","titles":["Elasticsearch","Examples of usage"]},"38":{"title":"Entity Framework","titles":[]},"39":{"title":"Gridify.EntityFramework Package","titles":["Entity Framework"]},"40":{"title":"Installation","titles":["Entity Framework"]},"41":{"title":"Package Manager","titles":["Entity Framework","Installation"]},"42":{"title":".NET CLI","titles":["Entity Framework","Installation"]},"43":{"title":"Compatibility layer","titles":["Entity Framework"]},"44":{"title":"Configuration","titles":["Entity Framework"]},"45":{"title":"EntityFrameworkCompatibilityLayer","titles":["Entity Framework","Configuration"]},"46":{"title":"EnableEntityFrameworkCompatibilityLayer()","titles":["Entity Framework","Configuration"]},"47":{"title":"DisableEntityFrameworkCompatibilityLayer()","titles":["Entity Framework","Configuration"]},"48":{"title":"Gridify Client Library","titles":[]},"49":{"title":"Installation","titles":["Gridify Client Library"]},"50":{"title":"GridifyQueryBuilder","titles":["Gridify Client Library"]},"51":{"title":"Conditional Operators","titles":["Gridify Client Library"]},"52":{"title":"Usage Example","titles":["Gridify Client Library"]},"53":{"title":"Filtering","titles":[]},"54":{"title":"Conditional Operators","titles":["Filtering"]},"55":{"title":"Special Operators","titles":["Filtering"]},"56":{"title":"Logical Operators","titles":["Filtering","Special Operators"]},"57":{"title":"Case Insensitive Operator - /i","titles":["Filtering","Special Operators"]},"58":{"title":"Escaping","titles":["Filtering"]},"59":{"title":"Using Indexers","titles":["Filtering"]},"60":{"title":"Passing Index/Key to Sub-Collections, Arrays, and Dictionaries","titles":["Filtering","Using Indexers"]},"61":{"title":"Custom Operators","titles":["Filtering"]},"62":{"title":"Getting Started","titles":[]},"63":{"title":"Installation","titles":["Getting Started"]},"64":{"title":"Namespace","titles":["Getting Started"]},"65":{"title":"How to use","titles":["Getting Started"]},"66":{"title":"GridifyGlobalConfiguration","titles":[]},"67":{"title":"General configurations","titles":["GridifyGlobalConfiguration"]},"68":{"title":"DefaultPageSize","titles":["GridifyGlobalConfiguration","General configurations"]},"69":{"title":"CaseSensitiveMapper","titles":["GridifyGlobalConfiguration","General configurations"]},"70":{"title":"AllowNullSearch","titles":["GridifyGlobalConfiguration","General configurations"]},"71":{"title":"IgnoreNotMappedFields","titles":["GridifyGlobalConfiguration","General configurations"]},"72":{"title":"DisableNullChecks","titles":["GridifyGlobalConfiguration","General configurations"]},"73":{"title":"DefaultDateTimeKind","titles":["GridifyGlobalConfiguration","General configurations"]},"74":{"title":"CustomOperators","titles":["GridifyGlobalConfiguration"]},"75":{"title":"GridifyMapper","titles":[]},"76":{"title":"GenerateMappings","titles":["GridifyMapper"]},"77":{"title":"RemoveMap","titles":["GridifyMapper"]},"78":{"title":"AddMap","titles":["GridifyMapper"]},"79":{"title":"Value convertor","titles":["GridifyMapper","AddMap"]},"80":{"title":"HasMap","titles":["GridifyMapper"]},"81":{"title":"ClearMaps","titles":["GridifyMapper"]},"82":{"title":"GetCurrentMaps","titles":["GridifyMapper"]},"83":{"title":"GridifyMapperConfiguration","titles":["GridifyMapper"]},"84":{"title":"CaseSensitive","titles":["GridifyMapper","GridifyMapperConfiguration"]},"85":{"title":"IgnoreNotMappedFields","titles":["GridifyMapper","GridifyMapperConfiguration"]},"86":{"title":"AllowNullSearch","titles":["GridifyMapper","GridifyMapperConfiguration"]},"87":{"title":"DefaultDateTimeKind","titles":["GridifyMapper","GridifyMapperConfiguration"]},"88":{"title":"Filtering on Nested Collections","titles":["GridifyMapper"]},"89":{"title":"Defining Mappings for Indexable Properties","titles":["GridifyMapper"]},"90":{"title":"Mapping to Array Indexes","titles":["GridifyMapper","Defining Mappings for Indexable Properties"]},"91":{"title":"Mapping to Dictionary Keys","titles":["GridifyMapper","Defining Mappings for Indexable Properties"]},"92":{"title":"Generic Overload for Non-String Dictionary Keys","titles":["GridifyMapper","Defining Mappings for Indexable Properties"]},"93":{"title":"GetExpression","titles":["GridifyMapper"]},"94":{"title":"GetLambdaExpression","titles":["GridifyMapper"]},"95":{"title":"GridifyQuery","titles":[]},"96":{"title":"IsValid","titles":["GridifyQuery"]},"97":{"title":"GetFilteringExpression","titles":["GridifyQuery"]},"98":{"title":"Introduction","titles":[]},"99":{"title":"Features","titles":["Introduction"]},"100":{"title":"Examples","titles":["Introduction"]},"101":{"title":"Performance","titles":["Introduction"]},"102":{"title":"Ordering","titles":[]},"103":{"title":"Order By Nullable types","titles":["Ordering"]},"104":{"title":"QueryBuilder","titles":[]}},"dirtCount":0,"index":[["71",{"2":{"101":1}}],["722",{"2":{"101":1}}],["7",{"2":{"101":2}}],["734",{"2":{"101":1}}],["736",{"2":{"10":1}}],["74",{"2":{"101":1}}],["76",{"2":{"101":1}}],["`",{"2":{"90":1}}],["64",{"2":{"101":1}}],["649",{"2":{"101":1}}],["66",{"2":{"101":1}}],["61",{"2":{"101":1}}],["637",{"2":{"101":1}}],["62",{"2":{"101":1}}],["65",{"2":{"101":1}}],["6",{"2":{"61":1,"101":3}}],["689",{"2":{"10":1}}],[">",{"2":{"60":1,"90":1}}],["863",{"2":{"101":1}}],["82",{"2":{"101":1}}],["83",{"2":{"101":1}}],["8th",{"2":{"60":1,"90":1}}],["8",{"2":{"60":2,"90":1,"101":7}}],["854",{"2":{"10":1}}],["8594",{"2":{"10":2}}],["|",{"2":{"56":1,"58":7}}],["||",{"2":{"54":1}}],["^",{"2":{"54":4}}],["41",{"2":{"101":1}}],["4",{"2":{"101":3}}],["4000",{"2":{"43":1}}],["45",{"2":{"36":1,"101":1}}],["$1",{"2":{"58":2}}],["$",{"2":{"33":1,"37":1,"54":4}}],["$version",{"2":{"28":1,"29":1,"41":1,"42":1,"63":3}}],["kb",{"2":{"101":6}}],["keys",{"0":{"91":1,"92":1},"2":{"89":1}}],["key",{"0":{"60":1},"2":{"60":4,"91":7,"92":4}}],["keywords",{"2":{"102":2}}],["keyword",{"2":{"32":1,"33":1,"35":1,"36":2,"37":1,"70":1,"86":1}}],["know",{"2":{"1":1}}],["js",{"2":{"62":1,"63":1}}],["json",{"2":{"52":1}}],["jsonget",{"2":{"32":1,"33":1}}],["jo",{"2":{"56":1}}],["john",{"2":{"17":2,"35":1,"36":1,"37":1,"57":4,"60":2,"61":1,"91":1}}],["javascriptlet",{"2":{"58":1}}],["javascript",{"2":{"48":1,"58":1,"62":1,"99":1}}],["just",{"2":{"0":1,"2":1}}],["v0",{"2":{"101":1}}],["v2",{"2":{"59":1,"61":1,"76":2,"89":1}}],["v",{"2":{"58":2,"75":2}}],["versatile",{"2":{"60":1}}],["version",{"2":{"28":1,"29":1,"41":1,"42":1,"59":1,"63":3,"89":1}}],["ve",{"2":{"15":1}}],["void",{"2":{"14":1}}],["validates",{"2":{"104":1}}],["valid",{"2":{"96":3,"104":1}}],["value2",{"2":{"56":1}}],["values",{"2":{"5":1,"54":1,"57":1,"58":1,"79":2,"86":2}}],["value",{"0":{"3":1,"79":1},"2":{"23":1,"32":1,"33":1,"35":1,"36":4,"37":1,"43":2,"50":1,"54":10,"56":1,"57":1,"58":2,"60":1,"61":6,"70":1,"75":1,"76":1,"78":1,"79":3,"87":1,"91":2}}],["valuable",{"2":{"0":1}}],["vahid",{"2":{"43":1}}],["various",{"2":{"101":1}}],["var",{"2":{"7":3,"8":2,"9":8,"15":2,"35":1,"36":2,"37":3,"58":1,"60":1,"76":1,"83":1,"88":1,"90":1,"91":2,"96":1,"97":1,"102":6,"104":1}}],["93",{"2":{"101":1}}],["90",{"2":{"101":1}}],["9",{"2":{"101":3}}],["92",{"2":{"101":2}}],["924",{"2":{"10":1}}],["9297",{"2":{"10":2}}],["984",{"2":{"10":1}}],["57",{"2":{"101":1}}],["59",{"2":{"101":1}}],["599",{"2":{"101":1}}],["53103",{"2":{"101":1}}],["53",{"2":{"101":1}}],["55",{"2":{"101":1}}],["50|name^a",{"2":{"52":1}}],["50",{"2":{"52":1}}],["5",{"2":{"10":2}}],["021",{"2":{"101":1}}],["06",{"2":{"101":1}}],["05",{"2":{"101":1}}],["01",{"2":{"10":1,"101":1}}],["019",{"2":{"10":1}}],["000",{"2":{"10":1}}],["00",{"2":{"10":2,"101":2}}],["001",{"2":{"10":1}}],["008",{"2":{"10":1}}],["0",{"2":{"10":6,"35":1,"36":1,"37":1,"43":2,"59":1,"61":1,"76":3,"89":1,"101":6}}],["ryujit",{"2":{"101":1}}],["robust",{"2":{"60":1}}],["rather",{"2":{"61":1}}],["ratiosd",{"2":{"10":1}}],["ratio",{"2":{"10":1,"101":2}}],["range",{"2":{"59":1}}],["raw",{"2":{"17":1}}],["really",{"2":{"104":1}}],["readonly",{"2":{"15":2}}],["read",{"2":{"6":1}}],["refer",{"2":{"92":1}}],["reference",{"2":{"72":1}}],["remarkable",{"2":{"98":1}}],["remove",{"2":{"104":1}}],["removes",{"2":{"77":1}}],["removemap",{"0":{"77":1},"2":{"75":1,"104":1}}],["removeemptyentries",{"2":{"61":1}}],["remember",{"2":{"5":1}}],["regexmatchoperator>",{"2":{"61":1}}],["regexmatchoperator",{"2":{"61":2}}],["regex",{"2":{"58":2,"61":2}}],["registration",{"2":{"61":1}}],["registrations",{"2":{"14":1}}],["registered",{"2":{"15":1}}],["register",{"0":{"12":1,"14":1},"2":{"11":1,"12":1,"14":1,"61":4,"74":2}}],["registering",{"2":{"11":1,"12":1}}],["retrieve",{"2":{"50":1}}],["returning",{"2":{"1":1}}],["return",{"0":{"3":1},"2":{"1":1,"2":1,"8":2,"15":2,"35":1,"36":1,"61":4,"71":1}}],["returns",{"2":{"1":1,"23":1,"24":1,"82":1,"93":1,"94":1,"96":1,"104":9}}],["reuse",{"0":{"9":1},"1":{"10":1}}],["response",{"2":{"35":2,"36":2,"37":1}}],["res",{"2":{"8":6}}],["result",{"2":{"7":2,"9":3,"15":4,"95":1,"97":1,"104":3}}],["recommend",{"2":{"8":1}}],["records",{"2":{"3":2,"70":1}}],["related",{"2":{"6":1,"69":1,"70":1,"71":1}}],["requires",{"2":{"73":1}}],["required",{"2":{"2":1}}],["request",{"0":{"5":1}}],["replace",{"2":{"58":2}}],["represents",{"2":{"4":1,"13":1,"50":1}}],["repository",{"2":{"1":1,"62":1}}],["336",{"2":{"101":1}}],["321",{"2":{"101":1}}],["32",{"2":{"101":1}}],["329",{"2":{"10":1}}],["38",{"2":{"101":1}}],["36",{"2":{"101":2}}],["30",{"2":{"36":1,"56":2}}],["37",{"2":{"10":1}}],["392",{"2":{"10":1}}],["39",{"2":{"10":1}}],["3",{"0":{"15":1},"2":{"9":1,"19":2,"88":1,"101":1}}],["23",{"2":{"101":1}}],["23660",{"2":{"101":1}}],["22h2",{"2":{"101":1}}],["22621",{"2":{"101":1}}],["2715",{"2":{"101":1}}],["26",{"2":{"101":1}}],["295",{"2":{"101":1}}],["216",{"2":{"101":1}}],["2022update",{"2":{"101":1}}],["20",{"2":{"19":3,"35":2,"36":2,"37":2,"68":1,"95":1,"101":1}}],["2",{"0":{"14":1},"2":{"9":1,"10":2,"52":2,"76":3,"101":5}}],["14",{"2":{"101":1}}],["190",{"2":{"101":1}}],["13",{"2":{"101":4}}],["119",{"2":{"101":1}}],["11",{"2":{"76":1,"101":2}}],["15",{"2":{"59":1,"76":1,"89":1}}],["1564",{"2":{"10":1}}],["12800h",{"2":{"101":1}}],["12th",{"2":{"101":1}}],["124",{"2":{"56":2}}],["123",{"2":{"88":1}}],["12345this",{"2":{"33":1}}],["1234567891011121314151617jsonget",{"2":{"37":1}}],["1234567891011121314151617",{"2":{"35":1,"37":1}}],["12345678910111213141516171819jsonget",{"2":{"36":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041424344",{"2":{"36":1}}],["123456789101112131415161718192021",{"2":{"15":1}}],["123456789101112131415161718csharppublic",{"2":{"15":1}}],["123456789101112131415jsonget",{"2":{"35":1}}],["12345678910",{"2":{"32":1,"33":1}}],["123this",{"2":{"32":1}}],["100",{"2":{"101":1}}],["10",{"2":{"52":2,"60":2,"90":1,"101":2}}],["1",{"0":{"13":1},"2":{"9":1,"10":4,"19":1,"35":1,"36":1,"37":1,"95":1,"101":8}}],["quot",{"2":{"54":24,"56":6,"70":4}}],["queries",{"2":{"25":1,"26":1,"43":1,"48":2,"50":2,"56":1,"58":1,"59":1,"62":1,"89":1,"93":1,"94":1,"98":1,"99":2}}],["queryable",{"2":{"104":3}}],["queryablepaging",{"2":{"7":1,"23":1}}],["querybuilder",{"0":{"104":1},"2":{"9":5,"15":3,"65":1,"102":1,"104":2}}],["query",{"0":{"5":1},"2":{"2":2,"4":1,"5":1,"7":3,"8":6,"15":4,"17":4,"18":3,"19":3,"32":2,"33":2,"35":1,"36":1,"37":1,"43":1,"50":1,"52":3,"54":1,"57":1,"58":1,"78":1,"88":1,"99":2,"102":1,"103":1,"104":5}}],["q",{"2":{"13":4,"84":2,"85":2,"86":2,"87":2,"96":2}}],["qp",{"2":{"7":3}}],["=hn",{"2":{"56":1}}],["=value",{"2":{"54":3}}],["==",{"2":{"17":1,"54":1,"91":1}}],["=>",{"2":{"13":2,"17":1,"18":2,"32":1,"33":2,"35":1,"36":5,"37":2,"54":1,"58":1,"60":2,"61":5,"75":4,"79":2,"84":1,"85":1,"86":1,"87":1,"88":3,"90":1,"91":4,"92":1,"96":1,"103":1}}],["=",{"2":{"7":4,"8":4,"9":9,"13":3,"15":7,"17":3,"18":2,"19":2,"31":1,"32":1,"33":2,"35":6,"36":7,"37":10,"43":2,"52":1,"54":11,"56":2,"57":1,"58":4,"60":5,"61":1,"72":2,"75":1,"76":4,"79":1,"83":5,"84":2,"85":2,"86":2,"87":2,"88":3,"90":3,"91":5,"92":1,"93":1,"94":1,"95":6,"96":17,"97":4,"102":10,"103":4,"104":2}}],["+",{"2":{"7":4}}],["x64",{"2":{"101":1}}],["x",{"2":{"18":4,"36":8,"54":2,"57":1,"102":3,"103":2}}],["x26",{"2":{"5":3}}],["x3c",{"2":{"1":1,"2":1,"3":1,"7":4,"8":13,"9":3,"13":1,"15":8,"32":1,"33":1,"35":1,"36":2,"37":3,"52":1,"60":1,"61":6,"74":1,"75":1,"76":4,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"90":1,"91":2,"92":2,"93":2,"95":1,"96":4,"97":3,"102":1,"104":1}}],["up",{"2":{"76":2}}],["understanding",{"2":{"75":1,"100":1}}],["unspecified",{"2":{"73":1}}],["utilizing",{"2":{"98":1}}],["utilize",{"2":{"14":1}}],["utc",{"2":{"73":1,"87":1}}],["u",{"2":{"43":6}}],["url",{"2":{"5":1}}],["usually",{"2":{"77":1}}],["usage",{"0":{"34":1,"52":1},"1":{"35":1,"36":1,"37":1},"2":{"52":1,"54":1,"56":1,"61":1}}],["us",{"2":{"10":3,"101":18}}],["useemptymapper",{"2":{"104":1}}],["useful",{"2":{"73":1,"104":1}}],["uses",{"2":{"31":1,"73":1}}],["usecustommapper",{"2":{"15":1,"104":1}}],["username",{"2":{"75":4,"79":3}}],["user",{"2":{"1":2,"17":1,"78":1,"99":1}}],["user>",{"2":{"1":1,"2":1,"32":1,"33":1,"35":1,"36":2,"37":1}}],["usercontroller",{"2":{"1":1}}],["users",{"2":{"1":5,"2":1,"32":2,"33":2,"35":2,"36":2,"37":2,"43":1}}],["use",{"0":{"15":1,"65":1},"2":{"1":1,"5":1,"6":1,"7":1,"9":2,"10":1,"16":2,"17":2,"18":1,"19":1,"20":1,"21":1,"22":1,"43":1,"51":1,"57":2,"58":1,"61":1,"62":1,"64":1,"73":1,"77":1,"78":2,"79":2,"88":2,"92":1,"93":1,"94":1,"96":1,"97":1,"98":1,"102":3,"103":3,"104":6}}],["used",{"2":{"0":1,"23":1,"24":1,"87":1,"99":1}}],["using",{"0":{"0":1,"2":1,"59":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"60":1},"2":{"8":1,"9":5,"17":1,"26":1,"49":1,"50":1,"56":1,"61":1,"62":1,"65":3,"66":1,"73":1,"74":1,"75":1,"86":1,"88":1,"89":1,"92":2,"97":1,"100":1}}],["minimal",{"2":{"101":1}}],["mycustomoperator>",{"2":{"74":1}}],["mydictionary",{"2":{"60":1,"91":1,"92":1}}],["myarray",{"2":{"60":1,"90":1}}],["must",{"2":{"36":1,"61":1}}],["multiple",{"2":{"1":1,"9":1,"102":3}}],["most",{"2":{"101":1}}],["mobile",{"2":{"75":2}}],["models",{"2":{"12":1}}],["more",{"0":{"6":1},"2":{"4":1,"6":1,"11":1,"16":1,"17":1,"18":1,"60":1,"62":1,"74":1,"75":1,"92":1,"100":1}}],["manually",{"2":{"104":1}}],["manager",{"0":{"28":1,"41":1}}],["making",{"2":{"98":1}}],["makes",{"2":{"60":1}}],["make",{"2":{"14":1,"16":1,"32":1,"33":1,"43":1,"45":1,"75":1}}],["maxnestingdepth",{"2":{"76":1}}],["matching",{"2":{"61":1}}],["matches",{"2":{"57":1}}],["maps",{"2":{"75":1}}],["map",{"2":{"13":1,"75":1,"104":2}}],["mapped",{"2":{"75":1,"85":1,"96":1}}],["mapperconfig",{"2":{"83":2}}],["mapperwithdepth",{"2":{"76":1}}],["mappers",{"0":{"15":1},"2":{"99":1}}],["mapper",{"0":{"35":1},"2":{"8":4,"13":1,"15":11,"36":1,"37":1,"75":3,"76":3,"77":1,"78":1,"79":1,"80":1,"83":1,"84":2,"85":1,"86":1,"87":1,"88":2,"93":1,"94":1,"96":6,"104":4}}],["mappings",{"0":{"89":1},"1":{"90":1,"91":1,"92":1},"2":{"13":2,"60":1,"69":1,"75":1,"76":7,"77":1,"81":1,"82":1,"84":1,"89":1,"92":1,"104":1}}],["mapping",{"0":{"13":1,"14":1,"36":1,"90":1,"91":1},"2":{"11":2,"12":2,"13":1,"14":1,"15":1,"71":1,"77":1,"78":1,"80":1,"90":1,"91":1,"99":1}}],["maintainable",{"2":{"11":1}}],["massive",{"2":{"9":1}}],["may",{"2":{"1":2,"61":1}}],["mentioning",{"2":{"101":1}}],["mean",{"2":{"10":1,"101":1}}],["methods",{"2":{"6":1,"9":1,"16":3,"26":1,"39":1,"50":2,"64":1,"65":1,"68":1,"75":1,"88":1,"104":2}}],["method",{"2":{"4":1,"8":2,"10":1,"14":1,"17":3,"18":1,"19":1,"20":2,"21":2,"22":2,"24":1,"50":1,"51":1,"74":1,"76":2,"77":2,"78":1,"79":1,"80":1,"81":1,"82":1,"89":1,"92":1,"93":1,"94":1,"96":1,"97":2,"101":1,"104":2}}],["messy",{"2":{"1":1}}],["host",{"2":{"101":1}}],["how",{"0":{"65":1},"2":{"11":1,"31":1,"75":1,"76":1}}],["however",{"2":{"1":1}}],["here",{"2":{"13":1,"60":1,"99":1,"101":1}}],["helpful",{"2":{"58":1}}],["help",{"2":{"7":1}}],["httpget",{"2":{"15":2}}],["http",{"2":{"5":2}}],["handling",{"2":{"60":1}}],["handle",{"2":{"58":1}}],["handles",{"2":{"2":1}}],["hard",{"2":{"17":1}}],["having",{"2":{"9":1,"58":1}}],["have",{"2":{"1":1,"8":3,"17":1,"58":1,"77":1,"88":2,"100":1,"101":1}}],["hasvalue",{"2":{"103":3}}],["hasmap",{"0":{"80":1}}],["has",{"2":{"3":1,"23":1,"26":1,"39":1,"80":1}}],["guid>",{"2":{"92":1}}],["given",{"2":{"71":1,"80":1}}],["global",{"2":{"61":1}}],["gm2",{"2":{"91":1}}],["gm",{"2":{"60":1,"90":1,"91":1,"92":1}}],["greetings",{"2":{"98":1}}],["greater",{"2":{"51":2}}],["greaterthanorequal",{"2":{"51":1,"54":1}}],["greaterthan",{"2":{"51":1,"54":1}}],["group",{"2":{"50":1}}],["grouping",{"2":{"50":1}}],["grid",{"2":{"24":1}}],["gridifygridify",{"2":{"63":1}}],["gridifyglobalconfiguration",{"0":{"66":1},"1":{"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1},"2":{"61":3,"74":1}}],["gridifyasync",{"2":{"39":1}}],["gridifyextension",{"2":{"15":1}}],["gridifycompiled",{"2":{"10":1}}],["gridifytoasync",{"2":{"8":1}}],["gridifyto",{"0":{"8":1},"2":{"8":3}}],["gridifymapperconfiguration",{"0":{"83":1},"1":{"84":1,"85":1,"86":1,"87":1},"2":{"83":1}}],["gridifymapper",{"0":{"12":1,"75":1},"1":{"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1},"2":{"6":2,"11":1,"13":2,"16":1,"36":1,"37":1,"60":1,"69":1,"70":1,"71":1,"75":1,"76":5,"79":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":2,"92":1,"96":1,"104":2}}],["gridifyquerybuilder",{"0":{"50":1},"2":{"50":2,"52":2}}],["gridifyqueryableasync",{"2":{"8":1,"39":1}}],["gridifyqueryable",{"0":{"23":1},"2":{"7":1,"8":1}}],["gridifyquery",{"0":{"4":1,"95":1},"1":{"96":1,"97":1},"2":{"2":1,"4":2,"5":1,"7":2,"8":4,"9":3,"15":2,"16":1,"35":1,"36":1,"37":1,"60":1,"90":1,"91":1,"95":2,"96":6,"97":2,"102":3,"104":1}}],["gridify",{"0":{"0":1,"2":1,"24":1,"26":1,"39":1,"48":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"49":1,"50":1,"51":1,"52":1},"2":{"0":2,"1":1,"2":3,"4":1,"6":1,"7":2,"8":2,"9":2,"10":1,"11":1,"12":1,"14":1,"15":1,"16":3,"25":2,"26":2,"28":1,"29":1,"37":3,"39":1,"41":1,"42":1,"43":1,"48":2,"49":2,"50":1,"52":2,"53":1,"54":1,"58":1,"59":1,"60":2,"61":1,"62":12,"63":4,"64":2,"65":1,"66":1,"71":1,"72":1,"73":2,"75":1,"77":1,"85":1,"86":1,"95":1,"98":1,"99":2,"100":2,"101":4,"102":1,"103":1}}],["gp",{"2":{"35":2}}],["g",{"2":{"31":1,"58":1,"72":1,"103":1}}],["gt",{"2":{"13":1,"15":1,"23":1,"24":1,"31":1,"54":4,"56":1,"60":1,"72":1,"92":1,"103":2}}],["gq",{"2":{"9":2,"35":2,"36":2,"37":2,"60":1,"90":1,"91":1,"95":2,"96":8,"97":2,"102":3}}],["gen",{"2":{"10":2,"101":1}}],["general",{"0":{"67":1},"1":{"68":1,"69":1,"70":1,"71":1,"72":1,"73":1}}],["generates",{"2":{"76":3}}],["generatemappings",{"0":{"76":1},"2":{"75":1,"76":2}}],["generate",{"2":{"25":1,"75":1,"76":3}}],["generated",{"2":{"9":1,"17":1,"45":1,"75":1,"76":1,"77":1,"96":1,"104":1}}],["generic",{"0":{"92":1},"2":{"3":1,"92":1}}],["getlambdaexpression",{"0":{"94":1},"2":{"94":1}}],["getexpression",{"0":{"93":1},"2":{"93":1}}],["getcurrentmaps",{"0":{"82":1}}],["getting",{"0":{"62":1},"1":{"63":1,"64":1,"65":1}}],["getoperator",{"2":{"61":3}}],["getweatherforecasts",{"2":{"15":2}}],["getweatherforecast",{"2":{"15":2}}],["getfilteringexpression",{"0":{"97":1},"2":{"9":2,"97":1}}],["get",{"2":{"3":2,"9":1,"12":1,"15":2,"75":8}}],["getusers",{"2":{"1":1,"2":1,"5":2}}],["dates",{"2":{"73":1,"87":1}}],["datetimekind",{"2":{"73":5,"87":4}}],["database",{"2":{"73":1}}],["data",{"2":{"3":3,"11":1,"17":1,"59":1,"60":1,"88":1,"97":1,"98":1}}],["david",{"2":{"61":1}}],["dynamiclinq",{"2":{"101":1}}],["dynamic",{"2":{"48":1,"50":2,"52":1,"59":1,"62":1,"89":1,"98":1,"101":1}}],["dynamically",{"2":{"17":1}}],["dsl",{"2":{"25":1,"26":1,"99":1}}],["dbset",{"2":{"17":1,"18":1,"19":1,"20":1,"21":1,"22":1}}],["directly",{"2":{"104":1}}],["didn",{"2":{"104":1}}],["dictprop",{"2":{"60":3,"91":2,"92":1}}],["dictionary",{"0":{"91":1,"92":1},"2":{"60":2,"89":1,"91":2,"92":1}}],["dictionaries",{"0":{"60":1},"2":{"59":1,"89":1}}],["disablenullchecks",{"0":{"72":1}}],["disable",{"2":{"70":1,"72":1}}],["disableentityframeworkcompatibilitylayer",{"0":{"47":1}}],["display",{"2":{"1":1}}],["di",{"0":{"12":1},"2":{"11":3,"12":2}}],["documentdbs",{"2":{"99":1}}],["documents",{"2":{"35":1,"36":1}}],["document",{"2":{"31":2,"37":1}}],["documentation",{"2":{"6":1,"16":1}}],["don",{"2":{"8":1,"54":1,"72":1,"75":1,"77":1,"85":1,"86":1,"88":1,"102":1,"104":1}}],["done",{"2":{"8":1}}],["doesn",{"2":{"71":1}}],["does",{"2":{"8":1,"37":1,"51":3}}],["dto",{"2":{"3":1}}],["delimited",{"2":{"102":1}}],["delegate",{"2":{"9":1,"104":4}}],["details",{"2":{"101":1}}],["deep",{"2":{"76":2}}],["depth",{"2":{"76":4}}],["dependency",{"0":{"11":1},"1":{"12":1,"13":1,"14":1,"15":1},"2":{"8":1,"11":1}}],["developing",{"2":{"62":1}}],["demonstrating",{"2":{"52":1}}],["demonstrate",{"2":{"0":1}}],["designed",{"2":{"48":1,"62":1,"98":1}}],["descending",{"2":{"50":3,"102":3}}],["description",{"2":{"50":1,"51":1,"104":1}}],["describes",{"2":{"50":1}}],["describing",{"0":{"1":1}}],["desc",{"2":{"18":1,"52":1,"102":10}}],["defining",{"0":{"89":1},"1":{"90":1,"91":1,"92":1},"2":{"60":1,"89":1}}],["defined",{"2":{"71":1}}],["define",{"0":{"13":1},"2":{"12":1,"13":1,"61":2,"90":1,"91":1}}],["defaultdatetimekind",{"0":{"73":1,"87":1},"2":{"87":1}}],["defaultpagesize",{"0":{"68":1}}],["default",{"0":{"32":1},"2":{"5":1,"31":2,"37":2,"45":1,"50":1,"54":1,"61":1,"66":1,"68":2,"69":2,"70":1,"71":1,"72":2,"73":2,"75":1,"76":1,"84":2,"85":1,"86":1,"87":2,"102":4,"104":1}}],["evaluate",{"2":{"104":4}}],["evaluator",{"2":{"104":2}}],["even",{"2":{"101":1}}],["error",{"2":{"101":1}}],["ease",{"2":{"98":1}}],["easily",{"2":{"56":1}}],["each",{"2":{"7":1,"13":1}}],["empty",{"2":{"54":1,"104":1}}],["emailaddress",{"2":{"31":4,"32":2,"33":2}}],["equality",{"2":{"51":1}}],["equal",{"2":{"51":3,"52":1,"54":1,"69":1,"102":3}}],["equivalent",{"2":{"17":1,"18":1,"19":1,"54":1}}],["esc",{"2":{"58":3}}],["escape",{"2":{"58":2}}],["escapevalue",{"2":{"50":2}}],["escaping",{"0":{"58":1}}],["especially",{"2":{"0":1}}],["effortless",{"2":{"98":1}}],["efficient",{"2":{"1":1}}],["ef",{"2":{"43":2,"61":2}}],["e",{"2":{"31":1,"72":1,"103":1}}],["element",{"2":{"60":1,"90":1}}],["elements",{"2":{"60":1}}],["elastic",{"2":{"26":1,"31":1}}],["elasticsearchgridify",{"2":{"63":1}}],["elasticsearch",{"0":{"25":1,"26":1},"1":{"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1},"2":{"25":2,"26":3,"28":1,"29":1,"31":3,"32":1,"33":1,"37":3,"62":3,"63":1,"99":1}}],["else",{"2":{"1":1}}],["eg",{"2":{"9":3}}],["existing",{"2":{"104":2}}],["expensive",{"2":{"101":1}}],["expression",{"2":{"9":5,"10":1,"43":1,"61":3,"78":2,"93":1,"94":1,"97":4,"102":1,"104":1}}],["expressions",{"2":{"9":1,"45":1,"104":2}}],["exceptional",{"2":{"98":1}}],["exception",{"2":{"85":2}}],["exceptions",{"2":{"71":1,"72":1}}],["extra",{"2":{"23":1}}],["extensionsgridifyqueryquerybuilder",{"2":{"102":1}}],["extensions",{"0":{"16":1},"1":{"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1},"2":{"37":1}}],["extensionsquerybuilder",{"2":{"15":1}}],["extension",{"2":{"6":1,"8":2,"14":1,"16":3,"25":1,"26":1,"64":1,"65":1,"96":1,"97":1,"104":1}}],["examples",{"0":{"34":1,"100":1},"1":{"35":1,"36":1,"37":1},"2":{"100":2}}],["exampledomain",{"2":{"5":2}}],["example",{"0":{"52":1},"2":{"0":1,"7":2,"10":1,"13":1,"14":1,"15":1,"17":1,"52":2,"54":1,"56":1,"57":1,"58":2,"60":2,"61":5,"69":1,"70":1,"73":1,"75":2,"79":1,"85":1,"88":1,"102":3,"103":1}}],["environment",{"2":{"62":1}}],["enumerable",{"2":{"104":4}}],["enum",{"2":{"51":1}}],["enabling",{"2":{"43":1}}],["enableentityframeworkcompatibilitylayer",{"0":{"46":1},"2":{"43":1}}],["enable",{"2":{"43":1}}],["enables",{"2":{"11":1,"45":1,"60":1,"70":1,"99":1}}],["encode",{"2":{"5":1}}],["encoded",{"2":{"5":1}}],["enough",{"2":{"1":1,"61":1}}],["entities",{"2":{"75":2}}],["entityframeworkgridify",{"2":{"63":1}}],["entityframeworkcompatibilitylayer",{"0":{"45":1},"2":{"46":1,"47":1}}],["entityframework",{"0":{"39":1},"2":{"8":1,"39":1,"41":1,"42":1,"45":1,"61":1,"62":2,"63":1}}],["entity",{"0":{"38":1},"1":{"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1},"2":{"1":1,"9":1,"43":2,"45":1,"62":2,"76":1,"99":1}}],["entire",{"2":{"1":1}}],["ends",{"2":{"51":1}}],["endswith",{"2":{"51":1,"54":1}}],["endgroup",{"2":{"50":1,"52":1}}],["end",{"2":{"1":2,"17":1,"50":1,"51":1}}],["l3",{"2":{"88":2}}],["l2",{"2":{"88":2}}],["l1",{"2":{"88":2}}],["later",{"2":{"104":1}}],["lambda",{"2":{"97":1}}],["layer",{"0":{"43":1},"2":{"43":2,"45":1}}],["lastname=value2",{"2":{"56":1}}],["lastname",{"2":{"36":2,"56":1,"75":1,"102":3}}],["lt",{"2":{"13":1,"15":1,"23":1,"24":1,"54":4,"56":1,"92":1}}],["ll",{"2":{"12":1}}],["level1list",{"2":{"88":1}}],["level1>",{"2":{"88":1}}],["level3list",{"2":{"88":1}}],["level2list",{"2":{"88":1}}],["levels",{"2":{"76":1}}],["level",{"2":{"76":4,"88":2}}],["leveraging",{"2":{"48":1}}],["less",{"2":{"51":2}}],["lessthanorequal",{"2":{"51":1,"54":1}}],["lessthan",{"2":{"51":1,"52":1,"54":1}}],["learn",{"2":{"4":1,"6":1,"74":1}}],["let",{"2":{"0":1}}],["lowercase",{"2":{"75":1,"79":1}}],["local",{"2":{"73":1}}],["logic",{"2":{"60":1}}],["logical",{"0":{"56":1},"2":{"50":4,"56":1,"101":1}}],["log",{"2":{"52":1}}],["lot",{"2":{"1":1}}],["look",{"2":{"0":1}}],["libraries",{"2":{"101":1}}],["library",{"0":{"48":1},"1":{"49":1,"50":1,"51":1,"52":1},"2":{"0":1,"8":1,"16":1,"48":3,"49":1,"50":1,"52":1,"62":1,"66":1,"98":1}}],["limits",{"2":{"76":1}}],["limited",{"2":{"0":1}}],["lightweight",{"2":{"48":1,"62":1}}],["linq",{"2":{"17":2,"18":1,"19":1,"54":1,"88":1,"93":1,"94":1,"97":1,"98":2,"99":2,"101":3}}],["lines",{"2":{"2":1}}],["like",{"2":{"9":1,"23":1,"37":1,"51":2,"54":1,"61":1,"72":1,"99":1,"101":1}}],["list",{"2":{"1":6,"81":1,"82":1,"102":1}}],["physical",{"2":{"101":1}}],["phonenumber",{"2":{"75":2}}],["popular",{"2":{"101":1}}],["positive",{"2":{"76":1}}],["postgresql",{"2":{"73":1}}],["policy",{"2":{"37":1}}],["powerful",{"2":{"11":1,"48":1}}],["p",{"2":{"17":2,"31":2,"33":2,"37":2,"54":3,"75":6,"79":2,"103":6}}],["prepared",{"2":{"100":1}}],["prevent",{"2":{"72":1}}],["pre",{"0":{"35":1}}],["private",{"2":{"15":2}}],["provide",{"2":{"100":1}}],["provides",{"2":{"11":1,"25":1,"43":1,"62":1}}],["prop1",{"2":{"88":2}}],["prop",{"2":{"60":1,"61":6,"90":1}}],["properties",{"0":{"89":1},"1":{"90":1,"91":1,"92":1},"2":{"1":1,"3":1,"60":2,"75":2,"76":8,"77":1,"89":1}}],["property1",{"2":{"88":2}}],["property",{"2":{"1":2,"3":2,"31":4,"37":1,"45":1,"46":1,"47":1,"59":1,"60":2,"69":1,"73":1,"74":1,"75":2,"78":1,"87":1,"90":1,"91":1,"96":1,"97":1,"102":1,"103":1}}],["program",{"2":{"14":1}}],["profile",{"2":{"13":1}}],["profiles",{"0":{"13":1,"14":1},"2":{"11":1,"12":1,"13":1,"14":1,"15":1}}],["process",{"2":{"12":1,"98":1}}],["problems",{"0":{"2":1}}],["projectto",{"2":{"7":4,"8":2}}],["projection",{"2":{"7":1,"8":1}}],["projects",{"2":{"0":1}}],["project",{"2":{"0":1,"8":2,"49":1,"62":1}}],["performance",{"0":{"10":1,"101":1},"2":{"9":1,"10":1,"98":1,"101":1}}],["person",{"2":{"75":2,"93":2,"94":1,"96":1}}],["personsrepo",{"2":{"17":2,"18":2,"19":2,"54":2,"57":1,"95":1,"97":1,"102":3,"103":4}}],["persons",{"2":{"9":3,"104":1}}],["person>",{"2":{"7":2,"9":3,"75":1,"76":4,"83":1,"84":1,"85":1,"86":1,"87":1,"95":1,"96":4,"97":1,"102":1,"104":1}}],["persondto>",{"2":{"7":2}}],["personrepo",{"2":{"7":2}}],["please",{"2":{"5":1}}],["particularly",{"2":{"99":1}}],["parsing",{"2":{"73":1,"87":1}}],["parenthesis",{"2":{"56":1}}],["parameterized",{"2":{"43":1}}],["parameter",{"2":{"6":1,"16":1,"50":1,"51":1,"76":2,"78":3,"79":1}}],["parameters",{"2":{"4":1,"50":1}}],["package",{"0":{"26":1,"28":1,"39":1,"41":1},"2":{"8":1,"24":1,"26":1,"28":1,"29":1,"37":1,"39":1,"41":1,"42":1,"62":3,"63":3,"64":2}}],["packages",{"2":{"7":1,"62":1}}],["password",{"2":{"75":3,"85":1}}],["pass",{"2":{"15":1,"51":1,"96":1}}],["passing",{"0":{"60":1},"2":{"5":1,"76":2}}],["passed",{"2":{"4":1,"17":1}}],["paging",{"0":{"3":1},"2":{"2":1,"3":1,"7":3,"8":5,"15":1,"19":1,"21":1,"22":1,"24":2,"68":1,"95":3,"104":9}}],["pagination",{"2":{"0":1,"1":1,"5":1,"23":1,"50":2,"52":1,"98":1,"99":1,"101":1}}],["pagesize",{"2":{"35":1,"36":1,"37":1,"50":1,"52":1,"95":1,"104":1}}],["pagesize=20",{"2":{"5":1}}],["pagesize=100",{"2":{"5":1}}],["page=1",{"2":{"5":2}}],["page",{"2":{"1":1,"3":1,"35":1,"36":1,"37":1,"50":3,"52":1,"68":2,"95":1,"104":1}}],["public",{"2":{"1":1,"3":1,"8":1,"13":1,"14":1,"15":4,"61":6,"75":9,"76":3}}],["birthdate",{"2":{"103":5}}],["brackets",{"2":{"60":1,"89":1,"90":1}}],["backslash",{"2":{"58":1}}],["base",{"2":{"75":1,"104":2}}],["based",{"2":{"0":2,"50":1,"98":1}}],["basic",{"2":{"52":1}}],["bool>>",{"2":{"97":1}}],["boolean",{"2":{"50":1}}],["bool",{"2":{"36":1,"45":1,"69":1,"70":1,"71":1,"72":1,"84":1,"85":1,"86":1,"96":4,"104":1}}],["boost",{"2":{"9":1}}],["b",{"2":{"10":3}}],["bunch",{"2":{"26":1}}],["buildwithqueryablepaging",{"2":{"104":1}}],["buildwithpagingcompiled",{"2":{"104":1}}],["buildwithpaging",{"2":{"104":1}}],["buildevaluator",{"2":{"104":1}}],["builder",{"2":{"43":1,"102":4,"104":2}}],["build",{"2":{"15":1,"50":2,"52":1,"104":4}}],["buildfilteringexpression",{"2":{"9":1,"104":1}}],["buildcompiledevaluator",{"2":{"104":1}}],["buildcompiled",{"2":{"9":3,"104":1}}],["built",{"2":{"8":1,"102":1}}],["but",{"2":{"8":1,"17":1,"23":1,"37":1,"62":1,"75":1,"84":1,"88":1}}],["by",{"0":{"103":1},"2":{"1":2,"9":1,"11":2,"13":1,"17":1,"31":1,"37":2,"60":1,"69":2,"72":2,"73":2,"76":1,"77":1,"84":1,"85":1,"86":1,"87":1,"89":1,"90":1,"102":2,"103":1}}],["benchmarkdotnet",{"2":{"101":1}}],["benchmark",{"2":{"101":2}}],["become",{"2":{"75":1}}],["because",{"2":{"8":1}}],["better",{"2":{"75":1,"100":1}}],["behavior",{"2":{"31":1,"66":1,"69":1,"72":1,"73":1,"84":1,"103":1}}],["behind",{"2":{"2":1}}],["below",{"2":{"16":1,"17":1,"18":1,"19":1,"52":1}}],["bellow",{"2":{"8":1,"54":1}}],["before",{"2":{"5":1,"58":1,"79":2}}],["be",{"2":{"0":1,"1":2,"6":1,"17":1,"23":1,"24":1,"31":2,"37":1,"48":1,"57":1,"58":1,"61":1,"62":1,"76":1,"77":1,"99":1,"102":1,"104":3}}],["cpu",{"2":{"101":1}}],["creation",{"2":{"48":1}}],["createdate",{"2":{"43":1}}],["creates",{"2":{"43":1,"97":1}}],["create",{"2":{"13":1,"56":1,"59":1,"61":1,"62":1,"75":1,"89":1}}],["change",{"2":{"66":1,"69":1,"73":1,"79":1,"84":1,"87":1}}],["character",{"2":{"61":1}}],["characters",{"2":{"58":1,"103":2}}],["challenges",{"2":{"1":1}}],["checks",{"2":{"80":1,"96":1}}],["checking",{"2":{"72":1}}],["check",{"2":{"16":1,"17":1,"18":1,"60":1,"96":1,"104":1}}],["call",{"2":{"76":1}}],["capability",{"2":{"60":1}}],["case",{"0":{"57":1},"2":{"31":1,"37":1,"57":1,"58":1,"61":1,"69":1,"84":2}}],["casesensitivemapper",{"0":{"69":1}}],["casesensitive",{"0":{"84":1},"2":{"13":1,"50":2,"69":1,"83":1,"84":1}}],["camel",{"2":{"31":1,"37":1}}],["can",{"2":{"0":1,"1":2,"2":1,"5":1,"6":1,"7":2,"9":2,"11":1,"13":1,"15":2,"16":1,"17":3,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"37":1,"48":1,"51":2,"56":1,"57":1,"61":1,"64":1,"66":1,"69":1,"70":1,"72":1,"73":1,"74":1,"75":1,"76":2,"78":1,"79":2,"84":1,"87":1,"88":1,"90":1,"91":1,"92":1,"93":1,"94":1,"96":1,"97":1,"99":1,"102":1,"103":3,"104":3}}],["customoperators",{"0":{"74":1},"2":{"61":4,"74":1}}],["custom",{"0":{"36":1,"61":1},"2":{"37":1,"61":2,"74":3,"75":1,"96":2,"99":1}}],["customelasticsearchnamingaction",{"0":{"31":1,"37":1},"1":{"32":1,"33":1},"2":{"33":1,"37":1}}],["customized",{"0":{"33":1},"2":{"37":1}}],["customize",{"2":{"13":1}}],["current",{"2":{"3":1,"50":1,"82":1}}],["clears",{"2":{"81":1}}],["clearmaps",{"0":{"81":1}}],["cleaner",{"2":{"11":1}}],["clr",{"2":{"31":3}}],["cli",{"0":{"29":1,"42":1}}],["clients",{"2":{"26":1,"31":1}}],["client",{"0":{"48":1},"1":{"49":1,"50":1,"51":1,"52":1},"2":{"1":1,"17":1,"26":1,"32":1,"33":1,"35":1,"36":1,"37":1,"48":2,"49":2,"50":1,"52":2,"62":4,"63":2,"99":1}}],["classes",{"2":{"13":1,"16":1,"64":1,"76":3}}],["class",{"2":{"3":1,"4":1,"6":1,"9":1,"13":1,"15":2,"61":1,"66":1,"75":2,"95":1,"104":1}}],["csharppersonsrepo",{"2":{"103":1}}],["csharppublic",{"2":{"2":1,"3":1,"8":1,"13":1,"15":1}}],["csharplambdaexpression",{"2":{"94":1}}],["csharpexpression",{"2":{"93":1}}],["csharpmapper",{"2":{"79":1}}],["csharpclass",{"2":{"61":3}}],["csharpfunc",{"2":{"37":1}}],["csharpgridifyglobalconfiguration",{"2":{"33":1,"43":1}}],["csharpawait",{"2":{"32":1}}],["csharpvar",{"2":{"17":2,"18":2,"19":2,"35":1,"36":1,"54":2,"57":1,"58":1,"60":1,"75":1,"76":3,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"90":1,"91":1,"92":1,"95":1,"96":4,"97":1,"102":1,"103":2,"104":1}}],["csharpusing",{"2":{"14":1,"64":1}}],["csharp",{"2":{"1":1,"7":2,"8":1,"9":3,"58":1,"61":1,"74":1,"75":1,"101":1,"102":2}}],["could",{"2":{"58":1}}],["count",{"2":{"3":2,"7":1,"8":2,"23":1}}],["corresponding",{"2":{"15":1}}],["cores",{"2":{"101":1}}],["core",{"2":{"0":1,"101":1}}],["comma",{"2":{"102":1}}],["coming",{"2":{"100":1}}],["compares",{"2":{"101":1}}],["compatibility",{"0":{"43":1},"2":{"43":2,"45":1}}],["compatible",{"2":{"7":1,"43":1,"45":1,"62":1,"99":3}}],["compilation",{"2":{"99":1}}],["compiles",{"2":{"104":2}}],["compiledexpression",{"2":{"9":4}}],["compiled",{"2":{"9":4,"10":1,"104":2}}],["compile",{"0":{"9":1},"1":{"10":1},"2":{"9":2}}],["component",{"2":{"24":1}}],["completely",{"2":{"7":1,"17":1,"18":1,"19":1,"24":1}}],["complexity",{"2":{"2":1}}],["complex",{"2":{"1":1,"56":1,"58":1,"60":1}}],["com",{"2":{"5":2,"32":2,"33":2}}],["comes",{"2":{"1":1}}],["codedsl",{"2":{"35":1,"36":1,"37":1}}],["code",{"2":{"1":1,"2":1,"11":1,"17":1}}],["collections",{"0":{"60":1,"88":1},"2":{"59":1,"60":1,"72":1,"88":2,"89":1,"99":1,"104":1}}],["collection",{"2":{"0":1,"18":1,"19":1,"20":1,"21":1,"22":1,"90":1,"99":2,"104":3}}],["conversion",{"2":{"99":1}}],["converting",{"2":{"98":1}}],["convertor",{"0":{"79":1},"2":{"78":1}}],["converts",{"2":{"37":1}}],["convert",{"2":{"26":1,"78":1,"79":2}}],["condition",{"2":{"72":1,"104":1}}],["conditionaloperator",{"2":{"51":1,"52":1}}],["conditional",{"0":{"51":1,"54":1},"2":{"58":1}}],["conditions",{"2":{"0":1,"50":2,"104":1}}],["considering",{"2":{"76":1}}],["consider",{"2":{"75":1}}],["considered",{"2":{"69":1}}],["const",{"2":{"52":1}}],["constructor",{"2":{"76":1}}],["constructs",{"2":{"52":1}}],["constructed",{"2":{"50":1}}],["constructing",{"2":{"50":2}}],["construction",{"2":{"48":1}}],["console",{"2":{"17":1,"52":1}}],["configuring",{"2":{"95":1,"104":1}}],["configuredefaultmapper",{"2":{"104":1}}],["configurepaging",{"2":{"104":1}}],["configureservices",{"2":{"14":1}}],["configure",{"2":{"13":1,"104":2}}],["configuration",{"0":{"44":1},"1":{"45":1,"46":1,"47":1},"2":{"13":4,"37":1,"61":1,"66":1}}],["configurations",{"0":{"30":1,"67":1},"1":{"31":1,"32":1,"33":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1},"2":{"11":2}}],["configurationprovider",{"2":{"8":2}}],["concerns",{"2":{"11":1}}],["concepts",{"2":{"0":1}}],["contact",{"2":{"75":6}}],["contain",{"2":{"51":1}}],["container",{"2":{"11":1,"12":1}}],["contains",{"2":{"3":1,"51":2,"54":1,"61":1}}],["controllerbase",{"2":{"15":2}}],["controllers",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1},"2":{"15":1,"100":1}}],["control",{"2":{"6":1,"75":1,"76":2}}],["context",{"2":{"1":2,"2":1,"104":5}}],["ts",{"2":{"62":1,"63":1}}],["tsimport",{"2":{"52":1}}],["tsource>",{"2":{"8":4}}],["tsource",{"2":{"8":2}}],["tweaks",{"2":{"43":1}}],["two",{"2":{"3":1,"7":1,"39":1,"65":1,"88":1}}],["text",{"2":{"98":1}}],["terms",{"2":{"101":1}}],["term",{"2":{"32":1,"33":1,"35":1,"36":4,"37":1}}],["test2",{"2":{"58":2}}],["testclass>",{"2":{"37":1}}],["test",{"2":{"32":4,"33":4,"58":2}}],["temperaturec",{"2":{"13":1}}],["temp",{"2":{"13":1}}],["target",{"2":{"60":4,"90":2,"91":4,"92":2}}],["targettype>",{"2":{"60":1,"90":1,"91":2,"92":1}}],["table",{"2":{"50":1}}],["take",{"2":{"19":1}}],["task",{"2":{"8":1}}],["true",{"2":{"13":2,"37":1,"45":1,"46":1,"50":1,"52":2,"69":1,"70":1,"71":1,"72":1,"76":3,"83":1,"84":1,"85":2,"86":1,"96":2}}],["transfer",{"2":{"3":1}}],["times",{"2":{"9":1}}],["tip",{"2":{"6":1,"16":1,"54":1,"61":1,"62":2,"76":1}}],["tdestination>>",{"2":{"8":1}}],["tdestination>",{"2":{"8":7}}],["t",{"2":{"8":1,"13":2,"15":1,"23":1,"24":1,"54":1,"71":1,"72":1,"75":1,"77":1,"85":1,"86":1,"88":1,"92":1,"97":1,"102":1,"104":2}}],["t>",{"2":{"3":1}}],["third",{"2":{"78":1,"79":1,"88":1}}],["this",{"2":{"1":2,"5":1,"8":2,"10":1,"11":1,"17":2,"18":2,"19":2,"20":2,"21":2,"22":2,"24":2,"45":1,"48":1,"52":1,"54":1,"57":2,"58":1,"59":1,"60":2,"61":1,"62":1,"66":1,"69":2,"70":2,"72":3,"73":3,"74":1,"75":2,"76":4,"77":2,"78":1,"79":1,"80":1,"81":1,"82":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"93":1,"94":1,"96":2,"97":1,"101":1,"103":1}}],["throw",{"2":{"85":2}}],["through",{"2":{"17":1,"61":1}}],["three",{"2":{"62":1}}],["than",{"2":{"51":4,"61":1}}],["that",{"2":{"1":1,"3":1,"4":1,"5":1,"11":1,"23":2,"25":1,"26":1,"37":1,"48":1,"59":1,"61":1,"73":1,"75":1,"77":1,"78":1,"79":1,"89":1,"93":1,"94":1,"96":1,"97":1,"99":1,"101":1,"104":4}}],["thenbydescending",{"2":{"18":1}}],["then",{"2":{"12":1,"61":1}}],["them",{"2":{"5":1,"12":1,"58":1}}],["these",{"2":{"1":1,"7":1,"12":1,"13":1,"16":1,"51":1,"58":1,"92":1,"102":1,"103":1}}],["there",{"2":{"1":1,"62":1,"65":1}}],["the",{"0":{"1":1,"3":1},"2":{"0":3,"1":6,"2":3,"3":6,"4":2,"5":2,"6":3,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":2,"14":3,"15":4,"16":3,"17":8,"18":2,"19":1,"26":1,"31":1,"32":1,"33":1,"37":1,"39":1,"43":4,"45":2,"46":1,"47":1,"48":5,"49":1,"50":13,"51":2,"52":2,"53":1,"54":2,"57":2,"60":4,"61":5,"62":6,"64":3,"65":1,"66":2,"68":2,"70":4,"71":1,"72":1,"73":1,"74":1,"75":8,"76":7,"77":2,"78":7,"79":7,"80":2,"81":1,"85":1,"86":1,"87":1,"88":2,"90":2,"91":2,"92":4,"93":1,"94":1,"96":3,"97":3,"98":1,"101":2,"102":1,"103":3,"104":4}}],["types",{"0":{"103":1},"2":{"103":2}}],["typescript",{"2":{"48":1,"52":1,"62":1,"99":1}}],["typeof",{"2":{"14":1}}],["type",{"2":{"0":1,"13":1,"45":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"84":1,"85":1,"86":1,"87":1,"92":1}}],["top",{"2":{"76":4}}],["tolower",{"2":{"75":1,"79":1}}],["tolistasync",{"2":{"8":1}}],["tolist",{"2":{"1":1,"7":2,"8":1}}],["tostring",{"2":{"61":5}}],["totalsum",{"2":{"36":2}}],["totalorderprice",{"2":{"36":1}}],["totalorderprice=45",{"2":{"36":1}}],["total",{"2":{"1":1,"3":1}}],["tool",{"2":{"0":1,"60":1}}],["to",{"0":{"60":1,"65":1,"90":1,"91":1},"2":{"0":3,"1":8,"4":1,"5":2,"6":3,"8":3,"11":2,"12":1,"13":1,"14":2,"15":1,"16":3,"17":4,"18":2,"19":2,"20":1,"21":1,"22":1,"24":1,"25":1,"26":2,"37":2,"43":2,"45":2,"46":1,"47":1,"48":1,"49":1,"51":2,"54":1,"58":2,"59":1,"61":4,"62":4,"64":1,"65":1,"69":2,"70":2,"71":1,"72":2,"73":2,"74":1,"75":7,"76":8,"77":2,"78":4,"79":4,"85":1,"86":1,"87":1,"88":3,"89":2,"90":1,"91":1,"92":2,"96":2,"97":1,"98":2,"99":2,"100":1,"102":3,"103":3,"104":13}}],["flexible",{"2":{"59":1}}],["fast",{"2":{"99":1}}],["familiar",{"2":{"75":1}}],["facilitates",{"2":{"48":1}}],["false",{"2":{"13":1,"45":1,"47":1,"69":1,"71":1,"72":1,"83":2,"84":1,"85":1,"86":2,"96":4}}],["fkguid",{"2":{"43":1}}],["function",{"2":{"79":1}}],["functions",{"2":{"61":2}}],["functionality",{"2":{"0":1,"62":1,"100":1}}],["func",{"2":{"9":2,"93":1,"97":1}}],["fop",{"2":{"101":1}}],["followed",{"2":{"102":1}}],["follow",{"2":{"12":1}}],["following",{"2":{"0":1,"43":1,"50":1,"53":1,"75":2,"101":1}}],["for",{"0":{"89":1,"92":1},"1":{"90":1,"91":1,"92":1},"2":{"6":1,"7":2,"12":1,"13":1,"16":1,"17":3,"18":1,"23":1,"37":1,"50":4,"52":1,"54":1,"57":1,"59":1,"60":3,"61":2,"62":2,"68":1,"69":1,"70":4,"71":1,"73":1,"76":6,"80":1,"85":2,"86":1,"92":1,"95":1,"96":1,"103":2,"104":4}}],["friendly",{"2":{"99":1}}],["freetextoperator>",{"2":{"61":1}}],["freetextoperator",{"2":{"61":2}}],["freetext",{"2":{"61":2}}],["from",{"2":{"13":1,"31":1,"35":1,"36":1,"37":1,"43":1,"52":1,"59":1,"77":1,"89":1,"99":2,"104":1}}],["fromquery",{"2":{"2":1,"15":2}}],["framework",{"0":{"38":1},"1":{"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1},"2":{"1":1,"9":1,"43":2,"45":1,"62":2,"99":1}}],["felipe",{"2":{"61":1}}],["feature",{"2":{"11":1,"59":1,"79":1,"101":1}}],["features",{"0":{"99":1},"2":{"1":1,"2":1,"37":1,"43":1,"48":1,"99":1,"101":1}}],["fetching",{"2":{"1":1}}],["few",{"2":{"1":1,"2":1,"100":1}}],["five",{"2":{"58":1}}],["firstname=",{"2":{"56":1}}],["firstname=value",{"2":{"56":1}}],["firstname=john",{"2":{"35":1,"37":1,"57":1,"95":1}}],["firstname",{"2":{"35":1,"36":2,"37":1,"56":2,"75":1,"102":3}}],["first",{"2":{"16":1,"78":1}}],["filters",{"2":{"26":1,"60":2,"90":1,"91":1}}],["filter=age>10",{"2":{"5":1}}],["filter",{"2":{"1":1,"9":1,"17":1,"35":1,"36":1,"37":1,"52":1,"60":1,"88":1,"90":1,"91":1,"95":2,"96":6,"97":3}}],["filtering",{"0":{"53":1,"88":1},"1":{"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1},"2":{"0":1,"6":2,"7":3,"8":1,"17":2,"20":1,"22":1,"24":1,"50":1,"52":1,"53":1,"59":1,"60":2,"70":1,"71":1,"75":1,"77":1,"79":2,"88":1,"89":1,"92":1,"95":1,"98":1,"99":1,"101":2,"104":8}}],["fieldname",{"2":{"54":12}}],["fields",{"2":{"6":1,"17":1,"37":1}}],["field",{"2":{"0":1,"31":3,"50":3,"70":1,"71":1,"72":2,"75":3,"78":1,"80":1,"85":1,"102":1}}],["i7",{"2":{"101":1}}],["id",{"2":{"43":1,"102":12,"104":1}}],["iqueriable",{"2":{"17":1,"18":1}}],["iqueryable",{"2":{"8":2,"15":1,"16":1,"19":1,"20":1,"21":1,"22":1}}],["igridifyoperator",{"2":{"61":4}}],["igridifymapper",{"2":{"8":2,"15":5}}],["igridifyquery",{"2":{"8":2,"20":1,"21":1,"22":1,"24":1}}],["ignorenotmappedfields",{"0":{"71":1,"85":1},"2":{"13":1,"71":1,"83":1,"85":1}}],["ignore",{"2":{"5":1,"75":1,"77":1}}],["i",{"0":{"57":1},"2":{"8":1,"49":1,"57":2,"58":4,"63":1}}],["if",{"2":{"1":2,"6":2,"8":2,"9":2,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"31":2,"37":1,"43":1,"50":1,"54":1,"58":1,"61":1,"62":2,"70":1,"71":1,"75":1,"79":1,"80":1,"84":1,"88":1,"92":1,"96":2,"102":1,"104":2}}],["ienumerable",{"2":{"1":1,"3":1,"15":1,"16":1}}],["impact",{"2":{"101":1}}],["improved",{"2":{"11":1}}],["improvement",{"2":{"10":1}}],["implements",{"2":{"61":1}}],["implement",{"2":{"2":1}}],["implementation",{"2":{"0":1}}],["implementing",{"2":{"0":1,"1":1}}],["imapper",{"2":{"8":2}}],["imagine",{"2":{"1":1}}],["its",{"2":{"88":1,"102":3}}],["it",{"2":{"0":1,"9":1,"23":1,"24":1,"37":2,"43":2,"49":1,"61":1,"62":1,"76":1,"93":1,"94":1,"97":1,"98":2,"101":1}}],["isvalid",{"0":{"96":1},"2":{"96":8,"104":1}}],["ismatch",{"2":{"61":1}}],["isactive=true",{"2":{"52":1}}],["isactive",{"2":{"52":1}}],["iservicecollection",{"2":{"14":2}}],["is",{"0":{"3":1,"4":1},"2":{"0":1,"1":3,"3":1,"4":1,"5":1,"7":1,"10":1,"12":1,"17":1,"18":1,"19":1,"24":2,"25":1,"48":1,"50":3,"52":1,"54":2,"59":1,"62":1,"68":1,"71":1,"73":1,"75":2,"76":1,"78":3,"84":1,"85":1,"92":1,"95":1,"96":5,"98":1,"101":2,"104":1}}],["inoperator>",{"2":{"61":1}}],["inoperator",{"2":{"61":2}}],["including",{"2":{"59":1,"76":1}}],["include",{"2":{"14":1}}],["instead",{"2":{"62":1}}],["installing",{"2":{"64":1}}],["install",{"2":{"49":1,"62":2}}],["installation",{"0":{"27":1,"40":1,"49":1,"63":1},"1":{"28":1,"29":1,"41":1,"42":1}}],["installed",{"2":{"8":1}}],["instance",{"2":{"6":1,"85":1}}],["insensitive",{"0":{"57":1},"2":{"57":1,"58":1,"69":1,"84":1}}],["inequality",{"2":{"51":1}}],["initialized",{"0":{"35":1,"37":1}}],["indexes",{"0":{"90":1},"2":{"89":1,"99":1}}],["indexers",{"0":{"59":1},"1":{"60":1},"2":{"92":1}}],["indexable",{"0":{"89":1},"1":{"90":1,"91":1,"92":1},"2":{"59":1,"60":1,"89":1}}],["index",{"0":{"60":1},"2":{"32":1,"33":1,"35":1,"36":1,"37":1,"60":3,"90":4}}],["indicates",{"2":{"3":1}}],["inferred",{"2":{"31":3}}],["information",{"0":{"6":1},"2":{"16":1,"17":1,"18":1,"60":1,"92":1}}],["inputs",{"2":{"78":1}}],["input",{"2":{"17":1,"79":1}}],["inject",{"0":{"15":1},"2":{"15":1}}],["injection",{"0":{"11":1},"1":{"12":1,"13":1,"14":1,"15":1},"2":{"11":1}}],["inheriting",{"2":{"13":1}}],["introduction",{"0":{"98":1},"1":{"99":1,"100":1,"101":1}}],["into",{"2":{"15":1,"49":1,"98":1}}],["intel",{"2":{"101":1}}],["integrate",{"2":{"49":1}}],["integrated",{"2":{"48":1}}],["integrating",{"2":{"11":1}}],["interestingly",{"2":{"101":1}}],["interface",{"2":{"50":2,"61":1}}],["interfaces",{"2":{"15":1}}],["internally",{"2":{"75":1}}],["internal",{"2":{"43":1}}],["int",{"2":{"3":1,"23":1,"68":1,"75":1}}],["in",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1},"2":{"0":2,"1":2,"2":1,"8":2,"11":1,"12":1,"17":1,"24":1,"50":2,"52":1,"58":1,"60":3,"61":4,"62":3,"70":1,"71":1,"75":4,"76":2,"78":1,"79":1,"85":1,"88":1,"90":1,"91":3,"93":1,"94":1,"97":1,"100":1,"101":4,"104":1}}],["own",{"2":{"61":1,"74":1}}],["operation",{"2":{"79":2}}],["operations",{"2":{"62":1,"70":1,"71":1}}],["operatorhandler",{"2":{"61":3}}],["operatorparameter>",{"2":{"61":3}}],["operator",{"0":{"57":1},"2":{"50":3,"51":1,"54":1,"56":1,"57":2,"58":1,"61":2,"74":1}}],["operators",{"0":{"51":1,"54":1,"55":1,"56":1,"61":1},"1":{"56":1,"57":1},"2":{"17":1,"51":2,"53":1,"54":1,"56":1,"58":1,"61":3,"74":2,"99":1}}],["op",{"2":{"52":4}}],["option",{"2":{"70":2,"72":1,"73":1}}],["optional",{"2":{"50":1,"78":1}}],["optionally",{"2":{"13":1,"96":1}}],["optimization",{"2":{"43":1}}],["optimized",{"2":{"24":1}}],["outperforms",{"2":{"101":1}}],["output",{"2":{"52":1}}],["out",{"2":{"16":1,"17":1,"18":1,"60":1}}],["overload",{"0":{"92":1},"2":{"92":1}}],["over",{"2":{"76":1}}],["overview",{"2":{"11":1}}],["overheads",{"2":{"9":1}}],["object>>",{"2":{"93":1}}],["objects",{"2":{"16":1,"99":1}}],["object",{"2":{"3":1,"16":1,"24":1,"99":1,"104":1}}],["other",{"2":{"1":2,"7":1,"14":1,"101":1}}],["offers",{"2":{"11":1,"62":1,"98":1}}],["of",{"0":{"34":1},"1":{"35":1,"36":1,"37":1},"2":{"0":2,"1":6,"3":1,"9":2,"11":2,"16":1,"25":1,"26":1,"37":1,"48":3,"50":1,"51":1,"52":1,"59":1,"60":2,"62":1,"66":1,"74":1,"75":1,"76":3,"78":1,"79":1,"81":1,"82":1,"88":1,"90":1,"92":1,"96":1,"98":2,"99":1,"100":1,"101":1,"102":1}}],["orms",{"2":{"72":1,"99":1}}],["orm",{"2":{"9":1}}],["ordered",{"2":{"102":1}}],["order",{"0":{"103":1},"2":{"35":1,"36":3,"37":1,"50":1,"103":1}}],["orderby",{"2":{"18":1,"35":1,"36":1,"37":1,"52":1,"95":1,"96":5,"102":3,"103":3,"104":1}}],["orderby=firstname",{"2":{"5":1}}],["orderings",{"2":{"102":3}}],["ordering",{"0":{"102":1},"1":{"103":1},"2":{"6":2,"7":1,"8":1,"18":2,"20":1,"21":1,"22":1,"24":1,"50":2,"52":1,"71":1,"77":1,"95":1,"102":5,"104":7}}],["or",{"2":{"0":1,"1":3,"6":1,"9":1,"15":1,"17":3,"18":1,"19":1,"20":1,"21":1,"22":1,"50":2,"51":2,"52":1,"54":1,"56":1,"60":1,"61":1,"62":1,"73":1,"75":1,"76":1,"77":1,"89":1,"90":1,"91":1,"96":2,"102":1,"103":1,"104":2}}],["one",{"2":{"24":1}}],["once",{"2":{"15":1}}],["only",{"2":{"7":1,"8":1,"9":3,"17":1,"18":1,"19":1,"57":1,"76":1,"88":1,"103":1}}],["on",{"0":{"88":1},"2":{"0":1,"3":1,"14":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"48":1,"50":1,"59":1,"60":3,"62":1,"72":1,"75":1,"86":1,"89":1,"90":1,"91":1,"92":1,"101":1,"103":1}}],["npgsql",{"2":{"73":1}}],["npm",{"2":{"49":1}}],["nhibernate",{"2":{"72":1}}],["nonexist",{"2":{"96":1}}],["nonexist=john",{"2":{"96":1}}],["non",{"0":{"92":1}}],["no",{"2":{"68":1,"76":1}}],["notable",{"2":{"99":1}}],["notlike",{"2":{"54":1}}],["notstartswith",{"2":{"51":1,"54":1}}],["notcontains",{"2":{"51":1,"54":1}}],["notendswith",{"2":{"51":1,"54":1}}],["notequal",{"2":{"51":1,"54":1}}],["note",{"2":{"5":1}}],["not",{"2":{"0":1,"1":2,"5":1,"8":1,"9":1,"37":1,"51":4,"61":1,"70":1,"71":1,"85":2,"92":1,"96":3,"104":1}}],["nvarchar",{"2":{"43":1}}],["native",{"2":{"101":2}}],["nativelinq",{"2":{"10":1}}],["navprop",{"2":{"91":1}}],["navigationproperty",{"2":{"91":1}}],["navigation",{"2":{"76":1,"91":1}}],["namingaction",{"2":{"37":2}}],["naming",{"2":{"37":1}}],["nameof",{"2":{"75":1,"93":1,"94":1}}],["name=null",{"2":{"70":1}}],["name=",{"2":{"54":1,"96":1}}],["name=john",{"2":{"9":3,"36":1,"69":2,"96":2,"97":1,"104":1}}],["name",{"2":{"1":2,"15":2,"17":2,"18":2,"31":2,"36":1,"43":2,"52":3,"54":3,"56":1,"60":3,"61":1,"70":1,"78":1,"80":1,"85":1,"91":2,"93":1,"94":1,"96":2,"103":1}}],["namespace",{"0":{"64":1},"2":{"14":1,"64":1}}],["names",{"2":{"0":1,"31":3,"37":1,"75":2,"102":1}}],["nuget",{"2":{"62":1}}],["nullable",{"0":{"103":1},"2":{"103":3}}],["null",{"2":{"8":2,"31":1,"54":2,"70":4,"72":3,"73":1,"86":2,"87":1}}],["number",{"2":{"1":1,"3":1,"50":3}}],["nicely",{"2":{"7":1}}],["n",{"2":{"1":1,"43":1,"91":4}}],["nesting",{"2":{"76":4,"88":1}}],["nested",{"0":{"88":1},"2":{"72":1,"76":3,"88":2,"99":1}}],["nestedfiltering",{"2":{"37":1}}],["next",{"2":{"32":1,"33":1}}],["necessary",{"2":{"14":1,"37":1,"62":1}}],["new",{"2":{"7":1,"8":2,"9":3,"15":1,"35":1,"36":2,"37":2,"52":1,"60":3,"75":1,"76":4,"83":2,"84":1,"85":1,"86":1,"87":1,"88":1,"90":2,"91":3,"92":1,"95":1,"96":5,"97":1,"102":4,"104":2}}],["need",{"2":{"0":1,"1":3,"61":3,"62":1,"70":1,"79":1,"84":1,"88":1,"102":1,"103":1}}],["net",{"0":{"29":1,"42":1},"2":{"0":3,"26":1,"101":2}}],["sdk",{"2":{"101":1}}],["same",{"2":{"62":1}}],["sample",{"0":{"5":1},"2":{"75":1}}],["speed",{"2":{"101":1}}],["special",{"0":{"55":1},"1":{"56":1,"57":1},"2":{"58":1,"103":1}}],["specific",{"2":{"73":1,"75":1,"89":1,"90":1,"91":1}}],["specified",{"2":{"68":1,"76":1}}],["specifies",{"2":{"31":1}}],["specifying",{"2":{"60":1,"90":1}}],["specify",{"2":{"54":1,"76":1,"92":1}}],["split",{"2":{"61":1}}],["square",{"2":{"60":1,"89":1,"90":1}}],["sqldeclare",{"2":{"43":1}}],["smith",{"2":{"36":1}}],["shellnpm",{"2":{"49":1,"63":1}}],["shelldotnet",{"2":{"29":1,"42":1,"63":3}}],["shellinstall",{"2":{"28":1,"41":1}}],["should",{"2":{"9":1,"43":1,"57":1,"58":1,"62":1}}],["skip",{"2":{"19":1}}],["scripting",{"2":{"101":1}}],["scan",{"2":{"14":1}}],["scenes",{"2":{"2":1}}],["scenario",{"0":{"1":1}}],["sensitive",{"2":{"84":1}}],["see",{"2":{"74":1}}],["second",{"2":{"51":1,"78":1}}],["section",{"2":{"11":1,"17":1,"18":1}}],["server",{"2":{"48":1,"62":1}}],["serviceprovidercaching",{"2":{"43":1}}],["service",{"2":{"14":1}}],["services",{"2":{"14":2,"15":1}}],["seamlessly",{"2":{"48":1}}],["searching",{"2":{"85":1,"86":1}}],["searches",{"2":{"57":1,"58":1,"70":1}}],["search",{"2":{"32":1,"33":1,"35":1,"36":1,"37":1,"54":1,"57":1,"70":1,"75":1,"79":1}}],["searchasync",{"2":{"32":1,"33":1,"35":1,"36":1,"37":1}}],["selectmany",{"2":{"88":3}}],["selector",{"2":{"78":1,"93":2,"94":2}}],["select",{"2":{"43":1,"88":2,"91":1}}],["separation",{"2":{"11":1}}],["setup",{"2":{"104":1}}],["setpagesize",{"2":{"50":1,"52":1}}],["setpage",{"2":{"50":1,"52":1}}],["sets",{"2":{"46":1,"47":1}}],["setting",{"2":{"45":1,"69":1,"72":1,"73":1,"85":1,"86":1,"87":1}}],["set",{"2":{"3":2,"50":2,"75":7,"76":1}}],["sunvalley2",{"2":{"101":1}}],["such",{"2":{"89":1}}],["sub",{"0":{"60":1},"2":{"59":1,"60":1,"89":1,"90":1,"99":1}}],["surname",{"2":{"36":1}}],["surname=smith",{"2":{"36":1}}],["sure",{"2":{"6":1,"14":1,"16":1,"75":1}}],["summary",{"2":{"13":2}}],["supports",{"2":{"53":1,"59":1,"89":1,"99":6}}],["supported",{"2":{"6":1,"17":1,"51":1,"77":1}}],["support",{"2":{"1":1,"37":1,"43":1,"72":1,"75":1,"103":1}}],["syntax",{"2":{"6":1}}],["stddev",{"2":{"101":1}}],["starting",{"2":{"59":1,"89":1}}],["starts",{"2":{"51":1}}],["startswith",{"2":{"51":1,"52":1,"54":1}}],["start",{"2":{"50":1,"51":1,"61":1,"65":1}}],["startgroup",{"2":{"50":1,"52":1}}],["started",{"0":{"62":1},"1":{"63":1,"64":1,"65":1},"2":{"12":1}}],["static",{"2":{"8":2,"64":1}}],["statements",{"2":{"1":1}}],["steps",{"2":{"12":1}}],["structures",{"2":{"59":1,"60":1}}],["straightforward",{"2":{"12":1}}],["streamline",{"2":{"11":1}}],["string>",{"2":{"37":1}}],["stringsplitoptions",{"2":{"61":1}}],["strings",{"2":{"5":1,"98":1,"99":2}}],["string",{"0":{"5":1,"92":1},"2":{"0":1,"17":1,"37":1,"50":1,"51":6,"54":1,"57":1,"61":3,"70":2,"75":6,"78":1,"92":1,"104":2}}],["store",{"2":{"9":1}}],["storing",{"2":{"9":1}}],["soon",{"2":{"100":1}}],["some",{"2":{"72":1,"77":1,"99":1}}],["sometimes",{"2":{"61":1,"75":1,"103":1}}],["solving",{"0":{"2":1}}],["so",{"2":{"1":1}}],["sort",{"2":{"1":1,"35":1,"36":1,"37":1,"95":1}}],["sortings",{"2":{"26":1}}],["sorting",{"2":{"0":1,"7":1,"75":1,"98":1,"99":1,"101":1}}],["single",{"2":{"104":2}}],["sieve",{"2":{"101":1}}],["similarly",{"2":{"91":1}}],["simply",{"2":{"46":1,"47":1}}],["simplify",{"2":{"2":1,"48":1,"98":1}}],["simple",{"2":{"0":1,"95":1}}],["size",{"2":{"1":1,"35":1,"36":1,"37":1,"50":1,"68":2}}],["side",{"2":{"1":1,"48":2,"62":2}}],["s",{"2":{"0":1,"32":2,"33":2,"35":2,"36":2,"37":4,"60":1,"62":1,"89":1,"100":1,"101":1}}],["your",{"2":{"1":1,"2":1,"5":1,"8":2,"11":3,"12":1,"13":2,"14":1,"15":1,"48":1,"49":1,"58":1,"60":1,"61":1,"62":1,"74":1,"75":2,"79":1,"88":1,"92":1,"104":1}}],["you",{"2":{"0":1,"1":6,"2":1,"5":1,"6":3,"8":3,"9":6,"10":1,"11":2,"12":1,"13":2,"15":3,"16":1,"17":2,"18":2,"19":2,"20":2,"21":2,"22":2,"43":2,"54":1,"57":1,"58":2,"59":1,"61":6,"62":3,"64":1,"66":1,"69":1,"70":2,"72":1,"73":2,"74":1,"75":2,"76":2,"77":3,"78":3,"79":3,"84":2,"87":1,"88":3,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"96":1,"97":1,"102":2,"103":3,"104":2}}],["avx2",{"2":{"101":1}}],["available",{"2":{"14":1,"50":2,"62":1,"101":1}}],["amp",{"2":{"72":2}}],["arguments",{"2":{"76":1}}],["array",{"0":{"90":1},"2":{"60":1,"90":2}}],["arrayprop",{"2":{"60":3,"90":2}}],["arrays",{"0":{"60":1},"2":{"59":1,"60":1,"89":1}}],["are",{"2":{"1":1,"5":1,"6":1,"8":2,"9":1,"31":1,"50":1,"61":2,"62":3,"65":1,"69":2,"75":1,"89":1,"99":1,"104":1}}],["after",{"2":{"54":1,"57":2,"58":1,"64":1,"77":1,"103":1}}],["advanced",{"2":{"37":1}}],["address",{"2":{"75":4}}],["added",{"2":{"61":1,"76":2}}],["addorderby",{"2":{"50":1,"52":1,"102":3,"104":2}}],["additional",{"2":{"39":1}}],["adds",{"2":{"16":1,"72":1,"78":1,"104":2}}],["addquery",{"2":{"15":1,"104":1}}],["addgridifymappers",{"2":{"14":2}}],["addmapper",{"2":{"104":1}}],["addmap",{"0":{"78":1},"1":{"79":1},"2":{"13":2,"36":4,"60":2,"75":3,"79":2,"88":1,"89":1,"90":1,"91":2,"92":2,"96":1,"104":1}}],["addcondition",{"2":{"9":2,"50":1,"51":1,"52":3,"104":2}}],["add",{"2":{"1":1,"8":1,"29":1,"42":1,"50":4,"58":1,"63":3,"74":1,"102":1,"104":1}}],["auto",{"2":{"75":1,"96":1,"104":1}}],["autogeneratemappings",{"2":{"37":1}}],["automapper",{"0":{"7":1},"1":{"8":1},"2":{"7":4,"8":6,"99":1}}],["above",{"2":{"75":1,"79":1,"85":1}}],["about",{"2":{"4":1,"6":1,"74":1}}],["ability",{"2":{"25":1}}],["actions",{"2":{"77":1}}],["actual",{"2":{"75":1}}],["achieve",{"2":{"11":1,"103":1}}],["access",{"2":{"9":1,"51":1,"64":1}}],["accepts",{"2":{"20":1,"21":1,"22":1,"24":1,"79":1,"104":2}}],["accept",{"2":{"6":1,"16":1}}],["await",{"2":{"8":2,"33":1,"35":1,"36":1,"37":1}}],["assumes",{"2":{"102":1}}],["associated",{"2":{"60":1,"91":1}}],["assembly",{"2":{"14":2}}],["ascending",{"2":{"50":1,"102":4}}],["asc",{"2":{"35":1,"36":1,"37":1,"102":10}}],["asqueryable",{"2":{"16":1}}],["async",{"2":{"8":1}}],["as",{"2":{"6":1,"16":1,"31":2,"43":1,"52":1,"62":1,"89":1}}],["asp",{"2":{"0":2}}],["alternative",{"2":{"76":1}}],["alternatively",{"2":{"5":1}}],["alongside",{"2":{"9":1}}],["always",{"2":{"5":1,"17":1,"75":1}}],["alloc",{"2":{"101":1}}],["allocated",{"2":{"10":1,"101":1}}],["allows",{"2":{"59":1,"89":1,"99":1}}],["allow",{"2":{"26":1,"86":1}}],["allownullsearch",{"0":{"70":1,"86":1},"2":{"13":1,"70":1,"83":1,"86":1}}],["all",{"2":{"2":1,"6":1,"8":1,"14":1,"16":1,"24":1,"37":1,"70":1,"104":1}}],["also",{"2":{"1":1,"7":1,"9":1,"37":1,"62":1}}],["age=30",{"2":{"36":1}}],["age",{"2":{"1":2,"18":2,"35":2,"36":5,"37":2,"52":2,"56":2,"95":1,"96":5,"104":1}}],["at",{"2":{"0":1}}],["another",{"2":{"76":1}}],["an",{"2":{"1":1,"9":2,"11":1,"16":1,"17":2,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":2,"60":2,"61":1,"75":1,"78":1,"85":2,"90":2,"98":1,"104":5}}],["and",{"0":{"9":1,"15":1,"60":1},"1":{"10":1},"2":{"0":1,"1":1,"2":1,"5":2,"6":1,"7":2,"8":1,"11":2,"12":1,"14":1,"16":1,"20":1,"21":1,"22":2,"24":2,"26":1,"39":1,"48":1,"50":4,"52":2,"54":1,"56":1,"58":1,"59":2,"60":3,"62":1,"64":1,"66":1,"69":1,"71":1,"73":1,"75":1,"76":3,"88":1,"89":1,"95":2,"96":1,"98":2,"99":3,"101":2,"103":1,"104":12}}],["anything",{"2":{"78":1}}],["any",{"2":{"0":2,"1":2,"9":1,"24":1,"54":1,"59":1,"71":1,"76":1,"99":1}}],["a",{"2":{"0":2,"1":6,"2":1,"3":1,"4":1,"6":2,"8":1,"9":3,"10":1,"11":1,"12":1,"16":1,"17":1,"23":1,"24":1,"26":1,"37":1,"48":1,"50":2,"52":3,"58":1,"59":1,"60":2,"61":3,"62":2,"70":1,"71":1,"72":1,"73":2,"75":3,"76":1,"78":2,"79":1,"80":1,"85":1,"87":1,"90":2,"91":5,"92":1,"95":1,"96":4,"97":1,"100":2,"102":1,"104":15}}],["applies",{"2":{"24":1,"104":3}}],["application",{"2":{"1":1,"11":1}}],["applying",{"2":{"104":2}}],["applypaging",{"0":{"19":1},"2":{"19":1,"35":1}}],["applyorderingandpaging",{"0":{"21":1}}],["applyordering",{"0":{"18":1},"2":{"18":1,"35":1,"102":3,"103":2}}],["applyfilteringorderingpaging",{"0":{"22":1},"2":{"23":1,"36":1,"37":1}}],["applyfilteringandordering",{"0":{"20":1}}],["applyfiltering",{"0":{"17":1},"2":{"7":1,"17":2,"32":1,"33":1,"35":1,"54":1,"57":1,"61":1,"88":1}}],["apply",{"2":{"0":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"37":1,"88":1,"95":1,"98":1}}],["apis",{"2":{"0":1,"5":1,"48":1}}],["api",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1},"2":{"1":2,"5":2,"17":1,"100":1}}],["windows",{"2":{"101":1}}],["wildcards",{"2":{"61":1}}],["will",{"2":{"31":2,"32":1,"33":1,"75":1,"76":1,"77":1,"85":1,"88":1,"103":1}}],["wide",{"2":{"59":1}}],["within",{"2":{"13":1,"60":1,"90":1}}],["without",{"0":{"35":1},"2":{"9":1,"76":2,"104":1}}],["with",{"0":{"12":1,"36":1,"37":1},"2":{"0":2,"1":1,"2":1,"7":1,"8":1,"11":3,"12":1,"24":1,"43":2,"45":1,"48":1,"51":4,"57":1,"60":1,"61":2,"62":2,"70":1,"73":1,"75":1,"76":1,"91":1,"96":1,"99":4,"102":1}}],["ways",{"2":{"65":1}}],["warning",{"2":{"9":1,"37":1,"103":1}}],["want",{"2":{"1":4,"6":2,"8":1,"13":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"43":1,"58":1,"61":1,"73":1,"75":3,"77":1,"78":2,"79":1,"104":2}}],["weatherforecastcontroller",{"2":{"15":4}}],["weatherforecast>",{"2":{"13":1,"15":8}}],["weatherforecastgridifymapper",{"2":{"13":2}}],["we",{"2":{"7":1,"8":1,"17":2,"51":2,"56":1,"75":3,"79":1,"88":1,"100":1,"103":1,"104":1}}],["write",{"2":{"1":1}}],["worth",{"2":{"101":1}}],["works",{"2":{"75":1}}],["work",{"2":{"37":1,"103":1}}],["working",{"2":{"0":1}}],["would",{"2":{"1":1}}],["which",{"2":{"5":1,"6":1,"17":1}}],["while",{"2":{"3":1}}],["what",{"0":{"3":1,"4":1},"2":{"75":2}}],["whatever",{"2":{"1":1}}],["where",{"2":{"1":1,"9":4,"13":1,"17":2,"43":1,"54":1,"91":1,"97":2}}],["when",{"2":{"0":2,"10":1,"61":1,"68":1,"71":1,"73":3,"85":1,"87":1,"104":2}}]],"serializationVersion":2}';export{e as default}; diff --git a/assets/chunks/VPLocalSearchBox.BG-uneXQ.js b/assets/chunks/VPLocalSearchBox.BG-uneXQ.js new file mode 100644 index 00000000..369456bf --- /dev/null +++ b/assets/chunks/VPLocalSearchBox.BG-uneXQ.js @@ -0,0 +1,7 @@ +var Ct=Object.defineProperty;var It=(o,e,t)=>e in o?Ct(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var Oe=(o,e,t)=>It(o,typeof e!="symbol"?e+"":e,t);import{X as Dt,s as oe,v as $e,ai as kt,aj as Ot,d as Rt,G as xe,ak as tt,h as Fe,al as _t,am as Mt,x as Lt,an as Pt,y as Re,R as de,Q as Ee,ao as zt,ap as Bt,Y as Vt,U as $t,aq as Wt,o as ee,b as Kt,j as k,a1 as Jt,k as j,ar as Ut,as as jt,at as Gt,c as re,n as rt,e as Se,E as at,F as nt,a as ve,t as pe,au as Qt,p as qt,l as Ht,av as it,aw as Yt,a8 as Zt,ae as Xt,ax as er,_ as tr}from"./framework.Cmp6zcjC.js";import{u as rr,c as ar}from"./theme.C7iTWSMT.js";const nr={root:()=>Dt(()=>import("./@localSearchIndexroot.BYg5Nth_.js"),[])};/*! +* tabbable 6.2.0 +* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE +*/var yt=["input:not([inert])","select:not([inert])","textarea:not([inert])","a[href]:not([inert])","button:not([inert])","[tabindex]:not(slot):not([inert])","audio[controls]:not([inert])","video[controls]:not([inert])",'[contenteditable]:not([contenteditable="false"]):not([inert])',"details>summary:first-of-type:not([inert])","details:not([inert])"],Ne=yt.join(","),mt=typeof Element>"u",ue=mt?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Ce=!mt&&Element.prototype.getRootNode?function(o){var e;return o==null||(e=o.getRootNode)===null||e===void 0?void 0:e.call(o)}:function(o){return o==null?void 0:o.ownerDocument},Ie=function o(e,t){var r;t===void 0&&(t=!0);var n=e==null||(r=e.getAttribute)===null||r===void 0?void 0:r.call(e,"inert"),a=n===""||n==="true",i=a||t&&e&&o(e.parentNode);return i},ir=function(e){var t,r=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return r===""||r==="true"},gt=function(e,t,r){if(Ie(e))return[];var n=Array.prototype.slice.apply(e.querySelectorAll(Ne));return t&&ue.call(e,Ne)&&n.unshift(e),n=n.filter(r),n},bt=function o(e,t,r){for(var n=[],a=Array.from(e);a.length;){var i=a.shift();if(!Ie(i,!1))if(i.tagName==="SLOT"){var s=i.assignedElements(),u=s.length?s:i.children,l=o(u,!0,r);r.flatten?n.push.apply(n,l):n.push({scopeParent:i,candidates:l})}else{var h=ue.call(i,Ne);h&&r.filter(i)&&(t||!e.includes(i))&&n.push(i);var d=i.shadowRoot||typeof r.getShadowRoot=="function"&&r.getShadowRoot(i),v=!Ie(d,!1)&&(!r.shadowRootFilter||r.shadowRootFilter(i));if(d&&v){var y=o(d===!0?i.children:d.children,!0,r);r.flatten?n.push.apply(n,y):n.push({scopeParent:i,candidates:y})}else a.unshift.apply(a,i.children)}}return n},wt=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},se=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||ir(e))&&!wt(e)?0:e.tabIndex},or=function(e,t){var r=se(e);return r<0&&t&&!wt(e)?0:r},sr=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},xt=function(e){return e.tagName==="INPUT"},ur=function(e){return xt(e)&&e.type==="hidden"},lr=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(r){return r.tagName==="SUMMARY"});return t},cr=function(e,t){for(var r=0;rsummary:first-of-type"),i=a?e.parentElement:e;if(ue.call(i,"details:not([open]) *"))return!0;if(!r||r==="full"||r==="legacy-full"){if(typeof n=="function"){for(var s=e;e;){var u=e.parentElement,l=Ce(e);if(u&&!u.shadowRoot&&n(u)===!0)return ot(e);e.assignedSlot?e=e.assignedSlot:!u&&l!==e.ownerDocument?e=l.host:e=u}e=s}if(vr(e))return!e.getClientRects().length;if(r!=="legacy-full")return!0}else if(r==="non-zero-area")return ot(e);return!1},yr=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var r=0;r=0)},gr=function o(e){var t=[],r=[];return e.forEach(function(n,a){var i=!!n.scopeParent,s=i?n.scopeParent:n,u=or(s,i),l=i?o(n.candidates):s;u===0?i?t.push.apply(t,l):t.push(s):r.push({documentOrder:a,tabIndex:u,item:n,isScope:i,content:l})}),r.sort(sr).reduce(function(n,a){return a.isScope?n.push.apply(n,a.content):n.push(a.content),n},[]).concat(t)},br=function(e,t){t=t||{};var r;return t.getShadowRoot?r=bt([e],t.includeContainer,{filter:We.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:mr}):r=gt(e,t.includeContainer,We.bind(null,t)),gr(r)},wr=function(e,t){t=t||{};var r;return t.getShadowRoot?r=bt([e],t.includeContainer,{filter:De.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):r=gt(e,t.includeContainer,De.bind(null,t)),r},le=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ue.call(e,Ne)===!1?!1:We(t,e)},xr=yt.concat("iframe").join(","),_e=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ue.call(e,xr)===!1?!1:De(t,e)};/*! +* focus-trap 7.5.4 +* @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE +*/function st(o,e){var t=Object.keys(o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(o);e&&(r=r.filter(function(n){return Object.getOwnPropertyDescriptor(o,n).enumerable})),t.push.apply(t,r)}return t}function ut(o){for(var e=1;e0){var r=e[e.length-1];r!==t&&r.pause()}var n=e.indexOf(t);n===-1||e.splice(n,1),e.push(t)},deactivateTrap:function(e,t){var r=e.indexOf(t);r!==-1&&e.splice(r,1),e.length>0&&e[e.length-1].unpause()}},Ar=function(e){return e.tagName&&e.tagName.toLowerCase()==="input"&&typeof e.select=="function"},Tr=function(e){return(e==null?void 0:e.key)==="Escape"||(e==null?void 0:e.key)==="Esc"||(e==null?void 0:e.keyCode)===27},ge=function(e){return(e==null?void 0:e.key)==="Tab"||(e==null?void 0:e.keyCode)===9},Nr=function(e){return ge(e)&&!e.shiftKey},Cr=function(e){return ge(e)&&e.shiftKey},ct=function(e){return setTimeout(e,0)},ft=function(e,t){var r=-1;return e.every(function(n,a){return t(n)?(r=a,!1):!0}),r},ye=function(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n1?p-1:0),I=1;I=0)c=r.activeElement;else{var f=i.tabbableGroups[0],p=f&&f.firstTabbableNode;c=p||h("fallbackFocus")}if(!c)throw new Error("Your focus-trap needs to have at least one focusable element");return c},v=function(){if(i.containerGroups=i.containers.map(function(c){var f=br(c,a.tabbableOptions),p=wr(c,a.tabbableOptions),C=f.length>0?f[0]:void 0,I=f.length>0?f[f.length-1]:void 0,M=p.find(function(m){return le(m)}),P=p.slice().reverse().find(function(m){return le(m)}),z=!!f.find(function(m){return se(m)>0});return{container:c,tabbableNodes:f,focusableNodes:p,posTabIndexesFound:z,firstTabbableNode:C,lastTabbableNode:I,firstDomTabbableNode:M,lastDomTabbableNode:P,nextTabbableNode:function(x){var $=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,K=f.indexOf(x);return K<0?$?p.slice(p.indexOf(x)+1).find(function(Q){return le(Q)}):p.slice(0,p.indexOf(x)).reverse().find(function(Q){return le(Q)}):f[K+($?1:-1)]}}}),i.tabbableGroups=i.containerGroups.filter(function(c){return c.tabbableNodes.length>0}),i.tabbableGroups.length<=0&&!h("fallbackFocus"))throw new Error("Your focus-trap must have at least one container with at least one tabbable node in it at all times");if(i.containerGroups.find(function(c){return c.posTabIndexesFound})&&i.containerGroups.length>1)throw new Error("At least one node with a positive tabindex was found in one of your focus-trap's multiple containers. Positive tabindexes are only supported in single-container focus-traps.")},y=function w(c){var f=c.activeElement;if(f)return f.shadowRoot&&f.shadowRoot.activeElement!==null?w(f.shadowRoot):f},b=function w(c){if(c!==!1&&c!==y(document)){if(!c||!c.focus){w(d());return}c.focus({preventScroll:!!a.preventScroll}),i.mostRecentlyFocusedNode=c,Ar(c)&&c.select()}},E=function(c){var f=h("setReturnFocus",c);return f||(f===!1?!1:c)},g=function(c){var f=c.target,p=c.event,C=c.isBackward,I=C===void 0?!1:C;f=f||Ae(p),v();var M=null;if(i.tabbableGroups.length>0){var P=l(f,p),z=P>=0?i.containerGroups[P]:void 0;if(P<0)I?M=i.tabbableGroups[i.tabbableGroups.length-1].lastTabbableNode:M=i.tabbableGroups[0].firstTabbableNode;else if(I){var m=ft(i.tabbableGroups,function(B){var U=B.firstTabbableNode;return f===U});if(m<0&&(z.container===f||_e(f,a.tabbableOptions)&&!le(f,a.tabbableOptions)&&!z.nextTabbableNode(f,!1))&&(m=P),m>=0){var x=m===0?i.tabbableGroups.length-1:m-1,$=i.tabbableGroups[x];M=se(f)>=0?$.lastTabbableNode:$.lastDomTabbableNode}else ge(p)||(M=z.nextTabbableNode(f,!1))}else{var K=ft(i.tabbableGroups,function(B){var U=B.lastTabbableNode;return f===U});if(K<0&&(z.container===f||_e(f,a.tabbableOptions)&&!le(f,a.tabbableOptions)&&!z.nextTabbableNode(f))&&(K=P),K>=0){var Q=K===i.tabbableGroups.length-1?0:K+1,q=i.tabbableGroups[Q];M=se(f)>=0?q.firstTabbableNode:q.firstDomTabbableNode}else ge(p)||(M=z.nextTabbableNode(f))}}else M=h("fallbackFocus");return M},S=function(c){var f=Ae(c);if(!(l(f,c)>=0)){if(ye(a.clickOutsideDeactivates,c)){s.deactivate({returnFocus:a.returnFocusOnDeactivate});return}ye(a.allowOutsideClick,c)||c.preventDefault()}},T=function(c){var f=Ae(c),p=l(f,c)>=0;if(p||f instanceof Document)p&&(i.mostRecentlyFocusedNode=f);else{c.stopImmediatePropagation();var C,I=!0;if(i.mostRecentlyFocusedNode)if(se(i.mostRecentlyFocusedNode)>0){var M=l(i.mostRecentlyFocusedNode),P=i.containerGroups[M].tabbableNodes;if(P.length>0){var z=P.findIndex(function(m){return m===i.mostRecentlyFocusedNode});z>=0&&(a.isKeyForward(i.recentNavEvent)?z+1=0&&(C=P[z-1],I=!1))}}else i.containerGroups.some(function(m){return m.tabbableNodes.some(function(x){return se(x)>0})})||(I=!1);else I=!1;I&&(C=g({target:i.mostRecentlyFocusedNode,isBackward:a.isKeyBackward(i.recentNavEvent)})),b(C||i.mostRecentlyFocusedNode||d())}i.recentNavEvent=void 0},F=function(c){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;i.recentNavEvent=c;var p=g({event:c,isBackward:f});p&&(ge(c)&&c.preventDefault(),b(p))},L=function(c){if(Tr(c)&&ye(a.escapeDeactivates,c)!==!1){c.preventDefault(),s.deactivate();return}(a.isKeyForward(c)||a.isKeyBackward(c))&&F(c,a.isKeyBackward(c))},_=function(c){var f=Ae(c);l(f,c)>=0||ye(a.clickOutsideDeactivates,c)||ye(a.allowOutsideClick,c)||(c.preventDefault(),c.stopImmediatePropagation())},V=function(){if(i.active)return lt.activateTrap(n,s),i.delayInitialFocusTimer=a.delayInitialFocus?ct(function(){b(d())}):b(d()),r.addEventListener("focusin",T,!0),r.addEventListener("mousedown",S,{capture:!0,passive:!1}),r.addEventListener("touchstart",S,{capture:!0,passive:!1}),r.addEventListener("click",_,{capture:!0,passive:!1}),r.addEventListener("keydown",L,{capture:!0,passive:!1}),s},N=function(){if(i.active)return r.removeEventListener("focusin",T,!0),r.removeEventListener("mousedown",S,!0),r.removeEventListener("touchstart",S,!0),r.removeEventListener("click",_,!0),r.removeEventListener("keydown",L,!0),s},R=function(c){var f=c.some(function(p){var C=Array.from(p.removedNodes);return C.some(function(I){return I===i.mostRecentlyFocusedNode})});f&&b(d())},A=typeof window<"u"&&"MutationObserver"in window?new MutationObserver(R):void 0,O=function(){A&&(A.disconnect(),i.active&&!i.paused&&i.containers.map(function(c){A.observe(c,{subtree:!0,childList:!0})}))};return s={get active(){return i.active},get paused(){return i.paused},activate:function(c){if(i.active)return this;var f=u(c,"onActivate"),p=u(c,"onPostActivate"),C=u(c,"checkCanFocusTrap");C||v(),i.active=!0,i.paused=!1,i.nodeFocusedBeforeActivation=r.activeElement,f==null||f();var I=function(){C&&v(),V(),O(),p==null||p()};return C?(C(i.containers.concat()).then(I,I),this):(I(),this)},deactivate:function(c){if(!i.active)return this;var f=ut({onDeactivate:a.onDeactivate,onPostDeactivate:a.onPostDeactivate,checkCanReturnFocus:a.checkCanReturnFocus},c);clearTimeout(i.delayInitialFocusTimer),i.delayInitialFocusTimer=void 0,N(),i.active=!1,i.paused=!1,O(),lt.deactivateTrap(n,s);var p=u(f,"onDeactivate"),C=u(f,"onPostDeactivate"),I=u(f,"checkCanReturnFocus"),M=u(f,"returnFocus","returnFocusOnDeactivate");p==null||p();var P=function(){ct(function(){M&&b(E(i.nodeFocusedBeforeActivation)),C==null||C()})};return M&&I?(I(E(i.nodeFocusedBeforeActivation)).then(P,P),this):(P(),this)},pause:function(c){if(i.paused||!i.active)return this;var f=u(c,"onPause"),p=u(c,"onPostPause");return i.paused=!0,f==null||f(),N(),O(),p==null||p(),this},unpause:function(c){if(!i.paused||!i.active)return this;var f=u(c,"onUnpause"),p=u(c,"onPostUnpause");return i.paused=!1,f==null||f(),v(),V(),O(),p==null||p(),this},updateContainerElements:function(c){var f=[].concat(c).filter(Boolean);return i.containers=f.map(function(p){return typeof p=="string"?r.querySelector(p):p}),i.active&&v(),O(),this}},s.updateContainerElements(e),s};function kr(o,e={}){let t;const{immediate:r,...n}=e,a=oe(!1),i=oe(!1),s=d=>t&&t.activate(d),u=d=>t&&t.deactivate(d),l=()=>{t&&(t.pause(),i.value=!0)},h=()=>{t&&(t.unpause(),i.value=!1)};return $e(()=>kt(o),d=>{d&&(t=Dr(d,{...n,onActivate(){a.value=!0,e.onActivate&&e.onActivate()},onDeactivate(){a.value=!1,e.onDeactivate&&e.onDeactivate()}}),r&&s())},{flush:"post"}),Ot(()=>u()),{hasFocus:a,isPaused:i,activate:s,deactivate:u,pause:l,unpause:h}}class fe{constructor(e,t=!0,r=[],n=5e3){this.ctx=e,this.iframes=t,this.exclude=r,this.iframesTimeout=n}static matches(e,t){const r=typeof t=="string"?[t]:t,n=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(n){let a=!1;return r.every(i=>n.call(e,i)?(a=!0,!1):!0),a}else return!1}getContexts(){let e,t=[];return typeof this.ctx>"u"||!this.ctx?e=[]:NodeList.prototype.isPrototypeOf(this.ctx)?e=Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?e=this.ctx:typeof this.ctx=="string"?e=Array.prototype.slice.call(document.querySelectorAll(this.ctx)):e=[this.ctx],e.forEach(r=>{const n=t.filter(a=>a.contains(r)).length>0;t.indexOf(r)===-1&&!n&&t.push(r)}),t}getIframeContents(e,t,r=()=>{}){let n;try{const a=e.contentWindow;if(n=a.document,!a||!n)throw new Error("iframe inaccessible")}catch{r()}n&&t(n)}isIframeBlank(e){const t="about:blank",r=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&r!==t&&r}observeIframeLoad(e,t,r){let n=!1,a=null;const i=()=>{if(!n){n=!0,clearTimeout(a);try{this.isIframeBlank(e)||(e.removeEventListener("load",i),this.getIframeContents(e,t,r))}catch{r()}}};e.addEventListener("load",i),a=setTimeout(i,this.iframesTimeout)}onIframeReady(e,t,r){try{e.contentWindow.document.readyState==="complete"?this.isIframeBlank(e)?this.observeIframeLoad(e,t,r):this.getIframeContents(e,t,r):this.observeIframeLoad(e,t,r)}catch{r()}}waitForIframes(e,t){let r=0;this.forEachIframe(e,()=>!0,n=>{r++,this.waitForIframes(n.querySelector("html"),()=>{--r||t()})},n=>{n||t()})}forEachIframe(e,t,r,n=()=>{}){let a=e.querySelectorAll("iframe"),i=a.length,s=0;a=Array.prototype.slice.call(a);const u=()=>{--i<=0&&n(s)};i||u(),a.forEach(l=>{fe.matches(l,this.exclude)?u():this.onIframeReady(l,h=>{t(l)&&(s++,r(h)),u()},u)})}createIterator(e,t,r){return document.createNodeIterator(e,t,r,!1)}createInstanceOnIframe(e){return new fe(e.querySelector("html"),this.iframes)}compareNodeIframe(e,t,r){const n=e.compareDocumentPosition(r),a=Node.DOCUMENT_POSITION_PRECEDING;if(n&a)if(t!==null){const i=t.compareDocumentPosition(r),s=Node.DOCUMENT_POSITION_FOLLOWING;if(i&s)return!0}else return!0;return!1}getIteratorNode(e){const t=e.previousNode();let r;return t===null?r=e.nextNode():r=e.nextNode()&&e.nextNode(),{prevNode:t,node:r}}checkIframeFilter(e,t,r,n){let a=!1,i=!1;return n.forEach((s,u)=>{s.val===r&&(a=u,i=s.handled)}),this.compareNodeIframe(e,t,r)?(a===!1&&!i?n.push({val:r,handled:!0}):a!==!1&&!i&&(n[a].handled=!0),!0):(a===!1&&n.push({val:r,handled:!1}),!1)}handleOpenIframes(e,t,r,n){e.forEach(a=>{a.handled||this.getIframeContents(a.val,i=>{this.createInstanceOnIframe(i).forEachNode(t,r,n)})})}iterateThroughNodes(e,t,r,n,a){const i=this.createIterator(t,e,n);let s=[],u=[],l,h,d=()=>({prevNode:h,node:l}=this.getIteratorNode(i),l);for(;d();)this.iframes&&this.forEachIframe(t,v=>this.checkIframeFilter(l,h,v,s),v=>{this.createInstanceOnIframe(v).forEachNode(e,y=>u.push(y),n)}),u.push(l);u.forEach(v=>{r(v)}),this.iframes&&this.handleOpenIframes(s,e,r,n),a()}forEachNode(e,t,r,n=()=>{}){const a=this.getContexts();let i=a.length;i||n(),a.forEach(s=>{const u=()=>{this.iterateThroughNodes(e,s,t,r,()=>{--i<=0&&n()})};this.iframes?this.waitForIframes(s,u):u()})}}let Or=class{constructor(e){this.ctx=e,this.ie=!1;const t=window.navigator.userAgent;(t.indexOf("MSIE")>-1||t.indexOf("Trident")>-1)&&(this.ie=!0)}set opt(e){this._opt=Object.assign({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:()=>{},noMatch:()=>{},filter:()=>!0,done:()=>{},debug:!1,log:window.console},e)}get opt(){return this._opt}get iterator(){return new fe(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}log(e,t="debug"){const r=this.opt.log;this.opt.debug&&typeof r=="object"&&typeof r[t]=="function"&&r[t](`mark.js: ${e}`)}escapeStr(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}createRegExp(e){return this.opt.wildcards!=="disabled"&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),this.opt.wildcards!=="disabled"&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e),e}createSynonymsRegExp(e){const t=this.opt.synonyms,r=this.opt.caseSensitive?"":"i",n=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(let a in t)if(t.hasOwnProperty(a)){const i=t[a],s=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(a):this.escapeStr(a),u=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(i):this.escapeStr(i);s!==""&&u!==""&&(e=e.replace(new RegExp(`(${this.escapeStr(s)}|${this.escapeStr(u)})`,`gm${r}`),n+`(${this.processSynomyms(s)}|${this.processSynomyms(u)})`+n))}return e}processSynomyms(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}setupWildcardsRegExp(e){return e=e.replace(/(?:\\)*\?/g,t=>t.charAt(0)==="\\"?"?":""),e.replace(/(?:\\)*\*/g,t=>t.charAt(0)==="\\"?"*":"")}createWildcardsRegExp(e){let t=this.opt.wildcards==="withSpaces";return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}setupIgnoreJoinersRegExp(e){return e.replace(/[^(|)\\]/g,(t,r,n)=>{let a=n.charAt(r+1);return/[(|)\\]/.test(a)||a===""?t:t+"\0"})}createJoinersRegExp(e){let t=[];const r=this.opt.ignorePunctuation;return Array.isArray(r)&&r.length&&t.push(this.escapeStr(r.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join(`[${t.join("")}]*`):e}createDiacriticsRegExp(e){const t=this.opt.caseSensitive?"":"i",r=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"];let n=[];return e.split("").forEach(a=>{r.every(i=>{if(i.indexOf(a)!==-1){if(n.indexOf(i)>-1)return!1;e=e.replace(new RegExp(`[${i}]`,`gm${t}`),`[${i}]`),n.push(i)}return!0})}),e}createMergedBlanksRegExp(e){return e.replace(/[\s]+/gmi,"[\\s]+")}createAccuracyRegExp(e){const t="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿";let r=this.opt.accuracy,n=typeof r=="string"?r:r.value,a=typeof r=="string"?[]:r.limiters,i="";switch(a.forEach(s=>{i+=`|${this.escapeStr(s)}`}),n){case"partially":default:return`()(${e})`;case"complementary":return i="\\s"+(i||this.escapeStr(t)),`()([^${i}]*${e}[^${i}]*)`;case"exactly":return`(^|\\s${i})(${e})(?=$|\\s${i})`}}getSeparatedKeywords(e){let t=[];return e.forEach(r=>{this.opt.separateWordSearch?r.split(" ").forEach(n=>{n.trim()&&t.indexOf(n)===-1&&t.push(n)}):r.trim()&&t.indexOf(r)===-1&&t.push(r)}),{keywords:t.sort((r,n)=>n.length-r.length),length:t.length}}isNumeric(e){return Number(parseFloat(e))==e}checkRanges(e){if(!Array.isArray(e)||Object.prototype.toString.call(e[0])!=="[object Object]")return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];const t=[];let r=0;return e.sort((n,a)=>n.start-a.start).forEach(n=>{let{start:a,end:i,valid:s}=this.callNoMatchOnInvalidRanges(n,r);s&&(n.start=a,n.length=i-a,t.push(n),r=i)}),t}callNoMatchOnInvalidRanges(e,t){let r,n,a=!1;return e&&typeof e.start<"u"?(r=parseInt(e.start,10),n=r+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&n-t>0&&n-r>0?a=!0:(this.log(`Ignoring invalid or overlapping range: ${JSON.stringify(e)}`),this.opt.noMatch(e))):(this.log(`Ignoring invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)),{start:r,end:n,valid:a}}checkWhitespaceRanges(e,t,r){let n,a=!0,i=r.length,s=t-i,u=parseInt(e.start,10)-s;return u=u>i?i:u,n=u+parseInt(e.length,10),n>i&&(n=i,this.log(`End range automatically set to the max value of ${i}`)),u<0||n-u<0||u>i||n>i?(a=!1,this.log(`Invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)):r.substring(u,n).replace(/\s+/g,"")===""&&(a=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:u,end:n,valid:a}}getTextNodes(e){let t="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,n=>{r.push({start:t.length,end:(t+=n.textContent).length,node:n})},n=>this.matchesExclude(n.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT,()=>{e({value:t,nodes:r})})}matchesExclude(e){return fe.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}wrapRangeInTextNode(e,t,r){const n=this.opt.element?this.opt.element:"mark",a=e.splitText(t),i=a.splitText(r-t);let s=document.createElement(n);return s.setAttribute("data-markjs","true"),this.opt.className&&s.setAttribute("class",this.opt.className),s.textContent=a.textContent,a.parentNode.replaceChild(s,a),i}wrapRangeInMappedTextNode(e,t,r,n,a){e.nodes.every((i,s)=>{const u=e.nodes[s+1];if(typeof u>"u"||u.start>t){if(!n(i.node))return!1;const l=t-i.start,h=(r>i.end?i.end:r)-i.start,d=e.value.substr(0,i.start),v=e.value.substr(h+i.start);if(i.node=this.wrapRangeInTextNode(i.node,l,h),e.value=d+v,e.nodes.forEach((y,b)=>{b>=s&&(e.nodes[b].start>0&&b!==s&&(e.nodes[b].start-=h),e.nodes[b].end-=h)}),r-=h,a(i.node.previousSibling,i.start),r>i.end)t=i.end;else return!1}return!0})}wrapMatches(e,t,r,n,a){const i=t===0?0:t+1;this.getTextNodes(s=>{s.nodes.forEach(u=>{u=u.node;let l;for(;(l=e.exec(u.textContent))!==null&&l[i]!=="";){if(!r(l[i],u))continue;let h=l.index;if(i!==0)for(let d=1;d{let u;for(;(u=e.exec(s.value))!==null&&u[i]!=="";){let l=u.index;if(i!==0)for(let d=1;dr(u[i],d),(d,v)=>{e.lastIndex=v,n(d)})}a()})}wrapRangeFromIndex(e,t,r,n){this.getTextNodes(a=>{const i=a.value.length;e.forEach((s,u)=>{let{start:l,end:h,valid:d}=this.checkWhitespaceRanges(s,i,a.value);d&&this.wrapRangeInMappedTextNode(a,l,h,v=>t(v,s,a.value.substring(l,h),u),v=>{r(v,s)})}),n()})}unwrapMatches(e){const t=e.parentNode;let r=document.createDocumentFragment();for(;e.firstChild;)r.appendChild(e.removeChild(e.firstChild));t.replaceChild(r,e),this.ie?this.normalizeTextNode(t):t.normalize()}normalizeTextNode(e){if(e){if(e.nodeType===3)for(;e.nextSibling&&e.nextSibling.nodeType===3;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}markRegExp(e,t){this.opt=t,this.log(`Searching with expression "${e}"`);let r=0,n="wrapMatches";const a=i=>{r++,this.opt.each(i)};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),this[n](e,this.opt.ignoreGroups,(i,s)=>this.opt.filter(s,i,r),a,()=>{r===0&&this.opt.noMatch(e),this.opt.done(r)})}mark(e,t){this.opt=t;let r=0,n="wrapMatches";const{keywords:a,length:i}=this.getSeparatedKeywords(typeof e=="string"?[e]:e),s=this.opt.caseSensitive?"":"i",u=l=>{let h=new RegExp(this.createRegExp(l),`gm${s}`),d=0;this.log(`Searching with expression "${h}"`),this[n](h,1,(v,y)=>this.opt.filter(y,l,r,d),v=>{d++,r++,this.opt.each(v)},()=>{d===0&&this.opt.noMatch(l),a[i-1]===l?this.opt.done(r):u(a[a.indexOf(l)+1])})};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),i===0?this.opt.done(r):u(a[0])}markRanges(e,t){this.opt=t;let r=0,n=this.checkRanges(e);n&&n.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(n)),this.wrapRangeFromIndex(n,(a,i,s,u)=>this.opt.filter(a,i,s,u),(a,i)=>{r++,this.opt.each(a,i)},()=>{this.opt.done(r)})):this.opt.done(r)}unmark(e){this.opt=e;let t=this.opt.element?this.opt.element:"*";t+="[data-markjs]",this.opt.className&&(t+=`.${this.opt.className}`),this.log(`Removal selector "${t}"`),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,r=>{this.unwrapMatches(r)},r=>{const n=fe.matches(r,t),a=this.matchesExclude(r);return!n||a?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},this.opt.done)}};function Rr(o){const e=new Or(o);return this.mark=(t,r)=>(e.mark(t,r),this),this.markRegExp=(t,r)=>(e.markRegExp(t,r),this),this.markRanges=(t,r)=>(e.markRanges(t,r),this),this.unmark=t=>(e.unmark(t),this),this}var W=function(){return W=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0&&a[a.length-1])&&(l[0]===6||l[0]===2)){t=0;continue}if(l[0]===3&&(!a||l[1]>a[0]&&l[1]=o.length&&(o=void 0),{value:o&&o[r++],done:!o}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function J(o,e){var t=typeof Symbol=="function"&&o[Symbol.iterator];if(!t)return o;var r=t.call(o),n,a=[],i;try{for(;(e===void 0||e-- >0)&&!(n=r.next()).done;)a.push(n.value)}catch(s){i={error:s}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(i)throw i.error}}return a}var Lr="ENTRIES",Ft="KEYS",Et="VALUES",G="",Me=function(){function o(e,t){var r=e._tree,n=Array.from(r.keys());this.set=e,this._type=t,this._path=n.length>0?[{node:r,keys:n}]:[]}return o.prototype.next=function(){var e=this.dive();return this.backtrack(),e},o.prototype.dive=function(){if(this._path.length===0)return{done:!0,value:void 0};var e=ce(this._path),t=e.node,r=e.keys;if(ce(r)===G)return{done:!1,value:this.result()};var n=t.get(ce(r));return this._path.push({node:n,keys:Array.from(n.keys())}),this.dive()},o.prototype.backtrack=function(){if(this._path.length!==0){var e=ce(this._path).keys;e.pop(),!(e.length>0)&&(this._path.pop(),this.backtrack())}},o.prototype.key=function(){return this.set._prefix+this._path.map(function(e){var t=e.keys;return ce(t)}).filter(function(e){return e!==G}).join("")},o.prototype.value=function(){return ce(this._path).node.get(G)},o.prototype.result=function(){switch(this._type){case Et:return this.value();case Ft:return this.key();default:return[this.key(),this.value()]}},o.prototype[Symbol.iterator]=function(){return this},o}(),ce=function(o){return o[o.length-1]},Pr=function(o,e,t){var r=new Map;if(e===void 0)return r;for(var n=e.length+1,a=n+t,i=new Uint8Array(a*n).fill(t+1),s=0;st)continue e}St(o.get(y),e,t,r,n,E,i,s+y)}}}catch(f){u={error:f}}finally{try{v&&!v.done&&(l=d.return)&&l.call(d)}finally{if(u)throw u.error}}},Le=function(){function o(e,t){e===void 0&&(e=new Map),t===void 0&&(t=""),this._size=void 0,this._tree=e,this._prefix=t}return o.prototype.atPrefix=function(e){var t,r;if(!e.startsWith(this._prefix))throw new Error("Mismatched prefix");var n=J(ke(this._tree,e.slice(this._prefix.length)),2),a=n[0],i=n[1];if(a===void 0){var s=J(je(i),2),u=s[0],l=s[1];try{for(var h=D(u.keys()),d=h.next();!d.done;d=h.next()){var v=d.value;if(v!==G&&v.startsWith(l)){var y=new Map;return y.set(v.slice(l.length),u.get(v)),new o(y,e)}}}catch(b){t={error:b}}finally{try{d&&!d.done&&(r=h.return)&&r.call(h)}finally{if(t)throw t.error}}}return new o(a,e)},o.prototype.clear=function(){this._size=void 0,this._tree.clear()},o.prototype.delete=function(e){return this._size=void 0,zr(this._tree,e)},o.prototype.entries=function(){return new Me(this,Lr)},o.prototype.forEach=function(e){var t,r;try{for(var n=D(this),a=n.next();!a.done;a=n.next()){var i=J(a.value,2),s=i[0],u=i[1];e(s,u,this)}}catch(l){t={error:l}}finally{try{a&&!a.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}},o.prototype.fuzzyGet=function(e,t){return Pr(this._tree,e,t)},o.prototype.get=function(e){var t=Ke(this._tree,e);return t!==void 0?t.get(G):void 0},o.prototype.has=function(e){var t=Ke(this._tree,e);return t!==void 0&&t.has(G)},o.prototype.keys=function(){return new Me(this,Ft)},o.prototype.set=function(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;var r=Pe(this._tree,e);return r.set(G,t),this},Object.defineProperty(o.prototype,"size",{get:function(){if(this._size)return this._size;this._size=0;for(var e=this.entries();!e.next().done;)this._size+=1;return this._size},enumerable:!1,configurable:!0}),o.prototype.update=function(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;var r=Pe(this._tree,e);return r.set(G,t(r.get(G))),this},o.prototype.fetch=function(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;var r=Pe(this._tree,e),n=r.get(G);return n===void 0&&r.set(G,n=t()),n},o.prototype.values=function(){return new Me(this,Et)},o.prototype[Symbol.iterator]=function(){return this.entries()},o.from=function(e){var t,r,n=new o;try{for(var a=D(e),i=a.next();!i.done;i=a.next()){var s=J(i.value,2),u=s[0],l=s[1];n.set(u,l)}}catch(h){t={error:h}}finally{try{i&&!i.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}return n},o.fromObject=function(e){return o.from(Object.entries(e))},o}(),ke=function(o,e,t){var r,n;if(t===void 0&&(t=[]),e.length===0||o==null)return[o,t];try{for(var a=D(o.keys()),i=a.next();!i.done;i=a.next()){var s=i.value;if(s!==G&&e.startsWith(s))return t.push([o,s]),ke(o.get(s),e.slice(s.length),t)}}catch(u){r={error:u}}finally{try{i&&!i.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}return t.push([o,e]),ke(void 0,"",t)},Ke=function(o,e){var t,r;if(e.length===0||o==null)return o;try{for(var n=D(o.keys()),a=n.next();!a.done;a=n.next()){var i=a.value;if(i!==G&&e.startsWith(i))return Ke(o.get(i),e.slice(i.length))}}catch(s){t={error:s}}finally{try{a&&!a.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}},Pe=function(o,e){var t,r,n=e.length;e:for(var a=0;o&&a0)throw new Error("Expected documents to be present. Omit the argument to remove all documents.");this._index=new Le,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldLength=new Map,this._avgFieldLength=[],this._storedFields=new Map,this._nextId=0}},o.prototype.discard=function(e){var t=this,r=this._idToShortId.get(e);if(r==null)throw new Error("MiniSearch: cannot discard document with ID ".concat(e,": it is not in the index"));this._idToShortId.delete(e),this._documentIds.delete(r),this._storedFields.delete(r),(this._fieldLength.get(r)||[]).forEach(function(n,a){t.removeFieldLength(r,a,t._documentCount,n)}),this._fieldLength.delete(r),this._documentCount-=1,this._dirtCount+=1,this.maybeAutoVacuum()},o.prototype.maybeAutoVacuum=function(){if(this._options.autoVacuum!==!1){var e=this._options.autoVacuum,t=e.minDirtFactor,r=e.minDirtCount,n=e.batchSize,a=e.batchWait;this.conditionalVacuum({batchSize:n,batchWait:a},{minDirtCount:r,minDirtFactor:t})}},o.prototype.discardAll=function(e){var t,r,n=this._options.autoVacuum;try{this._options.autoVacuum=!1;try{for(var a=D(e),i=a.next();!i.done;i=a.next()){var s=i.value;this.discard(s)}}catch(u){t={error:u}}finally{try{i&&!i.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}}finally{this._options.autoVacuum=n}this.maybeAutoVacuum()},o.prototype.replace=function(e){var t=this._options,r=t.idField,n=t.extractField,a=n(e,r);this.discard(a),this.add(e)},o.prototype.vacuum=function(e){return e===void 0&&(e={}),this.conditionalVacuum(e)},o.prototype.conditionalVacuum=function(e,t){var r=this;return this._currentVacuum?(this._enqueuedVacuumConditions=this._enqueuedVacuumConditions&&t,this._enqueuedVacuum!=null?this._enqueuedVacuum:(this._enqueuedVacuum=this._currentVacuum.then(function(){var n=r._enqueuedVacuumConditions;return r._enqueuedVacuumConditions=Ue,r.performVacuuming(e,n)}),this._enqueuedVacuum)):this.vacuumConditionsMet(t)===!1?Promise.resolve():(this._currentVacuum=this.performVacuuming(e),this._currentVacuum)},o.prototype.performVacuuming=function(e,t){return _r(this,void 0,void 0,function(){var r,n,a,i,s,u,l,h,d,v,y,b,E,g,S,T,F,L,_,V,N,R,A,O,w;return Mr(this,function(c){switch(c.label){case 0:if(r=this._dirtCount,!this.vacuumConditionsMet(t))return[3,10];n=e.batchSize||Je.batchSize,a=e.batchWait||Je.batchWait,i=1,c.label=1;case 1:c.trys.push([1,7,8,9]),s=D(this._index),u=s.next(),c.label=2;case 2:if(u.done)return[3,6];l=J(u.value,2),h=l[0],d=l[1];try{for(v=(R=void 0,D(d)),y=v.next();!y.done;y=v.next()){b=J(y.value,2),E=b[0],g=b[1];try{for(S=(O=void 0,D(g)),T=S.next();!T.done;T=S.next())F=J(T.value,1),L=F[0],!this._documentIds.has(L)&&(g.size<=1?d.delete(E):g.delete(L))}catch(f){O={error:f}}finally{try{T&&!T.done&&(w=S.return)&&w.call(S)}finally{if(O)throw O.error}}}}catch(f){R={error:f}}finally{try{y&&!y.done&&(A=v.return)&&A.call(v)}finally{if(R)throw R.error}}return this._index.get(h).size===0&&this._index.delete(h),i%n!==0?[3,4]:[4,new Promise(function(f){return setTimeout(f,a)})];case 3:c.sent(),c.label=4;case 4:i+=1,c.label=5;case 5:return u=s.next(),[3,2];case 6:return[3,9];case 7:return _=c.sent(),V={error:_},[3,9];case 8:try{u&&!u.done&&(N=s.return)&&N.call(s)}finally{if(V)throw V.error}return[7];case 9:this._dirtCount-=r,c.label=10;case 10:return[4,null];case 11:return c.sent(),this._currentVacuum=this._enqueuedVacuum,this._enqueuedVacuum=null,[2]}})})},o.prototype.vacuumConditionsMet=function(e){if(e==null)return!0;var t=e.minDirtCount,r=e.minDirtFactor;return t=t||Ve.minDirtCount,r=r||Ve.minDirtFactor,this.dirtCount>=t&&this.dirtFactor>=r},Object.defineProperty(o.prototype,"isVacuuming",{get:function(){return this._currentVacuum!=null},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"dirtCount",{get:function(){return this._dirtCount},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"dirtFactor",{get:function(){return this._dirtCount/(1+this._documentCount+this._dirtCount)},enumerable:!1,configurable:!0}),o.prototype.has=function(e){return this._idToShortId.has(e)},o.prototype.getStoredFields=function(e){var t=this._idToShortId.get(e);if(t!=null)return this._storedFields.get(t)},o.prototype.search=function(e,t){var r,n;t===void 0&&(t={});var a=this.executeQuery(e,t),i=[];try{for(var s=D(a),u=s.next();!u.done;u=s.next()){var l=J(u.value,2),h=l[0],d=l[1],v=d.score,y=d.terms,b=d.match,E=y.length||1,g={id:this._documentIds.get(h),score:v*E,terms:Object.keys(b),queryTerms:y,match:b};Object.assign(g,this._storedFields.get(h)),(t.filter==null||t.filter(g))&&i.push(g)}}catch(S){r={error:S}}finally{try{u&&!u.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}return e===o.wildcard&&t.boostDocument==null&&this._options.searchOptions.boostDocument==null||i.sort(vt),i},o.prototype.autoSuggest=function(e,t){var r,n,a,i;t===void 0&&(t={}),t=W(W({},this._options.autoSuggestOptions),t);var s=new Map;try{for(var u=D(this.search(e,t)),l=u.next();!l.done;l=u.next()){var h=l.value,d=h.score,v=h.terms,y=v.join(" "),b=s.get(y);b!=null?(b.score+=d,b.count+=1):s.set(y,{score:d,terms:v,count:1})}}catch(_){r={error:_}}finally{try{l&&!l.done&&(n=u.return)&&n.call(u)}finally{if(r)throw r.error}}var E=[];try{for(var g=D(s),S=g.next();!S.done;S=g.next()){var T=J(S.value,2),b=T[0],F=T[1],d=F.score,v=F.terms,L=F.count;E.push({suggestion:b,terms:v,score:d/L})}}catch(_){a={error:_}}finally{try{S&&!S.done&&(i=g.return)&&i.call(g)}finally{if(a)throw a.error}}return E.sort(vt),E},Object.defineProperty(o.prototype,"documentCount",{get:function(){return this._documentCount},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"termCount",{get:function(){return this._index.size},enumerable:!1,configurable:!0}),o.loadJSON=function(e,t){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJS(JSON.parse(e),t)},o.getDefault=function(e){if(Be.hasOwnProperty(e))return ze(Be,e);throw new Error('MiniSearch: unknown option "'.concat(e,'"'))},o.loadJS=function(e,t){var r,n,a,i,s,u,l=e.index,h=e.documentCount,d=e.nextId,v=e.documentIds,y=e.fieldIds,b=e.fieldLength,E=e.averageFieldLength,g=e.storedFields,S=e.dirtCount,T=e.serializationVersion;if(T!==1&&T!==2)throw new Error("MiniSearch: cannot deserialize an index created with an incompatible version");var F=new o(t);F._documentCount=h,F._nextId=d,F._documentIds=Te(v),F._idToShortId=new Map,F._fieldIds=y,F._fieldLength=Te(b),F._avgFieldLength=E,F._storedFields=Te(g),F._dirtCount=S||0,F._index=new Le;try{for(var L=D(F._documentIds),_=L.next();!_.done;_=L.next()){var V=J(_.value,2),N=V[0],R=V[1];F._idToShortId.set(R,N)}}catch(z){r={error:z}}finally{try{_&&!_.done&&(n=L.return)&&n.call(L)}finally{if(r)throw r.error}}try{for(var A=D(l),O=A.next();!O.done;O=A.next()){var w=J(O.value,2),c=w[0],f=w[1],p=new Map;try{for(var C=(s=void 0,D(Object.keys(f))),I=C.next();!I.done;I=C.next()){var M=I.value,P=f[M];T===1&&(P=P.ds),p.set(parseInt(M,10),Te(P))}}catch(z){s={error:z}}finally{try{I&&!I.done&&(u=C.return)&&u.call(C)}finally{if(s)throw s.error}}F._index.set(c,p)}}catch(z){a={error:z}}finally{try{O&&!O.done&&(i=A.return)&&i.call(A)}finally{if(a)throw a.error}}return F},o.prototype.executeQuery=function(e,t){var r=this;if(t===void 0&&(t={}),e===o.wildcard)return this.executeWildcardQuery(t);if(typeof e!="string"){var n=W(W(W({},t),e),{queries:void 0}),a=e.queries.map(function(g){return r.executeQuery(g,n)});return this.combineResults(a,n.combineWith)}var i=this._options,s=i.tokenize,u=i.processTerm,l=i.searchOptions,h=W(W({tokenize:s,processTerm:u},l),t),d=h.tokenize,v=h.processTerm,y=d(e).flatMap(function(g){return v(g)}).filter(function(g){return!!g}),b=y.map(Jr(h)),E=b.map(function(g){return r.executeQuerySpec(g,h)});return this.combineResults(E,h.combineWith)},o.prototype.executeQuerySpec=function(e,t){var r,n,a,i,s=W(W({},this._options.searchOptions),t),u=(s.fields||this._options.fields).reduce(function(M,P){var z;return W(W({},M),(z={},z[P]=ze(s.boost,P)||1,z))},{}),l=s.boostDocument,h=s.weights,d=s.maxFuzzy,v=s.bm25,y=W(W({},ht.weights),h),b=y.fuzzy,E=y.prefix,g=this._index.get(e.term),S=this.termResults(e.term,e.term,1,g,u,l,v),T,F;if(e.prefix&&(T=this._index.atPrefix(e.term)),e.fuzzy){var L=e.fuzzy===!0?.2:e.fuzzy,_=L<1?Math.min(d,Math.round(e.term.length*L)):L;_&&(F=this._index.fuzzyGet(e.term,_))}if(T)try{for(var V=D(T),N=V.next();!N.done;N=V.next()){var R=J(N.value,2),A=R[0],O=R[1],w=A.length-e.term.length;if(w){F==null||F.delete(A);var c=E*A.length/(A.length+.3*w);this.termResults(e.term,A,c,O,u,l,v,S)}}}catch(M){r={error:M}}finally{try{N&&!N.done&&(n=V.return)&&n.call(V)}finally{if(r)throw r.error}}if(F)try{for(var f=D(F.keys()),p=f.next();!p.done;p=f.next()){var A=p.value,C=J(F.get(A),2),I=C[0],w=C[1];if(w){var c=b*A.length/(A.length+w);this.termResults(e.term,A,c,I,u,l,v,S)}}}catch(M){a={error:M}}finally{try{p&&!p.done&&(i=f.return)&&i.call(f)}finally{if(a)throw a.error}}return S},o.prototype.executeWildcardQuery=function(e){var t,r,n=new Map,a=W(W({},this._options.searchOptions),e);try{for(var i=D(this._documentIds),s=i.next();!s.done;s=i.next()){var u=J(s.value,2),l=u[0],h=u[1],d=a.boostDocument?a.boostDocument(h,"",this._storedFields.get(l)):1;n.set(l,{score:d,terms:[],match:{}})}}catch(v){t={error:v}}finally{try{s&&!s.done&&(r=i.return)&&r.call(i)}finally{if(t)throw t.error}}return n},o.prototype.combineResults=function(e,t){if(t===void 0&&(t=Ge),e.length===0)return new Map;var r=t.toLowerCase();return e.reduce($r[r])||new Map},o.prototype.toJSON=function(){var e,t,r,n,a=[];try{for(var i=D(this._index),s=i.next();!s.done;s=i.next()){var u=J(s.value,2),l=u[0],h=u[1],d={};try{for(var v=(r=void 0,D(h)),y=v.next();!y.done;y=v.next()){var b=J(y.value,2),E=b[0],g=b[1];d[E]=Object.fromEntries(g)}}catch(S){r={error:S}}finally{try{y&&!y.done&&(n=v.return)&&n.call(v)}finally{if(r)throw r.error}}a.push([l,d])}}catch(S){e={error:S}}finally{try{s&&!s.done&&(t=i.return)&&t.call(i)}finally{if(e)throw e.error}}return{documentCount:this._documentCount,nextId:this._nextId,documentIds:Object.fromEntries(this._documentIds),fieldIds:this._fieldIds,fieldLength:Object.fromEntries(this._fieldLength),averageFieldLength:this._avgFieldLength,storedFields:Object.fromEntries(this._storedFields),dirtCount:this._dirtCount,index:a,serializationVersion:2}},o.prototype.termResults=function(e,t,r,n,a,i,s,u){var l,h,d,v,y;if(u===void 0&&(u=new Map),n==null)return u;try{for(var b=D(Object.keys(a)),E=b.next();!E.done;E=b.next()){var g=E.value,S=a[g],T=this._fieldIds[g],F=n.get(T);if(F!=null){var L=F.size,_=this._avgFieldLength[T];try{for(var V=(d=void 0,D(F.keys())),N=V.next();!N.done;N=V.next()){var R=N.value;if(!this._documentIds.has(R)){this.removeTerm(T,R,t),L-=1;continue}var A=i?i(this._documentIds.get(R),t,this._storedFields.get(R)):1;if(A){var O=F.get(R),w=this._fieldLength.get(R)[T],c=Kr(O,L,this._documentCount,w,_,s),f=r*S*A*c,p=u.get(R);if(p){p.score+=f,jr(p.terms,e);var C=ze(p.match,t);C?C.push(g):p.match[t]=[g]}else u.set(R,{score:f,terms:[e],match:(y={},y[t]=[g],y)})}}}catch(I){d={error:I}}finally{try{N&&!N.done&&(v=V.return)&&v.call(V)}finally{if(d)throw d.error}}}}}catch(I){l={error:I}}finally{try{E&&!E.done&&(h=b.return)&&h.call(b)}finally{if(l)throw l.error}}return u},o.prototype.addTerm=function(e,t,r){var n=this._index.fetch(r,pt),a=n.get(e);if(a==null)a=new Map,a.set(t,1),n.set(e,a);else{var i=a.get(t);a.set(t,(i||0)+1)}},o.prototype.removeTerm=function(e,t,r){if(!this._index.has(r)){this.warnDocumentChanged(t,e,r);return}var n=this._index.fetch(r,pt),a=n.get(e);a==null||a.get(t)==null?this.warnDocumentChanged(t,e,r):a.get(t)<=1?a.size<=1?n.delete(e):a.delete(t):a.set(t,a.get(t)-1),this._index.get(r).size===0&&this._index.delete(r)},o.prototype.warnDocumentChanged=function(e,t,r){var n,a;try{for(var i=D(Object.keys(this._fieldIds)),s=i.next();!s.done;s=i.next()){var u=s.value;if(this._fieldIds[u]===t){this._options.logger("warn","MiniSearch: document with ID ".concat(this._documentIds.get(e),' has changed before removal: term "').concat(r,'" was not present in field "').concat(u,'". Removing a document after it has changed can corrupt the index!'),"version_conflict");return}}}catch(l){n={error:l}}finally{try{s&&!s.done&&(a=i.return)&&a.call(i)}finally{if(n)throw n.error}}},o.prototype.addDocumentId=function(e){var t=this._nextId;return this._idToShortId.set(e,t),this._documentIds.set(t,e),this._documentCount+=1,this._nextId+=1,t},o.prototype.addFields=function(e){for(var t=0;t(qt("data-v-639d7ab9"),o=o(),Ht(),o),qr=["aria-owns"],Hr={class:"shell"},Yr=["title"],Zr=Y(()=>k("span",{"aria-hidden":"true",class:"vpi-search search-icon local-search-icon"},null,-1)),Xr=[Zr],ea={class:"search-actions before"},ta=["title"],ra=Y(()=>k("span",{class:"vpi-arrow-left local-search-icon"},null,-1)),aa=[ra],na=["placeholder"],ia={class:"search-actions"},oa=["title"],sa=Y(()=>k("span",{class:"vpi-layout-list local-search-icon"},null,-1)),ua=[sa],la=["disabled","title"],ca=Y(()=>k("span",{class:"vpi-delete local-search-icon"},null,-1)),fa=[ca],ha=["id","role","aria-labelledby"],da=["aria-selected"],va=["href","aria-label","onMouseenter","onFocusin"],pa={class:"titles"},ya=Y(()=>k("span",{class:"title-icon"},"#",-1)),ma=["innerHTML"],ga=Y(()=>k("span",{class:"vpi-chevron-right local-search-icon"},null,-1)),ba={class:"title main"},wa=["innerHTML"],xa={key:0,class:"excerpt-wrapper"},Fa={key:0,class:"excerpt",inert:""},Ea=["innerHTML"],Sa=Y(()=>k("div",{class:"excerpt-gradient-bottom"},null,-1)),Aa=Y(()=>k("div",{class:"excerpt-gradient-top"},null,-1)),Ta={key:0,class:"no-results"},Na={class:"search-keyboard-shortcuts"},Ca=["aria-label"],Ia=Y(()=>k("span",{class:"vpi-arrow-up navigate-icon"},null,-1)),Da=[Ia],ka=["aria-label"],Oa=Y(()=>k("span",{class:"vpi-arrow-down navigate-icon"},null,-1)),Ra=[Oa],_a=["aria-label"],Ma=Y(()=>k("span",{class:"vpi-corner-down-left navigate-icon"},null,-1)),La=[Ma],Pa=["aria-label"],za=Rt({__name:"VPLocalSearchBox",emits:["close"],setup(o,{emit:e}){var P,z;const t=e,r=xe(),n=xe(),a=xe(nr),i=rr(),{activate:s}=kr(r,{immediate:!0,allowOutsideClick:!0,clickOutsideDeactivates:!0,escapeDeactivates:!0}),{localeIndex:u,theme:l}=i,h=tt(async()=>{var m,x,$,K,Q,q,B,U,Z;return it(Vr.loadJSON(($=await((x=(m=a.value)[u.value])==null?void 0:x.call(m)))==null?void 0:$.default,{fields:["title","titles","text"],storeFields:["title","titles"],searchOptions:{fuzzy:.2,prefix:!0,boost:{title:4,text:2,titles:1},...((K=l.value.search)==null?void 0:K.provider)==="local"&&((q=(Q=l.value.search.options)==null?void 0:Q.miniSearch)==null?void 0:q.searchOptions)},...((B=l.value.search)==null?void 0:B.provider)==="local"&&((Z=(U=l.value.search.options)==null?void 0:U.miniSearch)==null?void 0:Z.options)}))}),v=Fe(()=>{var m,x;return((m=l.value.search)==null?void 0:m.provider)==="local"&&((x=l.value.search.options)==null?void 0:x.disableQueryPersistence)===!0}).value?oe(""):_t("vitepress:local-search-filter",""),y=Mt("vitepress:local-search-detailed-list",((P=l.value.search)==null?void 0:P.provider)==="local"&&((z=l.value.search.options)==null?void 0:z.detailedView)===!0),b=Fe(()=>{var m,x,$;return((m=l.value.search)==null?void 0:m.provider)==="local"&&(((x=l.value.search.options)==null?void 0:x.disableDetailedView)===!0||(($=l.value.search.options)==null?void 0:$.detailedView)===!1)}),E=Fe(()=>{var x,$,K,Q,q,B,U;const m=((x=l.value.search)==null?void 0:x.options)??l.value.algolia;return((q=(Q=(K=($=m==null?void 0:m.locales)==null?void 0:$[u.value])==null?void 0:K.translations)==null?void 0:Q.button)==null?void 0:q.buttonText)||((U=(B=m==null?void 0:m.translations)==null?void 0:B.button)==null?void 0:U.buttonText)||"Search"});Lt(()=>{b.value&&(y.value=!1)});const g=xe([]),S=oe(!1);$e(v,()=>{S.value=!1});const T=tt(async()=>{if(n.value)return it(new Rr(n.value))},null),F=new Qr(16);Pt(()=>[h.value,v.value,y.value],async([m,x,$],K,Q)=>{var be,Qe,qe,He;(K==null?void 0:K[0])!==m&&F.clear();let q=!1;if(Q(()=>{q=!0}),!m)return;g.value=m.search(x).slice(0,16),S.value=!0;const B=$?await Promise.all(g.value.map(H=>L(H.id))):[];if(q)return;for(const{id:H,mod:ae}of B){const ne=H.slice(0,H.indexOf("#"));let te=F.get(ne);if(te)continue;te=new Map,F.set(ne,te);const X=ae.default??ae;if(X!=null&&X.render||X!=null&&X.setup){const ie=Yt(X);ie.config.warnHandler=()=>{},ie.provide(Zt,i),Object.defineProperties(ie.config.globalProperties,{$frontmatter:{get(){return i.frontmatter.value}},$params:{get(){return i.page.value.params}}});const Ye=document.createElement("div");ie.mount(Ye),Ye.querySelectorAll("h1, h2, h3, h4, h5, h6").forEach(he=>{var et;const we=(et=he.querySelector("a"))==null?void 0:et.getAttribute("href"),Ze=(we==null?void 0:we.startsWith("#"))&&we.slice(1);if(!Ze)return;let Xe="";for(;(he=he.nextElementSibling)&&!/^h[1-6]$/i.test(he.tagName);)Xe+=he.outerHTML;te.set(Ze,Xe)}),ie.unmount()}if(q)return}const U=new Set;if(g.value=g.value.map(H=>{const[ae,ne]=H.id.split("#"),te=F.get(ae),X=(te==null?void 0:te.get(ne))??"";for(const ie in H.match)U.add(ie);return{...H,text:X}}),await de(),q)return;await new Promise(H=>{var ae;(ae=T.value)==null||ae.unmark({done:()=>{var ne;(ne=T.value)==null||ne.markRegExp(M(U),{done:H})}})});const Z=((be=r.value)==null?void 0:be.querySelectorAll(".result .excerpt"))??[];for(const H of Z)(Qe=H.querySelector('mark[data-markjs="true"]'))==null||Qe.scrollIntoView({block:"center"});(He=(qe=n.value)==null?void 0:qe.firstElementChild)==null||He.scrollIntoView({block:"start"})},{debounce:200,immediate:!0});async function L(m){const x=Xt(m.slice(0,m.indexOf("#")));try{if(!x)throw new Error(`Cannot find file for id: ${m}`);return{id:m,mod:await import(x)}}catch($){return console.error($),{id:m,mod:{}}}}const _=oe(),V=Fe(()=>{var m;return((m=v.value)==null?void 0:m.length)<=0});function N(m=!0){var x,$;(x=_.value)==null||x.focus(),m&&(($=_.value)==null||$.select())}Re(()=>{N()});function R(m){m.pointerType==="mouse"&&N()}const A=oe(-1),O=oe(!1);$e(g,m=>{A.value=m.length?0:-1,w()});function w(){de(()=>{const m=document.querySelector(".result.selected");m==null||m.scrollIntoView({block:"nearest"})})}Ee("ArrowUp",m=>{m.preventDefault(),A.value--,A.value<0&&(A.value=g.value.length-1),O.value=!0,w()}),Ee("ArrowDown",m=>{m.preventDefault(),A.value++,A.value>=g.value.length&&(A.value=0),O.value=!0,w()});const c=zt();Ee("Enter",m=>{if(m.isComposing||m.target instanceof HTMLButtonElement&&m.target.type!=="submit")return;const x=g.value[A.value];if(m.target instanceof HTMLInputElement&&!x){m.preventDefault();return}x&&(c.go(x.id),t("close"))}),Ee("Escape",()=>{t("close")});const p=ar({modal:{displayDetails:"Display detailed list",resetButtonTitle:"Reset search",backButtonTitle:"Close search",noResultsText:"No results for",footer:{selectText:"to select",selectKeyAriaLabel:"enter",navigateText:"to navigate",navigateUpKeyAriaLabel:"up arrow",navigateDownKeyAriaLabel:"down arrow",closeText:"to close",closeKeyAriaLabel:"escape"}}});Re(()=>{window.history.pushState(null,"",null)}),Bt("popstate",m=>{m.preventDefault(),t("close")});const C=Vt($t?document.body:null);Re(()=>{de(()=>{C.value=!0,de().then(()=>s())})}),Wt(()=>{C.value=!1});function I(){v.value="",de().then(()=>N(!1))}function M(m){return new RegExp([...m].sort((x,$)=>$.length-x.length).map(x=>`(${er(x)})`).join("|"),"gi")}return(m,x)=>{var $,K,Q,q;return ee(),Kt(Qt,{to:"body"},[k("div",{ref_key:"el",ref:r,role:"button","aria-owns":($=g.value)!=null&&$.length?"localsearch-list":void 0,"aria-expanded":"true","aria-haspopup":"listbox","aria-labelledby":"localsearch-label",class:"VPLocalSearchBox"},[k("div",{class:"backdrop",onClick:x[0]||(x[0]=B=>m.$emit("close"))}),k("div",Hr,[k("form",{class:"search-bar",onPointerup:x[4]||(x[4]=B=>R(B)),onSubmit:x[5]||(x[5]=Jt(()=>{},["prevent"]))},[k("label",{title:E.value,id:"localsearch-label",for:"localsearch-input"},Xr,8,Yr),k("div",ea,[k("button",{class:"back-button",title:j(p)("modal.backButtonTitle"),onClick:x[1]||(x[1]=B=>m.$emit("close"))},aa,8,ta)]),Ut(k("input",{ref_key:"searchInput",ref:_,"onUpdate:modelValue":x[2]||(x[2]=B=>Gt(v)?v.value=B:null),placeholder:E.value,id:"localsearch-input","aria-labelledby":"localsearch-label",class:"search-input"},null,8,na),[[jt,j(v)]]),k("div",ia,[b.value?Se("",!0):(ee(),re("button",{key:0,class:rt(["toggle-layout-button",{"detailed-list":j(y)}]),type:"button",title:j(p)("modal.displayDetails"),onClick:x[3]||(x[3]=B=>A.value>-1&&(y.value=!j(y)))},ua,10,oa)),k("button",{class:"clear-button",type:"reset",disabled:V.value,title:j(p)("modal.resetButtonTitle"),onClick:I},fa,8,la)])],32),k("ul",{ref_key:"resultsEl",ref:n,id:(K=g.value)!=null&&K.length?"localsearch-list":void 0,role:(Q=g.value)!=null&&Q.length?"listbox":void 0,"aria-labelledby":(q=g.value)!=null&&q.length?"localsearch-label":void 0,class:"results",onMousemove:x[7]||(x[7]=B=>O.value=!1)},[(ee(!0),re(nt,null,at(g.value,(B,U)=>(ee(),re("li",{key:B.id,role:"option","aria-selected":A.value===U?"true":"false"},[k("a",{href:B.id,class:rt(["result",{selected:A.value===U}]),"aria-label":[...B.titles,B.title].join(" > "),onMouseenter:Z=>!O.value&&(A.value=U),onFocusin:Z=>A.value=U,onClick:x[6]||(x[6]=Z=>m.$emit("close"))},[k("div",null,[k("div",pa,[ya,(ee(!0),re(nt,null,at(B.titles,(Z,be)=>(ee(),re("span",{key:be,class:"title"},[k("span",{class:"text",innerHTML:Z},null,8,ma),ga]))),128)),k("span",ba,[k("span",{class:"text",innerHTML:B.title},null,8,wa)])]),j(y)?(ee(),re("div",xa,[B.text?(ee(),re("div",Fa,[k("div",{class:"vp-doc",innerHTML:B.text},null,8,Ea)])):Se("",!0),Sa,Aa])):Se("",!0)])],42,va)],8,da))),128)),j(v)&&!g.value.length&&S.value?(ee(),re("li",Ta,[ve(pe(j(p)("modal.noResultsText"))+' "',1),k("strong",null,pe(j(v)),1),ve('" ')])):Se("",!0)],40,ha),k("div",Na,[k("span",null,[k("kbd",{"aria-label":j(p)("modal.footer.navigateUpKeyAriaLabel")},Da,8,Ca),k("kbd",{"aria-label":j(p)("modal.footer.navigateDownKeyAriaLabel")},Ra,8,ka),ve(" "+pe(j(p)("modal.footer.navigateText")),1)]),k("span",null,[k("kbd",{"aria-label":j(p)("modal.footer.selectKeyAriaLabel")},La,8,_a),ve(" "+pe(j(p)("modal.footer.selectText")),1)]),k("span",null,[k("kbd",{"aria-label":j(p)("modal.footer.closeKeyAriaLabel")},"esc",8,Pa),ve(" "+pe(j(p)("modal.footer.closeText")),1)])])])],8,qr)])}}}),Ja=tr(za,[["__scopeId","data-v-639d7ab9"]]);export{Ja as default}; diff --git a/assets/chunks/framework.Cmp6zcjC.js b/assets/chunks/framework.Cmp6zcjC.js new file mode 100644 index 00000000..95a80e57 --- /dev/null +++ b/assets/chunks/framework.Cmp6zcjC.js @@ -0,0 +1,17 @@ +/** +* @vue/shared v3.4.29 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function wr(e,t){const n=new Set(e.split(","));return r=>n.has(r)}const te={},mt=[],xe=()=>{},Li=()=>!1,kt=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Er=e=>e.startsWith("onUpdate:"),le=Object.assign,Cr=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Ii=Object.prototype.hasOwnProperty,Y=(e,t)=>Ii.call(e,t),k=Array.isArray,yt=e=>Sn(e)==="[object Map]",Ys=e=>Sn(e)==="[object Set]",K=e=>typeof e=="function",oe=e=>typeof e=="string",ut=e=>typeof e=="symbol",Z=e=>e!==null&&typeof e=="object",Js=e=>(Z(e)||K(e))&&K(e.then)&&K(e.catch),Qs=Object.prototype.toString,Sn=e=>Qs.call(e),Mi=e=>Sn(e).slice(8,-1),Zs=e=>Sn(e)==="[object Object]",xr=e=>oe(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,_t=wr(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Tn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Pi=/-(\w)/g,$e=Tn(e=>e.replace(Pi,(t,n)=>n?n.toUpperCase():"")),Ni=/\B([A-Z])/g,ft=Tn(e=>e.replace(Ni,"-$1").toLowerCase()),An=Tn(e=>e.charAt(0).toUpperCase()+e.slice(1)),un=Tn(e=>e?`on${An(e)}`:""),Je=(e,t)=>!Object.is(e,t),fn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},cr=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Fi=e=>{const t=oe(e)?Number(e):NaN;return isNaN(t)?e:t};let Jr;const to=()=>Jr||(Jr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Sr(e){if(k(e)){const t={};for(let n=0;n{if(n){const r=n.split(Hi);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function Tr(e){let t="";if(oe(e))t=e;else if(k(e))for(let n=0;noe(e)?e:e==null?"":k(e)||Z(e)&&(e.toString===Qs||!K(e.toString))?JSON.stringify(e,ro,2):String(e),ro=(e,t)=>t&&t.__v_isRef?ro(e,t.value):yt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,s],o)=>(n[kn(r,o)+" =>"]=s,n),{})}:Ys(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>kn(n))}:ut(t)?kn(t):Z(t)&&!k(t)&&!Zs(t)?String(t):t,kn=(e,t="")=>{var n;return ut(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.4.29 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let we;class Bi{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=we,!t&&we&&(this.index=(we.scopes||(we.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=we;try{return we=this,t()}finally{we=n}}}on(){we=this}off(){we=this.parent}stop(t){if(this._active){let n,r;for(n=0,r=this.effects.length;n=5)break}}this._dirtyLevel===1&&(this._dirtyLevel=0),et()}return this._dirtyLevel>=5}set dirty(t){this._dirtyLevel=t?5:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let t=Xe,n=lt;try{return Xe=!0,lt=this,this._runnings++,Qr(this),this.fn()}finally{Zr(this),this._runnings--,lt=n,Xe=t}}stop(){this.active&&(Qr(this),Zr(this),this.onStop&&this.onStop(),this.active=!1)}}function Wi(e){return e.value}function Qr(e){e._trackId++,e._depsLength=0}function Zr(e){if(e.deps.length>e._depsLength){for(let t=e._depsLength;t0){r._dirtyLevel=2;continue}let s;r._dirtyLevel{const n=new Map;return n.cleanup=e,n.computed=t,n},mn=new WeakMap,ct=Symbol(""),fr=Symbol("");function ve(e,t,n){if(Xe&<){let r=mn.get(e);r||mn.set(e,r=new Map);let s=r.get(n);s||r.set(n,s=ao(()=>r.delete(n))),lo(lt,s)}}function De(e,t,n,r,s,o){const i=mn.get(e);if(!i)return;let l=[];if(t==="clear")l=[...i.values()];else if(n==="length"&&k(e)){const c=Number(r);i.forEach((a,f)=>{(f==="length"||!ut(f)&&f>=c)&&l.push(a)})}else switch(n!==void 0&&l.push(i.get(n)),t){case"add":k(e)?xr(n)&&l.push(i.get("length")):(l.push(i.get(ct)),yt(e)&&l.push(i.get(fr)));break;case"delete":k(e)||(l.push(i.get(ct)),yt(e)&&l.push(i.get(fr)));break;case"set":yt(e)&&l.push(i.get(ct));break}Rr();for(const c of l)c&&co(c,5);Or()}function qi(e,t){const n=mn.get(e);return n&&n.get(t)}const Gi=wr("__proto__,__v_isRef,__isVue"),uo=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(ut)),es=zi();function zi(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const r=J(this);for(let o=0,i=this.length;o{e[t]=function(...n){Ze(),Rr();const r=J(this)[t].apply(this,n);return Or(),et(),r}}),e}function Xi(e){ut(e)||(e=String(e));const t=J(this);return ve(t,"has",e),t.hasOwnProperty(e)}class fo{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,r){const s=this._isReadonly,o=this._isShallow;if(n==="__v_isReactive")return!s;if(n==="__v_isReadonly")return s;if(n==="__v_isShallow")return o;if(n==="__v_raw")return r===(s?o?cl:mo:o?go:po).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const i=k(t);if(!s){if(i&&Y(es,n))return Reflect.get(es,n,r);if(n==="hasOwnProperty")return Xi}const l=Reflect.get(t,n,r);return(ut(n)?uo.has(n):Gi(n))||(s||ve(t,"get",n),o)?l:de(l)?i&&xr(n)?l:l.value:Z(l)?s?Ln(l):On(l):l}}class ho extends fo{constructor(t=!1){super(!1,t)}set(t,n,r,s){let o=t[n];if(!this._isShallow){const c=$t(o);if(!yn(r)&&!$t(r)&&(o=J(o),r=J(r)),!k(t)&&de(o)&&!de(r))return c?!1:(o.value=r,!0)}const i=k(t)&&xr(n)?Number(n)e,Rn=e=>Reflect.getPrototypeOf(e);function Yt(e,t,n=!1,r=!1){e=e.__v_raw;const s=J(e),o=J(t);n||(Je(t,o)&&ve(s,"get",t),ve(s,"get",o));const{has:i}=Rn(s),l=r?Lr:n?Pr:Ht;if(i.call(s,t))return l(e.get(t));if(i.call(s,o))return l(e.get(o));e!==s&&e.get(t)}function Jt(e,t=!1){const n=this.__v_raw,r=J(n),s=J(e);return t||(Je(e,s)&&ve(r,"has",e),ve(r,"has",s)),e===s?n.has(e):n.has(e)||n.has(s)}function Qt(e,t=!1){return e=e.__v_raw,!t&&ve(J(e),"iterate",ct),Reflect.get(e,"size",e)}function ts(e){e=J(e);const t=J(this);return Rn(t).has.call(t,e)||(t.add(e),De(t,"add",e,e)),this}function ns(e,t){t=J(t);const n=J(this),{has:r,get:s}=Rn(n);let o=r.call(n,e);o||(e=J(e),o=r.call(n,e));const i=s.call(n,e);return n.set(e,t),o?Je(t,i)&&De(n,"set",e,t):De(n,"add",e,t),this}function rs(e){const t=J(this),{has:n,get:r}=Rn(t);let s=n.call(t,e);s||(e=J(e),s=n.call(t,e)),r&&r.call(t,e);const o=t.delete(e);return s&&De(t,"delete",e,void 0),o}function ss(){const e=J(this),t=e.size!==0,n=e.clear();return t&&De(e,"clear",void 0,void 0),n}function Zt(e,t){return function(r,s){const o=this,i=o.__v_raw,l=J(i),c=t?Lr:e?Pr:Ht;return!e&&ve(l,"iterate",ct),i.forEach((a,f)=>r.call(s,c(a),c(f),o))}}function en(e,t,n){return function(...r){const s=this.__v_raw,o=J(s),i=yt(o),l=e==="entries"||e===Symbol.iterator&&i,c=e==="keys"&&i,a=s[e](...r),f=n?Lr:t?Pr:Ht;return!t&&ve(o,"iterate",c?fr:ct),{next(){const{value:h,done:m}=a.next();return m?{value:h,done:m}:{value:l?[f(h[0]),f(h[1])]:f(h),done:m}},[Symbol.iterator](){return this}}}}function Be(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function el(){const e={get(o){return Yt(this,o)},get size(){return Qt(this)},has:Jt,add:ts,set:ns,delete:rs,clear:ss,forEach:Zt(!1,!1)},t={get(o){return Yt(this,o,!1,!0)},get size(){return Qt(this)},has:Jt,add:ts,set:ns,delete:rs,clear:ss,forEach:Zt(!1,!0)},n={get(o){return Yt(this,o,!0)},get size(){return Qt(this,!0)},has(o){return Jt.call(this,o,!0)},add:Be("add"),set:Be("set"),delete:Be("delete"),clear:Be("clear"),forEach:Zt(!0,!1)},r={get(o){return Yt(this,o,!0,!0)},get size(){return Qt(this,!0)},has(o){return Jt.call(this,o,!0)},add:Be("add"),set:Be("set"),delete:Be("delete"),clear:Be("clear"),forEach:Zt(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(o=>{e[o]=en(o,!1,!1),n[o]=en(o,!0,!1),t[o]=en(o,!1,!0),r[o]=en(o,!0,!0)}),[e,n,t,r]}const[tl,nl,rl,sl]=el();function Ir(e,t){const n=t?e?sl:rl:e?nl:tl;return(r,s,o)=>s==="__v_isReactive"?!e:s==="__v_isReadonly"?e:s==="__v_raw"?r:Reflect.get(Y(n,s)&&s in r?n:r,s,o)}const ol={get:Ir(!1,!1)},il={get:Ir(!1,!0)},ll={get:Ir(!0,!1)};const po=new WeakMap,go=new WeakMap,mo=new WeakMap,cl=new WeakMap;function al(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function ul(e){return e.__v_skip||!Object.isExtensible(e)?0:al(Mi(e))}function On(e){return $t(e)?e:Mr(e,!1,Ji,ol,po)}function fl(e){return Mr(e,!1,Zi,il,go)}function Ln(e){return Mr(e,!0,Qi,ll,mo)}function Mr(e,t,n,r,s){if(!Z(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=s.get(e);if(o)return o;const i=ul(e);if(i===0)return e;const l=new Proxy(e,i===2?r:n);return s.set(e,l),l}function Rt(e){return $t(e)?Rt(e.__v_raw):!!(e&&e.__v_isReactive)}function $t(e){return!!(e&&e.__v_isReadonly)}function yn(e){return!!(e&&e.__v_isShallow)}function yo(e){return e?!!e.__v_raw:!1}function J(e){const t=e&&e.__v_raw;return t?J(t):e}function dn(e){return Object.isExtensible(e)&&eo(e,"__v_skip",!0),e}const Ht=e=>Z(e)?On(e):e,Pr=e=>Z(e)?Ln(e):e;class _o{constructor(t,n,r,s){this.getter=t,this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new Ar(()=>t(this._value),()=>Ot(this,this.effect._dirtyLevel===3?3:4)),this.effect.computed=this,this.effect.active=this._cacheable=!s,this.__v_isReadonly=r}get value(){const t=J(this);return(!t._cacheable||t.effect.dirty)&&Je(t._value,t._value=t.effect.run())&&Ot(t,5),Nr(t),t.effect._dirtyLevel>=2&&Ot(t,3),t._value}set value(t){this._setter(t)}get _dirty(){return this.effect.dirty}set _dirty(t){this.effect.dirty=t}}function dl(e,t,n=!1){let r,s;const o=K(e);return o?(r=e,s=xe):(r=e.get,s=e.set),new _o(r,s,o||!s,n)}function Nr(e){var t;Xe&<&&(e=J(e),lo(lt,(t=e.dep)!=null?t:e.dep=ao(()=>e.dep=void 0,e instanceof _o?e:void 0)))}function Ot(e,t=5,n,r){e=J(e);const s=e.dep;s&&co(s,t)}function de(e){return!!(e&&e.__v_isRef===!0)}function se(e){return vo(e,!1)}function Fr(e){return vo(e,!0)}function vo(e,t){return de(e)?e:new hl(e,t)}class hl{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:J(t),this._value=n?t:Ht(t)}get value(){return Nr(this),this._value}set value(t){const n=this.__v_isShallow||yn(t)||$t(t);t=n?t:J(t),Je(t,this._rawValue)&&(this._rawValue,this._rawValue=t,this._value=n?t:Ht(t),Ot(this,5))}}function bo(e){return de(e)?e.value:e}const pl={get:(e,t,n)=>bo(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const s=e[t];return de(s)&&!de(n)?(s.value=n,!0):Reflect.set(e,t,n,r)}};function wo(e){return Rt(e)?e:new Proxy(e,pl)}class gl{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:r}=t(()=>Nr(this),()=>Ot(this));this._get=n,this._set=r}get value(){return this._get()}set value(t){this._set(t)}}function ml(e){return new gl(e)}class yl{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return qi(J(this._object),this._key)}}class _l{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function vl(e,t,n){return de(e)?e:K(e)?new _l(e):Z(e)&&arguments.length>1?bl(e,t,n):se(e)}function bl(e,t,n){const r=e[t];return de(r)?r:new yl(e,t,n)}/** +* @vue/runtime-core v3.4.29 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Ye(e,t,n,r){try{return r?e(...r):e()}catch(s){Kt(s,t,n)}}function Se(e,t,n,r){if(K(e)){const s=Ye(e,t,n,r);return s&&Js(s)&&s.catch(o=>{Kt(o,t,n)}),s}if(k(e)){const s=[];for(let o=0;o>>1,s=pe[r],o=Vt(s);oPe&&pe.splice(t,1)}function xl(e){k(e)?vt.push(...e):(!We||!We.includes(e,e.allowRecurse?ot+1:ot))&&vt.push(e),Co()}function os(e,t,n=jt?Pe+1:0){for(;nVt(n)-Vt(r));if(vt.length=0,We){We.push(...t);return}for(We=t,ot=0;ote.id==null?1/0:e.id,Sl=(e,t)=>{const n=Vt(e)-Vt(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function xo(e){dr=!1,jt=!0,pe.sort(Sl);try{for(Pe=0;Peoe(_)?_.trim():_)),h&&(s=n.map(cr))}let l,c=r[l=un(t)]||r[l=un($e(t))];!c&&o&&(c=r[l=un(ft(t))]),c&&Se(c,e,6,s);const a=r[l+"Once"];if(a){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Se(a,e,6,s)}}function So(e,t,n=!1){const r=t.emitsCache,s=r.get(e);if(s!==void 0)return s;const o=e.emits;let i={},l=!1;if(!K(e)){const c=a=>{const f=So(a,t,!0);f&&(l=!0,le(i,f))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!o&&!l?(Z(e)&&r.set(e,null),null):(k(o)?o.forEach(c=>i[c]=null):le(i,o),Z(e)&&r.set(e,i),i)}function Pn(e,t){return!e||!kt(t)?!1:(t=t.slice(2).replace(/Once$/,""),Y(e,t[0].toLowerCase()+t.slice(1))||Y(e,ft(t))||Y(e,t))}let fe=null,Nn=null;function vn(e){const t=fe;return fe=e,Nn=e&&e.type.__scopeId||null,t}function ru(e){Nn=e}function su(){Nn=null}function Al(e,t=fe,n){if(!t||e._n)return e;const r=(...s)=>{r._d&&ws(-1);const o=vn(t);let i;try{i=e(...s)}finally{vn(o),r._d&&ws(1)}return i};return r._n=!0,r._c=!0,r._d=!0,r}function Kn(e){const{type:t,vnode:n,proxy:r,withProxy:s,propsOptions:[o],slots:i,attrs:l,emit:c,render:a,renderCache:f,props:h,data:m,setupState:_,ctx:C,inheritAttrs:L}=e,H=vn(e);let W,D;try{if(n.shapeFlag&4){const y=s||r,M=y;W=Ae(a.call(M,y,f,h,_,m,C)),D=l}else{const y=t;W=Ae(y.length>1?y(h,{attrs:l,slots:i,emit:c}):y(h,null)),D=t.props?l:Rl(l)}}catch(y){Nt.length=0,Kt(y,e,1),W=ie(me)}let p=W;if(D&&L!==!1){const y=Object.keys(D),{shapeFlag:M}=p;y.length&&M&7&&(o&&y.some(Er)&&(D=Ol(D,o)),p=Qe(p,D,!1,!0))}return n.dirs&&(p=Qe(p,null,!1,!0),p.dirs=p.dirs?p.dirs.concat(n.dirs):n.dirs),n.transition&&(p.transition=n.transition),W=p,vn(H),W}const Rl=e=>{let t;for(const n in e)(n==="class"||n==="style"||kt(n))&&((t||(t={}))[n]=e[n]);return t},Ol=(e,t)=>{const n={};for(const r in e)(!Er(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function Ll(e,t,n){const{props:r,children:s,component:o}=e,{props:i,children:l,patchFlag:c}=t,a=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return r?is(r,i,a):!!i;if(c&8){const f=t.dynamicProps;for(let h=0;he.__isSuspense;function Oo(e,t){t&&t.pendingBranch?k(e)?t.effects.push(...e):t.effects.push(e):xl(e)}function Fn(e,t,n=ue,r=!1){if(n){const s=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...i)=>{Ze();const l=qt(n),c=Se(t,n,e,i);return l(),et(),c});return r?s.unshift(o):s.push(o),o}}const Ue=e=>(t,n=ue)=>{(!Gt||e==="sp")&&Fn(e,(...r)=>t(...r),n)},Pl=Ue("bm"),xt=Ue("m"),Nl=Ue("bu"),Fl=Ue("u"),Lo=Ue("bum"),$n=Ue("um"),$l=Ue("sp"),Hl=Ue("rtg"),jl=Ue("rtc");function Vl(e,t=ue){Fn("ec",e,t)}function lu(e,t){if(fe===null)return e;const n=Vn(fe),r=e.dirs||(e.dirs=[]);for(let s=0;st(i,l,void 0,o));else{const i=Object.keys(e);s=new Array(i.length);for(let l=0,c=i.length;l!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function au(e){K(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:s=200,timeout:o,suspensible:i=!0,onError:l}=e;let c=null,a,f=0;const h=()=>(f++,c=null,m()),m=()=>{let _;return c||(_=c=t().catch(C=>{if(C=C instanceof Error?C:new Error(String(C)),l)return new Promise((L,H)=>{l(C,()=>L(h()),()=>H(C),f+1)});throw C}).then(C=>_!==c&&c?c:(C&&(C.__esModule||C[Symbol.toStringTag]==="Module")&&(C=C.default),a=C,C)))};return Hr({name:"AsyncComponentWrapper",__asyncLoader:m,get __asyncResolved(){return a},setup(){const _=ue;if(a)return()=>Wn(a,_);const C=D=>{c=null,Kt(D,_,13,!r)};if(i&&_.suspense||Gt)return m().then(D=>()=>Wn(D,_)).catch(D=>(C(D),()=>r?ie(r,{error:D}):null));const L=se(!1),H=se(),W=se(!!s);return s&&setTimeout(()=>{W.value=!1},s),o!=null&&setTimeout(()=>{if(!L.value&&!H.value){const D=new Error(`Async component timed out after ${o}ms.`);C(D),H.value=D}},o),m().then(()=>{L.value=!0,_.parent&&Wt(_.parent.vnode)&&(_.parent.effect.dirty=!0,Mn(_.parent.update))}).catch(D=>{C(D),H.value=D}),()=>{if(L.value&&a)return Wn(a,_);if(H.value&&r)return ie(r,{error:H.value});if(n&&!W.value)return ie(n)}}})}function Wn(e,t){const{ref:n,props:r,children:s,ce:o}=t.vnode,i=ie(e,r,s);return i.ref=n,i.ce=o,delete t.vnode.ce,i}function uu(e,t,n={},r,s){if(fe.isCE||fe.parent&&bt(fe.parent)&&fe.parent.isCE)return t!=="default"&&(n.name=t),ie("slot",n,r&&r());let o=e[t];o&&o._c&&(o._d=!1),Qo();const i=o&&Io(o(n)),l=ei(_e,{key:n.key||i&&i.key||`_${t}`},i||(r?r():[]),i&&e._===1?64:-2);return!s&&l.scopeId&&(l.slotScopeIds=[l.scopeId+"-s"]),o&&o._c&&(o._d=!0),l}function Io(e){return e.some(t=>Cn(t)?!(t.type===me||t.type===_e&&!Io(t.children)):!0)?e:null}function fu(e,t){const n={};for(const r in e)n[/[A-Z]/.test(r)?`on:${r}`:un(r)]=e[r];return n}const hr=e=>e?si(e)?Vn(e):hr(e.parent):null,Lt=le(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>hr(e.parent),$root:e=>hr(e.root),$emit:e=>e.emit,$options:e=>jr(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,Mn(e.update)}),$nextTick:e=>e.n||(e.n=In.bind(e.proxy)),$watch:e=>ac.bind(e)}),qn=(e,t)=>e!==te&&!e.__isScriptSetup&&Y(e,t),Dl={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:r,data:s,props:o,accessCache:i,type:l,appContext:c}=e;let a;if(t[0]!=="$"){const _=i[t];if(_!==void 0)switch(_){case 1:return r[t];case 2:return s[t];case 4:return n[t];case 3:return o[t]}else{if(qn(r,t))return i[t]=1,r[t];if(s!==te&&Y(s,t))return i[t]=2,s[t];if((a=e.propsOptions[0])&&Y(a,t))return i[t]=3,o[t];if(n!==te&&Y(n,t))return i[t]=4,n[t];pr&&(i[t]=0)}}const f=Lt[t];let h,m;if(f)return t==="$attrs"&&ve(e.attrs,"get",""),f(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==te&&Y(n,t))return i[t]=4,n[t];if(m=c.config.globalProperties,Y(m,t))return m[t]},set({_:e},t,n){const{data:r,setupState:s,ctx:o}=e;return qn(s,t)?(s[t]=n,!0):r!==te&&Y(r,t)?(r[t]=n,!0):Y(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:s,propsOptions:o}},i){let l;return!!n[i]||e!==te&&Y(e,i)||qn(t,i)||(l=o[0])&&Y(l,i)||Y(r,i)||Y(Lt,i)||Y(s.config.globalProperties,i)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Y(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function du(){return Ul().slots}function Ul(){const e=jn();return e.setupContext||(e.setupContext=ii(e))}function cs(e){return k(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let pr=!0;function Bl(e){const t=jr(e),n=e.proxy,r=e.ctx;pr=!1,t.beforeCreate&&as(t.beforeCreate,e,"bc");const{data:s,computed:o,methods:i,watch:l,provide:c,inject:a,created:f,beforeMount:h,mounted:m,beforeUpdate:_,updated:C,activated:L,deactivated:H,beforeDestroy:W,beforeUnmount:D,destroyed:p,unmounted:y,render:M,renderTracked:A,renderTriggered:F,errorCaptured:$,serverPrefetch:I,expose:w,inheritAttrs:N,components:T,directives:G,filters:ne}=t;if(a&&kl(a,r,null),i)for(const X in i){const V=i[X];K(V)&&(r[X]=V.bind(n))}if(s){const X=s.call(n,n);Z(X)&&(e.data=On(X))}if(pr=!0,o)for(const X in o){const V=o[X],He=K(V)?V.bind(n,n):K(V.get)?V.get.bind(n,n):xe,zt=!K(V)&&K(V.set)?V.set.bind(n):xe,tt=re({get:He,set:zt});Object.defineProperty(r,X,{enumerable:!0,configurable:!0,get:()=>tt.value,set:Le=>tt.value=Le})}if(l)for(const X in l)Mo(l[X],r,n,X);if(c){const X=K(c)?c.call(n):c;Reflect.ownKeys(X).forEach(V=>{Xl(V,X[V])})}f&&as(f,e,"c");function U(X,V){k(V)?V.forEach(He=>X(He.bind(n))):V&&X(V.bind(n))}if(U(Pl,h),U(xt,m),U(Nl,_),U(Fl,C),U(uc,L),U(fc,H),U(Vl,$),U(jl,A),U(Hl,F),U(Lo,D),U($n,y),U($l,I),k(w))if(w.length){const X=e.exposed||(e.exposed={});w.forEach(V=>{Object.defineProperty(X,V,{get:()=>n[V],set:He=>n[V]=He})})}else e.exposed||(e.exposed={});M&&e.render===xe&&(e.render=M),N!=null&&(e.inheritAttrs=N),T&&(e.components=T),G&&(e.directives=G)}function kl(e,t,n=xe){k(e)&&(e=gr(e));for(const r in e){const s=e[r];let o;Z(s)?"default"in s?o=wt(s.from||r,s.default,!0):o=wt(s.from||r):o=wt(s),de(o)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>o.value,set:i=>o.value=i}):t[r]=o}}function as(e,t,n){Se(k(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function Mo(e,t,n,r){const s=r.includes(".")?Wo(n,r):()=>n[r];if(oe(e)){const o=t[e];K(o)&&Ne(s,o)}else if(K(e))Ne(s,e.bind(n));else if(Z(e))if(k(e))e.forEach(o=>Mo(o,t,n,r));else{const o=K(e.handler)?e.handler.bind(n):t[e.handler];K(o)&&Ne(s,o,e)}}function jr(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:s,optionsCache:o,config:{optionMergeStrategies:i}}=e.appContext,l=o.get(t);let c;return l?c=l:!s.length&&!n&&!r?c=t:(c={},s.length&&s.forEach(a=>bn(c,a,i,!0)),bn(c,t,i)),Z(t)&&o.set(t,c),c}function bn(e,t,n,r=!1){const{mixins:s,extends:o}=t;o&&bn(e,o,n,!0),s&&s.forEach(i=>bn(e,i,n,!0));for(const i in t)if(!(r&&i==="expose")){const l=Kl[i]||n&&n[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const Kl={data:us,props:fs,emits:fs,methods:At,computed:At,beforeCreate:ge,created:ge,beforeMount:ge,mounted:ge,beforeUpdate:ge,updated:ge,beforeDestroy:ge,beforeUnmount:ge,destroyed:ge,unmounted:ge,activated:ge,deactivated:ge,errorCaptured:ge,serverPrefetch:ge,components:At,directives:At,watch:ql,provide:us,inject:Wl};function us(e,t){return t?e?function(){return le(K(e)?e.call(this,this):e,K(t)?t.call(this,this):t)}:t:e}function Wl(e,t){return At(gr(e),gr(t))}function gr(e){if(k(e)){const t={};for(let n=0;n1)return n&&K(t)?t.call(r&&r.proxy):t}}const No={},Fo=()=>Object.create(No),$o=e=>Object.getPrototypeOf(e)===No;function Yl(e,t,n,r=!1){const s={},o=Fo();e.propsDefaults=Object.create(null),Ho(e,t,s,o);for(const i in e.propsOptions[0])i in s||(s[i]=void 0);n?e.props=r?s:fl(s):e.type.props?e.props=s:e.props=o,e.attrs=o}function Jl(e,t,n,r){const{props:s,attrs:o,vnode:{patchFlag:i}}=e,l=J(s),[c]=e.propsOptions;let a=!1;if((r||i>0)&&!(i&16)){if(i&8){const f=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[m,_]=jo(h,t,!0);le(i,m),_&&l.push(..._)};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}if(!o&&!c)return Z(e)&&r.set(e,mt),mt;if(k(o))for(let f=0;f-1,_[1]=L<0||C-1||Y(_,"default"))&&l.push(h)}}}const a=[i,l];return Z(e)&&r.set(e,a),a}function ds(e){return e[0]!=="$"&&!_t(e)}function hs(e){return e===null?"null":typeof e=="function"?e.name||"":typeof e=="object"&&e.constructor&&e.constructor.name||""}function ps(e,t){return hs(e)===hs(t)}function gs(e,t){return k(t)?t.findIndex(n=>ps(n,e)):K(t)&&ps(t,e)?0:-1}const Vo=e=>e[0]==="_"||e==="$stable",Vr=e=>k(e)?e.map(Ae):[Ae(e)],Ql=(e,t,n)=>{if(t._n)return t;const r=Al((...s)=>Vr(t(...s)),n);return r._c=!1,r},Do=(e,t,n)=>{const r=e._ctx;for(const s in e){if(Vo(s))continue;const o=e[s];if(K(o))t[s]=Ql(s,o,r);else if(o!=null){const i=Vr(o);t[s]=()=>i}}},Uo=(e,t)=>{const n=Vr(t);e.slots.default=()=>n},Zl=(e,t)=>{const n=e.slots=Fo();if(e.vnode.shapeFlag&32){const r=t._;r?(le(n,t),eo(n,"_",r,!0)):Do(t,n)}else t&&Uo(e,t)},ec=(e,t,n)=>{const{vnode:r,slots:s}=e;let o=!0,i=te;if(r.shapeFlag&32){const l=t._;l?n&&l===1?o=!1:(le(s,t),!n&&l===1&&delete s._):(o=!t.$stable,Do(t,s)),i=t}else t&&(Uo(e,t),i={default:1});if(o)for(const l in s)!Vo(l)&&i[l]==null&&delete s[l]};function wn(e,t,n,r,s=!1){if(k(e)){e.forEach((m,_)=>wn(m,t&&(k(t)?t[_]:t),n,r,s));return}if(bt(r)&&!s)return;const o=r.shapeFlag&4?Vn(r.component):r.el,i=s?null:o,{i:l,r:c}=e,a=t&&t.r,f=l.refs===te?l.refs={}:l.refs,h=l.setupState;if(a!=null&&a!==c&&(oe(a)?(f[a]=null,Y(h,a)&&(h[a]=null)):de(a)&&(a.value=null)),K(c))Ye(c,l,12,[i,f]);else{const m=oe(c),_=de(c);if(m||_){const C=()=>{if(e.f){const L=m?Y(h,c)?h[c]:f[c]:c.value;s?k(L)&&Cr(L,o):k(L)?L.includes(o)||L.push(o):m?(f[c]=[o],Y(h,c)&&(h[c]=f[c])):(c.value=[o],e.k&&(f[e.k]=c.value))}else m?(f[c]=i,Y(h,c)&&(h[c]=i)):_&&(c.value=i,e.k&&(f[e.k]=i))};i?(C.id=-1,ye(C,n)):C()}}}let ms=!1;const pt=()=>{ms||(console.error("Hydration completed but contains mismatches."),ms=!0)},tc=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",nc=e=>e.namespaceURI.includes("MathML"),tn=e=>{if(tc(e))return"svg";if(nc(e))return"mathml"},nn=e=>e.nodeType===8;function rc(e){const{mt:t,p:n,o:{patchProp:r,createText:s,nextSibling:o,parentNode:i,remove:l,insert:c,createComment:a}}=e,f=(p,y)=>{if(!y.hasChildNodes()){n(null,p,y),_n(),y._vnode=p;return}h(y.firstChild,p,null,null,null),_n(),y._vnode=p},h=(p,y,M,A,F,$=!1)=>{$=$||!!y.dynamicChildren;const I=nn(p)&&p.data==="[",w=()=>L(p,y,M,A,F,I),{type:N,ref:T,shapeFlag:G,patchFlag:ne}=y;let ce=p.nodeType;y.el=p,ne===-2&&($=!1,y.dynamicChildren=null);let U=null;switch(N){case Et:ce!==3?y.children===""?(c(y.el=s(""),i(p),p),U=p):U=w():(p.data!==y.children&&(pt(),p.data=y.children),U=o(p));break;case me:D(p)?(U=o(p),W(y.el=p.content.firstChild,p,M)):ce!==8||I?U=w():U=o(p);break;case Pt:if(I&&(p=o(p),ce=p.nodeType),ce===1||ce===3){U=p;const X=!y.children.length;for(let V=0;V{$=$||!!y.dynamicChildren;const{type:I,props:w,patchFlag:N,shapeFlag:T,dirs:G,transition:ne}=y,ce=I==="input"||I==="option";if(ce||N!==-1){G&&Me(y,null,M,"created");let U=!1;if(D(p)){U=ko(A,ne)&&M&&M.vnode.props&&M.vnode.props.appear;const V=p.content.firstChild;U&&ne.beforeEnter(V),W(V,p,M),y.el=p=V}if(T&16&&!(w&&(w.innerHTML||w.textContent))){let V=_(p.firstChild,y,p,M,A,F,$);for(;V;){pt();const He=V;V=V.nextSibling,l(He)}}else T&8&&p.textContent!==y.children&&(pt(),p.textContent=y.children);if(w)if(ce||!$||N&48)for(const V in w)(ce&&(V.endsWith("value")||V==="indeterminate")||kt(V)&&!_t(V)||V[0]===".")&&r(p,V,null,w[V],void 0,void 0,M);else w.onClick&&r(p,"onClick",null,w.onClick,void 0,void 0,M);let X;(X=w&&w.onVnodeBeforeMount)&&Ce(X,M,y),G&&Me(y,null,M,"beforeMount"),((X=w&&w.onVnodeMounted)||G||U)&&Oo(()=>{X&&Ce(X,M,y),U&&ne.enter(p),G&&Me(y,null,M,"mounted")},A)}return p.nextSibling},_=(p,y,M,A,F,$,I)=>{I=I||!!y.dynamicChildren;const w=y.children,N=w.length;for(let T=0;T{const{slotScopeIds:I}=y;I&&(F=F?F.concat(I):I);const w=i(p),N=_(o(p),y,w,M,A,F,$);return N&&nn(N)&&N.data==="]"?o(y.anchor=N):(pt(),c(y.anchor=a("]"),w,N),N)},L=(p,y,M,A,F,$)=>{if(pt(),y.el=null,$){const N=H(p);for(;;){const T=o(p);if(T&&T!==N)l(T);else break}}const I=o(p),w=i(p);return l(p),n(null,y,w,I,M,A,tn(w),F),I},H=(p,y="[",M="]")=>{let A=0;for(;p;)if(p=o(p),p&&nn(p)&&(p.data===y&&A++,p.data===M)){if(A===0)return o(p);A--}return p},W=(p,y,M)=>{const A=y.parentNode;A&&A.replaceChild(p,y);let F=M;for(;F;)F.vnode.el===y&&(F.vnode.el=F.subTree.el=p),F=F.parent},D=p=>p.nodeType===1&&p.tagName.toLowerCase()==="template";return[f,h]}const ye=Oo;function sc(e){return Bo(e)}function oc(e){return Bo(e,rc)}function Bo(e,t){const n=to();n.__VUE__=!0;const{insert:r,remove:s,patchProp:o,createElement:i,createText:l,createComment:c,setText:a,setElementText:f,parentNode:h,nextSibling:m,setScopeId:_=xe,insertStaticContent:C}=e,L=(u,d,g,v=null,b=null,S=null,O=void 0,x=null,R=!!d.dynamicChildren)=>{if(u===d)return;u&&!it(u,d)&&(v=Xt(u),Le(u,b,S,!0),u=null),d.patchFlag===-2&&(R=!1,d.dynamicChildren=null);const{type:E,ref:P,shapeFlag:B}=d;switch(E){case Et:H(u,d,g,v);break;case me:W(u,d,g,v);break;case Pt:u==null&&D(d,g,v,O);break;case _e:T(u,d,g,v,b,S,O,x,R);break;default:B&1?M(u,d,g,v,b,S,O,x,R):B&6?G(u,d,g,v,b,S,O,x,R):(B&64||B&128)&&E.process(u,d,g,v,b,S,O,x,R,dt)}P!=null&&b&&wn(P,u&&u.ref,S,d||u,!d)},H=(u,d,g,v)=>{if(u==null)r(d.el=l(d.children),g,v);else{const b=d.el=u.el;d.children!==u.children&&a(b,d.children)}},W=(u,d,g,v)=>{u==null?r(d.el=c(d.children||""),g,v):d.el=u.el},D=(u,d,g,v)=>{[u.el,u.anchor]=C(u.children,d,g,v,u.el,u.anchor)},p=({el:u,anchor:d},g,v)=>{let b;for(;u&&u!==d;)b=m(u),r(u,g,v),u=b;r(d,g,v)},y=({el:u,anchor:d})=>{let g;for(;u&&u!==d;)g=m(u),s(u),u=g;s(d)},M=(u,d,g,v,b,S,O,x,R)=>{d.type==="svg"?O="svg":d.type==="math"&&(O="mathml"),u==null?A(d,g,v,b,S,O,x,R):I(u,d,b,S,O,x,R)},A=(u,d,g,v,b,S,O,x)=>{let R,E;const{props:P,shapeFlag:B,transition:j,dirs:q}=u;if(R=u.el=i(u.type,S,P&&P.is,P),B&8?f(R,u.children):B&16&&$(u.children,R,null,v,b,Gn(u,S),O,x),q&&Me(u,null,v,"created"),F(R,u,u.scopeId,O,v),P){for(const ee in P)ee!=="value"&&!_t(ee)&&o(R,ee,null,P[ee],S,u.children,v,b,je);"value"in P&&o(R,"value",null,P.value,S),(E=P.onVnodeBeforeMount)&&Ce(E,v,u)}q&&Me(u,null,v,"beforeMount");const z=ko(b,j);z&&j.beforeEnter(R),r(R,d,g),((E=P&&P.onVnodeMounted)||z||q)&&ye(()=>{E&&Ce(E,v,u),z&&j.enter(R),q&&Me(u,null,v,"mounted")},b)},F=(u,d,g,v,b)=>{if(g&&_(u,g),v)for(let S=0;S{for(let E=R;E{const x=d.el=u.el;let{patchFlag:R,dynamicChildren:E,dirs:P}=d;R|=u.patchFlag&16;const B=u.props||te,j=d.props||te;let q;if(g&&nt(g,!1),(q=j.onVnodeBeforeUpdate)&&Ce(q,g,d,u),P&&Me(d,u,g,"beforeUpdate"),g&&nt(g,!0),E?w(u.dynamicChildren,E,x,g,v,Gn(d,b),S):O||V(u,d,x,null,g,v,Gn(d,b),S,!1),R>0){if(R&16)N(x,d,B,j,g,v,b);else if(R&2&&B.class!==j.class&&o(x,"class",null,j.class,b),R&4&&o(x,"style",B.style,j.style,b),R&8){const z=d.dynamicProps;for(let ee=0;ee{q&&Ce(q,g,d,u),P&&Me(d,u,g,"updated")},v)},w=(u,d,g,v,b,S,O)=>{for(let x=0;x{if(g!==v){if(g!==te)for(const x in g)!_t(x)&&!(x in v)&&o(u,x,g[x],null,O,d.children,b,S,je);for(const x in v){if(_t(x))continue;const R=v[x],E=g[x];R!==E&&x!=="value"&&o(u,x,E,R,O,d.children,b,S,je)}"value"in v&&o(u,"value",g.value,v.value,O)}},T=(u,d,g,v,b,S,O,x,R)=>{const E=d.el=u?u.el:l(""),P=d.anchor=u?u.anchor:l("");let{patchFlag:B,dynamicChildren:j,slotScopeIds:q}=d;q&&(x=x?x.concat(q):q),u==null?(r(E,g,v),r(P,g,v),$(d.children||[],g,P,b,S,O,x,R)):B>0&&B&64&&j&&u.dynamicChildren?(w(u.dynamicChildren,j,g,b,S,O,x),(d.key!=null||b&&d===b.subTree)&&Dr(u,d,!0)):V(u,d,g,P,b,S,O,x,R)},G=(u,d,g,v,b,S,O,x,R)=>{d.slotScopeIds=x,u==null?d.shapeFlag&512?b.ctx.activate(d,g,v,O,R):ne(d,g,v,b,S,O,R):ce(u,d,R)},ne=(u,d,g,v,b,S,O)=>{const x=u.component=Sc(u,v,b);if(Wt(u)&&(x.ctx.renderer=dt),Tc(x),x.asyncDep){if(b&&b.registerDep(x,U,O),!u.el){const R=x.subTree=ie(me);W(null,R,d,g)}}else U(x,u,d,g,b,S,O)},ce=(u,d,g)=>{const v=d.component=u.component;if(Ll(u,d,g))if(v.asyncDep&&!v.asyncResolved){X(v,d,g);return}else v.next=d,Cl(v.update),v.effect.dirty=!0,v.update();else d.el=u.el,v.vnode=d},U=(u,d,g,v,b,S,O)=>{const x=()=>{if(u.isMounted){let{next:P,bu:B,u:j,parent:q,vnode:z}=u;{const ht=Ko(u);if(ht){P&&(P.el=z.el,X(u,P,O)),ht.asyncDep.then(()=>{u.isUnmounted||x()});return}}let ee=P,Q;nt(u,!1),P?(P.el=z.el,X(u,P,O)):P=z,B&&fn(B),(Q=P.props&&P.props.onVnodeBeforeUpdate)&&Ce(Q,q,P,z),nt(u,!0);const ae=Kn(u),Te=u.subTree;u.subTree=ae,L(Te,ae,h(Te.el),Xt(Te),u,b,S),P.el=ae.el,ee===null&&Il(u,ae.el),j&&ye(j,b),(Q=P.props&&P.props.onVnodeUpdated)&&ye(()=>Ce(Q,q,P,z),b)}else{let P;const{el:B,props:j}=d,{bm:q,m:z,parent:ee}=u,Q=bt(d);if(nt(u,!1),q&&fn(q),!Q&&(P=j&&j.onVnodeBeforeMount)&&Ce(P,ee,d),nt(u,!0),B&&Bn){const ae=()=>{u.subTree=Kn(u),Bn(B,u.subTree,u,b,null)};Q?d.type.__asyncLoader().then(()=>!u.isUnmounted&&ae()):ae()}else{const ae=u.subTree=Kn(u);L(null,ae,g,v,u,b,S),d.el=ae.el}if(z&&ye(z,b),!Q&&(P=j&&j.onVnodeMounted)){const ae=d;ye(()=>Ce(P,ee,ae),b)}(d.shapeFlag&256||ee&&bt(ee.vnode)&&ee.vnode.shapeFlag&256)&&u.a&&ye(u.a,b),u.isMounted=!0,d=g=v=null}},R=u.effect=new Ar(x,xe,()=>Mn(E),u.scope),E=u.update=()=>{R.dirty&&R.run()};E.id=u.uid,nt(u,!0),E()},X=(u,d,g)=>{d.component=u;const v=u.vnode.props;u.vnode=d,u.next=null,Jl(u,d.props,v,g),ec(u,d.children,g),Ze(),os(u),et()},V=(u,d,g,v,b,S,O,x,R=!1)=>{const E=u&&u.children,P=u?u.shapeFlag:0,B=d.children,{patchFlag:j,shapeFlag:q}=d;if(j>0){if(j&128){zt(E,B,g,v,b,S,O,x,R);return}else if(j&256){He(E,B,g,v,b,S,O,x,R);return}}q&8?(P&16&&je(E,b,S),B!==E&&f(g,B)):P&16?q&16?zt(E,B,g,v,b,S,O,x,R):je(E,b,S,!0):(P&8&&f(g,""),q&16&&$(B,g,v,b,S,O,x,R))},He=(u,d,g,v,b,S,O,x,R)=>{u=u||mt,d=d||mt;const E=u.length,P=d.length,B=Math.min(E,P);let j;for(j=0;jP?je(u,b,S,!0,!1,B):$(d,g,v,b,S,O,x,R,B)},zt=(u,d,g,v,b,S,O,x,R)=>{let E=0;const P=d.length;let B=u.length-1,j=P-1;for(;E<=B&&E<=j;){const q=u[E],z=d[E]=R?Ge(d[E]):Ae(d[E]);if(it(q,z))L(q,z,g,null,b,S,O,x,R);else break;E++}for(;E<=B&&E<=j;){const q=u[B],z=d[j]=R?Ge(d[j]):Ae(d[j]);if(it(q,z))L(q,z,g,null,b,S,O,x,R);else break;B--,j--}if(E>B){if(E<=j){const q=j+1,z=qj)for(;E<=B;)Le(u[E],b,S,!0),E++;else{const q=E,z=E,ee=new Map;for(E=z;E<=j;E++){const be=d[E]=R?Ge(d[E]):Ae(d[E]);be.key!=null&&ee.set(be.key,E)}let Q,ae=0;const Te=j-z+1;let ht=!1,zr=0;const St=new Array(Te);for(E=0;E=Te){Le(be,b,S,!0);continue}let Ie;if(be.key!=null)Ie=ee.get(be.key);else for(Q=z;Q<=j;Q++)if(St[Q-z]===0&&it(be,d[Q])){Ie=Q;break}Ie===void 0?Le(be,b,S,!0):(St[Ie-z]=E+1,Ie>=zr?zr=Ie:ht=!0,L(be,d[Ie],g,null,b,S,O,x,R),ae++)}const Xr=ht?ic(St):mt;for(Q=Xr.length-1,E=Te-1;E>=0;E--){const be=z+E,Ie=d[be],Yr=be+1{const{el:S,type:O,transition:x,children:R,shapeFlag:E}=u;if(E&6){tt(u.component.subTree,d,g,v);return}if(E&128){u.suspense.move(d,g,v);return}if(E&64){O.move(u,d,g,dt);return}if(O===_e){r(S,d,g);for(let B=0;Bx.enter(S),b);else{const{leave:B,delayLeave:j,afterLeave:q}=x,z=()=>r(S,d,g),ee=()=>{B(S,()=>{z(),q&&q()})};j?j(S,z,ee):ee()}else r(S,d,g)},Le=(u,d,g,v=!1,b=!1)=>{const{type:S,props:O,ref:x,children:R,dynamicChildren:E,shapeFlag:P,patchFlag:B,dirs:j,memoIndex:q}=u;if(x!=null&&wn(x,null,g,u,!0),q!=null&&(d.renderCache[q]=void 0),P&256){d.ctx.deactivate(u);return}const z=P&1&&j,ee=!bt(u);let Q;if(ee&&(Q=O&&O.onVnodeBeforeUnmount)&&Ce(Q,d,u),P&6)Oi(u.component,g,v);else{if(P&128){u.suspense.unmount(g,v);return}z&&Me(u,null,d,"beforeUnmount"),P&64?u.type.remove(u,d,g,b,dt,v):E&&(S!==_e||B>0&&B&64)?je(E,d,g,!1,!0):(S===_e&&B&384||!b&&P&16)&&je(R,d,g),v&&qr(u)}(ee&&(Q=O&&O.onVnodeUnmounted)||z)&&ye(()=>{Q&&Ce(Q,d,u),z&&Me(u,null,d,"unmounted")},g)},qr=u=>{const{type:d,el:g,anchor:v,transition:b}=u;if(d===_e){Ri(g,v);return}if(d===Pt){y(u);return}const S=()=>{s(g),b&&!b.persisted&&b.afterLeave&&b.afterLeave()};if(u.shapeFlag&1&&b&&!b.persisted){const{leave:O,delayLeave:x}=b,R=()=>O(g,S);x?x(u.el,S,R):R()}else S()},Ri=(u,d)=>{let g;for(;u!==d;)g=m(u),s(u),u=g;s(d)},Oi=(u,d,g)=>{const{bum:v,scope:b,update:S,subTree:O,um:x,m:R,a:E}=u;ys(R),ys(E),v&&fn(v),b.stop(),S&&(S.active=!1,Le(O,u,d,g)),x&&ye(x,d),ye(()=>{u.isUnmounted=!0},d),d&&d.pendingBranch&&!d.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===d.pendingId&&(d.deps--,d.deps===0&&d.resolve())},je=(u,d,g,v=!1,b=!1,S=0)=>{for(let O=S;Ou.shapeFlag&6?Xt(u.component.subTree):u.shapeFlag&128?u.suspense.next():m(u.anchor||u.el);let Dn=!1;const Gr=(u,d,g)=>{u==null?d._vnode&&Le(d._vnode,null,null,!0):L(d._vnode||null,u,d,null,null,null,g),Dn||(Dn=!0,os(),_n(),Dn=!1),d._vnode=u},dt={p:L,um:Le,m:tt,r:qr,mt:ne,mc:$,pc:V,pbc:w,n:Xt,o:e};let Un,Bn;return t&&([Un,Bn]=t(dt)),{render:Gr,hydrate:Un,createApp:zl(Gr,Un)}}function Gn({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function nt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function ko(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Dr(e,t,n=!1){const r=e.children,s=t.children;if(k(r)&&k(s))for(let o=0;o>1,e[n[l]]0&&(t[r]=n[o-1]),n[o]=r)}}for(o=n.length,i=n[o-1];o-- >0;)n[o]=i,i=t[i];return n}function Ko(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Ko(t)}function ys(e){if(e)for(let t=0;twt(lc);function Ur(e,t){return Hn(e,null,t)}function hu(e,t){return Hn(e,null,{flush:"post"})}const rn={};function Ne(e,t,n){return Hn(e,t,n)}function Hn(e,t,{immediate:n,deep:r,flush:s,once:o,onTrack:i,onTrigger:l}=te){if(t&&o){const A=t;t=(...F)=>{A(...F),M()}}const c=ue,a=A=>r===!0?A:ze(A,r===!1?1:void 0);let f,h=!1,m=!1;if(de(e)?(f=()=>e.value,h=yn(e)):Rt(e)?(f=()=>a(e),h=!0):k(e)?(m=!0,h=e.some(A=>Rt(A)||yn(A)),f=()=>e.map(A=>{if(de(A))return A.value;if(Rt(A))return a(A);if(K(A))return Ye(A,c,2)})):K(e)?t?f=()=>Ye(e,c,2):f=()=>(_&&_(),Se(e,c,3,[C])):f=xe,t&&r){const A=f;f=()=>ze(A())}let _,C=A=>{_=p.onStop=()=>{Ye(A,c,4),_=p.onStop=void 0}},L;if(Gt)if(C=xe,t?n&&Se(t,c,3,[f(),m?[]:void 0,C]):f(),s==="sync"){const A=cc();L=A.__watcherHandles||(A.__watcherHandles=[])}else return xe;let H=m?new Array(e.length).fill(rn):rn;const W=()=>{if(!(!p.active||!p.dirty))if(t){const A=p.run();(r||h||(m?A.some((F,$)=>Je(F,H[$])):Je(A,H)))&&(_&&_(),Se(t,c,3,[A,H===rn?void 0:m&&H[0]===rn?[]:H,C]),H=A)}else p.run()};W.allowRecurse=!!t;let D;s==="sync"?D=W:s==="post"?D=()=>ye(W,c&&c.suspense):(W.pre=!0,c&&(W.id=c.uid),D=()=>Mn(W));const p=new Ar(f,xe,D),y=so(),M=()=>{p.stop(),y&&Cr(y.effects,p)};return t?n?W():H=p.run():s==="post"?ye(p.run.bind(p),c&&c.suspense):p.run(),L&&L.push(M),M}function ac(e,t,n){const r=this.proxy,s=oe(e)?e.includes(".")?Wo(r,e):()=>r[e]:e.bind(r,r);let o;K(t)?o=t:(o=t.handler,n=t);const i=qt(this),l=Hn(s,o.bind(r),n);return i(),l}function Wo(e,t){const n=t.split(".");return()=>{let r=e;for(let s=0;s{ze(r,t,n)});else if(Zs(e)){for(const r in e)ze(e[r],t,n);for(const r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&ze(e[r],t,n)}return e}const Wt=e=>e.type.__isKeepAlive;function uc(e,t){qo(e,"a",t)}function fc(e,t){qo(e,"da",t)}function qo(e,t,n=ue){const r=e.__wdc||(e.__wdc=()=>{let s=n;for(;s;){if(s.isDeactivated)return;s=s.parent}return e()});if(Fn(t,r,n),n){let s=n.parent;for(;s&&s.parent;)Wt(s.parent.vnode)&&dc(r,t,n,s),s=s.parent}}function dc(e,t,n,r){const s=Fn(t,e,r,!0);$n(()=>{Cr(r[t],s)},n)}const qe=Symbol("_leaveCb"),sn=Symbol("_enterCb");function hc(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return xt(()=>{e.isMounted=!0}),Lo(()=>{e.isUnmounting=!0}),e}const Ee=[Function,Array],Go={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Ee,onEnter:Ee,onAfterEnter:Ee,onEnterCancelled:Ee,onBeforeLeave:Ee,onLeave:Ee,onAfterLeave:Ee,onLeaveCancelled:Ee,onBeforeAppear:Ee,onAppear:Ee,onAfterAppear:Ee,onAppearCancelled:Ee},zo=e=>{const t=e.subTree;return t.component?zo(t.component):t},pc={name:"BaseTransition",props:Go,setup(e,{slots:t}){const n=jn(),r=hc();return()=>{const s=t.default&&Yo(t.default(),!0);if(!s||!s.length)return;let o=s[0];if(s.length>1){for(const m of s)if(m.type!==me){o=m;break}}const i=J(e),{mode:l}=i;if(r.isLeaving)return zn(o);const c=_s(o);if(!c)return zn(o);let a=yr(c,i,r,n,m=>a=m);En(c,a);const f=n.subTree,h=f&&_s(f);if(h&&h.type!==me&&!it(c,h)&&zo(n).type!==me){const m=yr(h,i,r,n);if(En(h,m),l==="out-in"&&c.type!==me)return r.isLeaving=!0,m.afterLeave=()=>{r.isLeaving=!1,n.update.active!==!1&&(n.effect.dirty=!0,n.update())},zn(o);l==="in-out"&&c.type!==me&&(m.delayLeave=(_,C,L)=>{const H=Xo(r,h);H[String(h.key)]=h,_[qe]=()=>{C(),_[qe]=void 0,delete a.delayedLeave},a.delayedLeave=L})}return o}}},gc=pc;function Xo(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function yr(e,t,n,r,s){const{appear:o,mode:i,persisted:l=!1,onBeforeEnter:c,onEnter:a,onAfterEnter:f,onEnterCancelled:h,onBeforeLeave:m,onLeave:_,onAfterLeave:C,onLeaveCancelled:L,onBeforeAppear:H,onAppear:W,onAfterAppear:D,onAppearCancelled:p}=t,y=String(e.key),M=Xo(n,e),A=(I,w)=>{I&&Se(I,r,9,w)},F=(I,w)=>{const N=w[1];A(I,w),k(I)?I.every(T=>T.length<=1)&&N():I.length<=1&&N()},$={mode:i,persisted:l,beforeEnter(I){let w=c;if(!n.isMounted)if(o)w=H||c;else return;I[qe]&&I[qe](!0);const N=M[y];N&&it(e,N)&&N.el[qe]&&N.el[qe](),A(w,[I])},enter(I){let w=a,N=f,T=h;if(!n.isMounted)if(o)w=W||a,N=D||f,T=p||h;else return;let G=!1;const ne=I[sn]=ce=>{G||(G=!0,ce?A(T,[I]):A(N,[I]),$.delayedLeave&&$.delayedLeave(),I[sn]=void 0)};w?F(w,[I,ne]):ne()},leave(I,w){const N=String(e.key);if(I[sn]&&I[sn](!0),n.isUnmounting)return w();A(m,[I]);let T=!1;const G=I[qe]=ne=>{T||(T=!0,w(),ne?A(L,[I]):A(C,[I]),I[qe]=void 0,M[N]===e&&delete M[N])};M[N]=e,_?F(_,[I,G]):G()},clone(I){const w=yr(I,t,n,r,s);return s&&s(w),w}};return $}function zn(e){if(Wt(e))return e=Qe(e),e.children=null,e}function _s(e){if(!Wt(e))return e;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&K(n.default))return n.default()}}function En(e,t){e.shapeFlag&6&&e.component?En(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Yo(e,t=!1,n){let r=[],s=0;for(let o=0;o1)for(let o=0;oe.__isTeleport,Mt=e=>e&&(e.disabled||e.disabled===""),vs=e=>typeof SVGElement<"u"&&e instanceof SVGElement,bs=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,_r=(e,t)=>{const n=e&&e.to;return oe(n)?t?t(n):null:n},yc={name:"Teleport",__isTeleport:!0,process(e,t,n,r,s,o,i,l,c,a){const{mc:f,pc:h,pbc:m,o:{insert:_,querySelector:C,createText:L,createComment:H}}=a,W=Mt(t.props);let{shapeFlag:D,children:p,dynamicChildren:y}=t;if(e==null){const M=t.el=L(""),A=t.anchor=L("");_(M,n,r),_(A,n,r);const F=t.target=_r(t.props,C),$=t.targetAnchor=L("");F&&(_($,F),i==="svg"||vs(F)?i="svg":(i==="mathml"||bs(F))&&(i="mathml"));const I=(w,N)=>{D&16&&f(p,w,N,s,o,i,l,c)};W?I(n,A):F&&I(F,$)}else{t.el=e.el;const M=t.anchor=e.anchor,A=t.target=e.target,F=t.targetAnchor=e.targetAnchor,$=Mt(e.props),I=$?n:A,w=$?M:F;if(i==="svg"||vs(A)?i="svg":(i==="mathml"||bs(A))&&(i="mathml"),y?(m(e.dynamicChildren,y,I,s,o,i,l),Dr(e,t,!0)):c||h(e,t,I,w,s,o,i,l,!1),W)$?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):on(t,n,M,a,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const N=t.target=_r(t.props,C);N&&on(t,N,null,a,0)}else $&&on(t,A,F,a,1)}Jo(t)},remove(e,t,n,r,{um:s,o:{remove:o}},i){const{shapeFlag:l,children:c,anchor:a,targetAnchor:f,target:h,props:m}=e;if(h&&o(f),i&&o(a),l&16){const _=i||!Mt(m);for(let C=0;C0?Re||mt:null,vc(),Dt>0&&Re&&Re.push(e),e}function gu(e,t,n,r,s,o){return Zo(ni(e,t,n,r,s,o,!0))}function ei(e,t,n,r,s){return Zo(ie(e,t,n,r,s,!0))}function Cn(e){return e?e.__v_isVNode===!0:!1}function it(e,t){return e.type===t.type&&e.key===t.key}const ti=({key:e})=>e??null,hn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?oe(e)||de(e)||K(e)?{i:fe,r:e,k:t,f:!!n}:e:null);function ni(e,t=null,n=null,r=0,s=null,o=e===_e?0:1,i=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ti(t),ref:t&&hn(t),scopeId:Nn,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:r,dynamicProps:s,dynamicChildren:null,appContext:null,ctx:fe};return l?(Br(c,n),o&128&&e.normalize(c)):n&&(c.shapeFlag|=oe(n)?8:16),Dt>0&&!i&&Re&&(c.patchFlag>0||o&6)&&c.patchFlag!==32&&Re.push(c),c}const ie=bc;function bc(e,t=null,n=null,r=0,s=null,o=!1){if((!e||e===Ao)&&(e=me),Cn(e)){const l=Qe(e,t,!0);return n&&Br(l,n),Dt>0&&!o&&Re&&(l.shapeFlag&6?Re[Re.indexOf(e)]=l:Re.push(l)),l.patchFlag=-2,l}if(Lc(e)&&(e=e.__vccOpts),t){t=wc(t);let{class:l,style:c}=t;l&&!oe(l)&&(t.class=Tr(l)),Z(c)&&(yo(c)&&!k(c)&&(c=le({},c)),t.style=Sr(c))}const i=oe(e)?1:Ml(e)?128:mc(e)?64:Z(e)?4:K(e)?2:0;return ni(e,t,n,r,s,i,o,!0)}function wc(e){return e?yo(e)||$o(e)?le({},e):e:null}function Qe(e,t,n=!1,r=!1){const{props:s,ref:o,patchFlag:i,children:l,transition:c}=e,a=t?Ec(s||{},t):s,f={__v_isVNode:!0,__v_skip:!0,type:e.type,props:a,key:a&&ti(a),ref:t&&t.ref?n&&o?k(o)?o.concat(hn(t)):[o,hn(t)]:hn(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==_e?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Qe(e.ssContent),ssFallback:e.ssFallback&&Qe(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&r&&En(f,c.clone(f)),f}function ri(e=" ",t=0){return ie(Et,null,e,t)}function mu(e,t){const n=ie(Pt,null,e);return n.staticCount=t,n}function yu(e="",t=!1){return t?(Qo(),ei(me,null,e)):ie(me,null,e)}function Ae(e){return e==null||typeof e=="boolean"?ie(me):k(e)?ie(_e,null,e.slice()):typeof e=="object"?Ge(e):ie(Et,null,String(e))}function Ge(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Qe(e)}function Br(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(k(t))n=16;else if(typeof t=="object")if(r&65){const s=t.default;s&&(s._c&&(s._d=!1),Br(e,s()),s._c&&(s._d=!0));return}else{n=32;const s=t._;!s&&!$o(t)?t._ctx=fe:s===3&&fe&&(fe.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else K(t)?(t={default:t,_ctx:fe},n=32):(t=String(t),r&64?(n=16,t=[ri(t)]):n=8);e.children=t,e.shapeFlag|=n}function Ec(...e){const t={};for(let n=0;nue||fe;let xn,vr;{const e=to(),t=(n,r)=>{let s;return(s=e[n])||(s=e[n]=[]),s.push(r),o=>{s.length>1?s.forEach(i=>i(o)):s[0](o)}};xn=t("__VUE_INSTANCE_SETTERS__",n=>ue=n),vr=t("__VUE_SSR_SETTERS__",n=>Gt=n)}const qt=e=>{const t=ue;return xn(e),e.scope.on(),()=>{e.scope.off(),xn(t)}},Es=()=>{ue&&ue.scope.off(),xn(null)};function si(e){return e.vnode.shapeFlag&4}let Gt=!1;function Tc(e,t=!1){t&&vr(t);const{props:n,children:r}=e.vnode,s=si(e);Yl(e,n,s,t),Zl(e,r);const o=s?Ac(e,t):void 0;return t&&vr(!1),o}function Ac(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Dl);const{setup:r}=n;if(r){const s=e.setupContext=r.length>1?ii(e):null,o=qt(e);Ze();const i=Ye(r,e,0,[e.props,s]);if(et(),o(),Js(i)){if(i.then(Es,Es),t)return i.then(l=>{Cs(e,l,t)}).catch(l=>{Kt(l,e,0)});e.asyncDep=i}else Cs(e,i,t)}else oi(e,t)}function Cs(e,t,n){K(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Z(t)&&(e.setupState=wo(t)),oi(e,n)}let xs;function oi(e,t,n){const r=e.type;if(!e.render){if(!t&&xs&&!r.render){const s=r.template||jr(e).template;if(s){const{isCustomElement:o,compilerOptions:i}=e.appContext.config,{delimiters:l,compilerOptions:c}=r,a=le(le({isCustomElement:o,delimiters:l},i),c);r.render=xs(s,a)}}e.render=r.render||xe}{const s=qt(e);Ze();try{Bl(e)}finally{et(),s()}}}const Rc={get(e,t){return ve(e,"get",""),e[t]}};function ii(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Rc),slots:e.slots,emit:e.emit,expose:t}}function Vn(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(wo(dn(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Lt)return Lt[n](e)},has(t,n){return n in t||n in Lt}})):e.proxy}function Oc(e,t=!0){return K(e)?e.displayName||e.name:e.name||t&&e.__name}function Lc(e){return K(e)&&"__vccOpts"in e}const re=(e,t)=>dl(e,t,Gt);function br(e,t,n){const r=arguments.length;return r===2?Z(t)&&!k(t)?Cn(t)?ie(e,null,[t]):ie(e,t):ie(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&Cn(n)&&(n=[n]),ie(e,t,n))}const Ic="3.4.29";/** +* @vue/runtime-dom v3.4.29 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/const Mc="http://www.w3.org/2000/svg",Pc="http://www.w3.org/1998/Math/MathML",Ve=typeof document<"u"?document:null,Ss=Ve&&Ve.createElement("template"),Nc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const s=t==="svg"?Ve.createElementNS(Mc,e):t==="mathml"?Ve.createElementNS(Pc,e):n?Ve.createElement(e,{is:n}):Ve.createElement(e);return e==="select"&&r&&r.multiple!=null&&s.setAttribute("multiple",r.multiple),s},createText:e=>Ve.createTextNode(e),createComment:e=>Ve.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ve.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,s,o){const i=n?n.previousSibling:t.lastChild;if(s&&(s===o||s.nextSibling))for(;t.insertBefore(s.cloneNode(!0),n),!(s===o||!(s=s.nextSibling)););else{Ss.innerHTML=r==="svg"?`${e}`:r==="mathml"?`${e}`:e;const l=Ss.content;if(r==="svg"||r==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},ke="transition",Tt="animation",Ut=Symbol("_vtc"),li=(e,{slots:t})=>br(gc,Fc(e),t);li.displayName="Transition";const ci={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};li.props=le({},Go,ci);const rt=(e,t=[])=>{k(e)?e.forEach(n=>n(...t)):e&&e(...t)},Ts=e=>e?k(e)?e.some(t=>t.length>1):e.length>1:!1;function Fc(e){const t={};for(const T in e)T in ci||(t[T]=e[T]);if(e.css===!1)return t;const{name:n="v",type:r,duration:s,enterFromClass:o=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=o,appearActiveClass:a=i,appearToClass:f=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:m=`${n}-leave-active`,leaveToClass:_=`${n}-leave-to`}=e,C=$c(s),L=C&&C[0],H=C&&C[1],{onBeforeEnter:W,onEnter:D,onEnterCancelled:p,onLeave:y,onLeaveCancelled:M,onBeforeAppear:A=W,onAppear:F=D,onAppearCancelled:$=p}=t,I=(T,G,ne)=>{st(T,G?f:l),st(T,G?a:i),ne&&ne()},w=(T,G)=>{T._isLeaving=!1,st(T,h),st(T,_),st(T,m),G&&G()},N=T=>(G,ne)=>{const ce=T?F:D,U=()=>I(G,T,ne);rt(ce,[G,U]),As(()=>{st(G,T?c:o),Ke(G,T?f:l),Ts(ce)||Rs(G,r,L,U)})};return le(t,{onBeforeEnter(T){rt(W,[T]),Ke(T,o),Ke(T,i)},onBeforeAppear(T){rt(A,[T]),Ke(T,c),Ke(T,a)},onEnter:N(!1),onAppear:N(!0),onLeave(T,G){T._isLeaving=!0;const ne=()=>w(T,G);Ke(T,h),Ke(T,m),Vc(),As(()=>{T._isLeaving&&(st(T,h),Ke(T,_),Ts(y)||Rs(T,r,H,ne))}),rt(y,[T,ne])},onEnterCancelled(T){I(T,!1),rt(p,[T])},onAppearCancelled(T){I(T,!0),rt($,[T])},onLeaveCancelled(T){w(T),rt(M,[T])}})}function $c(e){if(e==null)return null;if(Z(e))return[Xn(e.enter),Xn(e.leave)];{const t=Xn(e);return[t,t]}}function Xn(e){return Fi(e)}function Ke(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Ut]||(e[Ut]=new Set)).add(t)}function st(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[Ut];n&&(n.delete(t),n.size||(e[Ut]=void 0))}function As(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Hc=0;function Rs(e,t,n,r){const s=e._endId=++Hc,o=()=>{s===e._endId&&r()};if(n)return setTimeout(o,n);const{type:i,timeout:l,propCount:c}=jc(e,t);if(!i)return r();const a=i+"end";let f=0;const h=()=>{e.removeEventListener(a,m),o()},m=_=>{_.target===e&&++f>=c&&h()};setTimeout(()=>{f(n[C]||"").split(", "),s=r(`${ke}Delay`),o=r(`${ke}Duration`),i=Os(s,o),l=r(`${Tt}Delay`),c=r(`${Tt}Duration`),a=Os(l,c);let f=null,h=0,m=0;t===ke?i>0&&(f=ke,h=i,m=o.length):t===Tt?a>0&&(f=Tt,h=a,m=c.length):(h=Math.max(i,a),f=h>0?i>a?ke:Tt:null,m=f?f===ke?o.length:c.length:0);const _=f===ke&&/\b(transform|all)(,|$)/.test(r(`${ke}Property`).toString());return{type:f,timeout:h,propCount:m,hasTransform:_}}function Os(e,t){for(;e.lengthLs(n)+Ls(e[r])))}function Ls(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Vc(){return document.body.offsetHeight}function Dc(e,t,n){const r=e[Ut];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Is=Symbol("_vod"),Uc=Symbol("_vsh"),Bc=Symbol(""),kc=/(^|;)\s*display\s*:/;function Kc(e,t,n){const r=e.style,s=oe(n);let o=!1;if(n&&!s){if(t)if(oe(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&pn(r,l,"")}else for(const i in t)n[i]==null&&pn(r,i,"");for(const i in n)i==="display"&&(o=!0),pn(r,i,n[i])}else if(s){if(t!==n){const i=r[Bc];i&&(n+=";"+i),r.cssText=n,o=kc.test(n)}}else t&&e.removeAttribute("style");Is in e&&(e[Is]=o?r.display:"",e[Uc]&&(r.display="none"))}const Ms=/\s*!important$/;function pn(e,t,n){if(k(n))n.forEach(r=>pn(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=Wc(e,t);Ms.test(n)?e.setProperty(ft(r),n.replace(Ms,""),"important"):e[r]=n}}const Ps=["Webkit","Moz","ms"],Yn={};function Wc(e,t){const n=Yn[t];if(n)return n;let r=$e(t);if(r!=="filter"&&r in e)return Yn[t]=r;r=An(r);for(let s=0;sJn||(Yc.then(()=>Jn=0),Jn=Date.now());function Qc(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;Se(Zc(r,n.value),t,5,[r])};return n.value=e,n.attached=Jc(),n}function Zc(e,t){if(k(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>s=>!s._stopped&&r&&r(s))}else return t}const js=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,ea=(e,t,n,r,s,o,i,l,c)=>{const a=s==="svg";t==="class"?Dc(e,r,a):t==="style"?Kc(e,n,r):kt(t)?Er(t)||zc(e,t,n,r,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):ta(e,t,r,a))?(qc(e,t,r,o,i,l,c),(t==="value"||t==="checked"||t==="selected")&&Fs(e,t,r,a,i,t!=="value")):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),Fs(e,t,r,a))};function ta(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&js(t)&&K(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const s=e.tagName;if(s==="IMG"||s==="VIDEO"||s==="CANVAS"||s==="SOURCE")return!1}return js(t)&&oe(n)?!1:t in e}const Vs=e=>{const t=e.props["onUpdate:modelValue"]||!1;return k(t)?n=>fn(t,n):t};function na(e){e.target.composing=!0}function Ds(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Qn=Symbol("_assign"),_u={created(e,{modifiers:{lazy:t,trim:n,number:r}},s){e[Qn]=Vs(s);const o=r||s.props&&s.props.type==="number";gt(e,t?"change":"input",i=>{if(i.target.composing)return;let l=e.value;n&&(l=l.trim()),o&&(l=cr(l)),e[Qn](l)}),n&>(e,"change",()=>{e.value=e.value.trim()}),t||(gt(e,"compositionstart",na),gt(e,"compositionend",Ds),gt(e,"change",Ds))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:r,trim:s,number:o}},i){if(e[Qn]=Vs(i),e.composing)return;const l=(o||e.type==="number")&&!/^0\d/.test(e.value)?cr(e.value):e.value,c=t??"";l!==c&&(document.activeElement===e&&e.type!=="range"&&(r&&t===n||s&&e.value.trim()===c)||(e.value=c))}},ra=["ctrl","shift","alt","meta"],sa={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>ra.some(n=>e[`${n}Key`]&&!t.includes(n))},vu=(e,t)=>{const n=e._withMods||(e._withMods={}),r=t.join(".");return n[r]||(n[r]=(s,...o)=>{for(let i=0;i{const n=e._withKeys||(e._withKeys={}),r=t.join(".");return n[r]||(n[r]=s=>{if(!("key"in s))return;const o=ft(s.key);if(t.some(i=>i===o||oa[i]===o))return e(s)})},ai=le({patchProp:ea},Nc);let Ft,Us=!1;function ia(){return Ft||(Ft=sc(ai))}function la(){return Ft=Us?Ft:oc(ai),Us=!0,Ft}const wu=(...e)=>{const t=ia().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=fi(r);if(!s)return;const o=t._component;!K(o)&&!o.render&&!o.template&&(o.template=s.innerHTML),s.innerHTML="";const i=n(s,!1,ui(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),i},t},Eu=(...e)=>{const t=la().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=fi(r);if(s)return n(s,!0,ui(s))},t};function ui(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function fi(e){return oe(e)?document.querySelector(e):e}const Cu=(e,t)=>{const n=e.__vccOpts||e;for(const[r,s]of t)n[r]=s;return n},ca="modulepreload",aa=function(e){return"/Gridify/"+e},Bs={},xu=function(t,n,r){let s=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),i=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));s=Promise.all(n.map(l=>{if(l=aa(l),l in Bs)return;Bs[l]=!0;const c=l.endsWith(".css"),a=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${l}"]${a}`))return;const f=document.createElement("link");if(f.rel=c?"stylesheet":ca,c||(f.as="script",f.crossOrigin=""),f.href=l,i&&f.setAttribute("nonce",i),document.head.appendChild(f),c)return new Promise((h,m)=>{f.addEventListener("load",h),f.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${l}`)))})}))}return s.then(()=>t()).catch(o=>{const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=o,window.dispatchEvent(i),!i.defaultPrevented)throw o})},ua=window.__VP_SITE_DATA__;function kr(e){return so()?(Ki(e),!0):!1}function Fe(e){return typeof e=="function"?e():bo(e)}const di=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const fa=Object.prototype.toString,da=e=>fa.call(e)==="[object Object]",Bt=()=>{},ks=ha();function ha(){var e,t;return di&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function pa(e,t){function n(...r){return new Promise((s,o)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(s).catch(o)})}return n}const hi=e=>e();function ga(e,t={}){let n,r,s=Bt;const o=l=>{clearTimeout(l),s(),s=Bt};return l=>{const c=Fe(e),a=Fe(t.maxWait);return n&&o(n),c<=0||a!==void 0&&a<=0?(r&&(o(r),r=null),Promise.resolve(l())):new Promise((f,h)=>{s=t.rejectOnCancel?h:f,a&&!r&&(r=setTimeout(()=>{n&&o(n),r=null,f(l())},a)),n=setTimeout(()=>{r&&o(r),r=null,f(l())},c)})}}function ma(e=hi){const t=se(!0);function n(){t.value=!1}function r(){t.value=!0}const s=(...o)=>{t.value&&e(...o)};return{isActive:Ln(t),pause:n,resume:r,eventFilter:s}}function ya(e){return jn()}function pi(...e){if(e.length!==1)return vl(...e);const t=e[0];return typeof t=="function"?Ln(ml(()=>({get:t,set:Bt}))):se(t)}function gi(e,t,n={}){const{eventFilter:r=hi,...s}=n;return Ne(e,pa(r,t),s)}function _a(e,t,n={}){const{eventFilter:r,...s}=n,{eventFilter:o,pause:i,resume:l,isActive:c}=ma(r);return{stop:gi(e,t,{...s,eventFilter:o}),pause:i,resume:l,isActive:c}}function Kr(e,t=!0,n){ya()?xt(e,n):t?e():In(e)}function Su(e,t,n={}){const{debounce:r=0,maxWait:s=void 0,...o}=n;return gi(e,t,{...o,eventFilter:ga(r,{maxWait:s})})}function Tu(e,t,n){let r;de(n)?r={evaluating:n}:r={};const{lazy:s=!1,evaluating:o=void 0,shallow:i=!0,onError:l=Bt}=r,c=se(!s),a=i?Fr(t):se(t);let f=0;return Ur(async h=>{if(!c.value)return;f++;const m=f;let _=!1;o&&Promise.resolve().then(()=>{o.value=!0});try{const C=await e(L=>{h(()=>{o&&(o.value=!1),_||L()})});m===f&&(a.value=C)}catch(C){l(C)}finally{o&&m===f&&(o.value=!1),_=!0}}),s?re(()=>(c.value=!0,a.value)):a}function mi(e){var t;const n=Fe(e);return(t=n==null?void 0:n.$el)!=null?t:n}const Oe=di?window:void 0;function Ct(...e){let t,n,r,s;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,r,s]=e,t=Oe):[t,n,r,s]=e,!t)return Bt;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);const o=[],i=()=>{o.forEach(f=>f()),o.length=0},l=(f,h,m,_)=>(f.addEventListener(h,m,_),()=>f.removeEventListener(h,m,_)),c=Ne(()=>[mi(t),Fe(s)],([f,h])=>{if(i(),!f)return;const m=da(h)?{...h}:h;o.push(...n.flatMap(_=>r.map(C=>l(f,_,C,m))))},{immediate:!0,flush:"post"}),a=()=>{c(),i()};return kr(a),a}function va(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function Au(...e){let t,n,r={};e.length===3?(t=e[0],n=e[1],r=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],r=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:s=Oe,eventName:o="keydown",passive:i=!1,dedupe:l=!1}=r,c=va(t);return Ct(s,o,f=>{f.repeat&&Fe(l)||c(f)&&n(f)},i)}function ba(){const e=se(!1),t=jn();return t&&xt(()=>{e.value=!0},t),e}function wa(e){const t=ba();return re(()=>(t.value,!!e()))}function yi(e,t={}){const{window:n=Oe}=t,r=wa(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let s;const o=se(!1),i=a=>{o.value=a.matches},l=()=>{s&&("removeEventListener"in s?s.removeEventListener("change",i):s.removeListener(i))},c=Ur(()=>{r.value&&(l(),s=n.matchMedia(Fe(e)),"addEventListener"in s?s.addEventListener("change",i):s.addListener(i),o.value=s.matches)});return kr(()=>{c(),l(),s=void 0}),o}const ln=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},cn="__vueuse_ssr_handlers__",Ea=Ca();function Ca(){return cn in ln||(ln[cn]=ln[cn]||{}),ln[cn]}function _i(e,t){return Ea[e]||t}function xa(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const Sa={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},Ks="vueuse-storage";function Wr(e,t,n,r={}){var s;const{flush:o="pre",deep:i=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:a=!1,shallow:f,window:h=Oe,eventFilter:m,onError:_=w=>{console.error(w)},initOnMounted:C}=r,L=(f?Fr:se)(typeof t=="function"?t():t);if(!n)try{n=_i("getDefaultStorage",()=>{var w;return(w=Oe)==null?void 0:w.localStorage})()}catch(w){_(w)}if(!n)return L;const H=Fe(t),W=xa(H),D=(s=r.serializer)!=null?s:Sa[W],{pause:p,resume:y}=_a(L,()=>A(L.value),{flush:o,deep:i,eventFilter:m});h&&l&&Kr(()=>{Ct(h,"storage",$),Ct(h,Ks,I),C&&$()}),C||$();function M(w,N){h&&h.dispatchEvent(new CustomEvent(Ks,{detail:{key:e,oldValue:w,newValue:N,storageArea:n}}))}function A(w){try{const N=n.getItem(e);if(w==null)M(N,null),n.removeItem(e);else{const T=D.write(w);N!==T&&(n.setItem(e,T),M(N,T))}}catch(N){_(N)}}function F(w){const N=w?w.newValue:n.getItem(e);if(N==null)return c&&H!=null&&n.setItem(e,D.write(H)),H;if(!w&&a){const T=D.read(N);return typeof a=="function"?a(T,H):W==="object"&&!Array.isArray(T)?{...H,...T}:T}else return typeof N!="string"?N:D.read(N)}function $(w){if(!(w&&w.storageArea!==n)){if(w&&w.key==null){L.value=H;return}if(!(w&&w.key!==e)){p();try{(w==null?void 0:w.newValue)!==D.write(L.value)&&(L.value=F(w))}catch(N){_(N)}finally{w?In(y):y()}}}}function I(w){$(w.detail)}return L}function vi(e){return yi("(prefers-color-scheme: dark)",e)}function Ta(e={}){const{selector:t="html",attribute:n="class",initialValue:r="auto",window:s=Oe,storage:o,storageKey:i="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:a,disableTransition:f=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},m=vi({window:s}),_=re(()=>m.value?"dark":"light"),C=c||(i==null?pi(r):Wr(i,r,o,{window:s,listenToStorageChanges:l})),L=re(()=>C.value==="auto"?_.value:C.value),H=_i("updateHTMLAttrs",(y,M,A)=>{const F=typeof y=="string"?s==null?void 0:s.document.querySelector(y):mi(y);if(!F)return;let $;if(f&&($=s.document.createElement("style"),$.appendChild(document.createTextNode("*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),s.document.head.appendChild($)),M==="class"){const I=A.split(/\s/g);Object.values(h).flatMap(w=>(w||"").split(/\s/g)).filter(Boolean).forEach(w=>{I.includes(w)?F.classList.add(w):F.classList.remove(w)})}else F.setAttribute(M,A);f&&(s.getComputedStyle($).opacity,document.head.removeChild($))});function W(y){var M;H(t,n,(M=h[y])!=null?M:y)}function D(y){e.onChanged?e.onChanged(y,W):W(y)}Ne(L,D,{flush:"post",immediate:!0}),Kr(()=>D(L.value));const p=re({get(){return a?C.value:L.value},set(y){C.value=y}});try{return Object.assign(p,{store:C,system:_,state:L})}catch{return p}}function Aa(e={}){const{valueDark:t="dark",valueLight:n="",window:r=Oe}=e,s=Ta({...e,onChanged:(l,c)=>{var a;e.onChanged?(a=e.onChanged)==null||a.call(e,l==="dark",c,l):c(l)},modes:{dark:t,light:n}}),o=re(()=>s.system?s.system.value:vi({window:r}).value?"dark":"light");return re({get(){return s.value==="dark"},set(l){const c=l?"dark":"light";o.value===c?s.value="auto":s.value=c}})}function Zn(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function Ru(e,t,n={}){const{window:r=Oe}=n;return Wr(e,t,r==null?void 0:r.localStorage,n)}function bi(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const er=new WeakMap;function Ou(e,t=!1){const n=se(t);let r=null,s="";Ne(pi(e),l=>{const c=Zn(Fe(l));if(c){const a=c;if(er.get(a)||er.set(a,a.style.overflow),a.style.overflow!=="hidden"&&(s=a.style.overflow),a.style.overflow==="hidden")return n.value=!0;if(n.value)return a.style.overflow="hidden"}},{immediate:!0});const o=()=>{const l=Zn(Fe(e));!l||n.value||(ks&&(r=Ct(l,"touchmove",c=>{Ra(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},i=()=>{const l=Zn(Fe(e));!l||!n.value||(ks&&(r==null||r()),l.style.overflow=s,er.delete(l),n.value=!1)};return kr(i),re({get(){return n.value},set(l){l?o():i()}})}function Lu(e,t,n={}){const{window:r=Oe}=n;return Wr(e,t,r==null?void 0:r.sessionStorage,n)}function Iu(e={}){const{window:t=Oe,behavior:n="auto"}=e;if(!t)return{x:se(0),y:se(0)};const r=se(t.scrollX),s=se(t.scrollY),o=re({get(){return r.value},set(l){scrollTo({left:l,behavior:n})}}),i=re({get(){return s.value},set(l){scrollTo({top:l,behavior:n})}});return Ct(t,"scroll",()=>{r.value=t.scrollX,s.value=t.scrollY},{capture:!1,passive:!0}),{x:o,y:i}}function Mu(e={}){const{window:t=Oe,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:r=Number.POSITIVE_INFINITY,listenOrientation:s=!0,includeScrollbar:o=!0}=e,i=se(n),l=se(r),c=()=>{t&&(o?(i.value=t.innerWidth,l.value=t.innerHeight):(i.value=t.document.documentElement.clientWidth,l.value=t.document.documentElement.clientHeight))};if(c(),Kr(c),Ct("resize",c,{passive:!0}),s){const a=yi("(orientation: portrait)");Ne(a,()=>c())}return{width:i,height:l}}var tr={BASE_URL:"/Gridify/",MODE:"production",DEV:!1,PROD:!0,SSR:!1},nr={};const wi=/^(?:[a-z]+:|\/\/)/i,Oa="vitepress-theme-appearance",La=/#.*$/,Ia=/[?#].*$/,Ma=/(?:(^|\/)index)?\.(?:md|html)$/,he=typeof document<"u",Ei={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function Pa(e,t,n=!1){if(t===void 0)return!1;if(e=Ws(`/${e}`),n)return new RegExp(t).test(e);if(Ws(t)!==e)return!1;const r=t.match(La);return r?(he?location.hash:"")===r[0]:!0}function Ws(e){return decodeURI(e).replace(Ia,"").replace(Ma,"$1")}function Na(e){return wi.test(e)}function Fa(e,t){return Object.keys((e==null?void 0:e.locales)||{}).find(n=>n!=="root"&&!Na(n)&&Pa(t,`/${n}/`,!0))||"root"}function $a(e,t){var r,s,o,i,l,c,a;const n=Fa(e,t);return Object.assign({},e,{localeIndex:n,lang:((r=e.locales[n])==null?void 0:r.lang)??e.lang,dir:((s=e.locales[n])==null?void 0:s.dir)??e.dir,title:((o=e.locales[n])==null?void 0:o.title)??e.title,titleTemplate:((i=e.locales[n])==null?void 0:i.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:xi(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(a=e.locales[n])==null?void 0:a.themeConfig}})}function Ci(e,t){const n=t.title||e.title,r=t.titleTemplate??e.titleTemplate;if(typeof r=="string"&&r.includes(":title"))return r.replace(/:title/g,n);const s=Ha(e.title,r);return n===s.slice(3)?n:`${n}${s}`}function Ha(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function ja(e,t){const[n,r]=t;if(n!=="meta")return!1;const s=Object.entries(r)[0];return s==null?!1:e.some(([o,i])=>o===n&&i[s[0]]===s[1])}function xi(e,t){return[...e.filter(n=>!ja(t,n)),...t]}const Va=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,Da=/^[a-z]:/i;function qs(e){const t=Da.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(Va,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const rr=new Set;function Ua(e){if(rr.size===0){const n=typeof process=="object"&&(nr==null?void 0:nr.VITE_EXTRA_EXTENSIONS)||(tr==null?void 0:tr.VITE_EXTRA_EXTENSIONS)||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(r=>rr.add(r))}const t=e.split(".").pop();return t==null||!rr.has(t.toLowerCase())}function Pu(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}const Ba=Symbol(),at=Fr(ua);function Nu(e){const t=re(()=>$a(at.value,e.data.relativePath)),n=t.value.appearance,r=n==="force-dark"?se(!0):n?Aa({storageKey:Oa,initialValue:()=>typeof n=="string"?n:"auto",...typeof n=="object"?n:{}}):se(!1),s=se(he?location.hash:"");return he&&window.addEventListener("hashchange",()=>{s.value=location.hash}),Ne(()=>e.data,()=>{s.value=he?location.hash:""}),{site:t,theme:re(()=>t.value.themeConfig),page:re(()=>e.data),frontmatter:re(()=>e.data.frontmatter),params:re(()=>e.data.params),lang:re(()=>t.value.lang),dir:re(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:re(()=>t.value.localeIndex||"root"),title:re(()=>Ci(t.value,e.data)),description:re(()=>e.data.description||t.value.description),isDark:r,hash:re(()=>s.value)}}function ka(){const e=wt(Ba);if(!e)throw new Error("vitepress data not properly injected in app");return e}function Ka(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function Gs(e){return wi.test(e)||!e.startsWith("/")?e:Ka(at.value.base,e)}function Wa(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),he){const n="/Gridify/";t=qs(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let r=__VP_HASH_MAP__[t.toLowerCase()];if(r||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",r=__VP_HASH_MAP__[t.toLowerCase()]),!r)return null;t=`${n}assets/${t}.${r}.js`}else t=`./${qs(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let gn=[];function Fu(e){gn.push(e),$n(()=>{gn=gn.filter(t=>t!==e)})}function qa(){let e=at.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=zs(e,n);else if(Array.isArray(e))for(const r of e){const s=zs(r,n);if(s){t=s;break}}return t}function zs(e,t){const n=document.querySelector(e);if(!n)return 0;const r=n.getBoundingClientRect().bottom;return r<0?0:r+t}const Ga=Symbol(),Si="http://a.com",za=()=>({path:"/",component:null,data:Ei});function $u(e,t){const n=On(za()),r={route:n,go:s};async function s(l=he?location.href:"/"){var c,a;l=sr(l),await((c=r.onBeforeRouteChange)==null?void 0:c.call(r,l))!==!1&&(he&&l!==sr(location.href)&&(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",l)),await i(l),await((a=r.onAfterRouteChanged)==null?void 0:a.call(r,l)))}let o=null;async function i(l,c=0,a=!1){var m;if(await((m=r.onBeforePageLoad)==null?void 0:m.call(r,l))===!1)return;const f=new URL(l,Si),h=o=f.pathname;try{let _=await e(h);if(!_)throw new Error(`Page not found: ${h}`);if(o===h){o=null;const{default:C,__pageData:L}=_;if(!C)throw new Error(`Invalid route component: ${C}`);n.path=he?h:Gs(h),n.component=dn(C),n.data=dn(L),he&&In(()=>{let H=at.value.base+L.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!at.value.cleanUrls&&!H.endsWith("/")&&(H+=".html"),H!==f.pathname&&(f.pathname=H,l=H+f.search+f.hash,history.replaceState({},"",l)),f.hash&&!c){let W=null;try{W=document.getElementById(decodeURIComponent(f.hash).slice(1))}catch(D){console.warn(D)}if(W){Xs(W,f.hash);return}}window.scrollTo(0,c)})}}catch(_){if(!/fetch|Page not found/.test(_.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(_),!a)try{const C=await fetch(at.value.base+"hashmap.json");window.__VP_HASH_MAP__=await C.json(),await i(l,c,!0);return}catch{}if(o===h){o=null,n.path=he?h:Gs(h),n.component=t?dn(t):null;const C=he?h.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").replace(/^\//,""):"404.md";n.data={...Ei,relativePath:C}}}}return he&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",l=>{if(l.target.closest("button"))return;const a=l.target.closest("a");if(a&&!a.closest(".vp-raw")&&(a instanceof SVGElement||!a.download)){const{target:f}=a,{href:h,origin:m,pathname:_,hash:C,search:L}=new URL(a.href instanceof SVGAnimatedString?a.href.animVal:a.href,a.baseURI),H=new URL(location.href);!l.ctrlKey&&!l.shiftKey&&!l.altKey&&!l.metaKey&&!f&&m===H.origin&&Ua(_)&&(l.preventDefault(),_===H.pathname&&L===H.search?(C!==H.hash&&(history.pushState({},"",h),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:H.href,newURL:h}))),C?Xs(a,C,a.classList.contains("header-anchor")):window.scrollTo(0,0)):s(h))}},{capture:!0}),window.addEventListener("popstate",async l=>{var c;l.state!==null&&(await i(sr(location.href),l.state&&l.state.scrollPosition||0),(c=r.onAfterRouteChanged)==null||c.call(r,location.href))}),window.addEventListener("hashchange",l=>{l.preventDefault()})),r}function Xa(){const e=wt(Ga);if(!e)throw new Error("useRouter() is called without provider.");return e}function Ti(){return Xa().route}function Xs(e,t,n=!1){let r=null;try{r=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(s){console.warn(s)}if(r){let s=function(){!n||Math.abs(i-window.scrollY)>window.innerHeight?window.scrollTo(0,i):window.scrollTo({left:0,top:i,behavior:"smooth"})};const o=parseInt(window.getComputedStyle(r).paddingTop,10),i=window.scrollY+r.getBoundingClientRect().top-qa()+o;requestAnimationFrame(s)}}function sr(e){const t=new URL(e,Si);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),at.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const or=()=>gn.forEach(e=>e()),Hu=Hr({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=Ti(),{site:n}=ka();return()=>br(e.as,n.value.contentProps??{style:{position:"relative"}},[t.component?br(t.component,{onVnodeMounted:or,onVnodeUpdated:or,onVnodeUnmounted:or}):"404 Page Not Found"])}}),ju=Hr({setup(e,{slots:t}){const n=se(!1);return xt(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function Vu(){he&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const r=(n=t.parentElement)==null?void 0:n.parentElement;if(!r)return;const s=Array.from(r.querySelectorAll("input")).indexOf(t);if(s<0)return;const o=r.querySelector(".blocks");if(!o)return;const i=Array.from(o.children).find(a=>a.classList.contains("active"));if(!i)return;const l=o.children[s];if(!l||i===l)return;i.classList.remove("active"),l.classList.add("active");const c=r==null?void 0:r.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function Du(){if(he){const e=new WeakMap;window.addEventListener("click",t=>{var r;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const s=n.parentElement,o=(r=n.nextElementSibling)==null?void 0:r.nextElementSibling;if(!s||!o)return;const i=/language-(shellscript|shell|bash|sh|zsh)/.test(s.className),l=[".vp-copy-ignore",".diff.remove"],c=o.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(f=>f.remove());let a=c.textContent||"";i&&(a=a.replace(/^ *(\$|>) /gm,"").trim()),Ya(a).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const f=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,f)})}})}}async function Ya(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const r=document.getSelection(),s=r?r.rangeCount>0&&r.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),s&&(r.removeAllRanges(),r.addRange(s)),n&&n.focus()}}function Uu(e,t){let n=!0,r=[];const s=o=>{if(n){n=!1,o.forEach(l=>{const c=ir(l);for(const a of document.head.children)if(a.isEqualNode(c)){r.push(a);return}});return}const i=o.map(ir);r.forEach((l,c)=>{const a=i.findIndex(f=>f==null?void 0:f.isEqualNode(l??null));a!==-1?delete i[a]:(l==null||l.remove(),delete r[c])}),i.forEach(l=>l&&document.head.appendChild(l)),r=[...r,...i].filter(Boolean)};Ur(()=>{const o=e.data,i=t.value,l=o&&o.description,c=o&&o.frontmatter.head||[],a=Ci(i,o);a!==document.title&&(document.title=a);const f=l||i.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==f&&h.setAttribute("content",f):ir(["meta",{name:"description",content:f}]),s(xi(i.head,Qa(c)))})}function ir([e,t,n]){const r=document.createElement(e);for(const s in t)r.setAttribute(s,t[s]);return n&&(r.innerHTML=n),e==="script"&&!t.async&&(r.async=!1),r}function Ja(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function Qa(e){return e.filter(t=>!Ja(t))}const lr=new Set,Ai=()=>document.createElement("link"),Za=e=>{const t=Ai();t.rel="prefetch",t.href=e,document.head.appendChild(t)},eu=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let an;const tu=he&&(an=Ai())&&an.relList&&an.relList.supports&&an.relList.supports("prefetch")?Za:eu;function Bu(){if(!he||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const r=()=>{n&&n.disconnect(),n=new IntersectionObserver(o=>{o.forEach(i=>{if(i.isIntersecting){const l=i.target;n.unobserve(l);const{pathname:c}=l;if(!lr.has(c)){lr.add(c);const a=Wa(c);a&&tu(a)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(o=>{const{hostname:i,pathname:l}=new URL(o.href instanceof SVGAnimatedString?o.href.animVal:o.href,o.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||o.target!=="_blank"&&i===location.hostname&&(l!==location.pathname?n.observe(o):lr.add(l))})})};xt(r);const s=Ti();Ne(()=>s.path,r),$n(()=>{n&&n.disconnect()})}export{bu as $,hu as A,Fl as B,qa as C,ou as D,cu as E,_e as F,Fr as G,Fu as H,ie as I,iu as J,wi as K,Ti as L,Ec as M,wt as N,Mu as O,Sr as P,Au as Q,In as R,Iu as S,li as T,he as U,Ln as V,au as W,xu as X,Ou as Y,Xl as Z,Cu as _,ri as a,fu as a0,vu as a1,du as a2,br as a3,mu as a4,Uu as a5,Ga as a6,Nu as a7,Ba as a8,Hu as a9,ju as aa,at as ab,Eu as ac,$u as ad,Wa as ae,Bu as af,Du as ag,Vu as ah,mi as ai,kr as aj,Tu as ak,Lu as al,Ru as am,Su as an,Xa as ao,Ct as ap,Lo as aq,lu as ar,_u as as,de as at,pu as au,dn as av,wu as aw,Pu as ax,ei as b,gu as c,Hr as d,yu as e,Ua as f,Gs as g,re as h,Na as i,ni as j,bo as k,su as l,Pa as m,Tr as n,Qo as o,ru as p,yi as q,uu as r,se as s,nu as t,ka as u,Ne as v,Al as w,Ur as x,xt as y,$n as z}; diff --git a/assets/chunks/theme.C7iTWSMT.js b/assets/chunks/theme.C7iTWSMT.js new file mode 100644 index 00000000..725ae65f --- /dev/null +++ b/assets/chunks/theme.C7iTWSMT.js @@ -0,0 +1,2 @@ +const __vite__fileDeps=["assets/chunks/VPLocalSearchBox.BG-uneXQ.js","assets/chunks/framework.Cmp6zcjC.js"],__vite__mapDeps=i=>i.map(i=>__vite__fileDeps[i]); +import{d as _,o as a,c,r as l,n as N,a as F,t as I,b as $,w as d,e as f,T as ve,_ as b,u as Ge,i as je,f as ze,g as pe,h as y,j as v,k as r,p as B,l as H,m as z,q as ie,s as w,v as j,x as Z,y as W,z as he,A as Pe,B as qe,C as Ke,D as q,F as M,E,G as Le,H as x,I as m,J as R,K as Ve,L as ee,M as Y,N as te,O as Re,P as Se,Q as le,R as We,S as Te,U as oe,V as Je,W as Ye,X as Qe,Y as Ie,Z as we,$ as Xe,a0 as Ze,a1 as xe,a2 as et,a3 as tt}from"./framework.Cmp6zcjC.js";const ot=_({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(o){return(e,t)=>(a(),c("span",{class:N(["VPBadge",e.type])},[l(e.$slots,"default",{},()=>[F(I(e.text),1)])],2))}}),st={key:0,class:"VPBackdrop"},nt=_({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(o){return(e,t)=>(a(),$(ve,{name:"fade"},{default:d(()=>[e.show?(a(),c("div",st)):f("",!0)]),_:1}))}}),at=b(nt,[["__scopeId","data-v-c79a1216"]]),P=Ge;function rt(o,e){let t,n=!1;return()=>{t&&clearTimeout(t),n?t=setTimeout(o,e):(o(),(n=!0)&&setTimeout(()=>n=!1,e))}}function ce(o){return/^\//.test(o)?o:`/${o}`}function fe(o){const{pathname:e,search:t,hash:n,protocol:s}=new URL(o,"http://a.com");if(je(o)||o.startsWith("#")||!s.startsWith("http")||!ze(e))return o;const{site:i}=P(),u=e.endsWith("/")||e.endsWith(".html")?o:o.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,i.value.cleanUrls?"":".html")}${t}${n}`);return pe(u)}function J({correspondingLink:o=!1}={}){const{site:e,localeIndex:t,page:n,theme:s,hash:i}=P(),u=y(()=>{var p,g;return{label:(p=e.value.locales[t.value])==null?void 0:p.label,link:((g=e.value.locales[t.value])==null?void 0:g.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:y(()=>Object.entries(e.value.locales).flatMap(([p,g])=>u.value.label===g.label?[]:{text:g.label,link:it(g.link||(p==="root"?"/":`/${p}/`),s.value.i18nRouting!==!1&&o,n.value.relativePath.slice(u.value.link.length-1),!e.value.cleanUrls)+i.value})),currentLang:u}}function it(o,e,t,n){return e?o.replace(/\/$/,"")+ce(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,n?".html":"")):o}const lt=o=>(B("data-v-d6be1790"),o=o(),H(),o),ct={class:"NotFound"},ut={class:"code"},dt={class:"title"},vt=lt(()=>v("div",{class:"divider"},null,-1)),pt={class:"quote"},ht={class:"action"},ft=["href","aria-label"],_t=_({__name:"NotFound",setup(o){const{theme:e}=P(),{currentLang:t}=J();return(n,s)=>{var i,u,h,p,g;return a(),c("div",ct,[v("p",ut,I(((i=r(e).notFound)==null?void 0:i.code)??"404"),1),v("h1",dt,I(((u=r(e).notFound)==null?void 0:u.title)??"PAGE NOT FOUND"),1),vt,v("blockquote",pt,I(((h=r(e).notFound)==null?void 0:h.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),v("div",ht,[v("a",{class:"link",href:r(pe)(r(t).link),"aria-label":((p=r(e).notFound)==null?void 0:p.linkLabel)??"go to home"},I(((g=r(e).notFound)==null?void 0:g.linkText)??"Take me home"),9,ft)])])}}}),mt=b(_t,[["__scopeId","data-v-d6be1790"]]);function Ne(o,e){if(Array.isArray(o))return Q(o);if(o==null)return[];e=ce(e);const t=Object.keys(o).sort((s,i)=>i.split("/").length-s.split("/").length).find(s=>e.startsWith(ce(s))),n=t?o[t]:[];return Array.isArray(n)?Q(n):Q(n.items,n.base)}function kt(o){const e=[];let t=0;for(const n in o){const s=o[n];if(s.items){t=e.push(s);continue}e[t]||e.push({items:[]}),e[t].items.push(s)}return e}function bt(o){const e=[];function t(n){for(const s of n)s.text&&s.link&&e.push({text:s.text,link:s.link,docFooterText:s.docFooterText}),s.items&&t(s.items)}return t(o),e}function ue(o,e){return Array.isArray(e)?e.some(t=>ue(o,t)):z(o,e.link)?!0:e.items?ue(o,e.items):!1}function Q(o,e){return[...o].map(t=>{const n={...t},s=n.base||e;return s&&n.link&&(n.link=s+n.link),n.items&&(n.items=Q(n.items,s)),n})}function O(){const{frontmatter:o,page:e,theme:t}=P(),n=ie("(min-width: 960px)"),s=w(!1),i=y(()=>{const C=t.value.sidebar,S=e.value.relativePath;return C?Ne(C,S):[]}),u=w(i.value);j(i,(C,S)=>{JSON.stringify(C)!==JSON.stringify(S)&&(u.value=i.value)});const h=y(()=>o.value.sidebar!==!1&&u.value.length>0&&o.value.layout!=="home"),p=y(()=>g?o.value.aside==null?t.value.aside==="left":o.value.aside==="left":!1),g=y(()=>o.value.layout==="home"?!1:o.value.aside!=null?!!o.value.aside:t.value.aside!==!1),L=y(()=>h.value&&n.value),k=y(()=>h.value?kt(u.value):[]);function V(){s.value=!0}function T(){s.value=!1}function A(){s.value?T():V()}return{isOpen:s,sidebar:u,sidebarGroups:k,hasSidebar:h,hasAside:g,leftAside:p,isSidebarEnabled:L,open:V,close:T,toggle:A}}function $t(o,e){let t;Z(()=>{t=o.value?document.activeElement:void 0}),W(()=>{window.addEventListener("keyup",n)}),he(()=>{window.removeEventListener("keyup",n)});function n(s){s.key==="Escape"&&o.value&&(e(),t==null||t.focus())}}function gt(o){const{page:e,hash:t}=P(),n=w(!1),s=y(()=>o.value.collapsed!=null),i=y(()=>!!o.value.link),u=w(!1),h=()=>{u.value=z(e.value.relativePath,o.value.link)};j([e,o,t],h),W(h);const p=y(()=>u.value?!0:o.value.items?ue(e.value.relativePath,o.value.items):!1),g=y(()=>!!(o.value.items&&o.value.items.length));Z(()=>{n.value=!!(s.value&&o.value.collapsed)}),Pe(()=>{(u.value||p.value)&&(n.value=!1)});function L(){s.value&&(n.value=!n.value)}return{collapsed:n,collapsible:s,isLink:i,isActiveLink:u,hasActiveLink:p,hasChildren:g,toggle:L}}function yt(){const{hasSidebar:o}=O(),e=ie("(min-width: 960px)"),t=ie("(min-width: 1280px)");return{isAsideEnabled:y(()=>!t.value&&!e.value?!1:o.value?t.value:e.value)}}const de=[];function Me(o){return typeof o.outline=="object"&&!Array.isArray(o.outline)&&o.outline.label||o.outlineTitle||"On this page"}function _e(o){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const n=Number(t.tagName[1]);return{element:t,title:Pt(t),link:"#"+t.id,level:n}});return Lt(e,o)}function Pt(o){let e="";for(const t of o.childNodes)if(t.nodeType===1){if(t.classList.contains("VPBadge")||t.classList.contains("header-anchor")||t.classList.contains("ignore-header"))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function Lt(o,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[n,s]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;o=o.filter(u=>u.level>=n&&u.level<=s),de.length=0;for(const{element:u,link:h}of o)de.push({element:u,link:h});const i=[];e:for(let u=0;u=0;p--){const g=o[p];if(g.level{requestAnimationFrame(i),window.addEventListener("scroll",n)}),qe(()=>{u(location.hash)}),he(()=>{window.removeEventListener("scroll",n)});function i(){if(!t.value)return;const h=window.scrollY,p=window.innerHeight,g=document.body.offsetHeight,L=Math.abs(h+p-g)<1,k=de.map(({element:T,link:A})=>({link:A,top:St(T)})).filter(({top:T})=>!Number.isNaN(T)).sort((T,A)=>T.top-A.top);if(!k.length){u(null);return}if(h<1){u(null);return}if(L){u(k[k.length-1].link);return}let V=null;for(const{link:T,top:A}of k){if(A>h+Ke()+4)break;V=T}u(V)}function u(h){s&&s.classList.remove("active"),h==null?s=null:s=o.value.querySelector(`a[href="${decodeURIComponent(h)}"]`);const p=s;p?(p.classList.add("active"),e.value.style.top=p.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function St(o){let e=0;for(;o!==document.body;){if(o===null)return NaN;e+=o.offsetTop,o=o.offsetParent}return e}const Tt=["href","title"],It=_({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(o){function e({target:t}){const n=t.href.split("#")[1],s=document.getElementById(decodeURIComponent(n));s==null||s.focus({preventScroll:!0})}return(t,n)=>{const s=q("VPDocOutlineItem",!0);return a(),c("ul",{class:N(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),c(M,null,E(t.headers,({children:i,link:u,title:h})=>(a(),c("li",null,[v("a",{class:"outline-link",href:u,onClick:e,title:h},I(h),9,Tt),i!=null&&i.length?(a(),$(s,{key:0,headers:i},null,8,["headers"])):f("",!0)]))),256))],2)}}}),Ae=b(It,[["__scopeId","data-v-b933a997"]]),wt={class:"content"},Nt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},Mt=_({__name:"VPDocAsideOutline",setup(o){const{frontmatter:e,theme:t}=P(),n=Le([]);x(()=>{n.value=_e(e.value.outline??t.value.outline)});const s=w(),i=w();return Vt(s,i),(u,h)=>(a(),c("nav",{"aria-labelledby":"doc-outline-aria-label",class:N(["VPDocAsideOutline",{"has-outline":n.value.length>0}]),ref_key:"container",ref:s},[v("div",wt,[v("div",{class:"outline-marker",ref_key:"marker",ref:i},null,512),v("div",Nt,I(r(Me)(r(t))),1),m(Ae,{headers:n.value,root:!0},null,8,["headers"])])],2))}}),At=b(Mt,[["__scopeId","data-v-a5bbad30"]]),Ct={class:"VPDocAsideCarbonAds"},Bt=_({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(o){const e=()=>null;return(t,n)=>(a(),c("div",Ct,[m(r(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Ht=o=>(B("data-v-3f215769"),o=o(),H(),o),Et={class:"VPDocAside"},Dt=Ht(()=>v("div",{class:"spacer"},null,-1)),Ft=_({__name:"VPDocAside",setup(o){const{theme:e}=P();return(t,n)=>(a(),c("div",Et,[l(t.$slots,"aside-top",{},void 0,!0),l(t.$slots,"aside-outline-before",{},void 0,!0),m(At),l(t.$slots,"aside-outline-after",{},void 0,!0),Dt,l(t.$slots,"aside-ads-before",{},void 0,!0),r(e).carbonAds?(a(),$(Bt,{key:0,"carbon-ads":r(e).carbonAds},null,8,["carbon-ads"])):f("",!0),l(t.$slots,"aside-ads-after",{},void 0,!0),l(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Ot=b(Ft,[["__scopeId","data-v-3f215769"]]);function Ut(){const{theme:o,page:e}=P();return y(()=>{const{text:t="Edit this page",pattern:n=""}=o.value.editLink||{};let s;return typeof n=="function"?s=n(e.value):s=n.replace(/:path/g,e.value.filePath),{url:s,text:t}})}function Gt(){const{page:o,theme:e,frontmatter:t}=P();return y(()=>{var g,L,k,V,T,A,C,S;const n=Ne(e.value.sidebar,o.value.relativePath),s=bt(n),i=jt(s,U=>U.link.replace(/[?#].*$/,"")),u=i.findIndex(U=>z(o.value.relativePath,U.link)),h=((g=e.value.docFooter)==null?void 0:g.prev)===!1&&!t.value.prev||t.value.prev===!1,p=((L=e.value.docFooter)==null?void 0:L.next)===!1&&!t.value.next||t.value.next===!1;return{prev:h?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((k=i[u-1])==null?void 0:k.docFooterText)??((V=i[u-1])==null?void 0:V.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((T=i[u-1])==null?void 0:T.link)},next:p?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((A=i[u+1])==null?void 0:A.docFooterText)??((C=i[u+1])==null?void 0:C.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((S=i[u+1])==null?void 0:S.link)}}})}function jt(o,e){const t=new Set;return o.filter(n=>{const s=e(n);return t.has(s)?!1:t.add(s)})}const D=_({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(o){const e=o,t=y(()=>e.tag??(e.href?"a":"span")),n=y(()=>e.href&&Ve.test(e.href)||e.target==="_blank");return(s,i)=>(a(),$(R(t.value),{class:N(["VPLink",{link:s.href,"vp-external-link-icon":n.value,"no-icon":s.noIcon}]),href:s.href?r(fe)(s.href):void 0,target:s.target??(n.value?"_blank":void 0),rel:s.rel??(n.value?"noreferrer":void 0)},{default:d(()=>[l(s.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),zt={class:"VPLastUpdated"},qt=["datetime"],Kt=_({__name:"VPDocFooterLastUpdated",setup(o){const{theme:e,page:t,frontmatter:n,lang:s}=P(),i=y(()=>new Date(n.value.lastUpdated??t.value.lastUpdated)),u=y(()=>i.value.toISOString()),h=w("");return W(()=>{Z(()=>{var p,g,L;h.value=new Intl.DateTimeFormat((g=(p=e.value.lastUpdated)==null?void 0:p.formatOptions)!=null&&g.forceLocale?s.value:void 0,((L=e.value.lastUpdated)==null?void 0:L.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(i.value)})}),(p,g)=>{var L;return a(),c("p",zt,[F(I(((L=r(e).lastUpdated)==null?void 0:L.text)||r(e).lastUpdatedText||"Last updated")+": ",1),v("time",{datetime:u.value},I(h.value),9,qt)])}}}),Rt=b(Kt,[["__scopeId","data-v-7e05ebdb"]]),Ce=o=>(B("data-v-d4a0bba5"),o=o(),H(),o),Wt={key:0,class:"VPDocFooter"},Jt={key:0,class:"edit-info"},Yt={key:0,class:"edit-link"},Qt=Ce(()=>v("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),Xt={key:1,class:"last-updated"},Zt={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},xt=Ce(()=>v("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),eo={class:"pager"},to=["innerHTML"],oo=["innerHTML"],so={class:"pager"},no=["innerHTML"],ao=["innerHTML"],ro=_({__name:"VPDocFooter",setup(o){const{theme:e,page:t,frontmatter:n}=P(),s=Ut(),i=Gt(),u=y(()=>e.value.editLink&&n.value.editLink!==!1),h=y(()=>t.value.lastUpdated&&n.value.lastUpdated!==!1),p=y(()=>u.value||h.value||i.value.prev||i.value.next);return(g,L)=>{var k,V,T,A;return p.value?(a(),c("footer",Wt,[l(g.$slots,"doc-footer-before",{},void 0,!0),u.value||h.value?(a(),c("div",Jt,[u.value?(a(),c("div",Yt,[m(D,{class:"edit-link-button",href:r(s).url,"no-icon":!0},{default:d(()=>[Qt,F(" "+I(r(s).text),1)]),_:1},8,["href"])])):f("",!0),h.value?(a(),c("div",Xt,[m(Rt)])):f("",!0)])):f("",!0),(k=r(i).prev)!=null&&k.link||(V=r(i).next)!=null&&V.link?(a(),c("nav",Zt,[xt,v("div",eo,[(T=r(i).prev)!=null&&T.link?(a(),$(D,{key:0,class:"pager-link prev",href:r(i).prev.link},{default:d(()=>{var C;return[v("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.prev)||"Previous page"},null,8,to),v("span",{class:"title",innerHTML:r(i).prev.text},null,8,oo)]}),_:1},8,["href"])):f("",!0)]),v("div",so,[(A=r(i).next)!=null&&A.link?(a(),$(D,{key:0,class:"pager-link next",href:r(i).next.link},{default:d(()=>{var C;return[v("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.next)||"Next page"},null,8,no),v("span",{class:"title",innerHTML:r(i).next.text},null,8,ao)]}),_:1},8,["href"])):f("",!0)])])):f("",!0)])):f("",!0)}}}),io=b(ro,[["__scopeId","data-v-d4a0bba5"]]),lo=o=>(B("data-v-39a288b8"),o=o(),H(),o),co={class:"container"},uo=lo(()=>v("div",{class:"aside-curtain"},null,-1)),vo={class:"aside-container"},po={class:"aside-content"},ho={class:"content"},fo={class:"content-container"},_o={class:"main"},mo=_({__name:"VPDoc",setup(o){const{theme:e}=P(),t=ee(),{hasSidebar:n,hasAside:s,leftAside:i}=O(),u=y(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(h,p)=>{const g=q("Content");return a(),c("div",{class:N(["VPDoc",{"has-sidebar":r(n),"has-aside":r(s)}])},[l(h.$slots,"doc-top",{},void 0,!0),v("div",co,[r(s)?(a(),c("div",{key:0,class:N(["aside",{"left-aside":r(i)}])},[uo,v("div",vo,[v("div",po,[m(Ot,null,{"aside-top":d(()=>[l(h.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":d(()=>[l(h.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":d(()=>[l(h.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":d(()=>[l(h.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":d(()=>[l(h.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":d(()=>[l(h.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):f("",!0),v("div",ho,[v("div",fo,[l(h.$slots,"doc-before",{},void 0,!0),v("main",_o,[m(g,{class:N(["vp-doc",[u.value,r(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),m(io,null,{"doc-footer-before":d(()=>[l(h.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),l(h.$slots,"doc-after",{},void 0,!0)])])]),l(h.$slots,"doc-bottom",{},void 0,!0)],2)}}}),ko=b(mo,[["__scopeId","data-v-39a288b8"]]),bo=_({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(o){const e=o,t=y(()=>e.href&&Ve.test(e.href)),n=y(()=>e.tag||e.href?"a":"button");return(s,i)=>(a(),$(R(n.value),{class:N(["VPButton",[s.size,s.theme]]),href:s.href?r(fe)(s.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:d(()=>[F(I(s.text),1)]),_:1},8,["class","href","target","rel"]))}}),$o=b(bo,[["__scopeId","data-v-cad61b99"]]),go=["src","alt"],yo=_({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(o){return(e,t)=>{const n=q("VPImage",!0);return e.image?(a(),c(M,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),c("img",Y({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:r(pe)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,go)):(a(),c(M,{key:1},[m(n,Y({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),m(n,Y({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):f("",!0)}}}),X=b(yo,[["__scopeId","data-v-8426fc1a"]]),Po=o=>(B("data-v-303bb580"),o=o(),H(),o),Lo={class:"container"},Vo={class:"main"},So={key:0,class:"name"},To=["innerHTML"],Io=["innerHTML"],wo=["innerHTML"],No={key:0,class:"actions"},Mo={key:0,class:"image"},Ao={class:"image-container"},Co=Po(()=>v("div",{class:"image-bg"},null,-1)),Bo=_({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(o){const e=te("hero-image-slot-exists");return(t,n)=>(a(),c("div",{class:N(["VPHero",{"has-image":t.image||r(e)}])},[v("div",Lo,[v("div",Vo,[l(t.$slots,"home-hero-info-before",{},void 0,!0),l(t.$slots,"home-hero-info",{},()=>[t.name?(a(),c("h1",So,[v("span",{innerHTML:t.name,class:"clip"},null,8,To)])):f("",!0),t.text?(a(),c("p",{key:1,innerHTML:t.text,class:"text"},null,8,Io)):f("",!0),t.tagline?(a(),c("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,wo)):f("",!0)],!0),l(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),c("div",No,[(a(!0),c(M,null,E(t.actions,s=>(a(),c("div",{key:s.link,class:"action"},[m($o,{tag:"a",size:"medium",theme:s.theme,text:s.text,href:s.link,target:s.target,rel:s.rel},null,8,["theme","text","href","target","rel"])]))),128))])):f("",!0),l(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||r(e)?(a(),c("div",Mo,[v("div",Ao,[Co,l(t.$slots,"home-hero-image",{},()=>[t.image?(a(),$(X,{key:0,class:"image-src",image:t.image},null,8,["image"])):f("",!0)],!0)])])):f("",!0)])],2))}}),Ho=b(Bo,[["__scopeId","data-v-303bb580"]]),Eo=_({__name:"VPHomeHero",setup(o){const{frontmatter:e}=P();return(t,n)=>r(e).hero?(a(),$(Ho,{key:0,class:"VPHomeHero",name:r(e).hero.name,text:r(e).hero.text,tagline:r(e).hero.tagline,image:r(e).hero.image,actions:r(e).hero.actions},{"home-hero-info-before":d(()=>[l(t.$slots,"home-hero-info-before")]),"home-hero-info":d(()=>[l(t.$slots,"home-hero-info")]),"home-hero-info-after":d(()=>[l(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":d(()=>[l(t.$slots,"home-hero-actions-after")]),"home-hero-image":d(()=>[l(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):f("",!0)}}),Do=o=>(B("data-v-a3976bdc"),o=o(),H(),o),Fo={class:"box"},Oo={key:0,class:"icon"},Uo=["innerHTML"],Go=["innerHTML"],jo=["innerHTML"],zo={key:4,class:"link-text"},qo={class:"link-text-value"},Ko=Do(()=>v("span",{class:"vpi-arrow-right link-text-icon"},null,-1)),Ro=_({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(o){return(e,t)=>(a(),$(D,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:d(()=>[v("article",Fo,[typeof e.icon=="object"&&e.icon.wrap?(a(),c("div",Oo,[m(X,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),$(X,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(a(),c("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Uo)):f("",!0),v("h2",{class:"title",innerHTML:e.title},null,8,Go),e.details?(a(),c("p",{key:3,class:"details",innerHTML:e.details},null,8,jo)):f("",!0),e.linkText?(a(),c("div",zo,[v("p",qo,[F(I(e.linkText)+" ",1),Ko])])):f("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Wo=b(Ro,[["__scopeId","data-v-a3976bdc"]]),Jo={key:0,class:"VPFeatures"},Yo={class:"container"},Qo={class:"items"},Xo=_({__name:"VPFeatures",props:{features:{}},setup(o){const e=o,t=y(()=>{const n=e.features.length;if(n){if(n===2)return"grid-2";if(n===3)return"grid-3";if(n%3===0)return"grid-6";if(n>3)return"grid-4"}else return});return(n,s)=>n.features?(a(),c("div",Jo,[v("div",Yo,[v("div",Qo,[(a(!0),c(M,null,E(n.features,i=>(a(),c("div",{key:i.title,class:N(["item",[t.value]])},[m(Wo,{icon:i.icon,title:i.title,details:i.details,link:i.link,"link-text":i.linkText,rel:i.rel,target:i.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):f("",!0)}}),Zo=b(Xo,[["__scopeId","data-v-a6181336"]]),xo=_({__name:"VPHomeFeatures",setup(o){const{frontmatter:e}=P();return(t,n)=>r(e).features?(a(),$(Zo,{key:0,class:"VPHomeFeatures",features:r(e).features},null,8,["features"])):f("",!0)}}),es=_({__name:"VPHomeContent",setup(o){const{width:e}=Re({initialWidth:0,includeScrollbar:!1});return(t,n)=>(a(),c("div",{class:"vp-doc container",style:Se(r(e)?{"--vp-offset":`calc(50% - ${r(e)/2}px)`}:{})},[l(t.$slots,"default",{},void 0,!0)],4))}}),ts=b(es,[["__scopeId","data-v-8e2d4988"]]),os={class:"VPHome"},ss=_({__name:"VPHome",setup(o){const{frontmatter:e}=P();return(t,n)=>{const s=q("Content");return a(),c("div",os,[l(t.$slots,"home-hero-before",{},void 0,!0),m(Eo,null,{"home-hero-info-before":d(()=>[l(t.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":d(()=>[l(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":d(()=>[l(t.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":d(()=>[l(t.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":d(()=>[l(t.$slots,"home-hero-image",{},void 0,!0)]),_:3}),l(t.$slots,"home-hero-after",{},void 0,!0),l(t.$slots,"home-features-before",{},void 0,!0),m(xo),l(t.$slots,"home-features-after",{},void 0,!0),r(e).markdownStyles!==!1?(a(),$(ts,{key:0},{default:d(()=>[m(s)]),_:1})):(a(),$(s,{key:1}))])}}}),ns=b(ss,[["__scopeId","data-v-686f80a6"]]),as={},rs={class:"VPPage"};function is(o,e){const t=q("Content");return a(),c("div",rs,[l(o.$slots,"page-top"),m(t),l(o.$slots,"page-bottom")])}const ls=b(as,[["render",is]]),cs=_({__name:"VPContent",setup(o){const{page:e,frontmatter:t}=P(),{hasSidebar:n}=O();return(s,i)=>(a(),c("div",{class:N(["VPContent",{"has-sidebar":r(n),"is-home":r(t).layout==="home"}]),id:"VPContent"},[r(e).isNotFound?l(s.$slots,"not-found",{key:0},()=>[m(mt)],!0):r(t).layout==="page"?(a(),$(ls,{key:1},{"page-top":d(()=>[l(s.$slots,"page-top",{},void 0,!0)]),"page-bottom":d(()=>[l(s.$slots,"page-bottom",{},void 0,!0)]),_:3})):r(t).layout==="home"?(a(),$(ns,{key:2},{"home-hero-before":d(()=>[l(s.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":d(()=>[l(s.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":d(()=>[l(s.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":d(()=>[l(s.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":d(()=>[l(s.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":d(()=>[l(s.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":d(()=>[l(s.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":d(()=>[l(s.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":d(()=>[l(s.$slots,"home-features-after",{},void 0,!0)]),_:3})):r(t).layout&&r(t).layout!=="doc"?(a(),$(R(r(t).layout),{key:3})):(a(),$(ko,{key:4},{"doc-top":d(()=>[l(s.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":d(()=>[l(s.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":d(()=>[l(s.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":d(()=>[l(s.$slots,"doc-before",{},void 0,!0)]),"doc-after":d(()=>[l(s.$slots,"doc-after",{},void 0,!0)]),"aside-top":d(()=>[l(s.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":d(()=>[l(s.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":d(()=>[l(s.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":d(()=>[l(s.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":d(()=>[l(s.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":d(()=>[l(s.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),us=b(cs,[["__scopeId","data-v-1428d186"]]),ds={class:"container"},vs=["innerHTML"],ps=["innerHTML"],hs=_({__name:"VPFooter",setup(o){const{theme:e,frontmatter:t}=P(),{hasSidebar:n}=O();return(s,i)=>r(e).footer&&r(t).footer!==!1?(a(),c("footer",{key:0,class:N(["VPFooter",{"has-sidebar":r(n)}])},[v("div",ds,[r(e).footer.message?(a(),c("p",{key:0,class:"message",innerHTML:r(e).footer.message},null,8,vs)):f("",!0),r(e).footer.copyright?(a(),c("p",{key:1,class:"copyright",innerHTML:r(e).footer.copyright},null,8,ps)):f("",!0)])],2)):f("",!0)}}),fs=b(hs,[["__scopeId","data-v-e315a0ad"]]);function _s(){const{theme:o,frontmatter:e}=P(),t=Le([]),n=y(()=>t.value.length>0);return x(()=>{t.value=_e(e.value.outline??o.value.outline)}),{headers:t,hasLocalNav:n}}const ms=o=>(B("data-v-17a5e62e"),o=o(),H(),o),ks={class:"menu-text"},bs=ms(()=>v("span",{class:"vpi-chevron-right icon"},null,-1)),$s={class:"header"},gs={class:"outline"},ys=_({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(o){const e=o,{theme:t}=P(),n=w(!1),s=w(0),i=w(),u=w();function h(k){var V;(V=i.value)!=null&&V.contains(k.target)||(n.value=!1)}j(n,k=>{if(k){document.addEventListener("click",h);return}document.removeEventListener("click",h)}),le("Escape",()=>{n.value=!1}),x(()=>{n.value=!1});function p(){n.value=!n.value,s.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function g(k){k.target.classList.contains("outline-link")&&(u.value&&(u.value.style.transition="none"),We(()=>{n.value=!1}))}function L(){n.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(k,V)=>(a(),c("div",{class:"VPLocalNavOutlineDropdown",style:Se({"--vp-vh":s.value+"px"}),ref_key:"main",ref:i},[k.headers.length>0?(a(),c("button",{key:0,onClick:p,class:N({open:n.value})},[v("span",ks,I(r(Me)(r(t))),1),bs],2)):(a(),c("button",{key:1,onClick:L},I(r(t).returnToTopLabel||"Return to top"),1)),m(ve,{name:"flyout"},{default:d(()=>[n.value?(a(),c("div",{key:0,ref_key:"items",ref:u,class:"items",onClick:g},[v("div",$s,[v("a",{class:"top-link",href:"#",onClick:L},I(r(t).returnToTopLabel||"Return to top"),1)]),v("div",gs,[m(Ae,{headers:k.headers},null,8,["headers"])])],512)):f("",!0)]),_:1})],4))}}),Ps=b(ys,[["__scopeId","data-v-17a5e62e"]]),Ls=o=>(B("data-v-a6f0e41e"),o=o(),H(),o),Vs={class:"container"},Ss=["aria-expanded"],Ts=Ls(()=>v("span",{class:"vpi-align-left menu-icon"},null,-1)),Is={class:"menu-text"},ws=_({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(o){const{theme:e,frontmatter:t}=P(),{hasSidebar:n}=O(),{headers:s}=_s(),{y:i}=Te(),u=w(0);W(()=>{u.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),x(()=>{s.value=_e(t.value.outline??e.value.outline)});const h=y(()=>s.value.length===0),p=y(()=>h.value&&!n.value),g=y(()=>({VPLocalNav:!0,"has-sidebar":n.value,empty:h.value,fixed:p.value}));return(L,k)=>r(t).layout!=="home"&&(!p.value||r(i)>=u.value)?(a(),c("div",{key:0,class:N(g.value)},[v("div",Vs,[r(n)?(a(),c("button",{key:0,class:"menu","aria-expanded":L.open,"aria-controls":"VPSidebarNav",onClick:k[0]||(k[0]=V=>L.$emit("open-menu"))},[Ts,v("span",Is,I(r(e).sidebarMenuLabel||"Menu"),1)],8,Ss)):f("",!0),m(Ps,{headers:r(s),navHeight:u.value},null,8,["headers","navHeight"])])],2)):f("",!0)}}),Ns=b(ws,[["__scopeId","data-v-a6f0e41e"]]);function Ms(){const o=w(!1);function e(){o.value=!0,window.addEventListener("resize",s)}function t(){o.value=!1,window.removeEventListener("resize",s)}function n(){o.value?t():e()}function s(){window.outerWidth>=768&&t()}const i=ee();return j(()=>i.path,t),{isScreenOpen:o,openScreen:e,closeScreen:t,toggleScreen:n}}const As={},Cs={class:"VPSwitch",type:"button",role:"switch"},Bs={class:"check"},Hs={key:0,class:"icon"};function Es(o,e){return a(),c("button",Cs,[v("span",Bs,[o.$slots.default?(a(),c("span",Hs,[l(o.$slots,"default",{},void 0,!0)])):f("",!0)])])}const Ds=b(As,[["render",Es],["__scopeId","data-v-1d5665e3"]]),Be=o=>(B("data-v-d1f28634"),o=o(),H(),o),Fs=Be(()=>v("span",{class:"vpi-sun sun"},null,-1)),Os=Be(()=>v("span",{class:"vpi-moon moon"},null,-1)),Us=_({__name:"VPSwitchAppearance",setup(o){const{isDark:e,theme:t}=P(),n=te("toggle-appearance",()=>{e.value=!e.value}),s=y(()=>e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme");return(i,u)=>(a(),$(Ds,{title:s.value,class:"VPSwitchAppearance","aria-checked":r(e),onClick:r(n)},{default:d(()=>[Fs,Os]),_:1},8,["title","aria-checked","onClick"]))}}),me=b(Us,[["__scopeId","data-v-d1f28634"]]),Gs={key:0,class:"VPNavBarAppearance"},js=_({__name:"VPNavBarAppearance",setup(o){const{site:e}=P();return(t,n)=>r(e).appearance&&r(e).appearance!=="force-dark"?(a(),c("div",Gs,[m(me)])):f("",!0)}}),zs=b(js,[["__scopeId","data-v-e6aabb21"]]),ke=w();let He=!1,re=0;function qs(o){const e=w(!1);if(oe){!He&&Ks(),re++;const t=j(ke,n=>{var s,i,u;n===o.el.value||(s=o.el.value)!=null&&s.contains(n)?(e.value=!0,(i=o.onFocus)==null||i.call(o)):(e.value=!1,(u=o.onBlur)==null||u.call(o))});he(()=>{t(),re--,re||Rs()})}return Je(e)}function Ks(){document.addEventListener("focusin",Ee),He=!0,ke.value=document.activeElement}function Rs(){document.removeEventListener("focusin",Ee)}function Ee(){ke.value=document.activeElement}const Ws={class:"VPMenuLink"},Js=_({__name:"VPMenuLink",props:{item:{}},setup(o){const{page:e}=P();return(t,n)=>(a(),c("div",Ws,[m(D,{class:N({active:r(z)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:d(()=>[F(I(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),se=b(Js,[["__scopeId","data-v-43f1e123"]]),Ys={class:"VPMenuGroup"},Qs={key:0,class:"title"},Xs=_({__name:"VPMenuGroup",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),c("div",Ys,[e.text?(a(),c("p",Qs,I(e.text),1)):f("",!0),(a(!0),c(M,null,E(e.items,n=>(a(),c(M,null,["link"in n?(a(),$(se,{key:0,item:n},null,8,["item"])):f("",!0)],64))),256))]))}}),Zs=b(Xs,[["__scopeId","data-v-69e747b5"]]),xs={class:"VPMenu"},en={key:0,class:"items"},tn=_({__name:"VPMenu",props:{items:{}},setup(o){return(e,t)=>(a(),c("div",xs,[e.items?(a(),c("div",en,[(a(!0),c(M,null,E(e.items,n=>(a(),c(M,{key:n.text},["link"in n?(a(),$(se,{key:0,item:n},null,8,["item"])):(a(),$(Zs,{key:1,text:n.text,items:n.items},null,8,["text","items"]))],64))),128))])):f("",!0),l(e.$slots,"default",{},void 0,!0)]))}}),on=b(tn,[["__scopeId","data-v-e7ea1737"]]),sn=o=>(B("data-v-b6c34ac9"),o=o(),H(),o),nn=["aria-expanded","aria-label"],an={key:0,class:"text"},rn=["innerHTML"],ln=sn(()=>v("span",{class:"vpi-chevron-down text-icon"},null,-1)),cn={key:1,class:"vpi-more-horizontal icon"},un={class:"menu"},dn=_({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(o){const e=w(!1),t=w();qs({el:t,onBlur:n});function n(){e.value=!1}return(s,i)=>(a(),c("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:i[1]||(i[1]=u=>e.value=!0),onMouseleave:i[2]||(i[2]=u=>e.value=!1)},[v("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":s.label,onClick:i[0]||(i[0]=u=>e.value=!e.value)},[s.button||s.icon?(a(),c("span",an,[s.icon?(a(),c("span",{key:0,class:N([s.icon,"option-icon"])},null,2)):f("",!0),s.button?(a(),c("span",{key:1,innerHTML:s.button},null,8,rn)):f("",!0),ln])):(a(),c("span",cn))],8,nn),v("div",un,[m(on,{items:s.items},{default:d(()=>[l(s.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),be=b(dn,[["__scopeId","data-v-b6c34ac9"]]),vn=["href","aria-label","innerHTML"],pn=_({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(o){const e=o,t=y(()=>typeof e.icon=="object"?e.icon.svg:``);return(n,s)=>(a(),c("a",{class:"VPSocialLink no-icon",href:n.link,"aria-label":n.ariaLabel??(typeof n.icon=="string"?n.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,vn))}}),hn=b(pn,[["__scopeId","data-v-eee4e7cb"]]),fn={class:"VPSocialLinks"},_n=_({__name:"VPSocialLinks",props:{links:{}},setup(o){return(e,t)=>(a(),c("div",fn,[(a(!0),c(M,null,E(e.links,({link:n,icon:s,ariaLabel:i})=>(a(),$(hn,{key:n,icon:s,link:n,ariaLabel:i},null,8,["icon","link","ariaLabel"]))),128))]))}}),$e=b(_n,[["__scopeId","data-v-7bc22406"]]),mn={key:0,class:"group translations"},kn={class:"trans-title"},bn={key:1,class:"group"},$n={class:"item appearance"},gn={class:"label"},yn={class:"appearance-action"},Pn={key:2,class:"group"},Ln={class:"item social-links"},Vn=_({__name:"VPNavBarExtra",setup(o){const{site:e,theme:t}=P(),{localeLinks:n,currentLang:s}=J({correspondingLink:!0}),i=y(()=>n.value.length&&s.value.label||e.value.appearance||t.value.socialLinks);return(u,h)=>i.value?(a(),$(be,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:d(()=>[r(n).length&&r(s).label?(a(),c("div",mn,[v("p",kn,I(r(s).label),1),(a(!0),c(M,null,E(r(n),p=>(a(),$(se,{key:p.link,item:p},null,8,["item"]))),128))])):f("",!0),r(e).appearance&&r(e).appearance!=="force-dark"?(a(),c("div",bn,[v("div",$n,[v("p",gn,I(r(t).darkModeSwitchLabel||"Appearance"),1),v("div",yn,[m(me)])])])):f("",!0),r(t).socialLinks?(a(),c("div",Pn,[v("div",Ln,[m($e,{class:"social-links-list",links:r(t).socialLinks},null,8,["links"])])])):f("",!0)]),_:1})):f("",!0)}}),Sn=b(Vn,[["__scopeId","data-v-d0bd9dde"]]),Tn=o=>(B("data-v-e5dd9c1c"),o=o(),H(),o),In=["aria-expanded"],wn=Tn(()=>v("span",{class:"container"},[v("span",{class:"top"}),v("span",{class:"middle"}),v("span",{class:"bottom"})],-1)),Nn=[wn],Mn=_({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(o){return(e,t)=>(a(),c("button",{type:"button",class:N(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=n=>e.$emit("click"))},Nn,10,In))}}),An=b(Mn,[["__scopeId","data-v-e5dd9c1c"]]),Cn=["innerHTML"],Bn=_({__name:"VPNavBarMenuLink",props:{item:{}},setup(o){const{page:e}=P();return(t,n)=>(a(),$(D,{class:N({VPNavBarMenuLink:!0,active:r(z)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,noIcon:t.item.noIcon,target:t.item.target,rel:t.item.rel,tabindex:"0"},{default:d(()=>[v("span",{innerHTML:t.item.text},null,8,Cn)]),_:1},8,["class","href","noIcon","target","rel"]))}}),Hn=b(Bn,[["__scopeId","data-v-9c663999"]]),En=_({__name:"VPNavBarMenuGroup",props:{item:{}},setup(o){const e=o,{page:t}=P(),n=i=>"link"in i?z(t.value.relativePath,i.link,!!e.item.activeMatch):i.items.some(n),s=y(()=>n(e.item));return(i,u)=>(a(),$(be,{class:N({VPNavBarMenuGroup:!0,active:r(z)(r(t).relativePath,i.item.activeMatch,!!i.item.activeMatch)||s.value}),button:i.item.text,items:i.item.items},null,8,["class","button","items"]))}}),Dn=o=>(B("data-v-7f418b0f"),o=o(),H(),o),Fn={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},On=Dn(()=>v("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),Un=_({__name:"VPNavBarMenu",setup(o){const{theme:e}=P();return(t,n)=>r(e).nav?(a(),c("nav",Fn,[On,(a(!0),c(M,null,E(r(e).nav,s=>(a(),c(M,{key:s.text},["link"in s?(a(),$(Hn,{key:0,item:s},null,8,["item"])):(a(),$(En,{key:1,item:s},null,8,["item"]))],64))),128))])):f("",!0)}}),Gn=b(Un,[["__scopeId","data-v-7f418b0f"]]);function jn(o){const{localeIndex:e,theme:t}=P();function n(s){var A,C,S;const i=s.split("."),u=(A=t.value.search)==null?void 0:A.options,h=u&&typeof u=="object",p=h&&((S=(C=u.locales)==null?void 0:C[e.value])==null?void 0:S.translations)||null,g=h&&u.translations||null;let L=p,k=g,V=o;const T=i.pop();for(const U of i){let G=null;const K=V==null?void 0:V[U];K&&(G=V=K);const ne=k==null?void 0:k[U];ne&&(G=k=ne);const ae=L==null?void 0:L[U];ae&&(G=L=ae),K||(V=G),ne||(k=G),ae||(L=G)}return(L==null?void 0:L[T])??(k==null?void 0:k[T])??(V==null?void 0:V[T])??""}return n}const zn=["aria-label"],qn={class:"DocSearch-Button-Container"},Kn=v("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1),Rn={class:"DocSearch-Button-Placeholder"},Wn=v("span",{class:"DocSearch-Button-Keys"},[v("kbd",{class:"DocSearch-Button-Key"}),v("kbd",{class:"DocSearch-Button-Key"},"K")],-1),ge=_({__name:"VPNavBarSearchButton",setup(o){const t=jn({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(n,s)=>(a(),c("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":r(t)("button.buttonAriaLabel")},[v("span",qn,[Kn,v("span",Rn,I(r(t)("button.buttonText")),1)]),Wn],8,zn))}}),Jn={class:"VPNavBarSearch"},Yn={id:"local-search"},Qn={key:1,id:"docsearch"},Xn=_({__name:"VPNavBarSearch",setup(o){const e=Ye(()=>Qe(()=>import("./VPLocalSearchBox.BG-uneXQ.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:n}=P(),s=w(!1),i=w(!1);W(()=>{});function u(){s.value||(s.value=!0,setTimeout(h,16))}function h(){const k=new Event("keydown");k.key="k",k.metaKey=!0,window.dispatchEvent(k),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||h()},16)}function p(k){const V=k.target,T=V.tagName;return V.isContentEditable||T==="INPUT"||T==="SELECT"||T==="TEXTAREA"}const g=w(!1);le("k",k=>{(k.ctrlKey||k.metaKey)&&(k.preventDefault(),g.value=!0)}),le("/",k=>{p(k)||(k.preventDefault(),g.value=!0)});const L="local";return(k,V)=>{var T;return a(),c("div",Jn,[r(L)==="local"?(a(),c(M,{key:0},[g.value?(a(),$(r(e),{key:0,onClose:V[0]||(V[0]=A=>g.value=!1)})):f("",!0),v("div",Yn,[m(ge,{onClick:V[1]||(V[1]=A=>g.value=!0)})])],64)):r(L)==="algolia"?(a(),c(M,{key:1},[s.value?(a(),$(r(t),{key:0,algolia:((T=r(n).search)==null?void 0:T.options)??r(n).algolia,onVnodeBeforeMount:V[2]||(V[2]=A=>i.value=!0)},null,8,["algolia"])):f("",!0),i.value?f("",!0):(a(),c("div",Qn,[m(ge,{onClick:u})]))],64)):f("",!0)])}}}),Zn=_({__name:"VPNavBarSocialLinks",setup(o){const{theme:e}=P();return(t,n)=>r(e).socialLinks?(a(),$($e,{key:0,class:"VPNavBarSocialLinks",links:r(e).socialLinks},null,8,["links"])):f("",!0)}}),xn=b(Zn,[["__scopeId","data-v-0394ad82"]]),ea=["href","rel","target"],ta={key:1},oa={key:2},sa=_({__name:"VPNavBarTitle",setup(o){const{site:e,theme:t}=P(),{hasSidebar:n}=O(),{currentLang:s}=J(),i=y(()=>{var p;return typeof t.value.logoLink=="string"?t.value.logoLink:(p=t.value.logoLink)==null?void 0:p.link}),u=y(()=>{var p;return typeof t.value.logoLink=="string"||(p=t.value.logoLink)==null?void 0:p.rel}),h=y(()=>{var p;return typeof t.value.logoLink=="string"||(p=t.value.logoLink)==null?void 0:p.target});return(p,g)=>(a(),c("div",{class:N(["VPNavBarTitle",{"has-sidebar":r(n)}])},[v("a",{class:"title",href:i.value??r(fe)(r(s).link),rel:u.value,target:h.value},[l(p.$slots,"nav-bar-title-before",{},void 0,!0),r(t).logo?(a(),$(X,{key:0,class:"logo",image:r(t).logo},null,8,["image"])):f("",!0),r(t).siteTitle?(a(),c("span",ta,I(r(t).siteTitle),1)):r(t).siteTitle===void 0?(a(),c("span",oa,I(r(e).title),1)):f("",!0),l(p.$slots,"nav-bar-title-after",{},void 0,!0)],8,ea)],2))}}),na=b(sa,[["__scopeId","data-v-ab179fa1"]]),aa={class:"items"},ra={class:"title"},ia=_({__name:"VPNavBarTranslations",setup(o){const{theme:e}=P(),{localeLinks:t,currentLang:n}=J({correspondingLink:!0});return(s,i)=>r(t).length&&r(n).label?(a(),$(be,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:r(e).langMenuLabel||"Change language"},{default:d(()=>[v("div",aa,[v("p",ra,I(r(n).label),1),(a(!0),c(M,null,E(r(t),u=>(a(),$(se,{key:u.link,item:u},null,8,["item"]))),128))])]),_:1},8,["label"])):f("",!0)}}),la=b(ia,[["__scopeId","data-v-88af2de4"]]),ca=o=>(B("data-v-ccf7ddec"),o=o(),H(),o),ua={class:"wrapper"},da={class:"container"},va={class:"title"},pa={class:"content"},ha={class:"content-body"},fa=ca(()=>v("div",{class:"divider"},[v("div",{class:"divider-line"})],-1)),_a=_({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(o){const{y:e}=Te(),{hasSidebar:t}=O(),{frontmatter:n}=P(),s=w({});return Pe(()=>{s.value={"has-sidebar":t.value,home:n.value.layout==="home",top:e.value===0}}),(i,u)=>(a(),c("div",{class:N(["VPNavBar",s.value])},[v("div",ua,[v("div",da,[v("div",va,[m(na,null,{"nav-bar-title-before":d(()=>[l(i.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":d(()=>[l(i.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),v("div",pa,[v("div",ha,[l(i.$slots,"nav-bar-content-before",{},void 0,!0),m(Xn,{class:"search"}),m(Gn,{class:"menu"}),m(la,{class:"translations"}),m(zs,{class:"appearance"}),m(xn,{class:"social-links"}),m(Sn,{class:"extra"}),l(i.$slots,"nav-bar-content-after",{},void 0,!0),m(An,{class:"hamburger",active:i.isScreenOpen,onClick:u[0]||(u[0]=h=>i.$emit("toggle-screen"))},null,8,["active"])])])])]),fa],2))}}),ma=b(_a,[["__scopeId","data-v-ccf7ddec"]]),ka={key:0,class:"VPNavScreenAppearance"},ba={class:"text"},$a=_({__name:"VPNavScreenAppearance",setup(o){const{site:e,theme:t}=P();return(n,s)=>r(e).appearance&&r(e).appearance!=="force-dark"?(a(),c("div",ka,[v("p",ba,I(r(t).darkModeSwitchLabel||"Appearance"),1),m(me)])):f("",!0)}}),ga=b($a,[["__scopeId","data-v-2d7af913"]]),ya=_({__name:"VPNavScreenMenuLink",props:{item:{}},setup(o){const e=te("close-screen");return(t,n)=>(a(),$(D,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e),innerHTML:t.item.text},null,8,["href","target","rel","onClick","innerHTML"]))}}),Pa=b(ya,[["__scopeId","data-v-7f31e1f6"]]),La=_({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(o){const e=te("close-screen");return(t,n)=>(a(),$(D,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e)},{default:d(()=>[F(I(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),De=b(La,[["__scopeId","data-v-19976ae1"]]),Va={class:"VPNavScreenMenuGroupSection"},Sa={key:0,class:"title"},Ta=_({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),c("div",Va,[e.text?(a(),c("p",Sa,I(e.text),1)):f("",!0),(a(!0),c(M,null,E(e.items,n=>(a(),$(De,{key:n.text,item:n},null,8,["item"]))),128))]))}}),Ia=b(Ta,[["__scopeId","data-v-8133b170"]]),wa=o=>(B("data-v-ff6087d4"),o=o(),H(),o),Na=["aria-controls","aria-expanded"],Ma=["innerHTML"],Aa=wa(()=>v("span",{class:"vpi-plus button-icon"},null,-1)),Ca=["id"],Ba={key:1,class:"group"},Ha=_({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(o){const e=o,t=w(!1),n=y(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function s(){t.value=!t.value}return(i,u)=>(a(),c("div",{class:N(["VPNavScreenMenuGroup",{open:t.value}])},[v("button",{class:"button","aria-controls":n.value,"aria-expanded":t.value,onClick:s},[v("span",{class:"button-text",innerHTML:i.text},null,8,Ma),Aa],8,Na),v("div",{id:n.value,class:"items"},[(a(!0),c(M,null,E(i.items,h=>(a(),c(M,{key:h.text},["link"in h?(a(),c("div",{key:h.text,class:"item"},[m(De,{item:h},null,8,["item"])])):(a(),c("div",Ba,[m(Ia,{text:h.text,items:h.items},null,8,["text","items"])]))],64))),128))],8,Ca)],2))}}),Ea=b(Ha,[["__scopeId","data-v-ff6087d4"]]),Da={key:0,class:"VPNavScreenMenu"},Fa=_({__name:"VPNavScreenMenu",setup(o){const{theme:e}=P();return(t,n)=>r(e).nav?(a(),c("nav",Da,[(a(!0),c(M,null,E(r(e).nav,s=>(a(),c(M,{key:s.text},["link"in s?(a(),$(Pa,{key:0,item:s},null,8,["item"])):(a(),$(Ea,{key:1,text:s.text||"",items:s.items},null,8,["text","items"]))],64))),128))])):f("",!0)}}),Oa=_({__name:"VPNavScreenSocialLinks",setup(o){const{theme:e}=P();return(t,n)=>r(e).socialLinks?(a(),$($e,{key:0,class:"VPNavScreenSocialLinks",links:r(e).socialLinks},null,8,["links"])):f("",!0)}}),Fe=o=>(B("data-v-858fe1a4"),o=o(),H(),o),Ua=Fe(()=>v("span",{class:"vpi-languages icon lang"},null,-1)),Ga=Fe(()=>v("span",{class:"vpi-chevron-down icon chevron"},null,-1)),ja={class:"list"},za=_({__name:"VPNavScreenTranslations",setup(o){const{localeLinks:e,currentLang:t}=J({correspondingLink:!0}),n=w(!1);function s(){n.value=!n.value}return(i,u)=>r(e).length&&r(t).label?(a(),c("div",{key:0,class:N(["VPNavScreenTranslations",{open:n.value}])},[v("button",{class:"title",onClick:s},[Ua,F(" "+I(r(t).label)+" ",1),Ga]),v("ul",ja,[(a(!0),c(M,null,E(r(e),h=>(a(),c("li",{key:h.link,class:"item"},[m(D,{class:"link",href:h.link},{default:d(()=>[F(I(h.text),1)]),_:2},1032,["href"])]))),128))])],2)):f("",!0)}}),qa=b(za,[["__scopeId","data-v-858fe1a4"]]),Ka={class:"container"},Ra=_({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(o){const e=w(null),t=Ie(oe?document.body:null);return(n,s)=>(a(),$(ve,{name:"fade",onEnter:s[0]||(s[0]=i=>t.value=!0),onAfterLeave:s[1]||(s[1]=i=>t.value=!1)},{default:d(()=>[n.open?(a(),c("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[v("div",Ka,[l(n.$slots,"nav-screen-content-before",{},void 0,!0),m(Fa,{class:"menu"}),m(qa,{class:"translations"}),m(ga,{class:"appearance"}),m(Oa,{class:"social-links"}),l(n.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):f("",!0)]),_:3}))}}),Wa=b(Ra,[["__scopeId","data-v-cc5739dd"]]),Ja={key:0,class:"VPNav"},Ya=_({__name:"VPNav",setup(o){const{isScreenOpen:e,closeScreen:t,toggleScreen:n}=Ms(),{frontmatter:s}=P(),i=y(()=>s.value.navbar!==!1);return we("close-screen",t),Z(()=>{oe&&document.documentElement.classList.toggle("hide-nav",!i.value)}),(u,h)=>i.value?(a(),c("header",Ja,[m(ma,{"is-screen-open":r(e),onToggleScreen:r(n)},{"nav-bar-title-before":d(()=>[l(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":d(()=>[l(u.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":d(()=>[l(u.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":d(()=>[l(u.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),m(Wa,{open:r(e)},{"nav-screen-content-before":d(()=>[l(u.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":d(()=>[l(u.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):f("",!0)}}),Qa=b(Ya,[["__scopeId","data-v-ae24b3ad"]]),Oe=o=>(B("data-v-b8d55f3b"),o=o(),H(),o),Xa=["role","tabindex"],Za=Oe(()=>v("div",{class:"indicator"},null,-1)),xa=Oe(()=>v("span",{class:"vpi-chevron-right caret-icon"},null,-1)),er=[xa],tr={key:1,class:"items"},or=_({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(o){const e=o,{collapsed:t,collapsible:n,isLink:s,isActiveLink:i,hasActiveLink:u,hasChildren:h,toggle:p}=gt(y(()=>e.item)),g=y(()=>h.value?"section":"div"),L=y(()=>s.value?"a":"div"),k=y(()=>h.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),V=y(()=>s.value?void 0:"button"),T=y(()=>[[`level-${e.depth}`],{collapsible:n.value},{collapsed:t.value},{"is-link":s.value},{"is-active":i.value},{"has-active":u.value}]);function A(S){"key"in S&&S.key!=="Enter"||!e.item.link&&p()}function C(){e.item.link&&p()}return(S,U)=>{const G=q("VPSidebarItem",!0);return a(),$(R(g.value),{class:N(["VPSidebarItem",T.value])},{default:d(()=>[S.item.text?(a(),c("div",Y({key:0,class:"item",role:V.value},Ze(S.item.items?{click:A,keydown:A}:{},!0),{tabindex:S.item.items&&0}),[Za,S.item.link?(a(),$(D,{key:0,tag:L.value,class:"link",href:S.item.link,rel:S.item.rel,target:S.item.target},{default:d(()=>[(a(),$(R(k.value),{class:"text",innerHTML:S.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),$(R(k.value),{key:1,class:"text",innerHTML:S.item.text},null,8,["innerHTML"])),S.item.collapsed!=null&&S.item.items&&S.item.items.length?(a(),c("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:C,onKeydown:Xe(C,["enter"]),tabindex:"0"},er,32)):f("",!0)],16,Xa)):f("",!0),S.item.items&&S.item.items.length?(a(),c("div",tr,[S.depth<5?(a(!0),c(M,{key:0},E(S.item.items,K=>(a(),$(G,{key:K.text,item:K,depth:S.depth+1},null,8,["item","depth"]))),128)):f("",!0)])):f("",!0)]),_:1},8,["class"])}}}),sr=b(or,[["__scopeId","data-v-b8d55f3b"]]),Ue=o=>(B("data-v-575e6a36"),o=o(),H(),o),nr=Ue(()=>v("div",{class:"curtain"},null,-1)),ar={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},rr=Ue(()=>v("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),ir=_({__name:"VPSidebar",props:{open:{type:Boolean}},setup(o){const{sidebarGroups:e,hasSidebar:t}=O(),n=o,s=w(null),i=Ie(oe?document.body:null);return j([n,s],()=>{var u;n.open?(i.value=!0,(u=s.value)==null||u.focus()):i.value=!1},{immediate:!0,flush:"post"}),(u,h)=>r(t)?(a(),c("aside",{key:0,class:N(["VPSidebar",{open:u.open}]),ref_key:"navEl",ref:s,onClick:h[0]||(h[0]=xe(()=>{},["stop"]))},[nr,v("nav",ar,[rr,l(u.$slots,"sidebar-nav-before",{},void 0,!0),(a(!0),c(M,null,E(r(e),p=>(a(),c("div",{key:p.text,class:"group"},[m(sr,{item:p,depth:0},null,8,["item"])]))),128)),l(u.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):f("",!0)}}),lr=b(ir,[["__scopeId","data-v-575e6a36"]]),cr=_({__name:"VPSkipLink",setup(o){const e=ee(),t=w();j(()=>e.path,()=>t.value.focus());function n({target:s}){const i=document.getElementById(decodeURIComponent(s.hash).slice(1));if(i){const u=()=>{i.removeAttribute("tabindex"),i.removeEventListener("blur",u)};i.setAttribute("tabindex","-1"),i.addEventListener("blur",u),i.focus(),window.scrollTo(0,0)}}return(s,i)=>(a(),c(M,null,[v("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),v("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:n}," Skip to content ")],64))}}),ur=b(cr,[["__scopeId","data-v-0f60ec36"]]),dr=_({__name:"Layout",setup(o){const{isOpen:e,open:t,close:n}=O(),s=ee();j(()=>s.path,n),$t(e,n);const{frontmatter:i}=P(),u=et(),h=y(()=>!!u["home-hero-image"]);return we("hero-image-slot-exists",h),(p,g)=>{const L=q("Content");return r(i).layout!==!1?(a(),c("div",{key:0,class:N(["Layout",r(i).pageClass])},[l(p.$slots,"layout-top",{},void 0,!0),m(ur),m(at,{class:"backdrop",show:r(e),onClick:r(n)},null,8,["show","onClick"]),m(Qa,null,{"nav-bar-title-before":d(()=>[l(p.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":d(()=>[l(p.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":d(()=>[l(p.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":d(()=>[l(p.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":d(()=>[l(p.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":d(()=>[l(p.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),m(Ns,{open:r(e),onOpenMenu:r(t)},null,8,["open","onOpenMenu"]),m(lr,{open:r(e)},{"sidebar-nav-before":d(()=>[l(p.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":d(()=>[l(p.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),m(us,null,{"page-top":d(()=>[l(p.$slots,"page-top",{},void 0,!0)]),"page-bottom":d(()=>[l(p.$slots,"page-bottom",{},void 0,!0)]),"not-found":d(()=>[l(p.$slots,"not-found",{},void 0,!0)]),"home-hero-before":d(()=>[l(p.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":d(()=>[l(p.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":d(()=>[l(p.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":d(()=>[l(p.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":d(()=>[l(p.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":d(()=>[l(p.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":d(()=>[l(p.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":d(()=>[l(p.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":d(()=>[l(p.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":d(()=>[l(p.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":d(()=>[l(p.$slots,"doc-before",{},void 0,!0)]),"doc-after":d(()=>[l(p.$slots,"doc-after",{},void 0,!0)]),"doc-top":d(()=>[l(p.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":d(()=>[l(p.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":d(()=>[l(p.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":d(()=>[l(p.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":d(()=>[l(p.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":d(()=>[l(p.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":d(()=>[l(p.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":d(()=>[l(p.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),m(fs),l(p.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),$(L,{key:1}))}}}),vr=b(dr,[["__scopeId","data-v-5d98c3a5"]]),ye={Layout:vr,enhanceApp:({app:o})=>{o.component("Badge",ot)}},pr="2.15.0-preview5",fr={extends:ye,Layout:()=>tt(ye.Layout,null,{}),enhanceApp({app:o,router:e,siteData:t}){o.config.globalProperties.$version=pr}};export{fr as R,jn as c,P as u}; diff --git a/assets/contribution_index.md.yWaijWDG.js b/assets/contribution_index.md.yWaijWDG.js new file mode 100644 index 00000000..d56b1b07 --- /dev/null +++ b/assets/contribution_index.md.yWaijWDG.js @@ -0,0 +1,3 @@ +import{_ as t,c as e,o as i,a4 as a}from"./chunks/framework.Cmp6zcjC.js";const k=JSON.parse('{"title":"Contribute to the project","description":"","frontmatter":{"search":false},"headers":[],"relativePath":"contribution/index.md","filePath":"contribution/index.md"}'),o={name:"contribution/index.md"},s=a(`

Contribute to the project

Any kind of contribution is welcome.

start contributing to the project by submitting pull requests

Todos

  • ⚡ Add more Examples/use-case to the documentation
  • ⚡ Resolve open issues
  • ⚡ Improve the documentation site
  • ⚡ Improve code documentation (summary)
  • ⚡ Add project Security Policy

Documentation

Gridify documentation is powered by vuePress, All the markdown source files are placed in docs directory.

by running the following commands, you can check the documentation site locally:

shell
yarn install
+yarn dev
shell
npm install
+npm run dev

How to contribute

check out the github contributing guide

Contributors

Thank you to everyone who has contributed to the Gridify codebase. We appreciate you!

`,14),n=[s];function r(l,c,h,d,p,u){return i(),e("div",null,n)}const m=t(o,[["render",r]]);export{k as __pageData,m as default}; diff --git a/assets/contribution_index.md.yWaijWDG.lean.js b/assets/contribution_index.md.yWaijWDG.lean.js new file mode 100644 index 00000000..fc154fa8 --- /dev/null +++ b/assets/contribution_index.md.yWaijWDG.lean.js @@ -0,0 +1 @@ +import{_ as t,c as e,o as i,a4 as a}from"./chunks/framework.Cmp6zcjC.js";const k=JSON.parse('{"title":"Contribute to the project","description":"","frontmatter":{"search":false},"headers":[],"relativePath":"contribution/index.md","filePath":"contribution/index.md"}'),o={name:"contribution/index.md"},s=a("",14),n=[s];function r(l,c,h,d,p,u){return i(),e("div",null,n)}const m=t(o,[["render",r]]);export{k as __pageData,m as default}; diff --git a/assets/example_api-controller.md.CJs-tB52.js b/assets/example_api-controller.md.CJs-tB52.js new file mode 100644 index 00000000..a477d50b --- /dev/null +++ b/assets/example_api-controller.md.CJs-tB52.js @@ -0,0 +1,15 @@ +import{_ as i,c as s,o as e,a4 as a}from"./chunks/framework.Cmp6zcjC.js";const u=JSON.parse('{"title":"Using Gridify in API Controllers","description":"","frontmatter":{},"headers":[],"relativePath":"example/api-controller.md","filePath":"example/api-controller.md"}'),t={name:"example/api-controller.md"},n=a(`

Using Gridify in API Controllers

When working with ASP.NET APIs, especially when you need to apply string-based filtering conditions, sorting based on field names, or implementing pagination functionality, the Gridify library is a valuable tool. It can be used in any .NET project and with any type of collection, not just limited to ASP.NET projects.

To demonstrate the core concepts of Gridify, let's look at a simple implementation in the following example.

Describing the Scenario

Imagine you have an API that returns a list of users. You want to use this API in your client-side application to display a list of users.

csharp
// UserController
+// ...
+public IEnumerable<User> GetUsers()
+{
+    // context can be Entity Framework, a repository, or whatever.
+    return context.Users.ToList();
+}

However, there are a few challenges:

  • The end-user may want to sort the list by name, age, or any other property.
  • The end-user may want to filter the list by name, age, or any other property.
  • Fetching the entire list of users is not efficient, so you need to add pagination.
  • Returning a list of page size N is not enough. You also need to know the total number of users.

Implementing these features can be complex and messy. If you want to support multiple properties, you would need to write a lot of code with if-else statements. This is where Gridify comes in.

Solving Problems Using Gridify

With Gridify, you can simplify your code and implement the required features in just a few lines:

csharp
public Paging<User> GetUsers([FromQuery] GridifyQuery query)
+{
+    return context.Users.Gridify(query);
+}

Gridify handles all the complexity behind the scenes.

What is the Paging Return Value?

The Paging class is a generic Data Transfer Object (DTO) that has two properties:

csharp
public int Count { get; set; }
+public IEnumerable<T> Data { get; set; }

The Count property indicates the total number of records, while the Data property contains the records on the current page.

What is GridifyQuery?

GridifyQuery is a class that represents the query parameters passed to the Gridify method.

Learn more about GridifyQuery.

Sample Request Query String

Please note that this URL is not encoded. Always remember to encode query strings before passing them to your APIs.

http://exampleDomain.com/api/GetUsers?
+          pageSize=100&
+          page=1&
+          orderBy=FirstName&
+          filter=Age>10

Alternatively, you can ignore the GridifyQuery and use the default pagination values, which are pageSize=20 and page=1.

http://exampleDomain.com/api/GetUsers

More Information

TIP

  • If you want to control which fields are supported for filtering or ordering, you can use the GridifyMapper class.
  • All Gridify extension methods accept a GridifyMapper instance as a parameter.
  • If you want to learn more about the filtering and ordering syntax, be sure to read the related documentation.
`,27),r=[n];function l(p,o,h,d,c,g){return e(),s("div",null,r)}const y=i(t,[["render",l]]);export{u as __pageData,y as default}; diff --git a/assets/example_api-controller.md.CJs-tB52.lean.js b/assets/example_api-controller.md.CJs-tB52.lean.js new file mode 100644 index 00000000..3c16a53c --- /dev/null +++ b/assets/example_api-controller.md.CJs-tB52.lean.js @@ -0,0 +1 @@ +import{_ as i,c as s,o as e,a4 as a}from"./chunks/framework.Cmp6zcjC.js";const u=JSON.parse('{"title":"Using Gridify in API Controllers","description":"","frontmatter":{},"headers":[],"relativePath":"example/api-controller.md","filePath":"example/api-controller.md"}'),t={name:"example/api-controller.md"},n=a("",27),r=[n];function l(p,o,h,d,c,g){return e(),s("div",null,r)}const y=i(t,[["render",l]]);export{u as __pageData,y as default}; diff --git a/assets/guide_autoMapper.md.C64WRQ-o.js b/assets/guide_autoMapper.md.C64WRQ-o.js new file mode 100644 index 00000000..af967779 --- /dev/null +++ b/assets/guide_autoMapper.md.C64WRQ-o.js @@ -0,0 +1,16 @@ +import{_ as i,c as s,o as a,a4 as t}from"./chunks/framework.Cmp6zcjC.js";const o=JSON.parse('{"title":"AutoMapper","description":"","frontmatter":{},"headers":[],"relativePath":"guide/autoMapper.md","filePath":"guide/autoMapper.md"}'),h={name:"guide/autoMapper.md"},n=t(`

AutoMapper

Gridify is completely compatible with AutoMapper. Also, these two packages can help each other nicely. We can use Gridify for filtering, sorting, and paging and AutoMapper for the projection.

csharp
// AutoMapper ProjectTo + Filtering Only, example
+var query = personRepo.ApplyFiltering(gridifyQuery);
+var result = query.ProjectTo<PersonDTO>().ToList();
csharp
// AutoMapper ProjectTo + Filtering + Ordering + Paging, example
+QueryablePaging<Person> qp = personRepo.GridifyQueryable(gridifyQuery);
+var result = new Paging<Person>(qp.Count, qp.Query.ProjectTo<PersonDTO>().ToList());

GridifyTo!

Filtering, Ordering, Paging, and Projection are all done with GridifyTo.

Gridify library does not have a built-in GridifyTo extension method because we don't want to have AutoMapper dependency. but if you are using AutoMapper in your project, I recommend you to add the bellow extension method to your project.

csharp
public static Paging<TDestination> GridifyTo<TSource, TDestination>(
+   this IQueryable<TSource> query, IMapper autoMapper, IGridifyQuery gridifyQuery, IGridifyMapper<TSource> mapper = null)
+{
+   var res = query.GridifyQueryable(gridifyQuery, mapper);
+   return new Paging<TDestination>(res.Count, res.Query.ProjectTo<TDestination>(autoMapper.ConfigurationProvider).ToList());
+}
csharp
// only if you have Gridify.EntityFramework package installed.
+public static async Task<Paging<TDestination>> GridifyToAsync<TSource, TDestination>(
+   this IQueryable<TSource> query, IMapper autoMapper, IGridifyQuery gridifyQuery, IGridifyMapper<TSource> mapper = null)
+{
+   var res = await query.GridifyQueryableAsync(gridifyQuery, mapper);
+   return new Paging<TDestination>(res.Count, await res.Query.ProjectTo<TDestination>(autoMapper.ConfigurationProvider).ToListAsync());
+}
`,9),p=[n];function k(l,e,r,d,E,g){return a(),s("div",null,p)}const F=i(h,[["render",k]]);export{o as __pageData,F as default}; diff --git a/assets/guide_autoMapper.md.C64WRQ-o.lean.js b/assets/guide_autoMapper.md.C64WRQ-o.lean.js new file mode 100644 index 00000000..36d96807 --- /dev/null +++ b/assets/guide_autoMapper.md.C64WRQ-o.lean.js @@ -0,0 +1 @@ +import{_ as i,c as s,o as a,a4 as t}from"./chunks/framework.Cmp6zcjC.js";const o=JSON.parse('{"title":"AutoMapper","description":"","frontmatter":{},"headers":[],"relativePath":"guide/autoMapper.md","filePath":"guide/autoMapper.md"}'),h={name:"guide/autoMapper.md"},n=t("",9),p=[n];function k(l,e,r,d,E,g){return a(),s("div",null,p)}const F=i(h,[["render",k]]);export{o as __pageData,F as default}; diff --git a/assets/guide_compile.md.oQKQvwx7.js b/assets/guide_compile.md.oQKQvwx7.js new file mode 100644 index 00000000..8cab1c07 --- /dev/null +++ b/assets/guide_compile.md.oQKQvwx7.js @@ -0,0 +1,14 @@ +import{_ as s,c as i,o as t,a4 as a}from"./chunks/framework.Cmp6zcjC.js";const E=JSON.parse('{"title":"Compile and Reuse","description":"","frontmatter":{},"headers":[],"relativePath":"guide/compile.md","filePath":"guide/compile.md"}'),e={name:"guide/compile.md"},n=a(`

Compile and Reuse

You can access Gridify generated expressions using the GetFilteringExpression of GridifyQuery or BuildCompiled methods of QueryBuilder class, by storing an expression you can use it multiple times without having any overheads, also if you store a compiled expression you get a massive performance boost.

WARNING

You should only use a compiled expression (delegate) if you are not using Gridify alongside an ORM like Entity-Framework.

csharp
// eg.1 - using GridifyQuery - Compiled - where only
+var gq = new GridifyQuery() { Filter = "name=John" };
+var expression = gq.GetFilteringExpression<Person>();
+var compiledExpression = expression.Compile();
+var result = persons.Where(compiledExpression);
csharp
// eg.2 - using QueryBuilder - Compiled - where only
+var compiledExpression = new QueryBuilder<Person>()
+                         .AddCondition("name=John")
+                         .BuildFilteringExpression()
+                         .Compile();
+var result = persons.Where(compiledExpression);
csharp
// eg.3 - using QueryBuilder - BuildCompiled
+var func = new QueryBuilder<Person>()
+          .AddCondition("name=John")
+          .BuildCompiled();
+var result = func(persons);

Performance

This is the performance improvement example when you use a compiled expression.

MethodMeanRatioRatioSDGen 0Gen 1Allocated
GridifyCompiled1.008 us0.0010.000.1564-984 B
Gridify689.329 us1.0000.005.85942.929739,924 B
NativeLINQ736.854 us1.0190.015.85942.929737,392 B
`,9),l=[n];function h(p,k,r,d,g,o){return t(),i("div",null,l)}const c=s(e,[["render",h]]);export{E as __pageData,c as default}; diff --git a/assets/guide_compile.md.oQKQvwx7.lean.js b/assets/guide_compile.md.oQKQvwx7.lean.js new file mode 100644 index 00000000..40a11497 --- /dev/null +++ b/assets/guide_compile.md.oQKQvwx7.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as t,a4 as a}from"./chunks/framework.Cmp6zcjC.js";const E=JSON.parse('{"title":"Compile and Reuse","description":"","frontmatter":{},"headers":[],"relativePath":"guide/compile.md","filePath":"guide/compile.md"}'),e={name:"guide/compile.md"},n=a("",9),l=[n];function h(p,k,r,d,g,o){return t(),i("div",null,l)}const c=s(e,[["render",h]]);export{E as __pageData,c as default}; diff --git a/assets/guide_dependency-injection.md.D-nStdXD.js b/assets/guide_dependency-injection.md.D-nStdXD.js new file mode 100644 index 00000000..765e8378 --- /dev/null +++ b/assets/guide_dependency-injection.md.D-nStdXD.js @@ -0,0 +1,60 @@ +import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework.Cmp6zcjC.js";const y=JSON.parse('{"title":"Dependency Injection","description":"","frontmatter":{},"headers":[],"relativePath":"guide/dependency-injection.md","filePath":"guide/dependency-injection.md"}'),e={name:"guide/dependency-injection.md"},p=n(`

Dependency Injection

Gridify offers a powerful feature that enables you to streamline data mapping and configurations in your application by integrating with the Dependency Injection (DI) container. By registering your mapping profiles with DI, you can achieve cleaner, more maintainable code and improved separation of concerns. This section provides an overview of how to register your GridifyMapper configurations with DI.

Register GridifyMapper with DI

Registering Gridify mapping with DI is a straightforward process. You'll define mapping profiles for your models and then register them in the DI container. Follow these steps to get started:

1. Define Mapping Profiles

Create mapping profiles by inheriting from GridifyMapper<T>, where T represents the type you want to map. Configure your mappings within these profile classes.

Example:

csharp
public class WeatherForecastGridifyMapper : GridifyMapper<WeatherForecast>
+{
+    public WeatherForecastGridifyMapper()
+    {
+        // Define your mappings here
+        AddMap("summary", q => q.Summary);
+        AddMap("temp", q => q.TemperatureC);
+
+        // optionally you can customize the configuration for each mapper
+        Configuration.CaseSensitive = false;
+        Configuration.AllowNullSearch = true;
+        Configuration.IgnoreNotMappedFields = true;
+
+    }
+}

2. Register Mapping Profiles

Utilize the AddGridifyMappers extension method available on the IServiceCollection to scan your assembly and register all mapping profiles.

Example:

csharp
using Gridify; // Make sure to include the necessary namespace
+// ...
+
+public void ConfigureServices(IServiceCollection services)
+{
+    // Other service registrations
+
+    services.AddGridifyMappers(typeof(Program).Assembly);
+}

3. Inject and Use Mappers

Once you've registered the mapping profiles, you can inject the corresponding IGridifyMapper<T> interfaces into your services or controllers.

Example:

csharp
public class WeatherForecastController : ControllerBase
+{
+    private readonly IGridifyMapper<WeatherForecast> _mapper;
+
+    public WeatherForecastController(IGridifyMapper<WeatherForecast> mapper)
+    {
+        _mapper = mapper;
+    }
+
+   [HttpGet(Name = "GetWeatherForecast")]
+    public Paging<WeatherForecast> Get([FromQuery] GridifyQuery query)
+    {
+        IQueryable<WeatherForecast> result = GetWeatherForecasts();
+
+        // You can pass the mapper to the GridifyExtension
+        return result.Gridify(query, _mapper);
+    }
+}
csharp
public class WeatherForecastController : ControllerBase
+{
+    private readonly IGridifyMapper<WeatherForecast> _mapper;
+
+    public WeatherForecastController(IGridifyMapper<WeatherForecast> mapper)
+    {
+        _mapper = mapper;
+    }
+
+  [HttpGet(Name = "GetWeatherForecast")]
+    public IEnumerable<WeatherForecast> Get([FromQuery] GridifyQuery query)
+    {
+        var result = GetWeatherForecasts();
+
+        var queryBuilder = new QueryBuilder<WeatherForecast>()
+            .UseCustomMapper(_mapper)
+            .AddQuery(query);
+
+        return queryBuilder.Build(result);
+    }
+}
`,16),l=[p];function h(t,k,r,d,E,g){return a(),i("div",null,l)}const o=s(e,[["render",h]]);export{y as __pageData,o as default}; diff --git a/assets/guide_dependency-injection.md.D-nStdXD.lean.js b/assets/guide_dependency-injection.md.D-nStdXD.lean.js new file mode 100644 index 00000000..a8486b2c --- /dev/null +++ b/assets/guide_dependency-injection.md.D-nStdXD.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework.Cmp6zcjC.js";const y=JSON.parse('{"title":"Dependency Injection","description":"","frontmatter":{},"headers":[],"relativePath":"guide/dependency-injection.md","filePath":"guide/dependency-injection.md"}'),e={name:"guide/dependency-injection.md"},p=n("",16),l=[p];function h(t,k,r,d,E,g){return a(),i("div",null,l)}const o=s(e,[["render",h]]);export{y as __pageData,o as default}; diff --git a/assets/guide_extensions.md.RIxOIFfu.js b/assets/guide_extensions.md.RIxOIFfu.js new file mode 100644 index 00000000..d4791c9b --- /dev/null +++ b/assets/guide_extensions.md.RIxOIFfu.js @@ -0,0 +1 @@ +import{_ as i,c as s,o as a,a4 as e}from"./chunks/framework.Cmp6zcjC.js";const y=JSON.parse('{"title":"Extensions","description":"","frontmatter":{},"headers":[],"relativePath":"guide/extensions.md","filePath":"guide/extensions.md"}'),t={name:"guide/extensions.md"},n=e('

Extensions

The Gridify library adds the below extension methods to IQueryable objects.

All Gridify extension methods can accept GridifyQuery and GridifyMapper as a parameter. Make sure to check out the documentation of these classes for more information.

TIP

If you want to use Gridify extension methods on an IEnumerable object, use .AsQueryable() first.

ApplyFiltering

You can use this method if you want to only apply filtering on an IQueriable or DbSet.

csharp
var query = personsRepo.ApplyFiltering("name = John");

this is completely equivalent to the below LINQ query:

csharp
var query = personsRepo.Where(p => p.Name == "John");

In the ApplyFiltering method, we can use a raw string to filter the data, which can be generated dynamically or passed by the end-user for example through an API client or console input, but using the Linq Where method, we always have to hard code the query for the supported fields.

Check out the Filtering Operators section for more information.

ApplyOrdering

You can use this method if you want to only apply ordering on an IQueriable collection or DbSet.

csharp
var query = personsRepo.ApplyOrdering("name, age desc");

this is completely equivalent to the below LINQ query:

csharp
var query = personsRepo.OrderBy(x => x.Name).ThenByDescending(x => x.Age);

Check out the Ordering section for more information.

ApplyPaging

You can use this method if you want to only apply paging on an IQueryable collection or DbSet.

csharp
var query = personsRepo.ApplyPaging(3, 20);

this is completely equivalent to the below LINQ query:

csharp
var query = personsRepo.Skip((3-1) * 20).Take(20);

ApplyFilteringAndOrdering

You can use this method if you want to apply filtering and ordering on an IQueryable collection or DbSet. This method accepts IGridifyQuery.

ApplyOrderingAndPaging

You can use this method if you want to apply ordering and paging on an IQueryable collection or DbSet. This method accepts IGridifyQuery.

ApplyFilteringOrderingPaging

You can use this method if you want to apply filtering and ordering and paging on an IQueryable collection or DbSet. This method accepts IGridifyQuery.

GridifyQueryable

Like ApplyFilteringOrderingPaging but it returns a QueryablePaging<T> that has an extra int Count value that can be used for pagination.

Gridify

This is an ALL-IN-ONE package, it accepts IGridifyQuery, applies filtering, ordering, and paging, and returns a Paging<T> object. This method is completely optimized to be used with any Grid component.

',32),p=[n];function h(r,l,o,d,k,g){return a(),s("div",null,p)}const u=i(t,[["render",h]]);export{y as __pageData,u as default}; diff --git a/assets/guide_extensions.md.RIxOIFfu.lean.js b/assets/guide_extensions.md.RIxOIFfu.lean.js new file mode 100644 index 00000000..004e9e81 --- /dev/null +++ b/assets/guide_extensions.md.RIxOIFfu.lean.js @@ -0,0 +1 @@ +import{_ as i,c as s,o as a,a4 as e}from"./chunks/framework.Cmp6zcjC.js";const y=JSON.parse('{"title":"Extensions","description":"","frontmatter":{},"headers":[],"relativePath":"guide/extensions.md","filePath":"guide/extensions.md"}'),t={name:"guide/extensions.md"},n=e("",32),p=[n];function h(r,l,o,d,k,g){return a(),s("div",null,p)}const u=i(t,[["render",h]]);export{y as __pageData,u as default}; diff --git a/assets/guide_extensions_elasticsearch.md.DYDH-DNo.js b/assets/guide_extensions_elasticsearch.md.DYDH-DNo.js new file mode 100644 index 00000000..5903ff72 --- /dev/null +++ b/assets/guide_extensions_elasticsearch.md.DYDH-DNo.js @@ -0,0 +1,148 @@ +import{_ as l,c as p,j as s,t as n,a4 as i,a as e,o as t}from"./chunks/framework.Cmp6zcjC.js";const N=JSON.parse('{"title":"Elasticsearch","description":"","frontmatter":{},"headers":[],"relativePath":"guide/extensions/elasticsearch.md","filePath":"guide/extensions/elasticsearch.md"}'),h={name:"guide/extensions/elasticsearch.md"},k=i('

Elasticsearch

Gridify.Elasticsearch is an extension of Gridify, that provides an ability to generate Elasticsearch DSL queries.

Gridify.Elasticsearch Package

The Gridify.Elasticsearch package has a bunch of extension methods that allow to convert Gridify filters and sortings to Elasticsearch DSL queries using Elastic.Clients.Elasticsearch .NET client.

Installation

Package Manager

',6),r={class:"language-shell vp-adaptive-theme"},E=s("button",{title:"Copy Code",class:"copy"},null,-1),d=s("span",{class:"lang"},"shell",-1),c={class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},g={class:"line"},o=s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"Install-Package",-1),u=s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," Gridify.Elasticsearch",-1),y=s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," -Version",-1),b={style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},F=s("h3",{id:"net-cli",tabindex:"-1"},[e(".NET CLI "),s("a",{class:"header-anchor",href:"#net-cli","aria-label":'Permalink to ".NET CLI"'},"​")],-1),m={class:"language-shell vp-adaptive-theme"},C=s("button",{title:"Copy Code",class:"copy"},null,-1),q=s("span",{class:"lang"},"shell",-1),B={class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},v={class:"line"},A=i('dotnet add package Gridify.Elasticsearch --version',5),_={style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},f=i(`

Configurations

CustomElasticsearchNamingAction

Specifies how field names are inferred from CLR property names. By default, Elastic.Clients.Elasticsearch uses camel-case property names.

  • If null (default behavior) CLR property EmailAddress will be inferred as emailAddress Elasticsearch document field name.
  • If, e.g., p => p, the CLR property EmailAddress will be inferred as EmailAddress Elasticsearch document field name.

Default

csharp
await client.SearchAsync<User>(s => s
+    .Index("users")
+    .ApplyFiltering("emailAddress = test@test.com"));

this will make the next Elasticsearch query:

json
GET users/_search
+{
+  "query": {
+    "term": {
+      "emailAddress.keyword": {
+        "value": "test@test.com"
+      }
+    }
+  }
+}

Customized:

csharp
GridifyGlobalConfiguration.CustomElasticsearchNamingAction = p => $"_{p}_";
+
+await client.SearchAsync<User>(s => s
+    .Index("users")
+    .ApplyFiltering("emailAddress = test@test.com"));

this will make the next Elasticsearch query:

json
GET users/_search
+{
+  "query": {
+    "term": {
+      "_EmailAddress_.keyword": {
+        "value": "test@test.com"
+      }
+    }
+  }
+}

Examples of usage

Without pre-initialized mapper

csharp
var gq = new GridifyQuery()
+{
+    Filter = "FirstName=John",
+    Page = 1,
+    PageSize = 20,
+    OrderBy = "Age"
+};
+
+var response = await client.SearchAsync<User>(s => s
+    .Index("users")
+    .ApplyPaging(gq)
+    .ApplyFiltering(gp)
+    .ApplyOrdering(gp));
+
+return response.Documents;
json
GET users/_search
+{
+  "query": {
+    "term": {
+      "firstName.keyword": {
+        "value": "John"
+      }
+    }
+  },
+  "from": 0,
+  "size": 20,
+  "sort": [{
+    "age": {
+      "order": "asc"
+    }
+  }]
+}

With custom mapping

csharp
var gq = new GridifyQuery()
+{
+    Filter = "name=John, surname=Smith, age=30, totalOrderPrice=45",
+    Page = 1,
+    PageSize = 20,
+    OrderBy = "Age"
+};
+
+var mapper = new GridifyMapper<User>()
+     .AddMap("name", x => x.FirstName)
+     .AddMap("surname", x => x.LastName)
+     .AddMap("age", x => x.Age)
+     .AddMap("totalOrderPrice", x => x.Order.TotalSum);
+
+var response = await client.SearchAsync<User>(s => s
+    .Index("users")
+    .ApplyFilteringOrderingPaging(gq));
+
+return response.Documents;
json
GET users/_search
+{
+  "query": {
+    "bool": {
+      "must": [
+        {
+          "term": {
+            "firstName.keyword": {
+              "value": "John"
+            }
+          }
+        },
+        {
+          "term": {
+            "lastName.keyword": {
+              "value": "Smith"
+            }
+          }
+        },
+        {
+          "term": {
+            "age": {
+              "value": 30
+            }
+          }
+        },
+        {
+          "term": {
+            "order.totalSum": {
+              "value": 45
+            }
+          }
+        }
+      ]
+    }
+  },
+  "from": 0,
+  "size": 20,
+  "sort": [{
+    "age": {
+      "order": "asc"
+    }
+  }]
+}

With CustomElasticsearchNamingAction initialized

By default, Elasticsearch converts property names to camel-case for document fields. That's Gridify.Elasticsearch extensions work by default. But if it's necessary to apply a custom naming policy, it can also be customized.

csharp
Func<string, string>? namingAction = p => $"_{p}_";
+var mapper = new GridifyMapper<TestClass>(autoGenerateMappings: true)
+{
+   Configuration = { CustomElasticsearchNamingAction = namingAction }
+};
+
+var gq = new GridifyQuery()
+{
+    Filter = "FirstName=John",
+    Page = 1,
+    PageSize = 20,
+    OrderBy = "Age"
+};
+
+var response = await client.SearchAsync<User>(s => s
+    .Index("users")
+    .ApplyFilteringOrderingPaging(gq));
json
GET users/_search
+{
+  "query": {
+    "term": {
+      "_FirstName_.keyword": {
+        "value": "John"
+      }
+    }
+  },
+  "from": 0,
+  "size": 20,
+  "sort": [{
+    "_Age_": {
+      "order": "asc"
+    }
+  }]
+}

WARNING

Gridify.Elasticsearch package does not support all of the advanced Gridify features like NestedFiltering

`,21);function D(a,x,w,P,S,T){return t(),p("div",null,[k,s("div",r,[E,d,s("pre",c,[s("code",null,[s("span",g,[o,u,y,s("span",b," "+n(a.$version),1)])])])]),F,s("div",m,[C,q,s("pre",B,[s("code",null,[s("span",v,[A,s("span",_," "+n(a.$version),1)])])])]),f])}const I=l(h,[["render",D]]);export{N as __pageData,I as default}; diff --git a/assets/guide_extensions_elasticsearch.md.DYDH-DNo.lean.js b/assets/guide_extensions_elasticsearch.md.DYDH-DNo.lean.js new file mode 100644 index 00000000..286aa216 --- /dev/null +++ b/assets/guide_extensions_elasticsearch.md.DYDH-DNo.lean.js @@ -0,0 +1 @@ +import{_ as l,c as p,j as s,t as n,a4 as i,a as e,o as t}from"./chunks/framework.Cmp6zcjC.js";const N=JSON.parse('{"title":"Elasticsearch","description":"","frontmatter":{},"headers":[],"relativePath":"guide/extensions/elasticsearch.md","filePath":"guide/extensions/elasticsearch.md"}'),h={name:"guide/extensions/elasticsearch.md"},k=i("",6),r={class:"language-shell vp-adaptive-theme"},E=s("button",{title:"Copy Code",class:"copy"},null,-1),d=s("span",{class:"lang"},"shell",-1),c={class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},g={class:"line"},o=s("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"Install-Package",-1),u=s("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," Gridify.Elasticsearch",-1),y=s("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," -Version",-1),b={style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},F=s("h3",{id:"net-cli",tabindex:"-1"},[e(".NET CLI "),s("a",{class:"header-anchor",href:"#net-cli","aria-label":'Permalink to ".NET CLI"'},"​")],-1),m={class:"language-shell vp-adaptive-theme"},C=s("button",{title:"Copy Code",class:"copy"},null,-1),q=s("span",{class:"lang"},"shell",-1),B={class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},v={class:"line"},A=i("",5),_={style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},f=i("",21);function D(a,x,w,P,S,T){return t(),p("div",null,[k,s("div",r,[E,d,s("pre",c,[s("code",null,[s("span",g,[o,u,y,s("span",b," "+n(a.$version),1)])])])]),F,s("div",m,[C,q,s("pre",B,[s("code",null,[s("span",v,[A,s("span",_," "+n(a.$version),1)])])])]),f])}const I=l(h,[["render",D]]);export{N as __pageData,I as default}; diff --git a/assets/guide_extensions_entityframework.md.DHbNMf7z.js b/assets/guide_extensions_entityframework.md.DHbNMf7z.js new file mode 100644 index 00000000..5353633a --- /dev/null +++ b/assets/guide_extensions_entityframework.md.DHbNMf7z.js @@ -0,0 +1,5 @@ +import{_ as s,c as l,j as i,t,a4 as a,a as n,o as r}from"./chunks/framework.Cmp6zcjC.js";const L=JSON.parse('{"title":"Entity Framework","description":"","frontmatter":{},"headers":[],"relativePath":"guide/extensions/entityframework.md","filePath":"guide/extensions/entityframework.md"}'),o={name:"guide/extensions/entityframework.md"},h=a('

Entity Framework

Gridify.EntityFramework Package

The Gridify.EntityFramework package has two additional GridifyAsync() and GridifyQueryableAsync() methods.

Installation

Package Manager

',5),p={class:"language-shell vp-adaptive-theme"},d=i("button",{title:"Copy Code",class:"copy"},null,-1),k=i("span",{class:"lang"},"shell",-1),y={class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},c={class:"line"},m=i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"Install-Package",-1),E=i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," Gridify.EntityFramework",-1),g=i("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," -Version",-1),_={style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},b=i("h3",{id:"net-cli",tabindex:"-1"},[n(".NET CLI "),i("a",{class:"header-anchor",href:"#net-cli","aria-label":'Permalink to ".NET CLI"'},"​")],-1),u={class:"language-shell vp-adaptive-theme"},F=i("button",{title:"Copy Code",class:"copy"},null,-1),f=i("span",{class:"lang"},"shell",-1),C={class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},w={class:"line"},v=a('dotnet add package Gridify.EntityFramework --version',5),P={style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},T=a(`

Compatibility layer

If you want to use gridify with Entity Framework, you should enable the compatibility layer:

csharp
GridifyGlobalConfiguration.EnableEntityFrameworkCompatibilityLayer();

Enabling the compatibility layer provides the following features:

  • It tweaks the internal expression builder to make it compatible with Entity Framework.
  • EF query optimization
  • EF ServiceProviderCaching support
  • Creates parameterized queries
sql
DECLARE @__Value_0 nvarchar(4000) = N'vahid';
+
+SELECT [u].[Id], [u].[CreateDate], [u].[FkGuid], [u].[Name]
+FROM [Users] AS [u]
+WHERE [u].[Name] = @__Value_0

Configuration

EntityFrameworkCompatibilityLayer

Setting this property to true Enables the EntityFramework Compatibility layer to make the generated expressions compatible with entity framework.

  • type: bool
  • default: false

EnableEntityFrameworkCompatibilityLayer()

Simply sets the EntityFrameworkCompatibilityLayer property to true.

DisableEntityFrameworkCompatibilityLayer()

Simply sets the EntityFrameworkCompatibilityLayer property to false.

`,14);function q(e,x,A,S,D,B){return r(),l("div",null,[h,i("div",p,[d,k,i("pre",y,[i("code",null,[i("span",c,[m,E,g,i("span",_," "+t(e.$version),1)])])])]),b,i("div",u,[F,f,i("pre",C,[i("code",null,[i("span",w,[v,i("span",P," "+t(e.$version),1)])])])]),T])}const N=s(o,[["render",q]]);export{L as __pageData,N as default}; diff --git a/assets/guide_extensions_entityframework.md.DHbNMf7z.lean.js b/assets/guide_extensions_entityframework.md.DHbNMf7z.lean.js new file mode 100644 index 00000000..20c76b37 --- /dev/null +++ b/assets/guide_extensions_entityframework.md.DHbNMf7z.lean.js @@ -0,0 +1 @@ +import{_ as s,c as l,j as i,t,a4 as a,a as n,o as r}from"./chunks/framework.Cmp6zcjC.js";const L=JSON.parse('{"title":"Entity Framework","description":"","frontmatter":{},"headers":[],"relativePath":"guide/extensions/entityframework.md","filePath":"guide/extensions/entityframework.md"}'),o={name:"guide/extensions/entityframework.md"},h=a("",5),p={class:"language-shell vp-adaptive-theme"},d=i("button",{title:"Copy Code",class:"copy"},null,-1),k=i("span",{class:"lang"},"shell",-1),y={class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},c={class:"line"},m=i("span",{style:{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"}},"Install-Package",-1),E=i("span",{style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}}," Gridify.EntityFramework",-1),g=i("span",{style:{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"}}," -Version",-1),_={style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},b=i("h3",{id:"net-cli",tabindex:"-1"},[n(".NET CLI "),i("a",{class:"header-anchor",href:"#net-cli","aria-label":'Permalink to ".NET CLI"'},"​")],-1),u={class:"language-shell vp-adaptive-theme"},F=i("button",{title:"Copy Code",class:"copy"},null,-1),f=i("span",{class:"lang"},"shell",-1),C={class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},w={class:"line"},v=a("",5),P={style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},T=a("",14);function q(e,x,A,S,D,B){return r(),l("div",null,[h,i("div",p,[d,k,i("pre",y,[i("code",null,[i("span",c,[m,E,g,i("span",_," "+t(e.$version),1)])])])]),b,i("div",u,[F,f,i("pre",C,[i("code",null,[i("span",w,[v,i("span",P," "+t(e.$version),1)])])])]),T])}const N=s(o,[["render",q]]);export{L as __pageData,N as default}; diff --git a/assets/guide_extensions_gridify-client.md.B5eDeC5h.js b/assets/guide_extensions_gridify-client.md.B5eDeC5h.js new file mode 100644 index 00000000..85ad8853 --- /dev/null +++ b/assets/guide_extensions_gridify-client.md.B5eDeC5h.js @@ -0,0 +1,21 @@ +import{_ as i,c as s,o as t,a4 as a}from"./chunks/framework.Cmp6zcjC.js";const c=JSON.parse('{"title":"Gridify Client Library","description":"","frontmatter":{},"headers":[],"relativePath":"guide/extensions/gridify-client.md","filePath":"guide/extensions/gridify-client.md"}'),e={name:"guide/extensions/gridify-client.md"},n=a(`

Gridify Client Library

The Gridify Client library is a lightweight JavaScript and TypeScript library designed to simplify the creation of dynamic queries on the client side. This library facilitates the construction of queries that can be seamlessly integrated with your server-side APIs, leveraging the powerful features of Gridify.

Installation

To integrate the Gridify Client library into your project, install it using npm:

shell
npm i gridify-client

GridifyQueryBuilder

The GridifyQueryBuilder interface represents the methods available for constructing dynamic queries using the Gridify Client library.

The following table describes the methods available in the GridifyQueryBuilder interface for constructing dynamic queries.

MethodParameterDescription
setPagepage: numberSet the page number for pagination.
setPageSizepageSize: numberSet the page size for pagination.
addOrderByfield: string, descending?: booleanAdd ordering based on a field. If descending is true, the ordering is in descending order (default is ascending).
addConditionfield, operator, value, caseSensitive, escapeValueAdd filtering conditions. caseSensitive and escapeValue are optional parameters.
startGroup-Start a logical grouping of conditions.
endGroup-End the current logical group.
and-Add the logical AND operator.
or-Add the logical OR operator.
build-Build and retrieve the constructed query.

Conditional Operators

We can use the ConditionalOperator enum to access supported operators. we can pass these operators to the second parameter of addCondition method

OperatorDescription
EqualEquality
NotEqualInequality
LessThanLess Than
GreaterThanGreater Than
GreaterThanOrEqualGreater Than or Equal
LessThanOrEqualLess Than or Equal
ContainsString Contains (LIKE)
NotContainsString Does Not Contain (NOT LIKE)
StartsWithString Starts With
NotStartsWithString Does Not Start With
EndsWithString Ends With
NotEndsWithString Does Not End With

Usage Example

Below is a basic example demonstrating the usage of the Gridify Client library in TypeScript. This example constructs a dynamic query for pagination, ordering, and filtering:

ts
import { GridifyQueryBuilder, ConditionalOperator as op } from "gridify-client";
+
+const query = new GridifyQueryBuilder()
+  .setPage(2)
+  .setPageSize(10)
+  .addOrderBy("name", true)
+  .startGroup()
+    .addCondition("age", op.LessThan, 50)
+    .or()
+    .addCondition("name", op.StartsWith, "A")
+  .endGroup()
+  .and()
+  .addCondition("isActive", op.Equal, true)
+  .build();
+
+console.log(query);

Output:

json
{
+  "page": 2,
+  "pageSize": 10,
+  "orderBy": "name desc",
+  "filter": "(age<50|name^A),isActive=true"
+}
`,17),d=[n];function l(h,r,p,k,o,E){return t(),s("div",null,d)}const y=i(e,[["render",l]]);export{c as __pageData,y as default}; diff --git a/assets/guide_extensions_gridify-client.md.B5eDeC5h.lean.js b/assets/guide_extensions_gridify-client.md.B5eDeC5h.lean.js new file mode 100644 index 00000000..51901c09 --- /dev/null +++ b/assets/guide_extensions_gridify-client.md.B5eDeC5h.lean.js @@ -0,0 +1 @@ +import{_ as i,c as s,o as t,a4 as a}from"./chunks/framework.Cmp6zcjC.js";const c=JSON.parse('{"title":"Gridify Client Library","description":"","frontmatter":{},"headers":[],"relativePath":"guide/extensions/gridify-client.md","filePath":"guide/extensions/gridify-client.md"}'),e={name:"guide/extensions/gridify-client.md"},n=a("",17),d=[n];function l(h,r,p,k,o,E){return t(),s("div",null,d)}const y=i(e,[["render",l]]);export{c as __pageData,y as default}; diff --git a/assets/guide_filtering.md.DBF6P0Gc.js b/assets/guide_filtering.md.DBF6P0Gc.js new file mode 100644 index 00000000..59fd51a4 --- /dev/null +++ b/assets/guide_filtering.md.DBF6P0Gc.js @@ -0,0 +1,43 @@ +import{_ as s,c as i,o as a,a4 as t}from"./chunks/framework.Cmp6zcjC.js";const c=JSON.parse('{"title":"Filtering","description":"","frontmatter":{},"headers":[],"relativePath":"guide/filtering.md","filePath":"guide/filtering.md"}'),e={name:"guide/filtering.md"},n=t(`

Filtering

Gridify supports the following filtering operators:

Conditional Operators

NameOperatorUsage example
Equal="FieldName = Value"
NotEqual!="FieldName !=Value"
LessThan<"FieldName < Value"
GreaterThan>"FieldName > Value"
GreaterThanOrEqual>="FieldName >=Value"
LessThanOrEqual<="FieldName <=Value"
Contains - Like=*"FieldName =*Value"
NotContains - NotLike!*"FieldName !*Value"
StartsWith^"FieldName ^ Value"
NotStartsWith!^"FieldName !^ Value"
EndsWith$"FieldName $ Value"
NotEndsWith!$"FieldName !$ Value"

TIP

If you don't specify any value after = or != operators, Gridify search for the default and null values.

csharp
var x = personsRepo.ApplyFiltering("name=");

this is equivalent to the bellow LINQ query:

csharp
var x = personsRepo.Where(p =>
+             p.Name is null ||
+             p.Name == string.Empty );

Special Operators

Logical Operators

Using logical operators we easily can create complex queries.

NameOperatorUsage example
AND,"FirstName = Value, LastName = Value2"
OR|"FirstName=Value|LastName=Value2"
Parenthesis()"(FirstName=*Jo,Age<30)|(FirstName!=Hn,Age>30)"

Case Insensitive Operator - /i

The '/i' operator can be use after string values for case insensitive searches. You should only use this operator after the search value.

Example:

csharp
var x = personsRepo.ApplyFiltering("FirstName=John/i");

this query matches with JOHN - john - John - jOHn ...

Escaping

Gridify have five special operators , | ( ) /i to handle complex queries and case-insensitive searches. If you want to use these characters in your query values (after conditional operator), you should add a backslash \\ before them. having this regex could be helpful ([(),|]|\\/i).

JavaScript escape example:

javascript
let esc = (v) => v.replace(/([(),|\\\\]|\\/i)/g, '\\\\$1')

Csharp escape example:

csharp
var value = "(test,test2)";
+var esc = Regex.Replace(value, "([(),|\\\\]|\\/i)", "\\\\$1" );
+// esc = \\(test\\,test2\\)

Using Indexers

Starting from version v2.15.0, Gridify supports filtering on any property that is indexable, including sub-collections, arrays, and dictionaries. This feature allows you to create dynamic and flexible queries for a wide range of data structures.

Passing Index/Key to Sub-Collections, Arrays, and Dictionaries

Gridify enables filtering on elements of sub-collections, arrays, and dictionary properties by specifying the index or key within square brackets [ ].

Here’s an example:

csharp
var gm = new GridifyMapper<TargetType>()
+      .AddMap("arrayProp", (target, index) => target.MyArray[index].Prop)
+      .AddMap("dictProp", (target, key) => target.MyDictionary[key]);
+
+var gq = new GridifyQuery
+{
+    Filter = "arrayProp[8] > 10 AND dictProp[name] = John"
+};

In this example:

arrayProp[8] > 10 filters on the 8th element of an array property. dictProp[name] = John filters on the value associated with the name key in a dictionary property.

This new capability makes Gridify a versatile and robust tool for handling complex data structures in your filtering logic.

Check out Defining Mappings for Indexable Properties for more information.

Custom Operators

Sometimes the default Gridify operators are not enough, For example, if you need an operator for regex matching or when you are using the EntityFramework, you may want to use EF.Functions.FreeText rather than a LIKE with wildcards. In this case, you can define your own operators. (added in v2.6.0)

To define a custom operator, you need to create a class that implements the IGridifyOperator interface. then you need to register it through the global CustomOperators configuration.

TIP

Custom operators must be start with the # character.

  • FreeTextOperator Example:
csharp
class FreeTextOperator : IGridifyOperator
+{
+   public string GetOperator() => "#=";
+   public Expression<OperatorParameter> OperatorHandler()
+   {
+      return (prop, value) => EF.Functions.FreeText(prop, value.ToString());
+   }
+}
  • RegexMatchOperator Example:
csharp
class RegexMatchOperator : IGridifyOperator
+{
+   public string GetOperator() => "#%";
+   public Expression<OperatorParameter> OperatorHandler()
+   {
+      return (prop, value) => Regex.IsMatch(prop.ToString(), value.ToString());
+   }
+}
  • InOperator Example:
csharp
class InOperator: IGridifyOperator
+{
+   public string GetOperator()
+   {
+      return "#In";
+   }
+
+   public Expression<OperatorParameter> OperatorHandler()
+   {
+      return (prop, value) => value.ToString()
+         .Split(";",StringSplitOptions.RemoveEmptyEntries)
+         .Contains(prop.ToString());
+   }
+}
+
+// usage: .ApplyFiltering("name #In John;David;Felipe")

Registration Example:

csharp
 GridifyGlobalConfiguration.CustomOperators.Register<FreeTextOperator>();
+ GridifyGlobalConfiguration.CustomOperators.Register<RegexMatchOperator>();
+ GridifyGlobalConfiguration.CustomOperators.Register<InOperator>();
`,42),h=[n];function l(p,k,r,d,o,E){return a(),i("div",null,h)}const y=s(e,[["render",l]]);export{c as __pageData,y as default}; diff --git a/assets/guide_filtering.md.DBF6P0Gc.lean.js b/assets/guide_filtering.md.DBF6P0Gc.lean.js new file mode 100644 index 00000000..f09f3192 --- /dev/null +++ b/assets/guide_filtering.md.DBF6P0Gc.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a4 as t}from"./chunks/framework.Cmp6zcjC.js";const c=JSON.parse('{"title":"Filtering","description":"","frontmatter":{},"headers":[],"relativePath":"guide/filtering.md","filePath":"guide/filtering.md"}'),e={name:"guide/filtering.md"},n=t("",42),h=[n];function l(p,k,r,d,o,E){return a(),i("div",null,h)}const y=s(e,[["render",l]]);export{c as __pageData,y as default}; diff --git a/assets/guide_getting-started.md.DJX3p0eS.js b/assets/guide_getting-started.md.DJX3p0eS.js new file mode 100644 index 00000000..352e08df --- /dev/null +++ b/assets/guide_getting-started.md.DJX3p0eS.js @@ -0,0 +1 @@ +import{_ as a,c as n,j as i,t,a4 as e,o as l}from"./chunks/framework.Cmp6zcjC.js";const z=JSON.parse('{"title":"Getting Started","description":"","frontmatter":{},"headers":[],"relativePath":"guide/getting-started.md","filePath":"guide/getting-started.md"}'),r={name:"guide/getting-started.md"},o=e('

Getting Started

There are three packages available for gridify in the nuget repository:

TIP

If you are using the Entity Framework in your project, you should install the Gridify.EntityFramework package instead of Gridify.

This package provides the same functionality as the Gridify package but is designed to be more compatible with Entity Framework.


TIP

To use Gridify with Elasticsearch, it's necessary to install Gridify.Elasticsearch.


If you are developing in a JavaScript or TypeScript environment and need to create dynamic queries on the client side for server-side operations, Gridify also offers a lightweight client library. gridify-client

Installation

',11),h={class:"vp-code-group vp-adaptive-theme"},d=e('
',1),c={class:"blocks"},p={class:"language-shell vp-adaptive-theme active"},_=i("button",{title:"Copy Code",class:"copy"},null,-1),k=i("span",{class:"lang"},"shell",-1),g={class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},u={class:"line"},y=e('dotnet add package Gridify --version',5),f={style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},F={class:"language-shell vp-adaptive-theme"},b=i("button",{title:"Copy Code",class:"copy"},null,-1),m=i("span",{class:"lang"},"shell",-1),C={class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},T={class:"line"},v=e('dotnet add package Gridify.EntityFramework --version',5),E={style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},S={class:"language-shell vp-adaptive-theme"},w=i("button",{title:"Copy Code",class:"copy"},null,-1),G=i("span",{class:"lang"},"shell",-1),B={class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},A={class:"line"},P=e('dotnet add package Gridify.Elasticsearch --version',5),I={style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},V=e('
shell
npm i gridify-client
',1),x=e('

Namespace

After installing the package, you can use the Gridify namespace to access the package classes and static Extension methods.

csharp
using Gridify;

How to use

There are two ways to start using Gridify:

',6);function N(s,q,D,K,R,$){return l(),n("div",null,[o,i("div",h,[d,i("div",c,[i("div",p,[_,k,i("pre",g,[i("code",null,[i("span",u,[y,i("span",f," "+t(s.$version),1)])])])]),i("div",F,[b,m,i("pre",C,[i("code",null,[i("span",T,[v,i("span",E," "+t(s.$version),1)])])])]),i("div",S,[w,G,i("pre",B,[i("code",null,[i("span",A,[P,i("span",I," "+t(s.$version),1)])])])]),V])]),x])}const H=a(r,[["render",N]]);export{z as __pageData,H as default}; diff --git a/assets/guide_getting-started.md.DJX3p0eS.lean.js b/assets/guide_getting-started.md.DJX3p0eS.lean.js new file mode 100644 index 00000000..5ebf948c --- /dev/null +++ b/assets/guide_getting-started.md.DJX3p0eS.lean.js @@ -0,0 +1 @@ +import{_ as a,c as n,j as i,t,a4 as e,o as l}from"./chunks/framework.Cmp6zcjC.js";const z=JSON.parse('{"title":"Getting Started","description":"","frontmatter":{},"headers":[],"relativePath":"guide/getting-started.md","filePath":"guide/getting-started.md"}'),r={name:"guide/getting-started.md"},o=e("",11),h={class:"vp-code-group vp-adaptive-theme"},d=e("",1),c={class:"blocks"},p={class:"language-shell vp-adaptive-theme active"},_=i("button",{title:"Copy Code",class:"copy"},null,-1),k=i("span",{class:"lang"},"shell",-1),g={class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},u={class:"line"},y=e("",5),f={style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},F={class:"language-shell vp-adaptive-theme"},b=i("button",{title:"Copy Code",class:"copy"},null,-1),m=i("span",{class:"lang"},"shell",-1),C={class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},T={class:"line"},v=e("",5),E={style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},S={class:"language-shell vp-adaptive-theme"},w=i("button",{title:"Copy Code",class:"copy"},null,-1),G=i("span",{class:"lang"},"shell",-1),B={class:"shiki shiki-themes github-light github-dark vp-code",tabindex:"0"},A={class:"line"},P=e("",5),I={style:{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"}},V=e("",1),x=e("",6);function N(s,q,D,K,R,$){return l(),n("div",null,[o,i("div",h,[d,i("div",c,[i("div",p,[_,k,i("pre",g,[i("code",null,[i("span",u,[y,i("span",f," "+t(s.$version),1)])])])]),i("div",F,[b,m,i("pre",C,[i("code",null,[i("span",T,[v,i("span",E," "+t(s.$version),1)])])])]),i("div",S,[w,G,i("pre",B,[i("code",null,[i("span",A,[P,i("span",I," "+t(s.$version),1)])])])]),V])]),x])}const H=a(r,[["render",N]]);export{z as __pageData,H as default}; diff --git a/assets/guide_gridifyGlobalConfiguration.md.CPK3zDE-.js b/assets/guide_gridifyGlobalConfiguration.md.CPK3zDE-.js new file mode 100644 index 00000000..324a14db --- /dev/null +++ b/assets/guide_gridifyGlobalConfiguration.md.CPK3zDE-.js @@ -0,0 +1 @@ +import{_ as e,c as a,o as i,a4 as o}from"./chunks/framework.Cmp6zcjC.js";const g=JSON.parse('{"title":"GridifyGlobalConfiguration","description":"","frontmatter":{},"headers":[],"relativePath":"guide/gridifyGlobalConfiguration.md","filePath":"guide/gridifyGlobalConfiguration.md"}'),t={name:"guide/gridifyGlobalConfiguration.md"},l=o('

GridifyGlobalConfiguration

Using this class you can change the default behavior and configuration of the Gridify library.

General configurations

DefaultPageSize

The default page size for the paging methods when no page size is specified.

  • type: int
  • default: 20

CaseSensitiveMapper

By default mappings are case insensitive. For example, name=John and Name=John are considered equal. You can change this behavior by setting this property to true.

AllowNullSearch

This option enables the null keyword in filtering operations, for example, name=null searches for all records with a null value for the name field not the string "null". if you need to search for the string "null" you can disable this option.

IgnoreNotMappedFields

If true, in filtering and ordering operations, gridify doesn't return any exceptions when a mapping is not defined for the given field.

DisableNullChecks

On nested collections by default gridify adds a null checking condition to prevent the null reference exceptions

e.g () => field != null && field....

some ORMs like NHibernate don't support this. You can disable this behavior by setting this option to true.

  • type: bool
  • default: false

DefaultDateTimeKind

By default, Gridify uses the DateTimeKind.Unspecified when parsing dates. You can change this behavior by setting this property to DateTimeKind.Utc or DateTimeKind.Local. This option is useful when you want to use Gridify with a database that requires a specific DateTimeKind, for example when using npgsql and postgresql.

  • type: DateTimeKind
  • default: null

CustomOperators

Using the Register method of this property you can add your own custom operators.

csharp
 GridifyGlobalConfiguration.CustomOperators.Register<MyCustomOperator>();

To learn more about custom operators, see Custom operator

',27),r=[l];function n(s,d,c,p,h,u){return i(),a("div",null,r)}const m=e(t,[["render",n]]);export{g as __pageData,m as default}; diff --git a/assets/guide_gridifyGlobalConfiguration.md.CPK3zDE-.lean.js b/assets/guide_gridifyGlobalConfiguration.md.CPK3zDE-.lean.js new file mode 100644 index 00000000..20ecd46e --- /dev/null +++ b/assets/guide_gridifyGlobalConfiguration.md.CPK3zDE-.lean.js @@ -0,0 +1 @@ +import{_ as e,c as a,o as i,a4 as o}from"./chunks/framework.Cmp6zcjC.js";const g=JSON.parse('{"title":"GridifyGlobalConfiguration","description":"","frontmatter":{},"headers":[],"relativePath":"guide/gridifyGlobalConfiguration.md","filePath":"guide/gridifyGlobalConfiguration.md"}'),t={name:"guide/gridifyGlobalConfiguration.md"},l=o("",27),r=[l];function n(s,d,c,p,h,u){return i(),a("div",null,r)}const m=e(t,[["render",n]]);export{g as __pageData,m as default}; diff --git a/assets/guide_gridifyMapper.md.B36uI5Ui.js b/assets/guide_gridifyMapper.md.B36uI5Ui.js new file mode 100644 index 00000000..3c4f4e16 --- /dev/null +++ b/assets/guide_gridifyMapper.md.B36uI5Ui.js @@ -0,0 +1,54 @@ +import{_ as s,c as i,o as a,a4 as e}from"./chunks/framework.Cmp6zcjC.js";const y=JSON.parse('{"title":"GridifyMapper","description":"","frontmatter":{},"headers":[],"relativePath":"guide/gridifyMapper.md","filePath":"guide/gridifyMapper.md"}'),t={name:"guide/gridifyMapper.md"},n=e(`

GridifyMapper

Internally Gridify is using an auto generated mapper that maps your string base field names to actual properties in your entities, but sometimes we don't want to support filtering or sorting on a specific field. If you want to control what field names are mapped to what properties, you can create a custom mapper.

To get a better understanding of how this works, consider the following example:

csharp
// sample Entities
+public class Person
+{
+    public string UserName { get; set; }
+    public string FirstName { get; set; }
+    public string LastName { get; set; }
+    public string Password { get; set; }
+    public Contact Contact { get; set; }
+}
+
+public class Contact
+{
+    public string Address { get; set; }
+    public int PhoneNumber { get; set; }
+}

In this example we want to:

  • Generate default mappings
  • Ignore the Password property
  • Map the address and mobile to the Contact property
  • Make sure the userName value is always lowercase in the search
csharp
var mapper = new GridifyMapper<Person>()
+            .GenerateMappings()
+            .RemoveMap(nameof(Person.Password))
+            .AddMap("address", p => p.Contact.Address)
+            .AddMap("mobile", p => p.Contact.PhoneNumber)
+            .AddMap("userName", p => p.UserName, v => v.ToLower());

In the following, we will become more familiar with the above methods

GenerateMappings

This method generates mappings for the properties of the entity, including top-level public properties and properties of nested classes up to the specified nesting depth.

  • To generate mappings for top-level public properties only, you can call this method without passing any arguments:
csharp
var mapper = new GridifyMapper<Person>()
+               .GenerateMappings();
  • To generate mappings with control over nesting depth, you can specify the maxNestingDepth parameter. This parameter limits how deep the mappings will be generated for nested classes and navigation properties (added in v2.15.0). Set it to 0 for no nesting or a positive value to control the depth (added in v2.11.0):
csharp
var mapper = new GridifyMapper<Person>()
+      // Generates mappings for top-level properties and properties of nested classes up to 2 levels deep.
+     .GenerateMappings(2);

TIP

Another alternative to generate default mappings for top-level public properties is by passing true to the GridifyMapper constructor. This generates mappings without considering nesting depth.

csharp
var mapper = new GridifyMapper<Person>(true);
+var mapperWithDepth = new GridifyMapper<Person>(true, 2);

RemoveMap

This method removes mapping from the mapper. Usually you will use this method after you have generated the mappings to ignore some properties that you don't want to be supported by Gridify filtering or ordering actions.

AddMap

This method adds a mapping to the mapper.

  • the first parameter is the name of the field you want to use in the string query
  • the second parameter is a property selector expression
  • the third parameter is an optional value convertor expression that you can use to convert user inputs to anything you want

Value convertor

If you need to change your search values before the filtering operation you can use this feature, the third parameter of the GridifyMapper AddMap method accepts a function that you can use to convert the input values.

in the above example we want to convert the userName value to lowercase before the filtering operation.

csharp
mapper = mapper.AddMap("userName", p => p.UserName, value => value.ToLower());

HasMap

This method checks if the mapper has a mapping for the given field name.

ClearMaps

This method clears the list of mappings

GetCurrentMaps

This method returns list of current mappings.

GridifyMapperConfiguration

csharp
var mapperConfig = new GridifyMapperConfiguration()
+{
+   CaseSensitive = false,
+   AllowNullSearch = true,
+   IgnoreNotMappedFields = false
+};
+
+var mapper = new GridifyMapper<Person>(mapperConfig);

CaseSensitive

By default mapper is Case-insensitive but you can change this behavior if you need Case-Sensitive mappings.

  • Type: bool
  • Default: false
csharp
var mapper = new GridifyMapper<Person>(q => q.CaseSensitive = true);

IgnoreNotMappedFields

By setting this to true Gridify don't throw an exception when a field name is not mapped. for instance, in the above example, searching for password will not throw an exception.

  • Type: bool
  • Default: false
csharp
var mapper = new GridifyMapper<Person>(q => q.IgnoreNotMappedFields = true);

AllowNullSearch

By setting this to false, Gridify don't allow searching on null values using the null keyword for values.

  • Type: bool
  • Default: true
csharp
var mapper = new GridifyMapper<Person>(q => q.AllowNullSearch = false);

DefaultDateTimeKind

By setting this property to a DateTimeKind value, you can change the default DateTimeKind used when parsing dates.

  • type: DateTimeKind
  • default: null
csharp
var mapper = new GridifyMapper<Person>(q => q.DefaultDateTimeKind = DateTimeKind.Utc);

Filtering on Nested Collections

You can use LINQ Select and SelectMany methods to filter your data using its nested collections.

In this example, we have 3 nested collections, but filtering will apply to the Property1 of the third level.

csharp
var mapper = new GridifyMapper<Level1>()
+    .AddMap("prop1", l1 => l1.Level2List
+            .SelectMany(l2 => l2.Level3List)
+            .Select(l3 => l3.Property1));
+// ...
+var query = level1List.ApplyFiltering("prop1 = 123", mapper);

if you have only two-level nesting, you don't need to use SelectMany.

Defining Mappings for Indexable Properties

Starting from version v2.15.0, GridifyMapper's AddMap method supports filtering on properties that are indexable, such as sub-collections, arrays, and dictionaries. This allows you to create dynamic queries by defining mappings to specific indexes or dictionary keys using square brackets [ ].

Mapping to Array Indexes

You can define a mapping to a specific index in an array or sub-collection by specifying the index within square brackets [ ].\`

csharp
var gm = new GridifyMapper<TargetType>()
+      .AddMap("arrayProp", (target, index) => target.MyArray[index].Prop);
+
+var gq = new GridifyQuery
+{
+   // Filters on the 8th element of an array property
+   Filter = "arrayProp[8] > 10"
+};

Mapping to Dictionary Keys

Similarly, you can define a mapping to a specific key in a dictionary or in a navigation property.

csharp
var gm = new GridifyMapper<TargetType>()
+      .AddMap("dictProp", (target, key) => target.MyDictionary[key]);
+
+var gm2 = new GridifyMapper<TargetType>()
+      .AddMap("navProp", (target, key) => target.NavigationProperty.Where(n => n.Key == key).Select(n => n.Value));
+
+var gq = new GridifyQuery
+{
+   // Filters on the value associated with the 'name' key in a dictionary
+   Filter = "dictProp[name] = John"
+};

Generic Overload for Non-String Dictionary Keys

If your dictionary key is not a string, you can use the generic overload of the AddMap<T> method to specify the key type.

csharp
var gm = new GridifyMapper<TargetType>()
+      .AddMap<Guid>("dictProp", (target, key) => target.MyDictionary[key]);

For more information on filtering using these mappings, refer to the Using Indexers.

GetExpression

This method returns the selector expression that you can use it in LINQ queries.

csharp
Expression<Func<Person, object>> selector = mapper.GetExpression(nameof(Person.Name));

GetLambdaExpression

This method returns the selector expression that you can use it in LINQ queries.

csharp
LambdaExpression selector = mapper.GetLambdaExpression(nameof(Person.Name));
`,71),h=[n];function p(l,k,r,d,g,o){return a(),i("div",null,h)}const c=s(t,[["render",p]]);export{y as __pageData,c as default}; diff --git a/assets/guide_gridifyMapper.md.B36uI5Ui.lean.js b/assets/guide_gridifyMapper.md.B36uI5Ui.lean.js new file mode 100644 index 00000000..587bbe96 --- /dev/null +++ b/assets/guide_gridifyMapper.md.B36uI5Ui.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a4 as e}from"./chunks/framework.Cmp6zcjC.js";const y=JSON.parse('{"title":"GridifyMapper","description":"","frontmatter":{},"headers":[],"relativePath":"guide/gridifyMapper.md","filePath":"guide/gridifyMapper.md"}'),t={name:"guide/gridifyMapper.md"},n=e("",71),h=[n];function p(l,k,r,d,g,o){return a(),i("div",null,h)}const c=s(t,[["render",p]]);export{y as __pageData,c as default}; diff --git a/assets/guide_gridifyQuery.md.CEJIRn4b.js b/assets/guide_gridifyQuery.md.CEJIRn4b.js new file mode 100644 index 00000000..c99ef209 --- /dev/null +++ b/assets/guide_gridifyQuery.md.CEJIRn4b.js @@ -0,0 +1,23 @@ +import{_ as s,c as i,o as a,a4 as h}from"./chunks/framework.Cmp6zcjC.js";const o=JSON.parse('{"title":"GridifyQuery","description":"","frontmatter":{},"headers":[],"relativePath":"guide/gridifyQuery.md","filePath":"guide/gridifyQuery.md"}'),n={name:"guide/gridifyQuery.md"},t=h(`

GridifyQuery

GridifyQuery is a simple class for configuring Filtering, Ordering and Paging.

csharp
var gq = new GridifyQuery()
+{
+    Filter = "FirstName=John",
+    Page = 1,
+    PageSize = 20,
+    OrderBy = "Age"
+};
+
+// Apply Filter, Sort and Paging
+Paging<Person> result = personsRepo.Gridify(gq);

IsValid

This extension method, checks if the GridifyQuery (Filter, OrderBy) is valid to use with a custom mapper or the auto generated mapper and returns true or false.

csharp
var gq = new GridifyQuery() { Filter = "name=John" , OrderBy = "Age" };
+// true
+bool isValid = gq.IsValid<Person>();
csharp
var gq = new GridifyQuery() { Filter = "NonExist=John" , OrderBy = "Age" };
+// false (NonExist is not a property of Person)
+bool isValid = gq.IsValid<Person>();
csharp
var gq = new GridifyQuery() { Filter = "@name=!" , OrderBy = "Age" };
+// false (this is not a valid filter)
+bool isValid = gq.IsValid<Person>();

Optionally you can pass a custom mapper to check if the GridifyQuery is valid for that mapper.

csharp
var mapper = new GridifyMapper<Person>()
+      .AddMap("name", q => q.Name);
+var gq = new GridifyQuery() { Filter = "name=John" , OrderBy = "Age" };
+
+// false (Age is not mapped)
+bool isValid = gq.IsValid(mapper);

GetFilteringExpression

This extension method, creates a lambda expression using the GridifyQuery.Filter property that you can use it in the LINQ Where method to filter the data.

csharp
var gq = new GridifyQuery() { Filter = "name=John" };
+Expression<Func<T, bool>> expression = gq.GetFilteringExpression<Person>();
+var result = personsRepo.Where(expression);
`,13),k=[t];function l(p,e,r,d,g,E){return a(),i("div",null,k)}const F=s(n,[["render",l]]);export{o as __pageData,F as default}; diff --git a/assets/guide_gridifyQuery.md.CEJIRn4b.lean.js b/assets/guide_gridifyQuery.md.CEJIRn4b.lean.js new file mode 100644 index 00000000..4657a560 --- /dev/null +++ b/assets/guide_gridifyQuery.md.CEJIRn4b.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a4 as h}from"./chunks/framework.Cmp6zcjC.js";const o=JSON.parse('{"title":"GridifyQuery","description":"","frontmatter":{},"headers":[],"relativePath":"guide/gridifyQuery.md","filePath":"guide/gridifyQuery.md"}'),n={name:"guide/gridifyQuery.md"},t=h("",13),k=[t];function l(p,e,r,d,g,E){return a(),i("div",null,k)}const F=s(n,[["render",l]]);export{o as __pageData,F as default}; diff --git a/assets/guide_index.md.C2ZxBUIO.js b/assets/guide_index.md.C2ZxBUIO.js new file mode 100644 index 00000000..4b8e09ac --- /dev/null +++ b/assets/guide_index.md.C2ZxBUIO.js @@ -0,0 +1 @@ +import{_ as t,c as a,o as e,a4 as i}from"./chunks/framework.Cmp6zcjC.js";const c=JSON.parse('{"title":"Introduction","description":"","frontmatter":{},"headers":[],"relativePath":"guide/index.md","filePath":"guide/index.md"}'),d={name:"guide/index.md"},r=i('

Introduction

Greetings!

Gridify is an exceptional dynamic LINQ library designed to simplify the process of converting strings into LINQ queries. It offers remarkable performance and ease-of-use, making it effortless to apply filtering, sorting, and pagination utilizing text-based data.

Features

Here are some notable features of Gridify:

  • Fast and user-friendly
  • Supports filtering, sorting, and pagination
  • Enables conversion from strings to LINQ queries
  • Supports nested queries and sub-collections
  • Allows mapping from strings to objects
  • Supports query compilation
  • Supports DocumentDBs
  • Compatible with collection indexes
  • Custom operators
  • Can be used with any collection that supports LINQ
  • Compatible with object-mappers like AutoMapper
  • Compatible with ORMs, particularly Entity Framework
  • Supports Elasticsearch DSL query
  • Javascript/Typescript gridify-client

Examples

To provide a better understanding of Gridify's functionality, we have prepared a few examples:

Performance

Filtering is the most expensive feature in Gridify. The following benchmark compares filtering in various popular dynamic LINQ libraries. Interestingly, Gridify outperforms even Native LINQ in terms of speed. It's worth mentioning that other features like Pagination and Sorting in Gridify have minimal impact on performance.

MethodMeanErrorStdDevRatioAllocatedAlloc Ratio
Gridify599.8 us2.76 us2.45 us0.9236.36 KB1.11
Native_LINQ649.9 us2.55 us2.38 us1.0032.74 KB1.00
DynamicLinq734.8 us13.90 us13.01 us1.13119.4 KB3.65
Sieve1,190.9 us7.41 us6.93 us1.8353.05 KB1.62
Fop2,637.6 us8.59 us7.61 us4.06321.57 KB9.82
CSharp_Scripting216,863.8 us4,295.66 us6,021.92 us336.6423660.26 KB722.71
Details

BenchmarkDotNet v0.13.10, Windows 11 (10.0.22621.2715/22H2/2022Update/SunValley2) 12th Gen Intel Core i7-12800H, 1 CPU, 20 logical and 14 physical cores .NET SDK 8.0.100 [Host] : .NET 8.0.0 (8.0.23.53103), X64 RyuJIT AVX2

This Benchmark is available Here

',13),l=[r];function s(n,f,o,g,v,h){return e(),a("div",null,l)}const u=t(d,[["render",s],["__scopeId","data-v-62a102f3"]]);export{c as __pageData,u as default}; diff --git a/assets/guide_index.md.C2ZxBUIO.lean.js b/assets/guide_index.md.C2ZxBUIO.lean.js new file mode 100644 index 00000000..3891e93a --- /dev/null +++ b/assets/guide_index.md.C2ZxBUIO.lean.js @@ -0,0 +1 @@ +import{_ as t,c as a,o as e,a4 as i}from"./chunks/framework.Cmp6zcjC.js";const c=JSON.parse('{"title":"Introduction","description":"","frontmatter":{},"headers":[],"relativePath":"guide/index.md","filePath":"guide/index.md"}'),d={name:"guide/index.md"},r=i("",13),l=[r];function s(n,f,o,g,v,h){return e(),a("div",null,l)}const u=t(d,[["render",s],["__scopeId","data-v-62a102f3"]]);export{c as __pageData,u as default}; diff --git a/assets/guide_ordering.md.CrhupX3M.js b/assets/guide_ordering.md.CrhupX3M.js new file mode 100644 index 00000000..d196af2d --- /dev/null +++ b/assets/guide_ordering.md.CrhupX3M.js @@ -0,0 +1,17 @@ +import{_ as s,c as i,o as a,a4 as e}from"./chunks/framework.Cmp6zcjC.js";const y=JSON.parse('{"title":"Ordering","description":"","frontmatter":{},"headers":[],"relativePath":"guide/ordering.md","filePath":"guide/ordering.md"}'),t={name:"guide/ordering.md"},n=e(`

Ordering

The ordering query expression can be built with a comma-delimited ordered list of field/property names followed by asc or desc keywords.

By default, if you don't add these keywords, Gridify assumes you need Ascending ordering.

csharp
// asc - desc
+var x = personsRepo.ApplyOrdering("Id"); // default ascending its equal to "Id asc"
+var x = personsRepo.ApplyOrdering("Id desc"); // use descending ordering
+
+// multiple orderings example
+var x = personsRepo.ApplyOrdering("Id desc, FirstName asc, LastName");
csharp
// asc - desc
+var gq = new GridifyQuery() { OrderBy = "Id" }; // default ascending its equal to "Id asc"
+var gq = new GridifyQuery() { OrderBy = "Id desc" }; // use descending ordering
+
+// multiple orderings example
+var gq = new GridifyQuery() { OrderBy = "Id desc, FirstName asc, LastName" };
csharp
var builder = new QueryBuilder<Person>();
+// asc - desc
+builder.AddOrderBy("Id"); // default ascending its equal to "Id asc"
+builder.AddOrderBy("Id desc"); // use descending ordering
+
+// multiple orderings example
+builder.AddOrderBy("Id desc, FirstName asc, LastName");

Order By Nullable types

Sometimes we need to order by nullable types, for example:

csharp
personsRepo.OrderBy(p => p.BirthDate.HasValue)

to support this behavior, you can use Gridify special characters (? or !) after the property name.

e.g:

To achieve the personsRepo.OrderBy(p => p.BirthDate.HasValue) query, you can use ?:

csharp
var x = personsRepo.ApplyOrdering("BirthDate?");

and for personsRepo.OrderBy(p => !p.BirthDate.HasValue), you can use !:

csharp
var x = personsRepo.ApplyOrdering("BirthDate!");

WARNING

These nullable characters will only work on the nullable types.

`,14),p=[n];function h(l,k,d,r,o,g){return a(),i("div",null,p)}const E=s(t,[["render",h]]);export{y as __pageData,E as default}; diff --git a/assets/guide_ordering.md.CrhupX3M.lean.js b/assets/guide_ordering.md.CrhupX3M.lean.js new file mode 100644 index 00000000..73d8ea61 --- /dev/null +++ b/assets/guide_ordering.md.CrhupX3M.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a4 as e}from"./chunks/framework.Cmp6zcjC.js";const y=JSON.parse('{"title":"Ordering","description":"","frontmatter":{},"headers":[],"relativePath":"guide/ordering.md","filePath":"guide/ordering.md"}'),t={name:"guide/ordering.md"},n=e("",14),p=[n];function h(l,k,d,r,o,g){return a(),i("div",null,p)}const E=s(t,[["render",h]]);export{y as __pageData,E as default}; diff --git a/assets/guide_queryBuilder.md.kmI5FuP-.js b/assets/guide_queryBuilder.md.kmI5FuP-.js new file mode 100644 index 00000000..36db8f41 --- /dev/null +++ b/assets/guide_queryBuilder.md.kmI5FuP-.js @@ -0,0 +1,5 @@ +import{_ as t,c as e,o as i,a4 as a}from"./chunks/framework.Cmp6zcjC.js";const c=JSON.parse('{"title":"QueryBuilder","description":"","frontmatter":{},"headers":[],"relativePath":"guide/queryBuilder.md","filePath":"guide/queryBuilder.md"}'),s={name:"guide/queryBuilder.md"},d=a(`

QueryBuilder

The QueryBuilder class is really useful if you want to manually build your query Or when you don't want to use the extension methods.

MethodDescription
AddConditionAdds a string base Filtering query
AddOrderByAdds a string base Ordering query
ConfigurePagingConfigure Page and PageSize
AddQueryAccepts a GridifyQuery object to configure filtering,ordering and paging
UseCustomMapperAccepts a GridifyMapper to use in build methods
UseEmptyMapperSetup an Empty new GridifyMapper without auto generated mappings
AddMapAdd a single Map to existing mapper
RemoveMapRemove a single Map from existing mapper
ConfigureDefaultMapperConfiguring default mapper when we didn't use AddMapper method
IsValidValidates Condition, OrderBy, Query , Mapper and returns a bool
BuildApplies filtering ordering and paging to a queryable context
BuildCompiledCompiles the expressions and returns a delegate for applying filtering ordering and paging to a enumerable collection
BuildFilteringExpressionReturns filtering expression that can be compiled for later use for enumerable collections
BuildEvaluatorReturns an evaluator delegate that can be use to evaluate an queryable context
BuildCompiledEvaluatorReturns an compiled evaluator delegate that can be use to evaluate an enumerable collection
BuildWithPagingApplies filtering ordering and paging to a context, and returns paging result
BuildWithPagingCompiledCompiles the expressions and returns a delegate for applying filtering ordering and paging to a enumerable collection, that returns paging result
BuildWithQueryablePagingApplies filtering ordering and paging to a context, and returns queryable paging result
EvaluateDirectly Evaluate a context to check if all conditions are valid or not
csharp
var builder = new QueryBuilder<Person>()
+        .AddCondition("name=John")
+        .AddOrderBy("age, id");
+
+var query = builder.Build(persons);
`,4),r=[d];function n(l,p,o,h,u,g){return i(),e("div",null,r)}const y=t(s,[["render",n]]);export{c as __pageData,y as default}; diff --git a/assets/guide_queryBuilder.md.kmI5FuP-.lean.js b/assets/guide_queryBuilder.md.kmI5FuP-.lean.js new file mode 100644 index 00000000..75b6a953 --- /dev/null +++ b/assets/guide_queryBuilder.md.kmI5FuP-.lean.js @@ -0,0 +1 @@ +import{_ as t,c as e,o as i,a4 as a}from"./chunks/framework.Cmp6zcjC.js";const c=JSON.parse('{"title":"QueryBuilder","description":"","frontmatter":{},"headers":[],"relativePath":"guide/queryBuilder.md","filePath":"guide/queryBuilder.md"}'),s={name:"guide/queryBuilder.md"},d=a("",4),r=[d];function n(l,p,o,h,u,g){return i(),e("div",null,r)}const y=t(s,[["render",n]]);export{c as __pageData,y as default}; diff --git a/assets/index.md.BQScyGp-.js b/assets/index.md.BQScyGp-.js new file mode 100644 index 00000000..1d187ebc --- /dev/null +++ b/assets/index.md.BQScyGp-.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as a}from"./chunks/framework.Cmp6zcjC.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Gridify","text":"Documentation","tagline":"A powerful dynamic LINQ library for .NET","actions":[{"theme":"brand","text":"Get Started","link":"/guide/getting-started"},{"theme":"alt","text":"Introduction","link":"/guide/"}]},"features":[{"title":"Simple and Easy to Use","details":"Gridify offers a powerful string-based dynamic LINQ query language that is both simple and easy to use."},{"title":"Exceptional Performance","details":"Gridify has been designed with performance as a top priority and can outperform other dynamic LINQ libraries."},{"title":"Compatibility","details":"Gridify can be seamlessly integrated into any .NET Core or .NET Framework project, ensuring high compatibility. It can also be used alongside Entity Framework and other ORMs."}]},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),i={name:"index.md"};function r(n,o,s,d,l,c){return a(),t("div")}const f=e(i,[["render",r]]);export{p as __pageData,f as default}; diff --git a/assets/index.md.BQScyGp-.lean.js b/assets/index.md.BQScyGp-.lean.js new file mode 100644 index 00000000..1d187ebc --- /dev/null +++ b/assets/index.md.BQScyGp-.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as a}from"./chunks/framework.Cmp6zcjC.js";const p=JSON.parse('{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Gridify","text":"Documentation","tagline":"A powerful dynamic LINQ library for .NET","actions":[{"theme":"brand","text":"Get Started","link":"/guide/getting-started"},{"theme":"alt","text":"Introduction","link":"/guide/"}]},"features":[{"title":"Simple and Easy to Use","details":"Gridify offers a powerful string-based dynamic LINQ query language that is both simple and easy to use."},{"title":"Exceptional Performance","details":"Gridify has been designed with performance as a top priority and can outperform other dynamic LINQ libraries."},{"title":"Compatibility","details":"Gridify can be seamlessly integrated into any .NET Core or .NET Framework project, ensuring high compatibility. It can also be used alongside Entity Framework and other ORMs."}]},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),i={name:"index.md"};function r(n,o,s,d,l,c){return a(),t("div")}const f=e(i,[["render",r]]);export{p as __pageData,f as default}; diff --git a/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 b/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 new file mode 100644 index 00000000..b6b603d5 Binary files /dev/null and b/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 differ diff --git a/assets/inter-italic-cyrillic.By2_1cv3.woff2 b/assets/inter-italic-cyrillic.By2_1cv3.woff2 new file mode 100644 index 00000000..def40a4f Binary files /dev/null and b/assets/inter-italic-cyrillic.By2_1cv3.woff2 differ diff --git a/assets/inter-italic-greek-ext.1u6EdAuj.woff2 b/assets/inter-italic-greek-ext.1u6EdAuj.woff2 new file mode 100644 index 00000000..e070c3d3 Binary files /dev/null and b/assets/inter-italic-greek-ext.1u6EdAuj.woff2 differ diff --git a/assets/inter-italic-greek.DJ8dCoTZ.woff2 b/assets/inter-italic-greek.DJ8dCoTZ.woff2 new file mode 100644 index 00000000..a3c16ca4 Binary files /dev/null and b/assets/inter-italic-greek.DJ8dCoTZ.woff2 differ diff --git a/assets/inter-italic-latin-ext.CN1xVJS-.woff2 b/assets/inter-italic-latin-ext.CN1xVJS-.woff2 new file mode 100644 index 00000000..2210a899 Binary files /dev/null and b/assets/inter-italic-latin-ext.CN1xVJS-.woff2 differ diff --git a/assets/inter-italic-latin.C2AdPX0b.woff2 b/assets/inter-italic-latin.C2AdPX0b.woff2 new file mode 100644 index 00000000..790d62dc Binary files /dev/null and b/assets/inter-italic-latin.C2AdPX0b.woff2 differ diff --git a/assets/inter-italic-vietnamese.BSbpV94h.woff2 b/assets/inter-italic-vietnamese.BSbpV94h.woff2 new file mode 100644 index 00000000..1eec0775 Binary files /dev/null and b/assets/inter-italic-vietnamese.BSbpV94h.woff2 differ diff --git a/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 b/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 new file mode 100644 index 00000000..2cfe6153 Binary files /dev/null and b/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 differ diff --git a/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 b/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 new file mode 100644 index 00000000..e3886dd1 Binary files /dev/null and b/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 differ diff --git a/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 b/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 new file mode 100644 index 00000000..36d67487 Binary files /dev/null and b/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 differ diff --git a/assets/inter-roman-greek.BBVDIX6e.woff2 b/assets/inter-roman-greek.BBVDIX6e.woff2 new file mode 100644 index 00000000..2bed1e85 Binary files /dev/null and b/assets/inter-roman-greek.BBVDIX6e.woff2 differ diff --git a/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 b/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 new file mode 100644 index 00000000..9a8d1e2b Binary files /dev/null and b/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 differ diff --git a/assets/inter-roman-latin.Di8DUHzh.woff2 b/assets/inter-roman-latin.Di8DUHzh.woff2 new file mode 100644 index 00000000..07d3c53a Binary files /dev/null and b/assets/inter-roman-latin.Di8DUHzh.woff2 differ diff --git a/assets/inter-roman-vietnamese.BjW4sHH5.woff2 b/assets/inter-roman-vietnamese.BjW4sHH5.woff2 new file mode 100644 index 00000000..57bdc22a Binary files /dev/null and b/assets/inter-roman-vietnamese.BjW4sHH5.woff2 differ diff --git a/assets/style.D78_rGGx.css b/assets/style.D78_rGGx.css new file mode 100644 index 00000000..3692edfe --- /dev/null +++ b/assets/style.D78_rGGx.css @@ -0,0 +1 @@ +@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/Gridify/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/Gridify/assets/inter-roman-cyrillic.C5lxZ8CY.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/Gridify/assets/inter-roman-greek-ext.CqjqNYQ-.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/Gridify/assets/inter-roman-greek.BBVDIX6e.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/Gridify/assets/inter-roman-vietnamese.BjW4sHH5.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/Gridify/assets/inter-roman-latin-ext.4ZJIpNVo.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/Gridify/assets/inter-roman-latin.Di8DUHzh.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/Gridify/assets/inter-italic-cyrillic-ext.r48I6akx.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/Gridify/assets/inter-italic-cyrillic.By2_1cv3.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/Gridify/assets/inter-italic-greek-ext.1u6EdAuj.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/Gridify/assets/inter-italic-greek.DJ8dCoTZ.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/Gridify/assets/inter-italic-vietnamese.BSbpV94h.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/Gridify/assets/inter-italic-latin-ext.CN1xVJS-.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/Gridify/assets/inter-italic-latin.C2AdPX0b.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Punctuation SC;font-weight:400;src:local("PingFang SC Regular"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:500;src:local("PingFang SC Medium"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:600;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:700;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-purple-1: #6f42c1;--vp-c-purple-2: #7e4cc9;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-purple-1: #c8abfa;--vp-c-purple-2: #a879e6;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-note-1: var(--vp-c-brand-1);--vp-c-note-2: var(--vp-c-brand-2);--vp-c-note-3: var(--vp-c-brand-3);--vp-c-note-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-important-1: var(--vp-c-purple-1);--vp-c-important-2: var(--vp-c-purple-2);--vp-c-important-3: var(--vp-c-purple-3);--vp-c-important-soft: var(--vp-c-purple-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-c-caution-1: var(--vp-c-red-1);--vp-c-caution-2: var(--vp-c-red-2);--vp-c-caution-3: var(--vp-c-red-3);--vp-c-caution-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;font-optical-sizing:auto}:root:where(:lang(zh)){--vp-font-family-base: "Punctuation SC", "Inter", ui-sans-serif, system-ui, "PingFang SC", "Noto Sans CJK SC", "Noto Sans SC", "Heiti SC", "Microsoft YaHei", "DengXian", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}@media (min-width: 960px){:root{--vp-z-index-sidebar: 25}}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-note-border: transparent;--vp-custom-block-note-text: var(--vp-c-text-1);--vp-custom-block-note-bg: var(--vp-c-default-soft);--vp-custom-block-note-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-important-border: transparent;--vp-custom-block-important-text: var(--vp-c-text-1);--vp-custom-block-important-bg: var(--vp-c-important-soft);--vp-custom-block-important-code-bg: var(--vp-c-important-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-caution-border: transparent;--vp-custom-block-caution-text: var(--vp-c-text-1);--vp-custom-block-caution-bg: var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg: var(--vp-c-caution-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-default-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{overflow-x:auto}mjx-container>svg{display:inline-block;margin:auto}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3M15 12H3M17 18H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6M4 14l6-6 2-3M2 5h12M7 2h1M22 22l-5-10-5 10M14 18h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7M14 9h7M14 15h7M14 20h7'/%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2ZM18 9l-6 6M12 9l6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.vpi-social-discord{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418Z'/%3E%3C/svg%3E")}.vpi-social-facebook{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9.101 23.691v-7.98H6.627v-3.667h2.474v-1.58c0-4.085 1.848-5.978 5.858-5.978.401 0 .955.042 1.468.103a8.68 8.68 0 0 1 1.141.195v3.325a8.623 8.623 0 0 0-.653-.036 26.805 26.805 0 0 0-.733-.009c-.707 0-1.259.096-1.675.309a1.686 1.686 0 0 0-.679.622c-.258.42-.374.995-.374 1.752v1.297h3.919l-.386 2.103-.287 1.564h-3.246v8.245C19.396 23.238 24 18.179 24 12.044c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.628 3.874 10.35 9.101 11.647Z'/%3E%3C/svg%3E")}.vpi-social-github{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")}.vpi-social-instagram{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7.03.084c-1.277.06-2.149.264-2.91.563a5.874 5.874 0 0 0-2.124 1.388 5.878 5.878 0 0 0-1.38 2.127C.321 4.926.12 5.8.064 7.076.008 8.354-.005 8.764.001 12.023c.007 3.259.021 3.667.083 4.947.061 1.277.264 2.149.563 2.911.308.789.72 1.457 1.388 2.123a5.872 5.872 0 0 0 2.129 1.38c.763.295 1.636.496 2.913.552 1.278.056 1.689.069 4.947.063 3.257-.007 3.668-.021 4.947-.082 1.28-.06 2.147-.265 2.91-.563a5.881 5.881 0 0 0 2.123-1.388 5.881 5.881 0 0 0 1.38-2.129c.295-.763.496-1.636.551-2.912.056-1.28.07-1.69.063-4.948-.006-3.258-.02-3.667-.081-4.947-.06-1.28-.264-2.148-.564-2.911a5.892 5.892 0 0 0-1.387-2.123 5.857 5.857 0 0 0-2.128-1.38C19.074.322 18.202.12 16.924.066 15.647.009 15.236-.006 11.977 0 8.718.008 8.31.021 7.03.084m.14 21.693c-1.17-.05-1.805-.245-2.228-.408a3.736 3.736 0 0 1-1.382-.895 3.695 3.695 0 0 1-.9-1.378c-.165-.423-.363-1.058-.417-2.228-.06-1.264-.072-1.644-.08-4.848-.006-3.204.006-3.583.061-4.848.05-1.169.246-1.805.408-2.228.216-.561.477-.96.895-1.382a3.705 3.705 0 0 1 1.379-.9c.423-.165 1.057-.361 2.227-.417 1.265-.06 1.644-.072 4.848-.08 3.203-.006 3.583.006 4.85.062 1.168.05 1.804.244 2.227.408.56.216.96.475 1.382.895.421.42.681.817.9 1.378.165.422.362 1.056.417 2.227.06 1.265.074 1.645.08 4.848.005 3.203-.006 3.583-.061 4.848-.051 1.17-.245 1.805-.408 2.23-.216.56-.477.96-.896 1.38a3.705 3.705 0 0 1-1.378.9c-.422.165-1.058.362-2.226.418-1.266.06-1.645.072-4.85.079-3.204.007-3.582-.006-4.848-.06m9.783-16.192a1.44 1.44 0 1 0 1.437-1.442 1.44 1.44 0 0 0-1.437 1.442M5.839 12.012a6.161 6.161 0 1 0 12.323-.024 6.162 6.162 0 0 0-12.323.024M8 12.008A4 4 0 1 1 12.008 16 4 4 0 0 1 8 12.008'/%3E%3C/svg%3E")}.vpi-social-linkedin{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.064 2.064 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z'/%3E%3C/svg%3E")}.vpi-social-mastodon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z'/%3E%3C/svg%3E")}.vpi-social-npm{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M1.763 0C.786 0 0 .786 0 1.763v20.474C0 23.214.786 24 1.763 24h20.474c.977 0 1.763-.786 1.763-1.763V1.763C24 .786 23.214 0 22.237 0zM5.13 5.323l13.837.019-.009 13.836h-3.464l.01-10.382h-3.456L12.04 19.17H5.113z'/%3E%3C/svg%3E")}.vpi-social-slack{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zm10.122 2.521a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.268 0a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zm-2.523 10.122a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.268a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z'/%3E%3C/svg%3E")}.vpi-social-twitter,.vpi-social-x{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z'/%3E%3C/svg%3E")}.vpi-social-youtube{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z'/%3E%3C/svg%3E")}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s}.vp-doc blockquote>p{margin:0;font-size:16px;color:var(--vp-c-text-2);transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(.no-icon):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin:0 0 4px!important;text-align:center;letter-spacing:1px!important;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-c79a1216]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-c79a1216],.VPBackdrop.fade-leave-to[data-v-c79a1216]{opacity:0}.VPBackdrop.fade-leave-active[data-v-c79a1216]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-c79a1216]{display:none}}.NotFound[data-v-d6be1790]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-d6be1790]{padding:96px 32px 168px}}.code[data-v-d6be1790]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-d6be1790]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-d6be1790]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-d6be1790]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-d6be1790]{padding-top:20px}.link[data-v-d6be1790]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-d6be1790]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-b933a997]{position:relative;z-index:1}.nested[data-v-b933a997]{padding-right:16px;padding-left:16px}.outline-link[data-v-b933a997]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-b933a997]:hover,.outline-link.active[data-v-b933a997]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-b933a997]{padding-left:13px}.VPDocAsideOutline[data-v-a5bbad30]{display:none}.VPDocAsideOutline.has-outline[data-v-a5bbad30]{display:block}.content[data-v-a5bbad30]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-a5bbad30]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-a5bbad30]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-3f215769]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-3f215769]{flex-grow:1}.VPDocAside[data-v-3f215769] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-3f215769] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-3f215769] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-7e05ebdb]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-7e05ebdb]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-d4a0bba5]{margin-top:64px}.edit-info[data-v-d4a0bba5]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-d4a0bba5]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-d4a0bba5]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-d4a0bba5]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-d4a0bba5]{margin-right:8px}.prev-next[data-v-d4a0bba5]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-d4a0bba5]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-d4a0bba5]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-d4a0bba5]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-d4a0bba5]{margin-left:auto;text-align:right}.desc[data-v-d4a0bba5]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-d4a0bba5]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-39a288b8]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-39a288b8]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-39a288b8]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-39a288b8]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-39a288b8]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-39a288b8]{display:flex;justify-content:center}.VPDoc .aside[data-v-39a288b8]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-39a288b8]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-39a288b8]{max-width:1104px}}.container[data-v-39a288b8]{margin:0 auto;width:100%}.aside[data-v-39a288b8]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-39a288b8]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-39a288b8]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-39a288b8]::-webkit-scrollbar{display:none}.aside-curtain[data-v-39a288b8]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-39a288b8]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-39a288b8]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-39a288b8]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-39a288b8]{order:1;margin:0;min-width:640px}}.content-container[data-v-39a288b8]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-39a288b8]{max-width:688px}.VPButton[data-v-cad61b99]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-cad61b99]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-cad61b99]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-cad61b99]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-cad61b99]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-cad61b99]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-cad61b99]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-cad61b99]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-cad61b99]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-cad61b99]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-cad61b99]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-cad61b99]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-cad61b99]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-8426fc1a]{display:none}.dark .VPImage.light[data-v-8426fc1a]{display:none}.VPHero[data-v-303bb580]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-303bb580]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-303bb580]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-303bb580]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-303bb580]{flex-direction:row}}.main[data-v-303bb580]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-303bb580]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-303bb580]{text-align:left}}@media (min-width: 960px){.main[data-v-303bb580]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-303bb580]{max-width:592px}}.name[data-v-303bb580],.text[data-v-303bb580]{max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-303bb580],.VPHero.has-image .text[data-v-303bb580]{margin:0 auto}.name[data-v-303bb580]{color:var(--vp-home-hero-name-color)}.clip[data-v-303bb580]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-303bb580],.text[data-v-303bb580]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-303bb580],.text[data-v-303bb580]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-303bb580],.VPHero.has-image .text[data-v-303bb580]{margin:0}}.tagline[data-v-303bb580]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-303bb580]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-303bb580]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-303bb580]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-303bb580]{margin:0}}.actions[data-v-303bb580]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-303bb580]{justify-content:center}@media (min-width: 640px){.actions[data-v-303bb580]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-303bb580]{justify-content:flex-start}}.action[data-v-303bb580]{flex-shrink:0;padding:6px}.image[data-v-303bb580]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-303bb580]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-303bb580]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-303bb580]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-303bb580]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-303bb580]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-303bb580]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-303bb580]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-303bb580]{width:320px;height:320px}}[data-v-303bb580] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-303bb580] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-303bb580] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-a3976bdc]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-a3976bdc]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-a3976bdc]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-a3976bdc]>.VPImage{margin-bottom:20px}.icon[data-v-a3976bdc]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-a3976bdc]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-a3976bdc]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-a3976bdc]{padding-top:8px}.link-text-value[data-v-a3976bdc]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-a3976bdc]{margin-left:6px}.VPFeatures[data-v-a6181336]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-a6181336]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-a6181336]{padding:0 64px}}.container[data-v-a6181336]{margin:0 auto;max-width:1152px}.items[data-v-a6181336]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-a6181336]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-a6181336],.item.grid-4[data-v-a6181336],.item.grid-6[data-v-a6181336]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-a6181336],.item.grid-4[data-v-a6181336]{width:50%}.item.grid-3[data-v-a6181336],.item.grid-6[data-v-a6181336]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-a6181336]{width:25%}}.container[data-v-8e2d4988]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media (min-width: 640px){.container[data-v-8e2d4988]{padding:0 48px}}@media (min-width: 960px){.container[data-v-8e2d4988]{width:100%;padding:0 64px}}.vp-doc[data-v-8e2d4988] .VPHomeSponsors,.vp-doc[data-v-8e2d4988] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-8e2d4988] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-8e2d4988] .VPHomeSponsors a,.vp-doc[data-v-8e2d4988] .VPTeamPage a{text-decoration:none}.VPHome[data-v-686f80a6]{margin-bottom:96px}@media (min-width: 768px){.VPHome[data-v-686f80a6]{margin-bottom:128px}}.VPContent[data-v-1428d186]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-1428d186]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-1428d186]{margin:0}@media (min-width: 960px){.VPContent[data-v-1428d186]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-1428d186]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-1428d186]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-e315a0ad]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-e315a0ad]{display:none}.VPFooter[data-v-e315a0ad] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-e315a0ad] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-e315a0ad]{padding:32px}}.container[data-v-e315a0ad]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-e315a0ad],.copyright[data-v-e315a0ad]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-17a5e62e]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-17a5e62e]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-17a5e62e]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-17a5e62e]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-17a5e62e]{color:var(--vp-c-text-1)}.icon[data-v-17a5e62e]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-17a5e62e]{font-size:14px}.icon[data-v-17a5e62e]{font-size:16px}}.open>.icon[data-v-17a5e62e]{transform:rotate(90deg)}.items[data-v-17a5e62e]{position:absolute;top:40px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}@media (min-width: 960px){.items[data-v-17a5e62e]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-17a5e62e]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-17a5e62e]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-17a5e62e]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-17a5e62e]{transition:all .2s ease-out}.flyout-leave-active[data-v-17a5e62e]{transition:all .15s ease-in}.flyout-enter-from[data-v-17a5e62e],.flyout-leave-to[data-v-17a5e62e]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-a6f0e41e]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-a6f0e41e]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-a6f0e41e]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-a6f0e41e]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-a6f0e41e]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-a6f0e41e]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-a6f0e41e]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-a6f0e41e]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-a6f0e41e]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-a6f0e41e]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-a6f0e41e]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-a6f0e41e]{display:none}}.menu-icon[data-v-a6f0e41e]{margin-right:8px;font-size:14px}.VPOutlineDropdown[data-v-a6f0e41e]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-a6f0e41e]{padding:12px 32px 11px}}.VPSwitch[data-v-1d5665e3]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-1d5665e3]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-1d5665e3]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-1d5665e3]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-1d5665e3] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-1d5665e3] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-d1f28634]{opacity:1}.moon[data-v-d1f28634],.dark .sun[data-v-d1f28634]{opacity:0}.dark .moon[data-v-d1f28634]{opacity:1}.dark .VPSwitchAppearance[data-v-d1f28634] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-e6aabb21]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-e6aabb21]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-43f1e123]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-43f1e123]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-43f1e123]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-43f1e123]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-69e747b5]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-69e747b5]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-69e747b5]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-69e747b5]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-e7ea1737]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-e7ea1737] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-e7ea1737] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-e7ea1737] .group:last-child{padding-bottom:0}.VPMenu[data-v-e7ea1737] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-e7ea1737] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-e7ea1737] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-e7ea1737] .action{padding-left:24px}.VPFlyout[data-v-b6c34ac9]{position:relative}.VPFlyout[data-v-b6c34ac9]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-b6c34ac9]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-b6c34ac9]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-b6c34ac9]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-b6c34ac9]{color:var(--vp-c-brand-2)}.VPFlyout:hover .menu[data-v-b6c34ac9],.button[aria-expanded=true]+.menu[data-v-b6c34ac9]{opacity:1;visibility:visible;transform:translateY(0)}.button[aria-expanded=false]+.menu[data-v-b6c34ac9]{opacity:0;visibility:hidden;transform:translateY(0)}.button[data-v-b6c34ac9]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-b6c34ac9]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-b6c34ac9]{margin-right:0;font-size:16px}.text-icon[data-v-b6c34ac9]{margin-left:4px;font-size:14px}.icon[data-v-b6c34ac9]{font-size:20px;transition:fill .25s}.menu[data-v-b6c34ac9]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-eee4e7cb]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-eee4e7cb]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-eee4e7cb]>svg,.VPSocialLink[data-v-eee4e7cb]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-7bc22406]{display:flex;justify-content:center}.VPNavBarExtra[data-v-d0bd9dde]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-d0bd9dde]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-d0bd9dde]{display:none}}.trans-title[data-v-d0bd9dde]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-d0bd9dde],.item.social-links[data-v-d0bd9dde]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-d0bd9dde]{min-width:176px}.appearance-action[data-v-d0bd9dde]{margin-right:-2px}.social-links-list[data-v-d0bd9dde]{margin:-4px -8px}.VPNavBarHamburger[data-v-e5dd9c1c]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-e5dd9c1c]{display:none}}.container[data-v-e5dd9c1c]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-e5dd9c1c]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-e5dd9c1c]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-e5dd9c1c]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-e5dd9c1c]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-e5dd9c1c]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-e5dd9c1c]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-e5dd9c1c],.VPNavBarHamburger.active:hover .middle[data-v-e5dd9c1c],.VPNavBarHamburger.active:hover .bottom[data-v-e5dd9c1c]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-e5dd9c1c],.middle[data-v-e5dd9c1c],.bottom[data-v-e5dd9c1c]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-e5dd9c1c]{top:0;left:0;transform:translate(0)}.middle[data-v-e5dd9c1c]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-e5dd9c1c]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-9c663999]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-9c663999],.VPNavBarMenuLink[data-v-9c663999]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-7f418b0f]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-7f418b0f]{display:flex}}/*! @docsearch/css 3.6.0 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 rgba(3,4,9,.30196078431372547);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;padding:0 0 2px;border:0;top:-1px;width:20px}.DocSearch-Button-Key--pressed{transform:translate3d(0,1px,0);box-shadow:var(--docsearch-key-pressed-shadow)}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;color:var(--docsearch-muted-color);border:0;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button-Key--pressed{transform:none;box-shadow:none}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand-1);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.DocSearch-Search-Icon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088-4.088-4.088A7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653z'/%3E%3C/svg%3E")}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-0394ad82]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-0394ad82]{display:flex;align-items:center}}.title[data-v-ab179fa1]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-ab179fa1]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-ab179fa1]{border-bottom-color:var(--vp-c-divider)}}[data-v-ab179fa1] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-88af2de4]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-88af2de4]{display:flex;align-items:center}}.title[data-v-88af2de4]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-ccf7ddec]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .5s}.VPNavBar[data-v-ccf7ddec]:not(.home){background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar[data-v-ccf7ddec]:not(.home){background-color:transparent}.VPNavBar[data-v-ccf7ddec]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-ccf7ddec]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-ccf7ddec]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-ccf7ddec]{padding:0}}.container[data-v-ccf7ddec]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-ccf7ddec],.container>.content[data-v-ccf7ddec]{pointer-events:none}.container[data-v-ccf7ddec] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-ccf7ddec]{max-width:100%}}.title[data-v-ccf7ddec]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-ccf7ddec]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-ccf7ddec]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-ccf7ddec]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-ccf7ddec]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-ccf7ddec]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-ccf7ddec]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.home.top) .content-body[data-v-ccf7ddec]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-ccf7ddec]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-ccf7ddec]{column-gap:.5rem}}.menu+.translations[data-v-ccf7ddec]:before,.menu+.appearance[data-v-ccf7ddec]:before,.menu+.social-links[data-v-ccf7ddec]:before,.translations+.appearance[data-v-ccf7ddec]:before,.appearance+.social-links[data-v-ccf7ddec]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-ccf7ddec]:before,.translations+.appearance[data-v-ccf7ddec]:before{margin-right:16px}.appearance+.social-links[data-v-ccf7ddec]:before{margin-left:16px}.social-links[data-v-ccf7ddec]{margin-right:-8px}.divider[data-v-ccf7ddec]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-ccf7ddec]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-ccf7ddec]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-ccf7ddec]{width:100%;height:1px;transition:background-color .5s}.VPNavBar:not(.home) .divider-line[data-v-ccf7ddec]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.home.top) .divider-line[data-v-ccf7ddec]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-ccf7ddec]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-2d7af913]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-2d7af913]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-7f31e1f6]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-7f31e1f6]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-19976ae1]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-19976ae1]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-8133b170]{display:block}.title[data-v-8133b170]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-ff6087d4]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-ff6087d4]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-ff6087d4]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-ff6087d4]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-ff6087d4]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-ff6087d4]{transform:rotate(45deg)}.button[data-v-ff6087d4]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-ff6087d4]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-ff6087d4]{transition:transform .25s}.group[data-v-ff6087d4]:first-child{padding-top:0}.group+.group[data-v-ff6087d4],.group+.item[data-v-ff6087d4]{padding-top:4px}.VPNavScreenTranslations[data-v-858fe1a4]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-858fe1a4]{height:auto}.title[data-v-858fe1a4]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-858fe1a4]{font-size:16px}.icon.lang[data-v-858fe1a4]{margin-right:8px}.icon.chevron[data-v-858fe1a4]{margin-left:4px}.list[data-v-858fe1a4]{padding:4px 0 0 24px}.link[data-v-858fe1a4]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-cc5739dd]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 1px);right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .5s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-cc5739dd],.VPNavScreen.fade-leave-active[data-v-cc5739dd]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-cc5739dd],.VPNavScreen.fade-leave-active .container[data-v-cc5739dd]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-cc5739dd],.VPNavScreen.fade-leave-to[data-v-cc5739dd]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-cc5739dd],.VPNavScreen.fade-leave-to .container[data-v-cc5739dd]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-cc5739dd]{display:none}}.container[data-v-cc5739dd]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-cc5739dd],.menu+.appearance[data-v-cc5739dd],.translations+.appearance[data-v-cc5739dd]{margin-top:24px}.menu+.social-links[data-v-cc5739dd]{margin-top:16px}.appearance+.social-links[data-v-cc5739dd]{margin-top:16px}.VPNav[data-v-ae24b3ad]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-ae24b3ad]{position:fixed}}.VPSidebarItem.level-0[data-v-b8d55f3b]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-b8d55f3b]{padding-bottom:10px}.item[data-v-b8d55f3b]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-b8d55f3b]{cursor:pointer}.indicator[data-v-b8d55f3b]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-b8d55f3b],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-b8d55f3b],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-b8d55f3b],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-b8d55f3b]{background-color:var(--vp-c-brand-1)}.link[data-v-b8d55f3b]{display:flex;align-items:center;flex-grow:1}.text[data-v-b8d55f3b]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-b8d55f3b]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-b8d55f3b],.VPSidebarItem.level-2 .text[data-v-b8d55f3b],.VPSidebarItem.level-3 .text[data-v-b8d55f3b],.VPSidebarItem.level-4 .text[data-v-b8d55f3b],.VPSidebarItem.level-5 .text[data-v-b8d55f3b]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-b8d55f3b],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-b8d55f3b],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-b8d55f3b],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-b8d55f3b],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-b8d55f3b],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-b8d55f3b]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-b8d55f3b],.VPSidebarItem.level-1.has-active>.item>.text[data-v-b8d55f3b],.VPSidebarItem.level-2.has-active>.item>.text[data-v-b8d55f3b],.VPSidebarItem.level-3.has-active>.item>.text[data-v-b8d55f3b],.VPSidebarItem.level-4.has-active>.item>.text[data-v-b8d55f3b],.VPSidebarItem.level-5.has-active>.item>.text[data-v-b8d55f3b],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-b8d55f3b],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-b8d55f3b],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-b8d55f3b],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-b8d55f3b],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-b8d55f3b],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-b8d55f3b]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-b8d55f3b],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-b8d55f3b],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-b8d55f3b],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-b8d55f3b],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-b8d55f3b],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-b8d55f3b]{color:var(--vp-c-brand-1)}.caret[data-v-b8d55f3b]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-b8d55f3b]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-b8d55f3b]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-b8d55f3b]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-b8d55f3b]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-b8d55f3b],.VPSidebarItem.level-2 .items[data-v-b8d55f3b],.VPSidebarItem.level-3 .items[data-v-b8d55f3b],.VPSidebarItem.level-4 .items[data-v-b8d55f3b],.VPSidebarItem.level-5 .items[data-v-b8d55f3b]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-b8d55f3b]{display:none}.VPSidebar[data-v-575e6a36]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-575e6a36]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-575e6a36]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-575e6a36]{padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-575e6a36]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-575e6a36]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-575e6a36]{outline:0}.group+.group[data-v-575e6a36]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-575e6a36]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSkipLink[data-v-0f60ec36]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-0f60ec36]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-0f60ec36]{top:14px;left:16px}}.Layout[data-v-5d98c3a5]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-3d121b4a]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPHomeSponsors[data-v-3d121b4a]{margin:96px 0}@media (min-width: 768px){.VPHomeSponsors[data-v-3d121b4a]{margin:128px 0}}.VPHomeSponsors[data-v-3d121b4a]{padding:0 24px}@media (min-width: 768px){.VPHomeSponsors[data-v-3d121b4a]{padding:0 48px}}@media (min-width: 960px){.VPHomeSponsors[data-v-3d121b4a]{padding:0 64px}}.container[data-v-3d121b4a]{margin:0 auto;max-width:1152px}.love[data-v-3d121b4a]{margin:0 auto;width:fit-content;font-size:28px;color:var(--vp-c-text-3)}.icon[data-v-3d121b4a]{display:inline-block}.message[data-v-3d121b4a]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-3d121b4a]{padding-top:32px}.action[data-v-3d121b4a]{padding-top:40px;text-align:center}.VPTeamPage[data-v-7c57f839]{margin:96px 0}@media (min-width: 768px){.VPTeamPage[data-v-7c57f839]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-7c57f839-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamPageSection+.VPTeamPageSection[data-v-7c57f839-s],.VPTeamMembers+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-7c57f839-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-7c57f839-s],.VPTeamMembers+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:96px}}.VPTeamMembers[data-v-7c57f839-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-7c57f839-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-7c57f839-s]{padding:0 64px}}.VPTeamPageTitle[data-v-bf2cbdac]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-bf2cbdac]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-bf2cbdac]{padding:80px 64px 48px}}.title[data-v-bf2cbdac]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-bf2cbdac]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-bf2cbdac]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-bf2cbdac]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-b1a88750]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-b1a88750]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-b1a88750]{padding:0 64px}}.title[data-v-b1a88750]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-b1a88750]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-b1a88750]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-b1a88750]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-b1a88750]{padding-top:40px}.VPTeamMembersItem[data-v-f3fa364a]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-f3fa364a]{padding:32px}.VPTeamMembersItem.small .data[data-v-f3fa364a]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-f3fa364a]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-f3fa364a]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-f3fa364a]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-f3fa364a]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-f3fa364a]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-f3fa364a]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-f3fa364a]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-f3fa364a]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-f3fa364a]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-f3fa364a]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-f3fa364a]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-f3fa364a]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-f3fa364a]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-f3fa364a]{text-align:center}.avatar[data-v-f3fa364a]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-f3fa364a]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-f3fa364a]{margin:0;font-weight:600}.affiliation[data-v-f3fa364a]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-f3fa364a]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-f3fa364a]:hover{color:var(--vp-c-brand-1)}.desc[data-v-f3fa364a]{margin:0 auto}.desc[data-v-f3fa364a] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-f3fa364a]{display:flex;justify-content:center;height:56px}.sp-link[data-v-f3fa364a]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-f3fa364a]:hover,.sp .sp-link.link[data-v-f3fa364a]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-f3fa364a]{margin-right:8px;font-size:16px}.VPTeamMembers.small .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-6cb0dbc4]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-6cb0dbc4]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-6cb0dbc4]{max-width:876px}.VPTeamMembers.medium .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-6cb0dbc4]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-6cb0dbc4]{max-width:760px}.container[data-v-6cb0dbc4]{display:grid;gap:24px;margin:0 auto;max-width:1152px}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: rgba(60, 60, 67);--vp-c-text-2: rgba(60, 60, 67, .78);--vp-c-text-3: rgba(60, 60, 67, .56)}.dark{--vp-c-text-1: rgba(255, 255, 245, .86);--vp-c-text-2: rgba(235, 235, 245, .6);--vp-c-text-3: rgba(235, 235, 245, .38)}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft)}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1)}:root{--vp-home-hero-name-color: transparent;--vp-home-hero-name-background: -webkit-linear-gradient( 120deg, #bd34fe 30%, #41d1ff );--vp-home-hero-image-background-image: linear-gradient( -45deg, #bd34fe 50%, #47caff 50% );--vp-home-hero-image-filter: blur(44px)}@media (min-width: 640px){:root{--vp-home-hero-image-filter: blur(56px)}}@media (min-width: 960px){:root{--vp-home-hero-image-filter: blur(68px)}}:root{--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-brand-soft);--vp-custom-block-tip-code-bg: var(--vp-c-brand-soft)}.DocSearch{--docsearch-primary-color: var(--vp-c-brand-1) !important}tr[data-v-62a102f3]:nth-child(1){color:#a8b1ff}.VPLocalSearchBox[data-v-639d7ab9]{position:fixed;z-index:100;top:0;right:0;bottom:0;left:0;display:flex}.backdrop[data-v-639d7ab9]{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--vp-backdrop-bg-color);transition:opacity .5s}.shell[data-v-639d7ab9]{position:relative;padding:12px;margin:64px auto;display:flex;flex-direction:column;gap:16px;background:var(--vp-local-search-bg);width:min(100vw - 60px,900px);height:min-content;max-height:min(100vh - 128px,900px);border-radius:6px}@media (max-width: 767px){.shell[data-v-639d7ab9]{margin:0;width:100vw;height:100vh;max-height:none;border-radius:0}}.search-bar[data-v-639d7ab9]{border:1px solid var(--vp-c-divider);border-radius:4px;display:flex;align-items:center;padding:0 12px;cursor:text}@media (max-width: 767px){.search-bar[data-v-639d7ab9]{padding:0 8px}}.search-bar[data-v-639d7ab9]:focus-within{border-color:var(--vp-c-brand-1)}.local-search-icon[data-v-639d7ab9]{display:block;font-size:18px}.navigate-icon[data-v-639d7ab9]{display:block;font-size:14px}.search-icon[data-v-639d7ab9]{margin:8px}@media (max-width: 767px){.search-icon[data-v-639d7ab9]{display:none}}.search-input[data-v-639d7ab9]{padding:6px 12px;font-size:inherit;width:100%}@media (max-width: 767px){.search-input[data-v-639d7ab9]{padding:6px 4px}}.search-actions[data-v-639d7ab9]{display:flex;gap:4px}@media (any-pointer: coarse){.search-actions[data-v-639d7ab9]{gap:8px}}@media (min-width: 769px){.search-actions.before[data-v-639d7ab9]{display:none}}.search-actions button[data-v-639d7ab9]{padding:8px}.search-actions button[data-v-639d7ab9]:not([disabled]):hover,.toggle-layout-button.detailed-list[data-v-639d7ab9]{color:var(--vp-c-brand-1)}.search-actions button.clear-button[data-v-639d7ab9]:disabled{opacity:.37}.search-keyboard-shortcuts[data-v-639d7ab9]{font-size:.8rem;opacity:75%;display:flex;flex-wrap:wrap;gap:16px;line-height:14px}.search-keyboard-shortcuts span[data-v-639d7ab9]{display:flex;align-items:center;gap:4px}@media (max-width: 767px){.search-keyboard-shortcuts[data-v-639d7ab9]{display:none}}.search-keyboard-shortcuts kbd[data-v-639d7ab9]{background:#8080801a;border-radius:4px;padding:3px 6px;min-width:24px;display:inline-block;text-align:center;vertical-align:middle;border:1px solid rgba(128,128,128,.15);box-shadow:0 2px 2px #0000001a}.results[data-v-639d7ab9]{display:flex;flex-direction:column;gap:6px;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.result[data-v-639d7ab9]{display:flex;align-items:center;gap:8px;border-radius:4px;transition:none;line-height:1rem;border:solid 2px var(--vp-local-search-result-border);outline:none}.result>div[data-v-639d7ab9]{margin:12px;width:100%;overflow:hidden}@media (max-width: 767px){.result>div[data-v-639d7ab9]{margin:8px}}.titles[data-v-639d7ab9]{display:flex;flex-wrap:wrap;gap:4px;position:relative;z-index:1001;padding:2px 0}.title[data-v-639d7ab9]{display:flex;align-items:center;gap:4px}.title.main[data-v-639d7ab9]{font-weight:500}.title-icon[data-v-639d7ab9]{opacity:.5;font-weight:500;color:var(--vp-c-brand-1)}.title svg[data-v-639d7ab9]{opacity:.5}.result.selected[data-v-639d7ab9]{--vp-local-search-result-bg: var(--vp-local-search-result-selected-bg);border-color:var(--vp-local-search-result-selected-border)}.excerpt-wrapper[data-v-639d7ab9]{position:relative}.excerpt[data-v-639d7ab9]{opacity:75%;pointer-events:none;max-height:140px;overflow:hidden;position:relative;opacity:.5;margin-top:4px}.result.selected .excerpt[data-v-639d7ab9]{opacity:1}.excerpt[data-v-639d7ab9] *{font-size:.8rem!important;line-height:130%!important}.titles[data-v-639d7ab9] mark,.excerpt[data-v-639d7ab9] mark{background-color:var(--vp-local-search-highlight-bg);color:var(--vp-local-search-highlight-text);border-radius:2px;padding:0 2px}.excerpt[data-v-639d7ab9] .vp-code-group .tabs{display:none}.excerpt[data-v-639d7ab9] .vp-code-group div[class*=language-]{border-radius:8px!important}.excerpt-gradient-bottom[data-v-639d7ab9]{position:absolute;bottom:-1px;left:0;width:100%;height:8px;background:linear-gradient(transparent,var(--vp-local-search-result-bg));z-index:1000}.excerpt-gradient-top[data-v-639d7ab9]{position:absolute;top:-1px;left:0;width:100%;height:8px;background:linear-gradient(var(--vp-local-search-result-bg),transparent);z-index:1000}.result.selected .titles[data-v-639d7ab9],.result.selected .title-icon[data-v-639d7ab9]{color:var(--vp-c-brand-1)!important}.no-results[data-v-639d7ab9]{font-size:.9rem;text-align:center;padding:12px}svg[data-v-639d7ab9]{flex:none} diff --git a/assets/v1_index.md.DgSN7Q7Q.js b/assets/v1_index.md.DgSN7Q7Q.js new file mode 100644 index 00000000..8a7bc947 --- /dev/null +++ b/assets/v1_index.md.DgSN7Q7Q.js @@ -0,0 +1,78 @@ +import{_ as s,c as i,o as a,a4 as t}from"./chunks/framework.Cmp6zcjC.js";const c=JSON.parse('{"title":"Gridify (v1)","description":"","frontmatter":{"search":false},"headers":[],"relativePath":"v1/index.md","filePath":"v1/index.md"}'),e={name:"v1/index.md"},n=t(`

Gridify (v1)

DANGER

Gridify version 1.x.x is no longer maintained. you should consider upgrading to the latest version.

The source code of this version is available on version-1.x

Introduction

Easy and optimized way to apply Filtering, Sorting and pagination using text-based data.

The best use case of this library is Asp-net APIs. when you need to get some string base filtering conditions to filter data or sort it by a field name or apply pagination concepts to your lists and return a pageable, data grid ready information, from any repository or database.


WebApi Simple Usage example

c#
// ApiController
+
+[Produces(typeof(Paging<Person>))]
+public IActionResult GetPersons([FromQuery] GridifyQuery gQuery)
+{
+    // Gridify => Filter,Sort & Apply Paging
+    // in short, Gridify returns data especially for data Grids.
+    return myDbContext.Persons.Gridify(gQuery);
+}

complete request sample:

txt
http://exampleDomain.com/api/GetPersons?pageSize=100&page=1&sortBy=FirstName&isSortAsc=false&filter=Age%3D%3D10

also we can totally ignore GridifyQuery

txt
http://exampleDomain.com/api/GetPersons

What is GridifyQuery (basic usage example)

GridifyQuery is a simple class for configuring Filtering,Paging,Sorting.

c#
// usually, we don't need to create this object manually
+// for example, we get this object as a parameter from our API Controller
+var gQuery = new GridifyQuery()
+{
+    Filter = "FirstName==John",
+    IsSortAsc = false,
+    Page = 1,
+    PageSize = 20,
+    SortBy = "LastName"
+};
+
+Paging<Person> pData =
+         myDbContext.Persons  // we can use Any list or repository or EntityFramework context
+          .Gridify(gQuery); // Filter,Sort & Apply Paging
+
+
+// pData.TotalItems => Count persons with 'John', First name
+// pData.Items      => First 20 Persons with 'John', First Name

ApplyFiltering

Also, if you don't need paging and sorting features simply use ApplyFiltering extension instead of Gridify.

c#
var query = myDbContext.Persons.ApplyFiltering("name == John");
+// this is equal to :
+// myDbContext.Persons.Where(p => p.Name == "John");

see more examples in the tests


Performance comparison

Filtering is the most expensive feature in gridify. the below benchmark is comparing filtering in the most known dynamic linq libraries. as you can see, gridify has the closest result to the native linq. also, I Should note other features like Pagination and Sorting has almost zero overhead in Gridify.

BenchmarkDotNet=v0.13.0, OS=Windows 10.0.19043.1110 (21H1/May2021Update) 11th Gen Intel Core i5-11400F 2.60GHz, 1 CPU, 12 logical and 6 physical cores .NET SDK=5.0.301 [Host] : .NET 5.0.7 (5.0.721.25508), X64 RyuJIT

MethodMeanErrorStdDevRatioRatioSDGen 0Gen 1Allocated
Native Linq869.3 us10.54 us9.86 us1.000.005.85942.929736 KB
Gridify928.1 us13.41 us11.89 us1.070.026.83592.929746 KB
Dynamic Linq1,068.5 us10.66 us9.97 us1.230.0219.53139.7656122 KB
Sieve1,126.8 us10.73 us10.04 us1.300.028.78913.906354 KB

Installation

Install the Gridify NuGet Package.

Package Manager Console

Install-Package Gridify

.NET Core CLI

dotnet add package Gridify

Extensions

The library adds below extension methods to IQueryable:

ExtensionDescription
ApplyFiltering (string)Apply Filtering using a raw string and returns an IQueryable<T>
ApplyFiltering (GridifyQuery)Apply Filtering using string Filter property of GridifyQuery class and returns an IQueryable<T>
ApplyOrderingApply Ordering using string SortBy and bool IsSortAsc properties of GridifyQuery class and returns an IQueryable<T>
ApplyPagingApply paging using short Page and int PageSize properties of GridifyQuery class and returns an IQueryable<T>
ApplyOrderingAndPagingApply Both Ordering and paging and returns an IQueryable<T>
ApplyFilterAndOrderingApply Both Filtering and Ordering and returns an IQueryable<T>
ApplyEverythingApply Filtering,Ordering and paging and returns an IQueryable<T>
GridifyQueryableLike ApplyEverything but it returns a QueryablePaging<T> that have an extra int totalItems property to use for pagination
GridifyReceives a GridifyQuery ,Load All requested data and returns Paging<T>

TIP:

Gridify function is an ALL-IN-ONE package, that applies filtering and ordering and paging to your data and returns a Paging<T>,

but for example, if you need to just filter your data without paging or sorting options you can use ApplyFiltering function instead.


Supported Filtering Operators

NameOperatorUsage example
Equal=="FieldName ==Value"
NotEqual!="FieldName !=Value"
LessThan<"FieldName < Value"
GreaterThan>"FieldName > Value"
GreaterThanOrEqual>="FieldName >=Value"
LessThanOrEqual<="FieldName <=Value"
Contains - Like=*"FieldName =*Value"
NotContains - NotLike!*"FieldName !*Value"
StartsWith^"FieldName ^ Value"
NotStartsWith!^"FieldName !^ Value"
EndsWith$"FieldName $ Value"
NotEndsWith!$"FieldName !$ Value"
AND - &&,"FirstName ==Value, LastName ==Value2"
OR - |||"FirstName==Value|LastName==Value2"
Parenthesis()"(FirstName=*Jo,Age<30)|(FirstName!=Hn,Age>30)"

we can easily create complex queries using Parenthesis() with AND (,) + OR (|) operators.

Escape character hint:

Filtering has four special character , | ( ) to handle complex queries. if you want to use these characters in your query values (after ==), you should add a backslash \\ before them.

JavaScript escape example:

javascript
let esc = (v) => v.replace(/([(),|])/g, '\\\\$1')

Csharp escape example:

csharp
var value = "(test,test2)";
+var esc = Regex.Replace(value, "([(),|])", "\\\\$1" ); // esc = \\(test\\,test2\\)

Custom Mapping Support

By default Gridify is using a GridifyMapper object that automatically maps your string based field names to actual properties in your Entities but if you have a custom DTO (Data Transfer Object) you can create a custom instance of GridifyMapper and use it to create your mappings.

c#
// example Entities
+public class Person
+{
+    public string FirstName {get;set;}
+    public string LastName {get;set;}
+    public Contact Contact {get;set;}
+
+}
+public class Contact
+{
+    public string Address {get;set;}
+    public int PhoneNumber {get;set;}
+}
+
+// example DTO
+public class PersonDTO
+{
+   public string FirstName {get;set;}
+   public string LastName {get;set;}
+
+   public string Address {get;set;}
+   public int PhoneNumber {get;set;}
+}
+
+//// GridifyMapper Usage example -------------
+
+var customMappings = new GridifyMapper<Person>()
+        // because FirstName and LastName is exists in both DTO and Entity classes we can Generate them
+        .GenerateMappings()
+        // add custom mappings
+        .AddMap("address", q => q.Contact.Address )
+        .AddMap("PhoneNumber", q => q.Contact.PhoneNumber );
+
+
+// as i mentioned before. usually we don't need create this object manually.
+var gQuery = new GridifyQuery()
+{
+    Filter = "FirstName==John,Address=*st",
+    IsSortAsc = true,
+    SortBy = "PhoneNumber"
+};
+
+// myRepository: could be entity framework context or any other collections
+var gridifiedData = myRepository.Persons.Gridify(gQuery, customMappings);

by default GridifyMapper is Case-insensitive but you can change this behavior if you need Case-Sensitive mappings.

c#
var customMappings = new GridifyMapper<Person>(true); // mapper is case-sensitive now.

Combine Gridify with AutoMapper

c#
//AutoMapper ProjectTo + Filtering Only, example
+var query = myDbContext.Persons.ApplyFiltering(gridifyQuery);
+var result = query.ProjectTo<PersonDTO>().ToList();
+
+// AutoMapper ProjectTo + Filtering + Ordering + Paging, example
+QueryablePaging<Person> qp = myDbContext.Persons.GridifyQueryable(gridifyQuery);
+var result = new Paging<Person> () { Items = qp.Query.ProjectTo<PersonDTO>().ToList (), TotalItems = qp.TotalItems };

EntityFramework integration

if you need to use gridify async feature for entityFramework Core, use Gridify.EntityFramework package instead.

this package have two additional GridifyAsync() and GridifyQueryableAsync() functions.

shell
dotnet add package Gridify.EntityFramework

Contribution

Any Contribution to improve documentation and library is appreciated feel free to send pull-Request. ❤️

`,66),l=[n];function h(p,r,d,k,o,g){return a(),i("div",null,l)}const E=s(e,[["render",h]]);export{c as __pageData,E as default}; diff --git a/assets/v1_index.md.DgSN7Q7Q.lean.js b/assets/v1_index.md.DgSN7Q7Q.lean.js new file mode 100644 index 00000000..254f742c --- /dev/null +++ b/assets/v1_index.md.DgSN7Q7Q.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a4 as t}from"./chunks/framework.Cmp6zcjC.js";const c=JSON.parse('{"title":"Gridify (v1)","description":"","frontmatter":{"search":false},"headers":[],"relativePath":"v1/index.md","filePath":"v1/index.md"}'),e={name:"v1/index.md"},n=t("",66),l=[n];function h(p,r,d,k,o,g){return a(),i("div",null,l)}const E=s(e,[["render",h]]);export{c as __pageData,E as default}; diff --git a/contribution/index.html b/contribution/index.html new file mode 100644 index 00000000..3587c77c --- /dev/null +++ b/contribution/index.html @@ -0,0 +1,39 @@ + + + + + + Contribute to the project | Gridify + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

Contribute to the project

Any kind of contribution is welcome.

start contributing to the project by submitting pull requests

Todos

  • ⚡ Add more Examples/use-case to the documentation
  • ⚡ Resolve open issues
  • ⚡ Improve the documentation site
  • ⚡ Improve code documentation (summary)
  • ⚡ Add project Security Policy

Documentation

Gridify documentation is powered by vuePress, All the markdown source files are placed in docs directory.

by running the following commands, you can check the documentation site locally:

shell
yarn install
+yarn dev
shell
npm install
+npm run dev

How to contribute

check out the github contributing guide

Contributors

Thank you to everyone who has contributed to the Gridify codebase. We appreciate you!

+ + + + \ No newline at end of file diff --git a/example/api-controller.html b/example/api-controller.html new file mode 100644 index 00000000..ace65281 --- /dev/null +++ b/example/api-controller.html @@ -0,0 +1,51 @@ + + + + + + Using Gridify in API Controllers | Gridify + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

Using Gridify in API Controllers

When working with ASP.NET APIs, especially when you need to apply string-based filtering conditions, sorting based on field names, or implementing pagination functionality, the Gridify library is a valuable tool. It can be used in any .NET project and with any type of collection, not just limited to ASP.NET projects.

To demonstrate the core concepts of Gridify, let's look at a simple implementation in the following example.

Describing the Scenario

Imagine you have an API that returns a list of users. You want to use this API in your client-side application to display a list of users.

csharp
// UserController
+// ...
+public IEnumerable<User> GetUsers()
+{
+    // context can be Entity Framework, a repository, or whatever.
+    return context.Users.ToList();
+}

However, there are a few challenges:

  • The end-user may want to sort the list by name, age, or any other property.
  • The end-user may want to filter the list by name, age, or any other property.
  • Fetching the entire list of users is not efficient, so you need to add pagination.
  • Returning a list of page size N is not enough. You also need to know the total number of users.

Implementing these features can be complex and messy. If you want to support multiple properties, you would need to write a lot of code with if-else statements. This is where Gridify comes in.

Solving Problems Using Gridify

With Gridify, you can simplify your code and implement the required features in just a few lines:

csharp
public Paging<User> GetUsers([FromQuery] GridifyQuery query)
+{
+    return context.Users.Gridify(query);
+}

Gridify handles all the complexity behind the scenes.

What is the Paging Return Value?

The Paging class is a generic Data Transfer Object (DTO) that has two properties:

csharp
public int Count { get; set; }
+public IEnumerable<T> Data { get; set; }

The Count property indicates the total number of records, while the Data property contains the records on the current page.

What is GridifyQuery?

GridifyQuery is a class that represents the query parameters passed to the Gridify method.

Learn more about GridifyQuery.

Sample Request Query String

Please note that this URL is not encoded. Always remember to encode query strings before passing them to your APIs.

http://exampleDomain.com/api/GetUsers?
+          pageSize=100&
+          page=1&
+          orderBy=FirstName&
+          filter=Age>10

Alternatively, you can ignore the GridifyQuery and use the default pagination values, which are pageSize=20 and page=1.

http://exampleDomain.com/api/GetUsers

More Information

TIP

  • If you want to control which fields are supported for filtering or ordering, you can use the GridifyMapper class.
  • All Gridify extension methods accept a GridifyMapper instance as a parameter.
  • If you want to learn more about the filtering and ordering syntax, be sure to read the related documentation.
+ + + + \ No newline at end of file diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 00000000..e281f581 Binary files /dev/null and b/favicon.ico differ diff --git a/gridify-dark-logo.svg b/gridify-dark-logo.svg new file mode 100644 index 00000000..5591240a --- /dev/null +++ b/gridify-dark-logo.svg @@ -0,0 +1 @@ +gridify-dark-logo \ No newline at end of file diff --git a/gridify-dark-logo2.svg b/gridify-dark-logo2.svg new file mode 100644 index 00000000..955bad8a --- /dev/null +++ b/gridify-dark-logo2.svg @@ -0,0 +1 @@ +gridify-dark-logo \ No newline at end of file diff --git a/gridify-light-logo.svg b/gridify-light-logo.svg new file mode 100644 index 00000000..6661a164 --- /dev/null +++ b/gridify-light-logo.svg @@ -0,0 +1 @@ +gridify-light-logo \ No newline at end of file diff --git a/gridify-light-logo2.svg b/gridify-light-logo2.svg new file mode 100644 index 00000000..935f315f --- /dev/null +++ b/gridify-light-logo2.svg @@ -0,0 +1 @@ +gridify-light-logo \ No newline at end of file diff --git a/gridify-readme-logo.svg b/gridify-readme-logo.svg new file mode 100644 index 00000000..30162c95 --- /dev/null +++ b/gridify-readme-logo.svg @@ -0,0 +1 @@ +gridify-readme-logo \ No newline at end of file diff --git a/guide/autoMapper.html b/guide/autoMapper.html new file mode 100644 index 00000000..b6750d07 --- /dev/null +++ b/guide/autoMapper.html @@ -0,0 +1,52 @@ + + + + + + AutoMapper | Gridify + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

AutoMapper

Gridify is completely compatible with AutoMapper. Also, these two packages can help each other nicely. We can use Gridify for filtering, sorting, and paging and AutoMapper for the projection.

csharp
// AutoMapper ProjectTo + Filtering Only, example
+var query = personRepo.ApplyFiltering(gridifyQuery);
+var result = query.ProjectTo<PersonDTO>().ToList();
csharp
// AutoMapper ProjectTo + Filtering + Ordering + Paging, example
+QueryablePaging<Person> qp = personRepo.GridifyQueryable(gridifyQuery);
+var result = new Paging<Person>(qp.Count, qp.Query.ProjectTo<PersonDTO>().ToList());

GridifyTo!

Filtering, Ordering, Paging, and Projection are all done with GridifyTo.

Gridify library does not have a built-in GridifyTo extension method because we don't want to have AutoMapper dependency. but if you are using AutoMapper in your project, I recommend you to add the bellow extension method to your project.

csharp
public static Paging<TDestination> GridifyTo<TSource, TDestination>(
+   this IQueryable<TSource> query, IMapper autoMapper, IGridifyQuery gridifyQuery, IGridifyMapper<TSource> mapper = null)
+{
+   var res = query.GridifyQueryable(gridifyQuery, mapper);
+   return new Paging<TDestination>(res.Count, res.Query.ProjectTo<TDestination>(autoMapper.ConfigurationProvider).ToList());
+}
csharp
// only if you have Gridify.EntityFramework package installed.
+public static async Task<Paging<TDestination>> GridifyToAsync<TSource, TDestination>(
+   this IQueryable<TSource> query, IMapper autoMapper, IGridifyQuery gridifyQuery, IGridifyMapper<TSource> mapper = null)
+{
+   var res = await query.GridifyQueryableAsync(gridifyQuery, mapper);
+   return new Paging<TDestination>(res.Count, await res.Query.ProjectTo<TDestination>(autoMapper.ConfigurationProvider).ToListAsync());
+}
+ + + + \ No newline at end of file diff --git a/guide/compile.html b/guide/compile.html new file mode 100644 index 00000000..f1c48083 --- /dev/null +++ b/guide/compile.html @@ -0,0 +1,50 @@ + + + + + + Compile and Reuse | Gridify + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

Compile and Reuse

You can access Gridify generated expressions using the GetFilteringExpression of GridifyQuery or BuildCompiled methods of QueryBuilder class, by storing an expression you can use it multiple times without having any overheads, also if you store a compiled expression you get a massive performance boost.

WARNING

You should only use a compiled expression (delegate) if you are not using Gridify alongside an ORM like Entity-Framework.

csharp
// eg.1 - using GridifyQuery - Compiled - where only
+var gq = new GridifyQuery() { Filter = "name=John" };
+var expression = gq.GetFilteringExpression<Person>();
+var compiledExpression = expression.Compile();
+var result = persons.Where(compiledExpression);
csharp
// eg.2 - using QueryBuilder - Compiled - where only
+var compiledExpression = new QueryBuilder<Person>()
+                         .AddCondition("name=John")
+                         .BuildFilteringExpression()
+                         .Compile();
+var result = persons.Where(compiledExpression);
csharp
// eg.3 - using QueryBuilder - BuildCompiled
+var func = new QueryBuilder<Person>()
+          .AddCondition("name=John")
+          .BuildCompiled();
+var result = func(persons);

Performance

This is the performance improvement example when you use a compiled expression.

MethodMeanRatioRatioSDGen 0Gen 1Allocated
GridifyCompiled1.008 us0.0010.000.1564-984 B
Gridify689.329 us1.0000.005.85942.929739,924 B
NativeLINQ736.854 us1.0190.015.85942.929737,392 B
+ + + + \ No newline at end of file diff --git a/guide/dependency-injection.html b/guide/dependency-injection.html new file mode 100644 index 00000000..6b886189 --- /dev/null +++ b/guide/dependency-injection.html @@ -0,0 +1,96 @@ + + + + + + Dependency Injection | Gridify + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

Dependency Injection

Gridify offers a powerful feature that enables you to streamline data mapping and configurations in your application by integrating with the Dependency Injection (DI) container. By registering your mapping profiles with DI, you can achieve cleaner, more maintainable code and improved separation of concerns. This section provides an overview of how to register your GridifyMapper configurations with DI.

Register GridifyMapper with DI

Registering Gridify mapping with DI is a straightforward process. You'll define mapping profiles for your models and then register them in the DI container. Follow these steps to get started:

1. Define Mapping Profiles

Create mapping profiles by inheriting from GridifyMapper<T>, where T represents the type you want to map. Configure your mappings within these profile classes.

Example:

csharp
public class WeatherForecastGridifyMapper : GridifyMapper<WeatherForecast>
+{
+    public WeatherForecastGridifyMapper()
+    {
+        // Define your mappings here
+        AddMap("summary", q => q.Summary);
+        AddMap("temp", q => q.TemperatureC);
+
+        // optionally you can customize the configuration for each mapper
+        Configuration.CaseSensitive = false;
+        Configuration.AllowNullSearch = true;
+        Configuration.IgnoreNotMappedFields = true;
+
+    }
+}

2. Register Mapping Profiles

Utilize the AddGridifyMappers extension method available on the IServiceCollection to scan your assembly and register all mapping profiles.

Example:

csharp
using Gridify; // Make sure to include the necessary namespace
+// ...
+
+public void ConfigureServices(IServiceCollection services)
+{
+    // Other service registrations
+
+    services.AddGridifyMappers(typeof(Program).Assembly);
+}

3. Inject and Use Mappers

Once you've registered the mapping profiles, you can inject the corresponding IGridifyMapper<T> interfaces into your services or controllers.

Example:

csharp
public class WeatherForecastController : ControllerBase
+{
+    private readonly IGridifyMapper<WeatherForecast> _mapper;
+
+    public WeatherForecastController(IGridifyMapper<WeatherForecast> mapper)
+    {
+        _mapper = mapper;
+    }
+
+   [HttpGet(Name = "GetWeatherForecast")]
+    public Paging<WeatherForecast> Get([FromQuery] GridifyQuery query)
+    {
+        IQueryable<WeatherForecast> result = GetWeatherForecasts();
+
+        // You can pass the mapper to the GridifyExtension
+        return result.Gridify(query, _mapper);
+    }
+}
csharp
public class WeatherForecastController : ControllerBase
+{
+    private readonly IGridifyMapper<WeatherForecast> _mapper;
+
+    public WeatherForecastController(IGridifyMapper<WeatherForecast> mapper)
+    {
+        _mapper = mapper;
+    }
+
+  [HttpGet(Name = "GetWeatherForecast")]
+    public IEnumerable<WeatherForecast> Get([FromQuery] GridifyQuery query)
+    {
+        var result = GetWeatherForecasts();
+
+        var queryBuilder = new QueryBuilder<WeatherForecast>()
+            .UseCustomMapper(_mapper)
+            .AddQuery(query);
+
+        return queryBuilder.Build(result);
+    }
+}
+ + + + \ No newline at end of file diff --git a/guide/extensions.html b/guide/extensions.html new file mode 100644 index 00000000..8738ea25 --- /dev/null +++ b/guide/extensions.html @@ -0,0 +1,37 @@ + + + + + + Extensions | Gridify + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

Extensions

The Gridify library adds the below extension methods to IQueryable objects.

All Gridify extension methods can accept GridifyQuery and GridifyMapper as a parameter. Make sure to check out the documentation of these classes for more information.

TIP

If you want to use Gridify extension methods on an IEnumerable object, use .AsQueryable() first.

ApplyFiltering

You can use this method if you want to only apply filtering on an IQueriable or DbSet.

csharp
var query = personsRepo.ApplyFiltering("name = John");

this is completely equivalent to the below LINQ query:

csharp
var query = personsRepo.Where(p => p.Name == "John");

In the ApplyFiltering method, we can use a raw string to filter the data, which can be generated dynamically or passed by the end-user for example through an API client or console input, but using the Linq Where method, we always have to hard code the query for the supported fields.

Check out the Filtering Operators section for more information.

ApplyOrdering

You can use this method if you want to only apply ordering on an IQueriable collection or DbSet.

csharp
var query = personsRepo.ApplyOrdering("name, age desc");

this is completely equivalent to the below LINQ query:

csharp
var query = personsRepo.OrderBy(x => x.Name).ThenByDescending(x => x.Age);

Check out the Ordering section for more information.

ApplyPaging

You can use this method if you want to only apply paging on an IQueryable collection or DbSet.

csharp
var query = personsRepo.ApplyPaging(3, 20);

this is completely equivalent to the below LINQ query:

csharp
var query = personsRepo.Skip((3-1) * 20).Take(20);

ApplyFilteringAndOrdering

You can use this method if you want to apply filtering and ordering on an IQueryable collection or DbSet. This method accepts IGridifyQuery.

ApplyOrderingAndPaging

You can use this method if you want to apply ordering and paging on an IQueryable collection or DbSet. This method accepts IGridifyQuery.

ApplyFilteringOrderingPaging

You can use this method if you want to apply filtering and ordering and paging on an IQueryable collection or DbSet. This method accepts IGridifyQuery.

GridifyQueryable

Like ApplyFilteringOrderingPaging but it returns a QueryablePaging<T> that has an extra int Count value that can be used for pagination.

Gridify

This is an ALL-IN-ONE package, it accepts IGridifyQuery, applies filtering, ordering, and paging, and returns a Paging<T> object. This method is completely optimized to be used with any Grid component.

+ + + + \ No newline at end of file diff --git a/guide/extensions/elasticsearch.html b/guide/extensions/elasticsearch.html new file mode 100644 index 00000000..2f4eb927 --- /dev/null +++ b/guide/extensions/elasticsearch.html @@ -0,0 +1,184 @@ + + + + + + Elasticsearch | Gridify + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

Elasticsearch

Gridify.Elasticsearch is an extension of Gridify, that provides an ability to generate Elasticsearch DSL queries.

Gridify.Elasticsearch Package

The Gridify.Elasticsearch package has a bunch of extension methods that allow to convert Gridify filters and sortings to Elasticsearch DSL queries using Elastic.Clients.Elasticsearch .NET client.

Installation

Package Manager

shell
Install-Package Gridify.Elasticsearch -Version 2.15.0-preview5

.NET CLI

shell
dotnet add package Gridify.Elasticsearch --version 2.15.0-preview5

Configurations

CustomElasticsearchNamingAction

Specifies how field names are inferred from CLR property names. By default, Elastic.Clients.Elasticsearch uses camel-case property names.

  • If null (default behavior) CLR property EmailAddress will be inferred as emailAddress Elasticsearch document field name.
  • If, e.g., p => p, the CLR property EmailAddress will be inferred as EmailAddress Elasticsearch document field name.

Default

csharp
await client.SearchAsync<User>(s => s
+    .Index("users")
+    .ApplyFiltering("emailAddress = test@test.com"));

this will make the next Elasticsearch query:

json
GET users/_search
+{
+  "query": {
+    "term": {
+      "emailAddress.keyword": {
+        "value": "test@test.com"
+      }
+    }
+  }
+}

Customized:

csharp
GridifyGlobalConfiguration.CustomElasticsearchNamingAction = p => $"_{p}_";
+
+await client.SearchAsync<User>(s => s
+    .Index("users")
+    .ApplyFiltering("emailAddress = test@test.com"));

this will make the next Elasticsearch query:

json
GET users/_search
+{
+  "query": {
+    "term": {
+      "_EmailAddress_.keyword": {
+        "value": "test@test.com"
+      }
+    }
+  }
+}

Examples of usage

Without pre-initialized mapper

csharp
var gq = new GridifyQuery()
+{
+    Filter = "FirstName=John",
+    Page = 1,
+    PageSize = 20,
+    OrderBy = "Age"
+};
+
+var response = await client.SearchAsync<User>(s => s
+    .Index("users")
+    .ApplyPaging(gq)
+    .ApplyFiltering(gp)
+    .ApplyOrdering(gp));
+
+return response.Documents;
json
GET users/_search
+{
+  "query": {
+    "term": {
+      "firstName.keyword": {
+        "value": "John"
+      }
+    }
+  },
+  "from": 0,
+  "size": 20,
+  "sort": [{
+    "age": {
+      "order": "asc"
+    }
+  }]
+}

With custom mapping

csharp
var gq = new GridifyQuery()
+{
+    Filter = "name=John, surname=Smith, age=30, totalOrderPrice=45",
+    Page = 1,
+    PageSize = 20,
+    OrderBy = "Age"
+};
+
+var mapper = new GridifyMapper<User>()
+     .AddMap("name", x => x.FirstName)
+     .AddMap("surname", x => x.LastName)
+     .AddMap("age", x => x.Age)
+     .AddMap("totalOrderPrice", x => x.Order.TotalSum);
+
+var response = await client.SearchAsync<User>(s => s
+    .Index("users")
+    .ApplyFilteringOrderingPaging(gq));
+
+return response.Documents;
json
GET users/_search
+{
+  "query": {
+    "bool": {
+      "must": [
+        {
+          "term": {
+            "firstName.keyword": {
+              "value": "John"
+            }
+          }
+        },
+        {
+          "term": {
+            "lastName.keyword": {
+              "value": "Smith"
+            }
+          }
+        },
+        {
+          "term": {
+            "age": {
+              "value": 30
+            }
+          }
+        },
+        {
+          "term": {
+            "order.totalSum": {
+              "value": 45
+            }
+          }
+        }
+      ]
+    }
+  },
+  "from": 0,
+  "size": 20,
+  "sort": [{
+    "age": {
+      "order": "asc"
+    }
+  }]
+}

With CustomElasticsearchNamingAction initialized

By default, Elasticsearch converts property names to camel-case for document fields. That's Gridify.Elasticsearch extensions work by default. But if it's necessary to apply a custom naming policy, it can also be customized.

csharp
Func<string, string>? namingAction = p => $"_{p}_";
+var mapper = new GridifyMapper<TestClass>(autoGenerateMappings: true)
+{
+   Configuration = { CustomElasticsearchNamingAction = namingAction }
+};
+
+var gq = new GridifyQuery()
+{
+    Filter = "FirstName=John",
+    Page = 1,
+    PageSize = 20,
+    OrderBy = "Age"
+};
+
+var response = await client.SearchAsync<User>(s => s
+    .Index("users")
+    .ApplyFilteringOrderingPaging(gq));
json
GET users/_search
+{
+  "query": {
+    "term": {
+      "_FirstName_.keyword": {
+        "value": "John"
+      }
+    }
+  },
+  "from": 0,
+  "size": 20,
+  "sort": [{
+    "_Age_": {
+      "order": "asc"
+    }
+  }]
+}

WARNING

Gridify.Elasticsearch package does not support all of the advanced Gridify features like NestedFiltering

+ + + + \ No newline at end of file diff --git a/guide/extensions/entityframework.html b/guide/extensions/entityframework.html new file mode 100644 index 00000000..cd48ed4d --- /dev/null +++ b/guide/extensions/entityframework.html @@ -0,0 +1,41 @@ + + + + + + Entity Framework | Gridify + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

Entity Framework

Gridify.EntityFramework Package

The Gridify.EntityFramework package has two additional GridifyAsync() and GridifyQueryableAsync() methods.

Installation

Package Manager

shell
Install-Package Gridify.EntityFramework -Version 2.15.0-preview5

.NET CLI

shell
dotnet add package Gridify.EntityFramework --version 2.15.0-preview5

Compatibility layer

If you want to use gridify with Entity Framework, you should enable the compatibility layer:

csharp
GridifyGlobalConfiguration.EnableEntityFrameworkCompatibilityLayer();

Enabling the compatibility layer provides the following features:

  • It tweaks the internal expression builder to make it compatible with Entity Framework.
  • EF query optimization
  • EF ServiceProviderCaching support
  • Creates parameterized queries
sql
DECLARE @__Value_0 nvarchar(4000) = N'vahid';
+
+SELECT [u].[Id], [u].[CreateDate], [u].[FkGuid], [u].[Name]
+FROM [Users] AS [u]
+WHERE [u].[Name] = @__Value_0

Configuration

EntityFrameworkCompatibilityLayer

Setting this property to true Enables the EntityFramework Compatibility layer to make the generated expressions compatible with entity framework.

  • type: bool
  • default: false

EnableEntityFrameworkCompatibilityLayer()

Simply sets the EntityFrameworkCompatibilityLayer property to true.

DisableEntityFrameworkCompatibilityLayer()

Simply sets the EntityFrameworkCompatibilityLayer property to false.

+ + + + \ No newline at end of file diff --git a/guide/extensions/gridify-client.html b/guide/extensions/gridify-client.html new file mode 100644 index 00000000..bd1f1545 --- /dev/null +++ b/guide/extensions/gridify-client.html @@ -0,0 +1,57 @@ + + + + + + Gridify Client Library | Gridify + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

Gridify Client Library

The Gridify Client library is a lightweight JavaScript and TypeScript library designed to simplify the creation of dynamic queries on the client side. This library facilitates the construction of queries that can be seamlessly integrated with your server-side APIs, leveraging the powerful features of Gridify.

Installation

To integrate the Gridify Client library into your project, install it using npm:

shell
npm i gridify-client

GridifyQueryBuilder

The GridifyQueryBuilder interface represents the methods available for constructing dynamic queries using the Gridify Client library.

The following table describes the methods available in the GridifyQueryBuilder interface for constructing dynamic queries.

MethodParameterDescription
setPagepage: numberSet the page number for pagination.
setPageSizepageSize: numberSet the page size for pagination.
addOrderByfield: string, descending?: booleanAdd ordering based on a field. If descending is true, the ordering is in descending order (default is ascending).
addConditionfield, operator, value, caseSensitive, escapeValueAdd filtering conditions. caseSensitive and escapeValue are optional parameters.
startGroup-Start a logical grouping of conditions.
endGroup-End the current logical group.
and-Add the logical AND operator.
or-Add the logical OR operator.
build-Build and retrieve the constructed query.

Conditional Operators

We can use the ConditionalOperator enum to access supported operators. we can pass these operators to the second parameter of addCondition method

OperatorDescription
EqualEquality
NotEqualInequality
LessThanLess Than
GreaterThanGreater Than
GreaterThanOrEqualGreater Than or Equal
LessThanOrEqualLess Than or Equal
ContainsString Contains (LIKE)
NotContainsString Does Not Contain (NOT LIKE)
StartsWithString Starts With
NotStartsWithString Does Not Start With
EndsWithString Ends With
NotEndsWithString Does Not End With

Usage Example

Below is a basic example demonstrating the usage of the Gridify Client library in TypeScript. This example constructs a dynamic query for pagination, ordering, and filtering:

ts
import { GridifyQueryBuilder, ConditionalOperator as op } from "gridify-client";
+
+const query = new GridifyQueryBuilder()
+  .setPage(2)
+  .setPageSize(10)
+  .addOrderBy("name", true)
+  .startGroup()
+    .addCondition("age", op.LessThan, 50)
+    .or()
+    .addCondition("name", op.StartsWith, "A")
+  .endGroup()
+  .and()
+  .addCondition("isActive", op.Equal, true)
+  .build();
+
+console.log(query);

Output:

json
{
+  "page": 2,
+  "pageSize": 10,
+  "orderBy": "name desc",
+  "filter": "(age<50|name^A),isActive=true"
+}
+ + + + \ No newline at end of file diff --git a/guide/filtering.html b/guide/filtering.html new file mode 100644 index 00000000..ea2efd4b --- /dev/null +++ b/guide/filtering.html @@ -0,0 +1,79 @@ + + + + + + Filtering | Gridify + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

Filtering

Gridify supports the following filtering operators:

Conditional Operators

NameOperatorUsage example
Equal="FieldName = Value"
NotEqual!="FieldName !=Value"
LessThan<"FieldName < Value"
GreaterThan>"FieldName > Value"
GreaterThanOrEqual>="FieldName >=Value"
LessThanOrEqual<="FieldName <=Value"
Contains - Like=*"FieldName =*Value"
NotContains - NotLike!*"FieldName !*Value"
StartsWith^"FieldName ^ Value"
NotStartsWith!^"FieldName !^ Value"
EndsWith$"FieldName $ Value"
NotEndsWith!$"FieldName !$ Value"

TIP

If you don't specify any value after = or != operators, Gridify search for the default and null values.

csharp
var x = personsRepo.ApplyFiltering("name=");

this is equivalent to the bellow LINQ query:

csharp
var x = personsRepo.Where(p =>
+             p.Name is null ||
+             p.Name == string.Empty );

Special Operators

Logical Operators

Using logical operators we easily can create complex queries.

NameOperatorUsage example
AND,"FirstName = Value, LastName = Value2"
OR|"FirstName=Value|LastName=Value2"
Parenthesis()"(FirstName=*Jo,Age<30)|(FirstName!=Hn,Age>30)"

Case Insensitive Operator - /i

The '/i' operator can be use after string values for case insensitive searches. You should only use this operator after the search value.

Example:

csharp
var x = personsRepo.ApplyFiltering("FirstName=John/i");

this query matches with JOHN - john - John - jOHn ...

Escaping

Gridify have five special operators , | ( ) /i to handle complex queries and case-insensitive searches. If you want to use these characters in your query values (after conditional operator), you should add a backslash \ before them. having this regex could be helpful ([(),|]|\/i).

JavaScript escape example:

javascript
let esc = (v) => v.replace(/([(),|\\]|\/i)/g, '\\$1')

Csharp escape example:

csharp
var value = "(test,test2)";
+var esc = Regex.Replace(value, "([(),|\\]|\/i)", "\\$1" );
+// esc = \(test\,test2\)

Using Indexers

Starting from version v2.15.0, Gridify supports filtering on any property that is indexable, including sub-collections, arrays, and dictionaries. This feature allows you to create dynamic and flexible queries for a wide range of data structures.

Passing Index/Key to Sub-Collections, Arrays, and Dictionaries

Gridify enables filtering on elements of sub-collections, arrays, and dictionary properties by specifying the index or key within square brackets [ ].

Here’s an example:

csharp
var gm = new GridifyMapper<TargetType>()
+      .AddMap("arrayProp", (target, index) => target.MyArray[index].Prop)
+      .AddMap("dictProp", (target, key) => target.MyDictionary[key]);
+
+var gq = new GridifyQuery
+{
+    Filter = "arrayProp[8] > 10 AND dictProp[name] = John"
+};

In this example:

arrayProp[8] > 10 filters on the 8th element of an array property. dictProp[name] = John filters on the value associated with the name key in a dictionary property.

This new capability makes Gridify a versatile and robust tool for handling complex data structures in your filtering logic.

Check out Defining Mappings for Indexable Properties for more information.

Custom Operators

Sometimes the default Gridify operators are not enough, For example, if you need an operator for regex matching or when you are using the EntityFramework, you may want to use EF.Functions.FreeText rather than a LIKE with wildcards. In this case, you can define your own operators. (added in v2.6.0)

To define a custom operator, you need to create a class that implements the IGridifyOperator interface. then you need to register it through the global CustomOperators configuration.

TIP

Custom operators must be start with the # character.

  • FreeTextOperator Example:
csharp
class FreeTextOperator : IGridifyOperator
+{
+   public string GetOperator() => "#=";
+   public Expression<OperatorParameter> OperatorHandler()
+   {
+      return (prop, value) => EF.Functions.FreeText(prop, value.ToString());
+   }
+}
  • RegexMatchOperator Example:
csharp
class RegexMatchOperator : IGridifyOperator
+{
+   public string GetOperator() => "#%";
+   public Expression<OperatorParameter> OperatorHandler()
+   {
+      return (prop, value) => Regex.IsMatch(prop.ToString(), value.ToString());
+   }
+}
  • InOperator Example:
csharp
class InOperator: IGridifyOperator
+{
+   public string GetOperator()
+   {
+      return "#In";
+   }
+
+   public Expression<OperatorParameter> OperatorHandler()
+   {
+      return (prop, value) => value.ToString()
+         .Split(";",StringSplitOptions.RemoveEmptyEntries)
+         .Contains(prop.ToString());
+   }
+}
+
+// usage: .ApplyFiltering("name #In John;David;Felipe")

Registration Example:

csharp
 GridifyGlobalConfiguration.CustomOperators.Register<FreeTextOperator>();
+ GridifyGlobalConfiguration.CustomOperators.Register<RegexMatchOperator>();
+ GridifyGlobalConfiguration.CustomOperators.Register<InOperator>();
+ + + + \ No newline at end of file diff --git a/guide/getting-started.html b/guide/getting-started.html new file mode 100644 index 00000000..bf9dfbb5 --- /dev/null +++ b/guide/getting-started.html @@ -0,0 +1,37 @@ + + + + + + Getting Started | Gridify + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

Getting Started

There are three packages available for gridify in the nuget repository:

TIP

If you are using the Entity Framework in your project, you should install the Gridify.EntityFramework package instead of Gridify.

This package provides the same functionality as the Gridify package but is designed to be more compatible with Entity Framework.


TIP

To use Gridify with Elasticsearch, it's necessary to install Gridify.Elasticsearch.


If you are developing in a JavaScript or TypeScript environment and need to create dynamic queries on the client side for server-side operations, Gridify also offers a lightweight client library. gridify-client

Installation

shell
dotnet add package Gridify --version 2.15.0-preview5
shell
dotnet add package Gridify.EntityFramework --version 2.15.0-preview5
shell
dotnet add package Gridify.Elasticsearch --version 2.15.0-preview5
shell
npm i gridify-client

Namespace

After installing the package, you can use the Gridify namespace to access the package classes and static Extension methods.

csharp
using Gridify;

How to use

There are two ways to start using Gridify:

+ + + + \ No newline at end of file diff --git a/guide/gridifyGlobalConfiguration.html b/guide/gridifyGlobalConfiguration.html new file mode 100644 index 00000000..a0e375e5 --- /dev/null +++ b/guide/gridifyGlobalConfiguration.html @@ -0,0 +1,37 @@ + + + + + + GridifyGlobalConfiguration | Gridify + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

GridifyGlobalConfiguration

Using this class you can change the default behavior and configuration of the Gridify library.

General configurations

DefaultPageSize

The default page size for the paging methods when no page size is specified.

  • type: int
  • default: 20

CaseSensitiveMapper

By default mappings are case insensitive. For example, name=John and Name=John are considered equal. You can change this behavior by setting this property to true.

AllowNullSearch

This option enables the null keyword in filtering operations, for example, name=null searches for all records with a null value for the name field not the string "null". if you need to search for the string "null" you can disable this option.

IgnoreNotMappedFields

If true, in filtering and ordering operations, gridify doesn't return any exceptions when a mapping is not defined for the given field.

DisableNullChecks

On nested collections by default gridify adds a null checking condition to prevent the null reference exceptions

e.g () => field != null && field....

some ORMs like NHibernate don't support this. You can disable this behavior by setting this option to true.

  • type: bool
  • default: false

DefaultDateTimeKind

By default, Gridify uses the DateTimeKind.Unspecified when parsing dates. You can change this behavior by setting this property to DateTimeKind.Utc or DateTimeKind.Local. This option is useful when you want to use Gridify with a database that requires a specific DateTimeKind, for example when using npgsql and postgresql.

  • type: DateTimeKind
  • default: null

CustomOperators

Using the Register method of this property you can add your own custom operators.

csharp
 GridifyGlobalConfiguration.CustomOperators.Register<MyCustomOperator>();

To learn more about custom operators, see Custom operator

+ + + + \ No newline at end of file diff --git a/guide/gridifyMapper.html b/guide/gridifyMapper.html new file mode 100644 index 00000000..e108a2d8 --- /dev/null +++ b/guide/gridifyMapper.html @@ -0,0 +1,90 @@ + + + + + + GridifyMapper | Gridify + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

GridifyMapper

Internally Gridify is using an auto generated mapper that maps your string base field names to actual properties in your entities, but sometimes we don't want to support filtering or sorting on a specific field. If you want to control what field names are mapped to what properties, you can create a custom mapper.

To get a better understanding of how this works, consider the following example:

csharp
// sample Entities
+public class Person
+{
+    public string UserName { get; set; }
+    public string FirstName { get; set; }
+    public string LastName { get; set; }
+    public string Password { get; set; }
+    public Contact Contact { get; set; }
+}
+
+public class Contact
+{
+    public string Address { get; set; }
+    public int PhoneNumber { get; set; }
+}

In this example we want to:

  • Generate default mappings
  • Ignore the Password property
  • Map the address and mobile to the Contact property
  • Make sure the userName value is always lowercase in the search
csharp
var mapper = new GridifyMapper<Person>()
+            .GenerateMappings()
+            .RemoveMap(nameof(Person.Password))
+            .AddMap("address", p => p.Contact.Address)
+            .AddMap("mobile", p => p.Contact.PhoneNumber)
+            .AddMap("userName", p => p.UserName, v => v.ToLower());

In the following, we will become more familiar with the above methods

GenerateMappings

This method generates mappings for the properties of the entity, including top-level public properties and properties of nested classes up to the specified nesting depth.

  • To generate mappings for top-level public properties only, you can call this method without passing any arguments:
csharp
var mapper = new GridifyMapper<Person>()
+               .GenerateMappings();
  • To generate mappings with control over nesting depth, you can specify the maxNestingDepth parameter. This parameter limits how deep the mappings will be generated for nested classes and navigation properties (added in v2.15.0). Set it to 0 for no nesting or a positive value to control the depth (added in v2.11.0):
csharp
var mapper = new GridifyMapper<Person>()
+      // Generates mappings for top-level properties and properties of nested classes up to 2 levels deep.
+     .GenerateMappings(2);

TIP

Another alternative to generate default mappings for top-level public properties is by passing true to the GridifyMapper constructor. This generates mappings without considering nesting depth.

csharp
var mapper = new GridifyMapper<Person>(true);
+var mapperWithDepth = new GridifyMapper<Person>(true, 2);

RemoveMap

This method removes mapping from the mapper. Usually you will use this method after you have generated the mappings to ignore some properties that you don't want to be supported by Gridify filtering or ordering actions.

AddMap

This method adds a mapping to the mapper.

  • the first parameter is the name of the field you want to use in the string query
  • the second parameter is a property selector expression
  • the third parameter is an optional value convertor expression that you can use to convert user inputs to anything you want

Value convertor

If you need to change your search values before the filtering operation you can use this feature, the third parameter of the GridifyMapper AddMap method accepts a function that you can use to convert the input values.

in the above example we want to convert the userName value to lowercase before the filtering operation.

csharp
mapper = mapper.AddMap("userName", p => p.UserName, value => value.ToLower());

HasMap

This method checks if the mapper has a mapping for the given field name.

ClearMaps

This method clears the list of mappings

GetCurrentMaps

This method returns list of current mappings.

GridifyMapperConfiguration

csharp
var mapperConfig = new GridifyMapperConfiguration()
+{
+   CaseSensitive = false,
+   AllowNullSearch = true,
+   IgnoreNotMappedFields = false
+};
+
+var mapper = new GridifyMapper<Person>(mapperConfig);

CaseSensitive

By default mapper is Case-insensitive but you can change this behavior if you need Case-Sensitive mappings.

  • Type: bool
  • Default: false
csharp
var mapper = new GridifyMapper<Person>(q => q.CaseSensitive = true);

IgnoreNotMappedFields

By setting this to true Gridify don't throw an exception when a field name is not mapped. for instance, in the above example, searching for password will not throw an exception.

  • Type: bool
  • Default: false
csharp
var mapper = new GridifyMapper<Person>(q => q.IgnoreNotMappedFields = true);

AllowNullSearch

By setting this to false, Gridify don't allow searching on null values using the null keyword for values.

  • Type: bool
  • Default: true
csharp
var mapper = new GridifyMapper<Person>(q => q.AllowNullSearch = false);

DefaultDateTimeKind

By setting this property to a DateTimeKind value, you can change the default DateTimeKind used when parsing dates.

  • type: DateTimeKind
  • default: null
csharp
var mapper = new GridifyMapper<Person>(q => q.DefaultDateTimeKind = DateTimeKind.Utc);

Filtering on Nested Collections

You can use LINQ Select and SelectMany methods to filter your data using its nested collections.

In this example, we have 3 nested collections, but filtering will apply to the Property1 of the third level.

csharp
var mapper = new GridifyMapper<Level1>()
+    .AddMap("prop1", l1 => l1.Level2List
+            .SelectMany(l2 => l2.Level3List)
+            .Select(l3 => l3.Property1));
+// ...
+var query = level1List.ApplyFiltering("prop1 = 123", mapper);

if you have only two-level nesting, you don't need to use SelectMany.

Defining Mappings for Indexable Properties

Starting from version v2.15.0, GridifyMapper's AddMap method supports filtering on properties that are indexable, such as sub-collections, arrays, and dictionaries. This allows you to create dynamic queries by defining mappings to specific indexes or dictionary keys using square brackets [ ].

Mapping to Array Indexes

You can define a mapping to a specific index in an array or sub-collection by specifying the index within square brackets [ ].`

csharp
var gm = new GridifyMapper<TargetType>()
+      .AddMap("arrayProp", (target, index) => target.MyArray[index].Prop);
+
+var gq = new GridifyQuery
+{
+   // Filters on the 8th element of an array property
+   Filter = "arrayProp[8] > 10"
+};

Mapping to Dictionary Keys

Similarly, you can define a mapping to a specific key in a dictionary or in a navigation property.

csharp
var gm = new GridifyMapper<TargetType>()
+      .AddMap("dictProp", (target, key) => target.MyDictionary[key]);
+
+var gm2 = new GridifyMapper<TargetType>()
+      .AddMap("navProp", (target, key) => target.NavigationProperty.Where(n => n.Key == key).Select(n => n.Value));
+
+var gq = new GridifyQuery
+{
+   // Filters on the value associated with the 'name' key in a dictionary
+   Filter = "dictProp[name] = John"
+};

Generic Overload for Non-String Dictionary Keys

If your dictionary key is not a string, you can use the generic overload of the AddMap<T> method to specify the key type.

csharp
var gm = new GridifyMapper<TargetType>()
+      .AddMap<Guid>("dictProp", (target, key) => target.MyDictionary[key]);

For more information on filtering using these mappings, refer to the Using Indexers.

GetExpression

This method returns the selector expression that you can use it in LINQ queries.

csharp
Expression<Func<Person, object>> selector = mapper.GetExpression(nameof(Person.Name));

GetLambdaExpression

This method returns the selector expression that you can use it in LINQ queries.

csharp
LambdaExpression selector = mapper.GetLambdaExpression(nameof(Person.Name));
+ + + + \ No newline at end of file diff --git a/guide/gridifyQuery.html b/guide/gridifyQuery.html new file mode 100644 index 00000000..12c0a697 --- /dev/null +++ b/guide/gridifyQuery.html @@ -0,0 +1,59 @@ + + + + + + GridifyQuery | Gridify + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

GridifyQuery

GridifyQuery is a simple class for configuring Filtering, Ordering and Paging.

csharp
var gq = new GridifyQuery()
+{
+    Filter = "FirstName=John",
+    Page = 1,
+    PageSize = 20,
+    OrderBy = "Age"
+};
+
+// Apply Filter, Sort and Paging
+Paging<Person> result = personsRepo.Gridify(gq);

IsValid

This extension method, checks if the GridifyQuery (Filter, OrderBy) is valid to use with a custom mapper or the auto generated mapper and returns true or false.

csharp
var gq = new GridifyQuery() { Filter = "name=John" , OrderBy = "Age" };
+// true
+bool isValid = gq.IsValid<Person>();
csharp
var gq = new GridifyQuery() { Filter = "NonExist=John" , OrderBy = "Age" };
+// false (NonExist is not a property of Person)
+bool isValid = gq.IsValid<Person>();
csharp
var gq = new GridifyQuery() { Filter = "@name=!" , OrderBy = "Age" };
+// false (this is not a valid filter)
+bool isValid = gq.IsValid<Person>();

Optionally you can pass a custom mapper to check if the GridifyQuery is valid for that mapper.

csharp
var mapper = new GridifyMapper<Person>()
+      .AddMap("name", q => q.Name);
+var gq = new GridifyQuery() { Filter = "name=John" , OrderBy = "Age" };
+
+// false (Age is not mapped)
+bool isValid = gq.IsValid(mapper);

GetFilteringExpression

This extension method, creates a lambda expression using the GridifyQuery.Filter property that you can use it in the LINQ Where method to filter the data.

csharp
var gq = new GridifyQuery() { Filter = "name=John" };
+Expression<Func<T, bool>> expression = gq.GetFilteringExpression<Person>();
+var result = personsRepo.Where(expression);
+ + + + \ No newline at end of file diff --git a/guide/index.html b/guide/index.html new file mode 100644 index 00000000..82e1f8e5 --- /dev/null +++ b/guide/index.html @@ -0,0 +1,37 @@ + + + + + + Introduction | Gridify + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

Introduction

Greetings!

Gridify is an exceptional dynamic LINQ library designed to simplify the process of converting strings into LINQ queries. It offers remarkable performance and ease-of-use, making it effortless to apply filtering, sorting, and pagination utilizing text-based data.

Features

Here are some notable features of Gridify:

  • Fast and user-friendly
  • Supports filtering, sorting, and pagination
  • Enables conversion from strings to LINQ queries
  • Supports nested queries and sub-collections
  • Allows mapping from strings to objects
  • Supports query compilation
  • Supports DocumentDBs
  • Compatible with collection indexes
  • Custom operators
  • Can be used with any collection that supports LINQ
  • Compatible with object-mappers like AutoMapper
  • Compatible with ORMs, particularly Entity Framework
  • Supports Elasticsearch DSL query
  • Javascript/Typescript gridify-client

Examples

To provide a better understanding of Gridify's functionality, we have prepared a few examples:

Performance

Filtering is the most expensive feature in Gridify. The following benchmark compares filtering in various popular dynamic LINQ libraries. Interestingly, Gridify outperforms even Native LINQ in terms of speed. It's worth mentioning that other features like Pagination and Sorting in Gridify have minimal impact on performance.

MethodMeanErrorStdDevRatioAllocatedAlloc Ratio
Gridify599.8 us2.76 us2.45 us0.9236.36 KB1.11
Native_LINQ649.9 us2.55 us2.38 us1.0032.74 KB1.00
DynamicLinq734.8 us13.90 us13.01 us1.13119.4 KB3.65
Sieve1,190.9 us7.41 us6.93 us1.8353.05 KB1.62
Fop2,637.6 us8.59 us7.61 us4.06321.57 KB9.82
CSharp_Scripting216,863.8 us4,295.66 us6,021.92 us336.6423660.26 KB722.71
Details

BenchmarkDotNet v0.13.10, Windows 11 (10.0.22621.2715/22H2/2022Update/SunValley2) 12th Gen Intel Core i7-12800H, 1 CPU, 20 logical and 14 physical cores .NET SDK 8.0.100 [Host] : .NET 8.0.0 (8.0.23.53103), X64 RyuJIT AVX2

This Benchmark is available Here

+ + + + \ No newline at end of file diff --git a/guide/ordering.html b/guide/ordering.html new file mode 100644 index 00000000..63825c5d --- /dev/null +++ b/guide/ordering.html @@ -0,0 +1,53 @@ + + + + + + Ordering | Gridify + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

Ordering

The ordering query expression can be built with a comma-delimited ordered list of field/property names followed by asc or desc keywords.

By default, if you don't add these keywords, Gridify assumes you need Ascending ordering.

csharp
// asc - desc
+var x = personsRepo.ApplyOrdering("Id"); // default ascending its equal to "Id asc"
+var x = personsRepo.ApplyOrdering("Id desc"); // use descending ordering
+
+// multiple orderings example
+var x = personsRepo.ApplyOrdering("Id desc, FirstName asc, LastName");
csharp
// asc - desc
+var gq = new GridifyQuery() { OrderBy = "Id" }; // default ascending its equal to "Id asc"
+var gq = new GridifyQuery() { OrderBy = "Id desc" }; // use descending ordering
+
+// multiple orderings example
+var gq = new GridifyQuery() { OrderBy = "Id desc, FirstName asc, LastName" };
csharp
var builder = new QueryBuilder<Person>();
+// asc - desc
+builder.AddOrderBy("Id"); // default ascending its equal to "Id asc"
+builder.AddOrderBy("Id desc"); // use descending ordering
+
+// multiple orderings example
+builder.AddOrderBy("Id desc, FirstName asc, LastName");

Order By Nullable types

Sometimes we need to order by nullable types, for example:

csharp
personsRepo.OrderBy(p => p.BirthDate.HasValue)

to support this behavior, you can use Gridify special characters (? or !) after the property name.

e.g:

To achieve the personsRepo.OrderBy(p => p.BirthDate.HasValue) query, you can use ?:

csharp
var x = personsRepo.ApplyOrdering("BirthDate?");

and for personsRepo.OrderBy(p => !p.BirthDate.HasValue), you can use !:

csharp
var x = personsRepo.ApplyOrdering("BirthDate!");

WARNING

These nullable characters will only work on the nullable types.

+ + + + \ No newline at end of file diff --git a/guide/queryBuilder.html b/guide/queryBuilder.html new file mode 100644 index 00000000..866e7f59 --- /dev/null +++ b/guide/queryBuilder.html @@ -0,0 +1,41 @@ + + + + + + QueryBuilder | Gridify + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

QueryBuilder

The QueryBuilder class is really useful if you want to manually build your query Or when you don't want to use the extension methods.

MethodDescription
AddConditionAdds a string base Filtering query
AddOrderByAdds a string base Ordering query
ConfigurePagingConfigure Page and PageSize
AddQueryAccepts a GridifyQuery object to configure filtering,ordering and paging
UseCustomMapperAccepts a GridifyMapper to use in build methods
UseEmptyMapperSetup an Empty new GridifyMapper without auto generated mappings
AddMapAdd a single Map to existing mapper
RemoveMapRemove a single Map from existing mapper
ConfigureDefaultMapperConfiguring default mapper when we didn't use AddMapper method
IsValidValidates Condition, OrderBy, Query , Mapper and returns a bool
BuildApplies filtering ordering and paging to a queryable context
BuildCompiledCompiles the expressions and returns a delegate for applying filtering ordering and paging to a enumerable collection
BuildFilteringExpressionReturns filtering expression that can be compiled for later use for enumerable collections
BuildEvaluatorReturns an evaluator delegate that can be use to evaluate an queryable context
BuildCompiledEvaluatorReturns an compiled evaluator delegate that can be use to evaluate an enumerable collection
BuildWithPagingApplies filtering ordering and paging to a context, and returns paging result
BuildWithPagingCompiledCompiles the expressions and returns a delegate for applying filtering ordering and paging to a enumerable collection, that returns paging result
BuildWithQueryablePagingApplies filtering ordering and paging to a context, and returns queryable paging result
EvaluateDirectly Evaluate a context to check if all conditions are valid or not
csharp
var builder = new QueryBuilder<Person>()
+        .AddCondition("name=John")
+        .AddOrderBy("age, id");
+
+var query = builder.Build(persons);
+ + + + \ No newline at end of file diff --git a/hashmap.json b/hashmap.json new file mode 100644 index 00000000..ab6f18e1 --- /dev/null +++ b/hashmap.json @@ -0,0 +1 @@ +{"guide_getting-started.md":"DJX3p0eS","guide_extensions_entityframework.md":"DHbNMf7z","guide_gridifyglobalconfiguration.md":"CPK3zDE-","guide_gridifymapper.md":"B36uI5Ui","index.md":"BQScyGp-","contribution_index.md":"yWaijWDG","v1_index.md":"DgSN7Q7Q","guide_ordering.md":"CrhupX3M","guide_extensions_elasticsearch.md":"DYDH-DNo","guide_extensions_gridify-client.md":"B5eDeC5h","guide_extensions.md":"RIxOIFfu","example_api-controller.md":"CJs-tB52","guide_compile.md":"oQKQvwx7","guide_gridifyquery.md":"CEJIRn4b","guide_dependency-injection.md":"D-nStdXD","guide_automapper.md":"C64WRQ-o","guide_filtering.md":"DBF6P0Gc","guide_querybuilder.md":"kmI5FuP-","guide_index.md":"C2ZxBUIO"} diff --git a/index.html b/index.html new file mode 100644 index 00000000..6884c7db --- /dev/null +++ b/index.html @@ -0,0 +1,37 @@ + + + + + + Gridify + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

Gridify

Documentation

A powerful dynamic LINQ library for .NET

+ + + + \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 00000000..28704298 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1 @@ +https://alirezanet.github.io/Gridify/contribution/https://alirezanet.github.io/Gridify/example/api-controllerhttps://alirezanet.github.io/Gridify/guide/autoMapperhttps://alirezanet.github.io/Gridify/guide/compilehttps://alirezanet.github.io/Gridify/guide/dependency-injectionhttps://alirezanet.github.io/Gridify/guide/extensionshttps://alirezanet.github.io/Gridify/guide/extensions/elasticsearchhttps://alirezanet.github.io/Gridify/guide/extensions/entityframeworkhttps://alirezanet.github.io/Gridify/guide/extensions/gridify-clienthttps://alirezanet.github.io/Gridify/guide/filteringhttps://alirezanet.github.io/Gridify/guide/getting-startedhttps://alirezanet.github.io/Gridify/guide/gridifyGlobalConfigurationhttps://alirezanet.github.io/Gridify/guide/gridifyMapperhttps://alirezanet.github.io/Gridify/guide/gridifyQueryhttps://alirezanet.github.io/Gridify/guide/https://alirezanet.github.io/Gridify/guide/orderinghttps://alirezanet.github.io/Gridify/guide/queryBuilderhttps://alirezanet.github.io/Gridify/https://alirezanet.github.io/Gridify/v1/ \ No newline at end of file diff --git a/social-logo.png b/social-logo.png new file mode 100644 index 00000000..0a6cf163 Binary files /dev/null and b/social-logo.png differ diff --git a/v1/index.html b/v1/index.html new file mode 100644 index 00000000..9ac3df81 --- /dev/null +++ b/v1/index.html @@ -0,0 +1,114 @@ + + + + + + Gridify (v1) | Gridify + + + + + + + + + + + + + + + + + + + + + + + + + + +
Skip to content

Gridify (v1)

DANGER

Gridify version 1.x.x is no longer maintained. you should consider upgrading to the latest version.

The source code of this version is available on version-1.x

Introduction

Easy and optimized way to apply Filtering, Sorting and pagination using text-based data.

The best use case of this library is Asp-net APIs. when you need to get some string base filtering conditions to filter data or sort it by a field name or apply pagination concepts to your lists and return a pageable, data grid ready information, from any repository or database.


WebApi Simple Usage example

c#
// ApiController
+
+[Produces(typeof(Paging<Person>))]
+public IActionResult GetPersons([FromQuery] GridifyQuery gQuery)
+{
+    // Gridify => Filter,Sort & Apply Paging
+    // in short, Gridify returns data especially for data Grids.
+    return myDbContext.Persons.Gridify(gQuery);
+}

complete request sample:

txt
http://exampleDomain.com/api/GetPersons?pageSize=100&page=1&sortBy=FirstName&isSortAsc=false&filter=Age%3D%3D10

also we can totally ignore GridifyQuery

txt
http://exampleDomain.com/api/GetPersons

What is GridifyQuery (basic usage example)

GridifyQuery is a simple class for configuring Filtering,Paging,Sorting.

c#
// usually, we don't need to create this object manually
+// for example, we get this object as a parameter from our API Controller
+var gQuery = new GridifyQuery()
+{
+    Filter = "FirstName==John",
+    IsSortAsc = false,
+    Page = 1,
+    PageSize = 20,
+    SortBy = "LastName"
+};
+
+Paging<Person> pData =
+         myDbContext.Persons  // we can use Any list or repository or EntityFramework context
+          .Gridify(gQuery); // Filter,Sort & Apply Paging
+
+
+// pData.TotalItems => Count persons with 'John', First name
+// pData.Items      => First 20 Persons with 'John', First Name

ApplyFiltering

Also, if you don't need paging and sorting features simply use ApplyFiltering extension instead of Gridify.

c#
var query = myDbContext.Persons.ApplyFiltering("name == John");
+// this is equal to :
+// myDbContext.Persons.Where(p => p.Name == "John");

see more examples in the tests


Performance comparison

Filtering is the most expensive feature in gridify. the below benchmark is comparing filtering in the most known dynamic linq libraries. as you can see, gridify has the closest result to the native linq. also, I Should note other features like Pagination and Sorting has almost zero overhead in Gridify.

BenchmarkDotNet=v0.13.0, OS=Windows 10.0.19043.1110 (21H1/May2021Update) 11th Gen Intel Core i5-11400F 2.60GHz, 1 CPU, 12 logical and 6 physical cores .NET SDK=5.0.301 [Host] : .NET 5.0.7 (5.0.721.25508), X64 RyuJIT

MethodMeanErrorStdDevRatioRatioSDGen 0Gen 1Allocated
Native Linq869.3 us10.54 us9.86 us1.000.005.85942.929736 KB
Gridify928.1 us13.41 us11.89 us1.070.026.83592.929746 KB
Dynamic Linq1,068.5 us10.66 us9.97 us1.230.0219.53139.7656122 KB
Sieve1,126.8 us10.73 us10.04 us1.300.028.78913.906354 KB

Installation

Install the Gridify NuGet Package.

Package Manager Console

Install-Package Gridify

.NET Core CLI

dotnet add package Gridify

Extensions

The library adds below extension methods to IQueryable:

ExtensionDescription
ApplyFiltering (string)Apply Filtering using a raw string and returns an IQueryable<T>
ApplyFiltering (GridifyQuery)Apply Filtering using string Filter property of GridifyQuery class and returns an IQueryable<T>
ApplyOrderingApply Ordering using string SortBy and bool IsSortAsc properties of GridifyQuery class and returns an IQueryable<T>
ApplyPagingApply paging using short Page and int PageSize properties of GridifyQuery class and returns an IQueryable<T>
ApplyOrderingAndPagingApply Both Ordering and paging and returns an IQueryable<T>
ApplyFilterAndOrderingApply Both Filtering and Ordering and returns an IQueryable<T>
ApplyEverythingApply Filtering,Ordering and paging and returns an IQueryable<T>
GridifyQueryableLike ApplyEverything but it returns a QueryablePaging<T> that have an extra int totalItems property to use for pagination
GridifyReceives a GridifyQuery ,Load All requested data and returns Paging<T>

TIP:

Gridify function is an ALL-IN-ONE package, that applies filtering and ordering and paging to your data and returns a Paging<T>,

but for example, if you need to just filter your data without paging or sorting options you can use ApplyFiltering function instead.


Supported Filtering Operators

NameOperatorUsage example
Equal=="FieldName ==Value"
NotEqual!="FieldName !=Value"
LessThan<"FieldName < Value"
GreaterThan>"FieldName > Value"
GreaterThanOrEqual>="FieldName >=Value"
LessThanOrEqual<="FieldName <=Value"
Contains - Like=*"FieldName =*Value"
NotContains - NotLike!*"FieldName !*Value"
StartsWith^"FieldName ^ Value"
NotStartsWith!^"FieldName !^ Value"
EndsWith$"FieldName $ Value"
NotEndsWith!$"FieldName !$ Value"
AND - &&,"FirstName ==Value, LastName ==Value2"
OR - |||"FirstName==Value|LastName==Value2"
Parenthesis()"(FirstName=*Jo,Age<30)|(FirstName!=Hn,Age>30)"

we can easily create complex queries using Parenthesis() with AND (,) + OR (|) operators.

Escape character hint:

Filtering has four special character , | ( ) to handle complex queries. if you want to use these characters in your query values (after ==), you should add a backslash \ before them.

JavaScript escape example:

javascript
let esc = (v) => v.replace(/([(),|])/g, '\\$1')

Csharp escape example:

csharp
var value = "(test,test2)";
+var esc = Regex.Replace(value, "([(),|])", "\\$1" ); // esc = \(test\,test2\)

Custom Mapping Support

By default Gridify is using a GridifyMapper object that automatically maps your string based field names to actual properties in your Entities but if you have a custom DTO (Data Transfer Object) you can create a custom instance of GridifyMapper and use it to create your mappings.

c#
// example Entities
+public class Person
+{
+    public string FirstName {get;set;}
+    public string LastName {get;set;}
+    public Contact Contact {get;set;}
+
+}
+public class Contact
+{
+    public string Address {get;set;}
+    public int PhoneNumber {get;set;}
+}
+
+// example DTO
+public class PersonDTO
+{
+   public string FirstName {get;set;}
+   public string LastName {get;set;}
+
+   public string Address {get;set;}
+   public int PhoneNumber {get;set;}
+}
+
+//// GridifyMapper Usage example -------------
+
+var customMappings = new GridifyMapper<Person>()
+        // because FirstName and LastName is exists in both DTO and Entity classes we can Generate them
+        .GenerateMappings()
+        // add custom mappings
+        .AddMap("address", q => q.Contact.Address )
+        .AddMap("PhoneNumber", q => q.Contact.PhoneNumber );
+
+
+// as i mentioned before. usually we don't need create this object manually.
+var gQuery = new GridifyQuery()
+{
+    Filter = "FirstName==John,Address=*st",
+    IsSortAsc = true,
+    SortBy = "PhoneNumber"
+};
+
+// myRepository: could be entity framework context or any other collections
+var gridifiedData = myRepository.Persons.Gridify(gQuery, customMappings);

by default GridifyMapper is Case-insensitive but you can change this behavior if you need Case-Sensitive mappings.

c#
var customMappings = new GridifyMapper<Person>(true); // mapper is case-sensitive now.

Combine Gridify with AutoMapper

c#
//AutoMapper ProjectTo + Filtering Only, example
+var query = myDbContext.Persons.ApplyFiltering(gridifyQuery);
+var result = query.ProjectTo<PersonDTO>().ToList();
+
+// AutoMapper ProjectTo + Filtering + Ordering + Paging, example
+QueryablePaging<Person> qp = myDbContext.Persons.GridifyQueryable(gridifyQuery);
+var result = new Paging<Person> () { Items = qp.Query.ProjectTo<PersonDTO>().ToList (), TotalItems = qp.TotalItems };

EntityFramework integration

if you need to use gridify async feature for entityFramework Core, use Gridify.EntityFramework package instead.

this package have two additional GridifyAsync() and GridifyQueryableAsync() functions.

shell
dotnet add package Gridify.EntityFramework

Contribution

Any Contribution to improve documentation and library is appreciated feel free to send pull-Request. ❤️

+ + + + \ No newline at end of file