Compare commits

...

79 Commits

Author SHA1 Message Date
Mark Dumay
82d426c14b Merge pull request #951 from gethinode/image
Fix linting issue
2024-05-25 19:43:35 +02:00
Mark Dumay
a2c5073a3d Merge branch 'main' into image 2024-05-25 19:36:59 +02:00
Mark Dumay
11077b9178 Merge pull request #945 from gethinode/hugo-mod-dependencies
Update Hugo module dependencies
2024-05-25 19:36:37 +02:00
Mark Dumay
6e8011f111 Fix linting issue 2024-05-25 19:36:08 +02:00
Mark Dumay
3267f1165e Merge branch 'main' into hugo-mod-dependencies 2024-05-25 19:20:39 +02:00
Mark Dumay
e46d4764fd Merge pull request #950 from gethinode/image
Extend image adapters
2024-05-25 19:20:10 +02:00
Mark Dumay
2fb4829f68 Merge branch 'main' into image 2024-05-25 19:12:59 +02:00
Mark Dumay
6009c45e5a Bump package release 2024-05-25 19:11:21 +02:00
Mark Dumay
69505a1dca Make image adapters configurable 2024-05-25 19:10:53 +02:00
Mark Dumay
c195d903c7 Add examples 2024-05-25 19:10:32 +02:00
Mark Dumay
07c1422bbb Update build stats 2024-05-25 19:10:08 +02:00
Mark Dumay
6be688515d Adjust CSP 2024-05-25 19:10:00 +02:00
Mark Dumay
5d83f12b35 Add imagekit.io adapter 2024-05-25 19:09:15 +02:00
Mark Dumay
008c6a099a Add imgix adapter 2024-05-25 19:09:05 +02:00
Mark Dumay
125b72177c Test if image adapter is available 2024-05-25 19:08:43 +02:00
markdumay
d36ce74eae fix: update Hugo module dependencies 2024-05-23 03:05:50 +00:00
Mark Dumay
2433fa8a66 Merge pull request #943 from gethinode/image
Refine CDN image handling
2024-05-20 15:26:53 +02:00
Mark Dumay
adbff26d18 Merge branch 'main' into image 2024-05-20 14:49:16 +02:00
Mark Dumay
bdcdeb9b55 Bump package release 2024-05-20 14:48:39 +02:00
Mark Dumay
0636708dac Add DAM provider config 2024-05-20 14:48:10 +02:00
Mark Dumay
eb65b94ef4 Fix fallback URL of Cloudinary images 2024-05-20 14:47:10 +02:00
Mark Dumay
01b51f6ef1 Provide default dimensions when site data is unavailable 2024-05-20 14:46:30 +02:00
Mark Dumay
89b81cf1b8 Handle undefined dimensions 2024-05-20 14:46:06 +02:00
Mark Dumay
54396f4dc0 Fix dimensions rounding errors 2024-05-20 13:23:26 +02:00
Mark Dumay
0660a4c6e9 Merge pull request #942 from gethinode/image
Fix conversion of image dimensions
2024-05-20 09:00:30 +02:00
Mark Dumay
cba7768e39 Merge branch 'main' into image 2024-05-20 08:45:01 +02:00
Mark Dumay
a040ab42c3 Bump package release 2024-05-20 08:44:27 +02:00
Mark Dumay
fa6c01a380 Fix conversion of image dimensions 2024-05-20 08:43:49 +02:00
Mark Dumay
ed6c415bb2 Merge pull request #940 from gethinode/image
Add support for image CDNs
2024-05-19 19:03:48 +02:00
Mark Dumay
59c71d9bb2 Add initial alpha release 2024-05-19 18:56:57 +02:00
Mark Dumay
7dde1b3bb7 Merge branch 'main' into image 2024-05-19 18:55:48 +02:00
Mark Dumay
1d994fa1fe Add support for cloudinary images 2024-05-19 18:55:16 +02:00
Mark Dumay
5a9191fea5 Merge pull request #939 from gethinode/develop
Bump package release
2024-05-19 12:22:30 +02:00
Mark Dumay
790b3ac3d2 Merge branch 'main' into develop 2024-05-19 12:10:45 +02:00
Mark Dumay
f298dd2979 Bump package release 2024-05-19 12:10:20 +02:00
Mark Dumay
df7a7e2d3d Merge pull request #938 from vinser/link-external-attr
Add 'external' param to link shortcut
2024-05-19 11:59:18 +02:00
vinser
e28ca112de Add 'external' param to link shortcut 2024-05-19 13:28:21 +05:00
Mark Dumay
a34dc0f4a0 Merge pull request #936 from gethinode/develop
Fix link to Hugo download
2024-05-18 05:53:54 +02:00
Mark Dumay
3eb682b0d9 Merge branch 'main' into develop 2024-05-18 05:48:17 +02:00
Mark Dumay
d824ab39dd Fix link to Hugo download 2024-05-18 05:47:52 +02:00
Mark Dumay
5d27d602d2 Merge pull request #935 from gethinode/develop
Improve handling of links that include the site's base URL
2024-05-18 05:31:32 +02:00
Mark Dumay
66f3fd227b Merge branch 'main' into develop 2024-05-18 05:25:10 +02:00
Mark Dumay
e8f38fc73c Improve handling of links that include the site's base URL 2024-05-18 05:24:33 +02:00
github-actions[bot]
6f5756f3bf Merge pull request #933 from gethinode/dependabot/npm_and_yarn/hugo-bin-0.123.1
Bump hugo-bin from 0.122.8 to 0.123.1
2024-05-15 14:04:00 +00:00
dependabot[bot]
a56b1d6614 Bump hugo-bin from 0.122.8 to 0.123.1
Bumps [hugo-bin](https://github.com/fenneclab/hugo-bin) from 0.122.8 to 0.123.1.
- [Release notes](https://github.com/fenneclab/hugo-bin/releases)
- [Commits](https://github.com/fenneclab/hugo-bin/compare/v0.122.8...v0.123.1)

---
updated-dependencies:
- dependency-name: hugo-bin
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-15 13:56:58 +00:00
Mark Dumay
967492de76 Merge pull request #931 from gethinode/develop
Fix button layout of type link in horizontal stack
2024-05-13 16:42:21 +02:00
Mark Dumay
2b876fbb2e Merge branch 'main' into develop 2024-05-13 16:08:50 +02:00
Mark Dumay
8a0b0df3ff Fix button layout of type link in horizontal stack 2024-05-13 16:08:25 +02:00
github-actions[bot]
20f4e959d6 Merge pull request #930 from gethinode/dependabot/npm_and_yarn/rimraf-5.0.7
Bump rimraf from 5.0.5 to 5.0.7
2024-05-13 13:50:19 +00:00
dependabot[bot]
a46317f1d2 Bump rimraf from 5.0.5 to 5.0.7
Bumps [rimraf](https://github.com/isaacs/rimraf) from 5.0.5 to 5.0.7.
- [Changelog](https://github.com/isaacs/rimraf/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/rimraf/compare/v5.0.5...v5.0.7)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-13 13:42:00 +00:00
Mark Dumay
d264c9154e Merge pull request #929 from gethinode/develop
Support configurable button type for cards
2024-05-12 14:31:03 +02:00
Mark Dumay
96dacd5838 Merge branch 'main' into develop 2024-05-12 11:49:04 +02:00
Mark Dumay
5a6f58a96d Support configurable button type for cards 2024-05-12 11:48:25 +02:00
Mark Dumay
05e57ff255 Always hide toc panel on larger screens 2024-05-10 16:30:13 +02:00
Mark Dumay
cd32208639 Merge pull request #925 from gethinode/develop
Refine section menu margins
2024-05-10 16:26:23 +02:00
Mark Dumay
ecfd56f2f8 Merge branch 'main' into develop 2024-05-10 16:19:23 +02:00
Mark Dumay
4bfba0c633 Bump package release 2024-05-10 16:18:52 +02:00
Mark Dumay
02251b0b03 Refine section menu margins 2024-05-10 16:18:20 +02:00
Mark Dumay
cf486aa9c7 Merge pull request #924 from gethinode/develop
Update Netlify build environment
2024-05-10 16:04:19 +02:00
Mark Dumay
1dafc6a881 Merge branch 'main' into develop 2024-05-10 15:57:28 +02:00
Mark Dumay
4c70245e4f Update netlify build env 2024-05-10 15:55:35 +02:00
Mark Dumay
b2a79c2732 Add header 2024-05-10 15:54:57 +02:00
Mark Dumay
8ad9f92752 Merge pull request #922 from gethinode/develop
Restrict external link validation to http(s) scheme only
2024-05-10 12:52:55 +02:00
Mark Dumay
3cf45385db Merge branch 'main' into develop 2024-05-10 12:05:26 +02:00
Mark Dumay
83c697a7ae Restrict external link validation to http(s) scheme only 2024-05-10 12:04:44 +02:00
github-actions[bot]
6b62c2c701 Merge pull request #921 from gethinode/dependabot/npm_and_yarn/hugo-bin-0.122.8
Bump hugo-bin from 0.122.7 to 0.122.8
2024-05-09 13:12:15 +00:00
dependabot[bot]
428e10bc5a Bump hugo-bin from 0.122.7 to 0.122.8
Bumps [hugo-bin](https://github.com/fenneclab/hugo-bin) from 0.122.7 to 0.122.8.
- [Release notes](https://github.com/fenneclab/hugo-bin/releases)
- [Commits](https://github.com/fenneclab/hugo-bin/compare/v0.122.7...v0.122.8)

---
updated-dependencies:
- dependency-name: hugo-bin
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-09 13:07:57 +00:00
Mark Dumay
6deeeaf9d9 Merge pull request #920 from gethinode/develop
Fix card rounding
2024-05-08 20:00:19 +02:00
Mark Dumay
2c191482ab Merge branch 'main' into develop 2024-05-08 19:38:10 +02:00
Mark Dumay
cc934652cc Fix card rounding 2024-05-08 19:37:49 +02:00
Mark Dumay
7641184189 Merge pull request #919 from gethinode/develop
Add configurable background color for transparent card images
2024-05-08 15:06:09 +02:00
Mark Dumay
fae0dff78b Merge branch 'main' into develop 2024-05-08 14:56:14 +02:00
Mark Dumay
d0b7922ebb Merge pull request #917 from gethinode/hugo-mod-dependencies
Update Hugo module dependencies
2024-05-08 14:55:37 +02:00
Mark Dumay
6433ba14aa Merge branch 'main' into develop 2024-05-08 12:57:01 +02:00
Mark Dumay
bf8cbee305 Bump package release 2024-05-08 12:56:45 +02:00
Mark Dumay
af24d3ed3d Add configurable background color for transparent card images 2024-05-08 12:56:17 +02:00
markdumay
942323218c fix: update Hugo module dependencies 2024-05-07 03:06:29 +00:00
github-actions[bot]
d1baf26c08 Merge pull request #916 from gethinode/dependabot/npm_and_yarn/hugo-bin-0.122.7
Bump hugo-bin from 0.122.5 to 0.122.7
2024-05-06 13:44:37 +00:00
dependabot[bot]
8aa288d9aa Bump hugo-bin from 0.122.5 to 0.122.7
Bumps [hugo-bin](https://github.com/fenneclab/hugo-bin) from 0.122.5 to 0.122.7.
- [Release notes](https://github.com/fenneclab/hugo-bin/releases)
- [Commits](https://github.com/fenneclab/hugo-bin/compare/v0.122.5...v0.122.7)

---
updated-dependencies:
- dependency-name: hugo-bin
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-06 13:38:33 +00:00
42 changed files with 951 additions and 512 deletions

View File

@@ -69,7 +69,7 @@ Hinode is a [Hugo theme that uses modules][hugo_modules] to install and maintain
The installation instructions in this readme install Hinode as a regular Hugo theme. Hinode requires the following software to be installed on your local machine. The installation instructions in this readme install Hinode as a regular Hugo theme. Hinode requires the following software to be installed on your local machine.
- [Go binary][golang_download] - [Go binary][golang_download]
- [Hugo][nodejs] (extended version) - [Hugo][hugo_download] (extended version)
[Git][git_download] is recommended, but is not a strict requirement. [Git][git_download] is recommended, but is not a strict requirement.

View File

@@ -41,3 +41,7 @@ a.btn {
background-repeat: no-repeat if($enable-important-utilities, !important, null); background-repeat: no-repeat if($enable-important-utilities, !important, null);
background-size: $btn-close-width if($enable-important-utilities, !important, null); background-size: $btn-close-width if($enable-important-utilities, !important, null);
} }
.btn-link {
--bs-btn-padding-x: 0;
}

View File

@@ -1,6 +1,10 @@
// add zoom animation with opacity change on card img hover // add zoom animation with opacity change on card img hover
// source: https://stackoverflow.com/a/43816376 // source: https://stackoverflow.com/a/43816376
.card-img-bg {
background-color: var(--#{$prefix}secondary-bg);
}
.card-img-wrap { .card-img-wrap {
overflow: hidden; overflow: hidden;
position: relative; position: relative;
@@ -64,8 +68,7 @@
} }
} }
.card-zoom card-body-link, .card-zoom .card-body-link {
.card-body-link {
&:hover, &:hover,
&:focus { &:focus {
color: shade-color($primary, $link-shade-percentage) if($enable-important-utilities, !important, null); color: shade-color($primary, $link-shade-percentage) if($enable-important-utilities, !important, null);
@@ -74,8 +77,7 @@
@if $enable-dark-mode { @if $enable-dark-mode {
@include color-mode(dark) { @include color-mode(dark) {
.card-zoom card-body-link, .card-zoom .card-body-link {
.card-body-link {
&:hover, &:hover,
&:focus { &:focus {
color: $primary-bg-subtle-dark if($enable-important-utilities, !important, null); color: $primary-bg-subtle-dark if($enable-important-utilities, !important, null);
@@ -91,3 +93,7 @@
z-index: 2; z-index: 2;
position: relative; position: relative;
} }
.card-button-link {
text-decoration: underline if($enable-important-utilities, !important, null);
}

View File

@@ -36,6 +36,16 @@
raw = false raw = false
# toml-docs-end modules # toml-docs-end modules
# toml-docs-start images
[images]
[images.cloudinary]
host = "cloudinary"
[images.imagekit]
host = "imagekit"
[images.imgix]
host = "imgix"
# toml-docs-end images
# toml-docs-start debugging # toml-docs-start debugging
[debugging] [debugging]
showJS = false showJS = false

View File

@@ -15,7 +15,7 @@ for = '/**'
https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; \ https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; \
font-src 'self' https://fonts.gstatic.com; \ font-src 'self' https://fonts.gstatic.com; \
frame-src 'self' https://www.youtube-nocookie.com https://www.youtube.com; \ frame-src 'self' https://www.youtube-nocookie.com https://www.youtube.com; \
img-src 'self' data: https://i.vimeocdn.com https://i.ytimg.com https://*.google-analytics.com https://*.googletagmanager.com https://tile.openstreetmap.org; \ img-src 'self' data: https://*.imgix.net https://*.imagekit.io https://*.cloudinary.com https://i.vimeocdn.com https://i.ytimg.com https://*.google-analytics.com https://*.googletagmanager.com https://tile.openstreetmap.org; \
manifest-src 'self'; \ manifest-src 'self'; \
media-src 'self' \ media-src 'self' \
""" """

48
data/dimensions.yml Normal file
View File

@@ -0,0 +1,48 @@
- ratio: 4x3
dimensions:
- 576x432
- 768x576
- 992x744
- 1200x900
- 1400x1050
- 2800x2100
- ratio: 3x2
dimensions:
- 576x384
- 768x512
- 992x661
- 1200x800
- 1400x933
- 2800x1867
- ratio: 1x1
dimensions:
- 576x576
- 768x768
- 992x992
- 1200x1200
- 1400x1400
- 2800x2800
- ratio: 16x9
dimensions:
- 576x324
- 768x432
- 992x558
- 1200x675
- 1400x788
- 2800x1575
- ratio: 21x9
dimensions:
- 576x247
- 768x329
- 992x425
- 1200x514
- 1400x600
- 2800x1200
- ratio: auto
dimensions:
- 576
- 768
- 992
- 1200
- 1400
- 2800

View File

@@ -103,6 +103,16 @@ arguments:
optional: true optional: true
comment: >- comment: >-
Flag indicating if the number of columns should be responsive, defaults to `true`. Flag indicating if the number of columns should be responsive, defaults to `true`.
buttonType:
type: select
optional: true
default: button
release: v0.23.18
comment: Type of the button elements.
options:
values:
- link
- button
hook: hook:
type: string type: string
optional: true optional: true

View File

@@ -206,6 +206,17 @@ arguments:
release: v0.23.2 release: v0.23.2
comment: >- comment: >-
Label of the link button, defaults to the card title. Label of the link button, defaults to the card title.
buttonType:
type: select
parent: cascade
optional: true
default: button
comment: Type of the button element.
release: v0.23.18
options:
values:
- link
- button
hook: hook:
type: string type: string
optional: true optional: true

View File

@@ -0,0 +1,62 @@
comment: >-
Defines the interface to be implemented by a CDN image adapter.
arguments:
host:
type: string
optional: true
comment: >-
Host of an URL. For example, the host of the URL
'https://example.com/first/second/third.webp' equals 'example.com'.
dir:
type: string
optional: true
comment: >-
All but the last element of an URL extension. For example, the dir of the
URL 'https://example.com/first/second/third.webp' equals '/first/second/'.
file:
type: string
optional: false
comment: >-
The last element of an URL extension. For example, the file of the
URL 'https://example.com/first/second/third.webp' equals 'third.webp'.
absoluteURL:
type: string
optional: true
default: false
comment: >-
Defines if a local image should use absolute instead of relative paths.
img:
type: "*resources.resourceAdapter"
optional: true
comment: >-
Image resource to process. Must be set when handling local images.
format:
type: select
optional: true
comment: >-
Image format; leave empty for an auto format (if supported) or default
format (usually jpg).
options:
values:
- png
- jpg
- gif
- tiff
- bmp
- webp
transform:
type: select
optional: false
comment: Image transformation.
options:
values:
- fill
- fit
height:
type: int
optional: false
comment: Height of the image in pixels.
width:
type: int
optional: false
comment: Width of the image in pixels.

View File

@@ -56,6 +56,12 @@ arguments:
Flag to indicate if the retrieved title (e.g. no inner text is provided) Flag to indicate if the retrieved title (e.g. no inner text is provided)
of an internal link should use its original case. If false, the title is of an internal link should use its original case. If false, the title is
set to lower case. set to lower case.
external:
type: bool
optional: true
default: false
comment: >-
Flag to indicate if a link that contains baseURL host should be forced as external.
class: class:
type: string type: string
optional: true optional: true

View File

@@ -70,6 +70,14 @@
[messages] [messages]
placement = "bottom-right" placement = "bottom-right"
[dam]
dimensions = "dimensions.yml"
[[dam.providers]]
name = "Cloudinary"
pattern = "cloudinary"
adapter = "assets/adapters/cloudinary.html"
[sharing] [sharing]
enabled = true enabled = true
sort = "weight" sort = "weight"

View File

@@ -15,7 +15,7 @@ for = '/**'
https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; \ https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; \
font-src 'self' https://fonts.gstatic.com; \ font-src 'self' https://fonts.gstatic.com; \
frame-src 'self' https://www.youtube-nocookie.com https://www.youtube.com; \ frame-src 'self' https://www.youtube-nocookie.com https://www.youtube.com; \
img-src 'self' data: https://i.vimeocdn.com https://i.ytimg.com https://*.google-analytics.com https://*.googletagmanager.com https://tile.openstreetmap.org; \ img-src 'self' data: https://*.imgix.net https://*.imagekit.io https://*.cloudinary.com https://i.vimeocdn.com https://i.ytimg.com https://*.google-analytics.com https://*.googletagmanager.com https://tile.openstreetmap.org; \
manifest-src 'self'; \ manifest-src 'self'; \
media-src 'self' \ media-src 'self' \
""" """

View File

@@ -136,7 +136,7 @@ As an example, the following shortcode displays a card group of three elements.
<!-- markdownlint-disable MD037 --> <!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}} {{< example lang="hugo" >}}
{{</* card-group padding="3" gutter="3" */>}} {{</* card-group padding="3" gutter="3" button=true buttonType="link" */>}}
{{</* card title="Bootstrap framework" icon="fab bootstrap" */>}} {{</* card title="Bootstrap framework" icon="fab bootstrap" */>}}
Build fast, responsive sites with Bootstrap 5. Easily customize your site with the source Build fast, responsive sites with Bootstrap 5. Easily customize your site with the source
Sass files. Sass files.
@@ -291,6 +291,7 @@ As an example, the following shortcodes render links in different formats.
- {{</* link name=hinode cue=true tab=true >}}Named link opening in new tab with icon{{< /link */>}} - {{</* link name=hinode cue=true tab=true >}}Named link opening in new tab with icon{{< /link */>}}
- {{</* link hinode /*/>}} - {{</* link hinode /*/>}}
- {{</* link href="https://developer.mozilla.org" >}}External link{{< /link */>}} - {{</* link href="https://developer.mozilla.org" >}}External link{{< /link */>}}
- {{</* link href="https://demo.gethinode.com/en/about/" >}}Surrogate external link{{< /link */>}}
- {{</* link "./projects/another-project" >}}Internal link with title{{< /link */>}} - {{</* link "./projects/another-project" >}}Internal link with title{{< /link */>}}
- {{</* link url="projects/another-project" /*/>}} - {{</* link url="projects/another-project" /*/>}}
- {{</* link url="/projects/another-project" /*/>}} - {{</* link url="/projects/another-project" /*/>}}

View File

@@ -0,0 +1,42 @@
---
author: Mark Dumay
title: Local and remote images
date: 2024-05-19
description: Include responsive images from local sources and selected CDN image providers.
tags: ["blog"]
thumbnail:
url: https://assets.imgix.net/examples/bluehat.jpg
---
## Cloudinary
As an example, the following shortcode displays an image with rounded corners and a 21x9 aspect ratio.
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* image src="https://res.cloudinary.com/demo/image/upload/dog.webp"
ratio="21x9" caption="Cloudinary image" class="rounded" */>}}
{{< /example >}}
<!-- markdownlint-enable MD037 -->
## ImageKit.io
As an example, the following shortcode displays an image with rounded corners and a 21x9 aspect ratio.
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* image src="https://ik.imagekit.io/demo/default-image.jpg"
ratio="21x9" caption="ImageKit.io image" class="rounded" */>}}
{{< /example >}}
<!-- markdownlint-enable MD037 -->
## Imgix
As an example, the following shortcode displays an image with rounded corners and a 21x9 aspect ratio.
<!-- markdownlint-disable MD037 -->
{{< example lang="hugo" >}}
{{</* image src="https://assets.imgix.net/examples/bluehat.jpg"
ratio="21x9" caption="imgix image" class="rounded" */>}}
{{< /example >}}
<!-- markdownlint-enable MD037 -->

View File

@@ -93,6 +93,7 @@
"btn-close", "btn-close",
"btn-group", "btn-group",
"btn-light", "btn-light",
"btn-link",
"btn-outline-primary", "btn-outline-primary",
"btn-outline-secondary", "btn-outline-secondary",
"btn-primary", "btn-primary",
@@ -104,8 +105,10 @@
"card-body-link", "card-body-link",
"card-body-margin", "card-body-margin",
"card-button", "card-button",
"card-button-link",
"card-emphasize", "card-emphasize",
"card-icon", "card-icon",
"card-img-bg",
"card-img-top", "card-img-top",
"card-img-wrap", "card-img-wrap",
"card-text", "card-text",
@@ -489,6 +492,7 @@
"carrousel", "carrousel",
"carte", "carte",
"chronologie", "chronologie",
"cloudinary",
"collapse", "collapse",
"collapse-1", "collapse-1",
"command-prompt", "command-prompt",
@@ -507,6 +511,8 @@
"groupe-de-cartes", "groupe-de-cartes",
"icon", "icon",
"image", "image",
"imagekitio",
"imgix",
"indicateur-de-chargement", "indicateur-de-chargement",
"infobulle", "infobulle",
"invite-de-commandes", "invite-de-commandes",

8
go.mod
View File

@@ -4,13 +4,13 @@ go 1.19
require ( require (
github.com/airbnb/lottie-web v5.12.2+incompatible // indirect github.com/airbnb/lottie-web v5.12.2+incompatible // indirect
github.com/gethinode/mod-bootstrap v1.2.6 // indirect github.com/gethinode/mod-bootstrap v1.2.8 // indirect
github.com/gethinode/mod-flexsearch v1.11.3 // indirect github.com/gethinode/mod-flexsearch v1.11.3 // indirect
github.com/gethinode/mod-fontawesome v1.8.2 // indirect github.com/gethinode/mod-fontawesome v1.8.2 // indirect
github.com/gethinode/mod-katex v1.0.8 // indirect github.com/gethinode/mod-katex v1.0.9 // indirect
github.com/gethinode/mod-leaflet v1.0.1 // indirect github.com/gethinode/mod-leaflet v1.0.1 // indirect
github.com/gethinode/mod-lottie v1.4.4 // indirect github.com/gethinode/mod-lottie v1.4.7 // indirect
github.com/gethinode/mod-utils/v2 v2.2.2 // indirect github.com/gethinode/mod-utils/v2 v2.3.0 // indirect
github.com/nextapps-de/flexsearch v0.0.0-20240110101704-4c3966709f85 // indirect github.com/nextapps-de/flexsearch v0.0.0-20240110101704-4c3966709f85 // indirect
github.com/twbs/bootstrap v5.3.3+incompatible // indirect github.com/twbs/bootstrap v5.3.3+incompatible // indirect
) )

10
go.sum
View File

@@ -18,6 +18,8 @@ github.com/gethinode/mod-bootstrap v1.2.5 h1:h6yAlkMZA34wJU3pLFpLxp1ynEBte/YTY4k
github.com/gethinode/mod-bootstrap v1.2.5/go.mod h1:CL9IDot6nbXIWJYE/KxfsTdYYEJIGL17BXbAYPn+wVQ= github.com/gethinode/mod-bootstrap v1.2.5/go.mod h1:CL9IDot6nbXIWJYE/KxfsTdYYEJIGL17BXbAYPn+wVQ=
github.com/gethinode/mod-bootstrap v1.2.6 h1:joKKVqWzPgitPbUFlU4oIRj72YXsEHkVun3TPf4ZZ2Q= github.com/gethinode/mod-bootstrap v1.2.6 h1:joKKVqWzPgitPbUFlU4oIRj72YXsEHkVun3TPf4ZZ2Q=
github.com/gethinode/mod-bootstrap v1.2.6/go.mod h1:CL9IDot6nbXIWJYE/KxfsTdYYEJIGL17BXbAYPn+wVQ= github.com/gethinode/mod-bootstrap v1.2.6/go.mod h1:CL9IDot6nbXIWJYE/KxfsTdYYEJIGL17BXbAYPn+wVQ=
github.com/gethinode/mod-bootstrap v1.2.8 h1:kIKSO6qqE8xA0KQC5s6kkEv5UDc8oT17HalGIwB+dSc=
github.com/gethinode/mod-bootstrap v1.2.8/go.mod h1:CL9IDot6nbXIWJYE/KxfsTdYYEJIGL17BXbAYPn+wVQ=
github.com/gethinode/mod-flexsearch v1.0.1 h1:FJkRsUzSnQTXl3MWCigT4E6vfff870UWTnkGqaDGIhA= github.com/gethinode/mod-flexsearch v1.0.1 h1:FJkRsUzSnQTXl3MWCigT4E6vfff870UWTnkGqaDGIhA=
github.com/gethinode/mod-flexsearch v1.0.1/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4= github.com/gethinode/mod-flexsearch v1.0.1/go.mod h1:TXbGbWsvmhBdsTzRt887mcpFfr4ORpzG3+h/l4W3YM4=
github.com/gethinode/mod-flexsearch v1.1.0 h1:7BCMyQDlYlskNXuazt8Jg/jg9WREexu2xVkYqThkAX4= github.com/gethinode/mod-flexsearch v1.1.0 h1:7BCMyQDlYlskNXuazt8Jg/jg9WREexu2xVkYqThkAX4=
@@ -116,6 +118,8 @@ github.com/gethinode/mod-katex v1.0.7 h1:FTEhvi3r+O5lPeOxB7OsanFZuAB14yC5fIk3Dqh
github.com/gethinode/mod-katex v1.0.7/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg= github.com/gethinode/mod-katex v1.0.7/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg=
github.com/gethinode/mod-katex v1.0.8 h1:tFGFz/JIEogCz4wvUsUncrOsOupPxsjP+TwU/3NxIjY= github.com/gethinode/mod-katex v1.0.8 h1:tFGFz/JIEogCz4wvUsUncrOsOupPxsjP+TwU/3NxIjY=
github.com/gethinode/mod-katex v1.0.8/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg= github.com/gethinode/mod-katex v1.0.8/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg=
github.com/gethinode/mod-katex v1.0.9 h1:cCJoR28tZwkDvXps17o9Jwfe3aQQAZ3Rxk0jCNRQdbU=
github.com/gethinode/mod-katex v1.0.9/go.mod h1:byAfpI3wuqNJIooTGVEGc1cjBhhCy4+CcK1H6495MYg=
github.com/gethinode/mod-leaflet v0.2.3 h1:QQI4h+IH0jZ7fx4q0um2YIEiYBoW3OAfW8qHzbRCDPk= github.com/gethinode/mod-leaflet v0.2.3 h1:QQI4h+IH0jZ7fx4q0um2YIEiYBoW3OAfW8qHzbRCDPk=
github.com/gethinode/mod-leaflet v0.2.3/go.mod h1:uGggt87x4Fw7wBoJpSiUvNkYg+s/Ujne7klAX2rxMRk= github.com/gethinode/mod-leaflet v0.2.3/go.mod h1:uGggt87x4Fw7wBoJpSiUvNkYg+s/Ujne7klAX2rxMRk=
github.com/gethinode/mod-leaflet v0.3.1 h1:H5MaOa+BB1KuVw7abTqfIn/SNzzRsAyx/WQoSe+2Ykc= github.com/gethinode/mod-leaflet v0.3.1 h1:H5MaOa+BB1KuVw7abTqfIn/SNzzRsAyx/WQoSe+2Ykc=
@@ -154,6 +158,10 @@ github.com/gethinode/mod-lottie v1.4.3 h1:IKZO8a4yQyPKUwZ6POsZRIH/B++yEzXDe5HxrF
github.com/gethinode/mod-lottie v1.4.3/go.mod h1:nt4wLnDFIhjBGRMuQJJ2bH80VREpbcsBUsdO6uWXjLs= github.com/gethinode/mod-lottie v1.4.3/go.mod h1:nt4wLnDFIhjBGRMuQJJ2bH80VREpbcsBUsdO6uWXjLs=
github.com/gethinode/mod-lottie v1.4.4 h1:Lv7J+lAMx++aK9h0L7vAgsjyOZgrjux4xPz4Tpza8n4= github.com/gethinode/mod-lottie v1.4.4 h1:Lv7J+lAMx++aK9h0L7vAgsjyOZgrjux4xPz4Tpza8n4=
github.com/gethinode/mod-lottie v1.4.4/go.mod h1:7tsZjlFgMlj2iWBIS9uOtHHsCrfx9W7S8OsBrZeSVGU= github.com/gethinode/mod-lottie v1.4.4/go.mod h1:7tsZjlFgMlj2iWBIS9uOtHHsCrfx9W7S8OsBrZeSVGU=
github.com/gethinode/mod-lottie v1.4.6 h1:L6zvfbq+FQUWTG3X/wWFCvb91WOxJuIkJUlZOd+QJ1Q=
github.com/gethinode/mod-lottie v1.4.6/go.mod h1:1/+7U/Q5IuaqkzTrvXK1CnPE7ANnTRsG5k+KaXQUQwE=
github.com/gethinode/mod-lottie v1.4.7 h1:5Hes0xY/l8ygzJ8YQIzdqCmvGrDQs8D8qZ/vR1fQh/Q=
github.com/gethinode/mod-lottie v1.4.7/go.mod h1:FvcG3NjXOBOnwou0QvXYNPHpybxwT6yxmSh4N+nBD9s=
github.com/gethinode/mod-utils v1.0.0 h1:cqHm2xS5uDiJzRm1KfHaNbq6uMVDKLhQa8/BuTZ1nhY= github.com/gethinode/mod-utils v1.0.0 h1:cqHm2xS5uDiJzRm1KfHaNbq6uMVDKLhQa8/BuTZ1nhY=
github.com/gethinode/mod-utils v1.0.0/go.mod h1:ONJm3pHCq7nvaPNjusLZNCeCbhOhSBH4HVKHwK1FdYE= github.com/gethinode/mod-utils v1.0.0/go.mod h1:ONJm3pHCq7nvaPNjusLZNCeCbhOhSBH4HVKHwK1FdYE=
github.com/gethinode/mod-utils v1.0.1 h1:jhZGlGFHHL1f5HXbBMXfiZ2gCz4TVafAzjnRPTIBSEE= github.com/gethinode/mod-utils v1.0.1 h1:jhZGlGFHHL1f5HXbBMXfiZ2gCz4TVafAzjnRPTIBSEE=
@@ -178,6 +186,8 @@ github.com/gethinode/mod-utils/v2 v2.1.1 h1:aLBcS9Zbx+dqnu5oBsTM01AkkN5nwwifgbV4
github.com/gethinode/mod-utils/v2 v2.1.1/go.mod h1:GTYeknoLujNjfDxI+V9Dcug26CYJSTJ0B/U2dagw9oY= github.com/gethinode/mod-utils/v2 v2.1.1/go.mod h1:GTYeknoLujNjfDxI+V9Dcug26CYJSTJ0B/U2dagw9oY=
github.com/gethinode/mod-utils/v2 v2.2.2 h1:ZRxWIJKmZIDYsoMS3WhxxC+BWJrkd1dcZ8rz/cLZExc= github.com/gethinode/mod-utils/v2 v2.2.2 h1:ZRxWIJKmZIDYsoMS3WhxxC+BWJrkd1dcZ8rz/cLZExc=
github.com/gethinode/mod-utils/v2 v2.2.2/go.mod h1:GTYeknoLujNjfDxI+V9Dcug26CYJSTJ0B/U2dagw9oY= github.com/gethinode/mod-utils/v2 v2.2.2/go.mod h1:GTYeknoLujNjfDxI+V9Dcug26CYJSTJ0B/U2dagw9oY=
github.com/gethinode/mod-utils/v2 v2.3.0 h1:e3uhlAGasvXe+cgvcmzRe05Zo4UEx86uk0TbnxtyB6U=
github.com/gethinode/mod-utils/v2 v2.3.0/go.mod h1:GTYeknoLujNjfDxI+V9Dcug26CYJSTJ0B/U2dagw9oY=
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 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-20230711092928-1243fd883ec3/go.mod h1:5GdMfPAXzbA2gXBqTjC6l27kioSYzHlqDMh0+wyx7sU=
github.com/nextapps-de/flexsearch v0.0.0-20240108021025-afd75f742f22 h1:re7L8FxbXQpnX8BgzkdUnDpsUmloGNyLmiy2ZCln8pg= github.com/nextapps-de/flexsearch v0.0.0-20240108021025-afd75f742f22 h1:re7L8FxbXQpnX8BgzkdUnDpsUmloGNyLmiy2ZCln8pg=

View File

@@ -86,11 +86,11 @@
"fixed-top", "fixed-top",
"flex-column", "flex-column",
"flex-fill", "flex-fill",
"flex-grow-1",
"footer", "footer",
"form-control", "form-control",
"fs-3", "fs-3",
"fs-5", "fs-5",
"fw-30",
"fw-bold", "fw-bold",
"hstack", "hstack",
"img-fluid", "img-fluid",
@@ -120,6 +120,7 @@
"navbar", "navbar",
"navbar-brand", "navbar-brand",
"navbar-collapse", "navbar-collapse",
"navbar-container",
"navbar-expand-md", "navbar-expand-md",
"navbar-fixed-top", "navbar-fixed-top",
"navbar-nav", "navbar-nav",

View File

@@ -0,0 +1,43 @@
<!--
Copyright © 2024 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 }}
<!-- Validate arguments -->
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "image-adapter" "args" . "group" "partial") }}
{{ errorf "partial [assets/adapter/cloudinary.html] - Invalid arguments" -}}
{{ $error = true }}
{{ end }}
<!-- Initialize arguments -->
{{ $host := .host }}
{{ $dir := .dir }}
{{ $file := .file }}
{{ $format := .format }}
{{ $transform := .transform }}
{{ $height := .height }}
{{ $width := .width }}
{{ if eq $transform "fill" }}{{ $transform = "c_fill" }}{{ else }}{{ $transform = "c_fit" }}{{ end }}
{{ $element := "" }}
<!-- Split path between upload dir and sub dir -->
{{ $newdir := urls.JoinPath (index (split $dir "upload") 0) "upload" }}
{{ $file = urls.JoinPath (index (split $dir "upload") 1) $file }}
{{ $dir = $newdir }}
<!-- Generate image URL -->
{{ if not $error }}
{{ $operation := "" }}
{{ if $format }}
{{ $operation = printf "%s,h_%d,w_%d" $transform $height $width }}
{{ $file = printf "%s.%s" (strings.TrimSuffix (path.Ext $file) $file) $format }}
{{ else }}
{{ $operation = printf "f_auto,%s,h_%d,w_%d" $transform $height $width }}
{{ end }}
{{- $element = urls.JoinPath (slice "https://" $host $dir $operation $file) -}}
{{ end }}
{{ return $element }}

View File

@@ -0,0 +1,64 @@
<!--
Copyright © 2024 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 }}
<!-- Validate arguments -->
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "image-adapter" "args" . "group" "partial") }}
{{ errorf "partial [assets/adapter/hugo.html] - Invalid arguments" -}}
{{ $error = true }}
{{ end }}
<!-- Initialize arguments -->
{{ $host := .host }}
{{ $dir := .dir }}
{{ $file := .file }}
{{ $img := .img }}
{{ $transform := .transform }}
{{ $height := .height }}
{{ $width := .width }}
{{ $element := "" }}
{{ $absoluteURL := .absoluteURL }}
{{ $url := urls.JoinPath $dir $file }}
{{ if $host }}
{{ $url = urls.JoinPath "https://" $host $url }}
{{ end }}
<!-- Initialize image if needed -->
{{ $format := .format | default "webp" }}
{{ if and (not $img) (ne $format "svg") }}
{{- $res := partial "utilities/GetImage.html" (dict "url" $url "page" page) -}}
{{ if $res }}
{{ $img = $res.resource }}
<!-- TODO: $res.mirror -->
{{ end }}
{{ if not $img }}
{{ errorf "partial [assets/adapter/hugo.html] - Expected 'img' argument" -}}
{{ $error = true }}
{{ end }}
{{ end }}
<!-- Process image and generate image URL -->
{{ if not $error }}
{{ $scaled := "" }}
{{ if eq $transform "fill" }}
{{- $scaled = $img.Fill (printf "%dx%d %s" $width $height $format) -}}
{{ else }}
{{- $scaled = $img.Fit (printf "%dx%d %s" $width $height $format) -}}
{{ end }}
{{- $clean := path.Ext $img.RelPermalink -}}
{{- $scaled = $scaled | resources.Copy (replace $img.RelPermalink $clean (printf "-%dx%d.%s" $width $height $format)) -}}
{{- if $absoluteURL -}}
{{- $element = $scaled.Permalink -}}
{{- else -}}
{{- $element = $scaled.RelPermalink -}}
{{- end -}}
{{ end }}
{{ return $element }}

View File

@@ -0,0 +1,48 @@
<!--
Copyright © 2024 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 }}
<!-- Validate arguments -->
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "image-adapter" "args" . "group" "partial") }}
{{ errorf "partial [assets/adapter/imagekit.html] - Invalid arguments" -}}
{{ $error = true }}
{{ end }}
<!-- Initialize arguments -->
{{ $host := .host }}
{{ $dir := .dir }}
{{ $file := .file }}
{{ $format := .format }}
{{ $transform := .transform }}
{{ $height := .height }}
{{ $width := .width }}
{{ if eq $transform "fill" }}{{ $transform = "c-maintain_ratio" }}{{ else }}{{ $transform = "c-at_max" }}{{ end }}
{{ $element := "" }}
<!-- Validate image format is supported -->
{{ if and $format (not (in (slice "jpg" "jpeg" "webp" "avif" "png") $format)) }}
{{ warnf "Image format not supported by ImageKit.io: %s.%s" (path.BaseName $file) $format }}
{{ $format = "jpg" }}
{{ end }}
<!-- Split path between end point and image path -->
{{ $newdir := printf "/%s" (index (split $dir "/") 1) }}
{{ $file = urls.JoinPath (strings.TrimPrefix $newdir $dir) $file }}
{{ $dir = $newdir }}
<!-- Generate image URL -->
{{ if not $error }}
{{ $operation := "" }}
{{ if $format }}
{{ $operation = printf "tr:f-%s,%s,h-%d,w-%d" $format $transform $height $width }}
{{ else }}
{{ $operation = printf "tr:f-auto,%s,h-%d,w-%d" $transform $height $width }}
{{ end }}
{{- $element = urls.JoinPath (slice "https://" $host $dir $operation $file) -}}
{{ end }}
{{ return $element }}

View File

@@ -0,0 +1,43 @@
<!--
Copyright © 2024 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 }}
<!-- Validate arguments -->
{{ if partial "utilities/IsInvalidArgs.html" (dict "structure" "image-adapter" "args" . "group" "partial") }}
{{ errorf "partial [assets/adapter/imgix.html] - Invalid arguments" -}}
{{ $error = true }}
{{ end }}
<!-- Initialize arguments -->
{{ $host := .host }}
{{ $dir := .dir }}
{{ $file := .file }}
{{ $format := .format }}
{{ $transform := .transform }}
{{ $height := .height }}
{{ $width := .width }}
{{ if eq $transform "fill" }}{{ $transform = "crop" }}{{ else }}{{ $transform = "max" }}{{ end }}
{{ $element := "" }}
<!-- Validate image format is supported -->
{{ if and $format (not (in (slice "avif" "gif" "jp2" "jpg" "json" "jxr" "pjpg" "mp4" "png" "png8" "png32" "webm" "webp" "blurhash") $format)) }}
{{ warnf "Image format not supported by imgix: %s.%s" (path.BaseName $file) $format }}
{{ $format = "jpg" }}
{{ end }}
<!-- Generate image URL -->
{{ if not $error }}
{{ $operation := "" }}
{{ if $format }}
{{ $operation = printf "fm=%s&fit=%s&h=%d&w=%d" $format $transform $height $width }}
{{ else }}
{{ $operation = printf "f_auto&fit=%s&h=%d&w=%d" $transform $height $width }}
{{ end }}
{{- $element = printf "%s?%s" (urls.JoinPath (slice "https://" $host $dir $file)) $operation -}}
{{ end }}
{{ return $element }}

View File

@@ -53,7 +53,10 @@
{{- $clipboard := .clipboard -}} {{- $clipboard := .clipboard -}}
{{- $cue := .cue | default site.Params.main.externalLinks.cue -}} {{- $cue := .cue | default site.Params.main.externalLinks.cue -}}
{{- $tab := .tab | default site.Params.main.externalLinks.tab -}} {{- $tab := .tab | default site.Params.main.externalLinks.tab -}}
{{- $isExternal := ne (urls.Parse (absURL $href)).Host (urls.Parse site.BaseURL).Host -}} {{- $isExternal := false }}
{{ if in (slice "http" "https") ((urls.Parse (absURL $href)).Scheme) }}
{{ $isExternal = ne (urls.Parse (absURL $href)).Host (urls.Parse site.BaseURL).Host -}}
{{ end }}
{{- $target := "" -}} {{- $target := "" -}}
{{- $rel := "" -}} {{- $rel := "" -}}
{{- $spacing := .spacing | default true -}} {{- $spacing := .spacing | default true -}}
@@ -81,8 +84,8 @@
{{- with $toast }} data-toast-target="{{ $toast }}"{{ end -}} {{- with $toast }} data-toast-target="{{ $toast }}"{{ end -}}
{{- with $clipboard }} data-clipboard="{{ $clipboard }}"{{ end -}} {{- with $clipboard }} data-clipboard="{{ $clipboard }}"{{ end -}}
{{- if eq $type "button" }} class="btn btn-{{ if $outline }}outline-{{ end }}{{ $color }} {{ if ne $size "md"}}btn-{{ $size }}{{ end }} position-relative {{ if in (slice "disabled" "active") $state }}{{ $state }}{{ end }} {{ $class -}}" {{- if eq $type "button" }} class="btn btn-{{ if $outline }}outline-{{ end }}{{ $color }} {{ if ne $size "md"}}btn-{{ $size }}{{ end }} position-relative {{ if in (slice "disabled" "active") $state }}{{ $state }}{{ end }} {{ $class -}}"
role="button" {{ if eq $state "disabled" }}aria-disabled="true"{{ end -}} {{ if eq $state "disabled" }}aria-disabled="true"{{ end -}}
{{- else }} class="link-{{ $color }} position-relative {{ $class }}"{{ end -}} {{- else }} class="btn btn-link link-{{ $color }} position-relative {{ $class }}"{{ end -}}
{{- with $tooltip }} data-bs-toggle="tooltip" data-bs-title="{{ . }}" data-bs-placement="{{ $placement }}"{{ end -}} {{- with $tooltip }} data-bs-toggle="tooltip" data-bs-title="{{ . }}" data-bs-placement="{{ $placement }}"{{ end -}}
{{- with $collapse }} data-bs-toggle="collapse" aria-expanded="false" aria-controls="{{ . }}"{{ end -}} {{- with $collapse }} data-bs-toggle="collapse" aria-expanded="false" aria-controls="{{ . }}"{{ end -}}
{{- if eq $state "active" }} data-bs-toggle="button" aria-pressed="true"{{ end -}} {{- if eq $state "active" }} data-bs-toggle="button" aria-pressed="true"{{ end -}}
@@ -90,6 +93,7 @@
{{- range $key, $val := $attributes -}} {{- range $key, $val := $attributes -}}
{{ printf " %s=\"%s\"" $key $val | safeHTMLAttr }} {{ printf " %s=\"%s\"" $key $val | safeHTMLAttr }}
{{- end -}} {{- end -}}
role="button"
> >
<div class="d-flex justify-content-{{ $justify }}"> <div class="d-flex justify-content-{{ $justify }}">
<div class="my-auto">{{ $title | safeHTML }}</div> <div class="my-auto">{{ $title | safeHTML }}</div>

View File

@@ -33,6 +33,7 @@
{{- $loading := .loading -}} {{- $loading := .loading -}}
{{- $button := .button -}} {{- $button := .button -}}
{{- $buttonLabel := .buttonLabel -}} {{- $buttonLabel := .buttonLabel -}}
{{- $buttonType := .buttonType -}}
{{- $hook := .hook | default "assets/card.html" }} {{- $hook := .hook | default "assets/card.html" }}
<!-- Override arguments --> <!-- Override arguments -->
@@ -137,6 +138,7 @@
"align" $align "align" $align
"button" $button "button" $button
"buttonLabel" $buttonLabel "buttonLabel" $buttonLabel
"buttonType" $buttonType
) -}} ) -}}
{{- $params = merge $params $element }} {{- $params = merge $params $element }}

View File

@@ -32,6 +32,7 @@
{{- $subtle := .subtle -}} {{- $subtle := .subtle -}}
{{- $button := .button -}} {{- $button := .button -}}
{{- $buttonLabel := .buttonLabel -}} {{- $buttonLabel := .buttonLabel -}}
{{- $buttonType := .buttonType -}}
{{- $colorStyle := "" -}} {{- $colorStyle := "" -}}
{{ if $color }} {{ if $color }}
{{ if $subtle }} {{ if $subtle }}
@@ -132,7 +133,7 @@
<div class="row g-0 row-cols-1 h-100{{ if $button }} pb-5{{ end }}"> <div class="row g-0 row-cols-1 h-100{{ if $button }} pb-5{{ end }}">
<div class="{{ if eq $orientation "horizontal-sm" }}col-4 col-md-2{{ else }}col-4{{ end }}"> <div class="{{ if eq $orientation "horizontal-sm" }}col-4 col-md-2{{ else }}col-4{{ end }}">
{{- if $thumbnail -}} {{- if $thumbnail -}}
{{- partial $hook (dict "url" $thumbnail "ratio" (or $ratio "1x1") "sizes" $sizes "wrapper" "h-100 card-img-wrap" "class" "rounded-start card-img-h100" "title" $title "loading" $loading) -}} {{- partial $hook (dict "url" $thumbnail "ratio" (or $ratio "1x1") "sizes" $sizes "wrapper" "h-100 card-img-wrap" "class" "rounded-start card-img-h100 card-img-bg" "title" $title "loading" $loading) -}}
{{- else if $icon -}} {{- else if $icon -}}
<div class="card-icon p-{{ $padding }} h-100 fa-wrapper d-flex align-items-{{ $align}} justify-content-center {{ $iconStyle }}"> <div class="card-icon p-{{ $padding }} h-100 fa-wrapper d-flex align-items-{{ $align}} justify-content-center {{ $iconStyle }}">
{{- partial "assets/icon.html" (dict "icon" (printf "%s %s" $icon $style)) -}} {{- partial "assets/icon.html" (dict "icon" (printf "%s %s" $icon $style)) -}}
@@ -148,7 +149,19 @@
{{ if $page }}<div>{{ partial "card-caption.html" (dict "page" $page "keywords" $footer "color" $color) }}</div>{{ end }} {{ if $page }}<div>{{ partial "card-caption.html" (dict "page" $page "keywords" $footer "color" $color) }}</div>{{ end }}
{{ if $button }} {{ if $button }}
{{ $label := (or $buttonLabel $title) | default (T "readMore") }} {{ $label := (or $buttonLabel $title) | default (T "readMore") }}
<div class="d-flex align-items-end">{{ partial "assets/button.html" (dict "title" $label "icon" "fas chevron-right" "href" $href "outline" true "size" "sm" "class" "card-button mb-n4") }}</div> {{ $buttonClass := "card-button mb-n4" }}
{{ 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
"size" "sm"
"class" $buttonClass
"type" $buttonType
)}}
</div>
{{ end }} {{ end }}
</div> </div>
</div> </div>
@@ -158,7 +171,7 @@
<!-- Render stacked / default card --> <!-- Render stacked / default card -->
<div class="card {{ $colorStyle }} {{ $class }} text-{{ $align }}"> <div class="card {{ $colorStyle }} {{ $class }} text-{{ $align }}">
{{- if $thumbnail -}} {{- if $thumbnail -}}
{{- partial $hook (dict "url" $thumbnail "ratio" (or $ratio "16x9") "sizes" $sizes "wrapper" "card-img-wrap" "class" "card-img-top" "title" (or $alt $title) "loading" $loading) -}} {{- partial $hook (dict "url" $thumbnail "ratio" (or $ratio "16x9") "sizes" $sizes "wrapper" "card-img-wrap" "class" "card-img-top card-img-bg" "title" (or $alt $title) "loading" $loading) -}}
{{- else if $icon -}} {{- else if $icon -}}
<div class="card-icon p-{{ $padding }} {{ $iconStyle }} text-{{ $align }}"> <div class="card-icon p-{{ $padding }} {{ $iconStyle }} text-{{ $align }}">
{{- partial "assets/icon.html" (dict "icon" (printf "%s %s" $icon $style)) -}} {{- partial "assets/icon.html" (dict "icon" (printf "%s %s" $icon $style)) -}}
@@ -174,7 +187,17 @@
<div class="row p-{{ $padding }}" > <div class="row p-{{ $padding }}" >
<div class="{{ if eq $orientation "horizontal-sm" }}col-4 col-md-2{{ else if eq $orientation "horizontal" }}col-4{{ end }}"></div> <div class="{{ if eq $orientation "horizontal-sm" }}col-4 col-md-2{{ else if eq $orientation "horizontal" }}col-4{{ end }}"></div>
<div class="col d-flex align-items-end {{ if eq $orientation "horizontal-sm" }}px-2{{ else if eq $orientation "horizontal"}}px-1 {{ else }}px-2 pt-1{{ end }}"> <div class="col d-flex align-items-end {{ if eq $orientation "horizontal-sm" }}px-2{{ else if eq $orientation "horizontal"}}px-1 {{ else }}px-2 pt-1{{ end }}">
{{ partial "assets/button.html" (dict "title" $label "href" $href "outline" true "size" "sm" "class" "card-button") }} {{ $buttonClass := "card-button" }}
{{ if eq $buttonType "link" }}{{ $buttonClass = "card-button card-button-link" }}{{ end }}
{{ partial "assets/button.html" (dict
"title" $label
"href" $href
"outline" true
"size" "sm"
"class" "card-button"
"class" $buttonClass
"type" $buttonType
)}}
</div> </div>
</div> </div>
{{ end }} {{ end }}

View File

@@ -1,3 +1,9 @@
<!--
Copyright © 2024 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.
-->
{{- $download := partial "utilities/GetTargetPath.html" (dict "path" .download "page" page) -}} {{- $download := partial "utilities/GetTargetPath.html" (dict "path" .download "page" page) -}}
{{- $title := .title }} {{- $title := .title }}
{{- $color := .color | default "primary" -}} {{- $color := .color | default "primary" -}}

View File

@@ -0,0 +1,25 @@
<!--
Copyright © 2024 The Hinode Team / Mark Dumay. All rights reserved.
-->
{{ $ratio := .ratio }}
{{ $dim := "" }}
{{ $default := dict "4x3" "1400x1050" "3x2" "1400x933" "1x1" "1400x1400" "16x9" "1400x788" "21x9" "1400x600" "auto" "1400" }}
<!-- Initialize dimensions data - stripping unsupported file extension -->
{{ $config := "dimensions" }}
{{ with index site.Params "dam" }}{{ with index . "dimensions" }}{{ $config = . }}{{ end }}{{ end }}
{{ $config = path.Join (path.Dir $config) (path.BaseName $config) }}
{{ with index site.Data $config }}
{{ $matches := first 1 (where . "ratio" $ratio) }}
{{ if eq ($matches | len) 1 }}
{{ $dim = (index $matches 0).dimensions }}
{{ end }}
{{ end }}
{{ if not $dim }}
{{ $dim = slice (index $default $ratio) }}
{{ end }}
{{ return $dim }}

View File

@@ -0,0 +1,23 @@
{{- $dim := .dim -}}
{{- $dimensions := slice }}
{{- $dimensions = $dimensions | append $dim -}}
{{- $portraits := slice }}
{{- range $d := $dimensions -}}
{{- $p := split $d "x" }}
{{ if ne (len $p) 2 }}
{{- warnf "partial [assets/image.html] - Invalid dimension: %s" $d -}}
{{- $portraits = $portraits | append $d -}}
{{- else -}}
{{- $portraits = $portraits | append (printf "%sx%s" (index $p 1) (index $p 0)) -}}
{{- end -}}
{{- end -}}
{{- $ret := "" }}
{{- if reflect.IsSlice $dim -}}
{{ $ret = $portraits -}}
{{- else if gt (len $portraits) 0 -}}
{{- $ret = index $portraits 0 -}}
{{- end -}}
{{- return $ret -}}

View File

@@ -0,0 +1,127 @@
<!-- Initialize arguments -->
{{- $page := .page -}}
{{- $ratio := .ratio -}}
{{- $portrait := .portrait -}}
{{- $wrapper := .wrapper -}}
{{- $class := .class -}}
{{- $title := .title -}}
{{- $caption := .caption -}}
{{- $figclass := .figclass -}}
{{- $lazy := .lazy -}}
{{- $priority := .priority -}}
{{- $sizes := .sizes -}}
{{- $absoluteURL := .absoluteURL -}}
{{- $url := .url -}}
{{- $mode := .mode -}}
{{- $modes := .modes -}}
{{- $fallbackURL := "" -}}
{{- $anchor := "" -}}
{{- $imgset := "" -}}
{{- $isVector := false -}}
<!-- Split url into base and anchor when applicable (only relevant for vector images) -->
{{- $segments := split $url "#" -}}
{{- if gt (len $segments) 2 -}}
{{- errorf "Invalid path or url: %q" $url -}}
{{- else if eq (len $segments) 2 }}
{{- $url = index $segments 0 -}}
{{- $anchor = index $segments 1 -}}
{{- end -}}
<!-- Identify image provider -->
{{ $hook := "" }}
{{ range $provider, $val := site.Params.images }}
{{ if not $hook }}
{{ with index $val "host" }}
{{ if (findRE . (urls.Parse $url).Hostname) }}
{{ $hook = $provider }}
{{ end }}
{{ end }}
{{ end }}
{{ end }}
{{ if not $hook }}{{ $hook = "hugo" }}{{ end }}
<!-- Define image dimensions -->
{{ $dims := slice }}
{{- $res := "" -}}
{{- $img := "" -}}
{{ $transform := "" }}
{{- if hasSuffix $url "svg" -}}
{{- $res = partial "utilities/GetResource.html" (dict "url" $url "page" $page) -}}
{{ if not $res }}
{{- if not (fileExists (path.Join "/static" $url)) -}}
{{ warnf "Cannot find vector image resource: %q" $url -}}
{{ else }}
{{ $width := string (partial "utilities/GetWidth.html" (dict "path" $url "height" 500)) }}
{{ $dims = $dims | append (printf "%sx500" $width) }}
{{ end }}
{{ end }}
{{ else if $ratio }}
{{ $transform = "fill" }}
{{ $dims = partial "assets/helpers/GetDimension.html" (dict "ratio" $ratio) }}
{{ if not $dims }}{{ errorf "partial [assets/image.html] - Cannot find dimension data: %s" $ratio }}{{ end }}
{{ else }}
{{ $transform = "fit" }}
{{- $res := partial "utilities/GetImage.html" (dict "url" $url "page" $page) -}}
{{ with $res }}
{{ $img = $res.resource }}
{{ if $res.mirror }}{{ $class = printf "%s mirrorred" $class }}{{ end }}
{{ end }}
{{ $widths := partial "assets/helpers/GetDimension.html" (dict "ratio" "auto") }}
{{ range $width := $widths -}}
{{- $dims = $dims | append (printf "%dx%d" (int $width) (int (math.Round (mul (div (float $width) $img.Width) $img.Height)))) -}}
{{- end -}}
{{ end }}
<!-- Derive image width and height -->
{{ $width := "" }}
{{ $height := "" }}
{{ with $dims }}
{{ range $dim := (. | last 1) }}
{{ $width = (int (index (split $dim "x") 0)) }}
{{ $height = (int (index (split $dim "x") 1)) }}
{{ end }}
{{ end }}
<!-- Generate image urls -->
{{ if hasSuffix $url "svg" }}
{{- $fallbackURL = $url -}}
{{ else }}
{{- $fallbackURL = partial "assets/helpers/image-set.html" (dict "url" $url "img" $img "dims" ($dims | last 1) "transform" $transform "hook" $hook "format" "jpg" "includeWidth" false) -}}
{{- $imgset = partial "assets/helpers/image-set.html" (dict "url" $url "img" $img "dims" $dims "transform" $transform "hook" $hook) -}}
{{ end }}
<!-- Add color modes -->
{{- range $none := $modes -}}
{{- if ne $none $mode -}}
{{- $wrapper = printf "%s d-none-%s" (or $wrapper "") $none -}}
{{- end -}}
{{- end -}}
<!-- Generate image definition -->
{{- if $caption -}}
<figure {{ with $wrapper }}class="{{ . }}"{{ end }}>
{{ end }}
<div class="{{ if not $caption }}{{ $wrapper }}{{ end }}">
{{- if not $anchor -}}
<img class="img-fluid {{ $class }}"
src="{{ $fallbackURL }}"
{{ if $lazy }}loading="lazy"{{ end }}
{{ with $priority }}fetchpriority="{{ . }}"{{ end }}
{{ with $imgset -}}srcset="{{ . }}" sizes="{{ $sizes }}"{{- end }}
{{ with $height }}height="{{ . }}"{{ end }}
{{ with $width }}width="{{ . }}"{{ end }}
{{ with (or $title $caption) }}alt="{{ . }}"{{ end }}>
{{- else }}
<svg class="{{ $class }}">
<use href="{{ $fallbackURL }}#{{ $anchor }}"></use>
</svg>
{{ end }}
</div>
{{- if $caption -}}
<figcaption class="figure-caption{{ with $figclass }} {{ . }}{{ end }}">{{ $caption | safeHTML }}</figcaption>
</figure>
{{- end -}}

View File

@@ -0,0 +1,46 @@
{{- $url := .url -}}
{{ $img := .img }}
{{ $absoluteURL := .absoluteURL }}
{{ $dims := .dims }}
{{- $ratio := .ratio -}}
{{ $hook := .hook }}
{{ $transform := .transform }}
{{ $format := .format }}
{{ $includeWidth := .includeWidth | default true }}
{{ $host := (urls.Parse $url).Hostname }}
{{ $dir := (urls.Parse $url).Path }}
{{ $file := index ((split $dir "/") | collections.Reverse) 0 }}
{{ $dir = strings.TrimSuffix $file $dir }}
{{ $adapter := (printf "assets/adapters/%s.html" $hook) }}
{{ if not (fileExists (path.Join "/layouts/partials" $adapter)) }}
{{ warnf "Cannot find adapter: %s" (path.Join "/layouts/partials" $adapter) }}
{{ $hook = "hugo" }}
{{ $adapter = "assets/adapters/hugo.html" }}
{{ end }}
{{ $imgset := slice }}
{{- range $index, $dim := $dims -}}
{{ $width := (int (index (split $dim "x") 0)) }}
{{ $height := (int (index (split $dim "x") 1)) }}
{{- $element := partial $adapter (dict
"host" $host
"dir" $dir
"file" $file
"img" $img
"absoluteURL" $absoluteURL
"transform" $transform
"width" $width
"height" $height
"format" $format
)}}
{{ if $includeWidth }}
{{ $imgset = $imgset | append (printf "%s %dw" $element $width) }}
{{ else }}
{{ $imgset = $imgset | append $element }}
{{ end }}
{{- end -}}
{{ return (delimit $imgset ", ") }}

View File

@@ -13,250 +13,29 @@
{{ end }} {{ end }}
<!-- Initialize arguments --> <!-- Initialize arguments -->
{{ $destination := .destination }} {{- $page := .page -}}
<!-- Initialize arguments -->
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
{{- $ratio := .ratio -}} {{- $ratio := .ratio -}}
{{- $portrait := .portrait -}} {{- $portrait := .portrait -}}
{{- $url := .url -}}
{{- $mode := .mode -}}
{{- $modes := site.Params.main.modes | default (slice "light" "dark") -}}
{{- $wrapper := .wrapper -}} {{- $wrapper := .wrapper -}}
{{- $class := .class -}} {{- $class := .class -}}
{{- $title := .title -}} {{- $title := .title -}}
{{- $caption := .caption -}} {{- $caption := .caption -}}
{{- $figclass := .figclass -}} {{- $figclass := .figclass -}}
{{- $page := .page -}}
{{- $loading := .loading -}} {{- $loading := .loading -}}
{{- $lazy := eq $loading "lazy" -}} {{- $lazy := eq $loading "lazy" -}}
{{- $priority := .priority -}} {{- $priority := .priority -}}
{{- if eq $priority "auto" }}{{ $priority = "" }}{{ end -}} {{- if eq $priority "auto" }}{{ $priority = "" }}{{ end -}}
{{- $sizes := .sizes | default "100vw" -}} {{- $sizes := .sizes | default "100vw" -}}
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
{{- $url := .url -}}
{{- $mode := .mode -}}
{{- $modes := site.Params.main.modes | default (slice "light" "dark") -}}
{{- define "partials/image-portrait.html" -}} <!-- Main code -->
{{- $dimensions := slice }}
{{- $dim := .dim -}}
{{- $dimensions = $dimensions | append $dim -}}
{{- $portraits := slice }}
{{- range $d := $dimensions -}}
{{- $p := split $d "x" }}
{{ if ne (len $p) 2 }}
{{- warnf "partial [assets/image.html] - Invalid dimension: %s" $d -}}
{{- $portraits = $portraits | append $d -}}
{{- else -}}
{{- $portraits = $portraits | append (printf "%sx%s" (index $p 1) (index $p 0)) -}}
{{- end -}}
{{- end -}}
{{- $ret := "" }}
{{- if reflect.IsSlice $dim -}}
{{ $ret = $portraits -}}
{{- else if gt (len $portraits) 0 -}}
{{- $ret = index $portraits 0 -}}
{{- end -}}
{{- return $ret -}}
{{- end -}}
<!-- Generate a fallback image of type jpg -->
{{- define "partials/image-default.html" -}}
{{- $img := .img -}}
{{- $ratio := .ratio -}}
{{- $portrait := and .portrait .ratio -}}
{{- $width := "1400" -}}
{{- $dim := "" -}}
{{- $fallback := "" -}}
{{- with $img -}}
{{- if eq $ratio "4x3" -}}{{- $dim = "1400x1050" }}
{{- else if eq $ratio "3x2" -}}{{- $dim = "1400x933" }}
{{- else if eq $ratio "1x1" -}}{{- $dim = "1400x1400" }}
{{- else if eq $ratio "16x9" -}}{{- $dim = "1400x788" -}}
{{- else if eq $ratio "21x9" -}}{{- $dim = "1400x600" -}}
{{- else -}}
{{- $dim = printf "%sx%d" $width (int (math.Round (mul (div (float $width) $img.Width) $img.Height))) -}}
{{- end -}}
{{- if $portrait -}}{{- $dim = partial "partials/image-portrait.html" (dict "dim" $dim) -}}{{- end -}}
{{- if $ratio -}}
{{- $fallback = ($img.Fill (printf "%s jpg" $dim)) -}}
{{- else -}}
{{- $fallback = ($img.Fit (printf "%s jpg" $dim)) -}}
{{- end -}}
{{- $clean := path.Ext $img.RelPermalink -}}
{{- $ext := path.Ext $img.RelPermalink -}}
{{- $fallback = $fallback | resources.Copy (replace $img.RelPermalink $clean (printf "-%s%s" $dim $ext)) -}}
{{- end -}}
{{- return $fallback -}}
{{- end -}}
<!-- Generate a image set of type webp -->
{{- define "partials/image-scaled.html " -}}
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
{{- $img := .img -}}
{{- $ratio := .ratio -}}
{{- $portrait := and .portrait .ratio -}}
{{- $imgset := "" -}}
{{- $widths := slice "576" "768" "992" "1200" "1400" -}}
{{- $dims := slice -}}
{{- with $img -}}
{{- if eq $ratio "4x3" -}}
{{- $dims = slice "576x432" "768x576" "992x744" "1200x900" "1400x1050" -}}
{{- else if eq $ratio "3x2" -}}
{{- $dims = slice "576x384" "768x512" "992x661" "1200x800" "1400x933" -}}
{{- else if eq $ratio "1x1" -}}
{{- $dims = slice "576x576" "768x768" "992x992" "1200x1200" "1400x1400" -}}
{{- else if eq $ratio "16x9" -}}
{{- $dims = slice "576x324" "768x432" "992x558" "1200x675" "1400x788" -}}
{{- else if eq $ratio "21x9" -}}
{{- $dims = slice "576x247" "768x329" "992x425" "1200x514" "1400x600" -}}
{{- else -}}
{{- range $width := $widths -}}
{{- $dims = $dims | append (printf "%sx%d" $width (int (math.Round (mul (div (float $width) $img.Width) $img.Height)))) -}}
{{- end -}}
{{- end -}}
{{- if $portrait -}}
{{- $dims = partial "partials/image-portrait.html" (dict "dim" $dims) -}}
{{- end -}}
{{- $scaled := "" -}}
{{- range $index, $dim := $dims -}}
{{- $clean := path.Ext $img.RelPermalink -}}
{{- if $ratio -}}
{{- $scaled = $img.Fill (printf "%s webp" $dim) -}}
{{- else -}}
{{- $scaled = $img.Fit (printf "%s webp" $dim) -}}
{{- end -}}
{{- $scaled = $scaled | resources.Copy (replace $img.RelPermalink $clean (printf "-%s.webp" $dim)) -}}
{{- if $absoluteURL -}}
{{- $imgset = printf "%s, %s %sw" $imgset $scaled.Permalink (index $widths $index) -}}
{{- else -}}
{{- $imgset = printf "%s, %s %sw" $imgset $scaled.RelPermalink (index $widths $index) -}}
{{- end -}}
{{- end -}}
{{- $imgset = strings.TrimPrefix ", " $imgset -}}
{{- end -}}
{{- return $imgset -}}
{{- end -}}
<!-- Define the img with optional caption -->
{{- define "partials/image-definition.html" -}}
{{- $absoluteURL := site.Params.main.canonifyAssetsURLs | default false -}}
{{- $ratio := .ratio -}}
{{- $portrait := .portrait -}}
{{- $url := .url -}}
{{- $wrapper := .wrapper -}}
{{- $class := .class -}}
{{- $title := .title -}}
{{- $caption := .caption -}}
{{- $figclass := .figclass -}}
{{- $fallbackURL := "" -}}
{{- $anchor := "" -}}
{{- $imgset := "" -}}
{{- $mode := .mode -}}
{{- $modes := .modes -}}
{{- $lazy := .lazy -}}
{{- $page := .page -}}
{{- $sizes := .sizes -}}
{{- $priority := .priority -}}
{{- $isVector := false -}}
{{- $segments := split $url "#" -}}
{{- if gt (len $segments) 2 -}}
{{- errorf "Invalid path or url: %q" $url -}}
{{- else if eq (len $segments) 2 }}
{{- $url = index $segments 0 -}}
{{- $anchor = index $segments 1 -}}
{{- end -}}
{{- if hasSuffix $url "svg" -}}
{{- $fallbackURL = $url -}}
{{- $isVector = true -}}
{{- $res := partial "utilities/GetResource.html" (dict "url" $url "page" $page) -}}
{{ if not $res }}
{{- if not (fileExists (path.Join "/static" $url)) -}}
{{ warnf "Cannot find vector image resource: %q" $url -}}
{{ end }}
{{ end }}
{{- else -}}
{{- $res := partial "utilities/GetImage.html" (dict "url" $url "page" $page) -}}
{{- $img := "" -}}
{{ with $res }}
{{ $img = $res.resource }}
{{ if $res.mirror }}{{ $class = printf "%s mirrorred" $class }}{{ end }}
{{ end }}
{{- if $img -}}
{{- $fallback := partial "partials/image-default.html" (dict "img" $img "ratio" $ratio "portrait" $portrait) -}}
{{- if $absoluteURL -}}
{{- $fallbackURL = $fallback.Permalink -}}
{{- else -}}
{{- $fallbackURL = $fallback.RelPermalink -}}
{{- end -}}
{{- $imgset = partial "partials/image-scaled.html " (dict "img" $img "ratio" $ratio "portrait" $portrait) -}}
{{- end -}}
{{- end -}}
{{- range $none := $modes -}}
{{- if ne $none $mode -}}
{{- $wrapper = printf "%s d-none-%s" (or $wrapper "") $none -}}
{{- end -}}
{{- end -}}
{{- $width := "" -}}
{{- $height := "" -}}
{{- $input := (split (path.BaseName $fallbackURL) "-") | collections.Reverse -}}
{{ if $isVector }}
{{- $height = "500" -}}
{{ $width = string (partial "utilities/GetWidth.html" (dict "path" $fallbackURL "height" 500)) }}
{{- else if gt ($input | len) 1 -}}
{{- $dim := (split (index $input 0) "x") -}}
{{- if eq ($dim | len) 2 -}}
{{- $width = index $dim 0 -}}
{{- $height = index $dim 1 -}}
{{- end -}}
{{- end }}
{{- if $caption -}}
<figure {{ with $wrapper }}class="{{ . }}"{{ end }}>
{{ end }}
<div class="{{ if not $caption }}{{ $wrapper }}{{ end }}">
{{- if not $anchor -}}
<img class="img-fluid {{ $class }}"
src="{{ $fallbackURL }}"
{{ if $lazy }}loading="lazy"{{ end }}
{{ with $priority }}fetchpriority="{{ . }}"{{ end }}
{{ with $imgset -}}srcset="{{ . }}" sizes="{{ $sizes }}"{{- end }}
{{ with $height }}height="{{ . }}"{{ end }}
{{ with $width }}width="{{ . }}"{{ end }}
{{ with $title }}alt="{{ . }}"{{ end }}>
{{- else }}
<svg class="{{ $class }}">
<use href="{{ $fallbackURL }}#{{ $anchor }}"></use>
</svg>
{{ end }}
</div>
{{- if $caption -}}
<figcaption class="figure-caption{{ with $figclass }} {{ . }}{{ end }}">{{ $caption | safeHTML }}</figcaption>
</figure>
{{- end -}}
{{- end -}}
<!-- Initiate the regular or color-mode image -->
{{ $params := dict }} {{ $params := dict }}
{{- $params = merge $params (dict {{- $params = merge $params (dict
"page" $page
"ratio" $ratio "ratio" $ratio
"portrait" $portrait "portrait" $portrait
"wrapper" $wrapper "wrapper" $wrapper
@@ -267,7 +46,8 @@
"lazy" $lazy "lazy" $lazy
"priority" $priority "priority" $priority
"sizes" $sizes "sizes" $sizes
"page" $page) "absoluteURL" $absoluteURL
)
-}} -}}
{{- if $mode -}} {{- if $mode -}}
@@ -284,9 +64,11 @@
"mode" $suffix "mode" $suffix
"modes" $modes) "modes" $modes)
-}} -}}
{{- partial "partials/image-definition.html" $params -}}
{{- end -}} {{- end -}}
{{ else }} {{ else }}
{{- $params = merge $params (dict "url" $url) -}} {{- $params = merge $params (dict "url" $url) -}}
{{- partial "partials/image-definition.html" $params -}}
{{- end -}} {{- end -}}
{{ if not $error }}
{{- partial "assets/helpers/image-definition.html" $params -}}
{{ end }}

View File

@@ -13,14 +13,15 @@
{{ end }} {{ end }}
<!-- Initialize arguments --> <!-- Initialize arguments -->
{{ $destination := .destination }} {{ $destination := strings.TrimPrefix (strings.TrimSuffix "/" site.BaseURL) .destination }}
{{- $target := "" -}} {{- $target := "" -}}
{{- $rel := "" -}} {{- $rel := "" -}}
{{- $case := .case | default true }} {{- $case := .case | default true }}
{{- $external := .external | default false }}
{{- $cue := .cue | default site.Params.main.externalLinks.cue -}} {{- $cue := .cue | default site.Params.main.externalLinks.cue -}}
{{- $tab := .tab | default site.Params.main.externalLinks.tab -}} {{- $tab := .tab | default site.Params.main.externalLinks.tab -}}
{{- $isExternal := ne (urls.Parse (absURL $destination)).Host (urls.Parse site.BaseURL).Host -}} {{- $isExternal := or (ne (urls.Parse (absURL $destination)).Host (urls.Parse site.BaseURL).Host) $external -}}
{{- $page := .page -}} {{- $page := .page -}}
{{- $anchor := "" -}} {{- $anchor := "" -}}
{{- $text := .text -}} {{- $text := .text -}}

View File

@@ -1,3 +1,9 @@
<!--
Copyright © 2024 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.
-->
{{- $page := .page }} {{- $page := .page }}
{{- $section := .section }} {{- $section := .section }}
{{- if not $section }}{{ errorf "partial [assets/section-list.html] - Missing value for param 'section'" }}{{ end -}} {{- if not $section }}{{ errorf "partial [assets/section-list.html] - Missing value for param 'section'" }}{{ end -}}

View File

@@ -14,6 +14,7 @@
<!-- Initialize arguments --> <!-- Initialize arguments -->
{{- $page := .page -}} {{- $page := .page -}}
{{- $breakpoint := .page.Scratch.Get "breakpoint" -}}
{{ $items := $page.Parent.Sections }} {{ $items := $page.Parent.Sections }}
{{ if not $page.Parent.Section }} {{ if not $page.Parent.Section }}
{{ $items = $page.Sections }} {{ $items = $page.Sections }}
@@ -21,7 +22,7 @@
<!-- Main code --> <!-- Main code -->
{{- if and (not $error) (gt (len $items) 0) }} {{- if and (not $error) (gt (len $items) 0) }}
<div class="d-grid gap-2 mx-auto d-md-none"> <div class="d-grid gap-2 mx-auto d-{{ $breakpoint.prev }}-none">
{{ partial "assets/button.html" (dict {{ partial "assets/button.html" (dict
"title" (T "sectionMenu") "title" (T "sectionMenu")
"color" "secondary" "color" "secondary"
@@ -36,7 +37,7 @@
-}} -}}
</div> </div>
<div class="collapse border bg-body-tertiary rounded p-1 navbar-nav-scroll" id="toc-collapse"> <div class="collapse border bg-body-tertiary rounded p-1 navbar-nav-scroll d-{{ $breakpoint.prev }}-none" id="toc-collapse">
<div class="toc toc-panel section-menu text-body p-2 fs-6"> <div class="toc toc-panel section-menu text-body p-2 fs-6">
{{- range $items }} {{- range $items }}
{{ $active := eq $page.RelPermalink .RelPermalink }} {{ $active := eq $page.RelPermalink .RelPermalink }}
@@ -45,7 +46,9 @@
</div> </div>
</div> </div>
<nav class="navbar navbar-expand navbar-services p-0 fs-5 d-none d-md-block"> <div class="d-{{ $breakpoint.prev }}-none mb-5"></div>
<nav class="navbar navbar-expand navbar-services p-0 fs-5 d-none d-{{ $breakpoint.prev }}-block mb-5">
<div class="container-fluid p-0 pb-3"> <div class="container-fluid p-0 pb-3">
<div class="collapse navbar-collapse" id="navbarNav"> <div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav"> <ul class="navbar-nav">

View File

@@ -1,3 +1,9 @@
<!--
Copyright © 2024 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.
-->
{{ $page := .page }} {{ $page := .page }}
{{ $input := .input }} {{ $input := .input }}
{{ $args := .args }} {{ $args := .args }}

View File

@@ -1,3 +1,9 @@
<!--
Copyright © 2024 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.
-->
{{ $headings := .headings | default slice }} {{ $headings := .headings | default slice }}
{{- range .Fragments.Headings }} {{- range .Fragments.Headings }}
{{- range .Headings }} {{- range .Headings }}

View File

@@ -28,6 +28,7 @@
{{- $style := .Get "style" | default "" -}} {{- $style := .Get "style" | default "" -}}
{{- $subtle := .Get "subtle" | default false -}} {{- $subtle := .Get "subtle" | default false -}}
{{- $button := .Get "button" | default false -}} {{- $button := .Get "button" | default false -}}
{{- $buttonType := .Get "buttonType" | default "" -}}
{{ $inner := .Scratch.Get "inner" }} {{ $inner := .Scratch.Get "inner" }}
{{ $input := trim .Inner " \r\n" }} {{ $input := trim .Inner " \r\n" }}
@@ -56,5 +57,6 @@
"style" $style "style" $style
"subtle" $subtle "subtle" $subtle
"button" $button "button" $button
"buttonType" $buttonType
) )
-}} -}}

View File

@@ -33,6 +33,7 @@
{{- $thumbnail := .Get "thumbnail" -}} {{- $thumbnail := .Get "thumbnail" -}}
{{- $title := .Get "title" -}} {{- $title := .Get "title" -}}
{{- $button := partial "utilities/GetArgParent" (dict "page" . "arg" "button") | default false -}} {{- $button := partial "utilities/GetArgParent" (dict "page" . "arg" "button") | default false -}}
{{- $buttonType := partial "utilities/GetArgParent" (dict "page" . "arg" "buttonType") | default "" -}}
<!-- Override arguments --> <!-- Override arguments -->
{{ if $path }} {{ if $path }}
@@ -70,6 +71,7 @@
"loading" $loading "loading" $loading
"alt" $alt "alt" $alt
"button" $button "button" $button
"buttonType" $buttonType
) -}} ) -}}
<!-- Pass output to parent or current stream --> <!-- Pass output to parent or current stream -->

View File

@@ -18,6 +18,7 @@
{{ $url := "" }} {{ $url := "" }}
{{ $class := "" }} {{ $class := "" }}
{{ $case := true }} {{ $case := true }}
{{ $external := false }}
{{ $cue := site.Params.main.externalLinks.cue }} {{ $cue := site.Params.main.externalLinks.cue }}
{{ $tab := site.Params.main.externalLinks.tab }} {{ $tab := site.Params.main.externalLinks.tab }}
{{ $text := trim .Inner " \r\n" | .Page.RenderString | safeHTML }} {{ $text := trim .Inner " \r\n" | .Page.RenderString | safeHTML }}
@@ -30,6 +31,7 @@
{{- $cue = .Get "cue" | default site.Params.main.externalLinks.cue -}} {{- $cue = .Get "cue" | default site.Params.main.externalLinks.cue -}}
{{- $tab = .Get "tab" | default site.Params.main.externalLinks.tab -}} {{- $tab = .Get "tab" | default site.Params.main.externalLinks.tab -}}
{{- $case = .Get "case" | default true -}} {{- $case = .Get "case" | default true -}}
{{- $external = .Get "external" | default false -}}
{{- $class = .Get "class" | default "" -}} {{- $class = .Get "class" | default "" -}}
{{ else }} {{ else }}
{{ $href = .Get 0 }} {{ $href = .Get 0 }}
@@ -42,7 +44,11 @@
{{ end }} {{ end }}
{{- if hasPrefix $href "http" -}} {{- if hasPrefix $href "http" -}}
{{ $url = $href }} {{- if $external -}}
{{ $url = $href }}
{{- else -}}
{{ $url = strings.TrimPrefix (strings.TrimSuffix "/" site.BaseURL) $href }}
{{- end -}}
{{- else if not (strings.Contains $href "/") -}} {{- else if not (strings.Contains $href "/") -}}
{{ $url = index site.Params.links $href }} {{ $url = index site.Params.links $href }}
{{- end -}} {{- end -}}
@@ -65,7 +71,12 @@
{{ end }} {{ end }}
{{ end }} {{ end }}
{{- $isExternal := ne (urls.Parse (absURL $url)).Host (urls.Parse site.BaseURL).Host -}} {{ if and $external (not (hasPrefix $url "http")) }}
{{ errorf "External link must start with 'http': %s" .Position -}}
{{ $error = true -}}
{{ end }}
{{- $isExternal := or (ne (urls.Parse (absURL $url)).Host (urls.Parse site.BaseURL).Host) $external -}}
{{- if not $isExternal -}} {{- if not $isExternal -}}
{{ $ref := partial "utilities/GetPage.html" (dict "url" $url "page" .Page) }} {{ $ref := partial "utilities/GetPage.html" (dict "url" $url "page" .Page) }}
{{- if not $ref -}} {{- if not $ref -}}
@@ -80,5 +91,5 @@
<!-- Main code --> <!-- Main code -->
{{- if not $error -}} {{- if not $error -}}
{{ partial "assets/link.html" (dict "destination" $url "text" $text "cue" $cue "tab" $tab "case" $case "class" $class "page" .Page) }} {{ partial "assets/link.html" (dict "destination" $url "text" $text "cue" $cue "tab" $tab "case" $case "external" $external "class" $class "page" .Page) }}
{{- end -}} {{- end -}}

View File

@@ -4,12 +4,12 @@
command = "npm run build:example" command = "npm run build:example"
[build.environment] [build.environment]
DART_SASS_VERSION = "1.72.0" DART_SASS_VERSION = "1.77.0"
HUGO_VERSION = "0.124.0" HUGO_VERSION = "0.125.7"
HUGO_ENV = "production" HUGO_ENV = "production"
HUGO_ENABLEGITINFO = "true" HUGO_ENABLEGITINFO = "true"
NODE_VERSION = "18.19.1" NODE_VERSION = "18.20.2"
NPM_VERSION = "10.2.4" NPM_VERSION = "10.5.0"
# toml-docs-end netlify # toml-docs-end netlify
[[headers]] [[headers]]
@@ -33,7 +33,7 @@
font-src 'self' https://*.netlify.app https://fonts.gstatic.com; \ font-src 'self' https://*.netlify.app https://fonts.gstatic.com; \
frame-src 'self' https://www.youtube-nocookie.com https://www.youtube.com \ frame-src 'self' https://www.youtube-nocookie.com https://www.youtube.com \
app.netlify.com; \ app.netlify.com; \
img-src 'self' data: https://*.netlify.app https://i.vimeocdn.com https://i.ytimg.com https://*.google-analytics.com https://*.googletagmanager.com https://tile.openstreetmap.org; \ img-src 'self' data: https://*.imgix.net https://*.imagekit.io https://*.cloudinary.com https://*.netlify.app https://i.vimeocdn.com https://i.ytimg.com https://*.google-analytics.com https://*.googletagmanager.com https://tile.openstreetmap.org; \
manifest-src 'self'; \ manifest-src 'self'; \
media-src 'self' \ media-src 'self' \
""" """

431
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{ {
"name": "@gethinode/hinode", "name": "@gethinode/hinode",
"version": "0.23.13", "version": "0.24.0-beta1",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "@gethinode/hinode", "name": "@gethinode/hinode",
"version": "0.23.13", "version": "0.24.0-beta1",
"license": "MIT", "license": "MIT",
"devDependencies": { "devDependencies": {
"@fullhuman/postcss-purgecss": "^6.0.0", "@fullhuman/postcss-purgecss": "^6.0.0",
@@ -20,14 +20,14 @@
"eslint-plugin-import": "^2.29.1", "eslint-plugin-import": "^2.29.1",
"eslint-plugin-n": "^16.6.2", "eslint-plugin-n": "^16.6.2",
"eslint-plugin-promise": "^6.1.1", "eslint-plugin-promise": "^6.1.1",
"hugo-bin": "0.122.5", "hugo-bin": "0.123.1",
"markdownlint-cli2": "^0.13.0", "markdownlint-cli2": "^0.13.0",
"netlify-plugin-hugo-cache-resources": "^0.2.1", "netlify-plugin-hugo-cache-resources": "^0.2.1",
"npm-run-all": "^4.1.5", "npm-run-all": "^4.1.5",
"postcss-cli": "^11.0.0", "postcss-cli": "^11.0.0",
"purgecss-whitelister": "^2.4.0", "purgecss-whitelister": "^2.4.0",
"replace-in-files-cli": "^2.2.0", "replace-in-files-cli": "^2.2.0",
"rimraf": "^5.0.5", "rimraf": "^5.0.7",
"shx": "^0.3.4", "shx": "^0.3.4",
"stylelint": "^16.5.0", "stylelint": "^16.5.0",
"stylelint-config-standard-scss": "^13.1.0" "stylelint-config-standard-scss": "^13.1.0"
@@ -830,139 +830,164 @@
"dev": true "dev": true
}, },
"node_modules/@xhmikosr/archive-type": { "node_modules/@xhmikosr/archive-type": {
"version": "6.0.1", "version": "7.0.0",
"resolved": "https://registry.npmjs.org/@xhmikosr/archive-type/-/archive-type-6.0.1.tgz", "resolved": "https://registry.npmjs.org/@xhmikosr/archive-type/-/archive-type-7.0.0.tgz",
"integrity": "sha512-PB3NeJL8xARZt52yDBupK0dNPn8uIVQDe15qNehUpoeeLWCZyAOam4vGXnoZGz2N9D1VXtjievJuCsXam2TmbQ==", "integrity": "sha512-sIm84ZneCOJuiy3PpWR5bxkx3HaNt1pqaN+vncUBZIlPZCq8ASZH+hBVdu5H8znR7qYC6sKwx+ie2Q7qztJTxA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"file-type": "^18.5.0" "file-type": "^19.0.0"
}, },
"engines": { "engines": {
"node": "^14.14.0 || >=16.0.0" "node": "^14.14.0 || >=16.0.0"
} }
}, },
"node_modules/@xhmikosr/bin-check": { "node_modules/@xhmikosr/bin-check": {
"version": "6.0.0", "version": "7.0.3",
"resolved": "https://registry.npmjs.org/@xhmikosr/bin-check/-/bin-check-6.0.0.tgz", "resolved": "https://registry.npmjs.org/@xhmikosr/bin-check/-/bin-check-7.0.3.tgz",
"integrity": "sha512-ZUICVP4EchT0Dmz4/Xo7l3wuNF4Zo3ua8l00I/gkgF/59+1c/0+dijfokkIxN+4HScsAnGN9ej53mhnPcsdDYg==", "integrity": "sha512-4UnCLCs8DB+itHJVkqFp9Zjg+w/205/J2j2wNBsCEAm/BuBmtua2hhUOdAMQE47b1c7P9Xmddj0p+X1XVsfHsA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"execa": "^5.1.1", "execa": "^5.1.1",
"isexe": "^2.0.0" "isexe": "^2.0.0"
}, },
"engines": { "engines": {
"node": "^14.14.0 || >=16.0.0" "node": ">=18"
} }
}, },
"node_modules/@xhmikosr/bin-wrapper": { "node_modules/@xhmikosr/bin-wrapper": {
"version": "12.0.0", "version": "13.0.5",
"resolved": "https://registry.npmjs.org/@xhmikosr/bin-wrapper/-/bin-wrapper-12.0.0.tgz", "resolved": "https://registry.npmjs.org/@xhmikosr/bin-wrapper/-/bin-wrapper-13.0.5.tgz",
"integrity": "sha512-QMsHQ+ZIzzp4bSfytxRN33XMVEIljmU0M4MuEQ0zgk7agmZLYSGX4/OEFYpg4Xq08VwlhCCJ+8p+dMKL8WTa8g==", "integrity": "sha512-DT2SAuHDeOw0G5bs7wZbQTbf4hd8pJ14tO0i4cWhRkIJfgRdKmMfkDilpaJ8uZyPA0NVRwasCNAmMJcWA67osw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@xhmikosr/bin-check": "^6.0.0", "@xhmikosr/bin-check": "^7.0.3",
"@xhmikosr/downloader": "^14.0.0", "@xhmikosr/downloader": "^15.0.1",
"bin-version-check": "^5.1.0", "@xhmikosr/os-filter-obj": "^3.0.0",
"os-filter-obj": "^2.0.0" "bin-version-check": "^5.1.0"
}, },
"engines": { "engines": {
"node": ">=16" "node": ">=18"
} }
}, },
"node_modules/@xhmikosr/decompress": { "node_modules/@xhmikosr/decompress": {
"version": "9.0.1", "version": "10.0.1",
"resolved": "https://registry.npmjs.org/@xhmikosr/decompress/-/decompress-9.0.1.tgz", "resolved": "https://registry.npmjs.org/@xhmikosr/decompress/-/decompress-10.0.1.tgz",
"integrity": "sha512-9Lvlt6Qdpo9SaRQyRIXCo3lgU++eMZ68lzgjcTwtuKDrlwT635+5zsHZ1yrSx/Blc5IDuVLlPkBPj5CZkx+2+Q==", "integrity": "sha512-6uHnEEt5jv9ro0CDzqWlFgPycdE+H+kbJnwyxgZregIMLQ7unQSCNVsYG255FoqU8cP46DyggI7F7LohzEl8Ag==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@xhmikosr/decompress-tar": "^7.0.0", "@xhmikosr/decompress-tar": "^8.0.1",
"@xhmikosr/decompress-tarbz2": "^7.0.0", "@xhmikosr/decompress-tarbz2": "^8.0.1",
"@xhmikosr/decompress-targz": "^7.0.0", "@xhmikosr/decompress-targz": "^8.0.1",
"@xhmikosr/decompress-unzip": "^6.0.0", "@xhmikosr/decompress-unzip": "^7.0.0",
"graceful-fs": "^4.2.11", "graceful-fs": "^4.2.11",
"make-dir": "^4.0.0", "make-dir": "^4.0.0",
"strip-dirs": "^3.0.0" "strip-dirs": "^3.0.0"
}, },
"engines": { "engines": {
"node": "^14.14.0 || >=16.0.0" "node": ">=18"
} }
}, },
"node_modules/@xhmikosr/decompress-tar": { "node_modules/@xhmikosr/decompress-tar": {
"version": "7.0.0", "version": "8.0.1",
"resolved": "https://registry.npmjs.org/@xhmikosr/decompress-tar/-/decompress-tar-7.0.0.tgz", "resolved": "https://registry.npmjs.org/@xhmikosr/decompress-tar/-/decompress-tar-8.0.1.tgz",
"integrity": "sha512-kyWf2hybtQVbWtB+FdRyOT+jyR5jxCNZPLqvQGB7djZj75lrpLUPEmRbyo86AtJ5OEtivpYaNWjCkqSJ8xtRWw==", "integrity": "sha512-dpEgs0cQKJ2xpIaGSO0hrzz3Kt8TQHYdizHsgDtLorWajuHJqxzot9Hbi0huRxJuAGG2qiHSQkwyvHHQtlE+fg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"file-type": "^18.5.0", "file-type": "^19.0.0",
"is-stream": "^3.0.0", "is-stream": "^2.0.1",
"tar-stream": "^3.1.4" "tar-stream": "^3.1.7"
}, },
"engines": { "engines": {
"node": "^14.14.0 || >=16.0.0" "node": ">=18"
} }
}, },
"node_modules/@xhmikosr/decompress-tarbz2": { "node_modules/@xhmikosr/decompress-tarbz2": {
"version": "7.0.0", "version": "8.0.1",
"resolved": "https://registry.npmjs.org/@xhmikosr/decompress-tarbz2/-/decompress-tarbz2-7.0.0.tgz", "resolved": "https://registry.npmjs.org/@xhmikosr/decompress-tarbz2/-/decompress-tarbz2-8.0.1.tgz",
"integrity": "sha512-3QnjipYkRgh3Dee1MWDgKmANWxOQBVN4e1IwiGNe2fHYfMYTeSkVvWREt87UIoSucKUh3E95v8uGFttgTknZcA==", "integrity": "sha512-OF+6DysDZP5YTDO8uHuGG6fMGZjc+HszFPBkVltjoje2Cf60hjBg/YP5OQndW1hfwVWOdP7f3CnJiPZHJUTtEg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@xhmikosr/decompress-tar": "^7.0.0", "@xhmikosr/decompress-tar": "^8.0.1",
"file-type": "^18.5.0", "file-type": "^19.0.0",
"is-stream": "^3.0.0", "is-stream": "^2.0.1",
"seek-bzip": "^1.0.6", "seek-bzip": "^2.0.0",
"unbzip2-stream": "^1.4.3" "unbzip2-stream": "^1.4.3"
}, },
"engines": { "engines": {
"node": "^14.14.0 || >=16.0.0" "node": ">=18"
} }
}, },
"node_modules/@xhmikosr/decompress-targz": { "node_modules/@xhmikosr/decompress-targz": {
"version": "7.0.0", "version": "8.0.1",
"resolved": "https://registry.npmjs.org/@xhmikosr/decompress-targz/-/decompress-targz-7.0.0.tgz", "resolved": "https://registry.npmjs.org/@xhmikosr/decompress-targz/-/decompress-targz-8.0.1.tgz",
"integrity": "sha512-7BNHJl92g9OLhw89zqcFS67V1LAtm4Ex02j6OiQzuE8P7Yy9lQcyBuEL3x6v436grLdL+BcFjgbmhWxnem4GHw==", "integrity": "sha512-mvy5AIDIZjQ2IagMI/wvauEiSNHhu/g65qpdM4EVoYHUJBAmkQWqcPJa8Xzi1aKVTmOA5xLJeDk7dqSjlHq8Mg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@xhmikosr/decompress-tar": "^7.0.0", "@xhmikosr/decompress-tar": "^8.0.1",
"file-type": "^18.5.0", "file-type": "^19.0.0",
"is-stream": "^3.0.0" "is-stream": "^2.0.1"
}, },
"engines": { "engines": {
"node": "^14.14.0 || >=16.0.0" "node": ">=18"
} }
}, },
"node_modules/@xhmikosr/decompress-unzip": { "node_modules/@xhmikosr/decompress-unzip": {
"version": "6.0.0", "version": "7.0.0",
"resolved": "https://registry.npmjs.org/@xhmikosr/decompress-unzip/-/decompress-unzip-6.0.0.tgz", "resolved": "https://registry.npmjs.org/@xhmikosr/decompress-unzip/-/decompress-unzip-7.0.0.tgz",
"integrity": "sha512-R1HAkjXLS7RAL74YFLxYY9zYflCcYGssld9KKFDu87PnJ4h4btdhzXfSC8J5i5A2njH3oYIoCzx03RIGTH07Sg==", "integrity": "sha512-GQMpzIpWTsNr6UZbISawsGI0hJ4KA/mz5nFq+cEoPs12UybAqZWKbyIaZZyLbJebKl5FkLpsGBkrplJdjvUoSQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"file-type": "^18.5.0", "file-type": "^19.0.0",
"get-stream": "^6.0.1", "get-stream": "^6.0.1",
"yauzl": "^2.10.0" "yauzl": "^3.1.2"
}, },
"engines": { "engines": {
"node": "^14.14.0 || >=16.0.0" "node": ">=18"
}
},
"node_modules/@xhmikosr/decompress-unzip/node_modules/yauzl": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.1.3.tgz",
"integrity": "sha512-JCCdmlJJWv7L0q/KylOekyRaUrdEoUxWkWVcgorosTROCFWiS9p2NNPE9Yb91ak7b1N5SxAZEliWpspbZccivw==",
"dev": true,
"dependencies": {
"buffer-crc32": "~0.2.3",
"pend": "~1.2.0"
},
"engines": {
"node": ">=12"
} }
}, },
"node_modules/@xhmikosr/downloader": { "node_modules/@xhmikosr/downloader": {
"version": "14.0.0", "version": "15.0.1",
"resolved": "https://registry.npmjs.org/@xhmikosr/downloader/-/downloader-14.0.0.tgz", "resolved": "https://registry.npmjs.org/@xhmikosr/downloader/-/downloader-15.0.1.tgz",
"integrity": "sha512-qoKPKzGyoSZ7HxkKaMSFOA9dNnmow6nMNlOqoRvKkDvFhDVNjma6CBr/5o/oXtlQk+mEHxZWeHSNHHpWte4ApQ==", "integrity": "sha512-fiuFHf3Dt6pkX8HQrVBsK0uXtkgkVlhrZEh8b7VgoDqFf+zrgFBPyrwCqE/3nDwn3hLeNz+BsrS7q3mu13Lp1g==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@xhmikosr/archive-type": "^6.0.1", "@xhmikosr/archive-type": "^7.0.0",
"@xhmikosr/decompress": "^9.0.1", "@xhmikosr/decompress": "^10.0.1",
"content-disposition": "^0.5.4", "content-disposition": "^0.5.4",
"defaults": "^2.0.2", "defaults": "^3.0.0",
"ext-name": "^5.0.0", "ext-name": "^5.0.0",
"file-type": "^18.7.0", "file-type": "^19.0.0",
"filenamify": "^6.0.0", "filenamify": "^6.0.0",
"get-stream": "^6.0.1", "get-stream": "^6.0.1",
"got": "^13.0.0" "got": "^13.0.0"
}, },
"engines": { "engines": {
"node": ">=16" "node": ">=18"
}
},
"node_modules/@xhmikosr/os-filter-obj": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@xhmikosr/os-filter-obj/-/os-filter-obj-3.0.0.tgz",
"integrity": "sha512-siPY6BD5dQ2SZPl3I0OZBHL27ZqZvLEosObsZRQ1NUB8qcxegwt0T9eKtV96JMFQpIz1elhkzqOg4c/Ri6Dp9A==",
"dev": true,
"dependencies": {
"arch": "^3.0.0"
},
"engines": {
"node": "^14.14.0 || >=16.0.0"
} }
}, },
"node_modules/accepts": { "node_modules/accepts": {
@@ -1097,9 +1122,9 @@
} }
}, },
"node_modules/arch": { "node_modules/arch": {
"version": "2.2.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", "resolved": "https://registry.npmjs.org/arch/-/arch-3.0.0.tgz",
"integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", "integrity": "sha512-AmIAC+Wtm2AU8lGfTtHsw0Y9Qtftx2YXEEtiBP10xFUtMOA+sHHx6OAddyL52mUKh1vsXQ6/w1mVDptZCyUt4Q==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@@ -1325,9 +1350,9 @@
} }
}, },
"node_modules/b4a": { "node_modules/b4a": {
"version": "1.6.4", "version": "1.6.6",
"resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz",
"integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==", "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==",
"dev": true "dev": true
}, },
"node_modules/balanced-match": { "node_modules/balanced-match": {
@@ -1336,6 +1361,13 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true "dev": true
}, },
"node_modules/bare-events": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.2.tgz",
"integrity": "sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==",
"dev": true,
"optional": true
},
"node_modules/base64-js": { "node_modules/base64-js": {
"version": "1.5.1", "version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
@@ -1390,13 +1422,10 @@
} }
}, },
"node_modules/bin-version-check/node_modules/semver": { "node_modules/bin-version-check/node_modules/semver": {
"version": "7.5.4", "version": "7.6.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
"dev": true, "dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
},
"bin": { "bin": {
"semver": "bin/semver.js" "semver": "bin/semver.js"
}, },
@@ -2360,12 +2389,12 @@
"dev": true "dev": true
}, },
"node_modules/defaults": { "node_modules/defaults": {
"version": "2.0.2", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/defaults/-/defaults-2.0.2.tgz", "resolved": "https://registry.npmjs.org/defaults/-/defaults-3.0.0.tgz",
"integrity": "sha512-cuIw0PImdp76AOfgkjbW4VhQODRmNNcKR73vdCH5cLd/ifj7aamfoXvYgfGkEAjNJZ3ozMIy9Gu2LutUkGEPbA==", "integrity": "sha512-RsqXDEAALjfRTro+IFNKpcPCt0/Cy2FqHSIlnomiJp9YGadpQnrtbRpSgN2+np21qHcIKiva4fiOQGjS9/qR/A==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": ">=16" "node": ">=18"
}, },
"funding": { "funding": {
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
@@ -3191,18 +3220,6 @@
"url": "https://github.com/sindresorhus/execa?sponsor=1" "url": "https://github.com/sindresorhus/execa?sponsor=1"
} }
}, },
"node_modules/execa/node_modules/is-stream": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
"integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
"dev": true,
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/express": { "node_modules/express": {
"version": "4.19.2", "version": "4.19.2",
"resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
@@ -3440,9 +3457,9 @@
} }
}, },
"node_modules/file-type": { "node_modules/file-type": {
"version": "18.7.0", "version": "19.0.0",
"resolved": "https://registry.npmjs.org/file-type/-/file-type-18.7.0.tgz", "resolved": "https://registry.npmjs.org/file-type/-/file-type-19.0.0.tgz",
"integrity": "sha512-ihHtXRzXEziMrQ56VSgU7wkxh55iNchFkosu7Y9/S+tXHdKyrGjVK0ujbqNnsxzea+78MaLhN6PGmfYSAv1ACw==", "integrity": "sha512-s7cxa7/leUWLiXO78DVVfBVse+milos9FitauDLG1pI7lNaJ2+5lzPnr2N24ym+84HVwJL6hVuGfgVE+ALvU8Q==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"readable-web-to-node-stream": "^3.0.2", "readable-web-to-node-stream": "^3.0.2",
@@ -3450,7 +3467,7 @@
"token-types": "^5.0.1" "token-types": "^5.0.1"
}, },
"engines": { "engines": {
"node": ">=14.16" "node": ">=18"
}, },
"funding": { "funding": {
"url": "https://github.com/sindresorhus/file-type?sponsor=1" "url": "https://github.com/sindresorhus/file-type?sponsor=1"
@@ -3529,6 +3546,18 @@
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
} }
}, },
"node_modules/find-up-simple": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.0.tgz",
"integrity": "sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==",
"dev": true,
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/find-versions": { "node_modules/find-versions": {
"version": "5.1.0", "version": "5.1.0",
"resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz", "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz",
@@ -4386,9 +4415,9 @@
"dev": true "dev": true
}, },
"node_modules/hugo-bin": { "node_modules/hugo-bin": {
"version": "0.122.5", "version": "0.123.1",
"resolved": "https://registry.npmjs.org/hugo-bin/-/hugo-bin-0.122.5.tgz", "resolved": "https://registry.npmjs.org/hugo-bin/-/hugo-bin-0.123.1.tgz",
"integrity": "sha512-Iuua9s1aGQb8kWeAjklfryEPLF/4jsSbRHehRe3vyS3Mgb7iuZjKI9p8yn6ha5LatVJREHn4qznZ2D5IPGSCUA==", "integrity": "sha512-YENQPHxg8jFvn5KyTrqUj+mXwGHNJzelc8TzzJ1l6Cm6ZSJsl38mdEKvejA8J1146h8Y6a2m6q6TsSx/5g3HRg==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@@ -4398,14 +4427,14 @@
], ],
"hasInstallScript": true, "hasInstallScript": true,
"dependencies": { "dependencies": {
"@xhmikosr/bin-wrapper": "^12.0.0", "@xhmikosr/bin-wrapper": "^13.0.5",
"pkg-conf": "^4.0.0" "package-config": "^5.0.0"
}, },
"bin": { "bin": {
"hugo": "bin/cli.js" "hugo": "bin/cli.js"
}, },
"engines": { "engines": {
"node": ">=16" "node": ">=18"
} }
}, },
"node_modules/human-signals": { "node_modules/human-signals": {
@@ -4849,12 +4878,12 @@
} }
}, },
"node_modules/is-stream": { "node_modules/is-stream": {
"version": "3.0.0", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
"integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": "^12.20.0 || ^14.13.1 || >=16.0.0" "node": ">=8"
}, },
"funding": { "funding": {
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
@@ -5317,13 +5346,10 @@
} }
}, },
"node_modules/make-dir/node_modules/semver": { "node_modules/make-dir/node_modules/semver": {
"version": "7.5.4", "version": "7.6.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
"dev": true, "dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
},
"bin": { "bin": {
"semver": "bin/semver.js" "semver": "bin/semver.js"
}, },
@@ -5846,9 +5872,9 @@
} }
}, },
"node_modules/normalize-url": { "node_modules/normalize-url": {
"version": "8.0.0", "version": "8.0.1",
"resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz",
"integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": ">=14.16" "node": ">=14.16"
@@ -6205,18 +6231,6 @@
"node": ">= 0.8.0" "node": ">= 0.8.0"
} }
}, },
"node_modules/os-filter-obj": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz",
"integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==",
"dev": true,
"dependencies": {
"arch": "^2.1.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/p-cancelable": { "node_modules/p-cancelable": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz",
@@ -6265,6 +6279,22 @@
"node": ">=6" "node": ">=6"
} }
}, },
"node_modules/package-config": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/package-config/-/package-config-5.0.0.tgz",
"integrity": "sha512-GYTTew2slBcYdvRHqjhwaaydVMvn/qrGC323+nKclYioNSLTDUM/lGgtGTgyHVtYcozb+XkE8CNhwcraOmZ9Mg==",
"dev": true,
"dependencies": {
"find-up-simple": "^1.0.0",
"load-json-file": "^7.0.1"
},
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/param-case": { "node_modules/param-case": {
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
@@ -6450,104 +6480,6 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/pkg-conf": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-4.0.0.tgz",
"integrity": "sha512-7dmgi4UY4qk+4mj5Cd8v/GExPo0K+SlY+hulOSdfZ/T6jVH6//y7NtzZo5WrfhDBxuQ0jCa7fLZmNaNh7EWL/w==",
"dev": true,
"dependencies": {
"find-up": "^6.0.0",
"load-json-file": "^7.0.0"
},
"engines": {
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/pkg-conf/node_modules/find-up": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz",
"integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==",
"dev": true,
"dependencies": {
"locate-path": "^7.1.0",
"path-exists": "^5.0.0"
},
"engines": {
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/pkg-conf/node_modules/locate-path": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
"integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
"dev": true,
"dependencies": {
"p-locate": "^6.0.0"
},
"engines": {
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/pkg-conf/node_modules/p-limit": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
"integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
"dev": true,
"dependencies": {
"yocto-queue": "^1.0.0"
},
"engines": {
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/pkg-conf/node_modules/p-locate": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
"integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
"dev": true,
"dependencies": {
"p-limit": "^4.0.0"
},
"engines": {
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/pkg-conf/node_modules/path-exists": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
"integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
"dev": true,
"engines": {
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
}
},
"node_modules/pkg-conf/node_modules/yocto-queue": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz",
"integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==",
"dev": true,
"engines": {
"node": ">=12.20"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/pkg-dir": { "node_modules/pkg-dir": {
"version": "4.2.0", "version": "4.2.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
@@ -8124,9 +8056,9 @@
} }
}, },
"node_modules/rimraf": { "node_modules/rimraf": {
"version": "5.0.5", "version": "5.0.7",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.7.tgz",
"integrity": "sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==", "integrity": "sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"glob": "^10.3.7" "glob": "^10.3.7"
@@ -8135,7 +8067,7 @@
"rimraf": "dist/esm/bin.mjs" "rimraf": "dist/esm/bin.mjs"
}, },
"engines": { "engines": {
"node": ">=14" "node": ">=14.18"
}, },
"funding": { "funding": {
"url": "https://github.com/sponsors/isaacs" "url": "https://github.com/sponsors/isaacs"
@@ -8277,18 +8209,27 @@
} }
}, },
"node_modules/seek-bzip": { "node_modules/seek-bzip": {
"version": "1.0.6", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-2.0.0.tgz",
"integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", "integrity": "sha512-SMguiTnYrhpLdk3PwfzHeotrcwi8bNV4iemL9tx9poR/yeaMYwB9VzR1w7b57DuWpuqR8n6oZboi0hj3AxZxQg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"commander": "^2.8.1" "commander": "^6.0.0"
}, },
"bin": { "bin": {
"seek-bunzip": "bin/seek-bunzip", "seek-bunzip": "bin/seek-bunzip",
"seek-table": "bin/seek-bzip-table" "seek-table": "bin/seek-bzip-table"
} }
}, },
"node_modules/seek-bzip/node_modules/commander": {
"version": "6.2.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
"integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
"dev": true,
"engines": {
"node": ">= 6"
}
},
"node_modules/semver": { "node_modules/semver": {
"version": "6.3.1", "version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
@@ -8326,13 +8267,10 @@
} }
}, },
"node_modules/semver-truncate/node_modules/semver": { "node_modules/semver-truncate/node_modules/semver": {
"version": "7.5.4", "version": "7.6.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
"dev": true, "dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
},
"bin": { "bin": {
"semver": "bin/semver.js" "semver": "bin/semver.js"
}, },
@@ -8636,13 +8574,16 @@
} }
}, },
"node_modules/streamx": { "node_modules/streamx": {
"version": "2.15.6", "version": "2.16.1",
"resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.6.tgz", "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.16.1.tgz",
"integrity": "sha512-q+vQL4AAz+FdfT137VF69Cc/APqUbxy+MDOImRrMvchJpigHj9GksgDU2LYbO9rx7RX6osWgxJB2WxhYv4SZAw==", "integrity": "sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"fast-fifo": "^1.1.0", "fast-fifo": "^1.1.0",
"queue-tick": "^1.0.1" "queue-tick": "^1.0.1"
},
"optionalDependencies": {
"bare-events": "^2.2.0"
} }
}, },
"node_modules/string_decoder": { "node_modules/string_decoder": {
@@ -9342,9 +9283,9 @@
} }
}, },
"node_modules/tar-stream": { "node_modules/tar-stream": {
"version": "3.1.6", "version": "3.1.7",
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz",
"integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==", "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"b4a": "^1.6.4", "b4a": "^1.6.4",

View File

@@ -1,6 +1,6 @@
{ {
"name": "@gethinode/hinode", "name": "@gethinode/hinode",
"version": "0.23.13", "version": "0.24.0-beta1",
"description": "Hinode is a clean documentation and blog theme for Hugo, an open-source static site generator", "description": "Hinode is a clean documentation and blog theme for Hugo, an open-source static site generator",
"keywords": [ "keywords": [
"hugo", "hugo",
@@ -78,14 +78,14 @@
"eslint-plugin-import": "^2.29.1", "eslint-plugin-import": "^2.29.1",
"eslint-plugin-n": "^16.6.2", "eslint-plugin-n": "^16.6.2",
"eslint-plugin-promise": "^6.1.1", "eslint-plugin-promise": "^6.1.1",
"hugo-bin": "0.122.5", "hugo-bin": "0.123.1",
"markdownlint-cli2": "^0.13.0", "markdownlint-cli2": "^0.13.0",
"netlify-plugin-hugo-cache-resources": "^0.2.1", "netlify-plugin-hugo-cache-resources": "^0.2.1",
"npm-run-all": "^4.1.5", "npm-run-all": "^4.1.5",
"postcss-cli": "^11.0.0", "postcss-cli": "^11.0.0",
"purgecss-whitelister": "^2.4.0", "purgecss-whitelister": "^2.4.0",
"replace-in-files-cli": "^2.2.0", "replace-in-files-cli": "^2.2.0",
"rimraf": "^5.0.5", "rimraf": "^5.0.7",
"shx": "^0.3.4", "shx": "^0.3.4",
"stylelint": "^16.5.0", "stylelint": "^16.5.0",
"stylelint-config-standard-scss": "^13.1.0" "stylelint-config-standard-scss": "^13.1.0"