From 9b4cdf1e3c7d52c09792bad04ff7bb549eacc384 Mon Sep 17 00:00:00 2001 From: Daniel Esteban Date: Tue, 31 Mar 2026 10:11:40 +0200 Subject: [PATCH] second commit --- .../HugoBlox/kit/modules/analytics/hugo.yaml | 4 + .../_partials/blox-analytics/index.html | 9 + .../blox-analytics/services/baidu_tongji.html | 13 + .../blox-analytics/services/fathom.html | 5 + .../services/google_analytics.html | 42 + .../services/google_tag_manager.html | 10 + .../blox-analytics/services/index.html | 7 + .../services/microsoft_clarity.html | 10 + .../blox-analytics/services/pirsch.html | 5 + .../blox-analytics/services/plausible.html | 5 + .../blox-analytics/verification.html | 25 + .../kit/modules/blox/archetypes/faq.md | 45 + .../kit/modules/blox/archetypes/questions.md | 62 + .../kit/modules/blox/assets/css/README.md | 99 + .../modules/blox/assets/css/animations.css | 256 + .../kit/modules/blox/assets/css/chroma.css | 27 + .../blox/assets/css/color-utilities.css | 47 + .../blox/assets/css/components/all.css | 13 + .../assets/css/components/author-notes.css | 48 + .../blox/assets/css/components/cards.css | 67 + .../blox/assets/css/components/charts.css | 21 + .../blox/assets/css/components/copy.css | 31 + .../blox/assets/css/components/cover.css | 146 + .../assets/css/components/glassmorphism.css | 239 + .../blox/assets/css/components/math.css | 4 + .../blox/assets/css/components/navbar.css | 110 + .../blox/assets/css/components/notebook.css | 150 + .../blox/assets/css/components/page.css | 97 + .../assets/css/components/sidebar-left.css | 94 + .../blox/assets/css/components/steps.css | 28 + .../blox/assets/css/components/task-list.css | 30 + .../blox/assets/css/config/safelist.css | 232 + .../blox/assets/css/config/tailwind.css | 24 + .../modules/blox/assets/css/config/theme.css | 358 + .../blox/assets/css/framework/base.css | 127 + .../blox/assets/css/framework/components.css | 132 + .../kit/modules/blox/assets/css/hb-search.css | 86 + .../blox/assets/css/layout-utilities.css | 80 + .../blox/assets/css/libs/chroma/dark.css | 502 + .../blox/assets/css/libs/chroma/light.css | 534 + .../kit/modules/blox/assets/css/main.css | 50 + .../modules/blox/assets/css/themes/amber.css | 27 + .../modules/blox/assets/css/themes/blue.css | 27 + .../modules/blox/assets/css/themes/cyan.css | 27 + .../blox/assets/css/themes/emerald.css | 27 + .../blox/assets/css/themes/fuchsia.css | 27 + .../modules/blox/assets/css/themes/green.css | 27 + .../modules/blox/assets/css/themes/indigo.css | 27 + .../modules/blox/assets/css/themes/lime.css | 27 + .../modules/blox/assets/css/themes/orange.css | 27 + .../modules/blox/assets/css/themes/pink.css | 27 + .../modules/blox/assets/css/themes/purple.css | 27 + .../modules/blox/assets/css/themes/red.css | 27 + .../modules/blox/assets/css/themes/rose.css | 27 + .../modules/blox/assets/css/themes/sky.css | 27 + .../modules/blox/assets/css/themes/slate.css | 27 + .../modules/blox/assets/css/themes/stone.css | 27 + .../modules/blox/assets/css/themes/teal.css | 27 + .../modules/blox/assets/css/themes/violet.css | 27 + .../modules/blox/assets/css/themes/yellow.css | 27 + .../modules/blox/assets/css/themes/zinc.css | 27 + .../kit/modules/blox/assets/css/views/all.css | 1 + .../blox/assets/css/views/attachments.css | 28 + .../blox/assets/dist/font/Inter.var.woff2 | Bin 0 -> 324864 bytes .../assets/dist/font/JetBrainsMono.var.ttf | Bin 0 -> 189028 bytes .../blox/assets/dist/lib/alpinejs/cdn.min.js | 5 + .../assets/dist/lib/katex/auto-render.min.js | 1 + .../lib/katex/fonts/KaTeX_AMS-Regular.ttf | Bin 0 -> 63632 bytes .../lib/katex/fonts/KaTeX_AMS-Regular.woff | Bin 0 -> 33516 bytes .../lib/katex/fonts/KaTeX_AMS-Regular.woff2 | Bin 0 -> 28076 bytes .../katex/fonts/KaTeX_Caligraphic-Bold.ttf | Bin 0 -> 12368 bytes .../katex/fonts/KaTeX_Caligraphic-Bold.woff | Bin 0 -> 7716 bytes .../katex/fonts/KaTeX_Caligraphic-Bold.woff2 | Bin 0 -> 6912 bytes .../katex/fonts/KaTeX_Caligraphic-Regular.ttf | Bin 0 -> 12344 bytes .../fonts/KaTeX_Caligraphic-Regular.woff | Bin 0 -> 7656 bytes .../fonts/KaTeX_Caligraphic-Regular.woff2 | Bin 0 -> 6908 bytes .../lib/katex/fonts/KaTeX_Fraktur-Bold.ttf | Bin 0 -> 19584 bytes .../lib/katex/fonts/KaTeX_Fraktur-Bold.woff | Bin 0 -> 13296 bytes .../lib/katex/fonts/KaTeX_Fraktur-Bold.woff2 | Bin 0 -> 11348 bytes .../lib/katex/fonts/KaTeX_Fraktur-Regular.ttf | Bin 0 -> 19572 bytes .../katex/fonts/KaTeX_Fraktur-Regular.woff | Bin 0 -> 13208 bytes .../katex/fonts/KaTeX_Fraktur-Regular.woff2 | Bin 0 -> 11316 bytes .../dist/lib/katex/fonts/KaTeX_Main-Bold.ttf | Bin 0 -> 51336 bytes .../dist/lib/katex/fonts/KaTeX_Main-Bold.woff | Bin 0 -> 29912 bytes .../lib/katex/fonts/KaTeX_Main-Bold.woff2 | Bin 0 -> 25324 bytes .../lib/katex/fonts/KaTeX_Main-BoldItalic.ttf | Bin 0 -> 32968 bytes .../katex/fonts/KaTeX_Main-BoldItalic.woff | Bin 0 -> 19412 bytes .../katex/fonts/KaTeX_Main-BoldItalic.woff2 | Bin 0 -> 16780 bytes .../lib/katex/fonts/KaTeX_Main-Italic.ttf | Bin 0 -> 33580 bytes .../lib/katex/fonts/KaTeX_Main-Italic.woff | Bin 0 -> 19676 bytes .../lib/katex/fonts/KaTeX_Main-Italic.woff2 | Bin 0 -> 16988 bytes .../lib/katex/fonts/KaTeX_Main-Regular.ttf | Bin 0 -> 53580 bytes .../lib/katex/fonts/KaTeX_Main-Regular.woff | Bin 0 -> 30772 bytes .../lib/katex/fonts/KaTeX_Main-Regular.woff2 | Bin 0 -> 26272 bytes .../lib/katex/fonts/KaTeX_Math-BoldItalic.ttf | Bin 0 -> 31196 bytes .../katex/fonts/KaTeX_Math-BoldItalic.woff | Bin 0 -> 18668 bytes .../katex/fonts/KaTeX_Math-BoldItalic.woff2 | Bin 0 -> 16400 bytes .../lib/katex/fonts/KaTeX_Math-Italic.ttf | Bin 0 -> 31308 bytes .../lib/katex/fonts/KaTeX_Math-Italic.woff | Bin 0 -> 18748 bytes .../lib/katex/fonts/KaTeX_Math-Italic.woff2 | Bin 0 -> 16440 bytes .../lib/katex/fonts/KaTeX_SansSerif-Bold.ttf | Bin 0 -> 24504 bytes .../lib/katex/fonts/KaTeX_SansSerif-Bold.woff | Bin 0 -> 14408 bytes .../katex/fonts/KaTeX_SansSerif-Bold.woff2 | Bin 0 -> 12216 bytes .../katex/fonts/KaTeX_SansSerif-Italic.ttf | Bin 0 -> 22364 bytes .../katex/fonts/KaTeX_SansSerif-Italic.woff | Bin 0 -> 14112 bytes .../katex/fonts/KaTeX_SansSerif-Italic.woff2 | Bin 0 -> 12028 bytes .../katex/fonts/KaTeX_SansSerif-Regular.ttf | Bin 0 -> 19436 bytes .../katex/fonts/KaTeX_SansSerif-Regular.woff | Bin 0 -> 12316 bytes .../katex/fonts/KaTeX_SansSerif-Regular.woff2 | Bin 0 -> 10344 bytes .../lib/katex/fonts/KaTeX_Script-Regular.ttf | Bin 0 -> 16648 bytes .../lib/katex/fonts/KaTeX_Script-Regular.woff | Bin 0 -> 10588 bytes .../katex/fonts/KaTeX_Script-Regular.woff2 | Bin 0 -> 9644 bytes .../lib/katex/fonts/KaTeX_Size1-Regular.ttf | Bin 0 -> 12228 bytes .../lib/katex/fonts/KaTeX_Size1-Regular.woff | Bin 0 -> 6496 bytes .../lib/katex/fonts/KaTeX_Size1-Regular.woff2 | Bin 0 -> 5468 bytes .../lib/katex/fonts/KaTeX_Size2-Regular.ttf | Bin 0 -> 11508 bytes .../lib/katex/fonts/KaTeX_Size2-Regular.woff | Bin 0 -> 6188 bytes .../lib/katex/fonts/KaTeX_Size2-Regular.woff2 | Bin 0 -> 5208 bytes .../lib/katex/fonts/KaTeX_Size3-Regular.ttf | Bin 0 -> 7588 bytes .../lib/katex/fonts/KaTeX_Size3-Regular.woff | Bin 0 -> 4420 bytes .../lib/katex/fonts/KaTeX_Size3-Regular.woff2 | Bin 0 -> 3624 bytes .../lib/katex/fonts/KaTeX_Size4-Regular.ttf | Bin 0 -> 10364 bytes .../lib/katex/fonts/KaTeX_Size4-Regular.woff | Bin 0 -> 5980 bytes .../lib/katex/fonts/KaTeX_Size4-Regular.woff2 | Bin 0 -> 4928 bytes .../katex/fonts/KaTeX_Typewriter-Regular.ttf | Bin 0 -> 27556 bytes .../katex/fonts/KaTeX_Typewriter-Regular.woff | Bin 0 -> 16028 bytes .../fonts/KaTeX_Typewriter-Regular.woff2 | Bin 0 -> 13568 bytes .../blox/assets/dist/lib/katex/katex.min.css | 1 + .../blox/assets/dist/lib/katex/katex.min.js | 1 + .../blox/assets/dist/lib/markmap/index.js | 462 + .../assets/dist/lib/mermaid/mermaid.min.js | 2811 ++++ .../blox/assets/dist/lib/plotly/plotly.min.js | 3882 ++++++ .../blox/assets/dist/lib/preact/hooks.min.js | 2 + .../blox/assets/dist/lib/preact/preact.min.js | 2 + .../assets/dist/lib/preact/preact.min.js.map | 1 + .../blox/assets/dist/lib/vendor-libs.mjs | 4 + .../modules/blox/assets/js/hb-animations.js | 111 + .../kit/modules/blox/assets/js/hb-citation.js | 189 + .../modules/blox/assets/js/hb-clipboard.js | 187 + .../modules/blox/assets/js/hb-code-copy.js | 162 + .../kit/modules/blox/assets/js/hb-head.js | 31 + .../kit/modules/blox/assets/js/hb-i18n.js | 27 + .../kit/modules/blox/assets/js/hb-init.js | 45 + .../blox/assets/js/hb-mermaid-config.js | 20 + .../kit/modules/blox/assets/js/hb-nav.js | 42 + .../kit/modules/blox/assets/js/hb-notifier.js | 197 + .../kit/modules/blox/assets/js/hb-search.js | 32 + .../kit/modules/blox/assets/js/hb-sidebar.js | 66 + .../kit/modules/blox/assets/js/hb-theme.js | 68 + .../modules/blox/assets/js/katex-config.js | 11 + .../kit/modules/blox/assets/js/vendor-libs.js | 11 + .../kit/modules/blox/assets/media/icon.png | Bin 0 -> 3079 bytes .../assets/media/textures/noise-pattern.svg | 20 + .../modules/blox/blox/collection/README.md | 43 + .../modules/blox/blox/collection/block.html | 348 + .../blox/blox/collection/manifest.json | 13 + .../modules/blox/blox/collection/preview.svg | 21 + .../modules/blox/blox/contact-info/README.md | 139 + .../modules/blox/blox/contact-info/block.html | 548 + .../blox/blox/contact-info/manifest.json | 13 + .../blox/blox/cta-button-list/README.md | 50 + .../blox/blox/cta-button-list/block.html | 74 + .../blox/blox/cta-button-list/manifest.json | 13 + .../blox/blox/cta-button-list/preview.svg | 20 + .../kit/modules/blox/blox/cta-card/README.md | 211 + .../kit/modules/blox/blox/cta-card/client.jsx | 25 + .../modules/blox/blox/cta-card/component.jsx | 128 + .../modules/blox/blox/cta-card/manifest.json | 13 + .../modules/blox/blox/cta-card/preview.svg | 21 + .../blox/blox/cta-image-paragraph/README.md | 51 + .../blox/blox/cta-image-paragraph/client.jsx | 25 + .../blox/cta-image-paragraph/component.jsx | 134 + .../blox/cta-image-paragraph/manifest.json | 13 + .../blox/blox/cta-image-paragraph/preview.svg | 30 + .../kit/modules/blox/blox/dev-hero/README.md | 134 + .../kit/modules/blox/blox/dev-hero/block.html | 472 + .../modules/blox/blox/dev-hero/manifest.json | 13 + .../kit/modules/blox/blox/faq/README.md | 57 + .../kit/modules/blox/blox/faq/block.html | 152 + .../kit/modules/blox/blox/faq/manifest.json | 8 + .../kit/modules/blox/blox/faq/preview.svg | 32 + .../kit/modules/blox/blox/features/README.md | 51 + .../kit/modules/blox/blox/features/client.jsx | 25 + .../modules/blox/blox/features/component.jsx | 62 + .../modules/blox/blox/features/manifest.json | 13 + .../modules/blox/blox/features/preview.svg | 38 + .../kit/modules/blox/blox/hero/README.md | 52 + .../kit/modules/blox/blox/hero/client.jsx | 36 + .../kit/modules/blox/blox/hero/component.jsx | 138 + .../kit/modules/blox/blox/hero/manifest.json | 13 + .../kit/modules/blox/blox/hero/preview.svg | 26 + .../blox/blox/knowledge-categories/block.html | 159 + .../blox/knowledge-categories/manifest.json | 8 + .../kit/modules/blox/blox/logos/README.md | 220 + .../kit/modules/blox/blox/logos/block.html | 359 + .../kit/modules/blox/blox/logos/manifest.json | 13 + .../kit/modules/blox/blox/markdown/README.md | 59 + .../kit/modules/blox/blox/markdown/block.html | 25 + .../modules/blox/blox/markdown/manifest.json | 13 + .../modules/blox/blox/markdown/preview.svg | 31 + .../kit/modules/blox/blox/portfolio/README.md | 305 + .../modules/blox/blox/portfolio/block.html | 514 + .../modules/blox/blox/portfolio/manifest.json | 13 + .../blox/blox/research-areas/README.md | 292 + .../blox/blox/research-areas/block.html | 475 + .../blox/blox/research-areas/manifest.json | 13 + .../modules/blox/blox/resume-awards/README.md | 57 + .../blox/blox/resume-awards/block.html | 169 + .../blox/blox/resume-awards/manifest.json | 13 + .../blox/blox/resume-awards/preview.svg | 36 + .../blox/blox/resume-biography-3/README.md | 86 + .../blox/blox/resume-biography-3/block.html | 519 + .../blox/resume-biography-3/manifest.json | 13 + .../blox/blox/resume-biography-3/preview.svg | 43 + .../blox/blox/resume-biography/README.md | 63 + .../blox/blox/resume-biography/block.html | 353 + .../blox/blox/resume-biography/manifest.json | 13 + .../blox/blox/resume-biography/preview.svg | 34 + .../blox/blox/resume-biography/style.css | 63 + .../blox/blox/resume-experience/README.md | 65 + .../blox/blox/resume-experience/block.html | 409 + .../blox/blox/resume-experience/manifest.json | 13 + .../blox/blox/resume-experience/preview.svg | 43 + .../blox/blox/resume-languages/README.md | 61 + .../blox/blox/resume-languages/block.html | 106 + .../blox/blox/resume-languages/manifest.json | 13 + .../blox/blox/resume-languages/preview.svg | 41 + .../modules/blox/blox/resume-skills/README.md | 66 + .../blox/blox/resume-skills/block.html | 144 + .../blox/blox/resume-skills/manifest.json | 13 + .../blox/blox/resume-skills/preview.svg | 63 + .../modules/blox/blox/resume-skills/style.css | 36 + .../modules/blox/blox/search-hero/README.md | 265 + .../modules/blox/blox/search-hero/block.html | 156 + .../blox/blox/search-hero/manifest.json | 8 + .../blox/blox/shared/css/biography-shared.css | 122 + .../blox/blox/shared/js/components/Icon.jsx | 64 + .../kit/modules/blox/blox/stats/README.md | 227 + .../kit/modules/blox/blox/stats/client.jsx | 31 + .../kit/modules/blox/blox/stats/component.jsx | 284 + .../kit/modules/blox/blox/stats/manifest.json | 13 + .../kit/modules/blox/blox/stats/preview.svg | 41 + .../modules/blox/blox/team-showcase/README.md | 133 + .../blox/blox/team-showcase/block.html | 599 + .../blox/blox/team-showcase/manifest.json | 13 + .../modules/blox/blox/tech-stack/README.md | 108 + .../modules/blox/blox/tech-stack/block.html | 196 + .../blox/blox/tech-stack/manifest.json | 13 + .../modules/blox/blox/testimonials/README.md | 60 + .../modules/blox/blox/testimonials/client.jsx | 25 + .../blox/blox/testimonials/component.jsx | 81 + .../blox/blox/testimonials/manifest.json | 13 + .../blox/blox/testimonials/preview.svg | 35 + .../blox/blox/trending-questions/block.html | 301 + .../blox/trending-questions/manifest.json | 8 + .../modules/blox/data/address_formats.toml | 12 + .../kit/modules/blox/data/blox_aliases.yaml | 11 + .../kit/modules/blox/data/fonts/academic.yaml | 36 + .../modules/blox/data/fonts/developer.yaml | 35 + .../modules/blox/data/fonts/editorial.yaml | 36 + .../modules/blox/data/fonts/geometric.yaml | 30 + .../kit/modules/blox/data/fonts/humanist.yaml | 35 + .../kit/modules/blox/data/fonts/modern.yaml | 35 + .../kit/modules/blox/data/fonts/system.yaml | 30 + .../kit/modules/blox/data/hugoblox.yaml | 3 + .../modules/blox/data/icons/academicons.json | 574 + .../kit/modules/blox/data/icons/aliases.yaml | 9 + .../kit/modules/blox/data/icons/brands.json | 11405 ++++++++++++++++ .../kit/modules/blox/data/icons/devicon.json | 3173 +++++ .../kit/modules/blox/data/icons/hb.yaml | 33 + .../kit/modules/blox/data/icons/hero.json | 5205 +++++++ .../kit/modules/blox/data/languages.yaml | 41 + .../kit/modules/blox/data/link_types.yaml | 150 + .../kit/modules/blox/data/page_sharer.yaml | 55 + .../kit/modules/blox/data/themes/coffee.yaml | 45 + .../modules/blox/data/themes/contrast.yaml | 41 + .../kit/modules/blox/data/themes/cupcake.yaml | 44 + .../kit/modules/blox/data/themes/default.yaml | 40 + .../kit/modules/blox/data/themes/dracula.yaml | 45 + .../kit/modules/blox/data/themes/marine.yaml | 40 + .../kit/modules/blox/data/themes/matcha.yaml | 45 + .../kit/modules/blox/data/themes/minimal.yaml | 45 + .../kit/modules/blox/data/themes/retro.yaml | 45 + .../kit/modules/blox/data/themes/solar.yaml | 45 + .../modules/blox/data/themes/synthwave.yaml | 44 + .../HugoBlox/kit/modules/blox/hugo.yaml | 162 + .../HugoBlox/kit/modules/blox/hugo_stats.json | 0 .../HugoBlox/kit/modules/blox/i18n/ar.yaml | 265 + .../HugoBlox/kit/modules/blox/i18n/bn.yaml | 643 + .../HugoBlox/kit/modules/blox/i18n/ca.yaml | 265 + .../HugoBlox/kit/modules/blox/i18n/cs.yaml | 265 + .../HugoBlox/kit/modules/blox/i18n/da.yaml | 265 + .../HugoBlox/kit/modules/blox/i18n/de.yaml | 648 + .../HugoBlox/kit/modules/blox/i18n/el.yaml | 265 + .../HugoBlox/kit/modules/blox/i18n/en.yaml | 611 + .../HugoBlox/kit/modules/blox/i18n/es.yaml | 674 + .../HugoBlox/kit/modules/blox/i18n/et.yaml | 265 + .../HugoBlox/kit/modules/blox/i18n/eu.yaml | 265 + .../HugoBlox/kit/modules/blox/i18n/fa.yaml | 265 + .../HugoBlox/kit/modules/blox/i18n/fi.yaml | 265 + .../HugoBlox/kit/modules/blox/i18n/fr.yaml | 320 + .../HugoBlox/kit/modules/blox/i18n/he.yaml | 265 + .../HugoBlox/kit/modules/blox/i18n/hi.yaml | 638 + .../HugoBlox/kit/modules/blox/i18n/hr.yaml | 296 + .../HugoBlox/kit/modules/blox/i18n/ht.yaml | 411 + .../HugoBlox/kit/modules/blox/i18n/hu.yaml | 265 + .../HugoBlox/kit/modules/blox/i18n/id.yaml | 646 + .../HugoBlox/kit/modules/blox/i18n/it.yaml | 265 + .../HugoBlox/kit/modules/blox/i18n/ja.yaml | 265 + .../HugoBlox/kit/modules/blox/i18n/km.yaml | 265 + .../HugoBlox/kit/modules/blox/i18n/ko.yaml | 265 + .../HugoBlox/kit/modules/blox/i18n/lt.yaml | 265 + .../HugoBlox/kit/modules/blox/i18n/lv.yaml | 265 + .../HugoBlox/kit/modules/blox/i18n/mg.yaml | 265 + .../kit/modules/blox/i18n/ms-Arab.yaml | 279 + .../HugoBlox/kit/modules/blox/i18n/ms.yaml | 279 + .../HugoBlox/kit/modules/blox/i18n/nb.yaml | 265 + .../HugoBlox/kit/modules/blox/i18n/nl.yaml | 640 + .../HugoBlox/kit/modules/blox/i18n/pl.yaml | 265 + .../HugoBlox/kit/modules/blox/i18n/pt.yaml | 634 + .../HugoBlox/kit/modules/blox/i18n/ro.yaml | 265 + .../HugoBlox/kit/modules/blox/i18n/ru.yaml | 265 + .../HugoBlox/kit/modules/blox/i18n/so.yaml | 265 + .../HugoBlox/kit/modules/blox/i18n/sv.yaml | 265 + .../HugoBlox/kit/modules/blox/i18n/tr.yaml | 265 + .../HugoBlox/kit/modules/blox/i18n/uk.yaml | 265 + .../HugoBlox/kit/modules/blox/i18n/vi.yaml | 279 + .../kit/modules/blox/i18n/zh-Hant.yaml | 634 + .../HugoBlox/kit/modules/blox/i18n/zh.yaml | 650 + .../kit/modules/blox/layouts/404.html | 25 + .../layouts/_markup/render-blockquote.html | 31 + .../_markup/render-codeblock-markmap.html | 5 + .../_markup/render-codeblock-mermaid.html | 4 + .../blox/layouts/_markup/render-image.html | 75 + .../_markup/render-link.backlinks.json | 14 + .../blox/layouts/_markup/render-link.html | 2 + .../_partials/blox/contact-info/config.html | 7 + .../_partials/blox/dev-hero/config.html | 13 + .../_partials/blox/portfolio/config.html | 13 + .../_partials/blox/preact-wrapper.html | 165 + .../_partials/blox/tech-stack/config.html | 10 + .../blox/layouts/_partials/comments.html | 17 + .../layouts/_partials/comments/disqus.html | 22 + .../layouts/_partials/comments/giscus.html | 19 + .../_partials/components/backlinks.html | 22 + .../_partials/components/breadcrumb.html | 13 + .../layouts/_partials/components/cover.html | 225 + .../_partials/components/feedback.html | 36 + .../_partials/components/footers/columns.html | 82 + .../_partials/components/footers/minimal.html | 49 + .../headers/floating-theme-toggler.html | 24 + .../components/headers/navbar-simple.html | 147 + .../_partials/components/headers/navbar.html | 229 + .../components/language-chooser.html | 38 + .../_partials/components/last-edited.html | 11 + .../_partials/components/next-in-series.html | 54 + .../_partials/components/page_sharer.html | 22 + .../_partials/components/paginator.html | 12 + .../_partials/components/search-modal.html | 484 + .../layouts/_partials/components/sidebar.html | 150 + .../_partials/components/slides-embed.html | 155 + .../layouts/_partials/components/toc.html | 74 + .../modules/blox/layouts/_partials/css.html | 34 + .../blox/layouts/_partials/docs_layout.html | 30 + .../_partials/functions/build_links.html | 283 + .../_partials/functions/coerce_bool.html | 20 + .../_partials/functions/coerce_int.html | 26 + .../_partials/functions/deep_merge.html | 21 + .../functions/demo_theme_styles.html | 31 + .../_partials/functions/embed/github.html | 97 + .../functions/embed/hbx_content_section.html | 107 + .../functions/embed/hbx_platform_icon.html | 28 + .../functions/embed/hbx_title_section.html | 162 + .../functions/embed/huggingface.html | 67 + .../functions/generate_color_scale.html | 124 + .../functions/get-block-scripts.html | 19 + .../_partials/functions/get-build-id.html | 5 + .../_partials/functions/get_address.html | 23 + .../_partials/functions/get_author_name.html | 26 + .../functions/get_author_profile.html | 136 + .../_partials/functions/get_authors_data.html | 54 + .../_partials/functions/get_branding.html | 42 + .../_partials/functions/get_cover_image.html | 46 + .../_partials/functions/get_event_dates.html | 21 + .../functions/get_featured_image.html | 26 + .../layouts/_partials/functions/get_hook.html | 21 + .../layouts/_partials/functions/get_icon.html | 58 + .../_partials/functions/get_icon_data.html | 14 + .../_partials/functions/get_icon_svg.html | 83 + .../layouts/_partials/functions/get_logo.html | 41 + .../_partials/functions/get_logo_url.html | 13 + .../_partials/functions/get_page_title.html | 8 + .../_partials/functions/get_site_icon.html | 42 + .../functions/get_sort_by_parameter.html | 24 + .../_partials/functions/get_summary.html | 3 + .../_partials/functions/get_theme_config.html | 165 + .../_partials/functions/has_attachments.html | 23 + .../_partials/functions/hbx_verify.html | 70 + .../_partials/functions/layout_tokens.html | 56 + .../_partials/functions/load_font_pack.html | 65 + .../_partials/functions/load_theme_pack.html | 59 + .../layouts/_partials/functions/logger.html | 51 + .../_partials/functions/notebook/render.html | 540 + .../_partials/functions/parse_block_v3.html | 312 + .../functions/process_responsive_image.html | 143 + .../_partials/functions/render_callout.html | 155 + .../_partials/functions/render_view.html | 23 + .../_partials/functions/theme_generator.html | 229 + .../_partials/functions/theme_variables.html | 26 + .../_partials/functions/typography.html | 221 + .../blox/layouts/_partials/functions/uid.html | 19 + .../_partials/hbx/resolve-block-param.html | 22 + .../blox/layouts/_partials/hbx/resolve.html | 15 + .../blox/layouts/_partials/hbx/sections.html | 105 + .../hooks/body-end/hbx-debug-export.html | 67 + .../hooks/body-end/hbx-debug-hud.html | 410 + .../modules/blox/layouts/_partials/init.html | 129 + .../layouts/_partials/jsonld/article.html | 48 + .../layouts/_partials/jsonld/breadcrumbs.html | 33 + .../layouts/_partials/jsonld/business.html | 31 + .../_partials/jsonld/collectionpage.html | 71 + .../blox/layouts/_partials/jsonld/event.html | 48 + .../layouts/_partials/jsonld/faqpage.html | 48 + .../blox/layouts/_partials/jsonld/main.html | 48 + .../blox/layouts/_partials/jsonld/qapage.html | 88 + .../layouts/_partials/jsonld/webpage.html | 56 + .../layouts/_partials/jsonld/website.html | 14 + .../blox/layouts/_partials/landing_page.html | 13 + .../blox/layouts/_partials/libraries.html | 121 + .../_partials/notification-container.html | 4 + .../blox/layouts/_partials/page_author.html | 25 + .../layouts/_partials/page_author_card.html | 78 + .../blox/layouts/_partials/page_edit.html | 18 + .../blox/layouts/_partials/page_footer.html | 11 + .../blox/layouts/_partials/page_links.html | 74 + .../layouts/_partials/page_links_div.html | 8 + .../_partials/page_metadata_authors.html | 60 + .../blox/layouts/_partials/page_related.html | 15 + .../blox/layouts/_partials/site_footer.html | 114 + .../_partials/site_footer_license.html | 75 + .../blox/layouts/_partials/site_head.html | 263 + .../blox/layouts/_partials/social_links.html | 21 + .../modules/blox/layouts/_partials/tags.html | 7 + .../layouts/_partials/tailwind_sources.html | 91 + .../_partials/views/article-grid--end.html | 2 + .../_partials/views/article-grid--start.html | 5 + .../layouts/_partials/views/article-grid.html | 1 + .../layouts/_partials/views/card--end.html | 1 + .../layouts/_partials/views/card--start.html | 1 + .../blox/layouts/_partials/views/card.html | 224 + .../_partials/views/citation--end.html | 2 + .../_partials/views/citation--start.html | 3 + .../layouts/_partials/views/citation.html | 50 + .../views/date-title-summary--end.html | 2 + .../views/date-title-summary--start.html | 2 + .../_partials/views/date-title-summary.html | 31 + .../_partials/views/slides-gallery--end.html | 2 + .../views/slides-gallery--start.html | 5 + .../_partials/views/slides-gallery.html | 198 + .../blox/layouts/_shortcodes/audio.html | 41 + .../blox/layouts/_shortcodes/bilibili.html | 8 + .../blox/layouts/_shortcodes/button.html | 166 + .../blox/layouts/_shortcodes/callout.html | 48 + .../blox/layouts/_shortcodes/card.html | 35 + .../blox/layouts/_shortcodes/cards.html | 9 + .../blox/layouts/_shortcodes/chart.html | 35 + .../blox/layouts/_shortcodes/cite.html | 25 + .../blox/layouts/_shortcodes/embed.html | 208 + .../blox/layouts/_shortcodes/icon.html | 20 + .../blox/layouts/_shortcodes/include.html | 23 + .../blox/layouts/_shortcodes/math.html | 1 + .../blox/layouts/_shortcodes/mention.html | 19 + .../blox/layouts/_shortcodes/notebook.html | 42 + .../blox/layouts/_shortcodes/spoiler.html | 22 + .../blox/layouts/_shortcodes/steps.html | 3 + .../blox/layouts/_shortcodes/table.html | 52 + .../modules/blox/layouts/_shortcodes/toc.html | 18 + .../blox/layouts/_shortcodes/video.html | 53 + .../modules/blox/layouts/authors/term.html | 109 + .../kit/modules/blox/layouts/baseof.html | 45 + .../kit/modules/blox/layouts/docs/list.html | 3 + .../kit/modules/blox/layouts/docs/single.html | 3 + .../kit/modules/blox/layouts/events/page.html | 285 + .../kit/modules/blox/layouts/faq/list.html | 65 + .../kit/modules/blox/layouts/faq/single.html | 141 + .../modules/blox/layouts/home.backlinks.json | 8 + .../kit/modules/blox/layouts/home.html | 16 + .../kit/modules/blox/layouts/index.llm.txt | 20 + .../modules/blox/layouts/index.webmanifest | 20 + .../modules/blox/layouts/landing/list.html | 3 + .../modules/blox/layouts/landing/single.html | 3 + .../kit/modules/blox/layouts/list.html | 45 + .../modules/blox/layouts/questions/list.html | 133 + .../blox/layouts/questions/single.html | 150 + .../kit/modules/blox/layouts/robots.txt | 3 + .../HugoBlox/kit/modules/blox/layouts/rss.xml | 39 + .../kit/modules/blox/layouts/single.html | 308 + .../kit/modules/blox/layouts/sitemap.xml | 30 + .../kit/modules/blox/layouts/taxonomy.html | 37 + .../kit/modules/blox/layouts/terms.html | 37 + .../HugoBlox/kit/modules/blox/package.json | 22 + .../HugoBlox/kit/modules/blox/theme.toml | 26 + .../modules/integrations/netlify/config.yaml | 19 + .../netlify/src/layouts/index.headers | 26 + .../netlify/src/layouts/index.redirects | 11 + .../assets/media/authors/me.jpg | Bin 0 -> 1387900 bytes .../theme-documentation/assets/media/icon.png | Bin 0 -> 3079 bytes .../assets/media/icons/custom/.gitkeep | 0 .../theme-documentation/assets/media/logo.svg | 1 + .../config/_default/hugo.yaml | 97 + .../config/_default/languages.yaml | 22 + .../config/_default/menus.yaml | 34 + .../config/_default/module.yaml | 28 + .../config/_default/params.yaml | 289 + .../HugoBlox/theme-documentation/package.json | 19 + .../HugoBlox/theme-documentation/theme.toml | 15 + _vendor/modules.txt | 4 + assets/jsconfig.json | 10 + config/_default/menus.yaml | 25 + config/_default/params.yaml | 95 + content/_index.md | 4 + content/about/_index.md | 39 + content/docs/_index.md | 8 + content/docs/electronics/_index.md | 19 + content/docs/getting-started/_index.md | 24 + content/docs/hardware/_index.md | 19 + content/docs/programming/_index.md | 19 + content/docs/projects/_index.md | 29 + data/pages/home.yaml | 167 + data/themes/goeducation.yaml | 42 + go.mod | 8 + go.sum | 4 + hugo.toml | 99 +- hugo_stats.json | 509 + package-lock.json | 1587 +++ package.json | 22 + 536 files changed, 75211 insertions(+), 3 deletions(-) create mode 100644 _vendor/github.com/HugoBlox/kit/modules/analytics/hugo.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/index.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/baidu_tongji.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/fathom.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/google_analytics.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/google_tag_manager.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/index.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/microsoft_clarity.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/pirsch.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/plausible.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/verification.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/archetypes/faq.md create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/archetypes/questions.md create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/README.md create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/animations.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/chroma.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/color-utilities.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/all.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/author-notes.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/cards.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/charts.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/copy.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/cover.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/glassmorphism.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/math.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/navbar.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/notebook.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/page.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/sidebar-left.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/steps.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/task-list.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/config/safelist.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/config/tailwind.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/config/theme.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/framework/base.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/framework/components.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/hb-search.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/layout-utilities.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/libs/chroma/dark.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/libs/chroma/light.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/main.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/amber.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/blue.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/cyan.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/emerald.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/fuchsia.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/green.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/indigo.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/lime.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/orange.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/pink.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/purple.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/red.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/rose.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/sky.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/slate.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/stone.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/teal.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/violet.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/yellow.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/zinc.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/views/all.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/css/views/attachments.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/font/Inter.var.woff2 create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/font/JetBrainsMono.var.ttf create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/alpinejs/cdn.min.js create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/auto-render.min.js create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_AMS-Regular.ttf create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_AMS-Regular.woff create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_AMS-Regular.woff2 create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Caligraphic-Bold.ttf create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Caligraphic-Bold.woff create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Caligraphic-Bold.woff2 create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Caligraphic-Regular.ttf create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Caligraphic-Regular.woff create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Caligraphic-Regular.woff2 create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Fraktur-Bold.ttf create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Fraktur-Bold.woff create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Fraktur-Bold.woff2 create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Fraktur-Regular.ttf create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Fraktur-Regular.woff create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Fraktur-Regular.woff2 create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Main-Bold.ttf create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Main-Bold.woff create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Main-Bold.woff2 create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Main-BoldItalic.ttf create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Main-BoldItalic.woff create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Main-BoldItalic.woff2 create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Main-Italic.ttf create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Main-Italic.woff create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Main-Italic.woff2 create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Main-Regular.ttf create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Main-Regular.woff create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Main-Regular.woff2 create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Math-BoldItalic.ttf create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Math-BoldItalic.woff create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Math-BoldItalic.woff2 create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Math-Italic.ttf create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Math-Italic.woff create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Math-Italic.woff2 create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_SansSerif-Bold.ttf create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_SansSerif-Bold.woff create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_SansSerif-Bold.woff2 create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_SansSerif-Italic.ttf create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_SansSerif-Italic.woff create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_SansSerif-Italic.woff2 create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_SansSerif-Regular.ttf create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_SansSerif-Regular.woff create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_SansSerif-Regular.woff2 create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Script-Regular.ttf create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Script-Regular.woff create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Script-Regular.woff2 create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Size1-Regular.ttf create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Size1-Regular.woff create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Size1-Regular.woff2 create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Size2-Regular.ttf create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Size2-Regular.woff create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Size2-Regular.woff2 create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Size3-Regular.ttf create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Size3-Regular.woff create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Size3-Regular.woff2 create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Size4-Regular.ttf create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Size4-Regular.woff create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Size4-Regular.woff2 create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Typewriter-Regular.ttf create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Typewriter-Regular.woff create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/fonts/KaTeX_Typewriter-Regular.woff2 create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/katex.min.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/katex/katex.min.js create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/markmap/index.js create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/mermaid/mermaid.min.js create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/plotly/plotly.min.js create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/preact/hooks.min.js create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/preact/preact.min.js create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/preact/preact.min.js.map create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/vendor-libs.mjs create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/js/hb-animations.js create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/js/hb-citation.js create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/js/hb-clipboard.js create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/js/hb-code-copy.js create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/js/hb-head.js create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/js/hb-i18n.js create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/js/hb-init.js create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/js/hb-mermaid-config.js create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/js/hb-nav.js create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/js/hb-notifier.js create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/js/hb-search.js create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/js/hb-sidebar.js create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/js/hb-theme.js create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/js/katex-config.js create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/js/vendor-libs.js create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/media/icon.png create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/assets/media/textures/noise-pattern.svg create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/collection/README.md create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/collection/block.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/collection/manifest.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/collection/preview.svg create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/contact-info/README.md create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/contact-info/block.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/contact-info/manifest.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/cta-button-list/README.md create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/cta-button-list/block.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/cta-button-list/manifest.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/cta-button-list/preview.svg create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/cta-card/README.md create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/cta-card/client.jsx create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/cta-card/component.jsx create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/cta-card/manifest.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/cta-card/preview.svg create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/cta-image-paragraph/README.md create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/cta-image-paragraph/client.jsx create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/cta-image-paragraph/component.jsx create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/cta-image-paragraph/manifest.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/cta-image-paragraph/preview.svg create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/dev-hero/README.md create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/dev-hero/block.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/dev-hero/manifest.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/faq/README.md create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/faq/block.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/faq/manifest.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/faq/preview.svg create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/features/README.md create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/features/client.jsx create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/features/component.jsx create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/features/manifest.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/features/preview.svg create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/hero/README.md create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/hero/client.jsx create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/hero/component.jsx create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/hero/manifest.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/hero/preview.svg create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/knowledge-categories/block.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/knowledge-categories/manifest.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/logos/README.md create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/logos/block.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/logos/manifest.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/markdown/README.md create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/markdown/block.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/markdown/manifest.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/markdown/preview.svg create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/portfolio/README.md create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/portfolio/block.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/portfolio/manifest.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/research-areas/README.md create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/research-areas/block.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/research-areas/manifest.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/resume-awards/README.md create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/resume-awards/block.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/resume-awards/manifest.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/resume-awards/preview.svg create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/resume-biography-3/README.md create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/resume-biography-3/block.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/resume-biography-3/manifest.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/resume-biography-3/preview.svg create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/resume-biography/README.md create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/resume-biography/block.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/resume-biography/manifest.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/resume-biography/preview.svg create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/resume-biography/style.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/resume-experience/README.md create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/resume-experience/block.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/resume-experience/manifest.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/resume-experience/preview.svg create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/resume-languages/README.md create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/resume-languages/block.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/resume-languages/manifest.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/resume-languages/preview.svg create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/resume-skills/README.md create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/resume-skills/block.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/resume-skills/manifest.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/resume-skills/preview.svg create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/resume-skills/style.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/search-hero/README.md create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/search-hero/block.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/search-hero/manifest.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/shared/css/biography-shared.css create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/shared/js/components/Icon.jsx create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/stats/README.md create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/stats/client.jsx create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/stats/component.jsx create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/stats/manifest.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/stats/preview.svg create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/team-showcase/README.md create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/team-showcase/block.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/team-showcase/manifest.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/tech-stack/README.md create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/tech-stack/block.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/tech-stack/manifest.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/testimonials/README.md create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/testimonials/client.jsx create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/testimonials/component.jsx create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/testimonials/manifest.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/testimonials/preview.svg create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/trending-questions/block.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/blox/trending-questions/manifest.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/data/address_formats.toml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/data/blox_aliases.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/data/fonts/academic.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/data/fonts/developer.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/data/fonts/editorial.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/data/fonts/geometric.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/data/fonts/humanist.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/data/fonts/modern.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/data/fonts/system.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/data/hugoblox.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/data/icons/academicons.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/data/icons/aliases.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/data/icons/brands.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/data/icons/devicon.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/data/icons/hb.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/data/icons/hero.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/data/languages.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/data/link_types.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/data/page_sharer.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/data/themes/coffee.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/data/themes/contrast.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/data/themes/cupcake.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/data/themes/default.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/data/themes/dracula.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/data/themes/marine.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/data/themes/matcha.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/data/themes/minimal.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/data/themes/retro.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/data/themes/solar.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/data/themes/synthwave.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/hugo.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/hugo_stats.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/ar.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/bn.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/ca.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/cs.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/da.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/de.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/el.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/en.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/es.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/et.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/eu.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/fa.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/fi.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/fr.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/he.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/hi.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/hr.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/ht.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/hu.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/id.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/it.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/ja.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/km.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/ko.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/lt.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/lv.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/mg.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/ms-Arab.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/ms.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/nb.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/nl.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/pl.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/pt.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/ro.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/ru.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/so.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/sv.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/tr.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/uk.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/vi.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/zh-Hant.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/i18n/zh.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/404.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_markup/render-blockquote.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_markup/render-codeblock-markmap.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_markup/render-codeblock-mermaid.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_markup/render-image.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_markup/render-link.backlinks.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_markup/render-link.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/blox/contact-info/config.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/blox/dev-hero/config.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/blox/portfolio/config.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/blox/preact-wrapper.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/blox/tech-stack/config.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/comments.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/comments/disqus.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/comments/giscus.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/backlinks.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/breadcrumb.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/cover.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/feedback.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/footers/columns.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/footers/minimal.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/headers/floating-theme-toggler.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/headers/navbar-simple.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/headers/navbar.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/language-chooser.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/last-edited.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/next-in-series.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/page_sharer.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/paginator.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/search-modal.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/sidebar.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/slides-embed.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/toc.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/css.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/docs_layout.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/build_links.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/coerce_bool.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/coerce_int.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/deep_merge.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/demo_theme_styles.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/embed/github.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/embed/hbx_content_section.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/embed/hbx_platform_icon.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/embed/hbx_title_section.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/embed/huggingface.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/generate_color_scale.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get-block-scripts.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get-build-id.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_address.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_author_name.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_author_profile.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_authors_data.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_branding.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_cover_image.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_event_dates.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_featured_image.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_hook.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_icon.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_icon_data.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_icon_svg.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_logo.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_logo_url.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_page_title.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_site_icon.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_sort_by_parameter.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_summary.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_theme_config.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/has_attachments.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/hbx_verify.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/layout_tokens.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/load_font_pack.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/load_theme_pack.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/logger.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/notebook/render.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/parse_block_v3.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/process_responsive_image.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/render_callout.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/render_view.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/theme_generator.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/theme_variables.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/typography.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/uid.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/hbx/resolve-block-param.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/hbx/resolve.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/hbx/sections.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/hooks/body-end/hbx-debug-export.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/hooks/body-end/hbx-debug-hud.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/init.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/article.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/breadcrumbs.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/business.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/collectionpage.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/event.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/faqpage.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/main.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/qapage.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/webpage.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/website.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/landing_page.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/libraries.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/notification-container.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_author.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_author_card.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_edit.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_footer.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_links.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_links_div.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_metadata_authors.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_related.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/site_footer.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/site_footer_license.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/site_head.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/social_links.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/tags.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/tailwind_sources.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/article-grid--end.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/article-grid--start.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/article-grid.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/card--end.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/card--start.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/card.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/citation--end.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/citation--start.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/citation.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/date-title-summary--end.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/date-title-summary--start.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/date-title-summary.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/slides-gallery--end.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/slides-gallery--start.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/slides-gallery.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_shortcodes/audio.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_shortcodes/bilibili.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_shortcodes/button.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_shortcodes/callout.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_shortcodes/card.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_shortcodes/cards.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_shortcodes/chart.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_shortcodes/cite.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_shortcodes/embed.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_shortcodes/icon.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_shortcodes/include.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_shortcodes/math.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_shortcodes/mention.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_shortcodes/notebook.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_shortcodes/spoiler.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_shortcodes/steps.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_shortcodes/table.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_shortcodes/toc.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/_shortcodes/video.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/authors/term.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/baseof.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/docs/list.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/docs/single.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/events/page.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/faq/list.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/faq/single.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/home.backlinks.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/home.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/index.llm.txt create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/index.webmanifest create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/landing/list.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/landing/single.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/list.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/questions/list.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/questions/single.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/robots.txt create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/rss.xml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/single.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/sitemap.xml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/taxonomy.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/layouts/terms.html create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/package.json create mode 100644 _vendor/github.com/HugoBlox/kit/modules/blox/theme.toml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/integrations/netlify/config.yaml create mode 100644 _vendor/github.com/HugoBlox/kit/modules/integrations/netlify/src/layouts/index.headers create mode 100644 _vendor/github.com/HugoBlox/kit/modules/integrations/netlify/src/layouts/index.redirects create mode 100644 _vendor/github.com/HugoBlox/theme-documentation/assets/media/authors/me.jpg create mode 100644 _vendor/github.com/HugoBlox/theme-documentation/assets/media/icon.png create mode 100644 _vendor/github.com/HugoBlox/theme-documentation/assets/media/icons/custom/.gitkeep create mode 100644 _vendor/github.com/HugoBlox/theme-documentation/assets/media/logo.svg create mode 100644 _vendor/github.com/HugoBlox/theme-documentation/config/_default/hugo.yaml create mode 100644 _vendor/github.com/HugoBlox/theme-documentation/config/_default/languages.yaml create mode 100644 _vendor/github.com/HugoBlox/theme-documentation/config/_default/menus.yaml create mode 100644 _vendor/github.com/HugoBlox/theme-documentation/config/_default/module.yaml create mode 100644 _vendor/github.com/HugoBlox/theme-documentation/config/_default/params.yaml create mode 100644 _vendor/github.com/HugoBlox/theme-documentation/package.json create mode 100644 _vendor/github.com/HugoBlox/theme-documentation/theme.toml create mode 100644 _vendor/modules.txt create mode 100644 assets/jsconfig.json create mode 100644 config/_default/menus.yaml create mode 100644 config/_default/params.yaml create mode 100644 content/_index.md create mode 100644 content/about/_index.md create mode 100644 content/docs/_index.md create mode 100644 content/docs/electronics/_index.md create mode 100644 content/docs/getting-started/_index.md create mode 100644 content/docs/hardware/_index.md create mode 100644 content/docs/programming/_index.md create mode 100644 content/docs/projects/_index.md create mode 100644 data/pages/home.yaml create mode 100644 data/themes/goeducation.yaml create mode 100644 go.mod create mode 100644 go.sum create mode 100644 hugo_stats.json create mode 100644 package-lock.json create mode 100644 package.json diff --git a/_vendor/github.com/HugoBlox/kit/modules/analytics/hugo.yaml b/_vendor/github.com/HugoBlox/kit/modules/analytics/hugo.yaml new file mode 100644 index 0000000..7d9ee8a --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/analytics/hugo.yaml @@ -0,0 +1,4 @@ +module: + mounts: + - source: layouts + target: layouts diff --git a/_vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/index.html b/_vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/index.html new file mode 100644 index 0000000..bb87f9c --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/index.html @@ -0,0 +1,9 @@ +{{/* HUGO BLOX: MARKETING MODULE */}} + +{{/* VERIFICATIONS */}} + +{{ partial "blox-analytics/verification" . }} + +{{/* ANALYTICS */}} + +{{ partial "blox-analytics/services/index" . }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/baidu_tongji.html b/_vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/baidu_tongji.html new file mode 100644 index 0000000..9f60d70 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/baidu_tongji.html @@ -0,0 +1,13 @@ +{{ $baidu_tongji := site.Params.hugoblox.analytics.baidu.site_id | default "" }} + +{{ if hugo.IsProduction | and $baidu_tongji }} + +{{ end }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/fathom.html b/_vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/fathom.html new file mode 100644 index 0000000..e4fa5a4 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/fathom.html @@ -0,0 +1,5 @@ +{{ $fathom := site.Params.hugoblox.analytics.fathom.site_id | default "" }} + +{{ if hugo.IsProduction | and $fathom }} + +{{ end }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/google_analytics.html b/_vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/google_analytics.html new file mode 100644 index 0000000..dde7989 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/google_analytics.html @@ -0,0 +1,42 @@ +{{ $ga := site.Params.hugoblox.analytics.google.measurement_id | default "" }} + +{{ if hugo.IsProduction | and $ga }} + +{{ $gtag_config := cond (site.Params.hugoblox.privacy.anonymize_analytics | default true) "{ 'anonymize_ip': true }" "{}" }} + + +{{ end }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/google_tag_manager.html b/_vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/google_tag_manager.html new file mode 100644 index 0000000..3b1c478 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/google_tag_manager.html @@ -0,0 +1,10 @@ +{{ $gt := site.Params.hugoblox.analytics.google_tag_manager.container_id | default "" }} +{{ if hugo.IsProduction | and $gt }} + +{{ end }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/index.html b/_vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/index.html new file mode 100644 index 0000000..3e0e8af --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/index.html @@ -0,0 +1,7 @@ +{{ partial "blox-analytics/services/google_analytics" . }} +{{ partial "blox-analytics/services/google_tag_manager" . }} +{{ partial "blox-analytics/services/microsoft_clarity" . }} +{{ partial "blox-analytics/services/baidu_tongji" . }} +{{ partial "blox-analytics/services/plausible" . }} +{{ partial "blox-analytics/services/fathom" . }} +{{ partial "blox-analytics/services/pirsch" . }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/microsoft_clarity.html b/_vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/microsoft_clarity.html new file mode 100644 index 0000000..168ebdc --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/microsoft_clarity.html @@ -0,0 +1,10 @@ +{{ $clarity := site.Params.hugoblox.analytics.clarity.project_id | default "" }} +{{ if hugo.IsProduction | and $clarity }} + +{{ end }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/pirsch.html b/_vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/pirsch.html new file mode 100644 index 0000000..07c49e5 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/pirsch.html @@ -0,0 +1,5 @@ +{{ $pirsch := site.Params.hugoblox.analytics.pirsch.site_id | default "" }} + +{{ if hugo.IsProduction | and $pirsch }} + +{{ end }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/plausible.html b/_vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/plausible.html new file mode 100644 index 0000000..47cf517 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/services/plausible.html @@ -0,0 +1,5 @@ +{{ $plausible := site.Params.hugoblox.analytics.plausible.domain | default "" }} + +{{ if hugo.IsProduction | and $plausible }} + +{{ end }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/verification.html b/_vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/verification.html new file mode 100644 index 0000000..ea50d84 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/analytics/layouts/_partials/blox-analytics/verification.html @@ -0,0 +1,25 @@ +{{/* Site Verification with Third Party Services */}} + +{{- with site.Params.hugoblox.verification.google -}} + +{{- end -}} + +{{- with site.Params.hugoblox.verification.bing -}} + +{{- end -}} + +{{- with site.Params.hugoblox.verification.yandex -}} + +{{- end -}} + +{{- with site.Params.hugoblox.verification.pinterest -}} + +{{- end -}} + +{{- with site.Params.hugoblox.verification.baidu -}} + +{{- end -}} + +{{ with site.Params.hugoblox.verification.naver }} + +{{- end -}} \ No newline at end of file diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/archetypes/faq.md b/_vendor/github.com/HugoBlox/kit/modules/blox/archetypes/faq.md new file mode 100644 index 0000000..7735148 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/archetypes/faq.md @@ -0,0 +1,45 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +date: {{ .Date }} +draft: false + +# Summary for SEO +summary: "" + +# Mark this as an FAQ page to enable FAQPage structured data +faq_page: true + +# Categories and tags +categories: [] +tags: [] + +# Pagefind search metadata (automatically indexed) +# type: faq (auto-added by layout) +# category: first category from categories array above + +# Option 1: Define FAQs inline +faqs: + - question: "What is your question here?" + answer: "Your answer here. Can use **Markdown** formatting." + + - question: "Another question?" + answer: "Another answer with more details." + + # Add more Q&As as needed + +# Option 2: Alternatively, create child pages under this FAQ section +# and they will automatically be included + +# SEO settings +seo: + title: "" + description: "" + +# Show breadcrumb navigation +show_breadcrumb: true +--- + +Add an introductory text here that will appear before the FAQ accordion. + +This is a great place to provide context about the FAQ section. + diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/archetypes/questions.md b/_vendor/github.com/HugoBlox/kit/modules/blox/archetypes/questions.md new file mode 100644 index 0000000..78023ab --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/archetypes/questions.md @@ -0,0 +1,62 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +date: {{ .Date }} +draft: false + +# The question (can also use title) +question: "{{ replace .Name "-" " " | title }}" + +# Short answer (optional - can also use content below) +answer: "" + +# Summary for SEO and previews +summary: "" + +# Difficulty level (optional) +difficulty: "" # e.g., "Beginner", "Intermediate", "Advanced" + +# Categories and tags for organization +categories: [] +tags: [] + +# Pagefind search metadata (automatically indexed) +# type: questions (auto-added by layout) +# category: first category from categories array above +# difficulty: value from difficulty field below + +# Vote counts (optional - for display and structured data) +upvote_count: 0 +downvote_count: 0 + +# Additional/suggested answers (optional) +# suggested_answer: +# - text: "Alternative answer text here..." +# author: "Author Name" +# date: 2024-01-15 +# upvote_count: 5 + +# Related questions (optional - can also be auto-generated) +# related: +# - link-to-related-question + +# SEO settings +seo: + title: "" + description: "" + +# Show breadcrumb navigation +show_breadcrumb: true +--- + +Write your detailed answer here using Markdown. + +You can include: +- Code blocks +- Images +- Lists +- Links +- And more! + +## Additional Details + +Add sections as needed to provide comprehensive information. diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/README.md b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/README.md new file mode 100644 index 0000000..eaac790 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/README.md @@ -0,0 +1,99 @@ +# Hugo Blox Tailwind CSS v4 Color System + +## Architecture Overview + +This system leverages Tailwind CSS v4's automatic utility generation to provide a comprehensive color system with minimal code. + +### How It Works + +1. **Theme Configuration** (`config/theme.css`) + + - Colors defined in `@theme` block automatically generate ALL utilities + - Includes standard Tailwind colors: gray, slate, zinc, neutral, stone + - Includes themeable colors: primary, secondary + +2. **Theme Files** (`themes/*.css`) + + - Small files that override `--color-primary-*` and `--color-secondary-*` variables + - Users switch themes by loading different theme CSS files + - No utilities redefined - just color values changed + +3. **Custom Utilities** (`color-utilities.css`) + - Only 42 lines vs previous 1,228 lines! + - Contains only custom colors not auto-generated (like `hb-dark`) + +### Available Colors + +**Standard Colors (always available):** + +- `gray-*` - Neutral grays +- `slate-*` - Cool grays +- `zinc-*` - True grays +- `neutral-*` - Pure grays +- `stone-*` - Warm grays + +**Themeable Colors (vary by theme):** + +- `primary-*` - Main theme color +- `secondary-*` - Accent theme color + +**Custom Colors:** + +- `hb-dark` - Hugo Blox brand dark color + +### Auto-Generated Utilities + +For every color defined in `@theme`, Tailwind automatically creates: + +- Background: `bg-{color}-{shade}` +- Text: `text-{color}-{shade}` +- Border: `border-{color}-{shade}` +- Hover: `hover:bg-{color}-{shade}`, `hover:text-{color}-{shade}` +- Dark mode: `dark:bg-{color}-{shade}`, `dark:text-{color}-{shade}` +- Gradients: `from-{color}-{shade}`, `to-{color}-{shade}` +- Focus rings: `focus:ring-{color}-{shade}` +- All other Tailwind color variants + +### Shades Available + +All colors include 11 shades: `50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950` + +### Usage Examples + +```html + +
...
+
...
+ + +
...
+
...
+ + +
...
+``` + +### Benefits + +1. **Dramatically Reduced File Size**: 1,228 lines → 42 lines (97% reduction!) +2. **Automatic Generation**: No manual utility definitions needed +3. **Maintainable**: Add new colors just by defining them in `@theme` +4. **Consistent**: All Tailwind variants automatically available +5. **Themeable**: Easy theme switching via CSS variable overrides + +### Adding New Colors + +To add a new color scale: + +1. Define in `config/theme.css`: + + ```css + --color-brand-500: 59 130 246; + --color-brand-600: 37 99 235; + /* etc. */ + ``` + +2. Tailwind automatically generates all utilities: + - `bg-brand-500`, `text-brand-600`, `hover:bg-brand-500`, etc. + +No manual utility definitions required! diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/animations.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/animations.css new file mode 100644 index 0000000..a8e20e5 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/animations.css @@ -0,0 +1,256 @@ +/** + * Hugo Blox Animations + * Scroll-triggered reveals and micro-interactions + */ + +/* Typewriter cursor */ +.typewriter-cursor { + display: inline-block; + width: 3px; + margin-left: 2px; + background-color: currentColor; + animation: blink 1s step-end infinite; +} + +@keyframes blink { + 50% { + opacity: 0; + } +} + +/* Reveal animations base */ +[x-reveal] { + opacity: 0; +} + +/* Stagger container */ +[data-stagger] > [data-stagger-item] { + opacity: 0; + transform: translateY(20px); + transition: + opacity 0.5s ease-out, + transform 0.5s ease-out; +} + +[data-stagger].revealed > [data-stagger-item] { + opacity: 1; + transform: translateY(0); +} + +/* Hover enhancements for cards */ +.card-hover-lift { + transition: + transform 0.3s ease-out, + box-shadow 0.3s ease-out; +} + +.card-hover-lift:hover { + transform: translateY(-4px); + box-shadow: 0 12px 40px -12px rgba(0, 0, 0, 0.3); +} + +/* Hover glow effect */ +.hover-glow { + position: relative; + transition: all 0.3s ease-out; +} + +.hover-glow::before { + content: ""; + position: absolute; + inset: -2px; + border-radius: inherit; + background: linear-gradient(135deg, var(--color-primary-500), var(--color-secondary-500)); + opacity: 0; + z-index: -1; + transition: opacity 0.3s ease-out; + filter: blur(8px); +} + +.hover-glow:hover::before { + opacity: 0.5; +} + +/* Icon bounce on hover */ +.icon-bounce:hover { + animation: iconBounce 0.5s ease-out; +} + +@keyframes iconBounce { + 0%, + 100% { + transform: translateY(0); + } + 50% { + transform: translateY(-4px); + } +} + +/* Scale up on hover */ +.scale-hover { + transition: transform 0.2s ease-out; +} + +.scale-hover:hover { + transform: scale(1.05); +} + +/* Button pulse */ +.btn-pulse { + position: relative; +} + +.btn-pulse::after { + content: ""; + position: absolute; + inset: 0; + border-radius: inherit; + box-shadow: 0 0 0 0 currentColor; + opacity: 0.4; + animation: pulse-ring 2s infinite; +} + +@keyframes pulse-ring { + 0% { + box-shadow: 0 0 0 0 currentColor; + opacity: 0.4; + } + 100% { + box-shadow: 0 0 0 12px currentColor; + opacity: 0; + } +} + +/* Float animation for background orbs */ +@keyframes float { + 0%, + 100% { + transform: translateY(0) translateX(0); + } + 25% { + transform: translateY(-20px) translateX(10px); + } + 50% { + transform: translateY(-10px) translateX(-10px); + } + 75% { + transform: translateY(-30px) translateX(5px); + } +} + +.animate-float { + animation: float 8s ease-in-out infinite; +} + +/* Slow rotate for decorative elements */ +@keyframes rotate-slow { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +.animate-rotate-slow { + animation: rotate-slow 30s linear infinite; +} + +/* Fade in up - for scroll reveals */ +@keyframes fadeInUp { + from { + opacity: 0; + transform: translateY(30px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.animate-fade-in-up { + animation: fadeInUp 0.6s ease-out forwards; +} + +/* Scale in - for icons/badges */ +@keyframes scaleIn { + from { + opacity: 0; + transform: scale(0.8); + } + to { + opacity: 1; + transform: scale(1); + } +} + +.animate-scale-in { + animation: scaleIn 0.4s ease-out forwards; +} + +/* Slide in from left */ +@keyframes slideInLeft { + from { + opacity: 0; + transform: translateX(-30px); + } + to { + opacity: 1; + transform: translateX(0); + } +} + +.animate-slide-in-left { + animation: slideInLeft 0.5s ease-out forwards; +} + +/* Respect reduced motion */ +@media (prefers-reduced-motion: reduce) { + *, + *::before, + *::after { + animation-duration: 0.01ms; + animation-iteration-count: 1; + transition-duration: 0.01ms; + } + + .typewriter-cursor { + animation: none; + opacity: 1; + } + + [x-reveal], + [data-stagger] > [data-stagger-item] { + opacity: 1; + transform: none; + } +} + +/* Dark mode adjustments */ +.dark .hover-glow::before { + opacity: 0; +} + +.dark .hover-glow:hover::before { + opacity: 0.3; +} + +/* Dark mode icon visibility fix */ +/* For icons that are dark/black and invisible on dark backgrounds */ +.dark .dark-mode-icon svg, +.dark .dark-mode-icon img { + filter: invert(1) brightness(2); +} + +/* Alternative: Add subtle background to icon containers */ +.dark .dark-mode-icon { + background: rgba(255, 255, 255, 0.08); + border-radius: 0.5rem; + padding: 0.25rem; +} + +/* Hover state restores some contrast */ +.dark .group:hover .dark-mode-icon svg, +.dark .group:hover .dark-mode-icon img { + filter: invert(1) brightness(1.5); +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/chroma.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/chroma.css new file mode 100644 index 0000000..8f3e1ca --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/chroma.css @@ -0,0 +1,27 @@ +@import "./libs/chroma/light.css"; +@import "./libs/chroma/dark.css"; + +/* Code Blocks: Apply theme background */ +/* Requires relative position for Code Copy button */ +.prose .chroma, +.prose pre { + @apply relative rounded-md; + + color: var(--color-neutral-700); + background-color: var(--color-neutral-50); +} + +.dark .prose .chroma, +.dark .prose pre { + color: white; + background-color: rgb(71 85 105); /* slate-700 equivalent */ +} + +/* Fix LaTeX/TeX math rendering in code blocks - prevent inheriting italic from Chroma in dark mode */ +.chroma .language-latex, +.chroma .language-latex *, +.chroma .language-tex, +.chroma .language-tex * { + /* biome-ignore lint/complexity/noImportantStyles: Required to override Chroma's default italic for LaTeX/TeX */ + font-style: normal !important; +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/color-utilities.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/color-utilities.css new file mode 100644 index 0000000..6b52712 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/color-utilities.css @@ -0,0 +1,47 @@ +/* Hugo Blox Custom Color Utilities for Tailwind v4 */ +/* + * Standard color utilities (bg-*, text-*, border-*, hover:*, dark:*, from-*, to-*, etc.) + * are automatically generated by Tailwind v4 from colors defined in @theme block. + * + * This file only contains custom utilities not auto-generated by Tailwind. + */ + +@layer utilities { + /* Custom Hugo Blox Dark Color */ + .bg-hb-dark { + background-color: var(--color-hb-dark, rgb(23 24 28)); + } + .text-hb-dark { + color: var(--color-hb-dark, rgb(23 24 28)); + } + .border-hb-dark { + border-color: var(--color-hb-dark, rgb(23 24 28)); + } + + /* Dark mode variants */ + .dark\:bg-hb-dark:where(.dark, .dark *) { + background-color: var(--color-hb-dark, rgb(23 24 28)); + } + .dark\:text-hb-dark:where(.dark, .dark *) { + color: var(--color-hb-dark, rgb(23 24 28)); + } +} + +/* + * Available Auto-Generated Utilities (from @theme colors): + * + * Standard Colors: gray, slate, zinc, neutral, stone + * Theme Colors: primary, secondary (overridden by theme files) + * + * Auto-generated utilities include: + * - Background: .bg-{color}-{shade} + * - Text: .text-{color}-{shade} + * - Border: .border-{color}-{shade} + * - Hover: .hover:bg-{color}-{shade}, .hover:text-{color}-{shade} + * - Dark: .dark:bg-{color}-{shade}, .dark:text-{color}-{shade} + * - Gradients: .from-{color}-{shade}, .to-{color}-{shade} + * - Focus: .focus:ring-{color}-{shade} + * - And all other Tailwind color variants + * + * Shades: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950 + */ diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/all.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/all.css new file mode 100644 index 0000000..fdc86ff --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/all.css @@ -0,0 +1,13 @@ +@import "page.css"; +@import "task-list.css"; +@import "copy.css"; +@import "sidebar-left.css"; +@import "charts.css"; +@import "steps.css"; +@import "cards.css"; +@import "math.css"; +@import "notebook.css"; +@import "author-notes.css"; +@import "glassmorphism.css"; +@import "cover.css"; +@import "navbar.css"; diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/author-notes.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/author-notes.css new file mode 100644 index 0000000..c9780cc --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/author-notes.css @@ -0,0 +1,48 @@ +/* Author Notes Tooltip Styles */ + +/* Hide elements with x-cloak until Alpine.js initializes */ +[x-cloak] { + /* biome-ignore lint/complexity/noImportantStyles: Required to reliably hide until Alpine initializes */ + display: none !important; +} + +/* Ensure tooltip appears above other content */ +.author-notes-tooltip { + z-index: 9999; +} + +/* Smooth hover effect for the info icon */ +.author-notes { + @apply inline-flex items-center justify-center; + @apply transition-all duration-200 ease-in-out; +} + +/* Focus styles for accessibility */ +.author-notes:focus { + @apply outline-none ring-2 ring-primary-500 ring-offset-2 rounded-full; +} + +/* Additional responsive styles for mobile */ +@media (max-width: 640px) { + /* On mobile, tooltips should be wider if needed */ + .author-notes-tooltip { + white-space: normal; + max-width: 200px; + } +} + +/* Print styles - show author notes inline when printing */ +@media print { + .author-notes { + display: none; + } + + /* Show author notes as superscript numbers in print */ + .author-notes::after { + display: inline; + content: attr(data-tooltip); + vertical-align: super; + font-size: 0.75em; + margin-left: 0.25em; + } +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/cards.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/cards.css new file mode 100644 index 0000000..171f6b2 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/cards.css @@ -0,0 +1,67 @@ +:root { + --hb-cols: 2; +} + +.hb-cards { + grid-template-columns: repeat(auto-fill, minmax(max(250px, calc((100% - 1rem * 2) / var(--hb-cols))), 1fr)); +} + +.hb-card { + @apply flex flex-col justify-start overflow-hidden rounded-lg border border-gray-200 text-current no-underline dark:shadow-transparent hover:shadow-gray-100 dark:hover:shadow-transparent shadow-gray-100 active:shadow-sm active:shadow-gray-200 transition-all duration-200; + @apply hover:border-gray-300 bg-transparent shadow-sm hover:bg-slate-50 hover:shadow-md; + + border-color: var(--color-neutral-700); +} + +.dark .hb-card { + border-color: var(--color-neutral-700); +} + +.dark .hb-card:hover { + border-color: var(--color-neutral-600); + background-color: var(--color-neutral-800); +} + +.hb-card-title { + @apply flex font-semibold gap-2 text-gray-700 hover:text-gray-900 items-center; + + color: var(--color-neutral-700); +} + +.hb-card-title:hover { + color: var(--color-neutral-900); +} + +.dark .hb-card-title { + color: var(--color-neutral-200); +} + +.dark .hb-card-title:hover { + color: var(--color-neutral-50); +} + +.hb-card-subtitle { + @apply line-clamp-3 text-sm font-normal text-gray-500 dark:text-gray-400 px-4 mb-4 mt-2; +} + +.hb-card svg { + color: var(--color-neutral-700); + width: 1.5rem; + transition: color 0.3s ease; +} + +.hb-card:hover svg { + color: currentcolor; +} + +.hb-card p { + margin-top: 0.5rem; +} + +.dark .hb-card svg { + color: var(--color-neutral-300); +} + +.dark .hb-card:hover svg { + color: currentcolor; +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/charts.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/charts.css new file mode 100644 index 0000000..0c4da36 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/charts.css @@ -0,0 +1,21 @@ +/* Mermaid.js diagram div */ +div.mermaid { + width: 100%; + margin-bottom: 1rem; + + svg { + margin-left: auto; + margin-right: auto; + } +} + +/* Plotly chart */ +div.chart { + max-width: 100%; + margin-left: auto; + margin-right: auto; + margin-bottom: 1rem; + + /* Add horizontal scroll on mobile since Plotly */ + overflow-x: auto; +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/copy.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/copy.css new file mode 100644 index 0000000..8f46f5e --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/copy.css @@ -0,0 +1,31 @@ +/* Code Copy */ + +/* Hugo's Code Block Wrapper Class */ + +.highlight { + @apply relative z-0; +} + +.copy-button { + @apply invisible absolute right-0 top-0 z-10 w-20 py-1 cursor-pointer font-mono text-sm whitespace-nowrap rounded-bl-md rounded-tr-md bg-neutral-200 text-neutral-700 opacity-90 dark:bg-neutral-600 dark:text-neutral-200; +} + +/* Copy Button */ + +.highlight:hover > .copy-button { + @apply visible; +} + +.copy-button:hover, +.copy-button:focus, +.copy-button:active, +.copy-button:active:hover { + background-color: var(--color-primary-100); +} + +.dark .copy-button:hover, +.dark .copy-button:focus, +.dark .copy-button:active, +.dark .copy-button:active:hover { + background-color: var(--color-primary-600); +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/cover.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/cover.css new file mode 100644 index 0000000..a7e2224 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/cover.css @@ -0,0 +1,146 @@ +/** + * Article Cover Component Styles + * Notion-inspired page cover with icon overlay + */ + +.article-cover { + @apply relative w-full; + /* Height is set inline via style attribute, but ensure it displays */ + min-height: 200px; + /* Allow icon to overflow bottom */ + overflow: visible; + /* Add margin for overlapping icon */ + margin-bottom: 2.5rem; + + /* Responsive height adjustments for mobile */ + @media (max-width: 768px) { + height: 240px; + min-height: 240px; + } +} + +/* Cover image container */ +.article-cover img { + @apply w-full h-full object-cover; +} + +/* Cover icon container base styles */ +.article-cover-icon { + @apply flex items-center justify-center w-full h-full; + transition: transform 0.2s ease-in-out; +} + +.article-cover-icon:hover { + @apply scale-105; +} + +/* Glass morphism effect for icons */ +.article-cover-icon.glass { + background: rgba(255, 255, 255, 0.9); + backdrop-filter: blur(12px) saturate(180%); + border: 1px solid rgba(255, 255, 255, 0.3); + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); +} + +.dark .article-cover-icon.glass { + background: rgba(0, 0, 0, 0.7); + border-color: rgba(255, 255, 255, 0.1); +} + +/* Fade effect styles */ +.article-cover-fade { + @apply absolute left-0 right-0 pointer-events-none; + bottom: -1px; + background: linear-gradient(to bottom, transparent, white); +} + +.dark .article-cover-fade { + background: linear-gradient(to bottom, transparent, rgb(15, 23, 42)); +} + +/* Style variants */ +.article-cover[data-cover-style="minimal"] { + @apply shadow-sm; +} + +.article-cover[data-cover-style="glass"] { + @apply overflow-visible; +} + +.article-cover[data-cover-style="gradient"] { + /* Applied via inline overlay divs */ +} + +/* Ensure cover works well with dark mode */ +.dark .article-cover { + @apply border-b border-gray-800; +} + +/* Caption styles */ +.article-cover .cover-caption { + @apply absolute bottom-4 left-4 right-4 text-sm text-white/90; + @apply bg-black/50 backdrop-blur-sm px-3 py-2 rounded-lg; +} + +/* Responsive adjustments */ +@media (max-width: 640px) { + .article-cover-icon { + @apply scale-90; + } +} + +/* Parallax effect support (optional feature) */ +.article-cover.parallax { + transform-style: preserve-3d; +} + +.article-cover.parallax img { + transform: translateZ(-1px) scale(1.5); +} + +/* Link hover effect if cover is clickable */ +.article-cover a { + @apply block w-full h-full; +} + +.article-cover a:hover img { + @apply scale-105 transition-transform duration-500; +} + +/* Print styles - show cover but optimize */ +@media print { + .article-cover { + max-height: 200px; + page-break-after: avoid; + } + + .article-cover-fade, + .article-cover-icon { + @apply hidden; + } +} + +/* Accessibility: Reduced motion */ +@media (prefers-reduced-motion: reduce) { + .article-cover, + .article-cover *, + .article-cover-icon { + animation: none; + transition: none; + } + + .article-cover.parallax img { + transform: none; + } +} + +/* High contrast mode support */ +@media (prefers-contrast: high) { + .article-cover-icon { + @apply border-2 border-current; + } + + .article-cover .cover-caption { + @apply bg-black text-white; + } +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/glassmorphism.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/glassmorphism.css new file mode 100644 index 0000000..1d749ba --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/glassmorphism.css @@ -0,0 +1,239 @@ +/** + * 2025 Hugo Blox Glassmorphism Utility Classes + * + * Modern glassmorphism effects for Hugo Blox CTA cards and other components + */ + +/* ========================================================================== + Glassmorphism Base Classes + ========================================================================== */ + +.glassmorphism-primary { + @apply relative overflow-hidden; + background: linear-gradient( + 135deg, + color-mix(in oklch, var(--color-primary-500) 90%, transparent), + color-mix(in oklch, var(--color-primary-600) 95%, transparent), + color-mix(in oklch, var(--color-primary-700) 90%, transparent) + ); + backdrop-filter: blur(20px); + -webkit-backdrop-filter: blur(20px); +} + +.glassmorphism-primary::before { + content: ""; + @apply absolute inset-0 pointer-events-none; + background: linear-gradient(45deg, rgb(0 0 0 / 0.1), transparent, rgb(255 255 255 / 0.1)); + mix-blend-mode: overlay; +} + +.glassmorphism-secondary { + @apply relative overflow-hidden; + background: linear-gradient( + 135deg, + color-mix(in oklch, var(--color-secondary-500) 90%, transparent), + color-mix(in oklch, var(--color-secondary-600) 95%, transparent), + color-mix(in oklch, var(--color-secondary-700) 90%, transparent) + ); + backdrop-filter: blur(20px); + -webkit-backdrop-filter: blur(20px); +} + +.glassmorphism-secondary::before { + content: ""; + @apply absolute inset-0 pointer-events-none; + background: linear-gradient(45deg, rgb(0 0 0 / 0.1), transparent, rgb(255 255 255 / 0.1)); + mix-blend-mode: overlay; +} + +.glassmorphism-dark { + @apply relative overflow-hidden; + background: linear-gradient(135deg, rgb(0 0 0 / 0.7), rgb(31 41 55 / 0.8), rgb(0 0 0 / 0.9)); + backdrop-filter: blur(20px); + -webkit-backdrop-filter: blur(20px); +} + +.glassmorphism-dark::before { + content: ""; + @apply absolute inset-0 pointer-events-none; + background: linear-gradient(45deg, rgb(255 255 255 / 0.05), transparent, rgb(255 255 255 / 0.1)); + mix-blend-mode: overlay; +} + +.glassmorphism-light { + @apply relative overflow-hidden; + background: linear-gradient(135deg, rgb(255 255 255 / 0.9), rgb(248 250 252 / 0.95), rgb(241 245 249 / 0.9)); + backdrop-filter: blur(20px); + -webkit-backdrop-filter: blur(20px); +} + +.glassmorphism-light::before { + content: ""; + @apply absolute inset-0 pointer-events-none; + background: linear-gradient(45deg, rgb(0 0 0 / 0.02), transparent, rgb(255 255 255 / 0.05)); + mix-blend-mode: overlay; +} + +/* ========================================================================== + Noise Texture Classes (when used as background image) + ========================================================================== */ + +.noise-texture { + position: relative; +} + +.noise-texture::after { + content: ""; + @apply absolute inset-0 pointer-events-none; + background-image: url("/media/textures/noise-pattern.svg"); + background-size: 100px 100px; + background-repeat: repeat; + opacity: 0.03; + mix-blend-mode: multiply; +} + +.dark .noise-texture::after { + mix-blend-mode: screen; + opacity: 0.02; +} + +/* ========================================================================== + Enhanced Ring Classes for 2025 Design + ========================================================================== */ + +.glass-ring { + @apply ring-1 ring-white/20 hover:ring-white/40 dark:ring-gray-700/50 dark:hover:ring-gray-600/70; +} + +.glass-shadow { + box-shadow: + 0 25px 50px -12px rgb(0 0 0 / 0.25), + 0 0 0 1px rgb(255 255 255 / 0.1), + inset 0 1px 0 rgb(255 255 255 / 0.1); +} + +.dark .glass-shadow { + box-shadow: + 0 25px 50px -12px rgb(0 0 0 / 0.5), + 0 0 0 1px rgb(255 255 255 / 0.05), + inset 0 1px 0 rgb(255 255 255 / 0.05); +} + +/* ========================================================================== + CTA Card Glassmorphism Overlay (works with section backgrounds) + ========================================================================== */ + +.cta-glassmorphism { + @apply relative; + + /* Dynamic overlay opacity control */ + --glassmorphism-opacity: 0.15; + + /* Subtle overlay tint that works with any background */ + background: linear-gradient( + 135deg, + rgb(255 255 255 / var(--glassmorphism-opacity)) 0%, + rgb(255 255 255 / calc(var(--glassmorphism-opacity) * 0.5)) 50%, + rgb(255 255 255 / var(--glassmorphism-opacity)) 100% + ); + + /* Enhanced glassmorphism effects */ + backdrop-filter: blur(20px) saturate(1.2); + -webkit-backdrop-filter: blur(20px) saturate(1.2); + + /* Modern border and shadow for light mode */ + border: 1px solid rgb(255 255 255 / calc(var(--glassmorphism-opacity) + 0.1)); + box-shadow: + 0 32px 64px -12px rgb(0 0 0 / 0.25), + inset 0 1px 0 rgb(255 255 255 / calc(var(--glassmorphism-opacity) + 0.05)); +} + +.cta-glassmorphism:hover { + /* Enhanced hover state */ + background: linear-gradient( + 135deg, + rgb(255 255 255 / calc(var(--glassmorphism-opacity) + 0.05)) 0%, + rgb(255 255 255 / calc(var(--glassmorphism-opacity) * 0.7)) 50%, + rgb(255 255 255 / calc(var(--glassmorphism-opacity) + 0.05)) 100% + ); + + border: 1px solid rgb(255 255 255 / calc(var(--glassmorphism-opacity) + 0.2)); + box-shadow: + 0 40px 80px -16px rgb(0 0 0 / 0.3), + inset 0 1px 0 rgb(255 255 255 / calc(var(--glassmorphism-opacity) + 0.1)); +} + +/* Dark mode adjustments for CTA glassmorphism */ +.dark .cta-glassmorphism { + background: linear-gradient( + 135deg, + rgb(255 255 255 / calc(var(--glassmorphism-opacity) * 0.5)) 0%, + rgb(255 255 255 / calc(var(--glassmorphism-opacity) * 0.25)) 50%, + rgb(255 255 255 / calc(var(--glassmorphism-opacity) * 0.5)) 100% + ); + + border: 1px solid rgb(255 255 255 / var(--glassmorphism-opacity)); + box-shadow: + 0 32px 64px -12px rgb(0 0 0 / 0.4), + inset 0 1px 0 rgb(255 255 255 / calc(var(--glassmorphism-opacity) * 0.5)); +} + +.dark .cta-glassmorphism:hover { + background: linear-gradient( + 135deg, + rgb(255 255 255 / calc(var(--glassmorphism-opacity) * 0.75)) 0%, + rgb(255 255 255 / calc(var(--glassmorphism-opacity) * 0.4)) 50%, + rgb(255 255 255 / calc(var(--glassmorphism-opacity) * 0.75)) 100% + ); + + border: 1px solid rgb(255 255 255 / calc(var(--glassmorphism-opacity) + 0.05)); +} + +/* ========================================================================== + CTA Button Glassmorphism (nested within CTA cards) + ========================================================================== */ + +.cta-glassmorphism .group { + /* Ensure proper text contrast in light mode */ + color: var(--color-gray-900); +} + +.dark .cta-glassmorphism .group { + /* Maintain white text in dark mode */ + color: var(--color-gray-100); +} + +/* Enhanced button glassmorphism for light mode visibility */ +.cta-glassmorphism .group > div:first-child { + /* Light mode button background */ + background: rgb(255 255 255 / 0.9); + border: 1px solid rgb(0 0 0 / 0.1); + box-shadow: + 0 10px 25px -5px rgb(0 0 0 / 0.1), + 0 4px 6px -2px rgb(0 0 0 / 0.1), + inset 0 1px 0 rgb(255 255 255 / 0.3); +} + +.dark .cta-glassmorphism .group > div:first-child { + /* Dark mode button background */ + background: rgb(0 0 0 / 0.4); + border: 1px solid rgb(255 255 255 / 0.2); + box-shadow: + 0 10px 25px -5px rgb(0 0 0 / 0.3), + 0 4px 6px -2px rgb(0 0 0 / 0.2), + inset 0 1px 0 rgb(255 255 255 / 0.1); +} + +.cta-glassmorphism .group:hover > div:first-child { + background: rgb(255 255 255); + border: 1px solid rgb(0 0 0 / 0.15); + box-shadow: + 0 20px 40px -8px rgb(0 0 0 / 0.15), + 0 8px 12px -4px rgb(0 0 0 / 0.1), + inset 0 1px 0 rgb(255 255 255 / 0.4); +} + +.dark .cta-glassmorphism .group:hover > div:first-child { + background: rgb(0 0 0 / 0.6); + border: 1px solid rgb(255 255 255 / 0.3); +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/math.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/math.css new file mode 100644 index 0000000..35531b9 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/math.css @@ -0,0 +1,4 @@ +/* Prevent long equations overflowing on small screens by scrolling horizontally instead. */ +.katex-display { + overflow: auto hidden; +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/navbar.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/navbar.css new file mode 100644 index 0000000..986ddac --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/navbar.css @@ -0,0 +1,110 @@ +/* Navigation Styles */ + +.navbar { + @apply relative flex flex-wrap items-center justify-between; +} + +.navbar-brand { + /* @apply text-black dark:text-white text-xl font-semibold; */ + color: var(--hb-color-header-fg); + @apply text-xl font-semibold; +} + +.navbar-brand svg { + @apply max-h-full max-w-full h-[1em] w-auto inline-block; +} + +.navbar-brand img { + /* To shrink to line height, add: h-[1em] */ + @apply max-h-full w-auto inline-block; +} + +/* Ensure interactive controls show hand cursor */ +.theme-toggle, +[data-search-toggle], +#search-toggle, +[data-te-collapse-init], +.nav-dropdown > .nav-link[role="button"] { + @apply cursor-pointer; +} + +/* navbar toggler */ +input#nav-toggle:checked + label #show-button { + @apply hidden; +} + +input#nav-toggle:checked + label #hide-button { + @apply block; +} + +input#nav-toggle:checked ~ #nav-menu { + @apply block; +} + +#site-header.header { + background-color: var(--hb-color-header-bg); + color: var(--hb-color-header-fg); + @apply py-3 shadow; +} + +/* navbar items */ + +.navbar-nav { + @apply text-center lg:text-left; +} + +.nav-link { + /* @apply dark:text-white block p-3 font-semibold transition lg:px-2 lg:py-3; */ + color: var(--hb-color-header-fg); + @apply block p-3 font-semibold transition lg:px-2 lg:py-3; +} + +.nav-link:hover { + color: var(--color-primary-700); +} + +.dark .nav-link:hover { + color: var(--color-primary-300); +} + +.nav-dropdown { + @apply mr-0; +} + +.nav-dropdown > svg { + @apply pointer-events-none; +} + +.nav-dropdown-list { + @apply bg-white dark:bg-slate-900 z-10 min-w-[180px] rounded py-4 shadow hidden lg:invisible lg:absolute lg:block lg:opacity-0; + /* Ensure dropdown appears above content and under header */ + top: 100%; + left: 0; +} + +.nav-dropdown.active .nav-dropdown-list { + @apply block lg:visible lg:opacity-100; +} + +/* Ensure hover opens dropdown in desktop (CSS-driven) */ +@media (min-width: 1024px) { + .nav-dropdown:hover > .nav-dropdown-list { + @apply visible opacity-100; + } +} + +.nav-dropdown-item { + @apply px-4 [&:not(:last-child)]:mb-2; +} + +.dark .nav-dropdown-item:hover { + background-color: var(--color-primary-500); +} + +.nav-dropdown-link { + @apply dark:text-white dark:hover:text-white block py-1 font-semibold transition; +} + +.nav-dropdown-link:hover { + color: var(--color-primary-700); +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/notebook.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/notebook.css new file mode 100644 index 0000000..31109d2 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/notebook.css @@ -0,0 +1,150 @@ +.hb-notebook { + --hb-notebook-output-max-height: 26rem; + @apply relative isolate my-10 rounded-3xl border border-zinc-200/70 bg-white/90 p-6 shadow-xl shadow-primary-500/5 transition-shadow duration-300; + @apply dark:border-zinc-800/70 dark:bg-zinc-900/70 dark:shadow-black/30 text-zinc-800 dark:text-zinc-50; +} + +.hb-notebook::after { + content: ""; + @apply pointer-events-none absolute inset-0 rounded-3xl bg-gradient-to-r from-primary-500/5 via-transparent to-secondary-500/5 opacity-0 transition-opacity duration-300; +} + +.hb-notebook:hover::after { + @apply opacity-100; +} + +.hb-notebook--dense { + @apply p-4; +} + +.hb-notebook-header { + @apply flex flex-wrap items-start justify-between gap-4 border-b border-zinc-200/70 pb-4 dark:border-zinc-800/70; +} + +.hb-notebook-heading { + @apply space-y-1; +} + +.hb-notebook-title { + @apply text-lg font-semibold text-zinc-900 dark:text-white tracking-tight; +} + +.hb-notebook-subtitle { + @apply text-sm font-medium text-zinc-500 dark:text-zinc-400; +} + +.hb-notebook-download { + @apply inline-flex items-center gap-2 rounded-full border border-primary-500/70 px-4 py-2 text-sm font-medium text-primary-600 no-underline transition-all duration-200; + @apply hover:-translate-y-0.5 hover:bg-primary-50/60 hover:text-primary-700 dark:text-primary-300 dark:border-primary-400/60 dark:hover:bg-primary-500/10; +} + +.hb-notebook-download svg { + @apply h-4 w-4; +} + +.hb-notebook-metadata { + @apply mt-4 grid gap-3 rounded-2xl border border-dashed border-zinc-200/70 px-4 py-3 text-sm; + @apply dark:border-zinc-800/70; + grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); +} + +.hb-notebook-metadata dt { + @apply text-xs uppercase tracking-wide text-zinc-500 dark:text-zinc-400; +} + +.hb-notebook-metadata dd { + @apply font-medium text-zinc-800 dark:text-zinc-100; +} + +.hb-notebook-body { + @apply mt-6 flex flex-col gap-5; +} + +.hb-notebook-cell { + @apply rounded-2xl border border-zinc-200/70 bg-white p-4 shadow-sm shadow-zinc-200/60 transition-all duration-200; + @apply dark:border-zinc-800/60 dark:bg-zinc-900/70 dark:shadow-none; +} + +.hb-notebook-cell--markdown { + @apply bg-gradient-to-br from-white via-white to-primary-50/40 dark:from-zinc-900 dark:via-zinc-900 dark:to-primary-900/10; +} + +.hb-notebook-cell-header { + @apply mb-3 flex flex-wrap items-center gap-3; +} + +.hb-notebook-pill { + @apply inline-flex items-center rounded-full bg-zinc-100 px-3 py-1 text-xs font-semibold uppercase tracking-wide text-zinc-600; + @apply dark:bg-zinc-800 dark:text-zinc-300; +} + +.hb-notebook-tags { + @apply flex flex-wrap gap-1; +} + +.hb-notebook-tags span { + @apply inline-flex items-center rounded-full bg-primary-100/80 px-2 py-0.5 text-[11px] font-medium text-primary-700; + @apply dark:bg-primary-400/20 dark:text-primary-200; +} + +.hb-notebook-code { + @apply overflow-hidden rounded-2xl border border-zinc-900/10 bg-zinc-950/95 shadow-inner shadow-black/30; +} + +.hb-notebook-code pre { + @apply m-0 overflow-auto rounded-2xl p-5 text-sm leading-relaxed; +} + +.hb-notebook-markdown { + @apply prose-h1:text-2xl prose-h2:text-xl prose-p:leading-relaxed prose-a:text-primary-600 max-w-none; +} + +.hb-notebook-raw { + @apply rounded-xl border border-dashed border-zinc-300/80 bg-zinc-50 p-4 font-mono text-sm text-zinc-700; + @apply dark:border-zinc-700 dark:bg-zinc-900 dark:text-zinc-200 overflow-auto; +} + +.hb-notebook-outputs { + @apply mt-4 space-y-3 rounded-2xl border border-zinc-100/80 bg-zinc-50/80 p-4; + @apply dark:border-zinc-800/60 dark:bg-zinc-900/50; +} + +.hb-notebook-output { + @apply overflow-auto rounded-xl border border-transparent bg-white/90 p-3 text-sm leading-relaxed text-zinc-700; + @apply dark:bg-zinc-950/50 dark:text-zinc-100; + max-height: var(--hb-notebook-output-max-height, 26rem); +} + +.hb-notebook-output--stream { + @apply font-mono bg-zinc-900 text-zinc-100; +} + +.hb-notebook-output--error { + @apply border-red-200 bg-red-50/90 text-red-700 dark:border-red-500/30 dark:bg-red-500/10 dark:text-red-200; +} + +.hb-notebook-output--image { + @apply bg-transparent p-0 border-none; +} + +.hb-notebook-output--image img, +.hb-notebook-output--image svg { + @apply h-auto w-full rounded-xl border border-zinc-100/80 bg-white object-contain dark:border-zinc-800/60 dark:bg-zinc-900; +} + +.hb-notebook-output--markdown { + @apply bg-transparent p-0 border-none; +} + +.hb-notebook-output pre { + @apply m-0; +} + +.hb-notebook-output code { + @apply font-mono text-sm; +} + +.hb-notebook-empty { + @apply mt-4 rounded-2xl border border-dashed border-zinc-300/70 bg-zinc-50/80 px-4 py-3 text-center text-sm text-zinc-500; + @apply dark:border-zinc-700 dark:bg-zinc-900/40 dark:text-zinc-300; +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/page.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/page.css new file mode 100644 index 0000000..a1159d2 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/page.css @@ -0,0 +1,97 @@ +/* Page layout to push footer to bottom of page */ + +.page-wrapper { + /* Min height = viewport height - navbar height */ + min-height: 100vh; + display: grid; + grid-template-rows: auto 1fr auto; + grid-template-columns: 100%; +} + +.page-header, +.page-footer { + flex-shrink: 0; +} + +.page-body { + flex-grow: 1; +} + +.article-header { + position: relative; /* Required for caption positioning */ + clear: both; +} + +.article-banner { + width: 100%; + height: 260px; + object-fit: cover; + + /* @include media-breakpoint-up(lg) { */ + /* height: 310px; !* Increased height on desktop *! */ + /* } */ +} + +.featured-image-wrapper { + position: relative; + padding-left: 0; /* Override container padding. */ + padding-right: 0; /* Override container padding. */ +} + +.featured-image { + position: relative; + width: 100%; + display: block; + margin: 0 auto; +} + +.article-header-caption { + position: absolute; + bottom: 0; + right: 0; + margin: 0 auto; + padding: 2px 5px; + color: #fff; + font-size: 0.7em; + background: #000; + text-align: right; + z-index: 5; + opacity: 0.65; + border-radius: 5px 0 0; +} + +@media (min-width: 64em) { + .article-header-caption { + padding: 5px 10px; + } +} + +.article-header-caption a { + color: #fff; + text-decoration: none; +} + +#page-bg { + position: fixed; + left: 0; + right: 0; + height: 100%; + width: 100%; + z-index: -1; + display: block; +} + +.backlink { + @apply text-xs font-medium text-gray-500 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-100 contrast-more:text-gray-800 contrast-more:dark:text-gray-50; +} + +/* For ToC shortcode, Spoiler shortcode, and direct HTML Details snippets. */ +details > summary { + @apply cursor-pointer font-semibold; + + color: var(--color-primary-700); +} + +.dark details > summary { + color: var(--color-primary-300); +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/sidebar-left.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/sidebar-left.css new file mode 100644 index 0000000..7978b7f --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/sidebar-left.css @@ -0,0 +1,94 @@ +/* Match Tailwind lg (default 1024px): https://tailwindcss.com/docs/screens */ +@media (max-width: 1024px) { + .hb-sidebar-container { + @apply fixed top-0 w-full bottom-0 z-[15] pt-[calc(var(--navbar-height))] overscroll-contain; + + contain: layout style; + transition: transform 0.8s cubic-bezier(0.52, 0.16, 0.04, 1); + will-change: transform, opacity; + backface-visibility: hidden; + } +} + +.hb-sidebar-container { + @apply flex flex-col print:hidden lg:top-16 lg:shrink-0 lg:w-64 lg:self-start; + + li > div { + @apply h-0; + } + + li.open > div { + @apply h-auto pt-1; + } + + li.open > a > span > svg > path { + @apply rotate-90; + } +} + +.hb-sidebar-list { + @apply relative flex flex-col gap-1 before:absolute before:inset-y-1 before:w-px before:bg-gray-200 before:content-[""] ltr:ml-3 ltr:pl-3 ltr:before:left-0 rtl:mr-3 rtl:pr-3 rtl:before:right-0; +} + +.hb-sidebar-list::before { + background-color: var(--color-neutral-200); +} + +.dark .hb-sidebar-list::before { + background-color: var(--color-neutral-700); +} + +.hb-scrollbar { + @apply overflow-y-auto overflow-x-hidden p-4 grow; + + scrollbar-width: thin; + scrollbar-color: oklch(55.55% 0 0 / 40%) transparent; + scrollbar-gutter: stable; + + &::-webkit-scrollbar { + @apply w-3 h-3; + } + + &::-webkit-scrollbar-track { + @apply bg-transparent; + } + + &::-webkit-scrollbar-thumb { + @apply rounded-[10px]; + } + + &:hover::-webkit-scrollbar-thumb { + border: 3px solid transparent; + background-color: var(--tw-shadow-color); + background-clip: content-box; + @apply shadow-neutral-500/20 hover:shadow-neutral-500/40; + } +} + +.hb-docs-link { + @apply flex rounded px-2 py-1.5 text-sm transition-colors [word-break:break-word] cursor-pointer [-webkit-tap-highlight-color:transparent] [-webkit-touch-callout:none] gap-2 before:opacity-25 before:content-['#'] text-gray-500 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-50; +} + +.dark .hb-docs-link:hover { + background-color: color-mix(in oklch, var(--color-primary-100) 5%, transparent); +} + +.hb-sidebar-mobile-menu { + @apply [transition:background-color_0.5s_ease]; +} + +.hb-sidebar-mobile-toc { + @apply flex flex-col gap-1 relative before:absolute before:inset-y-1 before:w-px before:bg-gray-200 before:content-[""] ltr:pl-3 ltr:before:left-0 rtl:pr-3 rtl:before:right-0 ltr:ml-3 rtl:mr-3; +} + +.hb-sidebar-mobile-toc::before { + background-color: var(--color-neutral-200); +} + +.dark .hb-sidebar-mobile-toc::before { + background-color: var(--color-neutral-800); +} + +.hb-sidebar-custom-link { + @apply flex items-center justify-between gap-2 cursor-pointer rounded px-2 py-1.5 text-sm transition-colors [-webkit-tap-highlight-color:transparent] [-webkit-touch-callout:none] [word-break:break-word]; +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/steps.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/steps.css new file mode 100644 index 0000000..6d54605 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/steps.css @@ -0,0 +1,28 @@ +.hb-steps { + @apply ml-4 mb-12 pl-6 border-l border-gray-200 [counter-reset:hb_step]; + + border-left-color: var(--color-neutral-200); +} + +.dark .hb-steps { + border-left-color: var(--color-neutral-600); +} + +.hb-steps h3 { + counter-increment: hb-step; + + &::before { + @apply absolute w-[33px] h-[33px]; + @apply rounded-full border-4 border-white dark:border-slate-300; + @apply bg-gray-100 dark:bg-hb-dark; + @apply text-base font-normal text-center -indent-px; + @apply mt-[3px] ml-[-41px]; + + color: var(--color-neutral-700); + content: counter(hb-step); + } +} + +.dark .hb-steps h3::before { + color: var(--color-neutral-200); +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/task-list.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/task-list.css new file mode 100644 index 0000000..2e63b0f --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/components/task-list.css @@ -0,0 +1,30 @@ +/* HugoBlox Kit - https://hugoblox.com + * Task List Component + * License: https://github.com/HugoBlox/kit/blob/main/LICENSE.md + */ + +ul.task-list { + list-style: none; +} + +ul.task-list li input[type="checkbox"] { + margin-right: 0.5rem; +} + +ul.task-list input[type="checkbox"]:checked { + appearance: none; + width: 1em; + height: 1em; + border: none; + background: initial; + position: relative; +} + +ul.task-list input[type="checkbox"]:not(:checked) { + width: 0.9em; + height: 0.9em; +} + +ul.task-list input[type="checkbox"]:checked::after { + content: "✅"; +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/config/safelist.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/config/safelist.css new file mode 100644 index 0000000..308ca68 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/config/safelist.css @@ -0,0 +1,232 @@ +/* Safelist patterns for dynamic classes */ +/* Note: In v4, we use @source inline to ensure these are included */ +/* This ensures Tailwind generates these classes even if not found in templates */ + +/* Inline safelist for classes used in dynamic content and YAML configuration */ +/* Includes search modal Quick Actions dynamic color classes */ +@source inline("
"); + +/* Force generation of all CSS custom properties for dynamic usage in YAML front matter */ +/* Hidden utility class that forces all color variables to be generated */ +.force-all-color-vars { + /* Primary Colors */ + color: var(--color-primary-50); + color: var(--color-primary-100); + color: var(--color-primary-200); + color: var(--color-primary-300); + color: var(--color-primary-400); + color: var(--color-primary-500); + color: var(--color-primary-600); + color: var(--color-primary-700); + color: var(--color-primary-800); + color: var(--color-primary-900); + color: var(--color-primary-950); + + /* Secondary Colors */ + color: var(--color-secondary-50); + color: var(--color-secondary-100); + color: var(--color-secondary-200); + color: var(--color-secondary-300); + color: var(--color-secondary-400); + color: var(--color-secondary-500); + color: var(--color-secondary-600); + color: var(--color-secondary-700); + color: var(--color-secondary-800); + color: var(--color-secondary-900); + color: var(--color-secondary-950); + + /* Extended Color Palette for Dynamic Gradients */ + color: var(--color-indigo-50); + color: var(--color-indigo-100); + color: var(--color-indigo-200); + color: var(--color-indigo-300); + color: var(--color-indigo-400); + color: var(--color-indigo-500); + color: var(--color-indigo-600); + color: var(--color-indigo-700); + color: var(--color-indigo-800); + color: var(--color-indigo-900); + color: var(--color-indigo-950); + + color: var(--color-purple-50); + color: var(--color-purple-100); + color: var(--color-purple-200); + color: var(--color-purple-300); + color: var(--color-purple-400); + color: var(--color-purple-500); + color: var(--color-purple-600); + color: var(--color-purple-700); + color: var(--color-purple-800); + color: var(--color-purple-900); + color: var(--color-purple-950); + + color: var(--color-pink-50); + color: var(--color-pink-100); + color: var(--color-pink-200); + color: var(--color-pink-300); + color: var(--color-pink-400); + color: var(--color-pink-500); + color: var(--color-pink-600); + color: var(--color-pink-700); + color: var(--color-pink-800); + color: var(--color-pink-900); + color: var(--color-pink-950); + + color: var(--color-red-50); + color: var(--color-red-100); + color: var(--color-red-200); + color: var(--color-red-300); + color: var(--color-red-400); + color: var(--color-red-500); + color: var(--color-red-600); + color: var(--color-red-700); + color: var(--color-red-800); + color: var(--color-red-900); + color: var(--color-red-950); + + color: var(--color-orange-50); + color: var(--color-orange-100); + color: var(--color-orange-200); + color: var(--color-orange-300); + color: var(--color-orange-400); + color: var(--color-orange-500); + color: var(--color-orange-600); + color: var(--color-orange-700); + color: var(--color-orange-800); + color: var(--color-orange-900); + color: var(--color-orange-950); + + color: var(--color-amber-50); + color: var(--color-amber-100); + color: var(--color-amber-200); + color: var(--color-amber-300); + color: var(--color-amber-400); + color: var(--color-amber-500); + color: var(--color-amber-600); + color: var(--color-amber-700); + color: var(--color-amber-800); + color: var(--color-amber-900); + color: var(--color-amber-950); + + color: var(--color-yellow-50); + color: var(--color-yellow-100); + color: var(--color-yellow-200); + color: var(--color-yellow-300); + color: var(--color-yellow-400); + color: var(--color-yellow-500); + color: var(--color-yellow-600); + color: var(--color-yellow-700); + color: var(--color-yellow-800); + color: var(--color-yellow-900); + color: var(--color-yellow-950); + + color: var(--color-lime-50); + color: var(--color-lime-100); + color: var(--color-lime-200); + color: var(--color-lime-300); + color: var(--color-lime-400); + color: var(--color-lime-500); + color: var(--color-lime-600); + color: var(--color-lime-700); + color: var(--color-lime-800); + color: var(--color-lime-900); + color: var(--color-lime-950); + + color: var(--color-green-50); + color: var(--color-green-100); + color: var(--color-green-200); + color: var(--color-green-300); + color: var(--color-green-400); + color: var(--color-green-500); + color: var(--color-green-600); + color: var(--color-green-700); + color: var(--color-green-800); + color: var(--color-green-900); + color: var(--color-green-950); + + color: var(--color-emerald-50); + color: var(--color-emerald-100); + color: var(--color-emerald-200); + color: var(--color-emerald-300); + color: var(--color-emerald-400); + color: var(--color-emerald-500); + color: var(--color-emerald-600); + color: var(--color-emerald-700); + color: var(--color-emerald-800); + color: var(--color-emerald-900); + color: var(--color-emerald-950); + + color: var(--color-teal-50); + color: var(--color-teal-100); + color: var(--color-teal-200); + color: var(--color-teal-300); + color: var(--color-teal-400); + color: var(--color-teal-500); + color: var(--color-teal-600); + color: var(--color-teal-700); + color: var(--color-teal-800); + color: var(--color-teal-900); + color: var(--color-teal-950); + + color: var(--color-cyan-50); + color: var(--color-cyan-100); + color: var(--color-cyan-200); + color: var(--color-cyan-300); + color: var(--color-cyan-400); + color: var(--color-cyan-500); + color: var(--color-cyan-600); + color: var(--color-cyan-700); + color: var(--color-cyan-800); + color: var(--color-cyan-900); + color: var(--color-cyan-950); + + color: var(--color-sky-50); + color: var(--color-sky-100); + color: var(--color-sky-200); + color: var(--color-sky-300); + color: var(--color-sky-400); + color: var(--color-sky-500); + color: var(--color-sky-600); + color: var(--color-sky-700); + color: var(--color-sky-800); + color: var(--color-sky-900); + color: var(--color-sky-950); + + color: var(--color-blue-50); + color: var(--color-blue-100); + color: var(--color-blue-200); + color: var(--color-blue-300); + color: var(--color-blue-400); + color: var(--color-blue-500); + color: var(--color-blue-600); + color: var(--color-blue-700); + color: var(--color-blue-800); + color: var(--color-blue-900); + color: var(--color-blue-950); + + color: var(--color-violet-50); + color: var(--color-violet-100); + color: var(--color-violet-200); + color: var(--color-violet-300); + color: var(--color-violet-400); + color: var(--color-violet-500); + color: var(--color-violet-600); + color: var(--color-violet-700); + color: var(--color-violet-800); + color: var(--color-violet-900); + color: var(--color-violet-950); + + /* Never display this class */ + display: none !important; +} + +/* Support for dual light/dark background colors in parse_block_v2.html */ +@media (prefers-color-scheme: dark) { + .home-section-bg[style*="--dark-bg-color"] { + background-color: var(--dark-bg-color) !important; + } +} + +.dark .home-section-bg[style*="--dark-bg-color"] { + background-color: var(--dark-bg-color) !important; +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/config/tailwind.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/config/tailwind.css new file mode 100644 index 0000000..1de222b --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/config/tailwind.css @@ -0,0 +1,24 @@ +/* Tailwind CSS v4 Configuration */ +/* Content detection and plugin configuration */ + +/* Typography plugin for prose styles */ +@plugin "@tailwindcss/typography"; + +/* Content detection sources */ +/* Note: @source is a Tailwind v4 directive - linters may show warnings that can be ignored */ +/* Hugo stats file contains all detected classes from templates */ +@source "hugo_stats.json"; + +/* Custom Variants Configuration */ +/* Configure dark mode to use class strategy */ +@custom-variant dark (&:where(.dark, .dark *)); + +/* Configure hover to work on all devices (like v3 behavior) */ +@custom-variant hover (&:hover); + +/* Dark mode configuration */ +@media (prefers-color-scheme: dark) { + :root { + color-scheme: dark; + } +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/config/theme.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/config/theme.css new file mode 100644 index 0000000..d695622 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/config/theme.css @@ -0,0 +1,358 @@ +/* Tailwind CSS v4 Hugo BloxTheme Configuration */ + +/* Theme Configuration */ +@theme { + /* Custom Colors */ + --color-hb-dark: rgb(23 24 28); + + /* Standard Tailwind Color Scales - Provide variables as valid CSS colors */ + /* Gray */ + --color-gray-50: rgb(249 250 251); + --color-gray-100: rgb(243 244 246); + --color-gray-200: rgb(229 231 235); + --color-gray-300: rgb(209 213 219); + --color-gray-400: rgb(156 163 175); + --color-gray-500: rgb(107 114 128); + --color-gray-600: rgb(75 85 99); + --color-gray-700: rgb(55 65 81); + --color-gray-800: rgb(31 41 55); + --color-gray-900: rgb(17 24 39); + --color-gray-950: rgb(3 7 18); + + /* Slate */ + --color-slate-50: rgb(248 250 252); + --color-slate-100: rgb(241 245 249); + --color-slate-200: rgb(226 232 240); + --color-slate-300: rgb(203 213 225); + --color-slate-400: rgb(148 163 184); + --color-slate-500: rgb(100 116 139); + --color-slate-600: rgb(71 85 105); + --color-slate-700: rgb(51 65 85); + --color-slate-800: rgb(30 41 59); + --color-slate-900: rgb(15 23 42); + --color-slate-950: rgb(2 6 23); + + /* Zinc */ + --color-zinc-50: rgb(250 250 250); + --color-zinc-100: rgb(244 244 245); + --color-zinc-200: rgb(228 228 231); + --color-zinc-300: rgb(212 212 216); + --color-zinc-400: rgb(161 161 170); + --color-zinc-500: rgb(113 113 122); + --color-zinc-600: rgb(82 82 91); + --color-zinc-700: rgb(63 63 70); + --color-zinc-800: rgb(39 39 42); + --color-zinc-900: rgb(24 24 27); + --color-zinc-950: rgb(9 9 11); + + /* Neutral */ + --color-neutral-50: rgb(250 250 250); + --color-neutral-100: rgb(245 245 245); + --color-neutral-200: rgb(229 229 229); + --color-neutral-300: rgb(212 212 212); + --color-neutral-400: rgb(163 163 163); + --color-neutral-500: rgb(115 115 115); + --color-neutral-600: rgb(82 82 82); + --color-neutral-700: rgb(64 64 64); + --color-neutral-800: rgb(38 38 38); + --color-neutral-900: rgb(23 23 23); + --color-neutral-950: rgb(10 10 10); + + /* Stone */ + --color-stone-50: rgb(250 250 249); + --color-stone-100: rgb(245 245 244); + --color-stone-200: rgb(231 229 228); + --color-stone-300: rgb(214 211 209); + --color-stone-400: rgb(168 162 158); + --color-stone-500: rgb(120 113 108); + --color-stone-600: rgb(87 83 78); + --color-stone-700: rgb(68 64 60); + --color-stone-800: rgb(41 37 36); + --color-stone-900: rgb(28 25 23); + --color-stone-950: rgb(12 10 9); + + /* Red */ + --color-red-50: rgb(254 242 242); + --color-red-100: rgb(254 226 226); + --color-red-200: rgb(254 202 202); + --color-red-300: rgb(252 165 165); + --color-red-400: rgb(248 113 113); + --color-red-500: rgb(239 68 68); + --color-red-600: rgb(220 38 38); + --color-red-700: rgb(185 28 28); + --color-red-800: rgb(153 27 27); + --color-red-900: rgb(127 29 29); + --color-red-950: rgb(69 10 10); + + /* Orange */ + --color-orange-50: rgb(255 247 237); + --color-orange-100: rgb(255 237 213); + --color-orange-200: rgb(254 215 170); + --color-orange-300: rgb(253 186 116); + --color-orange-400: rgb(251 146 60); + --color-orange-500: rgb(249 115 22); + --color-orange-600: rgb(234 88 12); + --color-orange-700: rgb(194 65 12); + --color-orange-800: rgb(154 52 18); + --color-orange-900: rgb(124 45 18); + --color-orange-950: rgb(67 20 7); + + /* Amber */ + --color-amber-50: rgb(255 251 235); + --color-amber-100: rgb(254 243 199); + --color-amber-200: rgb(253 230 138); + --color-amber-300: rgb(252 211 77); + --color-amber-400: rgb(251 191 36); + --color-amber-500: rgb(245 158 11); + --color-amber-600: rgb(217 119 6); + --color-amber-700: rgb(180 83 9); + --color-amber-800: rgb(146 64 14); + --color-amber-900: rgb(120 53 15); + --color-amber-950: rgb(69 26 3); + + /* Yellow */ + --color-yellow-50: rgb(254 252 232); + --color-yellow-100: rgb(254 249 195); + --color-yellow-200: rgb(254 240 138); + --color-yellow-300: rgb(253 224 71); + --color-yellow-400: rgb(250 204 21); + --color-yellow-500: rgb(234 179 8); + --color-yellow-600: rgb(202 138 4); + --color-yellow-700: rgb(161 98 7); + --color-yellow-800: rgb(133 77 14); + --color-yellow-900: rgb(113 63 18); + --color-yellow-950: rgb(66 32 6); + + /* Lime */ + --color-lime-50: rgb(247 254 231); + --color-lime-100: rgb(236 252 203); + --color-lime-200: rgb(217 249 157); + --color-lime-300: rgb(190 242 100); + --color-lime-400: rgb(163 230 53); + --color-lime-500: rgb(132 204 22); + --color-lime-600: rgb(101 163 13); + --color-lime-700: rgb(77 124 15); + --color-lime-800: rgb(63 98 18); + --color-lime-900: rgb(54 83 20); + --color-lime-950: rgb(26 46 5); + + /* Green */ + --color-green-50: rgb(240 253 244); + --color-green-100: rgb(220 252 231); + --color-green-200: rgb(187 247 208); + --color-green-300: rgb(134 239 172); + --color-green-400: rgb(74 222 128); + --color-green-500: rgb(34 197 94); + --color-green-600: rgb(22 163 74); + --color-green-700: rgb(21 128 61); + --color-green-800: rgb(22 101 52); + --color-green-900: rgb(20 83 45); + --color-green-950: rgb(5 46 22); + + /* Emerald */ + --color-emerald-50: rgb(236 253 245); + --color-emerald-100: rgb(209 250 229); + --color-emerald-200: rgb(167 243 208); + --color-emerald-300: rgb(110 231 183); + --color-emerald-400: rgb(52 211 153); + --color-emerald-500: rgb(16 185 129); + --color-emerald-600: rgb(5 150 105); + --color-emerald-700: rgb(4 120 87); + --color-emerald-800: rgb(6 95 70); + --color-emerald-900: rgb(6 78 59); + --color-emerald-950: rgb(2 44 34); + + /* Teal */ + --color-teal-50: rgb(240 253 250); + --color-teal-100: rgb(204 251 241); + --color-teal-200: rgb(153 246 228); + --color-teal-300: rgb(94 234 212); + --color-teal-400: rgb(45 212 191); + --color-teal-500: rgb(20 184 166); + --color-teal-600: rgb(13 148 136); + --color-teal-700: rgb(15 118 110); + --color-teal-800: rgb(17 94 89); + --color-teal-900: rgb(19 78 74); + --color-teal-950: rgb(4 47 46); + + /* Cyan */ + --color-cyan-50: rgb(236 254 255); + --color-cyan-100: rgb(207 250 254); + --color-cyan-200: rgb(165 243 252); + --color-cyan-300: rgb(103 232 249); + --color-cyan-400: rgb(34 211 238); + --color-cyan-500: rgb(6 182 212); + --color-cyan-600: rgb(8 145 178); + --color-cyan-700: rgb(14 116 144); + --color-cyan-800: rgb(21 94 117); + --color-cyan-900: rgb(22 78 99); + --color-cyan-950: rgb(8 51 68); + + /* Sky */ + --color-sky-50: rgb(240 249 255); + --color-sky-100: rgb(224 242 254); + --color-sky-200: rgb(186 230 253); + --color-sky-300: rgb(125 211 252); + --color-sky-400: rgb(56 189 248); + --color-sky-500: rgb(14 165 233); + --color-sky-600: rgb(2 132 199); + --color-sky-700: rgb(3 105 161); + --color-sky-800: rgb(7 89 133); + --color-sky-900: rgb(12 74 110); + --color-sky-950: rgb(8 47 73); + + /* Blue */ + --color-blue-50: rgb(239 246 255); + --color-blue-100: rgb(219 234 254); + --color-blue-200: rgb(191 219 254); + --color-blue-300: rgb(147 197 253); + --color-blue-400: rgb(96 165 250); + --color-blue-500: rgb(59 130 246); + --color-blue-600: rgb(37 99 235); + --color-blue-700: rgb(29 78 216); + --color-blue-800: rgb(30 64 175); + --color-blue-900: rgb(30 58 138); + --color-blue-950: rgb(23 37 84); + + /* Indigo */ + --color-indigo-50: rgb(238 242 255); + --color-indigo-100: rgb(224 231 255); + --color-indigo-200: rgb(199 210 254); + --color-indigo-300: rgb(165 180 252); + --color-indigo-400: rgb(129 140 248); + --color-indigo-500: rgb(99 102 241); + --color-indigo-600: rgb(79 70 229); + --color-indigo-700: rgb(67 56 202); + --color-indigo-800: rgb(55 48 163); + --color-indigo-900: rgb(49 46 129); + --color-indigo-950: rgb(30 27 75); + + /* Violet */ + --color-violet-50: rgb(245 243 255); + --color-violet-100: rgb(237 233 254); + --color-violet-200: rgb(221 214 254); + --color-violet-300: rgb(196 181 253); + --color-violet-400: rgb(167 139 250); + --color-violet-500: rgb(139 92 246); + --color-violet-600: rgb(124 58 237); + --color-violet-700: rgb(109 40 217); + --color-violet-800: rgb(91 33 182); + --color-violet-900: rgb(76 29 149); + --color-violet-950: rgb(46 16 101); + + /* Purple */ + --color-purple-50: rgb(250 245 255); + --color-purple-100: rgb(243 232 255); + --color-purple-200: rgb(233 213 255); + --color-purple-300: rgb(216 180 254); + --color-purple-400: rgb(192 132 252); + --color-purple-500: rgb(168 85 247); + --color-purple-600: rgb(147 51 234); + --color-purple-700: rgb(126 34 206); + --color-purple-800: rgb(107 33 168); + --color-purple-900: rgb(88 28 135); + --color-purple-950: rgb(59 7 100); + + /* Fuchsia */ + --color-fuchsia-50: rgb(253 244 255); + --color-fuchsia-100: rgb(250 232 255); + --color-fuchsia-200: rgb(245 208 254); + --color-fuchsia-300: rgb(240 171 252); + --color-fuchsia-400: rgb(232 121 249); + --color-fuchsia-500: rgb(217 70 239); + --color-fuchsia-600: rgb(192 38 211); + --color-fuchsia-700: rgb(162 28 175); + --color-fuchsia-800: rgb(134 25 143); + --color-fuchsia-900: rgb(112 26 117); + --color-fuchsia-950: rgb(74 4 78); + + /* Pink */ + --color-pink-50: rgb(253 242 248); + --color-pink-100: rgb(252 231 243); + --color-pink-200: rgb(251 207 232); + --color-pink-300: rgb(249 168 212); + --color-pink-400: rgb(244 114 182); + --color-pink-500: rgb(236 72 153); + --color-pink-600: rgb(219 39 119); + --color-pink-700: rgb(190 24 93); + --color-pink-800: rgb(157 23 77); + --color-pink-900: rgb(131 24 67); + --color-pink-950: rgb(80 7 36); + + /* Rose */ + --color-rose-50: rgb(255 241 242); + --color-rose-100: rgb(255 228 230); + --color-rose-200: rgb(254 205 211); + --color-rose-300: rgb(253 164 175); + --color-rose-400: rgb(251 113 133); + --color-rose-500: rgb(244 63 94); + --color-rose-600: rgb(225 29 72); + --color-rose-700: rgb(190 18 60); + --color-rose-800: rgb(159 18 57); + --color-rose-900: rgb(136 19 55); + --color-rose-950: rgb(76 5 25); + + /* Themeable Colors */ + --color-primary-50: rgb(var(--hb-primary-50-rgb, 239 246 255)); + --color-primary-100: rgb(var(--hb-primary-100-rgb, 219 234 254)); + --color-primary-200: rgb(var(--hb-primary-200-rgb, 191 219 254)); + --color-primary-300: rgb(var(--hb-primary-300-rgb, 147 197 253)); + --color-primary-400: rgb(var(--hb-primary-400-rgb, 96 165 250)); + --color-primary-500: rgb(var(--hb-primary-500-rgb, 59 130 246)); + --color-primary-600: rgb(var(--hb-primary-600-rgb, 37 99 235)); + --color-primary-700: rgb(var(--hb-primary-700-rgb, 29 78 216)); + --color-primary-800: rgb(var(--hb-primary-800-rgb, 30 64 175)); + --color-primary-900: rgb(var(--hb-primary-900-rgb, 30 58 138)); + --color-primary-950: rgb(var(--hb-primary-950-rgb, 23 37 84)); + + /* Semantic UI Colors - Defined in theme_generator.html */ + /* Do not redeclare them here to avoid circular references */ + + --color-secondary-50: rgb(var(--hb-secondary-50-rgb, 236 254 255)); + --color-secondary-100: rgb(var(--hb-secondary-100-rgb, 207 250 254)); + --color-secondary-200: rgb(var(--hb-secondary-200-rgb, 165 243 252)); + --color-secondary-300: rgb(var(--hb-secondary-300-rgb, 103 232 249)); + --color-secondary-400: rgb(var(--hb-secondary-400-rgb, 34 211 238)); + --color-secondary-500: rgb(var(--hb-secondary-500-rgb, 6 182 212)); + --color-secondary-600: rgb(var(--hb-secondary-600-rgb, 8 145 178)); + --color-secondary-700: rgb(var(--hb-secondary-700-rgb, 14 116 144)); + --color-secondary-800: rgb(var(--hb-secondary-800-rgb, 21 94 117)); + --color-secondary-900: rgb(var(--hb-secondary-900-rgb, 22 78 99)); + --color-secondary-950: rgb(var(--hb-secondary-950-rgb, 8 51 68)); + + /* Note: Providing these palettes in @theme ensures theme-pack mappings like var(--color-rose-600) always resolve */ + + /* Font families */ + --hb-font-family-sans: inter var, ui-sans-serif, system-ui, sans-serif, apple color emoji, segoe ui emoji, segoe ui symbol, noto color emoji; + --hb-font-heading: var(--hb-font-family-sans); + --hb-font-body: var(--hb-font-family-sans); + --hb-font-code: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --hb-font-nav: var(--hb-font-heading); + + /* Font weights */ + --hb-font-weight-heading: 700; + --hb-font-weight-body: 400; + --hb-font-weight-body-bold: 600; + + /* Line heights */ + --hb-font-leading-heading: 1.2; + --hb-font-leading-body: 1.6; + --hb-font-leading-code: 1.5; + + /* Letter spacing */ + --hb-font-tracking-heading: -0.02em; + --hb-font-tracking-body: 0; + --hb-font-tracking-caps: 0.05em; + + /* Font sizes */ + --font-size-xs: 0.75rem; + --font-size-sm: 0.875rem; + --font-size-base: 1rem; + --font-size-lg: 1.125rem; + --font-size-xl: 1.25rem; + --font-size-2xl: 1.5rem; + --font-size-3xl: 1.875rem; + --font-size-4xl: 2.25rem; + --font-size-5xl: 3rem; + --font-size-6xl: 4rem; +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/framework/base.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/framework/base.css new file mode 100644 index 0000000..fc74aa1 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/framework/base.css @@ -0,0 +1,127 @@ +/* Base styles for better text rendering */ +@layer base { + html { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizelegibility; + /* Apply the runtime font vars injected by Hugo's typography partial */ + font-family: var(--hb-font-body); + } + + body { + font-family: var(--hb-font-body); + font-weight: var(--hb-font-weight-body, 400); + line-height: var(--hb-font-leading-body, 1.6); + letter-spacing: var(--hb-font-tracking-body, 0); + } + + h1, + h2, + h3, + h4, + h5, + h6 { + font-family: var(--hb-font-heading); + font-weight: var(--hb-font-weight-heading, 700); + line-height: var(--hb-font-leading-heading, 1.2); + letter-spacing: var(--hb-font-tracking-heading, -0.02em); + } + + code, + pre, + kbd, + samp { + font-family: var(--hb-font-code); + } +} + +/* Gradient Mesh Animations */ +@keyframes float { + 0%, + 100% { + transform: translateY(0) translateX(0); + } + + 25% { + transform: translateY(-20px) translateX(10px); + } + + 50% { + transform: translateY(-10px) translateX(-10px); + } + + 75% { + transform: translateY(-30px) translateX(5px); + } +} + +@keyframes rotate-slow { + from { + transform: rotate(0deg); + } + + to { + transform: rotate(360deg); + } +} + +.animate-float { + animation: float 8s ease-in-out infinite; +} + +.animate-rotate-slow { + animation: rotate-slow 20s linear infinite; +} + +/* Custom utilities and components */ +@utility task-list { + list-style: none; + padding-left: 1.5rem; +} + +/* Custom typography styles - the plugin handles the base styles */ +/* Additional customization for prose elements */ +@layer components { + .prose a { + text-decoration: underline; + text-decoration-color: var(--color-primary-300); + font-weight: var(--hb-font-weight-body-bold, 600); + } + + .prose a:hover { + color: var(--color-primary-600); + text-decoration: none; + border-radius: 0.09rem; + } + + .prose mark { + color: var(--color-neutral-900); + background-color: var(--color-primary-200); + padding: 0.1rem 0.2rem; + border-radius: 0.25rem; + } + + .dark .prose-invert a { + text-decoration-color: var(--color-neutral-500); + } + + .dark .prose-invert a:hover { + color: var(--color-primary-300); + } + + .dark .prose-invert mark { + background-color: var(--color-primary-400); + color: black; + } + + /* Inline Code Styling */ + .prose code:not(:where(pre *)) { + @apply rounded-md bg-neutral-100 px-1.5 py-0.5 text-[0.875em] font-normal text-primary-700; + @apply dark:bg-neutral-700/50 dark:text-primary-300; + } + + .prose code:not(:where(pre *))::before, + .prose code:not(:where(pre *))::after { + content: none; + } +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/framework/components.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/framework/components.css new file mode 100644 index 0000000..ec25cb1 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/framework/components.css @@ -0,0 +1,132 @@ +/* Hugo Blox Framework Custom Classes */ +@layer components { + /* Section styles for Hugo Blox blocks */ + .hbb-section { + padding-top: 6rem; + padding-bottom: 6rem; + } + + .section-subheading { + font-size: 1.25rem; + font-weight: var(--hb-font-weight-heading, 700); + } + + /* Home section background styles */ + .home-section-bg { + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; + z-index: -1; + } + + .home-section-bg.bg-image { + background-position: center; + background-repeat: no-repeat; + background-size: cover; + } + + /* 2025 Glassmorphism texture support - disable conflicting defaults */ + .home-section-bg.bg-image[style*="background-size"][style*="background-repeat"] { + /* biome-ignore lint/complexity/noImportantStyles: Required to override inline background-size for glass textures */ + background-size: revert !important; + /* biome-ignore lint/complexity/noImportantStyles: Required to override inline background-repeat for glass textures */ + background-repeat: revert !important; + /* biome-ignore lint/complexity/noImportantStyles: Required to override inline background-position for glass textures */ + background-position: revert !important; + } + + /* Specific glassmorphism texture class override */ + .blox-cta-card .home-section-bg.bg-image { + background-size: revert; + background-repeat: revert; + background-position: revert; + } + + /* Video background */ + .bg-video { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + object-fit: cover; + object-position: center center; + opacity: 1; + } + + /* Flip video horizontally */ + .bg-video.flip { + transform: scaleX(-1); + } + + /* Container styles */ + .universal-wrapper { + margin: 0 auto; + padding-right: 1rem; + padding-left: 1rem; + width: 100%; + } + + @media (min-width: 1200px) { + .universal-wrapper { + max-width: 1200px; + } + } + + .article-container { + max-width: 760px; + margin: 0 auto; + } + + /* Button toolbar */ + .btn-toolbar { + display: flex; + flex-wrap: wrap; + justify-content: center; + gap: 0.5rem; + } + + /* Documentation specific */ + .docs-article-container { + max-width: 760px; + } + + /* Powered-by footer styles */ + .powered-by { + font-size: 0.75rem; + } + + .powered-by a { + color: inherit; + text-decoration: none; + } + + .powered-by a:hover { + text-decoration: underline; + } + + /* Parallax effect */ + .parallax { + background-attachment: fixed; + background-position: center; + background-repeat: no-repeat; + background-size: cover; + position: relative; + } + + /* When parallax is used with home-section-bg, preserve absolute positioning */ + .home-section-bg.parallax { + position: absolute; + } + + /* Section color schemes - for backward compatibility */ + section.light { + background-color: transparent; + } + + section.dark { + background-color: transparent; + } +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/hb-search.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/hb-search.css new file mode 100644 index 0000000..a35a349 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/hb-search.css @@ -0,0 +1,86 @@ +/* Hugo Blox Search - Custom Pagefind Implementation */ + +/* Animations */ +@keyframes spin { + to { + transform: rotate(360deg); + } +} + +.animate-spin { + animation: spin 1s linear infinite; +} + +/* Search result highlights */ +.search-result mark { + background-color: rgb(254 240 138); + color: rgb(17 24 39); + font-weight: var(--hb-font-weight-body-bold, 600); + padding: 0.05rem 0.2rem; + border-radius: 0.125rem; +} + +.dark .search-result mark { + background-color: rgb(133 77 14); + color: rgb(254 240 138); +} + +/* Result hover state */ +.search-result:hover mark { + background-color: rgb(253 224 71); +} + +.dark .search-result:hover mark { + background-color: rgb(161 98 7); +} + +/* Smooth transitions */ +.search-modal-enter { + animation: slide-in-up 0.2s ease-out; +} + +@keyframes slide-in-up { + from { + opacity: 0; + transform: translateY(1rem) scale(0.95); + } + + to { + opacity: 1; + transform: translateY(0) scale(1); + } +} + +/* Loading skeleton */ +.search-skeleton { + background: linear-gradient(90deg, rgb(229 231 235) 25%, rgb(243 244 246) 50%, rgb(229 231 235) 75%); + background-size: 200% 100%; + animation: shimmer 1.5s infinite; +} + +.dark .search-skeleton { + background: linear-gradient(90deg, rgb(55 65 81) 25%, rgb(75 85 99) 50%, rgb(55 65 81) 75%); + background-size: 200% 100%; +} + +@keyframes shimmer { + 0% { + background-position: 200% 0; + } + + 100% { + background-position: -200% 0; + } +} + +/* Keyboard navigation highlight - handled by Alpine :class binding */ +/* Smooth transition for selection state */ +.search-result { + transition: all 0.15s ease; +} + +/* Additional hover effects for keyboard-selected items */ +.search-result:focus-visible { + outline: 2px solid rgb(59 130 246); + outline-offset: -2px; +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/layout-utilities.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/layout-utilities.css new file mode 100644 index 0000000..e6f0f6d --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/layout-utilities.css @@ -0,0 +1,80 @@ +/* + Hugo Blox Layout Utilities + + Provides CSS utilities that use the configurable layout tokens: + - --hb-radius: Border radius token + - --hb-spacing-base: Base spacing unit + - --hb-spacing-section: Section padding + - --hb-font-size-base: Base font size +*/ + +/* Border radius utility - use instead of hardcoded rounded-* classes */ +.hb-rounded { + border-radius: var(--hb-radius, 0.5rem); +} + +.hb-rounded-sm { + border-radius: calc(var(--hb-radius, 0.5rem) * 0.5); +} + +.hb-rounded-lg { + border-radius: calc(var(--hb-radius, 0.5rem) * 1.5); +} + +.hb-rounded-xl { + border-radius: calc(var(--hb-radius, 0.5rem) * 2); +} + +/* Section spacing */ +.hb-section { + padding-top: var(--hb-spacing-section, 4rem); + padding-bottom: var(--hb-spacing-section, 4rem); +} + +.hb-section-sm { + padding-top: calc(var(--hb-spacing-section, 4rem) * 0.5); + padding-bottom: calc(var(--hb-spacing-section, 4rem) * 0.5); +} + +/* Component spacing */ +.hb-gap { + gap: var(--hb-spacing-base, 1rem); +} + +.hb-gap-sm { + gap: calc(var(--hb-spacing-base, 1rem) * 0.5); +} + +.hb-gap-lg { + gap: calc(var(--hb-spacing-base, 1rem) * 1.5); +} + +/* Padding utilities */ +.hb-p { + padding: var(--hb-spacing-base, 1rem); +} + +.hb-px { + padding-left: var(--hb-spacing-base, 1rem); + padding-right: var(--hb-spacing-base, 1rem); +} + +.hb-py { + padding-top: var(--hb-spacing-base, 1rem); + padding-bottom: var(--hb-spacing-base, 1rem); +} + +/* Margin utilities */ +.hb-m { + margin: var(--hb-spacing-base, 1rem); +} + +.hb-mx { + margin-left: var(--hb-spacing-base, 1rem); + margin-right: var(--hb-spacing-base, 1rem); +} + +.hb-my { + margin-top: var(--hb-spacing-base, 1rem); + margin-bottom: var(--hb-spacing-base, 1rem); +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/libs/chroma/dark.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/libs/chroma/dark.css new file mode 100644 index 0000000..b157585 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/libs/chroma/dark.css @@ -0,0 +1,502 @@ +/* Dracula dark theme */ +.dark .highlight { + /* Background */ /*.bg { color: #f8f8f2; background-color: #282a36 }*/ + /* PreWrapper */ /*.chroma { color: #f8f8f2; background-color: #282a36; }*/ + + /* Other */ + + .chroma .x { + } + + /* Error */ + + .chroma .err { + } + + /* CodeLine */ + + .chroma .cl { + } + + /* LineTableTD */ + + .chroma .lntd { + vertical-align: top; + padding: 0; + margin: 0; + border: 0; + } + + /* LineTable */ + + .chroma .lntable { + border-spacing: 0; + padding: 0; + margin: 0; + border: 0; + } + + /* LineHighlight */ + + .chroma .hl { + background-color: #ffc; + } + + /* LineNumbersTable */ + + .chroma .lnt { + white-space: pre; + user-select: none; + margin-right: 0.4em; + padding: 0 0.4em 0 0.4em; + color: #7f7f7f; + } + + /* LineNumbers */ + + .chroma .ln { + white-space: pre; + user-select: none; + margin-right: 0.4em; + padding: 0 0.4em 0 0.4em; + color: #7f7f7f; + } + + /* Line */ + + .chroma .line { + display: flex; + } + + /* Keyword */ + + .chroma .k { + color: #ff79c6; + } + + /* KeywordConstant */ + + .chroma .kc { + color: #ff79c6; + } + + /* KeywordDeclaration */ + + .chroma .kd { + color: #8be9fd; + font-style: italic; + } + + /* KeywordNamespace */ + + .chroma .kn { + color: #ff79c6; + } + + /* KeywordPseudo */ + + .chroma .kp { + color: #ff79c6; + } + + /* KeywordReserved */ + + .chroma .kr { + color: #ff79c6; + } + + /* KeywordType */ + + .chroma .kt { + color: #8be9fd; + } + + /* Name */ + + .chroma .n { + } + + /* NameAttribute */ + + .chroma .na { + color: #50fa7b; + } + + /* NameBuiltin */ + + .chroma .nb { + color: #8be9fd; + font-style: italic; + } + + /* NameBuiltinPseudo */ + + .chroma .bp { + } + + /* NameClass */ + + .chroma .nc { + color: #50fa7b; + } + + /* NameConstant */ + + .chroma .no { + } + + /* NameDecorator */ + + .chroma .nd { + } + + /* NameEntity */ + + .chroma .ni { + } + + /* NameException */ + + .chroma .ne { + } + + /* NameFunction */ + + .chroma .nf { + color: #50fa7b; + } + + /* NameFunctionMagic */ + + .chroma .fm { + } + + /* NameLabel */ + + .chroma .nl { + color: #8be9fd; + font-style: italic; + } + + /* NameNamespace */ + + .chroma .nn { + } + + /* NameOther */ + + .chroma .nx { + } + + /* NameProperty */ + + .chroma .py { + } + + /* NameTag */ + + .chroma .nt { + color: #ff79c6; + } + + /* NameVariable */ + + .chroma .nv { + color: #8be9fd; + font-style: italic; + } + + /* NameVariableClass */ + + .chroma .vc { + color: #8be9fd; + font-style: italic; + } + + /* NameVariableGlobal */ + + .chroma .vg { + color: #8be9fd; + font-style: italic; + } + + /* NameVariableInstance */ + + .chroma .vi { + color: #8be9fd; + font-style: italic; + } + + /* NameVariableMagic */ + + .chroma .vm { + } + + /* Literal */ + + .chroma .l { + } + + /* LiteralDate */ + + .chroma .ld { + } + + /* LiteralString */ + + .chroma .s { + color: #f1fa8c; + } + + /* LiteralStringAffix */ + + .chroma .sa { + color: #f1fa8c; + } + + /* LiteralStringBacktick */ + + .chroma .sb { + color: #f1fa8c; + } + + /* LiteralStringChar */ + + .chroma .sc { + color: #f1fa8c; + } + + /* LiteralStringDelimiter */ + + .chroma .dl { + color: #f1fa8c; + } + + /* LiteralStringDoc */ + + .chroma .sd { + color: #f1fa8c; + } + + /* LiteralStringDouble */ + + .chroma .s2 { + color: #f1fa8c; + } + + /* LiteralStringEscape */ + + .chroma .se { + color: #f1fa8c; + } + + /* LiteralStringHeredoc */ + + .chroma .sh { + color: #f1fa8c; + } + + /* LiteralStringInterpol */ + + .chroma .si { + color: #f1fa8c; + } + + /* LiteralStringOther */ + + .chroma .sx { + color: #f1fa8c; + } + + /* LiteralStringRegex */ + + .chroma .sr { + color: #f1fa8c; + } + + /* LiteralStringSingle */ + + .chroma .s1 { + color: #f1fa8c; + } + + /* LiteralStringSymbol */ + + .chroma .ss { + color: #f1fa8c; + } + + /* LiteralNumber */ + + .chroma .m { + color: #bd93f9; + } + + /* LiteralNumberBin */ + + .chroma .mb { + color: #bd93f9; + } + + /* LiteralNumberFloat */ + + .chroma .mf { + color: #bd93f9; + } + + /* LiteralNumberHex */ + + .chroma .mh { + color: #bd93f9; + } + + /* LiteralNumberInteger */ + + .chroma .mi { + color: #bd93f9; + } + + /* LiteralNumberIntegerLong */ + + .chroma .il { + color: #bd93f9; + } + + /* LiteralNumberOct */ + + .chroma .mo { + color: #bd93f9; + } + + /* Operator */ + + .chroma .o { + color: #ff79c6; + } + + /* OperatorWord */ + + .chroma .ow { + color: #ff79c6; + } + + /* Punctuation */ + + .chroma .p { + } + + /* Comment */ + + .chroma .c { + color: #6272a4; + } + + /* CommentHashbang */ + + .chroma .ch { + color: #6272a4; + } + + /* CommentMultiline */ + + .chroma .cm { + color: #6272a4; + } + + /* CommentSingle */ + + .chroma .c1 { + color: #6272a4; + } + + /* CommentSpecial */ + + .chroma .cs { + color: #6272a4; + } + + /* CommentPreproc */ + + .chroma .cp { + color: #ff79c6; + } + + /* CommentPreprocFile */ + + .chroma .cpf { + color: #ff79c6; + } + + /* Generic */ + + .chroma .g { + } + + /* GenericDeleted */ + + .chroma .gd { + color: #f55; + } + + /* GenericEmph */ + + .chroma .ge { + text-decoration: underline; + } + + /* GenericError */ + + .chroma .gr { + } + + /* GenericHeading */ + + .chroma .gh { + font-weight: bold; + } + + /* GenericInserted */ + + .chroma .gi { + color: #50fa7b; + font-weight: bold; + } + + /* GenericOutput */ + + .chroma .go { + color: #44475a; + } + + /* GenericPrompt */ + + .chroma .gp { + } + + /* GenericStrong */ + + .chroma .gs { + } + + /* GenericSubheading */ + + .chroma .gu { + font-weight: bold; + } + + /* GenericTraceback */ + + .chroma .gt { + } + + /* GenericUnderline */ + + .chroma .gl { + text-decoration: underline; + } + + /* TextWhitespace */ + + .chroma .w { + } +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/libs/chroma/light.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/libs/chroma/light.css new file mode 100644 index 0000000..98607fa --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/libs/chroma/light.css @@ -0,0 +1,534 @@ +/* Github light theme */ +html:not(.dark) .highlight { + /* Background */ /*.bg { background-color: #fff }*/ + /* PreWrapper */ /*.chroma { background-color: #fff; }*/ + + /* Other */ + + .chroma .x { + } + + /* Error */ + + .chroma .err { + color: #a61717; + background-color: #e3d2d2; + } + + /* CodeLine */ + + .chroma .cl { + } + + /* LineTableTD */ + + .chroma .lntd { + vertical-align: top; + padding: 0; + margin: 0; + border: 0; + } + + /* LineTable */ + + .chroma .lntable { + border-spacing: 0; + padding: 0; + margin: 0; + border: 0; + } + + /* LineHighlight */ + + .chroma .hl { + background-color: #ffc; + } + + /* LineNumbersTable */ + + .chroma .lnt { + white-space: pre; + user-select: none; + margin-right: 0.4em; + padding: 0 0.4em; + color: #7f7f7f; + } + + /* LineNumbers */ + + .chroma .ln { + white-space: pre; + user-select: none; + margin-right: 0.4em; + padding: 0 0.4em; + color: #7f7f7f; + } + + /* Line */ + + .chroma .line { + display: flex; + } + + /* Keyword */ + + .chroma .k { + color: #000; + font-weight: bold; + } + + /* KeywordConstant */ + + .chroma .kc { + color: #000; + font-weight: bold; + } + + /* KeywordDeclaration */ + + .chroma .kd { + color: #000; + font-weight: bold; + } + + /* KeywordNamespace */ + + .chroma .kn { + color: #000; + font-weight: bold; + } + + /* KeywordPseudo */ + + .chroma .kp { + color: #000; + font-weight: bold; + } + + /* KeywordReserved */ + + .chroma .kr { + color: #000; + font-weight: bold; + } + + /* KeywordType */ + + .chroma .kt { + color: #458; + font-weight: bold; + } + + /* Name */ + + .chroma .n { + } + + /* NameAttribute */ + + .chroma .na { + color: #008080; + } + + /* NameBuiltin */ + + .chroma .nb { + color: #0086b3; + } + + /* NameBuiltinPseudo */ + + .chroma .bp { + color: #999; + } + + /* NameClass */ + + .chroma .nc { + color: #458; + font-weight: bold; + } + + /* NameConstant */ + + .chroma .no { + color: #008080; + } + + /* NameDecorator */ + + .chroma .nd { + color: #3c5d5d; + font-weight: bold; + } + + /* NameEntity */ + + .chroma .ni { + color: #800080; + } + + /* NameException */ + + .chroma .ne { + color: #900; + font-weight: bold; + } + + /* NameFunction */ + + .chroma .nf { + color: #900; + font-weight: bold; + } + + /* NameFunctionMagic */ + + .chroma .fm { + } + + /* NameLabel */ + + .chroma .nl { + color: #900; + font-weight: bold; + } + + /* NameNamespace */ + + .chroma .nn { + color: #555; + } + + /* NameOther */ + + .chroma .nx { + } + + /* NameProperty */ + + .chroma .py { + } + + /* NameTag */ + + .chroma .nt { + color: #000080; + } + + /* NameVariable */ + + .chroma .nv { + color: #008080; + } + + /* NameVariableClass */ + + .chroma .vc { + color: #008080; + } + + /* NameVariableGlobal */ + + .chroma .vg { + color: #008080; + } + + /* NameVariableInstance */ + + .chroma .vi { + color: #008080; + } + + /* NameVariableMagic */ + + .chroma .vm { + } + + /* Literal */ + + .chroma .l { + } + + /* LiteralDate */ + + .chroma .ld { + } + + /* LiteralString */ + + .chroma .s { + color: #d14; + } + + /* LiteralStringAffix */ + + .chroma .sa { + color: #d14; + } + + /* LiteralStringBacktick */ + + .chroma .sb { + color: #d14; + } + + /* LiteralStringChar */ + + .chroma .sc { + color: #d14; + } + + /* LiteralStringDelimiter */ + + .chroma .dl { + color: #d14; + } + + /* LiteralStringDoc */ + + .chroma .sd { + color: #d14; + } + + /* LiteralStringDouble */ + + .chroma .s2 { + color: #d14; + } + + /* LiteralStringEscape */ + + .chroma .se { + color: #d14; + } + + /* LiteralStringHeredoc */ + + .chroma .sh { + color: #d14; + } + + /* LiteralStringInterpol */ + + .chroma .si { + color: #d14; + } + + /* LiteralStringOther */ + + .chroma .sx { + color: #d14; + } + + /* LiteralStringRegex */ + + .chroma .sr { + color: #009926; + } + + /* LiteralStringSingle */ + + .chroma .s1 { + color: #d14; + } + + /* LiteralStringSymbol */ + + .chroma .ss { + color: #990073; + } + + /* LiteralNumber */ + + .chroma .m { + color: #099; + } + + /* LiteralNumberBin */ + + .chroma .mb { + color: #099; + } + + /* LiteralNumberFloat */ + + .chroma .mf { + color: #099; + } + + /* LiteralNumberHex */ + + .chroma .mh { + color: #099; + } + + /* LiteralNumberInteger */ + + .chroma .mi { + color: #099; + } + + /* LiteralNumberIntegerLong */ + + .chroma .il { + color: #099; + } + + /* LiteralNumberOct */ + + .chroma .mo { + color: #099; + } + + /* Operator */ + + .chroma .o { + color: #000; + font-weight: bold; + } + + /* OperatorWord */ + + .chroma .ow { + color: #000; + font-weight: bold; + } + + /* Punctuation */ + + .chroma .p { + } + + /* Comment */ + + .chroma .c { + color: #998; + font-style: italic; + } + + /* CommentHashbang */ + + .chroma .ch { + color: #998; + font-style: italic; + } + + /* CommentMultiline */ + + .chroma .cm { + color: #998; + font-style: italic; + } + + /* CommentSingle */ + + .chroma .c1 { + color: #998; + font-style: italic; + } + + /* CommentSpecial */ + + .chroma .cs { + color: #999; + font-weight: bold; + font-style: italic; + } + + /* CommentPreproc */ + + .chroma .cp { + color: #999; + font-weight: bold; + font-style: italic; + } + + /* CommentPreprocFile */ + + .chroma .cpf { + color: #999; + font-weight: bold; + font-style: italic; + } + + /* Generic */ + + .chroma .g { + } + + /* GenericDeleted */ + + .chroma .gd { + color: #000; + background-color: #fdd; + } + + /* GenericEmph */ + + .chroma .ge { + color: #000; + font-style: italic; + } + + /* GenericError */ + + .chroma .gr { + color: #a00; + } + + /* GenericHeading */ + + .chroma .gh { + color: #999; + } + + /* GenericInserted */ + + .chroma .gi { + color: #000; + background-color: #dfd; + } + + /* GenericOutput */ + + .chroma .go { + color: #888; + } + + /* GenericPrompt */ + + .chroma .gp { + color: #555; + } + + /* GenericStrong */ + + .chroma .gs { + font-weight: bold; + } + + /* GenericSubheading */ + + .chroma .gu { + color: #aaa; + } + + /* GenericTraceback */ + + .chroma .gt { + color: #a00; + } + + /* GenericUnderline */ + + .chroma .gl { + text-decoration: underline; + } + + /* TextWhitespace */ + + .chroma .w { + color: #bbb; + } +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/main.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/main.css new file mode 100644 index 0000000..503a7d9 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/main.css @@ -0,0 +1,50 @@ +/* + Hugo Blox Tailwind CSS v4 - Main Entry Point + + This file orchestrates all CSS imports in the correct order: + 1. Tailwind base with configuration + 2. Theme and color definitions + 3. Base styles and utilities + 4. Hugo Blox framework components + 5. Hugo Blox module components + 6. Safelist for dynamic classes +*/ + +/* Tailwind CSS v4 Base */ +@import "tailwindcss"; + +/* Dynamic sources are injected by the css.html partial */ +/* This handles both monorepo dev and end-user environments */ + +/* Configuration */ +@import "config/tailwind.css"; +@import "config/theme.css"; + +/* Base styles and utilities */ +@import "framework/base.css"; + +/* Hugo Blox theme system (color utilities) */ +@import "color-utilities.css"; + +/* Hugo Blox layout utilities (radius, spacing tokens) */ +@import "layout-utilities.css"; + +/* Hugo Blox framework components */ +@import "framework/components.css"; + +/* Hugo Blox module components */ +@import "components/all.css"; +@import "views/all.css"; + +/* Block-specific CSS is auto-discovered from co-located style.css files */ +/* See css.html partial for the discovery mechanism */ +@import "chroma.css"; + +/* Hugo Blox Search */ +@import "hb-search.css"; + +/* Hugo Blox Animations (typewriter, scroll reveals) */ +@import "animations.css"; + +/* Safelist for dynamic classes */ +@import "config/safelist.css"; diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/amber.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/amber.css new file mode 100644 index 0000000..56406ea --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/amber.css @@ -0,0 +1,27 @@ +/* Hugo Blox color theme: AMBER */ +:root { + /* Amber Primary Palette */ + --hb-primary-50-rgb: 255 251 235; + --hb-primary-100-rgb: 254 243 199; + --hb-primary-200-rgb: 253 230 138; + --hb-primary-300-rgb: 252 211 77; + --hb-primary-400-rgb: 251 191 36; + --hb-primary-500-rgb: 245 158 11; + --hb-primary-600-rgb: 217 119 6; + --hb-primary-700-rgb: 180 83 9; + --hb-primary-800-rgb: 146 64 14; + --hb-primary-900-rgb: 120 53 15; + --hb-primary-950-rgb: 69 26 3; + /* Yellow Secondary Palette */ + --hb-secondary-50-rgb: 254 252 232; + --hb-secondary-100-rgb: 254 249 195; + --hb-secondary-200-rgb: 254 240 138; + --hb-secondary-300-rgb: 253 224 71; + --hb-secondary-400-rgb: 250 204 21; + --hb-secondary-500-rgb: 234 179 8; + --hb-secondary-600-rgb: 202 138 4; + --hb-secondary-700-rgb: 161 98 7; + --hb-secondary-800-rgb: 133 77 14; + --hb-secondary-900-rgb: 113 63 18; + --hb-secondary-950-rgb: 66 32 6; +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/blue.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/blue.css new file mode 100644 index 0000000..c502f5a --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/blue.css @@ -0,0 +1,27 @@ +/* Hugo Blox color theme: BLUE */ +:root { + /* TW Blue Palette */ + --hb-primary-50-rgb: 239 246 255; + --hb-primary-100-rgb: 219 234 254; + --hb-primary-200-rgb: 191 219 254; + --hb-primary-300-rgb: 147 197 253; + --hb-primary-400-rgb: 96 165 250; + --hb-primary-500-rgb: 59 130 246; + --hb-primary-600-rgb: 37 99 235; + --hb-primary-700-rgb: 29 78 216; + --hb-primary-800-rgb: 30 64 175; + --hb-primary-900-rgb: 30 58 138; + --hb-primary-950-rgb: 23 37 84; + /* TW Cyan Palette */ + --hb-secondary-50-rgb: 236 254 255; + --hb-secondary-100-rgb: 207 250 254; + --hb-secondary-200-rgb: 165 243 252; + --hb-secondary-300-rgb: 103 232 249; + --hb-secondary-400-rgb: 34 211 238; + --hb-secondary-500-rgb: 6 182 212; + --hb-secondary-600-rgb: 8 145 178; + --hb-secondary-700-rgb: 14 116 144; + --hb-secondary-800-rgb: 21 94 117; + --hb-secondary-900-rgb: 22 78 99; + --hb-secondary-950-rgb: 8 51 68; +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/cyan.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/cyan.css new file mode 100644 index 0000000..56eaf1a --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/cyan.css @@ -0,0 +1,27 @@ +/* Hugo Blox color theme: CYAN */ +:root { + /* Cyan Primary Palette */ + --hb-primary-50-rgb: 236 254 255; + --hb-primary-100-rgb: 207 250 254; + --hb-primary-200-rgb: 165 243 252; + --hb-primary-300-rgb: 103 232 249; + --hb-primary-400-rgb: 34 211 238; + --hb-primary-500-rgb: 6 182 212; + --hb-primary-600-rgb: 8 145 178; + --hb-primary-700-rgb: 14 116 144; + --hb-primary-800-rgb: 21 94 117; + --hb-primary-900-rgb: 22 78 99; + --hb-primary-950-rgb: 8 51 68; + /* Sky Secondary Palette */ + --hb-secondary-50-rgb: 240 249 255; + --hb-secondary-100-rgb: 224 242 254; + --hb-secondary-200-rgb: 186 230 253; + --hb-secondary-300-rgb: 125 211 252; + --hb-secondary-400-rgb: 56 189 248; + --hb-secondary-500-rgb: 14 165 233; + --hb-secondary-600-rgb: 2 132 199; + --hb-secondary-700-rgb: 3 105 161; + --hb-secondary-800-rgb: 7 89 133; + --hb-secondary-900-rgb: 12 74 110; + --hb-secondary-950-rgb: 8 47 73; +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/emerald.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/emerald.css new file mode 100644 index 0000000..4b171bd --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/emerald.css @@ -0,0 +1,27 @@ +/* Hugo Blox color theme: EMERALD */ +:root { + /* Emerald Primary Palette */ + --hb-primary-50-rgb: 236 253 245; + --hb-primary-100-rgb: 209 250 229; + --hb-primary-200-rgb: 167 243 208; + --hb-primary-300-rgb: 110 231 183; + --hb-primary-400-rgb: 52 211 153; + --hb-primary-500-rgb: 16 185 129; + --hb-primary-600-rgb: 5 150 105; + --hb-primary-700-rgb: 4 120 87; + --hb-primary-800-rgb: 6 95 70; + --hb-primary-900-rgb: 6 78 59; + --hb-primary-950-rgb: 2 44 34; + /* Green Secondary Palette */ + --hb-secondary-50-rgb: 240 253 244; + --hb-secondary-100-rgb: 220 252 231; + --hb-secondary-200-rgb: 187 247 208; + --hb-secondary-300-rgb: 134 239 172; + --hb-secondary-400-rgb: 74 222 128; + --hb-secondary-500-rgb: 34 197 94; + --hb-secondary-600-rgb: 22 163 74; + --hb-secondary-700-rgb: 21 128 61; + --hb-secondary-800-rgb: 22 101 52; + --hb-secondary-900-rgb: 20 83 45; + --hb-secondary-950-rgb: 5 46 22; +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/fuchsia.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/fuchsia.css new file mode 100644 index 0000000..971b223 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/fuchsia.css @@ -0,0 +1,27 @@ +/* Hugo Blox color theme: FUCHSIA */ +:root { + /* Fuchsia Primary Palette */ + --hb-primary-50-rgb: 253 244 255; + --hb-primary-100-rgb: 250 232 255; + --hb-primary-200-rgb: 245 208 254; + --hb-primary-300-rgb: 240 171 252; + --hb-primary-400-rgb: 232 121 249; + --hb-primary-500-rgb: 217 70 239; + --hb-primary-600-rgb: 192 38 211; + --hb-primary-700-rgb: 162 28 175; + --hb-primary-800-rgb: 134 25 143; + --hb-primary-900-rgb: 112 26 117; + --hb-primary-950-rgb: 74 4 78; + /* Violet Secondary Palette */ + --hb-secondary-50-rgb: 245 243 255; + --hb-secondary-100-rgb: 237 233 254; + --hb-secondary-200-rgb: 221 214 254; + --hb-secondary-300-rgb: 196 181 253; + --hb-secondary-400-rgb: 167 139 250; + --hb-secondary-500-rgb: 139 92 246; + --hb-secondary-600-rgb: 124 58 237; + --hb-secondary-700-rgb: 109 40 217; + --hb-secondary-800-rgb: 91 33 182; + --hb-secondary-900-rgb: 76 29 149; + --hb-secondary-950-rgb: 46 16 101; +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/green.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/green.css new file mode 100644 index 0000000..72ac962 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/green.css @@ -0,0 +1,27 @@ +/* Hugo Blox color theme: GREEN */ +:root { + /* Green Primary Palette */ + --hb-primary-50-rgb: 240 253 244; + --hb-primary-100-rgb: 220 252 231; + --hb-primary-200-rgb: 187 247 208; + --hb-primary-300-rgb: 134 239 172; + --hb-primary-400-rgb: 74 222 128; + --hb-primary-500-rgb: 34 197 94; + --hb-primary-600-rgb: 22 163 74; + --hb-primary-700-rgb: 21 128 61; + --hb-primary-800-rgb: 22 101 52; + --hb-primary-900-rgb: 20 83 45; + --hb-primary-950-rgb: 5 46 22; + /* Teal Secondary Palette */ + --hb-secondary-50-rgb: 240 253 250; + --hb-secondary-100-rgb: 204 251 241; + --hb-secondary-200-rgb: 153 246 228; + --hb-secondary-300-rgb: 94 234 212; + --hb-secondary-400-rgb: 45 212 191; + --hb-secondary-500-rgb: 20 184 166; + --hb-secondary-600-rgb: 13 148 136; + --hb-secondary-700-rgb: 15 118 110; + --hb-secondary-800-rgb: 17 94 89; + --hb-secondary-900-rgb: 19 78 74; + --hb-secondary-950-rgb: 4 47 46; +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/indigo.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/indigo.css new file mode 100644 index 0000000..ac731d9 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/indigo.css @@ -0,0 +1,27 @@ +/* Hugo Blox color theme: INDIGO */ +:root { + /* Indigo Primary Palette */ + --hb-primary-50-rgb: 238 242 255; + --hb-primary-100-rgb: 224 231 255; + --hb-primary-200-rgb: 199 210 254; + --hb-primary-300-rgb: 165 180 252; + --hb-primary-400-rgb: 129 140 248; + --hb-primary-500-rgb: 99 102 241; + --hb-primary-600-rgb: 79 70 229; + --hb-primary-700-rgb: 67 56 202; + --hb-primary-800-rgb: 55 48 163; + --hb-primary-900-rgb: 49 46 129; + --hb-primary-950-rgb: 30 27 75; + /* Blue Secondary Palette */ + --hb-secondary-50-rgb: 239 246 255; + --hb-secondary-100-rgb: 219 234 254; + --hb-secondary-200-rgb: 191 219 254; + --hb-secondary-300-rgb: 147 197 253; + --hb-secondary-400-rgb: 96 165 250; + --hb-secondary-500-rgb: 59 130 246; + --hb-secondary-600-rgb: 37 99 235; + --hb-secondary-700-rgb: 29 78 216; + --hb-secondary-800-rgb: 30 64 175; + --hb-secondary-900-rgb: 30 58 138; + --hb-secondary-950-rgb: 23 37 84; +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/lime.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/lime.css new file mode 100644 index 0000000..d72eae5 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/lime.css @@ -0,0 +1,27 @@ +/* Hugo Blox color theme: LIME */ +:root { + /* Lime Primary Palette */ + --hb-primary-50-rgb: 247 254 231; + --hb-primary-100-rgb: 236 252 203; + --hb-primary-200-rgb: 217 249 157; + --hb-primary-300-rgb: 190 242 100; + --hb-primary-400-rgb: 163 230 53; + --hb-primary-500-rgb: 132 204 22; + --hb-primary-600-rgb: 101 163 13; + --hb-primary-700-rgb: 77 124 15; + --hb-primary-800-rgb: 63 98 18; + --hb-primary-900-rgb: 54 83 20; + --hb-primary-950-rgb: 26 46 5; + /* Yellow Secondary Palette */ + --hb-secondary-50-rgb: 254 252 232; + --hb-secondary-100-rgb: 254 249 195; + --hb-secondary-200-rgb: 254 240 138; + --hb-secondary-300-rgb: 253 224 71; + --hb-secondary-400-rgb: 250 204 21; + --hb-secondary-500-rgb: 234 179 8; + --hb-secondary-600-rgb: 202 138 4; + --hb-secondary-700-rgb: 161 98 7; + --hb-secondary-800-rgb: 133 77 14; + --hb-secondary-900-rgb: 113 63 18; + --hb-secondary-950-rgb: 66 32 6; +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/orange.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/orange.css new file mode 100644 index 0000000..5a96ea0 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/orange.css @@ -0,0 +1,27 @@ +/* Hugo Blox color theme: ORANGE */ +:root { + /* Orange Primary Palette */ + --hb-primary-50-rgb: 255 247 237; + --hb-primary-100-rgb: 255 237 213; + --hb-primary-200-rgb: 254 215 170; + --hb-primary-300-rgb: 253 186 116; + --hb-primary-400-rgb: 251 146 60; + --hb-primary-500-rgb: 249 115 22; + --hb-primary-600-rgb: 234 88 12; + --hb-primary-700-rgb: 194 65 12; + --hb-primary-800-rgb: 154 52 18; + --hb-primary-900-rgb: 124 45 18; + --hb-primary-950-rgb: 67 20 7; + /* Red Secondary Palette */ + --hb-secondary-50-rgb: 254 242 242; + --hb-secondary-100-rgb: 254 226 226; + --hb-secondary-200-rgb: 254 202 202; + --hb-secondary-300-rgb: 252 165 165; + --hb-secondary-400-rgb: 248 113 113; + --hb-secondary-500-rgb: 239 68 68; + --hb-secondary-600-rgb: 220 38 38; + --hb-secondary-700-rgb: 185 28 28; + --hb-secondary-800-rgb: 153 27 27; + --hb-secondary-900-rgb: 127 29 29; + --hb-secondary-950-rgb: 69 10 10; +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/pink.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/pink.css new file mode 100644 index 0000000..1b74ad2 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/pink.css @@ -0,0 +1,27 @@ +/* Hugo Blox color theme: PINK */ +:root { + /* Pink Primary Palette */ + --hb-primary-50-rgb: 253 242 248; + --hb-primary-100-rgb: 252 231 243; + --hb-primary-200-rgb: 251 207 232; + --hb-primary-300-rgb: 249 168 212; + --hb-primary-400-rgb: 244 114 182; + --hb-primary-500-rgb: 236 72 153; + --hb-primary-600-rgb: 219 39 119; + --hb-primary-700-rgb: 190 24 93; + --hb-primary-800-rgb: 157 23 77; + --hb-primary-900-rgb: 131 24 67; + --hb-primary-950-rgb: 80 7 36; + /* Rose Secondary Palette */ + --hb-secondary-50-rgb: 255 241 242; + --hb-secondary-100-rgb: 255 228 230; + --hb-secondary-200-rgb: 254 205 211; + --hb-secondary-300-rgb: 253 164 175; + --hb-secondary-400-rgb: 251 113 133; + --hb-secondary-500-rgb: 244 63 94; + --hb-secondary-600-rgb: 225 29 72; + --hb-secondary-700-rgb: 190 18 60; + --hb-secondary-800-rgb: 159 18 57; + --hb-secondary-900-rgb: 136 19 55; + --hb-secondary-950-rgb: 76 5 25; +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/purple.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/purple.css new file mode 100644 index 0000000..25e15d2 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/purple.css @@ -0,0 +1,27 @@ +/* Hugo Blox color theme: PURPLE */ +:root { + /* Purple Primary Palette */ + --hb-primary-50-rgb: 250 245 255; + --hb-primary-100-rgb: 243 232 255; + --hb-primary-200-rgb: 233 213 255; + --hb-primary-300-rgb: 216 180 254; + --hb-primary-400-rgb: 192 132 252; + --hb-primary-500-rgb: 168 85 247; + --hb-primary-600-rgb: 147 51 234; + --hb-primary-700-rgb: 126 34 206; + --hb-primary-800-rgb: 107 33 168; + --hb-primary-900-rgb: 88 28 135; + --hb-primary-950-rgb: 59 7 100; + /* Violet Secondary Palette */ + --hb-secondary-50-rgb: 245 243 255; + --hb-secondary-100-rgb: 237 233 254; + --hb-secondary-200-rgb: 221 214 254; + --hb-secondary-300-rgb: 196 181 253; + --hb-secondary-400-rgb: 167 139 250; + --hb-secondary-500-rgb: 139 92 246; + --hb-secondary-600-rgb: 124 58 237; + --hb-secondary-700-rgb: 109 40 217; + --hb-secondary-800-rgb: 91 33 182; + --hb-secondary-900-rgb: 76 29 149; + --hb-secondary-950-rgb: 46 16 101; +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/red.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/red.css new file mode 100644 index 0000000..037ce2b --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/red.css @@ -0,0 +1,27 @@ +/* Hugo Blox color theme: RED */ +:root { + /* Red Primary Palette */ + --hb-primary-50-rgb: 254 242 242; + --hb-primary-100-rgb: 254 226 226; + --hb-primary-200-rgb: 254 202 202; + --hb-primary-300-rgb: 252 165 165; + --hb-primary-400-rgb: 248 113 113; + --hb-primary-500-rgb: 239 68 68; + --hb-primary-600-rgb: 220 38 38; + --hb-primary-700-rgb: 185 28 28; + --hb-primary-800-rgb: 153 27 27; + --hb-primary-900-rgb: 127 29 29; + --hb-primary-950-rgb: 69 10 10; + /* Orange Secondary Palette */ + --hb-secondary-50-rgb: 255 247 237; + --hb-secondary-100-rgb: 255 237 213; + --hb-secondary-200-rgb: 254 215 170; + --hb-secondary-300-rgb: 253 186 116; + --hb-secondary-400-rgb: 251 146 60; + --hb-secondary-500-rgb: 249 115 22; + --hb-secondary-600-rgb: 234 88 12; + --hb-secondary-700-rgb: 194 65 12; + --hb-secondary-800-rgb: 154 52 18; + --hb-secondary-900-rgb: 124 45 18; + --hb-secondary-950-rgb: 67 20 7; +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/rose.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/rose.css new file mode 100644 index 0000000..c464663 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/rose.css @@ -0,0 +1,27 @@ +/* Hugo Blox color theme: ROSE */ +:root { + /* Rose Primary Palette */ + --hb-primary-50-rgb: 255 241 242; + --hb-primary-100-rgb: 255 228 230; + --hb-primary-200-rgb: 254 205 211; + --hb-primary-300-rgb: 253 164 175; + --hb-primary-400-rgb: 251 113 133; + --hb-primary-500-rgb: 244 63 94; + --hb-primary-600-rgb: 225 29 72; + --hb-primary-700-rgb: 190 18 60; + --hb-primary-800-rgb: 159 18 57; + --hb-primary-900-rgb: 136 19 55; + --hb-primary-950-rgb: 76 5 25; + /* Pink Secondary Palette */ + --hb-secondary-50-rgb: 253 242 248; + --hb-secondary-100-rgb: 252 231 243; + --hb-secondary-200-rgb: 251 207 232; + --hb-secondary-300-rgb: 249 168 212; + --hb-secondary-400-rgb: 244 114 182; + --hb-secondary-500-rgb: 236 72 153; + --hb-secondary-600-rgb: 219 39 119; + --hb-secondary-700-rgb: 190 24 93; + --hb-secondary-800-rgb: 157 23 77; + --hb-secondary-900-rgb: 131 24 67; + --hb-secondary-950-rgb: 80 7 36; +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/sky.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/sky.css new file mode 100644 index 0000000..d4db5f9 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/sky.css @@ -0,0 +1,27 @@ +/* Hugo Blox color theme: SKY */ +:root { + /* Sky Primary Palette */ + --hb-primary-50-rgb: 240 249 255; + --hb-primary-100-rgb: 224 242 254; + --hb-primary-200-rgb: 186 230 253; + --hb-primary-300-rgb: 125 211 252; + --hb-primary-400-rgb: 56 189 248; + --hb-primary-500-rgb: 14 165 233; + --hb-primary-600-rgb: 2 132 199; + --hb-primary-700-rgb: 3 105 161; + --hb-primary-800-rgb: 7 89 133; + --hb-primary-900-rgb: 12 74 110; + --hb-primary-950-rgb: 8 47 73; + /* Cyan Secondary Palette */ + --hb-secondary-50-rgb: 236 254 255; + --hb-secondary-100-rgb: 207 250 254; + --hb-secondary-200-rgb: 165 243 252; + --hb-secondary-300-rgb: 103 232 249; + --hb-secondary-400-rgb: 34 211 238; + --hb-secondary-500-rgb: 6 182 212; + --hb-secondary-600-rgb: 8 145 178; + --hb-secondary-700-rgb: 14 116 144; + --hb-secondary-800-rgb: 21 94 117; + --hb-secondary-900-rgb: 22 78 99; + --hb-secondary-950-rgb: 8 51 68; +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/slate.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/slate.css new file mode 100644 index 0000000..4c85e12 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/slate.css @@ -0,0 +1,27 @@ +/* Hugo Blox color theme: SLATE */ +:root { + /* Slate Primary Palette */ + --hb-primary-50-rgb: 248 250 252; + --hb-primary-100-rgb: 241 245 249; + --hb-primary-200-rgb: 226 232 240; + --hb-primary-300-rgb: 203 213 225; + --hb-primary-400-rgb: 148 163 184; + --hb-primary-500-rgb: 100 116 139; + --hb-primary-600-rgb: 71 85 105; + --hb-primary-700-rgb: 51 65 85; + --hb-primary-800-rgb: 30 41 59; + --hb-primary-900-rgb: 15 23 42; + --hb-primary-950-rgb: 2 6 23; + /* Stone Secondary Palette */ + --hb-secondary-50-rgb: 250 250 249; + --hb-secondary-100-rgb: 245 245 244; + --hb-secondary-200-rgb: 231 229 228; + --hb-secondary-300-rgb: 214 211 209; + --hb-secondary-400-rgb: 168 162 158; + --hb-secondary-500-rgb: 120 113 108; + --hb-secondary-600-rgb: 87 83 78; + --hb-secondary-700-rgb: 68 64 60; + --hb-secondary-800-rgb: 41 37 36; + --hb-secondary-900-rgb: 28 25 23; + --hb-secondary-950-rgb: 12 10 9; +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/stone.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/stone.css new file mode 100644 index 0000000..30044f8 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/stone.css @@ -0,0 +1,27 @@ +/* Hugo Blox color theme: STONE */ +:root { + /* Stone Primary Palette */ + --hb-primary-50-rgb: 250 250 249; + --hb-primary-100-rgb: 245 245 244; + --hb-primary-200-rgb: 231 229 228; + --hb-primary-300-rgb: 214 211 209; + --hb-primary-400-rgb: 168 162 158; + --hb-primary-500-rgb: 120 113 108; + --hb-primary-600-rgb: 87 83 78; + --hb-primary-700-rgb: 68 64 60; + --hb-primary-800-rgb: 41 37 36; + --hb-primary-900-rgb: 28 25 23; + --hb-primary-950-rgb: 12 10 9; + /* Slate Secondary Palette */ + --hb-secondary-50-rgb: 248 250 252; + --hb-secondary-100-rgb: 241 245 249; + --hb-secondary-200-rgb: 226 232 240; + --hb-secondary-300-rgb: 203 213 225; + --hb-secondary-400-rgb: 148 163 184; + --hb-secondary-500-rgb: 100 116 139; + --hb-secondary-600-rgb: 71 85 105; + --hb-secondary-700-rgb: 51 65 85; + --hb-secondary-800-rgb: 30 41 59; + --hb-secondary-900-rgb: 15 23 42; + --hb-secondary-950-rgb: 2 6 23; +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/teal.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/teal.css new file mode 100644 index 0000000..5b9e885 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/teal.css @@ -0,0 +1,27 @@ +/* Hugo Blox color theme: TEAL */ +:root { + /* Teal Primary Palette */ + --hb-primary-50-rgb: 240 253 250; + --hb-primary-100-rgb: 204 251 241; + --hb-primary-200-rgb: 153 246 228; + --hb-primary-300-rgb: 94 234 212; + --hb-primary-400-rgb: 45 212 191; + --hb-primary-500-rgb: 20 184 166; + --hb-primary-600-rgb: 13 148 136; + --hb-primary-700-rgb: 15 118 110; + --hb-primary-800-rgb: 17 94 89; + --hb-primary-900-rgb: 19 78 74; + --hb-primary-950-rgb: 4 47 46; + /* Emerald Secondary Palette */ + --hb-secondary-50-rgb: 236 253 245; + --hb-secondary-100-rgb: 209 250 229; + --hb-secondary-200-rgb: 167 243 208; + --hb-secondary-300-rgb: 110 231 183; + --hb-secondary-400-rgb: 52 211 153; + --hb-secondary-500-rgb: 16 185 129; + --hb-secondary-600-rgb: 5 150 105; + --hb-secondary-700-rgb: 4 120 87; + --hb-secondary-800-rgb: 6 95 70; + --hb-secondary-900-rgb: 6 78 59; + --hb-secondary-950-rgb: 2 44 34; +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/violet.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/violet.css new file mode 100644 index 0000000..7e13127 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/violet.css @@ -0,0 +1,27 @@ +/* Hugo Blox color theme: VIOLET */ +:root { + /* Violet Primary Palette */ + --hb-primary-50-rgb: 245 243 255; + --hb-primary-100-rgb: 237 233 254; + --hb-primary-200-rgb: 221 214 254; + --hb-primary-300-rgb: 196 181 253; + --hb-primary-400-rgb: 167 139 250; + --hb-primary-500-rgb: 139 92 246; + --hb-primary-600-rgb: 124 58 237; + --hb-primary-700-rgb: 109 40 217; + --hb-primary-800-rgb: 91 33 182; + --hb-primary-900-rgb: 76 29 149; + --hb-primary-950-rgb: 46 16 101; + /* Fuchsia Secondary Palette */ + --hb-secondary-50-rgb: 253 244 255; + --hb-secondary-100-rgb: 250 232 255; + --hb-secondary-200-rgb: 245 208 254; + --hb-secondary-300-rgb: 240 171 252; + --hb-secondary-400-rgb: 232 121 249; + --hb-secondary-500-rgb: 217 70 239; + --hb-secondary-600-rgb: 192 38 211; + --hb-secondary-700-rgb: 162 28 175; + --hb-secondary-800-rgb: 134 25 143; + --hb-secondary-900-rgb: 112 26 117; + --hb-secondary-950-rgb: 74 4 78; +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/yellow.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/yellow.css new file mode 100644 index 0000000..39714ae --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/yellow.css @@ -0,0 +1,27 @@ +/* Hugo Blox color theme: YELLOW */ +:root { + /* Yellow Primary Palette */ + --hb-primary-50-rgb: 254 252 232; + --hb-primary-100-rgb: 254 249 195; + --hb-primary-200-rgb: 254 240 138; + --hb-primary-300-rgb: 253 224 71; + --hb-primary-400-rgb: 250 204 21; + --hb-primary-500-rgb: 234 179 8; + --hb-primary-600-rgb: 202 138 4; + --hb-primary-700-rgb: 161 98 7; + --hb-primary-800-rgb: 133 77 14; + --hb-primary-900-rgb: 113 63 18; + --hb-primary-950-rgb: 66 32 6; + /* Amber Secondary Palette */ + --hb-secondary-50-rgb: 255 251 235; + --hb-secondary-100-rgb: 254 243 199; + --hb-secondary-200-rgb: 253 230 138; + --hb-secondary-300-rgb: 252 211 77; + --hb-secondary-400-rgb: 251 191 36; + --hb-secondary-500-rgb: 245 158 11; + --hb-secondary-600-rgb: 217 119 6; + --hb-secondary-700-rgb: 180 83 9; + --hb-secondary-800-rgb: 146 64 14; + --hb-secondary-900-rgb: 120 53 15; + --hb-secondary-950-rgb: 69 26 3; +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/zinc.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/zinc.css new file mode 100644 index 0000000..f727ace --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/themes/zinc.css @@ -0,0 +1,27 @@ +/* Hugo Blox color theme: ZINC */ +:root { + /* Zinc Primary Palette */ + --hb-primary-50-rgb: 250 250 250; + --hb-primary-100-rgb: 244 244 245; + --hb-primary-200-rgb: 228 228 231; + --hb-primary-300-rgb: 212 212 216; + --hb-primary-400-rgb: 161 161 170; + --hb-primary-500-rgb: 113 113 122; + --hb-primary-600-rgb: 82 82 91; + --hb-primary-700-rgb: 63 63 70; + --hb-primary-800-rgb: 39 39 42; + --hb-primary-900-rgb: 24 24 27; + --hb-primary-950-rgb: 9 9 11; + /* Slate Secondary Palette */ + --hb-secondary-50-rgb: 248 250 252; + --hb-secondary-100-rgb: 241 245 249; + --hb-secondary-200-rgb: 226 232 240; + --hb-secondary-300-rgb: 203 213 225; + --hb-secondary-400-rgb: 148 163 184; + --hb-secondary-500-rgb: 100 116 139; + --hb-secondary-600-rgb: 71 85 105; + --hb-secondary-700-rgb: 51 65 85; + --hb-secondary-800-rgb: 30 41 59; + --hb-secondary-900-rgb: 15 23 42; + --hb-secondary-950-rgb: 2 6 23; +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/views/all.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/views/all.css new file mode 100644 index 0000000..283d09d --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/views/all.css @@ -0,0 +1 @@ +@import "attachments.css"; diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/views/attachments.css b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/views/attachments.css new file mode 100644 index 0000000..d8f682c --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/css/views/attachments.css @@ -0,0 +1,28 @@ +.hb-attachment-link { + @apply inline-block font-semibold uppercase outline-none mr-4 mb-1.5 transition-all text-sm tracking-wide focus:outline-none; + + color: var(--color-primary-600); +} + +.hb-attachment-link:hover { + color: var(--color-primary-700); + text-decoration: underline; +} + +.dark .hb-attachment-link { + color: var(--color-primary-400); +} + +.dark .hb-attachment-link:hover { + color: var(--color-primary-300); +} + +/* Small links - used in list views */ +.hb-attachment-link-small { + @apply p-0 text-xs; +} + +/* Large links - used on single pages */ +.hb-attachment-link-large { + @apply p-0 text-sm; +} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/font/Inter.var.woff2 b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/font/Inter.var.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..365eedc50cd0f46ea35a3176335fc67b51123fb4 GIT binary patch literal 324864 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≫bY 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≥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

6&qaNDxLwZnq2 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

ycBey{rl;kDc{Ai+(=LzE1TWNYW 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

w%k_tC9o+J?jlEWgdzIe0b`MG#H=N&ZEd~ha9 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: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

hkA|(TNmE{-ab;u^$V$0 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 literal 0 HcmV?d00001 diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/alpinejs/cdn.min.js b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/alpinejs/cdn.min.js new file mode 100644 index 0000000..0acdcef --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/assets/dist/lib/alpinejs/cdn.min.js @@ -0,0 +1,5 @@ +(()=>{var nt=!1,it=!1,W=[],ot=-1;function Ut(e){Rn(e)}function Rn(e){W.includes(e)||W.push(e),Mn()}function Wt(e){let t=W.indexOf(e);t!==-1&&t>ot&&W.splice(t,1)}function Mn(){!it&&!nt&&(nt=!0,queueMicrotask(Nn))}function Nn(){nt=!1,it=!0;for(let e=0;ee.effect(t,{scheduler:r=>{st?Ut(r):r()}}),at=e.raw}function ct(e){N=e}function Yt(e){let t=()=>{};return[n=>{let i=N(n);return e._x_effects||(e._x_effects=new Set,e._x_runEffects=()=>{e._x_effects.forEach(o=>o())}),e._x_effects.add(i),t=()=>{i!==void 0&&(e._x_effects.delete(i),$(i))},i},()=>{t()}]}function ve(e,t){let r=!0,n,i=N(()=>{let o=e();JSON.stringify(o),r?n=o:queueMicrotask(()=>{t(o,n),n=o}),r=!1});return()=>$(i)}var Xt=[],Zt=[],Qt=[];function er(e){Qt.push(e)}function te(e,t){typeof t=="function"?(e._x_cleanups||(e._x_cleanups=[]),e._x_cleanups.push(t)):(t=e,Zt.push(t))}function Ae(e){Xt.push(e)}function Oe(e,t,r){e._x_attributeCleanups||(e._x_attributeCleanups={}),e._x_attributeCleanups[t]||(e._x_attributeCleanups[t]=[]),e._x_attributeCleanups[t].push(r)}function lt(e,t){e._x_attributeCleanups&&Object.entries(e._x_attributeCleanups).forEach(([r,n])=>{(t===void 0||t.includes(r))&&(n.forEach(i=>i()),delete e._x_attributeCleanups[r])})}function tr(e){for(e._x_effects?.forEach(Wt);e._x_cleanups?.length;)e._x_cleanups.pop()()}var ut=new MutationObserver(mt),ft=!1;function ue(){ut.observe(document,{subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0}),ft=!0}function dt(){kn(),ut.disconnect(),ft=!1}var le=[];function kn(){let e=ut.takeRecords();le.push(()=>e.length>0&&mt(e));let t=le.length;queueMicrotask(()=>{if(le.length===t)for(;le.length>0;)le.shift()()})}function m(e){if(!ft)return e();dt();let t=e();return ue(),t}var pt=!1,Se=[];function rr(){pt=!0}function nr(){pt=!1,mt(Se),Se=[]}function mt(e){if(pt){Se=Se.concat(e);return}let t=[],r=new Set,n=new Map,i=new Map;for(let o=0;o{s.nodeType===1&&s._x_marker&&r.add(s)}),e[o].addedNodes.forEach(s=>{if(s.nodeType===1){if(r.has(s)){r.delete(s);return}s._x_marker||t.push(s)}})),e[o].type==="attributes")){let s=e[o].target,a=e[o].attributeName,c=e[o].oldValue,l=()=>{n.has(s)||n.set(s,[]),n.get(s).push({name:a,value:s.getAttribute(a)})},u=()=>{i.has(s)||i.set(s,[]),i.get(s).push(a)};s.hasAttribute(a)&&c===null?l():s.hasAttribute(a)?(u(),l()):u()}i.forEach((o,s)=>{lt(s,o)}),n.forEach((o,s)=>{Xt.forEach(a=>a(s,o))});for(let o of r)t.some(s=>s.contains(o))||Zt.forEach(s=>s(o));for(let o of t)o.isConnected&&Qt.forEach(s=>s(o));t=null,r=null,n=null,i=null}function Ce(e){return z(B(e))}function k(e,t,r){return e._x_dataStack=[t,...B(r||e)],()=>{e._x_dataStack=e._x_dataStack.filter(n=>n!==t)}}function B(e){return e._x_dataStack?e._x_dataStack:typeof ShadowRoot=="function"&&e instanceof ShadowRoot?B(e.host):e.parentNode?B(e.parentNode):[]}function z(e){return new Proxy({objects:e},Dn)}var Dn={ownKeys({objects:e}){return Array.from(new Set(e.flatMap(t=>Object.keys(t))))},has({objects:e},t){return t==Symbol.unscopables?!1:e.some(r=>Object.prototype.hasOwnProperty.call(r,t)||Reflect.has(r,t))},get({objects:e},t,r){return t=="toJSON"?Pn:Reflect.get(e.find(n=>Reflect.has(n,t))||{},t,r)},set({objects:e},t,r,n){let i=e.find(s=>Object.prototype.hasOwnProperty.call(s,t))||e[e.length-1],o=Object.getOwnPropertyDescriptor(i,t);return o?.set&&o?.get?o.set.call(n,r)||!0:Reflect.set(i,t,r)}};function Pn(){return Reflect.ownKeys(this).reduce((t,r)=>(t[r]=Reflect.get(this,r),t),{})}function Te(e){let t=n=>typeof n=="object"&&!Array.isArray(n)&&n!==null,r=(n,i="")=>{Object.entries(Object.getOwnPropertyDescriptors(n)).forEach(([o,{value:s,enumerable:a}])=>{if(a===!1||s===void 0||typeof s=="object"&&s!==null&&s.__v_skip)return;let c=i===""?o:`${i}.${o}`;typeof s=="object"&&s!==null&&s._x_interceptor?n[o]=s.initialize(e,c,o):t(s)&&s!==n&&!(s instanceof Element)&&r(s,c)})};return r(e)}function Re(e,t=()=>{}){let r={initialValue:void 0,_x_interceptor:!0,initialize(n,i,o){return e(this.initialValue,()=>In(n,i),s=>ht(n,i,s),i,o)}};return t(r),n=>{if(typeof n=="object"&&n!==null&&n._x_interceptor){let i=r.initialize.bind(r);r.initialize=(o,s,a)=>{let c=n.initialize(o,s,a);return r.initialValue=c,i(o,s,a)}}else r.initialValue=n;return r}}function In(e,t){return t.split(".").reduce((r,n)=>r[n],e)}function ht(e,t,r){if(typeof t=="string"&&(t=t.split(".")),t.length===1)e[t[0]]=r;else{if(t.length===0)throw error;return e[t[0]]||(e[t[0]]={}),ht(e[t[0]],t.slice(1),r)}}var ir={};function y(e,t){ir[e]=t}function fe(e,t){let r=Ln(t);return Object.entries(ir).forEach(([n,i])=>{Object.defineProperty(e,`$${n}`,{get(){return i(t,r)},enumerable:!1})}),e}function Ln(e){let[t,r]=_t(e),n={interceptor:Re,...t};return te(e,r),n}function or(e,t,r,...n){try{return r(...n)}catch(i){re(i,e,t)}}function re(e,t,r=void 0){e=Object.assign(e??{message:"No error message given."},{el:t,expression:r}),console.warn(`Alpine Expression Error: ${e.message} + +${r?'Expression: "'+r+`" + +`:""}`,t),setTimeout(()=>{throw e},0)}var Me=!0;function ke(e){let t=Me;Me=!1;let r=e();return Me=t,r}function R(e,t,r={}){let n;return x(e,t)(i=>n=i,r),n}function x(...e){return sr(...e)}var sr=xt;function ar(e){sr=e}function xt(e,t){let r={};fe(r,e);let n=[r,...B(e)],i=typeof t=="function"?$n(n,t):Fn(n,t,e);return or.bind(null,e,t,i)}function $n(e,t){return(r=()=>{},{scope:n={},params:i=[],context:o}={})=>{let s=t.apply(z([n,...e]),i);Ne(r,s)}}var gt={};function jn(e,t){if(gt[e])return gt[e];let r=Object.getPrototypeOf(async function(){}).constructor,n=/^[\n\s]*if.*\(.*\)/.test(e.trim())||/^(let|const)\s/.test(e.trim())?`(async()=>{ ${e} })()`:e,o=(()=>{try{let s=new r(["__self","scope"],`with (scope) { __self.result = ${n} }; __self.finished = true; return __self.result;`);return Object.defineProperty(s,"name",{value:`[Alpine] ${e}`}),s}catch(s){return re(s,t,e),Promise.resolve()}})();return gt[e]=o,o}function Fn(e,t,r){let n=jn(t,r);return(i=()=>{},{scope:o={},params:s=[],context:a}={})=>{n.result=void 0,n.finished=!1;let c=z([o,...e]);if(typeof n=="function"){let l=n.call(a,n,c).catch(u=>re(u,r,t));n.finished?(Ne(i,n.result,c,s,r),n.result=void 0):l.then(u=>{Ne(i,u,c,s,r)}).catch(u=>re(u,r,t)).finally(()=>n.result=void 0)}}}function Ne(e,t,r,n,i){if(Me&&typeof t=="function"){let o=t.apply(r,n);o instanceof Promise?o.then(s=>Ne(e,s,r,n)).catch(s=>re(s,i,t)):e(o)}else typeof t=="object"&&t instanceof Promise?t.then(o=>e(o)):e(t)}var wt="x-";function C(e=""){return wt+e}function cr(e){wt=e}var De={};function d(e,t){return De[e]=t,{before(r){if(!De[r]){console.warn(String.raw`Cannot find directive \`${r}\`. \`${e}\` will use the default order of execution`);return}let n=G.indexOf(r);G.splice(n>=0?n:G.indexOf("DEFAULT"),0,e)}}}function lr(e){return Object.keys(De).includes(e)}function pe(e,t,r){if(t=Array.from(t),e._x_virtualDirectives){let o=Object.entries(e._x_virtualDirectives).map(([a,c])=>({name:a,value:c})),s=Et(o);o=o.map(a=>s.find(c=>c.name===a.name)?{name:`x-bind:${a.name}`,value:`"${a.value}"`}:a),t=t.concat(o)}let n={};return t.map(dr((o,s)=>n[o]=s)).filter(mr).map(zn(n,r)).sort(Kn).map(o=>Bn(e,o))}function Et(e){return Array.from(e).map(dr()).filter(t=>!mr(t))}var yt=!1,de=new Map,ur=Symbol();function fr(e){yt=!0;let t=Symbol();ur=t,de.set(t,[]);let r=()=>{for(;de.get(t).length;)de.get(t).shift()();de.delete(t)},n=()=>{yt=!1,r()};e(r),n()}function _t(e){let t=[],r=a=>t.push(a),[n,i]=Yt(e);return t.push(i),[{Alpine:K,effect:n,cleanup:r,evaluateLater:x.bind(x,e),evaluate:R.bind(R,e)},()=>t.forEach(a=>a())]}function Bn(e,t){let r=()=>{},n=De[t.type]||r,[i,o]=_t(e);Oe(e,t.original,o);let s=()=>{e._x_ignore||e._x_ignoreSelf||(n.inline&&n.inline(e,t,i),n=n.bind(n,e,t,i),yt?de.get(ur).push(n):n())};return s.runCleanups=o,s}var Pe=(e,t)=>({name:r,value:n})=>(r.startsWith(e)&&(r=r.replace(e,t)),{name:r,value:n}),Ie=e=>e;function dr(e=()=>{}){return({name:t,value:r})=>{let{name:n,value:i}=pr.reduce((o,s)=>s(o),{name:t,value:r});return n!==t&&e(n,t),{name:n,value:i}}}var pr=[];function ne(e){pr.push(e)}function mr({name:e}){return hr().test(e)}var hr=()=>new RegExp(`^${wt}([^:^.]+)\\b`);function zn(e,t){return({name:r,value:n})=>{let i=r.match(hr()),o=r.match(/:([a-zA-Z0-9\-_:]+)/),s=r.match(/\.[^.\]]+(?=[^\]]*$)/g)||[],a=t||e[r]||r;return{type:i?i[1]:null,value:o?o[1]:null,modifiers:s.map(c=>c.replace(".","")),expression:n,original:a}}}var bt="DEFAULT",G=["ignore","ref","data","id","anchor","bind","init","for","model","modelable","transition","show","if",bt,"teleport"];function Kn(e,t){let r=G.indexOf(e.type)===-1?bt:e.type,n=G.indexOf(t.type)===-1?bt:t.type;return G.indexOf(r)-G.indexOf(n)}function J(e,t,r={}){e.dispatchEvent(new CustomEvent(t,{detail:r,bubbles:!0,composed:!0,cancelable:!0}))}function D(e,t){if(typeof ShadowRoot=="function"&&e instanceof ShadowRoot){Array.from(e.children).forEach(i=>D(i,t));return}let r=!1;if(t(e,()=>r=!0),r)return;let n=e.firstElementChild;for(;n;)D(n,t,!1),n=n.nextElementSibling}function E(e,...t){console.warn(`Alpine Warning: ${e}`,...t)}var _r=!1;function gr(){_r&&E("Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems."),_r=!0,document.body||E("Unable to initialize. Trying to load Alpine before `` is available. Did you forget to add `defer` in Alpine's ` + +comments powered by Disqus +{{end}} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/comments/giscus.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/comments/giscus.html new file mode 100644 index 0000000..de83e17 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/comments/giscus.html @@ -0,0 +1,19 @@ +{{ if site.Params.hugoblox.comments.giscus }} + {{ $config := site.Params.hugoblox.comments.giscus }} + +{{ end }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/backlinks.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/backlinks.html new file mode 100644 index 0000000..ec0e779 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/backlinks.html @@ -0,0 +1,22 @@ +{{ $show_backlinks := .Params.backlinks | default true }} +{{ if $show_backlinks }} + {{ $defer_globals := (dict "page" . )}} + {{ with (templates.Defer (dict "data" $defer_globals )) }} + {{ $backlinks := (site.Home.Store.Get "backlinks" | uniq) | default dict }} + {{ with (where $backlinks "links_to" .page.RelPermalink) }} +

+ {{ end }} + {{ end }} +{{ end }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/breadcrumb.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/breadcrumb.html new file mode 100644 index 0000000..a80fda8 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/breadcrumb.html @@ -0,0 +1,13 @@ +
+ {{- range .Ancestors.Reverse }} + {{- if not .IsHome }} + + {{- partial "functions/get_icon.html" (dict "name" "chevron-right" "attributes" "class=\"w-3.5 shrink-0\"") -}} + {{ end -}} + {{ end -}} +
+ {{- .LinkTitle -}} +
+
diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/cover.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/cover.html new file mode 100644 index 0000000..ff2a16c --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/cover.html @@ -0,0 +1,225 @@ +{{/* Article Cover Component - Notion-inspired page cover with icon overlay */}} +{{/* Requires: page context */}} + +{{ $cover := partial "functions/get_cover_image.html" . }} +{{ if $cover }} + +{{/* Get cover configuration with defaults */}} +{{ $cover_config := .Params.cover | default (dict) }} +{{ if not (reflect.IsMap $cover_config) }} + {{/* Simple string format: cover: "image.jpg" */}} + {{ $cover_config = dict "image" $cover_config }} +{{ end }} + +{{/* Default alt text to page title if not specified */}} +{{ $alt_text := $cover_config.alt_text | default (.Title | plainify) }} + +{{/* Height configuration */}} +{{ $height_map := dict + "small" "200px" + "medium" "320px" + "large" "480px" + "full" "60vh" +}} +{{ $height := index $height_map ($cover_config.height | default "medium") | default "320px" }} + +{{/* Style configuration */}} +{{ $style := $cover_config.style | default "gradient" }} + +{{/* Position configuration */}} +{{ $position := $cover_config.position | default (dict) }} +{{ $x := $position.x | default 50 }} +{{ $y := $position.y | default 50 }} + +{{/* Overlay configuration */}} +{{ $overlay := $cover_config.overlay | default (dict) }} +{{ $overlay_enabled := $overlay.enabled | default true }} +{{ $overlay_type := $overlay.type | default "gradient" }} +{{ $overlay_opacity := $overlay.opacity | default 0.3 }} +{{ $overlay_color := $overlay.color | default "#000000" }} +{{ $overlay_gradient := $overlay.gradient | default "bottom" }} + +{{/* Fade configuration */}} +{{ $fade := $cover_config.fade | default (dict) }} +{{ $fade_enabled := $fade.enabled | default true }} +{{ $fade_height := $fade.height | default "60px" }} +{{ $fade_blur := $fade.blur | default false }} + +{{/* Icon configuration */}} +{{ $icon_config := $cover_config.icon | default (dict) }} +{{ $has_icon := or $icon_config.name $icon_config.emoji }} +{{ $icon_position := $icon_config.position | default "overlap" }} +{{ $icon_size := $icon_config.size | default "large" }} +{{ $icon_style := $icon_config.style | default "glass" }} +{{ $icon_border := $icon_config.border | default true }} + +{{/* Responsive hide on mobile */}} +{{ $hide_mobile := false }} +{{ if $cover_config.responsive }} + {{ $hide_mobile = $cover_config.responsive.hide_on_mobile | default false }} +{{ end }} + +{{/* Process cover image */}} +{{ $cover_width := 2560 }} +{{ $cover_height := 520 }} +{{ if eq ($cover_config.height | default "medium") "small" }} + {{ $cover_height = 320 }} +{{ else if eq ($cover_config.height | default "medium") "large" }} + {{ $cover_height = 768 }} +{{ else if eq ($cover_config.height | default "medium") "full" }} + {{ $cover_height = 1080 }} +{{ end }} + +{{/* + Generate responsive images. + - reflect.IsImageResourceProcessable → false for SVG (not processable by Hugo). + - GIF: processable by Hugo but we skip to preserve animation frames. +*/}} +{{ $processed_cover := $cover }} +{{ $srcset := "" }} +{{ $canProcess := and (reflect.IsImageResourceProcessable $cover) (ne $cover.MediaType.SubType "gif") }} +{{ if $canProcess }} + {{ $fill_spec := printf "%dx%d Center q85 webp" $cover_width $cover_height }} + {{ $processed_cover = $cover.Fill $fill_spec }} + + {{ $variants := slice }} + {{ $widths := slice 640 768 1024 1366 1920 2560 }} + {{ range $widths }} + {{ $w := . }} + {{ $h := div (mul $w $cover_height) $cover_width }} + {{ $variant_spec := printf "%dx%d Center q85 webp" $w $h }} + {{ $variant := $cover.Fill $variant_spec }} + {{ $variants = $variants | append (printf "%s %dw" $variant.RelPermalink $w) }} + {{ end }} + {{ $srcset = delimit $variants ", " }} +{{ end }} + +{{/* Build CSS classes based on style */}} +{{ $cover_classes := "article-cover relative w-full" }} +{{ if $hide_mobile }} + {{ $cover_classes = printf "%s hidden md:block" $cover_classes }} +{{ end }} + +{{/* Container styles */}} +{{ $container_style := printf "height: %s;" $height }} + +{{/* Calculate mask style for fade */}} +{{ $mask_style := "" }} +{{ if and $fade_enabled (ne $style "minimal") }} + {{/* Mask fades from black (visible) to transparent (invisible) at the bottom */}} + {{ $mask_style = printf "-webkit-mask-image: linear-gradient(to bottom, black calc(100%% - %s), transparent 100%%); mask-image: linear-gradient(to bottom, black calc(100%% - %s), transparent 100%%);" $fade_height $fade_height }} +{{ end }} + +
+ +
+ {{/* Cover Image */}} +
+ {{ if $canProcess }} + {{ $alt_text }} + {{ else }} + {{ $alt_text }} + {{ end }} +
+ + {{/* Overlay Effects */}} + {{ if and $overlay_enabled (ne $style "minimal") }} + {{ if eq $style "gradient" }} +
+ {{ else if eq $style "glass" }} +
+ {{ else if eq $style "blur" }} +
+ {{ else if eq $overlay_type "gradient" }} + {{ if eq $overlay_gradient "bottom" }} +
+ {{ else if eq $overlay_gradient "top" }} +
+ {{ else if eq $overlay_gradient "both" }} +
+ {{ else if eq $overlay_gradient "radial" }} +
+ {{ end }} + {{ else if eq $overlay_type "solid" }} +
+ {{ end }} + {{ end }} + + {{/* Blur Effect at Bottom (Optional) */}} + {{ if and $fade_enabled $fade_blur (ne $style "minimal") }} + {{/* Taller blur zone with mask to create smooth blur transition before fade out */}} + {{/* Semi-transparent background needed for backdrop-filter to render */}} +
+ {{ end }} + + {{/* Caption */}} + {{ with $cover_config.caption }} +
+ {{ . | markdownify }} +
+ {{ end }} +
+ + {{/* Icon Overlay - Only if position is "overlap" - NOW UNCLIPPED */}} + {{ if and $has_icon (eq $icon_position "overlap") }} + {{ $icon_size_map := dict "small" "w-8 h-8" "medium" "w-12 h-12" "large" "w-16 h-16" }} + {{ $icon_size_class := index $icon_size_map $icon_size | default "w-16 h-16" }} + {{ $icon_padding := cond (eq $icon_size "small") "p-1.5" (cond (eq $icon_size "medium") "p-2" "p-3") }} + +
+
+ {{ if $icon_config.emoji }} + {{ $icon_config.emoji }} + {{ else if $icon_config.name }} + {{ partial "functions/get_icon.html" (dict "name" $icon_config.name "attributes" (printf "class=\"%s text-gray-700 dark:text-gray-200\"" $icon_size_class)) }} + {{ end }} +
+
+ {{ end }} + +
+ +{{/* Icon Below Cover - If position is "below" */}} +{{ if and $has_icon (eq $icon_position "below") }} + {{ $icon_size_map := dict "small" "w-8 h-8" "medium" "w-12 h-12" "large" "w-16 h-16" }} + {{ $icon_size_class := index $icon_size_map $icon_size | default "w-16 h-16" }} + {{ $icon_padding := cond (eq $icon_size "small") "p-1.5" (cond (eq $icon_size "medium") "p-2" "p-3") }} + +
+
+ {{ if $icon_config.emoji }} + {{ $icon_config.emoji }} + {{ else if $icon_config.name }} + {{ partial "functions/get_icon.html" (dict "name" $icon_config.name "attributes" (printf "class=\"%s text-gray-700 dark:text-gray-200\"" $icon_size_class)) }} + {{ end }} +
+
+{{ end }} + +{{ end }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/feedback.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/feedback.html new file mode 100644 index 0000000..5087dd0 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/feedback.html @@ -0,0 +1,36 @@ +{{/* TODO: port JS & response text from Bootstrap module. Re-integrate with GA plus Fathom/Plausible */}} +{{/* $ga := site.Params.marketing.analytics.google_analytics | default "" */}} +{{ $show_feedback := .Params.feedback | default true }} + +{{ if hugo.IsProduction | and $show_feedback }}{{/* | and $ga */}} +
+
+
+ {{ i18n "feedback_widget_question" | default "Was this page helpful?" }} +
+
+
+ 😞 +
+
+ 😐 +
+
+ 🤩 +
+
+
+
+{{ end }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/footers/columns.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/footers/columns.html new file mode 100644 index 0000000..21fa806 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/footers/columns.html @@ -0,0 +1,82 @@ +{{ $branding := partialCached "functions/get_branding" . "branding" }} +{{- $logo_height := site.Params.hugoblox.footer.logo_height | default 36 -}} +{{ $logo := partialCached "functions/get_logo" (dict "constraint" "max_height" "size" $logo_height) "footer_logo" }} +{{- $show_logo := site.Params.hugoblox.footer.show_logo | default true -}} +{{- $show_title := site.Params.hugoblox.footer.show_title | default true -}} +{{- $show_tagline := site.Params.hugoblox.footer.show_tagline | default true -}} +{{- $footer_title := site.Params.hugoblox.footer.title | default $branding.name -}} +
+ Footer + +
+
+
+ {{ if $show_logo }} + {{ with $logo.resource }} + {{ if $logo.is_svg }} + + + {{ else }} + {{ $branding.name }} + {{ end }} + {{ end }} + {{ end }} + {{ if $show_title }} + + {{ $footer_title }} + + {{ end }} + {{ if $show_tagline }} +

{{ site.Params.hugoblox.identity.tagline | default "" }}

+ {{ end }} + {{- $show_social := site.Params.hugoblox.footer.show_social | default true -}} + {{ if $show_social }} + {{ with site.Params.hugoblox.identity.social.links }} +
+ {{ partial "social_links" (dict "Params" (dict "profiles" .)) }} +
+ {{ end }} + {{ end }} +
+
+ + {{ $menu := .Site.Menus.footer }} + {{ range $index, $menuItem := $menu }} +
+

{{ $menuItem.Name }}

+ +
+ {{ end }} +
+
+
+
+
+ + {{/* Display copyright license. */}} + {{ partial "site_footer_license" . }} + +
+
+
diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/footers/minimal.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/footers/minimal.html new file mode 100644 index 0000000..825ff08 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/footers/minimal.html @@ -0,0 +1,49 @@ +{{ $show_translations := site.Params.hugoblox.footer.language_switcher | default true }} +{{ if .IsTranslated | and $show_translations }} +
+
+ {{- partial "functions/get_icon" (dict "name" "globe-alt" "attributes" `class="inline-block pr-1" style="height: 1em"`) -}} + {{ i18n "languages" }}: +
+
{{ index hugo.Data.languages .Lang }}
+ {{ range .Translations }} + + {{ end }} +
+{{ end }} + +{{/* Footer nav links - single level */}} +{{ $menu := .Site.Menus.footer }} +{{ with $menu }} + +{{ end }} + +{{/* Social links */}} +{{- $show_social := site.Params.hugoblox.footer.show_social | default true -}} +{{ if $show_social }} +{{ with site.Params.hugoblox.identity.social.links }} +
+ {{ partial "social_links" (dict "Params" (dict "profiles" .)) }} +
+{{ end }} +{{ end }} + +{{ with site.Params.hugoblox.footer.text }} +

+ {{ . | markdownify | emojify }} +

+{{ end }} + +{{/* Display copyright license. */}} +{{ partial "site_footer_license" . }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/headers/floating-theme-toggler.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/headers/floating-theme-toggler.html new file mode 100644 index 0000000..3054007 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/headers/floating-theme-toggler.html @@ -0,0 +1,24 @@ +
+
+ +
+
diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/headers/navbar-simple.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/headers/navbar-simple.html new file mode 100644 index 0000000..9bbb573 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/headers/navbar-simple.html @@ -0,0 +1,147 @@ + + +{{/* Show site search? */}} +{{ $show_search := site.Params.hugoblox.header.search | default false }} + + + +{{ if $show_search }} + {{- partial "components/search-modal.html" . -}} +{{ end }} + + diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/headers/navbar.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/headers/navbar.html new file mode 100644 index 0000000..49f83f6 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/headers/navbar.html @@ -0,0 +1,229 @@ +{{ $branding := partialCached "functions/get_branding" . "branding" }} +{{ $logo := partialCached "functions/get_logo" (dict "constraint" "max_height" "size" 36) "navbar_logo" }} +{{- $show_logo := site.Params.hugoblox.header.show_logo | default true -}} +{{- $show_title := site.Params.hugoblox.header.show_title | default true -}} +{{- $navbar_title := site.Params.hugoblox.header.title | default $branding.name -}} + + +{{ if $show_search }} + {{- partial "components/search-modal.html" . -}} +{{ end }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/language-chooser.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/language-chooser.html new file mode 100644 index 0000000..0c06bc1 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/language-chooser.html @@ -0,0 +1,38 @@ +{{ $page := .page }} +{{ $class := .class }} +{{ $hide_language_name := false }}{{/* TODO: Add to hugoblox.header.hide_language_name if needed */}} +{{ $str_languages := T "languages" }} + +{{- if $page.IsTranslated -}} +
+ + +
+{{- end -}} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/last-edited.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/last-edited.html new file mode 100644 index 0000000..909553d --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/last-edited.html @@ -0,0 +1,11 @@ +{{- $last_updated := T "last_updated" -}} + +{{- if (.Params.show_date_updated | default true) | and .Lastmod -}} + {{ $datetime := (time.Format "2006-01-02T15:04:05.000Z" .Lastmod) }} + +{{- else -}} +
+{{- end -}} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/next-in-series.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/next-in-series.html new file mode 100644 index 0000000..00c94a6 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/next-in-series.html @@ -0,0 +1,54 @@ +{{ if .Params.pager | default true }} + {{ if and .Section (or .NextInSection .PrevInSection) }} + {{ $next := .NextInSection }} + {{ $prev := .PrevInSection }} + {{ if (eq (.Scratch.Get "invert_pager") true) | default .Params.invert_pager | default false }} + {{ $next = .PrevInSection }} + {{ $prev = .NextInSection }} + {{ end }} + +{{ end }} +{{ end }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/page_sharer.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/page_sharer.html new file mode 100644 index 0000000..1e9ba3c --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/page_sharer.html @@ -0,0 +1,22 @@ +{{ if ne .Params.share false }} +
+ {{ range where hugo.Data.page_sharer.links "enable" true }} + + {{/* mailto URIs require percent-encoding (%20 for spaces) per RFC 6068, not form-encoding (+ for spaces). */}} + {{/* Use urls.PathEscape for mailto; urlquery for other schemes (https, etc.). */}} + {{ $is_mailto := eq (urls.Parse .url).Scheme "mailto" }} + {{ $link := replace .url "{url}" (cond $is_mailto (urls.PathEscape $.Permalink) (urlquery $.Permalink)) }} + {{ $link = replace $link "{title}" (cond $is_mailto (urls.PathEscape $.Title) (urlquery $.Title)) }} + + {{ partial "functions/get_icon" (dict "name" .icon "attributes" "style=\"height: 1em;\"") }} + + {{ end }} +
+{{ end }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/paginator.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/paginator.html new file mode 100644 index 0000000..40c7112 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/paginator.html @@ -0,0 +1,12 @@ +{{ if or (.Paginator.HasPrev) (.Paginator.HasNext) }} + +{{ end }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/search-modal.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/search-modal.html new file mode 100644 index 0000000..03504ed --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/search-modal.html @@ -0,0 +1,484 @@ +{{/* Modern Search Modal - Custom Pagefind API Implementation */}} + + + + + diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/sidebar.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/sidebar.html new file mode 100644 index 0000000..5487428 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/sidebar.html @@ -0,0 +1,150 @@ +{{- $context := .context -}} + +{{- $no_sidebar := ne .no_sidebar false -}} +{{- $pad_sidebar := true -}} +{{- $sidebar_dynamic_class := cond $no_sidebar (cond $pad_sidebar "lg:hidden xl:block" "lg:hidden") "lg:sticky" -}} + +{{- $root_section := cond (eq site.Home.Type "docs") site.Home $context.FirstSection -}} +{{- $page_url := $context.RelPermalink -}} + +{{/* Only replace explicit mobile menu links with automated links for Docs pages */}} +{{ if not $no_sidebar }} + {{/* Classes appended to `hb-sidebar-mobile-menu` are modified via sidebar JS, so do not @apply them to `hb-sidebar-mobile-menu` */}} + +{{ end }} + + + + +{{- define "menu-links" -}} + {{ template "link-tree" (dict "context" .context "level" 0 "page" .page "pageURL" .pageURL "toc" (.toc | default false)) }} +{{- end -}} + +{{- define "link-tree" -}} + {{- if ge .level 4 -}} + {{- return -}} + {{- end -}} + + {{- $context := .context -}} + {{- $page := .page }} + {{- $page_url := .page.RelPermalink -}} + {{- $level := .level -}} + {{- $toc := .toc | default false -}} + + {{- with $items := union .context.RegularPages .context.Sections -}} + {{- $items = where $items "Params.sidebar.hidden" "!=" true -}} + {{- if eq $level 0 -}} + {{- range $items.ByWeight }} + {{- $active := eq $page_url .RelPermalink -}} + {{- $is_expanded := or (.Params.sidebar.open) (.IsAncestor $page) $active | default false }} +
  • + {{- template "custom-menu-link" dict "context" . "active" $active "title" .LinkTitle "link" .RelPermalink -}} + {{- if and $toc $active -}} + {{- template "mobile-toc" dict "page" . -}} + {{- end -}} + {{- template "link-tree" dict "context" . "page" $page "pageURL" $page_url "level" (add $level 1) "toc" $toc -}} +
  • + {{- end -}} + {{- else -}} +
    +
      + {{- range $items.ByWeight }} + {{- $active := eq $page_url .RelPermalink -}} + {{- $is_expanded := or (.Params.sidebar.open) (.IsAncestor $page) $active | default false }} + {{- $title := .LinkTitle | default .File.BaseFileName -}} +
    • + {{- template "custom-menu-link" dict "context" . "active" $active "title" $title "link" .RelPermalink -}} + {{- if and $toc $active -}} + {{ template "mobile-toc" dict "page" . }} + {{- end }} + {{ template "link-tree" dict "context" . "page" $page "pageURL" $page_url "level" (add $level 1) "toc" $toc }} +
    • + {{- end -}} +
    +
    + {{- end -}} + {{- end }} +{{- end -}} + +{{- define "mobile-toc" -}} + {{ $page := .page }} + {{ with $page.Fragments.Headings }} +
      + {{- range . }} + {{- with .Headings }} + {{- range . -}} +
    • + + {{- .Title -}} + +
    • + {{ end -}} + {{ end -}} + {{ end -}} +
    + {{ end }} +{{- end -}} + +{{- define "custom-menu-links" -}} + {{- range site.Menus.sidebar -}} + {{- $name := .Name -}} + {{ if eq .Params.type "separator" }} +
  • + {{ $name }} +
  • + {{ else }} +
  • {{ template "custom-menu-link" dict "active" false "title" $name "link" (.URL | relLangURL) }}
  • + {{ end }} + {{- end -}} +{{- end -}} + +{{- define "custom-menu-link" -}} + {{- $is_external := strings.HasPrefix .link "http" -}} + {{- $open := .open | default false -}} + + {{- .title -}} + {{- with .context }} + {{- if or .RegularPages .Sections }} + + + + {{- end }} + {{ end -}} + +{{- end -}} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/slides-embed.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/slides-embed.html new file mode 100644 index 0000000..3a3bbb7 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/slides-embed.html @@ -0,0 +1,155 @@ +{{/* + Hugo Blox Slides Embed Component - Reusable iframe embed with fullscreen support + Usage: {{ partial "components/slides-embed.html" (dict "page" . "slides_slug" .Params.slides) }} + + Params: + - page: current page context + - slides_slug: slug of slides to embed (e.g., "example") + - show_actions: (optional) show open/speaker notes links, default true + - title: (optional) title for iframe, defaults to page title +*/}} + +{{ $page := .page }} +{{ $slides_slug := .slides_slug }} +{{ $show_actions := .show_actions | default true }} +{{ $slides_label := i18n "slides" | default "Slides" }} +{{ $present_fullscreen_label := i18n "present_fullscreen" | default "Present (fullscreen)" }} +{{ $enter_fullscreen_label := i18n "enter_fullscreen" | default "Enter fullscreen" }} +{{ $exit_fullscreen_label := i18n "exit_fullscreen" | default "Exit fullscreen" }} +{{ $speaker_notes_hint := i18n "speaker_notes_hint" | default "for speaker notes" }} +{{ $slides_not_found_label := i18n "slides_not_found" | default "Slides not found" }} +{{ $embed_title := .title | default (printf "%s - %s" $page.Title $slides_label) }} + +{{/* Enable Alpine.js for fullscreen functionality */}} +{{ $page.Store.Set "has_alpine" true }} + +{{/* Get slides page */}} +{{ $slides_page := site.GetPage (printf "/slides/%s" $slides_slug) }} +{{ $scr := newScratch }} +{{ if $slides_page }} + {{ $scr.Set "slides_url" $slides_page.RelPermalink }} + {{ $scr.Set "present_url" $slides_page.RelPermalink }} + {{ $scr.Set "embed_url" $slides_page.RelPermalink }} + {{ $present_format := $slides_page.OutputFormats.Get "present" }} + {{ if not $present_format }} + {{ $present_format = $slides_page.OutputFormats.Get "Present" }} + {{ end }} + {{ with $present_format }} + {{ $scr.Set "present_url" .RelPermalink }} + {{ $scr.Set "embed_url" (printf "%s?embed=1" .RelPermalink) }} + {{ end }} +{{ end }} +{{ $slides_url := $scr.Get "slides_url" }} +{{ $present_url := $scr.Get "present_url" | default $slides_url }} +{{ $embed_url := $scr.Get "embed_url" | default $slides_url }} + +{{ if $slides_page }} +
    + {{/* Slides iframe container - wrapper for fullscreen API */}} +
    + + + {{/* Fullscreen toggle button - inside container for fullscreen visibility */}} + +
    + + {{ if $show_actions }} + {{/* Action links below embed */}} +
    +
    + {{/* Open in new tab */}} + + + + + {{ $present_fullscreen_label }} + + + {{/* Presentation mode hint */}} + + S + {{ $speaker_notes_hint }} + +
    +
    + {{ end }} +
    +{{ else }} +

    {{ $slides_not_found_label }}: {{ $slides_slug }}

    +{{ end }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/toc.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/toc.html new file mode 100644 index 0000000..33e3c49 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/components/toc.html @@ -0,0 +1,74 @@ +{{/* Table of Contents */}} + +{{- $toc := .Params.toc | default true -}} + +{{/* UI Text */}} +{{- $on_this_page := T "on_this_page" }} +{{- $edit_this_page := T "edit_page" }} + + + +{{/* Render Headings */}} +{{- define "toc-headings" -}} + {{- $headings := .headings -}} + {{- $level := .level -}} + {{- if ge $level 4 -}} + {{ return }} + {{- end -}} + + {{- $padding := (mul $level 4) -}}{{/* Requires inclusion in Tailwind safelist!! */}} + {{- $class := cond (eq $level 0) "font-semibold" (printf "pl-%d rtl:pr-%d" $padding $padding) -}} + + {{- range $headings }} + {{- if .Title }} +
  • + + {{- .Title | plainify | htmlUnescape -}} + +
  • + {{- end -}} + + {{- with .Headings -}} + {{ template "toc-headings" (dict "headings" . "level" (add $level 1)) }} + {{- end -}} + + {{- end -}} +{{- end -}} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/css.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/css.html new file mode 100644 index 0000000..8a69423 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/css.html @@ -0,0 +1,34 @@ +{{/* HB Tailwind CSS v4 Processing with Hugo's Native Function */}} +{{ with resources.Get "css/main.css" }} + {{/* Build dynamic @source list and prepend it before main.css */}} + {{ $dynamic_sources_str := partial "tailwind_sources.html" . }} + {{ $dynamic_sources_res := resources.FromString "css/_dynamic_sources.css" $dynamic_sources_str }} + + {{ $main_css := . }} + {{ $entry_parts := slice $dynamic_sources_res $main_css }} + + {{/* Auto-discover co-located block CSS: shared utilities first, then per-block styles */}} + {{ range resources.Match "css/hbx/blocks/shared/**/*.css" }} + {{ $entry_parts = $entry_parts | append . }} + {{ end }} + {{ range resources.Match "css/hbx/blocks/**/style.css" }} + {{ $entry_parts = $entry_parts | append . }} + {{ end }} + + {{/* Community block CSS (mounted by templates into dist/community/blox/) */}} + {{ range resources.Match "dist/community/blox/**/*.css" }} + {{ $entry_parts = $entry_parts | append . }} + {{ end }} + + {{ $entry := $entry_parts | resources.Concat "css/_entry.css" }} + {{ $opts := dict "minify" (not hugo.IsDevelopment) }} + {{ with $entry | css.TailwindCSS $opts }} + {{ if hugo.IsDevelopment }} + + {{ else }} + {{ with . | fingerprint }} + + {{ end }} + {{ end }} + {{ end }} +{{ end }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/docs_layout.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/docs_layout.html new file mode 100644 index 0000000..d0ead82 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/docs_layout.html @@ -0,0 +1,30 @@ +
    + {{ partial "components/sidebar.html" (dict "context" . "no_sidebar" false) }} + {{ partial "components/toc.html" . }} +
    +
    + {{ if (.Params.show_breadcrumb | default true) }} +
    + {{ partial "components/breadcrumb.html" . }} +
    + {{ end }} + + {{/* Pagefind metadata for search filtering */}} +
    +

    {{ .Title }}

    + {{ .Content }} + + {{/* Use hidden spans for filter values - best practice per Pagefind docs */}} + docs + {{ with .Params.categories }} + {{ index . 0 }} + {{ end }} +
    + + {{ partial "components/last-edited.html" . }} + {{ .Scratch.Set "invert_pager" true }} + {{ partial "components/next-in-series.html" . }} + {{ partial "comments.html" . }} +
    +
    +
    diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/build_links.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/build_links.html new file mode 100644 index 0000000..29936d6 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/build_links.html @@ -0,0 +1,283 @@ +{{/* + Hugo Blox Page Link Builder + Build a normalized list of page links from: + - Author-provided front matter `links` (array order respected) + - Auto-detected resources (local PDF, cite.bib) + - Derived identifiers from `hugoblox.ids` + - Associated internal `projects` references + + Inputs: dict { "page": . , "is_list": 0|1 } + Output: slice of dicts with fields: type, url, icon, labelKey, label, contexts, rel + + Deprecations handled with warnings and mapped: + - external_link -> type: site + - url_pdf -> type: pdf + - url_preprint -> type: preprint + - url_code -> type: code + - url_dataset -> type: dataset + - url_poster -> type: poster + - url_project -> type: project + - url_slides -> type: slides + - url_source -> type: source + - url_video -> type: video +*/}} + +{{ $page := .page }} +{{ $is_list := .is_list }} + +{{ $types := hugo.Data.link_types.types }} +{{ $derived := hugo.Data.link_types.derived }} + +{{ $links := slice }} +{{ $seen := newScratch }} +{{ $seen.Set "set" (dict) }} + +{{/* 1) Author-provided links (array order) */}} +{{ with $page.Params.links }} + {{ range . }} + {{/* Support new fields: type, url, icon (pack/name), label, contexts, rel; legacy: name */}} + {{ $type := .type | default "custom" }} + {{ $url := .url | default "" }} + {{/* Optional provider+id derivation for common platforms */}} + {{ if and (not $url) .id }} + {{ if eq $type "doi" }} + {{ $url = replace (index (index $derived "doi") "url_template") "{id}" (printf "%v" .id) }} + {{ else if and (eq $type "preprint") (eq .provider "arxiv") }} + {{ $url = replace (index (index $derived "arxiv") "url_template") "{id}" (printf "%v" .id) }} + {{ else if and (eq $type "preprint") (eq .provider "openreview") }} + {{ $url = replace (index (index $derived "openreview") "url_template") "{id}" (printf "%v" .id) }} + {{ end }} + {{ end }} + {{ $typeF := $type }} + {{ $urlF := $url }} + {{ $keyF := printf "%s::%s" $typeF $urlF }} + {{ if not ($seen.Get (printf "set.%s" $keyF)) }} + {{ $seen.SetInMap "set" $keyF true }} + {{ $links = $links | append (dict + "type" $typeF + "url" $urlF + "icon" (.icon | default (index (index $types $typeF) "icon") | default "hero/link") + "labelKey" (index (index $types $typeF) "label_i18n") + "label" (.label | default .name) + "contexts" (.contexts | default (slice "list" "page")) + "rel" .rel + ) }} + {{ end }} + {{ end }} +{{ end }} + +{{/* 2) Associated projects (internal) */}} +{{ with $page.Params.projects }} + {{ range . }} + {{ with (site.GetPage (printf "project/%s" .)) }} + {{ $typeF := "project" }} + {{ $urlF := .RelPermalink }} + {{ $keyF := printf "%s::%s" $typeF $urlF }} + {{ if not ($seen.Get (printf "set.%s" $keyF)) }} + {{ $seen.SetInMap "set" $keyF true }} + {{ $links = $links | append (dict + "type" $typeF + "url" $urlF + "icon" (index (index $types $typeF) "icon") + "labelKey" (index (index $types $typeF) "label_i18n") + "contexts" (slice "list" "page") + ) }} + {{ end }} + {{ end }} + {{ end }} +{{ end }} + +{{/* 2b) Slides relation parameter (legacy but common) */}} +{{ with $page.Params.slides }} + {{ if reflect.IsMap . }} + {{/* Skip: slides map is Reveal.js config for slide decks. */}} + {{ else if reflect.IsSlice . }} + {{ range . }} + {{ with (site.GetPage (printf "slides/%s" .)) }} + {{ $typeF := "slides" }} + {{ $urlF := .RelPermalink }} + {{ $keyF := printf "%s::%s" $typeF $urlF }} + {{ if not ($seen.Get (printf "set.%s" $keyF)) }} + {{ $seen.SetInMap "set" $keyF true }} + {{ $links = $links | append (dict + "type" $typeF + "url" $urlF + "icon" (index (index $types $typeF) "icon") + "labelKey" (index (index $types $typeF) "label_i18n") + "contexts" (slice "list" "page") + ) }} + {{ end }} + {{ else }} + {{ warnf "`slides` relation could not resolve to a page for %s" $page.File.Path }} + {{ end }} + {{ end }} + {{ else }} + {{ with (site.GetPage (printf "slides/%s" .)) }} + {{ $typeF := "slides" }} + {{ $urlF := .RelPermalink }} + {{ $keyF := printf "%s::%s" $typeF $urlF }} + {{ if not ($seen.Get (printf "set.%s" $keyF)) }} + {{ $seen.SetInMap "set" $keyF true }} + {{ $links = $links | append (dict + "type" $typeF + "url" $urlF + "icon" (index (index $types $typeF) "icon") + "labelKey" (index (index $types $typeF) "label_i18n") + "contexts" (slice "list" "page") + ) }} + {{ end }} + {{ else }} + {{ warnf "`slides` relation could not resolve to a page for %s" $page.File.Path }} + {{ end }} + {{ end }} +{{ end }} + +{{/* 3) Auto-detected resources (local PDF by content basename, cite.bib) */}} +{{ with $page.File.ContentBaseName }} + {{ with ($page.Resources.GetMatch (printf "%s.pdf" .)) }} + {{ $typeF := "pdf" }} + {{ $urlF := .RelPermalink }} + {{ $keyF := printf "%s::%s" $typeF $urlF }} + {{ if not ($seen.Get (printf "set.%s" $keyF)) }} + {{ $seen.SetInMap "set" $keyF true }} + {{ $links = $links | append (dict + "type" $typeF + "url" $urlF + "icon" (index (index $types $typeF) "icon") + "labelKey" (index (index $types $typeF) "label_i18n") + "contexts" (slice "list" "page") + ) }} + {{ end }} + {{ end }} +{{ end }} +{{ with ($page.Resources.GetMatch "cite.bib") }} + {{ $typeF := "bibtex" }} + {{ $urlF := .RelPermalink }} + {{ $keyF := printf "%s::%s" $typeF $urlF }} + {{ if not ($seen.Get (printf "set.%s" $keyF)) }} + {{ $seen.SetInMap "set" $keyF true }} + {{ $links = $links | append (dict + "type" $typeF + "url" $urlF + "icon" (index (index $types $typeF) "icon") + "labelKey" (index (index $types $typeF) "label_i18n") + "contexts" (slice "list" "page") + ) }} + {{ end }} +{{ end }} + +{{/* 4) Derived links from identifiers under `hugoblox.ids` */}} +{{ with $page.Params.hugoblox }} + {{ with .ids }} + {{ range $key, $val := . }} + {{ with (index $derived $key) }} + {{ $der := . }} + {{ $typeF := index $der "type" }} + {{ $urlF := replace (index $der "url_template") "{id}" (printf "%v" $val) }} + {{ $keyF := printf "%s::%s" $typeF $urlF }} + {{ if not ($seen.Get (printf "set.%s" $keyF)) }} + {{ $seen.SetInMap "set" $keyF true }} + {{ $links = $links | append (dict + "type" $typeF + "url" $urlF + "icon" (index $der "icon") + "labelKey" (index $der "label_i18n") + "contexts" (slice "list" "page") + ) }} + {{ end }} + {{ end }} + {{ end }} + {{ end }} +{{ end }} + +{{/* 5) Legacy fields -> deprecation warnings and normalized items */}} +{{/* external_link */}} +{{ with $page.Params.external_link }} + {{ warnf "`external_link` is deprecated. Use `links: [{type: site, url: ...}]` in %s" $page.File.Path }} + {{ $typeF := "site" }} + {{ $urlF := . }} + {{ $keyF := printf "%s::%s" $typeF $urlF }} + {{ if not ($seen.Get (printf "set.%s" $keyF)) }} + {{ $seen.SetInMap "set" $keyF true }} + {{ $links = $links | append (dict + "type" $typeF + "url" $urlF + "icon" (index (index $types $typeF) "icon") + "labelKey" (index (index $types $typeF) "label_i18n") + "contexts" (slice "list" "page") + ) }} + {{ end }} +{{ end }} +{{/* top-level doi */}} +{{ with $page.Params.doi }} + {{ warnf "Top-level `doi` is deprecated. Use `hugoblox.ids: { doi: ... }` in %s" $page.File.Path }} + {{ with (index $derived "doi") }} + {{ $der := . }} + {{ $typeF := index $der "type" }} + {{ $urlF := replace (index $der "url_template") "{id}" (printf "%v" $page.Params.doi) }} + {{ $keyF := printf "%s::%s" $typeF $urlF }} + {{ if not ($seen.Get (printf "set.%s" $keyF)) }} + {{ $seen.SetInMap "set" $keyF true }} + {{ $links = $links | append (dict + "type" $typeF + "url" $urlF + "icon" (index $der "icon") + "labelKey" (index $der "label_i18n") + "contexts" (slice "list" "page") + ) }} + {{ end }} + {{ else }} + {{ $typeF := "doi" }} + {{ $urlF := printf "https://doi.org/%v" $page.Params.doi }} + {{ $keyF := printf "%s::%s" $typeF $urlF }} + {{ if not ($seen.Get (printf "set.%s" $keyF)) }} + {{ $seen.SetInMap "set" $keyF true }} + {{ $links = $links | append (dict + "type" $typeF + "url" $urlF + "icon" (index (index $types $typeF) "icon") + "labelKey" (index (index $types $typeF) "label_i18n") + "contexts" (slice "list" "page") + ) }} + {{ end }} + {{ end }} +{{ end }} +{{/* Map of legacy url_* to new types */}} +{{ $legacy := dict + "url_pdf" "pdf" + "url_preprint" "preprint" + "url_code" "code" + "url_dataset" "dataset" + "url_poster" "poster" + "url_project" "project" + "url_slides" "slides" + "url_source" "source" + "url_video" "video" +}} +{{ range $legacyKey, $legacyType := $legacy }} + {{ with index $page.Params $legacyKey }} + {{ warnf "`%s` is deprecated. Use `links: [{type: %s, url: ...}]` in %s" $legacyKey $legacyType $page.File.Path }} + {{/* Resolve relative resource if present */}} + {{ $u := . }} + {{ with ($page.Resources.GetMatch $u) }} + {{ $u = .RelPermalink }} + {{ else }} + {{ $u = $u | relURL }} + {{ end }} + {{ $typeF := $legacyType }} + {{ $urlF := $u }} + {{ $keyF := printf "%s::%s" $typeF $urlF }} + {{ if not ($seen.Get (printf "set.%s" $keyF)) }} + {{ $seen.SetInMap "set" $keyF true }} + {{ $links = $links | append (dict + "type" $typeF + "url" $urlF + "icon" (index (index $types $typeF) "icon") + "labelKey" (index (index $types $typeF) "label_i18n") + "contexts" (slice "list" "page") + ) }} + {{ end }} + {{ end }} +{{ end }} + +{{- return $links -}} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/coerce_bool.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/coerce_bool.html new file mode 100644 index 0000000..1de9165 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/coerce_bool.html @@ -0,0 +1,20 @@ +{{ $value := .value }} +{{ $result := .default }} +{{ if ne $value nil }} + {{ $valueType := printf "%T" $value }} + {{ if eq $valueType "bool" }} + {{ $result = $value }} + {{ else if or (eq $valueType "int") (eq $valueType "int8") (eq $valueType "int16") (eq $valueType "int32") (eq $valueType "int64") (eq $valueType "uint") (eq $valueType "uint8") (eq $valueType "uint16") (eq $valueType "uint32") (eq $valueType "uint64") }} + {{ $result = ne (int $value) 0 }} + {{ else if or (eq $valueType "float32") (eq $valueType "float64") }} + {{ $result = ne (float $value) 0 }} + {{ else if eq $valueType "string" }} + {{ $trimmed := lower (strings.TrimSpace $value) }} + {{ if in (slice "1" "true" "yes" "y" "on") $trimmed }} + {{ $result = true }} + {{ else if in (slice "0" "false" "no" "n" "off") $trimmed }} + {{ $result = false }} + {{ end }} + {{ end }} +{{ end }} +{{ return $result }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/coerce_int.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/coerce_int.html new file mode 100644 index 0000000..5581c90 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/coerce_int.html @@ -0,0 +1,26 @@ +{{ $value := .value }} +{{ $result := .default }} +{{ if ne $value nil }} + {{ $valueType := printf "%T" $value }} + {{ if or (eq $valueType "int") (eq $valueType "int8") (eq $valueType "int16") (eq $valueType "int32") (eq $valueType "int64") (eq $valueType "uint") (eq $valueType "uint8") (eq $valueType "uint16") (eq $valueType "uint32") (eq $valueType "uint64") (eq $valueType "float32") (eq $valueType "float64") }} + {{ $result = int $value }} + {{ else if eq $valueType "string" }} + {{ $trimmed := strings.TrimSpace $value }} + {{ if gt (len (findRE "^-?[0-9]+$" $trimmed)) 0 }} + {{ $result = int $trimmed }} + {{ else if gt (len (findRE "^-?[0-9]*\\.[0-9]+$" $trimmed)) 0 }} + {{ $result = int (float $trimmed) }} + {{ end }} + {{ end }} +{{ end }} +{{ if isset . "min" }} + {{ if lt $result .min }} + {{ $result = .min }} + {{ end }} +{{ end }} +{{ if isset . "max" }} + {{ if gt $result .max }} + {{ $result = .max }} + {{ end }} +{{ end }} +{{ return $result }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/deep_merge.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/deep_merge.html new file mode 100644 index 0000000..ee4a518 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/deep_merge.html @@ -0,0 +1,21 @@ +{{/* Pragmatic deep merge for block sections: shallow merge + merge 'content' and 'design' submaps if present. b overrides a. */}} +{{- $a := .a -}} +{{- $b := .b -}} +{{- if and (reflect.IsMap $a) (reflect.IsMap $b) -}} + {{- $result := merge $a $b -}} + {{- /* merge 'content' submap */ -}} + {{- $ac := index $a "content" -}} + {{- $bc := index $b "content" -}} + {{- if and (reflect.IsMap $ac) (reflect.IsMap $bc) -}} + {{- $result = merge $result (dict "content" (merge $ac $bc)) -}} + {{- end -}} + {{- /* merge 'design' submap */ -}} + {{- $ad := index $a "design" -}} + {{- $bd := index $b "design" -}} + {{- if and (reflect.IsMap $ad) (reflect.IsMap $bd) -}} + {{- $result = merge $result (dict "design" (merge $ad $bd)) -}} + {{- end -}} + {{- return $result -}} +{{- else -}} + {{- return $b -}} +{{- end -}} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/demo_theme_styles.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/demo_theme_styles.html new file mode 100644 index 0000000..3b78502 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/demo_theme_styles.html @@ -0,0 +1,31 @@ +{{/* + HugoBlox Theme Engine: Demo Theme Styles + Generates CSS variables for ALL available theme packs. + Used for the "Theme Pack Chooser" demo feature. +*/}} + +{{ $typography_config := .typography }} +{{ $layout_config := .layout }} + + diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/embed/github.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/embed/github.html new file mode 100644 index 0000000..e78676f --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/embed/github.html @@ -0,0 +1,97 @@ +{{/* + Hugo Blox GitHub Platform Configuration + Part of Hugo Blox embed system + + Parameters: + - resource: repository identifier (e.g., "owner/repo") + - type: "repo", "gist", etc. + - user: username/organization + - customUrl: optional override URL +*/}} + +{{- $resource := .resource -}} +{{- $type := .type | default "repo" -}} +{{- $user := .user -}} +{{- $customUrl := .customUrl -}} +{{- $showThumbnail := .showThumbnail | default false -}} +{{- $width := .width | default 600 -}} +{{- $height := .height | default 315 -}} +{{- $quality := .quality | default 85 -}} +{{- $formats := .formats | default (slice "avif" "webp" "jpg") -}} + +{{- $config := dict -}} + +{{- if $resource -}} + {{- if eq $type "repo" -}} + {{- if $showThumbnail -}} + {{- $config = dict + "apiUrl" (print "https://api.github.com/repos/" $resource) + "repoLink" (print "https://github.com/" $resource) + "imageUrl" (print "https://opengraph.githubassets.com/0/" $resource) + "icon" "code-bracket" + "brandColors" (slice "slate-800" "slate-900") + "typeColor" "primary-500" + "isImageEmbed" true + "imageProcessing" (dict + "width" $width + "height" $height + "quality" $quality + "formats" $formats + "sizes" (slice 400 600 800) + ) + "statsConfig" (dict + "stars" (dict "icon" "star" "color" "yellow-500" "field" "stargazers_count") + "forks" (dict "icon" "git-fork" "color" "primary-500" "field" "forks_count") + "issues" (dict "icon" "exclamation-circle" "color" "red-500" "field" "open_issues_count") + ) + "titleField" "name" + "descriptionField" "description" + "subtypeField" "language" + "ownerField" "owner.login" + -}} + {{- else -}} + {{- $config = dict + "apiUrl" (print "https://api.github.com/repos/" $resource) + "repoLink" (print "https://github.com/" $resource) + "icon" "code-bracket" + "brandColors" (slice "slate-800" "slate-900") + "typeColor" "primary-500" + "statsConfig" (dict + "stars" (dict "icon" "star" "color" "yellow-500" "field" "stargazers_count") + "forks" (dict "icon" "git-fork" "color" "primary-500" "field" "forks_count") + "issues" (dict "icon" "exclamation-circle" "color" "red-500" "field" "open_issues_count") + ) + "titleField" "name" + "descriptionField" "description" + "subtypeField" "language" + "ownerField" "owner.login" + -}} + {{- end -}} + {{- else if eq $type "gist" -}} + {{- $config = dict + "apiUrl" (print "https://api.github.com/gists/" $resource) + "repoLink" (print "https://gist.github.com/" $resource) + "icon" "document-text" + "brandColors" (slice "slate-800" "slate-900") + "typeColor" "secondary-500" + "titleField" "description" + "descriptionField" "description" + -}} + {{- else -}} + {{- $config = dict + "repoLink" (print "https://github.com/" $resource) + "icon" "link" + "brandColors" (slice "slate-800" "slate-900") + "typeColor" "zinc-500" + -}} + {{- end -}} +{{- else if $customUrl -}} + {{- $config = dict + "repoLink" $customUrl + "icon" "link" + "brandColors" (slice "slate-800" "slate-900") + "typeColor" "zinc-500" + -}} +{{- end -}} + +{{ return $config }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/embed/hbx_content_section.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/embed/hbx_content_section.html new file mode 100644 index 0000000..efe6b20 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/embed/hbx_content_section.html @@ -0,0 +1,107 @@ +{{/* + Content section rendering for embed cards + + Parameters: + - customDescription: user-provided description override + - embedData: data fetched from API + - platform: platform name + - hb_id: Hugo Blox unique identifier + - config: platform configuration + - processedImage: processed image data (for image embeds) +*/}} + +{{- $customDescription := .customDescription -}} +{{- $embedData := .embedData -}} +{{- $platform := .platform -}} +{{- $hb_id := .hb_id -}} +{{- $config := .config -}} +{{- $processedImage := .processedImage -}} + +{{/* Display processed image if available */}} +{{- if $processedImage -}} +
    + {{ if $customDescription }}{{ $customDescription }}{{ else if and $embedData $config.titleField }}{{ index $embedData $config.titleField }}{{ else }}Embedded image{{ end }} +
    +{{- end -}} + +{{/* Description handling */}} +{{- $description := $customDescription -}} +{{- if and (not $description) $embedData $config.descriptionField -}} + {{- $description = index $embedData $config.descriptionField -}} + {{/* Apply platform-specific cleanup */}} + {{- if $config.descriptionCleanup -}} + {{- $description = $description | replaceRE $config.descriptionCleanup "" -}} + {{- end -}} +{{- end -}} + +{{- if $description -}} +

    + {{ $description | plainify | htmlUnescape | truncate 200 | emojify }} +

    +{{- end -}} + +{{/* Platform-specific stats section */}} +{{- if and $embedData $config.statsConfig -}} +
    + {{- range $statKey, $statConfig := $config.statsConfig -}} + {{- $statValue := index $embedData $statConfig.field -}} + {{- if $statValue -}} +
    + {{ partial "functions/get_icon" (dict "name" $statConfig.icon "attributes" (printf "class=\"w-4 h-4 text-%s\"" $statConfig.color)) }} + {{- if and (eq $platform "github") (eq $statKey "issues") -}} + {{/* Make issues count clickable for GitHub */}} + + {{- if gt $statValue 999 -}} + {{- if gt $statValue 999999 -}} + {{ div $statValue 1000000 }}M + {{- else -}} + {{ div $statValue 1000 }}k + {{- end -}} + {{- else -}} + {{ $statValue }} + {{- end -}} + + {{- else -}} + + {{- if gt $statValue 999 -}} + {{- if gt $statValue 999999 -}} + {{ div $statValue 1000000 }}M + {{- else -}} + {{ div $statValue 1000 }}k + {{- end -}} + {{- else -}} + {{ $statValue }} + {{- end -}} + + {{- end -}} +
    + {{- end -}} + {{- end -}} +
    +{{- end -}} + +{{/* Additional platform-specific content */}} +{{- if eq $platform "github" -}} + {{/* Show additional GitHub-specific info if available */}} + {{- if and $embedData $embedData.topics -}} +
    + {{- range first 3 $embedData.topics -}} + + {{ . | emojify }} + + {{- end -}} + {{- if gt (len $embedData.topics) 3 -}} + +{{ sub (len $embedData.topics) 3 }} + {{- end -}} +
    + {{- end -}} +{{- end -}} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/embed/hbx_platform_icon.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/embed/hbx_platform_icon.html new file mode 100644 index 0000000..838b083 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/embed/hbx_platform_icon.html @@ -0,0 +1,28 @@ +{{/* + Platform icon rendering + + Parameters: + - platform: platform name (huggingface, github, etc.) + - config: platform configuration dict + - hb_id: Hugo Blox unique identifier for the embed +*/}} + +{{- $platform := .platform -}} +{{- $config := .config -}} +{{- $hb_id := .hb_id -}} + +{{- if eq $platform "huggingface" -}} +
    + {{ partial "functions/get_icon" (dict "name" "brands/huggingface" "attributes" "class=\"w-6 h-6 text-white\"") }} +
    +{{- else if eq $platform "github" -}} +
    + {{ partial "functions/get_icon" (dict "name" "brands/github" "attributes" "class=\"w-6 h-6 text-white\"") }} +
    +{{- else -}} + {{/* Custom/generic embeds use neutral styling */}} +
    + {{ partial "functions/get_icon" (dict "name" ($config.icon | default "globe-alt") "attributes" "class=\"w-5 h-5 text-white\"") }} +
    +{{- end -}} + diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/embed/hbx_title_section.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/embed/hbx_title_section.html new file mode 100644 index 0000000..1585b85 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/embed/hbx_title_section.html @@ -0,0 +1,162 @@ +{{/* + Title section rendering for embed cards + + Parameters: + - hb_id: Hugo Blox unique identifier + - customTitle: user-provided title override + - embedData: data fetched from API + - customUrl: custom URL if provided + - resource: platform resource identifier + - type: resource type + - platform: platform name + - config: platform configuration +*/}} + +{{- $hb_id := .hb_id -}} +{{- $customTitle := .customTitle -}} +{{- $embedData := .embedData -}} +{{- $customUrl := .customUrl -}} +{{- $resource := .resource -}} +{{- $type := .type -}} +{{- $platform := .platform -}} +{{- $config := .config -}} + +

    + + {{- if $customTitle -}} + {{ $customTitle | emojify }} + {{- else if and $embedData $config.titleField -}} + {{ index $embedData $config.titleField | emojify }} + {{- else if and $embedData $embedData.name -}} + {{ $embedData.name | emojify }} + {{- else if and $embedData $embedData.id -}} + {{ $embedData.id | emojify }} + {{- else if $customUrl -}} + {{- $parsed := urls.Parse $customUrl -}} + {{ $parsed.Host | emojify }} + {{- else if $resource -}} + {{- if eq $platform "github" -}} + {{/* For GitHub, show just the repo name, not the full "owner/repo" */}} + {{- $parts := split $resource "/" -}} + {{- if gt (len $parts) 1 -}} + {{ index $parts 1 | emojify }} + {{- else -}} + {{ $resource | emojify }} + {{- end -}} + {{- else -}} + {{ $resource | emojify }} + {{- end -}} + {{- else -}} + Embedded Resource + {{- end -}} + +

    + +{{/* Resource type and subtype indicator */}} +{{- $showTypeIndicator := false -}} +{{- $typeText := "" -}} +{{- $typeColor := $config.typeColor | default "zinc-500" -}} + +{{/* Always show type indicator for GitHub repos with data */}} +{{- if and (eq $platform "github") $embedData $config.ownerField -}} + {{- $showTypeIndicator = true -}} +{{- end -}} + +{{/* Force metadata line for custom embeds to ensure proper alignment */}} +{{- if eq $platform "custom" -}} + {{- $showTypeIndicator = true -}} +{{- end -}} + +{{- if $type -}} + {{- $showTypeIndicator = true -}} + {{- if and $embedData $config.subtypeField -}} + {{- if $config.subtypeIndex -}} + {{- $subtypes := index $embedData $config.subtypeField -}} + {{- if $subtypes -}} + {{- $typeText = index $subtypes $config.subtypeIndex -}} + {{- else -}} + {{- $typeText = $type -}} + {{- end -}} + {{- else -}} + {{- $typeText = index $embedData $config.subtypeField | default $type -}} + {{- end -}} + {{- else -}} + {{- $typeText = $type -}} + {{- end -}} +{{- else if and $embedData $config.subtypeField -}} + {{- $showTypeIndicator = true -}} + {{- if $config.subtypeIndex -}} + {{- $subtypes := index $embedData $config.subtypeField -}} + {{- if $subtypes -}} + {{- $typeText = index $subtypes $config.subtypeIndex -}} + {{- end -}} + {{- else -}} + {{- $typeText = index $embedData $config.subtypeField -}} + {{- end -}} +{{- end -}} + +{{- if $showTypeIndicator -}} +
    + {{/* GitHub repos: Show owner prominently, then language */}} + {{- if eq $platform "github" -}} + {{- $owner := "" -}} + {{/* Get owner from API data if available */}} + {{- if $embedData -}} + {{- if eq $config.ownerField "owner.login" -}} + {{/* Handle nested GitHub API structure: embedData.owner.login */}} + {{- $ownerObj := index $embedData "owner" -}} + {{- if $ownerObj -}} + {{- $owner = index $ownerObj "login" -}} + {{- end -}} + {{- else if $config.ownerField -}} + {{/* Handle simple field access */}} + {{- $owner = index $embedData $config.ownerField -}} + {{- end -}} + {{- end -}} + + {{/* Fallback: extract owner from resource string (e.g., "HugoBlox/kit" -> "HugoBlox") */}} + {{- if and (not $owner) $resource -}} + {{- $parts := split $resource "/" -}} + {{- if gt (len $parts) 0 -}} + {{- $owner = index $parts 0 -}} + {{- end -}} + {{- end -}} + + {{- if $owner -}} + by + {{ $owner | emojify }} + + {{- if $typeText -}} + + + {{ $typeText | emojify }} + {{- end -}} + {{- else if $typeText -}} + {{/* No owner, just show type */}} + + {{ $typeText | emojify }} + {{- end -}} + {{- else if eq $platform "custom" -}} + {{/* Custom embeds: Show domain or minimal placeholder for consistent alignment */}} + {{- if $customUrl -}} + {{- $parsed := urls.Parse $customUrl -}} + {{- $domain := $parsed.Host -}} + {{ $domain | emojify }} + {{- else -}} + {{/* Minimal placeholder to maintain visual spacing */}} + external resource + {{- end -}} + {{- else -}} + {{/* Other platforms: Show type with indicator */}} + {{- if $typeText -}} + + + {{ $typeText | emojify }} + + {{- else -}} + {{/* Minimal placeholder for consistent spacing */}} + platform resource + {{- end -}} + {{- end -}} +
    +{{- end -}} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/embed/huggingface.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/embed/huggingface.html new file mode 100644 index 0000000..9920bea --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/embed/huggingface.html @@ -0,0 +1,67 @@ +{{/* + HuggingFace platform configuration + + Parameters: + - resource: model or dataset identifier + - type: "model" or "dataset" + - customUrl: optional override URL +*/}} + +{{- $resource := .resource -}} +{{- $type := .type -}} +{{- $customUrl := .customUrl -}} + +{{- $config := dict -}} + +{{- if $resource -}} + {{- if eq $type "model" -}} + {{- $config = dict + "apiUrl" (print "https://huggingface.co/api/models/" $resource) + "repoLink" (print "https://huggingface.co/" $resource) + "icon" "cpu-chip" + "brandColors" (slice "yellow-400" "orange-500") + "typeColor" "secondary-500" + "statsConfig" (dict + "likes" (dict "icon" "heart" "color" "secondary-500" "field" "likes") + "downloads" (dict "icon" "arrow-down-tray" "color" "primary-500" "field" "downloads") + ) + "titleField" "id" + "descriptionField" "description" + "descriptionCleanup" `Dataset Card for .+\s+Dataset Summary\s+` + "subtypeField" "pipeline_tag" + -}} + {{- else if eq $type "dataset" -}} + {{- $config = dict + "apiUrl" (print "https://huggingface.co/api/datasets/" $resource) + "repoLink" (print "https://huggingface.co/datasets/" $resource) + "icon" "circle-stack" + "brandColors" (slice "yellow-400" "orange-500") + "typeColor" "primary-500" + "statsConfig" (dict + "likes" (dict "icon" "heart" "color" "secondary-500" "field" "likes") + "downloads" (dict "icon" "arrow-down-tray" "color" "primary-500" "field" "downloads") + ) + "titleField" "id" + "descriptionField" "description" + "descriptionCleanup" `Dataset Card for .+\s+Dataset Summary\s+` + "subtypeField" "task_categories" + "subtypeIndex" 0 + -}} + {{- else -}} + {{- $config = dict + "repoLink" (print "https://huggingface.co/" $resource) + "icon" "link" + "brandColors" (slice "yellow-400" "orange-500") + "typeColor" "zinc-500" + -}} + {{- end -}} +{{- else if $customUrl -}} + {{- $config = dict + "repoLink" $customUrl + "icon" "link" + "brandColors" (slice "yellow-400" "orange-500") + "typeColor" "zinc-500" + -}} +{{- end -}} + +{{ return $config }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/generate_color_scale.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/generate_color_scale.html new file mode 100644 index 0000000..ad69682 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/generate_color_scale.html @@ -0,0 +1,124 @@ +{{/* + Hugo Blox Kit: Generate Color Scale + Generate Tailwind-like 50–950 scale for a given color. + Supports palette names and hex values. +*/}} +{{ $name := .name }} +{{ $colorInput := .color | lower }} + +{{/* Tailwind 4 Color Palette Lookup Table (OKLCH/Hex) */}} +{{ $tailwind_palette := dict + "red" (dict "50" "oklch(0.971 0.013 17.38)" "100" "oklch(0.936 0.032 17.717)" "200" "oklch(0.885 0.062 18.334)" "300" "oklch(0.808 0.114 19.571)" "400" "oklch(0.704 0.191 22.216)" "500" "oklch(0.637 0.237 25.331)" "600" "oklch(0.577 0.245 27.325)" "700" "oklch(0.505 0.213 27.518)" "800" "oklch(0.444 0.177 26.899)" "900" "oklch(0.396 0.141 25.723)" "950" "oklch(0.258 0.092 26.042)") + "orange" (dict "50" "oklch(0.98 0.016 73.684)" "100" "oklch(0.954 0.038 75.164)" "200" "oklch(0.901 0.076 70.697)" "300" "oklch(0.837 0.128 66.29)" "400" "oklch(0.75 0.183 55.934)" "500" "oklch(0.705 0.213 47.604)" "600" "oklch(0.646 0.222 41.116)" "700" "oklch(0.553 0.195 38.402)" "800" "oklch(0.47 0.157 37.304)" "900" "oklch(0.408 0.123 38.172)" "950" "oklch(0.266 0.079 36.259)") + "amber" (dict "50" "oklch(0.987 0.022 95.277)" "100" "oklch(0.962 0.059 95.617)" "200" "oklch(0.924 0.12 95.746)" "300" "oklch(0.879 0.169 91.605)" "400" "oklch(0.828 0.189 84.429)" "500" "oklch(0.769 0.188 70.08)" "600" "oklch(0.666 0.179 58.318)" "700" "oklch(0.555 0.163 48.998)" "800" "oklch(0.473 0.137 46.201)" "900" "oklch(0.414 0.112 45.904)" "950" "oklch(0.279 0.077 45.635)") + "yellow" (dict "50" "oklch(0.987 0.026 102.212)" "100" "oklch(0.973 0.071 103.193)" "200" "oklch(0.945 0.129 101.54)" "300" "oklch(0.905 0.182 98.111)" "400" "oklch(0.852 0.199 91.936)" "500" "oklch(0.795 0.184 86.047)" "600" "oklch(0.681 0.162 75.834)" "700" "oklch(0.554 0.135 66.442)" "800" "oklch(0.476 0.114 61.907)" "900" "oklch(0.421 0.095 57.708)" "950" "oklch(0.286 0.066 53.813)") + "lime" (dict "50" "oklch(0.986 0.031 120.757)" "100" "oklch(0.967 0.067 122.328)" "200" "oklch(0.938 0.127 124.321)" "300" "oklch(0.897 0.196 126.665)" "400" "oklch(0.841 0.238 128.85)" "500" "oklch(0.768 0.233 130.85)" "600" "oklch(0.648 0.2 131.684)" "700" "oklch(0.532 0.157 131.589)" "800" "oklch(0.453 0.124 130.933)" "900" "oklch(0.405 0.101 131.063)" "950" "oklch(0.274 0.072 132.109)") + "green" (dict "50" "oklch(0.982 0.018 155.826)" "100" "oklch(0.962 0.044 156.743)" "200" "oklch(0.925 0.084 155.995)" "300" "oklch(0.871 0.15 154.449)" "400" "oklch(0.792 0.209 151.711)" "500" "oklch(0.723 0.219 149.579)" "600" "oklch(0.627 0.194 149.214)" "700" "oklch(0.527 0.154 150.069)" "800" "oklch(0.448 0.119 151.328)" "900" "oklch(0.393 0.095 152.535)" "950" "oklch(0.266 0.065 152.934)") + "emerald" (dict "50" "oklch(0.979 0.021 166.113)" "100" "oklch(0.95 0.052 163.051)" "200" "oklch(0.905 0.093 164.15)" "300" "oklch(0.845 0.143 164.978)" "400" "oklch(0.765 0.177 163.223)" "500" "oklch(0.696 0.17 162.48)" "600" "oklch(0.596 0.145 163.225)" "700" "oklch(0.508 0.118 165.612)" "800" "oklch(0.432 0.095 166.913)" "900" "oklch(0.378 0.077 168.94)" "950" "oklch(0.262 0.051 172.552)") + "teal" (dict "50" "oklch(0.984 0.014 180.72)" "100" "oklch(0.953 0.051 180.801)" "200" "oklch(0.91 0.096 180.426)" "300" "oklch(0.855 0.138 181.071)" "400" "oklch(0.777 0.152 181.912)" "500" "oklch(0.704 0.14 182.503)" "600" "oklch(0.6 0.118 184.704)" "700" "oklch(0.511 0.096 186.391)" "800" "oklch(0.437 0.078 188.216)" "900" "oklch(0.386 0.063 188.416)" "950" "oklch(0.277 0.046 192.524)") + "cyan" (dict "50" "oklch(0.984 0.019 200.873)" "100" "oklch(0.956 0.045 203.388)" "200" "oklch(0.917 0.08 205.041)" "300" "oklch(0.865 0.127 207.078)" "400" "oklch(0.789 0.154 211.53)" "500" "oklch(0.715 0.143 215.221)" "600" "oklch(0.609 0.126 221.723)" "700" "oklch(0.52 0.105 223.128)" "800" "oklch(0.45 0.085 224.283)" "900" "oklch(0.398 0.07 227.392)" "950" "oklch(0.302 0.056 229.695)") + "sky" (dict "50" "oklch(0.977 0.013 236.62)" "100" "oklch(0.951 0.026 236.824)" "200" "oklch(0.901 0.058 230.902)" "300" "oklch(0.828 0.111 230.318)" "400" "oklch(0.746 0.16 232.661)" "500" "oklch(0.685 0.169 237.323)" "600" "oklch(0.588 0.158 241.966)" "700" "oklch(0.5 0.134 242.749)" "800" "oklch(0.443 0.11 240.79)" "900" "oklch(0.391 0.09 240.876)" "950" "oklch(0.293 0.066 243.157)") + "blue" (dict "50" "oklch(0.97 0.014 254.604)" "100" "oklch(0.932 0.032 255.585)" "200" "oklch(0.882 0.059 254.128)" "300" "oklch(0.809 0.105 251.813)" "400" "oklch(0.707 0.165 254.624)" "500" "oklch(0.623 0.214 259.815)" "600" "oklch(0.546 0.245 262.881)" "700" "oklch(0.488 0.243 264.376)" "800" "oklch(0.424 0.199 265.638)" "900" "oklch(0.379 0.146 265.522)" "950" "oklch(0.282 0.091 267.935)") + "indigo" (dict "50" "oklch(0.962 0.018 272.314)" "100" "oklch(0.93 0.034 272.788)" "200" "oklch(0.87 0.065 274.039)" "300" "oklch(0.785 0.115 274.713)" "400" "oklch(0.673 0.182 276.935)" "500" "oklch(0.585 0.233 277.117)" "600" "oklch(0.511 0.262 276.966)" "700" "oklch(0.457 0.24 277.023)" "800" "oklch(0.398 0.195 277.366)" "900" "oklch(0.359 0.144 278.697)" "950" "oklch(0.257 0.09 281.288)") + "violet" (dict "50" "oklch(0.969 0.016 293.756)" "100" "oklch(0.943 0.029 294.588)" "200" "oklch(0.894 0.057 293.283)" "300" "oklch(0.811 0.111 293.571)" "400" "oklch(0.702 0.183 293.541)" "500" "oklch(0.606 0.25 292.717)" "600" "oklch(0.541 0.281 293.009)" "700" "oklch(0.491 0.27 292.581)" "800" "oklch(0.432 0.232 292.759)" "900" "oklch(0.38 0.189 293.745)" "950" "oklch(0.283 0.141 291.089)") + "purple" (dict "50" "oklch(0.977 0.014 308.299)" "100" "oklch(0.946 0.033 307.174)" "200" "oklch(0.902 0.063 306.703)" "300" "oklch(0.827 0.119 306.383)" "400" "oklch(0.714 0.203 305.504)" "500" "oklch(0.627 0.265 303.9)" "600" "oklch(0.558 0.288 302.321)" "700" "oklch(0.496 0.265 301.924)" "800" "oklch(0.438 0.218 303.724)" "900" "oklch(0.381 0.176 304.987)" "950" "oklch(0.291 0.149 302.717)") + "fuchsia" (dict "50" "oklch(0.977 0.017 320.058)" "100" "oklch(0.952 0.037 318.852)" "200" "oklch(0.903 0.076 319.62)" "300" "oklch(0.833 0.145 321.434)" "400" "oklch(0.74 0.238 322.16)" "500" "oklch(0.667 0.295 322.15)" "600" "oklch(0.591 0.293 322.896)" "700" "oklch(0.518 0.253 323.949)" "800" "oklch(0.452 0.211 324.591)" "900" "oklch(0.401 0.17 325.612)" "950" "oklch(0.293 0.136 325.661)") + "pink" (dict "50" "oklch(0.971 0.014 343.198)" "100" "oklch(0.948 0.028 342.258)" "200" "oklch(0.899 0.061 343.231)" "300" "oklch(0.823 0.12 346.018)" "400" "oklch(0.718 0.202 349.761)" "500" "oklch(0.656 0.241 354.308)" "600" "oklch(0.592 0.249 0.584)" "700" "oklch(0.525 0.223 3.958)" "800" "oklch(0.459 0.187 3.815)" "900" "oklch(0.408 0.153 2.432)" "950" "oklch(0.284 0.109 3.907)") + "rose" (dict "50" "oklch(0.969 0.015 12.422)" "100" "oklch(0.941 0.03 12.58)" "200" "oklch(0.892 0.058 10.001)" "300" "oklch(0.81 0.117 11.638)" "400" "oklch(0.712 0.194 13.428)" "500" "oklch(0.645 0.246 16.439)" "600" "oklch(0.586 0.253 17.585)" "700" "oklch(0.514 0.222 16.935)" "800" "oklch(0.455 0.188 13.697)" "900" "oklch(0.41 0.159 10.272)" "950" "oklch(0.271 0.105 12.094)") + "slate" (dict "50" "oklch(0.984 0.003 247.858)" "100" "oklch(0.968 0.007 247.896)" "200" "oklch(0.929 0.013 255.508)" "300" "oklch(0.869 0.022 252.894)" "400" "oklch(0.704 0.04 256.788)" "500" "oklch(0.554 0.046 257.417)" "600" "oklch(0.446 0.043 257.281)" "700" "oklch(0.372 0.044 257.287)" "800" "oklch(0.279 0.041 260.031)" "900" "oklch(0.208 0.042 265.755)" "950" "oklch(0.129 0.042 264.695)") + "gray" (dict "50" "oklch(0.985 0.002 247.839)" "100" "oklch(0.967 0.003 264.542)" "200" "oklch(0.928 0.006 264.531)" "300" "oklch(0.872 0.01 258.338)" "400" "oklch(0.707 0.022 261.325)" "500" "oklch(0.551 0.027 264.364)" "600" "oklch(0.446 0.03 256.802)" "700" "oklch(0.373 0.034 259.733)" "800" "oklch(0.278 0.033 256.848)" "900" "oklch(0.21 0.034 264.665)" "950" "oklch(0.13 0.028 261.692)") + "zinc" (dict "50" "oklch(0.985 0 0)" "100" "oklch(0.967 0.001 286.375)" "200" "oklch(0.92 0.004 286.32)" "300" "oklch(0.871 0.006 286.286)" "400" "oklch(0.705 0.015 286.067)" "500" "oklch(0.552 0.016 285.938)" "600" "oklch(0.442 0.017 285.786)" "700" "oklch(0.37 0.013 285.805)" "800" "oklch(0.274 0.006 286.033)" "900" "oklch(0.21 0.006 285.885)" "950" "oklch(0.141 0.005 285.823)") + "neutral" (dict "50" "oklch(0.985 0 0)" "100" "oklch(0.97 0 0)" "200" "oklch(0.922 0 0)" "300" "oklch(0.87 0 0)" "400" "oklch(0.708 0 0)" "500" "oklch(0.556 0 0)" "600" "oklch(0.439 0 0)" "700" "oklch(0.371 0 0)" "800" "oklch(0.269 0 0)" "900" "oklch(0.205 0 0)" "950" "oklch(0.145 0 0)") + "stone" (dict "50" "oklch(0.985 0.001 106.423)" "100" "oklch(0.97 0.001 106.424)" "200" "oklch(0.923 0.003 48.717)" "300" "oklch(0.869 0.005 56.366)" "400" "oklch(0.709 0.01 56.259)" "500" "oklch(0.553 0.013 58.071)" "600" "oklch(0.444 0.011 73.639)" "700" "oklch(0.374 0.01 67.558)" "800" "oklch(0.268 0.007 34.298)" "900" "oklch(0.216 0.006 56.043)" "950" "oklch(0.147 0.004 49.25)") +}} + +{{ if hasPrefix $colorInput "#" }} + {{/* + HEX PATH: Custom Brand Color + Generate an accessible 50-950 scale by mixing the hex base with white (tints) and black (shades). + We map the user's hex to the '500' slot and interpolate outwards. + */}} + {{ $r := 0 }}{{ $g := 0 }}{{ $b := 0 }} + {{ if eq (len $colorInput) 7 }} + {{ $r = printf "0x%s" (substr $colorInput 1 2) | int }} + {{ $g = printf "0x%s" (substr $colorInput 3 2) | int }} + {{ $b = printf "0x%s" (substr $colorInput 5 2) | int }} + {{ end }} + + {{/* Base (500) */}} + --hb-{{$name}}-500-rgb: {{ $r }} {{ $g }} {{ $b }}; + --color-{{$name}}-500: rgb(var(--hb-{{$name}}-500-rgb)); + + {{/* Tints (50-400): Mix with White */}} + {{ $tints := slice + (dict "shade" "50" "percent" 95) + (dict "shade" "100" "percent" 90) + (dict "shade" "200" "percent" 80) + (dict "shade" "300" "percent" 70) + (dict "shade" "400" "percent" 60) + }} + {{ range $tints }} + {{ $p := .percent }} + {{ $rp := div (add (mul $r (sub 100 $p)) (mul 255 $p)) 100 }} + {{ $gp := div (add (mul $g (sub 100 $p)) (mul 255 $p)) 100 }} + {{ $bp := div (add (mul $b (sub 100 $p)) (mul 255 $p)) 100 }} + --hb-{{$name}}-{{ .shade }}-rgb: {{ $rp }} {{ $gp }} {{ $bp }}; + --color-{{$name}}-{{ .shade }}: rgb(var(--hb-{{$name}}-{{ .shade }}-rgb)); + {{ end }} + + {{/* Shades (600-950): Mix with Black */}} + {{ $shades := slice + (dict "shade" "600" "percent" 10) + (dict "shade" "700" "percent" 20) + (dict "shade" "800" "percent" 35) + (dict "shade" "900" "percent" 50) + (dict "shade" "950" "percent" 70) + }} + {{ range $shades }} + {{ $p := .percent }} + {{ $rp := div (mul $r (sub 100 $p)) 100 }} + {{ $gp := div (mul $g (sub 100 $p)) 100 }} + {{ $bp := div (mul $b (sub 100 $p)) 100 }} + --hb-{{$name}}-{{ .shade }}-rgb: {{ $rp }} {{ $gp }} {{ $bp }}; + --color-{{$name}}-{{ .shade }}: rgb(var(--hb-{{$name}}-{{ .shade }}-rgb)); + {{ end }} + +{{ else }} + {{/* + PALETTE PATH: Standard Tailwind Colors + Look up the exact OKLCH values for the requested palette (e.g. "indigo"). + This ensures complete visual consistency with standard Tailwind utilities. + */}} + {{ $palette := index $tailwind_palette $colorInput }} + + {{ if $palette }} + {{ range $shade, $value := $palette }} + {{/* Note: converting OKLCH to raw RGB CSS vars requires Tailwind 4's internal conversion + or we output the raw color value directly if theme.css supports it. + + The existing system expects --hb-primary-50-rgb to be a comma-less RGB triplet "255 255 255". + However, Tailwind 4 supports OKLCH natively. + + CRITICAL FIX: We must override the `rgb(var(...))` wrapper in `theme.css` if we want to use OKLCH. + OR we just output the RGB approximation if we want to keep `theme.css` untouched. + + BUT `theme.css` defines: --color-primary-50: rgb(var(--hb-primary-50-rgb)); + So we MUST provide RGB triplets. OKLCH strings like "oklch(...)" inside `rgb(...)` is invalid CSS. + + To fix this properly without changing `theme.css` significantly, we need RGB values in this table, + OR we redefine the higher-level variables. + + Since we cannot easily calculate OKLCH -> RGB in Hugo templates, we should + OUTPUT THE HIGHER LEVEL VARIABLES directly here to override theme.css. + */}} + --color-{{$name}}-{{$shade}}: {{ $value }}; + {{ end }} + + {{/* Also set the legacy RGB vars to a fallback (500 shade) to prevent breakage + in case something accesses the raw -rgb var directly, though unlikely */}} + --hb-{{$name}}-500-rgb: 128 128 128; + {{ else }} + {{/* Unknown palette '{{$colorInput}}', falling back to Indigo-like default */}} + {{ partial "functions/generate_color_scale" (dict "name" $name "color" "#6366f1") }} + {{ end }} +{{ end }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get-block-scripts.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get-block-scripts.html new file mode 100644 index 0000000..c577222 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get-block-scripts.html @@ -0,0 +1,19 @@ +{{/* + Get Block Scripts + Discovers and returns a slice of JavaScript files for blocks used on the current page. +*/}} +{{ $block_scripts := slice }} +{{ if .IsPage }} + {{/* Get the list of unique block types used on this page from the Page Store */}} + {{ $block_types := .Page.Store.Get "block_types" | default (slice) | uniq }} + + {{ range $block_type := $block_types }} + {{/* Check if a JS file exists for this block type */}} + {{ $script_path := printf "js/hbx/blocks/%s/%s.js" $block_type $block_type }} + {{ with resources.Get $script_path }} + {{ $block_scripts = $block_scripts | append . }} + {{ end }} + {{ end }} +{{ end }} +{{ return $block_scripts }} + diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get-build-id.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get-build-id.html new file mode 100644 index 0000000..18a8cbb --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get-build-id.html @@ -0,0 +1,5 @@ +{{/* + Get Build ID - Returns a consistent build identifier for the current build cycle. + This is cached across the entire build to prevent log duplication during dev rebuilds. +*/}} +{{- printf "%d" now.Unix -}} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_address.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_address.html new file mode 100644 index 0000000..02a4627 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_address.html @@ -0,0 +1,23 @@ +{{/* Function to return a formatted address given a semantic address. */}} + +{{/* Check for valid site config. */}} +{{ if not hugo.Data.address_formats }}{{errorf "Address formats missing from `data/address_formats.toml`!"}}{{end}} + +{{ $page := . }} +{{ $address := .address }} +{{ $format_name := $page.Params.address_format | default site.Params.hugoblox.locale.address_format | default "en-us" }} + +{{ if not (isset hugo.Data.address_formats $format_name) }}{{ errorf "Address format `%s` missing from `data/address_formats.toml`!" $format_name }}{{end}} + +{{ $format := index hugo.Data.address_formats $format_name }} +{{ $address_display := slice }} + +{{ range $k, $v := $format.order }} + {{ if eq $v "street" | and $address.street }}{{$address_display = $address_display | append (transform.HTMLEscape $address.street) | append (index $format.delimiters $k | default "") }}{{end}} + {{ if eq $v "city" | and $address.city }}{{$address_display = $address_display | append (transform.HTMLEscape $address.city) | append (index $format.delimiters $k | default "") }}{{end}} + {{ if eq $v "region" | and $address.region }}{{$address_display = $address_display | append (transform.HTMLEscape $address.region) | append (index $format.delimiters $k | default "") }}{{end}} + {{ if eq $v "postcode" | and $address.postcode }}{{$address_display = $address_display | append (transform.HTMLEscape $address.postcode) | append (index $format.delimiters $k | default "") }}{{end}} + {{ if eq $v "country" | and $address.country }}{{$address_display = $address_display | append (transform.HTMLEscape $address.country) | append (index $format.delimiters $k | default "") }}{{end}} +{{end}} + +{{ return safeHTML (delimit $address_display "") }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_author_name.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_author_name.html new file mode 100644 index 0000000..3ce8216 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_author_name.html @@ -0,0 +1,26 @@ +{{/* Get name of primary author. */}} + +{{ $page := . }} + +{{/* Get publisher as fall back. */}} +{{ $branding := partialCached "functions/get_branding" $page "branding" }} +{{ $publisher := $branding.organization }} + +{{ $author := "" }} +{{ $author_slug := "" }} + +{{ if and (not $page.Params.authors) ($page.Scratch.Get "superuser_slug") }} + {{ $author_slug = $page.Scratch.Get "superuser_slug" }} +{{ else if $page.Params.authors }} + {{ $author = index $page.Params.authors 0 }} + {{ $author_slug = urlize $author }} +{{ end }} + +{{ $profile := partial "functions/get_author_profile" (dict "slug" $author_slug) }} +{{ if $profile.title }} + {{ $author = $profile.title }} +{{ else }} + {{ $author = $author | default $publisher }} +{{ end }} + +{{ return $author }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_author_profile.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_author_profile.html new file mode 100644 index 0000000..20c9b8b --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_author_profile.html @@ -0,0 +1,136 @@ +{{/* +Return a normalized HugoBlox author/person profile from data. + +Input (flexible): +- dict with "slug" key, or a raw string slug. + +Output (dict): +- slug: string +- title: string (display name, fallback to humanized slug) +- role: string (optional) +- bio: string (optional) +- status: map (optional) +- affiliations: array (optional) +- ids: map (optional) +- links: array (optional) +- is_owner: bool (optional) +- has_data: bool (true if found in data/authors) +- avatar: resource (optional) – matching assets/media/authors/.* +*/}} + +{{- $input := . -}} +{{- $slug := "" -}} +{{- $rawTitle := "" -}} + +{{- $inputType := printf "%T" $input -}} + +{{- if (reflect.IsMap $input) -}} + {{- $slug = index $input "slug" | default "" -}} + {{- with index $input "title" }}{{ $rawTitle = . }}{{ end -}} +{{- else if eq $inputType "string" -}} + {{- $slug = $input -}} + {{- $rawTitle = $input -}} +{{- else -}} + {{- $slug = printf "%v" $input -}} +{{- end -}} + +{{- $rawTitle = trim $rawTitle " " -}} + +{{- $slug = $slug | urlize -}} + +{{- $authors := partialCached "functions/get_authors_data" . site.Language.Lang -}} +{{- $data := index $authors $slug -}} +{{- $hasData := $data -}} + +{{/* Structured name resolution */}} +{{- $name := $data.name -}} +{{- $display := "" -}} +{{- $given := "" -}} +{{- $family := "" -}} +{{- $middle := "" -}} +{{- $alternate := "" -}} +{{- $namePronunciation := "" -}} +{{- $namePronouns := "" -}} + +{{- if $name.display }}{{ $display = $name.display }}{{ end }} +{{- if $name.given }}{{ $given = $name.given }}{{ end }} +{{- if $name.family }}{{ $family = $name.family }}{{ end }} +{{- if $name.middle }}{{ $middle = $name.middle }}{{ end }} +{{- if $name.alternate }}{{ $alternate = $name.alternate }}{{ end }} +{{- if $name.pronunciation }}{{ $namePronunciation = $name.pronunciation }}{{ end }} +{{- if $name.pronouns }}{{ $namePronouns = $name.pronouns }}{{ end }} + +{{- $title := "" -}} +{{- if $display -}} + {{- $title = $display -}} +{{- else if $data.title -}} + {{- $title = $data.title -}} +{{- else if $rawTitle -}} + {{- $title = $rawTitle -}} +{{- else -}} + {{- $title = $slug | humanize | title -}} +{{- end -}} + +{{- $role := $data.role -}} +{{- $bio := $data.bio -}} +{{- $status := $data.status -}} +{{- $affiliations := $data.affiliations -}} +{{- $ids := $data.ids -}} +{{- $links := $data.links -}} +{{- $isOwner := or ($data.is_owner) ($data.superuser) -}} +{{- $pronouns := $namePronouns | default $data.pronouns -}} +{{- $userGroups := $data.user_groups -}} +{{- $interests := $data.interests -}} +{{- $education := $data.education -}} +{{- $experience := or $data.experience $data.work -}} +{{- $skills := $data.skills -}} +{{- $languages := $data.languages -}} +{{- $awards := $data.awards -}} +{{- $graduationYear := $data.graduation_year -}} +{{- $weight := $data.weight -}} +{{- $nameFamily := $data.name.family | default $family -}} +{{- $postnominals := slice -}} +{{- if $data.postnominals -}} + {{- if (reflect.IsSlice $data.postnominals) -}} + {{- $postnominals = $data.postnominals -}} + {{- else -}} + {{- $postnominals = slice $data.postnominals -}} + {{- end -}} +{{- end -}} + +{{- /* Avatar resolution: look in assets/media/authors/.* */ -}} +{{- $avatar := resources.GetMatch (printf "media/authors/%s.*" $slug) -}} + +{{- $profile := dict + "slug" $slug + "title" $title + "name_display" $display + "name_given" $given + "name_family" $family + "name_family_pref" $nameFamily + "name_middle" $middle + "name_alternate" $alternate + "name_pronunciation" $namePronunciation + "role" $role + "bio" $bio + "status" $status + "affiliations" $affiliations + "ids" $ids + "links" $links + "pronouns" $pronouns + "user_groups" $userGroups + "interests" $interests + "education" $education + "experience" $experience + "skills" $skills + "languages" $languages + "awards" $awards + "graduation_year" $graduationYear + "weight" $weight + "postnominals" $postnominals + "is_owner" $isOwner + "has_data" (not (eq $hasData nil)) + "avatar" $avatar +-}} + +{{- return $profile -}} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_authors_data.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_authors_data.html new file mode 100644 index 0000000..04a250c --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_authors_data.html @@ -0,0 +1,54 @@ +{{/* + Return the authors data map for the current language. + + For multilingual sites, language-specific author data from data//authors/ + is merged on top of the default data/authors/ files. This allows translating + fields like name, bio, role, etc., while inheriting non-translated fields. + + Usage: + {{ $authors := partialCached "functions/get_authors_data" . site.Language.Lang }} + + Returns: map of slug → author data (same shape as hugo.Data.authors) +*/}} + +{{- $authors := hugo.Data.authors -}} +{{- if not $authors -}} + {{- $authors = dict -}} +{{- end -}} + +{{/* Check for language-specific author overrides */}} +{{- $lang := site.Language.Lang -}} +{{- $langData := index hugo.Data $lang -}} +{{- if $langData -}} + {{- $langAuthors := index $langData "authors" -}} + {{- if $langAuthors -}} + {{/* Merge each language-specific author data on top of the default */}} + {{- $merged := dict -}} + {{/* Start with all default authors */}} + {{- range $slug, $data := $authors -}} + {{- $langAuthor := index $langAuthors $slug -}} + {{- if $langAuthor -}} + {{/* Language data overrides default; merge gives $langAuthor priority */}} + {{- $mergedAuthor := merge $data $langAuthor -}} + {{/* Deep-merge the 'name' submap if both have it */}} + {{- $baseName := index $data "name" -}} + {{- $langName := index $langAuthor "name" -}} + {{- if and (reflect.IsMap $baseName) (reflect.IsMap $langName) -}} + {{- $mergedAuthor = merge $mergedAuthor (dict "name" (merge $baseName $langName)) -}} + {{- end -}} + {{- $merged = merge $merged (dict $slug $mergedAuthor) -}} + {{- else -}} + {{- $merged = merge $merged (dict $slug $data) -}} + {{- end -}} + {{- end -}} + {{/* Add any authors that only exist in the language data */}} + {{- range $slug, $data := $langAuthors -}} + {{- if not (index $authors $slug) -}} + {{- $merged = merge $merged (dict $slug $data) -}} + {{- end -}} + {{- end -}} + {{- $authors = $merged -}} + {{- end -}} +{{- end -}} + +{{- return $authors -}} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_branding.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_branding.html new file mode 100644 index 0000000..355acef --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_branding.html @@ -0,0 +1,42 @@ +{{/* + get_branding.html - Centralized branding configuration helper (v2) + + Returns a dict with: + - name: Display name (navbar, footer, JSON-LD publisher) + - site_title: Browser tab title / SEO title + - organization: Legal/copyright entity name + + Fallback chain: + - site_title → seo.title → name → site.Title + - organization → name → site.Title +*/}} + +{{/* v2 structure: hugoblox.identity */}} +{{ $hb := site.Params.hugoblox | default dict }} +{{ $identity := $hb.identity | default dict }} +{{ $seo := $hb.seo | default dict }} + +{{/* ═══════════════════════════════════════════════════════════════════════════ + NAME (primary display name) + Priority: hugoblox.identity.name → site.Title +═══════════════════════════════════════════════════════════════════════════ */}} +{{ $name := $identity.name | default site.Title }} + +{{/* ═══════════════════════════════════════════════════════════════════════════ + SITE_TITLE (browser tab / SEO title) + Priority: hugoblox.seo.title → hugoblox.identity.name → site.Title +═══════════════════════════════════════════════════════════════════════════ */}} +{{ $site_title := $seo.title | default $name }} + +{{/* ═══════════════════════════════════════════════════════════════════════════ + ORGANIZATION (legal/copyright entity) + Priority: hugoblox.identity.organization → name +═══════════════════════════════════════════════════════════════════════════ */}} +{{ $organization := $identity.organization | default $name }} + +{{/* Return branding dict */}} +{{ return dict + "name" $name + "site_title" $site_title + "organization" $organization +}} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_cover_image.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_cover_image.html new file mode 100644 index 0000000..b0945e5 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_cover_image.html @@ -0,0 +1,46 @@ +{{/* HugoBlox function to retrieve the cover image */}} +{{/* Inputs: page context */}} +{{/* Output: image resource, or nil if not found */}} + +{{/* + Cover image is searched in this order: + 1. Search for a file `*cover*` in the page directory + 2. Search for a file `.Params.cover.image` in the page directory + 3. Search for a file `.Params.cover.image` in the `assets/media/` directory +*/}} + +{{/* Search for an image "*cover*" in page folder */}} +{{ $resource := (.Resources.ByType "image").GetMatch "*cover*" }} +{{ if not (reflect.IsResource $resource) }} + {{/* Otherwise fall back to the image file specified in front matter */}} + {{ $filename := "" }} + {{ if .Params.cover }} + {{ if reflect.IsMap .Params.cover }} + {{ $filename = .Params.cover.image }} + {{ else }} + {{/* Support simple string format: cover: "image.jpg" */}} + {{ $filename = .Params.cover }} + {{ end }} + {{ end }} + {{ if $filename }} + {{/* Check if it's a remote URL */}} + {{ if or (strings.HasPrefix $filename "http://") (strings.HasPrefix $filename "https://") }} + {{ with resources.GetRemote $filename }} + {{ if reflect.IsResource . }} + {{ $resource = . }} + {{ else }} + {{ warnf "Remote cover image not found: %s" $filename }} + {{ end }} + {{ else }} + {{ warnf "Remote cover image not found: %s" $filename }} + {{ end }} + {{ else }} + {{/* Search in page folder */}} + {{ $resource = (.Resources.ByType "image").GetMatch $filename }} + {{/* Otherwise in `assets/media/` folder */}} + {{ if not (reflect.IsResource $resource) }} {{ $resource = resources.GetMatch (path.Join "media" $filename) }} {{ end }} + {{ end }} + {{ end }} +{{ end }} + +{{ return $resource }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_event_dates.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_event_dates.html new file mode 100644 index 0000000..df093de --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_event_dates.html @@ -0,0 +1,21 @@ +{{/* Function to get event start and end dates/times. */}} +{{ $start_date := .Params.event_start | default .Date }} +{{ $end_date := .Params.event_end | default .Params.date_end }} +{{ $all_day := .Params.event_all_day | default .Params.all_day }} + +{{ $t1 := time $start_date }}{{/* Start datetime. */}} +{{ $str := slice (time.Format (site.Params.hugoblox.locale.date_format | default ":date_long") (time $t1)) }}{{/* Init return string with start date. */}} +{{/* Show start time if not all day event. */}} +{{ if not $all_day }}{{ $str = $str | append (time.Format (site.Params.hugoblox.locale.time_format | default "3:04 PM") (time $t1)) }}{{ end }} +{{/* Show event end date if provided. */}} +{{ if $end_date }} + {{ $str = $str | append "—" }} + {{ $t2 := time $end_date}}{{/* End datetime. */}} + {{/* Show end date if it differs to start date. */}} + {{ if not (eq $t1.Year $t2.Year | and (eq $t1.Month $t2.Month) | and (eq $t1.Day $t2.Day)) }} + {{ $str = $str | append (time.Format (site.Params.hugoblox.locale.date_format | default ":date_long") (time $t2)) }} + {{ end }} + {{/* Show end time if not all day event. */}} + {{ if not $all_day }}{{ $str = $str | append (time.Format (site.Params.hugoblox.locale.time_format | default "3:04 PM") (time $t2)) }}{{ end }} +{{ end }} +{{ return ((delimit $str " ") | safeHTML) }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_featured_image.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_featured_image.html new file mode 100644 index 0000000..11d71df --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_featured_image.html @@ -0,0 +1,26 @@ +{{/* Function to retrieve the featured image */}} +{{/* Inputs: page context */}} +{{/* Output: image resource, or nil if not found */}} + +{{/* + Featured image is searched in this order: + 1. Search for a file `*featured*` in the page directory + 2. Search for a file `.Params.image.filename` in the page directory + 3. Search for a file `.Params.image.filename` in the `assets/media/` directory +*/}} + +{{/* Search for an image "*featured*" in page folder */}} +{{ $resource := (.Resources.ByType "image").GetMatch "*featured*" }} +{{ if not (reflect.IsResource $resource) }} + {{/* Otherwise fall back the image file specified in front matter */}} + {{ $filename := "" }} + {{ if and .Params.image (reflect.IsMap .Params.image) }} + {{ $filename = .Params.image.filename }} + {{ end }} + {{/* Search in page folder */}} + {{ $resource = (.Resources.ByType "image").GetMatch $filename }} + {{/* Otherwise in `assets/media/` folder */}} + {{ if not (reflect.IsResource $resource) }} {{ $resource = resources.GetMatch (path.Join "media" $filename) }} {{ end }} +{{ end }} + +{{ return $resource }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_hook.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_hook.html new file mode 100644 index 0000000..21a1d40 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_hook.html @@ -0,0 +1,21 @@ +{{/* Function to inject custom code into layouts without overriding files. */}} +{{/* Input: hook folder name (str) */}} +{{/* Output: loaded (bool) */}} + +{{ $loaded := false }} +{{ $partial_dir := printf "hooks/%s/" .hook }} +{{ $context := .context }} +{{ $hook_dir_path := path.Join "layouts/_partials" $partial_dir }} +{{ with try (os.ReadDir $hook_dir_path) }} + {{ with .Value }} + {{ range . }} + {{ if not .IsDir }} + {{ $partial_path := path.Join $partial_dir .Name }} + {{ partial $partial_path $context }} + {{ $loaded = true }} + {{ end }} + {{ end }} + {{ end }} +{{ end }} +{{/* The return statement below is for debug purposes only and prevents the above partial(s) being included in the page */}} +{{/* return $loaded */}} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_icon.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_icon.html new file mode 100644 index 0000000..d12603a --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_icon.html @@ -0,0 +1,58 @@ +{{/* Return the requested SVG icon as safeHTML for Go template rendering. + Handles emoji packs and attribute injection on top of the shared get_icon_svg.html core. */}} + +{{ $dirFile := path.Split .name }} +{{ $pack := .pack | default (strings.Replace $dirFile.Dir "/" "") | default "hero" }} +{{ $name := $dirFile.File }} + +{{ $icon := "" }} + +{{- if eq $pack "emoji" -}} + {{/* Handle emoji pack: convert name to :name: format and emojify */}} + {{ $wrapped := cond (hasPrefix $name ":") $name (printf ":%s:" $name) }} + {{ $emoji := $wrapped | emojify }} + {{ $attrs := .attributes | default "" }} + {{/* Convert SVG sizing to emoji text sizing with important specificity */}} + {{ if in $attrs "w-24" }}{{ $attrs = replaceRE "w-24 h-24" "" $attrs }}{{ $attrs = printf "%s text-8xl leading-none" $attrs }}{{ end }} + {{ if in $attrs "w-16" }}{{ $attrs = replaceRE "w-16 h-16" "" $attrs }}{{ $attrs = printf "%s text-5xl leading-none" $attrs }}{{ end }} + {{ if in $attrs "w-12" }}{{ $attrs = replaceRE "w-12 h-12" "" $attrs }}{{ $attrs = printf "%s text-5xl leading-none" $attrs }}{{ end }} + {{ if in $attrs "w-8" }}{{ $attrs = replaceRE "w-8 h-8" "" $attrs }}{{ $attrs = printf "%s text-4xl leading-none" $attrs }}{{ end }} + {{ if in $attrs "w-6" }}{{ $attrs = replaceRE "w-6 h-6" "" $attrs }}{{ $attrs = printf "%s text-2xl leading-none" $attrs }}{{ end }} + {{ if in $attrs "w-5" }}{{ $attrs = replaceRE "w-5 h-5" "" $attrs }}{{ $attrs = printf "%s text-xl leading-none" $attrs }}{{ end }} + {{ if in $attrs "w-4" }}{{ $attrs = replaceRE "w-4 h-4" "" $attrs }}{{ $attrs = printf "%s text-lg leading-none" $attrs }}{{ end }} + {{/* Add inline style for guaranteed sizing */}} + {{ $style_attr := "" }} + {{ if in $attrs "text-8xl" }}{{ $style_attr = "style=\"font-size: 6rem !important; line-height: 1 !important;\"" }}{{ end }} + {{ if in $attrs "text-5xl" }}{{ $style_attr = "style=\"font-size: 3rem !important; line-height: 1 !important;\"" }}{{ end }} + {{ if in $attrs "text-4xl" }}{{ $style_attr = "style=\"font-size: 2.25rem !important; line-height: 1 !important;\"" }}{{ end }} + {{ if in $attrs "text-2xl" }}{{ $style_attr = "style=\"font-size: 1.5rem !important; line-height: 1 !important;\"" }}{{ end }} + {{ if in $attrs "text-xl" }}{{ $style_attr = "style=\"font-size: 1.25rem !important; line-height: 1 !important;\"" }}{{ end }} + {{ if in $attrs "text-lg" }}{{ $style_attr = "style=\"font-size: 1.125rem !important; line-height: 1 !important;\"" }}{{ end }} + {{ $attrs = printf "%s %s" $attrs $style_attr }} + {{ $icon = printf "%s" $attrs $emoji }} +{{- else -}} + {{/* Try to resolve as an SVG icon from packs / user assets */}} + {{ $icon = partial "functions/get_icon_svg" (dict "name" .name "pack" (.pack | default "") "Page" .Page) }} + + {{- if not $icon -}} + {{/* No pack prefix and not found in hero — treat the raw name as a Unicode emoji */}} + {{ if not (strings.Contains $.name "/") }} + {{ $attrs := .attributes | default "" }} + {{ if in $attrs "w-24" }}{{ $attrs = replaceRE "w-24 h-24" "text-8xl" $attrs }}{{ end }} + {{ if in $attrs "w-16" }}{{ $attrs = replaceRE "w-16 h-16" "text-5xl" $attrs }}{{ end }} + {{ if in $attrs "w-12" }}{{ $attrs = replaceRE "w-12 h-12" "text-5xl" $attrs }}{{ end }} + {{ if in $attrs "w-8" }}{{ $attrs = replaceRE "w-8 h-8" "text-4xl" $attrs }}{{ end }} + {{ if in $attrs "w-6" }}{{ $attrs = replaceRE "w-6 h-6" "text-2xl" $attrs }}{{ end }} + {{ if in $attrs "w-5" }}{{ $attrs = replaceRE "w-5 h-5" "text-xl" $attrs }}{{ end }} + {{ if in $attrs "w-4" }}{{ $attrs = replaceRE "w-4 h-4" "text-lg" $attrs }}{{ end }} + {{ if not (in $attrs "flex") }}{{ $attrs = replaceRE "class=\"" "class=\"flex items-center justify-center leading-none " $attrs }}{{ end }} + {{ $icon = printf "%s" $attrs $.name }} + {{ end }} + {{- end -}} +{{- end -}} + +{{ if .attributes }} + {{ $icon = replaceRE " tag) + 3. Fallback to hb pack + 4. User assets at assets/media/icons/{pack}/{name}.svg + 5. Hugo brand icon as last resort (only when an explicit pack was specified) +*/}} + +{{- $dirFile := path.Split .name -}} +{{- $pack := .pack | default (strings.Replace $dirFile.Dir "/" "") | default "hero" -}} +{{- $name := $dirFile.File -}} +{{- $explicitPack := or (.pack) (strings.Contains .name "/") -}} + +{{- /* Resolve icon aliases (e.g. brands/google-scholar → brands/googlescholar) */ -}} +{{- with index hugo.Data.icons.aliases $pack -}} + {{- with index . $name -}} + {{- $name = . -}} + {{- end -}} +{{- end -}} + +{{- $icon := "" -}} +{{- $icon_pack := index hugo.Data.icons $pack -}} +{{- $pack_icon := index (index $icon_pack "icons") $name -}} + +{{- if $pack_icon -}} + {{- if eq $pack "hb" -}} + {{- $icon = $pack_icon -}} + {{- else -}} + {{- $icon_body := index $pack_icon "body" -}} + {{- $icon_size := index $icon_pack "height" -}} + {{- $icon = printf `%s` (cast.ToString $icon_size) (cast.ToString $icon_size) $icon_body -}} + {{- end -}} +{{- else -}} + {{- /* Icon not found in pack — try hb fallback, then user assets */ -}} + {{- with index (index hugo.Data.icons.hb "icons") $name -}} + {{- $icon = . -}} + {{- else -}} + {{- $prefix := printf "media/icons/%s/" $pack -}} + {{- $icon_path := printf "%s%s.svg" $prefix $name -}} + {{- $icon_resource := resources.Get $icon_path -}} + {{- if $icon_resource -}} + {{- $icon = $icon_resource.Content -}} + {{- else if $explicitPack -}} + {{- /* Only warn and use Hugo brand fallback when user specified an explicit pack */ -}} + {{- if not (fileExists (printf "assets/%s" $icon_path)) -}} + {{ $pageRef := "unknown location" }} + {{ if $.Page }} + {{ if $.Page.File }} + {{ if $.Page.File.Path }} + {{ $pageRef = $.Page.File.Path }} + {{ else if $.Page.RelPermalink }} + {{ $pageRef = $.Page.RelPermalink }} + {{ end }} + {{ else if $.Page.RelPermalink }} + {{ $pageRef = $.Page.RelPermalink }} + {{ end }} + {{ end }} + {{ partial "functions/logger" (dict + "page" $.Page + "level" "warn" + "id" (printf "missing-icon-%s-%s" $pack $name) + "message" (printf "The icon `%s` was not found in `assets/media/icons/%s/`. Referenced in: %s" $name $pack $pageRef) + ) + }} + {{- end -}} + {{- with index (index hugo.Data.icons.brands "icons") "hugo" -}} + {{- $icon = printf `%s` (index . "body") -}} + {{- end -}} + {{- end -}} + {{- end -}} +{{- end -}} + +{{- return $icon -}} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_logo.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_logo.html new file mode 100644 index 0000000..11b0514 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_logo.html @@ -0,0 +1,41 @@ +{{/* + HugoBlox Image Engine: Get website logo + + SVG-first detection for crisp rendering at any size. + Auto-detects from assets/media/: + 1. logo.svg (preferred - vector, infinite scalability) + 2. logo.png (fallback - raster, processed by Hugo) + + Inputs: + - constraint: "max_height" or "fit" (default: "fit") + - size: int - Target size in pixels + + Output: dict with: + - resource: The logo resource (processed if PNG) + - type: MIME type ("image/svg+xml" or "image/png") + - is_svg: boolean +*/}} + +{{ $constraint := .constraint | default "fit" }} +{{ $size := .size | default 36 }} +{{ $result := dict "resource" nil "type" "" "is_svg" false }} + +{{/* 1. Check for SVG first (preferred) */}} +{{ $logo_svg := resources.Get "media/logo.svg" }} +{{ if $logo_svg }} + {{ $result = dict "resource" $logo_svg "type" "image/svg+xml" "is_svg" true }} +{{ else }} + {{/* 2. Fallback to PNG */}} + {{ $logo_png := resources.Get "media/logo.png" }} + {{ if $logo_png }} + {{ $logo_processed := $logo_png }} + {{ if eq $constraint "max_height" }} + {{ $logo_processed = $logo_png.Resize (printf "x%d" $size) }} + {{ else }} + {{ $logo_processed = $logo_png.Fit (printf "%dx%d" $size $size) }} + {{ end }} + {{ $result = dict "resource" $logo_processed "type" "image/png" "is_svg" false }} + {{ end }} +{{ end }} + +{{ return $result }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_logo_url.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_logo_url.html new file mode 100644 index 0000000..a4e4f70 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_logo_url.html @@ -0,0 +1,13 @@ +{{/* Function to get logo URL for JSONLD. */}} +{{/* Inputs: page context */}} +{{/* Output: logo URL (URL) */}} + +{{ $logo_url := "" }} +{{ if resources.Get "media/logo.png" | or (resources.Get "media/logo.svg") }} + {{/* !CACHED! Can safely cache this site logo variant */}} + {{ $logo_url = (partialCached "functions/get_logo" (dict "constraint" "fit" "size" 192)).Permalink }} +{{ else }} + {{ $logo_url = (partial "functions/get_site_icon" 192).Permalink }} +{{ end }} + +{{ return $logo_url }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_page_title.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_page_title.html new file mode 100644 index 0000000..0151e8f --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_page_title.html @@ -0,0 +1,8 @@ +{{ $title := "" }} +{{ with .Params.seo.title }} + {{ $title = replace . "{brand}" site.Title }} +{{ else }} + {{ $title = .Title | default site.Title }} + {{ if ne $title site.Title }}{{ $title = printf "%s | %s" $title site.Title }}{{ end }} +{{ end }} +{{ return $title }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_site_icon.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_site_icon.html new file mode 100644 index 0000000..9ca8039 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_site_icon.html @@ -0,0 +1,42 @@ +{{/* + HugoBlox Image Engine: Get website favicon/icon + + SVG-first detection for modern browser support. + Auto-detects from assets/media/: + 1. icon.svg (preferred - vector, supports dark mode) + 2. icon.png (fallback - raster, processed by Hugo) + + Input: size (int) - Only used for PNG processing + Output: dict with: + - resource: The icon resource + - type: MIME type ("image/svg+xml" or "image/png") + - is_svg: boolean +*/}} + +{{ $size := . | default 32 }} +{{ $result := dict "resource" nil "type" "" "is_svg" false }} + +{{/* 1. Check for SVG first (preferred) */}} +{{ $icon_svg := resources.Get "media/icon.svg" }} +{{ if $icon_svg }} + {{ $result = dict "resource" $icon_svg "type" "image/svg+xml" "is_svg" true }} +{{ else }} + {{/* 2. Fallback to PNG */}} + {{ $icon_png := resources.Get "media/icon.png" }} + {{ if $icon_png }} + {{ $icon_resized := $icon_png.Fill (printf "%sx%s Center" (string $size) (string $size)) }} + {{ $result = dict "resource" $icon_resized "type" "image/png" "is_svg" false }} + {{ else }} + {{/* 3. Ultimate fallback: Try to generate from logo */}} + {{ $logo_png := resources.Get "media/logo.png" }} + {{ if $logo_png }} + {{ $icon_from_logo := $logo_png.Fill (printf "%sx%s Center" (string $size) (string $size)) }} + {{ $result = dict "resource" $icon_from_logo "type" "image/png" "is_svg" false }} + {{ else }} + {{/* 4. No icon found */}} + {{ warnf "No favicon found. Please add assets/media/icon.svg (preferred) or assets/media/icon.png" }} + {{ end }} + {{ end }} +{{ end }} + +{{ return $result }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_sort_by_parameter.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_sort_by_parameter.html new file mode 100644 index 0000000..ce35839 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_sort_by_parameter.html @@ -0,0 +1,24 @@ +{{/* Uniform 'sort_by' parameter between built-in Hugo and Hugo Blox Kit ones */}} +{{/* Input: 'sort_by' parameter (string) */}} +{{/* Output: fixed 'sort_by' parameter (string) */}} + +{{/* + Fix the 'sort_by' parameter, by adding "Params." as prefix if it is not a built-in Hugo parameter. + Since Hugo Blox Kit parameters are all standardised to lowercase-underscore convention, we: + - remove any leading ".": ".Date" is the same as "Date" + - check the first letter: + - if it is capitalized, then we have a built-in Hugo parameter, and we do nothing + - otherwise, it is a custom Hugo Blox Kit parameter, and we add "Params." as prefix + This logic should also be backward compatible, since "Params.my_param" is not modified. +*/}} + +{{ $param := strings.TrimLeft "." . }} +{{/* Get first letter */}} +{{ $first := substr $param 0 }} +{{/* Check if it is lowercase */}} +{{ if eq $first (lower $first) }} + {{/* Add 'Params.' prefix */}} + {{ $param = printf "Params.%s" $param }} +{{ end }} + +{{ return $param }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_summary.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_summary.html new file mode 100644 index 0000000..421db9e --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_summary.html @@ -0,0 +1,3 @@ +{{/* Get page summary with fallback priority: Params.summary > Params.description > Params.abstract > Summary */}} +{{ $summary := .Params.summary | default .Params.description | default .Params.abstract | default .Summary }} +{{ return $summary }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_theme_config.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_theme_config.html new file mode 100644 index 0000000..9e9d711 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/get_theme_config.html @@ -0,0 +1,165 @@ +{{/* + HugoBlox Theme Engine: Get theme configuration (v2) + + Returns a dict with: + - mode: 'light' | 'dark' | 'system' + - light: Light theme pack name (default: "default") + - dark: Dark theme pack name (default: "default") + - colors: Global color overrides { primary, secondary, neutral } + - colors_light: Light-mode specific color overrides + - colors_dark: Dark-mode specific color overrides + - surfaces: Semantic surface colors { background, foreground, header, footer } + - typography: { font, size } + - layout: { radius, spacing } +*/}} + +{{/* v2 structure */}} +{{ $hb := site.Params.hugoblox | default dict }} +{{ $hb_theme := $hb.theme | default dict }} + +{{/* ═══════════════════════════════════════════════════════════════════════════ + MODE (light/dark/system) +═══════════════════════════════════════════════════════════════════════════ */}} +{{ $mode := $hb_theme.mode | default "system" }} + +{{/* ═══════════════════════════════════════════════════════════════════════════ + THEME PACK SELECTION (light/dark) + + Pack can be: + - String: "default" (applies to both) + - Object: { light: "latte", dark: "americano" } +═══════════════════════════════════════════════════════════════════════════ */}} +{{ $light_pack := "default" }} +{{ $dark_pack := "default" }} + +{{ $pack := $hb_theme.pack | default "default" }} +{{ if reflect.IsMap $pack }} + {{ $light_pack = $pack.light | default "default" }} + {{ $dark_pack = $pack.dark | default "default" }} +{{ else }} + {{/* Single string applies to both */}} + {{ $light_pack = $pack }} + {{ $dark_pack = $pack }} +{{ end }} + +{{/* ═══════════════════════════════════════════════════════════════════════════ + COLOR OVERRIDES +═══════════════════════════════════════════════════════════════════════════ */}} +{{ $colors := $hb_theme.colors | default dict }} +{{ $colors_light := $hb_theme.colors_light | default dict }} +{{ $colors_dark := $hb_theme.colors_dark | default dict }} + +{{/* ═══════════════════════════════════════════════════════════════════════════ + SEMANTIC SURFACE COLORS +═══════════════════════════════════════════════════════════════════════════ */}} +{{ $surfaces := $hb_theme.surfaces | default dict }} + +{{/* ═══════════════════════════════════════════════════════════════════════════ + TYPOGRAPHY + + Font packs are loaded from data/fonts/ and provide: + - families: { heading, body, code, nav } + - weights: { heading, body, code, nav } (arrays) + - sizes: { base, sm, lg } + - leading: { heading, body, code } + - tracking: { heading, body, caps } + + Legacy support: typography.font (sans/serif/native) maps to pack names +═══════════════════════════════════════════════════════════════════════════ */}} +{{ $hb_typography := $hb.typography | default dict }} + +{{/* Resolve font pack name */}} +{{ $font_pack_name := $hb_typography.pack | default "modern" }} + +{{/* Load the font pack */}} +{{ $font_pack := partial "functions/load_font_pack" $font_pack_name }} + +{{/* Resolve families — inline overrides take priority */}} +{{ $pack_families := $font_pack.families | default dict }} +{{ $inline_families := $hb_typography.families | default dict }} +{{ $families := dict + "heading" ($inline_families.heading | default $pack_families.heading | default "Inter") + "body" ($inline_families.body | default $pack_families.body | default "Inter") + "code" ($inline_families.code | default $pack_families.code | default "JetBrains Mono") + "nav" ($inline_families.nav | default $pack_families.nav | default "") +}} + +{{/* Resolve weights — inline overrides take priority */}} +{{ $pack_weights := $font_pack.weights | default dict }} +{{ $inline_weights := $hb_typography.weights | default dict }} +{{ $weights := dict + "heading" ($inline_weights.heading | default $pack_weights.heading | default (slice 700)) + "body" ($inline_weights.body | default $pack_weights.body | default (slice 400)) + "code" ($inline_weights.code | default $pack_weights.code | default (slice 400)) + "nav" ($inline_weights.nav | default $pack_weights.nav | default (slice)) +}} + +{{/* Resolve sizes — inline overrides take priority */}} +{{ $pack_sizes := $font_pack.sizes | default dict }} +{{ $inline_sizes := $hb_typography.sizes | default dict }} +{{ $sizes := dict + "base" ($inline_sizes.base | default $pack_sizes.base | default "1rem") + "sm" ($inline_sizes.sm | default $pack_sizes.sm | default "0.875rem") + "lg" ($inline_sizes.lg | default $pack_sizes.lg | default "1.125rem") +}} + +{{/* Resolve leading (line-height) */}} +{{ $pack_leading := $font_pack.leading | default dict }} +{{ $inline_leading := $hb_typography.leading | default dict }} +{{ $leading := dict + "heading" ($inline_leading.heading | default $pack_leading.heading | default 1.2) + "body" ($inline_leading.body | default $pack_leading.body | default 1.6) + "code" ($inline_leading.code | default $pack_leading.code | default 1.5) +}} + +{{/* Resolve tracking (letter-spacing) */}} +{{ $pack_tracking := $font_pack.tracking | default dict }} +{{ $inline_tracking := $hb_typography.tracking | default dict }} +{{ $tracking := dict + "heading" ($inline_tracking.heading | default $pack_tracking.heading | default "-0.02em") + "body" ($inline_tracking.body | default $pack_tracking.body | default "0") + "caps" ($inline_tracking.caps | default $pack_tracking.caps | default "0.05em") +}} + +{{/* Resolve variable font flags */}} +{{ $pack_variable := $font_pack.variable | default dict }} +{{ $inline_variable := $hb_typography.variable | default dict }} +{{ $variable := dict + "heading" ($inline_variable.heading | default $pack_variable.heading | default false) + "body" ($inline_variable.body | default $pack_variable.body | default false) + "code" ($inline_variable.code | default $pack_variable.code | default false) + "nav" ($inline_variable.nav | default $pack_variable.nav | default false) +}} + +{{ $typography := dict + "pack" $font_pack_name + "style" ($font_pack.meta.style | default "sans") + "families" $families + "weights" $weights + "variable" $variable + "sizes" $sizes + "leading" $leading + "tracking" $tracking +}} + +{{/* ═══════════════════════════════════════════════════════════════════════════ + LAYOUT TOKENS +═══════════════════════════════════════════════════════════════════════════ */}} +{{ $hb_layout := $hb.layout | default dict }} +{{ $layout := dict + "radius" ($hb_layout.radius | default "md") + "spacing" ($hb_layout.spacing | default "comfortable") +}} + +{{/* Return theme config dict */}} +{{ return dict + "mode" $mode + "light" $light_pack + "dark" $dark_pack + "colors" $colors + "colors_light" $colors_light + "colors_dark" $colors_dark + "surfaces" $surfaces + "typography" $typography + "layout" $layout +}} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/has_attachments.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/has_attachments.html new file mode 100644 index 0000000..cff1968 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/has_attachments.html @@ -0,0 +1,23 @@ +{{/* Return true if the page has attachments or link buttons to display. */}} + +{{ $page := . }} + +{{ $pdf_link := false }} +{{/* Prevent Hugo warning ".File.ContentBaseName on zero object." for content not backed by a Markdown file, */}} +{{/* such as auto-generated taxonomy pages, and sections without an explicit index file. */}} +{{/* The file check is required when called from `_default/list.html`, the fallback list view for the above cases. */}} +{{ with $page.File }} + {{ $slug := $page.File.ContentBaseName }} + {{ $resource := $page.Resources.GetMatch (printf "%s.pdf" $slug) }} + {{ with $resource }} + {{ $pdf_link = true }} + {{ end }} +{{ end }} + +{{ $cite_link := false }} +{{ $resource := $page.Resources.GetMatch "cite.bib" }} +{{ with $resource }} + {{ $cite_link = true }} +{{ end }} + +{{ return ($cite_link | or $pdf_link | or .Params.url_preprint | or .Params.url_pdf | or .Params.url_slides | or .Params.url_video | or .Params.url_source | or .Params.url_code | or .Params.url_dataset | or .Params.url_poster | or .Params.url_project | or .Params.doi | or .Params.links | or .Params.projects | or .Params.slides) }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/hbx_verify.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/hbx_verify.html new file mode 100644 index 0000000..30c0b9a --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/hbx_verify.html @@ -0,0 +1,70 @@ +{{/* + Hugo Blox Kit Ecosystem Verification + + Reusable verification function for Hugo Blox components. + Ensures all required Hugo Blox Kit dependencies are present. + + Usage: {{ partial "functions/hbx_verify.html" . }} + Returns: "verified" or "failed" + + Used by: shortcodes, blocks, advanced components +*/}} + +{{/* Check for Hugo Blox specific icon system */}} +{{- $hb_icon_check := partial "functions/get_icon" (dict "name" "academic-cap" "attributes" "style=\"display: none;\"") -}} + +{{/* Verify Hugo Blox data structures */}} +{{- $hb_data_check := hugo.Data.icons.hero -}} + +{{/* Verify Hugo Blox UID generation */}} +{{- $hb_uid_check := partial "functions/uid.html" . -}} + +{{/* DEBUG: Print hugo.Deps output for analysis (dev only) */}} +{{- if getenv "HUGO_BLOX_DEBUG" -}} + {{- warnf "=== DEBUG hugo.Deps output ===" -}} + {{- range $index, $dep := hugo.Deps -}} + {{- warnf "DEP %d: Path=%s, Version=%s, Vendor=%t" $index $dep.Path $dep.Version $dep.Vendor -}} + {{- end -}} + {{- warnf "=== END hugo.Deps ===" -}} +{{- end -}} + +{{/* Check for required Hugo Blox module dependencies */}} +{{- $hb_module_check := false -}} +{{- $required_modules := slice "blox" -}} +{{- range $required := $required_modules -}} + {{- range $dep := hugo.Deps -}} + {{- if strings.Contains $dep.Path $required -}} + {{/* Accept both official GitHub org paths AND local development paths */}} + {{- if or (strings.Contains $dep.Path "github.com/HugoBlox/") (strings.Contains $dep.Path "../../../modules") -}} + {{- $hb_module_check = true -}} + {{- if getenv "HUGO_BLOX_DEBUG" -}} + {{- warnf "Found Hugo Blox module: %s" $dep.Path -}} + {{- end -}} + {{- break -}} + {{- end -}} + {{- end -}} + {{- end -}} +{{- end -}} + +{{/* Verify Hugo Blox brands icon pack */}} +{{- $hb_brands_check := hugo.Data.icons.brands -}} + +{{/* Debug output to identify failing check (dev only) */}} +{{- if getenv "HUGO_BLOX_DEBUG" -}} + {{- warnf "=== VERIFICATION RESULTS ===" -}} + {{- warnf "Icon check: %t" (and $hb_icon_check true) -}} + {{- warnf "Data check: %t" (and $hb_data_check true) -}} + {{- warnf "UID check: %t" (and $hb_uid_check true) -}} + {{- warnf "Module check: %t" $hb_module_check -}} + {{- warnf "Brands check: %t" (and $hb_brands_check true) -}} + {{- warnf "=== END VERIFICATION ===" -}} +{{- end -}} + +{{/* Set return value based on verification results */}} +{{- $return := "failed" -}} +{{- if and $hb_icon_check $hb_data_check $hb_uid_check $hb_module_check $hb_brands_check -}} + {{- $return = "verified" -}} +{{- end -}} + +{{/* Return result using proper Hugo function pattern */}} +{{ return $return }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/layout_tokens.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/layout_tokens.html new file mode 100644 index 0000000..3c48bf6 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/layout_tokens.html @@ -0,0 +1,56 @@ +{{/* + HugoBlox Theme Engine: Layout Tokens + + Resolves layout design tokens (radius, spacing) from the theme config + and emits them as CSS custom properties. + + Input: Theme config dict from get_theme_config: + - layout: { radius, spacing } + + Output: diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/load_font_pack.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/load_font_pack.html new file mode 100644 index 0000000..466d732 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/load_font_pack.html @@ -0,0 +1,65 @@ +{{/* + HugoBlox Theme Engine: Loads and validates a HugoBlox font pack + + Input: Font pack name (string), e.g. "modern-sans" or "acme/editorial" + + Returns: The font pack data object (families, weights, sizes, leading, tracking) or empty dict if invalid + + Validates: + - Font pack exists in data/fonts/ + - Required 'hugoblox' wrapper is present + - Required 'meta.format' starts with 'hugoblox-font@' +*/}} + +{{ $pack_name := . }} +{{ $result := dict }} + +{{/* Parse vendor/name format */}} +{{ $vendor := "" }} +{{ $name := $pack_name }} + +{{ if strings.Contains $pack_name "/" }} + {{ $parts := split $pack_name "/" }} + {{ $vendor = index $parts 0 }} + {{ $name = index $parts 1 }} +{{ end }} + +{{/* Load raw font pack data */}} +{{ $raw_pack := dict }} + +{{ if $vendor }} + {{/* Third-party font pack: data/fonts/vendor/name.yaml */}} + {{ $vendor_fonts := index hugo.Data.fonts $vendor }} + {{ if $vendor_fonts }} + {{ $raw_pack = index $vendor_fonts $name }} + {{ end }} +{{ else }} + {{/* Built-in or user font pack: data/fonts/name.yaml */}} + {{ with index hugo.Data.fonts $name }} + {{ $raw_pack = . }} + {{ end }} +{{ end }} + +{{/* Validate font pack structure */}} +{{ if not $raw_pack }} + {{ warnf "FONT PACK ERROR: Font pack '%s' not found in data/fonts/" $pack_name }} +{{ else if not $raw_pack.hugoblox }} + {{ warnf "FONT PACK ERROR: Font pack '%s' is not a valid HugoBlox font pack (missing 'hugoblox' key)" $pack_name }} +{{ else }} + {{ $pack := $raw_pack.hugoblox }} + + {{ if not $pack.meta }} + {{ warnf "FONT PACK ERROR: Font pack '%s' is missing the required 'meta' block" $pack_name }} + {{ else }} + {{/* Validate format version */}} + {{ $format := $pack.meta.format | default "" }} + {{ if not (hasPrefix $format "hugoblox-font@") }} + {{ warnf "FONT PACK ERROR: Font pack '%s' has invalid format '%s'. Expected 'hugoblox-font@1'" $pack_name $format }} + {{ end }} + {{ end }} + + {{/* Return the validated font pack data (without the hugoblox wrapper) */}} + {{ $result = $pack }} +{{ end }} + +{{ return $result }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/load_theme_pack.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/load_theme_pack.html new file mode 100644 index 0000000..5055f04 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/load_theme_pack.html @@ -0,0 +1,59 @@ +{{/* + HugoBlox Theme Engine: Loads and validates a HugoBlox theme pack + + Input: Theme pack name (string), e.g. "minimal" or "acme/corporate" + + Returns: The theme data object (type, light, dark, etc.) or nil if invalid + + Validates: + - Theme exists in data/themes/ + - Required 'hugoblox' wrapper is present + - Required 'meta.format' starts with 'hugoblox-theme@' +*/}} + +{{ $pack_name := . }} +{{ $result := dict }} + +{{/* Parse vendor/name format */}} +{{ $vendor := "" }} +{{ $name := $pack_name }} + +{{ if strings.Contains $pack_name "/" }} + {{ $parts := split $pack_name "/" }} + {{ $vendor = index $parts 0 }} + {{ $name = index $parts 1 }} +{{ end }} + +{{/* Load raw theme data */}} +{{ $raw_theme := dict }} + +{{ if $vendor }} + {{/* Third-party theme: data/themes/vendor/name.yaml */}} + {{ $vendor_themes := index hugo.Data.themes $vendor }} + {{ if $vendor_themes }} + {{ $raw_theme = index $vendor_themes $name }} + {{ end }} +{{ else }} + {{/* Built-in or user theme: data/themes/name.yaml */}} + {{ $raw_theme = index hugo.Data.themes $name }} +{{ end }} + +{{/* Validate theme structure */}} +{{ if not $raw_theme }} + {{ warnf "THEME ERROR: Theme pack '%s' not found in data/themes/" $pack_name }} +{{ else if not $raw_theme.hugoblox }} + {{ warnf "THEME ERROR: Theme '%s' is not a valid HugoBlox theme (missing 'hugoblox' key)" $pack_name }} +{{ else }} + {{ $theme := $raw_theme.hugoblox }} + + {{/* Validate format version */}} + {{ $format := $theme.meta.format | default "" }} + {{ if not (hasPrefix $format "hugoblox-theme@") }} + {{ warnf "THEME ERROR: Theme '%s' has invalid format '%s'. Expected 'hugoblox-theme@1'" $pack_name $format }} + {{ end }} + + {{/* Return the validated theme data (without the hugoblox wrapper) */}} + {{ $result = $theme }} +{{ end }} + +{{ return $result }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/logger.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/logger.html new file mode 100644 index 0000000..bcb2582 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/logger.html @@ -0,0 +1,51 @@ +{{/* + Hugo Blox Logger: A pragmatic, centralized logging helper for Hugo. + + This partial is the single source of truth for all build-time logging. + Hugo's template logging is limited to WARN and ERROR. INFO is only shown in the Dev HUD/JSON, not the CLI. + + Usage: + {{ partial "functions/logger" (dict + "page" . + "level" "info" | "warn" | "error" (default: "info") + "message" "Your log message here." + "id" "a-unique-id" (optional, for suppressible warnings) + "source" (dict "type" "shortcode|partial|template" "name" "callout|sections" ) (optional) + ) }} +*/}} +{{- $level := lower (.level | default "info") -}} +{{- $message := .message | default "" -}} +{{- $id := .id | default "" -}} +{{- $source := .source | default dict -}} +{{- $page := .page | default . -}} +{{- $isDev := hugo.IsServer -}} + +{{/* Store log entry for future debug widget/JSON, regardless of environment. */}} +{{- with $page -}} + {{- with .Store -}} + {{- $buildId := partialCached "functions/get-build-id.html" "hbx-build-id" -}} + {{- $log_entry := dict "level" $level "message" $message "page" ($.RelPermalink | default "/") "timestamp" now.Unix "id" $id "source" $source "buildId" $buildId -}} + {{- $current_logs := .Get "hbx_logs" | default slice -}} + {{- $currentBuildId := .Get "hbx_build_id" | default "" -}} + {{/* Clear logs if this is a new build cycle */}} + {{- if ne $currentBuildId $buildId -}} + {{- .Set "hbx_build_id" $buildId -}} + {{- $current_logs = slice -}} + {{- end -}} + {{- .Set "hbx_logs" ($current_logs | append $log_entry) -}} + {{- end -}} +{{- end -}} + +{{/* Emit to CLI using fmt with proper severity. Do not print INFO to CLI. */}} +{{- if eq $level "error" -}} + {{- fmt.Errorf "HBX ERROR: %s" $message -}} +{{- else if eq $level "warn" -}} + {{- if $id -}} + {{- fmt.Warnidf $id "HBX WARN: %s" $message -}} + {{- else -}} + {{- fmt.Warnf "HBX WARN: %s" $message -}} + {{- end -}} +{{- else -}} + {{/* info: no CLI output; visible via Dev HUD/JSON only */}} +{{- end -}} +{{- "" -}} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/notebook/render.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/notebook/render.html new file mode 100644 index 0000000..f299780 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/notebook/render.html @@ -0,0 +1,540 @@ +{{- $ctx := . -}} +{{- $hbxVerification := partial "functions/hbx_verify.html" $ctx -}} +{{- if ne $hbxVerification "verified" -}} + {{- errorf "Install HugoBlox to use the Notebook shortcode at: %s" $ctx.Position -}} +{{- end -}} +{{- $shortcodeName := $ctx.Name | default "notebook" -}} + +{{- $src := "" -}} +{{- if $ctx.IsNamedParams -}} + {{- $src = $ctx.Get "src" | default ($ctx.Get "file") -}} +{{- else -}} + {{- $src = $ctx.Get 0 -}} +{{- end -}} +{{- if not $src -}} + {{- errorf "%s shortcode: provide a notebook path via positional argument or src=..." $shortcodeName -}} +{{- end -}} + +{{- $displayName := $src -}} +{{- with urls.Parse $src -}} + {{- if .Path -}} + {{- $displayName = path.Base .Path -}} + {{- end -}} +{{- end -}} + +{{- $title := $ctx.Get "title" | default $displayName -}} +{{- $languageOverride := $ctx.Get "language" -}} +{{- $showCode := $ctx.Get "show_code" | default true -}} +{{- $showMarkdown := $ctx.Get "show_markdown" | default true -}} +{{- $showOutputs := $ctx.Get "show_outputs" | default true -}} +{{- $showMetadata := $ctx.Get "show_metadata" | default false -}} +{{- $lineNumbers := $ctx.Get "line_numbers" | default false -}} +{{- $dense := $ctx.Get "dense" | default false -}} +{{- $maxOutputHeight := $ctx.Get "max_output_height" | default "26rem" -}} +{{- $sourceURL := $ctx.Get "source_url" -}} +{{- $showDownload := $ctx.Get "show_download" | default true -}} +{{- $downloadLabel := $ctx.Get "download_label" | default "Download notebook" -}} +{{- $emptyMessage := $ctx.Get "empty_message" | default "Notebook is empty or hidden by the current view options." -}} +{{- $id := delimit (slice "hb-notebook" (partial "functions/uid.html" $ctx)) "-" -}} + +{{- $isRemote := and $src (ne (urls.Parse $src).Scheme "") -}} +{{- $normalizedSrc := $src -}} +{{- if not $isRemote -}} + {{- $normalizedSrc = strings.TrimPrefix "./" $normalizedSrc -}} + {{- $normalizedSrc = strings.TrimPrefix "/" $normalizedSrc -}} + {{- if $normalizedSrc -}} + {{- $normalizedSrc = path.Clean $normalizedSrc -}} + {{- end -}} + {{- if eq $normalizedSrc "." -}} + {{- $normalizedSrc = "" -}} + {{- end -}} + {{- if strings.HasPrefix $normalizedSrc ".." -}} + {{- errorf "%s shortcode: refusing to read outside the project for %q" $shortcodeName $src -}} + {{- end -}} +{{- end -}} + +{{- $notebookContent := "" -}} +{{- $resource := dict -}} +{{- $resourceFound := false -}} + +{{- if $isRemote -}} + {{- $remote := try (resources.GetRemote $src) -}} + {{- if $remote.Err -}} + {{- errorf "%s shortcode: unable to fetch remote notebook %q (%s)" $shortcodeName $src $remote.Err -}} + {{- else -}} + {{- $resource = $remote.Value -}} + {{- $resourceFound = true -}} + {{- $notebookContent = $resource.Content -}} + {{- if not $sourceURL -}} + {{- $sourceURL = $src -}} + {{- end -}} + {{- end -}} +{{- else -}} + {{- with $ctx.Page -}} + {{- with .Resources -}} + {{- with .GetMatch $normalizedSrc -}} + {{- $resource = . -}} + {{- $resourceFound = true -}} + {{- else -}} + {{- if not (strings.Contains $normalizedSrc "/") -}} + {{- with .GetMatch (printf "**/%s" $normalizedSrc) -}} + {{- $resource = . -}} + {{- $resourceFound = true -}} + {{- end -}} + {{- end -}} + {{- end -}} + {{- end -}} + {{- end -}} + {{- if $resourceFound -}} + {{- $notebookContent = $resource.Content -}} + {{- if not $sourceURL -}} + {{- $sourceURL = $resource.RelPermalink -}} + {{- end -}} + {{- end -}} + {{- if not $notebookContent -}} + {{- $searchPaths := slice $normalizedSrc -}} + {{- $pageDir := "" -}} + {{- with $ctx.Page.File -}} + {{- $pageDir = path.Dir .Path -}} + {{- end -}} + {{- if $pageDir -}} + {{- $searchPaths = $searchPaths | append (path.Join $pageDir $normalizedSrc) -}} + {{- if not (strings.HasPrefix $normalizedSrc "content/") -}} + {{- $searchPaths = $searchPaths | append (printf "content/%s" (path.Join $pageDir $normalizedSrc)) -}} + {{- end -}} + {{- end -}} + {{- if not (strings.HasPrefix $normalizedSrc "content/") -}} + {{- $searchPaths = $searchPaths | append (printf "content/%s" $normalizedSrc) -}} + {{- end -}} + {{- if not (strings.HasPrefix $normalizedSrc "assets/") -}} + {{- $searchPaths = $searchPaths | append (printf "assets/%s" $normalizedSrc) -}} + {{- end -}} + {{- if not (strings.HasPrefix $normalizedSrc "static/") -}} + {{- $searchPaths = $searchPaths | append (printf "static/%s" $normalizedSrc) -}} + {{- end -}} + {{- range $candidate := $searchPaths }} + {{- if not $notebookContent -}} + {{- $fileAttempt := try (readFile $candidate) -}} + {{- if not $fileAttempt.Err -}} + {{- $notebookContent = $fileAttempt.Value -}} + {{- if and (strings.HasPrefix $candidate "static/") (not $sourceURL) -}} + {{- $public := strings.TrimPrefix $candidate "static" -}} + {{- if not (strings.HasPrefix $public "/") -}} + {{- $public = printf "/%s" $public -}} + {{- end -}} + {{- $sourceURL = relLangURL $public -}} + {{- end -}} + {{- end -}} + {{- end -}} + {{- end -}} + {{- end -}} +{{- end -}} + +{{- if not $notebookContent -}} + {{- $pagePath := "" -}} + {{- with $ctx.Page.File -}} + {{- $pagePath = .Path -}} + {{- end -}} + {{- errorf "%s shortcode: notebook %q could not be located relative to %s. Please check that you have removed \\.ipynb$ from ignoreFiles in your config/_default/hugo.yaml." $shortcodeName $src $pagePath -}} +{{- end -}} + +{{- $parsed := dict -}} +{{- $parsedResult := try (transform.Unmarshal $notebookContent) -}} +{{- if $parsedResult.Err -}} + {{- errorf "%s shortcode: %q is not valid notebook JSON (%s)" $shortcodeName $src $parsedResult.Err -}} +{{- else -}} + {{- $parsed = $parsedResult.Value -}} +{{- end -}} + +{{- $cells := slice -}} +{{- with index $parsed "cells" -}} + {{- if reflect.IsSlice . -}} + {{- $cells = . -}} + {{- end -}} +{{- end -}} +{{- $metadata := index $parsed "metadata" | default dict -}} + +{{- $language := $languageOverride -}} +{{- if not $language -}} + {{- with index $metadata "language_info" -}} + {{- with index . "name" -}} + {{- $language = printf "%v" . -}} + {{- end -}} + {{- end -}} +{{- end -}} +{{- if not $language -}} + {{- $language = "python" -}} +{{- end -}} +{{- $language = lower $language -}} + +{{- $languageVersion := "" -}} +{{- with index $metadata "language_info" -}} + {{- with index . "version" -}} + {{- $languageVersion = printf "%v" . -}} + {{- end -}} +{{- end -}} + +{{- $kernelDisplay := "" -}} +{{- with index $metadata "kernelspec" -}} + {{- with index . "display_name" -}} + {{- $kernelDisplay = printf "%v" . -}} + {{- end -}} +{{- end -}} + +{{- $kernelName := "" -}} +{{- with index $metadata "kernelspec" -}} + {{- with index . "name" -}} + {{- $kernelName = printf "%v" . -}} + {{- end -}} +{{- end -}} + +{{- $nbformat := "" -}} +{{- with index $parsed "nbformat" -}} + {{- $nbformat = printf "%v" . -}} +{{- end -}} +{{- with index $parsed "nbformat_minor" -}} + {{- if $nbformat -}} + {{- $nbformat = printf "%s.%v" $nbformat . -}} + {{- else -}} + {{- $nbformat = printf "%v" . -}} + {{- end -}} +{{- end -}} + +{{- $cellCount := len $cells -}} + +{{- $containerClass := "hb-notebook not-prose" -}} +{{- if $dense -}} + {{- $containerClass = printf "%s %s" $containerClass "hb-notebook--dense" -}} +{{- end -}} + +{{- $subtitleParts := slice -}} +{{- if $language -}} + {{- $subtitleParts = $subtitleParts | append (strings.Title $language) -}} +{{- end -}} +{{- if $kernelDisplay -}} + {{- $subtitleParts = $subtitleParts | append (printf "Kernel: %s" $kernelDisplay) -}} +{{- end -}} +{{- if $nbformat -}} + {{- $subtitleParts = $subtitleParts | append (printf "nbformat %s" $nbformat) -}} +{{- end -}} +{{- if gt $cellCount 0 -}} + {{- $subtitleParts = $subtitleParts | append (printf "%d cells" $cellCount) -}} +{{- end -}} + +{{- $metaItems := slice -}} +{{- $metaItems = $metaItems | append (dict "label" "Language" "value" (strings.Title $language)) -}} +{{- if $languageVersion -}} + {{- $metaItems = $metaItems | append (dict "label" "Version" "value" $languageVersion) -}} +{{- end -}} +{{- if or $kernelDisplay $kernelName -}} + {{- $metaItems = $metaItems | append (dict "label" "Kernel" "value" (strings.TrimSpace (printf "%s %s" $kernelDisplay $kernelName))) -}} +{{- end -}} +{{- if $nbformat -}} + {{- $metaItems = $metaItems | append (dict "label" "nbformat" "value" $nbformat) -}} +{{- end -}} +{{- with index $metadata "authors" -}} + {{- $authors := slice -}} + {{- if reflect.IsSlice . -}} + {{- range . -}} + {{- $name := "" -}} + {{- with index . "name" -}} + {{- $name = printf "%v" . -}} + {{- end -}} + {{- if not $name -}} + {{- $name = printf "%v" . -}} + {{- end -}} + {{- if $name -}} + {{- $authors = $authors | append $name -}} + {{- end -}} + {{- end -}} + {{- else -}} + {{- $authors = $authors | append (printf "%v" .) -}} + {{- end -}} + {{- if gt (len $authors) 0 -}} + {{- $metaItems = $metaItems | append (dict "label" "Authors" "value" (delimit $authors ", ")) -}} + {{- end -}} +{{- end -}} + +{{- $sourceURLIsRemote := false -}} +{{- if $sourceURL -}} + {{- $sourceURLIsRemote = ne (urls.Parse $sourceURL).Scheme "" -}} + {{- if not $sourceURLIsRemote -}} + {{- if not (strings.HasPrefix $sourceURL "/") -}} + {{- $sourceURL = printf "/%s" $sourceURL -}} + {{- end -}} + {{- $sourceURL = relLangURL $sourceURL -}} + {{- end -}} +{{- end -}} + +{{- $styleAttr := printf "--hb-notebook-output-max-height:%s;" $maxOutputHeight | safeCSS -}} +
    +
    +
    +

    {{ $title }}

    + {{- with $subtitleParts }} +

    {{ delimit . " · " }}

    + {{- end }} +
    + {{- if and $showDownload $sourceURL }} + + {{ partial "functions/get_icon" (dict "name" "arrow-down-tray" "attributes" "class=\"w-4 h-4\"") }} + {{ $downloadLabel }} + + {{- end }} +
    + + {{- if and $showMetadata (gt (len $metaItems) 0) }} + + {{- end }} + + {{- $visibleScratch := newScratch -}} + {{- $visibleScratch.Set "visible" 0 -}} +
    + {{- range $cells }} + {{- $cellType := index . "cell_type" | default "raw" -}} + {{- $cellMetadata := index . "metadata" | default dict -}} + {{- $cellTags := slice -}} + {{- with index $cellMetadata "tags" -}} + {{- if reflect.IsSlice . -}} + {{- range . -}} + {{- $cellTags = $cellTags | append (printf "%v" .) -}} + {{- end -}} + {{- else -}} + {{- $cellTags = $cellTags | append (printf "%v" .) -}} + {{- end -}} + {{- end -}} + {{- $executionCount := "" -}} + {{- with index . "execution_count" -}} + {{- $executionCount = printf "%v" . -}} + {{- end -}} + {{- $outputs := slice -}} + {{- with index . "outputs" -}} + {{- if reflect.IsSlice . -}} + {{- $outputs = . -}} + {{- end -}} + {{- end -}} + {{- $shouldRender := or + (and (eq $cellType "markdown") $showMarkdown) + (and (eq $cellType "raw") $showMarkdown) + (and (eq $cellType "code") (or $showCode (and $showOutputs (gt (len $outputs) 0)))) + -}} + {{- if $shouldRender }} + {{- $visibleScratch.Add "visible" 1 -}} +
    +
    + + {{- if eq $cellType "code" -}} + {{- printf "In [%s]" (cond $executionCount $executionCount " ") -}} + {{- else -}} + {{- strings.Title $cellType -}} + {{- end -}} + + {{- if gt (len $cellTags) 0 }} +
    + {{- range $cellTags }} + {{ . }} + {{- end }} +
    + {{- end }} +
    + + {{- if eq $cellType "markdown" }} + {{- $source := index . "source" -}} + {{- $sourceContent := "" -}} + {{- if reflect.IsSlice $source -}} + {{- $sourceContent = delimit $source "" -}} + {{- else if $source -}} + {{- $sourceContent = printf "%v" $source -}} + {{- end -}} + {{- $sourceContent = replace $sourceContent "\r\n" "\n" -}} + {{- if $sourceContent }} +
    + {{ $sourceContent | markdownify }} +
    + {{- end -}} + {{- else if eq $cellType "raw" }} + {{- $raw := index . "source" -}} + {{- $rawContent := "" -}} + {{- if reflect.IsSlice $raw -}} + {{- $rawContent = delimit $raw "" -}} + {{- else if $raw -}} + {{- $rawContent = printf "%v" $raw -}} + {{- end -}} + {{- if $rawContent }} +
    {{ $rawContent | htmlEscape }}
    + {{- end -}} + {{- else if eq $cellType "code" }} + {{- $source := index . "source" -}} + {{- $sourceContent := "" -}} + {{- if reflect.IsSlice $source -}} + {{- $sourceContent = delimit $source "" -}} + {{- else if $source -}} + {{- $sourceContent = printf "%v" $source -}} + {{- end -}} + {{- $sourceContent = replace $sourceContent "\r\n" "\n" -}} + {{- $sourceContent = strings.TrimSuffix "\n" $sourceContent -}} + {{- $sourceContent = strings.TrimSuffix "\r" $sourceContent -}} + {{- if and $showCode $sourceContent }} +
    + {{- $options := "" -}} + {{- if $lineNumbers -}} + {{- $options = "linenos=table" -}} + {{- end -}} + {{- $hl := highlight $sourceContent $language $options -}} + {{- if $hl -}} + {{ $hl | safeHTML }} + {{- else -}} +
    {{ $sourceContent | htmlEscape }}
    + {{- end -}} +
    + {{- end -}} + + {{- if and $showOutputs (gt (len $outputs) 0) }} +
    + {{- range $outputs }} + {{- $outputType := index . "output_type" | default "" -}} + {{- if eq $outputType "stream" }} + {{- $text := index . "text" -}} + {{- $textContent := "" -}} + {{- if reflect.IsSlice $text -}} + {{- $textContent = delimit $text "" -}} + {{- else if $text -}} + {{- $textContent = printf "%v" $text -}} + {{- end -}} +
    {{ $textContent | htmlEscape }}
    + {{- else if eq $outputType "error" }} + {{- $ename := index . "ename" | default "" -}} + {{- $evalue := index . "evalue" | default "" -}} + {{- $trace := index . "traceback" | default slice -}} + {{- $traceContent := "" -}} + {{- if reflect.IsSlice $trace -}} + {{- $traceContent = delimit $trace "\n" -}} + {{- else if $trace -}} + {{- $traceContent = printf "%v" $trace -}} + {{- end -}} +
    + {{ printf "%s: %s" $ename $evalue }} + {{- if $traceContent }} +
    {{ $traceContent | htmlEscape }}
    + {{- end -}} +
    + {{- else }} + {{- $data := index . "data" | default dict -}} + {{- $outputScratch := newScratch -}} + {{- $outputScratch.Set "rendered" false -}} + {{- with index $data "text/html" }} + {{- $htmlPayload := "" -}} + {{- if reflect.IsSlice . -}} + {{- $htmlPayload = delimit . "" -}} + {{- else -}} + {{- $htmlPayload = printf "%v" . -}} + {{- end -}} + {{- if $htmlPayload }} +
    {{ $htmlPayload | safeHTML }}
    + {{- $outputScratch.Set "rendered" true -}} + {{- end -}} + {{- end }} + {{- with index $data "text/markdown" }} + {{- $markdownPayload := "" -}} + {{- if reflect.IsSlice . -}} + {{- $markdownPayload = delimit . "" -}} + {{- else -}} + {{- $markdownPayload = printf "%v" . -}} + {{- end -}} + {{- if $markdownPayload }} +
    + {{ $markdownPayload | markdownify }} +
    + {{- $outputScratch.Set "rendered" true -}} + {{- end -}} + {{- end }} + {{- with index $data "text/latex" }} + {{- $latexPayload := "" -}} + {{- if reflect.IsSlice . -}} + {{- $latexPayload = delimit . "" -}} + {{- else -}} + {{- $latexPayload = printf "%v" . -}} + {{- end -}} + {{- if $latexPayload }} +
    {{ printf "$$%s$$" $latexPayload | safeHTML }}
    + {{- $outputScratch.Set "rendered" true -}} + {{- end -}} + {{- end }} + {{- with index $data "image/png" }} + {{- $pngPayload := printf "%v" . -}} + {{- if $pngPayload }} +
    + Notebook output image +
    + {{- $outputScratch.Set "rendered" true -}} + {{- end -}} + {{- end }} + {{- with index $data "image/jpeg" }} + {{- $jpegPayload := printf "%v" . -}} + {{- if $jpegPayload }} +
    + Notebook output image +
    + {{- $outputScratch.Set "rendered" true -}} + {{- end -}} + {{- end }} + {{- with index $data "image/svg+xml" }} + {{- $svgPayload := "" -}} + {{- if reflect.IsSlice . -}} + {{- $svgPayload = delimit . "" -}} + {{- else -}} + {{- $svgPayload = printf "%v" . -}} + {{- end -}} + {{- if $svgPayload }} +
    {{ $svgPayload | safeHTML }}
    + {{- $outputScratch.Set "rendered" true -}} + {{- end -}} + {{- end }} + {{- with or (index $data "application/vnd.plotly.v1+json") (index $data "application/json") }} + {{- $jsonFormatted := . | jsonify (dict "indent" " ") -}} +
    {{ $jsonFormatted }}
    + {{- $outputScratch.Set "rendered" true -}} + {{- end }} + {{- if not ($outputScratch.Get "rendered") }} + {{- with index $data "text/plain" }} + {{- $textPayload := "" -}} + {{- if reflect.IsSlice . -}} + {{- $textPayload = delimit . "" -}} + {{- else -}} + {{- $textPayload = printf "%v" . -}} + {{- end -}} + {{- if $textPayload }} +
    {{ $textPayload | htmlEscape }}
    + {{- $outputScratch.Set "rendered" true -}} + {{- end -}} + {{- end }} + {{- end }} + {{- if not ($outputScratch.Get "rendered") }} +
    {{ $data | jsonify | htmlEscape }}
    + {{- end }} + {{- end }} + {{- end }} +
    + {{- end }} + {{- end }} +
    + {{- end }} + {{- end }} +
    + + {{- if eq ($visibleScratch.Get "visible") 0 }} +
    {{ $emptyMessage }}
    + {{- end }} +
    + Powered by Hugo Blox Kit - https://github.com/HugoBlox/kit +
    +
    diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/parse_block_v3.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/parse_block_v3.html new file mode 100644 index 0000000..d0c222c --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/parse_block_v3.html @@ -0,0 +1,312 @@ +{{/* Hugo Blox Parser v3 - Preact Component Support */}} +{{/* Documentation: https://hugoblox.com/blocks/ */}} +{{/* License: https://github.com/HugoBlox/kit/blob/main/LICENSE.md */}} + +{{ $page := .page }} +{{ $block := .block }} + +{{- $block_type := partial "hbx/resolve-block-param" (dict "config" $block "context" "content section") | default "markdown" -}} +{{ $block_type = lower $block_type }} + +{{/* Handle block renames/aliases */}} +{{ range $r := hugo.Data.blox_aliases.renames }} + {{ $block_type = cond (eq $block_type $r.old) $r.new $block_type }} +{{ end }} + +{{/* Check if this is a Preact-enabled block by looking for component file */}} +{{ $component_path := printf "js/hbx/blocks/%s/component.jsx" $block_type }} +{{ $is_preact := resources.Get $component_path }} + +{{/* Apply styling wrapper for all blocks (both Preact and traditional) */}} +{{ $bg := $block.design.background }} +{{ $style := "" }} +{{ $style_bg := "" }} + +{{/* Process background colors */}} +{{ if $bg.color }} + {{ $color_type := printf "%T" $bg.color }} + {{ if eq $color_type "map[string]interface {}" }} + {{ if and $bg.color.light $bg.color.dark }} + {{ $light_color := $bg.color.light }} + {{ $dark_color := $bg.color.dark }} + + {{ $style_bg = printf "background-color: %s;" $light_color }} + {{ $style_bg = printf "%s--dark-bg-color: %s;" $style_bg $dark_color }} + {{ else if $bg.color.light }} + {{ $light_color := $bg.color.light }} + {{ $style_bg = printf "background-color: %s;" $light_color }} + {{ else if $bg.color.dark }} + {{ $dark_color := $bg.color.dark }} + {{ $style_bg = printf "--dark-bg-color: %s; background-color: var(--dark-bg-color);" $dark_color }} + {{ end }} + {{ else }} + {{ $bg_color := $bg.color }} + {{ $style_bg = printf "background-color: %s;" $bg_color }} + {{ end }} +{{ end }} + +{{/* Process gradients and images */}} +{{ $background_layers := slice }} +{{ $gradient_layer := "" }} +{{ $has_gradient_mesh := false }} +{{ $gradient_mesh_html := "" }} + +{{/* Enhanced Gradient Mesh System */}} +{{ $gradient_mesh := $bg.gradient_mesh | default dict }} +{{ if $gradient_mesh.enable }} + {{ $has_gradient_mesh = true }} + {{ $mesh_style := $gradient_mesh.style | default "orbs" }} + {{ $mesh_animation_raw := $gradient_mesh.animation | default "pulse" }} + {{ $mesh_intensity := $gradient_mesh.intensity | default "subtle" }} + {{/* Auto-theme: Mix Primary and Secondary brand colors for dynamic personalization */}} + {{ $mesh_colors := $gradient_mesh.colors | default (slice "primary-500/20" "secondary-500/20") }} + + {{/* Map animation names to CSS classes */}} + {{ $mesh_animation := "" }} + {{ if eq $mesh_animation_raw "pulse" }} + {{ $mesh_animation = "pulse" }} + {{ else if eq $mesh_animation_raw "float" }} + {{ $mesh_animation = "float" }} + {{ else if eq $mesh_animation_raw "rotate" }} + {{ $mesh_animation = "rotate-slow" }} + {{ else if ne $mesh_animation_raw "none" }} + {{ $mesh_animation = "pulse" }} {{/* Default fallback */}} + {{ end }} + + {{/* Build gradient mesh HTML */}} + {{ $mesh_html := "
    " }} + + {{/* Base gradient overlay */}} + {{ $base_gradient := printf "
    " (index $mesh_colors 0) (index $mesh_colors 1) }} + {{ $mesh_html = printf "%s%s" $mesh_html $base_gradient }} + + {{/* Animated elements based on style */}} + {{ if eq $mesh_style "orbs" }} + {{ $orb_count := $gradient_mesh.orb_count | default 2 }} + {{ $orb_positions := $gradient_mesh.positions | default (slice "top-0 left-1/4" "bottom-0 right-1/4") }} + {{ $orb_sizes := $gradient_mesh.sizes | default (slice "w-96 h-96" "w-96 h-96") }} + + {{ range $index, $position := first $orb_count $orb_positions }} + {{ $size := index $orb_sizes $index | default "w-96 h-96" }} + {{ $color := index $mesh_colors $index | default "primary-500/30" }} + {{ $blur_class := cond (eq $mesh_intensity "bold") "blur-2xl" (cond (eq $mesh_intensity "medium") "blur-3xl" "blur-3xl") }} + {{ $opacity := cond (eq $mesh_intensity "bold") "40" (cond (eq $mesh_intensity "medium") "30" "30") }} + + {{/* Extract base color and adjust opacity for orbs */}} + {{ $orb_color := $color }} + {{ if not (in $color "/") }} + {{ $orb_color = printf "%s/%s" $color $opacity }} + {{ end }} + + {{ $animation_delay := "" }} + {{ if gt $index 0 }} + {{ $animation_delay = printf " style=\"animation-delay: %ds;\"" (mul $index 2) }} + {{ end }} + + {{/* Build orb with or without animation */}} + {{ $animate_class := cond (ne $mesh_animation "") (printf "animate-%s" $mesh_animation) "" }} + {{ $orb := printf "
    " $position $size $orb_color $blur_class $animate_class $animation_delay }} + {{ $mesh_html = printf "%s%s" $mesh_html $orb }} + {{ end }} + + {{ else if eq $mesh_style "waves" }} + {{/* Flowing wave effect - multiple horizontal bands */}} + {{ $wave_count := $gradient_mesh.wave_count | default 3 }} + {{ $blur_class := cond (eq $mesh_intensity "bold") "blur-2xl" (cond (eq $mesh_intensity "medium") "blur-3xl" "blur-3xl") }} + + {{ range $index := seq 0 (sub $wave_count 1) }} + {{ $color_index := mod $index (len $mesh_colors) }} + {{ $color := index $mesh_colors $color_index }} + {{ $top_pos := mul $index 33 }} + {{ $height := "h-64" }} + {{ $anim_delay := printf " style=\"animation-delay: %ds; animation-duration: %ds;\"" (mul $index 1) (add 8 (mul $index 2)) }} + + {{/* Apply animation if not none */}} + {{ $animate_class := cond (ne $mesh_animation "") (printf "animate-%s" $mesh_animation) "" }} + {{ $wave := printf "
    " $height $color $blur_class $animate_class $top_pos $anim_delay }} + {{ $mesh_html = printf "%s%s" $mesh_html $wave }} + {{ end }} + + {{ else if eq $mesh_style "dots" }} + {{/* Dotted grid pattern */}} + {{ $dot_size := $gradient_mesh.dot_size | default "w-4 h-4" }} + {{ $spacing := $gradient_mesh.spacing | default "16" }} + {{ $color := index $mesh_colors 0 | default "primary-500/20" }} + + {{/* Create a dotted pattern background */}} + {{ $dots := printf "
    " $spacing $spacing (div (int $spacing) 2) (div (int $spacing) 2) }} + {{ $mesh_html = printf "%s%s" $mesh_html $dots }} + + {{ else if eq $mesh_style "grid" }} + {{/* Grid lines pattern */}} + {{ $color := index $mesh_colors 0 | default "primary-500/10" }} + {{ $line_width := $gradient_mesh.line_width | default "1" }} + {{ $spacing := $gradient_mesh.spacing | default "32" }} + + {{/* Create grid pattern */}} + {{ $grid := printf "
    " $line_width $line_width $line_width $line_width $spacing $spacing }} + {{ $mesh_html = printf "%s%s" $mesh_html $grid }} + {{ end }} + + {{ $mesh_html = printf "%s
    " $mesh_html }} + {{ $gradient_mesh_html = $mesh_html | safeHTML }} +{{ end }} + +{{/* Legacy simple gradient support */}} +{{ if and $bg.gradient.start $bg.gradient.end }} + {{ $angle := string $bg.gradient.direction | default "135" }} + {{ $start_color := $bg.gradient.start }} + {{ $end_color := $bg.gradient.end }} + {{ $gradient_layer = printf "linear-gradient(%sdeg, %s, %s)" $angle $start_color $end_color }} +{{ end }} + +{{/* Process video backgrounds */}} +{{ $bg_video := "" }} +{{ $bg_video_class := "" }} +{{ if $bg.video.filename }} + {{ $bg_video = resources.Get (printf "media/%s" $bg.video.filename) }} + {{ if $bg.video.flip }} + {{ $bg_video_class = "flip" }} + {{ end }} +{{ end }} + +{{/* Process image backgrounds */}} +{{ if $bg.image.filename }} + {{ $bg_img := resources.Get (printf "media/%s" $bg.image.filename) }} + {{ if $bg_img }} + {{ if reflect.IsImageResourceProcessable $bg_img }} + {{ $bg_img = $bg_img.Fit "1920x1920 webp" }} + {{ end }} + {{ $image_layer := printf "url('%s')" $bg_img.RelPermalink }} + {{ $background_layers = $background_layers | append $image_layer }} + {{ else }} + {{ errorf "Couldn't find `%s` in the `assets/media/` folder - please add it." $bg.image.filename }} + {{ end }} +{{ end }} + +{{ if or $background_layers $gradient_layer }} + {{ $all_layers := $background_layers }} + {{ if $gradient_layer }} + {{ $all_layers = $all_layers | append $gradient_layer }} + {{ end }} + {{ if $all_layers }} + {{ $combined_backgrounds := delimit $all_layers ", " }} + {{ $style_bg = printf "%sbackground-image: %s;" $style_bg $combined_backgrounds }} + + {{/* Background image size/position/repeat properties */}} + {{ $layer_count := len $all_layers }} + {{ if gt $layer_count 1 }} + {{/* Multiple layers: image + gradient */}} + {{ $img_size := $bg.image.size | default "cover" }} + {{ $img_position := $bg.image.position | default "center" }} + {{ $img_repeat := $bg.image.repeat | default "no-repeat" }} + {{ if eq $img_position "repeat" }} + {{ $img_repeat = "repeat" }} + {{ $img_position = "center" }} + {{ end }} + {{ $style_bg = printf "%sbackground-size: %s, cover;" $style_bg $img_size }} + {{ $style_bg = printf "%sbackground-position: %s, center;" $style_bg $img_position }} + {{ $style_bg = printf "%sbackground-repeat: %s, no-repeat;" $style_bg $img_repeat }} + {{ else }} + {{/* Single layer */}} + {{ if $background_layers }} + {{ with $bg.image.size }} + {{ $style_bg = printf "%sbackground-size: %s;" $style_bg . }} + {{ end }} + {{ with $bg.image.position }} + {{ if eq . "repeat" }} + {{ $style_bg = printf "%sbackground-position: center;" $style_bg }} + {{ $style_bg = printf "%sbackground-repeat: repeat;" $style_bg }} + {{ else }} + {{ $style_bg = printf "%sbackground-position: %s;" $style_bg . }} + {{ end }} + {{ end }} + {{ end }} + {{ end }} + {{ end }} +{{ end }} + +{{/* Background image filters: brightness, blur, contrast, saturate, grayscale */}} +{{ with $bg.image.filters }} + {{ $filter_parts := slice }} + {{ with .brightness }} + {{ $filter_parts = $filter_parts | append (printf "brightness(%s)" (string .)) }} + {{ end }} + {{ with .blur }} + {{ $filter_parts = $filter_parts | append (printf "blur(%s)" (string .)) }} + {{ end }} + {{ with .contrast }} + {{ $filter_parts = $filter_parts | append (printf "contrast(%s)" (string .)) }} + {{ end }} + {{ with .saturate }} + {{ $filter_parts = $filter_parts | append (printf "saturate(%s)" (string .)) }} + {{ end }} + {{ with .grayscale }} + {{ $filter_parts = $filter_parts | append (printf "grayscale(%s)" (string .)) }} + {{ end }} + {{ if $filter_parts }} + {{ $style_bg = printf "%sfilter: %s;" $style_bg (delimit $filter_parts " ") }} + {{ end }} +{{ end }} + +{{ with $block.design.spacing.padding }} + {{ $style_pad := printf "padding: %s;" (delimit . " ") }} + {{ $style = print $style $style_pad }} +{{ end }} + +{{ with $block.design.css_style }} + {{ $style = print $style . }} +{{ end }} + +{{/* Support for clip path (design.clip_path) */}} +{{ with $block.design.clip_path }} + {{ $style = printf "%sclip-path: %s;" $style . }} +{{ end }} + +{{ $hash_id := $block.id | default (printf "section-%s" (replace $block_type "." "-")) }} +{{ $css_classes := $block.design.css_class | default "" }} +{{ $widget_class := printf "blox-%s" (strings.ReplacePairs $block_type "." "-" "_" "-") }} + +{{/* Extract background-specific CSS classes */}} +{{ $bg_css_classes := $bg.css_class | default "" }} + +{{/* Route to appropriate handler */}} +{{ if $is_preact }} + {{/* Render Preact block with styling wrapper */}} +
    + {{/* Gradient Mesh Background */}} + {{ if $has_gradient_mesh }}{{ $gradient_mesh_html }}{{ end }} +
    + {{with $bg_video}}{{end}} +
    + {{/* Use generic Preact wrapper for content */}} + {{ partial "blox/preact-wrapper" (dict "wcPage" $page "wcBlock" $block "wcBlockType" $block_type "wcIdentifier" $hash_id) }} +
    +{{ else }} + {{/* Fall back to traditional Go template blocks */}} + {{ $block_path := printf "hbx/blocks/%s/block.html" $block_type }} + {{ if not (templates.Exists (printf "_partials/%s" $block_path)) }} + {{ errorf "%s uses a `%s` block but the `%s` block was not found at `%s`. Check the name of the block and ensure it exists in the blox/%s/ directory." $page.File.Path $block_type $block_type $block_path $block_type }} + {{ end }} + + {{/* Handle legacy block requirements */}} + {{ if $block.Page.Store.Get "has_mermaid" }} + {{ $page.Page.Store.Set "has_mermaid" true }} + {{ end }} + + {{ if (gt (len (findRE `\{\{< gallery` $block.content.text 1)) 0) }} + {{ $page.Page.Store.Set "has_gallery" true }} + {{ end }} + + {{ $widget_args := dict "wcPage" $page "wcBlock" $block "wcIdentifier" $hash_id }} + + {{/* Render traditional block with wrapper */}} +
    + {{/* Gradient Mesh Background */}} + {{ if $has_gradient_mesh }}{{ $gradient_mesh_html }}{{ end }} +
    + {{with $bg_video}}{{end}} +
    + {{ partial $block_path $widget_args }} +
    +{{ end }} \ No newline at end of file diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/process_responsive_image.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/process_responsive_image.html new file mode 100644 index 0000000..e5e02de --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/process_responsive_image.html @@ -0,0 +1,143 @@ +{{/* +Responsive Image Processor for Hugo Blox Kit (HBB) +Uses Hugo's .Process method with configurable quality and responsive breakpoints + +Parameters: +- image: Hugo image resource (required) +- sizes: Array of widths for responsive breakpoints (optional, defaults to comprehensive set) +- mode: Processing mode - "fit", "fill", "resize", or "responsive" (optional, defaults to "fit") + - "fit": Maintains original aspect ratio, scales to fit within width (ignores aspect_ratio param) + - "fill": Crops to exact dimensions, requires aspect_ratio for height calculation + - "resize": Same as fit, maintains aspect ratio + - "responsive": Creates responsive variants from already-processed image (no further processing) +- anchor: Anchor point for cropping when using fill (optional, defaults to "smart") +- aspect_ratio: Target aspect ratio for fill mode only (optional, format "width:height") +- quality: Image quality override (optional, uses Hugo config by default) + +Returns: Map with processed images and srcset string +- .srcset: Complete srcset attribute value +- .fallback: Default/smallest image for src attribute +- .sizes: Array of processed image resources +*/}} + +{{ $image := .image }} +{{ $sizes := .sizes | default (slice 320 480 768 1024 1366 1920 2560) }} +{{ $mode := .mode | default "fit" }} +{{ $anchor := .anchor | default "smart" }} +{{ $aspect_ratio := .aspect_ratio | default "" }} +{{ $quality := .quality }} + +{{/* Initialize return variables */}} +{{ $processed_images := slice }} +{{ $srcset_parts := slice }} +{{ $fallback_image := "" }} + +{{/* + Processability check using Hugo's reflect API: + - reflect.IsImageResourceProcessable: true for JPEG, PNG, WebP, GIF, TIFF, BMP — false for SVG. + - GIF exclusion: Hugo *can* process GIFs, but doing so strips animation frames. + We intentionally skip GIF processing to preserve user-optimized animated GIFs. +*/}} +{{ $isProcessable := reflect.IsImageResourceProcessable $image }} +{{ $isGIF := and $isProcessable (eq $image.MediaType.SubType "gif") }} + +{{ if and $isProcessable (not $isGIF) }} + {{/* Handle responsive mode - for already processed images */}} + {{ if eq $mode "responsive" }} + {{/* Convert to WebP if needed */}} + {{ $base_image := $image }} + {{ $base_image = $image.Process "webp" }} + + {{/* Create responsive variants by resizing down from the processed image */}} + {{ range $width := $sizes }} + {{/* Only create smaller variants */}} + {{ if and (le $width $base_image.Width) (gt $width 0) }} + {{ $resized := $base_image.Resize (printf "%dx webp" $width) }} + {{ $processed_images = $processed_images | append $resized }} + + {{/* Add to srcset */}} + {{ $srcset_part := printf "%s %dw" $resized.RelPermalink $resized.Width }} + {{ $srcset_parts = $srcset_parts | append $srcset_part }} + + {{/* Set fallback to smallest image */}} + {{ if not $fallback_image }} + {{ $fallback_image = $resized }} + {{ end }} + {{ end }} + {{ end }} + + {{/* Always include the original size as the largest option */}} + {{ $srcset_part := printf "%s %dw" $base_image.RelPermalink $base_image.Width }} + {{ $srcset_parts = $srcset_parts | append $srcset_part }} + {{ $processed_images = $processed_images | append $base_image }} + {{ if not $fallback_image }}{{ $fallback_image = $base_image }}{{ end }} + + {{ else }} + {{/* Process images for each breakpoint */}} + {{ range $width := $sizes }} + {{/* Only process if the source image is larger than target width */}} + {{ if ge $image.Width $width }} + {{ $process_params := "" }} + {{/* Build processing parameters based on mode */}} + {{- if eq $mode "resize" -}} + {{- if $quality -}} + {{- $process_params = printf "resize %dx webp q%d" $width $quality -}} + {{- else -}} + {{- $process_params = printf "resize %dx webp" $width -}} + {{- end -}} + {{- else if eq $mode "fill" -}} + {{- if $aspect_ratio -}} + {{- $ratio_parts := split $aspect_ratio ":" -}} + {{- $ratio_width := int (index $ratio_parts 0) -}} + {{- $ratio_height := int (index $ratio_parts 1) -}} + {{- $height := div (mul $width $ratio_height) $ratio_width -}} + {{- if $quality -}} + {{- $process_params = printf "fill %dx%d webp q%d %s" $width $height $quality $anchor -}} + {{- else -}} + {{- $process_params = printf "fill %dx%d webp %s" $width $height $anchor -}} + {{- end -}} + {{- else -}} + {{/* Fill mode without aspect ratio - use resize instead to maintain original proportions */}} + {{- if $quality -}} + {{- $process_params = printf "resize %dx webp q%d" $width $quality -}} + {{- else -}} + {{- $process_params = printf "resize %dx webp" $width -}} + {{- end -}} + {{- end -}} + {{- else -}} + {{/* Default to fit - always maintain original aspect ratio */}} + {{/* Fit mode should not force an aspect ratio, it should fit within bounds */}} + {{- if $quality -}} + {{- $process_params = printf "resize %dx webp q%d" $width $quality -}} + {{- else -}} + {{- $process_params = printf "resize %dx webp" $width -}} + {{- end -}} + {{- end -}} + + {{/* Process the image */}} + {{- $processed := $image.Process $process_params -}} + {{- $processed_images = $processed_images | append $processed -}} + + {{/* Add to srcset */}} + {{- $srcset_part := printf "%s %dw" $processed.RelPermalink $processed.Width -}} + {{- $srcset_parts = $srcset_parts | append $srcset_part -}} + + {{/* Set fallback to smallest image */}} + {{- if not $fallback_image -}} + {{- $fallback_image = $processed -}} + {{- end -}} + {{- end -}} + {{- end -}} + {{ end }} +{{- else -}} + {{/* Non-processable (SVG) or intentionally skipped (GIF): pass through without srcset */}} + {{- $fallback_image = $image -}} + {{- $processed_images = $processed_images | append $image -}} +{{- end -}} + +{{/* Return processed data */}} +{{ return (dict + "srcset" (delimit $srcset_parts ", ") + "fallback" $fallback_image + "sizes" $processed_images +) }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/render_callout.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/render_callout.html new file mode 100644 index 0000000..59ac5e0 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/render_callout.html @@ -0,0 +1,155 @@ +{{/* + Hugo Blox Kit Shared Callout Renderer + + Renders callouts with consistent styling for both shortcodes and render hooks. + + Parameters: + - type: The callout type (note, tip, important, warning, caution, or custom icon name) + - content: The callout content (HTML) + - title: Optional title for the callout + - source: "shortcode" or "renderhook" for context +*/}} + +{{ $type := (lower .type) | default "note" }} +{{ $content := .content }} +{{ $title := .title }} +{{ if or (not $title) (eq $title "") }} + {{/* Try i18n translation with "callout_" prefix, fall back to title case */}} + {{ $i18n_key := printf "callout_%s" $type }} + {{ $title = or (i18n $i18n_key) (title $type) }} +{{ end }} +{{ $source := .source | default "shortcode" }} + +{{/* Define icon and styling mappings for all Obsidian callout types */}} +{{ $alertConfigs := dict + "note" (dict + "icon" "pencil" + "class" "bg-blue-100 dark:bg-blue-900" + "textClass" "text-blue-600 dark:text-blue-300" + "borderClass" "border-blue-500" + ) + "abstract" (dict + "icon" "clipboard-document-list" + "class" "bg-cyan-100 dark:bg-cyan-900" + "textClass" "text-cyan-600 dark:text-cyan-300" + "borderClass" "border-cyan-500" + ) + "summary" (dict + "icon" "clipboard-document-list" + "class" "bg-cyan-100 dark:bg-cyan-900" + "textClass" "text-cyan-600 dark:text-cyan-300" + "borderClass" "border-cyan-500" + ) + "info" (dict + "icon" "information-circle" + "class" "bg-blue-100 dark:bg-blue-900" + "textClass" "text-blue-600 dark:text-blue-300" + "borderClass" "border-blue-500" + ) + "todo" (dict + "icon" "check-circle" + "class" "bg-blue-100 dark:bg-blue-900" + "textClass" "text-blue-600 dark:text-blue-300" + "borderClass" "border-blue-500" + ) + "tip" (dict + "icon" "light-bulb" + "class" "bg-emerald-100 dark:bg-emerald-900" + "textClass" "text-emerald-600 dark:text-emerald-300" + "borderClass" "border-emerald-500" + ) + "success" (dict + "icon" "check-circle" + "class" "bg-green-100 dark:bg-green-900" + "textClass" "text-green-600 dark:text-green-300" + "borderClass" "border-green-500" + ) + "question" (dict + "icon" "question-mark-circle" + "class" "bg-yellow-100 dark:bg-yellow-900" + "textClass" "text-yellow-700 dark:text-yellow-300" + "borderClass" "border-yellow-500" + ) + "warning" (dict + "icon" "exclamation-triangle" + "class" "bg-orange-100 dark:bg-orange-900" + "textClass" "text-orange-600 dark:text-orange-300" + "borderClass" "border-orange-500" + ) + "failure" (dict + "icon" "x-circle" + "class" "bg-red-100 dark:bg-red-900" + "textClass" "text-red-600 dark:text-red-300" + "borderClass" "border-red-500" + ) + "danger" (dict + "icon" "exclamation-triangle" + "class" "bg-red-100 dark:bg-red-900" + "textClass" "text-red-600 dark:text-red-300" + "borderClass" "border-red-500" + ) + "bug" (dict + "icon" "bug-ant" + "class" "bg-red-100 dark:bg-red-900" + "textClass" "text-red-600 dark:text-red-300" + "borderClass" "border-red-500" + ) + "example" (dict + "icon" "beaker" + "class" "bg-purple-100 dark:bg-purple-900" + "textClass" "text-purple-600 dark:text-purple-300" + "borderClass" "border-purple-500" + ) + "quote" (dict + "icon" "chat-bubble-left-right" + "class" "bg-gray-100 dark:bg-gray-800" + "textClass" "text-gray-600 dark:text-gray-300" + "borderClass" "border-gray-500" + ) + "important" (dict + "icon" "exclamation-circle" + "class" "bg-purple-100 dark:bg-purple-900" + "textClass" "text-purple-600 dark:text-purple-300" + "borderClass" "border-purple-500" + ) + "caution" (dict + "icon" "exclamation-triangle" + "class" "bg-red-100 dark:bg-red-900" + "textClass" "text-red-600 dark:text-red-300" + "borderClass" "border-red-500" + ) +}} + +{{/* Get configuration for this callout type, or use fallback */}} +{{ $config := index $alertConfigs $type }} +{{ $icon := $type }} +{{ $class := "bg-blue-100 dark:bg-blue-900" }} +{{ $textClass := "text-blue-600 dark:text-blue-300" }} +{{ $borderClass := "border-blue-500" }} + +{{ if $config }} + {{ $icon = $config.icon }} + {{ $class = $config.class }} + {{ $textClass = $config.textClass }} + {{ $borderClass = $config.borderClass }} +{{ end }} + +
    + + {{ partial "functions/get_icon" (dict "name" $icon "attributes" "height=\"24\"") }} + +
    + {{/* Display title if provided */}} + {{- with $title -}} +
    + {{- . -}} +
    + {{- end -}} + {{/* Display content */}} +
    + {{- $content -}} +
    +
    +
    \ No newline at end of file diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/render_view.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/render_view.html new file mode 100644 index 0000000..e7ee09e --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/render_view.html @@ -0,0 +1,23 @@ +{{/* Hugo Blox Kit content preview renderer */}} + +{{ $page := .page }} +{{ $item := .item }} +{{ $view := lower .view | default "card" }} +{{ $fragment := .fragment | default "body" }} +{{ $view_dtype := printf "%T" $view }} +{{ $index := .index }} +{{ $html := "" }} + +{{ if not (templates.Exists (printf "_partials/views/%s.html" $view)) }} + {{/* Fallback to card view */}} + {{ warnf "Failed to locate view at `_partials/views/%s.html`. Check you specified a supported `view` in `%s`" $view $page.File.Path }} + {{ $view = "card" }} +{{ end }} + +{{ if eq $fragment "body" }} + {{ $html = (partial (printf "views/%s" $view) (dict "page" $page "item" $item "index" $index "config" (.config | default dict))) }} +{{ else }} + {{ $html = (partial (printf "views/%s--%s" $view $fragment) (dict "page" $page "item" $item "index" $index "config" (.config | default dict))) }} +{{ end }} + +{{ return $html }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/theme_generator.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/theme_generator.html new file mode 100644 index 0000000..5ce9e39 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/theme_generator.html @@ -0,0 +1,229 @@ +{{/* + HugoBlox Theme Engine: Generates CSS Variables for Light and Dark modes + + Input: Theme config dict from get_theme_config helper: + - mode: 'light' | 'dark' | 'system' + - light: Light theme pack name + - dark: Dark theme pack name + - colors: Global color overrides { primary, secondary, neutral } + - colors_light: Light-mode specific color overrides + - colors_dark: Dark-mode specific color overrides + - surfaces: Semantic surface color overrides +*/}} + +{{ $config := . }} +{{ $light_theme_name := $config.light | default "default" }} +{{ $dark_theme_name := $config.dark | default "default" }} +{{ $global_colors := $config.colors | default dict }} +{{ $colors_light := $config.colors_light | default dict }} +{{ $colors_dark := $config.colors_dark | default dict }} +{{ $surfaces_overrides := $config.surfaces | default dict }} + +{{/* Load Theme Data using the new loader */}} +{{ if not hugo.Data.themes }} + {{ warnf "THEME ENGINE ERROR: hugo.Data.themes is empty! Check modules/blox-tailwind/data/themes/" }} +{{ end }} + +{{ $light_theme := partial "functions/load_theme_pack" $light_theme_name }} +{{ $dark_theme := partial "functions/load_theme_pack" $dark_theme_name }} + +{{/* Fallback for missing themes */}} +{{ if not $light_theme }} + {{ warnf "THEME ENGINE WARNING: Light theme '%s' not found or invalid. Defaulting to 'default'." $light_theme_name }} + {{ $light_theme = partial "functions/load_theme_pack" "default" }} +{{ end }} +{{ if not $dark_theme }} + {{ warnf "THEME ENGINE WARNING: Dark theme '%s' not found or invalid. Defaulting to 'default'." $dark_theme_name }} + {{ $dark_theme = partial "functions/load_theme_pack" "default" }} +{{ end }} + +{{/* Resolve effective light/dark mode objects from theme files */}} +{{ $light_base := $light_theme.light | default $light_theme }} +{{ $dark_base := $dark_theme.dark | default $dark_theme }} + +{{/* ═══════════════════════════════════════════════════════════════════════════ + APPLY COLOR OVERRIDES + Priority: colors_light/colors_dark → colors (global) → theme pack defaults +═══════════════════════════════════════════════════════════════════════════ */}} + +{{/* Apply global color overrides to LIGHT mode */}} +{{ if $light_base }} + {{ $light_colors := merge (dict) ($light_base.colors | default dict) }} + + {{/* Global overrides */}} + {{ with $global_colors.primary }} + {{ $light_colors = merge $light_colors (dict "primary" .) }} + {{ end }} + {{ with $global_colors.secondary }} + {{ $light_colors = merge $light_colors (dict "secondary" .) }} + {{ end }} + {{ with $global_colors.neutral }} + {{ $light_colors = merge $light_colors (dict "neutral" .) }} + {{ end }} + + {{/* Mode-specific overrides (highest priority) */}} + {{ with $colors_light.primary }} + {{ $light_colors = merge $light_colors (dict "primary" .) }} + {{ end }} + {{ with $colors_light.secondary }} + {{ $light_colors = merge $light_colors (dict "secondary" .) }} + {{ end }} + {{ with $colors_light.neutral }} + {{ $light_colors = merge $light_colors (dict "neutral" .) }} + {{ end }} + + {{ $light_base = merge $light_base (dict "colors" $light_colors) }} + + {{/* Apply surface overrides (only non-empty values) */}} + {{ if $surfaces_overrides }} + {{ $light_surfaces := merge (dict) ($light_base.surfaces | default dict) }} + {{ with $surfaces_overrides.background }} + {{ if ne . "" }} + {{ $light_surfaces = merge $light_surfaces (dict "background" .) }} + {{ end }} + {{ end }} + {{ with $surfaces_overrides.foreground }} + {{ if ne . "" }} + {{ $light_surfaces = merge $light_surfaces (dict "foreground" .) }} + {{ end }} + {{ end }} + {{ with $surfaces_overrides.header }} + {{ $header := merge (dict) ($light_surfaces.header | default dict) }} + {{ with .background }} + {{ if ne . "" }} + {{ $header = merge $header (dict "background" .) }} + {{ end }} + {{ end }} + {{ with .foreground }} + {{ if ne . "" }} + {{ $header = merge $header (dict "foreground" .) }} + {{ end }} + {{ end }} + {{ if gt (len $header) 0 }} + {{ $light_surfaces = merge $light_surfaces (dict "header" $header) }} + {{ end }} + {{ end }} + {{ with $surfaces_overrides.footer }} + {{ $footer := merge (dict) ($light_surfaces.footer | default dict) }} + {{ with .background }} + {{ if ne . "" }} + {{ $footer = merge $footer (dict "background" .) }} + {{ end }} + {{ end }} + {{ with .foreground }} + {{ if ne . "" }} + {{ $footer = merge $footer (dict "foreground" .) }} + {{ end }} + {{ end }} + {{ if gt (len $footer) 0 }} + {{ $light_surfaces = merge $light_surfaces (dict "footer" $footer) }} + {{ end }} + {{ end }} + {{ $light_base = merge $light_base (dict "surfaces" $light_surfaces) }} + {{ end }} +{{ end }} + +{{/* Apply global color overrides to DARK mode */}} +{{ if $dark_base }} + {{ $dark_colors := merge (dict) ($dark_base.colors | default dict) }} + + {{/* Global overrides */}} + {{ with $global_colors.primary }} + {{ $dark_colors = merge $dark_colors (dict "primary" .) }} + {{ end }} + {{ with $global_colors.secondary }} + {{ $dark_colors = merge $dark_colors (dict "secondary" .) }} + {{ end }} + {{ with $global_colors.neutral }} + {{ $dark_colors = merge $dark_colors (dict "neutral" .) }} + {{ end }} + + {{/* Mode-specific overrides (highest priority) */}} + {{ with $colors_dark.primary }} + {{ $dark_colors = merge $dark_colors (dict "primary" .) }} + {{ end }} + {{ with $colors_dark.secondary }} + {{ $dark_colors = merge $dark_colors (dict "secondary" .) }} + {{ end }} + {{ with $colors_dark.neutral }} + {{ $dark_colors = merge $dark_colors (dict "neutral" .) }} + {{ end }} + + {{ $dark_base = merge $dark_base (dict "colors" $dark_colors) }} + + {{/* Apply surface overrides (only non-empty values) */}} + {{ if $surfaces_overrides }} + {{ $dark_surfaces := merge (dict) ($dark_base.surfaces | default dict) }} + {{ with $surfaces_overrides.background }} + {{ if ne . "" }} + {{ $dark_surfaces = merge $dark_surfaces (dict "background" .) }} + {{ end }} + {{ end }} + {{ with $surfaces_overrides.foreground }} + {{ if ne . "" }} + {{ $dark_surfaces = merge $dark_surfaces (dict "foreground" .) }} + {{ end }} + {{ end }} + {{ with $surfaces_overrides.header }} + {{ $header := merge (dict) ($dark_surfaces.header | default dict) }} + {{ with .background }} + {{ if ne . "" }} + {{ $header = merge $header (dict "background" .) }} + {{ end }} + {{ end }} + {{ with .foreground }} + {{ if ne . "" }} + {{ $header = merge $header (dict "foreground" .) }} + {{ end }} + {{ end }} + {{ if gt (len $header) 0 }} + {{ $dark_surfaces = merge $dark_surfaces (dict "header" $header) }} + {{ end }} + {{ end }} + {{ with $surfaces_overrides.footer }} + {{ $footer := merge (dict) ($dark_surfaces.footer | default dict) }} + {{ with .background }} + {{ if ne . "" }} + {{ $footer = merge $footer (dict "background" .) }} + {{ end }} + {{ end }} + {{ with .foreground }} + {{ if ne . "" }} + {{ $footer = merge $footer (dict "foreground" .) }} + {{ end }} + {{ end }} + {{ if gt (len $footer) 0 }} + {{ $dark_surfaces = merge $dark_surfaces (dict "footer" $footer) }} + {{ end }} + {{ end }} + {{ $dark_base = merge $dark_base (dict "surfaces" $dark_surfaces) }} + {{ end }} +{{ end }} + +{{/* ═══════════════════════════════════════════════════════════════════════════ + GENERATE CSS OUTPUT +═══════════════════════════════════════════════════════════════════════════ */}} + + diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/theme_variables.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/theme_variables.html new file mode 100644 index 0000000..4da4d8b --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/theme_variables.html @@ -0,0 +1,26 @@ +{{/* HugoBlox Theme Helper to output CSS variables for a specific theme block */}} +{{ $data := .data }} + +{{/* 1. Palette Generation (Primary/Secondary Scales) */}} +{{ $primary := $data.colors.primary | default "#3b82f6" }} +{{ $secondary := $data.colors.secondary | default "#10b981" }} + +{{ partial "functions/generate_color_scale" (dict "name" "primary" "color" $primary) }} +{{ partial "functions/generate_color_scale" (dict "name" "secondary" "color" $secondary) }} + +{{ if $data.colors.neutral }} + {{/* Map user 'neutral' to Tailwind 'gray' utility to override text-gray-* classes */}} + {{ partial "functions/generate_color_scale" (dict "name" "gray" "color" $data.colors.neutral) }} +{{ end }} + +{{/* 2. Semantic Surface Variables */}} +--hb-color-background: {{ $data.surfaces.background | default "#ffffff" }}; +--hb-color-foreground: {{ $data.surfaces.foreground | default "#000000" }}; + +{{/* Header */}} +--hb-color-header-bg: {{ $data.surfaces.header.background | default $data.surfaces.background | default "#ffffff" }}; +--hb-color-header-fg: {{ $data.surfaces.header.foreground | default $data.surfaces.foreground | default "#000000" }}; + +{{/* Footer */}} +--hb-color-footer-bg: {{ $data.surfaces.footer.background | default $data.surfaces.background | default "#f3f4f6" }}; +--hb-color-footer-fg: {{ $data.surfaces.footer.foreground | default $data.surfaces.foreground | default "#000000" }}; diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/typography.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/typography.html new file mode 100644 index 0000000..290d3da --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/typography.html @@ -0,0 +1,221 @@ +{{/* + HugoBlox Theme Engine: Typography Rendering + + Resolves font families, emits @font-face for bundled fonts, + Google Fonts tags for remote fonts, and CSS custom properties. + + Font resolution order (per family): + 1. system-sans / system-serif / system-mono → native OS font stack + 2. Bundled file in assets/dist/font/* → local @font-face + 3. Fallback → Google Fonts CDN + + Input: Theme config dict from get_theme_config: + - typography: { families, weights, sizes, leading, tracking, variable } + + Output: @font-face (bundled) + (Google Fonts) + + {{ end }} + {{ end }} + {{ end }} + {{ end }} +{{ end }} + +{{/* Build Google Fonts URL */}} +{{ $gf_families := slice }} +{{ $seen := dict }} +{{ range $role := $roles }} + {{ with index $resolve_family $role }} + {{ if .google }} + {{ $name := .name }} + {{ $is_variable := index $variable $role | default false }} + {{/* Use full range for variable fonts, discrete weights for static */}} + {{ $weight_spec := "" }} + {{ if $is_variable }} + {{ $weight_spec = "100..900" }} + {{ else }} + {{ $role_weights := index $weights $role | default (slice 400) }} + {{ $weight_spec = delimit $role_weights "," }} + {{ end }} + {{/* Dedup key includes weight spec so the same font can appear as both static and variable if needed */}} + {{ $dedup_key := printf "%s|%s" $name $weight_spec }} + {{ if not (index $seen $dedup_key) }} + {{ $seen = merge $seen (dict $dedup_key true) }} + {{ $encoded := replace $name " " "+" }} + {{ $gf_families = $gf_families | append (printf "%s:wght@%s" $encoded $weight_spec) }} + {{ end }} + {{ end }} + {{ end }} +{{ end }} + +{{ if gt (len $gf_families) 0 }} + {{ $gf_url := printf "https://fonts.googleapis.com/css2?%s&display=swap" (delimit (apply $gf_families "printf" "family=%s" ".") "&") }} + + + +{{ end }} + +{{/* Font size vars */}} +{{ $font_size_base := $sizes.base | default "1rem" }} +{{ $font_size_sm := $sizes.sm | default "0.875rem" }} +{{ $font_size_lg := $sizes.lg | default "1.125rem" }} + +{{/* Resolve CSS font-family values */}} +{{ $heading_css := $system_sans }} +{{ with index $resolve_family "heading" }}{{ $heading_css = .css }}{{ end }} +{{ $body_css := $system_sans }} +{{ with index $resolve_family "body" }}{{ $body_css = .css }}{{ end }} +{{ $code_css := $system_mono }} +{{ with index $resolve_family "code" }}{{ $code_css = .css }}{{ end }} +{{ $nav_css := $heading_css }} +{{ with index $resolve_family "nav" }}{{ if .css }}{{ $nav_css = .css }}{{ end }}{{ end }} + +{{/* Get primary weight for each role (first in array) */}} +{{ $heading_weight := 700 }} +{{ with $weights.heading }}{{ $heading_weight = index . 0 }}{{ end }} +{{ $body_weight := 400 }} +{{ with $weights.body }}{{ $body_weight = index . 0 }}{{ end }} + +{{/* Bold body weight: second value in array, or primary + 200 (capped at 900) */}} +{{ $body_weight_bold := math.Min 900 (add $body_weight 200) }} +{{ with $weights.body }}{{ if ge (len .) 2 }}{{ $body_weight_bold = index . 1 }}{{ end }}{{ end }} + + diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/uid.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/uid.html new file mode 100644 index 0000000..f1a86cb --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/functions/uid.html @@ -0,0 +1,19 @@ +{{/* + Hugo Blox UID Generator + Generate a unique ID for shortcodes and components. + Uses the page's unique ID combined with ordinal for uniqueness. +*/}} + +{{ $uid := .Page.File.UniqueID }} +{{ $ctx := . }} + +{{ range seq 16 }} + {{ with $ctx }} + {{ $uid = printf "%s-%d" $uid .Ordinal }} + {{ $ctx = .Parent }} + {{ else }} + {{ break }} + {{ end }} +{{ end }} + +{{ return (crypto.MD5 $uid) }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/hbx/resolve-block-param.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/hbx/resolve-block-param.html new file mode 100644 index 0000000..55788c6 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/hbx/resolve-block-param.html @@ -0,0 +1,22 @@ +{{/* Context-aware block parameter resolution with backward compatibility */}} +{{/* Strategy: Prefers "block" over "blox" (legacy) in configs */}} +{{- $config := .config -}} +{{- $context := .context | default "component" -}} + +{{- $block_id := "" -}} +{{- $using_legacy := false -}} + +{{- if $config.style -}} + {{- $block_id = $config.style -}} +{{- else if $config.block -}} + {{- $block_id = $config.block -}} +{{- else if $config.blox -}} + {{- $block_id = $config.blox -}} + {{- $using_legacy = true -}} +{{- end -}} + +{{- if $using_legacy -}} + {{- warnf "HBX: Using legacy 'blox' parameter for %s. Please update to 'block' for consistency. (Found: blox=%s)" $context $block_id -}} +{{- end -}} + +{{- return $block_id -}} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/hbx/resolve.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/hbx/resolve.html new file mode 100644 index 0000000..4c74ae8 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/hbx/resolve.html @@ -0,0 +1,15 @@ +{{/* HBX resolver: maps a section { block: "", ... } to the block partial. + This resolver looks up blocks from the blox//block.html structure, + which are mounted to layouts/_partials/hbx/blocks//block.html via module.yaml. +*/}} +{{- $id := .section.block -}} +{{- if not $id }}{{ errorf "HBX: section is missing 'block' key: %v" .section }}{{ end -}} + +{{- $params := .section -}} +{{- $path := printf "hbx/blocks/%s/block.html" $id -}} + +{{- if templates.Exists (printf "_partials/%s" $path) -}} + {{ partial $path (dict "wcPage" .ctx "wcBlock" $params "wcIdentifier" ($params.id | default (printf "section-%s" $id))) }} +{{- else -}} + {{ errorf "HBX: block '%s' not found at %q" $id $path }} +{{- end -}} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/hbx/sections.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/hbx/sections.html new file mode 100644 index 0000000..f231220 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/hbx/sections.html @@ -0,0 +1,105 @@ +{{/* Returns sections from front matter, linked data, or from data. */}} +{{- $sections := .Params.sections -}} +{{- $source := "front matter" -}} + +{{/* 1) Linked-data: sections_source */}} +{{- with .Params.sections_source -}} + {{- $key := . -}} + {{- if hasPrefix $key "pages/" -}}{{- $key = (replace $key "pages/" "") -}}{{- end -}} + {{- with index hugo.Data.pages $key -}} + {{- $base := .sections -}} + {{- if $sections -}} + {{- $merged := slice -}} + {{- range $i, $b := $base -}} + {{- $ov := index $sections $i -}} + {{- if $ov -}} + {{- $merged = $merged | append (partial "functions/deep_merge" (dict "a" $b "b" $ov)) -}} + {{- else -}} + {{- $merged = $merged | append $b -}} + {{- end -}} + {{- end -}} + {{- if gt (len $sections) (len $base) -}} + {{- range $i, $ov := $sections -}} + {{- if ge $i (len $base) -}} + {{- $merged = $merged | append $ov -}} + {{- end -}} + {{- end -}} + {{- end -}} + {{- $sections = $merged -}} + {{- else -}} + {{- $sections = $base -}} + {{- end -}} + {{- $source = printf "data/pages/%s.yaml (sections_source)" $key -}} + {{- else -}} + {{- partial "functions/logger" (dict "page" . "level" "warn" "id" (printf "sections-source-missing-%s" $key) "message" (printf "sections_source '%s' not found under data/pages/" $key) "source" (dict "type" "partial" "name" "hbx/sections")) -}} + {{- end -}} +{{- end -}} + +{{/* 2) Fallbacks if still no sections */}} +{{- if not $sections -}} + {{/* Fallback: Legacy data-driven pages */}} + {{- $p := "home" -}}{{/* Default to "home" for homepage */}} + {{- with .File -}} + {{- $basename := .ContentBaseName -}} + {{- if $basename -}} + {{- $p = $basename -}} + {{/* Special case: homepage _index.md should use "home" data file */}} + {{- if eq $p "_index" -}} + {{- $p = "home" -}} + {{- end -}} + {{- end -}} + {{- end -}} + {{/* Ensure homepage always uses "home" data file */}} + {{- if eq $.RelPermalink "/" -}} + {{- $p = "home" -}} + {{- end -}} + {{- with index hugo.Data.pages $p -}} + {{- $sections = .sections -}} + {{- $source = printf "data/pages/%s.yaml" $p -}} + {{- end -}} +{{- end -}} + +{{/* 3) Per-section ref: load from data/blocks/.yaml and deep-merge with inline (inline wins) */}} +{{- if $sections -}} + {{- $resolved := slice -}} + {{- range $i, $s := $sections -}} + {{- $sec := $s -}} + {{- with $s.ref -}} + {{- $ref := . | lower -}} + {{- $path := cond (hasPrefix $ref "blocks/") $ref (printf "blocks/%s" $ref) -}} + {{- $parts := split $path "/" -}} + {{- $data := hugo.Data -}} + {{- range $j, $p := $parts -}} + {{- if $data -}} + {{- $data = index $data $p -}} + {{- end -}} + {{- end -}} + {{- if $data -}} + {{- /* shallow merge */ -}} + {{- $merged := merge $data $sec -}} + {{- /* merge 'content' */ -}} + {{- $ac := index $data "content" -}}{{- $bc := index $sec "content" -}} + {{- if and (reflect.IsMap $ac) (reflect.IsMap $bc) -}} + {{- $merged = merge $merged (dict "content" (merge $ac $bc)) -}} + {{- end -}} + {{- /* merge 'design' */ -}} + {{- $ad := index $data "design" -}}{{- $bd := index $sec "design" -}} + {{- if and (reflect.IsMap $ad) (reflect.IsMap $bd) -}} + {{- $merged = merge $merged (dict "design" (merge $ad $bd)) -}} + {{- end -}} + {{- $sec = $merged -}} + {{- else -}} + {{- partial "functions/logger" (dict "page" $ "level" "warn" "id" (printf "section-ref-missing-%s" $ref) "message" (printf "HBX: section ref '%s' not found under data/blocks/" $ref) "source" (dict "type" "partial" "name" "hbx/sections")) -}} + {{- end -}} + {{- end -}} + {{- $resolved = $resolved | append $sec -}} + {{- end -}} + {{- $sections = $resolved -}} +{{- end -}} + +{{- if $sections -}} + {{- partial "functions/logger" (dict "page" . "level" "info" "message" (printf "✅ Using sections from %s for page %s (found %d sections)" $source $.RelPermalink (len $sections)) "source" (dict "type" "partial" "name" "hbx/sections")) -}} +{{- else -}} + {{- partial "functions/logger" (dict "page" . "level" "warn" "id" (printf "sections-none-%s" $.RelPermalink) "message" (printf "HBX: No sections found for page %s (checked %s)" $.RelPermalink $source) "source" (dict "type" "partial" "name" "hbx/sections")) -}} +{{- end -}} +{{- return $sections -}} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/hooks/body-end/hbx-debug-export.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/hooks/body-end/hbx-debug-export.html new file mode 100644 index 0000000..d6c3bb6 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/hooks/body-end/hbx-debug-export.html @@ -0,0 +1,67 @@ +{{/* Hugo Blox: Export Debug Logs for Dev HUD (window var) */}} +{{- if site.Params.hugoblox.debug.export_logs | default true -}} + {{- /* Collect all logs from all pages (site-wide) */ -}} + {{- $entries := slice -}} + {{- range .Site.Pages -}} + {{- with .Store -}} + {{- with .Get "hbx_logs" -}} + {{- $entries = $entries | append . -}} + {{- end -}} + {{- end -}} + {{- end -}} + + {{- /* Summarize dependencies */ -}} + {{- $deps := slice -}} + {{- range $i, $d := hugo.Deps -}} + {{- $dep := dict "path" $d.Path "version" $d.Version "vendor" $d.Vendor -}} + {{- with $d.Owner -}} + {{- $dep = merge $dep (dict "owner_path" .Path) -}} + {{- end -}} + {{- with $d.Replace -}} + {{- $dep = merge $dep (dict "replace_path" .Path) -}} + {{- end -}} + {{- with $d.Time -}} + {{- $dep = merge $dep (dict "time" (printf "%v" .)) -}} + {{- end -}} + {{- $deps = $deps | append $dep -}} + {{- end -}} + + {{- /* Detect blox-tailwind module version if present */ -}} + {{- $bloxTW := dict -}} + {{- range $deps -}} + {{- $p := .path -}} + {{- if and $p (in $p "blox-tailwind") -}} + {{- $bloxTW = dict "path" .path "version" .version -}} + {{- end -}} + {{- end -}} + + {{- /* Current page information */ -}} + {{- $filePath := "" -}} + {{- with .File -}} + {{- $filePath = .Path -}} + {{- end -}} + {{- $buildId := partialCached "functions/get-build-id.html" "hbx-build-id" -}} + {{- $currentPage := dict + "path" .RelPermalink + "type" .Type + "layout" (.Layout | default "") + "kind" .Kind + "section" .Section + "title" .Title + "file" $filePath + "buildId" $buildId + -}} + + {{- $payload := dict + "version" 1 + "generatedAt" (now.UTC.Format "2006-01-02T15:04:05Z07:00") + "hugo" (dict "version" hugo.Version "goVersion" hugo.GoVersion) + "deps" $deps + "modules" (dict "bloxTailwind" $bloxTW) + "entries" $entries + "currentPage" $currentPage + -}} + +{{- end -}} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/hooks/body-end/hbx-debug-hud.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/hooks/body-end/hbx-debug-hud.html new file mode 100644 index 0000000..aa53ae9 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/hooks/body-end/hbx-debug-hud.html @@ -0,0 +1,410 @@ +{{/* Hugo Blox: Dev HUD (floating button + panel). Dev only. */}} + diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/init.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/init.html new file mode 100644 index 0000000..e9b23b8 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/init.html @@ -0,0 +1,129 @@ +{{/* Workaround Hugo concurrency issues (e.g. not detecting Page.Store variables) */}} +{{/* Use cases: Page.Store use within shortcodes, blox, and backlinks. */}} +{{/* See https://discourse.gohugo.io/t/persisting-data-across-the-build-of-a-site/41114/6 */}} + +{{/* Pre-warm only content pages so Page.Store/backlinks are populated deterministically */}} +{{- range where .Site.Pages "Kind" "page" -}} + {{- $ := .Content -}} +{{- end -}} + +{{/* Preload block configs for landing pages */}} +{{- range where .Site.Pages "Type" "landing" -}} + {{ $page := . }} + {{/* Resolve sections: front matter, sections_source, fallback to data/pages */}} + {{ $sections := $page.Params.sections }} + + {{/* Linked-data: sections_source support */}} + {{ with $page.Params.sections_source }} + {{ $key := . }} + {{ if hasPrefix $key "pages/" }}{{ $key = replace $key "pages/" "" }}{{ end }} + {{ with index hugo.Data.pages $key }} + {{ $base := .sections }} + {{ if $sections }} + {{ $merged := slice }} + {{ range $i, $b := $base }} + {{ $ov := index $sections $i }} + {{ if $ov }} + {{ $merged = $merged | append (merge $b $ov) }} + {{ else }} + {{ $merged = $merged | append $b }} + {{ end }} + {{ end }} + {{ if gt (len $sections) (len $base) }} + {{ range $i, $ov := $sections }} + {{ if ge $i (len $base) }} + {{ $merged = $merged | append $ov }} + {{ end }} + {{ end }} + {{ end }} + {{ $sections = $merged }} + {{ else }} + {{ $sections = $base }} + {{ end }} + {{ end }} + {{ end }} + + {{ if not $sections }} + {{/* Data-driven fallback (home) */}} + {{ $p := "home" }} + {{ with $page.File }} + {{ $basename := .ContentBaseName }} + {{ if $basename }} + {{ $p = $basename }} + {{ if eq $p "_index" }}{{ $p = "home" }}{{ end }} + {{ end }} + {{ end }} + {{ if eq $page.RelPermalink "/" }}{{ $p = "home" }}{{ end }} + {{ with index hugo.Data.pages $p }} + {{ $sections = .sections }} + {{ end }} + {{ end }} + + {{/* Resolve per-section ref from data/blocks/* for block detection */}} + {{ if $sections }} + {{ $resolved := slice }} + {{ range $i, $s := $sections }} + {{ $sec := $s }} + {{ with $s.ref }} + {{ $ref := lower . }} + {{ $path := cond (hasPrefix $ref "blocks/") $ref (printf "blocks/%s" $ref) }} + {{ $parts := split $path "/" }} + {{ $data := hugo.Data }} + {{ range $j, $p := $parts }} + {{ if $data }}{{ $data = index $data $p }}{{ end }} + {{ end }} + {{ if $data }} + {{/* Shallow merge so base can provide block type */}} + {{ $sec = merge $data $sec }} + {{ end }} + {{ end }} + {{ $resolved = $resolved | append $sec }} + {{ end }} + {{ $sections = $resolved }} + {{ end }} + + {{ range $index, $block := $sections }} + {{/* Do not show sections intended only for the demo site. */}} + {{ if or (not $block.demo) ($block.demo | and (eq (os.Getenv "HUGO_BLOX_DEMO") "true")) }} + {{- $block_type := partial "hbx/resolve-block-param" (dict "config" $block "context" "content section") | default "markdown" -}} + {{ $block_type = lower $block_type }} + {{ range $r := hugo.Data.blox_aliases.renames }} + {{ $block_type = cond (eq $block_type $r.old) $r.new $block_type }} + {{ end }} + + {{/* Store the block type in the page store for asset bundling */}} + {{ $current_blocks := $page.Store.Get "block_types" | default (slice) }} + {{ $page.Store.Set "block_types" ($current_blocks | append $block_type) }} + + {{/* Check if this is a Preact-enabled block that needs hydration */}} + {{ $component_path := printf "js/hbx/blocks/%s/client.jsx" $block_type }} + {{ if resources.Get $component_path }} + {{ $page.Store.Set "needs_preact" true }} + {{/* Store which Preact blocks are used on this page */}} + {{ $preact_blocks := $page.Store.Get "preact_blocks" | default slice }} + {{ if not (in $preact_blocks $block_type) }} + {{ $preact_blocks = $preact_blocks | append $block_type }} + {{ $page.Store.Set "preact_blocks" $preact_blocks }} + {{ end }} + {{ end }} + + {{/* Detect FAQ blocks for JSON-LD structured data (avoid race conditions) */}} + {{ if eq $block_type "faq" }} + {{ if $block.content.items }} + {{ $faq_items := $page.Store.Get "faq_items" | default slice }} + {{ range $block.content.items }} + {{ $faq_items = $faq_items | append (dict "question" .question "answer" .answer) }} + {{ end }} + {{ $page.Store.Set "faq_items" $faq_items }} + {{ end }} + {{ end }} + + {{ $widget_config_file := printf "blox/%s/config.html" $block_type }} + {{ if templates.Exists (printf "_partials/%s" $widget_config_file) }} + {{ $hash_id := $block.id | default (printf "section-%s" (replace $block_type "." "-")) }} + {{ $widget_args := dict "wcPage" $page "wcBlock" $block "wcIdentifier" $hash_id }} + {{ partial $widget_config_file $widget_args }} + {{ end }} + {{ end }} + {{ end }} +{{- end -}} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/article.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/article.html new file mode 100644 index 0000000..d494ef6 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/article.html @@ -0,0 +1,48 @@ +{{- $page := .page }} +{{ $summary := .summary }} +{{ $featured_image := ($page.Resources.ByType "image").GetMatch "*featured*" }} + +{{/* Get schema type. */}} +{{ $schema := "Article" }} +{{ if eq $page.Type "blog" }} + {{ $schema = "BlogPosting" }} +{{ end }} + +{{ $author := partial "functions/get_author_name" $page }} +{{ $branding := partialCached "functions/get_branding" $page "branding" }} +{{ $publisher := $branding.organization }} +{{ $logo_url := partial "functions/get_logo_url" $page -}} + + diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/breadcrumbs.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/breadcrumbs.html new file mode 100644 index 0000000..20cfb39 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/breadcrumbs.html @@ -0,0 +1,33 @@ +{{- $page := .page -}} + +{{- if not $page.IsHome -}} + {{- $items := slice -}} + {{- $position := 1 -}} + + {{- with site.Home -}} + {{- $home_title := .LinkTitle | default site.Title | default "Home" -}} + {{- $item := dict "@type" "ListItem" "position" $position "name" ($home_title | plainify) "item" (dict "@id" .Permalink "name" ($home_title | plainify)) -}} + {{- $items = $items | append $item -}} + {{- $position = add $position 1 -}} + {{- end -}} + + {{- with $page.Ancestors -}} + {{- range .Reverse -}} + {{- if not .IsHome -}} + {{- $item := dict "@type" "ListItem" "position" $position "name" (.LinkTitle | plainify) "item" (dict "@id" .Permalink "name" (.LinkTitle | plainify)) -}} + {{- $items = $items | append $item -}} + {{- $position = add $position 1 -}} + {{- end -}} + {{- end -}} + {{- end -}} + + {{- $item := dict "@type" "ListItem" "position" $position "name" ($page.LinkTitle | default $page.Title | plainify) "item" (dict "@id" $page.Permalink "name" ($page.LinkTitle | default $page.Title | plainify)) -}} + {{- $items = $items | append $item -}} + + {{- if gt (len $items) 1 -}} + {{- $breadcrumb := dict "@context" "https://schema.org" "@type" "BreadcrumbList" "itemListElement" $items -}} + + {{- end -}} +{{- end -}} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/business.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/business.html new file mode 100644 index 0000000..0433729 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/business.html @@ -0,0 +1,31 @@ +{{- $sharing_image := resources.GetMatch (path.Join "media" "sharing.*") -}} +{{- $branding := partialCached "functions/get_branding" . "branding" -}} + diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/collectionpage.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/collectionpage.html new file mode 100644 index 0000000..225b82c --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/collectionpage.html @@ -0,0 +1,71 @@ +{{- $page := .page -}} +{{- $summary := .summary -}} + +{{- $language := $page.Language.Locale | default site.Language.Locale | default "en" -}} +{{- $description := $summary | default ($page.Params.summary | default $page.Summary) -}} +{{- $description = $description | plainify -}} + +{{- $listed_pages := $page.Pages -}} +{{- if $page.IsHome -}} + {{- $listed_pages = slice -}} +{{- else if $listed_pages -}} + {{- $listed_pages = $listed_pages.ByDate.Reverse -}} +{{- else -}} + {{- $listed_pages = slice -}} +{{- end -}} + +{{- $items := slice -}} +{{- $max_items := 10 -}} +{{- range $index, $item := $listed_pages -}} + {{- if ge $index $max_items -}} + {{- break -}} + {{- end -}} + {{- $items = $items | append (dict + "@type" "ListItem" + "position" (add $index 1) + "item" (dict + "@type" "WebPage" + "@id" $item.Permalink + "name" ($item.LinkTitle | default $item.Title | plainify) + "url" $item.Permalink + ) + ) -}} +{{- end -}} + +{{- $item_list := dict + "@type" "ItemList" + "itemListOrder" "Descending" + "numberOfItems" (len $items) + "itemListElement" $items +-}} + +{{- $collection := dict + "@context" "https://schema.org" + "@type" "CollectionPage" + "@id" $page.Permalink + "url" $page.Permalink + "name" ($page.LinkTitle | default $page.Title | plainify) + "inLanguage" $language + "isPartOf" (dict + "@type" "WebSite" + "@id" site.BaseURL + "url" site.BaseURL + "name" site.Title + ) +-}} + +{{- if $description }} + {{- $collection = merge $collection (dict "description" $description) -}} +{{- end -}} + +{{- if not $page.Lastmod.IsZero }} + {{- $collection = merge $collection (dict "dateModified" ($page.Lastmod.Format "2006-01-02T15:04:05Z07:00")) -}} +{{- end -}} + +{{- if gt (len $items) 0 }} + {{- $collection = merge $collection (dict "mainEntity" $item_list) -}} +{{- end -}} + + diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/event.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/event.html new file mode 100644 index 0000000..03629e0 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/event.html @@ -0,0 +1,48 @@ +{{ $page := .page }} +{{ $summary := .summary }} +{{ $featured_image := ($page.Resources.ByType "image").GetMatch "*featured*" }} +{{ $author := partial "functions/get_author_name" $page }} + + diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/faqpage.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/faqpage.html new file mode 100644 index 0000000..611e320 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/faqpage.html @@ -0,0 +1,48 @@ +{{- $page := .page }} +{{ $summary := .summary }} + +{{/* Get FAQ items - can be from params.faqs, Page.Store (from init.html), or child pages */}} +{{ $faq_items := slice }} + +{{/* Method 1: FAQ items defined in front matter */}} +{{ if $page.Params.faqs }} + {{ $faq_items = $page.Params.faqs }} +{{ end }} + +{{/* Method 2: Extract from Page.Store (populated by init.html to avoid race conditions) */}} +{{ if not $faq_items }} + {{ with $page.Store.Get "faq_items" }} + {{ $faq_items = . }} + {{ end }} +{{ end }} + +{{/* Method 3: Auto-generate from child pages in a FAQ section */}} +{{ if and (not $faq_items) ($page.IsSection) }} + {{ range $page.RegularPages }} + {{ $faq_items = $faq_items | append (dict "question" (.Params.question | default .Title) "answer" (.Params.answer | default .Summary | default (.Content | plainify))) }} + {{ end }} +{{ end }} + +{{/* Only output FAQ schema if we have FAQ items */}} +{{ if $faq_items }} + +{{ end }} + diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/main.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/main.html new file mode 100644 index 0000000..0bebb29 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/main.html @@ -0,0 +1,48 @@ +{{ $page := .page }} +{{ $summary := .summary }} +{{ $site_type := site.Params.hugoblox.identity.type | humanize | default "Person" }} + +{{- if $page.IsHome -}} + + {{ partialCached "jsonld/website.html" $page }} + + {{ if ne $site_type "Person" }} + {{ partial "jsonld/business.html" $page }} + {{ end }} + +{{- else if $page.IsPage -}} + + {{ if (eq $page.Type "blog") | or (eq $page.Type "publications") | or (eq $page.Type "projects") }} + {{ partial "jsonld/article.html" (dict "page" $page "summary" $summary) }} + {{ end }} + + {{ if eq $page.Type "events" }} + {{ partial "jsonld/event.html" (dict "page" $page "summary" $summary) }} + {{ end }} + + {{/* Q&A Page - individual question/answer page */}} + {{ if eq $page.Type "questions" }} + {{ partial "jsonld/qapage.html" (dict "page" $page "summary" $summary) }} + {{ end }} + + {{/* FAQ Page type */}} + {{ if eq $page.Type "faq" }} + {{ partial "jsonld/faqpage.html" (dict "page" $page "summary" $summary) }} + {{ end }} + + {{ partial "jsonld/webpage.html" (dict "page" $page "summary" $summary) }} + +{{- else -}} + + {{ partial "jsonld/collectionpage.html" (dict "page" $page "summary" $summary) }} + +{{- end }} + +{{ if not $page.IsHome }} + {{ partial "jsonld/breadcrumbs.html" (dict "page" $page) }} +{{ end }} + +{{/* FAQ content - can appear on any page type including landing pages and homepage */}} +{{ if or ($page.Params.faq_page) ($page.Params.faqs) }} + {{ partial "jsonld/faqpage.html" (dict "page" $page "summary" $summary) }} +{{ end }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/qapage.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/qapage.html new file mode 100644 index 0000000..fa21e7d --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/qapage.html @@ -0,0 +1,88 @@ +{{- $page := .page }} +{{ $summary := .summary }} +{{ $featured_image := ($page.Resources.ByType "image").GetMatch "*featured*" }} + +{{/* Get author and publisher info */}} +{{ $author := partial "functions/get_author_name" $page }} +{{ $branding := partialCached "functions/get_branding" $page "branding" }} +{{ $publisher := $branding.organization }} + +{{/* Extract question - prioritize explicit param, fallback to title */}} +{{ $question := $page.Params.question | default $page.Title }} + +{{/* Extract answer - prioritize explicit param, fallback to summary, then content */}} +{{ $answer := "" }} +{{ if $page.Params.answer }} + {{ $answer = $page.Params.answer }} +{{ else if $page.Params.summary }} + {{ $answer = $page.Params.summary }} +{{ else }} + {{ $answer = $page.Content | plainify | truncate 500 }} +{{ end }} + +{{/* Get upvote/downvote counts if available */}} +{{ $upvote_count := $page.Params.upvote_count | default 0 }} +{{ $downvote_count := $page.Params.downvote_count | default 0 }} + + diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/webpage.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/webpage.html new file mode 100644 index 0000000..da119e1 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/webpage.html @@ -0,0 +1,56 @@ +{{- $page := .page -}} +{{- $summary := .summary -}} + +{{- $language := $page.Language.Locale | default site.Language.Locale | default "en" -}} +{{- $description := $summary | default ($page.Params.summary | default $page.Summary) -}} +{{- $description = $description | plainify -}} + +{{- $image := partial "functions/get_featured_image" $page -}} +{{- if not $image -}} + {{- $image = partial "functions/get_site_icon" 512 -}} +{{- end -}} + +{{- $image_obj := dict -}} +{{- with $image -}} + {{- $image_obj = dict + "@type" "ImageObject" + "url" .Permalink + -}} + {{- with .Width }}{{ $image_obj = merge $image_obj (dict "width" .) }}{{ end -}} + {{- with .Height }}{{ $image_obj = merge $image_obj (dict "height" .) }}{{ end -}} +{{- end -}} + +{{- $webpage := dict + "@context" "https://schema.org" + "@type" "WebPage" + "@id" $page.Permalink + "url" $page.Permalink + "name" ($page.LinkTitle | default $page.Title | plainify) + "inLanguage" $language + "isPartOf" (dict + "@type" "WebSite" + "@id" site.BaseURL + "url" site.BaseURL + "name" site.Title + ) +-}} + +{{- if $description }} + {{- $webpage = merge $webpage (dict "description" $description) -}} +{{- end -}} + +{{- if not $page.Date.IsZero }} + {{- $webpage = merge $webpage (dict "datePublished" ($page.Date.Format "2006-01-02T15:04:05Z07:00")) -}} +{{- end -}} + +{{- if not $page.Lastmod.IsZero }} + {{- $webpage = merge $webpage (dict "dateModified" ($page.Lastmod.Format "2006-01-02T15:04:05Z07:00")) -}} +{{- end -}} + +{{- with $image_obj }} + {{- $webpage = merge $webpage (dict "primaryImageOfPage" .) -}} +{{- end -}} + + diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/website.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/website.html new file mode 100644 index 0000000..8a144d7 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/jsonld/website.html @@ -0,0 +1,14 @@ + diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/landing_page.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/landing_page.html new file mode 100644 index 0000000..c28af7e --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/landing_page.html @@ -0,0 +1,13 @@ +{{/* Load Hugo Blox - HBX resolver-based system + Blocks live in `blox//block.html` and are mounted to `layouts/_partials/hbx/blocks//block.html`. + Landing pages must specify `sections: [{ block: '', ... }]`. +*/}} +{{/* Use unified sections source */}} +{{- $sections := partial "hbx/sections.html" . -}} + +{{ range $index, $block := $sections }} + {{/* Do not show sections intended only for the demo site. */}} + {{ if or (not $block.demo) ($block.demo | and (eq (os.Getenv "HUGO_BLOX_DEMO") "true")) }} + {{ partial "functions/parse_block_v3" (dict "page" $ "block" $block) }} + {{ end }} +{{ end }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/libraries.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/libraries.html new file mode 100644 index 0000000..bb706be --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/libraries.html @@ -0,0 +1,121 @@ +{{/* Load Preact for component-based blocks */}} +{{/* Check if any blocks on this page use Preact (set by init.html) */}} +{{ if .Page.Store.Get "needs_preact" }} + {{ $preact_blocks := .Page.Store.Get "preact_blocks" | default slice }} + + {{/* Preact is now bundled with each template via js.Build and node_modules */}} + + {{/* Build and load each Preact block's client script */}} + {{ range $block_type := $preact_blocks }} + {{ $client_path := printf "js/hbx/blocks/%s/client.jsx" $block_type }} + {{ $client_jsx := resources.Get $client_path }} + + {{ if $client_jsx }} + {{/* Build the client-side JSX using Hugo's official integration */}} + {{ $jsx_opts := dict + "targetPath" (printf "assets/js/preact-built/%s.js" $block_type) + "JSX" "automatic" + "JSXImportSource" "preact" + "format" "iife" + "minify" hugo.IsProduction + "sourceMap" (cond hugo.IsDevelopment "external" "") + }} + {{ $built_jsx := $client_jsx | js.Build $jsx_opts }} + {{ if hugo.IsProduction }} + {{ $built_jsx = $built_jsx | fingerprint "sha256" }} + {{ end }} + + {{ end }} + {{ end }} +{{ end }} + +{{/* Show site search? */}} +{{ $show_search := site.Params.hugoblox.header.search | default false }} + +{{/* Hugo Blox Animations - load synchronously BEFORE Alpine.js to register components */}} +{{ if .Page.Store.Get "has_animations" }} + {{ $animations_js := resources.Get "js/hb-animations.js" | resources.Minify }} + {{- if hugo.IsProduction -}} + {{ $animations_js = $animations_js | fingerprint "sha256" }} + {{- end -}} + +{{ end }} + +{{/* Load Alpine JS extension? */}} +{{/* Alpine is needed for search modal and other interactive components */}} +{{ $needs_alpine := or (.Page.Store.Get "has_alpine") $show_search (.Page.Store.Get "has_animations") }} +{{ if $needs_alpine }} + + {{ $alpine_js := resources.Get "dist/lib/alpinejs/cdn.min.js" }} + {{ $alpine_js = $alpine_js | resources.Fingerprint "sha256" }} + +{{ end }} + +{{/* Hugo Blox Search JavaScript (CSS is in main.css) */}} +{{ if $show_search }} +{{ $search_js := resources.Get "js/hb-search.js" | resources.Minify }} +{{- if hugo.IsProduction -}} + {{ $search_js = $search_js | fingerprint "sha256" }} +{{- end -}} + +{{ end }} + +{{/* Mermaid */}} +{{ if (.Page.Store.Get "has_mermaid") }} + {{ $mermaid_js := resources.Get "dist/lib/mermaid/mermaid.min.js" }} + {{ $mermaid_config_js := resources.Get "js/hb-mermaid-config.js" }} + {{ $mermaid_config_js = $mermaid_config_js | resources.Minify }} + {{ $mermaid_bundle := slice $mermaid_js $mermaid_config_js | resources.Concat "js/mermaid.bundle.js" | resources.Fingerprint "sha256" }} + +{{ end }} + +{{/* Markmap */}} +{{ if (.Page.Store.Get "has_markmap") }} + + +{{ $markmap_js := resources.Get "dist/lib/markmap/index.js" }} +{{ $markmap_js = $markmap_js | resources.Minify | resources.Fingerprint "sha256" }} + +{{ end }} + +{{/* Katex */}} +{{ if (.Page.HasShortcode "math") | or .Params.math | or site.Params.hugoblox.content.math.enable }} + {{ $katex_css := resources.Get "dist/lib/katex/katex.min.css" }} + {{ $katex_css = $katex_css | resources.Fingerprint "sha256" }} + + {{ $katex_js := resources.Get "dist/lib/katex/katex.min.js" }} + {{ $katex_js = $katex_js | resources.Fingerprint "sha256" }} + + {{ $katex_render_js := resources.Get "dist/lib/katex/auto-render.min.js" }} + {{ $katex_config_js := resources.Get "js/katex-config.js" }} + {{ $katex_config_js = $katex_config_js | resources.Minify }} + {{ $katex_bundle := slice $katex_render_js $katex_config_js | resources.Concat "js/katex-renderer.js" | resources.Fingerprint "sha256" }} + + {{ $katex_fonts := resources.Match "dist/lib/katex/fonts/*" }} + {{ range $katex_fonts }} + {{ .Publish }} + {{ end }} +{{ end }} + +{{/* Plotly */}} +{{ if .Page.HasShortcode "chart" }} +{{ $plotly_js := resources.Get "dist/lib/plotly/plotly.min.js" }} +{{ $plotly_js = $plotly_js | resources.Fingerprint "sha256" }} + +{{ end }} \ No newline at end of file diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/notification-container.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/notification-container.html new file mode 100644 index 0000000..9d62b00 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/notification-container.html @@ -0,0 +1,4 @@ +{{/* Notification Container for toasts/alerts */}} +{{/* This container is placed at the page level to ensure proper z-index and visibility */}} +{{/* Used by hb-notifier.js module for showing toast notifications */}} +
    diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_author.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_author.html new file mode 100644 index 0000000..b1df3a1 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_author.html @@ -0,0 +1,25 @@ +{{/* Author profile box */}} + +{{/* Don't show author box on normal pages or if author box disabled. */}} +{{ if ne .Type "page" | and (not (or (eq site.Params.profile false) (eq .Params.profile false))) }} + +{{ $authors := .Params.authors }} + +{{/* If authors not set, fallback to superuser/owner from Scratch */}} +{{ if (not $authors) }} + {{ $superuser := .Scratch.Get "superuser_slug" }} + {{ if $superuser }} + {{ $authors = (slice $superuser) }} + {{ end }} +{{ end }} + +{{ if $authors }} + {{ range $idx, $slug := $authors }} + {{ $profile := partial "functions/get_author_profile" $slug }} + {{ if $profile.has_data }} + {{ partial "page_author_card" (dict "profile" $profile "page" .) }} + {{ end }} + {{ end }} +{{ end }} + +{{end}}{{/* Show profile block */}} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_author_card.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_author_card.html new file mode 100644 index 0000000..292923d --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_author_card.html @@ -0,0 +1,78 @@ +{{ $profile := .profile }} +{{ $page := .page }} +{{ $site_type := site.Params.hugoblox.identity.type | humanize | default "Person" }} +{{ $avatar_shape := site.Params.hugoblox.layout.avatar_shape | default "circle" }} + +{{ if $profile }} + {{/* If it's a personal site and the profile is owner, link home */}} + {{ $profile_url := printf "/authors/%s/" $profile.slug }} + {{ if and (eq $site_type "Person") ($profile.is_owner) }} + {{ $profile_url = site.BaseURL }} + {{ end }} + + {{ $avatar := $profile.avatar }} + +
    + {{ if $avatar }} + {{ if not (reflect.IsImageResourceProcessable $avatar) }} + {{$profile.title}} + {{ else }} + {{ $responsive := partial "functions/process_responsive_image.html" (dict + "image" $avatar + "mode" "fill" + "aspect_ratio" "1:1" + "anchor" "Center" + "sizes" (slice 96 192 288 384) + ) }} + {{$profile.title}} + {{ end }} + {{ end }} +
    +
    + {{ i18n "authors" }} +
    +
    + + {{if $profile_url}}{{end}} + {{$profile.title}} + {{if $profile_url}}{{end}} + + {{- with $profile.pronouns -}} + ({{ . }}) + {{- end -}} +
    + + {{ with $profile.role }} +
    + {{. | markdownify | emojify}} +
    + {{end}} + + + {{ with $profile.bio }} +
    {{ . | markdownify | emojify }}
    + {{ end }} + +
    + {{ partial "social_links" (dict "Params" (dict "profiles" $profile.links)) }} +
    +
    +
    + +{{end}}{{/* End Check for Author Profile */}} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_edit.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_edit.html new file mode 100644 index 0000000..e7710ac --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_edit.html @@ -0,0 +1,18 @@ +{{/* Add link to let visitors edit the page on GitHub. */}} +{{/* Perform short-circuit check that page is backed by a file. */}} +{{ if and .File .Params.editable | and site.Params.hugoblox.repository.url }} +{{/* Get language subfolder for multilingual sites. */}} +{{/* Limitations: the subfolder param, `.contentDir`, is unexposed in the Hugo `site` API so we attempt to workaround this issue. */}} +{{ $content_dir := "content" }} +{{ if site.Params.hugoblox.repository.content_dir }} + {{ $content_dir = site.Params.hugoblox.repository.content_dir }} +{{else}} + {{/* Attempt to get content dir from the LanguagePrefix URI, but defaultContentLanguageInSubdir can break this assumption. */}} + {{ $content_dir = cond hugo.IsMultilingual (cond (ne .Site.LanguagePrefix "") (printf "%s%s" $content_dir .Site.LanguagePrefix) $content_dir) $content_dir }} +{{end}} +

    + + 📝 {{ i18n "edit_page" | default "Edit this page" }} + +

    +{{ end }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_footer.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_footer.html new file mode 100644 index 0000000..2b8729e --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_footer.html @@ -0,0 +1,11 @@ +
    + {{/* Moved to TOC sidebar */}} + {{/* partial "page_edit" . */}} + + {{ partial "tags" . }} + {{ partial "components/page_sharer" . }} + {{ partial "page_author" . }} + {{ partial "components/next-in-series" . }} + {{ partial "page_related" . }} + {{ partial "comments" . }} +
    diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_links.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_links.html new file mode 100644 index 0000000..c5af40a --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_links.html @@ -0,0 +1,74 @@ +{{ $is_list := .is_list }} +{{ $page := .page }} + +{{/* Build normalized links (new API) */}} +{{ $built := partial "functions/build_links" (dict "page" $page "is_list" $is_list) }} + +{{ $ctx := cond $is_list "list" "page" }} + +{{/* English fallbacks if i18n key is missing in a locale */}} +{{ $fallbackByKey := dict + "btn_pdf" "PDF" + "btn_preprint" "Preprint" + "btn_doi" "DOI" + "btn_code" "Code" + "btn_dataset" "Dataset" + "btn_model" "Model" + "btn_slides" "Slides" + "btn_video" "Video" + "btn_poster" "Poster" + "btn_project" "Project" + "btn_site" "Site" + "btn_source" "Source Document" + "btn_canonical" "Canonical" + "btn_crosspost" "Crosspost" + "btn_discussion" "Discussion" + "btn_event" "Event" + "btn_calendar" "Calendar" + "btn_registration" "Registration" + "btn_demo" "Demo" + "btn_cite" "Cite" +}} + +{{ range $built }} + {{ if in .contexts $ctx }} + {{ $url := .url | default "" }} + {{ $scheme := (urls.Parse $url).Scheme }} + {{ $target := "" }} + {{ $rel := slice }} + {{ with .rel }}{{ $rel = . }}{{ end }} + {{ if not $scheme }} + {{ with ($page.Resources.GetMatch $url) }} + {{ $url = .RelPermalink }} + {{ else }} + {{ $url = $url | relURL }} + {{ end }} + {{ else if in (slice "http" "https") $scheme }} + {{ $target = "target=\"_blank\"" }} + {{ $rel = $rel | append "noopener" }} + {{ end }} + + {{ $classes := printf "hb-attachment-link %s" (cond $is_list "hb-attachment-link-small" "hb-attachment-link-large") }} + {{ $label := .label }} + {{ with .labelKey }} + {{ if not $label }} + {{ $label = (i18n .) | default (index $fallbackByKey .) | default "Link" }} + {{ end }} + {{ end }} + {{ if not $label }} + {{ $label = "Link" }} + {{ end }} + + {{ if eq .type "bibtex" }} + + {{ else }} + + {{ partial "functions/get_icon" (dict "name" (.icon | default "hero/link") "attributes" "style=\"height: 1em\" class='inline-block'") }} + {{ $label }} + + {{ end }} + {{ end }} +{{ end }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_links_div.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_links_div.html new file mode 100644 index 0000000..dcb8bb0 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_links_div.html @@ -0,0 +1,8 @@ +{{/* Div wrapper around page links. Hidden if page has no links. */}} + +{{ $built := partial "functions/build_links" (dict "page" . "is_list" 0) }} +{{ if gt (len $built) 0 }} +
    + {{ partial "page_links" (dict "page" . "is_list" 0) }} +
    +{{ end }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_metadata_authors.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_metadata_authors.html new file mode 100644 index 0000000..8583628 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_metadata_authors.html @@ -0,0 +1,60 @@ +{{/* Display author list. */}} + +{{- $authors := .Params.authors -}} + +{{ if $authors }} + {{- if not (reflect.IsSlice $authors) -}} + {{- $authors = slice $authors -}} + {{- end -}} + + {{ range $index, $raw := $authors }} + {{- $slug := $raw | urlize -}} + {{- $profile := partial "functions/get_author_profile" (dict "slug" $slug "title" $raw) -}} + {{- $termPage := site.GetPage (printf "/authors/%s" $slug) -}} + {{- $display := $profile.title | default $raw -}} + {{- $highlight_name := false -}} + + {{- if gt $index 0 }}, {{ end -}} + + {{- if $termPage -}} + {{ $display }} + {{- else -}} + {{ $display }} + {{- end -}} + + {{- if isset $.Params "author_notes" -}} + {{- with (index $.Params.author_notes $index) -}} + + +
    + {{.}} + +
    +
    + {{- end -}} + {{- end -}} + {{- end -}} +{{- end -}} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_related.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_related.html new file mode 100644 index 0000000..4d11917 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/page_related.html @@ -0,0 +1,15 @@ +{{/* Show related/recommended content. */}} +{{ if .Params.show_related }} + {{ $related := site.RegularPages.Related . | first 5 }} + {{ with $related }} +
    +
    +

    {{ i18n "related" }}

    + +
    + {{ end }} +{{ end }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/site_footer.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/site_footer.html new file mode 100644 index 0000000..e7c82ca --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/site_footer.html @@ -0,0 +1,114 @@ +
    + + {{ partial "functions/get_hook" (dict "hook" "footer-start" "context" .) }} + + {{/* Load footer block */}} + {{- $footer_config := site.Params.hugoblox.footer | default dict -}} + {{- $footer_section_name := partial "hbx/resolve-block-param" (dict "config" $footer_config "context" "footer") | default "minimal" -}} + {{ $footer_section_path := printf "components/footers/%s.html" $footer_section_name }} + {{ if not (templates.Exists (printf "_partials/%s" $footer_section_path)) }} + {{ errorf "Check your `params.yaml`. Cannot find footer block at `layouts/_partials/%s`" $footer_section_path }} + {{ end }} + {{ partial $footer_section_path . }} + + {{/* Attribution - PLEASE DO NOT REMOVE THIS, SUPPORT OPEN SOURCE */}} + + {{/* Check for Pro license key */}} + {{- $license_key := getenv "HUGO_BLOX_LICENSE" -}} + {{- $has_pro_license := false -}} + + {{- if $license_key -}} + {{/* Validate UUID v4 format */}} + {{- $uuid_pattern := "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$" -}} + {{- $is_valid_format := findRE $uuid_pattern (lower $license_key) -}} + {{- $has_pro_license = gt (len $is_valid_format) 0 -}} + {{- end -}} + + {{/* Check user preference */}} + {{- $wants_to_hide := site.Params.hugoblox.pro.hide_attribution | default false -}} + + {{/* Determine if we show attribution */}} + {{- $show_attribution := true -}} + + {{- if $has_pro_license -}} + {{/* Pro user - respect their choice */}} + {{- $show_attribution = not $wants_to_hide -}} + {{- else if $wants_to_hide -}} + {{/* Free user trying to hide - show warning and attribution */}} + {{- warnf "Attribution removal requires HugoBlox Premium. Get Premium at https://hugoblox.com/premium \nAlready purchased Premium? Reach out in the Premium Discord channel for support." -}} + {{- $show_attribution = true -}} + {{- end -}} + + {{- if $show_attribution -}} + {{- $base := "https://hugoblox.com" -}} + {{- $tid := "" -}} + {{- $ref := .Site.Params.hugoblox.pro.affiliate_code | default "" -}} + + {{/* Detect Template */}} + {{ $hugoblox_file := "" }} + {{ if fileExists "hugoblox.yaml" }} + {{ $hugoblox_file = readFile "hugoblox.yaml" }} + {{ if $hugoblox_file }} + {{ $hugoblox_data := $hugoblox_file | transform.Unmarshal }} + {{ $tid = $hugoblox_data.template.id | default "" }} + {{ end }} + {{ end }} + + {{/* Per-site variant selection */}} + {{- $brandOptions := slice "Hugo Blox" "Hugo Blox Kit" "Hugo Blox — Open Source" -}} + {{- $ctaWhenTemplate := slice "Duplicate this template →" "Clone this template →" "Build yours →" "Create yours →" "Build your site →" "Create your site →" -}} + {{- $ctaNoTemplate := slice "Start free →" "Build yours →" "Create yours →" "Build your site →" "Create your site →" -}} + + {{- $seed := .Site.BaseURL -}} + {{- $h := md5 $seed -}} + {{- $digits := replaceRE "[^0-9]" "" $h -}} + {{- if lt (len $digits) 6 }}{{- $digits = printf "%s123456" $digits -}}{{- end -}} + {{- $first6 := substr $digits 0 6 -}} + {{/* Fix for Hugo's int() function treating leading zeros as octal numbers. + Strings like "095186" fail because 8 and 9 aren't valid octal digits. + Replace leading zero with 1 to ensure valid decimal parsing. */}} + {{- if eq (substr $first6 0 1) "0" -}} + {{- $first6 = printf "1%s" (substr $first6 1 5) -}} + {{- end -}} + {{- $n := int $first6 -}} + + {{- $brandText := index $brandOptions (mod $n (len $brandOptions)) -}} + {{- $ctaText := cond (ne $tid "") + (index $ctaWhenTemplate (mod $n (len $ctaWhenTemplate))) + (index $ctaNoTemplate (mod $n (len $ctaNoTemplate))) -}} + + {{- $target := cond (ne $tid "") + (printf "%s/templates/%s/start" $base $tid) + (printf "%s/start" $base) -}} + + {{- $brandHref := printf "%s?utm_source=site_footer&utm_medium=referral&utm_campaign=poweredby_oss&utm_content=brand_%s" + $base (cond (ne $tid "") (printf "%s" $tid) "na") -}} + {{- $ctaHref := printf "%s?utm_source=site_footer&utm_medium=referral&utm_campaign=poweredby_oss&utm_content=cta_%s" + $target (cond (ne $tid "") (printf "%s" $tid) "na") -}} + {{- if ne $ref "" -}} + {{- $brandHref = printf "%s&ref=%s" $brandHref $ref -}} + {{- $ctaHref = printf "%s&ref=%s" $ctaHref $ref -}} + {{- end -}} + +

    + {{ $published_with := "Made with {hugoblox}." }} + {{ $i18n_published_with := i18n "published_with" | default $published_with }} + {{ $defaultEnText := "Build yours →" }} + {{ $i18n_ctaText := i18n "poweredby_button" | default $ctaText }} + {{ if eq $i18n_ctaText $defaultEnText }} + {{ $i18n_ctaText = $ctaText }} + {{ end }} + {{ if not (findRE "{hugoblox}" $i18n_published_with) }} + {{ warnf "Please attribute Hugo Blox using `{hugoblox}` in the i18n `published_with` text or sponsor with All Access to remove attribution." }} + {{ $i18n_published_with = $published_with }} + {{ end }} + {{ $i18n_published_with = replace $i18n_published_with "{hugoblox}" (printf "%s" $brandHref $brandText) | safeHTML }} + {{ $i18n_published_with = replace $i18n_published_with "{repo_link}" "" | safeHTML }} + {{ $i18n_published_with = replace $i18n_published_with "{/repo_link}" "" | safeHTML }} + {{ $i18n_published_with | safeHTML }} + {{ $i18n_ctaText }} +

    + {{- end -}}{{/* end $show_attribution */}} + +
    diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/site_footer_license.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/site_footer_license.html new file mode 100644 index 0000000..305cd14 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/site_footer_license.html @@ -0,0 +1,75 @@ +{{/* Display copyright license. */}} + +{{ $branding := partialCached "functions/get_branding" . "branding" }} +{{ $page_copyright := .Params.copyright | default dict }} +{{ $site_copyright := site.Params.hugoblox.copyright | default dict }} + +{{ $copyright_license := $page_copyright.license | default $site_copyright.license | default dict }} +{{ $notice := $page_copyright.notice | default $site_copyright.notice }} + +{{ $license_type := $copyright_license.type | default "cc" }} + +{{ $license_label := "" }} +{{ $license_url := "" }} +{{ $show_cc_icons := false }} + +{{ $allow_commercial := $copyright_license.allow_commercial | default false }} +{{ $allow_derivatives := $copyright_license.allow_derivatives | default false }} +{{ $share_alike := $copyright_license.share_alike | default true }} + +{{ if eq $license_type "cc" }} + + {{ $cc_code := "by" }} + {{ if not $allow_commercial }} + {{ $cc_code = printf "%s-nc" $cc_code }} + {{end}} + {{ if and $allow_derivatives $share_alike }} + {{ $cc_code = printf "%s-sa" $cc_code }} + {{ else if not $allow_derivatives }} + {{ $cc_code = printf "%s-nd" $cc_code }} + {{end}} + + {{ $license_url = printf "https://creativecommons.org/licenses/%s/4.0" ($cc_code | urlize) }} + {{ $license_label = printf "CC %s 4.0" $license_url (replace $cc_code "-" " " | upper) }} + {{ $show_cc_icons = true }} + +{{ else if eq $license_type "custom" }} + + {{ $custom_label := $copyright_license.label | default $copyright_license.text | default "" }} + {{ $custom_url := $copyright_license.url | default "" }} + {{ if and $custom_label $custom_url }} + {{ $license_label = printf "%s" $custom_url $custom_label }} + {{ else }} + {{ $license_label = $custom_label }} + {{ end }} + +{{ end }} + +{{ if and $show_cc_icons $license_url }} + + + +{{ end }} + +{{ with $notice }} +

    + {{ $processed := replace . "{year}" now.Year }} + {{ $processed = replace $processed "{name}" $branding.organization }} + {{ $processed = replace $processed "{license}" $license_label }} + {{ $processed | markdownify }} +

    +{{ end }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/site_head.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/site_head.html new file mode 100644 index 0000000..4c8cf29 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/site_head.html @@ -0,0 +1,263 @@ +{{ $scr := .Scratch }} + + + + + + + {{/* EXTENSIBILITY HOOK: HEAD-START */}} + {{ partial "functions/get_hook" (dict "hook" "head-start" "context" .) }} + + {{ if .Params.private }} + + {{- end -}} + +{{/* Attempt to load superuser/person from data. */}} +{{ $superuser_name := "" }} +{{ $superuser_slug := "" }} +{{ $superuser_role := "" }} + +{{/* Prefer is_owner flag, fallback to slug 'me' */}} +{{ $authors := partialCached "functions/get_authors_data" . site.Language.Lang }} +{{ range $slug, $data := $authors }} + {{ if and (not $superuser_slug) ($data.is_owner) }} + {{ $superuser_slug = $slug }} + {{ end }} +{{ end }} +{{ if and (eq $superuser_slug "") (index $authors "me") }} + {{ $superuser_slug = "me" }} +{{ end }} + +{{ if $superuser_slug }} + {{ $profile := partial "functions/get_author_profile" (dict "slug" $superuser_slug) }} + {{ $superuser_name = $profile.title }} + {{ $superuser_role = $profile.role }} +{{ end }} + +{{ $scr.Set "superuser_slug" $superuser_slug }}{{/* Set superuser globally for author rendering. */}} + +{{ with $superuser_name }}{{ end }} + + {{/* Generate page description. */}} + {{ $desc := "" }} + {{ $desc = partial "functions/get_summary" . }} + {{ if site.Params.hugoblox.identity.description | and (not $desc) }} + {{ $desc = site.Params.hugoblox.identity.description }} + {{ end }} + {{ if not $desc }} + {{ $desc = $superuser_role }} + {{ end }} + + + {{ range .Translations }} + + {{ end }} + + + {{/* Hugo Blox Theme Engine Initialization */}} + {{/* Uses get_theme_config helper for backward-compatible config resolution */}} + {{ $theme_config := partialCached "functions/get_theme_config" . "theme_config" }} + {{ partial "functions/theme_generator.html" $theme_config }} + + {{/* Demo Theme Pack Styles (if enabled) */}} + {{ if site.Params.hugoblox.header.theme_picker }} + {{ partial "functions/demo_theme_styles.html" (dict "typography" $theme_config.typography "layout" $theme_config.layout) }} + {{ end }} + + {{/* Tailwind CSS v4 Processing */}} + {{/* Use templates.Defer to process CSS after all content is analyzed */}} + {{ with (templates.Defer (dict "key" "tailwind-css")) }} + {{ partial "css.html" . }} + {{ end }} + + {{ if fileExists "assets/css/custom.css" }} + {{ $styles := resources.Get "css/custom.css" | minify | fingerprint "sha256" }} + + {{ end }} + + {{/* Externalized init scripts for CSP-friendly head */}} + {{- $hb_head := resources.Get "js/hb-head.js" | js.Build | resources.Minify -}} + {{- if hugo.IsProduction -}} + {{- $hb_head = $hb_head | fingerprint "sha256" -}} + {{- end -}} + + + {{/* Analytics & Verification */}} + {{/* !CACHED! All analytics and verification code is at site level */}} + {{ partialCached "blox-analytics/index" . }} + + {{/* RSS Feed */}} + {{ $branding := partialCached "functions/get_branding" . "branding" }} + {{ with .OutputFormats.Get "RSS" }} + + {{ end }} + + {{/* Progressive Web App (PWA) Icon - SVG preferred */}} + {{ $icon := partial "functions/get_site_icon" 32 }} + {{ with $icon.resource }} + + {{ end }} + {{/* Apple Touch Icon - requires PNG */}} + {{ $icon_apple := partial "functions/get_site_icon" 180 }} + {{ if not $icon_apple.is_svg }} + {{ with $icon_apple.resource }} + + {{ end }} + {{ else }} + {{/* SVG icon - need PNG fallback for Apple */}} + {{ $icon_png := resources.Get "media/icon.png" }} + {{ with $icon_png }} + {{ $apple_icon := .Fill "180x180 Center" }} + + {{ end }} + {{ end }} + + + + {{/* Get page image for sharing. */}} + {{ $sharing_image := resources.GetMatch (path.Join "media" "sharing.*") }} + {{ $featured_image := (.Resources.ByType "image").GetMatch "*featured*" }} +{{ $avatar_image := (.Resources.ByType "image").GetMatch "avatar*" }} + {{ $has_logo := fileExists "assets/media/logo.png" | or (fileExists "assets/media/logo.svg") }} + {{ $og_image := "" }} + {{ $twitter_card := "summary_large_image" }} +{{ if and (eq .Kind "term") (eq .Data.Singular "author") }} + {{/* Try data-driven avatar for author term pages */}} + {{ $termSlug := .Data.Term | urlize }} + {{ $profile := partial "functions/get_author_profile" (dict "slug" $termSlug) }} + {{ with $profile.avatar }} + {{ $og_image = (.Fill "540x540 Center").Permalink }} + {{ $twitter_card = "summary" }} + {{ end }} +{{ else if (and (eq .Kind "term") $avatar_image) }} + {{ $og_image = ($avatar_image.Fill "540x540 Center").Permalink }} + {{ $twitter_card = "summary" }} +{{ else if $featured_image }} + {{ $og_image = $featured_image.Permalink }} + {{ else if $sharing_image }} + {{ $og_image = $sharing_image.Permalink }} + {{ else if $has_logo }} + {{/* !CACHED! Can safely cache this site logo variant */}} + {{ $logo_data := partialCached "functions/get_logo" (dict "constraint" "fit" "size" 300) "logo_og" }} + {{ with $logo_data.resource }} + {{ $og_image = .Permalink }} + {{ end }} + {{ $twitter_card = "summary" }} + {{ else }} + {{ $icon_og := partial "functions/get_site_icon" 512 }} + {{ with $icon_og.resource }} + {{ $og_image = .Permalink }} + {{ end }} + {{ $twitter_card = "summary" }} + {{ end }} + {{ $scr.Set "og_image" $og_image }}{{/* Set `og_image` globally for `rss.xml`. */}} + + {{ $title := "" }} + {{ with .Params.seo.title }} + {{ $title = replace . "{brand}" $branding.site_title }} + {{ else }} + {{ $title = .Title | default $branding.site_title }} + {{ if ne $title $branding.site_title }}{{ $title = printf "%s | %s" $title $branding.site_title }}{{ end }} + {{ end }} + + {{ with site.Params.hugoblox.identity.social.twitter }} + + + {{ end }} + + + + + {{- with $og_image -}} + + + {{- end -}} + + {{ if .IsPage }} + {{ if not .PublishDate.IsZero }} + + {{ else if not .Date.IsZero }} + + {{ end }} + {{ if not .Lastmod.IsZero }}{{ end }} + {{ else }} + {{ if not .Date.IsZero }} + + {{ end }} + {{ end }} + + {{ partial "jsonld/main" (dict "page" . "summary" $desc) }} + + {{$title}} + + {{/* Typography: font loading, font families, and sizes */}} + {{ partial "functions/typography.html" $theme_config }} + {{/* Layout tokens: radius and spacing */}} + {{ partial "functions/layout_tokens.html" $theme_config }} + + {{ if .Params.design.background.image.filename }} + {{/* See Hugo note on linking assets in styles: https://github.com/gohugoio/hugoThemes#common-permalink-issues */}} + {{ $bg_img := resources.Get (printf "media/%s" .Params.design.background.image.filename) }} + {{ if $bg_img }} + {{ if reflect.IsImageResourceProcessable $bg_img }} + {{ $bg_img = $bg_img.Fit "1920x1920 webp" }} + {{ end }} + + {{ else }} + {{ errorf "Couldn't find page background `%s` in the `assets/media/` folder - please add it." .Params.design.background.image.filename }} + {{ end }} + {{ end }} + + {{/* Init prior to auto-chunking/bundling scripts due to Hugo concurrency issues */}} + {{/* !CACHED! Initialized once at site level and then cached for each page */}} + {{- partialCached "init.html" . "hb_init_once" -}} + + {{ $js_license := printf "/*! Hugo Blox Kit Tailwind UI v%s | https://hugoblox.com/ */\n" hugo.Data.hugoblox.version }} + {{ $js_license := $js_license | printf "%s/*! Copyright 2016-present George Cushen (https://georgecushen.com/) */\n" }} + {{ $js_license := $js_license | printf "%s/*! License: https://github.com/HugoBlox/kit/blob/main/LICENSE.md */\n" }} + {{ $js_bundle_head := $js_license | resources.FromString "js/bundle-head.js" }} + {{ $i18n := dict "copy" (i18n "btn_copy") "copied" (i18n "btn_copied" | default "Copied") }} + {{ $js_params := dict "hugoEnvironment" hugo.Environment "i18n" $i18n }} + {{ $js_hugoblox := resources.Get "js/hb-code-copy.js" | js.Build (dict "targetPath" (printf "js/hugoblox-core-%s.js" .Lang ) "params" $js_params) }} + {{ $js_hugoblox := $js_hugoblox | resources.Minify }} + {{- $js_theme := resources.Get "js/hb-theme.js" | resources.Minify -}} + {{- $js_lang := resources.Get "js/hb-i18n.js" | resources.Minify -}} + {{- $js_nav := resources.Get "js/hb-nav.js" | resources.Minify -}} + {{- $js_sidebar := resources.Get "js/hb-sidebar.js" | resources.Minify -}} + {{- $js_notifier := resources.Get "js/hb-notifier.js" | js.Build (dict "targetPath" (printf "js/hb-notifier-%s.js" .Lang ) "params" $js_params) | resources.Minify -}} + {{- $js_clipboard := resources.Get "js/hb-clipboard.js" | js.Build (dict "targetPath" (printf "js/hb-clipboard-%s.js" .Lang ) "params" $js_params) | resources.Minify -}} + {{- $js_citation := resources.Get "js/hb-citation.js" | js.Build (dict "targetPath" (printf "js/hb-citation-%s.js" .Lang ) "params" $js_params) | resources.Minify -}} + + {{/* Start with the core scripts */}} + {{ $js_bundle_contents := slice $js_bundle_head $js_hugoblox $js_theme $js_lang $js_nav $js_sidebar $js_notifier $js_clipboard $js_citation }} + + {{/* Discover and include block-specific JavaScript */}} + {{- with partial "functions/get-block-scripts.html" . -}} + {{ $js_bundle_contents = $js_bundle_contents | append . }} + {{- end -}} + + {{ $js_bundle := $js_bundle_contents | resources.Concat (printf "js/hugo-blox-%s.min.js" .Lang) }} + {{- if hugo.IsProduction -}} + {{ $js_bundle = $js_bundle | fingerprint "sha256" }} + {{- end -}} + + + {{/* Load Third-Party Libraries */}} + {{ partial "libraries.html" . }} + + {{/* EXTENSIBILITY HOOK: HEAD-END */}} + {{ partial "functions/get_hook" (dict "hook" "head-end" "context" .) }} + diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/social_links.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/social_links.html new file mode 100644 index 0000000..4996630 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/social_links.html @@ -0,0 +1,21 @@ +{{ if .Params.profiles }} +
    + {{ range $links := .Params.profiles }} + {{ $link := .url }} + {{ $scheme := (urls.Parse $link).Scheme }} + {{ $target := "" }} + {{ if not $scheme }} + {{ $link = .url | relLangURL }} + {{ else if in (slice "http" "https") $scheme }} + {{ $target = "target=\"_blank\" rel=\"noopener\" rel=\"me noopener noreferrer\"" }} + {{ end }} + {{ partial "functions/get_icon" (dict "name" .icon "attributes" "style=\"height: 1em;\"") }} + {{ end }} +
    +{{ end }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/tags.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/tags.html new file mode 100644 index 0000000..e2dd27a --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/tags.html @@ -0,0 +1,7 @@ +{{ if .Params.tags }} +
    + {{ range $index, $value := (.GetTerms "tags") }} + {{ .LinkTitle }} + {{ end }} +
    +{{ end }} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/tailwind_sources.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/tailwind_sources.html new file mode 100644 index 0000000..a5b90c8 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/tailwind_sources.html @@ -0,0 +1,91 @@ +{{/* Hugo Blox: Dynamic Tailwind @source generation for Hugo modules */}} +{{/* Documentation: https://hugoblox.com/docs/ */}} +{{/* License: https://github.com/HugoBlox/kit/blob/main/LICENSE.md */}} + +{{/* +This partial generates Tailwind CSS @source directives that tell Tailwind where to scan for CSS classes. + +It provides a robust bridge between Hugo's virtual filesystem (which includes module mounts) +and Tailwind's real filesystem scanner. +*/}} +{{ $paths := slice }} + +{{/* 1. Always scan the site's source files. */}} +{{ $paths = $paths | append `content/**/*.md` }} +{{ $paths = $paths | append `layouts/**/*.html` }} +{{ $paths = $paths | append `assets/js/**/*.js` }} +{{ $paths = $paths | append `assets/js/**/*.jsx` }} +{{ $paths = $paths | append `assets/js/**/*.tsx` }} +{{ $paths = $paths | append `hugo_stats.json` }} + +{{/* +2. Crucially, scan Hugo's generated JS output from Preact components. + These files are built by Hugo's `js.Build` into a predictable location within the + project's `assets` directory, making them a reliable source for Tailwind to scan. + This step happens before Tailwind runs, thanks to `templates.Defer` in `site_head.html`. +*/}} +{{ $paths = $paths | append `assets/js/preact-built/**/*.js` }} + +{{/* +3. Comprehensive class extraction from Preact JSX/TSX source files. + + Hugo's virtual filesystem mounts block JSX/TSX into assets/js/hbx/blocks/. + Tailwind's @source file paths only work on the real filesystem, but these + files exist only in Hugo's virtual FS (or in a module cache for remote modules). + So we read the file content via resources.Match and extract class candidates inline. + + Strategy: Extract ALL string literal content — not just class= attributes. + This catches classes in any pattern: + - Static attrs: class="gap-8 items-center" + - JSX expressions: class={"gap-8 items-center"} + - Template literals: class={`gap-8 ${cond ? "md:grid" : ""}`} + - Utility fns: cn("gap-8", condition && "md:grid-cols-2") + + Tailwind's scanner automatically ignores non-class tokens (import paths, + error messages, etc.), so false positives are harmless. +*/}} +{{ $all_jsx := resources.Match "js/hbx/**/*.jsx" }} +{{ $all_tsx := resources.Match "js/hbx/**/*.tsx" }} + +{{ $extracted_classes := slice }} +{{ range $f := $all_jsx | append $all_tsx }} + {{ $code := $f.Content }} + + {{/* A) Extract content of all double-quoted strings */}} + {{ $dq_matches := findRE `"[^"]*"` $code }} + {{ range $m := $dq_matches }} + {{ $str := strings.TrimPrefix `"` (strings.TrimSuffix `"` $m) }} + {{ range split $str " " }} + {{ $t := strings.TrimSpace . }} + {{/* Filter out tokens with unsafe characters (braces, quotes, parens) */}} + {{ if and $t (not (findRE `[\{\}\(\)"';]` $t)) }} + {{ $extracted_classes = $extracted_classes | append $t }} + {{ end }} + {{ end }} + {{ end }} + + {{/* B) Extract static parts of template literals (backtick strings) */}} + {{/* Removes ${...} interpolations, keeping surrounding text */}} + {{ $bt_matches := findRE "`[^`]*`" $code }} + {{ range $m := $bt_matches }} + {{ $str := strings.TrimPrefix "`" (strings.TrimSuffix "`" $m) }} + {{ $static := replaceRE `\$\{[^}]*\}` " " $str }} + {{ range split $static " " }} + {{ $t := strings.TrimSpace . }} + {{/* Filter out tokens with unsafe characters (braces, quotes, parens) */}} + {{ if and $t (not (findRE `[\{\}\(\)"';]` $t)) }} + {{ $extracted_classes = $extracted_classes | append $t }} + {{ end }} + {{ end }} + {{ end }} +{{ end }} + +{{ $extracted_classes = $extracted_classes | uniq }} +{{ range $class := $extracted_classes }} +@source inline("{{ $class }}"); +{{ end }} + +{{/* Generate the @source rules */}} +{{ range $paths }} +@source "{{ . }}"; +{{ end }} \ No newline at end of file diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/article-grid--end.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/article-grid--end.html new file mode 100644 index 0000000..b0f2d2f --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/article-grid--end.html @@ -0,0 +1,2 @@ + + diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/article-grid--start.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/article-grid--start.html new file mode 100644 index 0000000..f9400ad --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/article-grid--start.html @@ -0,0 +1,5 @@ +{{ $columns := .config.columns | default 2 }} +{{ $len := .config.len | default 2 }} +{{/* NOTE: dynamic `md:grid-cols-{{$columns}}` class requires Tailwind exception */}} +
    +
    diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/article-grid.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/article-grid.html new file mode 100644 index 0000000..a88b9d1 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/article-grid.html @@ -0,0 +1 @@ +{{- partial "views/card.html" . -}} diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/card--end.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/card--end.html new file mode 100644 index 0000000..04f5b84 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/card--end.html @@ -0,0 +1 @@ +
    diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/card--start.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/card--start.html new file mode 100644 index 0000000..f24d47c --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/card--start.html @@ -0,0 +1 @@ +
    diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/card.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/card.html new file mode 100644 index 0000000..46e8ac1 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/card.html @@ -0,0 +1,224 @@ +{{ $item := .item }} + +{{ $link := $item.RelPermalink }} +{{ $target := "" }} +{{ if $item.Params.external_link }} + {{ $link = $item.Params.external_link }} + {{ $target = "target=\"_blank\" rel=\"noopener\"" }} +{{ end }} + +{{ $resource := partial "functions/get_featured_image.html" $item }} +{{ $anchor := "Center" }} +{{ if and $item.Params.image (reflect.IsMap $item.Params.image) }} + {{ $anchor = $item.Params.image.focal_point | default "Center" }} +{{ end }} +{{ $fill_image := .config.fill_image | default true }} +{{ $showDate := .config.show_date | default true }} +{{ $showReadTime := .config.show_read_time | default true }} +{{ $showReadMore := .config.show_read_more | default true }} +{{ $hasMeta := or $showDate $showReadTime $showReadMore }} +{{ $index := .index }} +{{ $isEvent := eq $item.Type "events" }} +{{ $event_dates := "" }} +{{ if $isEvent }} +{{ $event_dates = partial "functions/get_event_dates" $item }} +{{ end }} + +
    + +
    + {{ with $item.Params.content_meta }} + {{ if .trending }} +
    + {{ i18n "trending" | default "Trending" }} + +
    + {{ end }} + {{ end }} + {{ with $resource }} + {{/* + Image processing gate: + - reflect.IsImageResourceProcessable → false for SVG (not processable by Hugo). + - GIF: processable by Hugo but we skip to preserve animation frames. + */}} + {{ $canProcess := and (reflect.IsImageResourceProcessable .) (ne .MediaType.SubType "gif") }} + {{ if not $canProcess }} + + {{ $item.Title | plainify }} featured image + + {{ else }} + {{ $original_image := "" }} + {{ if $fill_image }} + {{ $original_image = .Fill (printf "800x450 %s" $anchor) }} + {{ else }} + {{ $original_image = .Fit (printf "800x450 %s" $anchor) }} + {{ end }} + {{ $responsive := partial "functions/process_responsive_image.html" (dict + "image" $original_image + "mode" "responsive" + "sizes" (slice 400 600 800) + "formats" (slice "avif" "webp" "jpg") + ) }} + + {{ $item.Title | plainify }} featured image + + {{ end }} + {{ else }} + + +
    +
    + + + +
    +
    +
    + {{end}} + + +
    +
    + + +
    + {{ with $item.Params.content_meta }} + {{ if or .content_type .difficulty }} +
    + {{ with .content_type }} + + {{ . }} + + {{ end }} + {{ with .difficulty }} + {{ i18n "difficulty" }}: {{ . }} + {{ end }} +
    + {{ end }} + {{ end }} + + {{ if and $item.Params.tags (gt (len $item.Params.tags) 0) }} +
    + {{ with index ($item.GetTerms "tags") 0 }} + + + {{ .Page.LinkTitle }} + + + {{ end }} +
    + {{ end }} + +

    + + {{ $item.Title }} + {{ if $item.Params.external_link }} + {{ partial "functions/get_icon" (dict "name" "arrow-top-right-on-square" "attributes" "style=\"height: 1em;\" class=\"inline-flex h-4 w-4 ml-1 align-text-top\"") }} + {{ end }} + +

    + +

    + {{ (partial "functions/get_summary" $item) | plainify | htmlUnescape | truncate 180 }} +

    + + {{ with $item.Params.content_meta.prerequisites }} + {{ $max := 2 }} + {{ $count := len . }} +
    + {{ i18n "prerequisites" }}: + {{ range (first $max .) }} + {{ . }} + {{ end }} + {{ if gt $count $max }} + +{{ sub $count $max }} + {{ end }} +
    + {{ end }} + + + {{ if $hasMeta }} +
    +
    + {{ if $item.Params.authors }} +
    + {{ $slug := index $item.Params.authors 0 | urlize }} + {{ $profile := partial "functions/get_author_profile" $slug }} + {{ $avatar := $profile.avatar }} +
    + {{ if $avatar }} + {{ $avatar_48 := $avatar.Process "Fill 48x48 Center webp" }} + avatar + {{ else }} +
    + {{ partial "functions/get_icon" (dict "name" "hero/user" "attributes" "class=\"w-4 h-4 text-gray-500 dark:text-gray-400\"") }} +
    + {{ end }} +
    + {{ $profile.title }} +
    + + {{ end }} + {{ if $showDate }} + {{ if $isEvent }} + + {{ else }} + + {{ end }} + {{ end }} + {{ if and $showDate $showReadTime }} + + {{ end }} + {{ if $showReadTime }} + {{ $content := $item.Content | plainify }} + {{ $words := len (split $content " ") }} + {{ $readTime := div $words 200 }} + {{ if lt $readTime 1 }}{{ $readTime = 1 }}{{ end }} + + {{ end }} +
    + + + {{ if $showReadMore }} + + {{ end }} +
    + {{ end }} + + + {{ if $item.Params.ai_insights }} +
    + + + + {{ i18n "ai_insight" }}: + {{ $item.Params.ai_insights }} +
    + {{ end }} +
    +
    \ No newline at end of file diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/citation--end.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/citation--end.html new file mode 100644 index 0000000..bdd6bc9 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/citation--end.html @@ -0,0 +1,2 @@ +
    +
    diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/citation--start.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/citation--start.html new file mode 100644 index 0000000..7f5f712 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/citation--start.html @@ -0,0 +1,3 @@ +{{/* Left alignment / width is set so that multiple blocks with this view & variable length content all left align. */}} +
    +
    diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/citation.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/citation.html new file mode 100644 index 0000000..c0c5eae --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/citation.html @@ -0,0 +1,50 @@ +{{ $item := .item }} +{{ $year_value := $item.Params.event_start | default $item.Date }} +{{ $year := (time $year_value).Format "2006" }} +{{ $has_attachments := partial "functions/has_attachments" $item }} + +
    + + + {{/* APA Style */}} + {{ if eq (site.Params.hugoblox.content.citations.style | default "apa") "apa" }} + + + ({{- $year -}}). + {{ $item.Title }}. + {{ if $item.Params.publication_short }} + {{- $item.Params.publication_short | markdownify -}}. + {{ else if $item.Params.publication }} + {{- $item.Params.publication | markdownify -}}. + {{ end }} + + {{ if $has_attachments }} +
    + {{ partial "page_links" (dict "page" $item "is_list" 1) }} +
    + {{ end }} + + {{/* MLA Style */}} + {{ else }} + + + {{ $item.Title }}. + {{ if $item.Params.publication_short }} + {{- $item.Params.publication_short | markdownify -}}, + {{ else if $item.Params.publication }} + {{- $item.Params.publication | markdownify -}}, + {{ end }} + {{- $year -}}. + + {{ if $has_attachments }} +
    + {{ partial "page_links" (dict "page" $item "is_list" 1) }} +
    + {{ end }} + + {{ end }} +
    diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/date-title-summary--end.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/date-title-summary--end.html new file mode 100644 index 0000000..bdd6bc9 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/date-title-summary--end.html @@ -0,0 +1,2 @@ +
    +
    diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/date-title-summary--start.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/date-title-summary--start.html new file mode 100644 index 0000000..e5c96e9 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/date-title-summary--start.html @@ -0,0 +1,2 @@ +
    +
    diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/date-title-summary.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/date-title-summary.html new file mode 100644 index 0000000..8023868 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/date-title-summary.html @@ -0,0 +1,31 @@ +{{ $item := .item }} +{{ $page := .page }} +{{ $summary := partial "functions/get_summary" $item }} +{{ $summary = $summary | page.RenderString }} +{{ $displayDate := .item.Params.event_start | default .item.Date }} +
    +
    +

    +
    + {{$item.Title}} +

    + +

    {{$summary}}

    + +
    + +
    diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/slides-gallery--end.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/slides-gallery--end.html new file mode 100644 index 0000000..b0f2d2f --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/slides-gallery--end.html @@ -0,0 +1,2 @@ +
    +
    diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/slides-gallery--start.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/slides-gallery--start.html new file mode 100644 index 0000000..da674c8 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/slides-gallery--start.html @@ -0,0 +1,5 @@ +{{ $columns := .config.columns | default 2 }} +{{ $len := .config.len | default 1 }} +{{/* Grid layout optimized for slide deck previews - 16:9 aspect ratio cards */}} +
    +
    diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/slides-gallery.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/slides-gallery.html new file mode 100644 index 0000000..f84f340 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_partials/views/slides-gallery.html @@ -0,0 +1,198 @@ +{{/* Hugo Blox Slides Gallery View - Optimized for slide deck presentations */}} +{{/* Features: 16:9 aspect ratio, play button overlay, slide count, tags, featured badge */}} + +{{ $item := .item }} +{{ $link := $item.RelPermalink }} +{{ $html_format := $item.OutputFormats.Get "HTML" }} +{{ if not $html_format }} + {{ $html_format = $item.OutputFormats.Get "html" }} +{{ end }} +{{ with $html_format }} + {{ $link = .RelPermalink }} +{{ end }} +{{ $present_link := $link }} +{{ $present_format := $item.OutputFormats.Get "present" }} +{{ if not $present_format }} + {{ $present_format = $item.OutputFormats.Get "Present" }} +{{ end }} +{{ with $present_format }} + {{ $present_link = .RelPermalink }} +{{ end }} +{{ $resource := partial "functions/get_featured_image.html" $item }} +{{ $index := .index }} +{{ $featured_label := i18n "featured" | default "Featured" }} +{{ $details_label := i18n "details" | default "Details" }} +{{ $present_label := i18n "present_slides" | default "Present" }} +{{ $present_fullscreen_label := i18n "present_fullscreen" | default "Present (fullscreen)" }} +{{ $slides_label := i18n "slides" | default "Slides" }} + +{{/* Check if featured/pinned */}} +{{ $isFeatured := or $item.Params.featured $item.Params.pinned }} + +{{/* Calculate slide count by counting "---" separators in content */}} +{{ $content := $item.RawContent }} +{{ $slideCount := 1 }} +{{ $separators := findRE "(?m)^---$" $content }} +{{ if $separators }} + {{ $slideCount = add (len $separators) 1 }} + {{/* Subtract 1 for front matter separator if content starts with --- */}} + {{ if hasPrefix $content "---" }} + {{ $slideCount = sub $slideCount 1 }} + {{ end }} +{{ end }} + +{{/* Get summary - use description from front matter or truncate content */}} +{{ $summary := $item.Description | default $item.Summary | default "" }} +{{ $summary = $summary | plainify | truncate 160 }} + +
    + {{/* Featured Badge */}} + {{ if $isFeatured }} +
    + + + + {{ $featured_label }} +
    + {{ end }} + + {{/* Slide Preview Image - 16:9 aspect ratio */}} + + {{ with $resource }} + {{/* reflect.IsImageResourceProcessable → false for SVG; GIF skipped to preserve animation */}} + {{ $canProcess := and (reflect.IsImageResourceProcessable .) (ne .MediaType.SubType "gif") }} + {{ if not $canProcess }} + {{ $item.Title | plainify }} + {{ else }} + {{ $image := .Fill "800x450 Center" }} + {{ $responsive := partial "functions/process_responsive_image.html" (dict + "image" $image + "mode" "responsive" + "sizes" (slice 400 600 800) + "formats" (slice "avif" "webp" "jpg") + ) }} + {{ $item.Title | plainify }} + {{ end }} + {{ else }} + {{/* Fallback: Decorative gradient with slide icon - smaller, cleaner */}} +
    +
    + + + +
    +
    + {{ end }} + + {{/* Play button overlay on hover */}} +
    +
    + + + +
    +
    + + {{/* Slide count badge */}} + {{ if gt $slideCount 1 }} +
    + {{ $slideCount }} {{ $slides_label | lower }} +
    + {{ end }} +
    + + {{/* Content Section */}} +
    + {{/* Tags */}} + {{ if $item.Params.tags }} +
    + {{ range first 3 $item.Params.tags }} + + {{ . }} + + {{ end }} + {{ if gt (len $item.Params.tags) 3 }} + +{{ sub (len $item.Params.tags) 3 }} + {{ end }} +
    + {{ end }} + + {{ $authors := slice }} + {{ with $item.Params.authors }} + {{ if reflect.IsSlice . }} + {{ $authors = . }} + {{ else }} + {{ $authors = slice . }} + {{ end }} + {{ end }} + {{ if gt (len $authors) 0 }} + {{ $author := index $authors 0 }} + {{ $profile := partial "functions/get_author_profile" $author }} + {{ $avatar := $profile.avatar }} + {{ $authorName := $author }} + {{ if $profile.has_data }} + {{ $authorName = $profile.title }} + {{ end }} +
    +
    + {{ if $avatar }} + {{ $avatar_48 := $avatar.Process "Fill 48x48 Center webp" }} + {{ $authorName }} + {{ else }} +
    + {{ partial "functions/get_icon" (dict "name" "hero/user" "attributes" "class=\"w-4 h-4 text-zinc-500 dark:text-zinc-400\"") }} +
    + {{ end }} +
    + {{ $authorName }} +
    + {{ end }} + + {{/* Title */}} +

    + {{ $item.Title }} +

    + + {{/* Summary */}} +

    {{ if $summary }}{{ $summary }}{{ else }} {{ end }}

    + + {{/* Footer: Venue, Year, Details + Present Links */}} +
    +
    + {{ with $item.Params.venue }} + {{ . }} + · + {{ end }} + +
    + +
    +
    +
    diff --git a/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_shortcodes/audio.html b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_shortcodes/audio.html new file mode 100644 index 0000000..35db550 --- /dev/null +++ b/_vendor/github.com/HugoBlox/kit/modules/blox/layouts/_shortcodes/audio.html @@ -0,0 +1,41 @@ +{{/* Audio Shortcode for Hugo Blox Kit. */}} +{{/* Load audio from page dir falling back to media library at `assets/media/` and then to remote URI. */}} +{{/* Supports primarily MP3 and MP4. */}} + +{{/* + Docs: https://docs.hugoblox.com/content/writing-markdown-latex/#audio + + Parameters + ---------- + src : + Path to file or url for the audio file. + If a local file, first it is searched in the page directory, and then in `assets/media/` . + id : optional + Custom id "audio-{id}" to associate to the