@f5xc-salesdemos/docs-theme 2.0.0
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/LICENSE +21 -0
- package/README.md +29 -0
- package/assets/f5-distributed-cloud.svg +1 -0
- package/assets/f5-logo.svg +1 -0
- package/assets/github-avatar.png +0 -0
- package/astro.config.mjs +3 -0
- package/components/Banner.astro +52 -0
- package/components/EditLink.astro +3 -0
- package/components/Footer.astro +47 -0
- package/components/Icon.astro +101 -0
- package/components/LinkCard.astro +105 -0
- package/components/MarkdownContent.astro +7 -0
- package/components/SiteTitle.astro +56 -0
- package/config.ts +388 -0
- package/fonts/font-face.css +79 -0
- package/fonts/neusaNextProWide-300.woff2 +0 -0
- package/fonts/neusaNextProWide-400.woff2 +0 -0
- package/fonts/neusaNextProWide-400i.woff2 +0 -0
- package/fonts/neusaNextProWide-500.woff2 +0 -0
- package/fonts/neusaNextProWide-700.woff2 +0 -0
- package/fonts/neusaNextProWide-700i.woff2 +0 -0
- package/fonts/proximaNova-400.woff2 +0 -0
- package/fonts/proximaNova-500.woff2 +0 -0
- package/fonts/proximaNova-600.woff2 +0 -0
- package/fonts/proximaNova-700.woff2 +0 -0
- package/index.ts +32 -0
- package/package.json +115 -0
- package/route-middleware.ts +69 -0
- package/src/content.config.ts +7 -0
- package/src/plugins/remark-mermaid.mjs +24 -0
- package/src/utils/resolve-icon.ts +69 -0
- package/styles/custom.css +731 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Robin Mordasiewicz
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# XC Docs Theme
|
|
2
|
+
|
|
3
|
+
[](https://github.com/f5xc-salesdemos/docs-theme/actions/workflows/github-pages-deploy.yml)
|
|
4
|
+
[](https://github.com/f5xc-salesdemos/docs-theme/actions/workflows/enforce-repo-settings.yml)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
|
|
7
|
+
Shared branding and styling for F5 Distributed Cloud documentation sites
|
|
8
|
+
|
|
9
|
+
## Documentation
|
|
10
|
+
|
|
11
|
+
Full documentation is available at **[https://f5xc-salesdemos.github.io/docs-theme/](https://f5xc-salesdemos.github.io/docs-theme/)**.
|
|
12
|
+
|
|
13
|
+
## Getting Started
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
git clone https://github.com/f5xc-salesdemos/docs-theme.git
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
See the [documentation](https://f5xc-salesdemos.github.io/docs-theme/) for detailed setup
|
|
20
|
+
and usage guides.
|
|
21
|
+
|
|
22
|
+
## Contributing
|
|
23
|
+
|
|
24
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for workflow rules,
|
|
25
|
+
branch naming, and CI requirements.
|
|
26
|
+
|
|
27
|
+
## License
|
|
28
|
+
|
|
29
|
+
See [LICENSE](LICENSE).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50"><path fill="#ffffff" stroke="none" d="M25.874 10.087a6.46 6.46 0 0 1 5.458-.09c1.064-2.792 3.802-4.78 7.012-4.78 4.135 0 7.488 3.299 7.488 7.368a7.2 7.2 0 0 1-.258 1.92c1.46.946 2.426 2.571 2.426 4.42 0 2.923-2.407 5.292-5.377 5.292h-4.925L14.151 28.217H6.308C3.929 28.217 2 26.318 2 23.978 2 21.642 3.92 19.75 6.289 19.739 6.289 16.258 9.156 13.438 12.692 13.438A6.5 6.5 0 0 1 15.332 13.998C16.396 11.205 19.134 9.217 22.344 9.217A7.55 7.55 0 0 1 25.874 10.087Z"/><path fill="#ffffff" stroke="none" d="M25.874 10.087c2.355 1.242 3.958 3.685 3.958 6.498 0 .494-.058.973-.155 1.438Z"/><path fill="none" stroke="#e4002b" stroke-linecap="round" stroke-linejoin="round" d="M25.874 10.087c2.355 1.242 3.958 3.685 3.958 6.498 0 .494-.058.973-.155 1.438m-3.803-7.936a7.55 7.55 0 0 0-3.53-.87c-3.21 0-5.948 1.988-7.012 4.781a6.5 6.5 0 0 0-2.64-.56c-3.536 0-6.403 2.82-6.403 6.3v.001C3.92 19.75 2 21.642 2 23.978c0 2.34 1.929 4.239 4.308 4.239h7.843"/><path fill="none" stroke="#e4002b" stroke-linecap="round" stroke-linejoin="round" d="M25.874 10.087a6.46 6.46 0 0 1 5.458-.09c1.064-2.792 3.802-4.78 7.012-4.78 4.135 0 7.488 3.299 7.488 7.368a7.2 7.2 0 0 1-.258 1.92c1.46.946 2.426 2.571 2.426 4.42 0 2.923-2.407 5.292-5.377 5.292h-4.925"/><g fill="#ffffff" stroke="#e4002b"><path stroke-linecap="round" stroke-linejoin="round" d="M16.787 37.27H14.28c-2.377 0-4.303-1.904-4.303-4.254 0-2.344 1.916-4.244 4.284-4.254q0 0 0 0c0-3.493 2.864-6.325 6.396-6.325.94 0 1.832.203 2.636.563a7.48 7.48 0 0 1 7.005-4.799c4.13 0 7.48 3.311 7.48 7.396 0 .666-.091 1.312-.258 1.926a5.29 5.29 0 0 1 2.423 4.437c0 2.732-2.083 5.01-4.767 5.304h-2.044"/><path stroke-linecap="round" stroke-linejoin="round" d="M29.041 29.67q-.428.022-.855.038l-.001-.004-2.044-1.57c-.675-.52-1.488-.531-2.17-.033l-2.202 1.607q-.427-.016-.855-.037c-1.616-.08-2.876-.539-2.876 1.676s.3 5.805.3 5.805-.18 2.693 2.935 4.967a254 254 0 0 0 3.694 2.664h0s1.035-.708 3.715-2.664c3.115-2.274 2.935-4.967 2.935-4.967s.3-3.591.3-5.805c0-2.215-1.26-1.756-2.876-1.676"/><path fill="none" stroke-linecap="round" stroke-linejoin="round" d="m26.863 34.182-2.572 3.891-1.603-2.126"/><circle cx="24.978" cy="35.822" r="4.375" stroke-miterlimit="10"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 1000"><g data-name="Layer 2"><g data-name="Layer 1"><path fill="#e4002b" d="M940.37 894.53a30.85 30.85 0 0 1 9.47 22.94 32.43 32.43 0 0 1-55.4 23.08 32 32 0 0 1-9.44-23.08 32.54 32.54 0 0 1 32.37-32.57 30.88 30.88 0 0 1 23 9.63m3.81-3.75a36.65 36.65 0 0 0-26.8-11 37.72 37.72 0 1 0 26.8 64.32 37.71 37.71 0 0 0 0-53.36ZM923 915.65a18.8 18.8 0 0 1-6.93.92h-6.54v-15h6.23c4 0 7 .57 8.77 1.58s2.76 3.07 2.76 6a6.38 6.38 0 0 1-4.29 6.5m-20.75 22.29h7.28v-16.28h5.77c3.82 0 6.56.4 8.11 1.36 2.57 1.54 3.88 4.72 3.88 9.48v3.33l.14 1.25a3 3 0 0 1 .11.5c0 .2.06.27.19.36h6.76l-.24-.48a4.4 4.4 0 0 1-.35-2.11c-.09-1.14-.09-2.15-.09-3.07v-3.07a11.5 11.5 0 0 0-2.26-6.43c-1.54-2.21-3.95-3.51-7.19-4.08a17 17 0 0 0 6-2c2.77-1.75 4.06-4.56 4.06-8.2 0-5.18-2.06-8.73-6.4-10.49-2.39-1-6.14-1.49-11.3-1.49h-14.47Z"/><path fill="#fff" d="M958.59 620.31c2.68-53.34-7.17-110.8-53.58-162.79-47.7-51.41-128.17-95-293.72-105.22 8.6-26.83 16.12-51.41 24.06-76.52 99 3.48 187.06 10.61 262 20.34 5.92-26.85 9.13-53.1 15.26-78.43Q901.2 201 888.43 185.25c-35.65-4.12-71.2-13-109.46-17.9-51.73-6.68-105.88-11.45-164.38-14.15C577.75 262.93 531.7 401 484.46 543.7 730.72 565 825.42 631.37 820.1 725c-4.91 50.57-51.14 96.55-111.93 102-72.31 4.86-105.41-24.35-127.14-56.4-19.14-28.78-38.23-57.62-58.61-89-5.54-9.23-12.85-3.23-19.44 3.21a9738 9738 0 0 1-43.84 42.28c-9.48 8.24-7.37 15.32-4 22.23 13.77 32.46 26.59 62.22 39.54 91.76 21.56 13.21 122.9 31.25 198.69 25.58 51.36-4.32 115.57-24.18 168.65-64.16 52.43-40.71 90.65-95.5 96.57-182.19"/><path fill="#fff" d="M97.31 796.3q14.22 19.29 30.2 37.13c85.19 15.32 191.42 25.91 302.05 29.13-.37-11.48-.7-22.63-1-34.46-67.94-3.83-99.17-14.19-104.6-27.63-4.53-10.68-5.32-26.63-6.29-42.38-5.1-104.35-6.77-217.22-5-330.51 38-.66 75.83-1 115.53-1.43 19.24-8.77 37.34-17.44 56.54-26 0-13.72.09-26 .09-39.39-58.83.24-114.65 1.24-170.6 2.79 1.58-47.62 3.45-91.58 6.24-134.46 2-28.18 21.51-48.78 41.64-50.39 32.26-1.26 61.23 11.56 89.27 24 15.46 7.49 30.7 14.94 46.54 23.05 7.56 2 16.54 3.78 21.95-2.79 9.39-11.12 18.31-21.45 27.55-32.26 5-7.39 2.84-11.63.79-14.35-20.12-15.89-39.05-30.18-58.21-44.54-11.83-8-30.51-9.76-48.92-9.76-7.34 0-14.71.27-21.55.49-18.92 1-43 4-82.43 13.62-88.81 23.92-195.43 85.84-206.7 187.11-1.45 16.53-2.66 32.9-3.73 49.81-25.08 2.11-47.91 3.92-69.46 6-1.58 19.36-2.64 38-3.52 57.59 21.82-1.28 44.58-2.42 69.94-3.52-3.76 106.16-.2 212.1 9.77 310.22 1.67 14.91 3.3 29.69 1.36 39.24-1.59 9.12-16.27 13.85-37.45 13.69"/><path fill="#e4002b" d="M912.66 217.69c-6.13 25.33-9.34 51.58-15.26 78.43-75-9.73-163.08-16.86-262-20.34-7.94 25.11-15.46 49.69-24.06 76.52 165.55 10.18 246 53.81 293.72 105.22 46.41 52 56.26 109.45 53.58 162.79-5.97 86.69-44.19 141.48-96.64 182.1-53.08 40-117.29 59.84-168.65 64.16-75.79 5.67-177.13-12.37-198.69-25.57-13-29.54-25.77-59.3-39.54-91.76-3.35-6.91-5.46-14 4-22.23a9738 9738 0 0 0 43.84-42.28c6.59-6.44 13.9-12.44 19.44-3.21 20.38 31.43 39.48 60.27 58.61 89 21.73 32.05 54.83 61.26 127.14 56.4 60.79-5.44 107-51.42 111.93-102 5.32-93.6-89.38-160-335.64-181.27C531.7 401 577.75 262.93 614.59 153.2c58.5 2.7 112.65 7.47 164.38 14.15 38.26 4.87 73.81 13.78 109.46 17.9C796.77 72.26 656.88 0 500 0 223.87 0 0 223.86 0 500a497.64 497.64 0 0 0 97.31 296.3c21.18.16 35.86-4.57 37.45-13.7 1.94-9.55.31-24.33-1.36-39.24-10-98.12-13.53-204.06-9.77-310.22-25.36 1.1-48.12 2.24-69.94 3.52.88-19.63 1.94-38.23 3.52-57.59 21.55-2.07 44.38-3.88 69.46-6 1.07-16.91 2.28-33.28 3.74-49.81C141.67 222 248.29 160.08 337.1 136.18c39.41-9.6 63.51-12.63 82.43-13.62 6.84-.22 14.21-.49 21.55-.49 18.41 0 37.09 1.72 48.92 9.76 19.16 14.36 38.09 28.65 58.22 44.54 2 2.72 4.2 7-.8 14.35-9.24 10.81-18.16 21.14-27.55 32.26-5.41 6.57-14.39 4.84-21.95 2.79-15.84-8.11-31.08-15.56-46.54-23.05-28-12.46-57-25.28-89.27-24-20.13 1.61-39.62 22.21-41.64 50.39-2.79 42.88-4.66 86.84-6.24 134.46C370.18 362 426 361 484.85 360.74c0 13.39-.09 25.67-.09 39.39-19.2 8.58-37.3 17.25-56.54 26-39.7.46-77.48.77-115.53 1.43-1.76 113.29-.09 226.16 5 330.51 1 15.75 1.76 31.7 6.29 42.38 5.43 13.44 36.66 23.8 104.6 27.63.27 11.83.6 23 1 34.46-110.63-3.22-216.86-13.81-302-29.13C219.07 935.63 352 1000 500 1000c276.15 0 500-223.87 500-500a497.6 497.6 0 0 0-87.34-282.31"/></g></g></svg>
|
|
Binary file
|
package/astro.config.mjs
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
import Default from '@astrojs/starlight/components/Banner.astro';
|
|
3
|
+
|
|
4
|
+
const docsHome = process.env.DOCS_HOME || 'https://f5xc-salesdemos.github.io/docs/';
|
|
5
|
+
const { sidebar, entry, siteTitle, editUrl } = Astro.locals.starlightRoute;
|
|
6
|
+
|
|
7
|
+
const isIndexPage = entry.filePath ? /(?:^|[\\/])index\.mdx?$/.test(entry.filePath) : false;
|
|
8
|
+
const hideBreadcrumbs = isIndexPage;
|
|
9
|
+
|
|
10
|
+
function findTrail(entries: typeof sidebar, trail: { label: string }[] = []): { label: string }[] | null {
|
|
11
|
+
for (const item of entries) {
|
|
12
|
+
if (item.type === 'link' && item.isCurrent) {
|
|
13
|
+
return trail;
|
|
14
|
+
}
|
|
15
|
+
if (item.type === 'group') {
|
|
16
|
+
const result = findTrail(item.entries, [...trail, { label: item.label }]);
|
|
17
|
+
if (result) return result;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const trail = findTrail(sidebar) || [];
|
|
24
|
+
const fixedEditUrl = editUrl
|
|
25
|
+
? editUrl.href.replace('/src/content/docs/', '/docs/')
|
|
26
|
+
: undefined;
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
<Default {...Astro.props}><slot /></Default>
|
|
30
|
+
{!hideBreadcrumbs && (
|
|
31
|
+
<nav class="breadcrumbs" aria-label="Breadcrumb">
|
|
32
|
+
<ol>
|
|
33
|
+
<li><a href={docsHome}>Home</a></li>
|
|
34
|
+
<li><a href={import.meta.env.BASE_URL}>{siteTitle}</a></li>
|
|
35
|
+
{trail.map((crumb) => (
|
|
36
|
+
<li><span>{crumb.label}</span></li>
|
|
37
|
+
))}
|
|
38
|
+
<li aria-current="page"><span>{entry.data.title}</span></li>
|
|
39
|
+
</ol>
|
|
40
|
+
{fixedEditUrl && (
|
|
41
|
+
<a href={fixedEditUrl} target="_blank" rel="noopener noreferrer" class="edit-link">
|
|
42
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24"
|
|
43
|
+
fill="none" stroke="currentColor" stroke-width="2"
|
|
44
|
+
stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
|
45
|
+
<path d="M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z" />
|
|
46
|
+
<path d="m15 5 4 4" />
|
|
47
|
+
</svg>
|
|
48
|
+
<span>Edit</span>
|
|
49
|
+
</a>
|
|
50
|
+
)}
|
|
51
|
+
</nav>
|
|
52
|
+
)}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
import Default from '@astrojs/starlight/components/Footer.astro';
|
|
3
|
+
import Icon from './Icon.astro';
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<Default {...Astro.props}><slot /></Default>
|
|
7
|
+
|
|
8
|
+
<div class="social-links">
|
|
9
|
+
<a href="https://www.facebook.com/f5incorporated" target="_blank" rel="noopener noreferrer" aria-label="Facebook">
|
|
10
|
+
<Icon name="hashicorp-flight:facebook-color" size="1.5rem" />
|
|
11
|
+
</a>
|
|
12
|
+
<a href="https://x.com/F5" target="_blank" rel="noopener noreferrer" aria-label="X">
|
|
13
|
+
<Icon name="hashicorp-flight:twitter-x" size="1.5rem" />
|
|
14
|
+
</a>
|
|
15
|
+
<a href="https://www.linkedin.com/company/f5/" target="_blank" rel="noopener noreferrer" aria-label="LinkedIn">
|
|
16
|
+
<Icon name="hashicorp-flight:linkedin-color" size="1.5rem" />
|
|
17
|
+
</a>
|
|
18
|
+
<a href="https://www.instagram.com/f5.global/" target="_blank" rel="noopener noreferrer" aria-label="Instagram">
|
|
19
|
+
<Icon name="hashicorp-flight:instagram-color" size="1.5rem" />
|
|
20
|
+
</a>
|
|
21
|
+
<a href="https://www.youtube.com/user/f5networksinc" target="_blank" rel="noopener noreferrer" aria-label="YouTube">
|
|
22
|
+
<Icon name="hashicorp-flight:youtube-color" size="1.5rem" />
|
|
23
|
+
</a>
|
|
24
|
+
</div>
|
|
25
|
+
|
|
26
|
+
<style>
|
|
27
|
+
.social-links {
|
|
28
|
+
display: flex;
|
|
29
|
+
justify-content: flex-end;
|
|
30
|
+
align-items: center;
|
|
31
|
+
gap: 1.25rem;
|
|
32
|
+
padding: 1rem 0 0.5rem;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.social-links a {
|
|
36
|
+
display: inline-flex;
|
|
37
|
+
transition: opacity 0.2s ease;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.social-links a:hover {
|
|
41
|
+
opacity: 0.7;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.social-links :global(svg) {
|
|
45
|
+
display: block;
|
|
46
|
+
}
|
|
47
|
+
</style>
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { Icon as StarlightIcon } from '@astrojs/starlight/components';
|
|
3
|
+
import { hasExplicitColors } from '../src/utils/resolve-icon';
|
|
4
|
+
|
|
5
|
+
interface Props {
|
|
6
|
+
name: string;
|
|
7
|
+
label?: string;
|
|
8
|
+
color?: string;
|
|
9
|
+
size?: string;
|
|
10
|
+
class?: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const { name, label, color, size, class: className } = Astro.props;
|
|
14
|
+
const isScoped = name.includes(':');
|
|
15
|
+
|
|
16
|
+
let svgBody = '';
|
|
17
|
+
let viewBox = '0 0 24 24';
|
|
18
|
+
let iconData: any;
|
|
19
|
+
|
|
20
|
+
if (isScoped) {
|
|
21
|
+
const colonIndex = name.indexOf(':');
|
|
22
|
+
const prefix = name.slice(0, colonIndex);
|
|
23
|
+
const iconName = name.slice(colonIndex + 1);
|
|
24
|
+
|
|
25
|
+
switch (prefix) {
|
|
26
|
+
case 'lucide':
|
|
27
|
+
iconData = (await import('@iconify-json/lucide/icons.json')).default;
|
|
28
|
+
break;
|
|
29
|
+
case 'carbon':
|
|
30
|
+
iconData = (await import('@iconify-json/carbon/icons.json')).default;
|
|
31
|
+
break;
|
|
32
|
+
case 'mdi':
|
|
33
|
+
iconData = (await import('@iconify-json/mdi/icons.json')).default;
|
|
34
|
+
break;
|
|
35
|
+
case 'phosphor':
|
|
36
|
+
iconData = (await import('@iconify-json/ph/icons.json')).default;
|
|
37
|
+
break;
|
|
38
|
+
case 'tabler':
|
|
39
|
+
iconData = (await import('@iconify-json/tabler/icons.json')).default;
|
|
40
|
+
break;
|
|
41
|
+
case 'f5-brand':
|
|
42
|
+
iconData = (await import('@f5xc-salesdemos/icons-f5-brand/icons.json')).default;
|
|
43
|
+
break;
|
|
44
|
+
case 'f5xc':
|
|
45
|
+
iconData = (await import('@f5xc-salesdemos/icons-f5xc/icons.json')).default;
|
|
46
|
+
break;
|
|
47
|
+
case 'hashicorp-flight':
|
|
48
|
+
iconData = (await import('@f5xc-salesdemos/icons-hashicorp-flight/icons.json')).default;
|
|
49
|
+
break;
|
|
50
|
+
default:
|
|
51
|
+
throw new Error(
|
|
52
|
+
`Unknown icon prefix "${prefix}". Available: lucide, carbon, mdi, phosphor, tabler, f5-brand, f5xc, hashicorp-flight`
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const icon = iconData.icons?.[iconName];
|
|
57
|
+
if (!icon) {
|
|
58
|
+
throw new Error(`Icon "${iconName}" not found in "${prefix}" icon set.`);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
svgBody = icon.body;
|
|
62
|
+
const w = icon.width ?? iconData.width ?? 24;
|
|
63
|
+
const h = icon.height ?? iconData.height ?? 24;
|
|
64
|
+
viewBox = `0 0 ${w} ${h}`;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const isPalette = isScoped && (iconData?.info?.palette === true || hasExplicitColors(svgBody));
|
|
68
|
+
|
|
69
|
+
const a11yAttrs = label
|
|
70
|
+
? { 'aria-label': label }
|
|
71
|
+
: { 'aria-hidden': 'true' };
|
|
72
|
+
|
|
73
|
+
const styleParts: string[] = [];
|
|
74
|
+
if (color) styleParts.push(`--sl-icon-color: ${color}`);
|
|
75
|
+
if (size) styleParts.push(`--sl-icon-size: ${size}`);
|
|
76
|
+
const inlineStyle = styleParts.length ? styleParts.join('; ') : undefined;
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
{isScoped ? (
|
|
80
|
+
<><svg
|
|
81
|
+
{...a11yAttrs}
|
|
82
|
+
class={className}
|
|
83
|
+
width="16"
|
|
84
|
+
height="16"
|
|
85
|
+
{...(isPalette ? {} : { fill: "currentColor" })}
|
|
86
|
+
viewBox={viewBox}
|
|
87
|
+
style={inlineStyle}
|
|
88
|
+
set:html={svgBody}
|
|
89
|
+
/></>
|
|
90
|
+
) : (
|
|
91
|
+
<StarlightIcon name={name as any} label={label} color={color} size={size} class={className} />
|
|
92
|
+
)}
|
|
93
|
+
|
|
94
|
+
<style>
|
|
95
|
+
svg {
|
|
96
|
+
color: var(--sl-icon-color);
|
|
97
|
+
font-size: var(--sl-icon-size, 1em);
|
|
98
|
+
width: 1em;
|
|
99
|
+
height: 1em;
|
|
100
|
+
}
|
|
101
|
+
</style>
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
import Icon from './Icon.astro';
|
|
3
|
+
import type { HTMLAttributes } from 'astro/types';
|
|
4
|
+
|
|
5
|
+
interface Props extends Omit<HTMLAttributes<'a'>, 'title'> {
|
|
6
|
+
title: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
icon?: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const { title, description, icon, ...attributes } = Astro.props;
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
<div class:list={['sl-link-card', { 'has-icon': !!icon }]}>
|
|
15
|
+
{icon && (
|
|
16
|
+
<span class="card-icon">
|
|
17
|
+
<Icon name={icon} />
|
|
18
|
+
</span>
|
|
19
|
+
)}
|
|
20
|
+
<span class="sl-flex stack">
|
|
21
|
+
<a {...attributes}>
|
|
22
|
+
<span class="title" set:html={title} />
|
|
23
|
+
</a>
|
|
24
|
+
{description && <span class="description" set:html={description} />}
|
|
25
|
+
</span>
|
|
26
|
+
<Icon name="right-arrow" size="1.333em" class="icon rtl:flip" />
|
|
27
|
+
</div>
|
|
28
|
+
|
|
29
|
+
<style>
|
|
30
|
+
.sl-link-card {
|
|
31
|
+
display: grid;
|
|
32
|
+
grid-template-columns: 1fr auto;
|
|
33
|
+
gap: 0.5rem;
|
|
34
|
+
border: 1px solid var(--sl-color-gray-5);
|
|
35
|
+
border-radius: 0.5rem;
|
|
36
|
+
padding: 1rem;
|
|
37
|
+
box-shadow: var(--f5-shadow-low);
|
|
38
|
+
position: relative;
|
|
39
|
+
transition: box-shadow var(--f5-transition-base),
|
|
40
|
+
transform var(--f5-transition-base);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.sl-link-card.has-icon {
|
|
44
|
+
grid-template-columns: auto 1fr auto;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
a {
|
|
48
|
+
text-decoration: none;
|
|
49
|
+
line-height: var(--sl-line-height-headings);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/* a11y fix for https://github.com/withastro/starlight/issues/487 */
|
|
53
|
+
a::before {
|
|
54
|
+
content: '';
|
|
55
|
+
position: absolute;
|
|
56
|
+
inset: 0;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.stack {
|
|
60
|
+
flex-direction: column;
|
|
61
|
+
gap: 0.5rem;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.title {
|
|
65
|
+
color: var(--sl-color-white);
|
|
66
|
+
font-weight: 600;
|
|
67
|
+
font-size: var(--sl-text-lg);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.description {
|
|
71
|
+
color: var(--sl-color-gray-3);
|
|
72
|
+
line-height: 1.5;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.icon {
|
|
76
|
+
color: var(--sl-color-gray-3);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.card-icon {
|
|
80
|
+
color: var(--sl-color-white);
|
|
81
|
+
align-self: stretch;
|
|
82
|
+
position: relative;
|
|
83
|
+
aspect-ratio: 1;
|
|
84
|
+
max-height: 3rem;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.card-icon :global(svg) {
|
|
88
|
+
position: absolute;
|
|
89
|
+
inset: 0;
|
|
90
|
+
width: 100%;
|
|
91
|
+
height: 100%;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/* Hover state */
|
|
95
|
+
.sl-link-card:hover {
|
|
96
|
+
background: var(--sl-color-gray-7, var(--sl-color-gray-6));
|
|
97
|
+
border-color: var(--sl-color-gray-2);
|
|
98
|
+
box-shadow: var(--f5-shadow-mid);
|
|
99
|
+
transform: translateY(-1px);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.sl-link-card:hover .icon {
|
|
103
|
+
color: var(--sl-color-white);
|
|
104
|
+
}
|
|
105
|
+
</style>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
import StarlightVideosMarkdownContent from 'starlight-videos/components/MarkdownContent.astro'
|
|
3
|
+
import ImageZoom from 'starlight-image-zoom/components/ImageZoom.astro'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<ImageZoom />
|
|
7
|
+
<StarlightVideosMarkdownContent><slot /></StarlightVideosMarkdownContent>
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { logos } from 'virtual:starlight/user-images';
|
|
3
|
+
import config from 'virtual:starlight/user-config';
|
|
4
|
+
|
|
5
|
+
const docsHome = process.env.DOCS_HOME || 'https://f5xc-salesdemos.github.io/docs/';
|
|
6
|
+
const { siteTitle } = Astro.locals.starlightRoute;
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
<a href={docsHome} class="site-title sl-flex">
|
|
10
|
+
{config.logo && logos.dark && (
|
|
11
|
+
<>
|
|
12
|
+
<img
|
|
13
|
+
class:list={{ 'light:sl-hidden print:hidden': !('src' in config.logo) }}
|
|
14
|
+
alt={config.logo.alt}
|
|
15
|
+
src={logos.dark.src}
|
|
16
|
+
width={logos.dark.width}
|
|
17
|
+
height={logos.dark.height}
|
|
18
|
+
/>
|
|
19
|
+
{!('src' in config.logo) && (
|
|
20
|
+
<img
|
|
21
|
+
class="dark:sl-hidden print:block"
|
|
22
|
+
alt={config.logo.alt}
|
|
23
|
+
src={logos.light?.src}
|
|
24
|
+
width={logos.light?.width}
|
|
25
|
+
height={logos.light?.height}
|
|
26
|
+
/>
|
|
27
|
+
)}
|
|
28
|
+
</>
|
|
29
|
+
)}
|
|
30
|
+
<span class:list={{ 'sr-only': config.logo?.replacesTitle }} translate="no">
|
|
31
|
+
{siteTitle}
|
|
32
|
+
</span>
|
|
33
|
+
</a>
|
|
34
|
+
|
|
35
|
+
<style>
|
|
36
|
+
.site-title {
|
|
37
|
+
align-items: center;
|
|
38
|
+
gap: var(--sl-nav-gap);
|
|
39
|
+
font-size: var(--sl-text-h4);
|
|
40
|
+
font-weight: 600;
|
|
41
|
+
color: var(--sl-color-text-accent);
|
|
42
|
+
text-decoration: none;
|
|
43
|
+
white-space: nowrap;
|
|
44
|
+
min-width: 0;
|
|
45
|
+
}
|
|
46
|
+
span {
|
|
47
|
+
overflow: hidden;
|
|
48
|
+
}
|
|
49
|
+
img {
|
|
50
|
+
height: calc(var(--sl-nav-height) - 2 * var(--sl-nav-pad-y));
|
|
51
|
+
width: auto;
|
|
52
|
+
max-width: 100%;
|
|
53
|
+
object-fit: contain;
|
|
54
|
+
object-position: 0 50%;
|
|
55
|
+
}
|
|
56
|
+
</style>
|