Compare commits

..

42 Commits

Author SHA1 Message Date
Mark Dumay
38d1ddb86d Merge pull request #1502 from gethinode/develop
Develop
2025-07-08 06:39:23 +02:00
Mark Dumay
17287492e5 fix: adjust padding of section title 2025-07-08 06:31:12 +02:00
Mark Dumay
992d724a6f Merge branch 'main' into develop 2025-07-08 06:17:21 +02:00
Mark Dumay
0b81eba373 Merge pull request #1501 from gethinode/hugo-mod-dependencies
Update Hugo module dependencies
2025-07-08 06:17:04 +02:00
Mark Dumay
0a5e8bed92 fix: standardize padding of content blocks 2025-07-08 06:07:14 +02:00
Mark Dumay
a387adca66 feat: add support for configurable icon style to video message 2025-07-08 06:06:28 +02:00
markdumay
5341db7db2 fix: update Hugo module dependencies 2025-07-08 03:30:43 +00:00
Mark Dumay
f4d59a0324 Merge pull request #1500 from gethinode/develop
Develop
2025-07-07 14:22:40 +02:00
Mark Dumay
6c068898a3 fix: ensure card icons have equal width 2025-07-07 14:15:30 +02:00
Mark Dumay
eec6697ff6 Merge branch 'main' into develop 2025-07-07 14:02:53 +02:00
Mark Dumay
26402fb5be fix: update build stats 2025-07-07 14:02:18 +02:00
Mark Dumay
e08aebf928 docs: adjust article layout 2025-07-07 14:02:01 +02:00
Mark Dumay
787ad2eb91 feat: make card icons configurable 2025-07-07 14:01:23 +02:00
Mark Dumay
8f137b0c54 feat: make article icons configurable 2025-07-07 14:00:41 +02:00
Mark Dumay
a979dd8d58 fix: adjust default values of card arguments 2025-07-07 14:00:03 +02:00
Mark Dumay
b77a125485 fix: correct card group argument initialization of icon-style 2025-07-07 13:59:27 +02:00
Mark Dumay
004da99765 docs: include additional card examples 2025-07-07 13:58:51 +02:00
Mark Dumay
907c8ac800 fix: improve rendering of card icons
Icon columns now resize properly when set to horizontal layout.
Padding and alignment have also been revised.
2025-07-07 13:20:54 +02:00
Mark Dumay
a8efc27771 Merge pull request #1499 from gethinode/develop
fix: correct separator argument definition
2025-07-06 14:29:27 +02:00
Mark Dumay
3bf8da3767 Merge branch 'main' into develop 2025-07-06 14:20:10 +02:00
Mark Dumay
131de0c064 fix: correct seperator argument definition 2025-07-06 14:16:52 +02:00
Mark Dumay
a914fe18e8 Merge pull request #1497 from gethinode/hugo-mod-dependencies
Update Hugo module dependencies
2025-07-06 13:45:08 +02:00
Mark Dumay
a855a41c13 Merge branch 'main' into hugo-mod-dependencies 2025-07-06 12:14:28 +02:00
Mark Dumay
c41cd0650e Merge pull request #1498 from gethinode/develop
Develop
2025-07-06 12:08:43 +02:00
Mark Dumay
a83bab6689 Merge branch 'main' into develop 2025-07-06 12:03:41 +02:00
Mark Dumay
03a099ae66 fix: correct hide-empty argument in articles content block 2025-07-06 12:03:07 +02:00
Mark Dumay
cd837cf116 feat: add panels content block 2025-07-06 11:51:37 +02:00
Mark Dumay
8cffd358aa feat: improve responsive behavior of nav control 2025-07-06 11:51:10 +02:00
Mark Dumay
0d33a15e98 fix: improve layout 2025-07-06 11:47:24 +02:00
Mark Dumay
9be691eb6b fix: adjust heading size of CTA 2025-07-06 11:46:58 +02:00
Mark Dumay
fd727228d7 fix: adjust size argument of section title 2025-07-06 11:46:42 +02:00
Mark Dumay
a9f1cd098d feat: include ordinal position of content blocks 2025-07-06 11:44:41 +02:00
markdumay
dc1c358cfa fix: update Hugo module dependencies 2025-07-06 03:34:33 +00:00
github-actions[bot]
0d24dc445d Merge pull request #1495 from gethinode/dependabot/npm_and_yarn/neostandard-0.12.2
Bump neostandard from 0.12.1 to 0.12.2
2025-07-04 13:41:07 +00:00
dependabot[bot]
f6f034252b Bump neostandard from 0.12.1 to 0.12.2
Bumps [neostandard](https://github.com/neostandard/neostandard) from 0.12.1 to 0.12.2.
- [Release notes](https://github.com/neostandard/neostandard/releases)
- [Changelog](https://github.com/neostandard/neostandard/blob/main/CHANGELOG.md)
- [Commits](https://github.com/neostandard/neostandard/compare/v0.12.1...v0.12.2)

---
updated-dependencies:
- dependency-name: neostandard
  dependency-version: 0.12.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-04 13:35:15 +00:00
Mark Dumay
863b81efbb Merge pull request #1494 from gethinode/develop
feat: extend navbar styling options
2025-07-04 12:56:42 +02:00
Mark Dumay
9b0683d176 Merge branch 'main' into develop 2025-07-04 12:51:29 +02:00
Mark Dumay
dd1b2eb97f feat: extend navbar styling options 2025-07-04 12:50:41 +02:00
Mark Dumay
3f6dc3b2d7 Merge pull request #1493 from gethinode/develop
Develop
2025-07-04 07:43:32 +02:00
Mark Dumay
873277b691 Merge branch 'main' into develop 2025-07-04 07:38:09 +02:00
Mark Dumay
7a456a12d2 fix: improve handling of static svg files
Removes the subfolder from the static file path, if any. Only applicable to sites deployed to a subfolder (when setting `baseURL`).
2025-07-04 07:36:22 +02:00
Mark Dumay
b437b414b0 fix: suppress empty class and origin of svg files 2025-07-04 07:14:38 +02:00
46 changed files with 2364 additions and 851 deletions

45
assets/js/nav.js Normal file
View File

@@ -0,0 +1,45 @@
function updateDropdown (element, id, label) {
const dropdown = document.getElementById(element)
if (dropdown != null) {
dropdown.querySelector('.dropdown-toggle').textContent = label
dropdown.querySelectorAll('.panel-dropdown .dropdown-item').forEach(item => {
item.classList.remove('active')
let target = item.getAttribute('data-link')
if (target != null) {
target = target.replace(/^#+/, '')
if (target === id) {
item.classList.add('active')
}
}
})
}
}
document.querySelectorAll('.panel-dropdown').forEach(trigger => {
trigger.addEventListener('hide.bs.dropdown', event => {
if (event.clickEvent != null) {
let target = event.clickEvent.srcElement.getAttribute('data-link')
if (target != null) {
trigger.querySelectorAll('.panel-dropdown .dropdown-item').forEach(item => {
item.classList.remove('active')
})
target = target.replace(/^#+/, '')
const btn = document.getElementById(target)
if (btn != null) {
event.clickEvent.srcElement.classList.add('active')
trigger.querySelector('.dropdown-toggle').textContent = event.clickEvent.srcElement.textContent
btn.click()
}
}
}
})
})
document.querySelectorAll('.nav-panel .nav-link').forEach(trigger => {
trigger.addEventListener('click', event => {
const companion = event.srcElement.parentElement.parentElement.getAttribute('data-companion')
if (companion != null) {
updateDropdown(companion, trigger.getAttribute('id'), trigger.textContent.trim())
}
})
})

View File

@@ -5,6 +5,7 @@
@import "modules/bookshop/components/cta/cta";
@import "modules/bookshop/components/faq/faq";
@import "modules/bookshop/components/hero/hero";
@import "modules/bookshop/components/panels/panels";
@import "modules/bookshop/components/releases/releases";
@import "modules/bookshop/components/separator/separator";
@import "modules/bookshop/components/video-message/video-message";

View File

@@ -27,6 +27,8 @@ blueprint:
more:
title:
link:
icon-rounded:
icon-style:
cols:
padding:
limit:

View File

@@ -62,46 +62,53 @@
<!-- Main code -->
{{ if not $error }}
{{- partial "assets/section-title.html" (dict "heading" $args.heading "justify" $args.justify) -}}
{{ if or (gt (len $pages) 0) (not $args.hideEmpty) }}
{{- partial "assets/section-title.html" (dict "heading" $args.heading "justify" $args.justify) -}}
{{ $partial := "assets/card-group.html" }}
{{ $params := dict }}
{{- $params = merge $params (dict
"page" page
"list" $pages
"limit" $args.limit
"cols" $args.cols
"icon-rounded" $args.iconRounded
"href" (cond $moreButton $moreLink "")
"href-title" (cond $moreButton $moreTitle "")
"href-force" (gt $result.total (len $result.pages))
)}}
{{ $partial := "assets/card-group.html" }}
{{ $params := dict }}
{{- $params = merge $params (dict
"page" page
"list" $pages
"limit" $args.limit
"cols" $args.cols
"icon-rounded" $args.iconRounded
"icon-style" $args.iconStyle
"href" (cond $moreButton $moreLink "")
"href-title" (cond $moreButton $moreTitle "")
"href-force" (gt $result.total (len $result.pages))
)}}
{{ if $args.scroll }}
{{ $partial := "assets/stack.html" }}
{{ $params = merge $params (dict
"header-style" "none"
"body-style" "title"
"footer-style" "none"
"gutter" 1
"padding" 3
"ratio" "1x1"
"orientation" "horizontal-sm"
"styles" (cond $args.bento $styles "")
) -}}
{{ else }}
{{ $params = merge $params (dict
"header-style" $args.headerStyle
"footer-style" $args.footerStyle
"padding" $args.padding
"class" (or $args.class "border-0")
"icon-style" "fa-2x"
"align" "start"
"orientation" $args.orientation
"hook" "assets/live-card.html"
"pagination" $args.pagination
"paginate" $paginate
) -}}
{{ if $args.scroll }}
{{ $partial := "assets/stack.html" }}
{{ $params = merge $params (dict
"header-style" "none"
"body-style" "title"
"footer-style" "none"
"gutter" 1
"padding" 3
"ratio" "1x1"
"orientation" "horizontal-sm"
"styles" (cond $args.bento $styles "")
) -}}
{{ else }}
{{ $params = merge $params (dict
"header-style" $args.headerStyle
"footer-style" $args.footerStyle
"padding" $args.padding
"class" (or $args.class "border-0")
"align" "start"
"orientation" $args.orientation
"hook" "assets/live-card.html"
"pagination" $args.pagination
"paginate" $paginate
) -}}
{{ end }}
{{ if gt (len $pages) 0 }}
{{ partial $partial $params }}
{{ else }}
{{- $padding := partial "utilities/GetPadding.html" -}}
<p class="pt-{{ $padding.y }}">{{- T "emptyList" }}.</p>
{{ end }}
{{ end }}
{{ partial $partial $params }}
{{ end }}

View File

@@ -17,6 +17,7 @@ blueprint:
width:
cols:
icon-rounded:
icon-style:
padding:
background:
backdrop:
@@ -32,3 +33,4 @@ blueprint:
class:
width:
justify:
align:

View File

@@ -40,15 +40,15 @@
{{- partial "assets/card-group.html" (dict
"page" page
"list" $list
"class" (printf "border-0 card-icon-primary d-%s-none %s" $breakpoint.prev $args.class)
"class" (printf "border-0 card-icon-primary d-%s-none %s" $breakpoint.prev (or $args.class ""))
"cols" $args.cols
"gutter" "4"
"padding" $args.padding
"header-style" "none"
"footer-style" "none"
"icon-rounded" $args.iconRounded
"icon-style" "fa-2x"
"align" "start"
"icon-style" (or $args.iconStyle "fa-2x")
"align" $args.align
"orientation" ($args.orientation | default "horizontal-sm")
"hook" "assets/live-card.html"
) -}}
@@ -56,15 +56,15 @@
{{- partial "assets/card-group.html" (dict
"page" page
"list" $list
"class" (printf "border-0 card-icon-primary d-none d-%s-block %s" $breakpoint.prev $args.class)
"class" (printf "border-0 card-icon-primary d-none d-%s-block %s" $breakpoint.prev (or $args.class ""))
"cols" $args.cols
"gutter" "4"
"padding" $args.padding
"header-style" "none"
"footer-style" "none"
"icon-rounded" $args.iconRounded
"icon-style" "fa-2x"
"align" "start"
"icon-style" (or $args.iconStyle "fa-2x")
"align" $args.align
"orientation" ($args.orientation | default "stacked")
"hook" "assets/live-card.html"
) -}}

View File

@@ -24,7 +24,8 @@
{{ $class := "" }}
{{ $id := printf "faq-%s" (md5 (delimit (slice . now) "-")) }}
<div id="{{ $id }}" class="accordion accordion-faq {{ if $args.contrast }}accordion-faq-contrast text-white {{ end }}accordion-flush mb-3{{ with $class }} {{ . }}{{ end }} col-12 col-md-6 mx-auto">
<div id="{{ $id }}" class="accordion accordion-faq {{ if $args.contrast }}accordion-faq-contrast text-white {{ end -}}
accordion-flush{{ with $class }} {{ . }}{{ end }} col-12 col-md-6 mx-auto">
{{ range $index, $item := $args.items }}
<div class="accordion-item">
{{- with $item.title -}}

View File

@@ -0,0 +1,35 @@
# Metadata about this component, to be used in the CMS
spec:
structures:
- content_blocks
label: Panels
description: Introduction section
icon: check
tags: []
# Defines the structure of this component, as well as the default values
blueprint:
heading:
preheading:
heading:
content:
align:
width:
cols:
icon-rounded:
padding:
background:
backdrop:
color:
subtle:
elements:
- title:
icon:
image:
mode:
content:
tab-type:
ratio:
class:
width:
justify:

View File

@@ -0,0 +1,81 @@
{{/*
Copyright © 2025 The Hinode Team / Mark Dumay. All rights reserved.
Use of this source code is governed by The MIT License (MIT) that can be found in the LICENSE file.
Visit gethinode.com/license for more details.
*/}}
{{ $error := false }}
{{/* Initialize arguments */}}
{{ $args := partial "utilities/InitArgs.html" (dict "bookshop" "panels" "args" .)}}
{{ if or $args.err $args.warnmsg }}
{{ partial (cond $args.err "utilities/LogErr.html" "utilities/LogWarn.html") (dict
"partial" "component-library/components/panels/panels.hugo.html"
"warnid" "warn-invalid-arguments"
"msg" "Invalid arguments"
"details" ($args.errmsg | append $args.warnmsg)
"file" page.File
)}}
{{ $error = $args.err }}
{{ end }}
{{/* Initialize global arguments */}}
{{- $breakpoint := partial "utilities/GetBreakpoint.html" -}}
{{/* Initialize local variables */}}
{{ $list := slice }}
{{ $titles := slice }}
{{ $toc := slice }}
{{ $parentID := printf "panel-%v" (cond (isset . "_ordinal") (index . "_ordinal") (md5 (delimit (slice . now) "-"))) }}
{{ $inner := "" }}
{{ range $i, $element := $args.elements }}
{{ $toc = $toc | append (dict "href" "panel-0-1" "level" 2 "title" $element.title) }}
{{ $hero := partial "assets/hero.html" (dict
"page" page
"heading" (dict "title" $element.title "content" $element.content "width" 8 "size" 6)
"background" $args.background
"illustration" (dict "ratio" $args.ratio "icon" $element.icon "image" $element.image "mode" $element.mode)
"order" $args.order
"link-type" $args.linkType
"links" $args.links
"orientation" "horizontal"
"align" "start"
"width" 12
)
}}
{{- $output := partial "assets/nav-item.html" (dict
"page" page
"id" $i
"parent-id" $parentID
"fade" false
"title" $element.title
"show" (eq $i 0)
"raw" $hero
)
-}}
{{ $inner = printf "%s\n%s" $inner $output }}
{{ $titles = $titles | append $element.title }}
{{ end}}
{{ if not $error }}
{{- partial "assets/section-title.html" (dict "heading" $args.heading "justify" $args.justify) -}}
{{- partial "assets/nav.html" (dict
"id" (or $args.id $parentID)
"page" page
"nav-items" $inner
"nav-titles" $titles
"tab-type" $args.tabType
"vertical" $args.vertical
"word-wrap" $args.wordWrap
"class" $args.class
"pane" $args.pane
"width" $args.width
"responsive" $args.responsive
)
-}}
{{ end }}

View File

@@ -0,0 +1,3 @@
.panels .dropdown-toggle {
text-decoration: none !important;
}

View File

@@ -6,3 +6,5 @@ spec:
description: Inserts a horizontal page section separator
icon: horizontal_rule
tags: []
blueprint:

View File

@@ -4,7 +4,7 @@
Visit gethinode.com/license for more details.
*/}}
{{ $args := partial "utilities/InitArgs.html" (dict "structure" "separator" "args" .) }}
{{ $args := partial "utilities/InitArgs.html" (dict "bookshop" "separator" "args" .) }}
{{ if or $args.err $args.warnmsg }}
{{ partial (cond $args.err "utilities/LogErr.html" "utilities/LogWarn.html") (dict
"partial" "component-library/components/separator/separator.hugo.html"

View File

@@ -24,6 +24,7 @@ blueprint:
link-type:
orientation:
icon-rounded:
icon-style:
video:
provider:
account:

View File

@@ -59,6 +59,7 @@
{{ $cols := .cols }}
{{ $type := .type }}
{{ $iconRounded := .iconRounded }}
{{ $iconStyle := .iconStyle }}
{{- partial "assets/card-group.html" (dict
"page" page
@@ -75,6 +76,7 @@
"button" true
"link-type" $type
"icon-rounded" $iconRounded
"icon-style" $iconStyle
) -}}
{{ end }}
@@ -99,7 +101,7 @@
{{- partial "assets/section-title.html" (dict "heading" $args.heading "justify" $args.justify) -}}
{{ if eq $args.orientation "stacked" }}
<div class="col-{{ $breakpoint.current }}-{{ $args.width }} mx-auto pb-{{ $padding.y }}">
<div class="col-{{ $breakpoint.current }}-{{ $args.width }} mx-auto">
{{ with $args.video }}
{{- partial "inline/video.html" (dict
"provider" .provider
@@ -112,11 +114,17 @@
) -}}
{{ end }}
</div>
<div class="mt-{{ $padding.y }} pb-{{ $padding.y }}">
{{- partial "inline/messages.html" (dict "list" $list "cols" $args.cols "type" $args.type "iconRounded" $args.iconRounded) -}}
<div class="mt-{{ $padding.y }}">
{{- partial "inline/messages.html" (dict
"list" $list
"cols" $args.cols
"type" $args.type
"iconRounded" $args.iconRounded
"iconStyle" $args.iconStyle
) -}}
</div>
{{ else }}
<div class="container grid gap-4 pb-{{ $padding.y }}">
<div class="container grid gap-{{ $padding.x }}">
<div class="row row-cols-1 row-cols-{{ $breakpoint.current }}-2">
<div class="col col-{{ $breakpoint.current }}-{{ $args.width }} p-0">
{{ with $args.video }}
@@ -132,7 +140,13 @@
{{ end }}
</div>
<div class="col col-{{ $breakpoint.current }}-{{ sub 12 $args.width }} mt-{{ $padding.y }} mt-{{ $breakpoint.current }}-0">
{{- partial "inline/messages.html" (dict "list" $list "cols" 1 "type" $args.type "iconRounded" $args.iconRounded) -}}
{{- partial "inline/messages.html" (dict
"list" $list
"cols" 1
"type" $args.type
"iconRounded" $args.iconRounded
"iconStyle" $args.iconStyle
) -}}
</div>
</div>
</div>

View File

@@ -84,6 +84,7 @@
[navigation]
anchor = true
logo = "/img/logo_icon.svg"
logo-height = 30
color = "body"
fixed = true
overlay = false
@@ -96,6 +97,9 @@
toc = true
sidebar = true
size = "md"
[navigation.padding]
x = 4
y = 4
# toml-docs-end navigation
# toml-docs-start messages

View File

@@ -12,6 +12,7 @@ arguments:
class:
color:
padding:
default: 3
gutter:
release: v0.19.0
header-style:
@@ -43,6 +44,7 @@ arguments:
icon-rounded:
release: v1.0.0
align:
default: start
wrapper:
default: p-0
responsive:

View File

@@ -15,6 +15,7 @@ arguments:
parent: cascade
padding:
parent: cascade
default: 3
gutter:
default: 0
parent: cascade
@@ -45,6 +46,7 @@ arguments:
icon-rounded:
release: v1.0.0
align:
default: start
parent: cascade
release: v0.23.0
scroll:

View File

@@ -15,6 +15,9 @@ arguments:
class:
body:
group: partial
raw:
group: partial
release: v1.3.0
navitem-type:
release: v1.0.0
illustration:

View File

@@ -22,6 +22,8 @@ arguments:
release: v1.0.0
class:
pane:
responsive:
release: v1.4.0
width:
default: 12
group: partial

View File

@@ -1,20 +0,0 @@
comment: >-
Inserts a horizontal page section separator.
arguments:
_bookshop_name:
type: string
optional: true
comment: Unique name of the bookshop component
group: partial
page:
type:
- '*hugolib.pageState'
- '*hugolib.pageForShortcode'
optional: true
comment: Context of the current page.
group: partial
theme:
type: string
optional: true
comment: Color theme to apply.
release: v1.0.0-alpha

View File

@@ -37,6 +37,7 @@
[navigation]
anchor = true
logo = "/img/logo_icon.svg"
logo-height = 30
color = "body"
fixed = true
overlay = false
@@ -50,6 +51,9 @@
toc = true
sidebar = true
size = "md"
[navigation.padding]
x = 4
y = 4
[messages]
placement = "bottom-right"
@@ -125,7 +129,7 @@
# themeFontPath = "https://fonts.googleapis.com/css2?family=Inter:wght@200;300;600&display=swap" # external path
themeFontPath = "/fonts" # local path
themeFontPreload = "/fonts/inter-v12-latin-regular.woff2"
purge = true
purge = false
# toml-docs-end theme-colors
[schema]

View File

@@ -56,6 +56,7 @@ content_blocks:
cols: 1
padding: 4
limit: 2
icon-style: fa-5x
header-style: none
footer-style: tags
orientation: horizontal-sm

View File

@@ -25,9 +25,10 @@ content_blocks:
more:
title: More Posts
cols: 3
padding: 0
padding: 3
limit: 9
paginate: true
cover: false
header-style: none
class: border-1
---

View File

@@ -24,14 +24,19 @@ The `cards` content block renders a group of content cards.
subtle: true
orientation: stacked
icon-rounded: true
class: text-center
icon-style: fa-xs
padding: 0
align: start
elements:
- title: First Card
icon: fas 1
content: Content of the first card
- title: Second Card
icon: fas 2
content: Content of the second card
- title: Third Card
icon: fas 3
content: Content of the third card
```
{{< /example-bookshop >}}
@@ -42,3 +47,145 @@ The `cards` content block renders a group of content cards.
The content block supports the following arguments:
{{< args bookshop-cards >}}
## Examples
### Stacked cards with an image
Set the `image` attribute of each `element` to an image asset to render illustrated cards.
<!-- markdownlint-disable MD037 -->
{{< example-bookshop lang="bookshop" >}}
```yml
- _bookshop_name: cards
heading:
preheading: Preheading
title: Heading
content: Cards content. It supports multiple lines.
align: start
background:
color: primary
subtle: true
orientation: stacked
class: bg-body
align: center
elements:
- title: First Card
image: /img/nat-9l98kFByiao-unsplash.jpg
- title: Second Card
image: /img/nat-9l98kFByiao-unsplash.jpg
- title: Third Card
image: /img/nat-9l98kFByiao-unsplash.jpg
```
{{< /example-bookshop >}}
<!-- markdownlint-enable MD037 -->
### Horizontal cards with an image
Set the `orientation` attribute to `horizontal` to render horizontally oriented cards.
<!-- markdownlint-disable MD037 -->
{{< example-bookshop lang="bookshop" >}}
```yml
- _bookshop_name: cards
heading:
preheading: Preheading
title: Heading
content: Cards content. It supports multiple lines.
align: start
background:
color: primary
subtle: true
orientation: horizontal
class: bg-body
align: center
elements:
- title: First Card
image: /img/nat-9l98kFByiao-unsplash.jpg
content: Content of the first card
- title: Second Card
image: /img/nat-9l98kFByiao-unsplash.jpg
content: Content of the second card
- title: Third Card
image: /img/nat-9l98kFByiao-unsplash.jpg
content: Content of the third card
```
{{< /example-bookshop >}}
<!-- markdownlint-enable MD037 -->
### Stacked cards with an icon
Set the `icon` attribute of each `element` to an icon to render illustrated cards. Adjust the icon's styling with `icon-rounded` and `icon-style`.
<!-- markdownlint-disable MD037 -->
{{< example-bookshop lang="bookshop" >}}
```yml
- _bookshop_name: cards
heading:
preheading: Preheading
title: Heading
content: Cards content. It supports multiple lines.
align: start
background:
color: primary
subtle: true
orientation: stacked
icon-style: fa-xs text-primary
align: start
padding: 0
elements:
- title: First Card
icon: fas 1
content: Content of the first card
- title: Second Card
icon: fas 2
content: Content of the second card
- title: Third Card
icon: fas 3
content: Content of the third card
```
{{< /example-bookshop >}}
<!-- markdownlint-enable MD037 -->
### Horizontal cards with an icon
Set the `icon` attribute of each `element` to an icon to render illustrated cards. Adjust the icon's styling with `icon-rounded` and `icon-style`.
<!-- markdownlint-disable MD037 -->
{{< example-bookshop lang="bookshop" >}}
```yml
- _bookshop_name: cards
heading:
preheading: Preheading
title: Heading
content: Cards content. It supports multiple lines.
align: start
background:
color: primary
subtle: true
orientation: horizontal
icon-rounded: true
icon-style: fa-2xs text-primary
align: start
padding: 0
elements:
- title: First Card
icon: fas 1
content: Content of the first card
- title: Second Card
icon: fas 2
content: Content of the second card
- title: Third Card
icon: fas 3
content: Content of the third card
```
{{< /example-bookshop >}}
<!-- markdownlint-enable MD037 -->

View File

@@ -0,0 +1,189 @@
---
_schema: default
title: Panels
description: Use the panels content block to display multiple toggable panels.
icon: fa folder
---
## Overview
The `panels` content block displays multiple panels that are toggled by a tab control.
<!-- markdownlint-disable MD037 -->
{{< example-bookshop lang="bookshop" >}}
```yml
- _bookshop_name: panels
heading:
preheading: Preheading
title: Heading
content: Panels content. It supports multiple lines.
align: start
background:
color: primary
subtle: true
width: 12
tab-type: underline
ratio: 1x1
elements:
- title: First Panel
image: /img/sunrise.jpg
content: content 1
- title: Second Panel
image: /img/nat-9l98kFByiao-unsplash.jpg
content: content 2
- title: Third Panel
image: /img/pj-accetturo-XpD6Dkui-yg-unsplash.jpg
content: content 3
```
{{< /example-bookshop >}}
<!-- markdownlint-enable MD037 -->
## Arguments
The content block supports the following arguments:
{{< args bookshop-panels >}}
## Examples
### Tabs
Set `tab-type` to `tabs` to adjust the panel controls.
<!-- markdownlint-disable MD037 -->
{{< example-bookshop lang="bookshop" >}}
```yml
- _bookshop_name: panels
heading:
preheading: Preheading
title: Heading
content: Panels content. It supports multiple lines.
align: start
background:
color: primary
subtle: true
width: 12
tab-type: tabs
ratio: 1x1
elements:
- title: First Panel
image: /img/sunrise.jpg
content: content 1
- title: Second Panel
image: /img/nat-9l98kFByiao-unsplash.jpg
content: content 2
- title: Third Panel
image: /img/pj-accetturo-XpD6Dkui-yg-unsplash.jpg
content: content 3
```
{{< /example-bookshop >}}
<!-- markdownlint-enable MD037 -->
### Pills
Set `tab-type` to `pills` to adjust the panel controls.
<!-- markdownlint-disable MD037 -->
{{< example-bookshop lang="bookshop" >}}
```yml
- _bookshop_name: panels
heading:
preheading: Preheading
title: Heading
content: Panels content. It supports multiple lines.
align: start
background:
color: primary
subtle: true
width: 12
tab-type: pills
ratio: 1x1
elements:
- title: First Panel
image: /img/sunrise.jpg
content: content 1
- title: Second Panel
image: /img/nat-9l98kFByiao-unsplash.jpg
content: content 2
- title: Third Panel
image: /img/pj-accetturo-XpD6Dkui-yg-unsplash.jpg
content: content 3
```
{{< /example-bookshop >}}
<!-- markdownlint-enable MD037 -->
### Underline
Set `tab-type` to `underline` to adjust the panel controls.
<!-- markdownlint-disable MD037 -->
{{< example-bookshop lang="bookshop" >}}
```yml
- _bookshop_name: panels
heading:
preheading: Preheading
title: Heading
content: Panels content. It supports multiple lines.
align: start
background:
color: primary
subtle: true
width: 12
tab-type: underline
ratio: 1x1
elements:
- title: First Panel
image: /img/sunrise.jpg
content: content 1
- title: Second Panel
image: /img/nat-9l98kFByiao-unsplash.jpg
content: content 2
- title: Third Panel
image: /img/pj-accetturo-XpD6Dkui-yg-unsplash.jpg
content: content 3
```
{{< /example-bookshop >}}
<!-- markdownlint-enable MD037 -->
### Callout
Set `tab-type` to `callout` to adjust the panel controls.
<!-- markdownlint-disable MD037 -->
{{< example-bookshop lang="bookshop" >}}
```yml
- _bookshop_name: panels
heading:
preheading: Preheading
title: Heading
content: Panels content. It supports multiple lines.
align: start
background:
color: primary
subtle: true
width: 12
tab-type: callout
ratio: 1x1
elements:
- title: First Panel
image: /img/sunrise.jpg
content: content 1
- title: Second Panel
image: /img/nat-9l98kFByiao-unsplash.jpg
content: content 2
- title: Third Panel
image: /img/pj-accetturo-XpD6Dkui-yg-unsplash.jpg
content: content 3
```
{{< /example-bookshop >}}
<!-- markdownlint-enable MD037 -->

View File

@@ -24,6 +24,7 @@ The `video` content block renders a horizontal line to separate sections. The se
color: primary
subtle: true
orientation: horizontal
icon-style: fa-lg
video:
provider: vimeo
media-id: "55073825"

View File

@@ -70,7 +70,6 @@
],
"classes": [
"%!s(<nil>)",
"%!s(MISSING)",
"about",
"accordion",
"accordion-body",
@@ -90,6 +89,7 @@
"align-middle",
"align-self-center",
"align-self-end",
"align-self-start",
"anchor",
"articles",
"background-container",
@@ -104,6 +104,7 @@
"bg-opacity-10",
"bg-primary",
"bg-primary-subtle",
"bg-secondary-subtle",
"bi",
"bi-activity",
"border",
@@ -144,6 +145,7 @@
"card-icon-primary",
"card-icon-secondary",
"card-img-bg",
"card-img-h100",
"card-img-top",
"card-img-wrap",
"card-text",
@@ -172,6 +174,7 @@
"col-6",
"col-8",
"col-9",
"col-auto",
"col-lg-2",
"col-lg-4",
"col-lg-8",
@@ -230,12 +233,17 @@
"fa-2xs",
"fa-3",
"fa-4x",
"fa-5x",
"fa-activity",
"fa-address-card",
"fa-angle-left",
"fa-angle-right",
"fa-angles-left",
"fa-angles-right",
"fa-arrow-left",
"fa-arrow-right",
"fa-bootstrap",
"fa-check",
"fa-chevron-right",
"fa-circle",
"fa-circle-check",
@@ -248,6 +256,7 @@
"fa-face-frown",
"fa-facebook",
"fa-fluid",
"fa-folder",
"fa-fw",
"fa-github",
"fa-globe",
@@ -257,6 +266,8 @@
"fa-house",
"fa-info",
"fa-inverse",
"fa-lg",
"fa-li",
"fa-link",
"fa-linkedin",
"fa-magnifying-glass",
@@ -272,10 +283,14 @@
"fa-stack-2x",
"fa-sun",
"fa-timeline",
"fa-trash-can",
"fa-ul",
"fa-up-right-from-square",
"fa-whatsapp",
"fa-wrapper",
"fa-x-twitter",
"fa-xs",
"fa-youtube",
"fab",
"fade",
"faq",
@@ -331,6 +346,7 @@
"justify-content-between",
"justify-content-center",
"justify-content-end",
"justify-content-md-end",
"justify-content-md-start",
"justify-content-start",
"katex",
@@ -346,15 +362,16 @@
"lottie-animation",
"m-0",
"m-auto",
"m-md-n4",
"m-n1",
"main",
"main-nav-toggler",
"mb-0",
"mb-1",
"mb-3",
"mb-4",
"mb-5",
"mb-lg-5",
"me-1",
"me-3",
"me-auto",
"mermaid",
@@ -364,6 +381,7 @@
"ms-3",
"ms-auto",
"ms-md-3",
"mt-1",
"mt-2",
"mt-3",
"mt-4",
@@ -376,16 +394,21 @@
"mx-auto",
"mx-md-0",
"mx-md-2",
"mx-md-n4",
"my-2",
"my-4",
"my-auto",
"my-md-0",
"my-md-auto",
"my-md-n4",
"nav",
"nav-callout",
"nav-item",
"nav-link",
"nav-panel",
"nav-pills",
"nav-tabs",
"nav-underline",
"navbar",
"navbar-brand",
"navbar-collapse",
@@ -409,7 +432,12 @@
"p-2",
"p-3",
"p-4",
"p-md-4",
"page-item",
"page-link",
"pagination",
"pagination-terse",
"panel-dropdown",
"panels",
"pb-3",
"pb-4",
"pb-5",
@@ -436,14 +464,18 @@
"ptw-sm-4",
"px-%!d(string=0)",
"px-2",
"px-3",
"px-4",
"px-md-4",
"px-xxl-0",
"py-%!d(string=0)",
"py-0",
"py-1",
"py-2",
"py-3",
"py-4",
"py-md-1",
"py-md-4",
"ratio",
"ratio-16x9",
"releases",
@@ -452,6 +484,7 @@
"rounded-5",
"rounded-bottom",
"rounded-pill",
"rounded-start",
"rounded-top",
"row",
"row-cols-1",
@@ -486,6 +519,7 @@
"table-border-bottom-wrap",
"table-responsive-md",
"table-wrap",
"tabs-dropdown",
"tag-link",
"text-",
"text-bg-body-tertiary",
@@ -501,6 +535,7 @@
"text-decoration-none",
"text-end",
"text-info",
"text-md-start",
"text-muted",
"text-nowrap",
"text-primary",
@@ -557,6 +592,7 @@
],
"ids": [
"abbr",
"accelerate-your-data-products",
"accordion",
"accordion-0",
"accordion-0-heading-0",
@@ -566,8 +602,10 @@
"accordion-0-item-1",
"accordion-0-item-2",
"accordéon",
"ai",
"alert",
"alerte",
"analytics",
"animatie",
"animation",
"args",
@@ -585,6 +623,7 @@
"button",
"button-group",
"c4-diagram",
"callout",
"card",
"card-group",
"carousel",
@@ -603,15 +642,45 @@
"content-blocks",
"cookies-etc",
"custom-activity",
"data-quality",
"data-tables",
"docs",
"documentation",
"dropdown-nav-0",
"dropdown-panel-04cc902a1b9ae501f2232225b0f51e7d",
"dropdown-panel-0c79a02cf39639268a202b758ad2d285",
"dropdown-panel-0e36f3b8517c31a97b03032544995744",
"dropdown-panel-0e85ca27bed5d65b86196838671b87e4",
"dropdown-panel-14d7bbfb7be05a0e3b1c7cf418b26dfc",
"dropdown-panel-1721ebebd9944796cadea61fec2fa159",
"dropdown-panel-1d66e6454e1bd519c133f51c1650706c",
"dropdown-panel-238ffa7f4a8dcee0cfa8eeb911fead48",
"dropdown-panel-3",
"dropdown-panel-3d6152c55298dd12978e1dd8e8ad07f1",
"dropdown-panel-3f780129615672a2fd09eabb09b80d1f",
"dropdown-panel-41673841783e8a5342b0fc5a08cb5e29",
"dropdown-panel-4d26f9c6fbfbcab2d570487afdc3f239",
"dropdown-panel-5fdabe7772b55d2c1299b3c287f67a88",
"dropdown-panel-7fcd2764c358618f1e4112c62d405ea4",
"dropdown-panel-8c100e1753414457c6fe150d54c47a72",
"dropdown-panel-8dd997690015112313cbcbfc3ae3ffab",
"dropdown-panel-95e3aed36f5cb0f7ea0701222b241963",
"dropdown-panel-9d83293e530db0b5b82bcfe39b825ecc",
"dropdown-panel-b074cec1ce13618424031659a9a45e58",
"dropdown-panel-b3fd9e78fd6b81b579609205aa1f3778",
"dropdown-panel-ca4b6940ba8f448bb1c131eb6b6fbe0c",
"dropdown-panel-dde83bf03b1a9c2f8e27dc4006e70e5c",
"dropdown-panel-ed6dd8fdc76ebe2f01ef6e05b340baac",
"dropdown-panel-f7d6922687c35988422413f08824dd85",
"dropdown-panel-f90b236c80edd14268f4b88fd0b4a168",
"elements-type",
"entity-relationship-diagram",
"example",
"examples",
"exemple",
"fa-address-card",
"fa-face-frown",
"fa-folder",
"fa-square-check",
"fab-bootstrap",
"fab-docker",
@@ -621,18 +690,43 @@
"fab-medium",
"fab-whatsapp",
"fab-x-twitter",
"faq-9ef13ff2bd73b0e328491bd048c7a1ef",
"faq-9ef13ff2bd73b0e328491bd048c7a1ef-heading-faq-9ef13ff2bd73b0e328491bd048c7a1ef",
"faq-9ef13ff2bd73b0e328491bd048c7a1ef-item-0",
"faq-9ef13ff2bd73b0e328491bd048c7a1ef-item-1",
"faq-9ef13ff2bd73b0e328491bd048c7a1ef-item-2",
"fab-youtube",
"faq-265aead58c147374af539920e4b7f30d",
"faq-265aead58c147374af539920e4b7f30d-heading-faq-265aead58c147374af539920e4b7f30d",
"faq-265aead58c147374af539920e4b7f30d-item-0",
"faq-265aead58c147374af539920e4b7f30d-item-1",
"faq-265aead58c147374af539920e4b7f30d-item-2",
"faq-2f41f288be961abf2c49712935cc9bdd",
"faq-2f41f288be961abf2c49712935cc9bdd-heading-faq-2f41f288be961abf2c49712935cc9bdd",
"faq-2f41f288be961abf2c49712935cc9bdd-item-0",
"faq-2f41f288be961abf2c49712935cc9bdd-item-1",
"faq-2f41f288be961abf2c49712935cc9bdd-item-2",
"faq-4074634d91f7c83bf3d7de6176c0cdaa",
"faq-4074634d91f7c83bf3d7de6176c0cdaa-heading-faq-4074634d91f7c83bf3d7de6176c0cdaa",
"faq-4074634d91f7c83bf3d7de6176c0cdaa-item-0",
"faq-4074634d91f7c83bf3d7de6176c0cdaa-item-1",
"faq-4074634d91f7c83bf3d7de6176c0cdaa-item-2",
"faq-bce80c568b1649093b04405cbde05b59",
"faq-bce80c568b1649093b04405cbde05b59-heading-faq-bce80c568b1649093b04405cbde05b59",
"faq-bce80c568b1649093b04405cbde05b59-item-0",
"faq-bce80c568b1649093b04405cbde05b59-item-1",
"faq-bce80c568b1649093b04405cbde05b59-item-2",
"faq-d0ec0f52c6da4a60ff55ebc208eb29bd",
"faq-d0ec0f52c6da4a60ff55ebc208eb29bd-heading-faq-d0ec0f52c6da4a60ff55ebc208eb29bd",
"faq-d0ec0f52c6da4a60ff55ebc208eb29bd-item-0",
"faq-d0ec0f52c6da4a60ff55ebc208eb29bd-item-1",
"faq-d0ec0f52c6da4a60ff55ebc208eb29bd-item-2",
"fas-1",
"fas-2",
"fas-3",
"fas-address-card",
"fas-angle-left",
"fas-angle-right",
"fas-angles-left",
"fas-angles-right",
"fas-arrow-left",
"fas-arrow-right",
"fas-check",
"fas-chevron-right",
"fas-circle",
"fas-circle-check",
@@ -655,10 +749,12 @@
"fas-sort",
"fas-sun",
"fas-timeline",
"fas-trash-can",
"fas-up-right-from-square",
"fichier",
"fil-dariane",
"file",
"first-panel",
"flowchart",
"footer-docs-collapse-15",
"footer-docs-collapse-16",
@@ -673,6 +769,8 @@
"gérer-les-préférences-des-cookies",
"heading",
"heading-type",
"horizontal-cards-with-an-icon",
"horizontal-cards-with-an-image",
"how-do-we-use-cookies",
"how-we-share-your-information",
"icon",
@@ -689,6 +787,7 @@
"items-type",
"kaart",
"kbd",
"kickstart-your-data-stack-without-coding",
"language-selector",
"leaflet-map-0",
"lien",
@@ -703,6 +802,7 @@
"messages-type",
"mindmap",
"more-type",
"move-your-data-into-action",
"nav",
"nav-0-0",
"nav-0-1",
@@ -711,6 +811,32 @@
"nav-0-btn-1",
"nav-0-btn-2",
"nav-nav-0",
"nav-panel-04cc902a1b9ae501f2232225b0f51e7d",
"nav-panel-0c79a02cf39639268a202b758ad2d285",
"nav-panel-0e36f3b8517c31a97b03032544995744",
"nav-panel-0e85ca27bed5d65b86196838671b87e4",
"nav-panel-14d7bbfb7be05a0e3b1c7cf418b26dfc",
"nav-panel-1721ebebd9944796cadea61fec2fa159",
"nav-panel-1d66e6454e1bd519c133f51c1650706c",
"nav-panel-238ffa7f4a8dcee0cfa8eeb911fead48",
"nav-panel-3",
"nav-panel-3d6152c55298dd12978e1dd8e8ad07f1",
"nav-panel-3f780129615672a2fd09eabb09b80d1f",
"nav-panel-41673841783e8a5342b0fc5a08cb5e29",
"nav-panel-4d26f9c6fbfbcab2d570487afdc3f239",
"nav-panel-5fdabe7772b55d2c1299b3c287f67a88",
"nav-panel-7fcd2764c358618f1e4112c62d405ea4",
"nav-panel-8c100e1753414457c6fe150d54c47a72",
"nav-panel-8dd997690015112313cbcbfc3ae3ffab",
"nav-panel-95e3aed36f5cb0f7ea0701222b241963",
"nav-panel-9d83293e530db0b5b82bcfe39b825ecc",
"nav-panel-b074cec1ce13618424031659a9a45e58",
"nav-panel-b3fd9e78fd6b81b579609205aa1f3778",
"nav-panel-ca4b6940ba8f448bb1c131eb6b6fbe0c",
"nav-panel-dde83bf03b1a9c2f8e27dc4006e70e5c",
"nav-panel-ed6dd8fdc76ebe2f01ef6e05b340baac",
"nav-panel-f7d6922687c35988422413f08824dd85",
"nav-panel-f90b236c80edd14268f4b88fd0b4a168",
"navbar",
"navbar-0-collapse",
"navbar-mode",
@@ -718,9 +844,167 @@
"navbar-sample-collapse",
"navigation",
"notification",
"options-type",
"overview",
"panel-04cc902a1b9ae501f2232225b0f51e7d-0",
"panel-04cc902a1b9ae501f2232225b0f51e7d-1",
"panel-04cc902a1b9ae501f2232225b0f51e7d-2",
"panel-04cc902a1b9ae501f2232225b0f51e7d-btn-0",
"panel-04cc902a1b9ae501f2232225b0f51e7d-btn-1",
"panel-04cc902a1b9ae501f2232225b0f51e7d-btn-2",
"panel-0c79a02cf39639268a202b758ad2d285-0",
"panel-0c79a02cf39639268a202b758ad2d285-1",
"panel-0c79a02cf39639268a202b758ad2d285-2",
"panel-0c79a02cf39639268a202b758ad2d285-btn-0",
"panel-0c79a02cf39639268a202b758ad2d285-btn-1",
"panel-0c79a02cf39639268a202b758ad2d285-btn-2",
"panel-0e36f3b8517c31a97b03032544995744-0",
"panel-0e36f3b8517c31a97b03032544995744-1",
"panel-0e36f3b8517c31a97b03032544995744-2",
"panel-0e36f3b8517c31a97b03032544995744-btn-0",
"panel-0e36f3b8517c31a97b03032544995744-btn-1",
"panel-0e36f3b8517c31a97b03032544995744-btn-2",
"panel-0e85ca27bed5d65b86196838671b87e4-0",
"panel-0e85ca27bed5d65b86196838671b87e4-1",
"panel-0e85ca27bed5d65b86196838671b87e4-2",
"panel-0e85ca27bed5d65b86196838671b87e4-btn-0",
"panel-0e85ca27bed5d65b86196838671b87e4-btn-1",
"panel-0e85ca27bed5d65b86196838671b87e4-btn-2",
"panel-14d7bbfb7be05a0e3b1c7cf418b26dfc-0",
"panel-14d7bbfb7be05a0e3b1c7cf418b26dfc-1",
"panel-14d7bbfb7be05a0e3b1c7cf418b26dfc-2",
"panel-14d7bbfb7be05a0e3b1c7cf418b26dfc-btn-0",
"panel-14d7bbfb7be05a0e3b1c7cf418b26dfc-btn-1",
"panel-14d7bbfb7be05a0e3b1c7cf418b26dfc-btn-2",
"panel-1721ebebd9944796cadea61fec2fa159-0",
"panel-1721ebebd9944796cadea61fec2fa159-1",
"panel-1721ebebd9944796cadea61fec2fa159-2",
"panel-1721ebebd9944796cadea61fec2fa159-btn-0",
"panel-1721ebebd9944796cadea61fec2fa159-btn-1",
"panel-1721ebebd9944796cadea61fec2fa159-btn-2",
"panel-1d66e6454e1bd519c133f51c1650706c-0",
"panel-1d66e6454e1bd519c133f51c1650706c-1",
"panel-1d66e6454e1bd519c133f51c1650706c-2",
"panel-1d66e6454e1bd519c133f51c1650706c-btn-0",
"panel-1d66e6454e1bd519c133f51c1650706c-btn-1",
"panel-1d66e6454e1bd519c133f51c1650706c-btn-2",
"panel-238ffa7f4a8dcee0cfa8eeb911fead48-0",
"panel-238ffa7f4a8dcee0cfa8eeb911fead48-1",
"panel-238ffa7f4a8dcee0cfa8eeb911fead48-2",
"panel-238ffa7f4a8dcee0cfa8eeb911fead48-btn-0",
"panel-238ffa7f4a8dcee0cfa8eeb911fead48-btn-1",
"panel-238ffa7f4a8dcee0cfa8eeb911fead48-btn-2",
"panel-3-0",
"panel-3-1",
"panel-3-2",
"panel-3-btn-0",
"panel-3-btn-1",
"panel-3-btn-2",
"panel-3d6152c55298dd12978e1dd8e8ad07f1-0",
"panel-3d6152c55298dd12978e1dd8e8ad07f1-1",
"panel-3d6152c55298dd12978e1dd8e8ad07f1-2",
"panel-3d6152c55298dd12978e1dd8e8ad07f1-btn-0",
"panel-3d6152c55298dd12978e1dd8e8ad07f1-btn-1",
"panel-3d6152c55298dd12978e1dd8e8ad07f1-btn-2",
"panel-3f780129615672a2fd09eabb09b80d1f-0",
"panel-3f780129615672a2fd09eabb09b80d1f-1",
"panel-3f780129615672a2fd09eabb09b80d1f-2",
"panel-3f780129615672a2fd09eabb09b80d1f-btn-0",
"panel-3f780129615672a2fd09eabb09b80d1f-btn-1",
"panel-3f780129615672a2fd09eabb09b80d1f-btn-2",
"panel-41673841783e8a5342b0fc5a08cb5e29-0",
"panel-41673841783e8a5342b0fc5a08cb5e29-1",
"panel-41673841783e8a5342b0fc5a08cb5e29-2",
"panel-41673841783e8a5342b0fc5a08cb5e29-btn-0",
"panel-41673841783e8a5342b0fc5a08cb5e29-btn-1",
"panel-41673841783e8a5342b0fc5a08cb5e29-btn-2",
"panel-4d26f9c6fbfbcab2d570487afdc3f239-0",
"panel-4d26f9c6fbfbcab2d570487afdc3f239-1",
"panel-4d26f9c6fbfbcab2d570487afdc3f239-2",
"panel-4d26f9c6fbfbcab2d570487afdc3f239-btn-0",
"panel-4d26f9c6fbfbcab2d570487afdc3f239-btn-1",
"panel-4d26f9c6fbfbcab2d570487afdc3f239-btn-2",
"panel-5fdabe7772b55d2c1299b3c287f67a88-0",
"panel-5fdabe7772b55d2c1299b3c287f67a88-1",
"panel-5fdabe7772b55d2c1299b3c287f67a88-2",
"panel-5fdabe7772b55d2c1299b3c287f67a88-btn-0",
"panel-5fdabe7772b55d2c1299b3c287f67a88-btn-1",
"panel-5fdabe7772b55d2c1299b3c287f67a88-btn-2",
"panel-7fcd2764c358618f1e4112c62d405ea4-0",
"panel-7fcd2764c358618f1e4112c62d405ea4-1",
"panel-7fcd2764c358618f1e4112c62d405ea4-2",
"panel-7fcd2764c358618f1e4112c62d405ea4-btn-0",
"panel-7fcd2764c358618f1e4112c62d405ea4-btn-1",
"panel-7fcd2764c358618f1e4112c62d405ea4-btn-2",
"panel-8c100e1753414457c6fe150d54c47a72-0",
"panel-8c100e1753414457c6fe150d54c47a72-1",
"panel-8c100e1753414457c6fe150d54c47a72-2",
"panel-8c100e1753414457c6fe150d54c47a72-btn-0",
"panel-8c100e1753414457c6fe150d54c47a72-btn-1",
"panel-8c100e1753414457c6fe150d54c47a72-btn-2",
"panel-8dd997690015112313cbcbfc3ae3ffab-0",
"panel-8dd997690015112313cbcbfc3ae3ffab-1",
"panel-8dd997690015112313cbcbfc3ae3ffab-2",
"panel-8dd997690015112313cbcbfc3ae3ffab-btn-0",
"panel-8dd997690015112313cbcbfc3ae3ffab-btn-1",
"panel-8dd997690015112313cbcbfc3ae3ffab-btn-2",
"panel-95e3aed36f5cb0f7ea0701222b241963-0",
"panel-95e3aed36f5cb0f7ea0701222b241963-1",
"panel-95e3aed36f5cb0f7ea0701222b241963-2",
"panel-95e3aed36f5cb0f7ea0701222b241963-btn-0",
"panel-95e3aed36f5cb0f7ea0701222b241963-btn-1",
"panel-95e3aed36f5cb0f7ea0701222b241963-btn-2",
"panel-9d83293e530db0b5b82bcfe39b825ecc-0",
"panel-9d83293e530db0b5b82bcfe39b825ecc-1",
"panel-9d83293e530db0b5b82bcfe39b825ecc-2",
"panel-9d83293e530db0b5b82bcfe39b825ecc-btn-0",
"panel-9d83293e530db0b5b82bcfe39b825ecc-btn-1",
"panel-9d83293e530db0b5b82bcfe39b825ecc-btn-2",
"panel-b074cec1ce13618424031659a9a45e58-0",
"panel-b074cec1ce13618424031659a9a45e58-1",
"panel-b074cec1ce13618424031659a9a45e58-2",
"panel-b074cec1ce13618424031659a9a45e58-btn-0",
"panel-b074cec1ce13618424031659a9a45e58-btn-1",
"panel-b074cec1ce13618424031659a9a45e58-btn-2",
"panel-b3fd9e78fd6b81b579609205aa1f3778-0",
"panel-b3fd9e78fd6b81b579609205aa1f3778-1",
"panel-b3fd9e78fd6b81b579609205aa1f3778-2",
"panel-b3fd9e78fd6b81b579609205aa1f3778-btn-0",
"panel-b3fd9e78fd6b81b579609205aa1f3778-btn-1",
"panel-b3fd9e78fd6b81b579609205aa1f3778-btn-2",
"panel-ca4b6940ba8f448bb1c131eb6b6fbe0c-0",
"panel-ca4b6940ba8f448bb1c131eb6b6fbe0c-1",
"panel-ca4b6940ba8f448bb1c131eb6b6fbe0c-2",
"panel-ca4b6940ba8f448bb1c131eb6b6fbe0c-btn-0",
"panel-ca4b6940ba8f448bb1c131eb6b6fbe0c-btn-1",
"panel-ca4b6940ba8f448bb1c131eb6b6fbe0c-btn-2",
"panel-dde83bf03b1a9c2f8e27dc4006e70e5c-0",
"panel-dde83bf03b1a9c2f8e27dc4006e70e5c-1",
"panel-dde83bf03b1a9c2f8e27dc4006e70e5c-2",
"panel-dde83bf03b1a9c2f8e27dc4006e70e5c-btn-0",
"panel-dde83bf03b1a9c2f8e27dc4006e70e5c-btn-1",
"panel-dde83bf03b1a9c2f8e27dc4006e70e5c-btn-2",
"panel-ed6dd8fdc76ebe2f01ef6e05b340baac-0",
"panel-ed6dd8fdc76ebe2f01ef6e05b340baac-1",
"panel-ed6dd8fdc76ebe2f01ef6e05b340baac-2",
"panel-ed6dd8fdc76ebe2f01ef6e05b340baac-btn-0",
"panel-ed6dd8fdc76ebe2f01ef6e05b340baac-btn-1",
"panel-ed6dd8fdc76ebe2f01ef6e05b340baac-btn-2",
"panel-f7d6922687c35988422413f08824dd85-0",
"panel-f7d6922687c35988422413f08824dd85-1",
"panel-f7d6922687c35988422413f08824dd85-2",
"panel-f7d6922687c35988422413f08824dd85-btn-0",
"panel-f7d6922687c35988422413f08824dd85-btn-1",
"panel-f7d6922687c35988422413f08824dd85-btn-2",
"panel-f90b236c80edd14268f4b88fd0b4a168-0",
"panel-f90b236c80edd14268f4b88fd0b4a168-1",
"panel-f90b236c80edd14268f4b88fd0b4a168-2",
"panel-f90b236c80edd14268f4b88fd0b4a168-btn-0",
"panel-f90b236c80edd14268f4b88fd0b4a168-btn-1",
"panel-f90b236c80edd14268f4b88fd0b4a168-btn-2",
"persona",
"pie-chart",
"pills",
"projecten",
"projects",
"projets",
@@ -730,14 +1014,22 @@
"release",
"requirement-chart",
"réduire",
"second-panel",
"security",
"sequence-diagram",
"spinner",
"stacked-cards-with-an-icon",
"stacked-cards-with-an-image",
"stacked-video-message",
"start-using-your-data-immediately",
"state-diagram",
"sub",
"sup",
"sécurité",
"table",
"tabs",
"tap-into-the-latest-thinking-from-infusal-and-stay-in-the-lead",
"third-panel",
"third-party-links--use-of-your-information",
"timeline",
"title",
@@ -749,17 +1041,22 @@
"toast-message-email-4",
"toc-collapse",
"tooltip",
"turn-boring-into-brilliant",
"types-de-cookies-que-nous-utilisons",
"types-of-cookies-we-use",
"underline",
"user-journey",
"video",
"video-type",
"vidéo",
"vimeo",
"vos-droits",
"welcome-to-hinode",
"what-are-cookies",
"works-seamlessly-with-your-current-tech-stack",
"xy-chart",
"your-rights"
"your-rights",
"youtube"
]
}
}

4
go.mod
View File

@@ -4,7 +4,7 @@ go 1.19
require (
github.com/airbnb/lottie-web v5.12.2+incompatible // indirect
github.com/cloudcannon/bookshop/hugo/v3 v3.16.1 // indirect
github.com/cloudcannon/bookshop/hugo/v3 v3.16.3 // indirect
github.com/gethinode/mod-bootstrap v1.3.3 // indirect
github.com/gethinode/mod-csp v1.0.7 // indirect
github.com/gethinode/mod-flexsearch/v2 v2.1.1 // indirect
@@ -18,7 +18,7 @@ require (
github.com/gethinode/mod-simple-datatables v1.1.7 // indirect
github.com/gethinode/mod-simple-datatables/v2 v2.0.1 // indirect
github.com/gethinode/mod-utils/v3 v3.3.1 // indirect
github.com/gethinode/mod-utils/v4 v4.9.2 // indirect
github.com/gethinode/mod-utils/v4 v4.11.0 // indirect
github.com/nextapps-de/flexsearch v0.0.0-20250606060143-c28f52c09b7a // indirect
github.com/twbs/bootstrap v5.3.7+incompatible // indirect
)

6
go.sum
View File

@@ -6,6 +6,8 @@ github.com/cloudcannon/bookshop/hugo/v3 v3.16.0 h1:Fb76ABHqTyPl9Z2QqYJCwiMBKPySh
github.com/cloudcannon/bookshop/hugo/v3 v3.16.0/go.mod h1:s7mIonDhtsLcn10ZKuVXyqd6BDHI8vT1WQhZw8rPfY8=
github.com/cloudcannon/bookshop/hugo/v3 v3.16.1 h1:WByz6rqg28h94VLVLscu77/CHhi2peig/LqrnVomX0Y=
github.com/cloudcannon/bookshop/hugo/v3 v3.16.1/go.mod h1:s7mIonDhtsLcn10ZKuVXyqd6BDHI8vT1WQhZw8rPfY8=
github.com/cloudcannon/bookshop/hugo/v3 v3.16.3 h1:/Z66xKILl1SNGQePHZCnxo6vFgED7AGI600OSPotXj4=
github.com/cloudcannon/bookshop/hugo/v3 v3.16.3/go.mod h1:s7mIonDhtsLcn10ZKuVXyqd6BDHI8vT1WQhZw8rPfY8=
github.com/gethinode/mod-bootstrap v1.0.1 h1:NDZar+UEL42YHCvzzO+jVgqkZU5INA12BpjX3y6U4I4=
github.com/gethinode/mod-bootstrap v1.0.1/go.mod h1:DcpPc2cNaXUPGEvhD7npuEEPA7573NvakTlrwFbyjr8=
github.com/gethinode/mod-bootstrap v1.1.0 h1:BbalsW8kmFhv+J+dcc41TGcjIlM/p69AB0h0oGhAXIU=
@@ -458,6 +460,10 @@ github.com/gethinode/mod-utils/v4 v4.9.1 h1:9D2AJcrlS5r2moHEoo70GrNBmq1pJHd9oT4G
github.com/gethinode/mod-utils/v4 v4.9.1/go.mod h1:bYmvRdAo4ICy5MpSGafDvO4p5bTDpsDKFCPL3bH0mN4=
github.com/gethinode/mod-utils/v4 v4.9.2 h1:lzcihwAsm8R2k2v+tWu5nfWvXMA8uRKi0nGIzZCygZ8=
github.com/gethinode/mod-utils/v4 v4.9.2/go.mod h1:bYmvRdAo4ICy5MpSGafDvO4p5bTDpsDKFCPL3bH0mN4=
github.com/gethinode/mod-utils/v4 v4.10.0 h1:CfVa57r52wXd0bUqSJlpux2cloHQNBBe13aeqLJ8FXE=
github.com/gethinode/mod-utils/v4 v4.10.0/go.mod h1:bYmvRdAo4ICy5MpSGafDvO4p5bTDpsDKFCPL3bH0mN4=
github.com/gethinode/mod-utils/v4 v4.11.0 h1:24RObT99j/jiQnCyHvXahJHIA8e8uQuBb1pUIRJOxpA=
github.com/gethinode/mod-utils/v4 v4.11.0/go.mod h1:bYmvRdAo4ICy5MpSGafDvO4p5bTDpsDKFCPL3bH0mN4=
github.com/nextapps-de/flexsearch v0.0.0-20230711092928-1243fd883ec3 h1:H/qVR5O4BXjRjD+5PZB+r4ug2BSJ2Of4RtwOntd+OKo=
github.com/nextapps-de/flexsearch v0.0.0-20230711092928-1243fd883ec3/go.mod h1:5GdMfPAXzbA2gXBqTjC6l27kioSYzHlqDMh0+wyx7sU=
github.com/nextapps-de/flexsearch v0.0.0-20240108021025-afd75f742f22 h1:re7L8FxbXQpnX8BgzkdUnDpsUmloGNyLmiy2ZCln8pg=

View File

@@ -156,7 +156,7 @@
"ratio" (partial "inline/style.html" (dict "styles" $args.styles "index" $index "key" "ratio" "default" $args.ratio))
"portrait" (partial "inline/style.html" (dict "styles" $args.styles "index" $index "key" "portrait" "default" $args.portrait))
"subtle" $args.subtle
"icon-style" (or (index $element "$icon-style") $element.style)
"icon-style" (or (index $element "icon-style") $element.style $args.iconStyle)
"align" $args.align
"button" $args.button
"button-label" (or (index $element "button-label") $element.buttonLabel)

View File

@@ -62,6 +62,26 @@
</small></p>
{{- end -}}
{{/* Inline partial to render the card's icon */}}
{{- define "_partials/inline/card-icon.html" -}}
{{ $padding := .padding }}
{{ $icon := .icon}}
{{ $rounded := .rounded }}
{{ $style := .style}}
{{ $stack := .stack }}
{{ $class := .class }}
<div class="card-icon{{ with $padding }} p-{{ . }}{{ end }}{{ if $rounded }} fa-stack {{ $style }} fa-fw {{ $stack }}{{ end }} {{ $class }}">
{{ if $rounded }}
{{- partial "assets/icon.html" (dict "icon" (printf "fas circle fa-stack-2x") "spacing" false) -}}
{{- partial "assets/icon.html" (dict "icon" (printf "%s fa-stack-1x fa-inverse" $icon) "spacing" false) -}}
{{ else }}
{{- partial "assets/icon.html" (dict "icon" (printf "%s %s fa-fw" $icon $style) "spacing" false) -}}
{{ end }}
</div>
{{- end -}}
{{/* Initialize global variables */}}
{{- $padding := partial "utilities/GetPadding.html" -}}
@@ -110,7 +130,6 @@
{{- $icon := $args.icon -}}
{{- $iconStyle := "" -}}
{{- $anchor := $args.anchor }}
{{- $style := $args.style }}
{{- with $page -}}
{{- if not $args.title }}{{ $title = .Title }}{{ end -}}
@@ -126,10 +145,11 @@
{{- if not $args.anchor }}{{ $anchor = (or (and (reflect.IsMap .Params.Thumbnail) .Params.Thumbnail.anchor) "") }}{{ end -}}
{{- end -}}
{{- $style := $args.iconStyle }}
{{ if (hasPrefix $args.orientation "horizontal") }}
{{ if not $args.style }}{{ $style = "fa-fluid fa-fw" }}{{ end }}
{{ if not $args.iconStyle }}{{ $style = "fa-fluid fa-fw" }}{{ end }}
{{ else }}
{{ if not $args.style }}{{ $style = "fa-4x" }}{{ end }}
{{ if not $args.iconStyle }}{{ $style = "fa-4x" }}{{ end }}
{{- $iconStyle = "pb-3" -}}
{{ end }}
@@ -138,11 +158,19 @@
{{- if eq $args.body "none" }}{{ $title = "" }}{{ $description = "" }}{{ end -}}
{{ if site.Params.main.titleCase }}{{ $title = title $title }}{{ end }}
{{- $thumbnailArgs := dict
"src" $thumbnail
"portrait" $args.portrait
"anchor" $anchor
"sizes" $args.sizes
"title" (or $args.alt $title)
"loading" $args.loading
-}}
{{/* Main code */}}
{{ if or (ne $args.gutter "0") ($args.wrapper) }}<div class="g-{{ $args.gutter }} {{ $args.wrapper }}">{{ end }}
{{ if or (ne $args.gutter "0") ($args.wrapper) }}<div class="g-{{ $args.gutter }} {{ $args.wrapper }} h-100">{{ end }}
{{ $stack := "fa-2x" }}
{{ $stack := "" }}
{{- if hasPrefix $args.orientation "horizontal" -}}
{{ $col1 := "" }}
@@ -157,61 +185,44 @@
{{ $col1 = "col-4 pe-0" }}
{{ $col2 = "col-8" }}
{{ end }}
{{ else if $icon }}
{{ if eq $args.orientation "horizontal-sm" }}
{{ $stack = "fa-1x" }}
{{ $col1 = "col-4 col-md-2 pe-0" }}
{{ $col2 = "col-8 col-md-10" }}
{{ else }}
{{ $col1 = "col-4 pe-0" }}
{{ $col2 = "col-8" }}
{{ end }}
{{ end }}
{{/* Render horizontal card */}}
<div class="card {{ $colorStyle }}{{ $args.class }}">
<div class="row g-0 row-cols-2 h-100{{ if $args.button }} pb-{{ $padding.y }}{{ end }}">
<div class="{{ if $thumbnail }}row-cols-2 row {{ end }} g-0 h-100{{ if $args.button }} pb-{{ $padding.y }}{{ end }}">
{{- if $thumbnail -}}
<div class="{{ $col1 }}">
{{ $fullHeight := "card-img-h100" }}
{{ $rounding := "rounded-start" }}
{{ if eq (lower (path.Ext $thumbnail)) ".svg" }}{{ $fullHeight = "" }}{{ $rounding = "" }}{{ end }}
{{- partial $args.hook (dict
"src" $thumbnail
"ratio" (or $ratio "auto")
"portrait" $args.portrait
"sizes" $args.sizes
"anchor" $anchor
"wrapper" "h-100 card-img-wrap d-flex align-items-center"
{{- partial $args.hook (merge $thumbnailArgs (dict
"wrapper" "card-img-wrap h-100 d-flex align-items-center"
"class" (printf "card-img-bg %s %s" $rounding $fullHeight)
"title" $title
"loading" $args.loading
) -}}
</div>
{{- else if $icon -}}
<div class="{{ $col1 }} p-{{ $args.padding }}">
<div class="card-icon {{ if $args.iconRounded }}fa-stack {{ $args.stack }} mx-auto{{ else }}fa-wrapper h-100 {{ end }} d-flex align-items-{{ $args.align}} justify-content-center {{ $iconStyle }}">
{{ if $args.iconRounded }}
{{- partial "assets/icon.html" (dict "icon" "fas circle fa-stack-2x") -}}
{{- partial "assets/icon.html" (dict "icon" (printf "%s fa-stack-1x fa-inverse" $icon)) -}}
{{ else }}
{{- partial "assets/icon.html" (dict "icon" (printf "%s %s" $icon $style)) -}}
{{ end }}
</div>
"ratio" (or $ratio "auto")
)) -}}
</div>
{{- end -}}
<div class="{{ $col2 }}">
<div class="card-body d-flex p-{{ $args.padding }} flex-column h-100 flex-fill">
{{ if $page }}
<div>{{ partial "inline/card-caption.html" (dict
"page" $page
"keywords" $args.headerStyle
"color" $args.color
) }}
</div>
<div class="card-body p-{{ $args.padding }} h-100 hstack">
{{ if $icon }}
{{- partial "inline/card-icon.html" (dict
"icon" $icon
"padding" $args.padding
"rounded" $args.iconRounded
"style" $style
"stack" $args.stack
"class" (printf "align-self-%s me-1 mt-1 col-auto" $args.align)
)}}
{{ end }}
<div class="flex-fill">
<div>
{{ if $page }}
<div>{{ partial "inline/card-caption.html" (dict
"page" $page
"keywords" $args.headerStyle
"color" $args.color
) }}
</div>
{{ end }}
{{- partial "inline/card-body.html" (dict
"title" $title
"href" $href
@@ -219,25 +230,25 @@
"description" $description
"button" $args.button
) -}}
{{ if $page }}<div>{{ partial "inline/card-caption.html" (dict "page" $page "keywords" $args.footerStyle "color" $args.color) }}</div>{{ end }}
{{ if and $href $args.button }}
{{ $label := (or $args.buttonLabel $title) | default (T "readMore") }}
{{ $buttonClass := "card-button mb-n4" }}
{{ $buttonType := (or $args.linkType $args.buttonType) }}
{{ if eq $buttonType "link" }}{{ $buttonClass = "card-button card-button-link mb-n4" }}{{ end }}
<div class="d-flex align-items-end">
{{ partial "assets/button.html" (dict
"title" $label
"icon" "fas chevron-right"
"href" $href
"outline" true
"button-size" "sm"
"class" $buttonClass
"link-type" $buttonType
)}}
</div>
{{ end }}
</div>
{{ if $page }}<div>{{ partial "inline/card-caption.html" (dict "page" $page "keywords" $args.footerStyle "color" $args.color) }}</div>{{ end }}
{{ if and $href $args.button }}
{{ $label := (or $args.buttonLabel $title) | default (T "readMore") }}
{{ $buttonClass := "card-button mb-n4" }}
{{ $buttonType := (or $args.linkType $args.buttonType) }}
{{ if eq $buttonType "link" }}{{ $buttonClass = "card-button card-button-link mb-n4" }}{{ end }}
<div class="d-flex align-items-end">
{{ partial "assets/button.html" (dict
"title" $label
"icon" "fas chevron-right"
"href" $href
"outline" true
"button-size" "sm"
"class" $buttonClass
"link-type" $buttonType
)}}
</div>
{{ end }}
</div>
</div>
</div>
@@ -245,30 +256,23 @@
{{- else -}}
{{/* Render stacked / default card */}}
{{ $overlay := eq $args.orientation "overlay" }}
<div class="card {{ $colorStyle }} {{ $args.class }} text-{{ $args.align }}">
<div class="card {{ $colorStyle }} {{ $args.class }} text-{{ $args.align }}{{ if not $thumbnail }} p-{{ $args.padding }}{{ end }}">
{{- if $thumbnail -}}
{{- partial $args.hook (dict
"src" $thumbnail
"ratio" (or $ratio "16x9")
"portrait" $args.portrait
"anchor" $anchor
"sizes" $args.sizes
{{- partial $args.hook (merge $thumbnailArgs (dict
"wrapper" "card-img-wrap"
"class" "card-img-top card-img-bg"
"title" (or $args.alt $title)
"loading" $args.loading
) -}}
"ratio" (or $ratio "16x9")
)) -}}
{{- else if $icon -}}
<div class="card-icon p-{{ $args.padding }} {{ $iconStyle }} text-{{ $args.align }} {{ if $args.iconRounded }}fa-stack {{ $args.stack }}{{ end }} w-100">
{{ if $args.iconRounded }}
{{- partial "assets/icon.html" (dict "icon" (printf "fas circle fa-stack-2x %s")) -}}
{{- partial "assets/icon.html" (dict "icon" (printf "%s fa-stack-1x fa-inverse" $icon)) -}}
{{ else }}
{{- partial "assets/icon.html" (dict "icon" (printf "%s %s" $icon $style)) -}}
{{ end }}
</div>
{{- partial "inline/card-icon.html" (dict
"icon" $icon
"rounded" $args.iconRounded
"style" $style
"stack" $args.stack
"class" (printf "mb-1 m-0 text-%s" $args.align)
)}}
{{- end -}}
<div class="card-body d-flex flex-column p-{{ $args.padding }} {{ if $overlay }}card-img-overlay card-overlay-gradient p-4{{ end }}" {{ if $overlay }}data-bs-theme="dark"{{ end }}>
<div class="card-body p-0 d-flex flex-column{{ if $thumbnail }} p-{{ $args.padding }}{{ end }}{{ if $overlay }}card-img-overlay card-overlay-gradient p-4{{ end }}" {{ if $overlay }}data-bs-theme="dark"{{ end }}>
{{ if $args.overlay }}<div class="flex-grow-1"></div>{{ end }}
{{ if $page }}{{- partial "inline/card-caption.html" (dict "page" $page "keywords" $args.headerStyle "color" $args.color) -}}{{ end }}
{{- partial "inline/card-body.html" (dict "title" $title "href" $href "color" $args.color "description" $description) -}}
@@ -276,7 +280,7 @@
</div>
{{ if $args.button }}
{{ $label := (or $args.buttonLabel $title) | default (T "readMore") }}
<div class="row p-{{ $args.padding }}" >
<div class="row" >
<div class="{{ if eq $args.orientation "horizontal-sm" }}col-4 col-md-2{{ else if eq $args.orientation "horizontal" }}col-4{{ end }}"></div>
<div class="col d-flex align-items-end {{ if eq $args.orientation "horizontal-sm" }}px-2{{ else if eq $args.orientation "horizontal"}}px-1 {{ else }}px-2 pt-1{{ end }}">
{{ $buttonClass := "card-button" }}
@@ -289,7 +293,7 @@
"button-size" "sm"
"class" "card-button"
"class" $buttonClass
"link-type" $args.buttonType
"link-type" $buttonType
)}}
</div>
</div>

View File

@@ -51,7 +51,7 @@
{{ partial "assets/hero.html" (dict
"page" $args.page
"heading" $heading
"heading" (merge $heading (dict "size" 6))
"background" $args.background
"illustration" $illustration
"order" $args.order

View File

@@ -77,10 +77,10 @@
{{- with $wrapper }}<div class="{{ . }}">{{ end }}
{{- end -}}
{{- if $data -}}
{{- if site.Params.debugging.includeSVGOrigin -}}
{{- if and site.Params.debugging.includeSVGOrigin $.url -}}
{{- printf "{{/* <svg src=\"%s\"> */}}" $.url | safeHTML -}}
{{- end -}}
{{- $data = replace $data "<svg" (printf "<svg class=\"%s\"" $args.class) -}}
{{- with $args.class }}{{ $data = replace $data "<svg" (printf "<svg class=\"%s\"" .) }}{{ end -}}
{{- $data | safeHTML -}}
{{- else if not $fileAnchor -}}
<img class="img-fluid {{ $args.class }}"

View File

@@ -67,7 +67,9 @@
{{- if hasSuffix $src "svg" -}}
{{- $res = partial "utilities/GetResource.html" (dict "url" $src "page" $args.page) -}}
{{ if not $res }}
{{- $targetURL := partial "utilities/GetStaticURL" (dict "url" (strings.TrimPrefix "/static" $src)) -}}
{{- $targetURL := strings.TrimPrefix "/static" $src -}}
{{- $u := urls.Parse site.BaseURL }}
{{- $targetURL = strings.TrimPrefix $u.Path $src -}}
{{- if not (fileExists (path.Join "/static" $targetURL)) -}}
{{ warnf "Cannot find vector image resource: %q" $src -}}
{{ else }}

View File

@@ -114,7 +114,6 @@
{{ $title := partial "assets/section-title.html" (dict
"heading" $heading
"use-title" $args.useTitle
"size" $args.size
"links" $args.links
"link-type" (or $args.linkType $args.type)
"class" "hero-title"

View File

@@ -72,7 +72,7 @@
aria-labelledby="{{ $parentID }}-heading-{{ $args.id }}"
data-bs-parent="#accordion-{{ $parentID }}"
>
<div class="accordion-body">{{ $args.body | $args.page.RenderString | safeHTML }}</div>
<div class="accordion-body">{{ or $args.raw ($args.body | $args.page.RenderString) | safeHTML }}</div>
</div>
</div>
{{- else -}}
@@ -82,9 +82,9 @@
role="tabpanel"
aria-labelledby="{{ $parentID }}-btn-{{ $args.id }}"
tabindex="0"
data-has-content="{{ gt (len $args.body) 0 }}"
data-has-content="{{ or (gt (len (or $args.raw "")) 0) (gt (len $args.body) 0 ) }}"
>
{{ $args.body | $args.page.RenderString | safeHTML }}
{{ or $args.raw ($args.body | $args.page.RenderString) | safeHTML }}
</div>
{{- end -}}
{{- end -}}

View File

@@ -6,6 +6,29 @@
{{- $error := false -}}
{{- define "_partials/inline/nav-dropdown.html" -}}
{{ $id := .id }}
{{ $class := .class }}
{{ $titles := .titles }}
{{ $wrap := .wrap }}
<div id="dropdown-{{ $id }}" class="dropdown panel-dropdown {{ $class }}">
<a class="link-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
{{ cond (gt (len $titles) 0) (index $titles 0) (T "sectionMenu") }}
</a>
<ul class="dropdown-menu">
{{- range $index, $item := $titles -}}
{{ $itemID := printf "%s-btn-%d" $id $index -}}
{{- $show := eq $index 0 -}}
<li>
<a class="dropdown-item {{ if not $wrap }} text-nowrap{{ end }}{{ if $show }} active{{ end }}"
data-link="#{{ $id }}-btn-{{ $index }}" type="button">{{ $item }}</a>
</li>
{{ end }}
</ul>
</div>
{{- end -}}
{{/* Initialize arguments */}}
{{- $args := partial "utilities/InitArgs.html" (dict "structure" "nav" "args" . "group" "partial") -}}
{{- if or $args.err $args.warnmsg -}}
@@ -19,46 +42,38 @@
{{- $error = $args.err -}}
{{- end -}}
{{/* Initialize global arguments */}}
{{- $padding := partial "utilities/GetPadding.html" -}}
{{- $breakpoint := partial "utilities/GetBreakpoint.html" -}}
{{/* Initialize local arguments */}}
{{- $page := $args.page -}}
{{- $id := $args.id | default "0" -}}
{{- $type := or $args.tabType $args.type -}}
{{- $wrap := or $args.wordWrap $args.wrap -}}
{{- $breakpoint := partial "utilities/GetBreakpoint.html" -}}
{{- $titles := slice -}}
{{- range $args.list }}{{ $titles = $titles | append .Title }} {{ end -}}
{{- if reflect.IsSlice $args.navTitles }}{{ $titles = $titles | append $args.navTitles }}{{ end -}}
{{/* Main code */}}
<div class="col col-{{ $breakpoint.current }}-{{ $args.width }} mx-auto">
{{ if $args.vertical }}<div class="d-flex align-items-start">{{ end }}
{{ if eq $type "callout" }}
<div class="d-lg-none">
<div id="accordion-{{ $id }}" class="accordion mb-3{{ with $args.class }} {{ . }}{{ end }} nav-callout">
{{- range $index, $item := $args.list -}}
{{ partial "assets/nav-item.html" (dict
"page" $args.page
"id" $index
"parentID" $id
"fade" false
"header" $item.Title
"class" $args.class
"body" (or $item.Description $item.Content)
"show" false
"disabled" $item.disabled
"item_type" "accordion"
"illustration" (partial "utilities/GetIllustration.html" (dict "item" $item "size" "col-12"))
)
}}
{{ end -}}
{{- $args.navItems | safeHTML -}}
</div>
</div>
<div class="d-none d-lg-block">
{{ if $args.responsive }}
{{ partial "inline/nav-dropdown.html" (dict
"id" $id
"class" (printf "d-%s-none py-%d" $breakpoint.current $padding.y)
"titles" $titles
"wrap" $wrap
) }}
{{ end }}
<div class="{{ if $args.responsive }}d-none d-{{ $breakpoint.current }}-block{{ end }}">
<ul
class="nav{{ with $type }} nav-{{ . }}{{ end }}{{ with $args.class }} {{ . }}{{ end }}{{ if $args.vertical }} flex-column{{ end }}"
class="nav nav-panel{{ with $type }} nav-{{ . }}{{ end -}}{{ with $args.class }} {{ . }}{{ end }}{{ if $args.vertical }} flex-column{{ end }} tabs-dropdown"
id="nav-{{ $id }}"
role="tablist"{{ if $args.vertical }}
aria-orientation="vertical"{{ end }}
role="tablist"
{{ if $args.vertical }}aria-orientation="vertical"{{ end }}
data-companion="dropdown-{{ $id }}"
>
{{- $titles := slice -}}
{{- range $args.list }}{{ $titles = $titles | append .Title }} {{ end -}}
@@ -84,49 +99,9 @@
</li>
{{ end -}}
</ul>
<div class="tab-content {{ if eq $type "tabs" }}border p-3{{ else if $args.vertical }}ms-3{{ else }}mt-3{{ end }}">
{{- range $index, $item := $args.list -}}
{{- $header := $item.Title -}}
{-{ $body := $item.Content -}}
{{- $show := eq $index 0 -}}
{{- $thumbnail := "" -}}
{{- if reflect.IsMap $item.Params.Thumbnail -}}
{{- $thumbnail = $item.Params.Thumbnail.url -}}
{{- else -}}
{{- $thumbnail = $item.Params.Thumbnail -}}
{{- end -}}
<div
class="tab-pane{{ if $show }} active{{ end }}"
id="nav-{{ $id }}-{{ $index }}"
role="tabpanel"
aria-labelledby="{{ $id }}-btn-{{ $index }}"
tabindex="0"
>
{{- if eq $args.pane "persona" -}}
{{- partial "assets/persona.html" (dict
"title" $item.Title
"class" $args.class
"color" $args.color
"href" $item.Params.href
"content" (partial "utilities/GetDescription.html" (dict "page" $item))
"thumbnail" $thumbnail
) -}}
{{- else -}}
{{- $illustration := (partial "utilities/GetIllustration.html" (dict "item" $item)) -}}
{{- if $illustration -}}
<div class="row">
<div class="col-12 col-lg-10 order-1 order-lg-0">{{- (or $item.Description $item.Content) -}}</div>
<div class="col-12 col-lg-2 order-0 order-lg-1">{{ $illustration | safeHTML }}</div>
</div>
{{- else -}}
{{- (or $item.Description $item.Content) -}}
{{ end }}
{{- end -}}
</div>
{{ end }}
</div>
<div class="tab-content {{ if in (slice "tabs" "callout") $type }}border p-3 bg-body {{ else if $args.vertical }}ms-3{{ else }}mt-3{{ end }}">
{{- $args.navItems | safeHTML -}}
</div>
{{- if eq $type "callout" }}</div>{{ end -}}
{{- if $args.vertical }}</div>{{ end -}}
</div>

View File

@@ -80,7 +80,7 @@
{{ end }}
{{/* Initialize global variables */}}
{{- $padding := partial "utilities/GetPadding.html" -}}
{{- $padding := partial "utilities/GetPadding.html" (dict "section" "navigation") -}}
{{/* Initialize local arguments */}}
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
@@ -124,7 +124,8 @@
{{ $logo := "" }}
{{ with $args.logo | default site.Params.navigation.logo }}
{{ $logo = partial "assets/image.html" (dict "src" . "loading" "eager" "title" $title "image-height" 30) }}
{{ $height := index site.Params.navigation "logo-height" | default 30 }}
{{ $logo = partial "assets/image.html" (dict "src" . "loading" "eager" "title" $title "image-height" $height) }}
{{ end }}
{{- $pre := $args.pre -}}

View File

@@ -19,7 +19,7 @@
{{- $padding := partial "utilities/GetPadding.html" -}}
{{/* Initialize local arguments */}}
{{- $size := (or $args.size site.Params.modules.bookshop.title.size) | default 4 -}}
{{- $size := (or $args.heading.size site.Params.modules.bookshop.title.size) | default 4 -}}
{{- $arrangement := (or $args.arrangement site.Params.modules.bookshop.title.arrangement) | default "above" -}}
{{- $headingStyle := (or $args.headingStyle site.Params.modules.bookshop.title.headingStyle) | default "display" -}}
{{- $contentStyle := (or $args.contentStyle site.Params.modules.bookshop.title.contentStyle) | default "lead text-muted" -}}
@@ -86,7 +86,7 @@
}}
<!-- Main code -->
<div class="text-{{ $args.heading.align }}{{ with $justify }} {{ . }}{{ end }}{{ with $args.class }} {{ . }}{{ end }}{{ with $width }} {{ . }}{{ end }} py-{{ $padding.y }}">
<div class="text-{{ $args.heading.align }}{{ with $justify }} {{ . }}{{ end }}{{ with $args.class }} {{ . }}{{ end }}{{ with $width }} {{ . }}{{ end }} pb-{{ $padding.y }}">
{{ if and $preheading (eq $arrangement "first") }}
<div class="container-fluid">
<div class="row">

View File

@@ -109,7 +109,7 @@
{{ end }}
{{/* Render default timeline */}}
<div class="container p-0 d-none d-md-block mb-5 {{ with $background }} timeline-{{ . }} {{ . }}{{ end }}{{ with $args.class }} {{ . }}{{ end }}">
<div class="container p-0 d-none d-md-block {{ with $background }} timeline-{{ . }} {{ . }}{{ end }}{{ with $args.class }} {{ . }}{{ end }}">
{{ $title | safeHTML }}
{{ range $index, $item := $data }}
<div class="row timeline timeline-{{ $item.color }} timeline-dot g-0 ">

View File

@@ -7,7 +7,7 @@
{{ $error := false }}
{{/* Initialize arguments */}}
{{ $args := partial "utilities/InitArgs.html" (dict "structure" "toc" "args" . "group" "partial")}}
{{ $args := partial "utilities/InitArgs.html" (dict "structure" "toc" "args" . "group" "partial") }}
{{ if or $args.err $args.warnmsg }}
{{ partial (cond $args.err "utilities/LogErr.html" "utilities/LogWarn.html") (dict
"partial" "assets/toc.html"
@@ -31,8 +31,8 @@
{{- if and (not $error) (ge (len .) $minNumHeadings) }}
<div class="d-grid gap-2 mx-auto">
{{ partial "assets/button.html" (dict
"title" (T "toc")
"color" "secondary"
"title" (T "toc")
"color" "secondary"
"outline" "true"
"class" "toc-button"
"icon" "fas sort"

View File

@@ -17,7 +17,9 @@
{{/* Insert a default hero and article block (for list pages) when no content blocks are available */}}
{{ if and .blocks (gt (len .blocks) 0 )}}
{{ $blocks = .blocks }}
{{ range $i, $b := .blocks }}
{{ $blocks = $blocks | append (merge (dict "_ordinal" $i) $b) }}
{{ end }}
{{ else if $default }}
{{ $err := (hasPrefix $page.LinkTitle "404") }}
{{ $pageTitle := $page.LinkTitle }}

View File

@@ -31,12 +31,12 @@
{{- $header := or (partial "utilities/GetArgParent" (dict "page" . "arg" "header-style")) (partial "utilities/GetArgParent" (dict "page" . "arg" "header")) -}}
{{- $icon := .Get "icon" -}}
{{- $iconRounded := or (partial "utilities/GetArgParent" (dict "page" . "arg" "icon-rounded")) (partial "utilities/GetArgParent" (dict "page" . "arg" "iconRounded")) -}}
{{- $align := partial "utilities/GetArgParent" (dict "page" . "arg" "align") -}}
{{- $align := partial "utilities/GetArgParent" (dict "page" . "arg" "align") | default "start" -}}
{{- $style := or (partial "utilities/GetArgParent" (dict "page" . "arg" "icon-style")) (partial "utilities/GetArgParent" (dict "page" . "arg" "style")) -}}
{{- $subtle := partial "utilities/GetArgParent" (dict "page" . "arg" "subtle") -}}
{{- $loading := .Get "loading" -}}
{{- $orientation := partial "utilities/GetArgParent" (dict "page" . "arg" "orientation") -}}
{{- $padding := partial "utilities/GetArgParent" (dict "page" . "arg" "padding") -}}
{{- $padding := partial "utilities/GetArgParent" (dict "page" . "arg" "padding") | default 3 -}}
{{- $ratio := partial "utilities/GetArgParent" (dict "page" . "arg" "ratio") -}}
{{- $page := .Page -}}
{{- $path := .Get "path" -}}

View File

@@ -54,7 +54,13 @@
{{ errorf "Expected '_bookshop_name': %s" .Position -}}
{{ $error = true }}
{{ else }}
{{ $partial = partial "_bookshop/helpers/component.html" (slice $component_name $data "p-1 p-md-4" "m-n1 m-md-n4") }}
{{- $padding := partial "utilities/GetPadding.html" -}}
{{ $partial = partial "_bookshop/helpers/component.html" (slice
$component_name
$data
(printf "p-1 px-md-%d py-md-%d" $padding.x $padding.y)
(printf "m-n1 mx-md-n%d my-md-n%d" $padding.x $padding.y)
) }}
{{ end }}
{{ else }}
{{ errorf "Expected frontmatter codeblock as input: %s" .Position -}}

1865
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -90,7 +90,7 @@
"eslint": "^9.30.1",
"husky": "^9.1.7",
"markdownlint-cli2": "^0.18.1",
"neostandard": "^0.12.1",
"neostandard": "^0.12.2",
"netlify-plugin-hugo-cache-resources": "^0.2.1",
"npm-run-all": "^4.1.5",
"postcss-cli": "^11.0.1",