From 7a822d80c23653714fb6332a5597e1f6733e9517 Mon Sep 17 00:00:00 2001 From: DominiqueMakowski Date: Sat, 20 Dec 2025 17:54:53 +0000 Subject: [PATCH 1/3] update modules --- .Rprofile | 2 +- .github/workflows/check.yml | 4 +- .github/workflows/deploy.yml | 2 +- .../blox-analytics/index.html | 0 .../services}/baidu_tongji.html | 2 +- .../blox-analytics/services/fathom.html | 2 +- .../services/google_analytics.html | 4 +- .../services}/google_tag_manager.html | 2 +- .../blox-analytics/services/index.html | 0 .../services}/microsoft_clarity.html | 2 +- .../blox-analytics/services/pirsch.html | 2 +- .../blox-analytics/services/plausible.html | 2 +- .../blox-analytics/verification.html | 12 +- .../_markup/render-codeblock-markmap.html | 0 .../_markup/render-codeblock-mermaid.html | 0 .../{_default => }/_markup/render-image.html | 0 .../{_default => }/_markup/render-link.html | 0 .../blocks/about.avatar.html | 0 .../blocks/about.biography.html | 0 .../blocks/accomplishments.html | 0 .../blocks/collection.html | 0 .../blocks/contact.html | 0 .../blocks/experience.html | 0 .../blocks/features.html | 0 .../{partials => _partials}/blocks/hero.html | 0 .../blocks/markdown.html | 0 .../blocks/people.html | 0 .../blocks/portfolio.html | 0 .../blocks/skills.html | 0 .../blocks/slider.html | 0 .../blocks/tag_cloud.html | 0 .../blocks/v1/about.avatar.html | 0 .../blocks/v1/about.html | 0 .../blocks/v1/accomplishments.html | 0 .../blocks/v1/collection.html | 0 .../blocks/v1/contact.html | 0 .../blocks/v1/experience.html | 0 .../blocks/v1/features.html | 0 .../blocks/v1/hero.html | 0 .../blocks/v1/markdown.html | 0 .../blocks/v1/people.html | 0 .../blocks/v1/portfolio.html | 0 .../blocks/v1/slider.html | 0 .../blocks/v1/tag_cloud.html | 0 .../{partials => _partials}/book_layout.html | 0 .../{partials => _partials}/book_menu.html | 0 .../{partials => _partials}/book_sidebar.html | 0 .../{partials => _partials}/citation.html | 0 .../{partials => _partials}/comments.html | 2 +- .../comments/commento.html | 0 .../comments/disqus.html | 0 .../comments/giscus.html | 0 .../components/announcement_bar.html | 0 .../components/breadcrumb.html | 0 .../components/feedback.html | 0 .../components/footers/minimal.html | 0 .../components/headers/navbar.html | 0 .../components/page_sharer.html | 0 .../components/pager.html | 0 .../cookie_consent.html | 0 .../functions/get_address.html | 0 .../functions/get_event_dates.html | 0 .../functions/get_pub_types.html | 0 .../functions/get_social_link.html | 0 .../functions/has_attachments.html | 0 .../functions/parse_block_v1.html | 6 +- .../functions/parse_block_v2.html | 6 +- .../functions/parse_theme.html | 0 .../functions/render_view.html | 2 +- .../{partials => _partials}/landing_page.html | 0 .../{partials => _partials}/page_author.html | 0 .../page_author_card.html | 0 .../{partials => _partials}/page_edit.html | 0 .../{partials => _partials}/page_footer.html | 0 .../{partials => _partials}/page_header.html | 0 .../{partials => _partials}/page_links.html | 0 .../page_links_div.html | 0 .../page_metadata.html | 5 +- .../page_metadata_authors.html | 7 +- .../{partials => _partials}/page_related.html | 0 .../{partials => _partials}/pagination.html | 0 .../{partials => _partials}/search.html | 0 .../{partials => _partials}/site_footer.html | 4 +- .../site_footer_license.html | 0 .../{partials => _partials}/site_head.html | 2 +- .../{partials => _partials}/site_js.html | 2 +- .../{partials => _partials}/social_links.html | 0 .../layouts/{partials => _partials}/tags.html | 5 +- .../{partials => _partials}/views/card.html | 0 .../views/citation.html | 0 .../views/community/.gitkeep | 0 .../views/compact.html | 0 .../{partials => _partials}/views/list.html | 0 .../views/masonry.html | 0 .../views/showcase.html | 0 .../{partials => _partials}/widget_page.html | 0 .../{shortcodes => _shortcodes}/audio.html | 0 .../{shortcodes => _shortcodes}/bilibili.html | 0 .../{shortcodes => _shortcodes}/callout.html | 0 .../{shortcodes => _shortcodes}/chart.html | 0 .../{shortcodes => _shortcodes}/cite.html | 0 .../{shortcodes => _shortcodes}/cta.html | 0 .../emoji_list.html | 0 .../{shortcodes => _shortcodes}/figure.html | 0 .../{shortcodes => _shortcodes}/gallery.html | 0 .../{shortcodes => _shortcodes}/gdocs.html | 0 .../{shortcodes => _shortcodes}/hl.html | 0 .../{shortcodes => _shortcodes}/icon.html | 0 .../list_categories.html | 0 .../list_children.html | 0 .../list_tags.html | 0 .../{shortcodes => _shortcodes}/math.html | 0 .../{shortcodes => _shortcodes}/mention.html | 0 .../{shortcodes => _shortcodes}/spoiler.html | 0 .../staticref.html | 0 .../{shortcodes => _shortcodes}/table.html | 0 .../{shortcodes => _shortcodes}/toc.html | 0 .../{shortcodes => _shortcodes}/video.html | 0 .../layouts/{_default => }/baseof.html | 4 +- .../event.html => event/section.html} | 0 .../layouts/{index.html => home.html} | 0 .../layouts/{_default => }/list.html | 4 +- .../{section/post.html => post/section.html} | 0 .../section.html} | 0 .../layouts/{_default => }/rss.xml | 0 .../layouts/{_default => }/single.html | 0 .../blox-core/functions/get_author_name.html | 0 .../functions/get_featured_image.html | 0 .../blox-core}/functions/get_hook.html | 2 +- .../blox-core/functions/get_icon.html | 0 .../blox-core/functions/get_logo.html | 0 .../blox-core/functions/get_logo_url.html | 0 .../blox-core/functions/get_page_title.html | 0 .../functions/get_sort_by_parameter.html | 0 .../dependencies.html | 0 .../modules/blox-plugin-decap-cms/config.yaml | 2 +- .../data/decap_cms_config.yaml | 1 + .../src/layouts/index.headers | 16 +- .../assets/css/libs/chroma/dracula.css | 341 +- .../assets/css/libs/chroma/github-dark.css | 2 +- .../assets/css/libs/chroma/github-light.css | 371 +- ...{wowchemy-slides.js => hugoblox-slides.js} | 60 +- .../modules/blox-plugin-reveal/config.yaml | 2 - .../modules/blox-plugin-reveal/go.mod | 4 +- .../{partials => _partials}/slides.html | 14 +- .../{shortcodes => _shortcodes}/fragment.html | 0 .../{shortcodes => _shortcodes}/slide.html | 0 .../speaker_note.html | 0 .../layouts/slides/baseof.html | 6 +- .../{_default => }/_markup/sitemap.xml | 0 .../_partials/analytics}/baidu_tongji.html | 0 .../analytics/google_analytics.html | 0 .../analytics}/google_tag_manager.html | 0 .../analytics/main.html | 0 .../analytics}/microsoft_clarity.html | 0 .../{partials => _partials}/blox_seo.html | 0 .../jsonld/article.html | 0 .../jsonld/business.html | 0 .../{partials => _partials}/jsonld/event.html | 0 .../{partials => _partials}/jsonld/main.html | 0 .../jsonld/website.html | 0 .../{partials => _partials}/seo_tags.html | 0 .../site_verification.html | 0 .../modules/blox-tailwind/.npmrc | 4 + .../modules/blox-tailwind/README.md | 86 +- .../modules/blox-tailwind/archetypes/faq.md | 45 + .../blox-tailwind/archetypes/questions.md | 62 + .../blox-tailwind/assets/css/README.md | 99 + .../assets/css/blox/biography.css | 144 +- .../blox-tailwind/assets/css/blox/navbar.css | 67 +- .../blox-tailwind/assets/css/blox/skills.css | 4 +- .../blox-tailwind/assets/css/chroma.css | 20 +- .../assets/css/color-utilities.css | 47 + .../assets/css/components/all.css | 4 + .../assets/css/components/author-notes.css | 48 + .../assets/css/components/cards.css | 45 +- .../assets/css/components/copy.css | 21 +- .../assets/css/components/cover.css | 146 + .../assets/css/components/glassmorphism.css | 239 + .../assets/css/components/math.css | 4 +- .../assets/css/components/notebook.css | 150 + .../assets/css/components/page.css | 8 +- .../assets/css/components/sidebar-left.css | 26 +- .../assets/css/components/steps.css | 15 +- .../assets/css/components/task-list.css | 10 +- .../assets/css/config/safelist.css | 232 + .../assets/css/config/tailwind.css | 24 + .../blox-tailwind/assets/css/config/theme.css | 339 ++ .../assets/css/framework/base.css | 103 + .../assets/css/framework/components.css | 132 + .../blox-tailwind/assets/css/hb-search.css | 86 + .../assets/css/layout-utilities.css | 81 + .../assets/css/libs/chroma/dark.css | 114 +- .../assets/css/libs/chroma/light.css | 138 +- .../modules/blox-tailwind/assets/css/main.css | 104 +- .../blox-tailwind/assets/css/styles.css | 9 - .../blox-tailwind/assets/css/tailwind.css | 3 - .../blox-tailwind/assets/css/themes/amber.css | 27 + .../blox-tailwind/assets/css/themes/blue.css | 44 +- .../blox-tailwind/assets/css/themes/cyan.css | 35 +- .../assets/css/themes/emerald.css | 35 +- .../assets/css/themes/fuchsia.css | 27 + .../blox-tailwind/assets/css/themes/green.css | 35 +- .../assets/css/themes/indigo.css | 35 +- .../blox-tailwind/assets/css/themes/lime.css | 27 + .../assets/css/themes/orange.css | 27 + .../blox-tailwind/assets/css/themes/pink.css | 27 + .../assets/css/themes/purple.css | 35 +- .../blox-tailwind/assets/css/themes/red.css | 35 +- .../blox-tailwind/assets/css/themes/rose.css | 35 +- .../blox-tailwind/assets/css/themes/sky.css | 35 +- .../blox-tailwind/assets/css/themes/slate.css | 27 + .../blox-tailwind/assets/css/themes/stone.css | 27 + .../blox-tailwind/assets/css/themes/teal.css | 35 +- .../assets/css/themes/violet.css | 27 + .../assets/css/themes/yellow.css | 27 + .../blox-tailwind/assets/css/themes/zinc.css | 35 +- .../blox-tailwind/assets/css/views/all.css | 1 + .../assets/css/views/attachments.css | 23 +- .../assets/dist/lib/alpinejs/cdn.min.js | 4 +- .../assets/dist/lib/katex/auto-render.min.js | 2 +- .../assets/dist/lib/katex/katex.min.css | 2 +- .../assets/dist/lib/katex/katex.min.js | 2 +- .../assets/dist/lib/markmap/index.js | 841 +-- .../assets/dist/lib/mermaid/mermaid.min.js | 2615 +++++++--- .../assets/dist/lib/plotly/plotly.min.js | 3882 +++++++++++++- .../assets/dist/lib/preact/hooks.min.js | 2 + .../assets/dist/lib/preact/preact.min.js | 2 + .../assets/dist/lib/preact/preact.min.js.map | 1 + .../assets/dist/lib/vendor-libs.mjs | 4 + .../blox-tailwind/assets/dist/wc.min.css | 2 - .../blox-tailwind/assets/hugo_stats.json | 6 + .../blox-tailwind/assets/js/hb-citation.js | 189 + .../blox-tailwind/assets/js/hb-clipboard.js | 187 + .../blox-tailwind/assets/js/hb-code-copy.js | 196 +- .../blox-tailwind/assets/js/hb-head.js | 31 + .../blox-tailwind/assets/js/hb-i18n.js | 16 +- .../blox-tailwind/assets/js/hb-init.js | 45 + .../assets/js/hb-mermaid-config.js | 21 +- .../modules/blox-tailwind/assets/js/hb-nav.js | 39 +- .../blox-tailwind/assets/js/hb-notifier.js | 197 + .../blox-tailwind/assets/js/hb-search.js | 32 + .../blox-tailwind/assets/js/hb-sidebar.js | 44 +- .../blox-tailwind/assets/js/hb-theme.js | 27 +- .../blox-tailwind/assets/js/katex-config.js | 10 +- .../blox-tailwind/assets/js/vendor-libs.js | 11 + .../assets/media/textures/noise-pattern.svg | 20 + .../blox-tailwind/blox/collection/README.md | 43 + .../collection/block.html} | 37 +- .../blox/collection/manifest.json | 13 + .../blox-tailwind/blox/collection/preview.svg | 21 + .../blox-tailwind/blox/collection/schema.json | 117 + .../blox-tailwind/blox/contact-info/README.md | 139 + .../blox/contact-info/block.html | 184 + .../blox/contact-info/manifest.json | 13 + .../blox/contact-info/schema.json | 130 + .../blox/cta-button-list/README.md | 50 + .../cta-button-list/block.html} | 0 .../blox/cta-button-list/manifest.json | 13 + .../blox/cta-button-list/preview.svg | 20 + .../blox/cta-button-list/schema.json | 48 + .../blox-tailwind/blox/cta-card/README.md | 211 + .../blox-tailwind/blox/cta-card/block.html | 105 + .../blox-tailwind/blox/cta-card/manifest.json | 13 + .../blox-tailwind/blox/cta-card/preview.svg | 21 + .../blox-tailwind/blox/cta-card/schema.json | 148 + .../blox/cta-image-paragraph/README.md | 51 + .../cta-image-paragraph/block.html} | 24 +- .../blox/cta-image-paragraph/manifest.json | 13 + .../blox/cta-image-paragraph/preview.svg | 30 + .../blox/cta-image-paragraph/schema.json | 75 + .../modules/blox-tailwind/blox/faq/README.md | 58 + .../modules/blox-tailwind/blox/faq/block.html | 97 + .../blox-tailwind/blox/faq/manifest.json | 8 + .../blox-tailwind/blox/faq/preview.svg | 32 + .../blox-tailwind/blox/faq/schema.json | 94 + .../blox-tailwind/blox/features/README.md | 51 + .../features/block.html} | 0 .../blox-tailwind/blox/features/manifest.json | 13 + .../blox-tailwind/blox/features/preview.svg | 38 + .../blox-tailwind/blox/features/schema.json | 56 + .../modules/blox-tailwind/blox/hero/README.md | 52 + .../blox/hero.html => blox/hero/block.html} | 39 +- .../blox-tailwind/blox/hero/client.jsx | 36 + .../blox-tailwind/blox/hero/component.jsx | 138 + .../blox-tailwind/blox/hero/manifest.json | 13 + .../blox-tailwind/blox/hero/preview.svg | 26 + .../blox-tailwind/blox/hero/schema.json | 101 + .../blox/knowledge-categories/block.html | 97 + .../blox/knowledge-categories/manifest.json | 8 + .../blox/knowledge-categories/schema.json | 74 + .../blox-tailwind/blox/logos/README.md | 220 + .../blox-tailwind/blox/logos/block.html | 235 + .../blox-tailwind/blox/logos/manifest.json | 13 + .../blox-tailwind/blox/logos/schema.json | 106 + .../blox-tailwind/blox/markdown/README.md | 59 + .../markdown/block.html} | 0 .../blox-tailwind/blox/markdown/manifest.json | 13 + .../blox-tailwind/blox/markdown/preview.svg | 31 + .../blox-tailwind/blox/markdown/schema.json | 34 + .../blox/research-areas/README.md | 292 ++ .../blox/research-areas/block.html | 263 + .../blox/research-areas/manifest.json | 13 + .../blox/research-areas/schema.json | 139 + .../blox/resume-awards/README.md | 57 + .../resume-awards/block.html} | 37 +- .../blox/resume-awards/manifest.json | 13 + .../blox/resume-awards/preview.svg | 36 + .../blox/resume-awards/schema.json | 55 + .../blox/resume-biography-3/README.md | 85 + .../blox/resume-biography-3/block.html | 238 + .../blox/resume-biography-3/manifest.json | 13 + .../blox/resume-biography-3/preview.svg | 43 + .../blox/resume-biography-3/schema.json | 129 + .../blox/resume-biography/README.md | 63 + .../blox/resume-biography/block.html | 135 + .../blox/resume-biography/manifest.json | 13 + .../blox/resume-biography/preview.svg | 34 + .../blox/resume-biography/schema.json | 99 + .../blox/resume-experience/README.md | 65 + .../blox/resume-experience/block.html | 119 + .../blox/resume-experience/manifest.json | 13 + .../blox/resume-experience/preview.svg | 43 + .../blox/resume-experience/schema.json | 56 + .../blox/resume-languages/README.md | 61 + .../resume-languages/block.html} | 38 +- .../blox/resume-languages/manifest.json | 13 + .../blox/resume-languages/preview.svg | 41 + .../blox/resume-languages/schema.json | 38 + .../blox/resume-skills/README.md | 66 + .../resume-skills/block.html} | 44 +- .../blox/resume-skills/manifest.json | 13 + .../blox/resume-skills/preview.svg | 63 + .../blox/resume-skills/schema.json | 49 + .../blox-tailwind/blox/search-hero/README.md | 265 + .../blox-tailwind/blox/search-hero/block.html | 98 + .../blox/search-hero/manifest.json | 8 + .../blox/search-hero/schema.json | 114 + .../blox/shared/js/components/Icon.jsx | 48 + .../blox/shared/schemas/README.md | 138 + .../blox/shared/schemas/base-block.json | 208 + .../blox/shared/schemas/landing-page.json | 102 + .../blox/shared/schemas/sections.json | 26 + .../blox-tailwind/blox/stats/README.md | 227 + .../blox-tailwind/blox/stats/block.html | 270 + .../blox-tailwind/blox/stats/manifest.json | 13 + .../blox-tailwind/blox/stats/preview.svg | 41 + .../blox-tailwind/blox/stats/schema.json | 72 + .../blox/team-showcase/README.md | 109 + .../blox/team-showcase/block.html | 238 + .../blox/team-showcase/manifest.json | 13 + .../blox/team-showcase/schema.json | 98 + .../blox-tailwind/blox/testimonials/README.md | 60 + .../testimonials/block.html} | 10 +- .../blox/testimonials/manifest.json | 13 + .../blox/testimonials/preview.svg | 35 + .../blox/testimonials/schema.json | 60 + .../blox/trending-questions/block.html | 165 + .../blox/trending-questions/manifest.json | 8 + .../blox/trending-questions/schema.json | 83 + .../modules/blox-tailwind/data/hugoblox.yaml | 2 +- .../blox-tailwind/data/icons/academicons.json | 1144 +++-- .../blox-tailwind/data/icons/brands.yaml | 6 +- .../modules/blox-tailwind/data/icons/hb.yaml | 11 +- .../blox-tailwind/data/icons/hero.json | 11 +- .../modules/blox-tailwind/data/languages.yaml | 1 + .../blox-tailwind/data/link_types.yaml | 150 + .../blox-tailwind/data/page_sharer.yaml | 4 +- .../blox-tailwind/data/themes/coffee.yaml | 45 + .../blox-tailwind/data/themes/contrast.yaml | 41 + .../blox-tailwind/data/themes/cupcake.yaml | 44 + .../blox-tailwind/data/themes/default.yaml | 40 + .../blox-tailwind/data/themes/dracula.yaml | 45 + .../blox-tailwind/data/themes/marine.yaml | 40 + .../blox-tailwind/data/themes/matcha.yaml | 45 + .../blox-tailwind/data/themes/minimal.yaml | 45 + .../blox-tailwind/data/themes/retro.yaml | 45 + .../blox-tailwind/data/themes/solar.yaml | 45 + .../blox-tailwind/data/themes/synthwave.yaml | 44 + .../modules/blox-tailwind/go.mod | 2 +- .../modules/blox-tailwind/hugo.yaml | 107 +- .../modules/blox-tailwind/i18n/ar.yaml | 2 +- .../modules/blox-tailwind/i18n/ca.yaml | 2 +- .../modules/blox-tailwind/i18n/cs.yaml | 2 +- .../modules/blox-tailwind/i18n/da.yaml | 2 +- .../modules/blox-tailwind/i18n/de.yaml | 25 +- .../modules/blox-tailwind/i18n/el.yaml | 2 +- .../modules/blox-tailwind/i18n/en.yaml | 177 +- .../modules/blox-tailwind/i18n/es.yaml | 60 +- .../modules/blox-tailwind/i18n/et.yaml | 2 +- .../modules/blox-tailwind/i18n/eu.yaml | 2 +- .../modules/blox-tailwind/i18n/fa.yaml | 2 +- .../modules/blox-tailwind/i18n/fi.yaml | 2 +- .../modules/blox-tailwind/i18n/fr.yaml | 60 +- .../modules/blox-tailwind/i18n/ht.yaml | 411 ++ .../modules/blox-tailwind/i18n/hu.yaml | 2 +- .../modules/blox-tailwind/i18n/it.yaml | 2 +- .../modules/blox-tailwind/i18n/ja.yaml | 2 +- .../modules/blox-tailwind/i18n/km.yaml | 2 +- .../modules/blox-tailwind/i18n/ko.yaml | 2 +- .../modules/blox-tailwind/i18n/lt.yaml | 2 +- .../modules/blox-tailwind/i18n/lv.yaml | 2 +- .../modules/blox-tailwind/i18n/nl.yaml | 13 +- .../modules/blox-tailwind/i18n/pl.yaml | 2 +- .../modules/blox-tailwind/i18n/pt.yaml | 10 +- .../modules/blox-tailwind/i18n/ro.yaml | 2 +- .../modules/blox-tailwind/i18n/ru.yaml | 2 +- .../modules/blox-tailwind/i18n/so.yaml | 2 +- .../modules/blox-tailwind/i18n/sv.yaml | 2 +- .../modules/blox-tailwind/i18n/tr.yaml | 2 +- .../modules/blox-tailwind/i18n/uk.yaml | 2 +- .../modules/blox-tailwind/i18n/vi.yaml | 2 +- .../modules/blox-tailwind/i18n/zh-Hant.yaml | 11 +- .../modules/blox-tailwind/i18n/zh.yaml | 29 +- .../modules/blox-tailwind/layouts/404.html | 3 +- .../layouts/_default/baseof.html | 33 - .../blox-tailwind/layouts/_default/list.html | 28 - .../layouts/_default/single.html | 167 - .../layouts/_markup/render-blockquote.html | 31 + .../_markup/render-codeblock-markmap.html | 0 .../_markup/render-codeblock-mermaid.html | 0 .../{_default => }/_markup/render-image.html | 17 +- .../_markup/render-link.backlinks.json | 0 .../{_default => }/_markup/render-link.html | 0 .../layouts/_partials/blox/hero/wrapper.html | 32 + .../_partials/blox/preact-wrapper.html | 46 + .../{partials => _partials}/comments.html | 6 +- .../comments/disqus.html | 4 +- .../comments/giscus.html | 4 +- .../components/backlinks.html | 0 .../components/breadcrumb.html | 0 .../layouts/_partials/components/cover.html | 220 + .../components/feedback.html | 0 .../components/footers/minimal.html | 4 +- .../headers/floating-theme-toggler.html | 6 +- .../components/headers/navbar-simple.html | 71 +- .../components/headers/navbar.html | 121 +- .../components/language-chooser.html | 2 +- .../components/last-edited.html | 2 +- .../components/next-in-series.html | 4 +- .../components/page_sharer.html | 0 .../components/paginator.html | 0 .../_partials/components/search-modal.html | 524 ++ .../components/sidebar.html | 0 .../components/toc.html | 8 +- .../blox-tailwind/layouts/_partials/css.html | 18 + .../{partials => _partials}/docs_layout.html | 11 +- .../_partials/functions/build_links.html | 259 + .../_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 + .../functions/get_address.html | 2 +- .../_partials/functions/get_author_name.html | 26 + .../functions/get_author_profile.html | 122 + .../_partials/functions/get_branding.html | 42 + .../_partials/functions/get_cover_image.html | 41 + .../functions/get_event_dates.html | 8 +- .../functions/get_featured_image.html | 0 .../_partials}/functions/get_hook.html | 16 +- .../layouts/_partials/functions/get_icon.html | 105 + .../_partials/functions/get_icon_data.html | 63 + .../layouts/_partials/functions/get_logo.html | 41 + .../functions/get_logo_url.html | 0 .../functions/get_page_title.html | 0 .../_partials/functions/get_site_icon.html | 42 + .../functions/get_sort_by_parameter.html | 0 .../_partials/functions/get_summary.html | 3 + .../_partials/functions/get_theme_config.html | 86 + .../functions/has_attachments.html | 0 .../_partials/functions/hbx_verify.html | 70 + .../_partials/functions/load_theme_pack.html | 59 + .../layouts/_partials/functions/logger.html | 51 + .../_partials/functions/notebook/render.html | 540 ++ .../_partials/functions/parse_block_v2.html | 377 ++ .../_partials/functions/parse_block_v3.html | 248 + .../functions/process_responsive_image.html | 152 + .../_partials/functions/render_callout.html | 155 + .../functions/render_view.html | 6 +- .../_partials/functions/theme_generator.html | 229 + .../_partials/functions/theme_variables.html | 26 + .../layouts/_partials/functions/uid.html | 19 + .../_partials/hbx/resolve-block-param.html | 20 + .../layouts/_partials/hbx/resolve.html | 15 + .../layouts/_partials/hbx/sections.html | 105 + .../hooks/body-end/hbx-debug-export.html | 67 + .../hooks/body-end/hbx-debug-hud.html | 410 ++ .../blox-tailwind/layouts/_partials/init.html | 129 + .../jsonld/article.html | 3 +- .../layouts/_partials/jsonld/breadcrumbs.html | 33 + .../layouts/_partials/jsonld/business.html | 31 + .../_partials/jsonld/collectionpage.html | 71 + .../{partials => _partials}/jsonld/event.html | 0 .../layouts/_partials/jsonld/faqpage.html | 48 + .../layouts/_partials/jsonld/main.html | 48 + .../layouts/_partials/jsonld/qapage.html | 88 + .../layouts/_partials/jsonld/webpage.html | 56 + .../jsonld/website.html | 2 +- .../layouts/_partials/landing_page.html | 13 + .../{partials => _partials}/libraries.html | 105 +- .../_partials/notification-container.html | 4 + .../layouts/_partials/page_author.html | 25 + .../layouts/_partials/page_author_card.html | 68 + .../{partials => _partials}/page_edit.html | 8 +- .../{partials => _partials}/page_footer.html | 0 .../layouts/_partials/page_links.html | 74 + .../layouts/_partials/page_links_div.html | 8 + .../_partials/page_metadata_authors.html | 53 + .../{partials => _partials}/page_related.html | 0 .../layouts/_partials/site_footer.html | 114 + .../_partials/site_footer_license.html | 75 + .../layouts/_partials/site_head.html | 345 ++ .../{partials => _partials}/social_links.html | 0 .../layouts/{partials => _partials}/tags.html | 5 +- .../layouts/_partials/tailwind_sources.html | 68 + .../views/article-grid--end.html} | 0 .../views/article-grid--start.html} | 0 .../layouts/_partials/views/article-grid.html | 1 + .../views/card--end.html} | 0 .../layouts/_partials/views/card--start.html | 1 + .../layouts/_partials/views/card.html | 207 + .../views/citation--end.html} | 0 .../views/citation--start.html} | 0 .../views/citation.html | 2 +- .../views/date-title-summary--end.html} | 0 .../views/date-title-summary--start.html} | 0 .../views/date-title-summary.html | 8 +- .../{shortcodes => _shortcodes}/audio.html | 0 .../{shortcodes => _shortcodes}/bilibili.html | 2 +- .../layouts/_shortcodes/button.html | 166 + .../layouts/_shortcodes/callout.html | 48 + .../{shortcodes => _shortcodes}/card.html | 0 .../{shortcodes => _shortcodes}/cards.html | 0 .../{shortcodes => _shortcodes}/chart.html | 12 +- .../layouts/_shortcodes/cite.html | 25 + .../layouts/_shortcodes/embed.html | 208 + .../{shortcodes => _shortcodes}/icon.html | 0 .../{shortcodes => _shortcodes}/include.html | 0 .../{shortcodes => _shortcodes}/math.html | 0 .../{shortcodes => _shortcodes}/mention.html | 0 .../layouts/_shortcodes/notebook.html | 42 + .../{shortcodes => _shortcodes}/spoiler.html | 0 .../{shortcodes => _shortcodes}/steps.html | 0 .../{shortcodes => _shortcodes}/table.html | 0 .../{shortcodes => _shortcodes}/toc.html | 0 .../{shortcodes => _shortcodes}/video.html | 0 .../blox-tailwind/layouts/authors/term.html | 98 + .../modules/blox-tailwind/layouts/baseof.html | 45 + .../blox-tailwind/layouts/events/page.html | 387 ++ .../blox-tailwind/layouts/faq/list.html | 65 + .../blox-tailwind/layouts/faq/single.html | 141 + .../{_default => }/home.backlinks.json | 2 +- .../layouts/{index.html => home.html} | 0 .../blox-tailwind/layouts/index.llm.txt | 20 + .../modules/blox-tailwind/layouts/list.html | 46 + .../layouts/partials/blox/cta-card.html | 30 - .../partials/blox/resume-biography-3.html | 158 - .../partials/blox/resume-biography.html | 110 - .../partials/blox/resume-experience.html | 108 - .../layouts/partials/blox/stats.html | 37 - .../layouts/partials/comments/commento.html | 3 - .../partials/functions/get_author_name.html | 26 - .../layouts/partials/functions/get_icon.html | 36 - .../layouts/partials/functions/get_logo.html | 21 - .../partials/functions/get_site_icon.html | 7 - .../partials/functions/parse_block_v2.html | 167 - .../blox-tailwind/layouts/partials/init.html | 24 - .../layouts/partials/jsonld/business.html | 30 - .../layouts/partials/jsonld/main.html | 23 - .../layouts/partials/landing_page.html | 7 - .../layouts/partials/page_author.html | 19 - .../layouts/partials/page_author_card.html | 57 - .../layouts/partials/page_links.html | 167 - .../layouts/partials/page_links_div.html | 12 - .../partials/page_metadata_authors.html | 24 - .../layouts/partials/site_footer.html | 30 - .../layouts/partials/site_footer_license.html | 53 - .../layouts/partials/site_head.html | 290 -- .../layouts/partials/views/article-grid.html | 96 - .../layouts/partials/views/card.html | 32 - .../layouts/partials/views/card.start.html | 1 - .../blox-tailwind/layouts/questions/list.html | 133 + .../layouts/questions/single.html | 151 + .../layouts/{_default => }/rss.xml | 0 .../layouts/shortcodes/callout.html | 32 - .../modules/blox-tailwind/layouts/single.html | 300 ++ .../{_default/_markup => }/sitemap.xml | 0 .../blox-tailwind/layouts/taxonomy.html | 37 + .../layouts/{_default => }/terms.html | 9 +- .../modules/blox-tailwind/package.json | 48 +- .../modules/blox-tailwind/pnpm-lock.yaml | 4533 ++++------------- .../modules/blox-tailwind/pnpm-workspace.yaml | 2 + .../modules/blox-tailwind/postcss.config.js | 10 - .../modules/blox-tailwind/tailwind.config.js | 183 - .../modules/blox-tailwind/vite.config.js | 43 - 601 files changed, 30601 insertions(+), 8555 deletions(-) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/{partials => _partials}/blox-analytics/index.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/{blox-seo/layouts/partials/analytics => blox-analytics/layouts/_partials/blox-analytics/services}/baidu_tongji.html (85%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/{partials => _partials}/blox-analytics/services/fathom.html (65%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/{partials => _partials}/blox-analytics/services/google_analytics.html (84%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/{blox-seo/layouts/partials/analytics => blox-analytics/layouts/_partials/blox-analytics/services}/google_tag_manager.html (82%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/{partials => _partials}/blox-analytics/services/index.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/{blox-seo/layouts/partials/analytics => blox-analytics/layouts/_partials/blox-analytics/services}/microsoft_clarity.html (85%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/{partials => _partials}/blox-analytics/services/pirsch.html (66%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/{partials => _partials}/blox-analytics/services/plausible.html (64%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/{partials => _partials}/blox-analytics/verification.html (58%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{_default => }/_markup/render-codeblock-markmap.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{_default => }/_markup/render-codeblock-mermaid.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{_default => }/_markup/render-image.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{_default => }/_markup/render-link.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/blocks/about.avatar.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/blocks/about.biography.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/blocks/accomplishments.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/blocks/collection.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/blocks/contact.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/blocks/experience.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/blocks/features.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/blocks/hero.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/blocks/markdown.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/blocks/people.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/blocks/portfolio.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/blocks/skills.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/blocks/slider.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/blocks/tag_cloud.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/blocks/v1/about.avatar.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/blocks/v1/about.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/blocks/v1/accomplishments.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/blocks/v1/collection.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/blocks/v1/contact.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/blocks/v1/experience.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/blocks/v1/features.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/blocks/v1/hero.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/blocks/v1/markdown.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/blocks/v1/people.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/blocks/v1/portfolio.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/blocks/v1/slider.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/blocks/v1/tag_cloud.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/book_layout.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/book_menu.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/book_sidebar.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/citation.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/comments.html (86%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/comments/commento.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/comments/disqus.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/comments/giscus.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/components/announcement_bar.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/components/breadcrumb.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/components/feedback.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/components/footers/minimal.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/components/headers/navbar.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/components/page_sharer.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/components/pager.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/cookie_consent.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/functions/get_address.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/functions/get_event_dates.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/functions/get_pub_types.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/functions/get_social_link.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/functions/has_attachments.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/functions/parse_block_v1.html (96%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/functions/parse_block_v2.html (96%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/functions/parse_theme.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/functions/render_view.html (92%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/landing_page.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/page_author.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/page_author_card.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/page_edit.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/page_footer.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/page_header.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/page_links.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/page_links_div.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/page_metadata.html (94%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/page_metadata_authors.html (75%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/page_related.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/pagination.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/search.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/site_footer.html (92%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/site_footer_license.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/site_head.html (99%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/site_js.html (99%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/social_links.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/tags.html (56%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/views/card.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/views/citation.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/views/community/.gitkeep (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/views/compact.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/views/list.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/views/masonry.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/views/showcase.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{partials => _partials}/widget_page.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{shortcodes => _shortcodes}/audio.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{shortcodes => _shortcodes}/bilibili.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{shortcodes => _shortcodes}/callout.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{shortcodes => _shortcodes}/chart.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{shortcodes => _shortcodes}/cite.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{shortcodes => _shortcodes}/cta.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{shortcodes => _shortcodes}/emoji_list.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{shortcodes => _shortcodes}/figure.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{shortcodes => _shortcodes}/gallery.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{shortcodes => _shortcodes}/gdocs.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{shortcodes => _shortcodes}/hl.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{shortcodes => _shortcodes}/icon.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{shortcodes => _shortcodes}/list_categories.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{shortcodes => _shortcodes}/list_children.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{shortcodes => _shortcodes}/list_tags.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{shortcodes => _shortcodes}/math.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{shortcodes => _shortcodes}/mention.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{shortcodes => _shortcodes}/spoiler.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{shortcodes => _shortcodes}/staticref.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{shortcodes => _shortcodes}/table.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{shortcodes => _shortcodes}/toc.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{shortcodes => _shortcodes}/video.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{_default => }/baseof.html (96%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{section/event.html => event/section.html} (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{index.html => home.html} (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{_default => }/list.html (76%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{section/post.html => post/section.html} (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{section/publication.html => publication/section.html} (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{_default => }/rss.xml (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/{_default => }/single.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/{partials => _partials}/blox-core/functions/get_author_name.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/{partials => _partials}/blox-core/functions/get_featured_image.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/{blox-tailwind/layouts/partials => blox-core/layouts/_partials/blox-core}/functions/get_hook.html (90%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/{partials => _partials}/blox-core/functions/get_icon.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/{partials => _partials}/blox-core/functions/get_logo.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/{partials => _partials}/blox-core/functions/get_logo_url.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/{partials => _partials}/blox-core/functions/get_page_title.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/{partials => _partials}/blox-core/functions/get_sort_by_parameter.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/{shortcodes => _shortcodes}/dependencies.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/assets/js/{wowchemy-slides.js => hugoblox-slides.js} (56%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/layouts/{partials => _partials}/slides.html (70%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/layouts/{shortcodes => _shortcodes}/fragment.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/layouts/{shortcodes => _shortcodes}/slide.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/layouts/{shortcodes => _shortcodes}/speaker_note.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/{_default => }/_markup/sitemap.xml (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/{blox-analytics/layouts/partials/blox-analytics/services => blox-seo/layouts/_partials/analytics}/baidu_tongji.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/{partials => _partials}/analytics/google_analytics.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/{blox-analytics/layouts/partials/blox-analytics/services => blox-seo/layouts/_partials/analytics}/google_tag_manager.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/{partials => _partials}/analytics/main.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/{blox-analytics/layouts/partials/blox-analytics/services => blox-seo/layouts/_partials/analytics}/microsoft_clarity.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/{partials => _partials}/blox_seo.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/{partials => _partials}/jsonld/article.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/{partials => _partials}/jsonld/business.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/{partials => _partials}/jsonld/event.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/{partials => _partials}/jsonld/main.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/{partials => _partials}/jsonld/website.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/{partials => _partials}/seo_tags.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/{partials => _partials}/site_verification.html (100%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/.npmrc create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/archetypes/faq.md create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/archetypes/questions.md create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/README.md create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/color-utilities.css create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/author-notes.css create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/cover.css create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/glassmorphism.css create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/notebook.css create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/config/safelist.css create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/config/tailwind.css create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/config/theme.css create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/framework/base.css create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/framework/components.css create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/hb-search.css create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/layout-utilities.css delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/styles.css delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/tailwind.css create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/amber.css create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/fuchsia.css create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/lime.css create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/orange.css create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/pink.css create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/slate.css create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/stone.css create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/violet.css create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/yellow.css create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/views/all.css create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/dist/lib/preact/hooks.min.js create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/dist/lib/preact/preact.min.js create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/dist/lib/preact/preact.min.js.map create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/dist/lib/vendor-libs.mjs delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/dist/wc.min.css create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/hugo_stats.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/js/hb-citation.js create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/js/hb-clipboard.js create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/js/hb-head.js create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/js/hb-init.js create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/js/hb-notifier.js create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/js/hb-search.js create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/js/vendor-libs.js create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/media/textures/noise-pattern.svg create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/collection/README.md rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/{layouts/partials/blox/collection.html => blox/collection/block.html} (80%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/collection/manifest.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/collection/preview.svg create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/collection/schema.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/contact-info/README.md create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/contact-info/block.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/contact-info/manifest.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/contact-info/schema.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-button-list/README.md rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/{layouts/partials/blox/cta-button-list.html => blox/cta-button-list/block.html} (100%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-button-list/manifest.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-button-list/preview.svg create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-button-list/schema.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-card/README.md create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-card/block.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-card/manifest.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-card/preview.svg create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-card/schema.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-image-paragraph/README.md rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/{layouts/partials/blox/cta-image-paragraph.html => blox/cta-image-paragraph/block.html} (71%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-image-paragraph/manifest.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-image-paragraph/preview.svg create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-image-paragraph/schema.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/faq/README.md create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/faq/block.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/faq/manifest.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/faq/preview.svg create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/faq/schema.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/features/README.md rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/{layouts/partials/blox/features.html => blox/features/block.html} (100%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/features/manifest.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/features/preview.svg create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/features/schema.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/hero/README.md rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/{layouts/partials/blox/hero.html => blox/hero/block.html} (61%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/hero/client.jsx create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/hero/component.jsx create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/hero/manifest.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/hero/preview.svg create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/hero/schema.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/knowledge-categories/block.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/knowledge-categories/manifest.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/knowledge-categories/schema.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/logos/README.md create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/logos/block.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/logos/manifest.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/logos/schema.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/markdown/README.md rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/{layouts/partials/blox/markdown.html => blox/markdown/block.html} (100%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/markdown/manifest.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/markdown/preview.svg create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/markdown/schema.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/research-areas/README.md create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/research-areas/block.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/research-areas/manifest.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/research-areas/schema.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-awards/README.md rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/{layouts/partials/blox/resume-awards.html => blox/resume-awards/block.html} (68%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-awards/manifest.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-awards/preview.svg create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-awards/schema.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography-3/README.md create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography-3/block.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography-3/manifest.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography-3/preview.svg create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography-3/schema.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography/README.md create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography/block.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography/manifest.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography/preview.svg create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography/schema.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-experience/README.md create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-experience/block.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-experience/manifest.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-experience/preview.svg create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-experience/schema.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-languages/README.md rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/{layouts/partials/blox/resume-languages.html => blox/resume-languages/block.html} (51%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-languages/manifest.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-languages/preview.svg create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-languages/schema.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-skills/README.md rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/{layouts/partials/blox/resume-skills.html => blox/resume-skills/block.html} (50%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-skills/manifest.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-skills/preview.svg create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-skills/schema.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/search-hero/README.md create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/search-hero/block.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/search-hero/manifest.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/search-hero/schema.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/shared/js/components/Icon.jsx create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/shared/schemas/README.md create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/shared/schemas/base-block.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/shared/schemas/landing-page.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/shared/schemas/sections.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/stats/README.md create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/stats/block.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/stats/manifest.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/stats/preview.svg create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/stats/schema.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/team-showcase/README.md create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/team-showcase/block.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/team-showcase/manifest.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/team-showcase/schema.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/testimonials/README.md rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/{layouts/partials/blox/testimonials.html => blox/testimonials/block.html} (86%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/testimonials/manifest.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/testimonials/preview.svg create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/testimonials/schema.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/trending-questions/block.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/trending-questions/manifest.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/trending-questions/schema.json create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/link_types.yaml create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/coffee.yaml create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/contrast.yaml create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/cupcake.yaml create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/default.yaml create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/dracula.yaml create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/marine.yaml create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/matcha.yaml create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/minimal.yaml create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/retro.yaml create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/solar.yaml create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/synthwave.yaml create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/ht.yaml delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_default/baseof.html delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_default/list.html delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_default/single.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_markup/render-blockquote.html rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{_default => }/_markup/render-codeblock-markmap.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{_default => }/_markup/render-codeblock-mermaid.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{_default => }/_markup/render-image.html (81%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{_default => }/_markup/render-link.backlinks.json (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{_default => }/_markup/render-link.html (100%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/blox/hero/wrapper.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/blox/preact-wrapper.html rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/comments.html (58%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/comments/disqus.html (86%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/comments/giscus.html (86%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/components/backlinks.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/components/breadcrumb.html (100%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/components/cover.html rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/components/feedback.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/components/footers/minimal.html (88%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/components/headers/floating-theme-toggler.html (80%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/components/headers/navbar-simple.html (56%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/components/headers/navbar.html (61%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/components/language-chooser.html (94%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/components/last-edited.html (80%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/components/next-in-series.html (91%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/components/page_sharer.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/components/paginator.html (100%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/components/search-modal.html rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/components/sidebar.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/components/toc.html (91%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/css.html rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/docs_layout.html (60%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/build_links.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/deep_merge.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/demo_theme_styles.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/embed/github.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/embed/hbx_content_section.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/embed/hbx_platform_icon.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/embed/hbx_title_section.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/embed/huggingface.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/generate_color_scale.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get-block-scripts.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get-build-id.html rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/functions/get_address.html (96%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_author_name.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_author_profile.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_branding.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_cover_image.html rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/functions/get_event_dates.html (66%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/functions/get_featured_image.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/{blox-core/layouts/partials/blox-core => blox-tailwind/layouts/_partials}/functions/get_hook.html (57%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_icon.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_icon_data.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_logo.html rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/functions/get_logo_url.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/functions/get_page_title.html (100%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_site_icon.html rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/functions/get_sort_by_parameter.html (100%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_summary.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_theme_config.html rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/functions/has_attachments.html (100%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/hbx_verify.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/load_theme_pack.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/logger.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/notebook/render.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/parse_block_v2.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/parse_block_v3.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/process_responsive_image.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/render_callout.html rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/functions/render_view.html (60%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/theme_generator.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/theme_variables.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/uid.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/hbx/resolve-block-param.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/hbx/resolve.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/hbx/sections.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/hooks/body-end/hbx-debug-export.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/hooks/body-end/hbx-debug-hud.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/init.html rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/jsonld/article.html (90%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/jsonld/breadcrumbs.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/jsonld/business.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/jsonld/collectionpage.html rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/jsonld/event.html (100%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/jsonld/faqpage.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/jsonld/main.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/jsonld/qapage.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/jsonld/webpage.html rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/jsonld/website.html (86%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/landing_page.html rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/libraries.html (60%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/notification-container.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/page_author.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/page_author_card.html rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/page_edit.html (72%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/page_footer.html (100%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/page_links.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/page_links_div.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/page_metadata_authors.html rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/page_related.html (100%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/site_footer.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/site_footer_license.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/site_head.html rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/social_links.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/tags.html (75%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/tailwind_sources.html rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials/views/article-grid.end.html => _partials/views/article-grid--end.html} (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials/views/article-grid.start.html => _partials/views/article-grid--start.html} (100%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/views/article-grid.html rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials/views/card.end.html => _partials/views/card--end.html} (100%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/views/card--start.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/views/card.html rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials/views/citation.end.html => _partials/views/citation--end.html} (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials/views/citation.start.html => _partials/views/citation--start.html} (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/views/citation.html (94%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials/views/date-title-summary.end.html => _partials/views/date-title-summary--end.html} (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials/views/date-title-summary.start.html => _partials/views/date-title-summary--start.html} (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{partials => _partials}/views/date-title-summary.html (84%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{shortcodes => _shortcodes}/audio.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{shortcodes => _shortcodes}/bilibili.html (90%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_shortcodes/button.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_shortcodes/callout.html rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{shortcodes => _shortcodes}/card.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{shortcodes => _shortcodes}/cards.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{shortcodes => _shortcodes}/chart.html (82%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_shortcodes/cite.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_shortcodes/embed.html rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{shortcodes => _shortcodes}/icon.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{shortcodes => _shortcodes}/include.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{shortcodes => _shortcodes}/math.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{shortcodes => _shortcodes}/mention.html (100%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_shortcodes/notebook.html rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{shortcodes => _shortcodes}/spoiler.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{shortcodes => _shortcodes}/steps.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{shortcodes => _shortcodes}/table.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{shortcodes => _shortcodes}/toc.html (100%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{shortcodes => _shortcodes}/video.html (100%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/authors/term.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/baseof.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/events/page.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/faq/list.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/faq/single.html rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{_default => }/home.backlinks.json (83%) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{index.html => home.html} (100%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/index.llm.txt create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/list.html delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/cta-card.html delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/resume-biography-3.html delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/resume-biography.html delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/resume-experience.html delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/stats.html delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/comments/commento.html delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/get_author_name.html delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/get_icon.html delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/get_logo.html delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/get_site_icon.html delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/parse_block_v2.html delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/init.html delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/jsonld/business.html delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/jsonld/main.html delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/landing_page.html delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/page_author.html delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/page_author_card.html delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/page_links.html delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/page_links_div.html delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/page_metadata_authors.html delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/site_footer.html delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/site_footer_license.html delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/site_head.html delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/views/article-grid.html delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/views/card.html delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/views/card.start.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/questions/list.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/questions/single.html rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{_default => }/rss.xml (100%) delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/shortcodes/callout.html create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/single.html rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{_default/_markup => }/sitemap.xml (100%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/taxonomy.html rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/{_default => }/terms.html (82%) create mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/pnpm-workspace.yaml delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/postcss.config.js delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/tailwind.config.js delete mode 100644 themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/vite.config.js diff --git a/.Rprofile b/.Rprofile index b821430a4..36325ec95 100644 --- a/.Rprofile +++ b/.Rprofile @@ -20,4 +20,4 @@ options( ) # fix Hugo version -options(blogdown.hugo.version = "0.139.4") +# options(blogdown.hugo.version = "0.139.4") diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index ed8200c63..c4d184540 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -25,8 +25,8 @@ jobs: run: Rscript -e 'install.packages(c("rmarkdown","blogdown", "remotes"))' - name: Install hugo - run: Rscript -e 'tryCatch(blogdown::build_site(), error = function(e) { message(e); quit(status = 1) })' # Latest is currently broken + run: Rscript -e 'blogdown::install_hugo("0.152.2")' # Latest is currently broken - name: Build site with blogdown - run: Rscript -e 'if (!blogdown::build_site()) stop("Build failed")' + run: Rscript -e 'tryCatch(blogdown::build_site(), error = function(e) { message(e); quit(status = 1) })' diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 9894f639a..1f08337f1 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -25,7 +25,7 @@ jobs: run: Rscript -e 'install.packages(c("rmarkdown","blogdown", "remotes"))' - name: Install hugo - run: Rscript -e 'blogdown::install_hugo(version="0.139.4")' # Latest is currently broken + run: Rscript -e 'blogdown::install_hugo("0.152.2")' # Latest is currently broken - name: Build site with blogdown run: Rscript -e 'tryCatch(blogdown::build_site(), error = function(e) { message(e); quit(status = 1) })' diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/partials/blox-analytics/index.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/_partials/blox-analytics/index.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/partials/blox-analytics/index.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/_partials/blox-analytics/index.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/partials/analytics/baidu_tongji.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/_partials/blox-analytics/services/baidu_tongji.html similarity index 85% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/partials/analytics/baidu_tongji.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/_partials/blox-analytics/services/baidu_tongji.html index eb2a25cfd..9f60d70da 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/partials/analytics/baidu_tongji.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/_partials/blox-analytics/services/baidu_tongji.html @@ -1,4 +1,4 @@ -{{ $baidu_tongji := site.Params.marketing.analytics.baidu_tongji | default "" }} +{{ $baidu_tongji := site.Params.hugoblox.analytics.baidu.site_id | default "" }} {{ if hugo.IsProduction | and $baidu_tongji }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/partials/blox-analytics/services/google_analytics.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/_partials/blox-analytics/services/google_analytics.html similarity index 84% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/partials/blox-analytics/services/google_analytics.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/_partials/blox-analytics/services/google_analytics.html index 71e2394ab..dde798953 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/partials/blox-analytics/services/google_analytics.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/_partials/blox-analytics/services/google_analytics.html @@ -1,8 +1,8 @@ -{{ $ga := site.Params.marketing.analytics.google_analytics | default "" }} +{{ $ga := site.Params.hugoblox.analytics.google.measurement_id | default "" }} {{ if hugo.IsProduction | and $ga }} -{{ $gtag_config := cond (site.Params.features.privacy_pack.enable | default false) "{ 'anonymize_ip': true }" "{}" }} +{{ $gtag_config := cond (site.Params.hugoblox.privacy.anonymize_analytics | default true) "{ 'anonymize_ip': true }" "{}" }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/partials/blox-analytics/services/plausible.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/_partials/blox-analytics/services/plausible.html similarity index 64% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/partials/blox-analytics/services/plausible.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/_partials/blox-analytics/services/plausible.html index 4822f8d00..47cf517b9 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/partials/blox-analytics/services/plausible.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/_partials/blox-analytics/services/plausible.html @@ -1,4 +1,4 @@ -{{ $plausible := site.Params.marketing.analytics.plausible | default "" }} +{{ $plausible := site.Params.hugoblox.analytics.plausible.domain | default "" }} {{ if hugo.IsProduction | and $plausible }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/partials/blox-analytics/verification.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/_partials/blox-analytics/verification.html similarity index 58% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/partials/blox-analytics/verification.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/_partials/blox-analytics/verification.html index 9be425029..ea50d8456 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/partials/blox-analytics/verification.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/_partials/blox-analytics/verification.html @@ -1,25 +1,25 @@ {{/* Site Verification with Third Party Services */}} -{{- with site.Params.marketing.verification.google -}} +{{- with site.Params.hugoblox.verification.google -}} {{- end -}} -{{- with site.Params.marketing.verification.bing -}} +{{- with site.Params.hugoblox.verification.bing -}} {{- end -}} -{{- with site.Params.marketing.verification.yandex -}} +{{- with site.Params.hugoblox.verification.yandex -}} {{- end -}} -{{- with site.Params.marketing.verification.pinterest -}} +{{- with site.Params.hugoblox.verification.pinterest -}} {{- end -}} -{{- with site.Params.marketing.verification.baidu -}} +{{- with site.Params.hugoblox.verification.baidu -}} {{- end -}} -{{ with site.Params.marketing.verification.naver }} +{{ with site.Params.hugoblox.verification.naver }} {{- end -}} \ No newline at end of file diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_default/_markup/render-codeblock-markmap.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_markup/render-codeblock-markmap.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_default/_markup/render-codeblock-markmap.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_markup/render-codeblock-markmap.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_default/_markup/render-codeblock-mermaid.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_markup/render-codeblock-mermaid.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_default/_markup/render-codeblock-mermaid.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_markup/render-codeblock-mermaid.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_default/_markup/render-image.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_markup/render-image.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_default/_markup/render-image.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_markup/render-image.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_default/_markup/render-link.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_markup/render-link.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_default/_markup/render-link.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_markup/render-link.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/about.avatar.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/about.avatar.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/about.avatar.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/about.avatar.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/about.biography.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/about.biography.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/about.biography.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/about.biography.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/accomplishments.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/accomplishments.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/accomplishments.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/accomplishments.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/collection.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/collection.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/collection.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/collection.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/contact.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/contact.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/contact.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/contact.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/experience.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/experience.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/experience.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/experience.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/features.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/features.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/features.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/features.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/hero.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/hero.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/hero.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/hero.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/markdown.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/markdown.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/markdown.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/markdown.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/people.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/people.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/people.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/people.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/portfolio.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/portfolio.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/portfolio.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/portfolio.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/skills.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/skills.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/skills.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/skills.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/slider.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/slider.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/slider.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/slider.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/tag_cloud.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/tag_cloud.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/tag_cloud.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/tag_cloud.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/v1/about.avatar.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/v1/about.avatar.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/v1/about.avatar.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/v1/about.avatar.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/v1/about.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/v1/about.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/v1/about.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/v1/about.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/v1/accomplishments.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/v1/accomplishments.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/v1/accomplishments.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/v1/accomplishments.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/v1/collection.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/v1/collection.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/v1/collection.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/v1/collection.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/v1/contact.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/v1/contact.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/v1/contact.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/v1/contact.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/v1/experience.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/v1/experience.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/v1/experience.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/v1/experience.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/v1/features.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/v1/features.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/v1/features.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/v1/features.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/v1/hero.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/v1/hero.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/v1/hero.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/v1/hero.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/v1/markdown.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/v1/markdown.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/v1/markdown.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/v1/markdown.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/v1/people.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/v1/people.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/v1/people.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/v1/people.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/v1/portfolio.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/v1/portfolio.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/v1/portfolio.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/v1/portfolio.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/v1/slider.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/v1/slider.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/v1/slider.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/v1/slider.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/v1/tag_cloud.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/v1/tag_cloud.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/blocks/v1/tag_cloud.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/blocks/v1/tag_cloud.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/book_layout.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/book_layout.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/book_layout.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/book_layout.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/book_menu.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/book_menu.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/book_menu.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/book_menu.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/book_sidebar.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/book_sidebar.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/book_sidebar.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/book_sidebar.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/citation.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/citation.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/citation.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/citation.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/comments.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/comments.html similarity index 86% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/comments.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/comments.html index 6118c163d..f94329199 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/comments.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/comments.html @@ -1,7 +1,7 @@ {{ $provider := trim (site.Params.features.comment.provider | lower) " " }} {{ if $provider }} - {{ $provider_tpl := printf "partials/comments/%s.html" $provider }} + {{ $provider_tpl := printf "_partials/comments/%s.html" $provider }} {{ $provider_exists := templates.Exists $provider_tpl }} {{ if not $provider_exists }} {{ errorf "The '%s' comment provider was not found." $provider }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/comments/commento.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/comments/commento.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/comments/commento.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/comments/commento.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/comments/disqus.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/comments/disqus.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/comments/disqus.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/comments/disqus.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/comments/giscus.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/comments/giscus.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/comments/giscus.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/comments/giscus.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/components/announcement_bar.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/components/announcement_bar.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/components/announcement_bar.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/components/announcement_bar.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/components/breadcrumb.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/components/breadcrumb.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/components/breadcrumb.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/components/breadcrumb.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/components/feedback.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/components/feedback.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/components/feedback.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/components/feedback.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/components/footers/minimal.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/components/footers/minimal.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/components/footers/minimal.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/components/footers/minimal.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/components/headers/navbar.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/components/headers/navbar.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/components/headers/navbar.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/components/headers/navbar.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/components/page_sharer.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/components/page_sharer.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/components/page_sharer.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/components/page_sharer.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/components/pager.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/components/pager.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/components/pager.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/components/pager.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/cookie_consent.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/cookie_consent.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/cookie_consent.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/cookie_consent.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/functions/get_address.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/functions/get_address.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/functions/get_address.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/functions/get_address.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/functions/get_event_dates.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/functions/get_event_dates.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/functions/get_event_dates.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/functions/get_event_dates.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/functions/get_pub_types.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/functions/get_pub_types.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/functions/get_pub_types.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/functions/get_pub_types.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/functions/get_social_link.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/functions/get_social_link.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/functions/get_social_link.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/functions/get_social_link.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/functions/has_attachments.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/functions/has_attachments.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/functions/has_attachments.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/functions/has_attachments.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/functions/parse_block_v1.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/functions/parse_block_v1.html similarity index 96% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/functions/parse_block_v1.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/functions/parse_block_v1.html index 9851feefa..5ae904404 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/functions/parse_block_v1.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/functions/parse_block_v1.html @@ -11,8 +11,8 @@ {{ if eq $block_type "pages" }}{{ $block_type = "collection" }}{{ end }}{{/* Support legacy Pages block */}} {{ if eq $block_type "featured" }}{{ $block_type = "collection" }}{{ end }}{{/* Support legacy Featured block */}} {{ $widget_path := printf "blocks/v1/%s.html" $block_type }} -{{ if not (templates.Exists (printf "partials/%s" $widget_path)) }} - {{ errorf "%s uses a `%s` block but the `%s` block was not found at `layouts/partials/%s`" $block.File.Path $block_type $block_type $widget_path }} +{{ if not (templates.Exists (printf "_partials/%s" $widget_path)) }} + {{ errorf "%s uses a `%s` block but the `%s` block was not found at `layouts/_partials/%s`" $block.File.Path $block_type $block_type $widget_path }} {{ end }} {{/* Workaround to make Hugo's .Page.Store.Set cascade up to the parent of headless pages */}} @@ -102,7 +102,7 @@ {{ $widget_class := printf "wg-%s" (replace (replace $block_type "." "-") "_" "-") }} {{ $widget_config_file := printf "blocks/v1/%s-config.html" $block_type }} -{{ if templates.Exists (printf "partials/%s" $widget_config_file) }} +{{ if templates.Exists (printf "_partials/%s" $widget_config_file) }} {{ $cfg := partial $widget_config_file $widget_args }} {{ $use_container = $cfg.use_container }} {{end}} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/functions/parse_block_v2.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/functions/parse_block_v2.html similarity index 96% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/functions/parse_block_v2.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/functions/parse_block_v2.html index 7e20ad227..a42f0d41e 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/functions/parse_block_v2.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/functions/parse_block_v2.html @@ -7,8 +7,8 @@ {{ $block_type := lower $block.block | default "markdown" }} {{ $block_path := printf "blocks/%s.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 `layouts/partials/%s`" $block.File.Path $block_type $block_type $block_path }} +{{ if not (templates.Exists (printf "_partials/%s" $block_path)) }} + {{ errorf "%s uses a `%s` block but the `%s` block was not found at `layouts/_partials/%s`" $block.File.Path $block_type $block_type $block_path }} {{ end }} {{/* Mermaid block: Workaround to make Hugo's .Page.Store.Set cascade up to the parent of headless pages */}} @@ -107,7 +107,7 @@ {{ $widget_class := printf "wg-%s" (replace (replace $block_type "." "-") "_" "-") }} {{ $widget_config_file := printf "blocks/%s-config.html" $block_type }} -{{ if templates.Exists (printf "partials/%s" $widget_config_file) }} +{{ if templates.Exists (printf "_partials/%s" $widget_config_file) }} {{ $cfg := partial $widget_config_file $widget_args }} {{ with $cfg.use_container }}{{ $use_container = . }}{{ end }} {{ with $cfg.inject_section_heading }}{{ $use_cols = . }}{{ end }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/functions/parse_theme.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/functions/parse_theme.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/functions/parse_theme.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/functions/parse_theme.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/functions/render_view.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/functions/render_view.html similarity index 92% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/functions/render_view.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/functions/render_view.html index ea476e8a3..1d0d7833b 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/functions/render_view.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/functions/render_view.html @@ -21,7 +21,7 @@ {{ $view_file = "compact" }} {{ end }} {{else}} - {{ if templates.Exists (printf "partials/views/%s.html" (lower $view)) }} + {{ if templates.Exists (printf "_partials/views/%s.html" (lower $view)) }} {{ $view_file = lower $view }} {{else}} {{/* Fallback to compact view */}} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/landing_page.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/landing_page.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/landing_page.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/landing_page.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/page_author.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/page_author.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/page_author.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/page_author.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/page_author_card.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/page_author_card.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/page_author_card.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/page_author_card.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/page_edit.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/page_edit.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/page_edit.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/page_edit.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/page_footer.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/page_footer.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/page_footer.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/page_footer.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/page_header.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/page_header.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/page_header.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/page_header.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/page_links.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/page_links.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/page_links.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/page_links.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/page_links_div.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/page_links_div.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/page_links_div.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/page_links_div.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/page_metadata.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/page_metadata.html similarity index 94% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/page_metadata.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/page_metadata.html index 294b77538..2376ebbcf 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/page_metadata.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/page_metadata.html @@ -53,12 +53,11 @@ {{ end}} - {{ $taxonomy := "categories" }} - {{ if $page.Param $taxonomy }} + {{ if $page.Params.categories }} - {{- range $index, $value := ($page.GetTerms $taxonomy) -}} + {{- range $index, $value := ($page.GetTerms "categories") -}} {{- if gt $index 0 }}, {{ end -}} {{ .LinkTitle }} {{- end -}} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/page_metadata_authors.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/page_metadata_authors.html similarity index 75% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/page_metadata_authors.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/page_metadata_authors.html index 5f027ef8c..5024f7f82 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/page_metadata_authors.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/page_metadata_authors.html @@ -1,14 +1,13 @@ {{/* Display author list. */}} -{{- $taxonomy := "authors" }} -{{ if .Param $taxonomy }} - {{ range $index, $value := (.GetTerms $taxonomy) }} +{{ if .Params.authors }} + {{ range $index, $value := (.GetTerms "authors") }} {{- /* Highlight the author's name? */ -}} {{- $highlight_name := .Page.Params.highlight_name | default false -}} {{- if gt $index 0 }}, {{ end -}} - {{/* Effectively check the page's `_build` option as `_build` is not exposed in Hugo's Page object. */}} + {{/* Effectively check the page's `build` option as `build` is not exposed in Hugo's Page object. */}} {{- if .RelPermalink -}} {{.LinkTitle}} {{- else -}} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/page_related.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/page_related.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/page_related.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/page_related.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/pagination.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/pagination.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/pagination.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/pagination.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/search.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/search.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/search.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/search.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/site_footer.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/site_footer.html similarity index 92% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/site_footer.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/site_footer.html index 503b203f9..5d8b11b5a 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/site_footer.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/site_footer.html @@ -5,8 +5,8 @@ {{/* Load footer block */}} {{ $footer_section_name := site.Params.footer.block | 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 }} + {{ 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 . }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/site_footer_license.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/site_footer_license.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/site_footer_license.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/site_footer_license.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/site_head.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/site_head.html similarity index 99% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/site_head.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/site_head.html index 561ea378b..94ba8c9f3 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/site_head.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/site_head.html @@ -215,7 +215,7 @@ {{/* EXTENSIBILITY HOOK: HEAD-END */}} {{/* Deprecated custom_head hook */}} - {{ if templates.Exists "partials/custom_head.html" }} + {{ if templates.Exists "_partials/custom_head.html" }} {{ partial "custom_head" . }} {{ end }} {{ partial "blox-core/functions/get_hook" (dict "hook" "head-end" "context" .) }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/site_js.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/site_js.html similarity index 99% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/site_js.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/site_js.html index ab06c6627..07125ac8a 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/site_js.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/site_js.html @@ -267,7 +267,7 @@ {{/* EXTENSIBILITY HOOK: BODY-END */}} {{/* Deprecated custom_js hook */}} -{{ if templates.Exists "partials/custom_js.html" }} +{{ if templates.Exists "_partials/custom_js.html" }} {{ partial "custom_js" . }} {{ end }} {{ partial "blox-core/functions/get_hook" (dict "hook" "body-end" "context" .) }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/social_links.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/social_links.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/social_links.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/social_links.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/tags.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/tags.html similarity index 56% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/tags.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/tags.html index bcc816198..f33f8eff9 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/tags.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/tags.html @@ -1,7 +1,6 @@ -{{ $taxonomy := "tags" }} -{{ if .Param $taxonomy }} +{{ if .Params.tags }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/views/card.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/views/card.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/views/card.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/views/card.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/views/citation.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/views/citation.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/views/citation.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/views/citation.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/views/community/.gitkeep b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/views/community/.gitkeep similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/views/community/.gitkeep rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/views/community/.gitkeep diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/views/compact.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/views/compact.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/views/compact.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/views/compact.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/views/list.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/views/list.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/views/list.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/views/list.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/views/masonry.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/views/masonry.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/views/masonry.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/views/masonry.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/views/showcase.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/views/showcase.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/views/showcase.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/views/showcase.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/widget_page.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/widget_page.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/partials/widget_page.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_partials/widget_page.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/audio.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/audio.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/audio.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/audio.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/bilibili.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/bilibili.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/bilibili.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/bilibili.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/callout.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/callout.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/callout.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/callout.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/chart.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/chart.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/chart.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/chart.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/cite.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/cite.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/cite.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/cite.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/cta.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/cta.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/cta.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/cta.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/emoji_list.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/emoji_list.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/emoji_list.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/emoji_list.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/figure.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/figure.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/figure.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/figure.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/gallery.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/gallery.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/gallery.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/gallery.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/gdocs.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/gdocs.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/gdocs.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/gdocs.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/hl.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/hl.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/hl.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/hl.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/icon.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/icon.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/icon.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/icon.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/list_categories.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/list_categories.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/list_categories.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/list_categories.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/list_children.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/list_children.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/list_children.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/list_children.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/list_tags.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/list_tags.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/list_tags.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/list_tags.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/math.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/math.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/math.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/math.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/mention.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/mention.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/mention.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/mention.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/spoiler.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/spoiler.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/spoiler.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/spoiler.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/staticref.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/staticref.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/staticref.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/staticref.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/table.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/table.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/table.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/table.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/toc.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/toc.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/toc.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/toc.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/video.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/video.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/shortcodes/video.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_shortcodes/video.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_default/baseof.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/baseof.html similarity index 96% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_default/baseof.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/baseof.html index 84223ae31..779bcda7c 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_default/baseof.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/baseof.html @@ -40,8 +40,8 @@ {{/* Load header block */}} {{ $block_name := .Params.header.navbar.block | default site.Params.header.navbar.block | default "navbar" }} {{ $block_path := printf "components/headers/%s.html" $block_name }} - {{ if not (templates.Exists (printf "partials/%s" $block_path)) }} - {{ errorf "Check your `header` config in `params.yaml` and/or front matter. Cannot find header block at `layouts/partials/%s`" $block_path }} + {{ if not (templates.Exists (printf "_partials/%s" $block_path)) }} + {{ errorf "Check your `header` config in `params.yaml` and/or front matter. Cannot find header block at `layouts/_partials/%s`" $block_path }} {{ end }} {{ partial $block_path . }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/section/event.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/event/section.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/section/event.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/event/section.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/index.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/home.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/index.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/home.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_default/list.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/list.html similarity index 76% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_default/list.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/list.html index 231fbdafe..64d972d57 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_default/list.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/list.html @@ -8,7 +8,7 @@ {{ end }} - {{ if templates.Exists (printf "partials/views/%s-start.html" (lower $.Params.view | default "compact")) }} + {{ if templates.Exists (printf "_partials/views/%s-start.html" (lower $.Params.view | default "compact")) }} {{ partial "functions/render_view" (dict "page" $ "item" . "view" (printf "%s-start" $.Params.view) "index" 0) }} {{ end }} @@ -17,7 +17,7 @@ {{ partial "functions/render_view" (dict "page" $ "item" . "view" ($.Params.view | default "compact") "index" $index) }} {{end}} - {{ if templates.Exists (printf "partials/views/%s-end.html" (lower $.Params.view | default "compact")) }} + {{ if templates.Exists (printf "_partials/views/%s-end.html" (lower $.Params.view | default "compact")) }} {{ partial "functions/render_view" (dict "page" $ "item" . "view" (printf "%s-end" $.Params.view) "index" 0) }} {{ end }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/section/post.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/post/section.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/section/post.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/post/section.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/section/publication.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/publication/section.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/section/publication.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/publication/section.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_default/rss.xml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/rss.xml similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_default/rss.xml rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/rss.xml diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_default/single.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/single.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/_default/single.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/layouts/single.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/partials/blox-core/functions/get_author_name.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/_partials/blox-core/functions/get_author_name.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/partials/blox-core/functions/get_author_name.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/_partials/blox-core/functions/get_author_name.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/partials/blox-core/functions/get_featured_image.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/_partials/blox-core/functions/get_featured_image.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/partials/blox-core/functions/get_featured_image.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/_partials/blox-core/functions/get_featured_image.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/get_hook.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/_partials/blox-core/functions/get_hook.html similarity index 90% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/get_hook.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/_partials/blox-core/functions/get_hook.html index 5791dfb81..980c9b3f3 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/get_hook.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/_partials/blox-core/functions/get_hook.html @@ -5,7 +5,7 @@ {{ $loaded := false }} {{ $partial_dir := printf "hooks/%s/" .hook }} {{ $context := .context }} -{{ $hook_dir_path := path.Join "layouts/partials" $partial_dir }} +{{ $hook_dir_path := path.Join "layouts/_partials" $partial_dir }} {{ if fileExists $hook_dir_path }} {{ range os.ReadDir $hook_dir_path }} {{ if not .IsDir }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/partials/blox-core/functions/get_icon.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/_partials/blox-core/functions/get_icon.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/partials/blox-core/functions/get_icon.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/_partials/blox-core/functions/get_icon.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/partials/blox-core/functions/get_logo.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/_partials/blox-core/functions/get_logo.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/partials/blox-core/functions/get_logo.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/_partials/blox-core/functions/get_logo.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/partials/blox-core/functions/get_logo_url.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/_partials/blox-core/functions/get_logo_url.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/partials/blox-core/functions/get_logo_url.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/_partials/blox-core/functions/get_logo_url.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/partials/blox-core/functions/get_page_title.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/_partials/blox-core/functions/get_page_title.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/partials/blox-core/functions/get_page_title.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/_partials/blox-core/functions/get_page_title.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/partials/blox-core/functions/get_sort_by_parameter.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/_partials/blox-core/functions/get_sort_by_parameter.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/partials/blox-core/functions/get_sort_by_parameter.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/_partials/blox-core/functions/get_sort_by_parameter.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/shortcodes/dependencies.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/_shortcodes/dependencies.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/shortcodes/dependencies.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/_shortcodes/dependencies.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-decap-cms/config.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-decap-cms/config.yaml index 51d2e8eb5..0a33a9dc0 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-decap-cms/config.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-decap-cms/config.yaml @@ -3,7 +3,7 @@ module: - source: data target: data - source: functions - target: layouts/partials/mod-decap-cms + target: layouts/_partials/mod-decap-cms - source: templates target: layouts/decap_cms outputFormats: diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-decap-cms/data/decap_cms_config.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-decap-cms/data/decap_cms_config.yaml index fbb7af366..61d221893 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-decap-cms/data/decap_cms_config.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-decap-cms/data/decap_cms_config.yaml @@ -16,6 +16,7 @@ collections: - {label: "Display name (such as your full name)", name: "title", widget: "string"} - {label: "First name", name: "first_name", widget: "string", required: false} - {label: "Last name", name: "last_name", widget: "string", required: false} + - {label: "Pronouns (e.g., she/her, he/him, they/them)", name: "pronouns", widget: "string", required: false} - {label: "Position or tagline (such as Professor of AI)", name: "role", widget: "string", required: false} - label: "Avatar (upload an image named `avatar.jpg/png`)" name: "avatar_filename" diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-netlify/src/layouts/index.headers b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-netlify/src/layouts/index.headers index 4132d2752..56eccda84 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-netlify/src/layouts/index.headers +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-netlify/src/layouts/index.headers @@ -1,13 +1,19 @@ -{{- $csp_policy := site.Params.security.csp.policy | default "" -}} -{{- $csp_report_only := site.Params.security.csp.report_only | default false -}} -{{- $allow_frame := site.Params.security.allow_frame | default false -}} +{{- $csp_policy := site.Params.hugoblox.security.csp.policy | default "" -}} +{{- $csp_report_only := site.Params.hugoblox.security.csp.report_only | default false -}} +{{- $frame_options := site.Params.hugoblox.security.frame_options | default "sameorigin" -}} {{- $default_perms := "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()" -}} -{{- $permissions_policy := site.Params.security.permissions.policy | default $default_perms -}} +{{- $permissions_policy := site.Params.hugoblox.security.permissions_policy | default $default_perms -}} # Netlify headers # Automatically generated # Documentation: https://docs.hugoblox.com/hugo-tutorials/security/ /* - {{if not $allow_frame}}X-Frame-Options: DENY{{end}} + {{- if eq $frame_options "allow" -}} + {{/* No X-Frame-Options header - allows all origins */}} + {{- else if eq $frame_options "sameorigin" -}} + X-Frame-Options: SAMEORIGIN + {{- else -}} + X-Frame-Options: DENY + {{- end -}} X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff Strict-Transport-Security: max-age=31536000; includeSubDomains diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/assets/css/libs/chroma/dracula.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/assets/css/libs/chroma/dracula.css index c19577dcc..44bd05ecf 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/assets/css/libs/chroma/dracula.css +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/assets/css/libs/chroma/dracula.css @@ -1,85 +1,256 @@ -/* 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 { } +/* 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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/assets/css/libs/chroma/github-dark.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/assets/css/libs/chroma/github-dark.css index 77716777f..1b718480b 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/assets/css/libs/chroma/github-dark.css +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/assets/css/libs/chroma/github-dark.css @@ -29,7 +29,7 @@ .chroma .hl { width: 100%; display: block; - background-color: rgba(110,118,129,0.1); + background-color: rgba(110, 118, 129, 0.1); } .chroma .lnt { color: #8b949e; diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/assets/css/libs/chroma/github-light.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/assets/css/libs/chroma/github-light.css index 07ea90ab7..8e1da104e 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/assets/css/libs/chroma/github-light.css +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/assets/css/libs/chroma/github-light.css @@ -1,85 +1,286 @@ -/* 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 } +/* 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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/assets/js/wowchemy-slides.js b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/assets/js/hugoblox-slides.js similarity index 56% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/assets/js/wowchemy-slides.js rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/assets/js/hugoblox-slides.js index 15400f339..4b427872b 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/assets/js/wowchemy-slides.js +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/assets/js/hugoblox-slides.js @@ -9,38 +9,28 @@ global RevealMarkdown, RevealSearch, RevealNotes, RevealMath, RevealZoom, Reveal, mermaid, RevealMenu */ -import * as params from '@params'; +import * as params from "@params"; // Enable core slide features. var enabledPlugins = [RevealMarkdown, RevealSearch, RevealNotes, RevealMath.KaTeX, RevealZoom]; -const isObject = function (o) { - return o === Object(o) && !isArray(o) && typeof o !== 'function'; -}; +const isObject = (o) => o === Object(o) && !isArray(o) && typeof o !== "function"; -const isArray = function (a) { - return Array.isArray(a); -}; +const isArray = (a) => Array.isArray(a); -const toCamelCase = function (s) { - return s.replace(/([-_][a-z])/gi, function (term) { - return term.toUpperCase().replace('-', '').replace('_', ''); - }); -}; +const toCamelCase = (s) => s.replace(/([-_][a-z])/gi, (term) => term.toUpperCase().replace("-", "").replace("_", "")); -const keysToCamelCase = function (o) { +const keysToCamelCase = (o) => { if (isObject(o)) { const n = {}; - Object.keys(o).forEach(function (k) { + Object.keys(o).forEach((k) => { n[toCamelCase(k)] = keysToCamelCase(o[k]); }); return n; } else if (isArray(o)) { - return o.map(function (i) { - return keysToCamelCase(i); - }); + return o.map((i) => keysToCamelCase(i)); } return o; @@ -48,14 +38,14 @@ const keysToCamelCase = function (o) { // reveal configurations can be included in front matter under slides.reveal var pluginOptions = {}; -if (typeof params.slides.reveal_options !== 'undefined') { +if (typeof params.slides.reveal_options !== "undefined") { pluginOptions = params.slides.reveal_options; } pluginOptions = keysToCamelCase(pluginOptions); //enable menu by default if not set -if (typeof pluginOptions.menu_enabled === 'undefined') { +if (typeof pluginOptions.menu_enabled === "undefined") { pluginOptions.menu_enabled = true; } @@ -64,12 +54,12 @@ if (pluginOptions.menu_enabled) { enabledPlugins.push(RevealMenu); } -pluginOptions['plugins'] = enabledPlugins; +pluginOptions.plugins = enabledPlugins; Reveal.initialize(pluginOptions); // Disable Mermaid by default. -if (typeof params.slides.diagram === 'undefined') { +if (typeof params.slides.diagram === "undefined") { params.slides.diagram = false; } @@ -78,36 +68,34 @@ if (params.slides.diagram) { //mermaid options // mermaid: front matter configuration can be used to set mermaid options // You can also use directives (see mermaid documentation) - var mermaidOptions = {}; - if (typeof params.slides.diagram_options !== 'undefined') { + let mermaidOptions = {}; + if (typeof params.slides.diagram_options !== "undefined") { mermaidOptions = params.slides.diagram_options; } // `startOnLoad` must be false since diagrams are lazily rendered. - mermaidOptions['startOnLoad'] = false; + mermaidOptions.startOnLoad = false; mermaid.initialize(mermaidOptions); // Lazily render Mermaid diagrams within Reveal.JS slides // See: https://github.com/hakimel/reveal.js/issues/2863#issuecomment-1107444425 - let renderMermaidDiagrams = function renderMermaidDiagrams(event) { - - let mermaidDivs = event.currentSlide.querySelectorAll('.mermaid:not(.done)'); - let indices = Reveal.getIndices(); - let pageno = `${indices.h}-${indices.v}` - - mermaidDivs.forEach(function (mermaidDiv, i) { + const renderMermaidDiagrams = function renderMermaidDiagrams(event) { + const mermaidDivs = event.currentSlide.querySelectorAll(".mermaid:not(.done)"); + const indices = Reveal.getIndices(); + const pageno = `${indices.h}-${indices.v}`; - let insertSvg = function (svgCode) { + mermaidDivs.forEach((mermaidDiv, i) => { + const insertSvg = (svgCode) => { mermaidDiv.innerHTML = svgCode; - mermaidDiv.classList.add('done'); + mermaidDiv.classList.add("done"); }; - let graphDefinition = mermaidDiv.textContent; + const graphDefinition = mermaidDiv.textContent; mermaid.mermaidAPI.render(`mermaid${pageno}-${i}`, graphDefinition, insertSvg); }); Reveal.layout(); }; - Reveal.on('ready', event => renderMermaidDiagrams(event)); - Reveal.on('slidechanged', event => renderMermaidDiagrams(event)); + Reveal.on("ready", (event) => renderMermaidDiagrams(event)); + Reveal.on("slidechanged", (event) => renderMermaidDiagrams(event)); } diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/config.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/config.yaml index 8e0d963bf..51a337e7f 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/config.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/config.yaml @@ -4,5 +4,3 @@ module: target: assets - source: layouts target: layouts - imports: - - path: github.com/HugoBlox/hugo-blox-builder/modules/blox-core diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/go.mod b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/go.mod index b0dfee2dd..4446881f3 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/go.mod +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/go.mod @@ -1,5 +1,3 @@ module github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal -go 1.15 - -require github.com/HugoBlox/hugo-blox-builder/modules/blox-core v0.3.1 +go 1.19 diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/layouts/partials/slides.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/layouts/_partials/slides.html similarity index 70% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/layouts/partials/slides.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/layouts/_partials/slides.html index 4f87c5f85..9dc066efd 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/layouts/partials/slides.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/layouts/_partials/slides.html @@ -13,12 +13,22 @@ {{/* Let `---` delimit slides. In Goldmark, that is `
`. Alternatively, for Blackfriday, use `
`. */}} {{ range (split $content "
") }} + {{/* Check if this slide should be hidden using inline comment */}} + {{ $isHidden := false }} + {{ $slideContent := . }} + + {{ if in . "" }} + {{ $isHidden = true }} + {{/* Remove the hide comment from the content */}} + {{ $slideContent = replace . "" "" }} + {{ end }} + {{/* Each `
` defines a new slide. */}} {{/* Only begin new slide `
` if not already added by custom `slide` shortcode. */}} {{ if not (in . "data-noprocess") }} -
+ {{ end }} - {{ . | safeHTML }} + {{ $slideContent | safeHTML }}
{{ end }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/layouts/shortcodes/fragment.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/layouts/_shortcodes/fragment.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/layouts/shortcodes/fragment.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/layouts/_shortcodes/fragment.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/layouts/shortcodes/slide.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/layouts/_shortcodes/slide.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/layouts/shortcodes/slide.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/layouts/_shortcodes/slide.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/layouts/shortcodes/speaker_note.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/layouts/_shortcodes/speaker_note.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/layouts/shortcodes/speaker_note.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/layouts/_shortcodes/speaker_note.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/layouts/slides/baseof.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/layouts/slides/baseof.html index 1f562fe72..a103971fd 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/layouts/slides/baseof.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-plugin-reveal/layouts/slides/baseof.html @@ -16,8 +16,8 @@ {{ end }} - - + + @@ -71,7 +71,7 @@ {{ end }} {{/* Initialize slides. */}} - {{ $slidejs := resources.Get "js/wowchemy-slides.js" | js.Build (dict "params" (dict "slides" $.Params.slides )) }} + {{ $slidejs := resources.Get "js/hugoblox-slides.js" | js.Build (dict "params" (dict "slides" $.Params.slides )) }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_default/_markup/sitemap.xml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_markup/sitemap.xml similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_default/_markup/sitemap.xml rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_markup/sitemap.xml diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/partials/blox-analytics/services/baidu_tongji.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_partials/analytics/baidu_tongji.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/partials/blox-analytics/services/baidu_tongji.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_partials/analytics/baidu_tongji.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/partials/analytics/google_analytics.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_partials/analytics/google_analytics.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/partials/analytics/google_analytics.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_partials/analytics/google_analytics.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/partials/blox-analytics/services/google_tag_manager.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_partials/analytics/google_tag_manager.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/partials/blox-analytics/services/google_tag_manager.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_partials/analytics/google_tag_manager.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/partials/analytics/main.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_partials/analytics/main.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/partials/analytics/main.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_partials/analytics/main.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/partials/blox-analytics/services/microsoft_clarity.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_partials/analytics/microsoft_clarity.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics/layouts/partials/blox-analytics/services/microsoft_clarity.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_partials/analytics/microsoft_clarity.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/partials/blox_seo.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_partials/blox_seo.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/partials/blox_seo.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_partials/blox_seo.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/partials/jsonld/article.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_partials/jsonld/article.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/partials/jsonld/article.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_partials/jsonld/article.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/partials/jsonld/business.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_partials/jsonld/business.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/partials/jsonld/business.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_partials/jsonld/business.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/partials/jsonld/event.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_partials/jsonld/event.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/partials/jsonld/event.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_partials/jsonld/event.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/partials/jsonld/main.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_partials/jsonld/main.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/partials/jsonld/main.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_partials/jsonld/main.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/partials/jsonld/website.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_partials/jsonld/website.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/partials/jsonld/website.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_partials/jsonld/website.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/partials/seo_tags.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_partials/seo_tags.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/partials/seo_tags.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_partials/seo_tags.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/partials/site_verification.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_partials/site_verification.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/partials/site_verification.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_partials/site_verification.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/.npmrc b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/.npmrc new file mode 100644 index 000000000..5b7b8fb3b --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/.npmrc @@ -0,0 +1,4 @@ +# pnpm compatibility settings +auto-install-peers=true +strict-peer-dependencies=false +public-hoist-pattern[]=* diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/README.md b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/README.md index 5997f093f..29cb60fd3 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/README.md +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/README.md @@ -1,19 +1,89 @@ # Hugo Blox Tailwind UI -The Hugo Blox web framework utilising [TailwindCSS](https://tailwindcss.com/) and its [typography plugin](https://tailwindcss.com/docs/typography-plugin) for styling components. +The Hugo Blox web framework utilizing [Tailwind CSS v4](https://tailwindcss.com/) with Hugo's native integration for styling components with Tailwind v4. -See the Blog Starter Template for an example using this module. +## Requirements + +- Hugo v0.148.2+ (Extended Edition) +- Node.js v20+ +- pnpm (see `packageManager` field in package.json) + +## Quick Start + +### 1. Install Dependencies + +```bash +pnpm install +``` + +### 2. Run Development Server + +```bash +hugo server +``` + +Tailwind CSS is processed automatically by Hugo using the `css.TailwindCSS` function. + +## Features + +- **Tailwind CSS v4**: Latest version with improved performance over Tailwind v3 +- **Hugo Native Integration**: Uses Hugo's built-in `css.TailwindCSS` function +- **Dynamic CSS Generation**: Only includes utilities actually used in your content for ultra-fast page loads +- **No Pre-compilation**: CSS is generated on-demand (previously Tailwind v3 was pre-compiled in Hugo Blox as `wc.min.css`) +- **Community Components**: Community components work seamlessly without manual compilation + +## Configuration + +The Tailwind configuration is now in CSS format at `assets/css/main.css` using the `@theme` directive. The configuration includes: + +- Hugo Blox color schemes (primary, secondary, neutral) +- Typography settings +- Safelist patterns for dynamic classes +- Dark mode support + +## Migration from Tailwind v3 + +If you're upgrading from Tailwind v3: + +1. Install the new dependencies: `pnpm install` +2. Remove any `assets/dist/wc.min.css` files +3. Add the `package.json` file from the latest templates +4. Update your deployment scripts to install it with `pnpm install` (refer to the latest `.github` folder in the templates) +5. The old `tailwind.config.js` and `postcss.config.js` files are no longer needed ## Development +For module development: + ```bash -hugo mod npm pack -npm install +# Install dependencies +pnpm install + +# Run development server +hugo server --disableFastRender + +# Build for production +hugo --minify ``` -You need to add this to your `config.yaml` to enable Hugo's Tailwind integration: +## Vendor Libraries + +The module includes several third-party vendor libraries that are distributed with the module. These are copied from node_modules to the assets/dist/lib directory during the build process. + +To update the vendor libraries: -```yaml -build: - writeStats: true +```bash +# Update vendor libraries to the latest versions and rebuild +pnpm vendor:update-and-build + +# Just rebuild vendor libraries without updating versions +pnpm vendor:libs ``` + +The following libraries are included: +- mermaid (diagrams) +- plotly.js (interactive charts) +- katex (math rendering) +- markmap-autoloader (mind maps) +- alpinejs (interactivity) +- preact (interactive components) diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/archetypes/faq.md b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/archetypes/faq.md new file mode 100644 index 000000000..7735148c2 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/archetypes/questions.md b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/archetypes/questions.md new file mode 100644 index 000000000..78023ab54 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/README.md b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/README.md new file mode 100644 index 000000000..eaac790b6 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/blox/biography.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/blox/biography.css index 911e596a1..c4f30028f 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/blox/biography.css +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/blox/biography.css @@ -5,13 +5,10 @@ position: relative; } - /* Custom avatar size on homepage */ - + /* Custom avatar size on homepage - size controlled by template params */ .avatar { width: auto; height: auto; - max-width: 225px; - max-height: 225px; object-fit: cover; } @@ -53,52 +50,92 @@ font-size: 0.9rem; } - /* .ul-edu { */ - /* list-style: none; */ - /* } */ - - /* .ul-edu li { */ - /* position: relative; */ - /* padding: 0 15px 4px 3px; */ - /* } */ - - /* .ul-edu li .description p { */ - /* margin: 0; */ - /* } */ - .ul-edu li .description p.course { font-size: 0.9rem; } .ul-edu li .description p.institution { font-size: 0.75rem; - - /* color: rgba(0, 0, 0, 0.6); */ } .network-icon .big-icon { font-size: 1.5rem; } - /* .dark .portrait-title h3 { */ - /* color: rgb(255 255 255 / 90%); */ - /* font-weight: bold; */ - /* } */ - - /* .dark .portrait-title h2 { */ - /* color: #fff; */ - /* font-weight: bold; */ - /* } */ - .bio-text { max-width: 680px; } } +/* Modern Biography Block Enhancements */ +.resume-biography-modern { + /* Ensure proper stacking context for gradients and effects */ + position: relative; + z-index: 1; +} + +/* Ruby pronunciation styling for modern look */ +.ruby-modern { + ruby-position: over; +} + +.ruby-modern rt { + font-size: 0.7em; + opacity: 0.8; + letter-spacing: 0.05em; +} + +/* Enhanced backdrop blur support */ +@supports (backdrop-filter: blur(10px)) { + .resume-biography-modern [class*="backdrop-blur"] { + backdrop-filter: blur(10px); + } +} + +/* Smooth animations for all interactive elements */ +.resume-biography-modern * { + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); +} + +/* Enhanced focus states for accessibility */ +.resume-biography-modern a:focus-visible { + outline: 2px solid var(--color-primary-500); + outline-offset: 2px; + border-radius: 0.5rem; +} + +/* Improved text selection styling */ +.resume-biography-modern ::selection { + background-color: color-mix(in oklch, var(--color-primary-200) 30%, transparent); + color: var(--color-primary-900); +} + +.dark .resume-biography-modern ::selection { + background-color: color-mix(in oklch, var(--color-primary-800) 30%, transparent); + color: var(--color-primary-100); +} + +/* Enhanced gradient text support */ +.resume-biography-modern .bg-clip-text { + -webkit-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; +} + +/* Ensure text remains readable on fallback */ +@supports not (background-clip: text) { + .resume-biography-modern .bg-clip-text { + color: var(--color-neutral-900); + } + + .dark .resume-biography-modern .bg-clip-text { + color: var(--color-neutral-100); + } +} + .avatar-wrapper { position: relative; - width: 150px; /* Match image size in about.avatar widget */ - height: 150px; + /* width and height controlled by template params */ margin-left: auto; margin-right: auto; } @@ -115,11 +152,50 @@ font-size: 20px; background-color: #fff; color: #000; /* override parent alpha */ - box-shadow: 0 10px 20px rgb(0 0 0 / 4%), 0 2px 6px rgb(0 0 0 / 4%), 0 0 1px rgb(0 0 0 / 4%); + box-shadow: + 0 10px 20px rgb(0 0 0 / 4%), + 0 2px 6px rgb(0 0 0 / 4%), + 0 0 1px rgb(0 0 0 / 4%); } - .dark .avatar-emoji { background-color: #000; - box-shadow: 0 10px 20px rgb(0 0 0 / 4%), 0 2px 6px rgb(0 0 0 / 4%), 0 0 1px rgb(255 255 255 / 96%); + box-shadow: + 0 10px 20px rgb(0 0 0 / 4%), + 0 2px 6px rgb(0 0 0 / 4%), + 0 0 1px rgb(255 255 255 / 96%); +} + +/* Biography Block */ + +.hbx-bg-gradient { + position: relative; + isolation: isolate; +} + +.hbx-bg-gradient::before { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: -1; + background-attachment: fixed; + transition: opacity 0.5s ease-in-out; + opacity: 1; +} + +/* Light Mode Gradient */ +.hbx-bg-gradient::before { + background-image: + radial-gradient(at 20% 25%, hsla(212, 80%, 95%, 1) 0px, transparent 50%), radial-gradient(at 75% 30%, hsla(160, 80%, 95%, 1) 0px, transparent 50%), + radial-gradient(at 25% 80%, hsla(280, 80%, 95%, 1) 0px, transparent 50%), radial-gradient(at 75% 85%, hsla(30, 80%, 95%, 1) 0px, transparent 50%); +} + +/* Dark Mode Gradient */ +.dark .hbx-bg-gradient::before { + background-image: + radial-gradient(at 20% 25%, hsla(212, 35%, 15%, 1) 0px, transparent 50%), radial-gradient(at 75% 30%, hsla(160, 35%, 15%, 1) 0px, transparent 50%), + radial-gradient(at 25% 80%, hsla(280, 35%, 15%, 1) 0px, transparent 50%), radial-gradient(at 75% 85%, hsla(30, 35%, 15%, 1) 0px, transparent 50%); } diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/blox/navbar.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/blox/navbar.css index 585a26cfd..278f7391b 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/blox/navbar.css +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/blox/navbar.css @@ -5,7 +5,9 @@ } .navbar-brand { - @apply text-black dark:text-white text-xl font-semibold; + /* @apply text-black dark:text-white text-xl font-semibold; */ + color: var(--color-header-fg); + @apply text-xl font-semibold; } .navbar-brand svg { @@ -17,6 +19,15 @@ @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; @@ -31,7 +42,9 @@ input#nav-toggle:checked ~ #nav-menu { } #site-header.header { - @apply bg-white dark:bg-zinc-800 py-3 shadow; + background-color: var(--color-header-bg); + color: var(--color-header-fg); + @apply py-3 shadow; } /* navbar items */ @@ -41,31 +54,57 @@ input#nav-toggle:checked ~ #nav-menu { } .nav-link { - @apply hover:text-primary-700 dark:hover:text-primary-300 dark:text-white block p-3 font-semibold transition lg:px-2 lg:py-3; + /* @apply dark:text-white block p-3 font-semibold transition lg:px-2 lg:py-3; */ + color: var(--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; +} - & > svg { - @apply pointer-events-none; - } - - &.active { - .nav-dropdown-list { - @apply block; - } - } +.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:hover:bg-primary-500; + @apply px-4 [&:not(:last-child)]:mb-2; +} + +.dark .nav-dropdown-item:hover { + background-color: var(--color-primary-500); } .nav-dropdown-link { - @apply hover:text-primary-700 dark:text-white dark:hover:text-white block py-1 font-semibold transition; + @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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/blox/skills.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/blox/skills.css index 1792fd3ce..21542e5df 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/blox/skills.css +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/blox/skills.css @@ -46,7 +46,7 @@ overflow: hidden; width: 100%; height: 10px; - border: 1px solid #a8e9e9; + border: 1px solid var(--color-primary-200, #cbd5f5); border-radius: 10px; } @@ -54,5 +54,5 @@ position: absolute; width: 60%; height: 10px; - background-color: #3cb5b5; + background-color: var(--color-primary-600, #2563eb); } diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/chroma.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/chroma.css index 0ff91edaa..8f3e1caaf 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/chroma.css +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/chroma.css @@ -5,5 +5,23 @@ /* Requires relative position for Code Copy button */ .prose .chroma, .prose pre { - @apply relative rounded-md text-neutral-700 bg-neutral-50 dark:bg-slate-700 dark:text-white; + @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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/color-utilities.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/color-utilities.css new file mode 100644 index 000000000..6b5271288 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/all.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/all.css index a66929c77..8869f1493 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/all.css +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/all.css @@ -6,3 +6,7 @@ @import "steps.css"; @import "cards.css"; @import "math.css"; +@import "notebook.css"; +@import "author-notes.css"; +@import "glassmorphism.css"; +@import "cover.css"; diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/author-notes.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/author-notes.css new file mode 100644 index 000000000..c9780cce0 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/cards.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/cards.css index 30cde72ad..171f6b234 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/cards.css +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/cards.css @@ -2,41 +2,64 @@ --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-none hover:shadow-gray-100 dark:hover:shadow-none shadow-gray-100 active:shadow-sm active:shadow-gray-200 transition-all duration-200; - @apply hover:border-gray-300 bg-transparent shadow-sm dark:border-neutral-700 hover:bg-slate-50 hover:shadow-md dark:hover:border-neutral-600 dark:hover:bg-neutral-800; + @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 items-start gap-2 text-gray-700 hover:text-gray-900 dark:text-neutral-200 dark:hover:text-neutral-50 items-center; + @apply flex font-semibold gap-2 text-gray-700 hover:text-gray-900 items-center; + + color: var(--color-neutral-700); } -.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-title:hover { + color: var(--color-neutral-900); } -.hb-card:hover svg { - color: currentcolor; +.dark .hb-card-title { + color: var(--color-neutral-200); } -.hb-card svg { - @apply text-neutral-700; +.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 { - @apply text-neutral-300; + color: var(--color-neutral-300); } .dark .hb-card:hover svg { diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/copy.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/copy.css index f115c368c..8f46f5ea2 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/copy.css +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/copy.css @@ -6,23 +6,26 @@ @apply relative z-0; } -.highlight:hover > .copy-button { - @apply visible; +.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 */ -.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; +.highlight:hover > .copy-button { + @apply visible; } .copy-button:hover, .copy-button:focus, .copy-button:active, .copy-button:active:hover { - @apply bg-primary-100 dark:bg-primary-600; + 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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/cover.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/cover.css new file mode 100644 index 000000000..a7e2224a2 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/glassmorphism.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/glassmorphism.css new file mode 100644 index 000000000..1d749ba41 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/math.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/math.css index 51475a10e..35531b98a 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/math.css +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/math.css @@ -1,2 +1,4 @@ /* Prevent long equations overflowing on small screens by scrolling horizontally instead. */ -.katex-display { overflow: auto hidden; } +.katex-display { + overflow: auto hidden; +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/notebook.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/notebook.css new file mode 100644 index 000000000..31109d231 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/page.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/page.css index 290695d57..a1159d20e 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/page.css +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/page.css @@ -87,5 +87,11 @@ /* For ToC shortcode, Spoiler shortcode, and direct HTML Details snippets. */ details > summary { - @apply cursor-pointer font-semibold text-primary-700 dark:text-primary-300; + @apply cursor-pointer font-semibold; + + color: var(--color-primary-700); +} + +.dark details > summary { + color: var(--color-primary-300); } diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/sidebar-left.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/sidebar-left.css index 085788f2b..7978b7fe1 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/sidebar-left.css +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/sidebar-left.css @@ -27,7 +27,15 @@ } .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 dark:before:bg-neutral-700; + @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 { @@ -58,7 +66,11 @@ } .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:bg-primary-100/5 dark:hover:text-gray-50; + @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 { @@ -66,7 +78,15 @@ } .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-[""] dark:before:bg-neutral-800 ltr:pl-3 ltr:before:left-0 rtl:pr-3 rtl:before:right-0 ltr:ml-3 rtl:mr-3; + @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 { diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/steps.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/steps.css index b643633bc..6d54605c6 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/steps.css +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/steps.css @@ -1,5 +1,11 @@ .hb-steps { - @apply ml-4 mb-12 pl-6 border-l border-gray-200 dark:border-neutral-600 [counter-reset:hb_step]; + @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 { @@ -9,9 +15,14 @@ @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-neutral-700 dark:text-neutral-200 text-base font-normal text-center -indent-px; + @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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/task-list.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/task-list.css index 87f7b6db9..aaf5ec455 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/task-list.css +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/components/task-list.css @@ -7,11 +7,11 @@ ul.task-list { list-style: none; } -ul.task-list li input[type='checkbox'] { +ul.task-list li input[type="checkbox"] { margin-right: 0.5rem; } -ul.task-list input[type='checkbox']:checked { +ul.task-list input[type="checkbox"]:checked { appearance: none; width: 1em; height: 1em; @@ -20,11 +20,11 @@ ul.task-list input[type='checkbox']:checked { position: relative; } -ul.task-list input[type='checkbox']:not(:checked) { +ul.task-list input[type="checkbox"]:not(:checked) { width: 0.9em; height: 0.9em; } -ul.task-list input[type='checkbox']:checked::after { - content: '✅'; +ul.task-list input[type="checkbox"]:checked::after { + content: "✅"; } diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/config/safelist.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/config/safelist.css new file mode 100644 index 000000000..308ca68fa --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/config/tailwind.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/config/tailwind.css new file mode 100644 index 000000000..1de222bd7 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/config/theme.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/config/theme.css new file mode 100644 index 000000000..371313b09 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/config/theme.css @@ -0,0 +1,339 @@ +/* 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 family */ + --font-family-sans: inter var, ui-sans-serif, system-ui, sans-serif, apple color emoji, segoe ui emoji, segoe ui symbol, noto color emoji; + + /* 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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/framework/base.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/framework/base.css new file mode 100644 index 000000000..7b31f1a98 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/framework/base.css @@ -0,0 +1,103 @@ +/* Base styles for better text rendering */ +@layer base { + html { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizelegibility; + } + + body { + line-height: 1.5; + } +} + +/* 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: 500; + } + + .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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/framework/components.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/framework/components.css new file mode 100644 index 000000000..cef13d019 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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: 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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/hb-search.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/hb-search.css new file mode 100644 index 000000000..434b66f01 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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: 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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/layout-utilities.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/layout-utilities.css new file mode 100644 index 000000000..23ecae570 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/layout-utilities.css @@ -0,0 +1,81 @@ +/* + 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 + - --hb-font-size-scale: Modular scale ratio +*/ + +/* 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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/libs/chroma/dark.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/libs/chroma/dark.css index f10b1f13b..b15758557 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/libs/chroma/dark.css +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/libs/chroma/dark.css @@ -39,7 +39,7 @@ /* LineHighlight */ .chroma .hl { - background-color: #ffc + background-color: #ffc; } /* LineNumbersTable */ @@ -49,7 +49,7 @@ user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em; - color: #7f7f7f + color: #7f7f7f; } /* LineNumbers */ @@ -59,7 +59,7 @@ user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em; - color: #7f7f7f + color: #7f7f7f; } /* Line */ @@ -71,44 +71,44 @@ /* Keyword */ .chroma .k { - color: #ff79c6 + color: #ff79c6; } /* KeywordConstant */ .chroma .kc { - color: #ff79c6 + color: #ff79c6; } /* KeywordDeclaration */ .chroma .kd { color: #8be9fd; - font-style: italic + font-style: italic; } /* KeywordNamespace */ .chroma .kn { - color: #ff79c6 + color: #ff79c6; } /* KeywordPseudo */ .chroma .kp { - color: #ff79c6 + color: #ff79c6; } /* KeywordReserved */ .chroma .kr { - color: #ff79c6 + color: #ff79c6; } /* KeywordType */ .chroma .kt { - color: #8be9fd + color: #8be9fd; } /* Name */ @@ -119,14 +119,14 @@ /* NameAttribute */ .chroma .na { - color: #50fa7b + color: #50fa7b; } /* NameBuiltin */ .chroma .nb { color: #8be9fd; - font-style: italic + font-style: italic; } /* NameBuiltinPseudo */ @@ -137,7 +137,7 @@ /* NameClass */ .chroma .nc { - color: #50fa7b + color: #50fa7b; } /* NameConstant */ @@ -163,7 +163,7 @@ /* NameFunction */ .chroma .nf { - color: #50fa7b + color: #50fa7b; } /* NameFunctionMagic */ @@ -175,7 +175,7 @@ .chroma .nl { color: #8be9fd; - font-style: italic + font-style: italic; } /* NameNamespace */ @@ -196,35 +196,35 @@ /* NameTag */ .chroma .nt { - color: #ff79c6 + color: #ff79c6; } /* NameVariable */ .chroma .nv { color: #8be9fd; - font-style: italic + font-style: italic; } /* NameVariableClass */ .chroma .vc { color: #8be9fd; - font-style: italic + font-style: italic; } /* NameVariableGlobal */ .chroma .vg { color: #8be9fd; - font-style: italic + font-style: italic; } /* NameVariableInstance */ .chroma .vi { color: #8be9fd; - font-style: italic + font-style: italic; } /* NameVariableMagic */ @@ -245,139 +245,139 @@ /* LiteralString */ .chroma .s { - color: #f1fa8c + color: #f1fa8c; } /* LiteralStringAffix */ .chroma .sa { - color: #f1fa8c + color: #f1fa8c; } /* LiteralStringBacktick */ .chroma .sb { - color: #f1fa8c + color: #f1fa8c; } /* LiteralStringChar */ .chroma .sc { - color: #f1fa8c + color: #f1fa8c; } /* LiteralStringDelimiter */ .chroma .dl { - color: #f1fa8c + color: #f1fa8c; } /* LiteralStringDoc */ .chroma .sd { - color: #f1fa8c + color: #f1fa8c; } /* LiteralStringDouble */ .chroma .s2 { - color: #f1fa8c + color: #f1fa8c; } /* LiteralStringEscape */ .chroma .se { - color: #f1fa8c + color: #f1fa8c; } /* LiteralStringHeredoc */ .chroma .sh { - color: #f1fa8c + color: #f1fa8c; } /* LiteralStringInterpol */ .chroma .si { - color: #f1fa8c + color: #f1fa8c; } /* LiteralStringOther */ .chroma .sx { - color: #f1fa8c + color: #f1fa8c; } /* LiteralStringRegex */ .chroma .sr { - color: #f1fa8c + color: #f1fa8c; } /* LiteralStringSingle */ .chroma .s1 { - color: #f1fa8c + color: #f1fa8c; } /* LiteralStringSymbol */ .chroma .ss { - color: #f1fa8c + color: #f1fa8c; } /* LiteralNumber */ .chroma .m { - color: #bd93f9 + color: #bd93f9; } /* LiteralNumberBin */ .chroma .mb { - color: #bd93f9 + color: #bd93f9; } /* LiteralNumberFloat */ .chroma .mf { - color: #bd93f9 + color: #bd93f9; } /* LiteralNumberHex */ .chroma .mh { - color: #bd93f9 + color: #bd93f9; } /* LiteralNumberInteger */ .chroma .mi { - color: #bd93f9 + color: #bd93f9; } /* LiteralNumberIntegerLong */ .chroma .il { - color: #bd93f9 + color: #bd93f9; } /* LiteralNumberOct */ .chroma .mo { - color: #bd93f9 + color: #bd93f9; } /* Operator */ .chroma .o { - color: #ff79c6 + color: #ff79c6; } /* OperatorWord */ .chroma .ow { - color: #ff79c6 + color: #ff79c6; } /* Punctuation */ @@ -388,43 +388,43 @@ /* Comment */ .chroma .c { - color: #6272a4 + color: #6272a4; } /* CommentHashbang */ .chroma .ch { - color: #6272a4 + color: #6272a4; } /* CommentMultiline */ .chroma .cm { - color: #6272a4 + color: #6272a4; } /* CommentSingle */ .chroma .c1 { - color: #6272a4 + color: #6272a4; } /* CommentSpecial */ .chroma .cs { - color: #6272a4 + color: #6272a4; } /* CommentPreproc */ .chroma .cp { - color: #ff79c6 + color: #ff79c6; } /* CommentPreprocFile */ .chroma .cpf { - color: #ff79c6 + color: #ff79c6; } /* Generic */ @@ -435,13 +435,13 @@ /* GenericDeleted */ .chroma .gd { - color: #f55 + color: #f55; } /* GenericEmph */ .chroma .ge { - text-decoration: underline + text-decoration: underline; } /* GenericError */ @@ -452,20 +452,20 @@ /* GenericHeading */ .chroma .gh { - font-weight: bold + font-weight: bold; } /* GenericInserted */ .chroma .gi { color: #50fa7b; - font-weight: bold + font-weight: bold; } /* GenericOutput */ .chroma .go { - color: #44475a + color: #44475a; } /* GenericPrompt */ @@ -481,7 +481,7 @@ /* GenericSubheading */ .chroma .gu { - font-weight: bold + font-weight: bold; } /* GenericTraceback */ @@ -492,7 +492,7 @@ /* GenericUnderline */ .chroma .gl { - text-decoration: underline + text-decoration: underline; } /* TextWhitespace */ diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/libs/chroma/light.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/libs/chroma/light.css index 300a7813f..98607fab8 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/libs/chroma/light.css +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/libs/chroma/light.css @@ -12,7 +12,7 @@ html:not(.dark) .highlight { .chroma .err { color: #a61717; - background-color: #e3d2d2 + background-color: #e3d2d2; } /* CodeLine */ @@ -41,7 +41,7 @@ html:not(.dark) .highlight { /* LineHighlight */ .chroma .hl { - background-color: #ffc + background-color: #ffc; } /* LineNumbersTable */ @@ -51,7 +51,7 @@ html:not(.dark) .highlight { user-select: none; margin-right: 0.4em; padding: 0 0.4em; - color: #7f7f7f + color: #7f7f7f; } /* LineNumbers */ @@ -61,7 +61,7 @@ html:not(.dark) .highlight { user-select: none; margin-right: 0.4em; padding: 0 0.4em; - color: #7f7f7f + color: #7f7f7f; } /* Line */ @@ -74,49 +74,49 @@ html:not(.dark) .highlight { .chroma .k { color: #000; - font-weight: bold + font-weight: bold; } /* KeywordConstant */ .chroma .kc { color: #000; - font-weight: bold + font-weight: bold; } /* KeywordDeclaration */ .chroma .kd { color: #000; - font-weight: bold + font-weight: bold; } /* KeywordNamespace */ .chroma .kn { color: #000; - font-weight: bold + font-weight: bold; } /* KeywordPseudo */ .chroma .kp { color: #000; - font-weight: bold + font-weight: bold; } /* KeywordReserved */ .chroma .kr { color: #000; - font-weight: bold + font-weight: bold; } /* KeywordType */ .chroma .kt { color: #458; - font-weight: bold + font-weight: bold; } /* Name */ @@ -127,59 +127,59 @@ html:not(.dark) .highlight { /* NameAttribute */ .chroma .na { - color: #008080 + color: #008080; } /* NameBuiltin */ .chroma .nb { - color: #0086b3 + color: #0086b3; } /* NameBuiltinPseudo */ .chroma .bp { - color: #999 + color: #999; } /* NameClass */ .chroma .nc { color: #458; - font-weight: bold + font-weight: bold; } /* NameConstant */ .chroma .no { - color: #008080 + color: #008080; } /* NameDecorator */ .chroma .nd { color: #3c5d5d; - font-weight: bold + font-weight: bold; } /* NameEntity */ .chroma .ni { - color: #800080 + color: #800080; } /* NameException */ .chroma .ne { color: #900; - font-weight: bold + font-weight: bold; } /* NameFunction */ .chroma .nf { color: #900; - font-weight: bold + font-weight: bold; } /* NameFunctionMagic */ @@ -191,13 +191,13 @@ html:not(.dark) .highlight { .chroma .nl { color: #900; - font-weight: bold + font-weight: bold; } /* NameNamespace */ .chroma .nn { - color: #555 + color: #555; } /* NameOther */ @@ -213,31 +213,31 @@ html:not(.dark) .highlight { /* NameTag */ .chroma .nt { - color: #000080 + color: #000080; } /* NameVariable */ .chroma .nv { - color: #008080 + color: #008080; } /* NameVariableClass */ .chroma .vc { - color: #008080 + color: #008080; } /* NameVariableGlobal */ .chroma .vg { - color: #008080 + color: #008080; } /* NameVariableInstance */ .chroma .vi { - color: #008080 + color: #008080; } /* NameVariableMagic */ @@ -258,141 +258,141 @@ html:not(.dark) .highlight { /* LiteralString */ .chroma .s { - color: #d14 + color: #d14; } /* LiteralStringAffix */ .chroma .sa { - color: #d14 + color: #d14; } /* LiteralStringBacktick */ .chroma .sb { - color: #d14 + color: #d14; } /* LiteralStringChar */ .chroma .sc { - color: #d14 + color: #d14; } /* LiteralStringDelimiter */ .chroma .dl { - color: #d14 + color: #d14; } /* LiteralStringDoc */ .chroma .sd { - color: #d14 + color: #d14; } /* LiteralStringDouble */ .chroma .s2 { - color: #d14 + color: #d14; } /* LiteralStringEscape */ .chroma .se { - color: #d14 + color: #d14; } /* LiteralStringHeredoc */ .chroma .sh { - color: #d14 + color: #d14; } /* LiteralStringInterpol */ .chroma .si { - color: #d14 + color: #d14; } /* LiteralStringOther */ .chroma .sx { - color: #d14 + color: #d14; } /* LiteralStringRegex */ .chroma .sr { - color: #009926 + color: #009926; } /* LiteralStringSingle */ .chroma .s1 { - color: #d14 + color: #d14; } /* LiteralStringSymbol */ .chroma .ss { - color: #990073 + color: #990073; } /* LiteralNumber */ .chroma .m { - color: #099 + color: #099; } /* LiteralNumberBin */ .chroma .mb { - color: #099 + color: #099; } /* LiteralNumberFloat */ .chroma .mf { - color: #099 + color: #099; } /* LiteralNumberHex */ .chroma .mh { - color: #099 + color: #099; } /* LiteralNumberInteger */ .chroma .mi { - color: #099 + color: #099; } /* LiteralNumberIntegerLong */ .chroma .il { - color: #099 + color: #099; } /* LiteralNumberOct */ .chroma .mo { - color: #099 + color: #099; } /* Operator */ .chroma .o { color: #000; - font-weight: bold + font-weight: bold; } /* OperatorWord */ .chroma .ow { color: #000; - font-weight: bold + font-weight: bold; } /* Punctuation */ @@ -404,28 +404,28 @@ html:not(.dark) .highlight { .chroma .c { color: #998; - font-style: italic + font-style: italic; } /* CommentHashbang */ .chroma .ch { color: #998; - font-style: italic + font-style: italic; } /* CommentMultiline */ .chroma .cm { color: #998; - font-style: italic + font-style: italic; } /* CommentSingle */ .chroma .c1 { color: #998; - font-style: italic + font-style: italic; } /* CommentSpecial */ @@ -433,7 +433,7 @@ html:not(.dark) .highlight { .chroma .cs { color: #999; font-weight: bold; - font-style: italic + font-style: italic; } /* CommentPreproc */ @@ -441,7 +441,7 @@ html:not(.dark) .highlight { .chroma .cp { color: #999; font-weight: bold; - font-style: italic + font-style: italic; } /* CommentPreprocFile */ @@ -449,7 +449,7 @@ html:not(.dark) .highlight { .chroma .cpf { color: #999; font-weight: bold; - font-style: italic + font-style: italic; } /* Generic */ @@ -461,74 +461,74 @@ html:not(.dark) .highlight { .chroma .gd { color: #000; - background-color: #fdd + background-color: #fdd; } /* GenericEmph */ .chroma .ge { color: #000; - font-style: italic + font-style: italic; } /* GenericError */ .chroma .gr { - color: #a00 + color: #a00; } /* GenericHeading */ .chroma .gh { - color: #999 + color: #999; } /* GenericInserted */ .chroma .gi { color: #000; - background-color: #dfd + background-color: #dfd; } /* GenericOutput */ .chroma .go { - color: #888 + color: #888; } /* GenericPrompt */ .chroma .gp { - color: #555 + color: #555; } /* GenericStrong */ .chroma .gs { - font-weight: bold + font-weight: bold; } /* GenericSubheading */ .chroma .gu { - color: #aaa + color: #aaa; } /* GenericTraceback */ .chroma .gt { - color: #a00 + color: #a00; } /* GenericUnderline */ .chroma .gl { - text-decoration: underline + text-decoration: underline; } /* TextWhitespace */ .chroma .w { - color: #bbb + color: #bbb; } } diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/main.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/main.css index a61460cc5..24cac2a94 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/main.css +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/main.css @@ -1,79 +1,45 @@ -:root { - /* TW Neutral */ - --color-neutral-50: 250 250 250; - --color-neutral-100: 245 245 245; - --color-neutral-200: 229 229 229; - --color-neutral-300: 212 212 212; - --color-neutral-400: 163 163 163; - --color-neutral-500: 115 115 115; - --color-neutral-600: 82 82 82; - --color-neutral-700: 64 64 64; - --color-neutral-800: 38 38 38; - --color-neutral-900: 23 23 23; - --color-neutral-950: 10 10 10; +/* + 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 +*/ - /* TW Zinc */ - --color-secondary-50: 250 250 250; - --color-secondary-100: 244 244 245; - --color-secondary-200: 228 228 231; - --color-secondary-300: 212 212 216; - --color-secondary-400: 161 161 170; - --color-secondary-500: 113 113 122; - --color-secondary-600: 82 82 91; - --color-secondary-700: 63 63 70; - --color-secondary-800: 39 39 42; - --color-secondary-900: 24 24 27; - --color-secondary-950: 9 9 11; -} +/* Tailwind CSS v4 Base */ +@import "tailwindcss"; -.hbb-section { - @apply py-24; /* last:mb-0 */ -} +/* Dynamic sources are injected by the css.html partial */ +/* This handles both monorepo dev and end-user environments */ -.section-subheading { - @apply font-bold text-xl; -} +/* Configuration */ +@import "config/tailwind.css"; +@import "config/theme.css"; -/* Fill padding of `.home-section` parent */ - .home-section-bg { - position: absolute; - top: 0; - left: 0; - height: 100%; /* Or fill-available when supported. */ - width: 100%; /* Or fill-available when supported. */ - z-index: -1; /* Place bg div behind content. */ - } +/* Base styles and utilities */ +@import "framework/base.css"; -/* Default background image properties for home sections. */ -.home-section-bg.bg-image { - background-position: center; - background-repeat: no-repeat; - background-size: cover; -} +/* Hugo Blox theme system (color utilities) */ +@import "color-utilities.css"; -.bg-video { - position: absolute; - top: 0; - max-height: initial; /* Override general `video` selector's max-height. */ -} +/* Hugo Blox layout utilities (radius, spacing tokens) */ +@import "layout-utilities.css"; -.bg-video.flip { - transform: rotateY(180deg); -} +/* Hugo Blox framework components */ +@import "framework/components.css"; -/* Create a parallax-like scrolling effect on desktop browsers. */ -.parallax { - background-attachment: fixed; -} +/* Hugo Blox module components */ +@import "components/all.css"; +@import "blox/all.css"; +@import "views/all.css"; +@import "chroma.css"; -/* Workaround issue with mobile browser support for fixed parallax background. -@include media-breakpoint-down(md) { - .parallax { - background-attachment: scroll; - } -} -*/ +/* Hugo Blox Search */ +@import "hb-search.css"; -.powered-by a { - @apply underline text-blue-600 hover:text-blue-800 dark:text-blue-300 dark:hover:text-blue-200; -} +/* Safelist for dynamic classes */ +@import "config/safelist.css"; diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/styles.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/styles.css deleted file mode 100644 index 229972256..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/styles.css +++ /dev/null @@ -1,9 +0,0 @@ -/* Import Tailwind */ -@import "./tailwind.css"; - -/*! Hugo Blox Components | https://hugoblox.com */ -@import "main.css"; -@import "./components/all.css"; -@import "./blox/all.css"; -@import "./views/attachments.css"; -@import "chroma.css"; diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/tailwind.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/tailwind.css deleted file mode 100644 index b5c61c956..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/tailwind.css +++ /dev/null @@ -1,3 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/amber.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/amber.css new file mode 100644 index 000000000..56406ea1e --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/blue.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/blue.css index fdb02f6b1..c502f5a2d 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/blue.css +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/blue.css @@ -1,27 +1,27 @@ /* Hugo Blox color theme: BLUE */ :root { /* TW Blue Palette */ - --color-primary-50: 239 246 255; - --color-primary-100: 219 234 254; - --color-primary-200: 191 219 254; - --color-primary-300: 147 197 253; - --color-primary-400: 96 165 250; - --color-primary-500: 59 130 246; - --color-primary-600: 37 99 235; - --color-primary-700: 29 78 216; - --color-primary-800: 30 64 175; - --color-primary-900: 30 58 138; - --color-primary-950: 23 37 84; + --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 */ - --color-secondary-50: 236 254 255; - --color-secondary-100: 207 250 254; - --color-secondary-200: 165 243 252; - --color-secondary-300: 103 232 249; - --color-secondary-400: 34 211 238; - --color-secondary-500: 6 182 212; - --color-secondary-600: 8 145 178; - --color-secondary-700: 14 116 144; - --color-secondary-800: 21 94 117; - --color-secondary-900: 22 78 99; - --color-secondary-950: 8 51 68; + --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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/cyan.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/cyan.css index edbbe1664..56eaf1a90 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/cyan.css +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/cyan.css @@ -1,14 +1,27 @@ /* Hugo Blox color theme: CYAN */ :root { - --color-primary-50: 236 254 255; - --color-primary-100: 207 250 254; - --color-primary-200: 165 243 252; - --color-primary-300: 103 232 249; - --color-primary-400: 34 211 238; - --color-primary-500: 6 182 212; - --color-primary-600: 8 145 178; - --color-primary-700: 14 116 144; - --color-primary-800: 21 94 117; - --color-primary-900: 22 78 99; - --color-primary-950: 8 51 68; + /* 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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/emerald.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/emerald.css index 0afb08f14..4b171bdf7 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/emerald.css +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/emerald.css @@ -1,14 +1,27 @@ /* Hugo Blox color theme: EMERALD */ :root { - --color-primary-50: 236 253 245; - --color-primary-100: 209 250 229; - --color-primary-200: 167 243 208; - --color-primary-300: 110 231 183; - --color-primary-400: 52 211 153; - --color-primary-500: 16 185 129; - --color-primary-600: 5 150 105; - --color-primary-700: 4 120 87; - --color-primary-800: 6 95 70; - --color-primary-900: 6 78 59; - --color-primary-950: 2 44 34; + /* 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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/fuchsia.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/fuchsia.css new file mode 100644 index 000000000..971b22347 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/green.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/green.css index b08f3bea9..72ac9626d 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/green.css +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/green.css @@ -1,14 +1,27 @@ /* Hugo Blox color theme: GREEN */ :root { - --color-primary-50: 240 253 244; - --color-primary-100: 220 252 231; - --color-primary-200: 187 247 208; - --color-primary-300: 134 239 172; - --color-primary-400: 74 222 128; - --color-primary-500: 34 197 94; - --color-primary-600: 22 163 74; - --color-primary-700: 21 128 61; - --color-primary-800: 22 101 52; - --color-primary-900: 20 83 45; - --color-primary-950: 5 46 22; + /* 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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/indigo.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/indigo.css index cf1c4bdd8..ac731d9d6 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/indigo.css +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/indigo.css @@ -1,14 +1,27 @@ /* Hugo Blox color theme: INDIGO */ :root { - --color-primary-50: 238 242 255; - --color-primary-100: 224 231 255; - --color-primary-200: 199 210 254; - --color-primary-300: 165 180 252; - --color-primary-400: 129 140 248; - --color-primary-500: 99 102 241; - --color-primary-600: 79 70 229; - --color-primary-700: 67 56 202; - --color-primary-800: 55 48 163; - --color-primary-900: 49 46 129; - --color-primary-950: 30 27 75; + /* 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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/lime.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/lime.css new file mode 100644 index 000000000..d72eae573 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/orange.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/orange.css new file mode 100644 index 000000000..5a96ea0bd --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/pink.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/pink.css new file mode 100644 index 000000000..1b74ad2f1 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/purple.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/purple.css index 8f4a4bd34..25e15d2dc 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/purple.css +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/purple.css @@ -1,14 +1,27 @@ /* Hugo Blox color theme: PURPLE */ :root { - --color-primary-50: 250 245 255; - --color-primary-100: 243 232 255; - --color-primary-200: 233 213 255; - --color-primary-300: 216 180 254; - --color-primary-400: 192 132 252; - --color-primary-500: 168 85 247; - --color-primary-600: 147 51 234; - --color-primary-700: 126 34 206; - --color-primary-800: 107 33 168; - --color-primary-900: 88 28 135; - --color-primary-950: 59 7 100; + /* 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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/red.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/red.css index d00af70be..037ce2b10 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/red.css +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/red.css @@ -1,14 +1,27 @@ /* Hugo Blox color theme: RED */ :root { - --color-primary-50: 254 242 242; - --color-primary-100: 254 226 226; - --color-primary-200: 254 202 202; - --color-primary-300: 252 165 165; - --color-primary-400: 248 113 113; - --color-primary-500: 239 68 68; - --color-primary-600: 220 38 38; - --color-primary-700: 185 28 28; - --color-primary-800: 153 27 27; - --color-primary-900: 127 29 29; - --color-primary-950: 69 10 10; + /* 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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/rose.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/rose.css index 80a73088c..c464663f3 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/rose.css +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/rose.css @@ -1,14 +1,27 @@ /* Hugo Blox color theme: ROSE */ :root { - --color-primary-50: 255 241 242; - --color-primary-100: 255 228 230; - --color-primary-200: 254 205 211; - --color-primary-300: 253 164 175; - --color-primary-400: 251 113 133; - --color-primary-500: 244 63 94; - --color-primary-600: 225 29 72; - --color-primary-700: 190 18 60; - --color-primary-800: 159 18 57; - --color-primary-900: 136 19 55; - --color-primary-950: 76 5 25; + /* 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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/sky.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/sky.css index c842d9dd3..d4db5f95f 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/sky.css +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/sky.css @@ -1,14 +1,27 @@ /* Hugo Blox color theme: SKY */ :root { - --color-primary-50: 240 249 255; - --color-primary-100: 224 242 254; - --color-primary-200: 186 230 253; - --color-primary-300: 125 211 252; - --color-primary-400: 56 189 248; - --color-primary-500: 14 165 233; - --color-primary-600: 2 132 199; - --color-primary-700: 3 105 161; - --color-primary-800: 7 89 133; - --color-primary-900: 12 74 110; - --color-primary-950: 8 47 73; + /* 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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/slate.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/slate.css new file mode 100644 index 000000000..4c85e125e --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/stone.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/stone.css new file mode 100644 index 000000000..30044f8cc --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/teal.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/teal.css index 6ea2e7846..5b9e885f4 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/teal.css +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/teal.css @@ -1,14 +1,27 @@ /* Hugo Blox color theme: TEAL */ :root { - --color-primary-50: 240 253 250; - --color-primary-100: 204 251 241; - --color-primary-200: 153 246 228; - --color-primary-300: 94 234 212; - --color-primary-400: 45 212 191; - --color-primary-500: 20 184 166; - --color-primary-600: 13 148 136; - --color-primary-700: 15 118 110; - --color-primary-800: 17 94 89; - --color-primary-900: 19 78 74; - --color-primary-950: 4 47 46; + /* 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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/violet.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/violet.css new file mode 100644 index 000000000..7e13127f6 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/yellow.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/yellow.css new file mode 100644 index 000000000..39714ae7b --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/zinc.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/zinc.css index 6a6210d60..f727ace3c 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/zinc.css +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/themes/zinc.css @@ -1,14 +1,27 @@ /* Hugo Blox color theme: ZINC */ :root { - --color-primary-50: 250 250 250; - --color-primary-100: 244 244 245; - --color-primary-200: 228 228 231; - --color-primary-300: 212 212 216; - --color-primary-400: 161 161 170; - --color-primary-500: 113 113 122; - --color-primary-600: 82 82 91; - --color-primary-700: 63 63 70; - --color-primary-800: 39 39 42; - --color-primary-900: 24 24 27; - --color-primary-950: 9 9 11; + /* 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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/views/all.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/views/all.css new file mode 100644 index 000000000..283d09d6c --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/views/all.css @@ -0,0 +1 @@ +@import "attachments.css"; diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/views/attachments.css b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/views/attachments.css index cbb3a6085..d8f682c66 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/views/attachments.css +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/css/views/attachments.css @@ -1,11 +1,28 @@ .hb-attachment-link { - @apply inline-block text-primary-600 dark:text-primary-400 font-bold uppercase outline-none focus:outline-none mr-1 mb-1 ease-linear transition-all duration-150; + @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 px-3 py-1 text-xs; + @apply p-0 text-xs; } +/* Large links - used on single pages */ .hb-attachment-link-large { - @apply px-8 py-3; + @apply p-0 text-sm; } diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/dist/lib/alpinejs/cdn.min.js b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/dist/lib/alpinejs/cdn.min.js index fd09b4961..0acdcefe1 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/dist/lib/alpinejs/cdn.min.js +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/assets/dist/lib/alpinejs/cdn.min.js @@ -1,5 +1,5 @@ -(()=>{var rt=!1,nt=!1,U=[],it=-1;function qt(e){On(e)}function On(e){U.includes(e)||U.push(e),Cn()}function Ee(e){let t=U.indexOf(e);t!==-1&&t>it&&U.splice(t,1)}function Cn(){!nt&&!rt&&(rt=!0,queueMicrotask(Tn))}function Tn(){rt=!1,nt=!0;for(let e=0;ee.effect(t,{scheduler:r=>{ot?qt(r):r()}}),st=e.raw}function at(e){D=e}function Gt(e){let t=()=>{};return[n=>{let i=D(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),L(i))},i},()=>{t()}]}function Se(e,t){let r=!0,n,i=D(()=>{let o=e();JSON.stringify(o),r?n=o:queueMicrotask(()=>{t(o,n),n=o}),r=!1});return()=>L(i)}var Jt=[],Yt=[],Xt=[];function Zt(e){Xt.push(e)}function ee(e,t){typeof t=="function"?(e._x_cleanups||(e._x_cleanups=[]),e._x_cleanups.push(t)):(t=e,Yt.push(t))}function Ae(e){Jt.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 ct(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 Qt(e){if(e._x_cleanups)for(;e._x_cleanups.length;)e._x_cleanups.pop()()}var lt=new MutationObserver(pt),ut=!1;function le(){lt.observe(document,{subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0}),ut=!0}function ft(){Rn(),lt.disconnect(),ut=!1}var ce=[];function Rn(){let e=lt.takeRecords();ce.push(()=>e.length>0&&pt(e));let t=ce.length;queueMicrotask(()=>{if(ce.length===t)for(;ce.length>0;)ce.shift()()})}function _(e){if(!ut)return e();ft();let t=e();return le(),t}var dt=!1,ve=[];function er(){dt=!0}function tr(){dt=!1,pt(ve),ve=[]}function pt(e){if(dt){ve=ve.concat(e);return}let t=new Set,r=new Set,n=new Map,i=new Map;for(let o=0;os.nodeType===1&&t.add(s)),e[o].removedNodes.forEach(s=>s.nodeType===1&&r.add(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)=>{ct(s,o)}),n.forEach((o,s)=>{Jt.forEach(a=>a(s,o))});for(let o of r)t.has(o)||Yt.forEach(s=>s(o));t.forEach(o=>{o._x_ignoreSelf=!0,o._x_ignore=!0});for(let o of t)r.has(o)||o.isConnected&&(delete o._x_ignoreSelf,delete o._x_ignore,Xt.forEach(s=>s(o)),o._x_ignore=!0,o._x_ignoreSelf=!0);t.forEach(o=>{delete o._x_ignoreSelf,delete o._x_ignore}),t=null,r=null,n=null,i=null}function Ce(e){return F(j(e))}function P(e,t,r){return e._x_dataStack=[t,...j(r||e)],()=>{e._x_dataStack=e._x_dataStack.filter(n=>n!==t)}}function j(e){return e._x_dataStack?e._x_dataStack:typeof ShadowRoot=="function"&&e instanceof ShadowRoot?j(e.host):e.parentNode?j(e.parentNode):[]}function F(e){return new Proxy({objects:e},Mn)}var Mn={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"?Nn: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?Reflect.set(i,t,r,n):Reflect.set(i,t,r)}};function Nn(){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,()=>Dn(n,i),s=>mt(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 Dn(e,t){return t.split(".").reduce((r,n)=>r[n],e)}function mt(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]]={}),mt(e[t[0]],t.slice(1),r)}}var rr={};function y(e,t){rr[e]=t}function ue(e,t){return Object.entries(rr).forEach(([r,n])=>{let i=null;function o(){if(i)return i;{let[s,a]=_t(t);return i={interceptor:Re,...s},ee(t,a),i}}Object.defineProperty(e,`$${r}`,{get(){return n(t,o())},enumerable:!1})}),e}function nr(e,t,r,...n){try{return r(...n)}catch(i){te(i,e,t)}}function te(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} +(()=>{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 De(e){let t=Me;Me=!1;let r=e();return Me=t,r}function M(e,t,r={}){let n;return x(e,t)(i=>n=i,r),n}function x(...e){return ir(...e)}var ir=gt;function or(e){ir=e}function gt(e,t){let r={};ue(r,e);let n=[r,...j(e)],i=typeof t=="function"?Pn(n,t):kn(n,t,e);return nr.bind(null,e,t,i)}function Pn(e,t){return(r=()=>{},{scope:n={},params:i=[]}={})=>{let o=t.apply(F([n,...e]),i);Ne(r,o)}}var ht={};function In(e,t){if(ht[e])return ht[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 te(s,t,e),Promise.resolve()}})();return ht[e]=o,o}function kn(e,t,r){let n=In(t,r);return(i=()=>{},{scope:o={},params:s=[]}={})=>{n.result=void 0,n.finished=!1;let a=F([o,...e]);if(typeof n=="function"){let c=n(n,a).catch(l=>te(l,r,t));n.finished?(Ne(i,n.result,a,s,r),n.result=void 0):c.then(l=>{Ne(i,l,a,s,r)}).catch(l=>te(l,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=>te(s,i,t)):e(o)}else typeof t=="object"&&t instanceof Promise?t.then(o=>e(o)):e(t)}var bt="x-";function C(e=""){return bt+e}function sr(e){bt=e}var Pe={};function d(e,t){return Pe[e]=t,{before(r){if(!Pe[r]){console.warn(String.raw`Cannot find directive \`${r}\`. \`${e}\` will use the default order of execution`);return}let n=W.indexOf(r);W.splice(n>=0?n:W.indexOf("DEFAULT"),0,e)}}}function ar(e){return Object.keys(Pe).includes(e)}function de(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=wt(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(ur((o,s)=>n[o]=s)).filter(dr).map($n(n,r)).sort(jn).map(o=>Ln(e,o))}function wt(e){return Array.from(e).map(ur()).filter(t=>!dr(t))}var xt=!1,fe=new Map,cr=Symbol();function lr(e){xt=!0;let t=Symbol();cr=t,fe.set(t,[]);let r=()=>{for(;fe.get(t).length;)fe.get(t).shift()();fe.delete(t)},n=()=>{xt=!1,r()};e(r),n()}function _t(e){let t=[],r=a=>t.push(a),[n,i]=Gt(e);return t.push(i),[{Alpine:B,effect:n,cleanup:r,evaluateLater:x.bind(x,e),evaluate:M.bind(M,e)},()=>t.forEach(a=>a())]}function Ln(e,t){let r=()=>{},n=Pe[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),xt?fe.get(cr).push(n):n())};return s.runCleanups=o,s}var Ie=(e,t)=>({name:r,value:n})=>(r.startsWith(e)&&(r=r.replace(e,t)),{name:r,value:n}),ke=e=>e;function ur(e=()=>{}){return({name:t,value:r})=>{let{name:n,value:i}=fr.reduce((o,s)=>s(o),{name:t,value:r});return n!==t&&e(n,t),{name:n,value:i}}}var fr=[];function re(e){fr.push(e)}function dr({name:e}){return pr().test(e)}var pr=()=>new RegExp(`^${bt}([^:^.]+)\\b`);function $n(e,t){return({name:r,value:n})=>{let i=r.match(pr()),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 yt="DEFAULT",W=["ignore","ref","data","id","anchor","bind","init","for","model","modelable","transition","show","if",yt,"teleport"];function jn(e,t){let r=W.indexOf(e.type)===-1?yt:e.type,n=W.indexOf(t.type)===-1?yt:t.type;return W.indexOf(r)-W.indexOf(n)}function G(e,t,r={}){e.dispatchEvent(new CustomEvent(t,{detail:r,bubbles:!0,composed:!0,cancelable:!0}))}function T(e,t){if(typeof ShadowRoot=="function"&&e instanceof ShadowRoot){Array.from(e.children).forEach(i=>T(i,t));return}let r=!1;if(t(e,()=>r=!0),r)return;let n=e.firstElementChild;for(;n;)T(n,t,!1),n=n.nextElementSibling}function E(e,...t){console.warn(`Alpine Warning: ${e}`,...t)}var mr=!1;function _r(){mr&&E("Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems."),mr=!0,document.body||E("Unable to initialize. Trying to load Alpine before `` is available. Did you forget to add `defer` in Alpine's ` + {{ break }} + {{ end }} +{{ end }} + {{ $columns := $block.design.columns | default "2" }} {{ if $block.content.title }} @@ -94,7 +120,14 @@
- {{ $config := dict "columns" ($block.design.columns | default 2) "len" (len $query) "fill_image" ($block.design.fill_image | default true) }} + {{ $config := dict + "columns" ($block.design.columns | default 2) + "len" (len $query) + "fill_image" ($block.design.fill_image | default true) + "show_date" ($block.design.show_date | default true) + "show_read_time" ($block.design.show_read_time | default true) + "show_read_more" ($block.design.show_read_more | default true) + }} {{ partial "functions/render_view" (dict "fragment" "start" "page" $block "item" . "view" $view "config" $config) }} {{ range $index, $item := $query }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/collection/manifest.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/collection/manifest.json new file mode 100644 index 000000000..fcf4d79bb --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/collection/manifest.json @@ -0,0 +1,13 @@ +{ + "id": "collection", + "name": "Collection", + "version": "1.0.0", + "license": "MIT", + "category": "content", + "tags": ["collection", "blog", "publications", "filter", "sort", "content-display", "archive"], + "description": "Display filtered and sorted collections of pages with customizable views and pagination", + "author": "Hugo Blox", + "homepage": "https://hugoblox.com/blocks/", + "repository": "https://github.com/HugoBlox/hugo-blox-builder", + "keywords": ["hugo", "static-site", "content", "blog", "publications", "filtering"] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/collection/preview.svg b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/collection/preview.svg new file mode 100644 index 000000000..954d5f64e --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/collection/preview.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/collection/schema.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/collection/schema.json new file mode 100644 index 000000000..ebc0034f0 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/collection/schema.json @@ -0,0 +1,117 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://hugoblox.com/schemas/blocks/collection.json", + "title": "Collection Block Schema", + "description": "Schema for the Collection block - displays filtered and sorted collections of pages", + "allOf": [ + { + "$ref": "../shared/schemas/base-block.json" + }, + { + "type": "object", + "properties": { + "block": { + "const": "collection" + }, + "content": { + "type": "object", + "description": "Content configuration for the collection block", + "properties": { + "title": { + "type": "string", + "description": "Section title (supports Markdown)" + }, + "text": { + "type": "string", + "description": "Section description (supports Markdown)" + }, + "count": { + "type": "number", + "description": "Maximum number of items to display", + "minimum": 0, + "default": 5 + }, + "offset": { + "type": "number", + "description": "Number of items to skip", + "minimum": 0, + "default": 0 + }, + "page_type": { + "type": "string", + "description": "Filter by page type (e.g., 'post', 'publication')" + }, + "sort_by": { + "type": "string", + "description": "Field to sort by", + "default": "Date" + }, + "sort_ascending": { + "type": "boolean", + "description": "Sort in ascending order", + "default": false + }, + "order": { + "type": "string", + "enum": ["asc", "desc"], + "description": "Sort order (alternative to sort_ascending)" + }, + "filters": { + "type": "object", + "description": "Content filtering options", + "properties": { + "folders": { + "type": "array", + "description": "Filter by content folders/sections", + "items": { + "type": "string" + } + }, + "tag": { + "type": "string", + "description": "Filter by tag" + }, + "category": { + "type": "string", + "description": "Filter by category" + }, + "publication_type": { + "type": "string", + "description": "Filter by publication type" + }, + "exclude_publication_type": { + "type": "string", + "description": "Exclude specific publication type" + }, + "author": { + "type": "string", + "description": "Filter by author" + }, + "featured_only": { + "type": "boolean", + "description": "Show only featured content", + "default": false + }, + "exclude_featured": { + "type": "boolean", + "description": "Exclude featured content", + "default": false + }, + "exclude_past": { + "type": "boolean", + "description": "Exclude past-dated content", + "default": false + }, + "exclude_future": { + "type": "boolean", + "description": "Exclude future-dated content", + "default": false + } + } + } + } + } + } + } + ] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/contact-info/README.md b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/contact-info/README.md new file mode 100644 index 000000000..d9f820cbf --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/contact-info/README.md @@ -0,0 +1,139 @@ +# Contact Info Block + +Display comprehensive contact information for your lab or organization with a modern, responsive card layout. + +## Features + +- **Dual Card Layout**: Separate cards for location and contact methods +- **Rich Information Display**: Address, office hours, phone, email, social media +- **Interactive Elements**: Click-to-call, email links, map integration +- **Optional Contact Form**: Built-in contact form support +- **Map Integration**: External map links or embedded maps +- **Social Media Links**: Connect your social profiles +- **Prospective Members Section**: Dedicated area for recruitment +- **Fully Responsive**: Beautiful on all devices +- **Dark Mode Support**: Seamless light/dark theme switching + +## Usage + +```yaml +sections: + - block: contact-info + content: + title: Contact Us + subtitle: Get in touch with our research team + visit_title: Visit Our Lab + connect_title: Connect With Us + address: + lines: + - Smith Laboratory + - Department of Computer Science + - University of Excellence + - 123 Science Drive + - Excellence City, EC 12345 + - United States + office_hours: + - "Monday - Friday: 9:00 AM - 5:00 PM" + - "Lab Meetings: Fridays 2:00 PM" + email: lab@example.edu + phone: "+1 (555) 123-4567" + social: + - icon: brands/x + url: https://x.com/SmithLabResearch + - icon: brands/linkedin + url: https://linkedin.com/company/smith-lab + - icon: brands/github + url: https://github.com/smith-lab + prospective: + title: Prospective Members + text: Interested in joining our lab? We're looking for motivated researchers. + button: + text: View Open Positions + url: /opportunities + map_url: https://maps.google.com/?q=University+of+Excellence + show_form: false + design: + css_class: "bg-gray-50 dark:bg-gray-900" + spacing: + padding: ["3rem", 0, "3rem", 0] +``` + +## Options + +### Content Options + +- **title**: Main heading for the contact section +- **subtitle**: Optional subtitle text +- **visit_title**: Heading for the location card (default: "Visit Us") +- **connect_title**: Heading for the contact card (default: "Connect") +- **address**: Physical address with multiple lines + - `lines`: Array of address line strings +- **office_hours**: Array of office hour strings +- **email**: Contact email address +- **phone**: Contact phone number +- **social**: Array of social media links + - `icon`: Icon identifier (e.g., "brands/x", "brands/linkedin") + - `url`: Social media profile URL +- **prospective**: Information for prospective members + - `title`: Section heading + - `text`: Description text + - `button`: CTA button with `text` and `url` +- **map_url**: External map service link +- **map_embed**: HTML embed code for inline map +- **show_form**: Display contact form (default: false) +- **form_action**: Form submission endpoint + +### Design Options + +Standard design options apply including: +- `css_class`: Background and styling classes +- `spacing`: Padding configuration + +## Map Integration + +### External Map Link +Provide a `map_url` to link to Google Maps, Apple Maps, or other services: + +```yaml +map_url: "https://maps.google.com/?q=Your+Location" +``` + +### Embedded Map +For inline maps, provide the iframe HTML in `map_embed`: + +```yaml +map_embed: | + +``` + +## Contact Form + +Enable the built-in contact form: + +```yaml +show_form: true +form_action: "https://formspree.io/f/YOUR_FORM_ID" +``` + +Note: You'll need to set up a form handler service like Formspree, Netlify Forms, or custom endpoint. + +## Styling + +The block uses modern card-based design with: +- Subtle shadows and hover effects +- Icon accents for visual hierarchy +- Consistent spacing and typography +- Fully responsive grid layout +- Dark mode optimized colors + +## Best Practices + +1. **Complete Information**: Provide all relevant contact methods +2. **Office Hours**: Clearly state availability +3. **Social Proof**: Link active social media profiles +4. **Map Integration**: Help visitors find your location +5. **Recruitment CTA**: Include prospective member information +6. **Form Handler**: Set up proper form submission handling +7. **Mobile Testing**: Verify all links work on mobile devices diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/contact-info/block.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/contact-info/block.html new file mode 100644 index 000000000..f1c746953 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/contact-info/block.html @@ -0,0 +1,184 @@ +{{/* Hugo Blox: Contact Info Block */}} +{{/* Documentation: https://hugoblox.com/blocks/ */}} +{{/* License: https://github.com/HugoBlox/hugo-blox-builder/blob/main/LICENSE.md */}} + +{{/* Initialise */}} +{{ $page := .wcPage }} +{{ $block := .wcBlock }} + +{{ $title := $block.content.title | default "Contact Us" | emojify | $page.RenderString }} +{{ $subtitle := $block.content.subtitle | emojify | $page.RenderString }} + +
+ + {{/* Section Header */}} +
+ {{ with $title }} +

+ {{ . }} +

+ {{ end }} + + {{ with $subtitle }} +

+ {{ . }} +

+ {{ end }} +
+ + {{/* Contact Cards Grid */}} +
+ + {{/* Visit Us Card */}} +
+
+
+ {{ partial "functions/get_icon" (dict "name" "hero/map-pin" "attributes" "class=\"w-6 h-6 text-primary-600 dark:text-primary-400\"") }} +
+

+ {{ $block.content.visit_title | default "Visit Us" }} +

+
+ +
+ {{ with $block.content.address }} +
+ {{ range .lines }} +

{{ . }}

+ {{ end }} +
+ {{ end }} + + {{ with $block.content.office_hours }} +
+

Office Hours

+
+ {{ range . }} +

{{ . }}

+ {{ end }} +
+
+ {{ end }} + + {{ with $block.content.map_url }} + + {{ partial "functions/get_icon" (dict "name" "hero/map" "attributes" "class=\"w-5 h-5 mr-2\"") }} + View on Map + + {{ end }} +
+
+ + {{/* Connect Card */}} +
+
+
+ {{ partial "functions/get_icon" (dict "name" "hero/chat-bubble-left-right" "attributes" "class=\"w-6 h-6 text-primary-600 dark:text-primary-400\"") }} +
+

+ {{ $block.content.connect_title | default "Connect" }} +

+
+ +
+ {{/* Contact Methods */}} +
+ {{ with $block.content.email }} +
+ {{ partial "functions/get_icon" (dict "name" "hero/envelope" "attributes" "class=\"w-5 h-5 text-gray-500 dark:text-gray-400 mr-3\"") }} + + {{ . }} + +
+ {{ end }} + + {{ with $block.content.phone }} +
+ {{ partial "functions/get_icon" (dict "name" "hero/phone" "attributes" "class=\"w-5 h-5 text-gray-500 dark:text-gray-400 mr-3\"") }} + + {{ . }} + +
+ {{ end }} + + {{/* Social Media */}} + {{ with $block.content.social }} + + {{ end }} +
+ + {{/* Prospective Members */}} + {{ with $block.content.prospective }} +
+

{{ .title | default "Prospective Members" }}

+

{{ .text }}

+ {{ with .button }} + + {{ partial "functions/get_icon" (dict "name" "hero/user-plus" "attributes" "class=\"w-5 h-5 mr-2\"") }} + {{ .text }} + + {{ end }} +
+ {{ end }} +
+
+
+ + {{/* Optional Map Embed */}} + {{ with $block.content.map_embed }} +
+
+ {{ . | safeHTML }} +
+
+ {{ end }} + + {{/* Contact Form (optional) */}} + {{ if $block.content.show_form }} +
+
+

Send us a Message

+
+
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+ +
+
+
+ {{ end }} +
diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/contact-info/manifest.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/contact-info/manifest.json new file mode 100644 index 000000000..6bbb58131 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/contact-info/manifest.json @@ -0,0 +1,13 @@ +{ + "id": "contact-info", + "name": "Contact Info", + "version": "1.0.0", + "license": "MIT", + "category": "content", + "tags": ["contact", "information", "address", "location", "lab", "research", "organization"], + "description": "Display contact information with modern card layout, including address, phone, email, social media, and optional contact form", + "author": "Hugo Blox", + "homepage": "https://hugoblox.com/blocks/", + "repository": "https://github.com/HugoBlox/hugo-blox-builder", + "keywords": ["hugo", "static-site", "contact", "information", "address", "research-lab"] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/contact-info/schema.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/contact-info/schema.json new file mode 100644 index 000000000..d8e6a222d --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/contact-info/schema.json @@ -0,0 +1,130 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://hugoblox.com/schemas/blocks/contact-info.json", + "title": "Contact Info Block Schema", + "description": "Schema for the Contact Info block - displays lab contact information in a modern card layout", + "allOf": [ + { + "$ref": "../shared/schemas/base-block.json" + }, + { + "type": "object", + "properties": { + "block": { + "const": "contact-info" + }, + "content": { + "type": "object", + "description": "Content configuration for the contact info block", + "properties": { + "title": { + "type": "string", + "description": "Main section title", + "default": "Contact Us" + }, + "subtitle": { + "type": "string", + "description": "Section subtitle" + }, + "visit_title": { + "type": "string", + "description": "Title for the visit section", + "default": "Visit Us" + }, + "connect_title": { + "type": "string", + "description": "Title for the connect section", + "default": "Connect" + }, + "address": { + "type": "object", + "description": "Physical address information", + "properties": { + "lines": { + "type": "array", + "description": "Address lines", + "items": { + "type": "string" + } + } + } + }, + "office_hours": { + "type": "array", + "description": "Office hours information", + "items": { + "type": "string" + } + }, + "email": { + "type": "string", + "description": "Contact email address" + }, + "phone": { + "type": "string", + "description": "Contact phone number" + }, + "social": { + "type": "array", + "description": "Social media links", + "items": { + "type": "object", + "properties": { + "icon": { + "type": "string", + "description": "Icon name (e.g., 'brands/x', 'brands/linkedin')" + }, + "url": { + "type": "string", + "description": "Social media URL" + } + } + } + }, + "prospective": { + "type": "object", + "description": "Information for prospective members", + "properties": { + "title": { + "type": "string", + "default": "Prospective Members" + }, + "text": { + "type": "string" + }, + "button": { + "type": "object", + "properties": { + "text": { + "type": "string" + }, + "url": { + "type": "string" + } + } + } + } + }, + "map_url": { + "type": "string", + "description": "URL to external map service" + }, + "map_embed": { + "type": "string", + "description": "HTML embed code for map (e.g., Google Maps iframe)" + }, + "show_form": { + "type": "boolean", + "description": "Show contact form", + "default": false + }, + "form_action": { + "type": "string", + "description": "Form submission URL" + } + } + } + } + } + ] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-button-list/README.md b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-button-list/README.md new file mode 100644 index 000000000..d7e153d43 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-button-list/README.md @@ -0,0 +1,50 @@ +# CTA Button List Block + +**Drive action with beautiful, conversion-focused button lists** + +Transform your visitors into engaged users with the CTA Button List block - a sleek, modern way to present multiple call-to-action options in an organized, visually appealing format. + +## ✨ Key Features + +- **Icon Integration**: Add engaging icons to every button for visual impact +- **Hover Animations**: Smooth scale and transition effects that invite interaction +- **Responsive Design**: Perfect button sizing and spacing across all devices +- **External Link Support**: Built-in support for external links with proper security attributes +- **Markdown Support**: Rich text formatting for button labels +- **Clean Styling**: Modern card-based design with subtle shadows and borders + +## 🎯 Perfect For + +- **Social Media Links**: Create an elegant "link in bio" style page +- **Resource Collections**: Direct visitors to your key resources and tools +- **Service Offerings**: Showcase different services or products you offer +- **Contact Options**: Multiple ways for visitors to reach you +- **Download Centers**: Organize files, guides, and resources for easy access +- **Partner Links**: Highlight collaborations and partnerships + +## 🚀 Why Choose CTA Button List? + +**High Conversion Design**: Proven button styling that encourages clicks and engagement + +**Flexible & Scalable**: Add as many buttons as needed without compromising design + +**Professional Appeal**: Clean, modern aesthetic that works for any industry or use case + +**Easy Maintenance**: Simple configuration that keeps your links organized and up-to-date + +## 📊 Conversion Benefits + +- Increased click-through rates with prominent, well-designed buttons +- Better user experience with clear visual hierarchy +- Reduced bounce rates by providing multiple engagement paths +- Improved accessibility with proper labeling and focus states + +## 💡 Pro Tips + +- Use contrasting icons to make each button distinct +- Keep button text concise but descriptive +- Order buttons by priority or user journey importance +- Test different icon styles to match your brand aesthetic + +Perfect for entrepreneurs, creators, businesses, and anyone who wants to turn their website visitors into active participants in their ecosystem. + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/cta-button-list.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-button-list/block.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/cta-button-list.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-button-list/block.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-button-list/manifest.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-button-list/manifest.json new file mode 100644 index 000000000..b77093bd7 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-button-list/manifest.json @@ -0,0 +1,13 @@ +{ + "id": "cta-button-list", + "name": "CTA Button List", + "version": "1.0.0", + "license": "MIT", + "category": "marketing", + "tags": ["cta", "buttons", "links", "social", "marketing", "conversion", "list"], + "description": "Create compelling vertical lists of call-to-action buttons with icons and hover effects", + "author": "Hugo Blox", + "homepage": "https://hugoblox.com/blocks/", + "repository": "https://github.com/HugoBlox/hugo-blox-builder", + "keywords": ["hugo", "cta", "buttons", "conversion", "marketing", "social-links"] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-button-list/preview.svg b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-button-list/preview.svg new file mode 100644 index 000000000..d8f86b16f --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-button-list/preview.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-button-list/schema.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-button-list/schema.json new file mode 100644 index 000000000..23fa172cc --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-button-list/schema.json @@ -0,0 +1,48 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://hugoblox.com/schemas/blocks/cta-button-list.json", + "title": "CTA Button List Block Schema", + "description": "Schema for the CTA Button List block - displays a vertical list of call-to-action buttons", + "allOf": [ + { + "$ref": "../shared/schemas/base-block.json" + }, + { + "type": "object", + "properties": { + "block": { + "const": "cta-button-list" + }, + "content": { + "type": "object", + "description": "Content configuration for the CTA button list block", + "properties": { + "buttons": { + "type": "array", + "description": "Array of buttons to display", + "items": { + "type": "object", + "properties": { + "url": { + "type": "string", + "description": "Button URL" + }, + "text": { + "type": "string", + "description": "Button text (supports Markdown)" + }, + "icon": { + "type": "string", + "description": "Optional button icon (icon pack format: pack/icon-name)" + } + }, + "required": ["url", "text"] + } + } + }, + "required": ["buttons"] + } + } + } + ] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-card/README.md b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-card/README.md new file mode 100644 index 000000000..eade1ad1c --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-card/README.md @@ -0,0 +1,211 @@ +# CTA Card Block + +**Create irresistible calls-to-action that convert** + +Make a bold statement and drive immediate action with the CTA Card block - a high-impact, conversion-optimized component designed to capture attention and compel your visitors to take the next step. + +## ✨ Key Features + +- **🪟 2025 Glassmorphism**: Modern translucent backgrounds with backdrop blur effects +- **🎨 Gradient Typography**: Beautiful gradient text effects for maximum visual appeal +- **🔗 Smart Icon Support**: Add icons to buttons with automatic sizing and hover animations +- **📱 Enhanced Responsiveness**: Fluid typography scaling from mobile to desktop +- **✨ Micro-Interactions**: Smooth hover animations with glow effects and transforms +- **🎯 Customizable Styling**: Multiple glassmorphism presets or custom CSS classes +- **♿ Accessibility Enhanced**: Improved focus states and semantic markup + +## 🎯 Perfect For + +- **Newsletter Signups**: Encourage email subscriptions with compelling copy +- **Product Launches**: Announce new products or services with impact +- **Event Promotions**: Drive registrations and attendance +- **Lead Generation**: Capture leads with irresistible offers +- **Content Downloads**: Promote whitepapers, guides, and resources +- **Service Inquiries**: Convert visitors into prospects and clients + +## 🚀 Why Choose CTA Card? + +**Maximum Visual Impact**: Bold design that stands out on any page and captures immediate attention + +**Conversion Focused**: Every element is optimized for driving action, from typography to button placement + +**Brand Flexible**: Fully customizable styling to match your brand colors and aesthetic + +**Proven Results**: Based on high-converting design patterns used by top marketing teams + +## 📊 Conversion Psychology + +- **Contrast Principle**: Dark background creates visual separation and focus +- **Size Hierarchy**: Large headlines establish clear information priority +- **Action Clarity**: Single, prominent button reduces decision paralysis +- **Emotional Appeal**: Space for compelling copy that connects with your audience + +## 💡 Best Practices + +- Keep headlines short and benefit-focused +- Use action-oriented button text ("Get Started", "Download Now", "Join Today") +- Ensure your copy addresses a specific pain point or desire +- Test different background colors to maximize contrast with your site + +Transform casual visitors into engaged users with a CTA Card that's impossible to ignore. + +## 🎨 2025 Glassmorphism Styling Options + +### **Glassmorphism Primary** (Recommended) + +```yaml +- block: cta-card + content: + title: 'Ready to Get Started?' + text: 'Join thousands of users creating amazing websites' + button: + text: 'Get Started Free' + url: '/signup/' + icon: 'hero/rocket-launch' + design: + card: + css_class: 'cta-glassmorphism' + text_color: 'auto' # auto|light|dark + overlay_opacity: 0.15 # 0.0-1.0 for contrast control + background: + gradient: + start: 'primary-500' + end: 'primary-700' + direction: 135 + image: + filename: 'textures/noise-pattern.svg' + size: '32px' + position: 'repeat' +``` + +### **Glassmorphism Dark** + +```yaml +design: + card: + css_class: 'glassmorphism-dark glass-ring glass-shadow text-white' +``` + +### **Glassmorphism Light** + +```yaml +design: + card: + css_class: 'glassmorphism-light glass-ring glass-shadow text-gray-900' +``` + +### **Custom Background + Glassmorphism** + +```yaml +design: + card: + css_class: 'glassmorphism-secondary noise-texture text-white' + background: + color: 'primary-600' + image: + filename: 'your-background.jpg' + size: 'cover' + position: 'center' + opacity: 0.8 + gradient: + start: 'primary-500' + end: 'secondary-600' + direction: 135 +``` + +## 🔗 Icon Support + +Add icons to your CTA buttons: + +```yaml +button: + text: 'Download Now' + url: '/download/' + icon: 'hero/download' # Download icon + +button: + text: 'Contact Us' + url: 'mailto:hello@example.com' + icon: 'hero/paper-airplane' # Email icon + +button: + text: 'Learn More' + url: '#features' + icon: 'hero/arrow-right' # Arrow icon +``` + +## 🎨 Contrast Control Options + +### **Text Color Modes** + +```yaml +card: + text_color: 'auto' # Auto-detects based on background brightness + text_color: 'light' # Force white text (for dark backgrounds) + text_color: 'dark' # Force dark text (for light backgrounds) +``` + +### **Overlay Opacity Control** + +```yaml +card: + overlay_opacity: 0.1 # Subtle glassmorphism (better for text contrast) + overlay_opacity: 0.15 # Default glassmorphism + overlay_opacity: 0.25 # Strong glassmorphism (may reduce contrast) + overlay_opacity: 0.05 # Minimal glassmorphism (maximum contrast) +``` + +### **Perfect Contrast Examples** + +**Dark Background (Light Text):** + +```yaml +design: + card: + css_class: 'cta-glassmorphism' + text_color: 'light' + overlay_opacity: 0.1 + background: + gradient: + start: 'gray-800' + end: 'gray-900' +``` + +**Light Background (Dark Text):** + +```yaml +design: + card: + css_class: 'cta-glassmorphism' + text_color: 'dark' + overlay_opacity: 0.2 + background: + gradient: + start: 'gray-100' + end: 'gray-300' +``` + +**Vibrant Background (Auto Detection):** + +```yaml +design: + card: + css_class: 'cta-glassmorphism' + text_color: 'auto' # Will detect primary-500 as medium and use adaptive colors + overlay_opacity: 0.15 + background: + gradient: + start: 'primary-500' + end: 'primary-700' +``` + +## ✨ Available Glassmorphism Classes + +- **`cta-glassmorphism`**: Smart adaptive glassmorphism with contrast controls +- **`glassmorphism-primary`**: Primary color glassmorphism (legacy) +- **`glassmorphism-secondary`**: Secondary color glassmorphism (legacy) +- **`glassmorphism-dark`**: Dark glassmorphism (legacy) +- **`glassmorphism-light`**: Light glassmorphism (legacy) +- **`glass-ring`**: Enhanced ring borders +- **`glass-shadow`**: Multi-layer glass shadows +- **`noise-texture`**: Subtle noise texture overlay diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-card/block.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-card/block.html new file mode 100644 index 000000000..99bcdd02b --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-card/block.html @@ -0,0 +1,105 @@ +{{/* Hugo Blox: CTA Card */}} +{{/* Documentation: https://hugoblox.com/blocks/ */}} +{{/* License: https://github.com/HugoBlox/hugo-blox-builder/blob/main/LICENSE.md */}} + +{{/* Initialise */}} +{{ $page := .wcPage }} +{{ $block := .wcBlock }} + +{{ $title := $block.content.title | emojify | $page.RenderString }} +{{ $text := $block.content.text | emojify | $page.RenderString | safeHTML }} +{{ $card_class := $block.design.card.css_class }} +{{ $card_style := $block.design.card.css_style }} + +{{/* Contrast and accessibility controls */}} +{{ $text_color_mode := $block.design.card.text_color | default "auto" }} +{{ $overlay_opacity := $block.design.card.overlay_opacity | default 0.15 }} + +{{/* Auto-detect text color based on background */}} +{{ $text_classes := "" }} +{{ $button_classes := "" }} +{{ if eq $text_color_mode "light" }} + {{ $text_classes = "text-white" }} + {{ $button_classes = "text-gray-900" }} +{{ else if eq $text_color_mode "dark" }} + {{ $text_classes = "text-gray-900" }} + {{ $button_classes = "text-gray-900" }} +{{ else }} + {{/* Auto mode - detect based on gradient colors */}} + {{ $is_dark_bg := false }} + {{ with $block.design.background.gradient.start }} + {{ if or (hasPrefix . "primary-7") (hasPrefix . "primary-8") (hasPrefix . "primary-9") (hasPrefix . "secondary-7") (hasPrefix . "secondary-8") (hasPrefix . "secondary-9") }} + {{ $is_dark_bg = true }} + {{ end }} + {{ end }} + {{ if $is_dark_bg }} + {{ $text_classes = "text-white" }} + {{ $button_classes = "text-gray-900" }} + {{ else }} + {{ $text_classes = "text-gray-900 dark:text-white" }} + {{ $button_classes = "text-gray-900 dark:text-gray-100" }} + {{ end }} +{{ end }} + + +{{/* Modern 2025 CTA Card - Background controlled via design.background in front matter */}} +{{ $custom_style := printf "--glassmorphism-opacity: %s;" (string $overlay_opacity) }} +{{ if $card_style }} + {{ $custom_style = printf "%s%s" $custom_style $card_style }} +{{ end }} + +
+ + {{/* Modern Typography Hierarchy - Responsive text colors */}} +

+ {{ $title }} +

+ + {{/* Enhanced Text with Better Spacing - Responsive colors */}} +
+ {{ $text }} +
+ + {{ with $block.content.button }} + {{/* Modern 2025 Button Container */}} +
+ {{ $button_link := .url }} + {{ $button_scheme := (urls.Parse $button_link).Scheme }} + {{ $button_target := "" }} + {{ if not $button_scheme }} + {{/* Check if it's a hash fragment (page anchor) */}} + {{ if hasPrefix $button_link "#" }} + {{/* Keep hash fragments as-is */}} + {{ $button_link = $button_link }} + {{ else }} + {{/* Apply relLangURL for relative paths */}} + {{ $button_link = $button_link | relLangURL }} + {{ end }} + {{ else if in (slice "http" "https") $button_scheme }} + {{ $button_target = "target=\"_blank\" rel=\"noopener\"" }} + {{ end }} + + {{/* 2025 Glassmorphism Button */}} + + + {{/* Button Background with Glassmorphism */}} +
+ + {{/* Button Content */}} + {{ .text }} + {{ with .icon }} + + {{ partial "functions/get_icon" (dict "name" . "attributes" "style=\"height: 1.25em\" class='inline-block'") }} + + {{ end }} + + {{/* Subtle glow effect */}} +
+
+
+ {{ end }} + +
diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-card/manifest.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-card/manifest.json new file mode 100644 index 000000000..bab2f1fd5 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-card/manifest.json @@ -0,0 +1,13 @@ +{ + "id": "cta-card", + "name": "CTA Card", + "version": "1.0.0", + "license": "MIT", + "category": "marketing", + "tags": ["cta", "card", "conversion", "marketing", "hero", "call-to-action", "banner"], + "description": "Create high-impact call-to-action cards with bold typography and compelling buttons", + "author": "Hugo Blox", + "homepage": "https://hugoblox.com/blocks/", + "repository": "https://github.com/HugoBlox/hugo-blox-builder", + "keywords": ["hugo", "cta", "marketing", "conversion", "banner", "card"] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-card/preview.svg b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-card/preview.svg new file mode 100644 index 000000000..f7e205512 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-card/preview.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-card/schema.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-card/schema.json new file mode 100644 index 000000000..c7f68feff --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-card/schema.json @@ -0,0 +1,148 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://hugoblox.com/schemas/blocks/cta-card.json", + "title": "CTA Card Block Schema", + "description": "Schema for the CTA Card block - displays a prominent call-to-action card with title, text, and button", + "allOf": [ + { + "$ref": "../shared/schemas/base-block.json" + }, + { + "type": "object", + "properties": { + "block": { + "const": "cta-card" + }, + "content": { + "type": "object", + "description": "Content configuration for the CTA card block", + "properties": { + "title": { + "type": "string", + "description": "Card title (supports Markdown)" + }, + "text": { + "type": "string", + "description": "Card description text (supports Markdown)" + }, + "button": { + "type": "object", + "description": "Call-to-action button", + "properties": { + "url": { + "type": "string", + "description": "Button URL (supports hash fragments, relative paths, and absolute URLs)" + }, + "text": { + "type": "string", + "description": "Button text" + }, + "icon": { + "type": "string", + "description": "Optional button icon (icon pack format: pack/icon-name)" + } + }, + "required": ["url", "text"] + } + } + }, + "design": { + "type": "object", + "description": "Design and styling options", + "properties": { + "card": { + "type": "object", + "description": "Card-specific styling", + "properties": { + "css_class": { + "type": "string", + "description": "CSS classes to apply to the card (supports glassmorphism classes: glassmorphism-primary, glassmorphism-dark, glass-ring, glass-shadow, noise-texture)" + }, + "text_color": { + "type": "string", + "enum": ["auto", "light", "dark"], + "description": "Text color mode for optimal contrast (auto detects based on background)", + "default": "auto" + }, + "overlay_opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "description": "Glassmorphism overlay opacity for fine-tuning contrast", + "default": 0.15 + }, + "css_style": { + "type": "string", + "description": "Custom CSS styles to apply to the card" + } + } + }, + "background": { + "type": "object", + "description": "Modern background options supporting layered effects", + "properties": { + "color": { + "type": "string", + "description": "Background color" + }, + "gradient": { + "type": "object", + "description": "Modern gradient syntax for 2025 glassmorphism", + "properties": { + "start": { + "type": "string", + "description": "Gradient start color (e.g., 'primary-500', 'blue-600')" + }, + "end": { + "type": "string", + "description": "Gradient end color (e.g., 'primary-700', 'blue-800')" + }, + "direction": { + "type": "number", + "description": "Gradient angle in degrees (default: 90)", + "default": 90 + } + } + }, + "image": { + "type": "object", + "description": "Background image (layers with gradient for glassmorphism)", + "properties": { + "filename": { + "type": "string", + "description": "Image filename in assets/media/" + }, + "size": { + "type": "string", + "enum": ["cover", "contain", "auto", "100px", "50%"], + "description": "Background size", + "default": "cover" + }, + "position": { + "type": "string", + "enum": ["center", "top", "bottom", "left", "right", "repeat", "top left", "top right", "bottom left", "bottom right"], + "description": "Background position (use 'repeat' for tiling textures)", + "default": "center" + }, + "repeat": { + "type": "string", + "enum": ["repeat", "repeat-x", "repeat-y", "no-repeat"], + "description": "Explicit background-repeat control", + "default": "no-repeat" + }, + "opacity": { + "type": "number", + "minimum": 0, + "maximum": 1, + "description": "Image opacity for subtle textures" + } + } + } + } + } + } + } + } + } + ] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-image-paragraph/README.md b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-image-paragraph/README.md new file mode 100644 index 000000000..9a2ebdc15 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-image-paragraph/README.md @@ -0,0 +1,51 @@ +# CTA Image Paragraph Block + +**Tell your story with stunning visuals and compelling copy** + +Engage your audience with the CTA Image Paragraph block - a powerful storytelling component that combines beautiful imagery, descriptive content, feature highlights, and strategic calls-to-action in an alternating layout that keeps visitors scrolling. + +## ✨ Key Features + +- **Alternating Layout**: Images automatically alternate left/right for visual rhythm +- **Responsive Images**: Smart image processing with multiple sizes and WebP support +- **Feature Lists**: Highlight key benefits with customizable icons +- **GIF Support**: Full support for animated GIFs alongside static images +- **CTA Integration**: Strategic button placement for maximum conversion +- **Markdown Rich**: Full Markdown support for titles and descriptions +- **Mobile Optimized**: Stacks beautifully on mobile devices + +## 🎯 Perfect For + +- **Product Showcases**: Highlight different product features with supporting visuals +- **Service Explanations**: Break down complex services into digestible sections +- **Company Story**: Tell your brand story with compelling narratives and imagery +- **Feature Announcements**: Introduce new features with visual demonstrations +- **Process Explanations**: Guide users through multi-step processes +- **Benefits Highlighting**: Showcase the value proposition of your offerings + +## 🚀 Why Choose CTA Image Paragraph? + +**Visual Storytelling**: Combine the power of images and words for maximum engagement + +**Conversion Optimized**: Strategic placement of features and CTAs guides users toward action + +**Professional Polish**: Alternating layout creates visual interest and professional appearance + +**Content Flexibility**: Support any number of sections with unique images, copy, and features + +## 📊 Engagement Benefits + +- **Higher Time on Page**: Alternating content keeps visitors engaged longer +- **Better Comprehension**: Visual-text combinations improve understanding and retention +- **Increased Conversions**: Strategic CTA placement at optimal engagement points +- **Mobile Excellence**: Responsive design ensures great experience on all devices + +## 💡 Design Psychology + +- **Visual Rhythm**: Alternating layout creates pleasing visual flow +- **Information Chunking**: Breaking content into sections improves readability +- **Social Proof**: Feature lists build credibility and trust +- **Action Momentum**: Multiple CTAs capture interest at different engagement levels + +Perfect for SaaS companies, service providers, product teams, and anyone who needs to explain complex offerings through engaging visual storytelling. + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/cta-image-paragraph.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-image-paragraph/block.html similarity index 71% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/cta-image-paragraph.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-image-paragraph/block.html index fcfa7090f..950eaa044 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/cta-image-paragraph.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-image-paragraph/block.html @@ -13,12 +13,30 @@ {{ $image_path := path.Join "media" .image }} {{ $image := resources.GetMatch $image_path }} {{ with $image }} - {{ $image = $image.Process "Resize 800x webp" }} +
+ {{ if ne $image.MediaType.SubType "gif" }} + {{ $responsive := partial "functions/process_responsive_image.html" (dict + "image" $image + "mode" "fit" + "sizes" (slice 400 600 800 1200) + ) }} + {{$title | plainify}} + {{ else }} + {{$title | plainify}} + {{ end }} {{ else }} {{ errorf "%s uses the `cta-image-paragraph` blox which specifies a non-existent `image` at `assets/%s`. Please add the image to this folder and try again." $page.File.Path $image_path }} {{ end }} -
- {{$title | plainify}}

{{$title}}

{{$text}}

diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-image-paragraph/manifest.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-image-paragraph/manifest.json new file mode 100644 index 000000000..f3b1de997 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-image-paragraph/manifest.json @@ -0,0 +1,13 @@ +{ + "id": "cta-image-paragraph", + "name": "CTA Image Paragraph", + "version": "1.0.0", + "license": "MIT", + "category": "marketing", + "tags": ["cta", "image", "features", "alternating", "marketing", "storytelling", "visual"], + "description": "Engaging alternating image and text sections with feature lists and call-to-action buttons", + "author": "Hugo Blox", + "homepage": "https://hugoblox.com/blocks/", + "repository": "https://github.com/HugoBlox/hugo-blox-builder", + "keywords": ["hugo", "marketing", "images", "features", "storytelling", "conversion"] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-image-paragraph/preview.svg b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-image-paragraph/preview.svg new file mode 100644 index 000000000..1f80466c4 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-image-paragraph/preview.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-image-paragraph/schema.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-image-paragraph/schema.json new file mode 100644 index 000000000..6ba2220be --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/cta-image-paragraph/schema.json @@ -0,0 +1,75 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://hugoblox.com/schemas/blocks/cta-image-paragraph.json", + "title": "CTA Image Paragraph Block Schema", + "description": "Schema for the CTA Image Paragraph block - displays alternating image and text sections with features and buttons", + "allOf": [ + { + "$ref": "../shared/schemas/base-block.json" + }, + { + "type": "object", + "properties": { + "block": { + "const": "cta-image-paragraph" + }, + "content": { + "type": "object", + "description": "Content configuration for the CTA image paragraph block", + "properties": { + "items": { + "type": "array", + "description": "Array of image-paragraph items", + "items": { + "type": "object", + "properties": { + "title": { + "type": "string", + "description": "Item title (supports Markdown)" + }, + "text": { + "type": "string", + "description": "Item description text (supports Markdown)" + }, + "image": { + "type": "string", + "description": "Image filename (in assets/media/)" + }, + "features": { + "type": "array", + "description": "Array of feature list items", + "items": { + "type": "string" + } + }, + "feature_icon": { + "type": "string", + "description": "Icon for feature list items (icon pack format: pack/icon-name)", + "default": "check" + }, + "button": { + "type": "object", + "description": "Optional call-to-action button", + "properties": { + "url": { + "type": "string", + "description": "Button URL" + }, + "text": { + "type": "string", + "description": "Button text" + } + }, + "required": ["url", "text"] + } + }, + "required": ["title", "text", "image"] + } + } + }, + "required": ["items"] + } + } + } + ] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/faq/README.md b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/faq/README.md new file mode 100644 index 000000000..4889adc3b --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/faq/README.md @@ -0,0 +1,58 @@ +# FAQ Block + +Display frequently asked questions in an interactive accordion format with automatic FAQPage structured data for SEO. + +## Features + +- ✅ Interactive accordion with Alpine.js +- ✅ FAQPage Schema.org structured data for Google rich results +- ✅ Responsive design with Tailwind CSS +- ✅ Dark mode support +- ✅ Markdown support in answers + +## Usage + +Add to your page's front matter: + +```yaml +sections: + - block: faq + content: + title: Frequently Asked Questions + subtitle: Find answers to common questions + text: Can't find what you're looking for? [Contact us](/contact) + items: + - question: What is Hugo Blox Builder? + answer: Hugo Blox Builder is a no-code website builder framework powered by Hugo and Tailwind CSS. + + - question: Is it free to use? + answer: Yes! Hugo Blox Builder is open source and free to use under the MIT license. + + - question: How do I get started? + answer: | + Getting started is easy: + 1. Choose a template + 2. Click "Use Template" + 3. Customize your content + 4. Deploy to GitHub Pages or Netlify + + button: + text: View All FAQs + url: /faq/ + icon: arrow-right + design: + spacing: + padding: ["6rem", "0", "6rem", "0"] +``` + +## Structured Data + +This block automatically generates FAQPage structured data for better SEO and eligibility for Google's FAQ rich results. + +## Customization + +- **Accordion behavior**: One item open at a time (default) +- **Colors**: Automatically adapts to your theme +- **Spacing**: Customizable via `design.spacing` +- **Background**: Customizable via `design.background.color` + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/faq/block.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/faq/block.html new file mode 100644 index 000000000..0a7c448b0 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/faq/block.html @@ -0,0 +1,97 @@ +{{- $wcPage := .wcPage -}} +{{- $wcBlock := .wcBlock -}} +{{- $wcIdentifier := .wcIdentifier -}} + +{{/* Enable Alpine.js for interactive accordion */}} +{{ $wcPage.Page.Store.Set "has_alpine" true }} + +{{- $st := $wcBlock.design.spacing | default dict -}} +{{- $pad := $st.padding | default (slice "20px" "0" "20px" "0") -}} +{{- $pad_sm := slice "3rem" "0" -}} +{{- $mar := $st.margin | default (slice "0" "0" "0" "0") -}} + +{{- $bg := $wcBlock.design.background | default dict -}} +{{- $bg_color_val := $bg.color | default "" -}} + +
+
+ + {{- with $wcBlock.content.title -}} +
+

+ {{ . | markdownify | emojify }} +

+ {{- with $wcBlock.content.subtitle -}} +

+ {{ . | markdownify | emojify }} +

+ {{- end -}} +
+ {{- end -}} + + {{- with $wcBlock.content.text -}} +
+ {{ . | markdownify | emojify }} +
+ {{- end -}} + + {{- $items := $wcBlock.content.items | default slice -}} + + {{- if $items -}} +
+
+ {{- range $index, $item := $items -}} +
+ +
+
+ {{ $item.answer | markdownify | emojify }} +
+
+
+ {{- end -}} +
+
+ {{- end -}} + + {{- with $wcBlock.content.button -}} + + {{- end -}} + +
+
+ diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/faq/manifest.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/faq/manifest.json new file mode 100644 index 000000000..ce926498b --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/faq/manifest.json @@ -0,0 +1,8 @@ +{ + "name": "faq", + "version": "1", + "title": "FAQ", + "description": "Display frequently asked questions in an accordion format with SEO-optimized structured data", + "categories": ["content", "interactive"], + "preview": "preview.svg" +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/faq/preview.svg b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/faq/preview.svg new file mode 100644 index 000000000..5e51c7c8b --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/faq/preview.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + FAQ + + + + What is this feature? + + + + + How does it work? + + + + + Where can I learn more? + + Check our documentation + for detailed guides... + + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/faq/schema.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/faq/schema.json new file mode 100644 index 000000000..7883596e1 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/faq/schema.json @@ -0,0 +1,94 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "title": "FAQ Block", + "description": "Display frequently asked questions in an accordion format with FAQPage structured data", + "properties": { + "content": { + "type": "object", + "properties": { + "title": { + "type": "string", + "description": "Block title" + }, + "subtitle": { + "type": "string", + "description": "Block subtitle" + }, + "text": { + "type": "string", + "description": "Introductory text (Markdown supported)" + }, + "items": { + "type": "array", + "description": "FAQ items", + "items": { + "type": "object", + "properties": { + "question": { + "type": "string", + "description": "The question" + }, + "answer": { + "type": "string", + "description": "The answer (Markdown supported)" + } + }, + "required": ["question", "answer"] + } + }, + "button": { + "type": "object", + "description": "Call-to-action button", + "properties": { + "text": { + "type": "string", + "description": "Button text" + }, + "url": { + "type": "string", + "description": "Button URL" + }, + "icon": { + "type": "string", + "description": "Button icon name" + } + } + } + } + }, + "design": { + "type": "object", + "properties": { + "spacing": { + "type": "object", + "properties": { + "padding": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Padding [top, right, bottom, left]" + }, + "margin": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Margin [top, right, bottom, left]" + } + } + }, + "background": { + "type": "object", + "properties": { + "color": { + "type": "string", + "description": "Background color CSS class" + } + } + } + } + } + } +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/features/README.md b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/features/README.md new file mode 100644 index 000000000..bd65c3aa4 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/features/README.md @@ -0,0 +1,51 @@ +# Features Block + +**Showcase what makes you special with stunning feature grids** + +Present your key features, services, or benefits in a clean, organized grid that helps visitors quickly understand your value proposition. The Features block combines beautiful icons with compelling descriptions to create trust and drive engagement. + +## ✨ Key Features + +- **Responsive Grid**: Automatically adapts from 1 column (mobile) to 3 columns (desktop) +- **Icon Integration**: Beautiful icons that reinforce each feature's purpose +- **Flexible Layout**: 2-3 column layouts that work perfectly with any number of features +- **Brand Consistency**: Cohesive color scheme with your primary brand colors +- **Markdown Support**: Rich text formatting for feature names and descriptions +- **Center-Aligned**: Professional center-aligned layout for maximum impact + +## 🎯 Perfect For + +- **SaaS Features**: Highlight the key capabilities of your software platform +- **Service Offerings**: Present your professional services in an organized manner +- **Product Benefits**: Showcase why customers should choose your product +- **Company Values**: Display your core principles and what sets you apart +- **Process Steps**: Break down your workflow or methodology +- **Technology Stack**: Present your technical capabilities and tools + +## 🚀 Why Choose Features Block? + +**Visual Clarity**: Icons and organized layout help visitors quickly scan and understand your offerings + +**Professional Credibility**: Clean, modern design builds trust and demonstrates attention to detail + +**Conversion Ready**: Well-organized features help visitors make informed decisions faster + +**Brand Reinforcement**: Consistent use of your brand colors creates cohesive visual identity + +## 📊 Business Impact + +- **Faster Decision Making**: Clear feature presentation reduces visitor confusion +- **Higher Engagement**: Visual icons and organized content keep visitors interested +- **Better Communication**: Structured format ensures key benefits are clearly communicated +- **Mobile Excellence**: Responsive design captures mobile traffic effectively + +## 💡 Best Practices + +- Limit features to 3-6 items for optimal impact and readability +- Use consistent icon styles that align with your brand aesthetic +- Keep feature descriptions concise but compelling (1-2 sentences) +- Order features by importance or user journey priority +- Choose icons that instantly communicate each feature's value + +Ideal for startups, SaaS companies, service providers, and any business that needs to clearly communicate their value proposition to potential customers. + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/features.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/features/block.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/features.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/features/block.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/features/manifest.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/features/manifest.json new file mode 100644 index 000000000..058debf8d --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/features/manifest.json @@ -0,0 +1,13 @@ +{ + "id": "features", + "name": "Features", + "version": "1.0.0", + "license": "MIT", + "category": "content", + "tags": ["features", "grid", "icons", "benefits", "product", "services", "highlights"], + "description": "Showcase features, benefits, or services in an organized grid with icons and descriptions", + "author": "Hugo Blox", + "homepage": "https://hugoblox.com/blocks/", + "repository": "https://github.com/HugoBlox/hugo-blox-builder", + "keywords": ["hugo", "features", "grid", "services", "benefits", "product"] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/features/preview.svg b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/features/preview.svg new file mode 100644 index 000000000..51354f406 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/features/preview.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/features/schema.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/features/schema.json new file mode 100644 index 000000000..cfd90c1b3 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/features/schema.json @@ -0,0 +1,56 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://hugoblox.com/schemas/blocks/features.json", + "title": "Features Block Schema", + "description": "Schema for the Features block - displays a grid of features with icons, names, and descriptions", + "allOf": [ + { + "$ref": "../shared/schemas/base-block.json" + }, + { + "type": "object", + "properties": { + "block": { + "const": "features" + }, + "content": { + "type": "object", + "description": "Content configuration for the features block", + "properties": { + "title": { + "type": "string", + "description": "Section title (supports Markdown)" + }, + "text": { + "type": "string", + "description": "Section description (supports Markdown)" + }, + "items": { + "type": "array", + "description": "Array of feature items", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Feature name/title (supports Markdown)" + }, + "description": { + "type": "string", + "description": "Feature description (supports Markdown)" + }, + "icon": { + "type": "string", + "description": "Feature icon (icon pack format: pack/icon-name)" + } + }, + "required": ["name", "description"] + } + } + }, + "required": ["items"] + } + } + } + ] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/hero/README.md b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/hero/README.md new file mode 100644 index 000000000..537d60d99 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/hero/README.md @@ -0,0 +1,52 @@ +# Hero Block + +**Make an unforgettable first impression** + +Capture attention and drive action from the moment visitors land on your site with the Hero block - a conversion-optimized centerpiece designed to communicate your value proposition and guide users toward meaningful engagement. + +## ✨ Key Features + +- **Dual CTA Strategy**: Primary and secondary action buttons to capture different user intents +- **Announcement Banner**: Highlight special offers, news, or important updates +- **Typography Hierarchy**: Large, attention-grabbing headlines with supporting descriptive text +- **Icon Support**: Add visual elements to your primary action button +- **Smart Link Handling**: Automatic external link detection with proper security attributes +- **Responsive Typography**: Headlines scale from 4xl to 6xl based on screen size +- **Center-Aligned**: Professional center-aligned layout for maximum impact + +## 🎯 Perfect For + +- **Landing Pages**: Convert visitors into leads with compelling headlines and clear CTAs +- **Product Launches**: Announce new products with maximum visual impact +- **Service Introduction**: Present your core offering with confidence +- **Event Promotion**: Drive registrations and attendance with compelling copy +- **Brand Positioning**: Establish your unique value proposition front and center +- **Lead Generation**: Capture emails, demos, or consultation requests + +## 🚀 Why Choose Hero Block? + +**Conversion Psychology**: Designed using proven principles that drive user action + +**Flexible CTA Options**: Primary button for main action, secondary link for alternative paths + +**Announcement Integration**: Built-in banner for promotions without cluttering the main message + +**Professional Polish**: Clean, modern design that builds trust and credibility instantly + +## 📊 Conversion Elements + +- **Headline Optimization**: Large, scannable headlines that communicate value instantly +- **Announcement Strategy**: Special offers and news that create urgency and relevance +- **Dual Path Design**: Primary and secondary CTAs capture users at different decision stages +- **Visual Hierarchy**: Clear information flow that guides users toward action + +## 💡 Marketing Best Practices + +- Lead with benefits, not features in your headline +- Use announcement banner for limited-time offers or important news +- Make primary CTA action-oriented ("Get Started", "Try Free", "Book Demo") +- Use secondary CTA for lower-commitment actions ("Learn More", "View Demo") +- Test different headline variations to optimize for your audience + +The Hero block is your digital storefront - make it count with compelling copy, strategic CTAs, and professional design that converts visitors into customers. + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/hero.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/hero/block.html similarity index 61% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/hero.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/hero/block.html index 831b0d003..22aa4391b 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/hero.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/hero/block.html @@ -13,21 +13,45 @@ {{ $announcement := $block.content.announcement }} {{end}}
{{ with $block.content.title }}

{{ . | markdownify }}

{{end}} - {{ with $block.content.text }}

{{ . | $page.RenderString | emojify }}

{{end}} + {{ with $block.content.text }}

{{ . | $page.RenderString | emojify }}

{{end}} {{ if $block.content.primary_action.url }} {{ $link := $block.content.primary_action.url }} {{ $scheme := (urls.Parse $link).Scheme }} {{ $target := "" }} {{ if not $scheme }} - {{ $link = $link | relLangURL }} + {{/* Check if it's a hash fragment (page anchor) */}} + {{ if hasPrefix $link "#" }} + {{/* Keep hash fragments as-is */}} + {{ $link = $link }} + {{ else }} + {{/* Apply relLangURL for relative paths */}} + {{ $link = $link | relLangURL }} + {{ end }} {{ else if in (slice "http" "https") $scheme }} {{ $target = "target=\"_blank\" rel=\"noopener\"" }} {{ end }} @@ -45,7 +69,14 @@ {{ $scheme_alt := (urls.Parse $link_alt).Scheme }} {{ $target_alt := "" }} {{ if not $scheme_alt }} - {{ $link_alt = $link_alt | relLangURL }} + {{/* Check if it's a hash fragment (page anchor) */}} + {{ if hasPrefix $link_alt "#" }} + {{/* Keep hash fragments as-is */}} + {{ $link_alt = $link_alt }} + {{ else }} + {{/* Apply relLangURL for relative paths */}} + {{ $link_alt = $link_alt | relLangURL }} + {{ end }} {{ else if in (slice "http" "https") $scheme_alt }} {{ $target_alt = "target=\"_blank\" rel=\"noopener\"" }} {{ end }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/hero/client.jsx b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/hero/client.jsx new file mode 100644 index 000000000..3e2c0bb65 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/hero/client.jsx @@ -0,0 +1,36 @@ +/** + * Hero Block - Client-side Hydration + * Uses the shared component for consistency + */ + +import {render} from "preact"; +import {HeroBlock} from "./component.jsx"; + +// Render function - immediately renders Hero components +function renderHeroBlocks() { + // Find all hero block containers (using both old and new selectors for compatibility) + const heroBlocks = document.querySelectorAll('[data-block-type="hero"], [data-hero-render="immediate"]'); + + heroBlocks.forEach((block) => { + const propsData = block.dataset.props; + if (propsData) { + try { + const props = JSON.parse(propsData); + + // Render the Preact component into the container + render(, block); + console.debug(`✓ Hero block "${block.id}" rendered with Preact`); + } catch (error) { + console.error(`Failed to render Hero block "${block.id}":`, error); + } + } + }); + + if (heroBlocks.length > 0) { + console.debug(`✓ ${heroBlocks.length} Hero blocks initialized with Preact`); + } +} + +// Initialize immediately when script loads +// The script is already deferred, so DOM is ready +renderHeroBlocks(); diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/hero/component.jsx b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/hero/component.jsx new file mode 100644 index 000000000..efe1c7096 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/hero/component.jsx @@ -0,0 +1,138 @@ +/** + * Hero Block Component - Single source of truth + * Used for both SSR and client-side hydration + */ + +import {Icon} from "../../shared/components/Icon.jsx"; + +// Simple markdown renderer +export function renderText(text) { + if (!text) return ""; + return text + .replace(/\*\*(.*?)\*\*/g, "$1") + .replace(/\*(.*?)\*/g, "$1") + .replace(/`(.*?)`/g, "$1"); +} + +// Process URLs +export function processUrl(url) { + if (!url) return {href: "#"}; + + if (url.startsWith("http://") || url.startsWith("https://")) { + return { + href: url, + target: "_blank", + rel: "noopener", + }; + } + + if (url.startsWith("#")) { + return {href: url}; + } + + return {href: url}; +} + +// Hero Block Component - Single implementation +export const HeroBlock = ({content, design, id, icon_svg}) => { + const paddingClasses = design?.no_padding ? "" : "py-32 sm:py-48 lg:py-56"; + + return ( +
+
+ {/* Announcement Banner */} + {content.announcement?.text && ( + + )} + + {/* Main Content */} +
+ {/* Title */} + {content.title && ( +

+ )} + + {/* Subtitle/Text */} + {content.text && ( +

+ )} + + {/* Action Buttons */} + {(content.primary_action?.url || content.secondary_action?.url) && ( +

+ {/* Primary CTA */} + {content.primary_action?.url && ( + + + {content.primary_action.icon && ( + + + + )} + + )} + + {/* Secondary CTA */} + {content.secondary_action?.url && ( + + + + + )} +
+ )} +

+
+
+ ); +}; diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/hero/manifest.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/hero/manifest.json new file mode 100644 index 000000000..9d307988e --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/hero/manifest.json @@ -0,0 +1,13 @@ +{ + "id": "hero", + "name": "Hero", + "version": "1.0.0", + "license": "MIT", + "category": "marketing", + "tags": ["hero", "landing", "cta", "announcement", "headline", "conversion", "primary"], + "description": "Create compelling hero sections with headlines, announcements, and dual call-to-action buttons", + "author": "Hugo Blox", + "homepage": "https://hugoblox.com/blocks/", + "repository": "https://github.com/HugoBlox/hugo-blox-builder", + "keywords": ["hugo", "hero", "landing-page", "cta", "marketing", "headlines"] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/hero/preview.svg b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/hero/preview.svg new file mode 100644 index 000000000..99a5fdae6 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/hero/preview.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/hero/schema.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/hero/schema.json new file mode 100644 index 000000000..6e54473cd --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/hero/schema.json @@ -0,0 +1,101 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://hugoblox.com/schemas/blocks/hero.json", + "title": "Hero Block Schema", + "description": "Schema for the Hero block - displays prominent hero sections with title, text, and call-to-action buttons", + "allOf": [ + { + "$ref": "../shared/schemas/base-block.json" + }, + { + "type": "object", + "properties": { + "block": { + "const": "hero", + "description": "Block type identifier" + }, + "content": { + "type": "object", + "description": "Content configuration for the hero block", + "properties": { + "title": { + "type": "string", + "description": "Main hero title (supports Markdown)" + }, + "text": { + "type": "string", + "description": "Hero description text (supports Markdown)" + }, + "announcement": { + "type": "object", + "description": "Optional announcement banner", + "properties": { + "text": { + "type": "string", + "description": "Announcement text (supports Markdown)" + }, + "link": { + "type": "object", + "description": "Optional announcement link", + "properties": { + "text": { + "type": "string", + "description": "Link text" + }, + "url": { + "type": "string", + "description": "Link URL" + } + }, + "required": ["text", "url"], + "additionalProperties": false + } + }, + "required": ["text"], + "additionalProperties": false + }, + "primary_action": { + "type": "object", + "description": "Primary call-to-action button", + "properties": { + "url": { + "type": "string", + "description": "Button URL" + }, + "text": { + "type": "string", + "description": "Button text (supports Markdown)" + }, + "icon": { + "type": "string", + "description": "Optional button icon (icon pack format: pack/icon-name)" + } + }, + "required": ["url", "text"], + "additionalProperties": false + }, + "secondary_action": { + "type": "object", + "description": "Secondary call-to-action link", + "properties": { + "url": { + "type": "string", + "description": "Link URL" + }, + "text": { + "type": "string", + "description": "Link text (supports Markdown)" + } + }, + "required": ["url", "text"], + "additionalProperties": false + } + }, + "additionalProperties": false + } + }, + "required": ["content"], + "additionalProperties": false + } + ] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/knowledge-categories/block.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/knowledge-categories/block.html new file mode 100644 index 000000000..41db2995c --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/knowledge-categories/block.html @@ -0,0 +1,97 @@ +{{- $wcPage := .wcPage -}} +{{- $wcBlock := .wcBlock -}} +{{- $wcIdentifier := .wcIdentifier -}} + +{{- $st := $wcBlock.design.spacing | default dict -}} +{{- $pad := $st.padding | default (slice "4rem" "0" "4rem" "0") -}} + +
+
+ + {{/* Section header */}} + {{ if or $wcBlock.content.title $wcBlock.content.subtitle }} +
+ {{ with $wcBlock.content.title }} +

+ {{ . | markdownify }} +

+ {{ end }} + {{ with $wcBlock.content.subtitle }} +

+ {{ . | markdownify }} +

+ {{ end }} +
+ {{ end }} + + {{/* Categories grid - with dynamic counts from Hugo taxonomy */}} +
+ + {{ range $wcBlock.content.categories }} + {{ $category_name := .category | default .title }} + + {{/* Get actual count from Hugo taxonomy - proper Hugo syntax */}} + {{ $category_url := "" }} + {{ $actual_count := 0 }} + {{ with site.Taxonomies.categories.Get $category_name }} + {{ $actual_count = .Count }} + {{ $category_url = .Page.RelPermalink }} + {{ end }} + + {{/* Only show category if it has content OR if count is explicitly set */}} + {{ if or (gt $actual_count 0) (.count) }} + + + {{/* Icon */}} + {{ with .icon }} +
+ {{ partial "functions/get_icon" (dict "name" .name "attributes" "class=\"h-6 w-6\"") }} +
+ {{ end }} + + {{/* Title */}} +

+ {{ .title }} +

+ + {{/* Description */}} + {{ with .description }} +

+ {{ . }} +

+ {{ end }} + + {{/* Stats - use actual count from taxonomy, fallback to manual count */}} +
+ {{ $display_count := default .count $actual_count }} + {{ if $display_count }} + + {{ $display_count }} {{ cond (eq $display_count 1) (T "article" | default "article") (T "articles" | default "articles") }} + + {{ end }} + + {{ T "browse" | default "Browse" }} → + +
+ + {{/* Hover gradient effect */}} +
+
+ {{ end }} + {{ end }} +
+ + {{/* View all link */}} + {{ with $wcBlock.content.view_all }} + + {{ end }} + +
+
diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/knowledge-categories/manifest.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/knowledge-categories/manifest.json new file mode 100644 index 000000000..f67a38b1b --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/knowledge-categories/manifest.json @@ -0,0 +1,8 @@ +{ + "name": "knowledge-categories", + "version": "1", + "title": "Knowledge Categories", + "description": "Grid of knowledge base category cards", + "categories": ["content", "navigation"], + "preview": "preview.svg" +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/knowledge-categories/schema.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/knowledge-categories/schema.json new file mode 100644 index 000000000..d2a534f1d --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/knowledge-categories/schema.json @@ -0,0 +1,74 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "title": "Knowledge Categories Block", + "description": "Grid of knowledge base category cards", + "properties": { + "content": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "subtitle": { + "type": "string" + }, + "categories": { + "type": "array", + "items": { + "type": "object", + "properties": { + "category": { + "type": "string", + "description": "Category name (e.g., 'Getting Started', 'ChatGPT') - will be auto-slugified for URL" + }, + "title": { + "type": "string", + "description": "Display title (optional - defaults to category name)" + }, + "description": { + "type": "string" + }, + "icon": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "bg_color": { + "type": "string" + }, + "text_color": { + "type": "string" + } + } + }, + "count": { + "type": "number" + } + } + } + }, + "view_all": { + "type": "object", + "properties": { + "text": { + "type": "string" + }, + "link": { + "type": "string" + } + } + } + } + }, + "design": { + "type": "object", + "properties": { + "spacing": { + "type": "object" + } + } + } + } +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/logos/README.md b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/logos/README.md new file mode 100644 index 000000000..e182c8450 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/logos/README.md @@ -0,0 +1,220 @@ +# Logos Block + +Display partner, sponsor, or collaborator logos with modern interactive effects and multiple display modes. Perfect for showcasing affiliations, building trust, and highlighting collaborations. + +## Features + +- **Multiple Display Modes**: Grid, carousel, or marquee layouts +- **Interactive Effects**: Grayscale to color on hover, smooth scaling +- **Clickable Logos**: Link to partner websites +- **Hover Tooltips**: Show partner descriptions on hover +- **Responsive Design**: Adapts perfectly to all screen sizes +- **Smooth Animations**: Professional transitions and effects +- **Flexible Configuration**: Use structured data or folder-based logos +- **Performance Optimized**: Lazy loading and WebP format support +- **Dark Mode Support**: Seamless theme switching + +## Display Modes + +### Grid Mode (Default) +Classic responsive grid layout with hover effects: +- 2 columns on mobile +- 3-6 columns on larger screens +- Grayscale to color transition on hover +- Scale animation on hover + +### Carousel Mode +Auto-scrolling horizontal carousel: +- Continuous smooth scrolling +- Pauses on hover +- Duplicate items for seamless loop +- Ideal for many logos + +### Marquee Mode +Traditional marquee scroll effect: +- Continuous horizontal movement +- Lightweight and performant +- Good for header/footer placement + +## Usage + +### Basic Grid Layout +```yaml +sections: + - block: logos + content: + title: Our Partners & Collaborators + subtitle: Working with leading institutions worldwide + text: We collaborate with top universities and research centers + logos: + - name: MIT + image: partners/mit.png + url: https://mit.edu + description: Massachusetts Institute of Technology + - name: Stanford University + image: partners/stanford.svg + url: https://stanford.edu + description: Leading research university + - name: Google Research + image: partners/google.png + url: https://research.google + description: AI and ML research + - name: Microsoft Research + image: partners/microsoft.svg + url: https://www.microsoft.com/research + description: Computing research lab + design: + display_mode: grid + css_class: "bg-gray-50 dark:bg-gray-900" +``` + +### Carousel Display +```yaml +sections: + - block: logos + content: + title: Trusted By Industry Leaders + logos: + # Add 8-12 logos for best carousel effect + - name: Company 1 + image: sponsors/company1.png + url: https://example.com + # ... more logos + design: + display_mode: carousel +``` + +### Legacy Folder Mode +For backward compatibility or quick setup: +```yaml +sections: + - block: logos + content: + title: Our Sponsors + logo_folder: sponsors # Loads all images from assets/media/sponsors/ + design: + display_mode: grid +``` + +## Options + +### Content Options + +- **title**: Main heading for the section +- **subtitle**: Optional subtitle (shown in accent color) +- **text**: Description text below title +- **logos**: Array of logo configurations + - `name`: Partner/sponsor name (shown in tooltip) + - `image`: Path relative to `assets/media/` + - `url`: Website URL + - `external`: Open in new tab (default: true) + - `description`: Hover tooltip text +- **logo_folder**: Legacy option to load all images from a folder +- **cta**: Optional call-to-action button + - `text`: Button text + - `url`: Button link + - `icon`: Optional icon + +### Design Options + +- **display_mode**: Choose layout style + - `grid`: Responsive grid (default) + - `carousel`: Auto-scrolling carousel + - `marquee`: Classic marquee effect +- **show_pattern**: Add decorative background pattern (default: false) + +## Image Guidelines + +### Recommended Formats +- **SVG**: Best for logos (scalable, small file size) +- **PNG**: For logos with transparency +- **WebP**: Modern format with best compression + +### Size Recommendations +- **Grid Mode**: 280x140px (will be auto-fitted) +- **Carousel Mode**: 280x140px minimum +- **Aspect Ratio**: 2:1 or square works best + +### Optimization Tips +1. Use SVG when possible for crisp rendering +2. Optimize PNGs with tools like TinyPNG +3. Keep file sizes under 50KB per logo +4. Use consistent dimensions for visual harmony + +## Styling + +### Hover Effects +- Grayscale filter removed on hover +- Opacity increases from 60% to 100% +- Smooth scale transformation (110%) +- Background highlight on hover + +### Custom CSS +Add custom styles to enhance the block: + +```css +/* Example: Custom logo sizing */ +.logos-block img { + max-height: 80px; +} + +/* Example: Remove grayscale on specific logo */ +.partner-featured img { + filter: none !important; + opacity: 1 !important; +} +``` + +## Best Practices + +1. **Logo Quality**: Use high-resolution logos (2x display size) +2. **Consistency**: Keep logos similar in visual weight +3. **Accessibility**: Always provide alt text via `name` field +4. **Performance**: Optimize images before adding +5. **Responsive**: Test on mobile devices +6. **Links**: Verify all external links work +7. **Copyright**: Ensure you have permission to display logos + +## Examples + +### Research Lab Partners +```yaml +logos: + - name: National Science Foundation + image: partners/nsf.svg + url: https://nsf.gov + description: Federal funding agency + - name: NIH + image: partners/nih.png + url: https://nih.gov + description: National Institutes of Health +``` + +### Conference Sponsors +```yaml +logos: + - name: Gold Sponsor - Microsoft + image: sponsors/microsoft-gold.png + url: https://microsoft.com + description: Gold level sponsor +``` + +### Industry Collaborations +```yaml +logos: + - name: OpenAI + image: collaborators/openai.svg + url: https://openai.com + description: AI research partnership +``` + +## Animation Speed + +To adjust animation speeds, modify the CSS: + +```yaml +design: + css_style: | + .animate-marquee { animation-duration: 20s; } + .animate-scroll { animation-duration: 30s; } +``` diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/logos/block.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/logos/block.html new file mode 100644 index 000000000..cf25fc8ca --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/logos/block.html @@ -0,0 +1,235 @@ +{{/* Hugo Blox: Logos Block */}} +{{/* Documentation: https://hugoblox.com/blocks/ */}} +{{/* License: https://github.com/HugoBlox/hugo-blox-builder/blob/main/LICENSE.md */}} + +{{/* Initialise */}} +{{ $page := .wcPage }} +{{ $block := .wcBlock }} +{{ $display_mode := $block.design.display_mode | default "grid" }} + +{{ $title := $block.content.title | emojify | $page.RenderString }} +{{ $subtitle := $block.content.subtitle | emojify | $page.RenderString }} +{{ $text := $block.content.text | emojify | $page.RenderString }} + +
+ {{/* Background Pattern */}} + {{ if $block.design.show_pattern }} +
+
+
+ {{ end }} + +
+ + {{/* Section Header */}} +
+ {{ with $title }} +

+ {{ . }} +

+ {{ end }} + + {{ with $subtitle }} +

+ {{ . }} +

+ {{ end }} + + {{ with $text }} +

+ {{ . }} +

+ {{ end }} +
+ + {{/* Grid Display Mode */}} + {{ if eq $display_mode "grid" }} +
+ + {{/* Logo Items from Data */}} + {{ if $block.content.logos }} + {{ range $block.content.logos }} + + {{ end }} + + {{/* Logo Images from Folder (Legacy Support) */}} + {{ else if $block.content.logo_folder }} + {{ $images := resources.Match (printf "media/%s/*.{svg,png,jpg,webp}" $block.content.logo_folder) }} + {{ range $images }} +
+
+ {{ $image := . }} + {{ $isSVG := eq $image.MediaType.SubType "svg" }} + {{ if not $isSVG }} + {{ $image = $image.Fit "280x140 webp" }} + {{ end }} + Partner logo +
+
+ {{ end }} + {{ end }} +
+ + {{/* Carousel Display Mode */}} + {{ else if eq $display_mode "carousel" }} +
+
+ {{/* Duplicate items for continuous scroll */}} + {{ $items := slice }} + {{ if $block.content.logos }} + {{ $items = $block.content.logos }} + {{ else if $block.content.logo_folder }} + {{ $images := resources.Match (printf "media/%s/*.{svg,png,jpg,webp}" $block.content.logo_folder) }} + {{ range $images }} + {{ $items = $items | append (dict "image" .Name) }} + {{ end }} + {{ end }} + + {{/* First set of logos */}} + {{ range $items }} +
+ {{ if .image }} + {{ $img := resources.Get (printf "media/%s" .image) }} + {{ if $img }} + {{ $isSVG := eq $img.MediaType.SubType "svg" }} + {{ if not $isSVG }} + {{ $img = $img.Fit "280x140 webp" }} + {{ end }} + {{ .name | default + {{ end }} + {{ end }} +
+ {{ end }} + + {{/* Duplicate for seamless loop */}} + {{ range $items }} +
+ {{ if .image }} + {{ $img := resources.Get (printf "media/%s" .image) }} + {{ if $img }} + {{ $isSVG := eq $img.MediaType.SubType "svg" }} + {{ if not $isSVG }} + {{ $img = $img.Fit "280x140 webp" }} + {{ end }} + {{ .name | default + {{ end }} + {{ end }} +
+ {{ end }} +
+
+ + {{/* Marquee Display Mode */}} + {{ else if eq $display_mode "marquee" }} +
+
+
+ {{ if $block.content.logos }} + {{ range $block.content.logos }} +
+ {{ if .image }} + {{ $img := resources.Get (printf "media/%s" .image) }} + {{ if $img }} + {{ $isSVG := eq $img.MediaType.SubType "svg" }} + {{ if not $isSVG }} + {{ $img = $img.Fit "280x140 webp" }} + {{ end }} + {{ .name | default + {{ end }} + {{ end }} +
+ {{ end }} + {{ end }} +
+
+
+ {{ end }} + + {{/* Call to Action */}} + {{ with $block.content.cta }} + + {{ end }} +
+
+ +{{/* Custom CSS for Animations */}} + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/logos/manifest.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/logos/manifest.json new file mode 100644 index 000000000..3846e4854 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/logos/manifest.json @@ -0,0 +1,13 @@ +{ + "id": "logos", + "name": "Logos", + "version": "1.0.0", + "license": "MIT", + "category": "content", + "tags": ["logos", "partners", "sponsors", "collaborators", "brands", "clients", "affiliations"], + "description": "Display partner, sponsor, or collaborator logos with interactive effects and multiple display modes", + "author": "Hugo Blox", + "homepage": "https://hugoblox.com/blocks/", + "repository": "https://github.com/HugoBlox/hugo-blox-builder", + "keywords": ["hugo", "static-site", "logos", "partners", "sponsors", "carousel", "marquee"] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/logos/schema.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/logos/schema.json new file mode 100644 index 000000000..265e0fa1e --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/logos/schema.json @@ -0,0 +1,106 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://hugoblox.com/schemas/blocks/logos.json", + "title": "Logos Block Schema", + "description": "Schema for the Logos block - displays partner/sponsor logos with various display modes", + "allOf": [ + { + "$ref": "../shared/schemas/base-block.json" + }, + { + "type": "object", + "properties": { + "block": { + "const": "logos" + }, + "content": { + "type": "object", + "description": "Content configuration for the logos block", + "properties": { + "title": { + "type": "string", + "description": "Main section title" + }, + "subtitle": { + "type": "string", + "description": "Section subtitle" + }, + "text": { + "type": "string", + "description": "Section description text" + }, + "logos": { + "type": "array", + "description": "Array of logo items with details", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Partner/sponsor name" + }, + "image": { + "type": "string", + "description": "Path to logo image relative to assets/media/" + }, + "url": { + "type": "string", + "description": "Link to partner website" + }, + "external": { + "type": "boolean", + "description": "Open link in new tab", + "default": true + }, + "description": { + "type": "string", + "description": "Short description shown on hover" + } + } + } + }, + "logo_folder": { + "type": "string", + "description": "Legacy: Folder containing logo images (deprecated, use logos array instead)" + }, + "cta": { + "type": "object", + "description": "Call to action button", + "properties": { + "text": { + "type": "string", + "description": "Button text" + }, + "url": { + "type": "string", + "description": "Button URL" + }, + "icon": { + "type": "string", + "description": "Optional icon name" + } + } + } + } + }, + "design": { + "type": "object", + "description": "Design options for the logos block", + "properties": { + "display_mode": { + "type": "string", + "enum": ["grid", "carousel", "marquee"], + "description": "How to display the logos", + "default": "grid" + }, + "show_pattern": { + "type": "boolean", + "description": "Show decorative background pattern", + "default": false + } + } + } + } + } + ] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/markdown/README.md b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/markdown/README.md new file mode 100644 index 000000000..6893da6f6 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/markdown/README.md @@ -0,0 +1,59 @@ +# Markdown Block + +**Beautiful typography for your content** + +Transform your written content into beautifully formatted, readable sections with the Markdown block - a clean, minimalist component that puts your words front and center with professional typography and perfect readability. + +## ✨ Key Features + +- **Prose Optimization**: Beautiful typography with the prose class for optimal readability +- **Dark Mode Support**: Automatic dark mode styling with prose-invert +- **Responsive Typography**: Scales from base to large (lg:prose-xl) on bigger screens +- **Markdown Rich**: Full Markdown support including links, formatting, lists, and more +- **Optional Titles**: Add section headers with consistent styling +- **Center-Aligned**: Content centered with optimal line length for reading +- **Emoji Support**: Built-in emoji rendering for expressive content + +## 🎯 Perfect For + +- **About Pages**: Tell your story with beautifully formatted text +- **Blog Content**: Create rich, readable blog post sections +- **Documentation**: Present technical content with professional formatting +- **Company Information**: Share detailed company background and mission +- **Policy Pages**: Format terms, privacy policies, and legal content +- **Long-Form Content**: Any substantial text content that deserves beautiful presentation + +## 🚀 Why Choose Markdown Block? + +**Reading Experience**: Optimized typography that makes long-form content a pleasure to read + +**Flexible Content**: Support for all Markdown features including links, emphasis, lists, and code + +**Consistent Styling**: Professional typography that matches your site's design system + +**Accessibility First**: Semantic HTML structure with proper heading hierarchy and contrast + +## 📊 Content Benefits + +- **Improved Readability**: Optimal line length and spacing reduce eye strain +- **Better Engagement**: Beautiful typography encourages visitors to read more +- **SEO Friendly**: Clean, semantic HTML structure helps search engines understand content +- **Mobile Optimized**: Responsive text sizing ensures readability on all devices + +## 💡 Typography Science + +- **Optimal Line Length**: Content width designed for comfortable reading speed +- **Proper Contrast**: Light and dark mode support ensures accessibility +- **Hierarchical Structure**: Clear visual hierarchy guides readers through content +- **Breathing Room**: Generous spacing prevents information overload + +## 🎨 Use Cases + +- **Storytelling**: Share your journey, mission, or company history +- **Educational Content**: Present tutorials, guides, or learning materials +- **Announcements**: Communicate important updates or changes +- **Content Marketing**: Create engaging blog posts and articles +- **Documentation**: Technical guides, API docs, or user manuals + +Perfect for bloggers, businesses, educators, and anyone who values beautiful, readable content presentation. Make your words shine with typography that respects both your message and your readers. + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/markdown.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/markdown/block.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/markdown.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/markdown/block.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/markdown/manifest.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/markdown/manifest.json new file mode 100644 index 000000000..524922c99 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/markdown/manifest.json @@ -0,0 +1,13 @@ +{ + "id": "markdown", + "name": "Markdown", + "version": "1.0.0", + "license": "MIT", + "category": "content", + "tags": ["markdown", "content", "text", "prose", "writing", "simple", "flexible"], + "description": "Display rich markdown content with beautiful typography and optional section titles", + "author": "Hugo Blox", + "homepage": "https://hugoblox.com/blocks/", + "repository": "https://github.com/HugoBlox/hugo-blox-builder", + "keywords": ["hugo", "markdown", "content", "typography", "prose", "text"] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/markdown/preview.svg b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/markdown/preview.svg new file mode 100644 index 000000000..23cac2a2f --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/markdown/preview.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/markdown/schema.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/markdown/schema.json new file mode 100644 index 000000000..f88612841 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/markdown/schema.json @@ -0,0 +1,34 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://hugoblox.com/schemas/blocks/markdown.json", + "title": "Markdown Block Schema", + "description": "Schema for the Markdown block - displays markdown content with optional title", + "allOf": [ + { + "$ref": "../shared/schemas/base-block.json" + }, + { + "type": "object", + "properties": { + "block": { + "const": "markdown" + }, + "content": { + "type": "object", + "description": "Content configuration for the markdown block", + "properties": { + "title": { + "type": "string", + "description": "Section title (supports Markdown)" + }, + "text": { + "type": "string", + "description": "Markdown content (supports full Markdown syntax)" + } + }, + "required": ["text"] + } + } + } + ] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/research-areas/README.md b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/research-areas/README.md new file mode 100644 index 000000000..179493a25 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/research-areas/README.md @@ -0,0 +1,292 @@ +# Research Areas Block + +Display your research focus areas with stunning visuals, metrics, and interactive layouts. Perfect for research labs, academic groups, and R&D departments to showcase their areas of expertise. + +## Features + +- **Multiple Layout Options**: Cards, hexagon, or timeline layouts +- **Rich Visual Options**: Icons, emojis, images, or gradient backgrounds +- **Metrics Display**: Team size, publications, funding +- **Interactive Elements**: Hover effects, status badges, CTAs +- **Topic Keywords**: Highlight key research topics +- **Responsive Design**: Beautiful on all devices +- **Dark Mode Support**: Seamless theme switching +- **Performance Optimized**: Lazy loading and WebP support + +## Layout Options + +### Cards Layout (Default) +Modern card-based design with: +- Large visual header (image/icon/emoji) +- Rich content area +- Hover animations +- Status badges +- Metrics display + +### Hexagon Layout +Unique hexagonal grid for visual impact: +- Geometric design +- Gradient backgrounds +- Compact information display +- Great for 3-6 areas + +### Timeline Layout +Chronological or priority-based display: +- Vertical timeline +- Alternating left/right cards +- Visual progression +- Good for research evolution + +## Usage Examples + +### Basic Research Areas with Cards +```yaml +sections: + - block: research-areas + content: + title: Research Focus Areas + subtitle: Advancing Science Through Innovation + text: Our lab conducts cutting-edge research across multiple domains + items: + - name: Computational Biology + description: Developing algorithms for genomic analysis and protein structure prediction + emoji: 🧬 + gradient: from-green-400 to-blue-500 + status: active + topics: + - Genomics + - Proteomics + - Bioinformatics + - Systems Biology + team_size: 12 researchers + publications: 45 papers + funding: $2.5M + cta: + text: Learn More + url: /research/computational-biology + + - name: Machine Learning + description: Advancing deep learning methods for scientific discovery + emoji: 🤖 + gradient: from-purple-400 to-pink-500 + status: active + topics: + - Deep Learning + - Neural Networks + - Computer Vision + - NLP + team_size: 8 researchers + publications: 32 papers + funding: $1.8M + + - name: Materials Science + description: Designing novel materials through computational modeling + emoji: 🔬 + gradient: from-orange-400 to-red-500 + status: emerging + topics: + - Nanomaterials + - Quantum Materials + - Polymers + team_size: 6 researchers + publications: 28 papers + funding: $1.2M + design: + layout: cards +``` + +### Using Icons Instead of Emojis +```yaml +items: + - name: Artificial Intelligence + description: Building next-generation AI systems + icon: hero/cpu-chip + gradient: from-blue-500 to-indigo-600 + # ... rest of configuration +``` + +### Using Images +```yaml +items: + - name: Climate Science + description: Understanding and mitigating climate change + image: research/climate-hero.jpg + status: active + # ... rest of configuration +``` + +### Hexagon Layout for Visual Impact +```yaml +sections: + - block: research-areas + content: + title: Core Research Pillars + items: + - name: AI & ML + description: Artificial intelligence research + icon: hero/cpu-chip + gradient: from-blue-400 to-purple-600 + - name: Quantum + description: Quantum computing systems + icon: hero/sparkles + gradient: from-green-400 to-teal-600 + # ... more items + design: + layout: hexagon +``` + +### Timeline Layout for Evolution +```yaml +sections: + - block: research-areas + content: + title: Research Evolution + subtitle: Our Journey of Discovery + items: + - name: Foundation (2015-2018) + description: Established core ML research + icon: hero/academic-cap + - name: Expansion (2018-2021) + description: Added biomedical applications + icon: hero/beaker + - name: Current Focus (2021-Present) + description: AI for scientific discovery + icon: hero/sparkles + design: + layout: timeline +``` + +## Configuration Options + +### Content Options + +- **title**: Main section heading +- **subtitle**: Section subtitle (accent color) +- **text**: Description paragraph +- **items**: Array of research areas + - `name`: Area name (required) + - `description`: Area description (required) + - `icon`: Icon identifier (e.g., 'hero/beaker') + - `emoji`: Emoji alternative to icon + - `image`: Image path relative to assets/media/ + - `gradient`: Tailwind gradient classes + - `url`: Link to detailed page + - `status`: 'active', 'emerging', or 'planning' + - `topics`: Array of keywords/topics + - `team_size`: Team member count + - `publications`: Publication count + - `funding`: Funding amount + - `cta`: Individual area CTA with text and url +- **cta**: Global call-to-action button + +### Design Options + +- **layout**: Visual layout style + - `cards`: Modern card grid (default) + - `hexagon`: Hexagonal grid + - `timeline`: Vertical timeline + +## Visual Guidelines + +### Gradients +Use Tailwind gradient classes for visual appeal: +```yaml +gradient: from-blue-400 to-purple-600 +gradient: from-green-500 to-teal-400 +gradient: from-orange-400 to-red-500 +``` + +### Icons vs Emojis vs Images +- **Icons**: Professional, consistent style +- **Emojis**: Friendly, universal, no loading +- **Images**: Rich visuals, specific imagery + +### Status Badges +- `active`: Green - Currently active research +- `emerging`: Yellow - Growing area +- `planning`: Blue - Future direction + +## Best Practices + +1. **Consistency**: Use the same visual type (icons OR emojis OR images) across all areas +2. **Metrics**: Include quantifiable achievements +3. **Keywords**: 3-5 relevant topics per area +4. **Descriptions**: Keep concise (50-100 words) +5. **CTAs**: Link to detailed pages for each area +6. **Gradients**: Choose complementary colors +7. **Status**: Be transparent about research maturity + +## Responsive Behavior + +### Cards Layout +- Mobile: Single column +- Tablet: 2 columns +- Desktop: 3 columns + +### Hexagon Layout +- Mobile: Stacked hexagons +- Desktop: Honeycomb grid + +### Timeline Layout +- Mobile: Single column timeline +- Desktop: Alternating left/right + +## Performance Tips + +1. **Images**: Optimize to <100KB +2. **WebP Format**: Use for better compression +3. **Lazy Loading**: Automatic for images +4. **Icon Usage**: Prefer icons/emojis over images for speed + +## Accessibility + +- Semantic HTML structure +- Proper heading hierarchy +- Alt text for images +- Keyboard navigable +- Screen reader friendly +- High contrast for text + +## Examples by Field + +### AI/ML Lab +```yaml +items: + - name: Deep Learning + emoji: 🧠 + gradient: from-purple-500 to-pink-500 + - name: Computer Vision + emoji: 👁️ + gradient: from-blue-500 to-cyan-500 + - name: NLP + emoji: 💬 + gradient: from-green-500 to-teal-500 +``` + +### Biology Lab +```yaml +items: + - name: Genomics + emoji: 🧬 + gradient: from-green-400 to-emerald-600 + - name: Cell Biology + emoji: 🦠 + gradient: from-purple-400 to-indigo-600 + - name: Neuroscience + emoji: 🧠 + gradient: from-pink-400 to-rose-600 +``` + +### Physics Lab +```yaml +items: + - name: Quantum Computing + emoji: ⚛️ + gradient: from-indigo-500 to-purple-600 + - name: Particle Physics + emoji: 🌌 + gradient: from-blue-500 to-indigo-600 + - name: Condensed Matter + emoji: 💎 + gradient: from-cyan-500 to-blue-600 +``` diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/research-areas/block.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/research-areas/block.html new file mode 100644 index 000000000..2835514c2 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/research-areas/block.html @@ -0,0 +1,263 @@ +{{/* Hugo Blox: Research Areas Block */}} +{{/* Documentation: https://hugoblox.com/blocks/ */}} +{{/* License: https://github.com/HugoBlox/hugo-blox-builder/blob/main/LICENSE.md */}} + +{{/* Initialise */}} +{{ $page := .wcPage }} +{{ $block := .wcBlock }} +{{ $layout := $block.design.layout | default "cards" }} + +{{ $title := $block.content.title | emojify | $page.RenderString }} +{{ $subtitle := $block.content.subtitle | emojify | $page.RenderString }} +{{ $text := $block.content.text | emojify | $page.RenderString }} + +
+
+ + {{/* Section Header */}} +
+ {{ with $title }} +

+ {{ . }} +

+ {{ end }} + + {{ with $subtitle }} +

+ {{ . }} +

+ {{ end }} + + {{ with $text }} +

+ {{ . }} +

+ {{ end }} +
+ + {{/* Cards Layout */}} + {{ if eq $layout "cards" }} +
+ {{ range $idx, $item := $block.content.items }} +
+
+ + {{/* Card Image/Icon Header */}} + {{ $header_content := "" }} + {{ if $item.image }} + {{ $img := resources.Get (printf "media/%s" $item.image) }} + {{ if $img }} + {{ $img = $img.Fill "600x400 Center webp" }} + {{ $header_content = printf "\"%s\"" $img.RelPermalink $item.name }} + {{ end }} + {{ else if $item.icon }} + {{ $icon_html := partial "functions/get_icon" (dict "name" $item.icon "attributes" "class=\"w-24 h-24 text-white/80 group-hover:scale-110 transition-transform duration-300\"") }} + {{ $header_content = printf "
%s
" $icon_html }} + {{ end }} + + {{ if and $item.cta.url $header_content }} + + {{ $header_content | safeHTML }} + + {{ else }} +
+ {{ $header_content | safeHTML }} +
+ {{ end }} + + + {{/* Status Badge */}} + {{ with $item.status }} +
+ + {{ . | title }} + +
+ {{ end }} + + {{/* Card Content - Flexible layout */}} +
+ {{/* Main Content */}} +
+

+ {{ if $item.url }} + + {{ $item.name }} + {{ partial "functions/get_icon" (dict "name" "hero/arrow-top-right-on-square" "attributes" "class=\"inline-block w-4 h-4 ml-1\"") }} + + {{ else }} + {{ $item.name }} + {{ end }} +

+ +

+ {{ $item.description }} +

+ + {{/* Key Topics/Keywords */}} + {{ with $item.topics }} +
+ {{ range first 3 . }} + + {{ . }} + + {{ end }} + {{ if gt (len .) 3 }} + + +{{ sub (len .) 3 }} more + + {{ end }} +
+ {{ end }} +
+ + {{/* Footer Section - Always at bottom */}} +
+ {{/* Stats/Metrics */}} + {{ if or $item.team_size $item.publications $item.funding }} +
+ {{ with $item.team_size }} +
+ {{ partial "functions/get_icon" (dict "name" "hero/user-group" "attributes" "class=\"w-4 h-4 mx-auto mb-1\"") }} + {{ . | replaceRE " researchers" "" }} + team +
+ {{ end }} + {{ with $item.publications }} +
+ {{ partial "functions/get_icon" (dict "name" "hero/document-text" "attributes" "class=\"w-4 h-4 mx-auto mb-1\"") }} + {{ . | replaceRE " papers" "" }} + papers +
+ {{ end }} + {{ with $item.funding }} +
+ {{ partial "functions/get_icon" (dict "name" "hero/currency-dollar" "attributes" "class=\"w-4 h-4 mx-auto mb-1\"") }} + {{ . }} + funding +
+ {{ end }} +
+ {{ end }} + + {{/* Call to Action */}} + {{ with $item.cta }} + + {{ .text }} + {{ partial "functions/get_icon" (dict "name" "hero/arrow-right" "attributes" "class=\"ml-1 w-4 h-4\"") }} + + {{ end }} +
+
+
+
+ {{ end }} +
+ + {{/* Hexagon Layout */}} + {{ else if eq $layout "hexagon" }} +
+ {{ range $idx, $item := $block.content.items }} +
+
+
+ {{ if $item.icon }} + {{ partial "functions/get_icon" (dict "name" $item.icon "attributes" "class=\"w-12 h-12 text-white mb-3\"") }} + {{ end }} +

{{ $item.name }}

+

{{ $item.description | truncate 60 }}

+
+
+
+ {{ end }} +
+ + {{/* Timeline Layout */}} + {{ else if eq $layout "timeline" }} +
+ {{/* Vertical Line */}} +
+ +
+ {{ range $idx, $item := $block.content.items }} +
+ {{/* Timeline dot */}} +
+ +
+
+
+ {{ if $item.icon }} +
+ {{ partial "functions/get_icon" (dict "name" $item.icon "attributes" "class=\"w-5 h-5 text-primary-600 dark:text-primary-400\"") }} +
+ {{ end }} +

{{ $item.name }}

+
+

{{ $item.description }}

+
+
+
+ {{ end }} +
+
+ {{ end }} + + {{/* Global Call to Action */}} + {{ with $block.content.cta }} + + {{ end }} +
+
+ +{{/* Custom CSS for Hexagon Layout */}} +{{ if eq $layout "hexagon" }} + +{{ end }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/research-areas/manifest.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/research-areas/manifest.json new file mode 100644 index 000000000..a93efb7da --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/research-areas/manifest.json @@ -0,0 +1,13 @@ +{ + "id": "research-areas", + "name": "Research Areas", + "version": "1.0.0", + "license": "MIT", + "category": "content", + "tags": ["research", "areas", "focus", "topics", "science", "lab", "academic", "showcase"], + "description": "Display research focus areas with rich visuals, metrics, and interactive layouts", + "author": "Hugo Blox", + "homepage": "https://hugoblox.com/blocks/", + "repository": "https://github.com/HugoBlox/hugo-blox-builder", + "keywords": ["hugo", "static-site", "research", "areas", "academic", "lab", "science"] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/research-areas/schema.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/research-areas/schema.json new file mode 100644 index 000000000..870861bd9 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/research-areas/schema.json @@ -0,0 +1,139 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://hugoblox.com/schemas/blocks/research-areas.json", + "title": "Research Areas Block Schema", + "description": "Schema for the Research Areas block - displays research focus areas with rich visuals and metrics", + "allOf": [ + { + "$ref": "../shared/schemas/base-block.json" + }, + { + "type": "object", + "properties": { + "block": { + "const": "research-areas" + }, + "content": { + "type": "object", + "description": "Content configuration for the research areas block", + "properties": { + "title": { + "type": "string", + "description": "Section title" + }, + "subtitle": { + "type": "string", + "description": "Section subtitle" + }, + "text": { + "type": "string", + "description": "Section description text" + }, + "items": { + "type": "array", + "description": "Array of research area items", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Research area name", + "required": true + }, + "description": { + "type": "string", + "description": "Research area description", + "required": true + }, + "icon": { + "type": "string", + "description": "Icon identifier (e.g., 'hero/beaker', 'devicon/python')" + }, + "emoji": { + "type": "string", + "description": "Emoji as alternative to icon" + }, + "image": { + "type": "string", + "description": "Image path relative to assets/media/" + }, + "gradient": { + "type": "string", + "description": "Tailwind gradient classes (e.g., 'from-blue-400 to-purple-400')" + }, + "url": { + "type": "string", + "description": "Link to detailed page" + }, + "status": { + "type": "string", + "enum": ["active", "emerging", "planning"], + "description": "Research area status" + }, + "topics": { + "type": "array", + "description": "Key topics/keywords", + "items": { + "type": "string" + } + }, + "team_size": { + "type": "string", + "description": "Number of team members (e.g., '12 researchers')" + }, + "publications": { + "type": "string", + "description": "Number of publications (e.g., '45 papers')" + }, + "funding": { + "type": "string", + "description": "Funding amount (e.g., '$2.5M')" + }, + "cta": { + "type": "object", + "description": "Call to action for this area", + "properties": { + "text": { + "type": "string" + }, + "url": { + "type": "string" + } + } + } + } + } + }, + "cta": { + "type": "object", + "description": "Global call to action", + "properties": { + "text": { + "type": "string" + }, + "url": { + "type": "string" + }, + "icon": { + "type": "string" + } + } + } + } + }, + "design": { + "type": "object", + "description": "Design options for the research areas block", + "properties": { + "layout": { + "type": "string", + "enum": ["cards", "hexagon", "timeline"], + "description": "Layout style for research areas", + "default": "cards" + } + } + } + } + } + ] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-awards/README.md b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-awards/README.md new file mode 100644 index 000000000..ebbddecd6 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-awards/README.md @@ -0,0 +1,57 @@ +# Resume Awards Block + +**Highlight your achievements with professional elegance** + +Showcase your professional accomplishments, certifications, and awards with the Resume Awards block - a sophisticated component that presents your credentials in an organized, visually appealing format that builds trust and demonstrates expertise. + +## ✨ Key Features + +- **Professional Cards**: Clean, shadowed card design for each award or certification +- **Icon Integration**: Add per-award icons (e.g., trophy, badge) for instant visual cues +- **Certificate Links**: Direct links to verify credentials with proper external link handling +- **Date Formatting**: Customizable date display (month/year format by default) +- **Markdown Support**: Rich text formatting for award titles and descriptions +- **Chronological Sorting**: Automatic sorting by date (newest first) +- **Responsive Layout**: Perfect display across all screen sizes + +## 🎯 Perfect For + +- **Academic Professionals**: Showcase research awards, grants, and honors +- **Industry Experts**: Display professional certifications and recognitions +- **Corporate Leaders**: Highlight leadership awards and company recognitions +- **Freelancers**: Build credibility with client awards and industry recognition +- **Consultants**: Demonstrate expertise through professional certifications +- **Creative Professionals**: Feature competition wins and industry awards + +## 🚀 Why Choose Resume Awards Block? + +**Credibility Building**: Professional presentation of achievements builds immediate trust + +**Verification Ready**: Direct links to certificates enable easy credential verification + +**Visual Organization**: Card-based layout makes achievements easy to scan and understand + +**Professional Standards**: Consistent formatting that meets CV and portfolio standards + +## 📊 Professional Benefits + +- **Enhanced Credibility**: Visual display of achievements builds professional authority +- **Easy Verification**: Certificate links provide transparency and trust +- **Organized Presentation**: Clean layout prevents information overload +- **Mobile Professional**: Responsive design ensures professional appearance on all devices + +## 💡 Strategic Advantages + +- **Competitive Edge**: Prominent credential display differentiates you from competitors +- **Trust Signals**: Awards and certifications reduce client hesitation +- **Expertise Proof**: Concrete evidence of your skills and knowledge +- **Professional Brand**: Consistent, polished presentation reinforces your personal brand + +## 🎨 Design Philosophy + +- **Visual Hierarchy**: Most recent and important awards get prominence +- **Clean Aesthetics**: Professional card design that doesn't distract from content +- **Information Balance**: Right amount of detail without overwhelming visitors +- **Brand Integration**: Certifying organization icons add visual interest and authenticity + +Perfect for professionals, academics, consultants, and anyone who wants to showcase their achievements in a format that builds confidence and demonstrates expertise. Your accomplishments deserve professional presentation. diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/resume-awards.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-awards/block.html similarity index 68% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/resume-awards.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-awards/block.html index 383eaf946..541b4d9ed 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/resume-awards.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-awards/block.html @@ -5,14 +5,9 @@ {{/* Initialise */}} {{ $page := .wcPage }} {{ $block := .wcBlock }} -{{ $author := $block.content.username | default "admin" }} - -{{ $person_page_path := (printf "/authors/%s" $author) }} -{{ $person_page := site.GetPage $person_page_path }} -{{ if not $person_page }} -{{ errorf "Could not find an author page at `%s`. Please check the value of `author` in your Skill block and create an associated author page if one does not already exist. See https://docs.hugoblox.com/page-builder/#about " $person_page_path }} -{{end}} -{{ $awards := $person_page.Params.awards }} +{{ $author := $block.content.username | default "me" }} +{{ $profile := partial "functions/get_author_profile" $author }} +{{ $awards := $profile.awards }}
@@ -24,25 +19,29 @@
{{ if $awards }} -{{ range $idx, $key := sort $awards ".date_start" "desc" }} +{{ range $idx, $key := sort $awards ".date" "desc" }}
{{- $icon := .icon }} - {{ with $icon }} -
- {{ partial "functions/get_icon" (dict "name" $icon "pack" "brands" "attributes" "style=\"height: 100%;\"") }} -
- {{ end}} {{with .url}}{{end}} -
{{.title | markdownify | emojify}}
+
+ {{ with $icon }} + + {{ partial "functions/get_icon" (dict "name" . "attributes" "class='w-6 h-6'") }} + + {{ end }} + {{.title | markdownify | emojify}} +
{{with .url}}
{{end}}
- {{.awarder}} ∙ - {{ if .date}} + {{ .awarder }} ∙ + {{ if .date }} {{ (time .date) | time.Format ($block.design.date_format | default "January 2006") }} - {{else}} + {{ else if .date_start }} + {{ (time .date_start) | time.Format ($block.design.date_format | default "January 2006") }} + {{ else }} {{ i18n "present" | default "Present" }} - {{end}} + {{ end }}
{{with .summary}} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-awards/manifest.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-awards/manifest.json new file mode 100644 index 000000000..4f361aea2 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-awards/manifest.json @@ -0,0 +1,13 @@ +{ + "id": "resume-awards", + "name": "Resume Awards", + "version": "1.0.0", + "license": "MIT", + "category": "resume", + "tags": ["resume", "awards", "certifications", "achievements", "credentials", "professional", "cv"], + "description": "Showcase professional awards and certifications with elegant card layouts and certificate links", + "author": "Hugo Blox", + "homepage": "https://hugoblox.com/blocks/", + "repository": "https://github.com/HugoBlox/hugo-blox-builder", + "keywords": ["hugo", "resume", "awards", "certifications", "cv", "professional"] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-awards/preview.svg b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-awards/preview.svg new file mode 100644 index 000000000..b1c7d6434 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-awards/preview.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-awards/schema.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-awards/schema.json new file mode 100644 index 000000000..2258febeb --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-awards/schema.json @@ -0,0 +1,55 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://hugoblox.com/schemas/blocks/resume-awards.json", + "title": "Resume Awards Block Schema", + "description": "Schema for the Resume Awards block - displays awards and certifications from author profile", + "allOf": [ + { + "$ref": "../shared/schemas/base-block.json" + }, + { + "type": "object", + "properties": { + "block": { + "const": "resume-awards" + }, + "content": { + "type": "object", + "description": "Content configuration for the resume awards block", + "properties": { + "username": { + "type": "string", + "description": "Author username (references authors/{username}/ page)", + "default": "admin" + }, + "title": { + "type": "string", + "description": "Section title (supports Markdown)" + }, + "text": { + "type": "string", + "description": "Section description (supports Markdown)" + } + } + }, + "design": { + "allOf": [ + { + "$ref": "../shared/schemas/base-block.json#/properties/design" + }, + { + "type": "object", + "properties": { + "date_format": { + "type": "string", + "description": "Date format for award dates", + "default": "January 2006" + } + } + } + ] + } + } + } + ] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography-3/README.md b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography-3/README.md new file mode 100644 index 000000000..bb436ed82 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography-3/README.md @@ -0,0 +1,85 @@ +# Resume Biography 3 Block + +**Comprehensive professional profile with integrated academic details** + +Present a complete professional picture with the Resume Biography 3 block - an expanded biography layout that combines personal information, social presence, education history, and interests in one cohesive, horizontally-oriented section. + +## 🛠️ Customization + +- **Name sizing**: Adjust the profile heading size to accommodate long names using `design.name.size`: + - `compact`: space-friendly for long names + - `balanced` (default): matches the demo style + - `display`: extra-large for short names + +- **Section heading overrides**: Customize any of the three main section headings using `content.headings`: + - `about`: Biography section heading (default: "Professional Summary" from i18n `about_me`) + - `education`: Education section heading (default: from i18n `education`) + - `interests`: Interests section heading (default: from i18n `interests`) + +Example front matter: + +```yaml +block: resume-biography-3 +content: + headings: + about: Research Profile + education: Academic Background + interests: Research Areas +design: + name: + size: compact +``` + +## ✨ Key Features + +- **Horizontal Layout**: Desktop-optimized side-by-side arrangement for better space utilization +- **Integrated Education**: Built-in education timeline with institution details +- **Interests Section**: Personal interests display for a well-rounded professional image +- **Social Integration**: Complete social media profile links with proper external handling +- **Avatar Flexibility**: Multiple size and shape options for personal branding +- **Academic Icons**: Beautiful education and achievement icons +- **Responsive Stack**: Gracefully converts to vertical layout on mobile devices + +## 🎯 Perfect For + +- **Academic Professionals**: Researchers who need education prominently featured +- **Career Changers**: Professionals highlighting diverse educational backgrounds +- **Consultants**: Comprehensive profiles that establish expertise across domains +- **Thought Leaders**: Complete professional picture including personal interests +- **Graduate Students**: Academic profiles with research interests and education +- **Multi-Disciplinary Experts**: Professionals with diverse backgrounds and interests + +## 🚀 Why Choose Resume Biography 3? + +**Complete Picture**: Combines biography, education, and interests for comprehensive professional presentation + +**Space Efficient**: Horizontal layout maximizes content display while maintaining readability + +**Academic Focus**: Integrated education section perfect for academic and research professionals + +**Personal Touch**: Interests section adds humanity to professional profiles + +## 📊 Professional Advantages + +- **Comprehensive Credibility**: Education and interests create complete professional narrative +- **Better Engagement**: Personal interests create conversation starters and connections +- **Academic Authority**: Prominent education display builds academic credibility +- **Professional Networking**: Complete profile facilitates meaningful professional connections + +## 💡 Layout Benefits + +- **Desktop Optimization**: Horizontal layout makes excellent use of wider screens +- **Content Density**: More information displayed in less vertical space +- **Visual Balance**: Side-by-side layout creates pleasing visual composition +- **Mobile Adaptation**: Responsive design ensures great experience on all devices + +## 🎨 Educational Excellence + +- **Institution Recognition**: Clear display of educational credentials +- **Timeline Clarity**: Chronological education history with proper date formatting +- **Academic Icons**: Beautiful visual elements that reinforce educational achievements +- **Degree Emphasis**: Prominent display of areas of study and qualifications + +Perfect for academics, researchers, consultants, and professionals who want to present a complete picture of their background, education, and interests in one comprehensive, beautifully designed section. + +Create a professional profile that tells your complete story and opens doors to new opportunities. diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography-3/block.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography-3/block.html new file mode 100644 index 000000000..2ee9aefc2 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography-3/block.html @@ -0,0 +1,238 @@ +{{/* Hugo Blox: Biography 3 */}} +{{/* Documentation: https://hugoblox.com/blocks/ */}} +{{/* License: https://github.com/HugoBlox/hugo-blox-builder/blob/main/LICENSE.md */}} + +{{/* Initialise */}} +{{ $page := .wcPage }} +{{ $block := .wcBlock }} + +{{ $author := $block.content.username | default "me" }} +{{ $profile := partial "functions/get_author_profile" $author }} +{{ $avatar := $profile.avatar }} + +{{/* Avatar customization parameters */}} +{{ $avatar_size := $block.design.avatar.size | default "large" }} +{{ $avatar_shape := $block.design.avatar.shape | default "circle" }} + +{{/* Profile name typography */}} +{{ $name_size := $block.design.name.size | default "lg" }} +{{ $name_class_map := dict + "xs" "text-xl sm:text-2xl lg:text-3xl" + "sm" "text-2xl sm:text-3xl lg:text-4xl" + "md" "text-3xl sm:text-4xl lg:text-5xl" + "lg" "text-4xl sm:text-5xl lg:text-6xl" + "xl" "text-5xl sm:text-6xl lg:text-7xl" +}} +{{ $name_class := index $name_class_map $name_size | default (index $name_class_map "lg") }} + +{{/* Size mappings optimized for 2025 standards: display_size -> [display_px, generation_px] */}} +{{ $size_map := dict "small" (slice "150" "300") "medium" (slice "200" "400") "large" (slice "320" "640") "xl" (slice "400" "800") "xxl" (slice "500" "1000") }} +{{ $size_config := index $size_map $avatar_size | default (index $size_map "large") }} +{{ $display_size := index $size_config 0 }} +{{ $generation_size := index $size_config 1 }} + +{{/* Shape class mappings */}} +{{ $shape_classes := dict "circle" "rounded-full" "square" "rounded-none" "rounded" "rounded-lg" }} +{{ $shape_class := index $shape_classes $avatar_shape | default "rounded-full" }} + +
+ {{/* Add subtle top gradient for navbar transition */}} +
+
+ + {{/* Left Column: Flexible span */}} +
+ + {{/* Banner Image */}} + {{ $img := "" }} + {{with $block.design.banner.filename}} + {{- $img = resources.Get (path.Join "media" .) -}} + {{ if $img }} +
+ {{ if ne $img.MediaType.SubType "gif" }} + {{ $responsive := partial "functions/process_responsive_image.html" (dict + "image" $img + "mode" "fill" + "aspect_ratio" "16:9" + "sizes" (slice 768 1024 1366 1920 2560) + ) }} + + {{ else }} + {{- $img = $img.Process "webp" -}} + + {{ end }} +
+ {{ end }} + {{ end }} + + {{/* Avatar */}} + {{ if $avatar }} +
+ {{ $avatar_image := $avatar.Fill (printf "%sx%s Center" $generation_size $generation_size) }} + {{$profile.title}} + {{with $profile.status.icon}}{{.|emojify}}{{end}} +
+ {{ end }} + + {{/* Name and Role - Centered */}} +
+

+ {{ $profile.title }} +

+ + {{- with $profile.pronouns -}} +

({{ . }})

+ {{- end -}} + + {{ with $profile.role }} +

{{ . | markdownify | emojify }}

+ {{ end }} + + {{ range $profile.affiliations }} +

+ {{ with .url }}{{ end }} + {{ .name }} + {{ if .url }}{{ end }} +

+ {{ end }} +
+ + {{/* Social Icons */}} +
+ {{ range $profile.links }} + {{ $link := .url | default .link }} + {{ $scheme := (urls.Parse $link).Scheme }} + {{ $target := "" }} + {{ if not $scheme }} + {{ $link = (.url | default .link) | relLangURL }} + {{ if eq (path.Ext $link) ".pdf" }}{{ $target = "target=\"_blank\" rel=\"noopener\"" }}{{ end }} + {{ else if in (slice "http" "https") $scheme }} + {{ $target = "target=\"_blank\" rel=\"noopener\"" }} + {{ end }} + + {{ partial "functions/get_icon" (dict "name" .icon "attributes" "class=\"w-6 h-6\"") }} + + {{ end }} +
+
+ + {{/* Right Column: Flexible span */}} +
+ + {{/* Bio Section */}} + {{ $bio_content := ($block.content.text | emojify | $page.RenderString) | default $profile.bio }} + {{ with $bio_content }} +
+
+
+ {{ partial "functions/get_icon" (dict "name" "identification" "attributes" "class='w-6 h-6 text-primary-600 dark:text-primary-400'") }} +
+ {{ $i18n_about := i18n "about_me" }} + {{ $about_default := cond (eq $i18n_about "about_me") "Professional Summary" $i18n_about }} + {{ $about_heading := $block.content.headings.about | default $about_default }} +

{{ $about_heading }}

+
+
+
+ {{ . }} +
+
+
+ {{ end }} + + {{/* CV Download Button */}} + {{ with $block.content.button }} + + {{ end }} + + {{/* Education Section */}} + {{ with $profile.education }} +
+
+
+ {{ partial "functions/get_icon" (dict "name" "academic-cap" "attributes" "class='w-6 h-6 text-primary-600 dark:text-primary-400'") }} +
+ {{ $education_heading := $block.content.headings.education | default (i18n "education") }} +

{{ $education_heading | markdownify }}

+
+
+ {{ range . }} +
+
+
+ {{ if .icon }} + {{ partial "functions/get_icon" (dict "name" .icon "attributes" "class='w-6 h-6 text-primary-600 dark:text-primary-400'") }} + {{else}} + {{ partial "functions/get_icon" (dict "name" "academic-cap" "attributes" "class='w-6 h-6 text-primary-600 dark:text-primary-400'") }} + {{end}} +
+
+ {{ $degree := .degree | default .area }} +

+ {{ $degree }} +

+ {{ if .year }} +

{{ .year }}

+ {{ else if .start }} +

+ {{ .start }} + {{ if .end }}
{{ .end }}{{ end }} +

+ {{ end }} +

{{ .institution }}

+
+
+
+ {{ end }} +
+
+ {{ end }} + + {{/* Interests Section */}} + {{ with $profile.interests }} +
+
+
+ {{ partial "functions/get_icon" (dict "name" "sparkles" "attributes" "class='w-6 h-6 text-primary-600 dark:text-primary-400'") }} +
+ {{ $interests_heading := $block.content.headings.interests | default (i18n "interests") }} +

{{ $interests_heading | markdownify }}

+
+
+ {{ range . }} + + {{ . | markdownify | emojify }} + + {{ end }} +
+
+ {{ end }} +
+
+
+
diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography-3/manifest.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography-3/manifest.json new file mode 100644 index 000000000..6750aea10 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography-3/manifest.json @@ -0,0 +1,13 @@ +{ + "id": "resume-biography-3", + "name": "Resume Biography 3", + "version": "1.0.0", + "license": "MIT", + "category": "resume", + "tags": ["resume", "biography", "profile", "horizontal", "education", "interests", "cv", "layout"], + "description": "Horizontal biography layout with integrated education and interests sections", + "author": "Hugo Blox", + "homepage": "https://hugoblox.com/blocks/", + "repository": "https://github.com/HugoBlox/hugo-blox-builder", + "keywords": ["hugo", "resume", "biography", "horizontal", "education", "interests", "cv"] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography-3/preview.svg b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography-3/preview.svg new file mode 100644 index 000000000..01f244215 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography-3/preview.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography-3/schema.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography-3/schema.json new file mode 100644 index 000000000..6843c26af --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography-3/schema.json @@ -0,0 +1,129 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://hugoblox.com/schemas/blocks/resume-biography-3.json", + "title": "Resume Biography 3 Block Schema", + "description": "Schema for the Resume Biography 3 block - displays author bio with avatar, interests, and education in horizontal layout", + "allOf": [ + { + "$ref": "../shared/schemas/base-block.json" + }, + { + "type": "object", + "properties": { + "block": { + "const": "resume-biography-3" + }, + "content": { + "type": "object", + "description": "Content configuration for the resume biography 3 block", + "properties": { + "username": { + "type": "string", + "description": "Author username (references authors/{username}/ page)", + "default": "admin" + }, + "text": { + "type": "string", + "description": "Biography text override (supports Markdown). If not provided, uses author page content." + }, + "headings": { + "type": "object", + "description": "Optional custom headings for sections", + "properties": { + "about": { + "type": "string", + "description": "Heading for biography section (default: Professional Summary)" + }, + "education": { + "type": "string", + "description": "Heading for education section (default: from i18n 'education')" + }, + "interests": { + "type": "string", + "description": "Heading for interests section (default: from i18n 'interests')" + } + } + }, + "button": { + "type": "object", + "description": "Optional call-to-action button", + "properties": { + "url": { + "type": "string", + "description": "Button URL" + }, + "text": { + "type": "string", + "description": "Button text" + } + }, + "required": ["url", "text"] + } + } + }, + "design": { + "allOf": [ + { + "$ref": "../shared/schemas/base-block.json#/properties/design" + }, + { + "type": "object", + "properties": { + "avatar": { + "type": "object", + "description": "Avatar styling options", + "properties": { + "size": { + "type": "string", + "enum": ["small", "medium", "large", "xl", "xxl"], + "description": "Avatar size", + "default": "medium" + }, + "shape": { + "type": "string", + "enum": ["circle", "square", "rounded"], + "description": "Avatar shape", + "default": "circle" + } + } + }, + "banner": { + "type": "object", + "description": "Optional banner image", + "properties": { + "filename": { + "type": "string", + "description": "Banner image filename (in assets/media/)" + } + } + }, + "biography": { + "type": "object", + "description": "Biography text styling", + "properties": { + "style": { + "type": "string", + "description": "Custom CSS styles for biography text" + } + } + }, + "name": { + "type": "object", + "description": "Profile name typography controls", + "properties": { + "size": { + "type": "string", + "enum": ["xs", "sm", "md", "lg", "xl"], + "description": "Heading size for the profile name to suit different name lengths", + "default": "lg" + } + } + } + } + } + ] + } + } + } + ] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography/README.md b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography/README.md new file mode 100644 index 000000000..9bed5a36c --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography/README.md @@ -0,0 +1,63 @@ +# Resume Biography Block + +**Make a powerful personal first impression** + +Present yourself professionally with the Resume Biography block - a comprehensive profile component that combines your photo, personal details, social presence, and biography into one compelling, trust-building section. + +## ✨ Key Features + +- **High-Quality Avatar**: Retina-optimized profile photos with multiple size options (small to xxl) +- **Flexible Shapes**: Choose from circle, square, or rounded avatar styles +- **Social Integration**: Beautiful social media links with icon support +- **Banner Support**: Optional header banner for additional visual impact +- **Name Pronunciation**: Ruby annotation support for proper name pronunciation +- **Pronoun Support**: Inclusive pronoun display for professional clarity +- **Organization Links**: Clickable organization affiliations +- **Download Button**: Optional CV/resume download functionality + +## 🎯 Perfect For + +- **Academic Profiles**: Researchers, professors, and graduate students +- **Professional Portfolios**: Consultants, freelancers, and industry experts +- **Corporate Leadership**: Executive profiles and team member pages +- **Personal Branding**: Entrepreneurs and thought leaders +- **Creative Professionals**: Designers, writers, and artists +- **Job Seekers**: Professional online presence for career opportunities + +## 🚀 Why Choose Resume Biography Block? + +**Professional Standards**: Meets modern professional profile expectations with comprehensive information display + +**Visual Impact**: High-quality imagery and clean layout create strong first impressions + +**Social Connectivity**: Integrated social links help build professional networks + +**Accessibility First**: Inclusive features like pronunciation guides and pronoun support + +## 📊 Personal Branding Benefits + +- **Immediate Recognition**: Professional photo creates memorable personal brand +- **Credibility Signals**: Organization affiliations and social links build trust +- **Accessibility**: Pronunciation guides ensure your name is remembered correctly +- **Professional Network**: Social links facilitate professional connections + +## 💡 Customization Options + +- **Avatar Sizing**: From subtle small avatars to prominent xxl displays +- **Shape Variety**: Match your brand aesthetic with circle, square, or rounded styles +- **Banner Integration**: Add context with professional background images +- **Content Control**: Use custom biography text or pull from author page content + +## 🎨 Design Excellence + +- **High-Resolution Ready**: 2x retina support ensures crisp images on all screens +- **Typography Hierarchy**: Clear information structure from name to details +- **Generous Whitespace**: Clean layout that doesn't overwhelm visitors +- **Dark Mode Support**: Beautiful presentation in both light and dark themes + +## 💼 Professional Impact + +Perfect for building authority, establishing credibility, and creating memorable personal brands. Whether you're building a personal website, company profile, or professional portfolio, the Resume Biography block ensures you make the right first impression. + +Your professional story deserves professional presentation - create a biography section that opens doors and builds connections. + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography/block.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography/block.html new file mode 100644 index 000000000..03fbcebaf --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography/block.html @@ -0,0 +1,135 @@ +{{/* Hugo Blox: Biography */}} +{{/* Documentation: https://hugoblox.com/blocks/ */}} +{{/* License: https://github.com/HugoBlox/hugo-blox-builder/blob/main/LICENSE.md */}} + +{{/* Initialise */}} +{{ $page := .wcPage }} +{{ $block := .wcBlock }} + +{{ $author := $block.content.username | default "me" }} +{{ $profile := partial "functions/get_author_profile" $author }} +{{ $avatar := $profile.avatar }} + +{{/* Avatar customization parameters */}} +{{ $avatar_size := $block.design.avatar.size | default "medium" }} +{{ $avatar_shape := $block.design.avatar.shape | default "circle" }} + +{{/* Size mappings optimized for 2025 standards: display_size -> [display_px, generation_px] */}} +{{ $size_map := dict "small" (slice "150" "300") "medium" (slice "200" "400") "large" (slice "320" "640") "xl" (slice "400" "800") "xxl" (slice "500" "1000") }} +{{ $size_config := index $size_map $avatar_size | default (index $size_map "medium") }} +{{ $display_size := index $size_config 0 }} +{{ $generation_size := index $size_config 1 }} + +{{/* Shape class mappings */}} +{{ $shape_classes := dict "circle" "rounded-full" "square" "rounded-none" "rounded" "rounded-lg" }} +{{ $shape_class := index $shape_classes $avatar_shape | default "rounded-full" }} + +{{ $img := "" }} +{{with $block.design.banner.filename}} +{{- $img = resources.Get (path.Join "media" .) -}} +{{ if $img }} + {{ if ne $img.MediaType.SubType "gif" }} + {{ $responsive := partial "functions/process_responsive_image.html" (dict + "image" $img + "mode" "fill" + "aspect_ratio" "16:9" + "sizes" (slice 768 1024 1366 1920 2560) + ) }} +
+
+
+ +
+
+
+ {{ else }} + {{/* Handle GIF without processing */}} + {{- $img = $img.Process "webp" -}} +
+
+
+ +
+
+
+ {{ end }} +{{ end }} +{{ end }} + +
+ {{ if $avatar }} + +
+ {{ $avatar_image := $avatar.Fill (printf "%sx%s Center" $generation_size $generation_size) }} + {{$profile.title}} + {{with $profile.status.icon}}{{.|emojify}}{{end}} +
+ {{ end }} + +
+ {{- $profile.title -}} +
+ {{- with $profile.pronouns -}} +
({{ . }})
+ {{- end -}} + + {{ with $profile.role }}

{{ . | markdownify | emojify }}

{{ end }} + + {{ range $profile.affiliations }} +
+ {{ with .url }}{{ end }} +
{{ .name }}
+ {{ if .url }}
{{ end }} +
+ {{ end }} + + {{ if $profile.links }} +
    + {{ range $profile.links }} + {{ $link := .url | default .link }} + {{ $scheme := (urls.Parse $link).Scheme }} + {{ $target := "" }} + {{ if not $scheme }} + {{ $link = (.url | default .link) | relLangURL }} + {{ if eq (path.Ext $link) ".pdf" }}{{ $target = "target=\"_blank\" rel=\"noopener\"" }}{{ end }} + {{ else if in (slice "http" "https") $scheme }} + {{ $target = "target=\"_blank\" rel=\"noopener\"" }} + {{ end }} +
  • + + {{ partial "functions/get_icon" (dict "name" .icon "attributes" "style=\"height: 1.5rem;\"") }} + +
  • + {{ end }} +
+ {{ end }} + + {{ $bio_content := ($block.content.text | emojify | $page.RenderString) | default $profile.bio }} + {{ with $bio_content }} +
+
+ {{ . }} +
+
+ {{ end }} + + {{ with $block.content.button }} + {{.text}} + {{ end }} + +
diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography/manifest.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography/manifest.json new file mode 100644 index 000000000..c3e4cedfa --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography/manifest.json @@ -0,0 +1,13 @@ +{ + "id": "resume-biography", + "name": "Resume Biography", + "version": "1.0.0", + "license": "MIT", + "category": "resume", + "tags": ["resume", "biography", "profile", "avatar", "social", "about", "personal", "cv"], + "description": "Professional biography section with customizable avatar, social links, and personal information", + "author": "Hugo Blox", + "homepage": "https://hugoblox.com/blocks/", + "repository": "https://github.com/HugoBlox/hugo-blox-builder", + "keywords": ["hugo", "resume", "biography", "profile", "avatar", "social", "cv"] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography/preview.svg b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography/preview.svg new file mode 100644 index 000000000..febc8aae0 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography/preview.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography/schema.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography/schema.json new file mode 100644 index 000000000..e7a614638 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-biography/schema.json @@ -0,0 +1,99 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://hugoblox.com/schemas/blocks/resume-biography.json", + "title": "Resume Biography Block Schema", + "description": "Schema for the Resume Biography block - displays author biography with avatar, social links, and bio text", + "allOf": [ + { + "$ref": "../shared/schemas/base-block.json" + }, + { + "type": "object", + "properties": { + "block": { + "const": "resume-biography" + }, + "content": { + "type": "object", + "description": "Content configuration for the resume biography block", + "properties": { + "username": { + "type": "string", + "description": "Author username (references authors/{username}/ page)", + "default": "admin" + }, + "text": { + "type": "string", + "description": "Biography text override (supports Markdown). If not provided, uses author page content." + }, + "button": { + "type": "object", + "description": "Optional call-to-action button", + "properties": { + "url": { + "type": "string", + "description": "Button URL" + }, + "text": { + "type": "string", + "description": "Button text" + } + }, + "required": ["url", "text"] + } + } + }, + "design": { + "allOf": [ + { + "$ref": "../shared/schemas/base-block.json#/properties/design" + }, + { + "type": "object", + "properties": { + "avatar": { + "type": "object", + "description": "Avatar styling options", + "properties": { + "size": { + "type": "string", + "enum": ["small", "medium", "large", "xl", "xxl"], + "description": "Avatar size", + "default": "medium" + }, + "shape": { + "type": "string", + "enum": ["circle", "square", "rounded"], + "description": "Avatar shape", + "default": "circle" + } + } + }, + "banner": { + "type": "object", + "description": "Optional banner image", + "properties": { + "filename": { + "type": "string", + "description": "Banner image filename (in assets/media/)" + } + } + }, + "biography": { + "type": "object", + "description": "Biography text styling", + "properties": { + "style": { + "type": "string", + "description": "Custom CSS styles for biography text" + } + } + } + } + } + ] + } + } + } + ] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-experience/README.md b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-experience/README.md new file mode 100644 index 000000000..8ccb90df2 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-experience/README.md @@ -0,0 +1,65 @@ +# Resume Experience Block + +**Tell your professional journey with timeline elegance** + +Present your career progression and educational background with the Resume Experience block - a sophisticated timeline component that showcases your professional journey in a visually compelling, chronologically organized format. + +## ✨ Key Features + +- **Dual Timeline**: Separate sections for work experience and education +- **Visual Timeline**: Beautiful vertical timeline with connection lines and icons +- **Date Flexibility**: Customizable date formatting with "Present" support for current roles +- **Rich Content**: Markdown support for detailed position descriptions +- **Download Links**: Optional buttons for certificates, portfolios, or additional resources +- **Responsive Design**: Timeline adapts perfectly from desktop to mobile +- **Order Control**: Option to display education before experience + +## 🎯 Perfect For + +- **Job Seekers**: Comprehensive career history for potential employers +- **Career Professionals**: Showcase progression and diverse experience +- **Academic Professionals**: Combined academic and professional timeline +- **Consultants**: Demonstrate expertise across various roles and industries +- **Freelancers**: Highlight diverse project experience and education +- **Recent Graduates**: Emphasize education with growing professional experience + +## 🚀 Why Choose Resume Experience Block? + +**Visual Storytelling**: Timeline format makes career progression easy to follow and understand + +**Professional Standard**: Meets modern resume and CV expectations with comprehensive detail + +**Flexible Organization**: Control whether education or experience appears first based on your background + +**Rich Detail Support**: Markdown formatting allows for detailed role descriptions and achievements + +## 📊 Career Presentation Benefits + +- **Clear Progression**: Visual timeline shows career growth and development +- **Comprehensive View**: Both work and education in one cohesive presentation +- **Easy Scanning**: Timeline format allows quick review of career highlights +- **Professional Polish**: Clean, modern design that makes great first impressions + +## 💡 Timeline Psychology + +- **Sequential Understanding**: Chronological order helps viewers understand your journey +- **Achievement Focus**: Timeline format naturally highlights career milestones +- **Story Narrative**: Creates compelling career story that engages viewers +- **Future Projection**: Shows trajectory that helps employers envision your potential + +## 🎨 Visual Excellence + +- **Beautiful Icons**: Work and education icons that immediately communicate section type +- **Color Coordination**: Primary brand colors create cohesive, professional appearance +- **Typography Hierarchy**: Clear information structure from position titles to descriptions +- **Responsive Timeline**: Maintains visual appeal across all screen sizes + +## 💼 Strategic Advantages + +- **Comprehensive Coverage**: One block covers your entire professional and educational background +- **Flexible Emphasis**: Choose whether to lead with education or experience based on your strengths +- **Detail Control**: Include as much or as little detail as appropriate for your audience +- **Modern Format**: Timeline presentation feels current and engaging + +Perfect for professionals at any career stage who want to present their experience and education in a format that's both comprehensive and visually engaging. Your career journey deserves professional presentation that opens doors to new opportunities. + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-experience/block.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-experience/block.html new file mode 100644 index 000000000..e5d1ac617 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-experience/block.html @@ -0,0 +1,119 @@ +{{/* Hugo Blox: Experience */}} +{{/* Documentation: https://hugoblox.com/blocks/ */}} +{{/* License: https://github.com/HugoBlox/hugo-blox-builder/blob/main/LICENSE.md */}} + +{{/* Initialise */}} +{{ $page := .wcPage }} +{{ $block := .wcBlock }} +{{ $text := $block.content.text | emojify | $page.RenderString }} + +{{ $author := $block.content.username | default "me" }} +{{ $profile := partial "functions/get_author_profile" $author }} +{{ $is_education_first := $block.design.is_education_first | default false }} + +
+ + + + + + + +
+ +{{ $experience := or $profile.experience $profile.work }} +{{ if $experience }} +
+

{{ i18n "experience" | default "Experience" }}

+
    + {{ range $idx, $key := $experience }} +
  1. + + {{ if .icon }} + {{ partial "functions/get_icon" (dict "name" .icon "attributes" "class='w-5 h-5'") }} + {{else}} + + {{end}} + +

    {{ .role | default .position }} + +

    + {{ .org | default .company_name }} + +
    {{.summary | $page.RenderString}}
    + + {{ with .button }} + + {{ with .icon }} + {{ partial "functions/get_icon" (dict "name" . "attributes" "class='w-4 h-4'") }} + {{ end }} + {{ .text | default "Learn more" }} + + {{ end }} + +
  2. + {{ end }} +
+
+{{ end }} + +{{ if $profile.education }} +
+

{{ i18n "education" }}

+
    + {{ range $idx, $key := $profile.education }} +
  1. + + {{ if .icon }} + {{ partial "functions/get_icon" (dict "name" .icon "attributes" "class='w-5 h-5 text-primary-800 dark:text-primary-300'") }} + {{else}} + + {{end}} + +

    {{ .degree | default .area }} + +

    + {{ .institution }} + +
    {{.summary | $page.RenderString}}
    + + {{ with .button }} + + {{ with .icon }} + {{ partial "functions/get_icon" (dict "name" . "attributes" "class='w-4 h-4'") }} + {{ end }} + {{ .text | default "Learn more" }} + + {{ end }} + +
  2. + {{ end }} +
+
+{{ end }} + +
+ +
diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-experience/manifest.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-experience/manifest.json new file mode 100644 index 000000000..6c657e990 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-experience/manifest.json @@ -0,0 +1,13 @@ +{ + "id": "resume-experience", + "name": "Resume Experience", + "version": "1.0.0", + "license": "MIT", + "category": "resume", + "tags": ["resume", "experience", "timeline", "work", "education", "career", "professional", "cv"], + "description": "Professional timeline displaying work experience and education history in chronological order", + "author": "Hugo Blox", + "homepage": "https://hugoblox.com/blocks/", + "repository": "https://github.com/HugoBlox/hugo-blox-builder", + "keywords": ["hugo", "resume", "experience", "timeline", "work", "education", "career"] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-experience/preview.svg b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-experience/preview.svg new file mode 100644 index 000000000..c1c183c43 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-experience/preview.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-experience/schema.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-experience/schema.json new file mode 100644 index 000000000..12fbd10fa --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-experience/schema.json @@ -0,0 +1,56 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://hugoblox.com/schemas/blocks/resume-experience.json", + "title": "Resume Experience Block Schema", + "description": "Schema for the Resume Experience block - displays work experience and education from author profile", + "allOf": [ + { + "$ref": "../shared/schemas/base-block.json" + }, + { + "type": "object", + "properties": { + "block": { + "const": "resume-experience" + }, + "content": { + "type": "object", + "description": "Content configuration for the resume experience block", + "properties": { + "username": { + "type": "string", + "description": "Author username (references authors/{username}/ page)", + "default": "admin" + }, + "text": { + "type": "string", + "description": "Optional section description (supports Markdown)" + } + } + }, + "design": { + "allOf": [ + { + "$ref": "../shared/schemas/base-block.json#/properties/design" + }, + { + "type": "object", + "properties": { + "date_format": { + "type": "string", + "description": "Date format for experience dates", + "default": "January 2006" + }, + "is_education_first": { + "type": "boolean", + "description": "Display education before work experience", + "default": false + } + } + } + ] + } + } + } + ] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-languages/README.md b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-languages/README.md new file mode 100644 index 000000000..6cfb37b8f --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-languages/README.md @@ -0,0 +1,61 @@ +# Resume Languages Block + +**Showcase your multilingual capabilities with visual elegance** + +Highlight your language skills with the Resume Languages block - a visually striking component that uses beautiful circular progress indicators to display language proficiency levels in an immediately understandable, professional format. + +## ✨ Key Features + +- **Circular Progress Bars**: Stunning circular indicators that show proficiency at a glance +- **Percentage Display**: Clear numerical representation of language fluency levels +- **Responsive Layout**: Adapts from vertical (mobile) to horizontal (desktop) arrangement +- **Brand Colors**: Progress bars use your primary brand colors for visual consistency +- **Clean Typography**: Professional language name display with generous spacing +- **Flexible Grid**: Accommodates any number of languages with graceful layout adaptation + +## 🎯 Perfect For + +- **International Professionals**: Showcase multilingual capabilities for global opportunities +- **Translators & Interpreters**: Professional language service providers +- **Academic Researchers**: Demonstrate language skills for international collaboration +- **Travel & Tourism**: Professionals in hospitality and travel industries +- **Global Consultants**: International business professionals and consultants +- **Job Seekers**: Stand out in competitive markets with language advantages + +## 🚀 Why Choose Resume Languages Block? + +**Instant Understanding**: Circular progress bars communicate proficiency levels immediately + +**Professional Credibility**: Visual representation demonstrates serious commitment to language learning + +**Global Appeal**: Multilingual capabilities signal international readiness and cultural awareness + +**Modern Presentation**: Contemporary design that feels current and engaging + +## 📊 Visual Communication Benefits + +- **Quick Assessment**: Employers can instantly gauge your language capabilities +- **Professional Standards**: Percentage-based system aligns with common proficiency frameworks +- **Visual Impact**: Circular progress bars are more engaging than simple text lists +- **Space Efficient**: Compact design accommodates multiple languages without clutter + +## 💡 Proficiency Psychology + +- **Confidence Signaling**: Visual progress indicators demonstrate self-awareness and honesty +- **Competitive Advantage**: Language skills differentiate you in global job markets +- **Cultural Intelligence**: Multilingual display signals adaptability and cultural sensitivity +- **Learning Mindset**: Shows commitment to continuous learning and development + +## 🎨 Design Excellence + +- **Mathematical Precision**: Accurate circular progress calculations with smooth animations +- **Brand Integration**: Primary colors create cohesive visual identity +- **Responsive Behavior**: Transitions elegantly from vertical to horizontal layouts +- **Clean Aesthetics**: Generous whitespace prevents overwhelming appearance + +## 🌍 Global Market Advantages + +Perfect for professionals in increasingly connected global markets where language skills provide significant competitive advantages. Whether you're seeking international opportunities, working with diverse teams, or serving multilingual customers, the Resume Languages block presents your linguistic capabilities with the professionalism they deserve. + +Transform your language skills into visual assets that open doors to global opportunities and demonstrate your readiness for international collaboration. + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/resume-languages.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-languages/block.html similarity index 51% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/resume-languages.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-languages/block.html index 34a39d080..04789bef2 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/resume-languages.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-languages/block.html @@ -5,14 +5,9 @@ {{/* Initialise */}} {{ $page := .wcPage }} {{ $block := .wcBlock }} -{{ $author := $block.content.username | default "admin" }} - -{{ $person_page_path := (printf "/authors/%s" $author) }} -{{ $person_page := site.GetPage $person_page_path }} -{{ if not $person_page }} - {{ errorf "Could not find an author page at `%s`. Please check the value of `author` in your Skill block and create an associated author page if one does not already exist. See https://docs.hugoblox.com/page-builder/#about " $person_page_path }} -{{end}} -{{ $langs := $person_page.Params.languages }} +{{ $author := $block.content.username | default "me" }} +{{ $profile := partial "functions/get_author_profile" $author }} +{{ $langs := $profile.languages }}
@@ -22,8 +17,24 @@ {{ with $block.content.text }}

{{ . | markdownify | emojify }}

{{ end }} -
+
{{ range $langs }} + {{ $percent := 100.0 }} + {{ $levelText := .level }} + {{ $label := .label }} + + {{ $levelStr := printf "%v" ($levelText | default "") }} + {{ $numericLevel := gt (len (findRE "^[0-9]+(?:\\.[0-9]+)?$" $levelStr)) 0 }} + + {{ if $numericLevel }} + {{ $percent = mul (float $levelStr) 20 }} + {{ else if .percent }} + {{ $percent = float .percent }} + {{ end }} + + {{ if gt $percent 100 }}{{ $percent = 100 }}{{ end }} + {{ if lt $percent 0 }}{{ $percent = 0 }}{{ end }} +
@@ -31,11 +42,16 @@ class="text-gray-200 dark:text-gray-700" /> + style="stroke-dasharray: calc(2 * 22 / 7 * 120); stroke-dashoffset: calc((2 * 22 / 7 * 120) - ((2 * 22 / 7 * 120) * {{$percent}}/100))" /> - {{.percent}}% + {{ $percent }}%
{{.name}} + {{ if $label }} + {{ $label }} + {{ else if and $levelText (not $numericLevel) }} + {{ . }} + {{ end }}
{{ end }}
diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-languages/manifest.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-languages/manifest.json new file mode 100644 index 000000000..01304ac4c --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-languages/manifest.json @@ -0,0 +1,13 @@ +{ + "id": "resume-languages", + "name": "Resume Languages", + "version": "1.0.0", + "license": "MIT", + "category": "resume", + "tags": ["resume", "languages", "multilingual", "skills", "fluency", "international", "cv", "circular-progress"], + "description": "Showcase language proficiency with beautiful circular progress indicators and percentage displays", + "author": "Hugo Blox", + "homepage": "https://hugoblox.com/blocks/", + "repository": "https://github.com/HugoBlox/hugo-blox-builder", + "keywords": ["hugo", "resume", "languages", "multilingual", "fluency", "skills", "cv"] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-languages/preview.svg b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-languages/preview.svg new file mode 100644 index 000000000..85128e1ff --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-languages/preview.svg @@ -0,0 +1,41 @@ + + + + + + + + + 100% + English + + + + + 85% + Spanish + + + + + 70% + French + + + + + 60% + German + + + + + 40% + Japanese + + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-languages/schema.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-languages/schema.json new file mode 100644 index 000000000..03a42bd8e --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-languages/schema.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://hugoblox.com/schemas/blocks/resume-languages.json", + "title": "Resume Languages Block Schema", + "description": "Schema for the Resume Languages block - displays language proficiency with circular progress indicators", + "allOf": [ + { + "$ref": "../shared/schemas/base-block.json" + }, + { + "type": "object", + "properties": { + "block": { + "const": "resume-languages" + }, + "content": { + "type": "object", + "description": "Content configuration for the resume languages block", + "properties": { + "username": { + "type": "string", + "description": "Author username (references authors/{username}/ page)", + "default": "admin" + }, + "title": { + "type": "string", + "description": "Section title (supports Markdown)" + }, + "text": { + "type": "string", + "description": "Section description (supports Markdown)" + } + } + } + } + } + ] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-skills/README.md b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-skills/README.md new file mode 100644 index 000000000..827a7ecc4 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-skills/README.md @@ -0,0 +1,66 @@ +# Resume Skills Block + +**Demonstrate expertise with organized skill categories and visual progress** + +Present your technical and professional competencies with the Resume Skills block - a comprehensive component that organizes your skills into clear categories with optional visual progress indicators that immediately communicate your expertise levels. + +## ✨ Key Features + +- **Skill Categories**: Organize skills into logical groups (Technical, Soft Skills, Tools, etc.) +- **Progress Visualization**: Optional progress bars show proficiency levels at a glance +- **Icon Integration**: Beautiful icons for each skill that enhance visual recognition +- **Flexible Layout**: Side-by-side categories on larger screens, stacked on mobile +- **Custom Colors**: Configurable progress bar colors to match your brand +- **Automatic Bars**: Bars appear when a skill has a level (1–5) +- **Markdown Support**: Rich text formatting for skill names and descriptions + +## 🎯 Perfect For + +- **Software Developers**: Showcase programming languages, frameworks, and tools +- **Designers**: Display creative software proficiency and design skills +- **Data Professionals**: Highlight analytics tools, programming languages, and methodologies +- **Marketing Professionals**: Present digital marketing tools and strategic capabilities +- **Project Managers**: Demonstrate methodologies, tools, and soft skills +- **Technical Consultants**: Comprehensive skill display across multiple domains + +## 🚀 Why Choose Resume Skills Block? + +**Clear Organization**: Skill categories help employers quickly find relevant expertise + +**Visual Proficiency**: Progress bars provide immediate understanding of skill levels + +**Comprehensive Coverage**: Support both technical and soft skills in one organized presentation + +**Professional Standards**: Clean, modern layout that meets current resume expectations + +## 📊 Skill Presentation Benefits + +- **Quick Scanning**: Organized categories allow rapid skill assessment +- **Honest Communication**: Progress bars encourage accurate self-assessment +- **Visual Engagement**: Icons and progress bars are more engaging than text lists +- **Comprehensive View**: Categories ensure no important skills are overlooked + +## 💡 Professional Psychology + +- **Expertise Signaling**: Visual progress bars demonstrate self-awareness and competence +- **Category Logic**: Organized presentation shows systematic thinking +- **Skill Balance**: Mix of technical and soft skills presents well-rounded professional +- **Growth Mindset**: Percentage-based system implies commitment to skill development + +## 🎨 Customization Excellence + +- **Brand Colors**: Progress bars and icons can match your personal or company branding +- **Icon Flexibility**: Support for various icon packs to match your aesthetic +- **Layout Control**: Choose between progress bars or simple lists based on your preference +- **Content Freedom**: Unlimited skill categories and items for comprehensive coverage + +## 💼 Strategic Applications + +- **Career Positioning**: Clearly communicate your unique skill combination +- **Job Matching**: Help employers quickly identify relevant expertise +- **Skill Gaps**: Identify areas for professional development +- **Team Fit**: Demonstrate how your skills complement team needs + +Perfect for technical professionals, creative experts, and anyone who wants to present their skills in an organized, visually appealing format that helps employers quickly understand their capabilities and expertise levels. + +Turn your skill set into a competitive advantage with professional presentation that clearly communicates your value proposition. diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/resume-skills.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-skills/block.html similarity index 50% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/resume-skills.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-skills/block.html index 25323a70c..36243c4e2 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/resume-skills.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-skills/block.html @@ -5,15 +5,9 @@ {{/* Initialise */}} {{ $page := .wcPage }} {{ $block := .wcBlock }} -{{ $author := $block.content.username | default "admin" }} - -{{ $person_page_path := (printf "/authors/%s" $author) }} -{{ $person_page := site.GetPage $person_page_path }} -{{ if not $person_page }} -{{ errorf "Could not find an author page at `%s`. Please check the value of `author` in your Skill block and create an associated author page if one does not already exist. See https://docs.hugoblox.com/page-builder/#about " $person_page_path }} -{{end}} -{{ $skills := $person_page.Params.skills }} -{{ $show_show_skill_percentage := $block.design.show_skill_percentage | default true }} +{{ $author := $block.content.username | default "me" }} +{{ $profile := partial "functions/get_author_profile" $author }} +{{ $skills := $profile.skills | default (slice) }}
@@ -24,22 +18,18 @@ {{ with $block.content.text }}

{{ . | markdownify | emojify }}

{{ end }}
-
+{{ $columns := $block.design.columns | default 2 }} +
{{ range $skills }} {{ $color := .color | default "" }} {{ $color_border := .color_border | default "" }} -
+
{{ .name | markdownify | emojify }} {{ with .description }}

{{ . | markdownify | emojify }}

{{ end }}
- {{ range .items }} - {{ $pack := or .icon_pack "fas" }} - {{ $pack_prefix := $pack }} - {{ if in (slice "fab" "fas" "far" "fal") $pack }} - {{ $pack_prefix = "fa" }} - {{ end }} + {{ range (.items | default (slice)) }}
@@ -49,13 +39,26 @@ {{ end }} + {{ $label := .label | default .name }} - {{ .name | markdownify | emojify }} + {{ $label | markdownify | emojify }} {{ with .description }}

{{ . | markdownify | emojify }}

{{ end }}
- {{ if .percent | and $show_show_skill_percentage }} + {{/* Numeric level (1-5) only. */}} + {{ $level := 0.0 }} + {{ if isset . "level" }} + {{ $raw := .level }} + {{ $type := printf "%T" $raw }} + {{ if or (eq $type "int") (eq $type "int64") (eq $type "int32") (eq $type "int16") (eq $type "int8") (eq $type "uint") (eq $type "uint64") (eq $type "uint32") (eq $type "uint16") (eq $type "uint8") (eq $type "float64") (eq $type "float32") }} + {{ $level = float $raw }} + {{ end }} + {{ end }} + {{ if gt $level 5 }}{{ $level = 5 }}{{ end }} + {{ if lt $level 0 }}{{ $level = 0 }}{{ end }} + {{ if gt $level 0 }} + {{ $levelPercent := mul $level 20 }}
-
+
{{ end }}
@@ -63,4 +66,3 @@
{{ end }}
- diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-skills/manifest.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-skills/manifest.json new file mode 100644 index 000000000..6fac91e63 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-skills/manifest.json @@ -0,0 +1,13 @@ +{ + "id": "resume-skills", + "name": "Resume Skills", + "version": "1.0.0", + "license": "MIT", + "category": "resume", + "tags": ["resume", "skills", "technical", "progress-bars", "expertise", "professional", "competencies", "cv"], + "description": "Display technical and professional skills with optional progress bars and organized categories", + "author": "Hugo Blox", + "homepage": "https://hugoblox.com/blocks/", + "repository": "https://github.com/HugoBlox/hugo-blox-builder", + "keywords": ["hugo", "resume", "skills", "technical", "progress", "expertise", "cv"] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-skills/preview.svg b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-skills/preview.svg new file mode 100644 index 000000000..05c704044 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-skills/preview.svg @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 90% + 70% + 80% + 60% + + 85% + 75% + 88% + 95% + + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-skills/schema.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-skills/schema.json new file mode 100644 index 000000000..f3f59acb6 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/resume-skills/schema.json @@ -0,0 +1,49 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://hugoblox.com/schemas/blocks/resume-skills.json", + "title": "Resume Skills Block Schema", + "description": "Schema for the Resume Skills block - displays skills from author profile with optional progress bars", + "allOf": [ + { + "$ref": "../shared/schemas/base-block.json" + }, + { + "type": "object", + "properties": { + "block": { + "const": "resume-skills" + }, + "content": { + "type": "object", + "description": "Content configuration for the resume skills block", + "properties": { + "username": { + "type": "string", + "description": "Author username (references authors/{username}/ page)", + "default": "admin" + }, + "title": { + "type": "string", + "description": "Section title (supports Markdown)" + }, + "text": { + "type": "string", + "description": "Section description (supports Markdown)" + } + } + }, + "design": { + "allOf": [ + { + "$ref": "../shared/schemas/base-block.json#/properties/design" + }, + { + "type": "object", + "properties": {} + } + ] + } + } + } + ] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/search-hero/README.md b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/search-hero/README.md new file mode 100644 index 000000000..629a1b7b4 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/search-hero/README.md @@ -0,0 +1,265 @@ +# Search Hero Block + +A modern hero section with prominent search functionality, perfect for knowledge bases and documentation sites. + +## Features + +- 🔍 **Integrated Search** - Opens Hugo Blox search modal +- 💎 **Gradient Text Highlighting** - Eye-catching emphasized text +- 🎨 **Animated Backgrounds** - Gradient mesh with pulsing orbs +- 📊 **Stats Display** - Showcase key metrics +- 🏷️ **Badge Support** - With optional pulsing indicator +- 🔥 **Popular Searches** - Quick suggestion pills +- 📱 **Fully Responsive** - Beautiful on all devices + +## Basic Usage + +```yaml +sections: + - block: search-hero + content: + title: "Your Knowledge Hub" + subtitle: "Find answers to all your questions" +``` + +## Title Highlighting + +Use `==text==` syntax to apply gradient highlighting to any words or phrases: + +### Single Highlight + +```yaml +title: "Master ==AI Tools==" +``` + +**Result**: "Master" in regular text, "AI Tools" with gradient + +### Multiple Highlights + +```yaml +title: "Master ==AI Tools==. ==Boost Your Productivity.==" +``` + +**Result**: Both "AI Tools" and "Boost Your Productivity" highlighted + +### Mid-Sentence Highlighting + +```yaml +title: "Build ==amazing== websites with ==Hugo Blox==" +``` + +**Result**: "amazing" and "Hugo Blox" highlighted within the sentence + +### i18n-Friendly + +```yaml +# en.yaml +- id: hero_title + translation: "Master ==AI Tools==. ==Boost Productivity.==" + +# es.yaml +- id: hero_title + translation: "Domina ==Herramientas IA==. ==Aumenta Productividad.==" +``` + +Each language can highlight naturally! + +## Complete Example + +```yaml +sections: + - block: search-hero + content: + badge: + text: "500+ AI answers added this week" + show_pulse: true # Shows pulsing dot indicator + + title: "Master ==AI Tools==. ==Boost Your Productivity.==" + + subtitle: "Get instant answers to your AI questions from our comprehensive knowledge base." + + search_placeholder: "Ask anything about AI tools, prompts, or workflows..." + + suggestions: + - "ChatGPT prompts" + - "Midjourney tips" + - "AI automation" + - "Claude vs GPT-4" + + stats: + - value: "2,500+" + label: "Expert Answers" + - value: "50K+" + label: "Monthly Users" + - value: "4.9/5" + label: "User Rating" + + design: + background: + gradient_mesh: + enable: true + style: "orbs" # orbs, waves, dots, grid + animation: "pulse" # pulse, float, rotate, none + intensity: "subtle" # subtle, medium, bold + colors: + - "primary-500/20" + - "primary-600/20" + spacing: + padding: ["8rem", "0", "6rem", "0"] +``` + +## Properties + +### Content + +#### `badge` +- **Type**: Object +- **Optional** +- **Properties**: + - `text` (string): Badge text + - `show_pulse` (boolean): Show pulsing dot indicator + +#### `title` +- **Type**: String +- **Required** +- **Description**: Main heading. Use `==text==` for gradient highlighting +- **Example**: `"Build ==Amazing== Websites"` + +#### `subtitle` +- **Type**: String +- **Optional** +- **Description**: Supporting text below title + +#### `search_placeholder` +- **Type**: String +- **Optional** +- **Default**: "Search for answers..." +- **Description**: Placeholder text in search box + +#### `suggestions` +- **Type**: Array of strings +- **Optional** +- **Description**: Quick search suggestion pills +- **Example**: `["Topic 1", "Topic 2"]` + +#### `stats` +- **Type**: Array of objects +- **Optional** +- **Description**: Metrics displayed below search +- **Properties**: + - `value` (string): Metric value (e.g., "2,500+") + - `label` (string): Metric description + +### Design + +See [Gradient Mesh Guide](../../../../GRADIENT_MESH_GUIDE.md) for complete background options. + +## Styling Tips + +### Gradient Colors + +The `==text==` highlighting uses: +```css +background: linear-gradient(to-right, primary-600, primary-500); +background-clip: text; +``` + +This automatically adapts to your site's primary color theme. + +### Stat Layout + +Stats automatically: +- Display in 3-column grid +- Center-aligned +- Responsive on mobile + +### Search Integration + +The search button automatically: +- Opens Hugo Blox search modal +- Works with Cmd+K shortcut +- Supports pre-filled queries from suggestions + +## Examples + +### Knowledge Base (Current) + +```yaml +title: "Master ==AI Tools==. ==Boost Your Productivity.==" +``` + +### Documentation Site + +```yaml +title: "==Comprehensive== Documentation for ==Developers==" +``` + +### Product Landing + +```yaml +title: "Build ==Faster==. Ship ==Better==. Scale ==Effortlessly.==" +``` + +### Academic/Research + +```yaml +title: "Advancing ==Science== Through ==Collaboration==" +``` + +## Best Practices + +### 1. Highlight Key Value Props + +✅ **Good**: Highlight unique value or action words +```yaml +title: "Learn ==Faster== with AI" +``` + +❌ **Bad**: Highlight common words +```yaml +title: "Learn Faster ==with== AI" +``` + +### 2. Don't Over-Highlight + +✅ **Good**: 1-3 highlighted phrases max +```yaml +title: "Master ==AI Tools==. Boost ==Productivity==." +``` + +❌ **Bad**: Everything highlighted +```yaml +title: "==Master== ==AI== ==Tools==. ==Boost== ==Your== ==Productivity==." +``` + +### 3. Keep Highlights Meaningful + +Highlighted text should be: +- **Scannable** - Key phrases users notice first +- **Actionable** - Words that convey benefit +- **Brief** - 1-4 words per highlight + +## Advanced Examples + +### Corporate Landing + +```yaml +title: "Transform ==Your Business== with AI" +``` + +### Educational Platform + +```yaml +title: "Learn ==Smarter==, Not ==Harder==" +``` + +## Technical Notes + +- **Regex Pattern**: `==([^=]+)==` matches text between double equals +- **Processing**: Applied before markdownify, so Markdown works inside highlights +- **Output**: `text` +- **Performance**: No runtime cost, processed at build time + +--- + +**Part of Hugo Blox Builder** - https://hugoblox.com diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/search-hero/block.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/search-hero/block.html new file mode 100644 index 000000000..99d10bf62 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/search-hero/block.html @@ -0,0 +1,98 @@ +{{- $wcPage := .wcPage -}} +{{- $wcBlock := .wcBlock -}} +{{- $wcIdentifier := .wcIdentifier -}} + +{{/* Enable Alpine.js for interactivity */}} +{{ $wcPage.Page.Store.Set "has_alpine" true }} + +{{/* Background is now handled by parse_block_v3.html gradient_mesh system */}} +{{/* Content only - wrapper and styling applied by framework */}} +
+
+ + {{/* Badge */}} + {{ with $wcBlock.content.badge }} +
+ {{ with .show_pulse }} + + + + + {{ end }} + {{ .text | markdownify }} +
+ {{ end }} + + {{/* Title - supports ==highlight== syntax for gradient text */}} + {{ $title := $wcBlock.content.title }} + {{/* Replace ==text== with gradient-highlighted spans - supports multiple highlights */}} + {{ $title = replaceRE "==([^=]+)==" "$1" $title }} + +

+ {{ $title | markdownify | emojify | safeHTML }} +

+ + {{/* Subtitle */}} + {{ with $wcBlock.content.subtitle }} +

+ {{ . | markdownify | emojify }} +

+ {{ end }} + + {{/* Search Box - Integrates with Pagefind */}} +
+ + + {{/* Quick search suggestions - Now trigger Pagefind with pre-filled query */}} + {{ with $wcBlock.content.suggestions }} +
+ Popular: + {{ range . }} + + {{ end }} +
+ {{ end }} +
+ + {{/* Stats */}} + {{ if $wcBlock.content.stats }} +
+ {{ range $wcBlock.content.stats }} +
+
{{ .value }}
+
{{ .label }}
+
+ {{ end }} +
+ {{ end }} + +
+
diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/search-hero/manifest.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/search-hero/manifest.json new file mode 100644 index 000000000..0d737d976 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/search-hero/manifest.json @@ -0,0 +1,8 @@ +{ + "name": "search-hero", + "version": "1", + "title": "Search Hero", + "description": "Hero section with prominent search for knowledge bases", + "categories": ["hero", "search"], + "preview": "preview.svg" +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/search-hero/schema.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/search-hero/schema.json new file mode 100644 index 000000000..63eca2632 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/search-hero/schema.json @@ -0,0 +1,114 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "title": "Search Hero Block", + "description": "A hero section with prominent search functionality for knowledge bases", + "properties": { + "content": { + "type": "object", + "properties": { + "badge": { + "type": "object", + "properties": { + "text": { + "type": "string", + "description": "Badge text" + }, + "show_pulse": { + "type": "boolean", + "description": "Show pulsing dot indicator" + } + } + }, + "title": { + "type": "string", + "description": "Main title. Use ==text== syntax to apply gradient highlighting to any words or phrases. Example: 'Master ==AI Tools==. ==Boost Your Productivity.=='" + }, + "subtitle": { + "type": "string", + "description": "Subtitle text" + }, + "search_placeholder": { + "type": "string", + "description": "Search input placeholder" + }, + "suggestions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Quick search suggestions" + }, + "stats": { + "type": "array", + "items": { + "type": "object", + "properties": { + "value": { + "type": "string", + "description": "Stat value" + }, + "label": { + "type": "string", + "description": "Stat label" + } + } + } + } + } + }, + "design": { + "type": "object", + "properties": { + "spacing": { + "type": "object" + }, + "background": { + "type": "object", + "properties": { + "color": { + "type": "string", + "description": "Background color (Tailwind class)" + }, + "gradient_mesh": { + "type": "object", + "description": "Animated gradient mesh background", + "properties": { + "enable": { + "type": "boolean", + "description": "Enable animated gradient mesh" + }, + "style": { + "type": "string", + "enum": ["orbs", "waves", "dots", "grid"], + "description": "Visual style of gradient mesh", + "default": "orbs" + }, + "animation": { + "type": "string", + "enum": ["pulse", "float", "rotate", "none"], + "description": "Animation type", + "default": "pulse" + }, + "intensity": { + "type": "string", + "enum": ["subtle", "medium", "bold"], + "description": "Visual intensity", + "default": "subtle" + }, + "colors": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Tailwind colors with opacity (e.g., 'primary-500/20')", + "default": ["primary-500/20", "primary-600/20"] + } + } + } + } + } + } + } + } +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/shared/js/components/Icon.jsx b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/shared/js/components/Icon.jsx new file mode 100644 index 000000000..9889b0ebd --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/shared/js/components/Icon.jsx @@ -0,0 +1,48 @@ +// biome-ignore lint/correctness/noUnusedImports: Classic Preact JSX runtime may require 'h' for JSX transform +import {h} from "preact"; + +/** + * Icon component + * Renders an SVG icon from a raw SVG string passed from Hugo. + * Decodes JSON-escaped sequences (\u003c) and HTML entities (<, ", "). + */ +export const Icon = ({svg, attributes}) => { + if (!svg) return null; + + let decoded = String(svg) + .replace(/\\u003c/gi, "<") + .replace(/\\u003e/gi, ">") + .replace(/\\u0026/gi, "&") + .replace(/</gi, "<") + .replace(/>/gi, ">") + .replace(/"/gi, '"') + .replace(/"/gi, '"') + .replace(/&/gi, "&"); + + const hasWrapper = /]/i.test(decoded); + + if (hasWrapper) { + if (/]*class=/i.test(decoded)) { + decoded = decoded.replace(/]*?)class="([^"]*)"([^>]*)>/i, ''); + } else { + decoded = decoded.replace(/; + } + + const finalAttributes = { + class: "inline-block w-4 h-4", + fill: "currentColor", + viewBox: "0 0 20 20", + ...(attributes || {}), + }; + + const attrs = Object.entries(finalAttributes) + .map(([k, v]) => `${k}="${String(v)}"`) + .join(" "); + + // eslint-disable-next-line lint/security/noDangerouslySetInnerHtml + return ${decoded}`}} />; +}; diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/shared/schemas/README.md b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/shared/schemas/README.md new file mode 100644 index 000000000..e4ff756ad --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/shared/schemas/README.md @@ -0,0 +1,138 @@ +# Hugo Blox JSON Schemas + +This directory contains JSON schemas for all Hugo Blox blocks, providing IDE autocomplete, validation, and documentation. + +## Schema Organization + +``` +blox/ + shared/schemas/ + base-block.json # Common parameters for all blocks + sections.json # Schema for the sections array + landing-page.json # Complete landing page front matter schema + README.md # This file + hero/ + schema.json # Hero-specific parameters + features/ + schema.json # Features-specific parameters + ... # Each block has its own schema +``` + +## Usage in IDEs + +### VS Code + +Add to your workspace `.vscode/settings.json`: + +```json +{ + "yaml.schemas": { + "https://hugoblox.com/schemas/landing-page.json": ["content/_index.md", "content/**/index.md"], + "https://hugoblox.com/schemas/sections.json": ["sections"] + }, + "json.schemas": [ + { + "fileMatch": ["**/content/_index.md"], + "url": "https://hugoblox.com/schemas/landing-page.json" + } + ] +} +``` + +### Local Development + +Schemas are mounted to `/static/schemas/` and available at: + +- `https://your-site.com/schemas/landing-page.json` +- `https://your-site.com/schemas/sections.json` +- `https://your-site.com/schemas/blocks/hero.json` + +## Schema Features + +### Base Schema + +All blocks inherit from `base-block.json` which provides: + +- **Block identification**: `block` parameter (required) +- **Legacy support**: `blox` parameter (deprecated) +- **Section styling**: `id`, `demo` flags +- **Design options**: background, spacing, CSS customization +- **Layout options**: columns, view types, etc. + +### Block-Specific Schemas + +Each block extends the base schema with its specific parameters: + +```yaml +# Example: Hero block with full autocomplete support +sections: + - block: hero # ✅ Autocomplete available + content: + title: 'Welcome' # ✅ Validated parameter + text: 'Description' # ✅ Type-checked + primary_action: # ✅ Object structure enforced + url: '/contact' + text: 'Get Started' + icon: 'hero/arrow-right' + design: + background: # ✅ Inherited from base schema + color: 'navy' + text_color_light: true +``` + +### Validation Benefits + +- **Parameter validation**: Catch typos and invalid values +- **Required fields**: Ensure essential parameters are provided +- **Type safety**: String/number/boolean/array validation +- **Enum constraints**: Limited choice fields (e.g., avatar shapes) +- **Deprecation warnings**: Legacy parameter notifications + +## Schema Development + +### Adding New Blocks + +1. Create `blox/my-new-block/schema.json` +2. Extend `base-block.json` +3. Add to `sections.json` oneOf array +4. Document block-specific parameters + +### Schema Template + +```json +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://hugoblox.com/schemas/blocks/my-block.json", + "title": "My Block Schema", + "description": "Schema for my custom block", + "allOf": [ + {"$ref": "../shared/schemas/base-block.json"}, + { + "type": "object", + "properties": { + "block": {"const": "my-block"}, + "content": { + "type": "object", + "properties": { + "title": {"type": "string"} + } + } + } + } + ] +} +``` + +## Context-Aware Strategy + +Hugo Blox uses different terminology based on context: + +| Context | Term | Example | +| --------------------- | -------- | ---------------------- | +| **Developer Configs** | `block` | `block: hero` | +| **Source Structure** | `blox/` | `blox/hero/block.html` | +| **UI/Documentation** | "Blox" | "Hugo Blox blocks" | +| **URLs/SEO** | `blocks` | `/blocks/hero` | + +This provides optimal developer experience while maintaining brand identity. + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/shared/schemas/base-block.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/shared/schemas/base-block.json new file mode 100644 index 000000000..03aead592 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/shared/schemas/base-block.json @@ -0,0 +1,208 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://hugoblox.com/schemas/base-block.json", + "title": "Hugo Blox Base Block Schema", + "description": "Common parameters available to all Hugo Blox blocks", + "type": "object", + "properties": { + "block": { + "type": "string", + "description": "Block type identifier (required)" + }, + "blox": { + "type": "string", + "description": "Legacy block type identifier (deprecated, use 'block' instead)", + "deprecated": true + }, + "id": { + "type": "string", + "description": "Optional unique identifier for this section" + }, + "demo": { + "type": "boolean", + "description": "Whether this section should only appear in demo mode", + "default": false + }, + "design": { + "type": "object", + "description": "Design and styling options", + "properties": { + "background": { + "type": "object", + "description": "Background styling options", + "properties": { + "color": { + "oneOf": [ + { + "type": "string", + "description": "Single color value" + }, + { + "type": "object", + "properties": { + "light": { + "type": "string", + "description": "Light mode color" + }, + "dark": { + "type": "string", + "description": "Dark mode color" + } + }, + "additionalProperties": false + } + ], + "description": "Background color (supports Tailwind colors, hex, rgb)" + }, + "gradient": { + "type": "object", + "description": "Gradient configuration", + "properties": { + "start": { + "type": "string", + "description": "Gradient start color" + }, + "end": { + "type": "string", + "description": "Gradient end color" + }, + "direction": { + "type": "string", + "description": "Gradient direction in degrees", + "default": "135" + } + }, + "required": ["start", "end"], + "additionalProperties": false + }, + "text_color_light": { + "type": "boolean", + "description": "Whether to use light text color (for dark backgrounds)" + }, + "image": { + "type": "object", + "description": "Background image options", + "properties": { + "filename": { + "type": "string", + "description": "Image filename in assets/media/" + }, + "size": { + "type": "string", + "enum": ["cover", "contain", "actual"], + "description": "Background image size behavior", + "default": "cover" + }, + "position": { + "type": "string", + "enum": ["left", "center", "right"], + "description": "Background image position", + "default": "center" + }, + "parallax": { + "type": "boolean", + "description": "Enable parallax effect on desktop", + "default": true + }, + "filters": { + "type": "object", + "properties": { + "brightness": { + "type": "number", + "description": "Image brightness filter (0-1, where 1 is normal)", + "minimum": 0, + "maximum": 1 + } + } + } + } + }, + "video": { + "type": "object", + "description": "Background video options", + "properties": { + "filename": { + "type": "string", + "description": "Video filename in assets/media/" + }, + "flip": { + "type": "boolean", + "description": "Flip video horizontally", + "default": false + } + } + } + } + }, + "spacing": { + "type": "object", + "description": "Spacing options", + "properties": { + "padding": { + "type": "array", + "description": "Padding values [top, right, bottom, left]", + "items": { + "type": "string" + }, + "minItems": 4, + "maxItems": 4 + } + } + }, + "clip_path": { + "type": "string", + "description": "CSS clip-path value" + }, + "css_style": { + "type": "string", + "description": "Custom CSS styles to apply to the section" + }, + "css_class": { + "type": "string", + "description": "Custom CSS classes to apply to the section" + }, + "columns": { + "type": ["string", "number"], + "description": "Number of columns for layout", + "default": "1" + }, + "view": { + "type": "string", + "description": "Display view type (used by collection block)", + "enum": ["card", "compact", "showcase", "citation", "list", "masonry"] + }, + "loop": { + "type": "boolean", + "description": "Enable looping (for slider blocks)", + "default": true + }, + "interval": { + "type": ["string", "number"], + "description": "Interval in milliseconds (for slider blocks)", + "default": "3000" + }, + "no_padding": { + "type": "boolean", + "description": "Disable default padding (for hero block)", + "default": false + }, + "card": { + "type": "object", + "description": "Card styling options (for CTA card block)", + "properties": { + "css_class": { + "type": "string", + "description": "CSS classes for the card" + }, + "css_style": { + "type": "string", + "description": "CSS styles for the card" + } + } + } + } + } + }, + "required": ["block"], + "additionalProperties": true +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/shared/schemas/landing-page.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/shared/schemas/landing-page.json new file mode 100644 index 000000000..95adb70ca --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/shared/schemas/landing-page.json @@ -0,0 +1,102 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://hugoblox.com/schemas/landing-page.json", + "title": "Hugo Blox Landing Page Schema", + "description": "Schema for Hugo Blox landing page front matter", + "type": "object", + "properties": { + "title": { + "type": "string", + "description": "Page title" + }, + "summary": { + "type": "string", + "description": "Page summary/description" + }, + "date": { + "type": "string", + "format": "date-time", + "description": "Page publication date" + }, + "lastmod": { + "type": "string", + "format": "date-time", + "description": "Page last modified date" + }, + "draft": { + "type": "boolean", + "description": "Whether the page is a draft", + "default": false + }, + "featured": { + "type": "boolean", + "description": "Whether the page is featured", + "default": false + }, + "authors": { + "type": "array", + "description": "Page authors", + "items": { + "type": "string" + } + }, + "tags": { + "type": "array", + "description": "Page tags", + "items": { + "type": "string" + } + }, + "categories": { + "type": "array", + "description": "Page categories", + "items": { + "type": "string" + } + }, + "type": { + "const": "landing", + "description": "Page type (must be 'landing' for landing pages)" + }, + "sections": { + "$ref": "./sections.json", + "description": "Array of content blocks for the landing page" + }, + "design": { + "type": "object", + "description": "Global page design options", + "properties": { + "spacing": { + "type": "string", + "description": "Default section spacing" + } + } + }, + "header": { + "type": "object", + "description": "Page-specific header configuration", + "properties": { + "navbar": { + "type": "object", + "properties": { + "enable": { + "type": "boolean", + "description": "Enable/disable navbar for this page" + }, + "block": { + "type": "string", + "description": "Header block to use (e.g., 'navbar', 'navbar-simple')" + }, + "blox": { + "type": "string", + "description": "Legacy header block parameter (deprecated, use 'block')", + "deprecated": true + } + } + } + } + } + }, + "required": ["type", "sections"], + "additionalProperties": true +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/shared/schemas/sections.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/shared/schemas/sections.json new file mode 100644 index 000000000..86d1d6cfc --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/shared/schemas/sections.json @@ -0,0 +1,26 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://hugoblox.com/schemas/sections.json", + "title": "Hugo Blox Sections Schema", + "description": "Schema for the sections array in Hugo Blox landing pages", + "type": "array", + "items": { + "oneOf": [ + { "$ref": "../hero/schema.json" }, + { "$ref": "../features/schema.json" }, + { "$ref": "../collection/schema.json" }, + { "$ref": "../markdown/schema.json" }, + { "$ref": "../stats/schema.json" }, + { "$ref": "../testimonials/schema.json" }, + { "$ref": "../cta-button-list/schema.json" }, + { "$ref": "../cta-card/schema.json" }, + { "$ref": "../cta-image-paragraph/schema.json" }, + { "$ref": "../resume-experience/schema.json" }, + { "$ref": "../resume-biography/schema.json" }, + { "$ref": "../resume-biography-3/schema.json" }, + { "$ref": "../resume-skills/schema.json" }, + { "$ref": "../resume-awards/schema.json" }, + { "$ref": "../resume-languages/schema.json" } + ] + } +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/stats/README.md b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/stats/README.md new file mode 100644 index 000000000..816538507 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/stats/README.md @@ -0,0 +1,227 @@ +# Stats Block + +Display impressive statistics with modern animations, icons, and engaging visual effects. Perfect for showcasing lab achievements, research metrics, and organizational highlights. + +## Key Features + +- **🎬 Counter Animations**: Numbers count up on scroll with easing +- **📊 Visual Icons**: Icons for each statistic enhance comprehension +- **🎨 Multiple Layouts**: Cards, compact, or minimal display modes +- **📱 Responsive Design**: Adapts beautifully to all screen sizes +- **🌙 Dark Mode Ready**: Seamless theme switching +- **⚡ Performance**: CSS-first animations with minimal JavaScript +- **🎯 Intersection Observer**: Animations trigger when scrolled into view +- **✨ Hover Effects**: Subtle interactions for engagement + +## Layout Options + +### Cards Layout (Default) +Modern card-based design featuring: +- Individual cards with shadows and hover effects +- Icons with background circles +- Gradient hover states +- Staggered animation entry +- Optimal for 2-4 statistics + +### Compact Layout +Single card with divided sections: +- Unified background +- Bordered divisions +- Space-efficient +- Good for 3-6 statistics + +### Minimal Layout +Clean, icon-centric design: +- No backgrounds or borders +- Focus on typography +- Suitable for headers/footers +- Works well with many statistics + +## Usage Examples + +### Research Lab Metrics (Enhanced) +```yaml +sections: + - block: stats + content: + title: Impact by the Numbers + text: Driving scientific discovery through measurable achievements + items: + - statistic: "150+" + description: Publications in top-tier journals + sub_metric: Nature, Science, Cell, PNAS + icon: hero/document-text + + - statistic: "25" + description: Brilliant researchers and scientists + sub_metric: From 12 countries worldwide + icon: hero/user-group + + - statistic: "$12M" + description: Active research funding + sub_metric: NSF, NIH, DOE grants + icon: hero/currency-dollar + + - statistic: "8" + description: Breakthrough discoveries + sub_metric: Patent applications filed + icon: hero/light-bulb + design: + layout: cards + css_class: "bg-gradient-to-b from-primary-50 to-white dark:from-primary-900/20 dark:to-gray-800" +``` + +### University Department Stats +```yaml +content: + items: + - statistic: "2,500" + description: Students enrolled + icon: hero/academic-cap + - statistic: "95%" + description: Graduation rate + icon: hero/chart-bar + - statistic: "40+" + description: Countries represented + icon: hero/globe-alt +design: + layout: compact +``` + +### Startup Metrics +```yaml +content: + items: + - statistic: "$2.5M" + description: Funding raised + icon: hero/banknotes + - statistic: "10K+" + description: Active users + icon: hero/users + - statistic: "98.5%" + description: Uptime reliability + icon: hero/chart-line +design: + layout: minimal +``` + +## Animation Features + +### Counter Animation +- **Easing**: Smooth ease-out cubic function +- **Duration**: 2 seconds for optimal viewing +- **Trigger**: Intersection Observer when 50% visible +- **Number Extraction**: Automatically extracts numbers from text + +### Entrance Animation +- **Staggered Entry**: Items animate in sequence +- **Fade + Slide**: Combines opacity and translateY +- **Delay Timing**: 150ms between items +- **Threshold**: Triggers 100px before entering viewport + +### Hover Effects +- **Scale Transform**: Icons scale 110% on hover +- **Color Transitions**: Text color changes +- **Background Glow**: Subtle gradient overlay +- **Shadow Enhancement**: Deeper shadows on hover + +## Configuration Options + +### Content Fields +- **title**: Optional section heading +- **text**: Optional description +- **items**: Array of statistics + - `statistic`: Number or value (required) + - `description`: What the number represents (required) + - `icon`: Icon identifier (optional) + - `sub_metric`: Additional context (optional) + +### Design Options +- **layout**: Visual layout + - `cards`: Individual cards (default) + - `compact`: Single divided card + - `minimal`: Clean typography focus + +## Icon Guidelines + +### Recommended Icons for Common Stats + +**Publications/Research:** +- `hero/document-text` - Publications +- `hero/beaker` - Research projects +- `hero/light-bulb` - Discoveries/innovations +- `hero/trophy` - Awards/recognition + +**People/Team:** +- `hero/user-group` - Team members +- `hero/academic-cap` - Students/graduates +- `hero/users` - Community/users +- `hero/heart` - Satisfaction ratings + +**Financial/Business:** +- `hero/currency-dollar` - Funding/revenue +- `hero/banknotes` - Investments +- `hero/chart-bar` - Growth metrics +- `hero/building-office` - Locations + +**Technology/Digital:** +- `hero/cpu-chip` - Computing power +- `hero/globe-alt` - Global reach +- `hero/chart-line` - Performance metrics +- `hero/server` - Infrastructure + +## Performance Notes + +### JavaScript Usage +Minimal JavaScript for: +- Intersection Observer (viewport detection) +- Counter animation (number progression) +- Modern browser APIs only + +### CSS Animations +- Hardware accelerated transforms +- Optimized for 60fps +- Respects `prefers-reduced-motion` +- Fallbacks for older browsers + +### Image Optimization +- SVG icons preferred (scalable, fast) +- WebP fallbacks for raster images +- Lazy loading for non-critical images + +## Best Practices + +1. **Number Selection**: Choose impactful, verifiable metrics +2. **Descriptions**: Keep concise but descriptive +3. **Icons**: Match icons to metric meaning +4. **Sub-metrics**: Add credibility with specific details +5. **Layout**: Choose based on number of items (2-4: cards, 5+: compact) +6. **Consistency**: Use similar metric types (all percentages, all counts) +7. **Context**: Include timeframes where relevant + +## Advanced Customization + +### Custom Animations +Override animation timing: +```css +.stats-item { + transition-duration: 1s; + transition-delay: 0.2s; +} +``` + +### Custom Counters +For complex number formatting: +```yaml +statistic: "99.9%" # Will animate 0 → 99 +statistic: "$2.5M" # Will animate 0 → 2.5 +statistic: "1st" # Will animate 0 → 1 +``` + +### Accessibility +- Numbers are announced by screen readers +- Animations respect motion preferences +- High contrast maintained +- Keyboard navigation supported + +The enhanced Stats block creates visual impact while maintaining professional credibility - essential for research lab websites targeting academic and industry audiences. \ No newline at end of file diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/stats/block.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/stats/block.html new file mode 100644 index 000000000..d43ff2599 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/stats/block.html @@ -0,0 +1,270 @@ +{{/* Hugo Blox: Stats */}} +{{/* Documentation: https://hugoblox.com/blocks/ */}} +{{/* License: https://github.com/HugoBlox/hugo-blox-builder/blob/main/LICENSE.md */}} + +{{/* Initialise */}} +{{ $page := .wcPage }} +{{ $block := .wcBlock }} +{{ $title := $block.content.title | emojify | $page.RenderString }} +{{ $text := $block.content.text | emojify | $page.RenderString }} +{{ $layout := $block.design.layout | default "cards" }} + +
+
+ + {{/* Section Header */}} + {{ if or $title $text }} +
+ {{ with $title }} +

+ {{ . }} +

+ {{ end }} + {{ with $text }} +

+ {{ . }} +

+ {{ end }} +
+ {{ end }} + + {{/* Cards Layout */}} + {{ if eq $layout "cards" }} +
+ {{ range $idx, $item := $block.content.items }} +
+ + {{/* Background Gradient */}} +
+ +
+ {{/* Icon */}} + {{ if $item.icon }} +
+ {{ partial "functions/get_icon" (dict "name" $item.icon "attributes" "class=\"w-8 h-8 text-primary-600 dark:text-primary-400\"") }} +
+ {{ end }} + + {{/* Statistic */}} +
+

+ {{ $item.statistic | $page.RenderString }} +

+
+ + {{/* Description */}} +

+ {{ $item.description | $page.RenderString }} +

+ + {{/* Optional Sub-metric */}} + {{ with $item.sub_metric }} +

+ {{ . }} +

+ {{ end }} +
+
+ {{ end }} +
+ + {{/* Compact Layout */}} + {{ else if eq $layout "compact" }} +
+
+ {{ range $idx, $item := $block.content.items }} +
+ {{ if $item.icon }} +
+ {{ partial "functions/get_icon" (dict "name" $item.icon "attributes" "class=\"w-6 h-6 text-primary-600 dark:text-primary-400\"") }} +
+ {{ end }} + +

+ {{ $item.statistic | $page.RenderString }} +

+ +

+ {{ $item.description | $page.RenderString }} +

+
+ {{ end }} +
+
+ + {{/* Minimal Layout */}} + {{ else }} +
+ {{ range $item := $block.content.items }} +
+ {{ if $item.icon }} +
+ {{ partial "functions/get_icon" (dict "name" $item.icon "attributes" "class=\"w-7 h-7 text-primary-600 dark:text-primary-400\"") }} +
+ {{ end }} + +

+ {{ $item.statistic | $page.RenderString }} +

+ +

+ {{ $item.description | $page.RenderString }} +

+
+ {{ end }} +
+ {{ end }} +
+
+ +{{/* Enhanced Animation CSS */}} + + +{{/* Animation JavaScript for Counter and Intersection Observer */}} + \ No newline at end of file diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/stats/manifest.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/stats/manifest.json new file mode 100644 index 000000000..62ce6b2aa --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/stats/manifest.json @@ -0,0 +1,13 @@ +{ + "id": "stats", + "name": "Stats", + "version": "2.0.0", + "license": "MIT", + "category": "content", + "tags": ["statistics", "numbers", "metrics", "achievements", "data", "showcase", "grid", "animated", "counters", "icons"], + "description": "Showcase impressive statistics with modern animations, icons, and multiple layout options - enhanced for 2025/2026", + "author": "Hugo Blox", + "homepage": "https://hugoblox.com/blocks/", + "repository": "https://github.com/HugoBlox/hugo-blox-builder", + "keywords": ["hugo", "statistics", "metrics", "achievements", "data", "numbers"] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/stats/preview.svg b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/stats/preview.svg new file mode 100644 index 000000000..f00eae558 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/stats/preview.svg @@ -0,0 +1,41 @@ + + + + + + + 1.2M + + + + + + + + 98% + + + + + + + + 500+ + + + + + + + + + + + + + + + + + + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/stats/schema.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/stats/schema.json new file mode 100644 index 000000000..b5d2e4bc1 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/stats/schema.json @@ -0,0 +1,72 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://hugoblox.com/schemas/blocks/stats.json", + "title": "Stats Block Schema", + "description": "Schema for the Stats block - displays statistics in a grid layout", + "allOf": [ + { + "$ref": "../shared/schemas/base-block.json" + }, + { + "type": "object", + "properties": { + "block": { + "const": "stats" + }, + "content": { + "type": "object", + "description": "Content configuration for the stats block", + "properties": { + "title": { + "type": "string", + "description": "Section title (supports Markdown)" + }, + "text": { + "type": "string", + "description": "Section description (supports Markdown)" + }, + "items": { + "type": "array", + "description": "Array of statistics to display", + "items": { + "type": "object", + "properties": { + "statistic": { + "type": "string", + "description": "The statistic value/number (supports Markdown)" + }, + "description": { + "type": "string", + "description": "Description of the statistic (supports Markdown)" + }, + "icon": { + "type": "string", + "description": "Icon identifier (e.g., 'hero/chart-bar', 'hero/user-group')" + }, + "sub_metric": { + "type": "string", + "description": "Additional context or sub-metric (supports Markdown)" + } + }, + "required": ["statistic", "description"] + } + } + }, + "required": ["items"] + }, + "design": { + "type": "object", + "description": "Design options for the stats block", + "properties": { + "layout": { + "type": "string", + "enum": ["cards", "compact", "minimal"], + "description": "Display layout style", + "default": "cards" + } + } + } + } + } + ] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/team-showcase/README.md b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/team-showcase/README.md new file mode 100644 index 000000000..9dc8d2af5 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/team-showcase/README.md @@ -0,0 +1,109 @@ +# Team Showcase Block + +Display your team members with a beautiful, responsive grid layout featuring rich profiles, social links, and customizable grouping. + +## Features + +- **Responsive Grid Layout**: Automatically adjusts from 1-4 columns based on screen size +- **User Groups**: Organize team members by role (e.g., Principal Investigators, PhD Students) +- **Rich Profiles**: Display avatar, name, role, bio, interests, and social links +- **Customizable Display**: Toggle visibility of role, organization, interests, and social links +- **Sorting**: Sort team members by last name or custom field +- **Hover Effects**: Smooth image zoom and shadow effects on hover +- **Call to Action**: Optional button to recruitment or team page + +## Usage + +```yaml +sections: + - block: team-showcase + content: + title: Meet Our Team + subtitle: World-class researchers advancing science + text: Our diverse team brings together expertise from multiple disciplines. + user_groups: + - Principal Investigators + - Postdoctoral Researchers + - PhD Students + sort_by: 'Params.last_name' + sort_ascending: true + cta: + text: Join Our Team + url: /opportunities + icon: user-plus + design: + show_role: true + show_organizations: false + show_interests: true + show_social: true + # Section background color (CSS class) + css_class: "bg-gray-50 dark:bg-gray-900" +``` + +## Content Structure + +Team members should be created in the `content/authors/` directory. Each team member needs: + +```yaml +# content/authors/jane-doe/_index.md +--- +title: Dr. Jane Doe +role: Postdoctoral Researcher +bio: Research interests include machine learning and computational biology. +interests: + - Machine Learning + - Computational Biology + - Data Science +organizations: + - name: University of Excellence + url: https://example.edu +social: + - icon: envelope + icon_pack: fas + link: 'mailto:jane@example.edu' + - icon: twitter + icon_pack: fab + link: https://x.com/janedoe + - icon: github + icon_pack: fab + link: https://github.com/janedoe +user_groups: + - Postdoctoral Researchers +--- + +Full biography content here... +``` + +## Options + +### Content Options + +- **title**: Main heading for the team section +- **subtitle**: Optional subtitle +- **text**: Optional description text (supports Markdown) +- **user_groups**: Array of group names to display +- **sort_by**: Field to sort by (default: "Params.last_name") +- **sort_ascending**: Sort direction (default: true) +- **cta**: Optional call-to-action button with text, url, and icon + +### Design Options + +- **show_role**: Display team member roles (default: true) +- **show_organizations**: Display affiliated organizations (default: false) +- **show_interests**: Display research interests (default: false) +- **show_social**: Display social media links (default: true) + +## Styling + +The block uses Tailwind CSS classes and supports: +- Dark mode +- Custom background colors via `css_class` +- Responsive breakpoints +- Smooth hover transitions + +## Tips + +1. **Optimize Images**: Use square avatar images (minimum 400x400px) for best results +2. **User Groups**: Create logical groupings that reflect your organization structure +3. **Bio Length**: Keep bios concise (2-3 lines) for the card view +4. **Social Links**: Include relevant professional networks (ORCID, Google Scholar, GitHub) diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/team-showcase/block.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/team-showcase/block.html new file mode 100644 index 000000000..954e5c083 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/team-showcase/block.html @@ -0,0 +1,238 @@ +{{/* Hugo Blox: Team Showcase */}} +{{/* Documentation: https://hugoblox.com/blocks/ */}} +{{/* License: https://github.com/HugoBlox/hugo-blox-builder/blob/main/LICENSE.md */}} + +{{/* Initialise */}} +{{ $page := .wcPage }} +{{ $block := .wcBlock }} +{{ $show_social := $block.design.show_social | default true }} +{{ $show_interests := $block.design.show_interests | default false }} +{{ $show_role := $block.design.show_role | default true }} +{{ $show_organizations := $block.design.show_organizations | default false }} + +{{ $title := $block.content.title | emojify | $page.RenderString }} +{{ $subtitle := $block.content.subtitle | emojify | $page.RenderString }} +{{ $text := $block.content.text | emojify | $page.RenderString }} + +
+ + {{/* Section Header */}} +
+ {{ with $title }} +

+ {{ . }} +

+ {{ end }} + + {{ with $subtitle }} +

+ {{ . }} +

+ {{ end }} + + {{ with $text }} +
+ {{ . }} +
+ {{ end }} +
+ + {{/* Build profiles from data/authors */}} + {{ $allProfiles := slice }} + {{ range $slug, $_ := site.Data.authors }} + {{ $allProfiles = $allProfiles | append (partial "functions/get_author_profile" (dict "slug" $slug)) }} + {{ end }} + + {{ $groups := $block.content.user_groups }} + + {{ if $groups }} + {{ range $group := $groups }} + {{ $groupProfiles := slice }} + {{ range $allProfiles }} + {{ $u := .user_groups | default (slice) }} + {{ if gt (len (intersect $u (slice $group))) 0 }} + {{ $groupProfiles = $groupProfiles | append . }} + {{ end }} + {{ end }} + {{ $groupProfiles = sort $groupProfiles "title" }} + + {{ if and $groupProfiles (gt (len $groups) 1) }} +
+

+ {{ $group | markdownify }} +

+
+ {{ end }} + +
+ {{ range $profile := $groupProfiles }} + {{ $avatar := $profile.avatar }} + {{ $link := printf "/authors/%s/" $profile.slug }} + +
+
+ + {{ if $avatar }} + + {{ $image := $avatar.Fill "400x400 Center webp" }} + {{ $profile.title }} +
+
+ {{ end }} + +
+

+ + {{ $profile.title }} + +

+ + {{ if $show_role }} +
+ {{ with $profile.role }}

{{ . }}

{{ end }} + {{ if and $show_organizations $profile.affiliations }} + {{ range first 1 $profile.affiliations }} +

{{ .name }}

+ {{ end }} + {{ end }} +
+ {{ end }} + + {{ with $profile.bio }} +

+ {{ . }} +

+ {{ end }} + + {{ if and $show_interests $profile.interests }} +
+
+ {{ range first 3 $profile.interests }} + + {{ . }} + + {{ end }} +
+
+ {{ end }} + + {{ if and $show_social $profile.links }} +
+ {{ range $profile.links }} + {{ $l := .url | default .link }} + {{ $scheme := (urls.Parse $l).Scheme }} + {{ $target := "" }} + {{ if not $scheme }} + {{ $l = (.url | default .link) | relLangURL }} + {{ if eq (path.Ext $l) ".pdf" }}{{ $target = "target=\"_blank\" rel=\"noopener\"" }}{{ end }} + {{ else if in (slice "http" "https") $scheme }} + {{ $target = "target=\"_blank\" rel=\"noopener\"" }} + {{ end }} + + + {{ partial "functions/get_icon" (dict "name" .icon "attributes" "class=\"w-5 h-5\"") }} + + {{ end }} +
+ {{ end }} +
+
+
+ {{ end }} +
+ {{ end }} + {{ else }} + {{ $allProfiles = sort $allProfiles "title" }} +
+ {{ range $profile := $allProfiles }} + {{ $avatar := $profile.avatar }} + {{ $link := printf "/authors/%s/" $profile.slug }} +
+
+ {{ if $avatar }} + + {{ $image := $avatar.Fill "400x400 Center webp" }} + {{ $profile.title }} +
+
+ {{ end }} +
+

+ + {{ $profile.title }} + +

+ {{ if $show_role }} +
+ {{ with $profile.role }}

{{ . }}

{{ end }} + {{ if and $show_organizations $profile.affiliations }} + {{ range first 1 $profile.affiliations }} +

{{ .name }}

+ {{ end }} + {{ end }} +
+ {{ end }} + {{ with $profile.bio }} +

{{ . }}

+ {{ end }} + {{ if and $show_interests $profile.interests }} +
+
+ {{ range first 3 $profile.interests }} + {{ . }} + {{ end }} +
+
+ {{ end }} + {{ if and $show_social $profile.links }} +
+ {{ range $profile.links }} + {{ $l := .url | default .link }} + {{ $scheme := (urls.Parse $l).Scheme }} + {{ $target := "" }} + {{ if not $scheme }} + {{ $l = (.url | default .link) | relLangURL }} + {{ if eq (path.Ext $l) ".pdf" }}{{ $target = "target=\"_blank\" rel=\"noopener\"" }}{{ end }} + {{ else if in (slice "http" "https") $scheme }} + {{ $target = "target=\"_blank\" rel=\"noopener\"" }} + {{ end }} + + {{ partial "functions/get_icon" (dict "name" .icon "attributes" "class=\"w-5 h-5\"") }} + + {{ end }} +
+ {{ end }} +
+
+
+ {{ end }} +
+ {{ end }} + + {{/* Call to Action */}} + {{ with $block.content.cta }} + + {{ end }} + +
diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/team-showcase/manifest.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/team-showcase/manifest.json new file mode 100644 index 000000000..2913d5674 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/team-showcase/manifest.json @@ -0,0 +1,13 @@ +{ + "id": "team-showcase", + "name": "Team Showcase", + "version": "1.0.0", + "license": "MIT", + "category": "content", + "tags": ["team", "people", "members", "staff", "lab", "research", "organization"], + "description": "Display team members with customizable grouping, filtering, and rich profiles", + "author": "Hugo Blox", + "homepage": "https://hugoblox.com/blocks/", + "repository": "https://github.com/HugoBlox/hugo-blox-builder", + "keywords": ["hugo", "static-site", "team", "people", "organization", "research-lab"] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/team-showcase/schema.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/team-showcase/schema.json new file mode 100644 index 000000000..8f226bda8 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/team-showcase/schema.json @@ -0,0 +1,98 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://hugoblox.com/schemas/blocks/team-showcase.json", + "title": "Team Showcase Block Schema", + "description": "Schema for the Team Showcase block - displays team members with filtering and grouping", + "allOf": [ + { + "$ref": "../shared/schemas/base-block.json" + }, + { + "type": "object", + "properties": { + "block": { + "const": "team-showcase" + }, + "content": { + "type": "object", + "description": "Content configuration for the team showcase block", + "properties": { + "title": { + "type": "string", + "description": "Section title (supports Markdown)" + }, + "subtitle": { + "type": "string", + "description": "Section subtitle (supports Markdown)" + }, + "text": { + "type": "string", + "description": "Section description (supports Markdown)" + }, + "user_groups": { + "type": "array", + "description": "User groups to display (e.g., 'Principal Investigators', 'PhD Students')", + "items": { + "type": "string" + } + }, + "sort_by": { + "type": "string", + "description": "Field to sort team members by", + "default": "Params.last_name" + }, + "sort_ascending": { + "type": "boolean", + "description": "Sort in ascending order", + "default": true + }, + "cta": { + "type": "object", + "description": "Call to action button", + "properties": { + "text": { + "type": "string", + "description": "Button text" + }, + "url": { + "type": "string", + "description": "Button URL" + }, + "icon": { + "type": "string", + "description": "Optional icon name" + } + } + } + } + }, + "design": { + "type": "object", + "description": "Design options for the team showcase", + "properties": { + "show_role": { + "type": "boolean", + "description": "Show team member roles", + "default": true + }, + "show_organizations": { + "type": "boolean", + "description": "Show team member organizations", + "default": false + }, + "show_interests": { + "type": "boolean", + "description": "Show team member interests", + "default": false + }, + "show_social": { + "type": "boolean", + "description": "Show social media links", + "default": true + } + } + } + } + } + ] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/testimonials/README.md b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/testimonials/README.md new file mode 100644 index 000000000..7fefa7d63 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/testimonials/README.md @@ -0,0 +1,60 @@ +# Testimonials Block + +**Transform customer voices into powerful social proof** + +Build unshakeable trust and credibility with the Testimonials block - a sophisticated component that presents authentic customer feedback in a professional, visually appealing format that converts skeptical visitors into confident buyers. + +## ✨ Key Features + +- **Professional Quote Styling**: Beautiful quotation marks and elegant typography +- **Customer Photos**: High-quality avatar display with optimized 2x retina images +- **Complete Attribution**: Customer names and roles for authentic credibility +- **Responsive Layout**: Perfect presentation across all device sizes +- **Multiple Testimonials**: Stack multiple testimonials in a clean, organized format +- **Markdown Support**: Rich text formatting for testimonial content +- **Lazy Loading**: Optimized image loading for better performance + +## 🎯 Perfect For + +- **SaaS Platforms**: Showcase customer success stories and satisfaction +- **Service Providers**: Display client feedback and project results +- **E-commerce**: Build buyer confidence with authentic product reviews +- **Consultants**: Demonstrate expertise through client testimonials +- **Agencies**: Highlight successful partnerships and outcomes +- **Course Creators**: Share student success stories and transformations + +## 🚀 Why Choose Testimonials Block? + +**Social Proof Power**: Authentic customer voices carry more weight than any marketing message + +**Visual Credibility**: Photos and names make testimonials feel genuine and trustworthy + +**Professional Presentation**: Elegant design elevates customer feedback to marketing gold + +**Conversion Catalyst**: Well-placed testimonials can dramatically increase conversion rates + +## 📊 Trust Building Elements + +- **Visual Quote Marks**: Classic quotation styling that signals authentic feedback +- **Human Connection**: Real photos create emotional connection with potential customers +- **Authority Indicators**: Customer roles and companies add context and credibility +- **Clean Layout**: Professional presentation that feels premium and trustworthy + +## 💡 Psychological Impact + +- **Bandwagon Effect**: Seeing others' success motivates similar action +- **Risk Reduction**: Real customer experiences reduce perceived purchase risk +- **Emotional Resonance**: Stories connect with visitors on an emotional level +- **Credibility Transfer**: Customer authority transfers to your brand + +## 🎨 Best Practices + +- Use high-quality, professional customer photos +- Include specific details and outcomes in testimonials +- Add customer roles and companies for context +- Keep quotes authentic and conversational +- Mix different types of customers and use cases +- Update testimonials regularly to maintain freshness + +Transform your happiest customers into your best marketing team with testimonials that build trust, reduce friction, and drive conversions. + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/testimonials.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/testimonials/block.html similarity index 86% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/testimonials.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/testimonials/block.html index 04a7e9a4d..01f583cd0 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/testimonials.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/testimonials/block.html @@ -33,8 +33,14 @@

{{ $image := resources.GetMatch (path.Join "media" .image) }} {{ with $image }} - {{ $image = $image.Process "Fill 75x75 center webp" }} - {{$item.name | plainify}} + {{/* Serve a single 2x retina source for a 48px display */}} + {{ $avatar_96 := $image.Process "Fill 96x96 Center webp" }} + {{$item.name | plainify}} {{ end }}
{{.name}}
diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/testimonials/manifest.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/testimonials/manifest.json new file mode 100644 index 000000000..9fb0847e0 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/testimonials/manifest.json @@ -0,0 +1,13 @@ +{ + "id": "testimonials", + "name": "Testimonials", + "version": "1.0.0", + "license": "MIT", + "category": "marketing", + "tags": ["testimonials", "reviews", "social-proof", "quotes", "customers", "trust", "credibility"], + "description": "Build trust with authentic customer testimonials featuring quotes, names, and profile photos", + "author": "Hugo Blox", + "homepage": "https://hugoblox.com/blocks/", + "repository": "https://github.com/HugoBlox/hugo-blox-builder", + "keywords": ["hugo", "testimonials", "social-proof", "reviews", "customers", "trust"] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/testimonials/preview.svg b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/testimonials/preview.svg new file mode 100644 index 000000000..d37e263ee --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/testimonials/preview.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/testimonials/schema.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/testimonials/schema.json new file mode 100644 index 000000000..342f1feb0 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/testimonials/schema.json @@ -0,0 +1,60 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://hugoblox.com/schemas/blocks/testimonials.json", + "title": "Testimonials Block Schema", + "description": "Schema for the Testimonials block - displays customer testimonials with quotes and author info", + "allOf": [ + { + "$ref": "../shared/schemas/base-block.json" + }, + { + "type": "object", + "properties": { + "block": { + "const": "testimonials" + }, + "content": { + "type": "object", + "description": "Content configuration for the testimonials block", + "properties": { + "title": { + "type": "string", + "description": "Section title (supports Markdown)" + }, + "text": { + "type": "string", + "description": "Section description (supports Markdown)" + }, + "items": { + "type": "array", + "description": "Array of testimonials", + "items": { + "type": "object", + "properties": { + "text": { + "type": "string", + "description": "Testimonial quote text (supports Markdown)" + }, + "name": { + "type": "string", + "description": "Author name" + }, + "role": { + "type": "string", + "description": "Author role/title" + }, + "image": { + "type": "string", + "description": "Author avatar image filename (in assets/media/)" + } + }, + "required": ["text", "name"] + } + } + }, + "required": ["items"] + } + } + } + ] +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/trending-questions/block.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/trending-questions/block.html new file mode 100644 index 000000000..60c1af21f --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/trending-questions/block.html @@ -0,0 +1,165 @@ +{{- $wcPage := .wcPage -}} +{{- $wcBlock := .wcBlock -}} +{{- $wcIdentifier := .wcIdentifier -}} + +{{- $st := $wcBlock.design.spacing | default dict -}} +{{- $pad := $st.padding | default (slice "4rem" "0" "4rem" "0") -}} + +
+
+ +
+
+ {{ with $wcBlock.content.title }} +

+ {{ . | markdownify }} +

+ {{ end }} + {{ with $wcBlock.content.subtitle }} +

+ {{ . | markdownify }} +

+ {{ end }} +
+ + {{ with $wcBlock.content.view_all }} + + {{ end }} +
+ + {{/* Get trending questions dynamically or from static config */}} + {{ $questions := slice }} + + {{/* Method 1: Dynamic - Pull from pages with trending: true */}} + {{ $count := $wcBlock.content.count | default 4 }} + {{ $trending_pages := where site.RegularPages "Params.trending" true }} + {{ $trending_pages = $trending_pages.ByParam "trending_weight" | default ($trending_pages.ByDate.Reverse) }} + {{ $trending_pages = first $count $trending_pages }} + + {{ if $trending_pages }} + {{ range $trending_pages }} + {{ $question_item := dict }} + {{ $question_item = merge $question_item (dict "question" (.Params.question | default .Title)) }} + {{ $question_item = merge $question_item (dict "link" .RelPermalink) }} + {{ $question_item = merge $question_item (dict "answer_preview" (.Params.answer_preview | default .Params.answer | default .Summary | plainify | truncate 150)) }} + + {{/* Optional metadata */}} + {{ with .Params.author }} + {{ $question_item = merge $question_item (dict "author" .) }} + {{ end }} + {{ with .Params.views }} + {{ $question_item = merge $question_item (dict "views" .) }} + {{ end }} + {{ with .Params.upvote_count }} + {{ $question_item = merge $question_item (dict "upvotes" .) }} + {{ end }} + {{ with .Params.badge }} + {{ $question_item = merge $question_item (dict "badge" .) }} + {{ else }} + {{/* Default badges based on metadata */}} + {{ if gt (.Params.upvote_count | default 0) 50 }} + {{ $question_item = merge $question_item (dict "badge" (dict "text" "🔥 Popular" "color" "bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-200")) }} + {{ else if .Params.featured }} + {{ $question_item = merge $question_item (dict "badge" (dict "text" "⭐ Featured" "color" "bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-200")) }} + {{ else if (time .Date).After (now.AddDate 0 0 -7) }} + {{ $question_item = merge $question_item (dict "badge" (dict "text" "✨ New" "color" "bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-200")) }} + {{ else }} + {{ $question_item = merge $question_item (dict "badge" (dict "text" "🔥 Trending" "color" "bg-amber-100 text-amber-800 dark:bg-amber-900/30 dark:text-amber-200")) }} + {{ end }} + {{ end }} + + {{ $questions = $questions | append $question_item }} + {{ end }} + {{ end }} + + {{/* Method 2: Static fallback - Use config if no trending pages found */}} + {{ if not $questions }} + {{ $questions = $wcBlock.content.questions }} + {{ end }} + + {{/* Questions list or carousel */}} +
+ {{ range $index, $question := $questions }} +
+ + {{/* Badge */}} + {{ with .badge }} +
+ {{ .text }} +
+ {{ end }} + + {{/* Question */}} +

+ + {{ .question }} + +

+ + {{/* Answer preview */}} + {{ with .answer_preview }} +

+ {{ . }} +

+ {{ end }} + + {{/* Meta info */}} +
+
+ {{ with .author }} + + + + + {{ . }} + + {{ end }} + + {{ with .views }} + + + + + + {{ . }} + + {{ end }} + + {{ with .upvotes }} + + + + + {{ . }} helpful + + {{ end }} +
+ + + Read → + +
+ +
+ {{ end }} +
+ + {{/* Mobile view all link */}} + {{ with $wcBlock.content.view_all }} + + {{ end }} + +
+
\ No newline at end of file diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/trending-questions/manifest.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/trending-questions/manifest.json new file mode 100644 index 000000000..dda443e9e --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/trending-questions/manifest.json @@ -0,0 +1,8 @@ +{ + "name": "trending-questions", + "version": "1", + "title": "Trending Questions", + "description": "Display trending or featured questions", + "categories": ["content"], + "preview": "preview.svg" +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/trending-questions/schema.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/trending-questions/schema.json new file mode 100644 index 000000000..6106d480f --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/trending-questions/schema.json @@ -0,0 +1,83 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "title": "Trending Questions Block", + "description": "Display trending or featured questions", + "properties": { + "content": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "subtitle": { + "type": "string" + }, + "questions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "question": { + "type": "string" + }, + "answer_preview": { + "type": "string" + }, + "link": { + "type": "string" + }, + "badge": { + "type": "object", + "properties": { + "text": { + "type": "string" + }, + "color": { + "type": "string" + } + } + }, + "author": { + "type": "string" + }, + "views": { + "type": "string" + }, + "upvotes": { + "type": "number" + } + } + } + }, + "view_all": { + "type": "object", + "properties": { + "text": { + "type": "string" + }, + "link": { + "type": "string" + } + } + } + } + }, + "design": { + "type": "object", + "properties": { + "spacing": { + "type": "object" + }, + "background": { + "type": "object", + "properties": { + "color": { + "type": "string" + } + } + } + } + } + } +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/hugoblox.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/hugoblox.yaml index e90cac009..28cfe5f22 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/hugoblox.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/hugoblox.yaml @@ -1,3 +1,3 @@ # Hugo Blox metadata -version: "0.3.1" +version: '0.10.0' diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/icons/academicons.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/icons/academicons.json index 36ab8c0da..d096742cd 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/icons/academicons.json +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/icons/academicons.json @@ -1,575 +1,571 @@ { - "prefix": "academicons", - "info": { - "name": "Academicons", - "total": 157, - "version": "1.9.4", - "author": { - "name": "James Walsh", - "url": "https://github.com/jpswalsh/academicons" - }, - "license": { - "title": "Open Font License", - "spdx": "OFL-1.1", - "url": "https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL" - }, - "samples": [ - "conversation", - "crossref-square", - "stackoverflow" - ], - "height": 32, - "displayHeight": 16, - "category": "Thematic", - "palette": false - }, - "lastModified": 1701155440, - "icons": { - "academia": { - "body": "" - }, - "academia-square": { - "body": "" - }, - "acclaim": { - "body": "", - "width": 384 - }, - "acclaim-square": { - "body": "" - }, - "acm": { - "body": "", - "width": 512 - }, - "acm-square": { - "body": "" - }, - "acmdl": { - "body": "", - "width": 512 - }, - "acmdl-square": { - "body": "" - }, - "ads": { - "body": "", - "width": 512 - }, - "ads-square": { - "body": "" - }, - "africarxiv": { - "body": "" - }, - "africarxiv-square": { - "body": "" - }, - "archive": { - "body": "" - }, - "archive-square": { - "body": "" - }, - "arxiv": { - "body": "" - }, - "arxiv-square": { - "body": "" - }, - "biorxiv": { - "body": "", - "width": 512 - }, - "biorxiv-square": { - "body": "" - }, - "ceur": { - "body": "", - "width": 512 - }, - "ceur-square": { - "body": "" - }, - "ciencia-vitae": { - "body": "", - "width": 512 - }, - "ciencia-vitae-square": { - "body": "" - }, - "clarivate": { - "body": "", - "width": 512 - }, - "clarivate-square": { - "body": "" - }, - "closed-access": { - "body": "", - "width": 256 - }, - "closed-access-square": { - "body": "" - }, - "conversation": { - "body": "", - "width": 484 - }, - "conversation-square": { - "body": "" - }, - "coursera": { - "body": "", - "width": 512 - }, - "coursera-square": { - "body": "" - }, - "crossref": { - "body": "", - "width": 320 - }, - "crossref-square": { - "body": "" - }, - "cv": { - "body": "", - "width": 512 - }, - "cv-square": { - "body": "" - }, - "datacite": { - "body": "", - "width": 512 - }, - "datacite-square": { - "body": "" - }, - "dataverse": { - "body": "", - "width": 320 - }, - "dataverse-square": { - "body": "" - }, - "dblp": { - "body": "", - "width": 384 - }, - "dblp-square": { - "body": "" - }, - "depsy": { - "body": "", - "width": 512 - }, - "depsy-square": { - "body": "" - }, - "doi": { - "body": "", - "width": 512 - }, - "doi-square": { - "body": "" - }, - "dryad": { - "body": "", - "width": 512 - }, - "dryad-square": { - "body": "" - }, - "elsevier": { - "body": "", - "width": 320 - }, - "elsevier-square": { - "body": "" - }, - "figshare": { - "body": "", - "width": 512 - }, - "figshare-square": { - "body": "" - }, - "google-scholar": { - "body": "", - "width": 384 - }, - "google-scholar-square": { - "body": "" - }, - "hal": { - "body": "", - "width": 512 - }, - "hal-square": { - "body": "" - }, - "hypothesis": { - "body": "", - "width": 512 - }, - "hypothesis-square": { - "body": "" - }, - "ideas-repec": { - "body": "", - "width": 384 - }, - "ideas-repec-square": { - "body": "" - }, - "ieee": { - "body": "", - "width": 512 - }, - "ieee-square": { - "body": "" - }, - "impactstory": { - "body": "", - "width": 512 - }, - "impactstory-square": { - "body": "" - }, - "inaturalist": { - "body": "" - }, - "inaturalist-square": { - "body": "" - }, - "inpn": { - "body": "" - }, - "inpn-square": { - "body": "" - }, - "inspire": { - "body": "", - "width": 512 - }, - "inspire-square": { - "body": "" - }, - "isidore": { - "body": "" - }, - "isidore-square": { - "body": "" - }, - "isni": { - "body": "", - "width": 512 - }, - "isni-square": { - "body": "" - }, - "jstor": { - "body": "", - "width": 512 - }, - "jstor-square": { - "body": "" - }, - "lattes": { - "body": "" - }, - "lattes-square": { - "body": "" - }, - "mathoverflow": { - "body": "", - "width": 512 - }, - "mathoverflow-square": { - "body": "" - }, - "mendeley": { - "body": "", - "width": 512 - }, - "mendeley-square": { - "body": "" - }, - "moodle": { - "body": "", - "width": 512 - }, - "moodle-square": { - "body": "" - }, - "mtmt": { - "body": "", - "width": 512 - }, - "mtmt-square": { - "body": "" - }, - "nakala": { - "body": "", - "width": 512 - }, - "nakala-square": { - "body": "" - }, - "obp": { - "body": "" - }, - "obp-square": { - "body": "" - }, - "open-access": { - "body": "", - "width": 256 - }, - "open-access-square": { - "body": "" - }, - "open-data": { - "body": "", - "width": 512 - }, - "open-data-square": { - "body": "" - }, - "open-materials": { - "body": "", - "width": 512 - }, - "open-materials-square": { - "body": "" - }, - "openedition": { - "body": "", - "width": 384 - }, - "openedition-square": { - "body": "" - }, - "orcid": { - "body": "", - "width": 512 - }, - "orcid-square": { - "body": "" - }, - "osf": { - "body": "", - "width": 512 - }, - "osf-square": { - "body": "" - }, - "overleaf": { - "body": "", - "width": 384 - }, - "overleaf-square": { - "body": "" - }, - "philpapers": { - "body": "", - "width": 512 - }, - "philpapers-square": { - "body": "" - }, - "piazza": { - "body": "", - "width": 320 - }, - "piazza-square": { - "body": "" - }, - "preregistered": { - "body": "", - "width": 512 - }, - "preregistered-de": { - "body": "", - "width": 512 - }, - "preregistered-de-plus": { - "body": "", - "width": 512 - }, - "preregistered-de-plus-square": { - "body": "" - }, - "preregistered-de-square": { - "body": "" - }, - "preregistered-de-tc": { - "body": "", - "width": 512 - }, - "preregistered-de-tc-plus": { - "body": "", - "width": 512 - }, - "preregistered-de-tc-plus-square": { - "body": "" - }, - "preregistered-de-tc-square": { - "body": "" - }, - "preregistered-square": { - "body": "" - }, - "preregistered-tc": { - "body": "", - "width": 512 - }, - "preregistered-tc-plus": { - "body": "", - "width": 512 - }, - "preregistered-tc-plus-square": { - "body": "" - }, - "preregistered-tc-square": { - "body": "" - }, - "protocols": { - "body": "" - }, - "protocols-square": { - "body": "" - }, - "psyarxiv": { - "body": "", - "width": 512 - }, - "psyarxiv-square": { - "body": "" - }, - "publons": { - "body": "", - "width": 320 - }, - "publons-square": { - "body": "" - }, - "pubmed": { - "body": "", - "width": 384 - }, - "pubmed-square": { - "body": "" - }, - "pubpeer": { - "body": "", - "width": 320 - }, - "pubpeer-square": { - "body": "" - }, - "researcherid": { - "body": "", - "width": 320 - }, - "researcherid-square": { - "body": "" - }, - "researchgate": { - "body": "", - "width": 384 - }, - "researchgate-square": { - "body": "" - }, - "ror": { - "body": "", - "width": 576 - }, - "ror-square": { - "body": "" - }, - "sci-hub": { - "body": "", - "width": 320 - }, - "sci-hub-square": { - "body": "" - }, - "scirate": { - "body": "", - "width": 512 - }, - "scirate-square": { - "body": "" - }, - "scopus": { - "body": "", - "width": 512 - }, - "scopus-square": { - "body": "" - }, - "semantic-scholar": { - "body": "", - "width": 512 - }, - "semantic-scholar-square": { - "body": "" - }, - "springer": { - "body": "", - "width": 320 - }, - "springer-square": { - "body": "" - }, - "ssrn": { - "body": "", - "width": 512 - }, - "ssrn-square": { - "body": "" - }, - "stackoverflow": { - "body": "", - "width": 384 - }, - "stackoverflow-square": { - "body": "" - }, - "viaf": { - "body": "", - "width": 512 - }, - "viaf-square": { - "body": "" - }, - "wiley": { - "body": "", - "width": 512 - }, - "wiley-square": { - "body": "" - }, - "zenodo": { - "body": "", - "width": 640 - }, - "zotero": { - "body": "", - "width": 320 - }, - "zotero-square": { - "body": "" - } - }, - "suffixes": { - "": "Regular", - "square": "Square" - }, - "width": 448, - "height": 512 -} \ No newline at end of file + "prefix": "academicons", + "info": { + "name": "Academicons", + "total": 157, + "version": "1.9.4", + "author": { + "name": "James Walsh", + "url": "https://github.com/jpswalsh/academicons" + }, + "license": { + "title": "Open Font License", + "spdx": "OFL-1.1", + "url": "https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL" + }, + "samples": ["conversation", "crossref-square", "stackoverflow"], + "height": 32, + "displayHeight": 16, + "category": "Thematic", + "palette": false + }, + "lastModified": 1701155440, + "icons": { + "academia": { + "body": "" + }, + "academia-square": { + "body": "" + }, + "acclaim": { + "body": "", + "width": 384 + }, + "acclaim-square": { + "body": "" + }, + "acm": { + "body": "", + "width": 512 + }, + "acm-square": { + "body": "" + }, + "acmdl": { + "body": "", + "width": 512 + }, + "acmdl-square": { + "body": "" + }, + "ads": { + "body": "", + "width": 512 + }, + "ads-square": { + "body": "" + }, + "africarxiv": { + "body": "" + }, + "africarxiv-square": { + "body": "" + }, + "archive": { + "body": "" + }, + "archive-square": { + "body": "" + }, + "arxiv": { + "body": "" + }, + "arxiv-square": { + "body": "" + }, + "biorxiv": { + "body": "", + "width": 512 + }, + "biorxiv-square": { + "body": "" + }, + "ceur": { + "body": "", + "width": 512 + }, + "ceur-square": { + "body": "" + }, + "ciencia-vitae": { + "body": "", + "width": 512 + }, + "ciencia-vitae-square": { + "body": "" + }, + "clarivate": { + "body": "", + "width": 512 + }, + "clarivate-square": { + "body": "" + }, + "closed-access": { + "body": "", + "width": 256 + }, + "closed-access-square": { + "body": "" + }, + "conversation": { + "body": "", + "width": 484 + }, + "conversation-square": { + "body": "" + }, + "coursera": { + "body": "", + "width": 512 + }, + "coursera-square": { + "body": "" + }, + "crossref": { + "body": "", + "width": 320 + }, + "crossref-square": { + "body": "" + }, + "cv": { + "body": "", + "width": 512 + }, + "cv-square": { + "body": "" + }, + "datacite": { + "body": "", + "width": 512 + }, + "datacite-square": { + "body": "" + }, + "dataverse": { + "body": "", + "width": 320 + }, + "dataverse-square": { + "body": "" + }, + "dblp": { + "body": "", + "width": 384 + }, + "dblp-square": { + "body": "" + }, + "depsy": { + "body": "", + "width": 512 + }, + "depsy-square": { + "body": "" + }, + "doi": { + "body": "", + "width": 512 + }, + "doi-square": { + "body": "" + }, + "dryad": { + "body": "", + "width": 512 + }, + "dryad-square": { + "body": "" + }, + "elsevier": { + "body": "", + "width": 320 + }, + "elsevier-square": { + "body": "" + }, + "figshare": { + "body": "", + "width": 512 + }, + "figshare-square": { + "body": "" + }, + "google-scholar": { + "body": "", + "width": 384 + }, + "google-scholar-square": { + "body": "" + }, + "hal": { + "body": "", + "width": 512 + }, + "hal-square": { + "body": "" + }, + "hypothesis": { + "body": "", + "width": 512 + }, + "hypothesis-square": { + "body": "" + }, + "ideas-repec": { + "body": "", + "width": 384 + }, + "ideas-repec-square": { + "body": "" + }, + "ieee": { + "body": "", + "width": 512 + }, + "ieee-square": { + "body": "" + }, + "impactstory": { + "body": "", + "width": 512 + }, + "impactstory-square": { + "body": "" + }, + "inaturalist": { + "body": "" + }, + "inaturalist-square": { + "body": "" + }, + "inpn": { + "body": "" + }, + "inpn-square": { + "body": "" + }, + "inspire": { + "body": "", + "width": 512 + }, + "inspire-square": { + "body": "" + }, + "isidore": { + "body": "" + }, + "isidore-square": { + "body": "" + }, + "isni": { + "body": "", + "width": 512 + }, + "isni-square": { + "body": "" + }, + "jstor": { + "body": "", + "width": 512 + }, + "jstor-square": { + "body": "" + }, + "lattes": { + "body": "" + }, + "lattes-square": { + "body": "" + }, + "mathoverflow": { + "body": "", + "width": 512 + }, + "mathoverflow-square": { + "body": "" + }, + "mendeley": { + "body": "", + "width": 512 + }, + "mendeley-square": { + "body": "" + }, + "moodle": { + "body": "", + "width": 512 + }, + "moodle-square": { + "body": "" + }, + "mtmt": { + "body": "", + "width": 512 + }, + "mtmt-square": { + "body": "" + }, + "nakala": { + "body": "", + "width": 512 + }, + "nakala-square": { + "body": "" + }, + "obp": { + "body": "" + }, + "obp-square": { + "body": "" + }, + "open-access": { + "body": "", + "width": 256 + }, + "open-access-square": { + "body": "" + }, + "open-data": { + "body": "", + "width": 512 + }, + "open-data-square": { + "body": "" + }, + "open-materials": { + "body": "", + "width": 512 + }, + "open-materials-square": { + "body": "" + }, + "openedition": { + "body": "", + "width": 384 + }, + "openedition-square": { + "body": "" + }, + "orcid": { + "body": "", + "width": 512 + }, + "orcid-square": { + "body": "" + }, + "osf": { + "body": "", + "width": 512 + }, + "osf-square": { + "body": "" + }, + "overleaf": { + "body": "", + "width": 384 + }, + "overleaf-square": { + "body": "" + }, + "philpapers": { + "body": "", + "width": 512 + }, + "philpapers-square": { + "body": "" + }, + "piazza": { + "body": "", + "width": 320 + }, + "piazza-square": { + "body": "" + }, + "preregistered": { + "body": "", + "width": 512 + }, + "preregistered-de": { + "body": "", + "width": 512 + }, + "preregistered-de-plus": { + "body": "", + "width": 512 + }, + "preregistered-de-plus-square": { + "body": "" + }, + "preregistered-de-square": { + "body": "" + }, + "preregistered-de-tc": { + "body": "", + "width": 512 + }, + "preregistered-de-tc-plus": { + "body": "", + "width": 512 + }, + "preregistered-de-tc-plus-square": { + "body": "" + }, + "preregistered-de-tc-square": { + "body": "" + }, + "preregistered-square": { + "body": "" + }, + "preregistered-tc": { + "body": "", + "width": 512 + }, + "preregistered-tc-plus": { + "body": "", + "width": 512 + }, + "preregistered-tc-plus-square": { + "body": "" + }, + "preregistered-tc-square": { + "body": "" + }, + "protocols": { + "body": "" + }, + "protocols-square": { + "body": "" + }, + "psyarxiv": { + "body": "", + "width": 512 + }, + "psyarxiv-square": { + "body": "" + }, + "publons": { + "body": "", + "width": 320 + }, + "publons-square": { + "body": "" + }, + "pubmed": { + "body": "", + "width": 384 + }, + "pubmed-square": { + "body": "" + }, + "pubpeer": { + "body": "", + "width": 320 + }, + "pubpeer-square": { + "body": "" + }, + "researcherid": { + "body": "", + "width": 320 + }, + "researcherid-square": { + "body": "" + }, + "researchgate": { + "body": "", + "width": 384 + }, + "researchgate-square": { + "body": "" + }, + "ror": { + "body": "", + "width": 576 + }, + "ror-square": { + "body": "" + }, + "sci-hub": { + "body": "", + "width": 320 + }, + "sci-hub-square": { + "body": "" + }, + "scirate": { + "body": "", + "width": 512 + }, + "scirate-square": { + "body": "" + }, + "scopus": { + "body": "", + "width": 512 + }, + "scopus-square": { + "body": "" + }, + "semantic-scholar": { + "body": "", + "width": 512 + }, + "semantic-scholar-square": { + "body": "" + }, + "springer": { + "body": "", + "width": 320 + }, + "springer-square": { + "body": "" + }, + "ssrn": { + "body": "", + "width": 512 + }, + "ssrn-square": { + "body": "" + }, + "stackoverflow": { + "body": "", + "width": 384 + }, + "stackoverflow-square": { + "body": "" + }, + "viaf": { + "body": "", + "width": 512 + }, + "viaf-square": { + "body": "" + }, + "wiley": { + "body": "", + "width": 512 + }, + "wiley-square": { + "body": "" + }, + "zenodo": { + "body": "", + "width": 640 + }, + "zotero": { + "body": "", + "width": 320 + }, + "zotero-square": { + "body": "" + } + }, + "suffixes": { + "": "Regular", + "square": "Square" + }, + "width": 448, + "height": 512 +} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/icons/brands.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/icons/brands.yaml index 8504cd374..61739aa10 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/icons/brands.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/icons/brands.yaml @@ -16,6 +16,10 @@ icons: arxiv: google-scholar: orcid: + reddit: - # Hugo + # AI/ML Platforms + huggingface: + + # Development hugo: diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/icons/hb.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/icons/hb.yaml index 69a4b1825..f845f1ee8 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/icons/hb.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/icons/hb.yaml @@ -13,14 +13,19 @@ icons: card: folder-tree: one: - code-bracket: + code-bracket: + - circle-stack: + circle-stack: + magnifying-glass: # Phosphor icons cat: - person-simple-walk: + person-simple-walk: + + # Git icons + git-fork: diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/icons/hero.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/icons/hero.json index ff93b54a5..38734dcab 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/icons/hero.json +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/icons/hero.json @@ -13,15 +13,8 @@ "spdx": "MIT", "url": "https://github.com/tailwindlabs/heroicons/blob/master/LICENSE" }, - "samples": [ - "camera", - "building-library", - "receipt-refund" - ], - "height": [ - 24, - 20 - ], + "samples": ["camera", "building-library", "receipt-refund"], + "height": [24, 20], "category": "General", "palette": false }, diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/languages.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/languages.yaml index a5515d53f..2e19b564c 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/languages.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/languages.yaml @@ -15,6 +15,7 @@ 'he': 'עברית' 'hr': 'Hrvatski' 'hu': 'Magyar' +'ht': 'kréyol' 'id': 'Bahasa Indonesia' 'it': 'Italiano' 'ja': '日本語' diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/link_types.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/link_types.yaml new file mode 100644 index 000000000..57cd86709 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/link_types.yaml @@ -0,0 +1,150 @@ +types: + pdf: + label_i18n: btn_pdf + icon: hero/document-text + preprint: + label_i18n: btn_preprint + icon: hero/document-text + doi: + label_i18n: btn_doi + icon: hero/link + code: + label_i18n: btn_code + icon: hero/code-bracket + dataset: + label_i18n: btn_dataset + icon: hero/circle-stack + model: + label_i18n: btn_model + icon: hero/link + slides: + label_i18n: btn_slides + icon: hero/presentation-chart-bar + video: + label_i18n: btn_video + icon: hero/video-camera + poster: + label_i18n: btn_poster + icon: hero/photo + project: + label_i18n: btn_project + icon: hero/link + site: + label_i18n: btn_site + icon: hero/link + source: + label_i18n: btn_source + icon: hero/document + bibtex: + label_i18n: btn_cite + icon: hero/document-duplicate + canonical: + label_i18n: btn_canonical + icon: hero/link + crosspost: + label_i18n: btn_crosspost + icon: hero/link + discussion: + label_i18n: btn_discussion + icon: hero/link + event: + label_i18n: btn_event + icon: hero/calendar + calendar: + label_i18n: btn_calendar + icon: hero/calendar + registration: + label_i18n: btn_registration + icon: hero/link + demo: + label_i18n: btn_demo + icon: hero/link + +# Mapping of identifier keys under `hugoblox.ids` to derived links +derived: + doi: + type: doi + label_i18n: btn_doi + icon: hero/link + url_template: "https://doi.org/{id}" + arxiv: + type: preprint + label_i18n: btn_preprint + icon: hero/document-text + url_template: "https://arxiv.org/abs/{id}" + openreview: + type: preprint + label_i18n: btn_preprint + icon: hero/document-text + url_template: "https://openreview.net/forum?id={id}" + acl_id: + type: source + label_i18n: btn_source + icon: hero/document + url_template: "https://aclanthology.org/{id}" + hal: + type: source + label_i18n: btn_hal + icon: hero/document + url_template: "https://hal.science/{id}" + dblp: + type: source + label_i18n: btn_dblp + icon: hero/document + url_template: "https://dblp.org/rec/{id}.html" + isbn: + type: source + label_i18n: btn_isbn + icon: hero/document + url_template: "https://openlibrary.org/isbn/{id}" + osf: + type: source + label_i18n: btn_osf + icon: hero/document + url_template: "https://osf.io/{id}" + zenodo: + type: source + label_i18n: btn_zenodo + icon: hero/document + url_template: "https://zenodo.org/records/{id}" + kaggle_dataset: + type: dataset + label_i18n: btn_kaggle + icon: hero/circle-stack + url_template: "https://www.kaggle.com/datasets/{id}" + kaggle_competition: + type: site + label_i18n: btn_kaggle + icon: hero/link + url_template: "https://www.kaggle.com/competitions/{id}" + openalex: + type: source + label_i18n: btn_openalex + icon: hero/document + url_template: "https://openalex.org/{id}" + semanticscholar: + type: source + label_i18n: btn_semanticscholar + icon: hero/document + url_template: "https://www.semanticscholar.org/paper/{id}" + pwc: + type: site + label_i18n: btn_pwc + icon: hero/link + url_template: "https://paperswithcode.com/paper/{id}" + huggingface_model: + type: model + label_i18n: btn_model + icon: hero/link + url_template: "https://huggingface.co/{id}" + huggingface_dataset: + type: dataset + label_i18n: btn_dataset + icon: hero/circle-stack + url_template: "https://huggingface.co/datasets/{id}" + huggingface_space: + type: demo + label_i18n: btn_demo + icon: hero/link + url_template: "https://huggingface.co/spaces/{id}" + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/page_sharer.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/page_sharer.yaml index 2a83325df..7f69ee33b 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/page_sharer.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/page_sharer.yaml @@ -4,7 +4,7 @@ links: - id: x - url: 'https://twitter.com/intent/tweet?url={url}&text={title}' + url: 'https://x.com/intent/tweet?url={url}&text={title}' title: X icon: brands/x enable: true @@ -36,7 +36,7 @@ links: # - id: reddit # url: 'https://reddit.com/submit?url={url}&title={title}' # title: Reddit -# icon: reddit-alien +# icon: brands/reddit # enable: false # - id: pinterest # url: 'https://pinterest.com/pin/create/link/?url={url}&description={title}' diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/coffee.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/coffee.yaml new file mode 100644 index 000000000..6ffdc099d --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/coffee.yaml @@ -0,0 +1,45 @@ +# HugoBlox Theme Pack +# https://docs.hugoblox.com + +hugoblox: + meta: + format: "hugoblox-theme@1" + name: "Coffee" + vendor: "hugoblox" + version: "1.0.0" + license: "MIT" + description: "Warm latte light mode, deep americano dark mode" + + type: "dual" + + light: + # "Latte" - Warm, creamy, light + colors: + primary: "#3b2313" # Mocha/Coffee bean + secondary: "#d97706" # Caramel/Amber + neutral: "#78716c" # Stone + surfaces: + background: "#fffaf5" # Warm cream/milk foam + foreground: "#3b2313" # Espresso text + header: + background: "#f5efe9" # Visible header band (same as footer) + foreground: "#3b2313" + footer: + background: "#f5efe9" # Slightly darker latte foam + foreground: "#5c4033" + + dark: + # "Americano" - Deep, dark, intense + colors: + primary: "#d49255" # Warm Orange/Brown crema + secondary: "#395260" # Cool Slate Blue + neutral: "#2b262b" # Deep Espresso (Dark Neutral) + surfaces: + background: "#2b262b" # Deep Espresso + foreground: "#e0cab6" # Crema + header: + background: "#2b262b" + foreground: "#e0cab6" + footer: + background: "#231f23" # Darker roast + foreground: "#9ca3af" diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/contrast.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/contrast.yaml new file mode 100644 index 000000000..4e91c6371 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/contrast.yaml @@ -0,0 +1,41 @@ +# HugoBlox Theme Pack +# https://docs.hugoblox.com + +hugoblox: + meta: + format: "hugoblox-theme@1" + name: "Contrast" + vendor: "hugoblox" + version: "1.0.0" + license: "MIT" + description: "High contrast with inverted header" + + type: "dual" + + light: + colors: + primary: "indigo" + secondary: "blue" + surfaces: + background: "#ffffff" + foreground: "#111827" + header: + foreground: "#ffffff" + background: "#0f172a" + footer: + background: "#f3f4f6" + foreground: "#0f172a" + + dark: + colors: + primary: "blue" + secondary: "teal" + surfaces: + background: "#0f172a" + foreground: "#f8fafc" + header: + foreground: "#0f172a" + background: "#f8fafc" + footer: + background: "#111827" + foreground: "#e5e7eb" diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/cupcake.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/cupcake.yaml new file mode 100644 index 000000000..9883a02ff --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/cupcake.yaml @@ -0,0 +1,44 @@ +# HugoBlox Theme Pack +# https://docs.hugoblox.com + +hugoblox: + meta: + format: "hugoblox-theme@1" + name: "Cupcake" + vendor: "hugoblox" + version: "1.0.0" + license: "MIT" + description: "Sweet pastry pinks and berry accents" + + type: "dual" + + light: + colors: + primary: "#e779c1" # Frosting Pink + secondary: "#d946ef" # Deep Purple/Fuchsia + neutral: "#5c4033" # Chocolate/Dark Brown + surfaces: + background: "#faf7f5" # Vanilla/Sugar + foreground: "#7d1f39" # Berry Jam + header: + background: "#fff0f5" # LavenderBlush - slight pink tint + foreground: "#7d1f39" + footer: + background: "#f3e8e8" # Light Pink Foam + foreground: "#7d1f39" + + dark: + # "Dark Berry" - Rich, vibrant, fruity + colors: + primary: "#f472b6" # Bright Icing Pink (Pink-400) + secondary: "#c084fc" # Purple Sprinkle (Purple-400) + neutral: "#831843" # Deep Berry (Pink-900) + surfaces: + background: "#4c0519" # Deep Red Velvet / Rose-950 + foreground: "#fce7f3" # Sweet Cream / Pink-100 + header: + background: "#831843" # Vibrant Berry Header / Pink-900 + foreground: "#fce7f3" + footer: + background: "#881337" # Rose-900 + foreground: "#fbcfe8" # Pink-200 diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/default.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/default.yaml new file mode 100644 index 000000000..27e38aa40 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/default.yaml @@ -0,0 +1,40 @@ +# HugoBlox Theme Pack +# https://docs.hugoblox.com + +hugoblox: + meta: + format: "hugoblox-theme@1" + name: "Default" + vendor: "hugoblox" + version: "1.0.0" + license: "MIT" + + type: "dual" + + light: + colors: + primary: "indigo" + secondary: "blue" + surfaces: + background: "#ffffff" + foreground: "#111827" + header: + background: "#f1f5f9" # Slate-100 for definition against white content + foreground: "#0f172a" + footer: + background: "#f3f4f6" + foreground: "#0f172a" + + dark: + colors: + primary: "blue" + secondary: "teal" + surfaces: + background: "#0f172a" + foreground: "#f8fafc" + header: + background: "#0f172a" + foreground: "#f8fafc" + footer: + background: "#111827" + foreground: "#e5e7eb" diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/dracula.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/dracula.yaml new file mode 100644 index 000000000..98d5c4efc --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/dracula.yaml @@ -0,0 +1,45 @@ +# HugoBlox Theme Pack +# https://docs.hugoblox.com + +hugoblox: + meta: + format: "hugoblox-theme@1" + name: "Dracula" + vendor: "hugoblox" + version: "1.0.0" + license: "MIT" + description: "The iconic dark theme with a light Buffy variant" + + type: "dual" + + dark: + # Official Dracula Dark + colors: + primary: "#ff79c6" # Pink + secondary: "#bd93f9" # Purple + neutral: "#6272a4" # Comment + surfaces: + background: "#282a36" # Background + foreground: "#f8f8f2" # Foreground + header: + background: "#282a36" + foreground: "#f8f8f2" + footer: + background: "#21222c" # Selection + foreground: "#f8f8f2" + + light: + # Dracula Light (Buffy inspired) - Inverted aesthetic + colors: + primary: "#d03282" # Darker Pink for contrast + secondary: "#9259d6" # Darker Purple for contrast + neutral: "#44475a" # Current Line (Dark Gray) + surfaces: + background: "#f8f8f2" # Light Gray + foreground: "#282a36" # Dark Gray + header: + background: "#e4e4db" # Slightly darker band + foreground: "#282a36" + footer: + background: "#e4e4db" + foreground: "#282a36" diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/marine.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/marine.yaml new file mode 100644 index 000000000..bf1db527c --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/marine.yaml @@ -0,0 +1,40 @@ +# HugoBlox Theme Pack +# https://docs.hugoblox.com + +hugoblox: + meta: + format: "hugoblox-theme@1" + name: "Marine" + vendor: "hugoblox" + version: "1.0.0" + license: "MIT" + description: "Deep ocean blues with teal accents" + + type: "dual" + + dark: + colors: + primary: "#2dd4bf" # Teal/Cyan + secondary: "#a855f7" # Purple + neutral: "#1e3a8a" # Deep Blue + surfaces: + background: "#1e3a8a" # Deep Ocean Blue + foreground: "#e0f2fe" # Light Sky + header: + background: "#1e3a8a" + foreground: "#e0f2fe" + footer: + background: "#172554" # Darker depth + foreground: "#93c5fd" + + light: + # A "Beach Day" pairing + colors: + primary: "#2dd4bf" + secondary: "#a855f7" + surfaces: + background: "#f0f9ff" + foreground: "#0c4a6e" + header: + background: "#e0f2fe" # Sky-100 for visible header bar + foreground: "#0c4a6e" diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/matcha.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/matcha.yaml new file mode 100644 index 000000000..a3619f353 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/matcha.yaml @@ -0,0 +1,45 @@ +# HugoBlox Theme Pack +# https://docs.hugoblox.com + +hugoblox: + meta: + format: "hugoblox-theme@1" + name: "Matcha" + vendor: "hugoblox" + version: "1.0.0" + license: "MIT" + description: "Fresh, organic greens inspired by Japanese tea" + + type: "dual" + + light: + # "Matcha Latte" - Creamy, fresh, organic + colors: + primary: "#65a30d" # Fresh Tea Leaf (Lime-600) + secondary: "#15803d" # Deep Herbal Green (Green-700) + neutral: "#3f6212" # Olive text (Lime-800) + surfaces: + background: "#f7fee7" # Very pale lime cream (Lime-50) + foreground: "#1a2e05" # Dark moss text + header: + background: "#ecfccb" # Light Matcha Foam (Lime-100) + foreground: "#365314" # Deep olive + footer: + background: "#d9f99d" # Stronger tea green (Lime-200) + foreground: "#14532d" + + dark: + # "Ceremonial Grade" - Deep, rich, meditative + colors: + primary: "#a3e635" # Vibrant Matcha Powder (Lime-400) + secondary: "#4ade80" # Soft green light (Green-400) + neutral: "#1a2f23" # Deep Forest Background + surfaces: + background: "#14281d" # Deep Nori Green + foreground: "#ecfccb" # Pale tea green text + header: + background: "#0f1f16" # Darker leaf + foreground: "#d9f99d" + footer: + background: "#052e16" # Deepest green (Green-950) + foreground: "#86efac" diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/minimal.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/minimal.yaml new file mode 100644 index 000000000..71abe1d88 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/minimal.yaml @@ -0,0 +1,45 @@ +# HugoBlox Theme Pack +# https://docs.hugoblox.com + +hugoblox: + meta: + format: "hugoblox-theme@1" + name: "Minimal" + vendor: "hugoblox" + version: "1.0.0" + license: "MIT" + description: "Clean, GitHub-inspired design" + + type: "dual" + + light: + # Inspired by GitHub Light + colors: + primary: "#0969da" # GitHub Blue + secondary: "#1f883d" # GitHub Green + neutral: "#24292f" # GitHub Dark Gray (Text) + surfaces: + background: "#ffffff" + foreground: "#24292f" + header: + background: "#f6f8fa" # GitHub Header Gray + foreground: "#24292f" + footer: + background: "#ffffff" # Clean + foreground: "#57606a" # Muted text + + dark: + # Inspired by GitHub Dark + colors: + primary: "#58a6ff" # GitHub Blue (Dark Mode) + secondary: "#238636" # GitHub Green (Dark Mode) + neutral: "#c9d1d9" # GitHub Light Gray (Text) + surfaces: + background: "#0d1117" # GitHub Dimmed BG + foreground: "#c9d1d9" + header: + background: "#161b22" # GitHub Dark Header + foreground: "#f0f6fc" + footer: + background: "#0d1117" + foreground: "#8b949e" # Muted text diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/retro.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/retro.yaml new file mode 100644 index 000000000..c3869f700 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/retro.yaml @@ -0,0 +1,45 @@ +# HugoBlox Theme Pack +# https://docs.hugoblox.com + +hugoblox: + meta: + format: "hugoblox-theme@1" + name: "Retro" + vendor: "hugoblox" + version: "1.0.0" + license: "MIT" + description: "Vintage paper meets midnight arcade" + + type: "dual" + + light: + # "Vintage Paper" - Sepia, warm, nostalgic + colors: + primary: "#e38c89" # Desaturated Red/Pink + secondary: "#b4e9d6" # Mint Green + neutral: "#79726b" # Warm Stone + surfaces: + background: "#ebe6d9" # Vintage Paper / Beige + foreground: "#7d5e3c" # Sepia/Brown + header: + background: "#e3dbcd" # Slightly darker paper + foreground: "#7d5e3c" + footer: + background: "#dcd3c3" + foreground: "#5c4033" + + dark: + # "Midnight Arcade" - Deep petrol, mustard, and neon accents + colors: + primary: "#fbbf24" # Mustard Gold (Amber-400) + secondary: "#f472b6" # Retro Pink (Pink-400) + neutral: "#134e4a" # Dark Teal (Teal-900) + surfaces: + background: "#042f2e" # Deep Petrol / Teal-950 + foreground: "#ccfbf1" # Pale Mint / Teal-50 + header: + background: "#115e59" # Lighter Petrol / Teal-800 + foreground: "#ccfbf1" + footer: + background: "#0f393b" # Muted Teal + foreground: "#99f6e4" # Teal-200 diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/solar.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/solar.yaml new file mode 100644 index 000000000..791d08468 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/solar.yaml @@ -0,0 +1,45 @@ +# HugoBlox Theme Pack +# https://docs.hugoblox.com + +hugoblox: + meta: + format: "hugoblox-theme@1" + name: "Solar" + vendor: "hugoblox" + version: "1.0.0" + license: "MIT" + description: "Solarized-inspired, easy on the eyes" + + type: "dual" + + light: + # Inspired by Solarized Light - Low contrast, warm, easy on the eyes + colors: + primary: "#b58900" # Yellow (Solarized) + secondary: "#2aa198" # Cyan (Solarized) + neutral: "#657b83" # Base00 (Primary Content) + surfaces: + background: "#fdf6e3" # Base3 (Creamy Background) + foreground: "#586e75" # Base01 (Optional darker text for contrast) + header: + background: "#eee8d5" # Base2 (Slightly darker highlights) + foreground: "#586e75" + footer: + background: "#eee8d5" + foreground: "#657b83" + + dark: + # Inspired by Solarized Dark - Deep, cool, high precision + colors: + primary: "#268bd2" # Blue (Solarized) + secondary: "#859900" # Green (Solarized) + neutral: "#839496" # Base0 (Primary Content) + surfaces: + background: "#002b36" # Base03 (Deep Teal Background) + foreground: "#93a1a1" # Base1 (Light Content) + header: + background: "#073642" # Base02 (Lighter Teal Highlights) + foreground: "#93a1a1" + footer: + background: "#073642" + foreground: "#839496" diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/synthwave.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/synthwave.yaml new file mode 100644 index 000000000..f65f64f3f --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/data/themes/synthwave.yaml @@ -0,0 +1,44 @@ +# HugoBlox Theme Pack +# https://docs.hugoblox.com + +hugoblox: + meta: + format: "hugoblox-theme@1" + name: "Synthwave" + vendor: "hugoblox" + version: "1.0.0" + license: "MIT" + description: "Neon-drenched 80s retrowave aesthetic" + + type: "dual" + + dark: + colors: + primary: "#e779c1" # Neon Pink + secondary: "#58c7f3" # Cyan + neutral: "#2a2e37" # Dark Blue-Gray + surfaces: + background: "#1a103d" # Deep Purple + foreground: "#f9f7fd" # Light Lavender + header: + background: "rgba(26, 16, 61, 0.9)" # Deep Purple + foreground: "#f9f7fd" + footer: + background: "#110a28" # Darker Deep Purple + foreground: "#b8b2cc" + + light: + # "Vaporwave" - A bright, pastel-neon day dream + colors: + primary: "#d946ef" # Electric Fuchsia + secondary: "#06b6d4" # Neon Cyan + neutral: "#701a75" # Deep Magenta (for text utilities) + surfaces: + background: "#fff0f5" # Lavender Blush + foreground: "#2e1065" # Deep Violet Ink + header: + background: "#fae8ff" # Light Fuchsia Mist + foreground: "#86198f" # Vibrant Purple + footer: + background: "#f0abfc" # Sunset Pink + foreground: "#2e1065" # Dark Violet diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/go.mod b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/go.mod index df8f941f8..46e52eced 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/go.mod +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/go.mod @@ -2,4 +2,4 @@ module github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind go 1.19 -require github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics v0.1.3 +require github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics v0.3.0 diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/hugo.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/hugo.yaml index 7b42fb106..e92a5c989 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/hugo.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/hugo.yaml @@ -1,17 +1,26 @@ +build: + buildStats: + enable: true + cachebusters: + - source: assets/hugo_stats\.json + target: css + - source: (postcss|tailwind)\.config\.js + target: css + markup: defaultMarkdownHandler: goldmark goldmark: renderHooks: link: # Process backlinks hook - enableDefault: true + useEmbedded: fallback renderer: # Render HTML in Markdown unsafe: true parser: # Support Latex math(?) attribute: - block: true + block: true # For callouts as quote blocks title: true extensions: # Support Latex math @@ -56,9 +65,45 @@ minify: keepSpecialComments: true sitemap: changefreq: weekly +security: + funcs: + getenv: + # Allow HUGO_ and HUGO_BLOX_ vars + - ^HUGO_ + # Allow continuous integration vars + - ^CI$ +outputFormats: + backlinks: + mediaType: application/json + baseName: backlinks + isPlainText: true + notAlternative: true + LLM: + mediaType: text/plain + baseName: llms + isPlainText: true + notAlternative: true + permalinkable: true + +outputs: + home: + - HTML + - RSS + - LLM +imaging: + # High quality defaults for crisp avatar display + quality: 90 + resampleFilter: lanczos + anchor: smart + hint: picture +params: + locale: + date_format: 'Jan 2, 2006' + time_format: '3:04 PM' + address_format: en-us module: hugoVersion: - min: '0.134.1' + min: '0.148.2' extended: true imports: - path: github.com/HugoBlox/hugo-blox-builder/modules/blox-analytics @@ -77,21 +122,41 @@ module: target: i18n - source: archetypes target: archetypes -security: - funcs: - getenv: - # Allow HUGO_ and HUGO_BLOX_ vars - - ^HUGO_ - # Allow continuous integration vars - - ^CI$ -outputFormats: - backlinks: - mediaType: application/json - baseName: backlinks - isPlainText: true - notAlternative: true -params: - locale: - date_format: 'Jan 2, 2006' - time_format: '3:04 PM' - address_format: en-us + - disableWatch: true + source: hugo_stats.json + target: assets/hugo_stats.json + + # BLOX A) Server-rendered block templates (Go HTML) + - source: blox + target: layouts/_partials/hbx/blocks + includeFiles: + - '**/block.html' + + # BLOX B) Client islands (compiled with js.Build/js.Batch) + - source: blox + target: assets/js/hbx/blocks + includeFiles: + - '**/*.js' + - '**/*.ts' + - '**/*.jsx' + - '**/*.tsx' + + # BLOX C) Block-specific CSS + - source: blox + target: assets/css/hbx/blocks + includeFiles: + - '**/*.css' + + # BLOX D) Shared assets (optional) + - source: blox/shared/js + target: assets/js/hbx/shared + - source: blox/shared/css + target: assets/css/hbx/shared + - source: blox + target: assets/img/hbx/blocks + includeFiles: + - '**/*.png' + - '**/*.jpg' + - '**/*.jpeg' + - '**/*.svg' + - '**/*.webp' diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/ar.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/ar.yaml index 88e2de7fa..b5d2e96ac 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/ar.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/ar.yaml @@ -262,4 +262,4 @@ # Published with - id: published_with - translation: Published with {hugoblox} — the free, {repo_link}open source{/repo_link} website builder that empowers creators. + translation: Made with {hugoblox}. diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/ca.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/ca.yaml index f73ca3d30..e1f0559c6 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/ca.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/ca.yaml @@ -262,4 +262,4 @@ # Published with - id: published_with - translation: Published with {hugoblox} — the free, {repo_link}open source{/repo_link} website builder that empowers creators. + translation: Made with {hugoblox}. diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/cs.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/cs.yaml index 9c505c0bf..f1676fc6f 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/cs.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/cs.yaml @@ -262,4 +262,4 @@ # Published with - id: published_with - translation: Published with {hugoblox} — the free, {repo_link}open source{/repo_link} website builder that empowers creators. + translation: Made with {hugoblox}. diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/da.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/da.yaml index e1dcfb7fe..231d0182c 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/da.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/da.yaml @@ -262,4 +262,4 @@ # Published with - id: published_with - translation: Published with {hugoblox} — the free, {repo_link}open source{/repo_link} website builder that empowers creators. + translation: Made with {hugoblox}. diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/de.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/de.yaml index c469ba638..6526b0515 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/de.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/de.yaml @@ -26,6 +26,22 @@ - id: related translation: Ähnliches +# Callouts +- id: callout_note + translation: Hinweis + +- id: callout_tip + translation: Tipp + +- id: callout_important + translation: Wichtig + +- id: callout_warning + translation: Warnung + +- id: callout_caution + translation: Vorsicht + - id: backlinks translation: Backlinks @@ -225,14 +241,14 @@ # Content types for default archive page titles and search results -- id: posts +- id: blog translation: Blog - id: publications translation: Publikationen -- id: talks - translation: Vorträge +- id: events + translation: Veranstaltungen - id: projects translation: Projekte @@ -284,6 +300,9 @@ - id: published_with translation: Veröffentlicht mit {hugoblox} - dem kostenlosen, {repo_link}Open Source{/repo_link} Website-Builder, der Kreative fördert. +- id: poweredby_button + translation: 'Erstelle deine →' + # Feedback widget - id: feedback_widget_title diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/el.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/el.yaml index 01b3d3d6d..9a8e353bf 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/el.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/el.yaml @@ -262,4 +262,4 @@ # Published with - id: published_with - translation: Published with {hugoblox} — the free, {repo_link}open source{/repo_link} website builder that empowers creators. + translation: Made with {hugoblox}. diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/en.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/en.yaml index 07fb5f4c4..84a26cce2 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/en.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/en.yaml @@ -26,6 +26,55 @@ - id: related translation: Related +# Callouts - All Obsidian-compatible types +- id: callout_note + translation: Note + +- id: callout_abstract + translation: Abstract + +- id: callout_summary + translation: Summary + +- id: callout_info + translation: Info + +- id: callout_todo + translation: Todo + +- id: callout_tip + translation: Tip + +- id: callout_success + translation: Success + +- id: callout_question + translation: Question + +- id: callout_warning + translation: Warning + +- id: callout_failure + translation: Failure + +- id: callout_danger + translation: Danger + +- id: callout_bug + translation: Bug + +- id: callout_example + translation: Example + +- id: callout_quote + translation: Quote + +- id: callout_important + translation: Important + +- id: callout_caution + translation: Caution + - id: backlinks translation: Backlinks @@ -90,6 +139,46 @@ - id: btn_source translation: Source Document +# New link types +- id: btn_doi + translation: DOI +- id: btn_site + translation: Site +- id: btn_canonical + translation: Canonical +- id: btn_crosspost + translation: Crosspost +- id: btn_discussion + translation: Discussion +- id: btn_event + translation: Event +- id: btn_calendar + translation: Calendar +- id: btn_registration + translation: Registration +- id: btn_demo + translation: Demo +- id: btn_model + translation: Model +- id: btn_hal + translation: HAL +- id: btn_dblp + translation: DBLP +- id: btn_isbn + translation: ISBN +- id: btn_osf + translation: OSF +- id: btn_zenodo + translation: Zenodo +- id: btn_kaggle + translation: Kaggle +- id: btn_openalex + translation: OpenAlex +- id: btn_semanticscholar + translation: Semantic Scholar +- id: btn_pwc + translation: Papers With Code + - id: btn_copy translation: Copy @@ -107,6 +196,9 @@ - id: education translation: Education +- id: about_me + translation: Professional Summary + - id: user_profile_latest translation: Latest @@ -225,13 +317,13 @@ # Content types for default archive page titles and search results -- id: posts - translation: Posts +- id: blog + translation: Blog - id: publications translation: Publications -- id: talks +- id: events translation: Events - id: projects @@ -243,6 +335,48 @@ - id: authors translation: Authors +- id: qa + translation: Q&A + +- id: questions + translation: Questions + +- id: faq + translation: FAQ + +- id: faqs + translation: FAQs + +- id: docs + translation: Documentation + +- id: question + translation: Question + +- id: answer + translation: Answer + +- id: accepted_answer + translation: Accepted Answer + +- id: other_answers + translation: Other Answers + +- id: related_questions + translation: Related Questions + +- id: browse_by_category + translation: Browse by Category + +- id: search_questions + translation: Search questions... + +- id: no_questions_yet + translation: No questions yet. Check back soon! + +- id: questions_count + translation: questions + # Search - id: search @@ -282,7 +416,10 @@ # Published with - id: published_with - translation: Published with {hugoblox} — the free, {repo_link}open source{/repo_link} website builder that empowers creators. + translation: Made with {hugoblox}. + +- id: poweredby_button + translation: 'Build yours →' # Feedback widget @@ -297,3 +434,35 @@ - id: feedback_widget_answer_negative translation: 😡 No + +# AI Features + +- id: ai_insight + translation: AI Insight + +# Content Metadata +- id: content_type + translation: Content Type +- id: difficulty + translation: Difficulty +- id: prerequisites + translation: Prerequisites + +# Card metadata +- id: trending + translation: Trending + +- id: article + translation: article + +- id: articles + translation: articles + +- id: browse + translation: Browse + +- id: all + translation: All + +- id: helpful + translation: helpful diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/es.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/es.yaml index 969b3abf0..567c952d7 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/es.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/es.yaml @@ -26,6 +26,55 @@ - id: related translation: Relacionado +# Callouts - All Obsidian-compatible types +- id: callout_note + translation: Nota + +- id: callout_abstract + translation: Resumen + +- id: callout_summary + translation: Resumen + +- id: callout_info + translation: Info + +- id: callout_todo + translation: Pendiente + +- id: callout_tip + translation: Consejo + +- id: callout_success + translation: Éxito + +- id: callout_question + translation: Pregunta + +- id: callout_warning + translation: Advertencia + +- id: callout_failure + translation: Fallo + +- id: callout_danger + translation: Peligro + +- id: callout_bug + translation: Error + +- id: callout_example + translation: Ejemplo + +- id: callout_quote + translation: Cita + +- id: callout_important + translation: Importante + +- id: callout_caution + translation: Precaución + - id: minute_read translation: min de lectura @@ -205,13 +254,13 @@ # Content types for default archive page titles and search results -- id: posts - translation: Posts +- id: blog + translation: Blog - id: publications translation: Publicaciones -- id: talks +- id: events translation: Eventos - id: projects @@ -262,4 +311,7 @@ # Published with - id: published_with - translation: Published with {hugoblox} — the free, {repo_link}open source{/repo_link} website builder that empowers creators. + translation: Made with {hugoblox}. + +- id: poweredby_button + translation: 'Crea el tuyo →' diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/et.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/et.yaml index 8e1147f34..6872017fc 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/et.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/et.yaml @@ -262,4 +262,4 @@ # Published with - id: published_with - translation: Published with {hugoblox} — the free, {repo_link}open source{/repo_link} website builder that empowers creators. + translation: Made with {hugoblox}. diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/eu.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/eu.yaml index 279a346f4..bfd78566f 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/eu.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/eu.yaml @@ -262,4 +262,4 @@ # Published with - id: published_with - translation: Published with {hugoblox} — the free, {repo_link}open source{/repo_link} website builder that empowers creators. + translation: Made with {hugoblox}. diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/fa.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/fa.yaml index 4f7125a1b..4c3cf3567 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/fa.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/fa.yaml @@ -262,4 +262,4 @@ # Published with - id: published_with - translation: Published with {hugoblox} — the free, {repo_link}open source{/repo_link} website builder that empowers creators. + translation: Made with {hugoblox}. diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/fi.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/fi.yaml index f7c7acbd4..5284d0830 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/fi.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/fi.yaml @@ -262,4 +262,4 @@ # Published with - id: published_with - translation: Published with {hugoblox} — the free, {repo_link}open source{/repo_link} website builder that empowers creators. + translation: Made with {hugoblox}. diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/fr.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/fr.yaml index 34340a687..065b01b9d 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/fr.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/fr.yaml @@ -26,6 +26,55 @@ - id: related translation: Sur le même sujet +# Callouts - All Obsidian-compatible types +- id: callout_note + translation: Note + +- id: callout_abstract + translation: Résumé + +- id: callout_summary + translation: Résumé + +- id: callout_info + translation: Info + +- id: callout_todo + translation: À faire + +- id: callout_tip + translation: Conseil + +- id: callout_success + translation: Succès + +- id: callout_question + translation: Question + +- id: callout_warning + translation: Attention + +- id: callout_failure + translation: Échec + +- id: callout_danger + translation: Danger + +- id: callout_bug + translation: Bug + +- id: callout_example + translation: Exemple + +- id: callout_quote + translation: Citation + +- id: callout_important + translation: Important + +- id: callout_caution + translation: Prudence + - id: minute_read translation: min. de lecture @@ -208,14 +257,14 @@ # Content types for default archive page titles and search results -- id: posts - translation: Posts +- id: blog + translation: Blog - id: publications translation: Publications -- id: talks - translation: Présentations +- id: events + translation: Événements - id: projects translation: Projets @@ -266,3 +315,6 @@ - id: published_with translation: Publié avec {hugoblox} — le générateur {repo_link}libre{/repo_link} de site web gratuit permettant aux créateurs de s'épanouir. + +- id: poweredby_button + translation: 'Créer le vôtre →' diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/ht.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/ht.yaml new file mode 100644 index 000000000..cf2450713 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/ht.yaml @@ -0,0 +1,411 @@ +# Navigation + +- id: toggle_navigation + translation: Chanje navigasyon + +- id: table_of_contents + translation: Tablo kontni + +- id: on_this_page + translation: Sou paj sa a + +- id: back_to_top + translation: Tounen anlè paj la + +- id: home + translation: Akèy + +- id: close + translation: Fèmen + +- id: languages + translation: Lang + +# General + +- id: related + translation: Ki gen rapò + +# Callouts - All Obsidian-compatible types +- id: callout_note + translation: Nòt + +- id: callout_abstract + translation: Rezime + +- id: callout_summary + translation: Rezime + +- id: callout_info + translation: Enfòmasyon + +- id: callout_todo + translation: Pou fè + +- id: callout_tip + translation: Konsèy + +- id: callout_success + translation: Siksè + +- id: callout_question + translation: Kesyon + +- id: callout_warning + translation: Avètisman + +- id: callout_failure + translation: Echek + +- id: callout_danger + translation: Danje + +- id: callout_bug + translation: Pinèz + +- id: callout_example + translation: Egzanp + +- id: callout_quote + translation: Sita + +- id: callout_important + translation: Enpòtan + +- id: callout_caution + translation: Pridans + +- id: backlinks + translation: Lyen tounen + +- id: minute_read + translation: minit lekti + +- id: previous + translation: Anvan + +- id: next + translation: Pwochen + +- id: figure + translation: 'Figur %d:' + +- id: edit_page + translation: Modifye paj sa a + +# Themes + +- id: theme_selector + translation: Preferans afichaj + +- id: theme_light + translation: Klè + +- id: theme_dark + translation: Fènwa + +- id: theme_auto + translation: Otomatik + +# Buttons + +- id: btn_preprint + translation: Pre-piblikasyon + +- id: btn_pdf + translation: PDF + +- id: btn_cite + translation: Site + +- id: btn_slides + translation: Dias + +- id: btn_video + translation: Videyo + +- id: btn_code + translation: Kòd + +- id: btn_dataset + translation: Done + +- id: btn_project + translation: Pwojè + +- id: btn_poster + translation: Afich + +- id: btn_source + translation: Dokiman sous + +# New link types +- id: btn_doi + translation: DOI +- id: btn_site + translation: Sit +- id: btn_canonical + translation: Kanonik +- id: btn_crosspost + translation: Kwoz-piblikasyon +- id: btn_discussion + translation: Diskisyon +- id: btn_event + translation: Evènman +- id: btn_calendar + translation: Kalandriye +- id: btn_registration + translation: Enskripsyon +- id: btn_demo + translation: Demo +- id: btn_model + translation: Modèl +- id: btn_hal + translation: HAL +- id: btn_dblp + translation: DBLP +- id: btn_isbn + translation: ISBN +- id: btn_osf + translation: OSF +- id: btn_zenodo + translation: Zenodo +- id: btn_kaggle + translation: Kaggle +- id: btn_openalex + translation: OpenAlex +- id: btn_semanticscholar + translation: Semantic Scholar +- id: btn_pwc + translation: Papers With Code + +- id: btn_copy + translation: Kopye + +- id: btn_copied + translation: Kopiye + +- id: btn_download + translation: Telechaje + +# About widget + +- id: interests + translation: Enterè + +- id: education + translation: Edikasyon + +- id: about_me + translation: Rezime pwofesyonèl + +- id: user_profile_latest + translation: Dènye + +# Countdown widget + +- id: days + translation: Jou +- id: hours + translation: Èdtan +- id: minutes + translation: Minit +- id: seconds + translation: Segonn + +# Accomplishments widget + +- id: see_certificate + translation: Gade sètifika + +# Experience widget + +- id: experience + translation: Eksperyans + +- id: present + translation: Kounye a + +# Pages widget + +- id: read_more + translation: Li plis + +- id: more_pages + translation: Gade tout + +- id: more_posts + translation: Gade tout pòs yo + +- id: more_talks + translation: Gade tout evènman yo + +- id: more_publications + translation: Gade tout piblikasyon yo + +# Contact widget + +- id: contact_name + translation: Non + +- id: contact_email + translation: Imèl + +- id: contact_message + translation: Mesaj + +- id: contact_attachment + translation: Atache fichye + +- id: contact_send + translation: Voye + +- id: book_appointment + translation: Rezève randevou + +# Publication/Event details + +- id: abstract + translation: Rezime + +- id: publication + translation: Piblikasyon + +- id: publication_type + translation: Kalite + +- id: date + translation: Dat + +- id: last_updated + translation: Dènye mizajou sou + +- id: event + translation: Evènman + +- id: location + translation: Kote + +- id: pub_paper_conference + translation: Atik konferans + +- id: pub_article_journal + translation: Atik jounal + +- id: pub_article + translation: Pre-piblikasyon + +- id: pub_report + translation: Rapò + +- id: pub_book + translation: Liv + +- id: pub_chapter + translation: Chapit liv + +- id: pub_thesis + translation: Tèz + +- id: pub_patent + translation: Patant + +# Project details + +- id: open_project_site + translation: Ale sou sit pwojè a + +# Content types for default archive page titles and search results + +- id: blog + translation: Blog + +- id: publications + translation: Piblikasyon + +- id: events + translation: Evènman + +- id: projects + translation: Pwojè + +- id: slides + translation: Dias + +- id: authors + translation: Otè + +# Search + +- id: search + translation: Rechèch + +- id: search_placeholder + translation: Chèche... + +- id: search_results + translation: rezilta jwenn + +- id: search_no_results + translation: Pa gen rezilta + +- id: search_common_queries + translation: Rechèch komen + +# Error 404 + +- id: page_not_found + translation: Paj pa jwenn + +- id: 404_recommendations + translation: Petèt ou t ap chèche youn nan sa yo? + +# Cookie consent + +- id: cookie_message + translation: Sit entènèt sa a itilize bonbon pou asire w jwenn pi bon eksperyans. + +- id: cookie_dismiss + translation: Mwen konprann! + +- id: cookie_learn + translation: Aprann plis + +# Published with + +- id: published_with + translation: Fè ak {hugoblox}. + +- id: poweredby_button + translation: 'Kreye pa w →' + +# Feedback widget + +- id: feedback_widget_title + translation: Fidbak + +- id: feedback_widget_question + translation: Èske paj sa a te itil ou? + +- id: feedback_widget_answer_positive + translation: 😍 Wi + +- id: feedback_widget_answer_negative + translation: 😡 Non + +# AI Features + +- id: ai_insight + translation: Analiz AI + +# Content Metadata +- id: content_type + translation: Kalite kontni +- id: difficulty + translation: Difikilte +- id: prerequisites + translation: Kondisyon davans + +# Card metadata +- id: trending + translation: Popilè \ No newline at end of file diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/hu.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/hu.yaml index 7c50de80f..d7f6813d4 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/hu.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/hu.yaml @@ -262,4 +262,4 @@ # Published with - id: published_with - translation: Published with {hugoblox} — the free, {repo_link}open source{/repo_link} website builder that empowers creators. + translation: Made with {hugoblox}. diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/it.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/it.yaml index 9bf7bd07e..2286ab33d 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/it.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/it.yaml @@ -262,4 +262,4 @@ # Published with - id: published_with - translation: Published with {hugoblox} — the free, {repo_link}open source{/repo_link} website builder that empowers creators. + translation: Made with {hugoblox}. diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/ja.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/ja.yaml index f5884693a..ebc97a6a9 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/ja.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/ja.yaml @@ -262,4 +262,4 @@ # Published with - id: published_with - translation: Published with {hugoblox} — the free, {repo_link}open source{/repo_link} website builder that empowers creators. + translation: Made with {hugoblox}. diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/km.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/km.yaml index 2462eff52..a6c162d64 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/km.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/km.yaml @@ -262,4 +262,4 @@ # Published with - id: published_with - translation: Published with {hugoblox} — the free, {repo_link}open source{/repo_link} website builder that empowers creators. + translation: Made with {hugoblox}. diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/ko.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/ko.yaml index 48bcdf22b..bb3dc7ca2 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/ko.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/ko.yaml @@ -262,4 +262,4 @@ # Published with - id: published_with - translation: Published with {hugoblox} — the free, {repo_link}open source{/repo_link} website builder that empowers creators. + translation: Made with {hugoblox}. diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/lt.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/lt.yaml index d3755abd8..f72709a7d 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/lt.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/lt.yaml @@ -262,4 +262,4 @@ # Published with - id: published_with - translation: Published with {hugoblox} — the free, {repo_link}open source{/repo_link} website builder that empowers creators. + translation: Made with {hugoblox}. diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/lv.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/lv.yaml index 35cab2e49..9119bc6e9 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/lv.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/lv.yaml @@ -262,4 +262,4 @@ # Published with - id: published_with - translation: Published with {hugoblox} — the free, {repo_link}open source{/repo_link} website builder that empowers creators. + translation: Made with {hugoblox}. diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/nl.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/nl.yaml index e746e94f9..660cea66f 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/nl.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/nl.yaml @@ -205,14 +205,14 @@ # Content types for default archive page titles and search results -- id: posts - translation: Berichten +- id: blog + translation: Blog - id: publications translation: Publicaties -- id: talks - translation: Presentaties +- id: events + translation: Evenementen - id: projects translation: Projects @@ -262,4 +262,7 @@ # Published with - id: published_with - translation: Published with {hugoblox} — the free, {repo_link}open source{/repo_link} website builder that empowers creators. + translation: Made with {hugoblox}. + +- id: poweredby_button + translation: 'Bouw de jouwe →' diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/pl.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/pl.yaml index 0d0a3ef55..55bb890d2 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/pl.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/pl.yaml @@ -262,4 +262,4 @@ # Published with - id: published_with - translation: Published with {hugoblox} — the free, {repo_link}open source{/repo_link} website builder that empowers creators. + translation: Made with {hugoblox}. diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/pt.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/pt.yaml index e2499c8a6..6967af873 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/pt.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/pt.yaml @@ -205,14 +205,14 @@ # Content types for default archive page titles and search results -- id: posts - translation: Posts +- id: blog + translation: Blog - id: publications translation: Publicações -- id: talks - translation: Palestras +- id: events + translation: Eventos - id: projects translation: Projetos @@ -262,4 +262,4 @@ # Published with - id: published_with - translation: Published with {hugoblox} — the free, {repo_link}open source{/repo_link} website builder that empowers creators. + translation: Made with {hugoblox}. diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/ro.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/ro.yaml index fde6b7b35..ba315acd2 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/ro.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/ro.yaml @@ -262,4 +262,4 @@ # Published with - id: published_with - translation: Published with {hugoblox} — the free, {repo_link}open source{/repo_link} website builder that empowers creators. + translation: Made with {hugoblox}. diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/ru.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/ru.yaml index d56e14e17..8f4923e13 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/ru.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/ru.yaml @@ -262,4 +262,4 @@ # Published with - id: published_with - translation: Published with {hugoblox} — the free, {repo_link}open source{/repo_link} website builder that empowers creators. + translation: Made with {hugoblox}. diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/so.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/so.yaml index ce159dfc5..8f63234aa 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/so.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/so.yaml @@ -262,4 +262,4 @@ # Published with - id: published_with - translation: Published with {hugoblox} — the free, {repo_link}open source{/repo_link} website builder that empowers creators. + translation: Made with {hugoblox}. diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/sv.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/sv.yaml index b9f4057ce..1af157a90 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/sv.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/sv.yaml @@ -262,4 +262,4 @@ # Published with - id: published_with - translation: Published with {hugoblox} — the free, {repo_link}open source{/repo_link} website builder that empowers creators. + translation: Made with {hugoblox}. diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/tr.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/tr.yaml index a9e820155..3da983dd1 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/tr.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/tr.yaml @@ -262,4 +262,4 @@ # Published with - id: published_with - translation: Published with {hugoblox} — the free, {repo_link}open source{/repo_link} website builder that empowers creators. + translation: Made with {hugoblox}. diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/uk.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/uk.yaml index 0a7809ba3..bbce6be2f 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/uk.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/uk.yaml @@ -262,4 +262,4 @@ # Published with - id: published_with - translation: Published with {hugoblox} — the free, {repo_link}open source{/repo_link} website builder that empowers creators. + translation: Made with {hugoblox}. diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/vi.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/vi.yaml index 2fc7f3fda..d92899d39 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/vi.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/vi.yaml @@ -262,7 +262,7 @@ # Published with - id: published_with - translation: Published with {hugoblox} — the free, {repo_link}open source{/repo_link} website builder that empowers creators. + translation: Made with {hugoblox}. # Feedback widget diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/zh-Hant.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/zh-Hant.yaml index 23db511f2..2b3ba8977 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/zh-Hant.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/zh-Hant.yaml @@ -205,14 +205,14 @@ # Content types for default archive page titles and search results -- id: posts - translation: 文章 +- id: blog + translation: 博客 - id: publications translation: 出版物 -- id: talks - translation: 演講 +- id: events + translation: 活動 - id: projects translation: 專案 @@ -263,3 +263,6 @@ - id: published_with translation: 由{hugoblox}支持發布——免費{repo_link}開源{/repo_link}網站,為創作者賦能。 + +- id: poweredby_button + translation: '構建您的 →' diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/zh.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/zh.yaml index a1740eec6..98a88f211 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/zh.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/i18n/zh.yaml @@ -26,6 +26,22 @@ - id: related translation: 相关 +# Callouts +- id: callout_note + translation: 注意 + +- id: callout_tip + translation: 提示 + +- id: callout_important + translation: 重要 + +- id: callout_warning + translation: 警告 + +- id: callout_caution + translation: 小心 + - id: minute_read translation: 分钟阅读时长 @@ -114,7 +130,7 @@ # Experience widget -- id: work_experience +- id: experience translation: 工作经历 - id: present @@ -211,14 +227,14 @@ # Content types for default archive page titles and search results -- id: posts - translation: 文章 +- id: blog + translation: 博客 - id: publications translation: 出版物 -- id: talks - translation: 演讲 +- id: events + translation: 活动 - id: projects translation: 项目 @@ -269,3 +285,6 @@ - id: published_with translation: 由{hugoblox}支持发布——免费{repo_link}开源{/repo_link}网站,为创作者赋能。 + +- id: poweredby_button + translation: '构建您的 →' diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/404.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/404.html index 1b2001179..bbacc5a81 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/404.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/404.html @@ -1,5 +1,6 @@ {{- define "main" -}} -
+{{/* Exclude 404 page from search indexing */}} +

{{ i18n "page_not_found" }}

diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_default/baseof.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_default/baseof.html deleted file mode 100644 index 1c632d3c6..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_default/baseof.html +++ /dev/null @@ -1,33 +0,0 @@ - -{{ "" | safeHTML }} -{{ printf "" (now | time.Format ":date_long") | safeHTML }} -{{- $language_code := site.LanguageCode | default "en-us" -}} - - {{ partial "site_head" . }} - -
- -
- {{ block "main" . }}{{ end }} -
- - - {{/* EXTENSIBILITY HOOK: BODY-END */}} - {{ partial "functions/get_hook" (dict "hook" "body-end" "context" .) }} - - diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_default/list.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_default/list.html deleted file mode 100644 index b74ee95e0..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_default/list.html +++ /dev/null @@ -1,28 +0,0 @@ -{{ define "main" }} - -
-
-

{{ .Title }}

- {{ .Content }} -
-
- -{{ $view := .Params.view | default "card" }} -{{ $block := . }} - -
- - {{ partial "functions/render_view" (dict "fragment" "start" "page" $block "item" . "view" $view) }} - - {{ $paginator := .Paginate .Pages.ByDate.Reverse }} - {{ range $index, $item := $paginator.Pages }} - {{ partial "functions/render_view" (dict "page" . "item" . "view" $view "index" $index) }} - {{end}} - - {{ partial "functions/render_view" (dict "fragment" "end" "page" $block "item" . "view" $view) }} - - {{ partial "components/paginator" . }} - -
- -{{ end }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_default/single.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_default/single.html deleted file mode 100644 index a5ef4ab74..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_default/single.html +++ /dev/null @@ -1,167 +0,0 @@ -{{ define "main" }} - -{{ $pub_type_csl := "" }} -{{ $pub_type_display := "" }} -{{ if .Params.publication_types }} - {{ if reflect.IsSlice .Params.publication_types }} - {{ $pub_type_csl = index .Params.publication_types 0 }} - {{ $pub_type_display = i18n (printf "pub_%s" (strings.Replace $pub_type_csl "-" "_")) | default (strings.Title $pub_type_csl) }} - {{ end }} -{{ end }} - -
- {{ partial "components/sidebar.html" (dict "context" . "no_sidebar" true) }} - {{ partial "components/toc.html" . }} -
-
- - {{ if .Params.show_breadcrumb }} -
- {{ partial "components/breadcrumb.html" . }} -
- {{ end }} - -

- {{- .Title -}} -

- -
-
- {{- if .Date | and (not .Params.hide_date) -}} - {{- .Date | time.Format (site.Params.locale.date_format | default ":date_long") -}} - {{- if .Params.authors }}·{{ end -}} - {{- end -}} - - {{ $taxonomy := "authors" }} - {{ range $i, $author_obj := (.GetTerms $taxonomy) }} - {{ $author_page := $author_obj.Page }} - {{ $avatar := ($author_page.Resources.ByType "image").GetMatch "*avatar*" }} - {{- if and $i (not $avatar) }},{{ end -}} - {{ with $author_page.Params.website }} - - {{ end }} -
- {{ with $avatar }} - {{ $avatar = $avatar.Process "Fill 50x50 Center webp" }} - {{ $author_page.Title }} - {{ end }} -
{{ $author_page.Title }}
-
- {{ with $author_page.Params.website }} -
- {{ end }} - {{ end }} - - {{ if ne .Params.reading_time false }} - · - - {{ .ReadingTime }} {{ i18n "minute_read" }} - - {{ end }} -
- -
- {{ partial "page_links_div.html" . }} -
-
- - - - {{ $featured := partial "functions/get_featured_image.html" . }} - {{/* Featured image layout */}} - {{ if and $featured (not .Params.image.preview_only) }} - {{/* Fit image within max size. */}} - {{ $image := $featured }} - - {{/* Determine image placement. */}} - {{ $placement := .Params.image.placement | default 1 }}{{/* Default to full column width. */}} - {{/* Fit image to container's max width */}} - {{ $image_container := "" }} - {{ if eq $placement 2}} - {{ $image_container = "container" }} - {{ $image = $featured.Fit "1200x2500" }} - {{else if eq $placement 3}} - {{ $image_container = "container-fluid" }} - {{ $image := $featured.Fit "2560x2560" }} - {{else}} - {{ $image_container = "article-container" }} - {{ $image = $featured.Fit "720x2500" }} - {{end}} - {{ if ne $image.MediaType.SubType "gif" }}{{ $image = $image.Process "webp" }}{{ end }} - {{/* Featured image */}} -
-
- {{ with $.Params.image.alt_text }}{{.}}{{ end }} - {{ with $.Params.image.caption }}{{ . | markdownify | emojify }}{{ end }} -
-
- {{end}} - - {{/* EVENT / PUBLICATION METADATA */}} - {{ if .Params.abstract | or (eq .Type "publication") | or (eq .Type "event") }} -
- - {{ if .Params.abstract }} -
{{ i18n "abstract" }}
-
{{ .Params.abstract | markdownify }}
- {{ end }} - - {{/* If the type is Uncategorized, hide the type. */}} - {{ if $pub_type_display }} -
{{ i18n "publication_type" }}
- - {{ end }} - - {{ if .Params.publication }} -
{{ i18n "publication" }}
-
{{ .Params.publication | markdownify }}
- {{ end }} - - {{ if eq .Type "event" }} -
{{ i18n "date" }}
-
- {{ partial "functions/get_event_dates" . }} -
- {{ end }} - - {{ if .Params.event }} -
{{ i18n "event" }}
- - {{ end }} - - {{ if .Params.location }} -
{{ i18n "location" }}
-
-

{{ .Params.location | markdownify }}

- {{ if .Params.address }} -

{{partial "functions/get_address" (dict "root" . "address" .Params.address) }}

- {{end}} -
- {{ end }} - -
- {{ end }} - -
- {{ .Content }} -
- - {{ partial "components/last-edited.html" . }} - -
- {{ .Scratch.Set "invert_pager" true }} - {{ partial "page_footer" . }} -
- -
-
-
-{{ end }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_markup/render-blockquote.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_markup/render-blockquote.html new file mode 100644 index 000000000..dcbabef12 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_markup/render-blockquote.html @@ -0,0 +1,31 @@ +{{/* + Hugo Blox Builder Blockquote Render Hook + + Renders standard blockquotes and GitHub/Obsidian-style alerts (callouts). + + Supports alert types: note, tip, important, warning, caution + Syntax examples: + - > [!NOTE] + > This is a note callout. + + - > [!WARNING]+ Custom Title + > This is a warning with custom title. +*/}} + +{{ if eq .Type "alert" }} + {{/* Use custom title if provided, otherwise let render_callout handle default */}} + {{ $title := .AlertTitle }} + + {{/* Use shared callout renderer */}} + {{ partial "functions/render_callout" (dict + "type" .AlertType + "content" .Text + "title" $title + "source" "renderhook" + ) }} +{{ else }} + {{/* Render regular blockquotes */}} +
+ {{ .Text }} +
+{{ end }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_default/_markup/render-codeblock-markmap.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_markup/render-codeblock-markmap.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_default/_markup/render-codeblock-markmap.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_markup/render-codeblock-markmap.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_default/_markup/render-codeblock-mermaid.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_markup/render-codeblock-mermaid.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_default/_markup/render-codeblock-mermaid.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_markup/render-codeblock-mermaid.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_default/_markup/render-image.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_markup/render-image.html similarity index 81% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_default/_markup/render-image.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_markup/render-image.html index 6d080c82d..87f3ff516 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_default/_markup/render-image.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_markup/render-image.html @@ -25,7 +25,7 @@
-
+
{{- if $img -}} {{- $isSVG := eq $img.MediaType.SubType "svg" -}} {{- $isGIF := eq $img.MediaType.SubType "gif" -}} @@ -38,16 +38,15 @@ {{- with $height }} height="{{.}}"{{end}} {{- with $img_class }} class="{{.}}"{{end}} /> {{- else }} - {{- $img_lg := $img.Fit "1200x1200 webp" -}} - {{- $img_md := $img_lg.Fit "760x760 webp" -}}{{/* Match `.docs-article-container` max-width */}} - {{- $img_sm := $img_md.Fit "400x400 webp" -}} + {{/* Process responsive images - use 760px as default display size */}} + {{- $img_md := $img.Fit "760x760 webp" -}} + {{- $responsive := partial "functions/process_responsive_image.html" (dict "image" $img_md "mode" "responsive") -}} {{- $width := $width | default $img_md.Width -}} {{- $height := $height | default $img_md.Height -}} - {{ $alt }} + {{/* Empty - Preact renders everything */}} +
+ +{{/* Preact script loading is handled by libraries.html */}} \ No newline at end of file diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/blox/preact-wrapper.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/blox/preact-wrapper.html new file mode 100644 index 000000000..689d4dc09 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/blox/preact-wrapper.html @@ -0,0 +1,46 @@ +{{/* Hugo Blox: Generic Preact Block Wrapper */}} +{{/* Single wrapper for all Preact-based blocks */}} +{{/* Documentation: https://hugoblox.com/blocks/ */}} +{{/* License: https://github.com/HugoBlox/hugo-blox-builder/blob/main/LICENSE.md */}} + +{{/* Initialize variables */}} +{{ $page := .wcPage }} +{{ $block := .wcBlock }} +{{ $block_type := .wcBlockType }} +{{ $block_id := .wcIdentifier | default (printf "%s-%d" $block_type (now.Unix)) }} + +{{/* Prepare props for the Preact component */}} +{{ $props := dict + "content" $block.content + "design" $block.design + "id" $block_id + "type" $block_type +}} + +{{/* If an icon is specified, fetch its SVG data and add it to the props */}} +{{/* TODO: Generalize this to work with all block icon fields */}} +{{ with $block.content.primary_action.icon }} + {{ $icon_data := partial "functions/get_icon_data" (dict "name" .) }} + {{ if $icon_data }} + {{ $props = merge $props (dict "icon_svg" $icon_data) }} + {{ end }} +{{ end }} + +{{/* Convert props to JSON for client-side rendering */}} +{{ $propsJSON := $props | jsonify }} + +{{/* Render a container that Preact will populate */}} +
+ {{/* Empty - Preact renders everything */}} + {{/* Could add a loading skeleton here if desired */}} +
+ +{{/* Preact script loading is handled by libraries.html */}} + + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/comments.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/comments.html similarity index 58% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/comments.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/comments.html index 6118c163d..3c9ce4a2f 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/comments.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/comments.html @@ -1,8 +1,8 @@ -{{ $provider := trim (site.Params.features.comment.provider | lower) " " }} +{{ $provider := trim (site.Params.hugoblox.comments.provider | lower) " " }} {{ if $provider }} - {{ $provider_tpl := printf "partials/comments/%s.html" $provider }} - {{ $provider_exists := templates.Exists $provider_tpl }} + {{ $provider_tpl := printf "comments/%s.html" $provider }} + {{ $provider_exists := templates.Exists (printf "_partials/%s" $provider_tpl) }} {{ if not $provider_exists }} {{ errorf "The '%s' comment provider was not found." $provider }} {{ end }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/comments/disqus.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/comments/disqus.html similarity index 86% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/comments/disqus.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/comments/disqus.html index 2fe6f1f37..ec1af0e67 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/comments/disqus.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/comments/disqus.html @@ -1,4 +1,4 @@ -{{ if site.Params.features.comment.disqus.shortname }} +{{ if site.Params.hugoblox.comments.disqus.shortname }}
+ + {{ end }} + + {{ $show_translations := site.Params.hugoblox.header.language_switcher | default true }} {{ if .IsTranslated | and $show_translations }} -
  • +
  • {{- partial "components/language-chooser.html" (dict "page" .) -}}
  • {{ end }} @@ -111,7 +136,7 @@ {{ if $show_search }} - + {{- partial "components/search-modal.html" . -}} {{ end }} +
    + {{ end }} + + {{ $show_translations := site.Params.hugoblox.header.language_switcher | default true }} {{ if .IsTranslated | and $show_translations }} -
    +
    {{- partial "components/language-chooser.html" (dict "page" .) -}}
    {{ end }} - {{ if site.Params.header.navbar.button.enable }} + {{ if site.Params.hugoblox.header.cta.enable }} {{ end }}
    @@ -195,5 +220,5 @@ {{ if $show_search }} - + {{- partial "components/search-modal.html" . -}} {{ end }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/components/language-chooser.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/components/language-chooser.html similarity index 94% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/components/language-chooser.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/components/language-chooser.html index 8b3d8a4ab..0c8415397 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/components/language-chooser.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/components/language-chooser.html @@ -1,6 +1,6 @@ {{ $page := .page }} {{ $class := .class }} -{{ $hide_language_name := site.Params.header.navbar.hide_language_name | default false }} +{{ $hide_language_name := false }}{{/* TODO: Add to hugoblox.header.hide_language_name if needed */}} {{ $str_languages := T "languages" }} {{- if $page.IsTranslated -}} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/components/last-edited.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/components/last-edited.html similarity index 80% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/components/last-edited.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/components/last-edited.html index 530602408..909553d2d 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/components/last-edited.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/components/last-edited.html @@ -4,7 +4,7 @@ {{ $datetime := (time.Format "2006-01-02T15:04:05.000Z" .Lastmod) }} {{- else -}}
    diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/components/next-in-series.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/components/next-in-series.html similarity index 91% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/components/next-in-series.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/components/next-in-series.html index b7ea35879..2dde401a4 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/components/next-in-series.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/components/next-in-series.html @@ -21,7 +21,7 @@ >{{ $prev.Title }} {{ if .Params.show_date | default true }} - {{ time.Format (site.Params.locale.date_format | default ":date_long") $prev.Date }} + {{ time.Format (site.Params.hugoblox.locale.date_format | default ":date_long") $prev.Date }} {{ end }} @@ -38,7 +38,7 @@ > {{ if .Params.show_date | default true }} - {{ time.Format (site.Params.locale.date_format | default ":date_long") $next.Date }} + {{ time.Format (site.Params.hugoblox.locale.date_format | default ":date_long") $next.Date }} {{ end }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/components/page_sharer.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/components/page_sharer.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/components/page_sharer.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/components/page_sharer.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/components/paginator.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/components/paginator.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/components/paginator.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/components/paginator.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/components/search-modal.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/components/search-modal.html new file mode 100644 index 000000000..fe97ebd9d --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/components/search-modal.html @@ -0,0 +1,524 @@ +{{/* Modern Search Modal - Custom Pagefind API Implementation */}} + + + + + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/components/sidebar.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/components/sidebar.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/components/sidebar.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/components/sidebar.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/components/toc.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/components/toc.html similarity index 91% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/components/toc.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/components/toc.html index 084425309..33e3c4911 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/components/toc.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/components/toc.html @@ -25,12 +25,12 @@ {{- end -}} {{/* Page Features */}} - {{- if site.Params.features.repository.url | and .Params.editable -}} + {{- if site.Params.hugoblox.repository.url | and .Params.editable -}}
    - {{ $edit_url := site.Params.features.repository.url | default "" }} - {{ $branch := site.Params.features.repository.branch | default "main" }} - {{ $dir := site.Params.features.repository.content_dir | default "content" }} + {{ $edit_url := site.Params.hugoblox.repository.url | default "" }} + {{ $branch := site.Params.hugoblox.repository.branch | default "main" }} + {{ $dir := site.Params.hugoblox.repository.content_dir | default "content" }} {{- with .File -}}{{ $edit_url = urls.JoinPath $edit_url "edit" $branch $dir (replace .Path "\\" "/") }}{{- end -}} {{- with .Params.edit_url -}}{{ $edit_url = . }}{{- end -}} {{ $edit_this_page }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/css.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/css.html new file mode 100644 index 000000000..422dd1a89 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/css.html @@ -0,0 +1,18 @@ +{{/* 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 := slice $dynamic_sources_res $main_css | 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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/docs_layout.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/docs_layout.html similarity index 60% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/docs_layout.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/docs_layout.html index ca67dbfc2..3d4a43596 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/docs_layout.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/docs_layout.html @@ -3,13 +3,22 @@ {{ 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" . }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/build_links.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/build_links.html new file mode 100644 index 000000000..5bb95c238 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/build_links.html @@ -0,0 +1,259 @@ +{{/* + 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 := site.Data.link_types.types }} +{{ $derived := site.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 }} + {{ 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 }} + +{{/* 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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/deep_merge.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/deep_merge.html new file mode 100644 index 000000000..ee4a51838 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/demo_theme_styles.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/demo_theme_styles.html new file mode 100644 index 000000000..82b02f439 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/embed/github.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/embed/github.html new file mode 100644 index 000000000..e78676f51 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/embed/hbx_content_section.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/embed/hbx_content_section.html new file mode 100644 index 000000000..efe6b205c --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/embed/hbx_platform_icon.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/embed/hbx_platform_icon.html new file mode 100644 index 000000000..838b08342 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/embed/hbx_title_section.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/embed/hbx_title_section.html new file mode 100644 index 000000000..3655747a7 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/hugo-blox-builder" -> "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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/embed/huggingface.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/embed/huggingface.html new file mode 100644 index 000000000..9920beab8 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/generate_color_scale.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/generate_color_scale.html new file mode 100644 index 000000000..1ba41436d --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/generate_color_scale.html @@ -0,0 +1,124 @@ +{{/* + HugoBlox Builder: 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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get-block-scripts.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get-block-scripts.html new file mode 100644 index 000000000..c577222c3 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get-build-id.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get-build-id.html new file mode 100644 index 000000000..18a8cbb93 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/get_address.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_address.html similarity index 96% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/get_address.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_address.html index ed311c77f..9c73dd65e 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/get_address.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_address.html @@ -5,7 +5,7 @@ {{ $page := . }} {{ $address := .address }} -{{ $format_name := $page.Params.address_format | default site.Params.locale.address_format | default "en-us" }} +{{ $format_name := $page.Params.address_format | default site.Params.hugoblox.locale.address_format | default "en-us" }} {{ if not (isset site.Data.address_formats $format_name) }}{{ errorf "Address format `%s` missing from `data/address_formats.toml`!" $format_name }}{{end}} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_author_name.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_author_name.html new file mode 100644 index 000000000..3ce821666 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_author_profile.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_author_profile.html new file mode 100644 index 000000000..328fcb9d8 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_author_profile.html @@ -0,0 +1,122 @@ +{{/* +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 := "" -}} + +{{- $inputType := printf "%T" $input -}} + +{{- if (reflect.IsMap $input) -}} + {{- $slug = index $input "slug" | default "" -}} +{{- else if eq $inputType "string" -}} + {{- $slug = $input -}} +{{- else -}} + {{- $slug = printf "%v" $input -}} +{{- end -}} + +{{- $slug = $slug | urlize -}} + +{{- $data := index site.Data.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 -}} + {{- $title = $slug | humanize -}} +{{- 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 -}} +{{- $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_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 + "postnominals" $postnominals + "is_owner" $isOwner + "has_data" (not (eq $hasData nil)) + "avatar" $avatar +-}} + +{{- return $profile -}} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_branding.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_branding.html new file mode 100644 index 000000000..355acef54 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_cover_image.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_cover_image.html new file mode 100644 index 000000000..4d7c70383 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_cover_image.html @@ -0,0 +1,41 @@ +{{/* 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 eq $resource nil }} + {{/* 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://") }} + {{ $resource = resources.GetRemote $filename }} + {{ if eq $resource nil }} + {{ 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 eq $resource nil }} {{ $resource = resources.GetMatch (path.Join "media" $filename) }} {{ end }} + {{ end }} + {{ end }} +{{ end }} + +{{ return $resource }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/get_event_dates.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_event_dates.html similarity index 66% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/get_event_dates.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_event_dates.html index fd6f7e79c..a33c88c3d 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/get_event_dates.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_event_dates.html @@ -1,17 +1,17 @@ {{/* Function to get event start and end dates/times. */}} {{ $t1 := time .Date }}{{/* Start datetime. */}} -{{ $str := slice (time.Format site.Params.locale.date_format (time $t1)) }}{{/* Init return string with start date. */}} +{{ $str := slice (time.Format site.Params.hugoblox.locale.date_format (time $t1)) }}{{/* Init return string with start date. */}} {{/* Show start time if not all day event. */}} -{{ if not .Params.all_day }}{{ $str = $str | append (time.Format site.Params.locale.time_format (time $t1)) }}{{ end }} +{{ if not .Params.all_day }}{{ $str = $str | append (time.Format site.Params.hugoblox.locale.time_format (time $t1)) }}{{ end }} {{/* Show event end date if provided. */}} {{ if .Params.date_end }} {{ $str = $str | append "—" }} {{ $t2 := time .Params.date_end}}{{/* 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.locale.date_format (time $t2)) }} + {{ $str = $str | append (time.Format site.Params.hugoblox.locale.date_format (time $t2)) }} {{ end }} {{/* Show end time if not all day event. */}} - {{ if not .Params.all_day }}{{ $str = $str | append (time.Format site.Params.locale.time_format (time $t2)) }}{{ end }} + {{ if not .Params.all_day }}{{ $str = $str | append (time.Format site.Params.hugoblox.locale.time_format (time $t2)) }}{{ end }} {{ end }} {{ return ((delimit $str " ") | safeHTML) }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/get_featured_image.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_featured_image.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/get_featured_image.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_featured_image.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/partials/blox-core/functions/get_hook.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_hook.html similarity index 57% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/partials/blox-core/functions/get_hook.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_hook.html index 5791dfb81..21a1d4041 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-core/layouts/partials/blox-core/functions/get_hook.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_hook.html @@ -5,13 +5,15 @@ {{ $loaded := false }} {{ $partial_dir := printf "hooks/%s/" .hook }} {{ $context := .context }} -{{ $hook_dir_path := path.Join "layouts/partials" $partial_dir }} -{{ if fileExists $hook_dir_path }} - {{ range os.ReadDir $hook_dir_path }} - {{ if not .IsDir }} - {{ $partial_path := path.Join $partial_dir .Name }} - {{ partial $partial_path $context }} - {{ $loaded = true }} +{{ $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 }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_icon.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_icon.html new file mode 100644 index 000000000..da660fa11 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_icon.html @@ -0,0 +1,105 @@ +{{/* Return the requested SVG icon */}} +{{/* Search for the icon in the Hugo Blox Builder icon library, falling back to user's icon library */}} + +{{ $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 -}} + {{- $icon_pack := index site.Data.icons $pack -}} + {{- $pack_icon := index (index $icon_pack "icons") $name -}} + +{{ if $pack_icon }} + {{ if in (slice "hb" "brands") $pack }} + {{ $icon = $pack_icon }} + {{/* Pass */}} + {{ 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 - check if it's a direct Unicode emoji */}} + {{ if not (strings.Contains $.name "/") }} + {{/* No explicit pack specified (defaulted to hero) - treat as direct Unicode emoji */}} + {{ $attrs := .attributes | default "" }} + {{/* Convert SVG sizing to emoji text sizing (same as emoji pack) */}} + {{ 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 }} + {{/* Add centering and line-height classes if not already present */}} + {{ if not (in $attrs "flex") }}{{ $attrs = replaceRE "class=\"" "class=\"flex items-center justify-center leading-none " $attrs }}{{ end }} + {{ $icon = printf "%s" $attrs $.name }} + {{ else }} + {{/* Explicit pack specified but icon not found - continue with fallback logic */}} + {{ with index (index site.Data.icons.hb "icons") $name -}} + {{ $icon = . }} + {{ else }} + {{- $prefix := printf "media/icons/%s/" $pack -}} + {{- $icon_path := printf "%s%s.svg" $prefix $name -}} + {{- 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 -}} + {{- $icon_resource := resources.Get $icon_path -}} + {{ if $icon_resource }} + {{ $icon = $icon_resource.Content }} + {{ else }} + {{ $icon = index (index site.Data.icons.brands "icons") "hugo" }} + {{ end }} + {{ end }} + {{ end }} +{{ end }} +{{- end -}} + +{{ if .attributes }} + {{ $icon = replaceRE " wrapper around "body" content using pack "height" +2. HB/Brands packs: Returns stored SVG strings as-is +3. User assets: Returns content from assets/media/icons/{pack}/{name}.svg +4. Fallback: Returns Hugo brand icon if not found + +PARAMETERS: +- name: Icon name, optionally with pack prefix (e.g., "arrow-right" or "hero/arrow-right") +- pack: Icon pack name (defaults to "hero" if not specified in name) +*/}} + +{{/* Return the raw SVG content for a requested icon */}} +{{- $name := .name | default "" -}} +{{- $icon_content := "" -}} + +{{- if $name -}} + {{- $dirFile := path.Split $name -}} + {{- $pack := .pack | default (strings.Replace $dirFile.Dir "/" "") | default "hero" -}} + {{- $iconName := $dirFile.File -}} + {{- $icon_pack := index site.Data.icons $pack -}} + + {{- with index (index $icon_pack "icons") $iconName -}} + {{- /* If this pack stores full SVG strings (hb/brands), return as-is. */ -}} + {{- if in (slice "hb" "brands") $pack -}} + {{- $icon_content = . -}} + {{- else -}} + {{- $icon_body := index . "body" -}} + {{- $icon_size := index $icon_pack "height" -}} + {{- $icon_content = printf `%s` (cast.ToString $icon_size) (cast.ToString $icon_size) $icon_body -}} + {{- end -}} + {{- else -}} + {{- with resources.GetMatch (path.Join "media" "icons" $pack (printf "%s.svg" $iconName)) -}} + {{- $icon_content = .Content -}} + {{- else -}} + {{- /* Fallback to a default icon if not found. */ -}} + {{- with index (index site.Data.icons.brands "icons") "hugo" -}} + {{- $icon_content = . -}} + {{- end -}} + {{- end -}} + {{- end -}} +{{- end -}} + +{{- $icon_content -}} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_logo.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_logo.html new file mode 100644 index 000000000..11b051416 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/get_logo_url.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_logo_url.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/get_logo_url.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_logo_url.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/get_page_title.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_page_title.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/get_page_title.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_page_title.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_site_icon.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_site_icon.html new file mode 100644 index 000000000..9ca8039f0 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/get_sort_by_parameter.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_sort_by_parameter.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/get_sort_by_parameter.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_sort_by_parameter.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_summary.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_summary.html new file mode 100644 index 000000000..421db9e7c --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_theme_config.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_theme_config.html new file mode 100644 index 000000000..817e94249 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/get_theme_config.html @@ -0,0 +1,86 @@ +{{/* + 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 +═══════════════════════════════════════════════════════════════════════════ */}} +{{ $hb_typography := $hb.typography | default dict }} +{{ $typography := dict + "font" ($hb_typography.font | default "sans") + "size" ($hb_typography.size | default "md") +}} + +{{/* ═══════════════════════════════════════════════════════════════════════════ + 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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/has_attachments.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/has_attachments.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/has_attachments.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/has_attachments.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/hbx_verify.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/hbx_verify.html new file mode 100644 index 000000000..feaed4176 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/hbx_verify.html @@ -0,0 +1,70 @@ +{{/* + Hugo Blox Builder Ecosystem Verification + + Reusable verification function for Hugo Blox components. + Ensures all required Hugo Blox Builder 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 := site.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-tailwind" -}} +{{- 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 := site.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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/load_theme_pack.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/load_theme_pack.html new file mode 100644 index 000000000..e2b38ee65 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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 site.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 site.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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/logger.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/logger.html new file mode 100644 index 000000000..bcb2582ea --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/notebook/render.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/notebook/render.html new file mode 100644 index 000000000..bd306986a --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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 Builder - https://github.com/HugoBlox/hugo-blox-builder +
    +
    diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/parse_block_v2.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/parse_block_v2.html new file mode 100644 index 000000000..7950ed08d --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/parse_block_v2.html @@ -0,0 +1,377 @@ +{{/* Hugo Blox Parser v2 */}} +{{/* Documentation: https://hugoblox.com/blocks/ */}} +{{/* License: https://github.com/HugoBlox/hugo-blox-builder/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 }} +{{ range $r := site.Data.blox_aliases.renames }} + {{ $block_type = cond (eq $block_type $r.old) $r.new $block_type }} +{{ end }} +{{ $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 }} + +{{/* Mermaid block: Workaround to make Hugo's .Page.Store.Set cascade up to the parent of headless pages */}} +{{ if $block.Page.Store.Get "has_mermaid" }} + {{ $page.Page.Store.Set "has_mermaid" true }} +{{ end }} + +{{/* Gallery block: Workaround to make Hugo's .Page.Store.Set cascade up from page blocks to the page context */}} +{{/* Unfortunately, `.HasShortcode "gallery"` won't accept string input, only page context - so irrelevant here */}} +{{/* Therefore, must do our own search for shortcodes within the `text` string */}} +{{ if (gt (len (findRE `\{\{< gallery` $block.content.text 1)) 0) }} + {{ $page.Page.Store.Set "has_gallery" true }} +{{ end }} + +{{/* Begin widget styling */}} +{{ $bg := $block.design.background }} +{{ $style := "" }} +{{ $style_bg := "" }} + +{{ if $bg.color }} + {{/* Check if color is a map/dict (light/dark structure) or a simple string */}} + {{ $color_type := printf "%T" $bg.color }} + {{ if eq $color_type "map[string]interface {}" }} + {{/* New nested light/dark structure */}} + {{ if and $bg.color.light $bg.color.dark }} + {{ $light_color := $bg.color.light }} + {{ $dark_color := $bg.color.dark }} + + {{/* Convert light color */}} + {{ if not (or (hasPrefix $light_color "var(") (hasPrefix $light_color "rgb(") (hasPrefix $light_color "#") (eq $light_color "transparent")) }} + {{ if hasPrefix $light_color "primary-" }} + {{ $shade := strings.TrimPrefix "primary-" $light_color }} + {{ $light_color = printf "var(--color-primary-%s)" $shade }} + {{ else if hasPrefix $light_color "secondary-" }} + {{ $shade := strings.TrimPrefix "secondary-" $light_color }} + {{ $light_color = printf "var(--color-secondary-%s)" $shade }} + {{ else if strings.Contains $light_color "-" }} + {{ $parts := split $light_color "-" }} + {{ if eq (len $parts) 2 }} + {{ $color := index $parts 0 }} + {{ $shade := index $parts 1 }} + {{ $light_color = printf "var(--color-%s-%s)" $color $shade }} + {{ end }} + {{ end }} + {{ end }} + + {{/* Convert dark color */}} + {{ if not (or (hasPrefix $dark_color "var(") (hasPrefix $dark_color "rgb(") (hasPrefix $dark_color "#") (eq $dark_color "transparent")) }} + {{ if hasPrefix $dark_color "primary-" }} + {{ $shade := strings.TrimPrefix "primary-" $dark_color }} + {{ $dark_color = printf "var(--color-primary-%s)" $shade }} + {{ else if hasPrefix $dark_color "secondary-" }} + {{ $shade := strings.TrimPrefix "secondary-" $dark_color }} + {{ $dark_color = printf "var(--color-secondary-%s)" $shade }} + {{ else if strings.Contains $dark_color "-" }} + {{ $parts := split $dark_color "-" }} + {{ if eq (len $parts) 2 }} + {{ $color := index $parts 0 }} + {{ $shade := index $parts 1 }} + {{ $dark_color = printf "var(--color-%s-%s)" $color $shade }} + {{ end }} + {{ end }} + {{ end }} + + {{ $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 }} + + {{/* Convert light color */}} + {{ if not (or (hasPrefix $light_color "var(") (hasPrefix $light_color "rgb(") (hasPrefix $light_color "#") (eq $light_color "transparent")) }} + {{ if hasPrefix $light_color "primary-" }} + {{ $shade := strings.TrimPrefix "primary-" $light_color }} + {{ $light_color = printf "var(--color-primary-%s)" $shade }} + {{ else if hasPrefix $light_color "secondary-" }} + {{ $shade := strings.TrimPrefix "secondary-" $light_color }} + {{ $light_color = printf "var(--color-secondary-%s)" $shade }} + {{ else if strings.Contains $light_color "-" }} + {{ $parts := split $light_color "-" }} + {{ if eq (len $parts) 2 }} + {{ $color := index $parts 0 }} + {{ $shade := index $parts 1 }} + {{ $light_color = printf "var(--color-%s-%s)" $color $shade }} + {{ end }} + {{ end }} + {{ end }} + + {{ $style_bg = printf "background-color: %s;" $light_color }} + {{ else if $bg.color.dark }} + {{ $dark_color := $bg.color.dark }} + + {{/* Convert dark color */}} + {{ if not (or (hasPrefix $dark_color "var(") (hasPrefix $dark_color "rgb(") (hasPrefix $dark_color "#") (eq $dark_color "transparent")) }} + {{ if hasPrefix $dark_color "primary-" }} + {{ $shade := strings.TrimPrefix "primary-" $dark_color }} + {{ $dark_color = printf "var(--color-primary-%s)" $shade }} + {{ else if hasPrefix $dark_color "secondary-" }} + {{ $shade := strings.TrimPrefix "secondary-" $dark_color }} + {{ $dark_color = printf "var(--color-secondary-%s)" $shade }} + {{ else if strings.Contains $dark_color "-" }} + {{ $parts := split $dark_color "-" }} + {{ if eq (len $parts) 2 }} + {{ $color := index $parts 0 }} + {{ $shade := index $parts 1 }} + {{ $dark_color = printf "var(--color-%s-%s)" $color $shade }} + {{ end }} + {{ end }} + {{ end }} + + {{ $style_bg = printf "--dark-bg-color: %s; background-color: var(--dark-bg-color);" $dark_color }} + {{ end }} + {{ else }} + {{/* Legacy single color support - backwards compatible */}} + {{ $bg_color := $bg.color }} + + {{/* Convert single color */}} + {{ if not (or (hasPrefix $bg_color "var(") (hasPrefix $bg_color "rgb(") (hasPrefix $bg_color "#") (eq $bg_color "transparent")) }} + {{ if hasPrefix $bg_color "primary-" }} + {{ $shade := strings.TrimPrefix "primary-" $bg_color }} + {{ $bg_color = printf "var(--color-primary-%s)" $shade }} + {{ else if hasPrefix $bg_color "secondary-" }} + {{ $shade := strings.TrimPrefix "secondary-" $bg_color }} + {{ $bg_color = printf "var(--color-secondary-%s)" $shade }} + {{ else if strings.Contains $bg_color "-" }} + {{ $parts := split $bg_color "-" }} + {{ if eq (len $parts) 2 }} + {{ $color := index $parts 0 }} + {{ $shade := index $parts 1 }} + {{ $bg_color = printf "var(--color-%s-%s)" $color $shade }} + {{ end }} + {{ end }} + {{ end }} + + {{ $style_bg = printf "background-color: %s;" $bg_color }} + {{ end }} +{{ end }} + +{{/* Modern layered background support for 2025 glassmorphism */}} +{{ $background_layers := slice }} +{{ $gradient_layer := "" }} + +{{/* Process gradients first but don't add to layers yet */}} +{{/* Support legacy gradient syntax */}} +{{ if and $bg.gradient_start $bg.gradient_end }} + {{ $angle := string $bg.gradient_angle | default "90" }} + {{ $gradient_layer = printf "linear-gradient(%sdeg, %s, %s)" $angle $bg.gradient_start $bg.gradient_end }} +{{ end }} + +{{/* Support modern gradient syntax for 2025 */}} +{{ 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 }} + + {{/* Convert Tailwind color names to CSS custom properties */}} + {{ if not (or (hasPrefix $start_color "var(") (hasPrefix $start_color "rgb(") (hasPrefix $start_color "#")) }} + {{ if hasPrefix $start_color "primary-" }} + {{ $shade := strings.TrimPrefix "primary-" $start_color }} + {{ $start_color = printf "var(--color-primary-%s)" $shade }} + {{ else if hasPrefix $start_color "secondary-" }} + {{ $shade := strings.TrimPrefix "secondary-" $start_color }} + {{ $start_color = printf "var(--color-secondary-%s)" $shade }} + {{ else if strings.Contains $start_color "-" }} + {{ $parts := split $start_color "-" }} + {{ if eq (len $parts) 2 }} + {{ $color := index $parts 0 }} + {{ $shade := index $parts 1 }} + {{ $start_color = printf "var(--color-%s-%s)" $color $shade }} + {{ end }} + {{ end }} + {{ end }} + + {{ if not (or (hasPrefix $end_color "var(") (hasPrefix $end_color "rgb(") (hasPrefix $end_color "#")) }} + {{ if hasPrefix $end_color "primary-" }} + {{ $shade := strings.TrimPrefix "primary-" $end_color }} + {{ $end_color = printf "var(--color-primary-%s)" $shade }} + {{ else if hasPrefix $end_color "secondary-" }} + {{ $shade := strings.TrimPrefix "secondary-" $end_color }} + {{ $end_color = printf "var(--color-secondary-%s)" $shade }} + {{ else if strings.Contains $end_color "-" }} + {{ $parts := split $end_color "-" }} + {{ if eq (len $parts) 2 }} + {{ $color := index $parts 0 }} + {{ $shade := index $parts 1 }} + {{ $end_color = printf "var(--color-%s-%s)" $color $shade }} + {{ end }} + {{ end }} + {{ end }} + + {{ $gradient_layer = printf "linear-gradient(%sdeg, %s, %s)" $angle $start_color $end_color }} +{{ end }} + +{{ $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 }} + +{{ if $bg.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" $bg.image.filename) }} + {{ if $bg_img }} + {{/* Exception for SVG as Hugo doesn't yet support image processing on SVG. */}} + {{ if ne $bg_img.MediaType.SubType "svg" }} + {{ $bg_img = $bg_img.Fit "1920x1920 webp" }} + {{ end }} + + {{/* Add image layer to background layers for glassmorphism support */}} + {{ $image_layer := printf "url('%s')" $bg_img.Permalink }} + {{ $background_layers = $background_layers | append $image_layer }} + + {{/* Background properties will be set in the multi-layer section below */}} + {{ else }} + {{ errorf "Couldn't find `%s` in the `assets/media/` folder - please add it." $bg.image.filename }} + {{ end }} +{{ end }} + +{{/* Combine all background layers for 2025 glassmorphism effects */}} +{{/* Layer order: image (top) comes first, then gradient (bottom) */}} +{{ 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 }} + + {{/* Build multi-layer background properties */}} + {{ $layer_count := len $all_layers }} + + {{/* Generate properties for each layer */}} + {{ if gt $layer_count 1 }} + {{/* Multiple layers: image + gradient */}} + {{ $img_size := $bg.image.size | default "100px" }} + {{ $img_position := $bg.image.position | default "center" }} + {{ $img_repeat := $bg.image.repeat | default "repeat" }} + + {{/* Handle 'repeat' in position */}} + {{ if eq $img_position "repeat" }} + {{ $img_repeat = "repeat" }} + {{ $img_position = "center" }} + {{ end }} + + {{/* Combine properties for both layers */}} + {{ $style_bg = printf "%sbackground-size: %s, cover !important;" $style_bg $img_size }} + {{ $style_bg = printf "%sbackground-position: %s, center !important;" $style_bg $img_position }} + {{ $style_bg = printf "%sbackground-repeat: %s, no-repeat !important;" $style_bg $img_repeat }} + {{ else }} + {{/* Single layer: apply properties normally */}} + {{ if $background_layers }} + {{ with $bg.image.size }} + {{ $style_bg = printf "%sbackground-size: %s !important;" $style_bg . }} + {{ end }} + {{ with $bg.image.position }} + {{ if eq . "repeat" }} + {{ $style_bg = printf "%sbackground-position: center !important;" $style_bg }} + {{ $style_bg = printf "%sbackground-repeat: repeat !important;" $style_bg }} + {{ else }} + {{ $style_bg = printf "%sbackground-position: %s !important;" $style_bg . }} + {{ end }} + {{ end }} + {{ end }} + {{ end }} + {{ end }} +{{ end }} + +{{ with $bg.image.filters.brightness }} + {{ $style_bg = printf "%sfilter: brightness(%s);" $style_bg (string .) }} +{{ end }} + +{{ with $block.design.spacing.padding }} + {{ $style_pad := printf "padding: %s;" (delimit . " ") }} + {{ $style = print $style $style_pad }} +{{ else }} + {{ with $page.Params.design.spacing }} + {{/* Fallback to default section spacing setting */}} + {{ $style_pad := printf "padding: %s 0 %s 0;" . . }} + {{ $style = print $style $style_pad }} + {{ end }} +{{ end }} + +{{/* Support for clip path (design.clip_path) */}} +{{ with $block.design.clip_path }} + {{ $style_clip_path := printf "clip-path: %s;" . }} + {{ $style = print $style $style_clip_path }} +{{ end }} + +{{ with $block.design.css_style }} + {{ $style = print $style . }} +{{ end }} + + + +{{/* Fix Hugo's ContentBaseName returning wrong file base name when page section is within a bundle. */}} +{{ $hash_id := $block.id | default (printf "section-%s" (replace $block_type "." "-")) }} + +{{ $widget_args := dict "wcPage" $page "wcBlock" $block "wcIdentifier" $hash_id }} +{{ $css_classes := $block.design.css_class | default "" }} +{{ $extra_attributes := "" }} +{{ $use_container := false }} +{{ $columns := $block.design.columns | default "1" }} +{{/* $use_cols := in (slice "collection" "experience" "accomplishments" "contact" "markdown" "tag_cloud" "portfolio" "skills") $block_type */}} +{{ $use_cols := false }} + +{{/* Special case: Slider widget. */}} +{{ if in (slice "slider") $block_type }} + {{ $css_classes = print $css_classes " carousel slide" }} + {{ $extra_attributes = printf "data-ride=\"carousel\" data-interval=\"%s\"" (cond ($block.design.loop | default true) (string $block.design.interval | default "3000") "false") }} + {{ $use_container = false }} +{{ end }} + +{{ $widget_class := printf "blox-%s" (replace (replace $block_type "." "-") "_" "-") }} + +{{/* Now loaded in `init.html` */}} +{{/* + {{ $widget_config_file := printf "blox/%s/config.html" $block_type }} + {{ if templates.Exists (printf "_partials/%s" $widget_config_file) }} + {{ $cfg := partial $widget_config_file $widget_args }} + {{ with $cfg.use_container }}{{ $use_container = . }}{{ end }} + {{ with $cfg.inject_section_heading }}{{ $use_cols = . }}{{ end }} + {{end}} +*/}} + +{{/* Extract background-specific CSS classes */}} +{{ $bg_css_classes := $bg.css_class | default "" }} + +{{/* Dedicated child div for bg prevents parallax 100% height issue within new CSS grid page wrapper. */}} +
    +
    + {{with $bg_video}}{{end}} +
    + {{if $use_container}}
    {{end}} + + {{if $use_cols}} +
    + {{ if $block.content.title }} + {{ if eq $columns "1" }} +
    + {{ with $block.content.title }}

    {{ . | markdownify | emojify }}

    {{ end }} + {{ with $block.content.subtitle }}

    {{ . | markdownify | emojify }}

    {{ end }} +
    + {{else}} +
    + {{ with $block.content.title }}

    {{ . | markdownify | emojify }}

    {{ end }} + {{ with $block.content.subtitle }}

    {{ . | markdownify | emojify }}

    {{ end }} +
    + {{end}} + {{end}} + {{end}} + + {{ partial $block_path $widget_args }} + + {{if $use_cols}} +
    + {{end}} + + {{if $use_container}}
    {{end}} +
    diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/parse_block_v3.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/parse_block_v3.html new file mode 100644 index 000000000..8876c8f6d --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/parse_block_v3.html @@ -0,0 +1,248 @@ +{{/* Hugo Blox Parser v3 - Preact Component Support */}} +{{/* Documentation: https://hugoblox.com/blocks/ */}} +{{/* License: https://github.com/HugoBlox/hugo-blox-builder/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 := site.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 ne $bg_img.MediaType.SubType "svg" }} + {{ $bg_img = $bg_img.Fit "1920x1920 webp" }} + {{ end }} + {{ $image_layer := printf "url('%s')" $bg_img.Permalink }} + {{ $background_layers = $background_layers | append $image_layer }} + {{ 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 }} + {{ 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 }} + +{{ $hash_id := $block.id | default (printf "section-%s" (replace $block_type "." "-")) }} +{{ $css_classes := $block.design.css_class | default "" }} +{{ $widget_class := printf "blox-%s" (replace (replace $block_type "." "-") "_" "-") }} + +{{/* 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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/process_responsive_image.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/process_responsive_image.html new file mode 100644 index 000000000..218c390e3 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/process_responsive_image.html @@ -0,0 +1,152 @@ +{{/* +Responsive Image Processor for Hugo Blox Builder (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 := "" }} + +{{/* Check if image supports processing - only allow known processable formats */}} +{{ $can_process := false }} +{{ if $image.MediaType }} + {{ $format := $image.MediaType.SubType }} + {{ $isJPEG := eq $format "jpeg" }} + {{ $isPNG := eq $format "png" }} + {{ $isWebP := eq $format "webp" }} + {{ $can_process = or $isJPEG $isPNG $isWebP }} +{{ else }} + {{/* Try detecting by file extension if MediaType not available */}} + {{ $ext := path.Ext $image.RelPermalink | lower }} + {{ $isJPEG := or (eq $ext ".jpg") (eq $ext ".jpeg") }} + {{ $isPNG := eq $ext ".png" }} + {{ $isWebP := eq $ext ".webp" }} + {{ $can_process = or $isJPEG $isPNG $isWebP }} +{{ end }} + +{{ if $can_process }} + {{/* Handle responsive mode - for already processed images */}} + {{ if eq $mode "responsive" }} + {{/* Convert to WebP if needed */}} + {{ $base_image := $image }} + {{ if ne $image.MediaType.SubType "gif" }}{{ $base_image = $image.Process "webp" }}{{ end }} + + {{/* 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 -}} + {{/* Handle unsupported formats (SVG, GIF) */}} + {{- $srcset_parts = $srcset_parts | append (printf "%s %dw" $image.RelPermalink $image.Width) -}} + {{- $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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/render_callout.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/render_callout.html new file mode 100644 index 000000000..ad1ccbbc3 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/render_callout.html @@ -0,0 +1,155 @@ +{{/* + Hugo Blox Builder 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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/render_view.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/render_view.html similarity index 60% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/render_view.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/render_view.html index 4f7ff666b..1b809005b 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/render_view.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/render_view.html @@ -8,16 +8,16 @@ {{ $index := .index }} {{ $html := "" }} -{{ if not (templates.Exists (printf "partials/views/%s.html" $view)) }} +{{ 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 }} + {{ 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))) }} + {{ $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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/theme_generator.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/theme_generator.html new file mode 100644 index 000000000..ada367c20 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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 site.Data.themes }} + {{ warnf "THEME ENGINE ERROR: site.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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/theme_variables.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/theme_variables.html new file mode 100644 index 000000000..c86f131c4 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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 */}} +--color-background: {{ $data.surfaces.background | default "#ffffff" }}; +--color-foreground: {{ $data.surfaces.foreground | default "#000000" }}; + +{{/* Header */}} +--color-header-bg: {{ $data.surfaces.header.background | default $data.surfaces.background | default "#ffffff" }}; +--color-header-fg: {{ $data.surfaces.header.foreground | default $data.surfaces.foreground | default "#000000" }}; + +{{/* Footer */}} +--color-footer-bg: {{ $data.surfaces.footer.background | default $data.surfaces.background | default "#f3f4f6" }}; +--color-footer-fg: {{ $data.surfaces.footer.foreground | default $data.surfaces.foreground | default "#000000" }}; diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/uid.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/functions/uid.html new file mode 100644 index 000000000..f1a86cb9c --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/hbx/resolve-block-param.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/hbx/resolve-block-param.html new file mode 100644 index 000000000..eca17df3a --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/hbx/resolve-block-param.html @@ -0,0 +1,20 @@ +{{/* 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.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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/hbx/resolve.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/hbx/resolve.html new file mode 100644 index 000000000..4c74ae821 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/hbx/sections.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/hbx/sections.html new file mode 100644 index 000000000..da3d170cc --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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 site.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 site.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 := site.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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/hooks/body-end/hbx-debug-export.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/hooks/body-end/hbx-debug-export.html new file mode 100644 index 000000000..d6c3bb687 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/hooks/body-end/hbx-debug-hud.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/hooks/body-end/hbx-debug-hud.html new file mode 100644 index 000000000..aa53ae91c --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/init.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/init.html new file mode 100644 index 000000000..ad18bd6a2 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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 $.Site.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 $.Site.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 := $.Site.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 := .Site.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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/jsonld/article.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/jsonld/article.html similarity index 90% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/jsonld/article.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/jsonld/article.html index 783887e51..d494ef615 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/jsonld/article.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/jsonld/article.html @@ -9,7 +9,8 @@ {{ end }} {{ $author := partial "functions/get_author_name" $page }} -{{ $publisher := site.Params.marketing.seo.org_name | default site.Title }} +{{ $branding := partialCached "functions/get_branding" $page "branding" }} +{{ $publisher := $branding.organization }} {{ $logo_url := partial "functions/get_logo_url" $page -}} + {{- end -}} +{{- end -}} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/jsonld/business.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/jsonld/business.html new file mode 100644 index 000000000..043372992 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/jsonld/collectionpage.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/jsonld/collectionpage.html new file mode 100644 index 000000000..e31256149 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/jsonld/collectionpage.html @@ -0,0 +1,71 @@ +{{- $page := .page -}} +{{- $summary := .summary -}} + +{{- $language := $page.Language.LanguageCode | default site.LanguageCode | 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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/jsonld/event.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/jsonld/event.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/jsonld/event.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/jsonld/event.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/jsonld/faqpage.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/jsonld/faqpage.html new file mode 100644 index 000000000..611e3205c --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/jsonld/main.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/jsonld/main.html new file mode 100644 index 000000000..0bebb29d4 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/jsonld/qapage.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/jsonld/qapage.html new file mode 100644 index 000000000..fa21e7daa --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/jsonld/webpage.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/jsonld/webpage.html new file mode 100644 index 000000000..91d22050d --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/jsonld/webpage.html @@ -0,0 +1,56 @@ +{{- $page := .page -}} +{{- $summary := .summary -}} + +{{- $language := $page.Language.LanguageCode | default site.LanguageCode | 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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/jsonld/website.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/jsonld/website.html similarity index 86% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/jsonld/website.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/jsonld/website.html index ec84542ac..8a144d7c9 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/jsonld/website.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/jsonld/website.html @@ -2,7 +2,7 @@ { "@context": "https://schema.org", "@type": "WebSite", - {{- if site.Params.features.search.provider }} + {{- if site.Params.hugoblox.search.enable }} "potentialAction": { "@type": "SearchAction", "target": {{ printf "%s?q={search_term_string}" site.BaseURL }}, diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/landing_page.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/landing_page.html new file mode 100644 index 000000000..c28af7e3c --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/libraries.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/libraries.html similarity index 60% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/libraries.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/libraries.html index 130216fd6..92eb3fa2a 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/libraries.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/libraries.html @@ -1,68 +1,53 @@ +{{/* 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 }} + {{/* Load Alpine JS extension? */}} -{{ if (.Page.Store.Get "has_alpine") }} +{{/* Alpine is needed for search modal and other interactive components */}} +{{ if or (.Page.Store.Get "has_alpine") $show_search }} + {{ $alpine_js := resources.Get "dist/lib/alpinejs/cdn.min.js" }} {{ $alpine_js = $alpine_js | resources.Fingerprint "sha256" }} {{ end }} -{{/* Show site search? */}} -{{ $show_search := site.Params.header.navbar.show_search | default false }} +{{/* Hugo Blox Search JavaScript (CSS is in main.css) */}} {{ if $show_search }} -{{ $pf_css := resources.Get "dist/pagefind/pagefind-ui.css" }} -{{ $pf_css = $pf_css | resources.Fingerprint "sha256" }} - -{{ $pf_js := resources.Get "dist/pagefind/pagefind-ui.js" }} -{{ $pf_js = $pf_js | resources.Fingerprint "sha256" }} - - -{{ $search_config := dict "baseUrl" (relURL "") }} -{{ printf "" ($search_config | jsonify) | safeHTML }} - - - - +{{ $search_js := resources.Get "js/hb-search.js" | resources.Minify }} +{{- if hugo.IsProduction -}} + {{ $search_js = $search_js | fingerprint "sha256" }} +{{- end -}} + {{ end }} {{/* Mermaid */}} @@ -100,7 +85,7 @@ {{ end }} {{/* Katex */}} -{{ if (.Page.HasShortcode "math") | or .Params.math | or site.Params.features.math.enable }} +{{ 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" }} @@ -123,4 +108,4 @@ {{ $plotly_js := resources.Get "dist/lib/plotly/plotly.min.js" }} {{ $plotly_js = $plotly_js | resources.Fingerprint "sha256" }} -{{ end }} +{{ end }} \ No newline at end of file diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/notification-container.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/notification-container.html new file mode 100644 index 000000000..9d62b000a --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/page_author.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/page_author.html new file mode 100644 index 000000000..fd7913132 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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 }} + {{ partial "page_author_card" (dict "profile" $profile "page" .) }} + {{ end }} + {{ end }} +{{ end }} + +{{end}}{{/* Show profile block */}} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/page_author_card.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/page_author_card.html new file mode 100644 index 000000000..e36b6f435 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/page_author_card.html @@ -0,0 +1,68 @@ +{{ $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 }} + {{ $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 }} +
    +
    + {{ 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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/page_edit.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/page_edit.html similarity index 72% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/page_edit.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/page_edit.html index 0adf4bcbe..4b879caac 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/page_edit.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/page_edit.html @@ -1,17 +1,17 @@ {{/* 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.features.repository.url }} +{{ 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.features.repository.content_dir }} - {{ $content_dir = site.Params.features.repository.content_dir }} +{{ 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 site.IsMultiLingual (cond (ne .Site.LanguagePrefix "") (printf "%s%s" $content_dir .Site.LanguagePrefix) $content_dir) $content_dir }} {{end}}

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

    diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/page_footer.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/page_footer.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/page_footer.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/page_footer.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/page_links.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/page_links.html new file mode 100644 index 000000000..c5af40a43 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/page_links_div.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/page_links_div.html new file mode 100644 index 000000000..dcb8bb02a --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/page_metadata_authors.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/page_metadata_authors.html new file mode 100644 index 000000000..d563cb696 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/page_metadata_authors.html @@ -0,0 +1,53 @@ +{{/* Display author list. */}} + +{{ if .Params.authors }} + {{ range $index, $term := (.GetTerms "authors") }} + {{- $slug := $term.Data.Term | urlize -}} + {{- $profile := partial "functions/get_author_profile" (dict "slug" $slug) -}} + {{- $display := $profile.title | default $term.LinkTitle -}} + {{- $highlight_name := false -}} + + {{- if gt $index 0 }}, {{ end -}} + + {{- if $term.RelPermalink -}} + {{ $display }} + {{- else -}} + {{ $display }} + {{- end -}} + + {{- if isset $.Params "author_notes" -}} + {{- with (index $.Params.author_notes $index) -}} + + +
    + {{.}} + +
    +
    + {{- end -}} + {{- end -}} + {{- end -}} +{{- end -}} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/page_related.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/page_related.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/page_related.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/page_related.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/site_footer.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/site_footer.html new file mode 100644 index 000000000..1f2a66619 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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 a Pro subscription. Get Pro at https://hugoblox.com/pro \nAlready subscribed to Pro? Reach out in the Pro 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 Builder" "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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/site_footer_license.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/site_footer_license.html new file mode 100644 index 000000000..305cd1420 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/site_head.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/site_head.html new file mode 100644 index 000000000..d8fcb60fb --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/site_head.html @@ -0,0 +1,345 @@ +{{ $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' */}} +{{ range $slug, $data := site.Data.authors }} + {{ if and (not $superuser_slug) ($data.is_owner) }} + {{ $superuser_slug = $slug }} + {{ end }} +{{ end }} +{{ if and (eq $superuser_slug "") (index site.Data.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 }} + + {{/* Load community blox styles */}} + {{ $hb_community_styles := resources.Match "dist/community/blox/**.css" }} + {{ with $hb_community_styles }} + {{ $hb_community_styles = $hb_community_styles | resources.Concat "css/community-hugo-blox.css" }} + {{- if hugo.IsProduction -}} + {{- $hb_community_styles = $hb_community_styles | minify | fingerprint "sha256" -}} + {{- end -}} + + {{ 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}} + + {{/* Load font theme - uses typography config from get_theme_config */}} + {{/* Supported values: 'sans' (Inter, default), 'serif' (Roboto Slab), 'native' (system fonts) */}} + {{ $font_setting := $theme_config.typography.font | default "sans" }} + {{ $use_custom_font := true }} + {{ $font_family := "Inter var" }} + {{ $font_file := "Inter.var.woff2" }} + {{ $font_type := "woff2" }} + + {{ if eq $font_setting "native" }} + {{/* Native system font stack - no custom font loaded */}} + {{ $use_custom_font = false }} + {{ else if eq $font_setting "serif" }} + {{ $font_file = "RobotoSlab-VariableFont_wght.ttf" }} + {{ $font_type = "truetype" }} + {{ end }} + {{/* Default case (sans or any unrecognized value) uses Inter */}} + + {{/* Map size tokens to CSS custom properties */}} + {{ $font_size_base := "1rem" }} + {{ $font_size_scale := "1.25" }} + {{ if eq $theme_config.typography.size "sm" }} + {{ $font_size_base = "0.875rem" }} + {{ $font_size_scale = "1.2" }} + {{ else if eq $theme_config.typography.size "lg" }} + {{ $font_size_base = "1.125rem" }} + {{ $font_size_scale = "1.333" }} + {{ else if eq $theme_config.typography.size "xl" }} + {{ $font_size_base = "1.25rem" }} + {{ $font_size_scale = "1.414" }} + {{ end }} + + {{/* Map radius tokens to CSS values */}} + {{ $radius_value := "0.5rem" }} + {{ if eq $theme_config.layout.radius "none" }} + {{ $radius_value = "0" }} + {{ else if eq $theme_config.layout.radius "sm" }} + {{ $radius_value = "0.25rem" }} + {{ else if eq $theme_config.layout.radius "lg" }} + {{ $radius_value = "0.75rem" }} + {{ else if eq $theme_config.layout.radius "full" }} + {{ $radius_value = "9999px" }} + {{ end }} + + {{/* Map spacing tokens to CSS values */}} + {{ $spacing_base := "1rem" }} + {{ $spacing_section := "4rem" }} + {{ if eq $theme_config.layout.spacing "compact" }} + {{ $spacing_base = "0.75rem" }} + {{ $spacing_section = "2.5rem" }} + {{ else if eq $theme_config.layout.spacing "spacious" }} + {{ $spacing_base = "1.25rem" }} + {{ $spacing_section = "6rem" }} + {{ end }} + + + + {{ 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 }} + {{/* Exception for SVG as Hugo doesn't yet support image processing on SVG. */}} + {{ if ne $bg_img.MediaType.SubType "svg" }} + {{ $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 Builder Tailwind UI v%s | https://hugoblox.com/ */\n" site.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/hugo-blox-builder/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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/social_links.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/social_links.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/social_links.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/social_links.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/tags.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/tags.html similarity index 75% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/tags.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/tags.html index 96feeda01..e2dd27a60 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/tags.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/tags.html @@ -1,7 +1,6 @@ -{{ $taxonomy := "tags" }} -{{ if .Param $taxonomy }} +{{ if .Params.tags }}
    - {{ range $index, $value := (.GetTerms $taxonomy) }} + {{ range $index, $value := (.GetTerms "tags") }} {{ .LinkTitle }} {{ end }}
    diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/tailwind_sources.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/tailwind_sources.html new file mode 100644 index 000000000..a15bd6e60 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/tailwind_sources.html @@ -0,0 +1,68 @@ +{{/* Hugo Blox: Dynamic Tailwind @source generation for Hugo modules */}} +{{/* Documentation: https://hugoblox.com/docs/ */}} +{{/* License: https://github.com/HugoBlox/hugo-blox-builder/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. Inline sources: extract class attributes from Preact JSX/TSX and embed them + directly so Tailwind can always see them regardless of FS layout. +*/}} +{{ $jsx_files := resources.Match "js/hbx/**/*.jsx" }} +{{ $tsx_files := resources.Match "js/hbx/**/*.tsx" }} + +{{ $extracted_classes := slice }} +{{ range $f := $jsx_files }} + {{ $code := $f.Content }} + {{ $matches := findRE `class(?:Name)?\s*=\s*"([^"]+)"` $code }} + {{ range $m := $matches }} + {{ $cls := replaceRE `^class(?:Name)?\s*=\s*"([^"]+)"$` `$1` $m }} + {{ $classes := split $cls " " }} + {{ range $class := $classes }} + {{ $extracted_classes = $extracted_classes | append $class }} + {{ end }} + {{ end }} +{{ end }} +{{ range $f := $tsx_files }} + {{ $code := $f.Content }} + {{ $matches := findRE `class(?:Name)?\s*=\s*"([^"]+)"` $code }} + {{ range $m := $matches }} + {{ $cls := replaceRE `^class(?:Name)?\s*=\s*"([^"]+)"$` `$1` $m }} + {{ $classes := split $cls " " }} + {{ range $class := $classes }} + {{ $extracted_classes = $extracted_classes | append $class }} + {{ 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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/views/article-grid.end.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/views/article-grid--end.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/views/article-grid.end.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/views/article-grid--end.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/views/article-grid.start.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/views/article-grid--start.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/views/article-grid.start.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/views/article-grid--start.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/views/article-grid.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/views/article-grid.html new file mode 100644 index 000000000..a88b9d1df --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/views/article-grid.html @@ -0,0 +1 @@ +{{- partial "views/card.html" . -}} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/views/card.end.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/views/card--end.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/views/card.end.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/views/card--end.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/views/card--start.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/views/card--start.html new file mode 100644 index 000000000..f24d47cb8 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/views/card--start.html @@ -0,0 +1 @@ +
    diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/views/card.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/views/card.html new file mode 100644 index 000000000..c38c83474 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/views/card.html @@ -0,0 +1,207 @@ +{{ $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 := $item.Params.image.focal_point | default "Center" }} +{{ $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 }} + +
    + +
    + {{ with $item.Params.content_meta }} + {{ if .trending }} +
    + {{ i18n "trending" | default "Trending" }} + +
    + {{ end }} + {{ end }} + {{ with $resource }} + {{ if ne .MediaType.SubType "gif" }} + {{ $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 + + {{ else }} + + {{ $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 }} + + {{ 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/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/views/citation.end.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/views/citation--end.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/views/citation.end.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/views/citation--end.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/views/citation.start.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/views/citation--start.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/views/citation.start.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/views/citation--start.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/views/citation.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/views/citation.html similarity index 94% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/views/citation.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/views/citation.html index 79f737918..6c1c1eb71 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/views/citation.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_partials/views/citation.html @@ -5,7 +5,7 @@ {{/* APA Style */}} - {{ if eq (site.Params.publications.citation_style | default "apa") "apa" }} + {{ if eq (site.Params.hugoblox.content.citations.style | default "apa") "apa" }}
    + + {{/* EMBEDDED SLIDES SECTION - Replaces featured image for events with slides */}} + {{ if .Params.slides }} + {{/* Enable Alpine.js for fullscreen functionality */}} + {{ .Store.Set "has_alpine" true }} + + {{/* Construct slides URL */}} + {{ $slides_page := site.GetPage (printf "/slides/%s" .Params.slides) }} + + {{ if $slides_page }} +
    + {{/* Slides iframe container - must contain button for fullscreen visibility */}} +
    + + + {{/* Fullscreen toggle button - must be inside fullscreen container */}} + +
    + + {{/* Slides metadata */}} +
    +
    + {{/* Direct link to slides */}} + + + + + View slides in new tab + + + {{/* Presentation mode hint */}} + + S + for speaker notes + +
    +
    +
    + {{ end }} + {{ else }} + {{/* Fallback to featured image if no slides */}} + {{ $featured := partial "functions/get_featured_image.html" . }} + {{ if and $featured (not .Params.image.preview_only) }} + {{/* Fit image within max size. */}} + {{ $image := $featured }} + + {{/* Determine image placement. */}} + {{ $placement := .Params.image.placement | default 1 }}{{/* Default to full column width. */}} + {{/* Configure responsive processing based on placement */}} + {{ $image_container := "" }} + {{ $responsive_sizes := slice }} + {{ $sizes_attr := "" }} + {{ if eq $placement 2}} + {{ $image_container = "container" }} + {{ $responsive_sizes = slice 480 768 1024 1200 1600 }} + {{ $sizes_attr = "(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1200px) 80vw, 1200px" }} + {{else if eq $placement 3}} + {{ $image_container = "container-fluid" }} + {{ $responsive_sizes = slice 768 1024 1366 1920 2560 }} + {{ $sizes_attr = "(max-width: 768px) 100vw, (max-width: 1366px) 90vw, (max-width: 1920px) 80vw, 2560px" }} + {{else}} + {{ $image_container = "article-container" }} + {{ $responsive_sizes = slice 320 480 640 720 960 }} + {{ $sizes_attr = "(max-width: 480px) 100vw, (max-width: 640px) 90vw, (max-width: 720px) 80vw, 720px" }} + {{end}} + + {{/* Process featured image using utility with placement-specific constraints */}} + {{ if ne $featured.MediaType.SubType "gif" }} + {{/* Pre-fit image to placement constraints, then apply responsive processing */}} + {{ $fitted_image := $featured }} + {{ if eq $placement 2}} + {{ $fitted_image = $featured.Fit "1200x2500" }} + {{else if eq $placement 3}} + {{ $fitted_image = $featured.Fit "2560x2560" }} + {{else}} + {{ $fitted_image = $featured.Fit "720x2500" }} + {{end}} + + {{ $responsive := partial "functions/process_responsive_image.html" (dict + "image" $fitted_image + "mode" "responsive" + "sizes" $responsive_sizes + ) }} + + {{/* Featured image - use fitted image dimensions for container, responsive for srcset */}} +
    +
    + {{ with $.Params.image.alt_text }}{{.}}{{ end }} + {{ with $.Params.image.caption }}{{ . | markdownify | emojify }}{{ end }} +
    +
    + {{ else }} + {{/* Handle GIF - apply same placement constraints without responsive processing */}} + {{ $image := $featured }} + {{ if eq $placement 2}} + {{ $image = $featured.Fit "1200x2500" }} + {{else if eq $placement 3}} + {{ $image = $featured.Fit "2560x2560" }} + {{else}} + {{ $image = $featured.Fit "720x2500" }} + {{end}} +
    +
    + {{ with $.Params.image.alt_text }}{{.}}{{ end }} + {{ with $.Params.image.caption }}{{ . | markdownify | emojify }}{{ end }} +
    +
    + {{ end }} + {{end}} + {{ end }} + + {{/* EVENT METADATA */}} + {{ if .Params.abstract | or (eq .Type "events") }} +
    + + {{ if .Params.abstract }} +
    {{ i18n "abstract" }}
    +
    {{ .Params.abstract | markdownify }}
    + {{ end }} + + {{ if eq .Type "events" }} +
    {{ i18n "date" }}
    +
    + {{ partial "functions/get_event_dates" . }} +
    + {{ end }} + + {{ if .Params.event }} +
    {{ i18n "event" }}
    + + {{ end }} + + {{ if .Params.location }} +
    {{ i18n "location" }}
    +
    +

    {{ .Params.location | markdownify }}

    + {{ if .Params.address }} +

    {{partial "functions/get_address" (dict "root" . "address" .Params.address) }}

    + {{end}} +
    + {{ end }} + +
    + {{ end }} + +
    + {{ .Content }} +
    + + {{ partial "components/last-edited.html" . }} + +
    + {{ .Scratch.Set "invert_pager" true }} + {{ partial "page_footer" . }} +
    + +
    +
    +
    +{{ end }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/faq/list.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/faq/list.html new file mode 100644 index 000000000..9b9f9d999 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/faq/list.html @@ -0,0 +1,65 @@ +{{- define "main" -}} + +
    + {{ partial "components/sidebar.html" (dict "context" . "no_sidebar" false) }} +
    +
    + + {{ if (.Params.show_breadcrumb | default true) }} +
    + {{ partial "components/breadcrumb.html" . }} +
    + {{ end }} + +
    +

    {{ .Title }}

    + {{ with .Content }} + {{ . }} + {{ end }} +
    + + {{/* List all FAQ pages */}} + {{ $pages := .Pages.ByDate.Reverse }} + + + + {{ if eq (len $pages) 0 }} +
    +

    {{ T "no_questions_yet" | default "No FAQ pages available yet." }}

    +
    + {{ end }} + + {{ partial "components/paginator" . }} +
    +
    +
    + +{{- end -}} + diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/faq/single.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/faq/single.html new file mode 100644 index 000000000..16b172237 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/faq/single.html @@ -0,0 +1,141 @@ +{{- define "main" -}} + +{{/* Enable Alpine.js for interactive FAQ accordion */}} +{{ .Page.Store.Set "has_alpine" true }} + +{{/* Pagefind metadata for search filtering */}} +
    + {{/* Use hidden spans for filter values - best practice per Pagefind docs */}} + faq + {{ with .Params.categories }} + {{ index . 0 }} + {{ end }} + +
    + {{ partial "components/sidebar.html" (dict "context" . "no_sidebar" false) }} + {{ partial "components/toc.html" . }} +
    +
    + + {{ if (.Params.show_breadcrumb | default true) }} +
    + {{ partial "components/breadcrumb.html" . }} +
    + {{ end }} + +

    {{ .Title }}

    + + {{ with .Content }} +
    + {{ . }} +
    + {{ end }} + + {{/* FAQ Accordion */}} + {{ with .Params.faqs }} +
    + {{ range $index, $item := . }} +
    + +
    +
    + {{ $item.answer | markdownify }} +
    +
    +
    + {{ end }} +
    + {{ end }} + + {{/* If no explicit FAQs, show child pages as FAQ items */}} + {{ if not .Params.faqs }} + {{ $child_pages := .Pages }} + {{ if $child_pages }} +
    + {{ range $index, $page := $child_pages }} +
    + +
    +
    + {{ if $page.Params.answer }} + {{ $page.Params.answer | markdownify }} + {{ else }} + {{ $page.Content }} + {{ end }} +
    + {{ if not $page.Params.answer }} + + {{ T "read_more" | default "Read more" }} → + + {{ end }} +
    +
    + {{ end }} +
    + {{ end }} + {{ end }} + + {{ partial "components/last-edited.html" . }} + {{ partial "components/feedback.html" . }} + {{ partial "comments.html" . }} +
    +
    +
    + +
    {{/* End Pagefind metadata wrapper */}} + +{{- end -}} \ No newline at end of file diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_default/home.backlinks.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/home.backlinks.json similarity index 83% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_default/home.backlinks.json rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/home.backlinks.json index 3d6d02c54..752a2289b 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_default/home.backlinks.json +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/home.backlinks.json @@ -1,6 +1,6 @@ {{- /* Hugo 0.126+ requires a `home` layout file even if it's empty, otherwise shows warning */ -}} +{{- range site.Pages -}}{{- $_ := .WordCount -}}{{- end -}} {{- if (eq (getenv "HUGO_BLOX_DEBUG") "true") -}} - {{- range site.Pages -}}{{- $_ := .WordCount -}}{{- end -}} {{- $backlinks := (.Store.Get "backlinks" | uniq) | default dict -}} {{- jsonify (dict "indent" " ") $backlinks -}} {{- else -}} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/index.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/home.html similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/index.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/home.html diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/index.llm.txt b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/index.llm.txt new file mode 100644 index 000000000..4ceb350c3 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/index.llm.txt @@ -0,0 +1,20 @@ +{{- $cfg := site.Params.hugoblox.seo.ai | default dict -}} +{{- $allows := $cfg.allow | default (slice "/") -}} +{{- $disallows := $cfg.disallow | default slice -}} + +# llms.txt generated by Hugo Blox +{{- with $cfg.contact }} +contact: {{ . }} +{{- end }} +{{- with $cfg.policy_url }} +policy: {{ . }} +{{- end }} +{{- with $cfg.note }} +note: {{ . | plainify }} +{{- end }} +{{- range $allows }} +allow: {{ . }} +{{- end }} +{{- range $disallows }} +disallow: {{ . }} +{{- end }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/list.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/list.html new file mode 100644 index 000000000..6bcacf79d --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/list.html @@ -0,0 +1,46 @@ +{{ define "main" }} + +
    +
    +

    {{ .Title }}

    + {{ .Content }} +
    +
    + +{{ $view := .Params.view | default "card" }} +{{ $block := . }} + +{{ $paginator := .Paginate .Pages.ByDate.Reverse }} +{{ $config := dict + "columns" (.Params.columns | default 2) + "len" (len $paginator.Pages) + "fill_image" (.Params.fill_image | default true) + "show_date" (.Params.show_date | default true) + "show_read_time" (.Params.show_read_time | default true) + "show_read_more" (.Params.show_read_more | default true) +}} + +{{/* Check if any pages have author_notes to enable Alpine.js */}} +{{ range .Pages }} + {{ if isset .Params "author_notes" }} + {{ $.Store.Set "has_alpine" true }} + + {{ break }} + {{ end }} +{{ end }} + +
    + + {{ partial "functions/render_view" (dict "fragment" "start" "page" $block "item" . "view" $view "config" $config) }} + + {{ range $index, $item := $paginator.Pages }} + {{ partial "functions/render_view" (dict "page" . "item" . "view" $view "index" $index "config" $config) }} + {{end}} + + {{ partial "functions/render_view" (dict "fragment" "end" "page" $block "item" . "view" $view) }} + + {{ partial "components/paginator" . }} + +
    + +{{ end }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/cta-card.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/cta-card.html deleted file mode 100644 index 615c9c32d..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/cta-card.html +++ /dev/null @@ -1,30 +0,0 @@ -{{/* Hugo Blox: CTA Card */}} -{{/* Documentation: https://hugoblox.com/blocks/ */}} -{{/* License: https://github.com/HugoBlox/hugo-blox-builder/blob/main/LICENSE.md */}} - -{{/* Initialise */}} -{{ $page := .wcPage }} -{{ $block := .wcBlock }} - -{{ $title := $block.content.title | emojify | $page.RenderString }} -{{ $text := $block.content.text | emojify | $page.RenderString | safeHTML }} -{{ $card_class := $block.design.card.css_class }} -{{ $card_style := $block.design.card.css_style }} - - -
    -

    - {{ $title }} -

    -
    - {{ $text }} -
    - {{ with $block.content.button }} - - {{ end }} -
    diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/resume-biography-3.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/resume-biography-3.html deleted file mode 100644 index 6edc0f675..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/resume-biography-3.html +++ /dev/null @@ -1,158 +0,0 @@ -{{/* Hugo Blox: Biography 3 */}} -{{/* Documentation: https://hugoblox.com/blocks/ */}} -{{/* License: https://github.com/HugoBlox/hugo-blox-builder/blob/main/LICENSE.md */}} - -{{/* Initialise */}} -{{ $page := .wcPage }} -{{ $block := .wcBlock }} - -{{ $author := $block.content.username | default "admin" }} - -{{ $person_page_path := (printf "/authors/%s" $author) }} -{{ $person_page := site.GetPage $person_page_path }} -{{ if not $person_page }} - {{ errorf "Could not find an author page at `%s`. Please check the value of `author` in your About widget and create an associated author page if one does not already exist. See https://docs.hugoblox.com/page-builder/#about " $person_page_path }} -{{end}} -{{ $person := $person_page.Params }} -{{ $avatar := ($person_page.Resources.ByType "image").GetMatch "*avatar*" }} -{{ $avatar_shape := site.Params.features.avatar.shape | default "circle" }} - - -
    -
    - - {{ $img := "" }} - {{with $block.design.banner.filename}} - {{- $img = resources.Get (path.Join "media" .) -}} - {{ if $img }} - {{- $img = $img.Process "webp" -}} -
    -
    -
    - -
    -
    -
    - {{ end }} - {{ end }} - -
    - {{ if $avatar }} - -
    - {{ $avatar_image := $avatar.Fill "150x150 Center" }} - {{$person_page.Title}} - {{with $person.status.icon}}{{.|emojify}}{{end}} -
    - {{ end }} - -
    - -
    - {{- if $person.name_pronunciation -}} - - {{ $person_page.Title }} - {{ $person.name_pronunciation }} - - {{- else -}} - {{- $person_page.Title -}} - {{- end -}} -
    - - {{ with $person.role }}

    {{ . | markdownify | emojify }}

    {{ end }} - - {{ range $person.organizations }} -
    - {{ with .url }}{{ end }} -
    {{ .name }}
    - {{ if .url }}
    {{ end }} -
    - {{ end }} -
    - -
      - {{ range $person.profiles }} - {{ $pack := or .icon_pack "fas" }} - {{ $pack_prefix := $pack }} - {{ if in (slice "fab" "fas" "far" "fal") $pack }} - {{ $pack_prefix = "fa" }} - {{ end }} - {{ $link := .url | default .link }} - {{ $scheme := (urls.Parse $link).Scheme }} - {{ $target := "" }} - {{ if not $scheme }} - {{ $link = (.url | default .link) | relLangURL }} - {{ if eq (path.Ext $link) ".pdf" }}{{ $target = "target=\"_blank\" rel=\"noopener\"" }}{{ end }} - {{ else if in (slice "http" "https") $scheme }} - {{ $target = "target=\"_blank\" rel=\"noopener\"" }} - {{ end }} -
    • - - {{ partial "functions/get_icon" (dict "name" .icon "attributes" "style=\"height: 1.5rem;\"") }} - -
    • - {{ end }} -
    -
    -
    - -
    - {{ with ($block.content.text | emojify | $page.RenderString) | default $person_page.Content }} -
    -
    - {{ . }} -
    -
    - {{ end }} - - {{ with $block.content.button }} - {{.text}} - {{ end }} - - - - -
    - - {{ with $person.interests }} -
    -
    {{ i18n "interests" | markdownify }}
    -
      - {{ range . }} -
    • - {{ . | markdownify | emojify }} -
    • - {{ end }} -
    -
    - {{ end }} - - {{ with $person.education }} -
    -
    {{ i18n "education" | markdownify }}
    -
      - {{ range . }} -
    • - {{ partial "functions/get_icon" (dict "name" "academic-cap" "attributes" "style=\"\" class='flex-shrink-0 w-5 h-5 me-2 mt-1'") }} -
      -

      {{ .area }}{{ with .year }}, {{ . }}{{ end }}

      -

      {{ .institution }}

      -
      -
    • - {{ end }} -
    -
    - {{ end }} - -
    - -
    -
    diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/resume-biography.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/resume-biography.html deleted file mode 100644 index eebfafc24..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/resume-biography.html +++ /dev/null @@ -1,110 +0,0 @@ -{{/* Hugo Blox: Biography */}} -{{/* Documentation: https://hugoblox.com/blocks/ */}} -{{/* License: https://github.com/HugoBlox/hugo-blox-builder/blob/main/LICENSE.md */}} - -{{/* Initialise */}} -{{ $page := .wcPage }} -{{ $block := .wcBlock }} - -{{ $author := $block.content.username | default "admin" }} - -{{ $person_page_path := (printf "/authors/%s" $author) }} -{{ $person_page := site.GetPage $person_page_path }} -{{ if not $person_page }} - {{ errorf "Could not find an author page at `%s`. Please check the value of `author` in your About widget and create an associated author page if one does not already exist. See https://docs.hugoblox.com/page-builder/#about " $person_page_path }} -{{end}} -{{ $person := $person_page.Params }} -{{ $avatar := ($person_page.Resources.ByType "image").GetMatch "*avatar*" }} -{{ $avatar_shape := site.Params.features.avatar.shape | default "circle" }} - -{{ $img := "" }} -{{with $block.design.banner.filename}} -{{- $img = resources.Get (path.Join "media" .) -}} -{{ if $img }} - {{- $img = $img.Process "webp" -}} -
    -
    -
    - -
    -
    -
    -{{ end }} -{{ end }} - -
    - {{ if $avatar }} - -
    - {{ $avatar_image := $avatar.Fill "150x150 Center" }} - {{$person_page.Title}} - {{with $person.status.icon}}{{.|emojify}}{{end}} -
    - {{ end }} - -
    - {{- if $person.name_pronunciation -}} - - {{ $person_page.Title }} - {{ $person.name_pronunciation }} - - {{- else -}} - {{- $person_page.Title -}} - {{- end -}} -
    - - {{ with $person.role }}

    {{ . | markdownify | emojify }}

    {{ end }} - - {{ range $person.organizations }} -
    - {{ with .url }}{{ end }} -
    {{ .name }}
    - {{ if .url }}
    {{ end }} -
    - {{ end }} - -
      - {{ range $person.profiles }} - {{ $pack := or .icon_pack "fas" }} - {{ $pack_prefix := $pack }} - {{ if in (slice "fab" "fas" "far" "fal") $pack }} - {{ $pack_prefix = "fa" }} - {{ end }} - {{ $link := .url | default .link }} - {{ $scheme := (urls.Parse $link).Scheme }} - {{ $target := "" }} - {{ if not $scheme }} - {{ $link = (.url | default .link) | relLangURL }} - {{ if eq (path.Ext $link) ".pdf" }}{{ $target = "target=\"_blank\" rel=\"noopener\"" }}{{ end }} - {{ else if in (slice "http" "https") $scheme }} - {{ $target = "target=\"_blank\" rel=\"noopener\"" }} - {{ end }} -
    • - - {{ partial "functions/get_icon" (dict "name" .icon "attributes" "style=\"height: 1.5rem;\"") }} - -
    • - {{ end }} -
    - - {{ with ($block.content.text | emojify | $page.RenderString) | default $person_page.Content }} -
    -
    - {{ . }} -
    -
    - {{ end }} - - {{ with $block.content.button }} - {{.text}} - {{ end }} - -
    diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/resume-experience.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/resume-experience.html deleted file mode 100644 index 1e8cb3566..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/resume-experience.html +++ /dev/null @@ -1,108 +0,0 @@ -{{/* Hugo Blox: Experience */}} -{{/* Documentation: https://hugoblox.com/blocks/ */}} -{{/* License: https://github.com/HugoBlox/hugo-blox-builder/blob/main/LICENSE.md */}} - -{{/* Initialise */}} -{{ $page := .wcPage }} -{{ $block := .wcBlock }} -{{ $text := $block.content.text | emojify | $page.RenderString }} - -{{ $author := $block.content.username | default "admin" }} -{{ $person_page_path := (printf "/authors/%s" $author) }} -{{ $person_page := site.GetPage $person_page_path }} -{{ if not $person_page }} -{{ errorf "Could not find an author page at `%s`. Please check the value of `author` in your About widget and create an associated author page if one does not already exist. See https://docs.hugoblox.com/page-builder/#about " $person_page_path }} -{{end}} -{{ $person := $person_page.Params }} -{{ $is_education_first := $block.design.is_education_first | default false }} - -
    - - - - - - - -
    - -{{ if $person.work }} -
    -

    {{ i18n "experience" | default "Experience" }}

    -
      - {{ range $idx, $key := $person.work }} -
    1. - - - -

      {{.position}} - -

      - {{.company_name}} - -
      {{.summary | $page.RenderString}}
      - - {{ with .button }} - {{.text}} - {{ end }} - -
    2. - {{ end }} -
    -
    -{{ end }} - -{{ if $person.education }} -
    -

    {{ i18n "education" }}

    -
      - {{ range $idx, $key := $person.education }} -
    1. - - - - -

      {{.area}} - -

      - {{.institution}} - -
      {{.summary | $page.RenderString}}
      - - {{ with .button }} - {{.text}} - {{ end }} - -
    2. - {{ end }} -
    -
    -{{ end }} - -
    - -
    diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/stats.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/stats.html deleted file mode 100644 index afa932759..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/blox/stats.html +++ /dev/null @@ -1,37 +0,0 @@ -{{/* Hugo Blox: Stats */}} -{{/* Documentation: https://hugoblox.com/blocks/ */}} -{{/* License: https://github.com/HugoBlox/hugo-blox-builder/blob/main/LICENSE.md */}} - -{{/* Initialise */}} -{{ $page := .wcPage }} -{{ $block := .wcBlock }} -{{ $title := $block.content.title | emojify | $page.RenderString }} -{{ $text := $block.content.text | emojify | $page.RenderString }} - - -
    - - {{ with $title }} -
    -
    -

    {{.}}

    - {{ with $text }} -

    {{.}}

    - {{ end }} -
    -
    - {{ end }} - -
    - {{ range $idx, $item := $block.content.items }} -
    -
    - {{- .statistic | $page.RenderString -}} -
    -

    - {{- .description | $page.RenderString -}} -

    -
    - {{ end }} -
    -
    diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/comments/commento.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/comments/commento.html deleted file mode 100644 index 1c9e2d062..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/comments/commento.html +++ /dev/null @@ -1,3 +0,0 @@ -
    -{{ $url := (printf "%s/js/commento.js" (site.Params.features.comment.commento.url | default "https://cdn.commento.io")) }} - diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/get_author_name.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/get_author_name.html deleted file mode 100644 index 72e64cc3d..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/get_author_name.html +++ /dev/null @@ -1,26 +0,0 @@ -{{/* Get name of primary author. */}} - -{{ $page := . }} - -{{/* Get publisher as fall back. */}} -{{ $publisher := site.Params.marketing.seo.org_name | default site.Title }} - -{{ $author := "" }} -{{ $author_username := "" }} - -{{ if and (not $page.Params.authors) ($page.Scratch.Get "superuser_username") }} - {{ $author_username = $page.Scratch.Get "superuser_username" }} -{{ else if $page.Params.authors }} - {{ $author = index $page.Params.authors 0 }} - {{ $author_username = urlize $author }} -{{ end }} - -{{ $taxonomy := "authors" }} -{{ $profile_page := site.GetPage (printf "/%s/%s" $taxonomy $author_username) }} -{{ with $profile_page }} - {{ $author = .Title }} -{{ else }} - {{ $author = $author | default $publisher }} -{{ end }} - -{{ return $author }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/get_icon.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/get_icon.html deleted file mode 100644 index 7cec536be..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/functions/get_icon.html +++ /dev/null @@ -1,36 +0,0 @@ -{{/* Return the requested SVG icon */}} -{{/* Search for the icon in the Hugo Blox Builder icon library, falling back to user's icon library */}} - -{{ $dirFile := path.Split .name }} -{{ $pack := .pack | default (strings.Replace $dirFile.Dir "/" "") | default "hero" }} -{{ $name := $dirFile.File }} - -{{- $icon_pack := index site.Data.icons $pack -}} -{{- $icon := index (index $icon_pack "icons") $name -}} - -{{ if $icon }} - {{ if in (slice "hb" "brands") $pack }} - {{/* Pass */}} - {{ else }} - {{ $icon_body := index $icon "body" }} - {{ $icon_size := index $icon_pack "height" }} - {{ $icon = printf `%s` (cast.ToString $icon_size) (cast.ToString $icon_size) $icon_body }} - {{ end }} -{{ else }} - {{ with index (index site.Data.icons.hb "icons") $name -}} - {{ $icon = . }} - {{ else }} - {{ with resources.GetMatch (path.Join "media" "icons" $pack (printf "%s.svg" $name)) }} - {{ $icon = .Content }} - {{else}} - {{ warnf "The icon `%s.svg` was not found in your `assets/media/icons/%s/` folder" $name $pack }} - {{ $icon = index (index site.Data.icons.brands "icons") "hugo" }} - {{ end }} - {{ end }} -{{ end }} - -{{ if .attributes }} - {{ $icon = replaceRE " -
    - {{with $bg_video}}{{end}} -
    - {{if $use_container}}
    {{end}} - - {{if $use_cols}} -
    - {{ if $block.content.title }} - {{ if eq $columns "1" }} -
    - {{ with $block.content.title }}

    {{ . | markdownify | emojify }}

    {{ end }} - {{ with $block.content.subtitle }}

    {{ . | markdownify | emojify }}

    {{ end }} -
    - {{else}} -
    - {{ with $block.content.title }}

    {{ . | markdownify | emojify }}

    {{ end }} - {{ with $block.content.subtitle }}

    {{ . | markdownify | emojify }}

    {{ end }} -
    - {{end}} - {{end}} - {{end}} - - {{ partial $block_path $widget_args }} - - {{if $use_cols}} -
    - {{end}} - - {{if $use_container}}
    {{end}} -

    diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/init.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/init.html deleted file mode 100644 index 9eb5e760a..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/init.html +++ /dev/null @@ -1,24 +0,0 @@ -{{/* 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 */}} -{{- range $page := site.AllPages }} - {{- $noop := .Content }} - {{ if eq .Type "landing" }} - {{ range $index, $block := .Params.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 := lower ($block.blox | default $block.block) | default "markdown" }} - {{ range $r := site.Data.blox_aliases.renames }} - {{ $block_type = cond (eq $block_type $r.old) $r.new $block_type }} - {{ end }} - {{ $widget_config_file := printf "blox/%s--CONFIG.html" $block_type }} - {{ if templates.Exists (printf "partials/%s" $widget_config_file) }} - {{/* warnf "Loading blox config at %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 -}} -{{- end -}} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/jsonld/business.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/jsonld/business.html deleted file mode 100644 index 3e96f4375..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/jsonld/business.html +++ /dev/null @@ -1,30 +0,0 @@ -{{- $sharing_image := resources.GetMatch (path.Join "media" "sharing.*") -}} - diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/jsonld/main.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/jsonld/main.html deleted file mode 100644 index a8b4cd43d..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/jsonld/main.html +++ /dev/null @@ -1,23 +0,0 @@ -{{ $page := .page }} -{{ $summary := .summary }} -{{ $site_type := site.Params.marketing.seo.site_type | 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 "publication") | or (eq $page.Type "project") }} - {{ partial "jsonld/article.html" (dict "page" $page "summary" $summary) }} - {{ end }} - - {{ if eq $page.Type "event" }} - {{ partial "jsonld/event.html" (dict "page" $page "summary" $summary) }} - {{ end }} - -{{- end }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/landing_page.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/landing_page.html deleted file mode 100644 index 65e7cfc77..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/landing_page.html +++ /dev/null @@ -1,7 +0,0 @@ -{{/* Load Hugo Blox */}} -{{ range $index, $block := .Params.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_v2" (dict "page" $ "block" $block) }} - {{ end }} -{{ end }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/page_author.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/page_author.html deleted file mode 100644 index 74fa41c05..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/page_author.html +++ /dev/null @@ -1,19 +0,0 @@ -{{/* 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))) }} - -{{/* Display superuser if superuser exists and page authors are not explicitly specified. */}} -{{/* Otherwise, display first author if a profile for them exists. */}} - -{{ if and (not .Params.authors) (.Scratch.Get "superuser_username") }} - {{ $author_page := site.GetPage (printf "/%s/%s" "authors" (.Scratch.Get "superuser_username")) }} - {{ partial "page_author_card" (dict "author_page" $author_page) }} -{{ else if .Params.authors }} - {{ $taxonomy := "authors" }} - {{ range $author_obj := (.GetTerms $taxonomy) }} - {{ partial "page_author_card" (dict "author_page" $author_obj.Page) }} - {{ end }} -{{ end }} - -{{end}}{{/* Show profile block */}} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/page_author_card.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/page_author_card.html deleted file mode 100644 index d62cd62d5..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/page_author_card.html +++ /dev/null @@ -1,57 +0,0 @@ -{{ $page := .page }} -{{ $author_page := .author_page }} -{{ $site_type := site.Params.marketing.seo.site_type | default "Person" }} -{{- $has_profile := not (eq nil $author_page.Params.superuser) -}} - -{{/* Check an author profile exists. */}} -{{ if $has_profile }} - {{/* If it's a personal site and primary page author is superuser, link to the homepage rather than their profile page. */}} - {{ $profile_url := $author_page.RelPermalink }} - {{ if and (eq $site_type "Person") (eq $author_page.Params.superuser true) }} - {{ $profile_url = site.BaseURL }} - {{ end }} - {{ $avatar := ($author_page.Resources.ByType "image").GetMatch "*avatar*" }} - {{ $avatar_shape := site.Params.features.avatar.shape | default "circle" }} - -
    - {{ if $avatar }} - {{ $authorImage := $avatar.Fill "192x192 Center" }} - {{$author_page.Title}} - {{ end }} -
    -
    - {{ i18n "authors" }} -
    - - - {{ with $author_page.Params.role }} -
    - {{. | markdownify | emojify}} -
    - {{end}} - - - {{ with $author_page.Params.bio }} -
    {{ . | markdownify | emojify }}
    - {{ end }} - -
    - - {{ partial "social_links" $author_page }} - -
    -
    -
    - -{{end}}{{/* End Check for Author Profile */}} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/page_links.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/page_links.html deleted file mode 100644 index a4eabceec..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/page_links.html +++ /dev/null @@ -1,167 +0,0 @@ -{{ $is_list := .is_list }} -{{ $page := .page }} -{{ $link := "" }} - -{{/* ***** TODO: Deprecate `url_preprint` in favour of `url_pdf` given there's now a dedicated "Preprint" pub. type. ***** */}} -{{ with $page.Params.url_preprint }} - {{ $resource := $page.Resources.GetMatch . }} - {{ if $resource }} - {{ $link = $resource.RelPermalink }} - {{ else }} - {{ $link = . | relURL }} - {{ end }} - - {{ i18n "btn_preprint" }} - -{{ end }} -{{ $pdf := "" }} -{{ $resource := $page.Resources.GetMatch (printf "%s.pdf" $page.File.ContentBaseName) }} -{{ with $resource }} - {{ $pdf = .RelPermalink }} -{{ else }} - {{ if $page.Params.url_pdf }} - {{ $pdf = $page.Params.url_pdf | relURL }} - {{ end }} -{{ end }} - -{{ with $pdf }} - - {{ partial "functions/get_icon" (dict "name" "document-text" "attributes" "style=\"height: 1em\" class='inline-block'") }} - {{ i18n "btn_pdf" }} - -{{ end }} -{{ $resource := $page.Resources.GetMatch "cite.bib" }} -{{ with $resource }} - - {{ partial "functions/get_icon" (dict "name" "document-duplicate" "attributes" "style=\"height: 1em\" class='inline-block'") }} - {{ i18n "btn_cite" }} - -{{ end }} -{{ with $page.Params.url_code }} - {{ $resource := $page.Resources.GetMatch . }} - {{ if $resource }} - {{ $link = $resource.RelPermalink }} - {{ else }} - {{ $link = . | relURL }} - {{ end }} - - {{ partial "functions/get_icon" (dict "name" "code-bracket" "attributes" "style=\"height: 1em\" class='inline-block'") }} - {{ i18n "btn_code" }} - -{{ end }} -{{ with $page.Params.url_dataset }} - {{ $resource := $page.Resources.GetMatch . }} - {{ if $resource }} - {{ $link = $resource.RelPermalink }} - {{ else }} - {{ $link = . | relURL }} - {{ end }} - - {{ partial "functions/get_icon" (dict "name" "circle-stack" "attributes" "style=\"height: 1em\" class='inline-block'") }} - {{ i18n "btn_dataset" }} - -{{ end }} -{{ if $page.Params.projects }} -{{ range $page.Params.projects }} - {{ with (site.GetPage (printf "project/%s" .)) }} - - {{ i18n "btn_project" }} - - {{ else }} - {{/* errorf "The `projects` parameter in `content/%s` references a project file, `content/project/%s`, which cannot be found. Please either set `projects = []` or fix the reference." $page.File.Path . */}} - {{ end }} -{{ end }} -{{ else }} -{{ with $page.Params.url_project }} - - {{ i18n "btn_project" }} - -{{ end }} -{{ end }} -{{ with $page.Params.url_poster }} - {{ $resource := $page.Resources.GetMatch . }} - {{ if $resource }} - {{ $link = $resource.RelPermalink }} - {{ else }} - {{ $link = . | relURL }} - {{ end }} - - {{ partial "functions/get_icon" (dict "name" "photo" "attributes" "style=\"height: 1em\" class='inline-block'") }} - {{ i18n "btn_poster" }} - -{{ end }} -{{ if $page.Params.slides }} - {{ with (site.GetPage (printf "slides/%s" $page.Params.slides)) }} - - {{ partial "functions/get_icon" (dict "name" "presentation-chart-bar" "attributes" "style=\"height: 1em\" class='inline-block'") }} - {{ i18n "btn_slides" }} - - {{ end }} -{{ else }} -{{ with $page.Params.url_slides }} - {{ $resource := $page.Resources.GetMatch . }} - {{ if $resource }} - {{ $link = $resource.RelPermalink }} - {{ else }} - {{ $link = . | relURL }} - {{ end }} - - {{ partial "functions/get_icon" (dict "name" "presentation-chart-bar" "attributes" "style=\"height: 1em\" class='inline-block'") }} - {{ i18n "btn_slides" }} - -{{ end }} -{{ end }} -{{ with $page.Params.url_video }} - {{ $resource := $page.Resources.GetMatch . }} - {{ if $resource }} - {{ $link = $resource.RelPermalink }} - {{ else }} - {{ $link = . | relURL }} - {{ end }} - - {{ partial "functions/get_icon" (dict "name" "video-camera" "attributes" "style=\"height: 1em\" class='inline-block'") }} - {{ i18n "btn_video" }} - -{{ end }} -{{ with $page.Params.url_source }} - {{ $resource := $page.Resources.GetMatch . }} - {{ if $resource }} - {{ $link = $resource.RelPermalink }} - {{ else }} - {{ $link = . | relURL }} - {{ end }} - - {{ partial "functions/get_icon" (dict "name" "document" "attributes" "style=\"height: 1em\" class='inline-block'") }} - {{ i18n "btn_source" }} - -{{ end }} -{{ with $page.Params.doi }} - - DOI - -{{ end }} -{{ range $page.Params.links }} - {{ $pack := or .icon_pack "fas" }} - {{ $pack_prefix := $pack }} - {{ if in (slice "fab" "fas" "far" "fal") $pack }} - {{ $pack_prefix = "fa" }} - {{ end }} - {{ $link := .url | default "" }} - {{ $scheme := (urls.Parse $link).Scheme }} - {{ $target := "" }} - {{ if not $scheme }} - {{ $resource := $page.Resources.GetMatch $link }} - {{ if $resource }} - {{ $link = $resource.RelPermalink }} - {{ else }} - {{ $link = $link | relURL }} - {{ end }} - {{ else if in (slice "http" "https") $scheme }} - {{ $target = "target=\"_blank\" rel=\"noopener\"" }} - {{ end }} - - {{ partial "functions/get_icon" (dict "name" "link" "attributes" "style=\"height: 1em\" class='inline-block'") }} - {{ if .icon }}{{end}} - {{- with .name }}{{ . | safeHTML }}{{ end -}} - -{{ end }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/page_links_div.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/page_links_div.html deleted file mode 100644 index 5dad96f0c..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/page_links_div.html +++ /dev/null @@ -1,12 +0,0 @@ -{{/* Div wrapper around page links. */}} -{{/* The wrapper is hidden when the page has no link buttons. */}} - -{{ $has_attachments := partial "functions/has_attachments" . }} -{{ if $has_attachments | or .Params.external_link }} -
    - {{ with .Params.external_link }} - {{ i18n "open_project_site" }} - {{ end }} - {{ partial "page_links" (dict "page" . "is_list" 0) }} -
    -{{ end }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/page_metadata_authors.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/page_metadata_authors.html deleted file mode 100644 index 077076504..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/page_metadata_authors.html +++ /dev/null @@ -1,24 +0,0 @@ -{{/* Display author list. */}} - -{{- $taxonomy := "authors" }} -{{ if .Param $taxonomy }} - {{ range $index, $value := (.GetTerms $taxonomy) }} - {{- /* Highlight the author's name? */ -}} - {{- $highlight_name := .Page.Params.highlight_name | default false -}} - - {{- if gt $index 0 }}, {{ end -}} - - {{/* Effectively check the page's `_build` option as `_build` is not exposed in Hugo's Page object. */}} - {{- if .RelPermalink -}} - {{.LinkTitle}} - {{- else -}} - {{ .LinkTitle }} - {{- end -}} - - {{- if isset $.Params "author_notes" -}} - {{- with (index $.Params.author_notes $index) -}} - - {{- end -}} - {{- end -}} - {{- end -}} -{{- end -}} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/site_footer.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/site_footer.html deleted file mode 100644 index c86e19d3b..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/site_footer.html +++ /dev/null @@ -1,30 +0,0 @@ -
    - - {{ partial "functions/get_hook" (dict "hook" "footer-start" "context" .) }} - - {{/* Load footer block */}} - {{ $footer_section_name := site.Params.footer.blox | 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 . }} - -

    - {{ $is_sponsor := site.Params.i_am_a_sponsor | default false }} - {{ $hide_published_with_footer := site.Params.power_ups.hide_published_with | default true }} - {{ if not (and $is_sponsor $hide_published_with_footer) }} - {{ $default := "Published with {hugoblox} — the free, {repo_link}open source{/repo_link} website builder that empowers creators." }} - {{ $i18n_published_with := i18n "published_with" | default $default }} - {{ if not (findRE "{hugoblox}" $i18n_published_with) }} - {{ warnf "Please attribute Hugo Blox using `{hugoblox}` in the `published_with` text." }} - {{ $i18n_published_with = $default }} - {{ end }} - {{ $i18n_published_with = replace $i18n_published_with "{hugoblox}" "Hugo Blox Builder" | safeHTML }} - {{ $i18n_published_with = replace $i18n_published_with "{repo_link}" "" | safeHTML }} - {{ $i18n_published_with = replace $i18n_published_with "{/repo_link}" "" | safeHTML }} - {{ $i18n_published_with | replaceRE "{year}" now.Year | markdownify | emojify | safeHTML }} - {{ end }} -

    - -
    diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/site_footer_license.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/site_footer_license.html deleted file mode 100644 index f182bca9c..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/site_footer_license.html +++ /dev/null @@ -1,53 +0,0 @@ -{{/* Display copyright license. */}} - -{{ $copyright_license := .Params.copyright.license | default site.Params.footer.copyright.license }} -{{ $notice := .Params.copyright.notice | default site.Params.footer.copyright.notice }} - -{{ if ($copyright_license.enable | default 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 }} - - {{ $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) }} - - {{ with $notice }} -

    - {{ replace (replace . "{year}" now.Year) "{license}" (printf "CC %s 4.0" $license_url (replace $cc_code "-" " " | upper)) | markdownify }} -

    - {{ end }} - - - -{{ else }} - - {{ with $notice }} -

    - {{ replace . "{year}" now.Year | markdownify }} -

    - {{ end }} - -{{ end }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/site_head.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/site_head.html deleted file mode 100644 index 5bbf34e3a..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/site_head.html +++ /dev/null @@ -1,290 +0,0 @@ -{{ $scr := .Scratch }} - - - - - - - {{/* EXTENSIBILITY HOOK: HEAD-START */}} - {{ partial "functions/get_hook" (dict "hook" "head-start" "context" .) }} - - {{ if .Params.private }} - - {{- end -}} - - {{/* Attempt to load superuser. */}} - {{ $superuser_name := "" }} - {{ $superuser_username := "" }} - {{ $superuser_role := "" }} - {{ range first 1 (where (where site.Pages "Section" "authors") "Params.superuser" true) }} - {{ $superuser_name = .Title }} - {{ $superuser_username = path.Base .File.Dir }} - {{ $superuser_role = .Params.role }} - {{ end }} - {{ $scr.Set "superuser_username" $superuser_username }}{{/* Set superuser globally for page_author.html. */}} - - {{ with $superuser_name }}{{ end }} - - {{/* Generate page description. */}} - {{ $desc := "" }} - {{ if .Params.summary }} - {{ $desc = .Params.summary }} - {{ else if .Params.abstract }} - {{ $desc = .Params.abstract }} - {{ else if .IsPage }} - {{ $desc = .Summary }} - {{ else if site.Params.marketing.seo.description }} - {{ $desc = site.Params.marketing.seo.description }} - {{ else }} - {{ $desc = $superuser_role }} - {{ end }} - - - {{ range .Translations }} - - {{ end }} - - - {{/* Hugo Blox Color Theme Initialization */}} - {{ $theme_name := (lower site.Params.appearance.color) | default "blue" }} - {{ $theme_path := printf "css/themes/%s.css" $theme_name }} - {{ if not (fileExists (printf "assets/%s" $theme_path)) }} - {{ errorf "The specified color theme `%s.css` was not found in `assets/css/themes/`. Either install your custom color theme in the folder or set the `color` theme value in `params.yaml` to an existing theme such as `blue`." $theme_name }} - {{ else }} - {{ $theme_css := resources.Get $theme_path | minify }} - - {{ end }} - - {{/* Style */}} - {{ if ne (os.Getenv "HUGO_BLOX_POSTCSS") "true" }} - {{ $styles := resources.Get "dist/wc.min.css" | fingerprint "sha256" }} - - {{ else }} - {{ $options := dict "inlineImports" true }} - {{ $styles := resources.Get "css/styles.css" }} - {{ $styles = $styles | resources.PostCSS $options }} - {{ if hugo.IsProduction }} - {{ $styles = $styles | minify | fingerprint "sha256" | resources.PostProcess }} - {{ end }} - - {{ end }} - - {{/* Load community blox styles */}} - {{ $hb_community_styles := resources.Match "dist/community/blox/**.css" }} - {{ with $hb_community_styles }} - {{ $hb_community_styles = $hb_community_styles | resources.Concat "css/community-hugo-blox.css" }} - {{- if hugo.IsProduction -}} - {{- $hb_community_styles = $hb_community_styles | minify | fingerprint "sha256" -}} - {{- end -}} - - {{ end }} - - {{ if fileExists "assets/css/custom.css" }} - {{ $styles := resources.Get "css/custom.css" | minify | fingerprint "sha256" }} - - {{ end }} - - - - - - {{/* Analytics & Verification */}} - {{/* !CACHED! All analytics and verification code is at site level */}} - {{ partialCached "blox-analytics/index" . }} - - {{/* RSS Feed */}} - {{ with .OutputFormats.Get "RSS" }} - - {{ end }} - - {{/* Progressive Web App (PWA) Icon */}} - - - - - - {{/* 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") $avatar_image) }} - {{/* Match image processing in About widget to prevent generating more images than necessary. */}} - {{ $og_image = ($avatar_image.Fill "270x270 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 */}} - {{ $og_image = (partialCached "functions/get_logo" (dict "constraint" "fit" "size" 300)).Permalink }} - {{ $twitter_card = "summary" }} - {{ else }} - {{ $og_image = (partial "functions/get_site_icon" 512).Permalink }} - {{ $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}" site.Title }} - {{ else }} - {{ $title = .Title | default site.Title }} - {{ if ne $title site.Title }}{{ $title = printf "%s | %s" $title site.Title }}{{ end }} - {{ end }} - - {{ with site.Params.marketing.seo.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}} - - {{/* Load font theme */}} - {{ $font_family := "Inter var" }} - {{ $font_file := "" }} - {{ $font_type := "" }} - {{ if eq site.Params.appearance.font "serif" }} - {{ $font_file = "RobotoSlab-VariableFont_wght.ttf" }} - {{ $font_type = "truetype" }} - {{else}} - {{ $font_file = "Inter.var.woff2" }} - {{ $font_type = "woff2" }} - {{end}} - {{ $font := resources.Get (printf "dist/font/%s" $font_file) }} - - - {{ 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 }} - {{/* Exception for SVG as Hugo doesn't yet support image processing on SVG. */}} - {{ if ne $bg_img.MediaType.SubType "svg" }} - {{ $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" . -}} - - {{/* Load Third-Party Libraries */}} - {{ partial "libraries.html" . }} - - {{ $js_license := printf "/*! Hugo Blox Builder Tailwind UI v%s | https://hugoblox.com/ */\n" site.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/hugo-blox-builder/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_academic := resources.Get "js/hb-code-copy.js" | js.Build (dict "targetPath" (printf "js/wow-core-%s.js" .Lang ) "params" $js_params) }} - {{ $js_academic := $js_academic | 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_bundle := slice $js_bundle_head $js_academic $js_theme $js_lang $js_nav $js_sidebar | resources.Concat (printf "js/hugo-blox-%s.min.js" .Lang) }} - {{- if hugo.IsProduction -}} - {{ $js_bundle = $js_bundle | fingerprint "sha256" }} - {{- end -}} - - - {{/* EXTENSIBILITY HOOK: HEAD-END */}} - {{ partial "functions/get_hook" (dict "hook" "head-end" "context" .) }} - diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/views/article-grid.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/views/article-grid.html deleted file mode 100644 index f5f65e3d0..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/views/article-grid.html +++ /dev/null @@ -1,96 +0,0 @@ -{{ $item := .item }} -{{ $fill_image := .config.fill_image | default true }} - -{{ $resource := partial "functions/get_featured_image.html" $item }} -{{ $anchor := $item.Params.image.focal_point | default "Center" }} - -{{ $link := $item.Params.external_link | default $item.RelPermalink }} -{{ $target := "" }} -{{ if $item.Params.external_link }} - {{ $link = $item.Params.external_link }} - {{ $target = "target=\"_blank\" rel=\"noopener\"" }} -{{ end }} - -
    - - {{ with $resource }} - {{ $image := "" }} - {{if $fill_image}} - {{ $image = .Fill (printf "960x540 %s" $anchor) }} - {{else}} - {{ $image = .Fit (printf "960x540 %s" $anchor) }} - {{end}} - {{ if ne $image.MediaType.SubType "gif" }}{{ $image = $image.Process "webp" }}{{ end }} -
    - - - - {{ $item.Title | plainify }} -
    - {{end}} -
    -
    -
    - {{ range $index, $value := first 1 ($item.GetTerms "tags") }} - {{ .Page.LinkTitle }} - {{end}} -
    - -

    - {{- $item.Title -}} - {{if $target}}{{ partial "functions/get_icon" (dict "name" "arrow-top-right-on-square" "attributes" "style=\"height: 1em;\" class=\"inline-flex h-6 w-6 pl-2\"") }}{{end}} - -

    - - -
    -
    - - {{ if .Params.authors }} -
    - {{ range $index, $value := first 1 ($item.GetTerms "authors") }} -
    - {{ $avatar := (.Resources.ByType "image").GetMatch "*avatar*" }} - {{ $authorImage := $avatar.Process "Fill 50x50 Center 95 webp" }} - avatar -
    - - {{- .Page.LinkTitle -}} - -
    - {{end}} - - - {{end}} - -
    -
    - -
    -
    -
    diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/views/card.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/views/card.html deleted file mode 100644 index 5b823962a..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/views/card.html +++ /dev/null @@ -1,32 +0,0 @@ -{{ $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 := $item.Params.image.focal_point | default "Center" }} - - -
    -
    - {{ with $resource }} - {{ $image := .Fill (printf "655x655 %s" $anchor) }} - {{ if ne $image.MediaType.SubType "gif" }}{{ $image = $image.Process "webp" }}{{ end }} - {{ $item.Title | plainify }} - {{end}} -
    -
    -
    {{ $item.Title }}
    -

    - {{ ($item.Params.summary | default $item.Summary) | plainify | htmlUnescape | chomp -}} -

    -

    - {{- $item.Date | time.Format (site.Params.locale.date_format | default ":date_long") -}} -

    -
    -
    -
    diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/views/card.start.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/views/card.start.html deleted file mode 100644 index 05817b193..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/partials/views/card.start.html +++ /dev/null @@ -1 +0,0 @@ -
    diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/questions/list.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/questions/list.html new file mode 100644 index 000000000..f1bbc78eb --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/questions/list.html @@ -0,0 +1,133 @@ +{{- define "main" -}} + +
    + {{ partial "components/sidebar.html" (dict "context" . "no_sidebar" false) }} +
    +
    + + {{ if (.Params.show_breadcrumb | default true) }} +
    + {{ partial "components/breadcrumb.html" . }} +
    + {{ end }} + +
    +

    {{ .Title }}

    + {{ with .Content }} + {{ . }} + {{ end }} +
    + + {{/* Search box for Q&A - Integrated with Pagefind */}} + {{ if site.Params.hugoblox.search.enable }} +
    + +
    + {{ end }} + + {{/* Category filter */}} + {{ $categories := .Site.Taxonomies.categories }} + {{ if $categories }} +
    +

    {{ T "browse_by_category" | default "Browse by Category" }}

    +
    + + {{ T "all" | default "All" }} + + {{ range $name, $taxonomy := $categories }} + + {{ $name }} ({{ $taxonomy.Count }}) + + {{ end }} +
    +
    + {{ end }} + + {{/* Q&A List */}} + {{ $pages := .Pages }} + {{ if .Params.sort_by }} + {{ if eq .Params.sort_by "date" }} + {{ $pages = .Pages.ByDate.Reverse }} + {{ else if eq .Params.sort_by "title" }} + {{ $pages = .Pages.ByTitle }} + {{ else if eq .Params.sort_by "weight" }} + {{ $pages = .Pages.ByWeight }} + {{ end }} + {{ else }} + {{ $pages = .Pages.ByDate.Reverse }} + {{ end }} + + + + {{ if eq (len $pages) 0 }} +
    + + + +

    {{ T "no_questions_yet" | default "No questions yet. Check back soon!" }}

    +
    + {{ end }} + + {{ partial "components/paginator" . }} +
    +
    +
    + +{{- end -}} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/questions/single.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/questions/single.html new file mode 100644 index 000000000..20649aef6 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/questions/single.html @@ -0,0 +1,151 @@ +{{- define "main" -}} + +{{/* Pagefind metadata for search filtering */}} +
    + {{/* Use hidden spans for filter values - best practice per Pagefind docs */}} + questions + {{ with .Params.categories }} + {{ index . 0 }} + {{ end }} + {{ with .Params.difficulty }} + {{ . }} + {{ end }} + +
    + {{ partial "components/sidebar.html" (dict "context" . "no_sidebar" false) }} + {{ partial "components/toc.html" . }} +
    +
    + + {{ if (.Params.show_breadcrumb | default true) }} +
    + {{ partial "components/breadcrumb.html" . }} +
    + {{ end }} + + {{/* Question as title */}} +
    +

    + {{ .Params.question | default .Title }} +

    + + {{/* Metadata */}} +
    + {{ if .Date }} +
    + + + + +
    + {{ end }} + + {{ if .Lastmod }} +
    + + + + Updated {{ .Lastmod.Format "January 2, 2006" }} +
    + {{ end }} + + {{ with .Params.difficulty }} + + {{ . }} + + {{ end }} +
    + + {{/* Tags and Categories */}} +
    + {{ range .Params.tags }} + + #{{ . }} + + {{ end }} + + {{ range .Params.categories }} + + {{ . }} + + {{ end }} +
    +
    + + {{/* Accepted Answer */}} +
    + {{ if .Params.answer }} + {{/* Explicit answer parameter */}} +
    +
    + + + + {{ T "accepted_answer" | default "Accepted Answer" }} +
    + {{ .Params.answer | markdownify }} +
    + {{ end }} + + {{/* Full content */}} +
    + {{ .Content }} +
    +
    + + {{/* Suggested/Additional Answers */}} + {{ with .Params.suggested_answer }} +
    +

    {{ T "other_answers" | default "Other Answers" }}

    + {{ range $index, $answer := . }} +
    + {{ with $answer.author }} +
    + {{ . }} + {{ with $answer.date }} · {{ (time .) | time.Format "January 2, 2006" }}{{ end }} +
    + {{ end }} +
    + {{ $answer.text | markdownify }} +
    + {{ with $answer.upvote_count }} +
    + 👍 {{ . }} {{ T "helpful" | default "helpful" }} +
    + {{ end }} +
    + {{ end }} +
    + {{ end }} + + {{/* Related Q&As */}} + {{ $related := .Site.RegularPages.Related . | first 5 }} + {{ with $related }} +
    +

    {{ T "related_questions" | default "Related Questions" }}

    + +
    + {{ end }} + + {{ partial "components/last-edited.html" . }} + {{ partial "components/next-in-series.html" . }} + {{ partial "components/feedback.html" . }} + {{ partial "comments.html" . }} +
    +
    +
    + +
    {{/* End Pagefind metadata wrapper */}} + +{{- end -}} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_default/rss.xml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/rss.xml similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_default/rss.xml rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/rss.xml diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/shortcodes/callout.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/shortcodes/callout.html deleted file mode 100644 index 32f2e820e..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/shortcodes/callout.html +++ /dev/null @@ -1,32 +0,0 @@ -{{/* - Docs: https://docs.hugoblox.com/reference/markdown/#callouts - - Parameters - ---------- - #0 : optional, positional - Name of the icon to display in the callout component. - Default Hugo Blox Builder available options include "note" and "warning". - Otherwise, you can add your own icon to assets/media/icons/ and reference its name when calling the shortcode. -*/}} -{{ $icon := "information-circle" }} -{{ $class := "bg-primary-100 dark:bg-primary-900" }} -{{ $class_text := "text-primary-600 dark:text-primary-300" }} -{{ with (.Get 0) }} - {{ if eq . "note" }} - {{ $icon = "information-circle" }} - {{ else if eq . "warning" }} - {{ $icon = "exclamation-triangle" }} - {{ $class = "bg-yellow-100 dark:bg-yellow-900" }} - {{ $class_text = "text-red-400" }} - {{ else }} - {{ $icon = . }} - {{end}} -{{end}} -
    - - {{ partial "functions/get_icon" (dict "name" $icon "attributes" "height=\"24\"") }} - - - {{- .Inner | markdownify | emojify -}} - -
    \ No newline at end of file diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/single.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/single.html new file mode 100644 index 000000000..af6ff9d02 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/single.html @@ -0,0 +1,300 @@ +{{ define "main" }} + +{{ $pub_type_csl := "" }} +{{ $pub_type_display := "" }} +{{ if .Params.publication_types }} + {{ if reflect.IsSlice .Params.publication_types }} + {{ $pub_type_csl = index .Params.publication_types 0 }} + {{ $pub_type_display = i18n (printf "pub_%s" (strings.Replace $pub_type_csl "-" "_")) | default (strings.Title $pub_type_csl) }} + {{ end }} +{{ end }} + +{{/* Page Cover */}} +{{ partial "components/cover.html" . }} + +
    + {{ partial "components/sidebar.html" (dict "context" . "no_sidebar" true) }} + {{ partial "components/toc.html" . }} +
    +
    + + {{ if .Params.show_breadcrumb }} +
    + {{ partial "components/breadcrumb.html" . }} +
    + {{ end }} + + {{/* Add spacing if cover has overlapping icon */}} + {{ $cover := partial "functions/get_cover_image.html" . }} + {{ $has_overlap_icon := false }} + {{ if $cover }} + {{ $icon_config := .Params.cover.icon | default (dict) }} + {{ if or $icon_config.name $icon_config.emoji }} + {{ $icon_position := $icon_config.position | default "overlap" }} + {{ if eq $icon_position "overlap" }} + {{ $has_overlap_icon = true }} + {{ end }} + {{ end }} + {{ end }} + +

    + {{/* Inline icon before title if specified */}} + {{ if $cover }} + {{ $icon_config := .Params.cover.icon | default (dict) }} + {{ if or $icon_config.name $icon_config.emoji }} + {{ $icon_position := $icon_config.position | default "overlap" }} + {{ if eq $icon_position "inline" }} + + {{ if $icon_config.emoji }} + {{ $icon_config.emoji }} + {{ else if $icon_config.name }} + + {{ partial "components/icon.html" (dict "name" $icon_config.name "attributes" "class=\"w-full h-full\"") }} + + {{ end }} + {{- .Title -}} + + {{ else }} + {{- .Title -}} + {{ end }} + {{ else }} + {{- .Title -}} + {{ end }} + {{ else }} + {{- .Title -}} + {{ end }} +

    + +
    +
    + {{- if .Date | and (not .Params.hide_date) -}} + {{- .Date | time.Format (site.Params.hugoblox.locale.date_format | default ":date_long") -}} + {{- if .Params.authors }}·{{ end -}} + {{- end -}} + + {{/* Set Alpine.js flag if author notes exist */}} + {{ if isset .Params "author_notes" }} + {{ .Store.Set "has_alpine" true }} + + {{ end }} + + {{ range $i, $slug := .Params.authors }} + {{ $profile := partial "functions/get_author_profile" $slug }} + {{ $avatar := $profile.avatar }} + {{ if and $i (not $avatar) }},{{ end }} +
    + {{ with $avatar }} + {{ $avatar_32 := .Process "Fill 32x32 Center webp" }} + {{ $profile.title }} + {{ end }} +
    {{ $profile.title }}
    +
    + {{/* Add author note tooltip if available */}} + {{- if isset $.Params "author_notes" -}} + {{- with (index $.Params.author_notes $i) -}} + + +
    + {{.}} + +
    +
    + {{- end -}} + {{- end -}} + {{ end }} + + {{ if ne .Params.reading_time false }} + · + + {{ .ReadingTime }} {{ i18n "minute_read" }} + + {{ end }} +
    + +
    + {{ partial "page_links_div.html" . }} +
    +
    + + + + {{ $featured := partial "functions/get_featured_image.html" . }} + {{/* Featured image layout */}} + {{ if and $featured (not .Params.image.preview_only) }} + {{/* Fit image within max size. */}} + {{ $image := $featured }} + + {{/* Determine image placement. */}} + {{ $placement := .Params.image.placement | default 1 }}{{/* Default to full column width. */}} + {{/* Configure responsive processing based on placement */}} + {{ $image_container := "" }} + {{ $responsive_sizes := slice }} + {{ $sizes_attr := "" }} + {{ if eq $placement 2}} + {{ $image_container = "container" }} + {{ $responsive_sizes = slice 480 768 1024 1200 1600 }} + {{ $sizes_attr = "(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1200px) 80vw, 1200px" }} + {{else if eq $placement 3}} + {{ $image_container = "container-fluid" }} + {{ $responsive_sizes = slice 768 1024 1366 1920 2560 }} + {{ $sizes_attr = "(max-width: 768px) 100vw, (max-width: 1366px) 90vw, (max-width: 1920px) 80vw, 2560px" }} + {{else}} + {{ $image_container = "article-container" }} + {{ $responsive_sizes = slice 320 480 640 720 960 }} + {{ $sizes_attr = "(max-width: 480px) 100vw, (max-width: 640px) 90vw, (max-width: 720px) 80vw, 720px" }} + {{end}} + + {{/* Process featured image using utility with placement-specific constraints */}} + {{ if ne $featured.MediaType.SubType "gif" }} + {{/* Pre-fit image to placement constraints, then apply responsive processing */}} + {{ $fitted_image := $featured }} + {{ if eq $placement 2}} + {{ $fitted_image = $featured.Fit "1200x2500" }} + {{else if eq $placement 3}} + {{ $fitted_image = $featured.Fit "2560x2560" }} + {{else}} + {{ $fitted_image = $featured.Fit "720x2500" }} + {{end}} + + {{ $responsive := partial "functions/process_responsive_image.html" (dict + "image" $fitted_image + "mode" "responsive" + "sizes" $responsive_sizes + ) }} + + {{/* Featured image - use fitted image dimensions for container, responsive for srcset */}} +
    +
    + {{ with $.Params.image.alt_text }}{{.}}{{ end }} + {{ with $.Params.image.caption }}{{ . | markdownify | emojify }}{{ end }} +
    +
    + {{ else }} + {{/* Handle GIF - apply same placement constraints without responsive processing */}} + {{ $image := $featured }} + {{ if eq $placement 2}} + {{ $image = $featured.Fit "1200x2500" }} + {{else if eq $placement 3}} + {{ $image = $featured.Fit "2560x2560" }} + {{else}} + {{ $image = $featured.Fit "720x2500" }} + {{end}} +
    +
    + {{ with $.Params.image.alt_text }}{{.}}{{ end }} + {{ with $.Params.image.caption }}{{ . | markdownify | emojify }}{{ end }} +
    +
    + {{ end }} + {{end}} + + {{/* EVENT / PUBLICATION METADATA */}} + {{ if .Params.abstract | or (eq .Type "publications") | or (eq .Type "events") }} +
    + + {{ if .Params.abstract }} +
    {{ i18n "abstract" }}
    +
    {{ .Params.abstract | markdownify }}
    + {{ end }} + + {{/* If the type is Uncategorized, hide the type. */}} + {{ if $pub_type_display }} +
    {{ i18n "publication_type" }}
    +
    + {{ if and .Params.publication_types (gt (len .Params.publication_types) 0) }} + + {{ $pub_type_display }} + + {{ end }} +
    + {{ end }} + + {{ if .Params.publication }} +
    {{ i18n "publication" }}
    +
    {{ .Params.publication | markdownify }}
    + {{ end }} + + {{ if eq .Type "events" }} +
    {{ i18n "date" }}
    +
    + {{ partial "functions/get_event_dates" . }} +
    + {{ end }} + + {{ if .Params.event }} +
    {{ i18n "event" }}
    + + {{ end }} + + {{ if .Params.location }} +
    {{ i18n "location" }}
    +
    +

    {{ .Params.location | markdownify }}

    + {{ if .Params.address }} +

    {{partial "functions/get_address" (dict "root" . "address" .Params.address) }}

    + {{end}} +
    + {{ end }} + +
    + {{ end }} + +
    + {{ .Content }} +
    + + {{ partial "components/last-edited.html" . }} + +
    + {{ .Scratch.Set "invert_pager" true }} + {{ partial "page_footer" . }} +
    + +
    +
    +
    +{{ end }} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_default/_markup/sitemap.xml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/sitemap.xml similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_default/_markup/sitemap.xml rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/sitemap.xml diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/taxonomy.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/taxonomy.html new file mode 100644 index 000000000..958d40201 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/taxonomy.html @@ -0,0 +1,37 @@ +{{ define "main" }} + +{{/* Exclude taxonomy pages from search indexing */}} +
    + +
    +
    +

    {{ .Title }}

    + {{ .Content }} +
    +
    + +
    + +
    + {{- $type := .Type }} + {{- range $key, $value := .Data.Terms.Alphabetical }} + {{- $name := .Name }} + {{- $count := .Count }} + {{- with site.GetPage (printf "/%s/%s" $type $name) }} + + + {{ .Title }} + + {{ $count }} + + + + {{- end }} + {{- end }} +
    + +
    + +
    {{/* End pagefind-ignore wrapper */}} + +{{- end -}} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_default/terms.html b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/terms.html similarity index 82% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_default/terms.html rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/terms.html index bbd10d620..cad0fa21c 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/_default/terms.html +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/layouts/terms.html @@ -1,6 +1,9 @@ {{ define "main" }} -
    +{{/* Exclude taxonomy term listing pages from search indexing */}} +
    + +
    +
    {{/* End pagefind-ignore wrapper */}} + {{- end -}} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/package.json b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/package.json index 55ba48c6a..ec6985249 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/package.json +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/package.json @@ -1,36 +1,22 @@ { + "name": "@hugoblox/blox-tailwind", + "version": "1.0.0", + "description": "Hugo Blox Tailwind UI Components", + "type": "module", + "scripts": { + "dev": "hugo server --source=../../test --config=../../test/config.yaml --themesDir=../.. --buildDrafts --buildFuture --disableFastRender", + "build": "hugo --source=../../test --config=../../test/config.yaml --themesDir=../.. --minify", + "type-check": "tsc --noEmit", + "lint": "biome check ." + }, "dependencies": { - "@tailwindcss/nesting": "0.0.0-insiders.565cd3e", - "alpinejs": "^3.13.10", - "dotenv": "^16.3.1", - "katex": "^0.16.9", - "markmap-autoloader": "^0.15.4", - "mermaid": "^10.6.0", - "plotly.js": "^2.27.0", - "vite": "^4.5.0", - "vite-plugin-static-copy": "^0.17.0" }, "devDependencies": { - "@tailwindcss/typography": "^0.5.10", - "autoprefixer": "^10.4.8", - "postcss": "^8.4.16", - "postcss-cli": "^10.0.0", - "postcss-import": "^14.1.0", - "tailwindcss": "^3.3.5" - }, - "license": "MIT", - "name": "blox-tailwind", - "description": "Tailwind UI for Hugo", - "homepage": "https://hugoblox.com", - "repository": { - "type": "git", - "url": "https://github.com/HugoBlox/hugo-blox-builder.git" - }, - "scripts": { - "build:styles": "npx tailwindcss -i ./assets/css/styles.css -o ./assets/dist/wc.min.css --minify", - "build:starter:styles": "npx tailwindcss -i ./assets/css/styles.css -o ../../starters/${HB_TPL}/assets/dist/wc.min.css --minify", - "assets:dist": "vite build" + "@preact/preset-vite": "^2.8.1", + "@types/node": "^20.10.5", + "typescript": "^5.3.3" }, - "browserslist": "last 2 versions", - "version": "0.1.0" -} + "engines": { + "node": ">=20.0.0" + } +} \ No newline at end of file diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/pnpm-lock.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/pnpm-lock.yaml index 7aa15d71c..9efba594a 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/pnpm-lock.yaml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/pnpm-lock.yaml @@ -8,3942 +8,1351 @@ importers: .: dependencies: - '@tailwindcss/nesting': - specifier: 0.0.0-insiders.565cd3e - version: 0.0.0-insiders.565cd3e(postcss@8.4.31) - alpinejs: - specifier: ^3.13.10 - version: 3.13.10 - dotenv: - specifier: ^16.3.1 - version: 16.3.1 - katex: - specifier: ^0.16.9 - version: 0.16.9 - markmap-autoloader: - specifier: ^0.15.4 - version: 0.15.4(markmap-common@0.15.3) - mermaid: - specifier: ^10.6.0 - version: 10.6.0 - plotly.js: - specifier: ^2.27.0 - version: 2.27.0 - vite: - specifier: ^4.5.0 - version: 4.5.0 - vite-plugin-static-copy: - specifier: ^0.17.0 - version: 0.17.0(vite@4.5.0) + preact: + specifier: ^10.19.3 + version: 10.27.2 + preact-render-to-string: + specifier: ^6.3.1 + version: 6.6.1(preact@10.27.2) devDependencies: - '@tailwindcss/typography': - specifier: ^0.5.10 - version: 0.5.10(tailwindcss@3.3.5) - autoprefixer: - specifier: ^10.4.8 - version: 10.4.16(postcss@8.4.31) - postcss: - specifier: ^8.4.16 - version: 8.4.31 - postcss-cli: - specifier: ^10.0.0 - version: 10.1.0(postcss@8.4.31) - postcss-import: - specifier: ^14.1.0 - version: 14.1.0(postcss@8.4.31) - tailwindcss: - specifier: ^3.3.5 - version: 3.3.5 + '@preact/preset-vite': + specifier: ^2.8.1 + version: 2.10.2(@babel/core@7.28.4)(preact@10.27.2)(vite@7.1.2(@types/node@20.19.16)(jiti@2.5.1)(lightningcss@1.30.1)) + '@types/node': + specifier: ^20.10.5 + version: 20.19.16 + typescript: + specifier: ^5.3.3 + version: 5.9.2 packages: - '@alloc/quick-lru@5.2.0': - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.28.4': + resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.28.4': + resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.28.3': + resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.27.3': + resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.27.2': + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.27.1': + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.28.3': + resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.27.1': + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + engines: {node: '>=6.9.0'} - '@babel/runtime@7.23.2': - resolution: {integrity: sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==} + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} - '@braintree/sanitize-url@6.0.4': - resolution: {integrity: sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==} + '@babel/helpers@7.28.4': + resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} + engines: {node: '>=6.9.0'} - '@choojs/findup@0.2.1': - resolution: {integrity: sha512-YstAqNb0MCN8PjdLCDfRsBcGVRN41f3vgLvaI0IrIcBp4AqILRSS0DeWNGkicC+f/zRIPJLc+9RURVSepwvfBw==} + '@babel/parser@7.28.4': + resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} + engines: {node: '>=6.0.0'} hasBin: true - '@esbuild/android-arm64@0.18.20': - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} - engines: {node: '>=12'} + '@babel/plugin-syntax-jsx@7.27.1': + resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-development@7.27.1': + resolution: {integrity: sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx@7.27.1': + resolution: {integrity: sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.28.4': + resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.28.4': + resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} + engines: {node: '>=6.9.0'} + + '@esbuild/aix-ppc64@0.25.9': + resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.9': + resolution: {integrity: sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==} + engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.18.20': - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} - engines: {node: '>=12'} + '@esbuild/android-arm@0.25.9': + resolution: {integrity: sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==} + engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.18.20': - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} - engines: {node: '>=12'} + '@esbuild/android-x64@0.25.9': + resolution: {integrity: sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==} + engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.18.20': - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} - engines: {node: '>=12'} + '@esbuild/darwin-arm64@0.25.9': + resolution: {integrity: sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==} + engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.18.20': - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} - engines: {node: '>=12'} + '@esbuild/darwin-x64@0.25.9': + resolution: {integrity: sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==} + engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.18.20': - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} - engines: {node: '>=12'} + '@esbuild/freebsd-arm64@0.25.9': + resolution: {integrity: sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==} + engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.18.20': - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} - engines: {node: '>=12'} + '@esbuild/freebsd-x64@0.25.9': + resolution: {integrity: sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==} + engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.18.20': - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} - engines: {node: '>=12'} + '@esbuild/linux-arm64@0.25.9': + resolution: {integrity: sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==} + engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.18.20': - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} - engines: {node: '>=12'} + '@esbuild/linux-arm@0.25.9': + resolution: {integrity: sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==} + engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.18.20': - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} - engines: {node: '>=12'} + '@esbuild/linux-ia32@0.25.9': + resolution: {integrity: sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==} + engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.18.20': - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} - engines: {node: '>=12'} + '@esbuild/linux-loong64@0.25.9': + resolution: {integrity: sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==} + engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.18.20': - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} - engines: {node: '>=12'} + '@esbuild/linux-mips64el@0.25.9': + resolution: {integrity: sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==} + engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.18.20': - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} - engines: {node: '>=12'} + '@esbuild/linux-ppc64@0.25.9': + resolution: {integrity: sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==} + engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.18.20': - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} - engines: {node: '>=12'} + '@esbuild/linux-riscv64@0.25.9': + resolution: {integrity: sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==} + engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.18.20': - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} - engines: {node: '>=12'} + '@esbuild/linux-s390x@0.25.9': + resolution: {integrity: sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==} + engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.18.20': - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} - engines: {node: '>=12'} + '@esbuild/linux-x64@0.25.9': + resolution: {integrity: sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==} + engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-x64@0.18.20': - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} - engines: {node: '>=12'} + '@esbuild/netbsd-arm64@0.25.9': + resolution: {integrity: sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.9': + resolution: {integrity: sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==} + engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-x64@0.18.20': - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} - engines: {node: '>=12'} + '@esbuild/openbsd-arm64@0.25.9': + resolution: {integrity: sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.9': + resolution: {integrity: sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==} + engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.18.20': - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} - engines: {node: '>=12'} + '@esbuild/openharmony-arm64@0.25.9': + resolution: {integrity: sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.25.9': + resolution: {integrity: sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==} + engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.18.20': - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} - engines: {node: '>=12'} + '@esbuild/win32-arm64@0.25.9': + resolution: {integrity: sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==} + engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.18.20': - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} - engines: {node: '>=12'} + '@esbuild/win32-ia32@0.25.9': + resolution: {integrity: sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==} + engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.18.20': - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} - engines: {node: '>=12'} + '@esbuild/win32-x64@0.25.9': + resolution: {integrity: sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==} + engines: {node: '>=18'} cpu: [x64] os: [win32] - '@gera2ld/jsx-dom@2.2.2': - resolution: {integrity: sha512-EOqf31IATRE6zS1W1EoWmXZhGfLAoO9FIlwTtHduSrBdud4npYBxYAkv8dZ5hudDPwJeeSjn40kbCL4wAzr8dA==} + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} - '@jridgewell/gen-mapping@0.3.3': - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} '@jridgewell/resolve-uri@3.1.1': resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} - '@jridgewell/set-array@1.1.2': - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - - '@jridgewell/trace-mapping@0.3.20': - resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} - - '@mapbox/geojson-rewind@0.5.2': - resolution: {integrity: sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==} - hasBin: true - - '@mapbox/geojson-types@1.0.2': - resolution: {integrity: sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw==} + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@mapbox/jsonlint-lines-primitives@2.0.2': - resolution: {integrity: sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==} - engines: {node: '>= 0.6'} + '@jridgewell/trace-mapping@0.3.30': + resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} - '@mapbox/mapbox-gl-supported@1.5.0': - resolution: {integrity: sha512-/PT1P6DNf7vjEEiPkVIRJkvibbqWtqnyGaBz3nfRdcxclNSnSdaLU5tfAgcD7I8Yt5i+L19s406YLl1koLnLbg==} + '@preact/preset-vite@2.10.2': + resolution: {integrity: sha512-K9wHlJOtkE+cGqlyQ5v9kL3Ge0Ql4LlIZjkUTL+1zf3nNdF88F9UZN6VTV8jdzBX9Fl7WSzeNMSDG7qECPmSmg==} peerDependencies: - mapbox-gl: '>=0.32.1 <2.0.0' - - '@mapbox/point-geometry@0.1.0': - resolution: {integrity: sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==} - - '@mapbox/tiny-sdf@1.2.5': - resolution: {integrity: sha512-cD8A/zJlm6fdJOk6DqPUV8mcpyJkRz2x2R+/fYcWDYG3oWbG7/L7Yl/WqQ1VZCjnL9OTIMAn6c+BC5Eru4sQEw==} - - '@mapbox/unitbezier@0.0.0': - resolution: {integrity: sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==} - - '@mapbox/vector-tile@1.3.1': - resolution: {integrity: sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==} - - '@mapbox/whoots-js@3.1.0': - resolution: {integrity: sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==} - engines: {node: '>=6.0.0'} - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + '@babel/core': 7.x + vite: 2.x || 3.x || 4.x || 5.x || 6.x || 7.x - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@plotly/d3-sankey-circular@0.33.1': - resolution: {integrity: sha512-FgBV1HEvCr3DV7RHhDsPXyryknucxtfnLwPtCKKxdolKyTFYoLX/ibEfX39iFYIL7DYbVeRtP43dbFcrHNE+KQ==} - - '@plotly/d3-sankey@0.7.2': - resolution: {integrity: sha512-2jdVos1N3mMp3QW0k2q1ph7Gd6j5PY1YihBrwpkFnKqO+cqtZq3AdEYUeSGXMeLsBDQYiqTVcihYfk8vr5tqhw==} - - '@plotly/d3@3.8.1': - resolution: {integrity: sha512-x49ThEu1FRA00kTso4Jdfyf2byaCPLBGmLjAYQz5OzaPyLUhHesX3/Nfv2OHEhynhdy2UB39DLXq6thYe2L2kg==} - - '@plotly/point-cluster@3.1.9': - resolution: {integrity: sha512-MwaI6g9scKf68Orpr1pHZ597pYx9uP8UEFXLPbsCmuw3a84obwz6pnMXGc90VhgDNeNiLEdlmuK7CPo+5PIxXw==} - - '@plotly/regl@2.1.2': - resolution: {integrity: sha512-Mdk+vUACbQvjd0m/1JJjOOafmkp/EpmHjISsopEz5Av44CBq7rPC05HHNbYGKVyNUF2zmEoBS/TT0pd0SPFFyw==} - - '@tailwindcss/nesting@0.0.0-insiders.565cd3e': - resolution: {integrity: sha512-WhHoFBx19TnH/c+xLwT/sxei6+4RpdfiyG3MYXfmLaMsADmVqBkF7B6lDalgZD9YdM459MF7DtxVbWkOrV7IaQ==} - peerDependencies: - postcss: ^8.2.15 + '@prefresh/babel-plugin@0.5.2': + resolution: {integrity: sha512-AOl4HG6dAxWkJ5ndPHBgBa49oo/9bOiJuRDKHLSTyH+Fd9x00shTXpdiTj1W41l6oQIwUOAgJeHMn4QwIDpHkA==} - '@tailwindcss/typography@0.5.10': - resolution: {integrity: sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw==} + '@prefresh/core@1.5.7': + resolution: {integrity: sha512-AsyeitiPwG7UkT0mqgKzIDuydmYSKtBlzXEb5ymzskvxewcmVGRjQkcHDy6PCNBT7soAyHpQ0mPgXX4IeyOlUg==} peerDependencies: - tailwindcss: '>=3.0.0 || insiders' + preact: ^10.0.0 || ^11.0.0-0 - '@turf/area@6.5.0': - resolution: {integrity: sha512-xCZdiuojokLbQ+29qR6qoMD89hv+JAgWjLrwSEWL+3JV8IXKeNFl6XkEJz9HGkVpnXvQKJoRz4/liT+8ZZ5Jyg==} + '@prefresh/utils@1.2.1': + resolution: {integrity: sha512-vq/sIuN5nYfYzvyayXI4C2QkprfNaHUQ9ZX+3xLD8nL3rWyzpxOm1+K7RtMbhd+66QcaISViK7amjnheQ/4WZw==} - '@turf/bbox@6.5.0': - resolution: {integrity: sha512-RBbLaao5hXTYyyg577iuMtDB8ehxMlUqHEJiMs8jT1GHkFhr6sYre3lmLsPeYEi/ZKj5TP5tt7fkzNdJ4GIVyw==} - - '@turf/centroid@6.5.0': - resolution: {integrity: sha512-MwE1oq5E3isewPprEClbfU5pXljIK/GUOMbn22UM3IFPDJX0KeoyLNwghszkdmFp/qMGL/M13MMWvU+GNLXP/A==} - - '@turf/helpers@6.5.0': - resolution: {integrity: sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw==} - - '@turf/meta@6.5.0': - resolution: {integrity: sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA==} + '@prefresh/vite@2.4.10': + resolution: {integrity: sha512-lt+ODASOtXRWaPplp7/DlrgAaInnQYNvcpCglQBMx2OeJPyZ4IqPRaxsK77w96mWshjYwkqTsRSHoAM7aAn0ow==} + peerDependencies: + preact: ^10.4.0 || ^11.0.0-0 + vite: '>=2.0.0' - '@types/d3-scale-chromatic@3.0.1': - resolution: {integrity: sha512-Ob7OrwiTeQXY/WBBbRHGZBOn6rH1h7y3jjpTSKYqDEeqFjktql6k2XSgNwLrLDmAsXhEn8P9NHDY4VTuo0ZY1w==} + '@rollup/pluginutils@4.2.1': + resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} + engines: {node: '>= 8.0.0'} - '@types/d3-scale@4.0.6': - resolution: {integrity: sha512-lo3oMLSiqsQUovv8j15X4BNEDOsnHuGjeVg7GRbAuB2PUa1prK5BNSOu6xixgNf3nqxPl4I1BqJWrPvFGlQoGQ==} + '@rollup/rollup-android-arm-eabi@4.46.2': + resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==} + cpu: [arm] + os: [android] - '@types/d3-time@3.0.2': - resolution: {integrity: sha512-kbdRXTmUgNfw5OTE3KZnFQn6XdIc4QGroN5UixgdrXATmYsdlPQS6pEut9tVlIojtzuFD4txs/L+Rq41AHtLpg==} + '@rollup/rollup-android-arm64@4.46.2': + resolution: {integrity: sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==} + cpu: [arm64] + os: [android] - '@types/debug@4.1.10': - resolution: {integrity: sha512-tOSCru6s732pofZ+sMv9o4o3Zc+Sa8l3bxd/tweTQudFn06vAzb13ZX46Zi6m6EJ+RUbRTHvgQJ1gBtSgkaUYA==} + '@rollup/rollup-darwin-arm64@4.46.2': + resolution: {integrity: sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==} + cpu: [arm64] + os: [darwin] - '@types/mdast@3.0.14': - resolution: {integrity: sha512-gVZ04PGgw1qLZKsnWnyFv4ORnaJ+DXLdHTVSFbU8yX6xZ34Bjg4Q32yPkmveUP1yItXReKfB0Aknlh/3zxTKAw==} + '@rollup/rollup-darwin-x64@4.46.2': + resolution: {integrity: sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==} + cpu: [x64] + os: [darwin] - '@types/ms@0.7.33': - resolution: {integrity: sha512-AuHIyzR5Hea7ij0P9q7vx7xu4z0C28ucwjAZC0ja7JhINyCnOw8/DnvAPQQ9TfOlCtZAmCERKQX9+o1mgQhuOQ==} + '@rollup/rollup-freebsd-arm64@4.46.2': + resolution: {integrity: sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==} + cpu: [arm64] + os: [freebsd] - '@types/unist@2.0.9': - resolution: {integrity: sha512-zC0iXxAv1C1ERURduJueYzkzZ2zaGyc+P2c95hgkikHPr3z8EdUZOlgEQ5X0DRmwDZn+hekycQnoeiiRVrmilQ==} + '@rollup/rollup-freebsd-x64@4.46.2': + resolution: {integrity: sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==} + cpu: [x64] + os: [freebsd] - '@vue/reactivity@3.1.5': - resolution: {integrity: sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg==} + '@rollup/rollup-linux-arm-gnueabihf@4.46.2': + resolution: {integrity: sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==} + cpu: [arm] + os: [linux] - '@vue/shared@3.1.5': - resolution: {integrity: sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA==} + '@rollup/rollup-linux-arm-musleabihf@4.46.2': + resolution: {integrity: sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==} + cpu: [arm] + os: [linux] - abs-svg-path@0.1.1: - resolution: {integrity: sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA==} + '@rollup/rollup-linux-arm64-gnu@4.46.2': + resolution: {integrity: sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==} + cpu: [arm64] + os: [linux] - acorn@7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} - engines: {node: '>=0.4.0'} - hasBin: true + '@rollup/rollup-linux-arm64-musl@4.46.2': + resolution: {integrity: sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==} + cpu: [arm64] + os: [linux] - almost-equal@1.1.0: - resolution: {integrity: sha512-0V/PkoculFl5+0Lp47JoxUcO0xSxhIBvm+BxHdD/OgXNmdRpRHCFnKVuUoWyS9EzQP+otSGv0m9Lb4yVkQBn2A==} + '@rollup/rollup-linux-loongarch64-gnu@4.46.2': + resolution: {integrity: sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==} + cpu: [loong64] + os: [linux] - alpinejs@3.13.10: - resolution: {integrity: sha512-86RB307VWICex0vG15Eq0x058cNNsvS57ohrjN6n/TJAVSFV+zXOK/E34nNHDHc6Poq+yTNCLqEzPqEkRBTMRQ==} + '@rollup/rollup-linux-ppc64-gnu@4.46.2': + resolution: {integrity: sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==} + cpu: [ppc64] + os: [linux] - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} + '@rollup/rollup-linux-riscv64-gnu@4.46.2': + resolution: {integrity: sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==} + cpu: [riscv64] + os: [linux] - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + '@rollup/rollup-linux-riscv64-musl@4.46.2': + resolution: {integrity: sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==} + cpu: [riscv64] + os: [linux] - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + '@rollup/rollup-linux-s390x-gnu@4.46.2': + resolution: {integrity: sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==} + cpu: [s390x] + os: [linux] - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} + '@rollup/rollup-linux-x64-gnu@4.46.2': + resolution: {integrity: sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==} + cpu: [x64] + os: [linux] - arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + '@rollup/rollup-linux-x64-musl@4.46.2': + resolution: {integrity: sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==} + cpu: [x64] + os: [linux] - array-bounds@1.0.1: - resolution: {integrity: sha512-8wdW3ZGk6UjMPJx/glyEt0sLzzwAE1bhToPsO1W2pbpR2gULyxe3BjSiuJFheP50T/GgODVPz2fuMUmIywt8cQ==} + '@rollup/rollup-win32-arm64-msvc@4.46.2': + resolution: {integrity: sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==} + cpu: [arm64] + os: [win32] - array-find-index@1.0.2: - resolution: {integrity: sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==} - engines: {node: '>=0.10.0'} + '@rollup/rollup-win32-ia32-msvc@4.46.2': + resolution: {integrity: sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==} + cpu: [ia32] + os: [win32] - array-normalize@1.1.4: - resolution: {integrity: sha512-fCp0wKFLjvSPmCn4F5Tiw4M3lpMZoHlCjfcs7nNzuj3vqQQ1/a8cgB9DXcpDSn18c+coLnaW7rqfcYCvKbyJXg==} + '@rollup/rollup-win32-x64-msvc@4.46.2': + resolution: {integrity: sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==} + cpu: [x64] + os: [win32] - array-range@1.0.1: - resolution: {integrity: sha512-shdaI1zT3CVNL2hnx9c0JMc0ZogGaxDs5e85akgHWKYa0yVbIyp06Ind3dVkTj/uuFrzaHBOyqFzo+VV6aXgtA==} + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - array-rearrange@2.2.2: - resolution: {integrity: sha512-UfobP5N12Qm4Qu4fwLDIi2v6+wZsSf6snYSxAMeKhrh37YGnNWZPRmVEKc/2wfms53TLQnzfpG8wCx2Y/6NG1w==} + '@types/node@20.19.16': + resolution: {integrity: sha512-VS6TTONVdgwJwtJr7U+ghEjpfmQdqehLLpg/iMYGOd1+ilaFjdBJwFuPggJ4EAYPDCzWfDUHoIxyVnu+tOWVuQ==} - autoprefixer@10.4.16: - resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true + babel-plugin-transform-hook-names@1.0.2: + resolution: {integrity: sha512-5gafyjyyBTTdX/tQQ0hRgu4AhNHG/hqWi0ZZmg2xvs2FgRkJXzDNKBZCyoYqgFkovfDrgM8OoKg8karoUvWeCw==} peerDependencies: - postcss: ^8.1.0 - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - - binary-search-bounds@2.0.5: - resolution: {integrity: sha512-H0ea4Fd3lS1+sTEB2TgcLoK21lLhwEJzlQv3IN47pJS976Gx4zoWe0ak3q+uYh60ppQxg9F16Ri4tS1sfD4+jA==} - - bit-twiddle@1.0.2: - resolution: {integrity: sha512-B9UhK0DKFZhoTFcfvAzhqsjStvGJp9vYWf3+6SNTtdSQnvIgfkHbgHrg/e4+TH71N2GDu8tpmCVoyfrL1d7ntA==} - - bitmap-sdf@1.0.4: - resolution: {integrity: sha512-1G3U4n5JE6RAiALMxu0p1XmeZkTeCwGKykzsLTCqVzfSDaN6S7fKnkIkfejogz+iwqBWc0UYAIKnKHNN7pSfDg==} + '@babel/core': ^7.12.10 - bl@2.2.1: - resolution: {integrity: sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==} - - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + baseline-browser-mapping@2.8.5: + resolution: {integrity: sha512-TiU4qUT9jdCuh4aVOG7H1QozyeI2sZRqoRPdqBIaslfNt4WUSanRBueAwl2x5jt4rXBMim3lIN2x6yT8PDi24Q==} + hasBin: true - braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - browserslist@4.22.1: - resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} + browserslist@4.26.2: + resolution: {integrity: sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - - camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - - caniuse-lite@1.0.30001554: - resolution: {integrity: sha512-A2E3U//MBwbJVzebddm1YfNp7Nud5Ip+IPn4BozBmn4KqVX7AvluoIDFWjsv5OkGnKUXQVmMSoMKLa3ScCblcQ==} - - canvas-fit@1.5.0: - resolution: {integrity: sha512-onIcjRpz69/Hx5bB5HGbYKUF2uC6QT6Gp+pfpGm3A7mPfcluSLV5v4Zu+oflDUwLdUw0rLIBhUbi0v8hM4FJQQ==} - - character-entities@2.0.2: - resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + caniuse-lite@1.0.30001743: + resolution: {integrity: sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw==} - chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - clamp@1.0.1: - resolution: {integrity: sha512-kgMuFyE78OC6Dyu3Dy7vcx4uy97EIbVxJB/B0eJ3bUNAkwdNcxYzgKltnyADiYwsR7SEqkkUPsEUT//OVS6XMA==} + css-select@5.2.2: + resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - - color-alpha@1.0.4: - resolution: {integrity: sha512-lr8/t5NPozTSqli+duAN+x+no/2WaKTeWvxhHGN+aXT6AJ8vPlzLa7UriyjWak0pSC2jHol9JgjBYnnHsGha9A==} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-id@1.1.0: - resolution: {integrity: sha512-2iRtAn6dC/6/G7bBIo0uupVrIne1NsQJvJxZOBCzQOfk7jRq97feaDZ3RdzuHakRXXnHGNwglto3pqtRx1sX0g==} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - color-normalize@1.5.0: - resolution: {integrity: sha512-rUT/HDXMr6RFffrR53oX3HGWkDOP9goSAQGBkUaAYKjOE2JxozccdGyufageWDlInRAjm/jYPrf/Y38oa+7obw==} - - color-parse@1.3.8: - resolution: {integrity: sha512-1Y79qFv0n1xair3lNMTNeoFvmc3nirMVBij24zbs1f13+7fPpQClMg5b4AuKXLt3szj7BRlHMCXHplkce6XlmA==} - - color-rgba@2.1.1: - resolution: {integrity: sha512-VaX97wsqrMwLSOR6H7rU1Doa2zyVdmShabKrPEIFywLlHoibgD3QW9Dw6fSqM4+H/LfjprDNAUUW31qEQcGzNw==} - - color-space@1.16.0: - resolution: {integrity: sha512-A6WMiFzunQ8KEPFmj02OnnoUnqhmSaHaZ/0LVFcPTdlvm8+3aMJ5x1HRHy3bDHPkovkf4sS0f4wsVvwk71fKkg==} - - commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + css-what@6.2.2: + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} engines: {node: '>= 6'} - commander@7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} - engines: {node: '>= 10'} - - commander@8.3.0: - resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} - engines: {node: '>= 12'} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - concat-stream@1.6.2: - resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} - engines: {'0': node >= 0.8} - - core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - - cose-base@1.0.3: - resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==} - - cose-base@2.2.0: - resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==} - - country-regex@1.1.0: - resolution: {integrity: sha512-iSPlClZP8vX7MC3/u6s3lrDuoQyhQukh5LyABJ3hvfzbQ3Yyayd4fp04zjLnfi267B/B2FkumcWWgrbban7sSA==} - - css-font-size-keywords@1.0.0: - resolution: {integrity: sha512-Q+svMDbMlelgCfH/RVDKtTDaf5021O486ZThQPIpahnIjUkMUslC+WuOQSWTgGSrNCH08Y7tYNEmmy0hkfMI8Q==} - - css-font-stretch-keywords@1.0.1: - resolution: {integrity: sha512-KmugPO2BNqoyp9zmBIUGwt58UQSfyk1X5DbOlkb2pckDXFSAfjsD5wenb88fNrD6fvS+vu90a/tsPpb9vb0SLg==} - - css-font-style-keywords@1.0.1: - resolution: {integrity: sha512-0Fn0aTpcDktnR1RzaBYorIxQily85M2KXRpzmxQPgh8pxUN9Fcn00I8u9I3grNr1QXVgCl9T5Imx0ZwKU973Vg==} - - css-font-weight-keywords@1.0.0: - resolution: {integrity: sha512-5So8/NH+oDD+EzsnF4iaG4ZFHQ3vaViePkL1ZbZ5iC/KrsCY+WHq/lvOgrtmuOQ9pBBZ1ADGpaf+A4lj1Z9eYA==} - - css-font@1.2.0: - resolution: {integrity: sha512-V4U4Wps4dPDACJ4WpgofJ2RT5Yqwe1lEH6wlOOaIxMi0gTjdIijsc5FmxQlZ7ZZyKQkkutqqvULOp07l9c7ssA==} - - css-global-keywords@1.0.1: - resolution: {integrity: sha512-X1xgQhkZ9n94WDwntqst5D/FKkmiU0GlJSFZSV3kLvyJ1WC5VeyoXDOuleUD+SIuH9C7W05is++0Woh0CGfKjQ==} - - css-system-font-keywords@1.0.0: - resolution: {integrity: sha512-1umTtVd/fXS25ftfjB71eASCrYhilmEsvDEI6wG/QplnmlfmVM5HkZ/ZX46DT5K3eblFPgLUHt5BRCb0YXkSFA==} - - csscolorparser@1.0.3: - resolution: {integrity: sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==} - - cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - - cytoscape-cose-bilkent@4.1.0: - resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} - peerDependencies: - cytoscape: ^3.2.0 - - cytoscape-fcose@2.2.0: - resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==} + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} peerDependencies: - cytoscape: ^3.2.0 - - cytoscape@3.26.0: - resolution: {integrity: sha512-IV+crL+KBcrCnVVUCZW+zRRRFUZQcrtdOPXki+o4CFUWLdAEYvuZLcBSJC9EBK++suamERKzeY7roq2hdovV3w==} - engines: {node: '>=0.10'} - - d3-array@1.2.4: - resolution: {integrity: sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==} - - d3-array@2.12.1: - resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} - - d3-array@3.2.4: - resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} - engines: {node: '>=12'} - - d3-axis@3.0.0: - resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==} - engines: {node: '>=12'} - - d3-brush@3.0.0: - resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==} - engines: {node: '>=12'} - - d3-chord@3.0.1: - resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==} - engines: {node: '>=12'} + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true - d3-collection@1.0.7: - resolution: {integrity: sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==} + detect-libc@2.0.4: + resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} + engines: {node: '>=8'} - d3-color@3.1.0: - resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} - engines: {node: '>=12'} + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} - d3-contour@4.0.2: - resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==} - engines: {node: '>=12'} + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - d3-delaunay@6.0.4: - resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==} - engines: {node: '>=12'} + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} - d3-dispatch@1.0.6: - resolution: {integrity: sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==} + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} - d3-dispatch@3.0.1: - resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} - engines: {node: '>=12'} + electron-to-chromium@1.5.221: + resolution: {integrity: sha512-/1hFJ39wkW01ogqSyYoA4goOXOtMRy6B+yvA1u42nnsEGtHzIzmk93aPISumVQeblj47JUHLC9coCjUxb1EvtQ==} - d3-drag@3.0.0: - resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} - engines: {node: '>=12'} + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} - d3-dsv@3.0.1: - resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} - engines: {node: '>=12'} + esbuild@0.25.9: + resolution: {integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==} + engines: {node: '>=18'} hasBin: true - d3-ease@3.0.1: - resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} - engines: {node: '>=12'} - - d3-fetch@3.0.1: - resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==} - engines: {node: '>=12'} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} - d3-force@1.2.1: - resolution: {integrity: sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==} + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - d3-force@3.0.0: - resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} - engines: {node: '>=12'} + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true - d3-format@1.4.5: - resolution: {integrity: sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==} + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] - d3-format@3.1.0: - resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} - engines: {node: '>=12'} + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} - d3-geo-projection@2.9.0: - resolution: {integrity: sha512-ZULvK/zBn87of5rWAfFMc9mJOipeSo57O+BBitsKIXmU4rTVAnX1kSsJkE0R+TxY8pGNoM1nbyRRE7GYHhdOEQ==} + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true - d3-geo@1.12.1: - resolution: {integrity: sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==} - - d3-geo@3.1.0: - resolution: {integrity: sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==} - engines: {node: '>=12'} - - d3-hierarchy@1.1.9: - resolution: {integrity: sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==} - - d3-hierarchy@3.1.2: - resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} - engines: {node: '>=12'} - - d3-interpolate@3.0.1: - resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} - engines: {node: '>=12'} - - d3-path@1.0.9: - resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} + jiti@2.5.1: + resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} + hasBin: true - d3-path@3.1.0: - resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} - engines: {node: '>=12'} + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - d3-polygon@3.0.1: - resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==} - engines: {node: '>=12'} + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true - d3-quadtree@1.0.7: - resolution: {integrity: sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==} + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true - d3-quadtree@3.0.1: - resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} - engines: {node: '>=12'} + kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} - d3-random@3.0.1: - resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==} - engines: {node: '>=12'} + lightningcss-darwin-arm64@1.30.1: + resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] - d3-sankey@0.12.3: - resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==} + lightningcss-darwin-x64@1.30.1: + resolution: {integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] - d3-scale-chromatic@3.0.0: - resolution: {integrity: sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==} - engines: {node: '>=12'} + lightningcss-freebsd-x64@1.30.1: + resolution: {integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] - d3-scale@4.0.2: - resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} - engines: {node: '>=12'} - - d3-selection@3.0.0: - resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} - engines: {node: '>=12'} - - d3-shape@1.3.7: - resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} - - d3-shape@3.2.0: - resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} - engines: {node: '>=12'} - - d3-time-format@2.3.0: - resolution: {integrity: sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==} - - d3-time-format@4.1.0: - resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} - engines: {node: '>=12'} - - d3-time@1.1.0: - resolution: {integrity: sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==} - - d3-time@3.1.0: - resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} - engines: {node: '>=12'} - - d3-timer@1.0.10: - resolution: {integrity: sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==} - - d3-timer@3.0.1: - resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} - engines: {node: '>=12'} - - d3-transition@3.0.1: - resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} - engines: {node: '>=12'} - peerDependencies: - d3-selection: 2 - 3 - - d3-zoom@3.0.0: - resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} - engines: {node: '>=12'} - - d3@7.8.5: - resolution: {integrity: sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==} - engines: {node: '>=12'} - - d@1.0.1: - resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} - - dagre-d3-es@7.0.10: - resolution: {integrity: sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==} - - dayjs@1.11.10: - resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} - - debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - decode-named-character-reference@1.0.2: - resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} - - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - - defined@1.0.1: - resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} - - delaunator@5.0.0: - resolution: {integrity: sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==} - - dependency-graph@0.11.0: - resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} - engines: {node: '>= 0.6.0'} - - dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - - detect-kerning@2.1.2: - resolution: {integrity: sha512-I3JIbrnKPAntNLl1I6TpSQQdQ4AutYzv/sKMFKbepawV/hlH0GmYKhUoOEMd4xqaUHT+Bm0f4127lh5qs1m1tw==} - - didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - - diff@5.1.0: - resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} - engines: {node: '>=0.3.1'} - - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - - dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - - dompurify@3.0.6: - resolution: {integrity: sha512-ilkD8YEnnGh1zJ240uJsW7AzE+2qpbOUYjacomn3AvJ6J4JhKGSZ2nh4wUIXPZrEPppaCLx5jFe8T89Rk8tQ7w==} - - dotenv@16.3.1: - resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} - engines: {node: '>=12'} - - draw-svg-path@1.0.0: - resolution: {integrity: sha512-P8j3IHxcgRMcY6sDzr0QvJDLzBnJJqpTG33UZ2Pvp8rw0apCHhJCWqYprqrXjrgHnJ6tuhP1iTJSAodPDHxwkg==} - - dtype@2.0.0: - resolution: {integrity: sha512-s2YVcLKdFGS0hpFqJaTwscsyt0E8nNFdmo73Ocd81xNPj4URI4rj6D60A+vFMIw7BXWlb4yRkEwfBqcZzPGiZg==} - engines: {node: '>= 0.8.0'} - - dup@1.0.0: - resolution: {integrity: sha512-Bz5jxMMC0wgp23Zm15ip1x8IhYRqJvF3nFC0UInJUDkN1z4uNPk9jTnfCUJXbOGiQ1JbXLQsiV41Fb+HXcj5BA==} - - duplexify@3.7.1: - resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} - - earcut@2.2.4: - resolution: {integrity: sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==} - - electron-to-chromium@1.4.567: - resolution: {integrity: sha512-8KR114CAYQ4/r5EIEsOmOMqQ9j0MRbJZR3aXD/KFA8RuKzyoUB4XrUCg+l8RUGqTVQgKNIgTpjaG8YHRPAbX2w==} - - element-size@1.1.1: - resolution: {integrity: sha512-eaN+GMOq/Q+BIWy0ybsgpcYImjGIdNLyjLFJU4XsLHXYQao5jCNb36GyN6C2qwmDDYSfIBmKpPpr4VnBdLCsPQ==} - - elementary-circuits-directed-graph@1.3.1: - resolution: {integrity: sha512-ZEiB5qkn2adYmpXGnJKkxT8uJHlW/mxmBpmeqawEHzPxh9HkLD4/1mFYX5l0On+f6rcPIt8/EWlRU2Vo3fX6dQ==} - - elkjs@0.8.2: - resolution: {integrity: sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - - es5-ext@0.10.62: - resolution: {integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==} - engines: {node: '>=0.10'} - - es6-iterator@2.0.3: - resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} - - es6-symbol@3.1.3: - resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==} - - es6-weak-map@2.0.3: - resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==} - - esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} - engines: {node: '>=12'} - hasBin: true - - escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - - escodegen@1.14.3: - resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} - engines: {node: '>=4.0'} - hasBin: true - - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - - estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - - ext@1.7.0: - resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} - - falafel@2.2.5: - resolution: {integrity: sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==} - engines: {node: '>=0.4.0'} - - fast-glob@3.3.1: - resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} - engines: {node: '>=8.6.0'} - - fast-isnumeric@1.1.4: - resolution: {integrity: sha512-1mM8qOr2LYz8zGaUdmiqRDiuue00Dxjgcb1NQR7TnhLVh6sQyngP9xvLo7Sl7LZpP/sk5eb+bcyWXw530NTBZw==} - - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - - fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} - - fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - - flatten-vertex-data@1.0.2: - resolution: {integrity: sha512-BvCBFK2NZqerFTdMDgqfHBwxYWnxeCkwONsw6PvBMcUXqo8U/KDWwmXhqx1x2kLIg7DqIsJfOaJFOmlua3Lxuw==} - - font-atlas@2.1.0: - resolution: {integrity: sha512-kP3AmvX+HJpW4w3d+PiPR2X6E1yvsBXt2yhuCw+yReO9F1WYhvZwx3c95DGZGwg9xYzDGrgJYa885xmVA+28Cg==} - - font-measure@1.2.2: - resolution: {integrity: sha512-mRLEpdrWzKe9hbfaF3Qpr06TAjquuBVP5cHy4b3hyeNdjc9i0PO6HniGsX5vjL5OWv7+Bd++NiooNpT/s8BvIA==} - - fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - - from2@2.3.0: - resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==} - - fs-extra@11.1.1: - resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} - engines: {node: '>=14.14'} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - geojson-vt@3.2.1: - resolution: {integrity: sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==} - - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - - get-canvas-context@1.0.2: - resolution: {integrity: sha512-LnpfLf/TNzr9zVOGiIY6aKCz8EKuXmlYNV7CM2pUjBa/B+c2I15tS7KLySep75+FuerJdmArvJLcsAXWEy2H0A==} - - get-stdin@9.0.0: - resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} - engines: {node: '>=12'} - - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - - gl-mat4@1.2.0: - resolution: {integrity: sha512-sT5C0pwB1/e9G9AvAoLsoaJtbMGjfd/jfxo8jMCKqYYEnjZuFvqV5rehqar0538EmssjdDeiEWnKyBSTw7quoA==} - - gl-matrix@3.4.3: - resolution: {integrity: sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==} - - gl-text@1.3.1: - resolution: {integrity: sha512-/f5gcEMiZd+UTBJLTl3D+CkCB/0UFGTx3nflH8ZmyWcLkZhsZ1+Xx5YYkw2rgWAzgPeE35xCqBuHSoMKQVsR+w==} - - gl-util@3.1.3: - resolution: {integrity: sha512-dvRTggw5MSkJnCbh74jZzSoTOGnVYK+Bt+Ckqm39CVcl6+zSsxqWk4lr5NKhkqXHL6qvZAU9h17ZF8mIskY9mA==} - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - - glob@7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} - - globby@13.2.2: - resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - glsl-inject-defines@1.0.3: - resolution: {integrity: sha512-W49jIhuDtF6w+7wCMcClk27a2hq8znvHtlGnrYkSWEr8tHe9eA2dcnohlcAmxLYBSpSSdzOkRdyPTrx9fw49+A==} - - glsl-resolve@0.0.1: - resolution: {integrity: sha512-xxFNsfnhZTK9NBhzJjSBGX6IOqYpvBHxxmo+4vapiljyGNCY0Bekzn0firQkQrazK59c1hYxMDxYS8MDlhw4gA==} - - glsl-token-assignments@2.0.2: - resolution: {integrity: sha512-OwXrxixCyHzzA0U2g4btSNAyB2Dx8XrztY5aVUCjRSh4/D0WoJn8Qdps7Xub3sz6zE73W3szLrmWtQ7QMpeHEQ==} - - glsl-token-defines@1.0.0: - resolution: {integrity: sha512-Vb5QMVeLjmOwvvOJuPNg3vnRlffscq2/qvIuTpMzuO/7s5kT+63iL6Dfo2FYLWbzuiycWpbC0/KV0biqFwHxaQ==} - - glsl-token-depth@1.1.2: - resolution: {integrity: sha512-eQnIBLc7vFf8axF9aoi/xW37LSWd2hCQr/3sZui8aBJnksq9C7zMeUYHVJWMhFzXrBU7fgIqni4EhXVW4/krpg==} - - glsl-token-descope@1.0.2: - resolution: {integrity: sha512-kS2PTWkvi/YOeicVjXGgX5j7+8N7e56srNDEHDTVZ1dcESmbmpmgrnpjPcjxJjMxh56mSXYoFdZqb90gXkGjQw==} - - glsl-token-inject-block@1.1.0: - resolution: {integrity: sha512-q/m+ukdUBuHCOtLhSr0uFb/qYQr4/oKrPSdIK2C4TD+qLaJvqM9wfXIF/OOBjuSA3pUoYHurVRNao6LTVVUPWA==} - - glsl-token-properties@1.0.1: - resolution: {integrity: sha512-dSeW1cOIzbuUoYH0y+nxzwK9S9O3wsjttkq5ij9ZGw0OS41BirKJzzH48VLm8qLg+au6b0sINxGC0IrGwtQUcA==} - - glsl-token-scope@1.1.2: - resolution: {integrity: sha512-YKyOMk1B/tz9BwYUdfDoHvMIYTGtVv2vbDSLh94PT4+f87z21FVdou1KNKgF+nECBTo0fJ20dpm0B1vZB1Q03A==} - - glsl-token-string@1.0.1: - resolution: {integrity: sha512-1mtQ47Uxd47wrovl+T6RshKGkRRCYWhnELmkEcUAPALWGTFe2XZpH3r45XAwL2B6v+l0KNsCnoaZCSnhzKEksg==} - - glsl-token-whitespace-trim@1.0.0: - resolution: {integrity: sha512-ZJtsPut/aDaUdLUNtmBYhaCmhIjpKNg7IgZSfX5wFReMc2vnj8zok+gB/3Quqs0TsBSX/fGnqUUYZDqyuc2xLQ==} - - glsl-tokenizer@2.1.5: - resolution: {integrity: sha512-XSZEJ/i4dmz3Pmbnpsy3cKh7cotvFlBiZnDOwnj/05EwNp2XrhQ4XKJxT7/pDt4kp4YcpRSKz8eTV7S+mwV6MA==} - - glslify-bundle@5.1.1: - resolution: {integrity: sha512-plaAOQPv62M1r3OsWf2UbjN0hUYAB7Aph5bfH58VxJZJhloRNbxOL9tl/7H71K7OLJoSJ2ZqWOKk3ttQ6wy24A==} - - glslify-deps@1.3.2: - resolution: {integrity: sha512-7S7IkHWygJRjcawveXQjRXLO2FTjijPDYC7QfZyAQanY+yGLCFHYnPtsGT9bdyHiwPTw/5a1m1M9hamT2aBpag==} - - glslify@7.1.1: - resolution: {integrity: sha512-bud98CJ6kGZcP9Yxcsi7Iz647wuDz3oN+IZsjCRi5X1PI7t/xPKeL0mOwXJjo+CRZMqvq0CkSJiywCcY7kVYog==} - hasBin: true - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - grid-index@1.1.0: - resolution: {integrity: sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA==} - - has-hover@1.0.1: - resolution: {integrity: sha512-0G6w7LnlcpyDzpeGUTuT0CEw05+QlMuGVk1IHNAlHrGJITGodjZu3x8BNDUMfKJSZXNB2ZAclqc1bvrd+uUpfg==} - - has-passive-events@1.0.0: - resolution: {integrity: sha512-2vSj6IeIsgvsRMyeQ0JaCX5Q3lX4zMn5HpoVc7MEhQ6pv8Iq9rsXjsp+E5ZwaT7T0xhMT0KmU8gtt1EFVdbJiw==} - - hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} - engines: {node: '>= 0.4'} - - heap@0.2.7: - resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} - - hsluv@0.0.3: - resolution: {integrity: sha512-08iL2VyCRbkQKBySkSh6m8zMUa3sADAxGVWs3Z1aPcUkTJeK0ETG4Fc27tEmQBGUAXZjIsXOZqBvacuVNSC/fQ==} - - iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - - ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} - engines: {node: '>= 4'} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - internmap@1.0.1: - resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} - - internmap@2.0.3: - resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} - engines: {node: '>=12'} - - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - - is-browser@2.1.0: - resolution: {integrity: sha512-F5rTJxDQ2sW81fcfOR1GnCXT6sVJC104fCyfj+mjpwNEwaPYSn5fte5jiHmBg3DHsIoL/l8Kvw5VN5SsTRcRFQ==} - - is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-finite@1.1.0: - resolution: {integrity: sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==} - engines: {node: '>=0.10.0'} - - is-firefox@1.0.3: - resolution: {integrity: sha512-6Q9ITjvWIm0Xdqv+5U12wgOKEM2KoBw4Y926m0OFkvlCxnbG94HKAsVz8w3fWcfAS5YA2fJORXX1dLrkprCCxA==} - engines: {node: '>=0.10.0'} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-iexplorer@1.0.0: - resolution: {integrity: sha512-YeLzceuwg3K6O0MLM3UyUUjKAlyULetwryFp1mHy1I5PfArK0AEqlfa+MR4gkJjcbuJXoDJCvXbyqZVf5CR2Sg==} - engines: {node: '>=0.10.0'} - - is-mobile@4.0.0: - resolution: {integrity: sha512-mlcHZA84t1qLSuWkt2v0I2l61PYdyQDt4aG1mLIXF5FDMm4+haBCxCPYSr/uwqQNRk1MiTizn0ypEuRAOLRAew==} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-obj@1.0.1: - resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} - engines: {node: '>=0.10.0'} - - is-plain-obj@1.1.0: - resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} - engines: {node: '>=0.10.0'} - - is-string-blank@1.0.1: - resolution: {integrity: sha512-9H+ZBCVs3L9OYqv8nuUAzpcT9OTgMD1yAWrG7ihlnibdkbtB850heAmYWxHuXc4CHy4lKeK69tN+ny1K7gBIrw==} - - is-svg-path@1.0.2: - resolution: {integrity: sha512-Lj4vePmqpPR1ZnRctHv8ltSh1OrSxHkhUkd7wi+VQdcdP15/KvQFyk7LhNuM7ZW0EVbJz8kZLVmL9quLrfq4Kg==} - - isarray@0.0.1: - resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} - - isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - - jiti@1.20.0: - resolution: {integrity: sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==} - hasBin: true - - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - - katex@0.16.9: - resolution: {integrity: sha512-fsSYjWS0EEOwvy81j3vRA8TEAhQhKiqO+FQaKWp0m39qwOzHVBgAUBIXWj1pB+O2W3fIpNa6Y9KSKCVbfPhyAQ==} - hasBin: true - - kdbush@3.0.0: - resolution: {integrity: sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==} - - khroma@2.1.0: - resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==} - - kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} - engines: {node: '>=6'} - - layout-base@1.0.2: - resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==} - - layout-base@2.0.1: - resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==} - - levn@0.3.0: - resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} - engines: {node: '>= 0.8.0'} - - lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - lodash-es@4.17.21: - resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} - - lodash.castarray@4.4.0: - resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==} - - lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - map-limit@0.0.1: - resolution: {integrity: sha512-pJpcfLPnIF/Sk3taPW21G/RQsEEirGaFpCW3oXRwH9dnFHPHNGjNyvh++rdmC2fNqEaTw2MhYJraoJWAHx8kEg==} - - mapbox-gl@1.10.1: - resolution: {integrity: sha512-0aHt+lFUpYfvh0kMIqXqNXqoYMuhuAsMlw87TbhWrw78Tx2zfuPI0Lx31/YPUgJ+Ire0tzQ4JnuBL7acDNXmMg==} - engines: {node: '>=6.4.0'} - - markmap-autoloader@0.15.4: - resolution: {integrity: sha512-7JE4JTtRMEJ4IDhFzB3rrOrJkrJC+wvaVGRML6F1Z5KucI4oPFuVzMsFrzkm4+V+3lECO3peYCrWTyoV3u1smw==} - peerDependencies: - markmap-common: '*' - - markmap-common@0.15.3: - resolution: {integrity: sha512-a40FfdzFEKoyIhd5KDsV6FfkM55WWi2spRq/cUCsOZd8e4PAHMc9auCEjdxTWRiS2EGzET9sPpvyAmPSTva+/w==} - - math-log2@1.0.1: - resolution: {integrity: sha512-9W0yGtkaMAkf74XGYVy4Dqw3YUMnTNB2eeiw9aQbUl4A3KmuCEHTt2DgAB07ENzOYAjsYSAYufkAq0Zd+jU7zA==} - engines: {node: '>=0.10.0'} - - mdast-util-from-markdown@1.3.1: - resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} - - mdast-util-to-string@3.2.0: - resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - mermaid@10.6.0: - resolution: {integrity: sha512-Hcti+Q2NiWnb2ZCijSX89Bn2i7TCUwosBdIn/d+u63Sz7y40XU6EKMctT4UX4qZuZGfKGZpfOeim2/KTrdR7aQ==} - - micromark-core-commonmark@1.1.0: - resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} - - micromark-factory-destination@1.1.0: - resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} - - micromark-factory-label@1.1.0: - resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} - - micromark-factory-space@1.1.0: - resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} - - micromark-factory-title@1.1.0: - resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} - - micromark-factory-whitespace@1.1.0: - resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} - - micromark-util-character@1.2.0: - resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} - - micromark-util-chunked@1.1.0: - resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} - - micromark-util-classify-character@1.1.0: - resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} - - micromark-util-combine-extensions@1.1.0: - resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} - - micromark-util-decode-numeric-character-reference@1.1.0: - resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} - - micromark-util-decode-string@1.1.0: - resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} - - micromark-util-encode@1.1.0: - resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} - - micromark-util-html-tag-name@1.2.0: - resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} - - micromark-util-normalize-identifier@1.1.0: - resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} - - micromark-util-resolve-all@1.1.0: - resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} - - micromark-util-sanitize-uri@1.2.0: - resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} - - micromark-util-subtokenize@1.1.0: - resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} - - micromark-util-symbol@1.1.0: - resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} - - micromark-util-types@1.1.0: - resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} - - micromark@3.2.0: - resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} - - micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - mouse-change@1.4.0: - resolution: {integrity: sha512-vpN0s+zLL2ykyyUDh+fayu9Xkor5v/zRD9jhSqjRS1cJTGS0+oakVZzNm5n19JvvEj0you+MXlYTpNxUDQUjkQ==} - - mouse-event-offset@3.0.2: - resolution: {integrity: sha512-s9sqOs5B1Ykox3Xo8b3Ss2IQju4UwlW6LSR+Q5FXWpprJ5fzMLefIIItr3PH8RwzfGy6gxs/4GAmiNuZScE25w==} - - mouse-event@1.0.5: - resolution: {integrity: sha512-ItUxtL2IkeSKSp9cyaX2JLUuKk2uMoxBg4bbOWVd29+CskYJR9BGsUqtXenNzKbnDshvupjUewDIYVrOB6NmGw==} - - mouse-wheel@1.2.0: - resolution: {integrity: sha512-+OfYBiUOCTWcTECES49neZwL5AoGkXE+lFjIvzwNCnYRlso+EnfvovcBxGoyQ0yQt806eSPjS675K0EwWknXmw==} - - mri@1.2.0: - resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} - engines: {node: '>=4'} - - ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - mumath@3.3.4: - resolution: {integrity: sha512-VAFIOG6rsxoc7q/IaY3jdjmrsuX9f15KlRLYTHmixASBZkZEKC1IFqE2BC5CdhXmK6WLM1Re33z//AGmeRI6FA==} - deprecated: Redundant dependency in your project. - - murmurhash-js@1.0.0: - resolution: {integrity: sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==} - - mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - - nanoid@3.3.6: - resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - native-promise-only@0.8.1: - resolution: {integrity: sha512-zkVhZUA3y8mbz652WrL5x0fB0ehrBkulWT3TomAQ9iDtyXZvzKeEA6GPxAItBYeNYl5yngKRX612qHOhvMkDeg==} - - needle@2.9.1: - resolution: {integrity: sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==} - engines: {node: '>= 4.4.x'} - hasBin: true - - next-tick@1.1.0: - resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} - - node-releases@2.0.13: - resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} - - non-layered-tidy-tree-layout@2.0.2: - resolution: {integrity: sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==} - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - - normalize-svg-path@0.1.0: - resolution: {integrity: sha512-1/kmYej2iedi5+ROxkRESL/pI02pkg0OBnaR4hJkSIX6+ORzepwbuUXfrdZaPjysTsJInj0Rj5NuX027+dMBvA==} - - normalize-svg-path@1.1.0: - resolution: {integrity: sha512-r9KHKG2UUeB5LoTouwDzBy2VxXlHsiM6fyLQvnJa0S5hrhzqElH/CH7TUGhT1fVvIYBIKf3OpY4YJ4CK+iaqHg==} - - npm2url@0.2.1: - resolution: {integrity: sha512-Ls7mMyud1Kk0EisqsTt2TPtM7gLRvgmvDxOg3FPI5zjfhQ+ZFNBXX2K9VT7vo+HqUsz/uCiIxkcO0SvIuneVug==} - - number-is-integer@1.0.1: - resolution: {integrity: sha512-Dq3iuiFBkrbmuQjGFFF3zckXNCQoSD37/SdSbgcBailUx6knDvDwb5CympBgcoWHy36sfS12u74MHYkXyHq6bg==} - engines: {node: '>=0.10.0'} - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - - once@1.3.3: - resolution: {integrity: sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - optionator@0.8.3: - resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} - engines: {node: '>= 0.8.0'} - - parenthesis@3.1.8: - resolution: {integrity: sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw==} - - parse-rect@1.2.0: - resolution: {integrity: sha512-4QZ6KYbnE6RTwg9E0HpLchUM9EZt6DnDxajFZZDSV4p/12ZJEvPO702DZpGvRYEPo00yKDys7jASi+/w7aO8LA==} - - parse-svg-path@0.1.2: - resolution: {integrity: sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ==} - - parse-unit@1.0.1: - resolution: {integrity: sha512-hrqldJHokR3Qj88EIlV/kAyAi/G5R2+R56TBANxNMy0uPlYcttx0jnMW6Yx5KsKPSbC3KddM/7qQm3+0wEXKxg==} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - - pbf@3.2.1: - resolution: {integrity: sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==} - hasBin: true - - performance-now@2.1.0: - resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} - - pick-by-alias@1.2.0: - resolution: {integrity: sha512-ESj2+eBxhGrcA1azgHs7lARG5+5iLakc/6nlfbpjcLl00HuuUOIuORhYXN4D1HfvMSKuVtFQjAlnwi1JHEeDIw==} - - picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - - plotly.js@2.27.0: - resolution: {integrity: sha512-48LjCf+A7MmgNTPBBomYdIcFaY/oWjIdRT7k+qmXz9opcMCAJiBrpbslWyfmR8HwmTxJRGdeyoWWlO8AHkvq5A==} - - point-in-polygon@1.1.0: - resolution: {integrity: sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw==} - - polybooljs@1.2.0: - resolution: {integrity: sha512-mKjR5nolISvF+q2BtC1fi/llpxBPTQ3wLWN8+ldzdw2Hocpc8C72ZqnamCM4Z6z+68GVVjkeM01WJegQmZ8MEQ==} - - postcss-cli@10.1.0: - resolution: {integrity: sha512-Zu7PLORkE9YwNdvOeOVKPmWghprOtjFQU3srMUGbdz3pHJiFh7yZ4geiZFMkjMfB0mtTFR3h8RemR62rPkbOPA==} - engines: {node: '>=14'} - hasBin: true - peerDependencies: - postcss: ^8.0.0 - - postcss-import@14.1.0: - resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} - engines: {node: '>=10.0.0'} - peerDependencies: - postcss: ^8.0.0 - - postcss-import@15.1.0: - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 - - postcss-js@4.0.1: - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 - - postcss-load-config@4.0.1: - resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - - postcss-nested@5.0.6: - resolution: {integrity: sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - - postcss-nested@6.0.1: - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - - postcss-reporter@7.0.5: - resolution: {integrity: sha512-glWg7VZBilooZGOFPhN9msJ3FQs19Hie7l5a/eE6WglzYqVeH3ong3ShFcp9kDWJT1g2Y/wd59cocf9XxBtkWA==} - engines: {node: '>=10'} - peerDependencies: - postcss: ^8.1.0 - - postcss-selector-parser@6.0.10: - resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} - engines: {node: '>=4'} - - postcss-selector-parser@6.0.13: - resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} - engines: {node: '>=4'} - - postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - - postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} - - potpack@1.0.2: - resolution: {integrity: sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==} - - prelude-ls@1.1.2: - resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} - engines: {node: '>= 0.8.0'} - - pretty-hrtime@1.0.3: - resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} - engines: {node: '>= 0.8'} - - probe-image-size@7.2.3: - resolution: {integrity: sha512-HubhG4Rb2UH8YtV4ba0Vp5bQ7L78RTONYu/ujmCu5nBI8wGv24s4E9xSKBi0N1MowRpxk76pFCpJtW0KPzOK0w==} - - process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - - protocol-buffers-schema@3.6.0: - resolution: {integrity: sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - quickselect@2.0.0: - resolution: {integrity: sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==} - - raf@3.4.1: - resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==} - - read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - - readable-stream@1.0.34: - resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==} - - readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} - - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - - regenerator-runtime@0.14.0: - resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} - - regl-error2d@2.0.12: - resolution: {integrity: sha512-r7BUprZoPO9AbyqM5qlJesrSRkl+hZnVKWKsVp7YhOl/3RIpi4UDGASGJY0puQ96u5fBYw/OlqV24IGcgJ0McA==} - - regl-line2d@3.1.2: - resolution: {integrity: sha512-nmT7WWS/WxmXAQMkgaMKWXaVmwJ65KCrjbqHGOUjjqQi6shfT96YbBOvelXwO9hG7/hjvbzjtQ2UO0L3e7YaXQ==} - - regl-scatter2d@3.2.9: - resolution: {integrity: sha512-PNrXs+xaCClKpiB2b3HZ2j3qXQXhC5kcTh/Nfgx9rLO0EpEhab0BSQDqAsbdbpdf+pSHSJvbgitB7ulbGeQ+Fg==} - - regl-splom@1.0.14: - resolution: {integrity: sha512-OiLqjmPRYbd7kDlHC6/zDf6L8lxgDC65BhC8JirhP4ykrK4x22ZyS+BnY8EUinXKDeMgmpRwCvUmk7BK4Nweuw==} - - regl@2.1.0: - resolution: {integrity: sha512-oWUce/aVoEvW5l2V0LK7O5KJMzUSKeiOwFuJehzpSFd43dO5spP9r+sSUfhKtsky4u6MCqWJaRL+abzExynfTg==} - - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - resolve-protobuf-schema@2.1.0: - resolution: {integrity: sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==} - - resolve@0.6.3: - resolution: {integrity: sha512-UHBY3viPlJKf85YijDUcikKX6tmF4SokIDp518ZDVT92JNDcG5uKIthaT/owt3Sar0lwtOafsQuwrg22/v2Dwg==} - - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - right-now@1.0.0: - resolution: {integrity: sha512-DA8+YS+sMIVpbsuKgy+Z67L9Lxb1p05mNxRpDPNksPDEFir4vmBlUtuN9jkTGn9YMMdlBuK7XQgFiz6ws+yhSg==} - - robust-predicates@3.0.2: - resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} - - rollup@3.29.4: - resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - rw@1.3.3: - resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} - - sade@1.8.1: - resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} - engines: {node: '>=6'} - - safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - - sax@1.3.0: - resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} - - shallow-copy@0.0.1: - resolution: {integrity: sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==} - - signum@1.0.0: - resolution: {integrity: sha512-yodFGwcyt59XRh7w5W3jPcIQb3Bwi21suEfT7MAWnBX3iCdklJpgDgvGT9o04UonglZN5SNMfJFkHIR/jO8GHw==} - - slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - - slash@5.1.0: - resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} - engines: {node: '>=14.16'} - - source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - stack-trace@0.0.9: - resolution: {integrity: sha512-vjUc6sfgtgY0dxCdnc40mK6Oftjo9+2K8H/NG81TMhgL392FtiPA9tn9RLyTxXmTLPJPjF3VyzFp6bsWFLisMQ==} - - static-eval@2.1.0: - resolution: {integrity: sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==} - - stream-parser@0.3.1: - resolution: {integrity: sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==} - - stream-shift@1.0.1: - resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} - - string-split-by@1.0.0: - resolution: {integrity: sha512-KaJKY+hfpzNyet/emP81PJA9hTVSfxNLS9SFTWxdCnnW1/zOOwiV248+EfoX7IQFcBaOp4G5YE6xTJMF+pLg6A==} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - string_decoder@0.10.31: - resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} - - string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strongly-connected-components@1.0.1: - resolution: {integrity: sha512-i0TFx4wPcO0FwX+4RkLJi1MxmcTv90jNZgxMu9XRnMXMeFUY1VJlIoXpZunPUvUUqbCT1pg5PEkFqqpcaElNaA==} - - stylis@4.3.0: - resolution: {integrity: sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==} - - sucrase@3.34.0: - resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} - engines: {node: '>=8'} - hasBin: true - - supercluster@7.1.5: - resolution: {integrity: sha512-EulshI3pGUM66o6ZdH3ReiFcvHpM3vAigyK+vcxdjpJyEbIIrtbmBdY23mGgnI24uXiGFvrGq9Gkum/8U7vJWg==} - - superscript-text@1.0.0: - resolution: {integrity: sha512-gwu8l5MtRZ6koO0icVTlmN5pm7Dhh1+Xpe9O4x6ObMAsW+3jPbW14d1DsBq1F4wiI+WOFjXF35pslgec/G8yCQ==} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - svg-arc-to-cubic-bezier@3.2.0: - resolution: {integrity: sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g==} - - svg-path-bounds@1.0.2: - resolution: {integrity: sha512-H4/uAgLWrppIC0kHsb2/dWUYSmb4GE5UqH06uqWBcg6LBjX2fu0A8+JrO2/FJPZiSsNOKZAhyFFgsLTdYUvSqQ==} - - svg-path-sdf@1.1.3: - resolution: {integrity: sha512-vJJjVq/R5lSr2KLfVXVAStktfcfa1pNFjFOgyJnzZFXlO/fDZ5DmM8FpnSKKzLPfEYTVeXuVBTHF296TpxuJVg==} - - tailwindcss@3.3.5: - resolution: {integrity: sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==} - engines: {node: '>=14.0.0'} - hasBin: true - - thenby@1.3.4: - resolution: {integrity: sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==} - - thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - - thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - - through2@0.6.5: - resolution: {integrity: sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==} - - through2@2.0.5: - resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} - - tinycolor2@1.6.0: - resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} - - tinyqueue@2.0.3: - resolution: {integrity: sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==} - - to-float32@1.1.0: - resolution: {integrity: sha512-keDnAusn/vc+R3iEiSDw8TOF7gPiTLdK1ArvWtYbJQiVfmRg6i/CAvbKq3uIS0vWroAC7ZecN3DjQKw3aSklUg==} - - to-px@1.0.1: - resolution: {integrity: sha512-2y3LjBeIZYL19e5gczp14/uRWFDtDUErJPVN3VU9a7SJO+RjGRtYR47aMN2bZgGlxvW4ZcEz2ddUPVHXcMfuXw==} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - topojson-client@3.1.0: - resolution: {integrity: sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==} - hasBin: true - - ts-dedent@2.2.0: - resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} - engines: {node: '>=6.10'} - - ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - - type-check@0.3.2: - resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} - engines: {node: '>= 0.8.0'} - - type@1.2.0: - resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==} - - type@2.7.2: - resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} - - typedarray-pool@1.2.0: - resolution: {integrity: sha512-YTSQbzX43yvtpfRtIDAYygoYtgT+Rpjuxy9iOpczrjpXLgGoyG7aS5USJXV2d3nn8uHTeb9rXDvzS27zUg5KYQ==} - - typedarray@0.0.6: - resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - - unist-util-stringify-position@3.0.3: - resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} - - universalify@2.0.0: - resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} - engines: {node: '>= 10.0.0'} - - unquote@1.1.1: - resolution: {integrity: sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==} - - update-browserslist-db@1.0.13: - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - update-diff@1.1.0: - resolution: {integrity: sha512-rCiBPiHxZwT4+sBhEbChzpO5hYHjm91kScWgdHf4Qeafs6Ba7MBl+d9GlGv72bcTZQO0sLmtQS1pHSWoCLtN/A==} - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true - - uvu@0.5.6: - resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} - engines: {node: '>=8'} - hasBin: true - - vite-plugin-static-copy@0.17.0: - resolution: {integrity: sha512-2HpNbHfDt8SDy393AGXh9llHkc8FJMQkI8s3T5WsH3SWLMO+f5cFIyPErl4yGKU9Uh3Vaqsd4lHZYTf042fQ2A==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - vite: ^3.0.0 || ^4.0.0 - - vite@4.5.0: - resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - - vt-pbf@3.1.3: - resolution: {integrity: sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==} - - weak-map@1.0.8: - resolution: {integrity: sha512-lNR9aAefbGPpHO7AEnY0hCFjz1eTkWCXYvkTRrTHs9qv8zJp+SkVYpzfLIFXQQiG3tVvbNFQgVg2bQS8YGgxyw==} - - web-worker@1.2.0: - resolution: {integrity: sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==} - - webgl-context@2.2.0: - resolution: {integrity: sha512-q/fGIivtqTT7PEoF07axFIlHNk/XCPaYpq64btnepopSWvKNFkoORlQYgqDigBIuGA1ExnFd/GnSUnBNEPQY7Q==} - - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - - world-calendars@1.0.3: - resolution: {integrity: sha512-sAjLZkBnsbHkHWVhrsCU5Sa/EVuf9QqgvrN8zyJ2L/F9FR9Oc6CvVK0674+PGAtmmmYQMH98tCUSO4QLQv3/TQ==} - - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - xtend@2.2.0: - resolution: {integrity: sha512-SLt5uylT+4aoXxXuwtQp5ZnMMzhDb1Xkg4pEqc00WUJCQifPfV9Ub1VrNhp9kXkrjZD2I2Hl8WnjP37jzZLPZw==} - engines: {node: '>=0.4'} - - xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yaml@2.3.3: - resolution: {integrity: sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==} - engines: {node: '>= 14'} - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - -snapshots: - - '@alloc/quick-lru@5.2.0': {} - - '@babel/runtime@7.23.2': - dependencies: - regenerator-runtime: 0.14.0 - - '@braintree/sanitize-url@6.0.4': {} - - '@choojs/findup@0.2.1': - dependencies: - commander: 2.20.3 - - '@esbuild/android-arm64@0.18.20': - optional: true - - '@esbuild/android-arm@0.18.20': - optional: true - - '@esbuild/android-x64@0.18.20': - optional: true - - '@esbuild/darwin-arm64@0.18.20': - optional: true - - '@esbuild/darwin-x64@0.18.20': - optional: true - - '@esbuild/freebsd-arm64@0.18.20': - optional: true - - '@esbuild/freebsd-x64@0.18.20': - optional: true - - '@esbuild/linux-arm64@0.18.20': - optional: true - - '@esbuild/linux-arm@0.18.20': - optional: true - - '@esbuild/linux-ia32@0.18.20': - optional: true - - '@esbuild/linux-loong64@0.18.20': - optional: true - - '@esbuild/linux-mips64el@0.18.20': - optional: true - - '@esbuild/linux-ppc64@0.18.20': - optional: true - - '@esbuild/linux-riscv64@0.18.20': - optional: true - - '@esbuild/linux-s390x@0.18.20': - optional: true - - '@esbuild/linux-x64@0.18.20': - optional: true - - '@esbuild/netbsd-x64@0.18.20': - optional: true - - '@esbuild/openbsd-x64@0.18.20': - optional: true - - '@esbuild/sunos-x64@0.18.20': - optional: true - - '@esbuild/win32-arm64@0.18.20': - optional: true - - '@esbuild/win32-ia32@0.18.20': - optional: true - - '@esbuild/win32-x64@0.18.20': - optional: true - - '@gera2ld/jsx-dom@2.2.2': - dependencies: - '@babel/runtime': 7.23.2 - - '@jridgewell/gen-mapping@0.3.3': - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.20 - - '@jridgewell/resolve-uri@3.1.1': {} - - '@jridgewell/set-array@1.1.2': {} - - '@jridgewell/sourcemap-codec@1.4.15': {} - - '@jridgewell/trace-mapping@0.3.20': - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - - '@mapbox/geojson-rewind@0.5.2': - dependencies: - get-stream: 6.0.1 - minimist: 1.2.8 - - '@mapbox/geojson-types@1.0.2': {} - - '@mapbox/jsonlint-lines-primitives@2.0.2': {} - - '@mapbox/mapbox-gl-supported@1.5.0(mapbox-gl@1.10.1)': - dependencies: - mapbox-gl: 1.10.1 - - '@mapbox/point-geometry@0.1.0': {} - - '@mapbox/tiny-sdf@1.2.5': {} - - '@mapbox/unitbezier@0.0.0': {} - - '@mapbox/vector-tile@1.3.1': - dependencies: - '@mapbox/point-geometry': 0.1.0 - - '@mapbox/whoots-js@3.1.0': {} - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 - - '@plotly/d3-sankey-circular@0.33.1': - dependencies: - d3-array: 1.2.4 - d3-collection: 1.0.7 - d3-shape: 1.3.7 - elementary-circuits-directed-graph: 1.3.1 - - '@plotly/d3-sankey@0.7.2': - dependencies: - d3-array: 1.2.4 - d3-collection: 1.0.7 - d3-shape: 1.3.7 - - '@plotly/d3@3.8.1': {} - - '@plotly/point-cluster@3.1.9': - dependencies: - array-bounds: 1.0.1 - binary-search-bounds: 2.0.5 - clamp: 1.0.1 - defined: 1.0.1 - dtype: 2.0.0 - flatten-vertex-data: 1.0.2 - is-obj: 1.0.1 - math-log2: 1.0.1 - parse-rect: 1.2.0 - pick-by-alias: 1.2.0 - - '@plotly/regl@2.1.2': {} - - '@tailwindcss/nesting@0.0.0-insiders.565cd3e(postcss@8.4.31)': - dependencies: - postcss: 8.4.31 - postcss-nested: 5.0.6(postcss@8.4.31) - - '@tailwindcss/typography@0.5.10(tailwindcss@3.3.5)': - dependencies: - lodash.castarray: 4.4.0 - lodash.isplainobject: 4.0.6 - lodash.merge: 4.6.2 - postcss-selector-parser: 6.0.10 - tailwindcss: 3.3.5 - - '@turf/area@6.5.0': - dependencies: - '@turf/helpers': 6.5.0 - '@turf/meta': 6.5.0 - - '@turf/bbox@6.5.0': - dependencies: - '@turf/helpers': 6.5.0 - '@turf/meta': 6.5.0 - - '@turf/centroid@6.5.0': - dependencies: - '@turf/helpers': 6.5.0 - '@turf/meta': 6.5.0 - - '@turf/helpers@6.5.0': {} - - '@turf/meta@6.5.0': - dependencies: - '@turf/helpers': 6.5.0 - - '@types/d3-scale-chromatic@3.0.1': {} - - '@types/d3-scale@4.0.6': - dependencies: - '@types/d3-time': 3.0.2 - - '@types/d3-time@3.0.2': {} - - '@types/debug@4.1.10': - dependencies: - '@types/ms': 0.7.33 - - '@types/mdast@3.0.14': - dependencies: - '@types/unist': 2.0.9 - - '@types/ms@0.7.33': {} - - '@types/unist@2.0.9': {} - - '@vue/reactivity@3.1.5': - dependencies: - '@vue/shared': 3.1.5 - - '@vue/shared@3.1.5': {} - - abs-svg-path@0.1.1: {} - - acorn@7.4.1: {} - - almost-equal@1.1.0: {} - - alpinejs@3.13.10: - dependencies: - '@vue/reactivity': 3.1.5 - - ansi-regex@5.0.1: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - any-promise@1.3.0: {} - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - arg@5.0.2: {} - - array-bounds@1.0.1: {} - - array-find-index@1.0.2: {} - - array-normalize@1.1.4: - dependencies: - array-bounds: 1.0.1 - - array-range@1.0.1: {} - - array-rearrange@2.2.2: {} - - autoprefixer@10.4.16(postcss@8.4.31): - dependencies: - browserslist: 4.22.1 - caniuse-lite: 1.0.30001554 - fraction.js: 4.3.7 - normalize-range: 0.1.2 - picocolors: 1.0.0 - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - - balanced-match@1.0.2: {} - - binary-extensions@2.2.0: {} - - binary-search-bounds@2.0.5: {} - - bit-twiddle@1.0.2: {} - - bitmap-sdf@1.0.4: {} - - bl@2.2.1: - dependencies: - readable-stream: 2.3.8 - safe-buffer: 5.2.1 - - brace-expansion@1.1.11: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - braces@3.0.2: - dependencies: - fill-range: 7.0.1 - - browserslist@4.22.1: - dependencies: - caniuse-lite: 1.0.30001554 - electron-to-chromium: 1.4.567 - node-releases: 2.0.13 - update-browserslist-db: 1.0.13(browserslist@4.22.1) - - buffer-from@1.1.2: {} - - camelcase-css@2.0.1: {} - - caniuse-lite@1.0.30001554: {} - - canvas-fit@1.5.0: - dependencies: - element-size: 1.1.1 - - character-entities@2.0.2: {} - - chokidar@3.5.3: - dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - - clamp@1.0.1: {} - - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - color-alpha@1.0.4: - dependencies: - color-parse: 1.3.8 - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-id@1.1.0: - dependencies: - clamp: 1.0.1 - - color-name@1.1.4: {} - - color-normalize@1.5.0: - dependencies: - clamp: 1.0.1 - color-rgba: 2.1.1 - dtype: 2.0.0 - - color-parse@1.3.8: - dependencies: - color-name: 1.1.4 - defined: 1.0.1 - is-plain-obj: 1.1.0 - - color-rgba@2.1.1: - dependencies: - clamp: 1.0.1 - color-parse: 1.3.8 - color-space: 1.16.0 - - color-space@1.16.0: - dependencies: - hsluv: 0.0.3 - mumath: 3.3.4 - - commander@2.20.3: {} - - commander@4.1.1: {} - - commander@7.2.0: {} - - commander@8.3.0: {} - - concat-map@0.0.1: {} - - concat-stream@1.6.2: - dependencies: - buffer-from: 1.1.2 - inherits: 2.0.4 - readable-stream: 2.3.8 - typedarray: 0.0.6 - - core-util-is@1.0.3: {} - - cose-base@1.0.3: - dependencies: - layout-base: 1.0.2 - - cose-base@2.2.0: - dependencies: - layout-base: 2.0.1 - - country-regex@1.1.0: {} - - css-font-size-keywords@1.0.0: {} - - css-font-stretch-keywords@1.0.1: {} - - css-font-style-keywords@1.0.1: {} - - css-font-weight-keywords@1.0.0: {} - - css-font@1.2.0: - dependencies: - css-font-size-keywords: 1.0.0 - css-font-stretch-keywords: 1.0.1 - css-font-style-keywords: 1.0.1 - css-font-weight-keywords: 1.0.0 - css-global-keywords: 1.0.1 - css-system-font-keywords: 1.0.0 - pick-by-alias: 1.2.0 - string-split-by: 1.0.0 - unquote: 1.1.1 - - css-global-keywords@1.0.1: {} - - css-system-font-keywords@1.0.0: {} - - csscolorparser@1.0.3: {} - - cssesc@3.0.0: {} - - cytoscape-cose-bilkent@4.1.0(cytoscape@3.26.0): - dependencies: - cose-base: 1.0.3 - cytoscape: 3.26.0 - - cytoscape-fcose@2.2.0(cytoscape@3.26.0): - dependencies: - cose-base: 2.2.0 - cytoscape: 3.26.0 - - cytoscape@3.26.0: - dependencies: - heap: 0.2.7 - lodash: 4.17.21 - - d3-array@1.2.4: {} - - d3-array@2.12.1: - dependencies: - internmap: 1.0.1 - - d3-array@3.2.4: - dependencies: - internmap: 2.0.3 - - d3-axis@3.0.0: {} - - d3-brush@3.0.0: - dependencies: - d3-dispatch: 3.0.1 - d3-drag: 3.0.0 - d3-interpolate: 3.0.1 - d3-selection: 3.0.0 - d3-transition: 3.0.1(d3-selection@3.0.0) - - d3-chord@3.0.1: - dependencies: - d3-path: 3.1.0 - - d3-collection@1.0.7: {} - - d3-color@3.1.0: {} - - d3-contour@4.0.2: - dependencies: - d3-array: 3.2.4 - - d3-delaunay@6.0.4: - dependencies: - delaunator: 5.0.0 - - d3-dispatch@1.0.6: {} - - d3-dispatch@3.0.1: {} - - d3-drag@3.0.0: - dependencies: - d3-dispatch: 3.0.1 - d3-selection: 3.0.0 - - d3-dsv@3.0.1: - dependencies: - commander: 7.2.0 - iconv-lite: 0.6.3 - rw: 1.3.3 - - d3-ease@3.0.1: {} - - d3-fetch@3.0.1: - dependencies: - d3-dsv: 3.0.1 - - d3-force@1.2.1: - dependencies: - d3-collection: 1.0.7 - d3-dispatch: 1.0.6 - d3-quadtree: 1.0.7 - d3-timer: 1.0.10 - - d3-force@3.0.0: - dependencies: - d3-dispatch: 3.0.1 - d3-quadtree: 3.0.1 - d3-timer: 3.0.1 - - d3-format@1.4.5: {} - - d3-format@3.1.0: {} - - d3-geo-projection@2.9.0: - dependencies: - commander: 2.20.3 - d3-array: 1.2.4 - d3-geo: 1.12.1 - resolve: 1.22.8 - - d3-geo@1.12.1: - dependencies: - d3-array: 1.2.4 - - d3-geo@3.1.0: - dependencies: - d3-array: 3.2.4 - - d3-hierarchy@1.1.9: {} - - d3-hierarchy@3.1.2: {} - - d3-interpolate@3.0.1: - dependencies: - d3-color: 3.1.0 - - d3-path@1.0.9: {} - - d3-path@3.1.0: {} - - d3-polygon@3.0.1: {} - - d3-quadtree@1.0.7: {} - - d3-quadtree@3.0.1: {} - - d3-random@3.0.1: {} - - d3-sankey@0.12.3: - dependencies: - d3-array: 2.12.1 - d3-shape: 1.3.7 - - d3-scale-chromatic@3.0.0: - dependencies: - d3-color: 3.1.0 - d3-interpolate: 3.0.1 - - d3-scale@4.0.2: - dependencies: - d3-array: 3.2.4 - d3-format: 3.1.0 - d3-interpolate: 3.0.1 - d3-time: 3.1.0 - d3-time-format: 4.1.0 - - d3-selection@3.0.0: {} - - d3-shape@1.3.7: - dependencies: - d3-path: 1.0.9 - - d3-shape@3.2.0: - dependencies: - d3-path: 3.1.0 - - d3-time-format@2.3.0: - dependencies: - d3-time: 1.1.0 - - d3-time-format@4.1.0: - dependencies: - d3-time: 3.1.0 - - d3-time@1.1.0: {} - - d3-time@3.1.0: - dependencies: - d3-array: 3.2.4 - - d3-timer@1.0.10: {} - - d3-timer@3.0.1: {} - - d3-transition@3.0.1(d3-selection@3.0.0): - dependencies: - d3-color: 3.1.0 - d3-dispatch: 3.0.1 - d3-ease: 3.0.1 - d3-interpolate: 3.0.1 - d3-selection: 3.0.0 - d3-timer: 3.0.1 - - d3-zoom@3.0.0: - dependencies: - d3-dispatch: 3.0.1 - d3-drag: 3.0.0 - d3-interpolate: 3.0.1 - d3-selection: 3.0.0 - d3-transition: 3.0.1(d3-selection@3.0.0) - - d3@7.8.5: - dependencies: - d3-array: 3.2.4 - d3-axis: 3.0.0 - d3-brush: 3.0.0 - d3-chord: 3.0.1 - d3-color: 3.1.0 - d3-contour: 4.0.2 - d3-delaunay: 6.0.4 - d3-dispatch: 3.0.1 - d3-drag: 3.0.0 - d3-dsv: 3.0.1 - d3-ease: 3.0.1 - d3-fetch: 3.0.1 - d3-force: 3.0.0 - d3-format: 3.1.0 - d3-geo: 3.1.0 - d3-hierarchy: 3.1.2 - d3-interpolate: 3.0.1 - d3-path: 3.1.0 - d3-polygon: 3.0.1 - d3-quadtree: 3.0.1 - d3-random: 3.0.1 - d3-scale: 4.0.2 - d3-scale-chromatic: 3.0.0 - d3-selection: 3.0.0 - d3-shape: 3.2.0 - d3-time: 3.1.0 - d3-time-format: 4.1.0 - d3-timer: 3.0.1 - d3-transition: 3.0.1(d3-selection@3.0.0) - d3-zoom: 3.0.0 - - d@1.0.1: - dependencies: - es5-ext: 0.10.62 - type: 1.2.0 - - dagre-d3-es@7.0.10: - dependencies: - d3: 7.8.5 - lodash-es: 4.17.21 - - dayjs@1.11.10: {} - - debug@2.6.9: - dependencies: - ms: 2.0.0 - - debug@3.2.7: - dependencies: - ms: 2.1.3 - - debug@4.3.4: - dependencies: - ms: 2.1.2 - - decode-named-character-reference@1.0.2: - dependencies: - character-entities: 2.0.2 - - deep-is@0.1.4: {} - - defined@1.0.1: {} - - delaunator@5.0.0: - dependencies: - robust-predicates: 3.0.2 - - dependency-graph@0.11.0: {} - - dequal@2.0.3: {} - - detect-kerning@2.1.2: {} - - didyoumean@1.2.2: {} - - diff@5.1.0: {} - - dir-glob@3.0.1: - dependencies: - path-type: 4.0.0 - - dlv@1.1.3: {} - - dompurify@3.0.6: {} - - dotenv@16.3.1: {} - - draw-svg-path@1.0.0: - dependencies: - abs-svg-path: 0.1.1 - normalize-svg-path: 0.1.0 - - dtype@2.0.0: {} - - dup@1.0.0: {} - - duplexify@3.7.1: - dependencies: - end-of-stream: 1.4.4 - inherits: 2.0.4 - readable-stream: 2.3.8 - stream-shift: 1.0.1 - - earcut@2.2.4: {} - - electron-to-chromium@1.4.567: {} - - element-size@1.1.1: {} - - elementary-circuits-directed-graph@1.3.1: - dependencies: - strongly-connected-components: 1.0.1 - - elkjs@0.8.2: {} - - emoji-regex@8.0.0: {} - - end-of-stream@1.4.4: - dependencies: - once: 1.4.0 - - es5-ext@0.10.62: - dependencies: - es6-iterator: 2.0.3 - es6-symbol: 3.1.3 - next-tick: 1.1.0 - - es6-iterator@2.0.3: - dependencies: - d: 1.0.1 - es5-ext: 0.10.62 - es6-symbol: 3.1.3 - - es6-symbol@3.1.3: - dependencies: - d: 1.0.1 - ext: 1.7.0 - - es6-weak-map@2.0.3: - dependencies: - d: 1.0.1 - es5-ext: 0.10.62 - es6-iterator: 2.0.3 - es6-symbol: 3.1.3 - - esbuild@0.18.20: - optionalDependencies: - '@esbuild/android-arm': 0.18.20 - '@esbuild/android-arm64': 0.18.20 - '@esbuild/android-x64': 0.18.20 - '@esbuild/darwin-arm64': 0.18.20 - '@esbuild/darwin-x64': 0.18.20 - '@esbuild/freebsd-arm64': 0.18.20 - '@esbuild/freebsd-x64': 0.18.20 - '@esbuild/linux-arm': 0.18.20 - '@esbuild/linux-arm64': 0.18.20 - '@esbuild/linux-ia32': 0.18.20 - '@esbuild/linux-loong64': 0.18.20 - '@esbuild/linux-mips64el': 0.18.20 - '@esbuild/linux-ppc64': 0.18.20 - '@esbuild/linux-riscv64': 0.18.20 - '@esbuild/linux-s390x': 0.18.20 - '@esbuild/linux-x64': 0.18.20 - '@esbuild/netbsd-x64': 0.18.20 - '@esbuild/openbsd-x64': 0.18.20 - '@esbuild/sunos-x64': 0.18.20 - '@esbuild/win32-arm64': 0.18.20 - '@esbuild/win32-ia32': 0.18.20 - '@esbuild/win32-x64': 0.18.20 - - escalade@3.1.1: {} - - escodegen@1.14.3: - dependencies: - esprima: 4.0.1 - estraverse: 4.3.0 - esutils: 2.0.3 - optionator: 0.8.3 - optionalDependencies: - source-map: 0.6.1 - - esprima@4.0.1: {} - - estraverse@4.3.0: {} - - esutils@2.0.3: {} - - events@3.3.0: {} - - ext@1.7.0: - dependencies: - type: 2.7.2 - - falafel@2.2.5: - dependencies: - acorn: 7.4.1 - isarray: 2.0.5 - - fast-glob@3.3.1: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 - - fast-isnumeric@1.1.4: - dependencies: - is-string-blank: 1.0.1 - - fast-levenshtein@2.0.6: {} - - fastq@1.15.0: - dependencies: - reusify: 1.0.4 - - fill-range@7.0.1: - dependencies: - to-regex-range: 5.0.1 - - flatten-vertex-data@1.0.2: - dependencies: - dtype: 2.0.0 - - font-atlas@2.1.0: - dependencies: - css-font: 1.2.0 - - font-measure@1.2.2: - dependencies: - css-font: 1.2.0 - - fraction.js@4.3.7: {} - - from2@2.3.0: - dependencies: - inherits: 2.0.4 - readable-stream: 2.3.8 - - fs-extra@11.1.1: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.0 - - fs.realpath@1.0.0: {} - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - geojson-vt@3.2.1: {} - - get-caller-file@2.0.5: {} - - get-canvas-context@1.0.2: {} - - get-stdin@9.0.0: {} - - get-stream@6.0.1: {} - - gl-mat4@1.2.0: {} - - gl-matrix@3.4.3: {} - - gl-text@1.3.1: - dependencies: - bit-twiddle: 1.0.2 - color-normalize: 1.5.0 - css-font: 1.2.0 - detect-kerning: 2.1.2 - es6-weak-map: 2.0.3 - flatten-vertex-data: 1.0.2 - font-atlas: 2.1.0 - font-measure: 1.2.2 - gl-util: 3.1.3 - is-plain-obj: 1.1.0 - object-assign: 4.1.1 - parse-rect: 1.2.0 - parse-unit: 1.0.1 - pick-by-alias: 1.2.0 - regl: 2.1.0 - to-px: 1.0.1 - typedarray-pool: 1.2.0 - - gl-util@3.1.3: - dependencies: - is-browser: 2.1.0 - is-firefox: 1.0.3 - is-plain-obj: 1.1.0 - number-is-integer: 1.0.1 - object-assign: 4.1.1 - pick-by-alias: 1.2.0 - weak-map: 1.0.8 - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - - glob@7.1.6: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - globby@13.2.2: - dependencies: - dir-glob: 3.0.1 - fast-glob: 3.3.1 - ignore: 5.2.4 - merge2: 1.4.1 - slash: 4.0.0 - - glsl-inject-defines@1.0.3: - dependencies: - glsl-token-inject-block: 1.1.0 - glsl-token-string: 1.0.1 - glsl-tokenizer: 2.1.5 - - glsl-resolve@0.0.1: - dependencies: - resolve: 0.6.3 - xtend: 2.2.0 - - glsl-token-assignments@2.0.2: {} - - glsl-token-defines@1.0.0: - dependencies: - glsl-tokenizer: 2.1.5 - - glsl-token-depth@1.1.2: {} - - glsl-token-descope@1.0.2: - dependencies: - glsl-token-assignments: 2.0.2 - glsl-token-depth: 1.1.2 - glsl-token-properties: 1.0.1 - glsl-token-scope: 1.1.2 - - glsl-token-inject-block@1.1.0: {} - - glsl-token-properties@1.0.1: {} - - glsl-token-scope@1.1.2: {} - - glsl-token-string@1.0.1: {} - - glsl-token-whitespace-trim@1.0.0: {} - - glsl-tokenizer@2.1.5: - dependencies: - through2: 0.6.5 - - glslify-bundle@5.1.1: - dependencies: - glsl-inject-defines: 1.0.3 - glsl-token-defines: 1.0.0 - glsl-token-depth: 1.1.2 - glsl-token-descope: 1.0.2 - glsl-token-scope: 1.1.2 - glsl-token-string: 1.0.1 - glsl-token-whitespace-trim: 1.0.0 - glsl-tokenizer: 2.1.5 - murmurhash-js: 1.0.0 - shallow-copy: 0.0.1 - - glslify-deps@1.3.2: - dependencies: - '@choojs/findup': 0.2.1 - events: 3.3.0 - glsl-resolve: 0.0.1 - glsl-tokenizer: 2.1.5 - graceful-fs: 4.2.11 - inherits: 2.0.4 - map-limit: 0.0.1 - resolve: 1.22.8 - - glslify@7.1.1: - dependencies: - bl: 2.2.1 - concat-stream: 1.6.2 - duplexify: 3.7.1 - falafel: 2.2.5 - from2: 2.3.0 - glsl-resolve: 0.0.1 - glsl-token-whitespace-trim: 1.0.0 - glslify-bundle: 5.1.1 - glslify-deps: 1.3.2 - minimist: 1.2.8 - resolve: 1.22.8 - stack-trace: 0.0.9 - static-eval: 2.1.0 - through2: 2.0.5 - xtend: 4.0.2 - - graceful-fs@4.2.11: {} - - grid-index@1.1.0: {} - - has-hover@1.0.1: - dependencies: - is-browser: 2.1.0 - - has-passive-events@1.0.0: - dependencies: - is-browser: 2.1.0 - - hasown@2.0.0: - dependencies: - function-bind: 1.1.2 - - heap@0.2.7: {} - - hsluv@0.0.3: {} - - iconv-lite@0.4.24: - dependencies: - safer-buffer: 2.1.2 - - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - - ieee754@1.2.1: {} - - ignore@5.2.4: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - - internmap@1.0.1: {} - - internmap@2.0.3: {} - - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.2.0 - - is-browser@2.1.0: {} - - is-core-module@2.13.1: - dependencies: - hasown: 2.0.0 - - is-extglob@2.1.1: {} - - is-finite@1.1.0: {} + lightningcss-linux-arm-gnueabihf@1.30.1: + resolution: {integrity: sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] - is-firefox@1.0.3: {} + lightningcss-linux-arm64-gnu@1.30.1: + resolution: {integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] - is-fullwidth-code-point@3.0.0: {} + lightningcss-linux-arm64-musl@1.30.1: + resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 + lightningcss-linux-x64-gnu@1.30.1: + resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] - is-iexplorer@1.0.0: {} + lightningcss-linux-x64-musl@1.30.1: + resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] - is-mobile@4.0.0: {} + lightningcss-win32-arm64-msvc@1.30.1: + resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] - is-number@7.0.0: {} + lightningcss-win32-x64-msvc@1.30.1: + resolution: {integrity: sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] - is-obj@1.0.1: {} + lightningcss@1.30.1: + resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==} + engines: {node: '>= 12.0.0'} - is-plain-obj@1.1.0: {} + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - is-string-blank@1.0.1: {} + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} - is-svg-path@1.0.2: {} + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - isarray@0.0.1: {} + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true - isarray@1.0.0: {} + node-html-parser@6.1.13: + resolution: {integrity: sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==} - isarray@2.0.5: {} + node-releases@2.0.21: + resolution: {integrity: sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==} - jiti@1.20.0: {} + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - jsonfile@6.1.0: - dependencies: - universalify: 2.0.0 - optionalDependencies: - graceful-fs: 4.2.11 + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - katex@0.16.9: - dependencies: - commander: 8.3.0 + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} - kdbush@3.0.0: {} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} - khroma@2.1.0: {} + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} - kleur@4.1.5: {} + preact-render-to-string@6.6.1: + resolution: {integrity: sha512-IIMfXRjmbSP9QmG18WJLQa4Z4yx3J0VC9QN5q9z2XYlWSzFlJ+bSm/AyLyyV/YFwjof1OXFX2Mz6Ao60LXudJg==} + peerDependencies: + preact: '>=10 || >= 11.0.0-0' - layout-base@1.0.2: {} + preact@10.27.2: + resolution: {integrity: sha512-5SYSgFKSyhCbk6SrXyMpqjb5+MQBgfvEKE/OC+PujcY34sOpqtr+0AZQtPYx5IA6VxynQ7rUPCtKzyovpj9Bpg==} - layout-base@2.0.1: {} + rollup@4.46.2: + resolution: {integrity: sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true - levn@0.3.0: - dependencies: - prelude-ls: 1.1.2 - type-check: 0.3.2 + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true - lilconfig@2.1.0: {} + simple-code-frame@1.3.0: + resolution: {integrity: sha512-MB4pQmETUBlNs62BBeRjIFGeuy/x6gGKh7+eRUemn1rCFhqo7K+4slPqsyizCbcbYLnaYqaoZ2FWsZ/jN06D8w==} - lines-and-columns@1.2.4: {} + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} - lodash-es@4.17.21: {} + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} - lodash.castarray@4.4.0: {} + stack-trace@1.0.0-pre2: + resolution: {integrity: sha512-2ztBJRek8IVofG9DBJqdy2N5kulaacX30Nz7xmkYF6ale9WBVmIy6mFBchvGX7Vx/MyjBhx+Rcxqrj+dbOnQ6A==} + engines: {node: '>=16'} - lodash.isplainobject@4.0.6: {} + tinyglobby@0.2.14: + resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} + engines: {node: '>=12.0.0'} - lodash.merge@4.6.2: {} + typescript@5.9.2: + resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} + engines: {node: '>=14.17'} + hasBin: true - lodash@4.17.21: {} + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - map-limit@0.0.1: - dependencies: - once: 1.3.3 + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' - mapbox-gl@1.10.1: - dependencies: - '@mapbox/geojson-rewind': 0.5.2 - '@mapbox/geojson-types': 1.0.2 - '@mapbox/jsonlint-lines-primitives': 2.0.2 - '@mapbox/mapbox-gl-supported': 1.5.0(mapbox-gl@1.10.1) - '@mapbox/point-geometry': 0.1.0 - '@mapbox/tiny-sdf': 1.2.5 - '@mapbox/unitbezier': 0.0.0 - '@mapbox/vector-tile': 1.3.1 - '@mapbox/whoots-js': 3.1.0 - csscolorparser: 1.0.3 - earcut: 2.2.4 - geojson-vt: 3.2.1 - gl-matrix: 3.4.3 - grid-index: 1.1.0 - minimist: 1.2.8 - murmurhash-js: 1.0.0 - pbf: 3.2.1 - potpack: 1.0.2 - quickselect: 2.0.0 - rw: 1.3.3 - supercluster: 7.1.5 - tinyqueue: 2.0.3 - vt-pbf: 3.1.3 - - markmap-autoloader@0.15.4(markmap-common@0.15.3): - dependencies: - markmap-common: 0.15.3 + vite-prerender-plugin@0.5.12: + resolution: {integrity: sha512-EiwhbMn+flg14EysbLTmZSzq8NGTxhytgK3bf4aGRF1evWLGwZiHiUJ1KZDvbxgKbMf2pG6fJWGEa3UZXOnR1g==} + peerDependencies: + vite: 5.x || 6.x || 7.x - markmap-common@0.15.3: - dependencies: - '@babel/runtime': 7.23.2 - '@gera2ld/jsx-dom': 2.2.2 - npm2url: 0.2.1 + vite@7.1.2: + resolution: {integrity: sha512-J0SQBPlQiEXAF7tajiH+rUooJPo0l8KQgyg4/aMunNtrOa7bwuZJsJbDWzeljqQpgftxuq5yNJxQ91O9ts29UQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true - math-log2@1.0.1: {} + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - mdast-util-from-markdown@1.3.1: - dependencies: - '@types/mdast': 3.0.14 - '@types/unist': 2.0.9 - decode-named-character-reference: 1.0.2 - mdast-util-to-string: 3.2.0 - micromark: 3.2.0 - micromark-util-decode-numeric-character-reference: 1.1.0 - micromark-util-decode-string: 1.1.0 - micromark-util-normalize-identifier: 1.1.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - unist-util-stringify-position: 3.0.3 - uvu: 0.5.6 - transitivePeerDependencies: - - supports-color +snapshots: - mdast-util-to-string@3.2.0: + '@babel/code-frame@7.27.1': dependencies: - '@types/mdast': 3.0.14 + '@babel/helper-validator-identifier': 7.27.1 + js-tokens: 4.0.0 + picocolors: 1.1.1 - merge2@1.4.1: {} + '@babel/compat-data@7.28.4': {} - mermaid@10.6.0: + '@babel/core@7.28.4': dependencies: - '@braintree/sanitize-url': 6.0.4 - '@types/d3-scale': 4.0.6 - '@types/d3-scale-chromatic': 3.0.1 - cytoscape: 3.26.0 - cytoscape-cose-bilkent: 4.1.0(cytoscape@3.26.0) - cytoscape-fcose: 2.2.0(cytoscape@3.26.0) - d3: 7.8.5 - d3-sankey: 0.12.3 - dagre-d3-es: 7.0.10 - dayjs: 1.11.10 - dompurify: 3.0.6 - elkjs: 0.8.2 - khroma: 2.1.0 - lodash-es: 4.17.21 - mdast-util-from-markdown: 1.3.1 - non-layered-tidy-tree-layout: 2.0.2 - stylis: 4.3.0 - ts-dedent: 2.2.0 - uuid: 9.0.1 - web-worker: 1.2.0 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.3 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/helpers': 7.28.4 + '@babel/parser': 7.28.4 + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 transitivePeerDependencies: - supports-color - micromark-core-commonmark@1.1.0: - dependencies: - decode-named-character-reference: 1.0.2 - micromark-factory-destination: 1.1.0 - micromark-factory-label: 1.1.0 - micromark-factory-space: 1.1.0 - micromark-factory-title: 1.1.0 - micromark-factory-whitespace: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-chunked: 1.1.0 - micromark-util-classify-character: 1.1.0 - micromark-util-html-tag-name: 1.2.0 - micromark-util-normalize-identifier: 1.1.0 - micromark-util-resolve-all: 1.1.0 - micromark-util-subtokenize: 1.1.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 - - micromark-factory-destination@1.1.0: + '@babel/generator@7.28.3': dependencies: - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.30 + jsesc: 3.1.0 - micromark-factory-label@1.1.0: + '@babel/helper-annotate-as-pure@7.27.3': dependencies: - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 + '@babel/types': 7.28.4 - micromark-factory-space@1.1.0: + '@babel/helper-compilation-targets@7.27.2': dependencies: - micromark-util-character: 1.2.0 - micromark-util-types: 1.1.0 + '@babel/compat-data': 7.28.4 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.26.2 + lru-cache: 5.1.1 + semver: 6.3.1 - micromark-factory-title@1.1.0: - dependencies: - micromark-factory-space: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 + '@babel/helper-globals@7.28.0': {} - micromark-factory-whitespace@1.1.0: + '@babel/helper-module-imports@7.27.1': dependencies: - micromark-factory-space: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + transitivePeerDependencies: + - supports-color - micromark-util-character@1.2.0: + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)': dependencies: - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 + '@babel/core': 7.28.4 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color - micromark-util-chunked@1.1.0: - dependencies: - micromark-util-symbol: 1.1.0 + '@babel/helper-plugin-utils@7.27.1': {} - micromark-util-classify-character@1.1.0: - dependencies: - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 + '@babel/helper-string-parser@7.27.1': {} - micromark-util-combine-extensions@1.1.0: - dependencies: - micromark-util-chunked: 1.1.0 - micromark-util-types: 1.1.0 + '@babel/helper-validator-identifier@7.27.1': {} - micromark-util-decode-numeric-character-reference@1.1.0: - dependencies: - micromark-util-symbol: 1.1.0 + '@babel/helper-validator-option@7.27.1': {} - micromark-util-decode-string@1.1.0: + '@babel/helpers@7.28.4': dependencies: - decode-named-character-reference: 1.0.2 - micromark-util-character: 1.2.0 - micromark-util-decode-numeric-character-reference: 1.1.0 - micromark-util-symbol: 1.1.0 - - micromark-util-encode@1.1.0: {} + '@babel/template': 7.27.2 + '@babel/types': 7.28.4 - micromark-util-html-tag-name@1.2.0: {} - - micromark-util-normalize-identifier@1.1.0: + '@babel/parser@7.28.4': dependencies: - micromark-util-symbol: 1.1.0 + '@babel/types': 7.28.4 - micromark-util-resolve-all@1.1.0: + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.4)': dependencies: - micromark-util-types: 1.1.0 + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 - micromark-util-sanitize-uri@1.2.0: + '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.28.4)': dependencies: - micromark-util-character: 1.2.0 - micromark-util-encode: 1.1.0 - micromark-util-symbol: 1.1.0 + '@babel/core': 7.28.4 + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.4) + transitivePeerDependencies: + - supports-color - micromark-util-subtokenize@1.1.0: + '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.4)': dependencies: - micromark-util-chunked: 1.1.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 - - micromark-util-symbol@1.1.0: {} + '@babel/core': 7.28.4 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) + '@babel/types': 7.28.4 + transitivePeerDependencies: + - supports-color - micromark-util-types@1.1.0: {} + '@babel/template@7.27.2': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 - micromark@3.2.0: + '@babel/traverse@7.28.4': dependencies: - '@types/debug': 4.1.10 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.3 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.4 + '@babel/template': 7.27.2 + '@babel/types': 7.28.4 debug: 4.3.4 - decode-named-character-reference: 1.0.2 - micromark-core-commonmark: 1.1.0 - micromark-factory-space: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-chunked: 1.1.0 - micromark-util-combine-extensions: 1.1.0 - micromark-util-decode-numeric-character-reference: 1.1.0 - micromark-util-encode: 1.1.0 - micromark-util-normalize-identifier: 1.1.0 - micromark-util-resolve-all: 1.1.0 - micromark-util-sanitize-uri: 1.2.0 - micromark-util-subtokenize: 1.1.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 transitivePeerDependencies: - supports-color - micromatch@4.0.5: - dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - - minimatch@3.1.2: + '@babel/types@7.28.4': dependencies: - brace-expansion: 1.1.11 + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 - minimist@1.2.8: {} + '@esbuild/aix-ppc64@0.25.9': + optional: true - mouse-change@1.4.0: - dependencies: - mouse-event: 1.0.5 + '@esbuild/android-arm64@0.25.9': + optional: true - mouse-event-offset@3.0.2: {} + '@esbuild/android-arm@0.25.9': + optional: true - mouse-event@1.0.5: {} + '@esbuild/android-x64@0.25.9': + optional: true - mouse-wheel@1.2.0: - dependencies: - right-now: 1.0.0 - signum: 1.0.0 - to-px: 1.0.1 + '@esbuild/darwin-arm64@0.25.9': + optional: true - mri@1.2.0: {} + '@esbuild/darwin-x64@0.25.9': + optional: true - ms@2.0.0: {} + '@esbuild/freebsd-arm64@0.25.9': + optional: true - ms@2.1.2: {} + '@esbuild/freebsd-x64@0.25.9': + optional: true - ms@2.1.3: {} + '@esbuild/linux-arm64@0.25.9': + optional: true - mumath@3.3.4: - dependencies: - almost-equal: 1.1.0 + '@esbuild/linux-arm@0.25.9': + optional: true - murmurhash-js@1.0.0: {} + '@esbuild/linux-ia32@0.25.9': + optional: true - mz@2.7.0: - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 + '@esbuild/linux-loong64@0.25.9': + optional: true - nanoid@3.3.6: {} + '@esbuild/linux-mips64el@0.25.9': + optional: true - native-promise-only@0.8.1: {} + '@esbuild/linux-ppc64@0.25.9': + optional: true - needle@2.9.1: - dependencies: - debug: 3.2.7 - iconv-lite: 0.4.24 - sax: 1.3.0 - transitivePeerDependencies: - - supports-color + '@esbuild/linux-riscv64@0.25.9': + optional: true - next-tick@1.1.0: {} + '@esbuild/linux-s390x@0.25.9': + optional: true - node-releases@2.0.13: {} + '@esbuild/linux-x64@0.25.9': + optional: true - non-layered-tidy-tree-layout@2.0.2: {} + '@esbuild/netbsd-arm64@0.25.9': + optional: true - normalize-path@3.0.0: {} + '@esbuild/netbsd-x64@0.25.9': + optional: true - normalize-range@0.1.2: {} + '@esbuild/openbsd-arm64@0.25.9': + optional: true - normalize-svg-path@0.1.0: {} + '@esbuild/openbsd-x64@0.25.9': + optional: true - normalize-svg-path@1.1.0: - dependencies: - svg-arc-to-cubic-bezier: 3.2.0 + '@esbuild/openharmony-arm64@0.25.9': + optional: true - npm2url@0.2.1: {} + '@esbuild/sunos-x64@0.25.9': + optional: true - number-is-integer@1.0.1: - dependencies: - is-finite: 1.1.0 + '@esbuild/win32-arm64@0.25.9': + optional: true - object-assign@4.1.1: {} + '@esbuild/win32-ia32@0.25.9': + optional: true - object-hash@3.0.0: {} + '@esbuild/win32-x64@0.25.9': + optional: true - once@1.3.3: + '@jridgewell/gen-mapping@0.3.13': dependencies: - wrappy: 1.0.2 + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.30 - once@1.4.0: + '@jridgewell/remapping@2.3.5': dependencies: - wrappy: 1.0.2 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.30 - optionator@0.8.3: - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.3.0 - prelude-ls: 1.1.2 - type-check: 0.3.2 - word-wrap: 1.2.5 + '@jridgewell/resolve-uri@3.1.1': {} - parenthesis@3.1.8: {} + '@jridgewell/sourcemap-codec@1.5.5': {} - parse-rect@1.2.0: + '@jridgewell/trace-mapping@0.3.30': dependencies: - pick-by-alias: 1.2.0 - - parse-svg-path@0.1.2: {} - - parse-unit@1.0.1: {} - - path-is-absolute@1.0.1: {} - - path-parse@1.0.7: {} - - path-type@4.0.0: {} + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.5.5 - pbf@3.2.1: + '@preact/preset-vite@2.10.2(@babel/core@7.28.4)(preact@10.27.2)(vite@7.1.2(@types/node@20.19.16)(jiti@2.5.1)(lightningcss@1.30.1))': dependencies: - ieee754: 1.2.1 - resolve-protobuf-schema: 2.1.0 - - performance-now@2.1.0: {} - - pick-by-alias@1.2.0: {} - - picocolors@1.0.0: {} + '@babel/core': 7.28.4 + '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.4) + '@prefresh/vite': 2.4.10(preact@10.27.2)(vite@7.1.2(@types/node@20.19.16)(jiti@2.5.1)(lightningcss@1.30.1)) + '@rollup/pluginutils': 4.2.1 + babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.28.4) + debug: 4.3.4 + picocolors: 1.1.1 + vite: 7.1.2(@types/node@20.19.16)(jiti@2.5.1)(lightningcss@1.30.1) + vite-prerender-plugin: 0.5.12(vite@7.1.2(@types/node@20.19.16)(jiti@2.5.1)(lightningcss@1.30.1)) + transitivePeerDependencies: + - preact + - supports-color - picomatch@2.3.1: {} + '@prefresh/babel-plugin@0.5.2': {} - pify@2.3.0: {} + '@prefresh/core@1.5.7(preact@10.27.2)': + dependencies: + preact: 10.27.2 - pirates@4.0.6: {} + '@prefresh/utils@1.2.1': {} - plotly.js@2.27.0: + '@prefresh/vite@2.4.10(preact@10.27.2)(vite@7.1.2(@types/node@20.19.16)(jiti@2.5.1)(lightningcss@1.30.1))': dependencies: - '@plotly/d3': 3.8.1 - '@plotly/d3-sankey': 0.7.2 - '@plotly/d3-sankey-circular': 0.33.1 - '@turf/area': 6.5.0 - '@turf/bbox': 6.5.0 - '@turf/centroid': 6.5.0 - canvas-fit: 1.5.0 - color-alpha: 1.0.4 - color-normalize: 1.5.0 - color-parse: 1.3.8 - color-rgba: 2.1.1 - country-regex: 1.1.0 - d3-force: 1.2.1 - d3-format: 1.4.5 - d3-geo: 1.12.1 - d3-geo-projection: 2.9.0 - d3-hierarchy: 1.1.9 - d3-interpolate: 3.0.1 - d3-time: 1.1.0 - d3-time-format: 2.3.0 - fast-isnumeric: 1.1.4 - gl-mat4: 1.2.0 - gl-text: 1.3.1 - glslify: 7.1.1 - has-hover: 1.0.1 - has-passive-events: 1.0.0 - is-mobile: 4.0.0 - mapbox-gl: 1.10.1 - mouse-change: 1.4.0 - mouse-event-offset: 3.0.2 - mouse-wheel: 1.2.0 - native-promise-only: 0.8.1 - parse-svg-path: 0.1.2 - point-in-polygon: 1.1.0 - polybooljs: 1.2.0 - probe-image-size: 7.2.3 - regl: '@plotly/regl@2.1.2' - regl-error2d: 2.0.12 - regl-line2d: 3.1.2 - regl-scatter2d: 3.2.9 - regl-splom: 1.0.14 - strongly-connected-components: 1.0.1 - superscript-text: 1.0.0 - svg-path-sdf: 1.1.3 - tinycolor2: 1.6.0 - to-px: 1.0.1 - topojson-client: 3.1.0 - webgl-context: 2.2.0 - world-calendars: 1.0.3 + '@babel/core': 7.28.4 + '@prefresh/babel-plugin': 0.5.2 + '@prefresh/core': 1.5.7(preact@10.27.2) + '@prefresh/utils': 1.2.1 + '@rollup/pluginutils': 4.2.1 + preact: 10.27.2 + vite: 7.1.2(@types/node@20.19.16)(jiti@2.5.1)(lightningcss@1.30.1) transitivePeerDependencies: - supports-color - point-in-polygon@1.1.0: {} - - polybooljs@1.2.0: {} - - postcss-cli@10.1.0(postcss@8.4.31): + '@rollup/pluginutils@4.2.1': dependencies: - chokidar: 3.5.3 - dependency-graph: 0.11.0 - fs-extra: 11.1.1 - get-stdin: 9.0.0 - globby: 13.2.2 - picocolors: 1.0.0 - postcss: 8.4.31 - postcss-load-config: 4.0.1(postcss@8.4.31) - postcss-reporter: 7.0.5(postcss@8.4.31) - pretty-hrtime: 1.0.3 - read-cache: 1.0.0 - slash: 5.1.0 - yargs: 17.7.2 - transitivePeerDependencies: - - ts-node + estree-walker: 2.0.2 + picomatch: 2.3.1 - postcss-import@14.1.0(postcss@8.4.31): - dependencies: - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.8 + '@rollup/rollup-android-arm-eabi@4.46.2': + optional: true - postcss-import@15.1.0(postcss@8.4.31): - dependencies: - postcss: 8.4.31 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.8 + '@rollup/rollup-android-arm64@4.46.2': + optional: true - postcss-js@4.0.1(postcss@8.4.31): - dependencies: - camelcase-css: 2.0.1 - postcss: 8.4.31 + '@rollup/rollup-darwin-arm64@4.46.2': + optional: true - postcss-load-config@4.0.1(postcss@8.4.31): - dependencies: - lilconfig: 2.1.0 - yaml: 2.3.3 - optionalDependencies: - postcss: 8.4.31 + '@rollup/rollup-darwin-x64@4.46.2': + optional: true - postcss-nested@5.0.6(postcss@8.4.31): - dependencies: - postcss: 8.4.31 - postcss-selector-parser: 6.0.13 + '@rollup/rollup-freebsd-arm64@4.46.2': + optional: true - postcss-nested@6.0.1(postcss@8.4.31): - dependencies: - postcss: 8.4.31 - postcss-selector-parser: 6.0.13 + '@rollup/rollup-freebsd-x64@4.46.2': + optional: true - postcss-reporter@7.0.5(postcss@8.4.31): - dependencies: - picocolors: 1.0.0 - postcss: 8.4.31 - thenby: 1.3.4 + '@rollup/rollup-linux-arm-gnueabihf@4.46.2': + optional: true - postcss-selector-parser@6.0.10: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 + '@rollup/rollup-linux-arm-musleabihf@4.46.2': + optional: true - postcss-selector-parser@6.0.13: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 + '@rollup/rollup-linux-arm64-gnu@4.46.2': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.46.2': + optional: true - postcss-value-parser@4.2.0: {} + '@rollup/rollup-linux-loongarch64-gnu@4.46.2': + optional: true - postcss@8.4.31: - dependencies: - nanoid: 3.3.6 - picocolors: 1.0.0 - source-map-js: 1.0.2 + '@rollup/rollup-linux-ppc64-gnu@4.46.2': + optional: true - potpack@1.0.2: {} + '@rollup/rollup-linux-riscv64-gnu@4.46.2': + optional: true - prelude-ls@1.1.2: {} + '@rollup/rollup-linux-riscv64-musl@4.46.2': + optional: true - pretty-hrtime@1.0.3: {} + '@rollup/rollup-linux-s390x-gnu@4.46.2': + optional: true - probe-image-size@7.2.3: - dependencies: - lodash.merge: 4.6.2 - needle: 2.9.1 - stream-parser: 0.3.1 - transitivePeerDependencies: - - supports-color + '@rollup/rollup-linux-x64-gnu@4.46.2': + optional: true - process-nextick-args@2.0.1: {} + '@rollup/rollup-linux-x64-musl@4.46.2': + optional: true - protocol-buffers-schema@3.6.0: {} + '@rollup/rollup-win32-arm64-msvc@4.46.2': + optional: true - queue-microtask@1.2.3: {} + '@rollup/rollup-win32-ia32-msvc@4.46.2': + optional: true - quickselect@2.0.0: {} + '@rollup/rollup-win32-x64-msvc@4.46.2': + optional: true - raf@3.4.1: - dependencies: - performance-now: 2.1.0 + '@types/estree@1.0.8': {} - read-cache@1.0.0: + '@types/node@20.19.16': dependencies: - pify: 2.3.0 + undici-types: 6.21.0 - readable-stream@1.0.34: + babel-plugin-transform-hook-names@1.0.2(@babel/core@7.28.4): dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 0.0.1 - string_decoder: 0.10.31 + '@babel/core': 7.28.4 - readable-stream@2.3.8: - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 + baseline-browser-mapping@2.8.5: {} - regenerator-runtime@0.14.0: {} + boolbase@1.0.0: {} - regl-error2d@2.0.12: - dependencies: - array-bounds: 1.0.1 - color-normalize: 1.5.0 - flatten-vertex-data: 1.0.2 - object-assign: 4.1.1 - pick-by-alias: 1.2.0 - to-float32: 1.1.0 - update-diff: 1.1.0 - - regl-line2d@3.1.2: + browserslist@4.26.2: dependencies: - array-bounds: 1.0.1 - array-find-index: 1.0.2 - array-normalize: 1.1.4 - color-normalize: 1.5.0 - earcut: 2.2.4 - es6-weak-map: 2.0.3 - flatten-vertex-data: 1.0.2 - glslify: 7.1.1 - object-assign: 4.1.1 - parse-rect: 1.2.0 - pick-by-alias: 1.2.0 - to-float32: 1.1.0 - - regl-scatter2d@3.2.9: - dependencies: - '@plotly/point-cluster': 3.1.9 - array-range: 1.0.1 - array-rearrange: 2.2.2 - clamp: 1.0.1 - color-id: 1.1.0 - color-normalize: 1.5.0 - color-rgba: 2.1.1 - flatten-vertex-data: 1.0.2 - glslify: 7.1.1 - is-iexplorer: 1.0.0 - object-assign: 4.1.1 - parse-rect: 1.2.0 - pick-by-alias: 1.2.0 - to-float32: 1.1.0 - update-diff: 1.1.0 - - regl-splom@1.0.14: - dependencies: - array-bounds: 1.0.1 - array-range: 1.0.1 - color-alpha: 1.0.4 - flatten-vertex-data: 1.0.2 - parse-rect: 1.2.0 - pick-by-alias: 1.2.0 - raf: 3.4.1 - regl-scatter2d: 3.2.9 + baseline-browser-mapping: 2.8.5 + caniuse-lite: 1.0.30001743 + electron-to-chromium: 1.5.221 + node-releases: 2.0.21 + update-browserslist-db: 1.1.3(browserslist@4.26.2) - regl@2.1.0: {} + caniuse-lite@1.0.30001743: {} - require-directory@2.1.1: {} + convert-source-map@2.0.0: {} - resolve-protobuf-schema@2.1.0: + css-select@5.2.2: dependencies: - protocol-buffers-schema: 3.6.0 + boolbase: 1.0.0 + css-what: 6.2.2 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 - resolve@0.6.3: {} + css-what@6.2.2: {} - resolve@1.22.8: + debug@4.3.4: dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - reusify@1.0.4: {} - - right-now@1.0.0: {} - - robust-predicates@3.0.2: {} + ms: 2.1.2 - rollup@3.29.4: - optionalDependencies: - fsevents: 2.3.3 + detect-libc@2.0.4: + optional: true - run-parallel@1.2.0: + dom-serializer@2.0.0: dependencies: - queue-microtask: 1.2.3 + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 - rw@1.3.3: {} + domelementtype@2.3.0: {} - sade@1.8.1: + domhandler@5.0.3: dependencies: - mri: 1.2.0 - - safe-buffer@5.1.2: {} - - safe-buffer@5.2.1: {} + domelementtype: 2.3.0 - safer-buffer@2.1.2: {} + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 - sax@1.3.0: {} + electron-to-chromium@1.5.221: {} - shallow-copy@0.0.1: {} + entities@4.5.0: {} - signum@1.0.0: {} + esbuild@0.25.9: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.9 + '@esbuild/android-arm': 0.25.9 + '@esbuild/android-arm64': 0.25.9 + '@esbuild/android-x64': 0.25.9 + '@esbuild/darwin-arm64': 0.25.9 + '@esbuild/darwin-x64': 0.25.9 + '@esbuild/freebsd-arm64': 0.25.9 + '@esbuild/freebsd-x64': 0.25.9 + '@esbuild/linux-arm': 0.25.9 + '@esbuild/linux-arm64': 0.25.9 + '@esbuild/linux-ia32': 0.25.9 + '@esbuild/linux-loong64': 0.25.9 + '@esbuild/linux-mips64el': 0.25.9 + '@esbuild/linux-ppc64': 0.25.9 + '@esbuild/linux-riscv64': 0.25.9 + '@esbuild/linux-s390x': 0.25.9 + '@esbuild/linux-x64': 0.25.9 + '@esbuild/netbsd-arm64': 0.25.9 + '@esbuild/netbsd-x64': 0.25.9 + '@esbuild/openbsd-arm64': 0.25.9 + '@esbuild/openbsd-x64': 0.25.9 + '@esbuild/openharmony-arm64': 0.25.9 + '@esbuild/sunos-x64': 0.25.9 + '@esbuild/win32-arm64': 0.25.9 + '@esbuild/win32-ia32': 0.25.9 + '@esbuild/win32-x64': 0.25.9 + + escalade@3.2.0: {} + + estree-walker@2.0.2: {} + + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 - slash@4.0.0: {} + fsevents@2.3.3: + optional: true - slash@5.1.0: {} + gensync@1.0.0-beta.2: {} - source-map-js@1.0.2: {} + he@1.2.0: {} - source-map@0.6.1: + jiti@2.5.1: optional: true - stack-trace@0.0.9: {} - - static-eval@2.1.0: - dependencies: - escodegen: 1.14.3 + js-tokens@4.0.0: {} - stream-parser@0.3.1: - dependencies: - debug: 2.6.9 - transitivePeerDependencies: - - supports-color + jsesc@3.1.0: {} - stream-shift@1.0.1: {} + json5@2.2.3: {} - string-split-by@1.0.0: - dependencies: - parenthesis: 3.1.8 + kolorist@1.8.0: {} - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 + lightningcss-darwin-arm64@1.30.1: + optional: true - string_decoder@0.10.31: {} + lightningcss-darwin-x64@1.30.1: + optional: true - string_decoder@1.1.1: - dependencies: - safe-buffer: 5.1.2 + lightningcss-freebsd-x64@1.30.1: + optional: true - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 + lightningcss-linux-arm-gnueabihf@1.30.1: + optional: true - strongly-connected-components@1.0.1: {} + lightningcss-linux-arm64-gnu@1.30.1: + optional: true - stylis@4.3.0: {} + lightningcss-linux-arm64-musl@1.30.1: + optional: true - sucrase@3.34.0: - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - commander: 4.1.1 - glob: 7.1.6 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.6 - ts-interface-checker: 0.1.13 - - supercluster@7.1.5: - dependencies: - kdbush: 3.0.0 + lightningcss-linux-x64-gnu@1.30.1: + optional: true - superscript-text@1.0.0: {} + lightningcss-linux-x64-musl@1.30.1: + optional: true - supports-preserve-symlinks-flag@1.0.0: {} + lightningcss-win32-arm64-msvc@1.30.1: + optional: true - svg-arc-to-cubic-bezier@3.2.0: {} + lightningcss-win32-x64-msvc@1.30.1: + optional: true - svg-path-bounds@1.0.2: + lightningcss@1.30.1: dependencies: - abs-svg-path: 0.1.1 - is-svg-path: 1.0.2 - normalize-svg-path: 1.1.0 - parse-svg-path: 0.1.2 + detect-libc: 2.0.4 + optionalDependencies: + lightningcss-darwin-arm64: 1.30.1 + lightningcss-darwin-x64: 1.30.1 + lightningcss-freebsd-x64: 1.30.1 + lightningcss-linux-arm-gnueabihf: 1.30.1 + lightningcss-linux-arm64-gnu: 1.30.1 + lightningcss-linux-arm64-musl: 1.30.1 + lightningcss-linux-x64-gnu: 1.30.1 + lightningcss-linux-x64-musl: 1.30.1 + lightningcss-win32-arm64-msvc: 1.30.1 + lightningcss-win32-x64-msvc: 1.30.1 + optional: true - svg-path-sdf@1.1.3: + lru-cache@5.1.1: dependencies: - bitmap-sdf: 1.0.4 - draw-svg-path: 1.0.0 - is-svg-path: 1.0.2 - parse-svg-path: 0.1.2 - svg-path-bounds: 1.0.2 + yallist: 3.1.1 - tailwindcss@3.3.5: + magic-string@0.30.17: dependencies: - '@alloc/quick-lru': 5.2.0 - arg: 5.0.2 - chokidar: 3.5.3 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.3.1 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.20.0 - lilconfig: 2.1.0 - micromatch: 4.0.5 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.0.0 - postcss: 8.4.31 - postcss-import: 15.1.0(postcss@8.4.31) - postcss-js: 4.0.1(postcss@8.4.31) - postcss-load-config: 4.0.1(postcss@8.4.31) - postcss-nested: 6.0.1(postcss@8.4.31) - postcss-selector-parser: 6.0.13 - resolve: 1.22.8 - sucrase: 3.34.0 - transitivePeerDependencies: - - ts-node + '@jridgewell/sourcemap-codec': 1.5.5 - thenby@1.3.4: {} + ms@2.1.2: {} - thenify-all@1.6.0: - dependencies: - thenify: 3.3.1 + nanoid@3.3.11: {} - thenify@3.3.1: + node-html-parser@6.1.13: dependencies: - any-promise: 1.3.0 + css-select: 5.2.2 + he: 1.2.0 - through2@0.6.5: - dependencies: - readable-stream: 1.0.34 - xtend: 4.0.2 + node-releases@2.0.21: {} - through2@2.0.5: + nth-check@2.1.1: dependencies: - readable-stream: 2.3.8 - xtend: 4.0.2 + boolbase: 1.0.0 - tinycolor2@1.6.0: {} + picocolors@1.1.1: {} - tinyqueue@2.0.3: {} - - to-float32@1.1.0: {} + picomatch@2.3.1: {} - to-px@1.0.1: - dependencies: - parse-unit: 1.0.1 + picomatch@4.0.3: {} - to-regex-range@5.0.1: + postcss@8.5.6: dependencies: - is-number: 7.0.0 + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 - topojson-client@3.1.0: + preact-render-to-string@6.6.1(preact@10.27.2): dependencies: - commander: 2.20.3 - - ts-dedent@2.2.0: {} + preact: 10.27.2 - ts-interface-checker@0.1.13: {} + preact@10.27.2: {} - type-check@0.3.2: + rollup@4.46.2: dependencies: - prelude-ls: 1.1.2 - - type@1.2.0: {} + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.46.2 + '@rollup/rollup-android-arm64': 4.46.2 + '@rollup/rollup-darwin-arm64': 4.46.2 + '@rollup/rollup-darwin-x64': 4.46.2 + '@rollup/rollup-freebsd-arm64': 4.46.2 + '@rollup/rollup-freebsd-x64': 4.46.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.46.2 + '@rollup/rollup-linux-arm-musleabihf': 4.46.2 + '@rollup/rollup-linux-arm64-gnu': 4.46.2 + '@rollup/rollup-linux-arm64-musl': 4.46.2 + '@rollup/rollup-linux-loongarch64-gnu': 4.46.2 + '@rollup/rollup-linux-ppc64-gnu': 4.46.2 + '@rollup/rollup-linux-riscv64-gnu': 4.46.2 + '@rollup/rollup-linux-riscv64-musl': 4.46.2 + '@rollup/rollup-linux-s390x-gnu': 4.46.2 + '@rollup/rollup-linux-x64-gnu': 4.46.2 + '@rollup/rollup-linux-x64-musl': 4.46.2 + '@rollup/rollup-win32-arm64-msvc': 4.46.2 + '@rollup/rollup-win32-ia32-msvc': 4.46.2 + '@rollup/rollup-win32-x64-msvc': 4.46.2 + fsevents: 2.3.3 - type@2.7.2: {} + semver@6.3.1: {} - typedarray-pool@1.2.0: + simple-code-frame@1.3.0: dependencies: - bit-twiddle: 1.0.2 - dup: 1.0.0 - - typedarray@0.0.6: {} + kolorist: 1.8.0 - unist-util-stringify-position@3.0.3: - dependencies: - '@types/unist': 2.0.9 + source-map-js@1.2.1: {} - universalify@2.0.0: {} + source-map@0.7.6: {} - unquote@1.1.1: {} + stack-trace@1.0.0-pre2: {} - update-browserslist-db@1.0.13(browserslist@4.22.1): + tinyglobby@0.2.14: dependencies: - browserslist: 4.22.1 - escalade: 3.1.1 - picocolors: 1.0.0 - - update-diff@1.1.0: {} + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 - util-deprecate@1.0.2: {} + typescript@5.9.2: {} - uuid@9.0.1: {} + undici-types@6.21.0: {} - uvu@0.5.6: + update-browserslist-db@1.1.3(browserslist@4.26.2): dependencies: - dequal: 2.0.3 - diff: 5.1.0 - kleur: 4.1.5 - sade: 1.8.1 + browserslist: 4.26.2 + escalade: 3.2.0 + picocolors: 1.1.1 - vite-plugin-static-copy@0.17.0(vite@4.5.0): + vite-prerender-plugin@0.5.12(vite@7.1.2(@types/node@20.19.16)(jiti@2.5.1)(lightningcss@1.30.1)): dependencies: - chokidar: 3.5.3 - fast-glob: 3.3.1 - fs-extra: 11.1.1 - picocolors: 1.0.0 - vite: 4.5.0 + kolorist: 1.8.0 + magic-string: 0.30.17 + node-html-parser: 6.1.13 + simple-code-frame: 1.3.0 + source-map: 0.7.6 + stack-trace: 1.0.0-pre2 + vite: 7.1.2(@types/node@20.19.16)(jiti@2.5.1)(lightningcss@1.30.1) - vite@4.5.0: + vite@7.1.2(@types/node@20.19.16)(jiti@2.5.1)(lightningcss@1.30.1): dependencies: - esbuild: 0.18.20 - postcss: 8.4.31 - rollup: 3.29.4 + esbuild: 0.25.9 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.46.2 + tinyglobby: 0.2.14 optionalDependencies: + '@types/node': 20.19.16 fsevents: 2.3.3 + jiti: 2.5.1 + lightningcss: 1.30.1 - vt-pbf@3.1.3: - dependencies: - '@mapbox/point-geometry': 0.1.0 - '@mapbox/vector-tile': 1.3.1 - pbf: 3.2.1 - - weak-map@1.0.8: {} - - web-worker@1.2.0: {} - - webgl-context@2.2.0: - dependencies: - get-canvas-context: 1.0.2 - - word-wrap@1.2.5: {} - - world-calendars@1.0.3: - dependencies: - object-assign: 4.1.1 - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrappy@1.0.2: {} - - xtend@2.2.0: {} - - xtend@4.0.2: {} - - y18n@5.0.8: {} - - yaml@2.3.3: {} - - yargs-parser@21.1.1: {} - - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.1.1 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 + yallist@3.1.1: {} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/pnpm-workspace.yaml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/pnpm-workspace.yaml new file mode 100644 index 000000000..c5739b743 --- /dev/null +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +ignoredBuiltDependencies: + - esbuild diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/postcss.config.js b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/postcss.config.js deleted file mode 100644 index fcfa614e4..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/postcss.config.js +++ /dev/null @@ -1,10 +0,0 @@ -let tailwindConfig = process.env.HUGO_FILE_TAILWIND_CONFIG_JS || './tailwind.config.js'; - -module.exports = { - plugins: { - 'postcss-import': {}, - 'tailwindcss/nesting': {}, - tailwindcss: {config: tailwindConfig}, - autoprefixer: {}, - } -}; diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/tailwind.config.js b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/tailwind.config.js deleted file mode 100644 index 7507b1477..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/tailwind.config.js +++ /dev/null @@ -1,183 +0,0 @@ -import 'dotenv/config' -const defaultTheme = require('tailwindcss/defaultTheme') - -const content_extra = process.env.HB_TW_CONTENT ? process.env.HB_TW_CONTENT.split(', ') : ''; - -console.log('Current directory: ' + process.cwd()); -console.log(`content_extra: ${content_extra}`); -// console.log('../../starters/'+process.env.HB_TPL+'/hugo_stats.json') - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: [ - // './hugo_stats.json', - './layouts/**/*.html', - '**/libs/chroma/*.css', - './**/*.svg', - '../../starters/**/*.md', - ...content_extra, - // ...(process.env.HB_TPL ? '../../starters/'+process.env.HB_TPL+'/hugo_stats.json' : './hugo_stats.json'), - ], - plugins: [ - require('@tailwindcss/typography'), - ], - safelist: [ - 'task-list', /* As it's added via JS */ - 'pl-4', 'pl-8', 'pl-12', /* TOC indents */ - 'min-h-screen', /* Blox options */ - { - /* For dynamic article-grid.start */ - pattern: /grid-cols-+/, - variants: ['md'], - }, - { - pattern: /bg-white+/, - }, - { - pattern: /bg-gray+/, - }, - { - pattern: /bg-primary+/, - }, - { - pattern: /bg-gradient+/, - }, - { - pattern: /from-primary+/, - }, - { - pattern: /to-primary+/, - }, - ], - /* /^bg-white/, /^bg-gray-/, /^bg-primary-/, /^bg-gradient-/, /^from-primary-/, /^to-primary-/, - /^md:grid-cols-+/], */ - /* /^pl-/ for TOC */ - darkMode: ['class'], - theme: { - extend: { - colors: { - 'hb-dark': 'rgb(23, 24, 28)', - neutral: { - DEFAULT: "rgb(var(--color-neutral) / )", - 50: "rgb(var(--color-neutral-50) / )", - 100: "rgb(var(--color-neutral-100) / )", - 200: "rgb(var(--color-neutral-200) / )", - 300: "rgb(var(--color-neutral-300) / )", - 400: "rgb(var(--color-neutral-400) / )", - 500: "rgb(var(--color-neutral-500) / )", - 600: "rgb(var(--color-neutral-600) / )", - 700: "rgb(var(--color-neutral-700) / )", - 800: "rgb(var(--color-neutral-800) / )", - 900: "rgb(var(--color-neutral-900) / )", - }, - primary: { - 50: "rgb(var(--color-primary-50) / )", - 100: "rgb(var(--color-primary-100) / )", - 200: "rgb(var(--color-primary-200) / )", - 300: "rgb(var(--color-primary-300) / )", - 400: "rgb(var(--color-primary-400) / )", - 500: "rgb(var(--color-primary-500) / )", - 600: "rgb(var(--color-primary-600) / )", - 700: "rgb(var(--color-primary-700) / )", - 800: "rgb(var(--color-primary-800) / )", - 900: "rgb(var(--color-primary-900) / )", - }, - secondary: { - 50: "rgb(var(--color-secondary-50) / )", - 100: "rgb(var(--color-secondary-100) / )", - 200: "rgb(var(--color-secondary-200) / )", - 300: "rgb(var(--color-secondary-300) / )", - 400: "rgb(var(--color-secondary-400) / )", - 500: "rgb(var(--color-secondary-500) / )", - 600: "rgb(var(--color-secondary-600) / )", - 700: "rgb(var(--color-secondary-700) / )", - 800: "rgb(var(--color-secondary-800) / )", - 900: "rgb(var(--color-secondary-900) / )", - }, - }, - fontFamily: { - 'sans': ['"Inter var"', ...defaultTheme.fontFamily.sans], - }, - fontSize: { - xs: '.75rem', - sm: '.875rem', - base: '1rem', - lg: '1.125rem', - xl: '1.25rem', - // '2xl': '1.5rem', - // '3xl': '1.875rem', - // '4xl': '2.25rem', - // '5xl': '3rem', - // '6xl': '4rem' - }, - typography: ({ theme }) => ({ - DEFAULT: { - css: { - "--tw-prose-body": theme("colors.neutral.700 / 1"), - "--tw-prose-headings": theme("colors.neutral.800 / 1"), - "--tw-prose-lead": theme("colors.neutral.500 / 1"), - "--tw-prose-links": theme("colors.primary.600 / 1"), - "--tw-prose-bold": theme("colors.neutral.900 / 1"), - "--tw-prose-counters": theme("colors.neutral.800 / 1"), - "--tw-prose-bullets": theme("colors.neutral.500 / 1"), - "--tw-prose-hr": theme("colors.neutral.200 / 1"), - "--tw-prose-quotes": theme("colors.neutral.700 / 1"), - "--tw-prose-quote-borders": theme("colors.primary.200 / 1"), - "--tw-prose-captions": theme("colors.neutral.500 / 1"), - "--tw-prose-code": theme("colors.secondary.700 / 1"), - "--tw-prose-pre-code": theme("colors.neutral.700 / 1"), - "--tw-prose-pre-bg": theme("colors.neutral.50 / 1"), - "--tw-prose-th-borders": theme("colors.neutral.500 / 1"), - "--tw-prose-td-borders": theme("colors.neutral.300 / 1"), - "--tw-prose-invert-body": theme("colors.neutral.300 / 1"), - "--tw-prose-invert-headings": theme("colors.neutral.50 / 1"), - "--tw-prose-invert-lead": theme("colors.neutral.500 / 1"), - "--tw-prose-invert-links": theme("colors.primary.400 / 1"), - "--tw-prose-invert-bold": theme("colors.neutral.DEFAULT / 1"), - "--tw-prose-invert-counters": theme("colors.neutral.400 / 1"), - "--tw-prose-invert-bullets": theme("colors.neutral.600 / 1"), - "--tw-prose-invert-hr": theme("colors.neutral.500 / 1"), - "--tw-prose-invert-quotes": theme("colors.neutral.200 / 1"), - "--tw-prose-invert-quote-borders": theme("colors.primary.900 / 1"), - "--tw-prose-invert-captions": theme("colors.neutral.400 / 1"), - "--tw-prose-invert-code": theme("colors.secondary.400 / 1"), - "--tw-prose-invert-pre-code": theme("colors.neutral.200 / 1"), - "--tw-prose-invert-pre-bg": theme("colors.neutral.700 / 1"), - "--tw-prose-invert-th-borders": theme("colors.neutral.500 / 1"), - "--tw-prose-invert-td-borders": theme("colors.neutral.700 / 1"), - a: { - textDecoration: "underline", - textDecorationColor: theme("colors.primary.300 / 1"), - fontWeight: "500", - "&:hover": { - color: theme("colors.primary.600 / 1"), - textDecoration: "none", - borderRadius: "0.09rem", - }, - }, - mark: { - color: theme("colors.neutral.100 / 1"), - backgroundColor: theme("colors.primary.600 / 1"), - padding: "0.1rem 0.2rem", - borderRadius: "0.25rem", - }, - }, - }, - invert: { - css: { - a: { - textDecorationColor: theme("colors.neutral.500 / 1"), - "&:hover": { - color: theme("colors.primary.300 / 1"), - }, - }, - mark: { - backgroundColor: theme("colors.primary.400 / 1"), - color: theme("colors.black / 1"), - }, - }, - }, - }), - } - } -} diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/vite.config.js b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/vite.config.js deleted file mode 100644 index b55b0687c..000000000 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/vite.config.js +++ /dev/null @@ -1,43 +0,0 @@ -import {defineConfig} from 'vite' -import {viteStaticCopy} from 'vite-plugin-static-copy' -import {rm} from 'node:fs/promises' - -const distDir = './assets/dist/lib'; - - -export default defineConfig({ - build: { - // Wipe `assets/dist/lib/` first to remove old artifacts prior to copying latest assets across. - emptyOutDir: true, - outDir: distDir, - rollupOptions: { - // Vite requires us to provide an input even though we want to build site with Hugo instead. - input: 'layouts/index.html', - }, - }, - plugins: [viteStaticCopy({ - targets: [{ - "src": "node_modules/mermaid/dist/mermaid.min.js", "dest": "mermaid/" - }, { - "src": "node_modules/plotly.js/dist/plotly.min.js", "dest": "plotly/" - }, { - "src": "node_modules/katex/dist/katex.min.js", "dest": "katex/" - }, { - "src": "node_modules/katex/dist/katex.min.css", "dest": "katex/" - }, { - "src": "node_modules/katex/dist/contrib/auto-render.min.js", "dest": "katex/" - }, { - "src": "node_modules/katex/dist/fonts/", "dest": "katex/" - }, { - "src": "node_modules/markmap-autoloader/dist/index.js", "dest": "markmap/" - }, { - "src": "node_modules/alpinejs/dist/cdn.min.js", "dest": "alpinejs/" - }, - ], - hook: "buildStart", enforce: 'pre' - }), { - name: "Cleaning assets folder", async closeBundle() { - await rm(distDir + '/layouts', {recursive: true, force: true}); - }, - },] -}) From 9def03d1aea2d9ea79f5b807ceeeb3752b2fccec Mon Sep 17 00:00:00 2001 From: DominiqueMakowski Date: Sat, 20 Dec 2025 17:57:20 +0000 Subject: [PATCH 2/3] replace all twitter URLs by x --- content/authors/Anshu-Te/_index.md | 2 +- content/authors/annabel-chen/_index.md | 2 +- content/authors/dominique-makowski/_index.md | 2 +- content/authors/stephanie-kirk/_index.md | 2 +- content/authors/tam-pham/_index.md | 2 +- content/authors/wilson-lim/_index.md | 2 +- content/authors/zen-juen/_index.md | 2 +- content/authors/ziliang-ngoi/_index.md | 2 +- content/event/2022_07_OHBM/index.md | 2 +- content/event/2023_09_ESCOP/index.md | 2 +- content/home/11_contact.md | 2 +- content/post/2019-05-17-simulate_ecg/index.md | 2 +- .../post/2020-05-14-intro_bayestestR/index.md | 2 +- .../2020-05-16-python_mandelbrot/index.md | 2 +- content/post/2020-05-18-analyze_RT/index.md | 2 +- content/post/2020-05-22-r_or_python/index.md | 4 +- .../2020-09-14-individual_scores/index.Rmd | 2 +- .../2020-09-14-individual_scores/index.html | 191 ++++++++++++------ .../2020-09-14-individual_scores/index.md | 20 +- .../post33082eca6da8.tmp.html | 178 +++++++++++----- .../index.md | 2 +- .../index.md | 2 +- .../post/2021-01-03-visual_agnosia/index.md | 4 +- .../post/2021-02-10-template_results/index.md | 2 +- .../post/2022-02-01-learnbayesstats/index.md | 2 +- .../2023-04-04-PsychologychatGPT/index.md | 4 +- data/page_sharer.toml | 2 +- .../archetypes/authors/_index.md | 2 +- .../blox-bootstrap/data/page_sharer.toml | 2 +- 29 files changed, 291 insertions(+), 156 deletions(-) diff --git a/content/authors/Anshu-Te/_index.md b/content/authors/Anshu-Te/_index.md index 392a91601..3b9c51cbf 100644 --- a/content/authors/Anshu-Te/_index.md +++ b/content/authors/Anshu-Te/_index.md @@ -27,7 +27,7 @@ social: link: mailto:anshu.te@ntu.edu.sg - icon: twitter icon_pack: fab - link: https://twitter.com/anshu_te97 + link: https://x.com/anshu_te97 - icon: researchgate icon_pack: fab link: https://www.researchgate.net/profile/An_Shu_Te diff --git a/content/authors/annabel-chen/_index.md b/content/authors/annabel-chen/_index.md index 45f8b8fdb..80013fd44 100644 --- a/content/authors/annabel-chen/_index.md +++ b/content/authors/annabel-chen/_index.md @@ -23,7 +23,7 @@ social: link: mailto:your@annabelchen@ntu.edu.sg - icon: twitter icon_pack: fab - link: https://twitter.com/DrAnnabelChen + link: https://x.com/DrAnnabelChen - icon: google-scholar icon_pack: ai link: https://scholar.google.com/citations?user=kMqbNZYAAAAJ&hl=en&oi=ao diff --git a/content/authors/dominique-makowski/_index.md b/content/authors/dominique-makowski/_index.md index 96ce71b2b..788f29a9f 100644 --- a/content/authors/dominique-makowski/_index.md +++ b/content/authors/dominique-makowski/_index.md @@ -49,7 +49,7 @@ social: link: '#contact' - icon: twitter icon_pack: fab - link: https://twitter.com/Dom_Makowski + link: https://x.com/Dom_Makowski - icon: google-scholar icon_pack: ai link: https://scholar.google.fr/citations?user=bg0BZ-QAAAAJ&hl=en diff --git a/content/authors/stephanie-kirk/_index.md b/content/authors/stephanie-kirk/_index.md index 0fe52a275..fa61632ff 100644 --- a/content/authors/stephanie-kirk/_index.md +++ b/content/authors/stephanie-kirk/_index.md @@ -34,7 +34,7 @@ social: link: mailto:stephanie.morgank@gmail.com - icon: twitter icon_pack: fab - link: https://twitter.com/morgkms + link: https://x.com/morgkms - icon: researchgate icon_pack: ai link: diff --git a/content/authors/tam-pham/_index.md b/content/authors/tam-pham/_index.md index 52648ba00..caba6de17 100644 --- a/content/authors/tam-pham/_index.md +++ b/content/authors/tam-pham/_index.md @@ -26,7 +26,7 @@ social: link: "phamtt@ntu.edu.sg" - icon: twitter icon_pack: fab - link: https://twitter.com/tampham94 + link: https://x.com/tampham94 - icon: google-scholar icon_pack: ai link: https://scholar.google.com/citations?user=hlomrl4AAAAJ&hl=en diff --git a/content/authors/wilson-lim/_index.md b/content/authors/wilson-lim/_index.md index fb812c475..c3aefc0b8 100644 --- a/content/authors/wilson-lim/_index.md +++ b/content/authors/wilson-lim/_index.md @@ -32,7 +32,7 @@ social: link: mailto:wilson.lim@ntu.edu.sg - icon: twitter icon_pack: fab - link: https://twitter.com/WilsonLimPH + link: https://x.com/WilsonLimPH - icon: google-scholar icon_pack: ai link: https://scholar.google.com/citations?view_op=list_works&hl=en&user=qKbexJIAAAAJ diff --git a/content/authors/zen-juen/_index.md b/content/authors/zen-juen/_index.md index 2979c9a6a..8d88cc4bf 100644 --- a/content/authors/zen-juen/_index.md +++ b/content/authors/zen-juen/_index.md @@ -25,7 +25,7 @@ social: link: "zenjuen.lau@ntu.edu.sg" - icon: twitter icon_pack: fab - link: https://twitter.com/ZenJuen + link: https://x.com/ZenJuen - icon: google-scholar icon_pack: ai link: https://scholar.google.com/citations?user=QNDb0QgAAAAJ&hl=en diff --git a/content/authors/ziliang-ngoi/_index.md b/content/authors/ziliang-ngoi/_index.md index e9191d575..b2d02cba2 100644 --- a/content/authors/ziliang-ngoi/_index.md +++ b/content/authors/ziliang-ngoi/_index.md @@ -32,7 +32,7 @@ social: link: mailto:ziliangngoi@gmail.com - icon: twitter icon_pack: fab - link: https://twitter.com/MaxNgoi + link: https://x.com/MaxNgoi - icon: researchgate icon_pack: ai link: https://www.researchgate.net/profile/Zi-Liang-Ngoi diff --git a/content/event/2022_07_OHBM/index.md b/content/event/2022_07_OHBM/index.md index 2ec98bc5a..f740fee05 100644 --- a/content/event/2022_07_OHBM/index.md +++ b/content/event/2022_07_OHBM/index.md @@ -20,7 +20,7 @@ featured: false # - icon: twitter # icon_pack: fab # name: Follow -# url: https://twitter.com/georgecushen +# url: https://x.com/georgecushen location: Glasgow, UK # projects: # - example diff --git a/content/event/2023_09_ESCOP/index.md b/content/event/2023_09_ESCOP/index.md index ec585dfbc..d787c5f86 100644 --- a/content/event/2023_09_ESCOP/index.md +++ b/content/event/2023_09_ESCOP/index.md @@ -20,7 +20,7 @@ featured: false # - icon: twitter # icon_pack: fab # name: Follow -# url: https://twitter.com/georgecushen +# url: https://x.com/georgecushen location: Porto, Portugal # projects: # - example diff --git a/content/home/11_contact.md b/content/home/11_contact.md index a43b014d9..f0bcd5a1d 100644 --- a/content/home/11_contact.md +++ b/content/home/11_contact.md @@ -35,7 +35,7 @@ content: - icon: twitter icon_pack: fab name: Follow me - link: 'https://twitter.com/Dom_Makowski' + link: 'https://x.com/Dom_Makowski' # - icon: skype # icon_pack: fab # name: Skype Me diff --git a/content/post/2019-05-17-simulate_ecg/index.md b/content/post/2019-05-17-simulate_ecg/index.md index 5bfc3f1e4..da26d7d0b 100644 --- a/content/post/2019-05-17-simulate_ecg/index.md +++ b/content/post/2019-05-17-simulate_ecg/index.md @@ -77,4 +77,4 @@ McSharry, P. E., Clifford, G. D., Tarassenko, L., & Smith, L. A. (2003). A dynam *Thanks for reading! Do not hesitate to tweet and share this post, and leave a comment below* :hugs: -🐦 *Don't forget to join me on Twitter* [@Dom_Makowski](https://twitter.com/Dom_Makowski) +🐦 *Don't forget to join me on Twitter* [@Dom_Makowski](https://x.com/Dom_Makowski) diff --git a/content/post/2020-05-14-intro_bayestestR/index.md b/content/post/2020-05-14-intro_bayestestR/index.md index 1cea00779..f0449ed42 100644 --- a/content/post/2020-05-14-intro_bayestestR/index.md +++ b/content/post/2020-05-14-intro_bayestestR/index.md @@ -36,4 +36,4 @@ You can find the link here: *Thanks for reading! Do not hesitate to tweet and share this post, and leave a comment below* :hugs: -🐦 *Don't forget to join me on Twitter* [@Dom_Makowski](https://twitter.com/Dom_Makowski) +🐦 *Don't forget to join me on Twitter* [@Dom_Makowski](https://x.com/Dom_Makowski) diff --git a/content/post/2020-05-16-python_mandelbrot/index.md b/content/post/2020-05-16-python_mandelbrot/index.md index f473bfc11..1d63c8bba 100644 --- a/content/post/2020-05-16-python_mandelbrot/index.md +++ b/content/post/2020-05-16-python_mandelbrot/index.md @@ -70,4 +70,4 @@ Have fun! *Thanks for reading! Do not hesitate to tweet and share this post, and leave a comment below* :hugs: -🐦 *Don't forget to join me on Twitter* [@Dom_Makowski](https://twitter.com/Dom_Makowski) +🐦 *Don't forget to join me on Twitter* [@Dom_Makowski](https://x.com/Dom_Makowski) diff --git a/content/post/2020-05-18-analyze_RT/index.md b/content/post/2020-05-18-analyze_RT/index.md index 87c943682..5f9d2a68c 100644 --- a/content/post/2020-05-18-analyze_RT/index.md +++ b/content/post/2020-05-18-analyze_RT/index.md @@ -37,4 +37,4 @@ It is a must-read for all psychologist. Do check-it out!! *Thanks for reading! Do not hesitate to tweet and share this post, and leave a comment below* :hugs: -🐦 *And don't forget to join me on Twitter* [@Dom_Makowski](https://twitter.com/Dom_Makowski) +🐦 *And don't forget to join me on Twitter* [@Dom_Makowski](https://x.com/Dom_Makowski) diff --git a/content/post/2020-05-22-r_or_python/index.md b/content/post/2020-05-22-r_or_python/index.md index bd0bd80f2..0ac3a7d54 100644 --- a/content/post/2020-05-22-r_or_python/index.md +++ b/content/post/2020-05-22-r_or_python/index.md @@ -133,7 +133,7 @@ You heard it right! To start with R you don't need to know stats or maths like a - **You are interested in joining the academic community** -Because most of its users are academics, R has a fantastic community online, for instance on [**Twitter \#rstats**](https://twitter.com/hashtag/rstats). It's also super inclusive (e.g., the [R-Ladies](https://rladies.org/)). +Because most of its users are academics, R has a fantastic community online, for instance on [**Twitter \#rstats**](https://x.com/hashtag/rstats). It's also super inclusive (e.g., the [R-Ladies](https://rladies.org/)). ### Other considerations @@ -157,6 +157,6 @@ It might be easier if you have mentors that can understand what you are doing an --- -*Thanks for reading!* 🐦 *Don't forget to join me on Twitter* ([@Dom_Makowski](https://twitter.com/Dom_Makowski)) *and leave a comment below* 👇 +*Thanks for reading!* 🐦 *Don't forget to join me on Twitter* ([@Dom_Makowski](https://x.com/Dom_Makowski)) *and leave a comment below* 👇 diff --git a/content/post/2020-09-14-individual_scores/index.Rmd b/content/post/2020-09-14-individual_scores/index.Rmd index 12ef06bf3..21857b421 100644 --- a/content/post/2020-09-14-individual_scores/index.Rmd +++ b/content/post/2020-09-14-individual_scores/index.Rmd @@ -126,4 +126,4 @@ Though not significantly different, it seems that **raw basic estimates** (that *Thanks for reading! Do not hesitate to share this post, and leave a comment below* :hugs: -🐦 *And don't forget to join me on Twitter* [@Dom_Makowski](https://twitter.com/Dom_Makowski) +🐦 *And don't forget to join me on Twitter* [@Dom_Makowski](https://x.com/Dom_Makowski) diff --git a/content/post/2020-09-14-individual_scores/index.html b/content/post/2020-09-14-individual_scores/index.html index 711890536..a9e0262ed 100644 --- a/content/post/2020-09-14-individual_scores/index.html +++ b/content/post/2020-09-14-individual_scores/index.html @@ -5,90 +5,142 @@ draft: false featured: false authors: -- Dominique Makowski + - Dominique Makowski date: 2020-09-14 categories: -- R -- Statistics + - R + - Statistics tags: -- Statistics -- R -- Neuropsychology -- Bayesian -- Individual scores + - Statistics + - R + - Neuropsychology + - Bayesian + - Individual scores image: - caption: 'Absolute difference between true individual scores and the scores estimated via different methods.' - placement: 1 + caption: "Absolute difference between true individual scores and the scores estimated via different methods." + placement: 1 --- - -
    -

    Introduction

    -

    Many psychology fields require to extract individual scores, i.e., point-estimates (i.e., a single value) for a participant/patient, to be used as an index of something and later interpreted or re-used in further statistical analyses. This single index is often derived from several “trials”. For instance, the reaction times in the condition A (let’s say, the baseline) will be averaged together, and the same will be done with the condition B. Finally, the difference between these two means will be used an the individual score for a given participant.

    -

    However, we can intuitively feel that we lose a lot of information when averaging these scores. Do we deal appropriately with the variability related to individuals, conditions, or the noise aggravated by potential outliers? This is especially important when working with a limited amount of trials.

    -

    With the advent of recent computational advances, new easy-to-implement alternatives emerge. For instance, one can “model” the effects at an individual level (e.g., the simplest case, for the two conditions paradigm described above, would be a linear regression with the condition as a unique predictor), and use the parameters of each model as individual scores (e.g., the “slope” coefficient of the effect of the manipulation), rather than the raw mean. This opens up the possibility of including covariates and take into account other sources of known variability, which could lead to better estimates.

    -

    However, individual models are also sensitive to outliers and noise. Thus, another possibility is to model the effects at the population level and, at the same time, at the individual level. This can be achieved by modelling the participants as a random factor in a mixed model. In this case, the individual estimates might benefit from the population estimates. In other words, the effects at the population level will “constrain” or “guide” the estimation at an individual level to potentially limit extreme parameters.

    -

    Unfortunately, the above method requires to have all the data at hand, to be able to fit the population model. This is often not the case in on-going acquisition, or in neuropsychological contexts, in which the practitioners simply acquire data for one patient, and have to compute individual scores, without having access to the detailed population data. Thus, an in-between alternative could make use of Bayesian models, in which the population effects (for instance, the mean effect of the condition) could be entered as an informative prior in the individual models to, again, “guide” the estimation at an individual level and hopefully limit the impact of noise or outliers observations.

    -

    In this post, the aim is to compare these 4 methods (basic individual model - equivalent to using the raw mean, population model, individual model with informative priors) in recovering the “true” effects using a simulated dataset.

    +

    Introduction

    +

    + Many psychology fields require to extract individual scores, i.e., point-estimates (i.e., a single value) for a + participant/patient, to be used as an index of something and later interpreted or re-used in further statistical analyses. This + single index is often derived from several “trials”. For instance, the reaction times in the condition A (let’s say, the baseline) + will be averaged together, and the same will be done with the condition B. Finally, the difference between these + two means will be used an the individual score for a given participant. +

    +

    + However, we can intuitively feel that we lose a lot of information when averaging these scores. Do we deal + appropriately with the variability related to individuals, conditions, or the noise aggravated by potential outliers? This is + especially important when working with a limited amount of trials. +

    +

    + With the advent of recent computational advances, new easy-to-implement alternatives emerge. For instance, + one can “model” the effects at an individual level (e.g., the simplest case, for the two conditions paradigm + described above, would be a linear regression with the condition as a unique predictor), and use the parameters of + each model as individual scores (e.g., the “slope” coefficient of the effect of the manipulation), rather than the raw mean. This + opens up the possibility of including covariates and take into account other sources of known variability, which could lead to + better estimates. +

    +

    + However, individual models are also sensitive to outliers and noise. Thus, another possibility is to + model the effects at the population level and, at the same time, at the individual level. This can be + achieved by modelling the participants as a random factor in a mixed model. In this case, the individual estimates + might benefit from the population estimates. In other words, the effects at the population level will “constrain” or “guide” the + estimation at an individual level to potentially limit extreme parameters. +

    +

    + Unfortunately, the above method requires to have all the data at hand, to be able to fit the population model. This is often not the + case in on-going acquisition, or in neuropsychological contexts, in which the practitioners simply acquire data for one patient, and + have to compute individual scores, without having access to the detailed population data. Thus, an in-between alternative could make + use of Bayesian models, in which the population effects (for instance, the mean effect of the condition) could be + entered as an informative prior in the individual models to, again, “guide” the estimation at an individual level + and hopefully limit the impact of noise or outliers observations. +

    +

    + In this post, the aim is to compare these 4 methods (basic individual model - equivalent to using the raw mean, population model, + individual model with informative priors) in recovering the “true” effects using a simulated dataset. +

    -

    Results

    -
    -

    Generate Data

    -

    We generate several datasets in which we manipulate the number of participants, in which the score of interest is the effect of a manipulation as compared to a baseline condition. 20 trials per condition will be generated with a known “true” effect (the centre of the distribution from which the data is generated). Gaussian noise of varying standard deviation will be added to create a natural variability (See the functions’ definition below).

    -
    library(tidyverse)
    +    

    Results

    +
    +

    Generate Data

    +

    + We generate several datasets in which we manipulate the number of participants, in which the score of interest is the effect of + a manipulation as compared to a baseline condition. 20 trials per condition will be generated with a known “true” effect (the + centre of the distribution from which the data is generated). Gaussian noise of varying standard deviation will be added to + create a natural variability (See the functions’ definition below). +

    +
    library(tidyverse)
     library(easystats)
     
     data <- get_data(n_participants=1000, n_trials=20)
     results <- get_results(data)
    -
    -*Example of a dataset containing 20 participants (shown with different colors). As can be seen, we introduced modulations in the inter- and intra- individual variability.* -

    -Figure 1: Example of a dataset containing 20 participants (shown with different colors). As can be seen, we introduced modulations in the inter- and intra- individual variability. -

    -
    -

    We will then compare the scores obtained by each method to the “true” score of each participant by substracting them from one another. As such, for each method, we obtain the absolute “distance” from the true score.

    -
    -
    -

    Fit model

    -

    Contrast analysis will be applied to compare the different methods together.

    -
    model <- lm(Diff_Abs ~ Method, data=results)
    +        
    + + *Example of a dataset containing 20 participants (shown with different colors). As can be seen, we introduced modulations in the inter- and intra- individual variability.* +

    + Figure 1: + Example of a dataset containing 20 participants (shown with different colors). As can be seen, we introduced + modulations in the inter- and intra- individual variability. +

    +
    +

    + We will then compare the scores obtained by each method to the “true” score of each participant by substracting them from one + another. As such, for each method, we obtain the absolute “distance” from the true score. +

    +
    +
    +

    Fit model

    +

    Contrast analysis will be applied to compare the different methods together.

    +
    model <- lm(Diff_Abs ~ Method, data=results)
     
     modelbased::estimate_contrasts(model) %>%
       arrange(Difference) %>%
       mutate(Level1 = stringr::str_remove(Level1, "Diff_"),
              Level2 = stringr::str_remove(Level2, "Diff_")) %>% 
       select(Level1, Level2, Difference, CI_low, CI_high, p)
    -
    ## Level1                 |                 Level2 | Difference |            CI |      p
    +        
    ## Level1                 |                 Level2 | Difference |            CI |      p
     ## -------------------------------------------------------------------------------------
     ## IndividualModel_Priors |        PopulationModel |  -1.85e-03 | [-0.01, 0.01] | > .999
     ## IndividualModel_Freq   |        PopulationModel |   1.70e-03 | [-0.01, 0.01] | > .999
     ## IndividualModel_Freq   | IndividualModel_Priors |   3.55e-03 | [-0.01, 0.01] | > .999
    -
    -
    -

    Visualize the results

    -
    -*Average accuracy of the different methods (the closest to 0 the better).* -

    -Figure 2: Average accuracy of the different methods (the closest to 0 the better). -

    -
    -
    -*Accuracy depending on the number of total participants in the dataset.* -

    -Figure 3: Accuracy depending on the number of total participants in the dataset. -

    -
    -
    +
    +
    +

    Visualize the results

    +
    + + *Average accuracy of the different methods (the closest to 0 the better).* +

    Figure 2: Average accuracy of the different methods (the closest to 0 the better).

    +
    +
    + + *Accuracy depending on the number of total participants in the dataset.* +

    Figure 3: Accuracy depending on the number of total participants in the dataset.

    +
    +
    -

    Conclusion

    -

    Though not significantly different, it seems that raw basic estimates (that rely only on the individual data) perform consistently worse than the population model or individual models informed by priors, especially for small datasets (between 10 and 100 participants) - though again, the difference is tiny in our simulated dataset. In the absence of the whole population dataset, it seems that using individual Bayesian model with informative priors (derived from the population model) is a safe alternative.

    +

    Conclusion

    +

    + Though not significantly different, it seems that raw basic estimates (that rely only on the individual data) + perform consistently worse than the population model or individual models informed by priors, especially for small + datasets (between 10 and 100 participants) - though again, the difference is tiny in our simulated dataset. In the absence of the + whole population dataset, it seems that using individual Bayesian model with informative priors (derived from the population model) + is a safe alternative. +

    -

    Functions

    -
    library(tidyverse)
    +    

    Functions

    +
    library(tidyverse)
     library(easystats)
     library(rstanarm)
     library(ggdist)
    @@ -294,10 +346,23 @@ 

    Functions

    save(d, file = "data.Rdata")
    -

    References

    -

    You can reference this post as follows:

    -

    - Makowski, D. (2020, September 14). How to extract individual scores from repeated measures. Retrieved from https://dominiquemakowski.github.io/post/individual_scores/

    -
    -

    Thanks for reading! Do not hesitate to share this post, and leave a comment below :hugs:

    -

    🐦 And don’t forget to join me on Twitter [@Dom_Makowski](https://twitter.com/Dom_Makowski)

    +

    References

    +

    You can reference this post as follows:

    +

    + - Makowski, D. (2020, September 14). How to extract individual scores from repeated measures. Retrieved from + https://dominiquemakowski.github.io/post/individual_scores/ +

    +
    +

    Thanks for reading! Do not hesitate to share this post, and leave a comment below :hugs:

    +

    + 🐦 And don’t forget to join me on Twitter [@Dom_Makowski](https://x.com/Dom_Makowski) +

    diff --git a/content/post/2020-09-14-individual_scores/index.md b/content/post/2020-09-14-individual_scores/index.md index 263f4205d..5e8956a4c 100644 --- a/content/post/2020-09-14-individual_scores/index.md +++ b/content/post/2020-09-14-individual_scores/index.md @@ -49,7 +49,7 @@ We generate several datasets in which we manipulate the number of participants, -```r +``` r library(tidyverse) library(easystats) @@ -59,7 +59,7 @@ results <- get_results(data)
    *Example of a dataset containing 20 participants (shown with different colors). As can be seen, we introduced modulations in the inter- and intra- individual variability.* -

    Figure 1: *Example of a dataset containing 20 participants (shown with different colors). As can be seen, we introduced modulations in the inter- and intra- individual variability.*

    +

    Figure 1: *Example of a dataset containing 20 participants (shown with different colors). As can be seen, we introduced modulations in the inter- and intra- individual variability.*

    We will then compare the scores obtained by each method to the "true" score of each participant by substracting them from one another. As such, for each method, we obtain the absolute "distance" from the true score. @@ -70,7 +70,7 @@ We will then compare the scores obtained by each method to the "true" score of e Contrast analysis will be applied to compare the different methods together. -```r +``` r model <- lm(Diff_Abs ~ Method, data=results) modelbased::estimate_contrasts(model) %>% @@ -81,10 +81,10 @@ modelbased::estimate_contrasts(model) %>% ``` ``` -## Level1 | Level2 | Difference | CI | p +## Level1 | Level2 | Difference | CI | p ## ------------------------------------------------------------------------------------- -## IndividualModel_Priors | PopulationModel | -1.85e-03 | [-0.01, 0.01] | > .999 -## IndividualModel_Freq | PopulationModel | 1.70e-03 | [-0.01, 0.01] | > .999 +## IndividualModel_Priors | PopulationModel | -1.85e-03 | [-0.01, 0.01] | > .999 +## IndividualModel_Freq | PopulationModel | 1.70e-03 | [-0.01, 0.01] | > .999 ## IndividualModel_Freq | IndividualModel_Priors | 3.55e-03 | [-0.01, 0.01] | > .999 ``` @@ -94,12 +94,12 @@ modelbased::estimate_contrasts(model) %>%
    *Average accuracy of the different methods (the closest to 0 the better).* -

    Figure 2: *Average accuracy of the different methods (the closest to 0 the better).*

    +

    Figure 2: *Average accuracy of the different methods (the closest to 0 the better).*

    *Accuracy depending on the number of total participants in the dataset.* -

    Figure 3: *Accuracy depending on the number of total participants in the dataset.*

    +

    Figure 3: *Accuracy depending on the number of total participants in the dataset.*

    ### Conclusion @@ -112,7 +112,7 @@ Though not significantly different, it seems that **raw basic estimates** (that ### Functions -```r +``` r library(tidyverse) library(easystats) library(rstanarm) @@ -329,4 +329,4 @@ save(d, file = "data.Rdata") *Thanks for reading! Do not hesitate to share this post, and leave a comment below* :hugs: -🐦 *And don't forget to join me on Twitter* [@Dom_Makowski](https://twitter.com/Dom_Makowski) +🐦 *And don't forget to join me on Twitter* [@Dom_Makowski](https://x.com/Dom_Makowski) diff --git a/content/post/2020-09-14-individual_scores/post33082eca6da8.tmp.html b/content/post/2020-09-14-individual_scores/post33082eca6da8.tmp.html index b1ccb93f8..44ffad5e8 100644 --- a/content/post/2020-09-14-individual_scores/post33082eca6da8.tmp.html +++ b/content/post/2020-09-14-individual_scores/post33082eca6da8.tmp.html @@ -1,69 +1,130 @@
    -

    0.0.1 Introduction

    -

    Many psychology fields require to extract individual scores, i.e., point-estimates (i.e., a single value) for a participant/patient, to be used as an index of something and later interpreted or re-used in further statistical analyses. This single index is often derived from several “trials”. For instance, the reaction times in the condition A (let’s say, the baseline) will be averaged together, and the same will be done with the condition B. Finally, the difference between these two means will be used an the individual score for a given participant.

    -

    However, we can intuitively feel that we lose a lot of information when averaging these scores. Do we deal appropriately with the variability related to individuals, conditions, or the noise aggravated by potential outliers? This is especially important when working with a limited amount of trials.

    -

    With the advent of recent computational advances, new easy-to-implement alternatives emerge. For instance, one can “model” the effects at an individual level (e.g., the simplest case, for the two conditions paradigm described above, would be a linear regression with the condition as a unique predictor), and use the parameters of each model as individual scores (e.g., the “slope” coefficient of the effect of the manipulation), rather than the raw mean. This opens up the possibility of including covariates and take into account other sources of known variability, which could lead to better estimates.

    -

    However, individual models are also sensitive to outliers and noise. Thus, another possibility is to model the effects at the population level and, at the same time, at the individual level. This can be achieved by modelling the participants as a random factor in a mixed model. In this case, the individual estimates might benefit from the population estimates. In other words, the effects at the population level will “constrain” or “guide” the estimation at an individual level to potentially limit extreme parameters.

    -

    Unfortunately, the above method requires to have all the data at hand, to be able to fit the population model. This is often not the case in on-going acquisition, or in neuropsychological contexts, in which the practitioners simply acquire data for one patient, and have to compute individual scores, without having access to the detailed population data. Thus, an in-between alternative could make use of Bayesian models, in which the population effects (for instance, the mean effect of the condition) could be entered as an informative prior in the individual models to, again, “guide” the estimation at an individual level and hopefully limit the impact of noise or outliers observations.

    -

    In this post, the aim is to compare these 4 methods (basic individual model - equivalent to using the raw mean, population model, individual model with informative priors) in recovering the “true” effects using a simulated dataset.

    +

    0.0.1 Introduction

    +

    + Many psychology fields require to extract individual scores, i.e., point-estimates (i.e., a single value) for a + participant/patient, to be used as an index of something and later interpreted or re-used in further statistical analyses. This + single index is often derived from several “trials”. For instance, the reaction times in the condition A (let’s say, the baseline) + will be averaged together, and the same will be done with the condition B. Finally, the difference between these + two means will be used an the individual score for a given participant. +

    +

    + However, we can intuitively feel that we lose a lot of information when averaging these scores. Do we deal + appropriately with the variability related to individuals, conditions, or the noise aggravated by potential outliers? This is + especially important when working with a limited amount of trials. +

    +

    + With the advent of recent computational advances, new easy-to-implement alternatives emerge. For instance, + one can “model” the effects at an individual level (e.g., the simplest case, for the two conditions paradigm + described above, would be a linear regression with the condition as a unique predictor), and use the parameters of + each model as individual scores (e.g., the “slope” coefficient of the effect of the manipulation), rather than the raw mean. This + opens up the possibility of including covariates and take into account other sources of known variability, which could lead to + better estimates. +

    +

    + However, individual models are also sensitive to outliers and noise. Thus, another possibility is to + model the effects at the population level and, at the same time, at the individual level. This can be + achieved by modelling the participants as a random factor in a mixed model. In this case, the individual estimates + might benefit from the population estimates. In other words, the effects at the population level will “constrain” or “guide” the + estimation at an individual level to potentially limit extreme parameters. +

    +

    + Unfortunately, the above method requires to have all the data at hand, to be able to fit the population model. This is often not the + case in on-going acquisition, or in neuropsychological contexts, in which the practitioners simply acquire data for one patient, and + have to compute individual scores, without having access to the detailed population data. Thus, an in-between alternative could make + use of Bayesian models, in which the population effects (for instance, the mean effect of the condition) could be + entered as an informative prior in the individual models to, again, “guide” the estimation at an individual level + and hopefully limit the impact of noise or outliers observations. +

    +

    + In this post, the aim is to compare these 4 methods (basic individual model - equivalent to using the raw mean, population model, + individual model with informative priors) in recovering the “true” effects using a simulated dataset. +

    -

    0.0.2 Results

    -
    -

    0.0.2.1 Generate Data

    -

    We generate several datasets in which we manipulate the number of participants, in which the score of interest is the effect of a manipulation as compared to a baseline condition. 20 trials per condition will be generated with a known “true” effect (the centre of the distribution from which the data is generated). Gaussian noise of varying standard deviation will be added to create a natural variability (See the functions’ definition below).

    -
    library(tidyverse)
    +    

    0.0.2 Results

    +
    +

    0.0.2.1 Generate Data

    +

    + We generate several datasets in which we manipulate the number of participants, in which the score of interest is the effect of + a manipulation as compared to a baseline condition. 20 trials per condition will be generated with a known “true” effect (the + centre of the distribution from which the data is generated). Gaussian noise of varying standard deviation will be added to + create a natural variability (See the functions’ definition below). +

    +
    +
    library(tidyverse)
     library(easystats)
     
     data <- get_data(n_participants=1000, n_trials=20)
    -results <- get_results(data)
    -
    -*Example of a dataset containing 20 participants (shown with different colors). As can be seen, we introduced modulations in the inter- and intra- individual variability.* -

    -(#fig:unnamed-chunk-3)Example of a dataset containing 20 participants (shown with different colors). As can be seen, we introduced modulations in the inter- and intra- individual variability. -

    -
    -

    We will then compare the scores obtained by each method to the “true” score of each participant by substracting them from one another. As such, for each method, we obtain the absolute “distance” from the true score.

    -
    -
    -

    0.0.2.2 Fit model

    -

    Contrast analysis will be applied to compare the different methods together.

    -
    model <- lm(Diff_Abs ~ Method, data=results)
    +results <- get_results(data)
    +
    +
    + *Example of a dataset containing 20 participants (shown with different colors). As can be seen, we introduced modulations in the inter- and intra- individual variability.* +

    + (#fig:unnamed-chunk-3)Example of a dataset containing 20 participants (shown with different colors). As can be seen, we introduced + modulations in the inter- and intra- individual variability. +

    +
    +

    + We will then compare the scores obtained by each method to the “true” score of each participant by substracting them from one + another. As such, for each method, we obtain the absolute “distance” from the true score. +

    +
    +
    +

    0.0.2.2 Fit model

    +

    Contrast analysis will be applied to compare the different methods together.

    +
    +
    model <- lm(Diff_Abs ~ Method, data=results)
     
     modelbased::estimate_contrasts(model) %>%
       arrange(Difference) %>%
       mutate(Level1 = stringr::str_remove(Level1, "Diff_"),
              Level2 = stringr::str_remove(Level2, "Diff_")) %>% 
    -  select(Level1, Level2, Difference, CI_low, CI_high, p)
    -
    ## Level1                 |                 Level2 | Difference |            CI |      p
    +  select(Level1, Level2, Difference, CI_low, CI_high, p)
    +
    +
    ## Level1                 |                 Level2 | Difference |            CI |      p
     ## -------------------------------------------------------------------------------------
     ## IndividualModel_Priors |        PopulationModel |  -1.85e-03 | [-0.01, 0.01] | > .999
     ## IndividualModel_Freq   |        PopulationModel |   1.70e-03 | [-0.01, 0.01] | > .999
     ## IndividualModel_Freq   | IndividualModel_Priors |   3.55e-03 | [-0.01, 0.01] | > .999
    -
    -
    -

    0.0.2.3 Visualize the results

    -
    -*Average accuracy of the different methods (the closest to 0 the better).* -

    -(#fig:unnamed-chunk-6)Average accuracy of the different methods (the closest to 0 the better). -

    -
    -
    -*Accuracy depending on the number of total participants in the dataset.* -

    -(#fig:unnamed-chunk-7)Accuracy depending on the number of total participants in the dataset. -

    -
    -
    +
    +
    +

    0.0.2.3 Visualize the results

    +
    + *Average accuracy of the different methods (the closest to 0 the better).* +

    (#fig:unnamed-chunk-6)Average accuracy of the different methods (the closest to 0 the better).

    +
    +
    + *Accuracy depending on the number of total participants in the dataset.* +

    (#fig:unnamed-chunk-7)Accuracy depending on the number of total participants in the dataset.

    +
    +
    -

    0.0.3 Conclusion

    -

    Though not significantly different, it seems that raw basic estimates (that rely only on the individual data) perform consistently worse than the population model or individual models informed by priors, especially for small datasets (between 10 and 100 participants) - though again, the difference is tiny in our simulated dataset. In the absence of the whole population dataset, it seems that using individual Bayesian model with informative priors (derived from the population model) is a safe alternative.

    +

    0.0.3 Conclusion

    +

    + Though not significantly different, it seems that raw basic estimates (that rely only on the individual data) + perform consistently worse than the population model or individual models informed by priors, especially for small + datasets (between 10 and 100 participants) - though again, the difference is tiny in our simulated dataset. In the absence of the + whole population dataset, it seems that using individual Bayesian model with informative priors (derived from the population model) + is a safe alternative. +

    -

    0.0.4 Functions

    -
    library(tidyverse)
    +    

    0.0.4 Functions

    +
    +
    library(tidyverse)
     library(easystats)
     library(rstanarm)
     library(ggdist)
    @@ -266,13 +327,22 @@ 

    0.0.4 Functions

    d <- list("results" = results, "model" = model, "contrasts" = contrasts) -save(d, file = "data.Rdata")
    +save(d, file = "data.Rdata")
    +
    -

    0.0.5 References

    -

    You can reference this post as follows:

    -

    - Makowski, D. (2020, September 14). How to extract individual scores from repeated measures. Retrieved from https://dominiquemakowski.github.io/post/individual_scores/

    -
    -

    Thanks for reading! Do not hesitate to share this post, and leave a comment below :hugs:

    -

    🐦 And don’t forget to join me on Twitter (Dom_Makowski?)

    +

    0.0.5 References

    +

    You can reference this post as follows:

    +

    + - Makowski, D. (2020, September 14). How to extract individual scores from repeated measures. Retrieved from + https://dominiquemakowski.github.io/post/individual_scores/ +

    +
    +

    Thanks for reading! Do not hesitate to share this post, and leave a comment below :hugs:

    +

    + 🐦 And don’t forget to join me on Twitter + (Dom_Makowski?) +

    diff --git a/content/post/2020-09-28-what_is_realitybending/index.md b/content/post/2020-09-28-what_is_realitybending/index.md index 905e8e8d8..0fc20590f 100644 --- a/content/post/2020-09-28-what_is_realitybending/index.md +++ b/content/post/2020-09-28-what_is_realitybending/index.md @@ -62,6 +62,6 @@ Naturally, states in which our sense of reality is distorted (as compared to the --- -*Thanks for reading! Don't forget to join me on Twitter* [@Dom_Makowski](https://twitter.com/Dom_Makowski) :hugs: +*Thanks for reading! Don't forget to join me on Twitter* [@Dom_Makowski](https://x.com/Dom_Makowski) :hugs: diff --git a/content/post/2020-11-13-time_computational_limit/index.md b/content/post/2020-11-13-time_computational_limit/index.md index 6aa53ea30..c4bc02f46 100644 --- a/content/post/2020-11-13-time_computational_limit/index.md +++ b/content/post/2020-11-13-time_computational_limit/index.md @@ -106,4 +106,4 @@ Cheers! *Thanks for reading! Do not hesitate to tweet and share this post, and leave a comment below* :hugs: -🐦 *Don't forget to join me on Twitter* [@Dom_Makowski](https://twitter.com/Dom_Makowski) +🐦 *Don't forget to join me on Twitter* [@Dom_Makowski](https://x.com/Dom_Makowski) diff --git a/content/post/2021-01-03-visual_agnosia/index.md b/content/post/2021-01-03-visual_agnosia/index.md index d40e9cfa0..d1e346ccb 100644 --- a/content/post/2021-01-03-visual_agnosia/index.md +++ b/content/post/2021-01-03-visual_agnosia/index.md @@ -25,7 +25,7 @@ tags: **Can you name *one* thing in the image above?** It all looks familiar, but something is off. The image makes "sense" overall; there are well-defined shapes and objects, that seem to be placed in a plausible - albeit chaotic - fashion, like some random rubbish thrown in the corner of a room. Even the colors, the lightning, the quality, is coherent, and helps making it believable. And yet, chances are you cannot name one single element that composes it. -This image, after appearing on [twitter](https://twitter.com/melip0ne/status/1120503955526750208?s=20) in April 2019, surfaced on reddit with the caption "This picture is **designed to give the viewer the simulated experience of having a stroke** (particularly in the **occipital lobe** of the cerebral cortex, where visual perception occurs.) **Everything looks hauntingly familiar but you just can't quite recognize anything**", and became subsequently [viral](https://www.dailymail.co.uk/news/article-6959547/Extremely-frustrating-slightly-disturbing-image-goes-viral.html). However, the author of the caption later admitted that he made this description up. +This image, after appearing on [twitter](https://x.com/melip0ne/status/1120503955526750208?s=20) in April 2019, surfaced on reddit with the caption "This picture is **designed to give the viewer the simulated experience of having a stroke** (particularly in the **occipital lobe** of the cerebral cortex, where visual perception occurs.) **Everything looks hauntingly familiar but you just can't quite recognize anything**", and became subsequently [viral](https://www.dailymail.co.uk/news/article-6959547/Extremely-frustrating-slightly-disturbing-image-goes-viral.html). However, the author of the caption later admitted that he made this description up. *So where does the image come from?* @@ -57,6 +57,6 @@ From there, the youtuber [*Solar Sands*](https://www.youtube.com/channel/UCR6Las --- -*Thanks for reading! Do not hesitate to tweet and share this post and don't forget to join me on Twitter* 🐦 [@Dom_Makowski](https://twitter.com/Dom_Makowski) +*Thanks for reading! Do not hesitate to tweet and share this post and don't forget to join me on Twitter* 🐦 [@Dom_Makowski](https://x.com/Dom_Makowski) diff --git a/content/post/2021-02-10-template_results/index.md b/content/post/2021-02-10-template_results/index.md index 57f3ddaae..80a5c493e 100644 --- a/content/post/2021-02-10-template_results/index.md +++ b/content/post/2021-02-10-template_results/index.md @@ -65,4 +65,4 @@ And **let us know what you think!** You can open an issue on the [repo](https:// *Thanks for reading! Do not hesitate to tweet and share this post, and leave a comment below* :hugs: -🐦 *Don't forget to join me on Twitter* [@Dom_Makowski](https://twitter.com/Dom_Makowski) +🐦 *Don't forget to join me on Twitter* [@Dom_Makowski](https://x.com/Dom_Makowski) diff --git a/content/post/2022-02-01-learnbayesstats/index.md b/content/post/2022-02-01-learnbayesstats/index.md index 6ffb47386..c1d1b0d7f 100644 --- a/content/post/2022-02-01-learnbayesstats/index.md +++ b/content/post/2022-02-01-learnbayesstats/index.md @@ -27,6 +27,6 @@ tags: ## The 'Learning Bayesian Statistics' Podcast -I had the chance of being invited to talk about R, Python, Reality Bending and much more! It was my first experience of that kind, so thanks a ton to the host of the podcast [Alex Andorra](https://twitter.com/alex_andorra). Listen to it here: +I had the chance of being invited to talk about R, Python, Reality Bending and much more! It was my first experience of that kind, so thanks a ton to the host of the podcast [Alex Andorra](https://x.com/alex_andorra). Listen to it here: - https://www.learnbayesstats.com/episode/55-neuropsychology-illusions-bending-reality-dominique-makowski \ No newline at end of file diff --git a/content/post/2023-04-04-PsychologychatGPT/index.md b/content/post/2023-04-04-PsychologychatGPT/index.md index 8d6cb0fa3..695635569 100644 --- a/content/post/2023-04-04-PsychologychatGPT/index.md +++ b/content/post/2023-04-04-PsychologychatGPT/index.md @@ -31,7 +31,7 @@ A lot of diverse and interesting perspectives have been recently discussed in re In his recent [interview with Lex Fridman](https://www.youtube.com/watch?v=AaTRHFaaPG8), Eliezer Yudkowsky underlines the **existential threat posed by current and future AIs**, and laments about the fact that we don't really know what is actually going on inside these giant "matrices of floating-point numbers". He draws a parallel to **neuroimaging**, that enabled us to take leaps in the understanding of the brain, hoping for an alternative to be invented and applied to these AIs. -While such "cognitive imaging" techniques are yet to be developed to map out and understand how the capabilities of such AI models are implemented within their architecture, [Michael C. Frank](https://twitter.com/mcxfrank/status/1643296168276033538) highlights the - at least equally important - need to first truly understand the extend of said abilities. What are these models actually capable of in terms of Human-like thinking (and, hopefully, answer the much harder question of whether they are endowed with true cognitive processes or merely pseudo-cognition). Frank proposes to apply **experimental psychology** methods and paradigms to them. In essence, whenever testing a particular "skill" of chatGPT (or other AI systems), a researcher should consider developing an actual scientific paradigm consisting of multiple trials/items (e.g., different prompt formulations) and participants (e.g., independent instances of the AI), a control condition, and a demonstration of the paradigm validity. +While such "cognitive imaging" techniques are yet to be developed to map out and understand how the capabilities of such AI models are implemented within their architecture, [Michael C. Frank](https://x.com/mcxfrank/status/1643296168276033538) highlights the - at least equally important - need to first truly understand the extend of said abilities. What are these models actually capable of in terms of Human-like thinking (and, hopefully, answer the much harder question of whether they are endowed with true cognitive processes or merely pseudo-cognition). Frank proposes to apply **experimental psychology** methods and paradigms to them. In essence, whenever testing a particular "skill" of chatGPT (or other AI systems), a researcher should consider developing an actual scientific paradigm consisting of multiple trials/items (e.g., different prompt formulations) and participants (e.g., independent instances of the AI), a control condition, and a demonstration of the paradigm validity. I agree that we must take AIs seriously and study them with the best methods available for complex systems like ourselves ("complex" at least from our intelligence level), and likely should strive at improving and generalize these methods. However, I would also argue that we psychologists might seriously need to consider including AI systems alongside Human participants in cognitive experiments. These systems will be able, in the very near future, to perform all kinds of tasks beyond language manipulation, such as perception or complex problem solving, thus opening the possibility of studies with one group of human participants, and one "group" of AI-based attempts. **How would that help psychological science?** @@ -46,7 +46,7 @@ I agree that we must take AIs seriously and study them with the best methods ava Comparing Human performance to that of emerging AI-systems will be both beneficial to Human-oriented psychology, to understand the particularities and idiosyncrasies of Human-like cognition, and well as to AI-oriented cognitive science by approaching the issue of artificial intelligence with the seriousness and cautiousness it deserves. -EDIT (09/04/2023): François Chollet, expert in deep learning, [underlines](https://twitter.com/fchollet/status/1644435265795280897) an important caveat when testing AIs (and especially LLM that are trained on written material existing on the internet): it is possible that the system has already seen and "learned" a given task. Thus, cross-validating any findings with diverse and new tasks is important. +EDIT (09/04/2023): François Chollet, expert in deep learning, [underlines](https://x.com/fchollet/status/1644435265795280897) an important caveat when testing AIs (and especially LLM that are trained on written material existing on the internet): it is possible that the system has already seen and "learned" a given task. Thus, cross-validating any findings with diverse and new tasks is important. --- diff --git a/data/page_sharer.toml b/data/page_sharer.toml index e9b1768d9..dc850d26c 100644 --- a/data/page_sharer.toml +++ b/data/page_sharer.toml @@ -3,7 +3,7 @@ [[buttons]] id = "twitter" - url = "https://twitter.com/intent/tweet?url={url}&text={title}" + url = "https://x.com/intent/tweet?url={url}&text={title}" title = "Twitter" icon_pack = "fab" icon = "twitter" diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/archetypes/authors/_index.md b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/archetypes/authors/_index.md index f7445a608..ddf433c47 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/archetypes/authors/_index.md +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/archetypes/authors/_index.md @@ -44,7 +44,7 @@ social: link: '#contact' # For a direct email link, use "mailto:test@example.org". - icon: twitter icon_pack: fab - link: https://twitter.com/USERNAME + link: https://x.com/USERNAME - icon: google-scholar icon_pack: ai link: https://scholar.google.com/citations?user=PERSON-ID diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/data/page_sharer.toml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/data/page_sharer.toml index b4b3e24dc..dadea681e 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/data/page_sharer.toml +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/data/page_sharer.toml @@ -3,7 +3,7 @@ [[buttons]] id = "twitter" - url = "https://twitter.com/intent/tweet?url={url}&text={title}" + url = "https://x.com/intent/tweet?url={url}&text={title}" title = "Twitter" icon_pack = "fab" icon = "twitter" From dc60ed5c110d6f2f8b5777ce97b58046d76f611d Mon Sep 17 00:00:00 2001 From: DominiqueMakowski Date: Sat, 20 Dec 2025 18:15:28 +0000 Subject: [PATCH 3/3] fixes --- .Rprofile | 2 +- .github/workflows/check.yml | 3 +-- .github/workflows/deploy.yml | 2 +- content/authors/Anshu-Te/_index.md | 2 +- content/authors/annabel-chen/_index.md | 2 +- content/authors/dominique-makowski/_index.md | 2 +- content/authors/emma-benn/_index.md | 2 +- content/authors/maisie-bennett/_index.md | 2 +- content/authors/oliver-collins/_index.md | 2 +- content/authors/stephanie-kirk/_index.md | 2 +- content/authors/tam-pham/_index.md | 2 +- content/authors/wilson-lim/_index.md | 2 +- content/authors/zen-juen/_index.md | 2 +- content/authors/ziliang-ngoi/_index.md | 2 +- content/event/2022_07_OHBM/index.md | 2 +- content/event/2023_09_ESCOP/index.md | 2 +- content/home/11_contact.md | 2 +- content/post/2019-05-17-simulate_ecg/index.md | 2 +- content/post/2020-05-14-intro_bayestestR/index.md | 2 +- content/post/2020-05-16-python_mandelbrot/index.md | 4 ++-- content/post/2020-05-18-analyze_RT/index.md | 2 +- content/post/2020-05-22-r_or_python/index.md | 2 +- content/post/2020-09-14-individual_scores/index.Rmd | 2 +- content/post/2020-09-14-individual_scores/index.html | 2 +- content/post/2020-09-14-individual_scores/index.md | 2 +- .../2020-09-14-individual_scores/post33082eca6da8.tmp.html | 2 +- content/post/2020-09-28-what_is_realitybending/index.md | 2 +- content/post/2020-11-13-time_computational_limit/index.md | 2 +- content/post/2021-01-03-visual_agnosia/index.md | 2 +- content/post/2021-02-10-template_results/index.md | 2 +- .../modules/blox-bootstrap/archetypes/authors/_index.md | 2 +- .../modules/blox-bootstrap/archetypes/event/index.md | 2 +- .../modules/blox-bootstrap/archetypes/project/index.md | 2 +- .../modules/blox-bootstrap/archetypes/publication/index.md | 2 +- .../modules/blox-seo/layouts/{_markup => }/sitemap.xml | 0 .../modules/blox-tailwind/blox/team-showcase/README.md | 2 +- 36 files changed, 36 insertions(+), 37 deletions(-) rename themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/{_markup => }/sitemap.xml (100%) diff --git a/.Rprofile b/.Rprofile index 36325ec95..b1dd9ee10 100644 --- a/.Rprofile +++ b/.Rprofile @@ -20,4 +20,4 @@ options( ) # fix Hugo version -# options(blogdown.hugo.version = "0.139.4") +# options(blogdown.hugo.version = "0.150.0") diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index c4d184540..aac4c0f6f 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -25,8 +25,7 @@ jobs: run: Rscript -e 'install.packages(c("rmarkdown","blogdown", "remotes"))' - name: Install hugo - run: Rscript -e 'blogdown::install_hugo("0.152.2")' # Latest is currently broken + run: Rscript -e 'blogdown::install_hugo("0.150.0")' # Latest is currently broken - name: Build site with blogdown run: Rscript -e 'tryCatch(blogdown::build_site(), error = function(e) { message(e); quit(status = 1) })' - diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 1f08337f1..1efea0c3e 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -25,7 +25,7 @@ jobs: run: Rscript -e 'install.packages(c("rmarkdown","blogdown", "remotes"))' - name: Install hugo - run: Rscript -e 'blogdown::install_hugo("0.152.2")' # Latest is currently broken + run: Rscript -e 'blogdown::install_hugo("0.150.0")' # Latest is currently broken - name: Build site with blogdown run: Rscript -e 'tryCatch(blogdown::build_site(), error = function(e) { message(e); quit(status = 1) })' diff --git a/content/authors/Anshu-Te/_index.md b/content/authors/Anshu-Te/_index.md index 3b9c51cbf..d7a7c9a8f 100644 --- a/content/authors/Anshu-Te/_index.md +++ b/content/authors/Anshu-Te/_index.md @@ -25,7 +25,7 @@ social: - icon: envelope icon_pack: fas link: mailto:anshu.te@ntu.edu.sg -- icon: twitter +- icon: x-twitter icon_pack: fab link: https://x.com/anshu_te97 - icon: researchgate diff --git a/content/authors/annabel-chen/_index.md b/content/authors/annabel-chen/_index.md index 80013fd44..5cd84476f 100644 --- a/content/authors/annabel-chen/_index.md +++ b/content/authors/annabel-chen/_index.md @@ -21,7 +21,7 @@ social: - icon: envelope icon_pack: fas link: mailto:your@annabelchen@ntu.edu.sg -- icon: twitter +- icon: x-twitter icon_pack: fab link: https://x.com/DrAnnabelChen - icon: google-scholar diff --git a/content/authors/dominique-makowski/_index.md b/content/authors/dominique-makowski/_index.md index 788f29a9f..02e6cc7fa 100644 --- a/content/authors/dominique-makowski/_index.md +++ b/content/authors/dominique-makowski/_index.md @@ -47,7 +47,7 @@ social: - icon: envelope icon_pack: fas link: '#contact' -- icon: twitter +- icon: x-twitter icon_pack: fab link: https://x.com/Dom_Makowski - icon: google-scholar diff --git a/content/authors/emma-benn/_index.md b/content/authors/emma-benn/_index.md index e206c45a2..e401b7333 100644 --- a/content/authors/emma-benn/_index.md +++ b/content/authors/emma-benn/_index.md @@ -13,7 +13,7 @@ social: - icon: envelope icon_pack: fas link: mailto:eb672@sussex.ac.uk -- icon: twitter +- icon: x-twitter icon_pack: fab link: https://x.com/EmmaLBenn - icon: researchgate diff --git a/content/authors/maisie-bennett/_index.md b/content/authors/maisie-bennett/_index.md index 63b2ff534..30c7bb02e 100644 --- a/content/authors/maisie-bennett/_index.md +++ b/content/authors/maisie-bennett/_index.md @@ -13,7 +13,7 @@ social: - icon: envelope icon_pack: fas link: mailto:mb2021@sussex.ac.uk -- icon: twitter +- icon: x-twitter icon_pack: fab link: https://x.com/maisiebenn90255 - icon: researchgate diff --git a/content/authors/oliver-collins/_index.md b/content/authors/oliver-collins/_index.md index 6d6ff7eb1..9801ca412 100644 --- a/content/authors/oliver-collins/_index.md +++ b/content/authors/oliver-collins/_index.md @@ -13,7 +13,7 @@ social: - icon: envelope icon_pack: fas link: mailto:oc236@sussex.ac.uk -- icon: twitter +- icon: x-twitter icon_pack: fab link: https://x.com/OliverACollins - icon: researchgate diff --git a/content/authors/stephanie-kirk/_index.md b/content/authors/stephanie-kirk/_index.md index fa61632ff..344cc78c2 100644 --- a/content/authors/stephanie-kirk/_index.md +++ b/content/authors/stephanie-kirk/_index.md @@ -32,7 +32,7 @@ social: - icon: envelope icon_pack: fas link: mailto:stephanie.morgank@gmail.com -- icon: twitter +- icon: x-twitter icon_pack: fab link: https://x.com/morgkms - icon: researchgate diff --git a/content/authors/tam-pham/_index.md b/content/authors/tam-pham/_index.md index caba6de17..1e187790f 100644 --- a/content/authors/tam-pham/_index.md +++ b/content/authors/tam-pham/_index.md @@ -24,7 +24,7 @@ social: - icon: envelope icon_pack: fas link: "phamtt@ntu.edu.sg" -- icon: twitter +- icon: x-twitter icon_pack: fab link: https://x.com/tampham94 - icon: google-scholar diff --git a/content/authors/wilson-lim/_index.md b/content/authors/wilson-lim/_index.md index c3aefc0b8..6c1bee78e 100644 --- a/content/authors/wilson-lim/_index.md +++ b/content/authors/wilson-lim/_index.md @@ -30,7 +30,7 @@ social: - icon: envelope icon_pack: fas link: mailto:wilson.lim@ntu.edu.sg -- icon: twitter +- icon: x-twitter icon_pack: fab link: https://x.com/WilsonLimPH - icon: google-scholar diff --git a/content/authors/zen-juen/_index.md b/content/authors/zen-juen/_index.md index 8d88cc4bf..dfdf1339f 100644 --- a/content/authors/zen-juen/_index.md +++ b/content/authors/zen-juen/_index.md @@ -23,7 +23,7 @@ social: - icon: envelope icon_pack: fas link: "zenjuen.lau@ntu.edu.sg" -- icon: twitter +- icon: x-twitter icon_pack: fab link: https://x.com/ZenJuen - icon: google-scholar diff --git a/content/authors/ziliang-ngoi/_index.md b/content/authors/ziliang-ngoi/_index.md index b2d02cba2..79bd37a01 100644 --- a/content/authors/ziliang-ngoi/_index.md +++ b/content/authors/ziliang-ngoi/_index.md @@ -30,7 +30,7 @@ social: - icon: envelope icon_pack: fas link: mailto:ziliangngoi@gmail.com -- icon: twitter +- icon: x-twitter icon_pack: fab link: https://x.com/MaxNgoi - icon: researchgate diff --git a/content/event/2022_07_OHBM/index.md b/content/event/2022_07_OHBM/index.md index f740fee05..fd2df9f1b 100644 --- a/content/event/2022_07_OHBM/index.md +++ b/content/event/2022_07_OHBM/index.md @@ -17,7 +17,7 @@ featured: false # caption: 'Image credit: [**Unsplash**](https://unsplash.com/photos/bzdhc5b3Bxs)' # focal_point: Right # links: -# - icon: twitter +# - icon: x-twitter # icon_pack: fab # name: Follow # url: https://x.com/georgecushen diff --git a/content/event/2023_09_ESCOP/index.md b/content/event/2023_09_ESCOP/index.md index d787c5f86..1c519838f 100644 --- a/content/event/2023_09_ESCOP/index.md +++ b/content/event/2023_09_ESCOP/index.md @@ -17,7 +17,7 @@ featured: false # caption: 'Image credit: [**Unsplash**](https://unsplash.com/photos/bzdhc5b3Bxs)' # focal_point: Right # links: -# - icon: twitter +# - icon: x-twitter # icon_pack: fab # name: Follow # url: https://x.com/georgecushen diff --git a/content/home/11_contact.md b/content/home/11_contact.md index f0bcd5a1d..483fab41d 100644 --- a/content/home/11_contact.md +++ b/content/home/11_contact.md @@ -32,7 +32,7 @@ content: # - 'Monday 10:00 to 13:00' # - 'Wednesday 09:00 to 10:00' contact_links: - - icon: twitter + - icon: x-twitter icon_pack: fab name: Follow me link: 'https://x.com/Dom_Makowski' diff --git a/content/post/2019-05-17-simulate_ecg/index.md b/content/post/2019-05-17-simulate_ecg/index.md index da26d7d0b..4565e8cbc 100644 --- a/content/post/2019-05-17-simulate_ecg/index.md +++ b/content/post/2019-05-17-simulate_ecg/index.md @@ -77,4 +77,4 @@ McSharry, P. E., Clifford, G. D., Tarassenko, L., & Smith, L. A. (2003). A dynam *Thanks for reading! Do not hesitate to tweet and share this post, and leave a comment below* :hugs: -🐦 *Don't forget to join me on Twitter* [@Dom_Makowski](https://x.com/Dom_Makowski) +🐦 *Don't forget to join me on X* [@Dom_Makowski](https://x.com/Dom_Makowski) diff --git a/content/post/2020-05-14-intro_bayestestR/index.md b/content/post/2020-05-14-intro_bayestestR/index.md index f0449ed42..f908c4d6a 100644 --- a/content/post/2020-05-14-intro_bayestestR/index.md +++ b/content/post/2020-05-14-intro_bayestestR/index.md @@ -36,4 +36,4 @@ You can find the link here: *Thanks for reading! Do not hesitate to tweet and share this post, and leave a comment below* :hugs: -🐦 *Don't forget to join me on Twitter* [@Dom_Makowski](https://x.com/Dom_Makowski) +🐦 *Don't forget to join me on X* [@Dom_Makowski](https://x.com/Dom_Makowski) diff --git a/content/post/2020-05-16-python_mandelbrot/index.md b/content/post/2020-05-16-python_mandelbrot/index.md index 1d63c8bba..b2bf4fd07 100644 --- a/content/post/2020-05-16-python_mandelbrot/index.md +++ b/content/post/2020-05-16-python_mandelbrot/index.md @@ -54,7 +54,7 @@ plt.axis("off") plt.show() ``` -{{< tweet user="Dom_Makowski" id="1258376273451053056" >}} +{{< x user="Dom_Makowski" id="1258376273451053056" >}} @@ -70,4 +70,4 @@ Have fun! *Thanks for reading! Do not hesitate to tweet and share this post, and leave a comment below* :hugs: -🐦 *Don't forget to join me on Twitter* [@Dom_Makowski](https://x.com/Dom_Makowski) +🐦 *Don't forget to join me on X* [@Dom_Makowski](https://x.com/Dom_Makowski) diff --git a/content/post/2020-05-18-analyze_RT/index.md b/content/post/2020-05-18-analyze_RT/index.md index 5f9d2a68c..6c465abf9 100644 --- a/content/post/2020-05-18-analyze_RT/index.md +++ b/content/post/2020-05-18-analyze_RT/index.md @@ -37,4 +37,4 @@ It is a must-read for all psychologist. Do check-it out!! *Thanks for reading! Do not hesitate to tweet and share this post, and leave a comment below* :hugs: -🐦 *And don't forget to join me on Twitter* [@Dom_Makowski](https://x.com/Dom_Makowski) +🐦 *And don't forget to join me on X* [@Dom_Makowski](https://x.com/Dom_Makowski) diff --git a/content/post/2020-05-22-r_or_python/index.md b/content/post/2020-05-22-r_or_python/index.md index 0ac3a7d54..f9d3248cc 100644 --- a/content/post/2020-05-22-r_or_python/index.md +++ b/content/post/2020-05-22-r_or_python/index.md @@ -157,6 +157,6 @@ It might be easier if you have mentors that can understand what you are doing an --- -*Thanks for reading!* 🐦 *Don't forget to join me on Twitter* ([@Dom_Makowski](https://x.com/Dom_Makowski)) *and leave a comment below* 👇 +*Thanks for reading!* 🐦 *Don't forget to join me on X* ([@Dom_Makowski](https://x.com/Dom_Makowski)) *and leave a comment below* 👇 diff --git a/content/post/2020-09-14-individual_scores/index.Rmd b/content/post/2020-09-14-individual_scores/index.Rmd index 21857b421..e18732fce 100644 --- a/content/post/2020-09-14-individual_scores/index.Rmd +++ b/content/post/2020-09-14-individual_scores/index.Rmd @@ -126,4 +126,4 @@ Though not significantly different, it seems that **raw basic estimates** (that *Thanks for reading! Do not hesitate to share this post, and leave a comment below* :hugs: -🐦 *And don't forget to join me on Twitter* [@Dom_Makowski](https://x.com/Dom_Makowski) +🐦 *And don't forget to join me on X* [@Dom_Makowski](https://x.com/Dom_Makowski) diff --git a/content/post/2020-09-14-individual_scores/index.html b/content/post/2020-09-14-individual_scores/index.html index a9e0262ed..0494e2dc4 100644 --- a/content/post/2020-09-14-individual_scores/index.html +++ b/content/post/2020-09-14-individual_scores/index.html @@ -359,7 +359,7 @@

    References


    Thanks for reading! Do not hesitate to share this post, and leave a comment below :hugs:

    - 🐦 And don’t forget to join me on Twitter [@Dom_Makowski](And don’t forget to join me on X [@Dom_Makowski](https://x.com/Dom_Makowski0.0.5 References


    Thanks for reading! Do not hesitate to share this post, and leave a comment below :hugs:

    - 🐦 And don’t forget to join me on Twitter + 🐦 And don’t forget to join me on X (Dom_Makowski?)

    diff --git a/content/post/2020-09-28-what_is_realitybending/index.md b/content/post/2020-09-28-what_is_realitybending/index.md index 0fc20590f..3bd282165 100644 --- a/content/post/2020-09-28-what_is_realitybending/index.md +++ b/content/post/2020-09-28-what_is_realitybending/index.md @@ -62,6 +62,6 @@ Naturally, states in which our sense of reality is distorted (as compared to the --- -*Thanks for reading! Don't forget to join me on Twitter* [@Dom_Makowski](https://x.com/Dom_Makowski) :hugs: +*Thanks for reading! Don't forget to join me on X* [@Dom_Makowski](https://x.com/Dom_Makowski) :hugs: diff --git a/content/post/2020-11-13-time_computational_limit/index.md b/content/post/2020-11-13-time_computational_limit/index.md index c4bc02f46..c0848ca87 100644 --- a/content/post/2020-11-13-time_computational_limit/index.md +++ b/content/post/2020-11-13-time_computational_limit/index.md @@ -106,4 +106,4 @@ Cheers! *Thanks for reading! Do not hesitate to tweet and share this post, and leave a comment below* :hugs: -🐦 *Don't forget to join me on Twitter* [@Dom_Makowski](https://x.com/Dom_Makowski) +🐦 *Don't forget to join me on X* [@Dom_Makowski](https://x.com/Dom_Makowski) diff --git a/content/post/2021-01-03-visual_agnosia/index.md b/content/post/2021-01-03-visual_agnosia/index.md index d1e346ccb..e60ae324a 100644 --- a/content/post/2021-01-03-visual_agnosia/index.md +++ b/content/post/2021-01-03-visual_agnosia/index.md @@ -57,6 +57,6 @@ From there, the youtuber [*Solar Sands*](https://www.youtube.com/channel/UCR6Las --- -*Thanks for reading! Do not hesitate to tweet and share this post and don't forget to join me on Twitter* 🐦 [@Dom_Makowski](https://x.com/Dom_Makowski) +*Thanks for reading! Do not hesitate to tweet and share this post and don't forget to join me on X* 🐦 [@Dom_Makowski](https://x.com/Dom_Makowski) diff --git a/content/post/2021-02-10-template_results/index.md b/content/post/2021-02-10-template_results/index.md index 80a5c493e..cad059281 100644 --- a/content/post/2021-02-10-template_results/index.md +++ b/content/post/2021-02-10-template_results/index.md @@ -65,4 +65,4 @@ And **let us know what you think!** You can open an issue on the [repo](https:// *Thanks for reading! Do not hesitate to tweet and share this post, and leave a comment below* :hugs: -🐦 *Don't forget to join me on Twitter* [@Dom_Makowski](https://x.com/Dom_Makowski) +🐦 *Don't forget to join me on X* [@Dom_Makowski](https://x.com/Dom_Makowski) diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/archetypes/authors/_index.md b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/archetypes/authors/_index.md index ddf433c47..d251a837c 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/archetypes/authors/_index.md +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/archetypes/authors/_index.md @@ -42,7 +42,7 @@ social: - icon: envelope icon_pack: fas link: '#contact' # For a direct email link, use "mailto:test@example.org". -- icon: twitter +- icon: x-twitter icon_pack: fab link: https://x.com/USERNAME - icon: google-scholar diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/archetypes/event/index.md b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/archetypes/event/index.md index 429550a58..cba10efd8 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/archetypes/event/index.md +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/archetypes/event/index.md @@ -43,7 +43,7 @@ image: # - name: Follow # url: https://twitter.com # icon_pack: fab -# icon: twitter +# icon: x-twitter # Optional filename of your slides within your event's folder or a URL. url_slides: diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/archetypes/project/index.md b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/archetypes/project/index.md index be6450826..adb9d88e5 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/archetypes/project/index.md +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/archetypes/project/index.md @@ -25,7 +25,7 @@ image: # - name: Follow # url: https://twitter.com # icon_pack: fab -# icon: twitter +# icon: x-twitter url_code: "" url_pdf: "" diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/archetypes/publication/index.md b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/archetypes/publication/index.md index 9b69b4410..519563ee4 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/archetypes/publication/index.md +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-bootstrap/archetypes/publication/index.md @@ -34,7 +34,7 @@ featured: false # - name: Follow # url: https://twitter.com # icon_pack: fab -# icon: twitter +# icon: x-twitter url_pdf: url_code: diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_markup/sitemap.xml b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/sitemap.xml similarity index 100% rename from themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/_markup/sitemap.xml rename to themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-seo/layouts/sitemap.xml diff --git a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/team-showcase/README.md b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/team-showcase/README.md index 9dc8d2af5..b953f7d01 100644 --- a/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/team-showcase/README.md +++ b/themes/github.com/HugoBlox/hugo-blox-builder/modules/blox-tailwind/blox/team-showcase/README.md @@ -61,7 +61,7 @@ social: - icon: envelope icon_pack: fas link: 'mailto:jane@example.edu' - - icon: twitter + - icon: x-twitter icon_pack: fab link: https://x.com/janedoe - icon: github