@nickyzj2023/utils 1.0.17 → 1.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +35 -35
  2. package/biome.json +40 -0
  3. package/dist/index.js +1 -1
  4. package/dist/is.d.ts +2 -1
  5. package/dist/object.d.ts +35 -0
  6. package/dist/string.d.ts +16 -2
  7. package/docs/assets/material-style.css +262 -0
  8. package/docs/assets/navigation.js +1 -1
  9. package/docs/assets/search.js +1 -1
  10. package/docs/functions/camelToSnake.html +175 -2
  11. package/docs/functions/capitalize.html +178 -0
  12. package/docs/functions/decapitalize.html +178 -0
  13. package/docs/functions/fetcher.html +175 -2
  14. package/docs/functions/isObject.html +175 -2
  15. package/docs/functions/isPrimitive.html +176 -3
  16. package/docs/functions/mapKeys.html +180 -0
  17. package/docs/functions/mapValues.html +181 -0
  18. package/docs/functions/mergeObjects.html +175 -2
  19. package/docs/functions/sleep.html +175 -2
  20. package/docs/functions/snakeToCamel.html +175 -2
  21. package/docs/functions/timeLog.html +175 -2
  22. package/docs/functions/to.html +175 -2
  23. package/docs/functions/withCache.html +177 -4
  24. package/docs/hierarchy.html +174 -1
  25. package/docs/index.html +175 -2
  26. package/docs/modules.html +174 -1
  27. package/docs/types/DeepMapKeys.html +174 -0
  28. package/docs/types/DeepMapValues.html +174 -0
  29. package/docs/types/Primitive.html +174 -0
  30. package/docs/types/RequestInit.html +174 -1
  31. package/docs/types/SetTtl.html +174 -1
  32. package/package.json +7 -2
  33. package/src/dom.ts +10 -10
  34. package/src/hoc.ts +115 -115
  35. package/src/index.ts +7 -7
  36. package/src/is.ts +3 -1
  37. package/src/lru-cache.ts +50 -50
  38. package/src/network.ts +111 -111
  39. package/src/object.ts +113 -0
  40. package/src/string.ts +42 -22
  41. package/src/time.ts +11 -11
  42. package/tsconfig.json +32 -32
package/README.md CHANGED
@@ -1,35 +1,35 @@
1
- 男生自用全新前端工具库
2
-
3
- 安装到你的前端项目里:
4
-
5
- ```bash
6
- # npm
7
- npm install @nickyzj2023/utils
8
-
9
- # yarn
10
- yarn add @nickyzj2023/utils
11
-
12
- # pnpm
13
- pnpm add @nickyzj2023/utils
14
-
15
- # bun
16
- bun add @nickyzj2023/utils
17
- ```
18
-
19
- 使用方式:
20
-
21
- ```typescript
22
- import { fetcher, to } from "@nickyzj2023/utils";
23
-
24
- const api = fetcher("https://api.example.com");
25
-
26
- const [error, data] = await to(api.get<Blog>("/blogs/hello-world"));
27
- if (error) {
28
- console.error(error);
29
- return;
30
- }
31
-
32
- console.log(data);
33
- ```
34
-
35
- This project was created using `bun init` in bun v1.3.2. [Bun](https://bun.com) is a fast all-in-one JavaScript runtime.
1
+ 男生自用全新前端工具库
2
+
3
+ 安装到你的前端项目里:
4
+
5
+ ```bash
6
+ # npm
7
+ npm install @nickyzj2023/utils
8
+
9
+ # yarn
10
+ yarn add @nickyzj2023/utils
11
+
12
+ # pnpm
13
+ pnpm add @nickyzj2023/utils
14
+
15
+ # bun
16
+ bun add @nickyzj2023/utils
17
+ ```
18
+
19
+ 使用方式:
20
+
21
+ ```typescript
22
+ import { fetcher, to } from "@nickyzj2023/utils";
23
+
24
+ const api = fetcher("https://api.example.com");
25
+
26
+ const [error, data] = await to(api.get<Blog>("/blogs/hello-world"));
27
+ if (error) {
28
+ console.error(error);
29
+ return;
30
+ }
31
+
32
+ console.log(data);
33
+ ```
34
+
35
+ This project was created using `bun init` in bun v1.3.2. [Bun](https://bun.com) is a fast all-in-one JavaScript runtime.
package/biome.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "$schema": "https://biomejs.dev/schemas/2.3.8/schema.json",
3
+ "vcs": {
4
+ "enabled": true,
5
+ "clientKind": "git",
6
+ "useIgnoreFile": true
7
+ },
8
+ "files": {
9
+ "ignoreUnknown": false
10
+ },
11
+ "formatter": {
12
+ "enabled": true,
13
+ "indentStyle": "tab"
14
+ },
15
+ "linter": {
16
+ "enabled": true,
17
+ "rules": {
18
+ "recommended": true,
19
+ "correctness": {
20
+ "noUnusedVariables": "info"
21
+ },
22
+ "suspicious": {
23
+ "noExplicitAny": "info"
24
+ }
25
+ }
26
+ },
27
+ "javascript": {
28
+ "formatter": {
29
+ "quoteStyle": "double"
30
+ }
31
+ },
32
+ "assist": {
33
+ "enabled": true,
34
+ "actions": {
35
+ "source": {
36
+ "organizeImports": "on"
37
+ }
38
+ }
39
+ }
40
+ }
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- var Y=(...x)=>{console.log(`${new Date().toLocaleTimeString()}`,...x)};var f=(x,$=-1)=>{let H=new Map,W=(...m)=>{let D=JSON.stringify(m),I=Date.now(),F=H.get(D);if(F&&I<F.expiresAt)return F.value;let z=$===-1?1/0:I+$*1000,V={setTtl:(M)=>z=I+M*1000},K=x.apply(V,m);if(K instanceof Promise){let M=K.then((X)=>{return H.set(D,{value:X,expiresAt:z}),X});return H.set(D,{value:M,expiresAt:z}),M}return H.set(D,{value:K,expiresAt:z}),K};return W.clear=()=>H.clear(),W.updateTtl=(m)=>{$=m;let D=Date.now(),I=D+m*1000;for(let[F,z]of H.entries())if(z.expiresAt>D)z.expiresAt=I,H.set(F,z)},W};var J=(x)=>{return x?.constructor===Object},N=(x)=>{return x===null||x===void 0||typeof x!=="object"&&typeof x!=="function"};var Q=(x,$)=>{let H={...x};for(let W of Object.keys($)){let m=H[W],D=$[W];if(N(m)&&N(D)){H[W]=D;continue}if(Array.isArray(m)&&Array.isArray(D)){H[W]=m.concat(D);continue}if(J(m)&&J(D)){H[W]=Q(m,D);continue}H[W]=D}return H};var L=(x="",$={})=>{let H=async(W,m={})=>{let D=x?`${x}${W}`:W,{parser:I,...F}=Q($,m);if(J(F.body))F.body=JSON.stringify(F.body),F.headers={...F.headers,"Content-Type":"application/json"};let z=await fetch(D,F);if(!z.ok)throw Error(z.statusText);return await(I?.(z)??z.json())};return{get:(W,m={})=>H(W,{...m,method:"GET"}),post:(W,m,D={})=>H(W,{...D,method:"POST",body:m}),put:(W,m,D={})=>H(W,{...D,method:"PUT",body:m}),delete:(W,m={})=>H(W,{...m,method:"DELETE"})}},T=async(x)=>{try{return[null,await x]}catch($){return[$,void 0]}};var g=(x)=>{return x.replace(/_([a-zA-Z])/g,($,H)=>H.toUpperCase())},q=(x)=>{return x.replace(/([A-Z])/g,($,H)=>`_${H.toLowerCase()}`)};var S=async(x=150)=>{return new Promise(($)=>{setTimeout($,x)})};export{f as withCache,T as to,Y as timeLog,g as snakeToCamel,S as sleep,Q as mergeObjects,N as isPrimitive,J as isObject,L as fetcher,q as camelToSnake};
2
+ var G=(...x)=>{console.log(`${new Date().toLocaleTimeString()}`,...x)};var P=(x,C=-1)=>{let W=new Map,D=(...H)=>{let $=JSON.stringify(H),J=Date.now(),I=W.get($);if(I&&J<I.expiresAt)return I.value;let F=C===-1?1/0:J+C*1000,_={setTtl:(X)=>F=J+X*1000},Q=x.apply(_,H);if(Q instanceof Promise){let X=Q.then((f)=>{return W.set($,{value:f,expiresAt:F}),f});return W.set($,{value:X,expiresAt:F}),X}return W.set($,{value:Q,expiresAt:F}),Q};return D.clear=()=>W.clear(),D.updateTtl=(H)=>{C=H;let $=Date.now(),J=$+H*1000;for(let[I,F]of W.entries())if(F.expiresAt>$)F.expiresAt=J,W.set(I,F)},D};var M=(x)=>{return x?.constructor===Object},Y=(x)=>{return x===null||x===void 0||typeof x!=="object"&&typeof x!=="function"};var Z=(x,C)=>{let W={...x};for(let D of Object.keys(C)){let H=W[D],$=C[D];if(Y(H)&&Y($)){W[D]=$;continue}if(Array.isArray(H)&&Array.isArray($)){W[D]=H.concat($);continue}if(M(H)&&M($)){W[D]=Z(H,$);continue}W[D]=$}return W},z=(x,C)=>{if(Array.isArray(x))return x.map((W)=>z(W,C));if(M(x))return Object.keys(x).reduce((D,H)=>{let $=C(H),J=x[H];return D[$]=z(J,C),D},{});return x},B=(x,C)=>{if(Array.isArray(x))return x.map((W,D)=>{if(M(W))return B(W,C);return C(W,D)});if(M(x))return Object.keys(x).reduce((D,H)=>{let $=x[H];if(!Y($))D[H]=B($,C);else D[H]=C($,H);return D},{});return x};var R=(x="",C={})=>{let W=async(D,H={})=>{let $=x?`${x}${D}`:D,{parser:J,...I}=Z(C,H);if(M(I.body))I.body=JSON.stringify(I.body),I.headers={...I.headers,"Content-Type":"application/json"};let F=await fetch($,I);if(!F.ok)throw Error(F.statusText);return await(J?.(F)??F.json())};return{get:(D,H={})=>W(D,{...H,method:"GET"}),post:(D,H,$={})=>W(D,{...$,method:"POST",body:H}),put:(D,H,$={})=>W(D,{...$,method:"PUT",body:H}),delete:(D,H={})=>W(D,{...H,method:"DELETE"})}},m=async(x)=>{try{return[null,await x]}catch(C){return[C,void 0]}};var V=(x)=>{return x.replace(/_([a-zA-Z])/g,(C,W)=>W.toUpperCase())},O=(x)=>{return x.replace(/([A-Z])/g,(C,W)=>`_${W.toLowerCase()}`)},h=(x)=>{return x.charAt(0).toUpperCase()+x.slice(1)},N=(x)=>{return x.charAt(0).toLowerCase()+x.slice(1)};var k=async(x=150)=>{return new Promise((C)=>{setTimeout(C,x)})};export{P as withCache,m as to,G as timeLog,V as snakeToCamel,k as sleep,Z as mergeObjects,B as mapValues,z as mapKeys,Y as isPrimitive,M as isObject,R as fetcher,N as decapitalize,h as capitalize,O as camelToSnake};
package/dist/is.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ export type Primitive = number | string | boolean | symbol | bigint | undefined | null;
1
2
  /**
2
3
  * 检测传入的值是否为**普通对象**
3
4
  * @returns 如果是普通对象,返回 true,否则返回 false
@@ -7,4 +8,4 @@ export declare const isObject: (value: any) => value is object;
7
8
  * 检测传入的值是否为**原始值**(number、string、boolean、symbol、bigint、undefined、null)
8
9
  * @returns 如果是原始值,返回 true,否则返回 false
9
10
  */
10
- export declare const isPrimitive: (value: any) => boolean;
11
+ export declare const isPrimitive: (value: any) => value is Primitive;
package/dist/object.d.ts CHANGED
@@ -12,3 +12,38 @@
12
12
  * @param {U} obj2 要合并的第二个对象
13
13
  */
14
14
  export declare const mergeObjects: <T extends Record<string, any>, U extends Record<string, any>>(obj1: T, obj2: U) => T & U;
15
+ export type DeepMapKeys<T> = T extends Array<infer U> ? Array<DeepMapKeys<U>> : T extends object ? {
16
+ [key: string]: DeepMapKeys<T[keyof T]>;
17
+ } : T;
18
+ /**
19
+ * 递归处理对象里的 key
20
+ *
21
+ * @remarks
22
+ * 无法完整推导出类型,只能做到有递归,key 全为 string,value 为同层级的所有类型的联合
23
+ *
24
+ * @template T 要转换的对象
25
+ *
26
+ * @example
27
+ * const obj = { a: { b: 1 } };
28
+ * const result = mapKeys(obj, (key) => key.toUpperCase());
29
+ * console.log(result); // { A: { B: 1 } }
30
+ */
31
+ export declare const mapKeys: <T>(obj: T, getNewKey: (key: string) => string) => DeepMapKeys<T>;
32
+ export type DeepMapValues<T, R> = T extends Array<infer U> ? Array<DeepMapValues<U, R>> : T extends object ? {
33
+ [K in keyof T]: T[K] extends object ? DeepMapValues<T[K], R> : R;
34
+ } : R;
35
+ /**
36
+ * 递归处理对象里的 value
37
+ *
38
+ * @remarks
39
+ * 无法完整推导出类型,所有 value 最终都会变为 any
40
+ *
41
+ * @template T 要转换的对象
42
+ * @template R 转换后的值类型,为 any,无法进一步推导
43
+ *
44
+ * @example
45
+ * const obj = { a: 1, b: { c: 2 } };
46
+ * const result = mapValues(obj, (value, key) => isPrimitive(value) ? value + 1 : value);
47
+ * console.log(result); // { a: 2, b: { c: 3 } }
48
+ */
49
+ export declare const mapValues: <T, R = any>(obj: T, getNewValue: (value: any, key: string | number) => R) => DeepMapValues<T, R>;
package/dist/string.d.ts CHANGED
@@ -1,14 +1,28 @@
1
1
  /**
2
- * 转换下划线命名法为驼峰命名法
2
+ * 下划线命名法转为驼峰命名法
3
3
  *
4
4
  * @example
5
5
  * snakeToCamel("user_name") // 'userName'
6
6
  */
7
7
  export declare const snakeToCamel: (str: string) => string;
8
8
  /**
9
- * 转换驼峰命名法为下划线命名法
9
+ * 驼峰命名法转为下划线命名法
10
10
  *
11
11
  * @example
12
12
  * camelToSnake("shouldComponentUpdate") // 'should_component_update'
13
13
  */
14
14
  export declare const camelToSnake: (str: string) => string;
15
+ /**
16
+ * 字符串首字母大写
17
+ *
18
+ * @example
19
+ * capitalize("hello") // 'Hello'
20
+ */
21
+ export declare const capitalize: (s: string) => string;
22
+ /**
23
+ * 字符串首字母小写
24
+ *
25
+ * @example
26
+ * decapitalize("Hello") // 'hello'
27
+ */
28
+ export declare const decapitalize: (s: string) => string;
@@ -0,0 +1,262 @@
1
+ @import url("https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&family=Space+Mono:ital,wght@0,400;0,700;1,400;1,700&display=swap");
2
+
3
+ :root,
4
+ :root[data-theme="light"],
5
+ :root[data-theme="dark"] {
6
+ --font-sans: "Space Grotesk", sans-serif;
7
+ --font-mono: "Space Mono", monospace;
8
+
9
+ --color-background: var(--md-sys-color-surface-container);
10
+ --color-background-secondary: var(--md-sys-color-surface-container-high);
11
+ --color-background-warning: var(--md-sys-color-error-container);
12
+ --color-warning-text: var(--md-sys-color-on-error-container);
13
+ --color-icon-background: var(--md-sys-color-on-primary);
14
+ --color-accent: var(--md-sys-color-secondary-container);
15
+ --color-active-menu-item: var(--md-sys-color-surface-container-highest);
16
+ --color-text: var(--md-sys-color-on-surface);
17
+ --color-text-aside: var(--md-sys-color-on-surface-variant);
18
+ --color-link: var(--md-sys-color-primary);
19
+
20
+ --color-ts-project: var(--md-sys-color-secondary);
21
+ --color-ts-module: var(--color-ts-project);
22
+ --color-ts-namespace: var(--color-ts-project);
23
+
24
+ --color-ts-enum: var(--md-sys-color-tertiary);
25
+ --color-ts-enum-member: var(--color-ts-enum);
26
+
27
+ --color-ts-variable: var(--md-sys-color-primary);
28
+ --color-ts-function: var(--md-sys-color-secondary);
29
+ --color-ts-class: var(--md-sys-color-tertiary);
30
+ --color-ts-interface: var(--md-sys-color-tertiary);
31
+
32
+ --color-ts-constructor: var(--md-sys-color-inverse-primary);
33
+
34
+ --color-ts-property: var(--md-sys-color-on-background);
35
+ --color-ts-method: var(--color-ts-function);
36
+
37
+ --color-ts-call-signature: var(--color-ts-method);
38
+ --color-ts-index-signature: var(--color-ts-property); /* ? */
39
+ --color-ts-constructor-signature: var(--color-ts-function);
40
+ --color-ts-parameter: var(--md-sys-color-primary);
41
+
42
+ --color-ts-type-parameter: var(--md-sys-color-tertiary);
43
+ --color-ts-accessor: var(--color-ts-property);
44
+ --color-ts-get-signature: var(--color-ts-accessor);
45
+ --color-ts-set-signature: var(--color-ts-accessor);
46
+ --color-ts-type-alias: var(--md-sys-color-tertiary);
47
+
48
+ /* --external-icon: var(--md-sys-external-icon);
49
+ --color-scheme: var(--md-sys-color-scheme); */
50
+
51
+ --top-app-bar-height: 4.5rem;
52
+ --top-app-bar-padding-vertical: .5rem;
53
+ --footer-height: 3.5rem;
54
+
55
+ --safe-area-inset-top: env(safe-area-inset-top);
56
+ }
57
+
58
+ body {
59
+ font-family: var(--font-sans);
60
+ }
61
+ code,
62
+ pre {
63
+ font-family: var(--font-mono);
64
+ }
65
+
66
+ img {
67
+ max-width: 100%;
68
+ }
69
+
70
+ @supports not selector(::-webkit-scrollbar) {
71
+ * {
72
+ scrollbar-width: thin;
73
+ scrollbar-color: var(--color-accent) transparent;
74
+ }
75
+ }
76
+
77
+ @supports selector(::-webkit-scrollbar) {
78
+ *::-webkit-scrollbar {
79
+ width: 8px;
80
+ height: 8px;
81
+ }
82
+ *::-webkit-scrollbar-track {
83
+ background: none;
84
+ margin: 4px;
85
+ }
86
+ *::-webkit-scrollbar-thumb {
87
+ border: none;
88
+ }
89
+ *::-webkit-scrollbar-thumb:hover,
90
+ *::-webkit-scrollbar-thumb:active {
91
+ background-color: var(--md-sys-color-secondary);
92
+ }
93
+ * {
94
+ scrollbar-width: unset;
95
+ scrollbar-color: unset;
96
+ }
97
+ }
98
+
99
+ .container-main {
100
+ min-height: calc(100vh - var(--top-app-bar-height) - var(--footer-height));
101
+ }
102
+ .col-content {
103
+ overflow: hidden;
104
+ position: relative;
105
+ box-sizing: border-box;
106
+ padding: 1.75rem;
107
+ margin-bottom: 1.75rem;
108
+ border-radius: 28px;
109
+ background-color: var(--md-sys-color-surface);
110
+ }
111
+ .page-menu {
112
+ height: fit-content;
113
+ padding: 1.25rem 1.75rem;
114
+ border-radius: 28px;
115
+ background-color: var(--md-sys-color-surface);
116
+ }
117
+ .site-menu > *,
118
+ .page-menu > * {
119
+ position: relative;
120
+ }
121
+ .title {
122
+ display: inline-block;
123
+ white-space: nowrap;
124
+ overflow: hidden;
125
+ text-overflow: ellipsis;
126
+ font-size: 22px;
127
+ }
128
+ .tsd-page-title {
129
+ word-break: break-all;
130
+ }
131
+ .tsd-page-toolbar {
132
+ padding: 1rem 0;
133
+ background-color: var(--color-background);
134
+ border-bottom: none;
135
+ }
136
+ .tsd-page-toolbar .tsd-toolbar-icon {
137
+ padding: 20px 0;
138
+ }
139
+ #tsd-search {
140
+ border-radius: 38px;
141
+ }
142
+ #tsd-search-input {
143
+ border-radius: 22px;
144
+ }
145
+ #tsd-search-input:focus-visible {
146
+ background-color: var(--color-accent);
147
+ }
148
+ #tsd-search-results > li {
149
+ background: none;
150
+ }
151
+ #tsd-toolbar-menu-trigger,
152
+ #tsd-search-trigger {
153
+ border-radius: 50%;
154
+ }
155
+ html:not(.has-menu) .col-sidebar {
156
+ padding-top: 0;
157
+ margin-right: 1rem;
158
+ }
159
+
160
+ .tsd-signature {
161
+ padding: 1rem 1.5rem;
162
+ border-radius: 24px;
163
+ background-color: var(--md-sys-color-surface-container);
164
+ }
165
+
166
+ .tsd-page-navigation ul {
167
+ padding-left: 0.44rem;
168
+ }
169
+ .tsd-navigation a,
170
+ .tsd-navigation summary > span,
171
+ .tsd-page-navigation a {
172
+ padding: 0.88rem;
173
+ border-radius: 24px;
174
+ }
175
+ .tsd-navigation a:hover,
176
+ .tsd-page-navigation a:hover {
177
+ text-decoration: none;
178
+ background-color: var(--md-sys-color-surface-container-high);
179
+ }
180
+ .page-menu .tsd-accordion-summary {
181
+ margin-bottom: 0.5rem;
182
+ }
183
+ .page-menu .tsd-accordion-summary svg {
184
+ position: absolute;
185
+ right: 0;
186
+ }
187
+ .site-menu .tsd-navigation .tsd-accordion-summary {
188
+ display: flex;
189
+ flex-direction: row-reverse;
190
+ width: 100%;
191
+ }
192
+
193
+ .tsd-small-nested-navigation {
194
+ margin-left: 1rem;
195
+ }
196
+ .tsd-nested-navigation {
197
+ margin-left: 2.5rem;
198
+ }
199
+ .tsd-nested-navigation > li > a,
200
+ .tsd-nested-navigation > li > span {
201
+ width: 100%;
202
+ }
203
+ .tsd-navigation > a,
204
+ .tsd-navigation .tsd-accordion-summary {
205
+ width: 100%;
206
+ }
207
+ .tsd-accordion .tsd-accordion-summary > svg,
208
+ .tsd-index-accordion .tsd-accordion-summary > svg {
209
+ position: absolute;
210
+ right: 1.5rem;
211
+ }
212
+ .tsd-accordion-summary .tsd-kind-icon ~ span {
213
+ margin-right: 2.5rem;
214
+ }
215
+ .tsd-accordion-summary .tsd-nested-navigation > li > a,
216
+ .tsd-nested-navigation > li > span {
217
+ width: calc(100% - 0.44rem);
218
+ }
219
+ .tsd-kind-icon ~ span {
220
+ white-space: nowrap;
221
+ overflow: hidden;
222
+ text-overflow: ellipsis;
223
+ }
224
+ .tsd-generator {
225
+ padding: 0;
226
+ border-top: none;
227
+ height: var(--footer-height);
228
+ line-height: var(--footer-height);
229
+ }
230
+ .tsd-generator > p {
231
+ padding: 0 2rem;
232
+ }
233
+
234
+ @media (max-width: 769px) {
235
+ .col-sidebar {
236
+ margin-right: 0;
237
+ }
238
+ }
239
+ @media (min-width: 770px) {
240
+ .container-main {
241
+ margin: 0 auto;
242
+ }
243
+ .site-menu {
244
+ margin-right: 0.5rem;
245
+ }
246
+ }
247
+ @media (min-width: 1200px) {
248
+ .page-menu,
249
+ .site-menu {
250
+ max-height: calc(100vh - var(--footer-height) - var(--top-app-bar-height));
251
+ top: var(--top-app-bar-height);
252
+ }
253
+ .site-menu {
254
+ margin-top: 0;
255
+ }
256
+ .page-menu {
257
+ margin-left: 1rem;
258
+ }
259
+ .col-sidebar {
260
+ margin-right: 0;
261
+ }
262
+ }
@@ -1 +1 @@
1
- window.navigationData = "eJyFkc1KAzEURt/lWw9WS1XMtitBUOzsxMUYr81t8zNObqsifXcZ20Atd8ZtDueEfHn6htCnwOCR3jeU5TayoELbiIOBfLWUJwVFljMnwaPCmuMrzPT85vricrqrSgULklr8aWB/+p9rm0C+TovYrKkUDN420QqnmCfH/G/ralYyvUBiHXVa4YCGZBhwvn9ZkRXNLmxUf+g4sPBWfUHBvB17QKBuSfurslY55kMZGGRP1Gr+LxgT+4HrNO/nVv3CA/mhTP/1HOguLbXCAY3JSfXSkAKDDxY3b6xTly/wdPfZ7vkHVokErg=="
1
+ window.navigationData = "eJyFk19LwzAUR7/LfS5Wx1TM63wRFcUVX8SHmN2tcflnc6tO2XeX2gXWkLSvOZwDIb+8/ALhNwGDa0R3z90t7jwU4DjVwIB2Dn0ZEO78SU1aQQFbaVbAZqdXl2fns30RV565ajHX6eFU6bGRWpL8xLgSAE4VnvCjRU83RlLcCMhImqoskSpScaA/nXIF16gquzR8G64BDNatESSt8eUxH7Yu5oOMk8SV/MlEAs0lgMEKxyPHPJfpBCRRY5MqHFBOBgbSP7y9o6CUHdioHk8iKmSGMYjoeOEh4EudWngsx8Me6KlhDwPYbLC/aLoRuKCxjFeILuX/gzGxG1plF93skn7gGlUu030BqfHOblKFAxqTbdKzOQUYfEmqF1zUyXcPMH71+f71Dx63pGM="
@@ -1 +1 @@
1
- window.searchData = "eJyNlcGO2jAQht/lP1uEAAHi655WqtSqu+rFQhUN3sXdxKaxYVtZeffKSUailtv6Rmb8fSH2jMejN+8WXHi8KX0CXy3rXVmtGPSxk+D4LH9cpXWPWjkwXPsWHO7XRdqCMlq5xdl1LRia9mittODAwP5mfJLu2bWRbAr+07PdkALNsZPts3nSxzdJIrxcdeOU0ba4T+cqX6RrzrKPbdoWcyZXpOzHb99l42KTtgWlclXKfupVp5y6pb6SsuqW+5HoZP8qp/9gY6O2xX06V2lbKS+xS9tijOdKbDipZ/MQzi3lonQnc0sETnXyg3mNbdoWcyZX5EzKYXLxd+XOD8fmnDpByiXP78Cg9En+BPe4yd4qo8GxWqwXNRhelGxPoW+n9zA0puukDlV3Ms11/HmYl32RjTN9WDytLpZgYslW5aKqq8OBCYLHxBggB0VmsAQTZQosY5AiM7gCE6sUuIpBiszgGkysU+A6BikygxswsUmBmxikyAxWYKJKgVUMUmQGt2BimwK3MUiRGdyBiV0K3MUgRWZwDyb2KXAfgxSZwRpM1CmwjkGKUAGEeiiTtVPGxXMfmuCxfNL1ExcQhQ5jG9xk7+TpcWoHIab73xk73f8eX+dOoSHDPVbgfhioL1x4otaYnobwNrr1yfETfE0Oj3WWQ1kzX/gkAaf+5x6bTMmFLvN7T0UejyrLM17hhm54EoFvSeSxzRL103RX49wnD/iSPB7LLI+VzoVpTwrwkhQeZZ5iGjFkAN+RwWOXZwiF4kwzzRcSge9J5LHPEoXZ0YapQg7wmhwedZ7D/LEbtKNhO/K2NIyNZhop5AEv77f1f/s6DKGvLuoiW6UluDgMw2/yGD3j";
1
+ window.searchData = "eJyVl0tv2zAQhP/LnInY9Nu8ppeiLVq0QS6CUajypmGjV0U6TSr4vxcUtYBMsAlzs2c1n6XFcL3q0TV/DFTW40HXR6jFfL+V64VAnVcEhXdE7ae8/UDPBgKnroSCfW7JzLhCz+bq3lYlBIoyN4YMFHAWrxBv8/JE/2H62puoXzpdaasfKSCyTm+ifaXfJzL2fa1twONKre2biN/I3tgygHnxRc5mxQgUeUXlTfOtzh/4KRXuTnVhdVOb2bSciizyVtu81H/jQC6m4o70InBaTkXekS3uqQtptZmNlVSQNp9//KLChqTazLiUitImTNslLS1zDIRCFRwwhplZ9doBC0HhubpAvXauAhh1P8l3JsrjcmFTkTAlURuyajMb9FSIcQm/aa5d3mMsLleUerRgdUUfm58hrTazsZIKsk2M0aTa/2h7f50X97FccS2aqoOAro/0BNXjkTqjmxoKi6vl1R4Cd5rKo5vy/ncEiqaqqHZn4dgUp+HjYbzslgrbdO5if/VsDpHNxWJ9tZ8vDweRsXkoDAIzWBmNEiKTMaMMjayMxgVEtogZF6GRldG4hMiWMeMyNLIyGlcQ2SpmXIVGVkbjGiJbx4zr0MjKaNxAZJuYcRMaWRmNW4hsGzNuQyMro3EHke1ixl1oZGU07iGyfcy4D42scABcHmQ0OzIMz1Ty5iE+8fyEAZpK3uxyIaMZkmGIppI3u2zIaI5kGKSp5M0uHzKaJRmGaSp5s8uIjOZJhoGaSt7sciKjmZJhqKaSN7usyGiuZBisqeTNLi8ymi0ZhoulwzCxHqmzdHzvJ1eW+RXHNsavOD2+j0NtzROyxxqqP595hFn3jaeY/3Yefp8XjQvMhjE9NkmYy4WGQVBbBvXYJoKorfL2YfiXZw7UnDk95m/hPI5/8kyCkkzqIZNIvFgx4wlqx4weuySGNs24UzEEas+QHvtESMv70sUDcW/cE6U1J2ywo0z7ktaYeHt5k3ecRRrH7UcNr0+MgpJLRvWQyyRUtEF8R6pH2g11/tVFDy81zIHi21E90u7GkLXuVYYRULzAqB6rNITfA5kAJRnhmpLIcEPCNoVfAxkFJXlYOFTatHBLXunWP6ZASZ4VjpI2LNzuxwAoyTPCAdKGhNvwCr/9MQdK8ql0nNeO5fns5mqrWyp1TVDZ4Xz+B8ojHJE=";