@netfoundry/docusaurus-theme 0.10.1 → 0.10.4
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.
- package/css/product-picker.css +4 -3
- package/css/vars.css +4 -0
- package/dist/css/product-picker.css +4 -3
- package/dist/css/vars.css +4 -0
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/options.d.ts +39 -0
- package/dist/src/options.d.ts.map +1 -1
- package/dist/theme/NavbarItem/types/IconLinks/index.d.ts.map +1 -1
- package/dist/theme/NavbarItem/types/IconLinks/index.js +23 -19
- package/dist/theme/NavbarItem/types/IconLinks/index.js.map +1 -1
- package/dist/theme/NavbarItem/types/ResourcesPicker/index.d.ts.map +1 -1
- package/dist/theme/NavbarItem/types/ResourcesPicker/index.js +34 -16
- package/dist/theme/NavbarItem/types/ResourcesPicker/index.js.map +1 -1
- package/package.json +1 -1
- package/theme/NavbarItem/types/IconLinks/index.tsx +28 -24
- package/theme/NavbarItem/types/ResourcesPicker/index.tsx +52 -51
package/css/product-picker.css
CHANGED
|
@@ -194,7 +194,8 @@
|
|
|
194
194
|
.nf-icon-links {
|
|
195
195
|
display: flex;
|
|
196
196
|
align-items: center;
|
|
197
|
-
gap: 0.
|
|
197
|
+
gap: var(--nf-icon-links-gap, 0.25rem);
|
|
198
|
+
padding: var(--nf-icon-links-padding, 0 0.5rem);
|
|
198
199
|
}
|
|
199
200
|
|
|
200
201
|
.nf-icon-link,
|
|
@@ -202,8 +203,8 @@
|
|
|
202
203
|
display: flex;
|
|
203
204
|
align-items: center;
|
|
204
205
|
justify-content: center;
|
|
205
|
-
width: 2rem;
|
|
206
|
-
height: 2rem;
|
|
206
|
+
width: var(--nf-icon-link-size, 2rem);
|
|
207
|
+
height: var(--nf-icon-link-size, 2rem);
|
|
207
208
|
color: var(--ifm-navbar-link-color);
|
|
208
209
|
text-decoration: none;
|
|
209
210
|
}
|
package/css/vars.css
CHANGED
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
--ifm-navbar-padding-vertical: 0;
|
|
4
4
|
--nf-docs-max-width: 1400px;
|
|
5
5
|
|
|
6
|
+
--nf-icon-links-gap: 0.25rem;
|
|
7
|
+
--nf-icon-links-padding: 0 0.5rem;
|
|
8
|
+
--nf-icon-link-size: 2rem;
|
|
9
|
+
|
|
6
10
|
--nf-color-primary: 119, 194, 252;
|
|
7
11
|
--nf-color-secondary: 78, 219, 63;
|
|
8
12
|
--nf-color-tertiary: 3, 92, 230;
|
|
@@ -194,7 +194,8 @@
|
|
|
194
194
|
.nf-icon-links {
|
|
195
195
|
display: flex;
|
|
196
196
|
align-items: center;
|
|
197
|
-
gap: 0.
|
|
197
|
+
gap: var(--nf-icon-links-gap, 0.25rem);
|
|
198
|
+
padding: var(--nf-icon-links-padding, 0 0.5rem);
|
|
198
199
|
}
|
|
199
200
|
|
|
200
201
|
.nf-icon-link,
|
|
@@ -202,8 +203,8 @@
|
|
|
202
203
|
display: flex;
|
|
203
204
|
align-items: center;
|
|
204
205
|
justify-content: center;
|
|
205
|
-
width: 2rem;
|
|
206
|
-
height: 2rem;
|
|
206
|
+
width: var(--nf-icon-link-size, 2rem);
|
|
207
|
+
height: var(--nf-icon-link-size, 2rem);
|
|
207
208
|
color: var(--ifm-navbar-link-color);
|
|
208
209
|
text-decoration: none;
|
|
209
210
|
}
|
package/dist/css/vars.css
CHANGED
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
--ifm-navbar-padding-vertical: 0;
|
|
4
4
|
--nf-docs-max-width: 1400px;
|
|
5
5
|
|
|
6
|
+
--nf-icon-links-gap: 0.25rem;
|
|
7
|
+
--nf-icon-links-padding: 0 0.5rem;
|
|
8
|
+
--nf-icon-link-size: 2rem;
|
|
9
|
+
|
|
6
10
|
--nf-color-primary: 119, 194, 252;
|
|
7
11
|
--nf-color-secondary: 78, 219, 63;
|
|
8
12
|
--nf-color-tertiary: 3, 92, 230;
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { LoadContext, Plugin } from '@docusaurus/types';
|
|
2
2
|
import type { NetFoundryThemeOptions } from './options';
|
|
3
3
|
export default function themeNetFoundry(context: LoadContext, options?: NetFoundryThemeOptions): Plugin;
|
|
4
|
-
export type { NetFoundryThemeOptions, NetFoundryThemeConfig } from './options';
|
|
4
|
+
export type { NetFoundryThemeOptions, NetFoundryThemeConfig, ResourcesPickerSection, ResourcesPickerLink, NavbarIconLink, NavbarIconName, } from './options';
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAGxD,MAAM,CAAC,OAAO,UAAU,eAAe,CACrC,OAAO,EAAE,WAAW,EACpB,OAAO,GAAE,sBAA2B,GACnC,MAAM,CAoCR;AAGD,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAGxD,MAAM,CAAC,OAAO,UAAU,eAAe,CACrC,OAAO,EAAE,WAAW,EACpB,OAAO,GAAE,sBAA2B,GACnC,MAAM,CAoCR;AAGD,YAAY,EACV,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,cAAc,EACd,cAAc,GACf,MAAM,WAAW,CAAC"}
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,OAAO,UAAU,eAAe,CACrC,OAAoB,EACpB,UAAkC,EAAE;IAEpC,OAAO;QACL,IAAI,EAAE,8BAA8B;QAEpC,qCAAqC;QACrC,YAAY;YACV,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAC7C,CAAC;QAED,6BAA6B;QAC7B,sBAAsB;YACpB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAC7C,CAAC;QAED,2BAA2B;QAC3B,gBAAgB;YACd,MAAM,OAAO,GAAa;gBACxB,mDAAmD;gBACnD,gEAAgE;gBAChE,iEAAiE;gBACjE,iEAAiE;gBACjE,2BAA2B;gBAC3B,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC;aACpC,CAAC;YAEF,yCAAyC;YACzC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBACtB,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;oBACrD,CAAC,CAAC,OAAO,CAAC,SAAS;oBACnB,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;YAClC,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,OAAO,UAAU,eAAe,CACrC,OAAoB,EACpB,UAAkC,EAAE;IAEpC,OAAO;QACL,IAAI,EAAE,8BAA8B;QAEpC,qCAAqC;QACrC,YAAY;YACV,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAC7C,CAAC;QAED,6BAA6B;QAC7B,sBAAsB;YACpB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAC7C,CAAC;QAED,2BAA2B;QAC3B,gBAAgB;YACd,MAAM,OAAO,GAAa;gBACxB,mDAAmD;gBACnD,gEAAgE;gBAChE,iEAAiE;gBACjE,iEAAiE;gBACjE,2BAA2B;gBAC3B,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC;aACpC,CAAC;YAEF,yCAAyC;YACzC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBACtB,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;oBACrD,CAAC,CAAC,OAAO,CAAC,SAAS;oBACnB,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;YAClC,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC;AAYD,+EAA+E;AAC/E,sFAAsF;AACtF,6EAA6E"}
|
package/dist/src/options.d.ts
CHANGED
|
@@ -36,6 +36,41 @@ export interface StarBannerConfig {
|
|
|
36
36
|
/** Only show banner when the current path starts with this prefix (e.g. '/docs/openziti') */
|
|
37
37
|
pathPrefix?: string;
|
|
38
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* A named icon supported in navbar items (resources picker links, icon links, etc.)
|
|
41
|
+
*/
|
|
42
|
+
export type NavbarIconName = 'discourse' | 'github' | 'youtube';
|
|
43
|
+
/**
|
|
44
|
+
* A link inside a resources picker section
|
|
45
|
+
*/
|
|
46
|
+
export interface ResourcesPickerLink {
|
|
47
|
+
label: string;
|
|
48
|
+
description: string;
|
|
49
|
+
href: string;
|
|
50
|
+
/** Image URL for the link logo */
|
|
51
|
+
logoUrl?: string;
|
|
52
|
+
/** Named icon to use instead of an image */
|
|
53
|
+
iconName?: NavbarIconName;
|
|
54
|
+
/** Show a small badge icon over the logo */
|
|
55
|
+
badge?: 'youtube';
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* A section (header + links) in the resources picker dropdown
|
|
59
|
+
*/
|
|
60
|
+
export interface ResourcesPickerSection {
|
|
61
|
+
header: string;
|
|
62
|
+
links: ResourcesPickerLink[];
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* A single icon link in the navbar icon row
|
|
66
|
+
*/
|
|
67
|
+
export interface NavbarIconLink {
|
|
68
|
+
href: string;
|
|
69
|
+
title: string;
|
|
70
|
+
iconName: NavbarIconName;
|
|
71
|
+
/** Only show when the current path starts with one of these prefixes */
|
|
72
|
+
pathPrefixes?: string[];
|
|
73
|
+
}
|
|
39
74
|
/**
|
|
40
75
|
* A single link entry in the product picker
|
|
41
76
|
*/
|
|
@@ -107,6 +142,10 @@ export interface NetFoundryThemeConfig {
|
|
|
107
142
|
productPickerColumns?: ProductPickerColumn[];
|
|
108
143
|
/** Logo URL for the NetFoundry Console link in the product picker (overrides the default NetFoundry branding icon) */
|
|
109
144
|
consoleLogo?: string;
|
|
145
|
+
/** Resources picker sections. If omitted, the theme falls back to built-in NetFoundry defaults. */
|
|
146
|
+
resourcesPickerSections?: ResourcesPickerSection[];
|
|
147
|
+
/** Navbar icon links. If omitted, the theme falls back to built-in NetFoundry defaults. */
|
|
148
|
+
navbarIconLinks?: NavbarIconLink[];
|
|
110
149
|
}
|
|
111
150
|
/**
|
|
112
151
|
* Extended Docusaurus ThemeConfig with NetFoundry configuration
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,iEAAiE;IACjE,kBAAkB,CAAC,EAAE,SAAS,EAAE,CAAC;IACjC,8BAA8B;IAC9B,cAAc,CAAC,EAAE,SAAS,EAAE,CAAC;IAC7B,8BAA8B;IAC9B,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,6FAA6F;IAC7F,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,iBAAiB,EAAE,CAAC;CAC5B;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,sBAAsB;IACrC,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,qBAAqB;IACpC,2BAA2B;IAC3B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,wIAAwI;IACxI,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACjC,gGAAgG;IAChG,oBAAoB,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC7C,sHAAsH;IACtH,WAAW,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,iEAAiE;IACjE,kBAAkB,CAAC,EAAE,SAAS,EAAE,CAAC;IACjC,8BAA8B;IAC9B,cAAc,CAAC,EAAE,SAAS,EAAE,CAAC;IAC7B,8BAA8B;IAC9B,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,6FAA6F;IAC7F,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,4CAA4C;IAC5C,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,mBAAmB,EAAE,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,cAAc,CAAC;IACzB,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,iBAAiB,EAAE,CAAC;CAC5B;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,sBAAsB;IACrC,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,qBAAqB;IACpC,2BAA2B;IAC3B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,wIAAwI;IACxI,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACjC,gGAAgG;IAChG,oBAAoB,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC7C,sHAAsH;IACtH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mGAAmG;IACnG,uBAAuB,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACnD,2FAA2F;IAC3F,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../theme/NavbarItem/types/IconLinks/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../theme/NavbarItem/types/IconLinks/index.tsx"],"names":[],"mappings":"AAmBA,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,MAAM,EAAE;IAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAC,2CAmBtE"}
|
|
@@ -1,22 +1,26 @@
|
|
|
1
|
-
import { jsx as _jsx,
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useThemeConfig } from '@docusaurus/theme-common';
|
|
3
|
+
import { useLocation } from 'react-router-dom';
|
|
4
|
+
import { DiscourseIcon, GitHubIcon, YouTubeIcon } from '@netfoundry/docusaurus-theme/ui';
|
|
5
|
+
const DEFAULT_ICON_LINKS = [
|
|
6
|
+
{ href: 'https://openziti.discourse.group/', title: 'Discourse', iconName: 'discourse' },
|
|
7
|
+
{ href: 'https://github.com/openziti/ziti', title: 'GitHub', iconName: 'github', pathPrefixes: ['/docs/openziti'] },
|
|
8
|
+
{ href: 'https://github.com/openziti/zrok', title: 'GitHub', iconName: 'github', pathPrefixes: ['/docs/zrok'] },
|
|
9
|
+
];
|
|
10
|
+
function resolveIcon(name) {
|
|
11
|
+
if (name === 'discourse')
|
|
12
|
+
return _jsx(DiscourseIcon, {});
|
|
13
|
+
if (name === 'github')
|
|
14
|
+
return _jsx(GitHubIcon, {});
|
|
15
|
+
if (name === 'youtube')
|
|
16
|
+
return _jsx(YouTubeIcon, {});
|
|
17
|
+
return _jsx(_Fragment, {});
|
|
18
|
+
}
|
|
8
19
|
export default function IconLinks(_props) {
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
setGithubUrl(entry ? entry[1] : null);
|
|
15
|
-
};
|
|
16
|
-
check();
|
|
17
|
-
window.addEventListener('popstate', check);
|
|
18
|
-
return () => window.removeEventListener('popstate', check);
|
|
19
|
-
}, []);
|
|
20
|
-
return (_jsxs("div", { className: "nf-icon-links", children: [githubUrl && (_jsx("a", { href: githubUrl, target: "_blank", rel: "noopener noreferrer", className: "nf-icon-link", title: "GitHub", children: _jsx(GitHubIcon, {}) })), _jsx("a", { href: "https://openziti.discourse.group/", target: "_blank", rel: "noopener noreferrer", className: "nf-icon-link nf-icon-link--discourse", title: "Discourse", children: _jsx(DiscourseIcon, {}) })] }));
|
|
20
|
+
const themeConfig = useThemeConfig();
|
|
21
|
+
const links = themeConfig?.netfoundry?.navbarIconLinks ?? DEFAULT_ICON_LINKS;
|
|
22
|
+
const { pathname } = useLocation();
|
|
23
|
+
const visible = links.filter(link => !link.pathPrefixes || link.pathPrefixes.some((p) => pathname.startsWith(p)));
|
|
24
|
+
return (_jsx("div", { className: "nf-icon-links", children: visible.map((link, i) => (_jsx("a", { href: link.href, target: "_blank", rel: "noopener noreferrer", className: `nf-icon-link nf-icon-link--${link.iconName}`, title: link.title, children: resolveIcon(link.iconName) }, i))) }));
|
|
21
25
|
}
|
|
22
26
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../theme/NavbarItem/types/IconLinks/index.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../theme/NavbarItem/types/IconLinks/index.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,cAAc,EAAC,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAC,aAAa,EAAE,UAAU,EAAE,WAAW,EAAC,MAAM,iCAAiC,CAAC;AAGvF,MAAM,kBAAkB,GAAqB;IAC3C,EAAC,IAAI,EAAE,mCAAmC,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAC;IACtF,EAAC,IAAI,EAAE,kCAAkC,EAAG,KAAK,EAAE,QAAQ,EAAK,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,gBAAgB,CAAC,EAAC;IACrH,EAAC,IAAI,EAAE,kCAAkC,EAAG,KAAK,EAAE,QAAQ,EAAK,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,YAAY,CAAC,EAAC;CAClH,CAAC;AAEF,SAAS,WAAW,CAAC,IAAY;IAC/B,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,KAAC,aAAa,KAAG,CAAC;IACnD,IAAI,IAAI,KAAK,QAAQ;QAAK,OAAO,KAAC,UAAU,KAAG,CAAC;IAChD,IAAI,IAAI,KAAK,SAAS;QAAI,OAAO,KAAC,WAAW,KAAG,CAAC;IACjD,OAAO,mBAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,MAAqC;IACrE,MAAM,WAAW,GAAG,cAAc,EAAS,CAAC;IAC5C,MAAM,KAAK,GAAqB,WAAW,EAAE,UAAU,EAAE,eAAe,IAAI,kBAAkB,CAAC;IAC/F,MAAM,EAAC,QAAQ,EAAC,GAAG,WAAW,EAAE,CAAC;IAEjC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAClC,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CACpF,CAAC;IAEF,OAAO,CACL,cAAK,SAAS,EAAC,eAAe,YAC3B,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACxB,YAAW,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAC,QAAQ,EAAC,GAAG,EAAC,qBAAqB,EAClE,SAAS,EAAE,8BAA8B,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,YAC3E,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAFrB,CAAC,CAGL,CACL,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../theme/NavbarItem/types/ResourcesPicker/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../theme/NavbarItem/types/ResourcesPicker/index.tsx"],"names":[],"mappings":"AA8DA,KAAK,KAAK,GAAG;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EAAC,KAAmB,EAAE,SAAS,EAAC,EAAE,KAAK,2CAoB9E"}
|
|
@@ -1,30 +1,48 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import Link from '@docusaurus/Link';
|
|
3
3
|
import { useThemeConfig } from '@docusaurus/theme-common';
|
|
4
4
|
import NavbarPicker from '../../NavbarPicker';
|
|
5
|
-
import { DiscourseIcon, YouTubeIcon } from '@netfoundry/docusaurus-theme/ui';
|
|
5
|
+
import { DiscourseIcon, GitHubIcon, YouTubeIcon } from '@netfoundry/docusaurus-theme/ui';
|
|
6
6
|
const NF_LOGO_DEFAULT = 'https://raw.githubusercontent.com/netfoundry/branding/refs/heads/main/images/svg/icon/netfoundry-icon-color.svg';
|
|
7
7
|
const OPENZITI_LOGO_DEFAULT = 'https://netfoundry.io/docs/img/openziti-sm-logo.svg';
|
|
8
|
-
function
|
|
9
|
-
|
|
8
|
+
function resolveIcon(name, size = 32) {
|
|
9
|
+
if (name === 'discourse')
|
|
10
|
+
return _jsx(DiscourseIcon, { width: size, height: size });
|
|
11
|
+
if (name === 'github')
|
|
12
|
+
return _jsx(GitHubIcon, { width: size, height: size });
|
|
13
|
+
if (name === 'youtube')
|
|
14
|
+
return _jsx(YouTubeIcon, { width: size, height: size });
|
|
15
|
+
return _jsx(_Fragment, {});
|
|
10
16
|
}
|
|
11
17
|
function ResourceLink({ link }) {
|
|
12
|
-
|
|
18
|
+
const badge = link.badge ? resolveIcon(link.badge, 14) : null;
|
|
19
|
+
return (_jsxs(Link, { to: link.href, className: "picker-link", target: "_blank", rel: "noopener noreferrer", children: [link.logoUrl ? (_jsxs("span", { style: { position: 'relative', display: 'inline-flex', flexShrink: 0, marginRight: '0.8rem', width: 32, height: 32 }, children: [_jsx("img", { src: link.logoUrl, style: { width: 32, height: 32, objectFit: 'contain' }, alt: "" }), badge && (_jsx("span", { style: { position: 'absolute', bottom: -2, right: -4, width: 14, height: 14, display: 'block' }, children: badge }))] })) : link.iconName ? (_jsx("span", { className: "picker-logo", children: resolveIcon(link.iconName) })) : null, _jsxs("div", { className: "picker-text", children: [_jsx("strong", { children: link.label }), _jsx("span", { children: link.description })] })] }));
|
|
20
|
+
}
|
|
21
|
+
function buildDefaultSections(consoleLogo, openzitiLogo) {
|
|
22
|
+
const youtubeBadge = 'youtube';
|
|
23
|
+
return [
|
|
24
|
+
{
|
|
25
|
+
header: 'Learn & Engage',
|
|
26
|
+
links: [
|
|
27
|
+
{ label: 'NetFoundry Blog', description: 'Latest news, updates, and insights from NetFoundry.', href: 'https://netfoundry.io/blog/', logoUrl: consoleLogo },
|
|
28
|
+
{ label: 'OpenZiti Tech Blog', description: 'Technical articles and community updates.', href: 'https://blog.openziti.io/', logoUrl: openzitiLogo },
|
|
29
|
+
],
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
header: 'Community & Support',
|
|
33
|
+
links: [
|
|
34
|
+
{ label: 'NetFoundry YouTube', description: 'Video tutorials, demos, and technical deep dives.', href: 'https://www.youtube.com/c/NetFoundry', logoUrl: consoleLogo, badge: youtubeBadge },
|
|
35
|
+
{ label: 'OpenZiti YouTube', description: 'OpenZiti community videos and project updates.', href: 'https://www.youtube.com/openziti', logoUrl: openzitiLogo, badge: youtubeBadge },
|
|
36
|
+
{ label: 'OpenZiti Discourse', description: 'Ask questions and connect with the community.', href: 'https://openziti.discourse.group/', iconName: 'discourse' },
|
|
37
|
+
],
|
|
38
|
+
},
|
|
39
|
+
];
|
|
13
40
|
}
|
|
14
41
|
export default function ResourcesPicker({ label = 'Resources', className }) {
|
|
15
42
|
const themeConfig = useThemeConfig();
|
|
16
43
|
const consoleLogo = themeConfig?.netfoundry?.consoleLogo ?? NF_LOGO_DEFAULT;
|
|
17
44
|
const openzitiLogo = themeConfig?.netfoundry?.openzitiLogo ?? OPENZITI_LOGO_DEFAULT;
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
{ label: 'NetFoundry Blog', description: 'Latest news, updates, and insights from NetFoundry.', href: 'https://netfoundry.io/blog/', logoSrc: consoleLogo },
|
|
21
|
-
{ label: 'OpenZiti Tech Blog', description: 'Technical articles and community updates.', href: 'https://blog.openziti.io/', logoSrc: openzitiLogo },
|
|
22
|
-
];
|
|
23
|
-
const communityLinks = [
|
|
24
|
-
{ label: 'NetFoundry YouTube', description: 'Video tutorials, demos, and technical deep dives.', href: 'https://www.youtube.com/c/NetFoundry', logoSrc: consoleLogo, badge: youtubeBadge },
|
|
25
|
-
{ label: 'OpenZiti YouTube', description: 'OpenZiti community videos and project updates.', href: 'https://www.youtube.com/openziti', logoSrc: openzitiLogo, badge: youtubeBadge },
|
|
26
|
-
{ label: 'OpenZiti Discourse', description: 'Ask questions and connect with the community.', href: 'https://openziti.discourse.group/', icon: _jsx(DiscourseIcon, { width: 32, height: 32 }) },
|
|
27
|
-
];
|
|
28
|
-
return (_jsx(NavbarPicker, { label: label, className: className, panelClassName: "nf-picker-panel--narrow", autoPosition: true, children: _jsxs("div", { className: "picker-column", children: [_jsx("span", { className: "picker-header picker-header--nf-primary", style: { color: 'var(--ifm-color-primary)' }, children: "Learn & Engage" }), learnLinks.map((link, i) => _jsx(ResourceLink, { link: link }, i)), _jsx("span", { className: "picker-header picker-header--nf-secondary", style: { marginTop: '0.75rem' }, children: "Community & Support" }), communityLinks.map((link, i) => _jsx(ResourceLink, { link: link }, i))] }) }));
|
|
45
|
+
const sections = themeConfig?.netfoundry?.resourcesPickerSections ?? buildDefaultSections(consoleLogo, openzitiLogo);
|
|
46
|
+
return (_jsx(NavbarPicker, { label: label, className: className, panelClassName: "nf-picker-panel--narrow", autoPosition: true, children: sections.map((section, i) => (_jsxs("div", { className: "picker-column", children: [_jsx("span", { className: `picker-header picker-header--nf-${i === 0 ? 'primary' : 'secondary'}`, style: i === 0 ? { color: 'var(--ifm-color-primary)' } : { marginTop: '0.75rem' }, children: section.header }), section.links.map((link, j) => _jsx(ResourceLink, { link: link }, j))] }, i))) }));
|
|
29
47
|
}
|
|
30
48
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../theme/NavbarItem/types/ResourcesPicker/index.tsx"],"names":[],"mappings":";AACA,OAAO,IAAI,MAAM,kBAAkB,CAAC;AACpC,OAAO,EAAC,cAAc,EAAC,MAAM,0BAA0B,CAAC;AACxD,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAC,aAAa,EAAE,WAAW,EAAC,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../theme/NavbarItem/types/ResourcesPicker/index.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,35 +1,39 @@
|
|
|
1
|
-
import React
|
|
2
|
-
import {
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import {useThemeConfig} from '@docusaurus/theme-common';
|
|
3
|
+
import {useLocation} from 'react-router-dom';
|
|
4
|
+
import {DiscourseIcon, GitHubIcon, YouTubeIcon} from '@netfoundry/docusaurus-theme/ui';
|
|
5
|
+
import type {NavbarIconLink} from '@netfoundry/docusaurus-theme';
|
|
3
6
|
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}
|
|
7
|
+
const DEFAULT_ICON_LINKS: NavbarIconLink[] = [
|
|
8
|
+
{href: 'https://openziti.discourse.group/', title: 'Discourse', iconName: 'discourse'},
|
|
9
|
+
{href: 'https://github.com/openziti/ziti', title: 'GitHub', iconName: 'github', pathPrefixes: ['/docs/openziti']},
|
|
10
|
+
{href: 'https://github.com/openziti/zrok', title: 'GitHub', iconName: 'github', pathPrefixes: ['/docs/zrok']},
|
|
11
|
+
];
|
|
12
|
+
|
|
13
|
+
function resolveIcon(name: string): React.ReactElement {
|
|
14
|
+
if (name === 'discourse') return <DiscourseIcon />;
|
|
15
|
+
if (name === 'github') return <GitHubIcon />;
|
|
16
|
+
if (name === 'youtube') return <YouTubeIcon />;
|
|
17
|
+
return <></>;
|
|
18
|
+
}
|
|
8
19
|
|
|
9
20
|
export default function IconLinks(_props: {position?: 'left' | 'right'}) {
|
|
10
|
-
const
|
|
21
|
+
const themeConfig = useThemeConfig() as any;
|
|
22
|
+
const links: NavbarIconLink[] = themeConfig?.netfoundry?.navbarIconLinks ?? DEFAULT_ICON_LINKS;
|
|
23
|
+
const {pathname} = useLocation();
|
|
11
24
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const entry = Object.entries(GITHUB_ROUTES).find(([p]) => pathname.startsWith(p));
|
|
16
|
-
setGithubUrl(entry ? entry[1] : null);
|
|
17
|
-
};
|
|
18
|
-
check();
|
|
19
|
-
window.addEventListener('popstate', check);
|
|
20
|
-
return () => window.removeEventListener('popstate', check);
|
|
21
|
-
}, []);
|
|
25
|
+
const visible = links.filter(link =>
|
|
26
|
+
!link.pathPrefixes || link.pathPrefixes.some((p: string) => pathname.startsWith(p))
|
|
27
|
+
);
|
|
22
28
|
|
|
23
29
|
return (
|
|
24
30
|
<div className="nf-icon-links">
|
|
25
|
-
{
|
|
26
|
-
<a href={
|
|
27
|
-
|
|
31
|
+
{visible.map((link, i) => (
|
|
32
|
+
<a key={i} href={link.href} target="_blank" rel="noopener noreferrer"
|
|
33
|
+
className={`nf-icon-link nf-icon-link--${link.iconName}`} title={link.title}>
|
|
34
|
+
{resolveIcon(link.iconName)}
|
|
28
35
|
</a>
|
|
29
|
-
)}
|
|
30
|
-
<a href="https://openziti.discourse.group/" target="_blank" rel="noopener noreferrer" className="nf-icon-link nf-icon-link--discourse" title="Discourse">
|
|
31
|
-
<DiscourseIcon />
|
|
32
|
-
</a>
|
|
36
|
+
))}
|
|
33
37
|
</div>
|
|
34
38
|
);
|
|
35
39
|
}
|
|
@@ -2,47 +2,35 @@ import React from 'react';
|
|
|
2
2
|
import Link from '@docusaurus/Link';
|
|
3
3
|
import {useThemeConfig} from '@docusaurus/theme-common';
|
|
4
4
|
import NavbarPicker from '../../NavbarPicker';
|
|
5
|
-
import {DiscourseIcon, YouTubeIcon} from '@netfoundry/docusaurus-theme/ui';
|
|
5
|
+
import {DiscourseIcon, GitHubIcon, YouTubeIcon} from '@netfoundry/docusaurus-theme/ui';
|
|
6
|
+
import type {ResourcesPickerSection, ResourcesPickerLink} from '@netfoundry/docusaurus-theme';
|
|
6
7
|
|
|
7
|
-
const NF_LOGO_DEFAULT
|
|
8
|
+
const NF_LOGO_DEFAULT = 'https://raw.githubusercontent.com/netfoundry/branding/refs/heads/main/images/svg/icon/netfoundry-icon-color.svg';
|
|
8
9
|
const OPENZITI_LOGO_DEFAULT = 'https://netfoundry.io/docs/img/openziti-sm-logo.svg';
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
badge?: React.ReactElement;
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
type IconLink = {
|
|
19
|
-
label: string;
|
|
20
|
-
description: string;
|
|
21
|
-
href: string;
|
|
22
|
-
icon: React.ReactElement;
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
type ResourceLink = LogoLink | IconLink;
|
|
26
|
-
|
|
27
|
-
function isLogoLink(link: ResourceLink): link is LogoLink {
|
|
28
|
-
return 'logoSrc' in link;
|
|
11
|
+
function resolveIcon(name: string, size = 32): React.ReactElement {
|
|
12
|
+
if (name === 'discourse') return <DiscourseIcon width={size} height={size} />;
|
|
13
|
+
if (name === 'github') return <GitHubIcon width={size} height={size} />;
|
|
14
|
+
if (name === 'youtube') return <YouTubeIcon width={size} height={size} />;
|
|
15
|
+
return <></>;
|
|
29
16
|
}
|
|
30
17
|
|
|
31
|
-
function ResourceLink({link}: {link:
|
|
18
|
+
function ResourceLink({link}: {link: ResourcesPickerLink}) {
|
|
19
|
+
const badge = link.badge ? resolveIcon(link.badge, 14) : null;
|
|
32
20
|
return (
|
|
33
21
|
<Link to={link.href} className="picker-link" target="_blank" rel="noopener noreferrer">
|
|
34
|
-
{
|
|
22
|
+
{link.logoUrl ? (
|
|
35
23
|
<span style={{position: 'relative', display: 'inline-flex', flexShrink: 0, marginRight: '0.8rem', width: 32, height: 32}}>
|
|
36
|
-
<img src={link.
|
|
37
|
-
{
|
|
24
|
+
<img src={link.logoUrl} style={{width: 32, height: 32, objectFit: 'contain'}} alt="" />
|
|
25
|
+
{badge && (
|
|
38
26
|
<span style={{position: 'absolute', bottom: -2, right: -4, width: 14, height: 14, display: 'block'}}>
|
|
39
|
-
{
|
|
27
|
+
{badge}
|
|
40
28
|
</span>
|
|
41
29
|
)}
|
|
42
30
|
</span>
|
|
43
|
-
) : (
|
|
44
|
-
<span className="picker-logo">{link.
|
|
45
|
-
)}
|
|
31
|
+
) : link.iconName ? (
|
|
32
|
+
<span className="picker-logo">{resolveIcon(link.iconName)}</span>
|
|
33
|
+
) : null}
|
|
46
34
|
<div className="picker-text">
|
|
47
35
|
<strong>{link.label}</strong>
|
|
48
36
|
<span>{link.description}</span>
|
|
@@ -51,6 +39,27 @@ function ResourceLink({link}: {link: ResourceLink}) {
|
|
|
51
39
|
);
|
|
52
40
|
}
|
|
53
41
|
|
|
42
|
+
function buildDefaultSections(consoleLogo: string, openzitiLogo: string): ResourcesPickerSection[] {
|
|
43
|
+
const youtubeBadge = 'youtube' as const;
|
|
44
|
+
return [
|
|
45
|
+
{
|
|
46
|
+
header: 'Learn & Engage',
|
|
47
|
+
links: [
|
|
48
|
+
{label: 'NetFoundry Blog', description: 'Latest news, updates, and insights from NetFoundry.', href: 'https://netfoundry.io/blog/', logoUrl: consoleLogo},
|
|
49
|
+
{label: 'OpenZiti Tech Blog', description: 'Technical articles and community updates.', href: 'https://blog.openziti.io/', logoUrl: openzitiLogo},
|
|
50
|
+
],
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
header: 'Community & Support',
|
|
54
|
+
links: [
|
|
55
|
+
{label: 'NetFoundry YouTube', description: 'Video tutorials, demos, and technical deep dives.', href: 'https://www.youtube.com/c/NetFoundry', logoUrl: consoleLogo, badge: youtubeBadge},
|
|
56
|
+
{label: 'OpenZiti YouTube', description: 'OpenZiti community videos and project updates.', href: 'https://www.youtube.com/openziti', logoUrl: openzitiLogo, badge: youtubeBadge},
|
|
57
|
+
{label: 'OpenZiti Discourse', description: 'Ask questions and connect with the community.', href: 'https://openziti.discourse.group/', iconName: 'discourse'},
|
|
58
|
+
],
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
}
|
|
62
|
+
|
|
54
63
|
type Props = {
|
|
55
64
|
label?: string;
|
|
56
65
|
position?: 'left' | 'right';
|
|
@@ -58,31 +67,23 @@ type Props = {
|
|
|
58
67
|
};
|
|
59
68
|
|
|
60
69
|
export default function ResourcesPicker({label = 'Resources', className}: Props) {
|
|
61
|
-
const themeConfig
|
|
62
|
-
const consoleLogo
|
|
63
|
-
const openzitiLogo
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
const learnLinks: ResourceLink[] = [
|
|
68
|
-
{ label: 'NetFoundry Blog', description: 'Latest news, updates, and insights from NetFoundry.', href: 'https://netfoundry.io/blog/', logoSrc: consoleLogo },
|
|
69
|
-
{ label: 'OpenZiti Tech Blog', description: 'Technical articles and community updates.', href: 'https://blog.openziti.io/', logoSrc: openzitiLogo },
|
|
70
|
-
];
|
|
71
|
-
|
|
72
|
-
const communityLinks: ResourceLink[] = [
|
|
73
|
-
{ label: 'NetFoundry YouTube', description: 'Video tutorials, demos, and technical deep dives.', href: 'https://www.youtube.com/c/NetFoundry', logoSrc: consoleLogo, badge: youtubeBadge },
|
|
74
|
-
{ label: 'OpenZiti YouTube', description: 'OpenZiti community videos and project updates.', href: 'https://www.youtube.com/openziti', logoSrc: openzitiLogo, badge: youtubeBadge },
|
|
75
|
-
{ label: 'OpenZiti Discourse', description: 'Ask questions and connect with the community.', href: 'https://openziti.discourse.group/', icon: <DiscourseIcon width={32} height={32} /> },
|
|
76
|
-
];
|
|
70
|
+
const themeConfig = useThemeConfig() as any;
|
|
71
|
+
const consoleLogo = themeConfig?.netfoundry?.consoleLogo ?? NF_LOGO_DEFAULT;
|
|
72
|
+
const openzitiLogo = themeConfig?.netfoundry?.openzitiLogo ?? OPENZITI_LOGO_DEFAULT;
|
|
73
|
+
const sections: ResourcesPickerSection[] =
|
|
74
|
+
themeConfig?.netfoundry?.resourcesPickerSections ?? buildDefaultSections(consoleLogo, openzitiLogo);
|
|
77
75
|
|
|
78
76
|
return (
|
|
79
77
|
<NavbarPicker label={label} className={className} panelClassName="nf-picker-panel--narrow" autoPosition>
|
|
80
|
-
|
|
81
|
-
<
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
78
|
+
{sections.map((section, i) => (
|
|
79
|
+
<div key={i} className="picker-column">
|
|
80
|
+
<span className={`picker-header picker-header--nf-${i === 0 ? 'primary' : 'secondary'}`}
|
|
81
|
+
style={i === 0 ? {color: 'var(--ifm-color-primary)'} : {marginTop: '0.75rem'}}>
|
|
82
|
+
{section.header}
|
|
83
|
+
</span>
|
|
84
|
+
{section.links.map((link: ResourcesPickerLink, j: number) => <ResourceLink key={j} link={link} />)}
|
|
85
|
+
</div>
|
|
86
|
+
))}
|
|
86
87
|
</NavbarPicker>
|
|
87
88
|
);
|
|
88
89
|
}
|