imdhemy-jekyll-theme 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +15 -122
- data/_includes/giscus-comments.html +44 -0
- data/_includes/post-header.html +5 -3
- data/_includes/post-item.html +3 -3
- data/_includes/post-meta.html +9 -0
- data/_includes/post-series.html +194 -0
- data/_layouts/post.html +2 -0
- data/_sass/components/_core.scss +327 -16
- data/assets/js/dist/main.js +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6604ba565cd7d0a0cba90e9c97bfaf5a2eccbb1e491465aa8b823eff357436f0
|
|
4
|
+
data.tar.gz: aed98a84999b132d27b2291194b93def3d89e448a391f2d65dfddb8005119ada
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6da70bdee4e9841196ae8dfe68b38470297639fa06b887bd96ea1fb60e177f96c956472faef35cbdd39add43f28a7ef75d97e5540ea30809a1777b9d630bf4bc
|
|
7
|
+
data.tar.gz: 05a4971a0dec0ed809a75ca670474699f6a46dbc491823df25b26948e7ee6673e0918d374f9c9a432f6c1fd1c9f59f6c5647ef7209b630a487abc9e8245212d4
|
data/README.md
CHANGED
|
@@ -1,134 +1,27 @@
|
|
|
1
1
|
# Imdhemy Jekyll Theme
|
|
2
2
|
|
|
3
|
-
Jekyll theme for my personal website
|
|
3
|
+
Jekyll theme for my personal website: [imdhemy.com](https://imdhemy.com).
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Documentation
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
All documentation lives in the [`docs/`](./docs) directory.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
- [Documentation Home](./docs/README.md)
|
|
10
|
+
- [Getting Started](./docs/getting-started.md)
|
|
11
|
+
- [Configuration Reference](./docs/configuration.md)
|
|
12
|
+
- [Customization Guide](./docs/customization.md)
|
|
13
|
+
- [Components and Layouts](./docs/components.md)
|
|
14
|
+
- [Content Elements](./docs/content-elements.md)
|
|
15
|
+
- [Upgrade Guide](./UPGRADE.md)
|
|
10
16
|
|
|
11
|
-
|
|
12
|
-
gem "imdhemy-jekyll-theme", "1.0.0"
|
|
13
|
-
```
|
|
17
|
+
## Example Site
|
|
14
18
|
|
|
15
|
-
|
|
19
|
+
A complete runnable example is available in [`example/`](./example).
|
|
16
20
|
|
|
17
|
-
|
|
18
|
-
theme: imdhemy-jekyll-theme
|
|
19
|
-
```
|
|
21
|
+
## Development
|
|
20
22
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
bundle install
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## Migrating From `remote_theme`
|
|
28
|
-
|
|
29
|
-
If your site currently uses:
|
|
30
|
-
|
|
31
|
-
```yaml
|
|
32
|
-
remote_theme: imdhemy/imdhemy-jekyll-theme
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
Migrate to the gem flow:
|
|
36
|
-
|
|
37
|
-
1. Remove `remote_theme` from `_config.yml`.
|
|
38
|
-
2. Add `theme: imdhemy-jekyll-theme` to `_config.yml`.
|
|
39
|
-
3. Add `gem "imdhemy-jekyll-theme", "<semantic-version>"` to your `Gemfile`.
|
|
40
|
-
4. Run `bundle install`.
|
|
41
|
-
|
|
42
|
-
## Usage
|
|
43
|
-
|
|
44
|
-
You can find examples in the [example](/example) directory.
|
|
45
|
-
|
|
46
|
-
## Customize Theme Copy
|
|
47
|
-
|
|
48
|
-
The theme exposes UI text keys so users can control the added content from `_config.yml`.
|
|
49
|
-
|
|
50
|
-
```yaml
|
|
51
|
-
theme_text:
|
|
52
|
-
hero_kicker: "Personal blog and engineering notes"
|
|
53
|
-
hero_cta_label: "Start reading"
|
|
54
|
-
hero_secondary_cta_label: "About me"
|
|
55
|
-
hero_secondary_cta_url: "/about"
|
|
56
|
-
latest_posts_subtitle: "Fresh writing you can read in a few minutes."
|
|
57
|
-
read_article_label: "Read article"
|
|
58
|
-
back_to_posts_label: "Back to all posts"
|
|
59
|
-
previous_article_label: "Previous article"
|
|
60
|
-
next_article_label: "Next article"
|
|
61
|
-
related_posts_heading: "Keep reading"
|
|
62
|
-
|
|
63
|
-
theme_features:
|
|
64
|
-
reading_progress: true
|
|
65
|
-
|
|
66
|
-
theme_style:
|
|
67
|
-
accent: "#3b82f6"
|
|
68
|
-
accent_strong: "#2563eb"
|
|
69
|
-
accent_soft: "#dbeafe"
|
|
70
|
-
accent_surface: "#eff6ff"
|
|
71
|
-
success: "#16a34a"
|
|
72
|
-
info: "#2563eb"
|
|
73
|
-
warning: "#d97706"
|
|
74
|
-
danger: "#dc2626"
|
|
75
|
-
background: "#eef4ff"
|
|
76
|
-
surface: "#ffffff"
|
|
77
|
-
text: "#0f172a"
|
|
78
|
-
muted: "#475569"
|
|
79
|
-
border: "#c9d8f2"
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
## Development Quick Start
|
|
83
|
-
|
|
84
|
-
Use this sequence every time you start working on the theme locally.
|
|
85
|
-
|
|
86
|
-
### 1. Prerequisites
|
|
87
|
-
|
|
88
|
-
- Ruby 3.3.4 + Bundler
|
|
89
|
-
- Node.js 24 + npm
|
|
90
|
-
|
|
91
|
-
The project pins runtime versions in:
|
|
92
|
-
|
|
93
|
-
- `.ruby-version`
|
|
94
|
-
- `.nvmrc`
|
|
95
|
-
- `.node-version`
|
|
96
|
-
- `.tool-versions`
|
|
97
|
-
|
|
98
|
-
### 2. Install dependencies
|
|
99
|
-
|
|
100
|
-
```bash
|
|
101
|
-
bundle install
|
|
102
|
-
npm install
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
### 3. Start development
|
|
106
|
-
|
|
107
|
-
Run the theme preview and JS watcher together:
|
|
108
|
-
|
|
109
|
-
```bash
|
|
110
|
-
npm start
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
This runs:
|
|
114
|
-
|
|
115
|
-
- `bundle exec rake preview` to serve the example site from `http://127.0.0.1:4000/example/`
|
|
116
|
-
- `vite build --watch` to rebuild `assets/js/dist/main.js` on JS changes
|
|
117
|
-
|
|
118
|
-
### 4. Day-to-day workflow
|
|
119
|
-
|
|
120
|
-
- Edit layouts/includes/styles in the theme root.
|
|
121
|
-
- Edit sample content under `example/` to verify real pages.
|
|
122
|
-
- Keep `npm start` running while you work.
|
|
123
|
-
|
|
124
|
-
### 5. Useful standalone commands
|
|
125
|
-
|
|
126
|
-
```bash
|
|
127
|
-
npm run rake # Jekyll preview only
|
|
128
|
-
npm run js:build # JS production build
|
|
129
|
-
npm run js:watch # JS watcher only
|
|
130
|
-
```
|
|
23
|
+
Use the local workflow documented in [Getting Started](./docs/getting-started.md#5-local-development).
|
|
131
24
|
|
|
132
25
|
## License
|
|
133
26
|
|
|
134
|
-
The theme is available as open source under the terms of the [MIT License](
|
|
27
|
+
The theme is available as open source under the terms of the [MIT License](./LICENSE.txt).
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{% assign comments = site.theme_comments %}
|
|
2
|
+
{% assign comments_heading = site.theme_text.comments_heading | default: "Discussion" %}
|
|
3
|
+
{% assign comments_toggle_hint = site.theme_text.comments_toggle_hint | default: "Open to view reactions and comments" %}
|
|
4
|
+
{% if comments and comments.enabled and comments.provider == "giscus" %}
|
|
5
|
+
{% assign giscus = comments.giscus %}
|
|
6
|
+
{% assign giscus_host = giscus.host | default: "https://giscus.app" %}
|
|
7
|
+
{% if giscus and giscus.repo and giscus.repo_id and giscus.category and giscus.category_id %}
|
|
8
|
+
<section class="comments-shell" id="comments-section" aria-label="{{ comments_heading }}">
|
|
9
|
+
<div class="comments-shell__inner comments-collapsible" data-comments-collapsible>
|
|
10
|
+
<button class="comments-collapsible__toggle"
|
|
11
|
+
type="button"
|
|
12
|
+
aria-expanded="false"
|
|
13
|
+
aria-controls="comments-panel"
|
|
14
|
+
data-comments-toggle>
|
|
15
|
+
<span class="comments-collapsible__copy">
|
|
16
|
+
<span class="comments-shell__heading">{{ comments_heading }}</span>
|
|
17
|
+
<span class="comments-collapsible__hint">{{ comments_toggle_hint }}</span>
|
|
18
|
+
</span>
|
|
19
|
+
<span class="comments-collapsible__icon-wrap" aria-hidden="true">
|
|
20
|
+
<ion-icon class="comments-collapsible__icon" name="chevron-down-outline"></ion-icon>
|
|
21
|
+
</span>
|
|
22
|
+
</button>
|
|
23
|
+
<div class="comments-collapsible__panel" id="comments-panel" data-comments-panel hidden>
|
|
24
|
+
<div class="comments-collapsible__embed"
|
|
25
|
+
data-giscus-mount
|
|
26
|
+
data-giscus-script-src="{{ giscus_host }}/client.js"
|
|
27
|
+
data-giscus-repo="{{ giscus.repo }}"
|
|
28
|
+
data-giscus-repo-id="{{ giscus.repo_id }}"
|
|
29
|
+
data-giscus-category="{{ giscus.category }}"
|
|
30
|
+
data-giscus-category-id="{{ giscus.category_id }}"
|
|
31
|
+
data-giscus-mapping="{{ giscus.mapping | default: "pathname" }}"
|
|
32
|
+
data-giscus-term="{{ giscus.term }}"
|
|
33
|
+
data-giscus-strict="{{ giscus.strict | default: "0" }}"
|
|
34
|
+
data-giscus-reactions-enabled="{{ giscus.reactions_enabled | default: "1" }}"
|
|
35
|
+
data-giscus-emit-metadata="{{ giscus.emit_metadata | default: "0" }}"
|
|
36
|
+
data-giscus-input-position="{{ giscus.input_position | default: "top" }}"
|
|
37
|
+
data-giscus-theme="{{ giscus.theme | default: "preferred_color_scheme" }}"
|
|
38
|
+
data-giscus-lang="{{ giscus.lang | default: "en" }}"
|
|
39
|
+
data-giscus-loading="{{ giscus.loading | default: "lazy" }}"></div>
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
</section>
|
|
43
|
+
{% endif %}
|
|
44
|
+
{% endif %}
|
data/_includes/post-header.html
CHANGED
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
{% assign back_to_posts_label = site.theme_text.back_to_posts_label | default: "Back to all posts" %}
|
|
3
3
|
<div class="post-header">
|
|
4
4
|
<a class="post-back-link" href="{{ site.baseurl }}/blog">← {{ back_to_posts_label }}</a>
|
|
5
|
-
<
|
|
6
|
-
|
|
5
|
+
<h1 class="post-title">{{ page.title }}</h1>
|
|
6
|
+
{% include post-meta.html date=page.date reading_minutes=read_minutes class_name="post-header__meta post-meta" %}
|
|
7
|
+
<div class="post-header__tags">
|
|
7
8
|
{% assign tags = page.tags %}
|
|
8
9
|
{% include post-tags.html %}
|
|
9
10
|
</div>
|
|
10
|
-
<h1 class="post-title">{{ page.title }}</h1>
|
|
11
11
|
|
|
12
12
|
{% if page.image %}
|
|
13
13
|
<div class="post-image-wrap">
|
|
@@ -22,4 +22,6 @@
|
|
|
22
22
|
{% endif %}
|
|
23
23
|
</div>
|
|
24
24
|
{% endif %}
|
|
25
|
+
|
|
26
|
+
{% include post-series.html %}
|
|
25
27
|
</div>
|
data/_includes/post-item.html
CHANGED
|
@@ -12,9 +12,6 @@
|
|
|
12
12
|
{% endif %}
|
|
13
13
|
<!-- content -->
|
|
14
14
|
<div class="post-card__content">
|
|
15
|
-
<p class="post-card__meta">{{ post.date | date: "%b %-d, %Y" }} · {{ reading_minutes }} min read</p>
|
|
16
|
-
{% assign tags = post.tags %}
|
|
17
|
-
{% include post-tags.html %}
|
|
18
15
|
<!-- title -->
|
|
19
16
|
<h2 class="post-card__title">
|
|
20
17
|
<a class="post-card__title-link"
|
|
@@ -25,6 +22,9 @@
|
|
|
25
22
|
<div class="post-card__excerpt">
|
|
26
23
|
{{ post.excerpt | strip_html | truncatewords: 20 }}
|
|
27
24
|
</div>
|
|
25
|
+
{% include post-meta.html date=post.date reading_minutes=reading_minutes class_name="post-card__meta post-meta" %}
|
|
26
|
+
{% assign tags = post.tags %}
|
|
27
|
+
{% include post-tags.html %}
|
|
28
28
|
<a class="post-card__read-link" href="{{ site.baseurl }}{{ post.url }}">{{ read_article_label }} →</a>
|
|
29
29
|
</div>
|
|
30
30
|
</article>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{% assign meta_class = include.class_name | default: "post-meta" %}
|
|
2
|
+
<p class="{{ meta_class }}">
|
|
3
|
+
<time datetime="{{ include.date | date_to_xmlschema }}">{{ include.date | date: "%b %-d, %Y" }}</time>
|
|
4
|
+
<span class="post-meta__separator" aria-hidden="true">·</span>
|
|
5
|
+
<span class="post-meta__reading-time">
|
|
6
|
+
<ion-icon class="post-meta__icon" name="time-outline" aria-hidden="true"></ion-icon>
|
|
7
|
+
<span>{{ include.reading_minutes }} min read</span>
|
|
8
|
+
</span>
|
|
9
|
+
</p>
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
{% if page.list %}
|
|
2
|
+
{% assign series_name = page.list %}
|
|
3
|
+
{% assign visible_limit = site.theme_features.series_visible_limit | default: 5 %}
|
|
4
|
+
{% assign series_posts = site.posts | where: "list", series_name | sort: "date" %}
|
|
5
|
+
{% assign series_count = series_posts | size %}
|
|
6
|
+
{% assign has_overflow = false %}
|
|
7
|
+
{% assign overflow_count = 0 %}
|
|
8
|
+
{% assign series_toggle_hint = site.theme_text.series_toggle_hint | default: "Collapse to hide series posts" %}
|
|
9
|
+
{% assign series_part_word = "parts" %}
|
|
10
|
+
{% if series_count == 1 %}
|
|
11
|
+
{% assign series_part_word = "part" %}
|
|
12
|
+
{% endif %}
|
|
13
|
+
{% assign series_key = page.url | slugify %}
|
|
14
|
+
{% assign panel_id = "post-series-panel-" | append: series_key %}
|
|
15
|
+
{% assign list_id = "post-series-list-" | append: series_key %}
|
|
16
|
+
{% assign current_position = 0 %}
|
|
17
|
+
{% assign range_mode = "all" %}
|
|
18
|
+
{% assign visible_start = 1 %}
|
|
19
|
+
{% assign visible_end = series_count %}
|
|
20
|
+
{% assign show_edge_start_count = 0 %}
|
|
21
|
+
{% assign show_edge_end_count = 0 %}
|
|
22
|
+
{% assign hidden_before_count = 0 %}
|
|
23
|
+
{% assign hidden_middle_count = 0 %}
|
|
24
|
+
{% assign hidden_after_count = 0 %}
|
|
25
|
+
{% for post in series_posts %}
|
|
26
|
+
{% if post.url == page.url %}
|
|
27
|
+
{% assign current_position = forloop.index %}
|
|
28
|
+
{% endif %}
|
|
29
|
+
{% endfor %}
|
|
30
|
+
{% if series_count > visible_limit %}
|
|
31
|
+
{% assign has_overflow = true %}
|
|
32
|
+
{% assign overflow_count = series_count | minus: visible_limit %}
|
|
33
|
+
{% assign edge_count = visible_limit | divided_by: 2 %}
|
|
34
|
+
{% assign alt_count = visible_limit | minus: edge_count %}
|
|
35
|
+
{% assign end_threshold = series_count | minus: alt_count %}
|
|
36
|
+
{% if current_position <= alt_count %}
|
|
37
|
+
{% assign range_mode = "split" %}
|
|
38
|
+
{% assign show_edge_start_count = alt_count %}
|
|
39
|
+
{% assign show_edge_end_count = edge_count %}
|
|
40
|
+
{% elsif current_position > end_threshold %}
|
|
41
|
+
{% assign range_mode = "split" %}
|
|
42
|
+
{% assign show_edge_end_count = series_count | minus: current_position %}
|
|
43
|
+
{% assign show_edge_end_count = show_edge_end_count | plus: 1 %}
|
|
44
|
+
{% assign show_edge_start_count = visible_limit | minus: show_edge_end_count %}
|
|
45
|
+
{% else %}
|
|
46
|
+
{% assign range_mode = "window" %}
|
|
47
|
+
{% assign visible_start = current_position | minus: edge_count %}
|
|
48
|
+
{% assign visible_end = visible_start | plus: visible_limit %}
|
|
49
|
+
{% assign visible_end = visible_end | minus: 1 %}
|
|
50
|
+
{% if visible_start < 1 %}
|
|
51
|
+
{% assign visible_start = 1 %}
|
|
52
|
+
{% assign visible_end = visible_limit %}
|
|
53
|
+
{% endif %}
|
|
54
|
+
{% if visible_end > series_count %}
|
|
55
|
+
{% assign visible_end = series_count %}
|
|
56
|
+
{% assign visible_start = series_count | minus: visible_limit %}
|
|
57
|
+
{% assign visible_start = visible_start | plus: 1 %}
|
|
58
|
+
{% endif %}
|
|
59
|
+
{% endif %}
|
|
60
|
+
{% endif %}
|
|
61
|
+
{% if has_overflow %}
|
|
62
|
+
{% if range_mode == "split" %}
|
|
63
|
+
{% assign hidden_middle_count = overflow_count %}
|
|
64
|
+
{% elsif range_mode == "window" %}
|
|
65
|
+
{% assign hidden_before_count = visible_start | minus: 1 %}
|
|
66
|
+
{% assign hidden_after_count = series_count | minus: visible_end %}
|
|
67
|
+
{% endif %}
|
|
68
|
+
{% endif %}
|
|
69
|
+
{% assign has_hidden_overflow = false %}
|
|
70
|
+
{% if overflow_count > 0 %}
|
|
71
|
+
{% assign has_hidden_overflow = true %}
|
|
72
|
+
{% endif %}
|
|
73
|
+
<div class="post-series series-collapsible is-open" data-series-collapsible>
|
|
74
|
+
<div class="post-series__header">
|
|
75
|
+
<div class="post-series__heading-wrap">
|
|
76
|
+
<span class="post-series__heading">{{ series_name }}</span>
|
|
77
|
+
<span class="post-series__summary">{{ series_count }} {{ series_part_word }}</span>
|
|
78
|
+
</div>
|
|
79
|
+
<button class="series-collapsible__toggle"
|
|
80
|
+
type="button"
|
|
81
|
+
aria-label="{{ series_toggle_hint }}"
|
|
82
|
+
aria-expanded="true"
|
|
83
|
+
aria-controls="{{ panel_id }}"
|
|
84
|
+
data-series-toggle>
|
|
85
|
+
<span class="series-collapsible__icon-wrap" aria-hidden="true">
|
|
86
|
+
<ion-icon class="series-collapsible__icon" name="chevron-down-outline"></ion-icon>
|
|
87
|
+
</span>
|
|
88
|
+
</button>
|
|
89
|
+
</div>
|
|
90
|
+
<div class="series-collapsible__panel" id="{{ panel_id }}" data-series-panel>
|
|
91
|
+
<ol class="post-series__list" id="{{ list_id }}">
|
|
92
|
+
{% assign overflow_middle_toggle_inserted = false %}
|
|
93
|
+
{% assign overflow_before_toggle_inserted = false %}
|
|
94
|
+
{% assign overflow_after_toggle_inserted = false %}
|
|
95
|
+
{% for post in series_posts %}
|
|
96
|
+
{% assign is_overflow_item = false %}
|
|
97
|
+
{% assign should_hide = false %}
|
|
98
|
+
{% assign overflow_group = "" %}
|
|
99
|
+
{% if has_overflow %}
|
|
100
|
+
{% if range_mode == "split" %}
|
|
101
|
+
{% assign split_end_start = series_count | minus: show_edge_end_count %}
|
|
102
|
+
{% assign split_end_start = split_end_start | plus: 1 %}
|
|
103
|
+
{% if forloop.index > show_edge_start_count and forloop.index < split_end_start %}
|
|
104
|
+
{% assign should_hide = true %}
|
|
105
|
+
{% assign overflow_group = "middle" %}
|
|
106
|
+
{% endif %}
|
|
107
|
+
{% elsif range_mode == "window" %}
|
|
108
|
+
{% if forloop.index < visible_start %}
|
|
109
|
+
{% assign should_hide = true %}
|
|
110
|
+
{% assign overflow_group = "before" %}
|
|
111
|
+
{% elsif forloop.index > visible_end %}
|
|
112
|
+
{% assign should_hide = true %}
|
|
113
|
+
{% assign overflow_group = "after" %}
|
|
114
|
+
{% endif %}
|
|
115
|
+
{% endif %}
|
|
116
|
+
{% endif %}
|
|
117
|
+
{% if should_hide %}
|
|
118
|
+
{% assign is_overflow_item = true %}
|
|
119
|
+
{% endif %}
|
|
120
|
+
{% if has_hidden_overflow and overflow_group == "middle" and overflow_middle_toggle_inserted == false %}
|
|
121
|
+
{% assign middle_label = "other posts" %}
|
|
122
|
+
{% if hidden_middle_count == 1 %}
|
|
123
|
+
{% assign middle_label = "other post" %}
|
|
124
|
+
{% endif %}
|
|
125
|
+
<li class="post-series__overflow-item">
|
|
126
|
+
<button class="post-series__overflow-toggle"
|
|
127
|
+
type="button"
|
|
128
|
+
aria-controls="{{ list_id }}"
|
|
129
|
+
data-series-overflow-group="middle"
|
|
130
|
+
data-series-overflow-toggle>
|
|
131
|
+
… {{ hidden_middle_count }} {{ middle_label }}
|
|
132
|
+
</button>
|
|
133
|
+
</li>
|
|
134
|
+
{% assign overflow_middle_toggle_inserted = true %}
|
|
135
|
+
{% endif %}
|
|
136
|
+
{% if has_hidden_overflow and overflow_group == "before" and overflow_before_toggle_inserted == false %}
|
|
137
|
+
{% assign before_label = "previous posts" %}
|
|
138
|
+
{% if hidden_before_count == 1 %}
|
|
139
|
+
{% assign before_label = "previous post" %}
|
|
140
|
+
{% endif %}
|
|
141
|
+
<li class="post-series__overflow-item">
|
|
142
|
+
<button class="post-series__overflow-toggle"
|
|
143
|
+
type="button"
|
|
144
|
+
aria-controls="{{ list_id }}"
|
|
145
|
+
data-series-overflow-group="before"
|
|
146
|
+
data-series-overflow-toggle>
|
|
147
|
+
… {{ hidden_before_count }} {{ before_label }}
|
|
148
|
+
</button>
|
|
149
|
+
</li>
|
|
150
|
+
{% assign overflow_before_toggle_inserted = true %}
|
|
151
|
+
{% endif %}
|
|
152
|
+
{% if has_hidden_overflow and overflow_group == "after" and overflow_after_toggle_inserted == false %}
|
|
153
|
+
{% assign after_label = "next posts" %}
|
|
154
|
+
{% if hidden_after_count == 1 %}
|
|
155
|
+
{% assign after_label = "next post" %}
|
|
156
|
+
{% endif %}
|
|
157
|
+
<li class="post-series__overflow-item">
|
|
158
|
+
<button class="post-series__overflow-toggle"
|
|
159
|
+
type="button"
|
|
160
|
+
aria-controls="{{ list_id }}"
|
|
161
|
+
data-series-overflow-group="after"
|
|
162
|
+
data-series-overflow-toggle>
|
|
163
|
+
… {{ hidden_after_count }} {{ after_label }}
|
|
164
|
+
</button>
|
|
165
|
+
</li>
|
|
166
|
+
{% assign overflow_after_toggle_inserted = true %}
|
|
167
|
+
{% endif %}
|
|
168
|
+
{% assign item_class = "post-series__item" %}
|
|
169
|
+
{% if post.url == page.url %}
|
|
170
|
+
{% assign item_class = item_class | append: " is-current" %}
|
|
171
|
+
{% endif %}
|
|
172
|
+
{% if is_overflow_item %}
|
|
173
|
+
{% assign item_class = item_class | append: " post-series__item--overflow" %}
|
|
174
|
+
{% endif %}
|
|
175
|
+
<li class="{{ item_class }}"{% if is_overflow_item %} data-series-overflow-item data-series-overflow-group="{{ overflow_group }}" hidden{% endif %}>
|
|
176
|
+
{% if post.url == page.url %}
|
|
177
|
+
<span class="post-series__link"
|
|
178
|
+
aria-current="true">
|
|
179
|
+
<span class="post-series__index" aria-hidden="true">{{ forloop.index }}</span>
|
|
180
|
+
<span class="post-series__title">{{ post.title }}</span>
|
|
181
|
+
</span>
|
|
182
|
+
{% else %}
|
|
183
|
+
<a class="post-series__link"
|
|
184
|
+
href="{{ site.baseurl }}{{ post.url }}">
|
|
185
|
+
<span class="post-series__index" aria-hidden="true">{{ forloop.index }}</span>
|
|
186
|
+
<span class="post-series__title">{{ post.title }}</span>
|
|
187
|
+
</a>
|
|
188
|
+
{% endif %}
|
|
189
|
+
</li>
|
|
190
|
+
{% endfor %}
|
|
191
|
+
</ol>
|
|
192
|
+
</div>
|
|
193
|
+
</div>
|
|
194
|
+
{% endif %}
|
data/_layouts/post.html
CHANGED
data/_sass/components/_core.scss
CHANGED
|
@@ -396,11 +396,37 @@
|
|
|
396
396
|
}
|
|
397
397
|
|
|
398
398
|
.post-card__meta {
|
|
399
|
-
margin
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
399
|
+
margin: 0.7rem 0 0.55rem;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
.post-meta {
|
|
403
|
+
display: inline-flex;
|
|
404
|
+
flex-wrap: wrap;
|
|
405
|
+
align-items: center;
|
|
406
|
+
gap: 0.35rem;
|
|
407
|
+
color: color-mix(in srgb, var(--color-muted) 92%, var(--color-text) 8%);
|
|
408
|
+
font-size: 0.82rem;
|
|
409
|
+
font-weight: 500;
|
|
410
|
+
letter-spacing: 0;
|
|
411
|
+
line-height: 1.35;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
.post-meta__separator {
|
|
415
|
+
opacity: 0.75;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
.post-meta__reading-time {
|
|
419
|
+
display: inline-flex;
|
|
420
|
+
align-items: center;
|
|
421
|
+
gap: 0.24rem;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
.post-meta__icon {
|
|
425
|
+
flex: 0 0 auto;
|
|
426
|
+
width: 0.72rem;
|
|
427
|
+
height: 0.72rem;
|
|
428
|
+
fill: currentColor;
|
|
429
|
+
opacity: 0.82;
|
|
404
430
|
}
|
|
405
431
|
|
|
406
432
|
.post-tags {
|
|
@@ -426,7 +452,7 @@
|
|
|
426
452
|
}
|
|
427
453
|
|
|
428
454
|
.post-card__title {
|
|
429
|
-
margin-bottom:
|
|
455
|
+
margin-bottom: 0.85rem;
|
|
430
456
|
font-family: "Manrope", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
|
431
457
|
font-size: 1.875rem;
|
|
432
458
|
font-weight: 900;
|
|
@@ -449,6 +475,10 @@
|
|
|
449
475
|
color: var(--color-muted);
|
|
450
476
|
}
|
|
451
477
|
|
|
478
|
+
.post-card .post-tags {
|
|
479
|
+
margin-bottom: 0.95rem;
|
|
480
|
+
}
|
|
481
|
+
|
|
452
482
|
.post-card__read-link {
|
|
453
483
|
display: inline-block;
|
|
454
484
|
margin-top: 1rem;
|
|
@@ -474,6 +504,15 @@
|
|
|
474
504
|
font-weight: 900;
|
|
475
505
|
}
|
|
476
506
|
|
|
507
|
+
.post-header__meta {
|
|
508
|
+
margin: 0 0 0.65rem;
|
|
509
|
+
font-size: 0.86rem;
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
.post-header__tags .post-tags {
|
|
513
|
+
margin-bottom: 1.1rem;
|
|
514
|
+
}
|
|
515
|
+
|
|
477
516
|
.post-meta-row {
|
|
478
517
|
display: flex;
|
|
479
518
|
flex-wrap: wrap;
|
|
@@ -530,6 +569,7 @@
|
|
|
530
569
|
|
|
531
570
|
.post-page .post-header,
|
|
532
571
|
.post-page .content-shell,
|
|
572
|
+
.post-page .comments-shell__inner,
|
|
533
573
|
.post-page .post-navigation-shell__inner,
|
|
534
574
|
.post-page .related-posts-shell__inner {
|
|
535
575
|
width: min(100% - 2rem, 880px);
|
|
@@ -551,19 +591,187 @@
|
|
|
551
591
|
font-size: 0.9rem;
|
|
552
592
|
}
|
|
553
593
|
|
|
554
|
-
.post-
|
|
555
|
-
margin-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
594
|
+
.post-series {
|
|
595
|
+
margin-top: 0.85rem;
|
|
596
|
+
margin-bottom: 0.35rem;
|
|
597
|
+
overflow: hidden;
|
|
598
|
+
border: 1px solid color-mix(in srgb, var(--color-border) 84%, #c9d6ff 16%);
|
|
599
|
+
border-radius: 0.8rem;
|
|
600
|
+
background: color-mix(in srgb, var(--color-brand-soft) 10%, var(--color-surface) 90%);
|
|
559
601
|
}
|
|
560
602
|
|
|
561
|
-
.post-
|
|
562
|
-
|
|
563
|
-
|
|
603
|
+
.post-series__header {
|
|
604
|
+
display: flex;
|
|
605
|
+
align-items: center;
|
|
606
|
+
justify-content: space-between;
|
|
607
|
+
gap: 0.8rem;
|
|
608
|
+
padding: 0.8rem 0.95rem;
|
|
609
|
+
border-bottom: 1px solid color-mix(in srgb, var(--color-border) 84%, #c9d6ff 16%);
|
|
610
|
+
background: color-mix(in srgb, var(--color-brand-soft) 15%, #fff 85%);
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
.post-series__heading-wrap {
|
|
614
|
+
min-width: 0;
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
.series-collapsible__toggle {
|
|
618
|
+
display: flex;
|
|
619
|
+
align-items: center;
|
|
620
|
+
justify-content: center;
|
|
621
|
+
padding: 0;
|
|
622
|
+
border: 0;
|
|
623
|
+
background: transparent;
|
|
624
|
+
cursor: pointer;
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
.post-series__heading {
|
|
628
|
+
display: block;
|
|
629
|
+
margin-bottom: 0.1rem;
|
|
630
|
+
font-size: clamp(1.02rem, 1.6vw, 1.2rem);
|
|
631
|
+
font-weight: 700;
|
|
632
|
+
line-height: 1.3;
|
|
633
|
+
color: var(--color-text);
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
.post-series__summary {
|
|
637
|
+
display: block;
|
|
638
|
+
color: var(--color-muted);
|
|
639
|
+
font-size: 0.82rem;
|
|
564
640
|
font-weight: 600;
|
|
565
|
-
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
.series-collapsible__icon-wrap {
|
|
644
|
+
display: inline-flex;
|
|
645
|
+
align-items: center;
|
|
646
|
+
justify-content: center;
|
|
647
|
+
width: 1.8rem;
|
|
648
|
+
height: 1.8rem;
|
|
649
|
+
border: 1px solid color-mix(in srgb, var(--color-border) 84%, #c9d6ff 16%);
|
|
650
|
+
border-radius: 999px;
|
|
651
|
+
color: var(--color-muted);
|
|
652
|
+
transition: color 0.2s ease, border-color 0.2s ease;
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
.series-collapsible__icon {
|
|
656
|
+
font-size: 0.9rem;
|
|
657
|
+
transition: transform 0.2s ease;
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
.series-collapsible__panel {
|
|
661
|
+
margin-top: 0;
|
|
662
|
+
padding-top: 0;
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
.series-collapsible.is-open .series-collapsible__icon {
|
|
666
|
+
transform: rotate(180deg);
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
.series-collapsible__toggle:hover .series-collapsible__icon-wrap {
|
|
670
|
+
color: var(--color-brand);
|
|
671
|
+
border-color: color-mix(in srgb, var(--color-brand) 48%, var(--color-border) 52%);
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
.series-collapsible__toggle:focus-visible {
|
|
675
|
+
outline: 2px solid color-mix(in srgb, var(--color-brand) 55%, white 45%);
|
|
676
|
+
outline-offset: 0.4rem;
|
|
677
|
+
border-radius: 0.5rem;
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
.post-series__list {
|
|
681
|
+
margin: 0;
|
|
682
|
+
padding: 0;
|
|
683
|
+
list-style: none;
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
.post-series__item {
|
|
687
|
+
border-bottom: 1px solid color-mix(in srgb, var(--color-border) 84%, #c9d6ff 16%);
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
.post-series__link {
|
|
691
|
+
display: flex;
|
|
692
|
+
align-items: center;
|
|
693
|
+
gap: 0.75rem;
|
|
694
|
+
padding: 0.72rem 0.95rem;
|
|
695
|
+
color: var(--color-text);
|
|
696
|
+
font-weight: 500;
|
|
697
|
+
text-decoration: none;
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
.post-series__index {
|
|
701
|
+
display: inline-flex;
|
|
702
|
+
align-items: center;
|
|
703
|
+
justify-content: center;
|
|
704
|
+
flex: 0 0 auto;
|
|
705
|
+
width: 2rem;
|
|
706
|
+
height: 2rem;
|
|
707
|
+
border-radius: 999px;
|
|
566
708
|
color: var(--color-muted);
|
|
709
|
+
background: color-mix(in srgb, var(--color-border) 58%, #fff 42%);
|
|
710
|
+
font-size: 1.1rem;
|
|
711
|
+
line-height: 1;
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
.post-series__title {
|
|
715
|
+
font-size: clamp(0.98rem, 1.4vw, 1.08rem);
|
|
716
|
+
line-height: 1.45;
|
|
717
|
+
color: var(--color-text);
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
.post-series__item.is-current .post-series__link {
|
|
721
|
+
position: relative;
|
|
722
|
+
background: color-mix(in srgb, var(--color-brand-soft) 24%, #fff 76%);
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
.post-series__item.is-current .post-series__title {
|
|
726
|
+
color: color-mix(in srgb, var(--color-brand-strong) 35%, var(--color-text) 65%);
|
|
727
|
+
font-weight: 800;
|
|
728
|
+
}
|
|
729
|
+
|
|
730
|
+
.post-series__item.is-current .post-series__index {
|
|
731
|
+
color: var(--color-brand-strong);
|
|
732
|
+
background: color-mix(in srgb, var(--color-brand-soft) 40%, #fff 60%);
|
|
733
|
+
border: 1px solid color-mix(in srgb, var(--color-brand) 45%, var(--color-border) 55%);
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
.post-series__item.is-current .post-series__link::before {
|
|
737
|
+
position: absolute;
|
|
738
|
+
top: 0.5rem;
|
|
739
|
+
bottom: 0.5rem;
|
|
740
|
+
left: 0;
|
|
741
|
+
width: 3px;
|
|
742
|
+
border-radius: 0 999px 999px 0;
|
|
743
|
+
background: color-mix(in srgb, var(--color-brand) 82%, #fff 18%);
|
|
744
|
+
content: "";
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
.post-series__overflow-toggle {
|
|
748
|
+
width: 100%;
|
|
749
|
+
margin: 0;
|
|
750
|
+
border: 0;
|
|
751
|
+
border-top: 1px solid color-mix(in srgb, var(--color-border) 84%, #c9d6ff 16%);
|
|
752
|
+
padding: 0.72rem 0.95rem 0.78rem;
|
|
753
|
+
color: var(--color-brand-strong);
|
|
754
|
+
background: color-mix(in srgb, var(--color-brand-soft) 12%, #fff 88%);
|
|
755
|
+
font-size: 0.92rem;
|
|
756
|
+
font-weight: 600;
|
|
757
|
+
text-align: left;
|
|
758
|
+
cursor: pointer;
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
.post-series__overflow-item {
|
|
762
|
+
border-bottom: 1px solid color-mix(in srgb, var(--color-border) 84%, #c9d6ff 16%);
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
.post-series__overflow-toggle:hover {
|
|
766
|
+
color: var(--color-brand);
|
|
767
|
+
background: color-mix(in srgb, var(--color-brand-soft) 20%, #fff 80%);
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
.post-page .post-title {
|
|
771
|
+
margin-bottom: 0.95rem;
|
|
772
|
+
font-size: clamp(2rem, 4.8vw, 3.25rem);
|
|
773
|
+
line-height: 1.15;
|
|
774
|
+
letter-spacing: -0.015em;
|
|
567
775
|
}
|
|
568
776
|
|
|
569
777
|
.post-page .post-image-wrap {
|
|
@@ -591,18 +799,98 @@
|
|
|
591
799
|
}
|
|
592
800
|
|
|
593
801
|
.post-page .post-navigation-shell,
|
|
594
|
-
.post-page .related-posts-shell
|
|
802
|
+
.post-page .related-posts-shell,
|
|
803
|
+
.post-page .comments-shell {
|
|
595
804
|
margin-top: 1rem;
|
|
596
805
|
}
|
|
597
806
|
|
|
807
|
+
.post-page .comments-shell__inner,
|
|
598
808
|
.post-page .post-navigation-shell__inner,
|
|
599
809
|
.post-page .related-posts-shell__inner {
|
|
810
|
+
margin-inline: auto;
|
|
600
811
|
padding: 1.1rem;
|
|
601
812
|
border: 1px solid color-mix(in srgb, var(--color-border) 84%, #c9d6ff 16%);
|
|
602
813
|
border-radius: 1rem;
|
|
603
814
|
background: #fff;
|
|
604
815
|
}
|
|
605
816
|
|
|
817
|
+
.post-page .comments-shell__inner {
|
|
818
|
+
padding: 2rem 2rem 1.8rem;
|
|
819
|
+
}
|
|
820
|
+
|
|
821
|
+
.comments-shell__heading {
|
|
822
|
+
display: block;
|
|
823
|
+
margin-bottom: 0.3rem;
|
|
824
|
+
font-size: 1.3rem;
|
|
825
|
+
font-weight: 800;
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
.comments-collapsible {
|
|
829
|
+
padding-top: 1.15rem;
|
|
830
|
+
padding-bottom: 1.15rem;
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
.comments-collapsible__toggle {
|
|
834
|
+
display: flex;
|
|
835
|
+
align-items: center;
|
|
836
|
+
justify-content: space-between;
|
|
837
|
+
width: 100%;
|
|
838
|
+
padding: 0;
|
|
839
|
+
border: 0;
|
|
840
|
+
background: transparent;
|
|
841
|
+
text-align: left;
|
|
842
|
+
cursor: pointer;
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
.comments-collapsible__copy {
|
|
846
|
+
display: block;
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
.comments-collapsible__hint {
|
|
850
|
+
display: block;
|
|
851
|
+
color: var(--color-muted);
|
|
852
|
+
font-size: 0.9rem;
|
|
853
|
+
font-weight: 600;
|
|
854
|
+
}
|
|
855
|
+
|
|
856
|
+
.comments-collapsible__icon-wrap {
|
|
857
|
+
display: inline-flex;
|
|
858
|
+
align-items: center;
|
|
859
|
+
justify-content: center;
|
|
860
|
+
width: 2rem;
|
|
861
|
+
height: 2rem;
|
|
862
|
+
border: 1px solid color-mix(in srgb, var(--color-border) 84%, #c9d6ff 16%);
|
|
863
|
+
border-radius: 999px;
|
|
864
|
+
color: var(--color-muted);
|
|
865
|
+
transition: color 0.2s ease, border-color 0.2s ease;
|
|
866
|
+
}
|
|
867
|
+
|
|
868
|
+
.comments-collapsible__icon {
|
|
869
|
+
font-size: 1rem;
|
|
870
|
+
transition: transform 0.2s ease;
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
.comments-collapsible__panel {
|
|
874
|
+
margin-top: 0.95rem;
|
|
875
|
+
padding-top: 1rem;
|
|
876
|
+
border-top: 1px solid color-mix(in srgb, var(--color-border) 84%, #c9d6ff 16%);
|
|
877
|
+
}
|
|
878
|
+
|
|
879
|
+
.comments-collapsible.is-open .comments-collapsible__icon {
|
|
880
|
+
transform: rotate(180deg);
|
|
881
|
+
}
|
|
882
|
+
|
|
883
|
+
.comments-collapsible__toggle:hover .comments-collapsible__icon-wrap {
|
|
884
|
+
color: var(--color-brand);
|
|
885
|
+
border-color: color-mix(in srgb, var(--color-brand) 48%, var(--color-border) 52%);
|
|
886
|
+
}
|
|
887
|
+
|
|
888
|
+
.comments-collapsible__toggle:focus-visible {
|
|
889
|
+
outline: 2px solid color-mix(in srgb, var(--color-brand) 55%, white 45%);
|
|
890
|
+
outline-offset: 0.4rem;
|
|
891
|
+
border-radius: 0.5rem;
|
|
892
|
+
}
|
|
893
|
+
|
|
606
894
|
.post-page .post-navigation {
|
|
607
895
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
608
896
|
gap: 0.9rem;
|
|
@@ -1476,22 +1764,45 @@
|
|
|
1476
1764
|
padding: 1.2rem 1rem 0.95rem;
|
|
1477
1765
|
}
|
|
1478
1766
|
|
|
1767
|
+
.post-series__header,
|
|
1768
|
+
.post-series__link,
|
|
1769
|
+
.post-series__overflow-toggle {
|
|
1770
|
+
padding-left: 0.95rem;
|
|
1771
|
+
padding-right: 0.95rem;
|
|
1772
|
+
}
|
|
1773
|
+
|
|
1479
1774
|
.post-page .content-shell {
|
|
1480
1775
|
padding: 1.25rem 1rem 1.1rem;
|
|
1481
1776
|
}
|
|
1482
1777
|
|
|
1483
1778
|
.post-page .post-header,
|
|
1484
1779
|
.post-page .content-shell,
|
|
1780
|
+
.post-page .comments-shell__inner,
|
|
1485
1781
|
.post-page .post-navigation-shell__inner,
|
|
1486
1782
|
.post-page .related-posts-shell__inner {
|
|
1487
1783
|
width: min(100% - 2rem, 880px);
|
|
1488
1784
|
}
|
|
1489
1785
|
|
|
1786
|
+
.post-page .comments-shell__inner,
|
|
1490
1787
|
.post-page .post-navigation-shell__inner,
|
|
1491
1788
|
.post-page .related-posts-shell__inner {
|
|
1492
1789
|
padding: 0.9rem;
|
|
1493
1790
|
}
|
|
1494
1791
|
|
|
1792
|
+
.post-page .comments-shell__inner {
|
|
1793
|
+
padding: 1.25rem 1rem 1.1rem;
|
|
1794
|
+
}
|
|
1795
|
+
|
|
1796
|
+
.comments-shell__heading {
|
|
1797
|
+
font-size: 1.16rem;
|
|
1798
|
+
}
|
|
1799
|
+
|
|
1800
|
+
.comments-collapsible__icon-wrap,
|
|
1801
|
+
.series-collapsible__icon-wrap {
|
|
1802
|
+
width: 1.85rem;
|
|
1803
|
+
height: 1.85rem;
|
|
1804
|
+
}
|
|
1805
|
+
|
|
1495
1806
|
.post-page .post-navigation {
|
|
1496
1807
|
grid-template-columns: 1fr;
|
|
1497
1808
|
}
|
data/assets/js/dist/main.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(){"use strict";let P;const _t=()=>{if(typeof window>"u")return new Map;if(!P){const t=window;t.Ionicons=t.Ionicons||{},P=t.Ionicons.map=t.Ionicons.map||new Map}return P},Lt=t=>{Object.keys(t).forEach(e=>{K(e,t[e]);const s=e.replace(/([a-z0-9]|(?=[A-Z]))([A-Z0-9])/g,"$1-$2").toLowerCase();e!==s&&K(s,t[e])})},K=(t,e)=>{const s=_t(),n=s.get(t);n===void 0?s.set(t,e):n!==e&&console.warn(`[Ionicons Warning]: Multiple icons were mapped to name "${t}". Ensure that multiple icons are not mapped to the same icon name.`)},Mt="ionicons",x={hydratedSelectorName:"hydrated",lazyLoad:!1,updatable:!0};var It=Object.defineProperty,Ot=(t,e)=>{for(var s in e)It(t,s,{get:e[s],enumerable:!0})},y=t=>{if(t.__stencil__getHostRef)return t.__stencil__getHostRef()},Tt=(t,e)=>{const s={$flags$:0,$hostElement$:t,$cmpMeta$:e,$instanceValues$:new Map};s.$onReadyPromise$=new Promise(o=>s.$onReadyResolve$=o),t["s-p"]=[],t["s-rc"]=[];const n=s;return t.__stencil__getHostRef=()=>n,n},J=(t,e)=>e in t,A=(t,e)=>(0,console.error)(t,e),_=new Map,Ct="slot-fb{display:contents}slot-fb[hidden]{display:none}",Q="http://www.w3.org/1999/xlink",h=typeof window<"u"?window:{},Ht=h.HTMLElement||class{},v={$flags$:0,$resourcesUrl$:"",jmp:t=>t(),raf:t=>requestAnimationFrame(t),ael:(t,e,s,n)=>t.addEventListener(e,s,n),rel:(t,e,s,n)=>t.removeEventListener(e,s,n),ce:(t,e)=>new CustomEvent(t,e)},Pt=t=>Promise.resolve(t),V=(()=>{try{return new CSSStyleSheet,typeof new CSSStyleSheet().replaceSync=="function"}catch{}return!1})(),U=!1,N=[],tt=[],Ut=(t,e)=>s=>{t.push(s),U||(U=!0,v.raf(nt))},et=t=>{for(let e=0;e<t.length;e++)try{t[e](performance.now())}catch(s){A(s)}t.length=0},nt=()=>{et(N),et(tt),(U=N.length>0)&&v.raf(nt)},j=t=>Pt().then(t),jt=Ut(tt),qt=t=>{const e=new URL(t,v.$resourcesUrl$);return e.origin!==h.location.origin?e.href:e.pathname},q=t=>(t=typeof t,t==="object"||t==="function");function zt(t){var e,s,n;return(n=(s=(e=t.head)==null?void 0:e.querySelector('meta[name="csp-nonce"]'))==null?void 0:s.getAttribute("content"))!=null?n:void 0}var Rt=t=>t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),Bt={};Ot(Bt,{err:()=>st,map:()=>Dt,ok:()=>z,unwrap:()=>Wt,unwrapErr:()=>Xt});var z=t=>({isOk:!0,isErr:!1,value:t}),st=t=>({isOk:!1,isErr:!0,value:t});function Dt(t,e){if(t.isOk){const s=e(t.value);return s instanceof Promise?s.then(n=>z(n)):z(s)}if(t.isErr){const s=t.value;return st(s)}throw"should never get here"}var Wt=t=>{if(t.isOk)return t.value;throw t.value},Xt=t=>{if(t.isErr)return t.value;throw t.value};function Be(t){}var L;function Zt(t){var e;const s=this.attachShadow({mode:"open"});L===void 0&&(L=(e=void 0)!=null?e:null),L&&s.adoptedStyleSheets.push(L)}var w=(t,e="")=>()=>{},m=new WeakMap,Ft=(t,e,s)=>{let n=_.get(t);V&&s?(n=n||new CSSStyleSheet,typeof n=="string"?n=e:n.replaceSync(e)):n=e,_.set(t,n)},Yt=(t,e,s)=>{var n;const o=ot(e),i=_.get(o);if(!h.document)return o;if(t=t.nodeType===11?t:h.document,i)if(typeof i=="string"){t=t.head||t;let l=m.get(t),r;if(l||m.set(t,l=new Set),!l.has(o)){{r=h.document.createElement("style"),r.innerHTML=i;const a=(n=v.$nonce$)!=null?n:zt(h.document);if(a!=null&&r.setAttribute("nonce",a),!(e.$flags$&1))if(t.nodeName==="HEAD"){const c=t.querySelectorAll("link[rel=preconnect]"),d=c.length>0?c[c.length-1].nextSibling:t.querySelector("style");t.insertBefore(r,d?.parentNode===t?d:null)}else if("host"in t)if(V){const c=new CSSStyleSheet;c.replaceSync(i),t.adoptedStyleSheets.unshift(c)}else{const c=t.querySelector("style");c?c.innerHTML=i+c.innerHTML:t.prepend(r)}else t.append(r);e.$flags$&1&&t.insertBefore(r,null)}e.$flags$&4&&(r.innerHTML+=Ct),l&&l.add(o)}}else t.adoptedStyleSheets.includes(i)||t.adoptedStyleSheets.push(i);return o},Gt=t=>{const e=t.$cmpMeta$,s=t.$hostElement$,n=e.$flags$,o=w("attachStyles",e.$tagName$),i=Yt(s.shadowRoot?s.shadowRoot:s.getRootNode(),e);n&10&&(s["s-sc"]=i,s.classList.add(i+"-h")),o()},ot=(t,e)=>"sc-"+t.$tagName$,M=(t,e,...s)=>{let n=null,o=null,i=!1,l=!1;const r=[],a=d=>{for(let f=0;f<d.length;f++)n=d[f],Array.isArray(n)?a(n):n!=null&&typeof n!="boolean"&&((i=typeof t!="function"&&!q(n))&&(n=String(n)),i&&l?r[r.length-1].$text$+=n:r.push(i?R(null,n):n),l=i)};if(a(s),e){e.key&&(o=e.key);{const d=e.className||e.class;d&&(e.class=typeof d!="object"?d:Object.keys(d).filter(f=>d[f]).join(" "))}}const c=R(t,null);return c.$attrs$=e,r.length>0&&(c.$children$=r),c.$key$=o,c},R=(t,e)=>{const s={$flags$:0,$tag$:t,$text$:e,$elm$:null,$children$:null};return s.$attrs$=null,s.$key$=null,s},it={},Kt=t=>t&&t.$tag$===it,B=t=>{const e=Rt(t);return new RegExp(`(^|[^@]|@(?!supports\\s+selector\\s*\\([^{]*?${e}))(${e}\\b)`,"g")};B("::slotted"),B(":host"),B(":host-context");var rt=(t,e,s)=>t!=null&&!q(t)?e&4?t==="false"?!1:t===""||!!t:e&1?String(t):t:t,Jt=(t,e,s)=>{const n=v.ce(e,s);return t.dispatchEvent(n),n},ct=(t,e,s,n,o,i,l)=>{if(s===n)return;let r=J(t,e),a=e.toLowerCase();if(e==="class"){const c=t.classList,d=lt(s);let f=lt(n);c.remove(...d.filter(u=>u&&!f.includes(u))),c.add(...f.filter(u=>u&&!d.includes(u)))}else if(e==="style"){for(const c in s)(!n||n[c]==null)&&(c.includes("-")?t.style.removeProperty(c):t.style[c]="");for(const c in n)(!s||n[c]!==s[c])&&(c.includes("-")?t.style.setProperty(c,n[c]):t.style[c]=n[c])}else if(e!=="key")if(e==="ref")n&&n(t);else if(!t.__lookupSetter__(e)&&e[0]==="o"&&e[1]==="n"){if(e[2]==="-"?e=e.slice(3):J(h,a)?e=a.slice(2):e=a[2]+e.slice(3),s||n){const c=e.endsWith(at);e=e.replace(Vt,""),s&&v.rel(t,e,s,c),n&&v.ael(t,e,n,c)}}else{const c=q(n);if(r||c&&n!==null)try{if(t.tagName.includes("-"))t[e]!==n&&(t[e]=n);else{const f=n??"";e==="list"?r=!1:(s==null||t[e]!=f)&&(typeof t.__lookupSetter__(e)=="function"?t[e]=f:t.setAttribute(e,f))}}catch{}let d=!1;a!==(a=a.replace(/^xlink\:?/,""))&&(e=a,d=!0),n==null||n===!1?(n!==!1||t.getAttribute(e)==="")&&(d?t.removeAttributeNS(Q,e):t.removeAttribute(e)):(!r||i&4||o)&&!c&&t.nodeType===1&&(n=n===!0?"":n,d?t.setAttributeNS(Q,e,n):t.setAttribute(e,n))}},Qt=/\s/,lt=t=>(typeof t=="object"&&t&&"baseVal"in t&&(t=t.baseVal),!t||typeof t!="string"?[]:t.split(Qt)),at="Capture",Vt=new RegExp(at+"$"),dt=(t,e,s,n)=>{const o=e.$elm$.nodeType===11&&e.$elm$.host?e.$elm$.host:e.$elm$,i=t&&t.$attrs$||{},l=e.$attrs$||{};for(const r of ft(Object.keys(i)))r in l||ct(o,r,i[r],void 0,s,e.$flags$);for(const r of ft(Object.keys(l)))ct(o,r,i[r],l[r],s,e.$flags$)};function ft(t){return t.includes("ref")?[...t.filter(e=>e!=="ref"),"ref"]:t}var D,ut=!1,I=(t,e,s)=>{const n=e.$children$[s];let o=0,i,l;if(n.$text$!==null)i=n.$elm$=h.document.createTextNode(n.$text$);else{if(!h.document)throw new Error("You are trying to render a Stencil component in an environment that doesn't support the DOM. Make sure to populate the [`window`](https://developer.mozilla.org/en-US/docs/Web/API/Window/window) object before rendering a component.");if(i=n.$elm$=h.document.createElement(n.$tag$),dt(null,n,ut),n.$children$)for(o=0;o<n.$children$.length;++o)l=I(t,n,o),l&&i.appendChild(l)}return i["s-hn"]=D,i},$t=(t,e,s,n,o,i)=>{let l=t,r;for(l.shadowRoot&&l.tagName===D&&(l=l.shadowRoot);o<=i;++o)n[o]&&(r=I(null,s,o),r&&(n[o].$elm$=r,T(l,r,e)))},ht=(t,e,s)=>{for(let n=e;n<=s;++n){const o=t[n];if(o){const i=o.$elm$;pt(o),i&&i.remove()}}},Nt=(t,e,s,n,o=!1)=>{let i=0,l=0,r=0,a=0,c=e.length-1,d=e[0],f=e[c],u=n.length-1,$=n[0],p=n[u],g,E;for(;i<=c&&l<=u;)if(d==null)d=e[++i];else if(f==null)f=e[--c];else if($==null)$=n[++l];else if(p==null)p=n[--u];else if(O(d,$,o))S(d,$,o),d=e[++i],$=n[++l];else if(O(f,p,o))S(f,p,o),f=e[--c],p=n[--u];else if(O(d,p,o))S(d,p,o),T(t,d.$elm$,f.$elm$.nextSibling),d=e[++i],p=n[--u];else if(O(f,$,o))S(f,$,o),T(t,f.$elm$,d.$elm$),f=e[--c],$=n[++l];else{for(r=-1,a=i;a<=c;++a)if(e[a]&&e[a].$key$!==null&&e[a].$key$===$.$key$){r=a;break}r>=0?(E=e[r],E.$tag$!==$.$tag$?g=I(e&&e[l],s,r):(S(E,$,o),e[r]=void 0,g=E.$elm$),$=n[++l]):(g=I(e&&e[l],s,l),$=n[++l]),g&&T(d.$elm$.parentNode,g,d.$elm$)}i>c?$t(t,n[u+1]==null?null:n[u+1].$elm$,s,n,l,u):l>u&&ht(e,i,c)},O=(t,e,s=!1)=>t.$tag$===e.$tag$?s?(s&&!t.$key$&&e.$key$&&(t.$key$=e.$key$),!0):t.$key$===e.$key$:!1,S=(t,e,s=!1)=>{const n=e.$elm$=t.$elm$,o=t.$children$,i=e.$children$,l=e.$text$;l===null?(dt(t,e,ut),o!==null&&i!==null?Nt(n,o,e,i,s):i!==null?(t.$text$!==null&&(n.textContent=""),$t(n,null,e,i,0,i.length-1)):!s&&x.updatable&&o!==null&&ht(o,0,o.length-1)):t.$text$!==l&&(n.data=l)},pt=t=>{t.$attrs$&&t.$attrs$.ref&&t.$attrs$.ref(null),t.$children$&&t.$children$.map(pt)},T=(t,e,s)=>t?.insertBefore(e,s),te=(t,e,s=!1)=>{const n=t.$hostElement$,o=t.$cmpMeta$,i=t.$vnode$||R(null,null),r=Kt(e)?e:M(null,null,e);if(D=n.tagName,o.$attrsToReflect$&&(r.$attrs$=r.$attrs$||{},o.$attrsToReflect$.map(([a,c])=>r.$attrs$[c]=n[a])),s&&r.$attrs$)for(const a of Object.keys(r.$attrs$))n.hasAttribute(a)&&!["key","ref","style","class"].includes(a)&&(r.$attrs$[a]=n[a]);r.$tag$=null,r.$flags$|=4,t.$vnode$=r,r.$elm$=i.$elm$=n.shadowRoot||n,S(i,r,s)},gt=(t,e)=>{if(e&&!t.$onRenderResolve$&&e["s-p"]){const s=e["s-p"].push(new Promise(n=>t.$onRenderResolve$=()=>{e["s-p"].splice(s-1,1),n()}))}},W=(t,e)=>{if(t.$flags$|=16,t.$flags$&4){t.$flags$|=512;return}return gt(t,t.$ancestorComponent$),jt(()=>ee(t,e))},ee=(t,e)=>{const s=t.$hostElement$,n=w("scheduleUpdate",t.$cmpMeta$.$tagName$),o=s;if(!o)throw new Error(`Can't render component <${s.tagName.toLowerCase()} /> with invalid Stencil runtime! Make sure this imported component is compiled with a \`externalRuntime: true\` flag. For more information, please refer to https://stenciljs.com/docs/custom-elements#externalruntime`);let i;return e?i=b(o,"componentWillLoad",void 0,s):i=b(o,"componentWillUpdate",void 0,s),i=vt(i,()=>b(o,"componentWillRender",void 0,s)),n(),vt(i,()=>se(t,o,e))},vt=(t,e)=>ne(t)?t.then(e).catch(s=>{console.error(s),e()}):e(),ne=t=>t instanceof Promise||t&&t.then&&typeof t.then=="function",se=async(t,e,s)=>{var n;const o=t.$hostElement$,i=w("update",t.$cmpMeta$.$tagName$),l=o["s-rc"];s&&Gt(t);const r=w("render",t.$cmpMeta$.$tagName$);oe(t,e,o,s),l&&(l.map(a=>a()),o["s-rc"]=void 0),r(),i();{const a=(n=o["s-p"])!=null?n:[],c=()=>ie(t);a.length===0?c():(Promise.all(a).then(c),t.$flags$|=4,a.length=0)}},oe=(t,e,s,n)=>{try{e=e.render(),t.$flags$&=-17,t.$flags$|=2,te(t,e,n)}catch(o){A(o,t.$hostElement$)}return null},ie=t=>{const e=t.$cmpMeta$.$tagName$,s=t.$hostElement$,n=w("postUpdate",e),o=s,i=t.$ancestorComponent$;b(o,"componentDidRender",void 0,s),t.$flags$&64?(b(o,"componentDidUpdate",void 0,s),n()):(t.$flags$|=64,ce(s),b(o,"componentDidLoad",void 0,s),n(),t.$onReadyResolve$(s),i||re()),t.$onRenderResolve$&&(t.$onRenderResolve$(),t.$onRenderResolve$=void 0),t.$flags$&512&&j(()=>W(t,!1)),t.$flags$&=-517},re=t=>{j(()=>Jt(h,"appload",{detail:{namespace:Mt}}))},b=(t,e,s,n)=>{if(t&&t[e])try{return t[e](s)}catch(o){A(o,n)}},ce=t=>{var e;return t.classList.add((e=x.hydratedSelectorName)!=null?e:"hydrated")},le=(t,e)=>y(t).$instanceValues$.get(e),yt=(t,e,s,n)=>{const o=y(t),i=t,l=o.$instanceValues$.get(e),r=o.$flags$,a=i;s=rt(s,n.$members$[e][0]);const c=Number.isNaN(l)&&Number.isNaN(s);if(s!==l&&!c){o.$instanceValues$.set(e,s);{if(n.$watchers$&&r&128){const f=n.$watchers$[e];f&&f.map(u=>{try{a[u](s,l,e)}catch($){A($,i)}})}if((r&18)===2){if(a.componentShouldUpdate&&a.componentShouldUpdate(s,l,e)===!1)return;W(o,!1)}}}},ae=(t,e,s)=>{var n,o;const i=t.prototype;if(e.$members$||e.$watchers$||t.watchers){t.watchers&&!e.$watchers$&&(e.$watchers$=t.watchers);const l=Object.entries((n=e.$members$)!=null?n:{});l.map(([r,[a]])=>{if(a&31||a&32){const{get:c,set:d}=Object.getOwnPropertyDescriptor(i,r)||{};c&&(e.$members$[r][0]|=2048),d&&(e.$members$[r][0]|=4096),Object.defineProperty(i,r,{get(){return c?c.apply(this):le(this,r)},configurable:!0,enumerable:!0}),Object.defineProperty(i,r,{set(f){const u=y(this);if(d){const $=a&32?this[r]:u.$hostElement$[r];typeof $>"u"&&u.$instanceValues$.get(r)?f=u.$instanceValues$.get(r):!u.$instanceValues$.get(r)&&$&&u.$instanceValues$.set(r,$),d.apply(this,[rt(f,a)]),f=a&32?this[r]:u.$hostElement$[r],yt(this,r,f,e);return}{yt(this,r,f,e);return}}})}});{const r=new Map;i.attributeChangedCallback=function(a,c,d){v.jmp(()=>{var f;const u=r.get(a);if(!(this.hasOwnProperty(u)&&x.lazyLoad)){if(i.hasOwnProperty(u)&&typeof this[u]=="number"&&this[u]==d)return;if(u==null){const p=y(this),g=p?.$flags$;if(g&&!(g&8)&&g&128&&d!==c){const G=this,xt=(f=e.$watchers$)==null?void 0:f[a];xt?.forEach(At=>{G[At]!=null&&G[At].call(G,d,c,a)})}return}}const $=Object.getOwnPropertyDescriptor(i,u);d=d===null&&typeof this[u]=="boolean"?!1:d,d!==this[u]&&(!$.get||$.set)&&(this[u]=d)})},t.observedAttributes=Array.from(new Set([...Object.keys((o=e.$watchers$)!=null?o:{}),...l.filter(([a,c])=>c[0]&15).map(([a,c])=>{var d;const f=c[1]||a;return r.set(f,a),c[0]&512&&((d=e.$attrsToReflect$)==null||d.push([a,f])),f})]))}}return t},wt=async(t,e,s,n)=>{let o;if((e.$flags$&32)===0){e.$flags$|=32;{o=t.constructor;const r=t.localName;customElements.whenDefined(r).then(()=>e.$flags$|=128)}if(o&&o.style){let r;typeof o.style=="string"&&(r=o.style);const a=ot(s);if(!_.has(a)){const c=w("registerStyles",s.$tagName$);Ft(a,r,!!(s.$flags$&1)),c()}}}const i=e.$ancestorComponent$,l=()=>W(e,!0);i&&i["s-rc"]?i["s-rc"].push(l):l()},de=(t,e)=>{},fe=t=>{{const e=y(t),s=e.$cmpMeta$,n=w("connectedCallback",s.$tagName$);if(e.$flags$&1)e?.$lazyInstance$||e?.$onReadyPromise$&&e.$onReadyPromise$.then(()=>de());else{e.$flags$|=1;{let o=t;for(;o=o.parentNode||o.host;)if(o["s-p"]){gt(e,e.$ancestorComponent$=o);break}}s.$members$&&Object.entries(s.$members$).map(([o,[i]])=>{if(i&31&&t.hasOwnProperty(o)){const l=t[o];delete t[o],t[o]=l}}),x.initializeNextTick?j(()=>wt(t,e,s)):wt(t,e,s)}n()}},ue=async t=>{y(t),m.has(t)&&m.delete(t),t.shadowRoot&&m.has(t.shadowRoot)&&m.delete(t.shadowRoot)},$e=(t,e)=>{const s={$flags$:e[0],$tagName$:e[1]};s.$members$=e[2],s.$watchers$=t.$watchers$,s.$attrsToReflect$=[];const n=t.prototype.connectedCallback,o=t.prototype.disconnectedCallback;return Object.assign(t.prototype,{__hasHostListenerAttached:!1,__registerHost(){Tt(this,s)},connectedCallback(){this.__hasHostListenerAttached||(y(this),this.__hasHostListenerAttached=!0),fe(this),n&&n.call(this)},disconnectedCallback(){ue(this),o&&o.call(this)},__attachShadow(){if(!this.shadowRoot)Zt.call(this,s);else if(this.shadowRoot.mode!=="open")throw new Error(`Unable to re-use existing shadow root for ${s.$tagName$}! Mode is set to ${this.shadowRoot.mode} but Stencil only supports open shadow roots.`)}}),t.is=s.$tagName$,ae(t,s)};let X;const he=()=>{if(typeof window>"u")return new Map;if(!X){const t=window;t.Ionicons=t.Ionicons||{},X=t.Ionicons.map=t.Ionicons.map||new Map}return X},pe=t=>{let e=Z(t.src);return e||(e=mt(t.name,t.icon,t.mode,t.ios,t.md),e?ge(e,t):t.icon&&(e=Z(t.icon),e||(e=Z(t.icon[t.mode]),e))?e:null)},ge=(t,e)=>{const s=he().get(t);if(s)return s;try{return qt(`svg/${t}.svg`)}catch(n){console.log("e",n),console.warn(`[Ionicons Warning]: Could not load icon with name "${t}". Ensure that the icon is registered using addIcons or that the icon SVG data is passed directly to the icon component.`,e)}},mt=(t,e,s,n,o)=>(s=(s&&H(s))==="ios"?"ios":"md",n&&s==="ios"?t=H(n):o&&s==="md"?t=H(o):(!t&&e&&!St(e)&&(t=e),C(t)&&(t=H(t))),!C(t)||t.trim()===""||t.replace(/[a-z]|-|\d/gi,"")!==""?null:t),Z=t=>C(t)&&(t=t.trim(),St(t))?t:null,St=t=>t.length>0&&/(\/|\.)/.test(t),C=t=>typeof t=="string",H=t=>t.toLowerCase(),ve=(t,e=[])=>{const s={};return e.forEach(n=>{t.hasAttribute(n)&&(t.getAttribute(n)!==null&&(s[n]=t.getAttribute(n)),t.removeAttribute(n))}),s},ye=t=>t&&t.dir!==""?t.dir.toLowerCase()==="rtl":document?.dir.toLowerCase()==="rtl",we=t=>{const e=document.createElement("div");e.innerHTML=t;for(let n=e.childNodes.length-1;n>=0;n--)e.childNodes[n].nodeName.toLowerCase()!=="svg"&&e.removeChild(e.childNodes[n]);const s=e.firstElementChild;if(s&&s.nodeName.toLowerCase()==="svg"){const n=s.getAttribute("class")||"";if(s.setAttribute("class",(n+" s-ion-icon").trim()),bt(s))return e.innerHTML}return""},bt=t=>{if(t.nodeType===1){if(t.nodeName.toLowerCase()==="script")return!1;for(let e=0;e<t.attributes.length;e++){const s=t.attributes[e].name;if(C(s)&&s.toLowerCase().indexOf("on")===0)return!1}for(let e=0;e<t.childNodes.length;e++)if(!bt(t.childNodes[e]))return!1}return!0},me=t=>t.startsWith("data:image/svg+xml"),Se=t=>t.indexOf(";utf8,")!==-1,k=new Map,kt=new Map;let F;function Y(t){return k.set(t,""),""}const be=(t,e)=>{const s=kt.get(t);return s||(typeof fetch<"u"&&typeof document<"u"?me(t)&&Se(t)?Promise.resolve(ke(t)):Ee(t,e):Promise.resolve(Y(t)))};function ke(t){F||(F=new DOMParser);const s=F.parseFromString(t,"text/html").querySelector("svg");if(s)return k.set(t,s.outerHTML),s.outerHTML;throw new Error(`Could not parse svg from ${t}`)}function Ee(t,e){const s=fetch(t).then(n=>n.text().then(o=>{o&&e!==!1&&(o=we(o));const i=o||"";return k.set(t,i),i}).catch(()=>Y(t))).catch(()=>Y(t));return kt.set(t,s),s}const xe=":host{display:inline-block;width:1em;height:1em;contain:strict;fill:currentColor;box-sizing:content-box !important}:host .ionicon{stroke:currentColor}.ionicon-fill-none{fill:none}.ionicon-stroke-width{stroke-width:var(--ionicon-stroke-width, 32px)}.icon-inner,.ionicon,svg{display:block;height:100%;width:100%}@supports (background: -webkit-named-image(i)){:host(.icon-rtl) .icon-inner{transform:scaleX(-1)}}@supports not selector(:dir(rtl)) and selector(:host-context([dir='rtl'])){:host(.icon-rtl) .icon-inner{transform:scaleX(-1)}}:host(.flip-rtl):host-context([dir='rtl']) .icon-inner{transform:scaleX(-1)}@supports selector(:dir(rtl)){:host(.flip-rtl:dir(rtl)) .icon-inner{transform:scaleX(-1)}:host(.flip-rtl:dir(ltr)) .icon-inner{transform:scaleX(1)}}:host(.icon-small){font-size:1.125rem !important}:host(.icon-large){font-size:2rem !important}:host(.ion-color){color:var(--ion-color-base) !important}:host(.ion-color-primary){--ion-color-base:var(--ion-color-primary, #3880ff)}:host(.ion-color-secondary){--ion-color-base:var(--ion-color-secondary, #0cd1e8)}:host(.ion-color-tertiary){--ion-color-base:var(--ion-color-tertiary, #f4a942)}:host(.ion-color-success){--ion-color-base:var(--ion-color-success, #10dc60)}:host(.ion-color-warning){--ion-color-base:var(--ion-color-warning, #ffce00)}:host(.ion-color-danger){--ion-color-base:var(--ion-color-danger, #f14141)}:host(.ion-color-light){--ion-color-base:var(--ion-color-light, #f4f5f8)}:host(.ion-color-medium){--ion-color-base:var(--ion-color-medium, #989aa2)}:host(.ion-color-dark){--ion-color-base:var(--ion-color-dark, #222428)}",Ae=$e(class extends Ht{constructor(){super(),this.__registerHost(),this.__attachShadow(),this.iconName=null,this.inheritedAttributes={},this.didLoadIcon=!1,this.isVisible=!1,this.mode=_e(),this.lazy=!1,this.sanitize=!0}componentWillLoad(){this.inheritedAttributes=ve(this.el,["aria-label"])}connectedCallback(){this.waitUntilVisible(this.el,"50px",()=>{this.isVisible=!0,this.loadIcon()})}componentDidLoad(){this.didLoadIcon||this.loadIcon()}disconnectedCallback(){this.io&&(this.io.disconnect(),this.io=void 0)}waitUntilVisible(e,s,n){if(!!!(this.lazy&&typeof window<"u"&&window.IntersectionObserver))return n();const i=this.io=new window.IntersectionObserver(l=>{l[0].isIntersecting&&(i.disconnect(),this.io=void 0,n())},{rootMargin:s});i.observe(e)}loadIcon(){if(this.isVisible){const e=pe(this);e&&(k.has(e)?this.svgContent=k.get(e):be(e,this.sanitize).then(()=>this.svgContent=k.get(e)),this.didLoadIcon=!0)}this.iconName=mt(this.name,this.icon,this.mode,this.ios,this.md)}render(){const{flipRtl:e,iconName:s,inheritedAttributes:n,el:o}=this,i=this.mode||"md",l=s?(s.includes("arrow")||s.includes("chevron"))&&e!==!1:!1,r=e||l;return M(it,Object.assign({key:"0578c899781ca145dd8205acd9670af39b57cf2e",role:"img",class:Object.assign(Object.assign({[i]:!0},Le(this.color)),{[`icon-${this.size}`]:!!this.size,"flip-rtl":r,"icon-rtl":r&&ye(o)})},n),this.svgContent?M("div",{class:"icon-inner",innerHTML:this.svgContent}):M("div",{class:"icon-inner"}))}static get assetsDirs(){return["svg"]}get el(){return this}static get watchers(){return{name:["loadIcon"],src:["loadIcon"],icon:["loadIcon"],ios:["loadIcon"],md:["loadIcon"]}}static get style(){return xe}},[1,"ion-icon",{mode:[1025],color:[1],ios:[1],md:[1],flipRtl:[4,"flip-rtl"],name:[513],src:[1],icon:[8],size:[1],lazy:[4],sanitize:[4],svgContent:[32],isVisible:[32]},void 0,{name:["loadIcon"],src:["loadIcon"],icon:["loadIcon"],ios:["loadIcon"],md:["loadIcon"]}]),_e=()=>typeof document<"u"&&document.documentElement.getAttribute("mode")||"md",Le=t=>t?{"ion-color":!0,[`ion-color-${t}`]:!0}:null;function Me(){if(typeof customElements>"u")return;["ion-icon"].forEach(e=>{e==="ion-icon"&&(customElements.get(e)||customElements.define(e,Ae))})}const Ie=Me,Oe="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='m289.94 256 95-95A24 24 0 0 0 351 127l-95 95-95-95a24 24 0 0 0-34 34l95 95-95 95a24 24 0 1 0 34 34l95-95 95 95a24 24 0 0 0 34-34Z'/></svg>",Te="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M256 32C132.3 32 32 134.9 32 261.7c0 101.5 64.2 187.5 153.2 217.9a17.6 17.6 0 0 0 3.8.4c8.3 0 11.5-6.1 11.5-11.4 0-5.5-.2-19.9-.3-39.1a102.4 102.4 0 0 1-22.6 2.7c-43.1 0-52.9-33.5-52.9-33.5-10.2-26.5-24.9-33.6-24.9-33.6-19.5-13.7-.1-14.1 1.4-14.1h.1c22.5 2 34.3 23.8 34.3 23.8 11.2 19.6 26.2 25.1 39.6 25.1a63 63 0 0 0 25.6-6c2-14.8 7.8-24.9 14.2-30.7-49.7-5.8-102-25.5-102-113.5 0-25.1 8.7-45.6 23-61.6-2.3-5.8-10-29.2 2.2-60.8a18.6 18.6 0 0 1 5-.5c8.1 0 26.4 3.1 56.6 24.1a208.2 208.2 0 0 1 112.2 0c30.2-21 48.5-24.1 56.6-24.1a18.6 18.6 0 0 1 5 .5c12.2 31.6 4.5 55 2.2 60.8 14.3 16.1 23 36.6 23 61.6 0 88.2-52.4 107.6-102.3 113.3 8 7.1 15.2 21.1 15.2 42.5 0 30.7-.3 55.5-.3 63 0 5.4 3.1 11.5 11.4 11.5a19.4 19.4 0 0 0 4-.4C415.9 449.2 480 363.1 480 261.7 480 134.9 379.7 32 256 32'/></svg>",Ce="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M444.17 32H70.28C49.85 32 32 46.7 32 66.89v374.72C32 461.91 49.85 480 70.28 480h373.78c20.54 0 35.94-18.21 35.94-38.39V66.89C480.12 46.7 464.6 32 444.17 32m-273.3 373.43h-64.18V205.88h64.18ZM141 175.54h-.46c-20.54 0-33.84-15.29-33.84-34.43 0-19.49 13.65-34.42 34.65-34.42s33.85 14.82 34.31 34.42c-.01 19.14-13.31 34.43-34.66 34.43m264.43 229.89h-64.18V296.32c0-26.14-9.34-44-32.56-44-17.74 0-28.24 12-32.91 23.69-1.75 4.2-2.22 9.92-2.22 15.76v113.66h-64.18V205.88h64.18v27.77c9.34-13.3 23.93-32.44 57.88-32.44 42.13 0 74 27.77 74 87.64Z'/></svg>",He="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M496 109.5a201.8 201.8 0 0 1-56.55 15.3 97.5 97.5 0 0 0 43.33-53.6 197.7 197.7 0 0 1-62.56 23.5A99.14 99.14 0 0 0 348.31 64c-54.42 0-98.46 43.4-98.46 96.9a93.2 93.2 0 0 0 2.54 22.1 280.7 280.7 0 0 1-203-101.3A95.7 95.7 0 0 0 36 130.4c0 33.6 17.53 63.3 44 80.7A97.5 97.5 0 0 1 35.22 199v1.2c0 47 34 86.1 79 95a100.8 100.8 0 0 1-25.94 3.4 94.4 94.4 0 0 1-18.51-1.8c12.51 38.5 48.92 66.5 92.05 67.3A199.6 199.6 0 0 1 39.5 405.6a203 203 0 0 1-23.5-1.4A278.7 278.7 0 0 0 166.74 448c181.36 0 280.44-147.7 280.44-275.8 0-4.2-.11-8.4-.31-12.5A198.5 198.5 0 0 0 496 109.5'/></svg>",Pe="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M508.64 148.79c0-45-33.1-81.2-74-81.2C379.24 65 322.74 64 265 64h-18c-57.6 0-114.2 1-169.6 3.6C36.6 67.6 3.5 104 3.5 149 1 184.59-.06 220.19 0 255.79q-.15 53.4 3.4 106.9c0 45 33.1 81.5 73.9 81.5 58.2 2.7 117.9 3.9 178.6 3.8q91.2.3 178.6-3.8c40.9 0 74-36.5 74-81.5 2.4-35.7 3.5-71.3 3.4-107q.34-53.4-3.26-106.9M207 353.89v-196.5l145 98.2Z'/></svg>",Ue="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M80 160h352M80 256h352M80 352h352' stroke-linecap='round' stroke-miterlimit='10' class='ionicon-fill-none ionicon-stroke-width'/></svg>",Et="menu-outline",je="close",qe=()=>{const t=document.querySelector(".site-header__toggle");if(!t)return;const e=document.querySelector(t.dataset.target);if(!e)return;const s=()=>{if(!e.classList.contains("is-hidden")){e.classList.add("is-hidden"),t.setAttribute("aria-expanded","false");const n=t.querySelector("ion-icon");n&&(n.name=Et)}};t.addEventListener("click",()=>{const n=t.getAttribute("aria-expanded")==="true";e.classList.toggle("is-hidden"),t.setAttribute("aria-expanded",n?"false":"true");const o=t.querySelector("ion-icon");o&&(o.name=n?Et:je)}),document.addEventListener("click",n=>{const o=e.contains(n.target),i=t.contains(n.target);!o&&!i&&s()}),document.addEventListener("keydown",n=>{n.key==="Escape"&&s()})},ze=()=>{const t=document.querySelector("#main-header");if(!t)return;const e=()=>{if(window.scrollY>8){t.classList.add("is-scrolled");return}t.classList.remove("is-scrolled")};e(),window.addEventListener("scroll",e,{passive:!0})},Re=()=>{const t=document.querySelector("[data-reading-progress]"),e=document.querySelector(".content");if(!t||!e)return;const s=()=>{const n=e.offsetTop,o=e.offsetHeight,i=window.innerHeight,l=window.scrollY,r=Math.max(o-i,1),c=Math.min(Math.max(l-n,0),r)/r*100;t.style.transform=`scaleX(${c/100})`};s(),window.addEventListener("scroll",s,{passive:!0}),window.addEventListener("resize",s)};Lt({close:Oe,"logo-github":Te,"logo-linkedin":Ce,"logo-twitter":He,"logo-youtube":Pe,"menu-outline":Ue}),Ie(),qe(),ze(),Re()})();
|
|
1
|
+
(function(){"use strict";let H;const Lt=()=>{if(typeof window>"u")return new Map;if(!H){const t=window;t.Ionicons=t.Ionicons||{},H=t.Ionicons.map=t.Ionicons.map||new Map}return H},_t=t=>{Object.keys(t).forEach(e=>{K(e,t[e]);const n=e.replace(/([a-z0-9]|(?=[A-Z]))([A-Z0-9])/g,"$1-$2").toLowerCase();e!==n&&K(n,t[e])})},K=(t,e)=>{const n=Lt(),s=n.get(t);s===void 0?n.set(t,e):s!==e&&console.warn(`[Ionicons Warning]: Multiple icons were mapped to name "${t}". Ensure that multiple icons are not mapped to the same icon name.`)},Mt="ionicons",E={hydratedSelectorName:"hydrated",lazyLoad:!1,updatable:!0};var It=Object.defineProperty,Ot=(t,e)=>{for(var n in e)It(t,n,{get:e[n],enumerable:!0})},y=t=>{if(t.__stencil__getHostRef)return t.__stencil__getHostRef()},Ct=(t,e)=>{const n={$flags$:0,$hostElement$:t,$cmpMeta$:e,$instanceValues$:new Map};n.$onReadyPromise$=new Promise(o=>n.$onReadyResolve$=o),t["s-p"]=[],t["s-rc"]=[];const s=n;return t.__stencil__getHostRef=()=>s,s},J=(t,e)=>e in t,A=(t,e)=>(0,console.error)(t,e),L=new Map,Tt="slot-fb{display:contents}slot-fb[hidden]{display:none}",Q="http://www.w3.org/1999/xlink",h=typeof window<"u"?window:{},Pt=h.HTMLElement||class{},v={$flags$:0,$resourcesUrl$:"",jmp:t=>t(),raf:t=>requestAnimationFrame(t),ael:(t,e,n,s)=>t.addEventListener(e,n,s),rel:(t,e,n,s)=>t.removeEventListener(e,n,s),ce:(t,e)=>new CustomEvent(t,e)},Ht=t=>Promise.resolve(t),V=(()=>{try{return new CSSStyleSheet,typeof new CSSStyleSheet().replaceSync=="function"}catch{}return!1})(),q=!1,N=[],tt=[],qt=(t,e)=>n=>{t.push(n),q||(q=!0,v.raf(nt))},et=t=>{for(let e=0;e<t.length;e++)try{t[e](performance.now())}catch(n){A(n)}t.length=0},nt=()=>{et(N),et(tt),(q=N.length>0)&&v.raf(nt)},j=t=>Ht().then(t),jt=qt(tt),Ut=t=>{const e=new URL(t,v.$resourcesUrl$);return e.origin!==h.location.origin?e.href:e.pathname},U=t=>(t=typeof t,t==="object"||t==="function");function zt(t){var e,n,s;return(s=(n=(e=t.head)==null?void 0:e.querySelector('meta[name="csp-nonce"]'))==null?void 0:n.getAttribute("content"))!=null?s:void 0}var Bt=t=>t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),Rt={};Ot(Rt,{err:()=>st,map:()=>Dt,ok:()=>z,unwrap:()=>Wt,unwrapErr:()=>Xt});var z=t=>({isOk:!0,isErr:!1,value:t}),st=t=>({isOk:!1,isErr:!0,value:t});function Dt(t,e){if(t.isOk){const n=e(t.value);return n instanceof Promise?n.then(s=>z(s)):z(n)}if(t.isErr){const n=t.value;return st(n)}throw"should never get here"}var Wt=t=>{if(t.isOk)return t.value;throw t.value},Xt=t=>{if(t.isErr)return t.value;throw t.value};function Fe(t){}var _;function Zt(t){var e;const n=this.attachShadow({mode:"open"});_===void 0&&(_=(e=void 0)!=null?e:null),_&&n.adoptedStyleSheets.push(_)}var w=(t,e="")=>()=>{},m=new WeakMap,Gt=(t,e,n)=>{let s=L.get(t);V&&n?(s=s||new CSSStyleSheet,typeof s=="string"?s=e:s.replaceSync(e)):s=e,L.set(t,s)},Ft=(t,e,n)=>{var s;const o=ot(e),i=L.get(o);if(!h.document)return o;if(t=t.nodeType===11?t:h.document,i)if(typeof i=="string"){t=t.head||t;let c=m.get(t),r;if(c||m.set(t,c=new Set),!c.has(o)){{r=h.document.createElement("style"),r.innerHTML=i;const l=(s=v.$nonce$)!=null?s:zt(h.document);if(l!=null&&r.setAttribute("nonce",l),!(e.$flags$&1))if(t.nodeName==="HEAD"){const a=t.querySelectorAll("link[rel=preconnect]"),d=a.length>0?a[a.length-1].nextSibling:t.querySelector("style");t.insertBefore(r,d?.parentNode===t?d:null)}else if("host"in t)if(V){const a=new CSSStyleSheet;a.replaceSync(i),t.adoptedStyleSheets.unshift(a)}else{const a=t.querySelector("style");a?a.innerHTML=i+a.innerHTML:t.prepend(r)}else t.append(r);e.$flags$&1&&t.insertBefore(r,null)}e.$flags$&4&&(r.innerHTML+=Tt),c&&c.add(o)}}else t.adoptedStyleSheets.includes(i)||t.adoptedStyleSheets.push(i);return o},Yt=t=>{const e=t.$cmpMeta$,n=t.$hostElement$,s=e.$flags$,o=w("attachStyles",e.$tagName$),i=Ft(n.shadowRoot?n.shadowRoot:n.getRootNode(),e);s&10&&(n["s-sc"]=i,n.classList.add(i+"-h")),o()},ot=(t,e)=>"sc-"+t.$tagName$,M=(t,e,...n)=>{let s=null,o=null,i=!1,c=!1;const r=[],l=d=>{for(let f=0;f<d.length;f++)s=d[f],Array.isArray(s)?l(s):s!=null&&typeof s!="boolean"&&((i=typeof t!="function"&&!U(s))&&(s=String(s)),i&&c?r[r.length-1].$text$+=s:r.push(i?B(null,s):s),c=i)};if(l(n),e){e.key&&(o=e.key);{const d=e.className||e.class;d&&(e.class=typeof d!="object"?d:Object.keys(d).filter(f=>d[f]).join(" "))}}const a=B(t,null);return a.$attrs$=e,r.length>0&&(a.$children$=r),a.$key$=o,a},B=(t,e)=>{const n={$flags$:0,$tag$:t,$text$:e,$elm$:null,$children$:null};return n.$attrs$=null,n.$key$=null,n},it={},Kt=t=>t&&t.$tag$===it,R=t=>{const e=Bt(t);return new RegExp(`(^|[^@]|@(?!supports\\s+selector\\s*\\([^{]*?${e}))(${e}\\b)`,"g")};R("::slotted"),R(":host"),R(":host-context");var rt=(t,e,n)=>t!=null&&!U(t)?e&4?t==="false"?!1:t===""||!!t:e&1?String(t):t:t,Jt=(t,e,n)=>{const s=v.ce(e,n);return t.dispatchEvent(s),s},ct=(t,e,n,s,o,i,c)=>{if(n===s)return;let r=J(t,e),l=e.toLowerCase();if(e==="class"){const a=t.classList,d=at(n);let f=at(s);a.remove(...d.filter(u=>u&&!f.includes(u))),a.add(...f.filter(u=>u&&!d.includes(u)))}else if(e==="style"){for(const a in n)(!s||s[a]==null)&&(a.includes("-")?t.style.removeProperty(a):t.style[a]="");for(const a in s)(!n||s[a]!==n[a])&&(a.includes("-")?t.style.setProperty(a,s[a]):t.style[a]=s[a])}else if(e!=="key")if(e==="ref")s&&s(t);else if(!t.__lookupSetter__(e)&&e[0]==="o"&&e[1]==="n"){if(e[2]==="-"?e=e.slice(3):J(h,l)?e=l.slice(2):e=l[2]+e.slice(3),n||s){const a=e.endsWith(lt);e=e.replace(Vt,""),n&&v.rel(t,e,n,a),s&&v.ael(t,e,s,a)}}else{const a=U(s);if(r||a&&s!==null)try{if(t.tagName.includes("-"))t[e]!==s&&(t[e]=s);else{const f=s??"";e==="list"?r=!1:(n==null||t[e]!=f)&&(typeof t.__lookupSetter__(e)=="function"?t[e]=f:t.setAttribute(e,f))}}catch{}let d=!1;l!==(l=l.replace(/^xlink\:?/,""))&&(e=l,d=!0),s==null||s===!1?(s!==!1||t.getAttribute(e)==="")&&(d?t.removeAttributeNS(Q,e):t.removeAttribute(e)):(!r||i&4||o)&&!a&&t.nodeType===1&&(s=s===!0?"":s,d?t.setAttributeNS(Q,e,s):t.setAttribute(e,s))}},Qt=/\s/,at=t=>(typeof t=="object"&&t&&"baseVal"in t&&(t=t.baseVal),!t||typeof t!="string"?[]:t.split(Qt)),lt="Capture",Vt=new RegExp(lt+"$"),dt=(t,e,n,s)=>{const o=e.$elm$.nodeType===11&&e.$elm$.host?e.$elm$.host:e.$elm$,i=t&&t.$attrs$||{},c=e.$attrs$||{};for(const r of ft(Object.keys(i)))r in c||ct(o,r,i[r],void 0,n,e.$flags$);for(const r of ft(Object.keys(c)))ct(o,r,i[r],c[r],n,e.$flags$)};function ft(t){return t.includes("ref")?[...t.filter(e=>e!=="ref"),"ref"]:t}var D,ut=!1,I=(t,e,n)=>{const s=e.$children$[n];let o=0,i,c;if(s.$text$!==null)i=s.$elm$=h.document.createTextNode(s.$text$);else{if(!h.document)throw new Error("You are trying to render a Stencil component in an environment that doesn't support the DOM. Make sure to populate the [`window`](https://developer.mozilla.org/en-US/docs/Web/API/Window/window) object before rendering a component.");if(i=s.$elm$=h.document.createElement(s.$tag$),dt(null,s,ut),s.$children$)for(o=0;o<s.$children$.length;++o)c=I(t,s,o),c&&i.appendChild(c)}return i["s-hn"]=D,i},$t=(t,e,n,s,o,i)=>{let c=t,r;for(c.shadowRoot&&c.tagName===D&&(c=c.shadowRoot);o<=i;++o)s[o]&&(r=I(null,n,o),r&&(s[o].$elm$=r,C(c,r,e)))},ht=(t,e,n)=>{for(let s=e;s<=n;++s){const o=t[s];if(o){const i=o.$elm$;pt(o),i&&i.remove()}}},Nt=(t,e,n,s,o=!1)=>{let i=0,c=0,r=0,l=0,a=e.length-1,d=e[0],f=e[a],u=s.length-1,$=s[0],p=s[u],g,x;for(;i<=a&&c<=u;)if(d==null)d=e[++i];else if(f==null)f=e[--a];else if($==null)$=s[++c];else if(p==null)p=s[--u];else if(O(d,$,o))S(d,$,o),d=e[++i],$=s[++c];else if(O(f,p,o))S(f,p,o),f=e[--a],p=s[--u];else if(O(d,p,o))S(d,p,o),C(t,d.$elm$,f.$elm$.nextSibling),d=e[++i],p=s[--u];else if(O(f,$,o))S(f,$,o),C(t,f.$elm$,d.$elm$),f=e[--a],$=s[++c];else{for(r=-1,l=i;l<=a;++l)if(e[l]&&e[l].$key$!==null&&e[l].$key$===$.$key$){r=l;break}r>=0?(x=e[r],x.$tag$!==$.$tag$?g=I(e&&e[c],n,r):(S(x,$,o),e[r]=void 0,g=x.$elm$),$=s[++c]):(g=I(e&&e[c],n,c),$=s[++c]),g&&C(d.$elm$.parentNode,g,d.$elm$)}i>a?$t(t,s[u+1]==null?null:s[u+1].$elm$,n,s,c,u):c>u&&ht(e,i,a)},O=(t,e,n=!1)=>t.$tag$===e.$tag$?n?(n&&!t.$key$&&e.$key$&&(t.$key$=e.$key$),!0):t.$key$===e.$key$:!1,S=(t,e,n=!1)=>{const s=e.$elm$=t.$elm$,o=t.$children$,i=e.$children$,c=e.$text$;c===null?(dt(t,e,ut),o!==null&&i!==null?Nt(s,o,e,i,n):i!==null?(t.$text$!==null&&(s.textContent=""),$t(s,null,e,i,0,i.length-1)):!n&&E.updatable&&o!==null&&ht(o,0,o.length-1)):t.$text$!==c&&(s.data=c)},pt=t=>{t.$attrs$&&t.$attrs$.ref&&t.$attrs$.ref(null),t.$children$&&t.$children$.map(pt)},C=(t,e,n)=>t?.insertBefore(e,n),te=(t,e,n=!1)=>{const s=t.$hostElement$,o=t.$cmpMeta$,i=t.$vnode$||B(null,null),r=Kt(e)?e:M(null,null,e);if(D=s.tagName,o.$attrsToReflect$&&(r.$attrs$=r.$attrs$||{},o.$attrsToReflect$.map(([l,a])=>r.$attrs$[a]=s[l])),n&&r.$attrs$)for(const l of Object.keys(r.$attrs$))s.hasAttribute(l)&&!["key","ref","style","class"].includes(l)&&(r.$attrs$[l]=s[l]);r.$tag$=null,r.$flags$|=4,t.$vnode$=r,r.$elm$=i.$elm$=s.shadowRoot||s,S(i,r,n)},gt=(t,e)=>{if(e&&!t.$onRenderResolve$&&e["s-p"]){const n=e["s-p"].push(new Promise(s=>t.$onRenderResolve$=()=>{e["s-p"].splice(n-1,1),s()}))}},W=(t,e)=>{if(t.$flags$|=16,t.$flags$&4){t.$flags$|=512;return}return gt(t,t.$ancestorComponent$),jt(()=>ee(t,e))},ee=(t,e)=>{const n=t.$hostElement$,s=w("scheduleUpdate",t.$cmpMeta$.$tagName$),o=n;if(!o)throw new Error(`Can't render component <${n.tagName.toLowerCase()} /> with invalid Stencil runtime! Make sure this imported component is compiled with a \`externalRuntime: true\` flag. For more information, please refer to https://stenciljs.com/docs/custom-elements#externalruntime`);let i;return e?i=b(o,"componentWillLoad",void 0,n):i=b(o,"componentWillUpdate",void 0,n),i=vt(i,()=>b(o,"componentWillRender",void 0,n)),s(),vt(i,()=>se(t,o,e))},vt=(t,e)=>ne(t)?t.then(e).catch(n=>{console.error(n),e()}):e(),ne=t=>t instanceof Promise||t&&t.then&&typeof t.then=="function",se=async(t,e,n)=>{var s;const o=t.$hostElement$,i=w("update",t.$cmpMeta$.$tagName$),c=o["s-rc"];n&&Yt(t);const r=w("render",t.$cmpMeta$.$tagName$);oe(t,e,o,n),c&&(c.map(l=>l()),o["s-rc"]=void 0),r(),i();{const l=(s=o["s-p"])!=null?s:[],a=()=>ie(t);l.length===0?a():(Promise.all(l).then(a),t.$flags$|=4,l.length=0)}},oe=(t,e,n,s)=>{try{e=e.render(),t.$flags$&=-17,t.$flags$|=2,te(t,e,s)}catch(o){A(o,t.$hostElement$)}return null},ie=t=>{const e=t.$cmpMeta$.$tagName$,n=t.$hostElement$,s=w("postUpdate",e),o=n,i=t.$ancestorComponent$;b(o,"componentDidRender",void 0,n),t.$flags$&64?(b(o,"componentDidUpdate",void 0,n),s()):(t.$flags$|=64,ce(n),b(o,"componentDidLoad",void 0,n),s(),t.$onReadyResolve$(n),i||re()),t.$onRenderResolve$&&(t.$onRenderResolve$(),t.$onRenderResolve$=void 0),t.$flags$&512&&j(()=>W(t,!1)),t.$flags$&=-517},re=t=>{j(()=>Jt(h,"appload",{detail:{namespace:Mt}}))},b=(t,e,n,s)=>{if(t&&t[e])try{return t[e](n)}catch(o){A(o,s)}},ce=t=>{var e;return t.classList.add((e=E.hydratedSelectorName)!=null?e:"hydrated")},ae=(t,e)=>y(t).$instanceValues$.get(e),yt=(t,e,n,s)=>{const o=y(t),i=t,c=o.$instanceValues$.get(e),r=o.$flags$,l=i;n=rt(n,s.$members$[e][0]);const a=Number.isNaN(c)&&Number.isNaN(n);if(n!==c&&!a){o.$instanceValues$.set(e,n);{if(s.$watchers$&&r&128){const f=s.$watchers$[e];f&&f.map(u=>{try{l[u](n,c,e)}catch($){A($,i)}})}if((r&18)===2){if(l.componentShouldUpdate&&l.componentShouldUpdate(n,c,e)===!1)return;W(o,!1)}}}},le=(t,e,n)=>{var s,o;const i=t.prototype;if(e.$members$||e.$watchers$||t.watchers){t.watchers&&!e.$watchers$&&(e.$watchers$=t.watchers);const c=Object.entries((s=e.$members$)!=null?s:{});c.map(([r,[l]])=>{if(l&31||l&32){const{get:a,set:d}=Object.getOwnPropertyDescriptor(i,r)||{};a&&(e.$members$[r][0]|=2048),d&&(e.$members$[r][0]|=4096),Object.defineProperty(i,r,{get(){return a?a.apply(this):ae(this,r)},configurable:!0,enumerable:!0}),Object.defineProperty(i,r,{set(f){const u=y(this);if(d){const $=l&32?this[r]:u.$hostElement$[r];typeof $>"u"&&u.$instanceValues$.get(r)?f=u.$instanceValues$.get(r):!u.$instanceValues$.get(r)&&$&&u.$instanceValues$.set(r,$),d.apply(this,[rt(f,l)]),f=l&32?this[r]:u.$hostElement$[r],yt(this,r,f,e);return}{yt(this,r,f,e);return}}})}});{const r=new Map;i.attributeChangedCallback=function(l,a,d){v.jmp(()=>{var f;const u=r.get(l);if(!(this.hasOwnProperty(u)&&E.lazyLoad)){if(i.hasOwnProperty(u)&&typeof this[u]=="number"&&this[u]==d)return;if(u==null){const p=y(this),g=p?.$flags$;if(g&&!(g&8)&&g&128&&d!==a){const Y=this,Et=(f=e.$watchers$)==null?void 0:f[l];Et?.forEach(At=>{Y[At]!=null&&Y[At].call(Y,d,a,l)})}return}}const $=Object.getOwnPropertyDescriptor(i,u);d=d===null&&typeof this[u]=="boolean"?!1:d,d!==this[u]&&(!$.get||$.set)&&(this[u]=d)})},t.observedAttributes=Array.from(new Set([...Object.keys((o=e.$watchers$)!=null?o:{}),...c.filter(([l,a])=>a[0]&15).map(([l,a])=>{var d;const f=a[1]||l;return r.set(f,l),a[0]&512&&((d=e.$attrsToReflect$)==null||d.push([l,f])),f})]))}}return t},wt=async(t,e,n,s)=>{let o;if((e.$flags$&32)===0){e.$flags$|=32;{o=t.constructor;const r=t.localName;customElements.whenDefined(r).then(()=>e.$flags$|=128)}if(o&&o.style){let r;typeof o.style=="string"&&(r=o.style);const l=ot(n);if(!L.has(l)){const a=w("registerStyles",n.$tagName$);Gt(l,r,!!(n.$flags$&1)),a()}}}const i=e.$ancestorComponent$,c=()=>W(e,!0);i&&i["s-rc"]?i["s-rc"].push(c):c()},de=(t,e)=>{},fe=t=>{{const e=y(t),n=e.$cmpMeta$,s=w("connectedCallback",n.$tagName$);if(e.$flags$&1)e?.$lazyInstance$||e?.$onReadyPromise$&&e.$onReadyPromise$.then(()=>de());else{e.$flags$|=1;{let o=t;for(;o=o.parentNode||o.host;)if(o["s-p"]){gt(e,e.$ancestorComponent$=o);break}}n.$members$&&Object.entries(n.$members$).map(([o,[i]])=>{if(i&31&&t.hasOwnProperty(o)){const c=t[o];delete t[o],t[o]=c}}),E.initializeNextTick?j(()=>wt(t,e,n)):wt(t,e,n)}s()}},ue=async t=>{y(t),m.has(t)&&m.delete(t),t.shadowRoot&&m.has(t.shadowRoot)&&m.delete(t.shadowRoot)},$e=(t,e)=>{const n={$flags$:e[0],$tagName$:e[1]};n.$members$=e[2],n.$watchers$=t.$watchers$,n.$attrsToReflect$=[];const s=t.prototype.connectedCallback,o=t.prototype.disconnectedCallback;return Object.assign(t.prototype,{__hasHostListenerAttached:!1,__registerHost(){Ct(this,n)},connectedCallback(){this.__hasHostListenerAttached||(y(this),this.__hasHostListenerAttached=!0),fe(this),s&&s.call(this)},disconnectedCallback(){ue(this),o&&o.call(this)},__attachShadow(){if(!this.shadowRoot)Zt.call(this,n);else if(this.shadowRoot.mode!=="open")throw new Error(`Unable to re-use existing shadow root for ${n.$tagName$}! Mode is set to ${this.shadowRoot.mode} but Stencil only supports open shadow roots.`)}}),t.is=n.$tagName$,le(t,n)};let X;const he=()=>{if(typeof window>"u")return new Map;if(!X){const t=window;t.Ionicons=t.Ionicons||{},X=t.Ionicons.map=t.Ionicons.map||new Map}return X},pe=t=>{let e=Z(t.src);return e||(e=mt(t.name,t.icon,t.mode,t.ios,t.md),e?ge(e,t):t.icon&&(e=Z(t.icon),e||(e=Z(t.icon[t.mode]),e))?e:null)},ge=(t,e)=>{const n=he().get(t);if(n)return n;try{return Ut(`svg/${t}.svg`)}catch(s){console.log("e",s),console.warn(`[Ionicons Warning]: Could not load icon with name "${t}". Ensure that the icon is registered using addIcons or that the icon SVG data is passed directly to the icon component.`,e)}},mt=(t,e,n,s,o)=>(n=(n&&P(n))==="ios"?"ios":"md",s&&n==="ios"?t=P(s):o&&n==="md"?t=P(o):(!t&&e&&!St(e)&&(t=e),T(t)&&(t=P(t))),!T(t)||t.trim()===""||t.replace(/[a-z]|-|\d/gi,"")!==""?null:t),Z=t=>T(t)&&(t=t.trim(),St(t))?t:null,St=t=>t.length>0&&/(\/|\.)/.test(t),T=t=>typeof t=="string",P=t=>t.toLowerCase(),ve=(t,e=[])=>{const n={};return e.forEach(s=>{t.hasAttribute(s)&&(t.getAttribute(s)!==null&&(n[s]=t.getAttribute(s)),t.removeAttribute(s))}),n},ye=t=>t&&t.dir!==""?t.dir.toLowerCase()==="rtl":document?.dir.toLowerCase()==="rtl",we=t=>{const e=document.createElement("div");e.innerHTML=t;for(let s=e.childNodes.length-1;s>=0;s--)e.childNodes[s].nodeName.toLowerCase()!=="svg"&&e.removeChild(e.childNodes[s]);const n=e.firstElementChild;if(n&&n.nodeName.toLowerCase()==="svg"){const s=n.getAttribute("class")||"";if(n.setAttribute("class",(s+" s-ion-icon").trim()),bt(n))return e.innerHTML}return""},bt=t=>{if(t.nodeType===1){if(t.nodeName.toLowerCase()==="script")return!1;for(let e=0;e<t.attributes.length;e++){const n=t.attributes[e].name;if(T(n)&&n.toLowerCase().indexOf("on")===0)return!1}for(let e=0;e<t.childNodes.length;e++)if(!bt(t.childNodes[e]))return!1}return!0},me=t=>t.startsWith("data:image/svg+xml"),Se=t=>t.indexOf(";utf8,")!==-1,k=new Map,kt=new Map;let G;function F(t){return k.set(t,""),""}const be=(t,e)=>{const n=kt.get(t);return n||(typeof fetch<"u"&&typeof document<"u"?me(t)&&Se(t)?Promise.resolve(ke(t)):xe(t,e):Promise.resolve(F(t)))};function ke(t){G||(G=new DOMParser);const n=G.parseFromString(t,"text/html").querySelector("svg");if(n)return k.set(t,n.outerHTML),n.outerHTML;throw new Error(`Could not parse svg from ${t}`)}function xe(t,e){const n=fetch(t).then(s=>s.text().then(o=>{o&&e!==!1&&(o=we(o));const i=o||"";return k.set(t,i),i}).catch(()=>F(t))).catch(()=>F(t));return kt.set(t,n),n}const Ee=":host{display:inline-block;width:1em;height:1em;contain:strict;fill:currentColor;box-sizing:content-box !important}:host .ionicon{stroke:currentColor}.ionicon-fill-none{fill:none}.ionicon-stroke-width{stroke-width:var(--ionicon-stroke-width, 32px)}.icon-inner,.ionicon,svg{display:block;height:100%;width:100%}@supports (background: -webkit-named-image(i)){:host(.icon-rtl) .icon-inner{transform:scaleX(-1)}}@supports not selector(:dir(rtl)) and selector(:host-context([dir='rtl'])){:host(.icon-rtl) .icon-inner{transform:scaleX(-1)}}:host(.flip-rtl):host-context([dir='rtl']) .icon-inner{transform:scaleX(-1)}@supports selector(:dir(rtl)){:host(.flip-rtl:dir(rtl)) .icon-inner{transform:scaleX(-1)}:host(.flip-rtl:dir(ltr)) .icon-inner{transform:scaleX(1)}}:host(.icon-small){font-size:1.125rem !important}:host(.icon-large){font-size:2rem !important}:host(.ion-color){color:var(--ion-color-base) !important}:host(.ion-color-primary){--ion-color-base:var(--ion-color-primary, #3880ff)}:host(.ion-color-secondary){--ion-color-base:var(--ion-color-secondary, #0cd1e8)}:host(.ion-color-tertiary){--ion-color-base:var(--ion-color-tertiary, #f4a942)}:host(.ion-color-success){--ion-color-base:var(--ion-color-success, #10dc60)}:host(.ion-color-warning){--ion-color-base:var(--ion-color-warning, #ffce00)}:host(.ion-color-danger){--ion-color-base:var(--ion-color-danger, #f14141)}:host(.ion-color-light){--ion-color-base:var(--ion-color-light, #f4f5f8)}:host(.ion-color-medium){--ion-color-base:var(--ion-color-medium, #989aa2)}:host(.ion-color-dark){--ion-color-base:var(--ion-color-dark, #222428)}",Ae=$e(class extends Pt{constructor(){super(),this.__registerHost(),this.__attachShadow(),this.iconName=null,this.inheritedAttributes={},this.didLoadIcon=!1,this.isVisible=!1,this.mode=Le(),this.lazy=!1,this.sanitize=!0}componentWillLoad(){this.inheritedAttributes=ve(this.el,["aria-label"])}connectedCallback(){this.waitUntilVisible(this.el,"50px",()=>{this.isVisible=!0,this.loadIcon()})}componentDidLoad(){this.didLoadIcon||this.loadIcon()}disconnectedCallback(){this.io&&(this.io.disconnect(),this.io=void 0)}waitUntilVisible(e,n,s){if(!!!(this.lazy&&typeof window<"u"&&window.IntersectionObserver))return s();const i=this.io=new window.IntersectionObserver(c=>{c[0].isIntersecting&&(i.disconnect(),this.io=void 0,s())},{rootMargin:n});i.observe(e)}loadIcon(){if(this.isVisible){const e=pe(this);e&&(k.has(e)?this.svgContent=k.get(e):be(e,this.sanitize).then(()=>this.svgContent=k.get(e)),this.didLoadIcon=!0)}this.iconName=mt(this.name,this.icon,this.mode,this.ios,this.md)}render(){const{flipRtl:e,iconName:n,inheritedAttributes:s,el:o}=this,i=this.mode||"md",c=n?(n.includes("arrow")||n.includes("chevron"))&&e!==!1:!1,r=e||c;return M(it,Object.assign({key:"0578c899781ca145dd8205acd9670af39b57cf2e",role:"img",class:Object.assign(Object.assign({[i]:!0},_e(this.color)),{[`icon-${this.size}`]:!!this.size,"flip-rtl":r,"icon-rtl":r&&ye(o)})},s),this.svgContent?M("div",{class:"icon-inner",innerHTML:this.svgContent}):M("div",{class:"icon-inner"}))}static get assetsDirs(){return["svg"]}get el(){return this}static get watchers(){return{name:["loadIcon"],src:["loadIcon"],icon:["loadIcon"],ios:["loadIcon"],md:["loadIcon"]}}static get style(){return Ee}},[1,"ion-icon",{mode:[1025],color:[1],ios:[1],md:[1],flipRtl:[4,"flip-rtl"],name:[513],src:[1],icon:[8],size:[1],lazy:[4],sanitize:[4],svgContent:[32],isVisible:[32]},void 0,{name:["loadIcon"],src:["loadIcon"],icon:["loadIcon"],ios:["loadIcon"],md:["loadIcon"]}]),Le=()=>typeof document<"u"&&document.documentElement.getAttribute("mode")||"md",_e=t=>t?{"ion-color":!0,[`ion-color-${t}`]:!0}:null;function Me(){if(typeof customElements>"u")return;["ion-icon"].forEach(e=>{e==="ion-icon"&&(customElements.get(e)||customElements.define(e,Ae))})}const Ie=Me,Oe="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='m112 184 144 144 144-144' stroke-linecap='round' stroke-linejoin='round' stroke-width='48px' class='ionicon-fill-none'/></svg>",Ce="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='m289.94 256 95-95A24 24 0 0 0 351 127l-95 95-95-95a24 24 0 0 0-34 34l95 95-95 95a24 24 0 1 0 34 34l95-95 95 95a24 24 0 0 0 34-34Z'/></svg>",Te="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M256 32C132.3 32 32 134.9 32 261.7c0 101.5 64.2 187.5 153.2 217.9a17.6 17.6 0 0 0 3.8.4c8.3 0 11.5-6.1 11.5-11.4 0-5.5-.2-19.9-.3-39.1a102.4 102.4 0 0 1-22.6 2.7c-43.1 0-52.9-33.5-52.9-33.5-10.2-26.5-24.9-33.6-24.9-33.6-19.5-13.7-.1-14.1 1.4-14.1h.1c22.5 2 34.3 23.8 34.3 23.8 11.2 19.6 26.2 25.1 39.6 25.1a63 63 0 0 0 25.6-6c2-14.8 7.8-24.9 14.2-30.7-49.7-5.8-102-25.5-102-113.5 0-25.1 8.7-45.6 23-61.6-2.3-5.8-10-29.2 2.2-60.8a18.6 18.6 0 0 1 5-.5c8.1 0 26.4 3.1 56.6 24.1a208.2 208.2 0 0 1 112.2 0c30.2-21 48.5-24.1 56.6-24.1a18.6 18.6 0 0 1 5 .5c12.2 31.6 4.5 55 2.2 60.8 14.3 16.1 23 36.6 23 61.6 0 88.2-52.4 107.6-102.3 113.3 8 7.1 15.2 21.1 15.2 42.5 0 30.7-.3 55.5-.3 63 0 5.4 3.1 11.5 11.4 11.5a19.4 19.4 0 0 0 4-.4C415.9 449.2 480 363.1 480 261.7 480 134.9 379.7 32 256 32'/></svg>",Pe="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M444.17 32H70.28C49.85 32 32 46.7 32 66.89v374.72C32 461.91 49.85 480 70.28 480h373.78c20.54 0 35.94-18.21 35.94-38.39V66.89C480.12 46.7 464.6 32 444.17 32m-273.3 373.43h-64.18V205.88h64.18ZM141 175.54h-.46c-20.54 0-33.84-15.29-33.84-34.43 0-19.49 13.65-34.42 34.65-34.42s33.85 14.82 34.31 34.42c-.01 19.14-13.31 34.43-34.66 34.43m264.43 229.89h-64.18V296.32c0-26.14-9.34-44-32.56-44-17.74 0-28.24 12-32.91 23.69-1.75 4.2-2.22 9.92-2.22 15.76v113.66h-64.18V205.88h64.18v27.77c9.34-13.3 23.93-32.44 57.88-32.44 42.13 0 74 27.77 74 87.64Z'/></svg>",He="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M496 109.5a201.8 201.8 0 0 1-56.55 15.3 97.5 97.5 0 0 0 43.33-53.6 197.7 197.7 0 0 1-62.56 23.5A99.14 99.14 0 0 0 348.31 64c-54.42 0-98.46 43.4-98.46 96.9a93.2 93.2 0 0 0 2.54 22.1 280.7 280.7 0 0 1-203-101.3A95.7 95.7 0 0 0 36 130.4c0 33.6 17.53 63.3 44 80.7A97.5 97.5 0 0 1 35.22 199v1.2c0 47 34 86.1 79 95a100.8 100.8 0 0 1-25.94 3.4 94.4 94.4 0 0 1-18.51-1.8c12.51 38.5 48.92 66.5 92.05 67.3A199.6 199.6 0 0 1 39.5 405.6a203 203 0 0 1-23.5-1.4A278.7 278.7 0 0 0 166.74 448c181.36 0 280.44-147.7 280.44-275.8 0-4.2-.11-8.4-.31-12.5A198.5 198.5 0 0 0 496 109.5'/></svg>",qe="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M508.64 148.79c0-45-33.1-81.2-74-81.2C379.24 65 322.74 64 265 64h-18c-57.6 0-114.2 1-169.6 3.6C36.6 67.6 3.5 104 3.5 149 1 184.59-.06 220.19 0 255.79q-.15 53.4 3.4 106.9c0 45 33.1 81.5 73.9 81.5 58.2 2.7 117.9 3.9 178.6 3.8q91.2.3 178.6-3.8c40.9 0 74-36.5 74-81.5 2.4-35.7 3.5-71.3 3.4-107q.34-53.4-3.26-106.9M207 353.89v-196.5l145 98.2Z'/></svg>",je="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M80 160h352M80 256h352M80 352h352' stroke-linecap='round' stroke-miterlimit='10' class='ionicon-fill-none ionicon-stroke-width'/></svg>",Ue="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M256 64C150 64 64 150 64 256s86 192 192 192 192-86 192-192S362 64 256 64Z' stroke-miterlimit='10' class='ionicon-fill-none ionicon-stroke-width'/><path d='M256 128v144h96' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/></svg>",xt="menu-outline",ze="close",Be=()=>{const t=document.querySelector(".site-header__toggle");if(!t)return;const e=document.querySelector(t.dataset.target);if(!e)return;const n=()=>{if(!e.classList.contains("is-hidden")){e.classList.add("is-hidden"),t.setAttribute("aria-expanded","false");const s=t.querySelector("ion-icon");s&&(s.name=xt)}};t.addEventListener("click",()=>{const s=t.getAttribute("aria-expanded")==="true";e.classList.toggle("is-hidden"),t.setAttribute("aria-expanded",s?"false":"true");const o=t.querySelector("ion-icon");o&&(o.name=s?xt:ze)}),document.addEventListener("click",s=>{const o=e.contains(s.target),i=t.contains(s.target);!o&&!i&&n()}),document.addEventListener("keydown",s=>{s.key==="Escape"&&n()})},Re={category:"data-category",categoryId:"data-category-id",emitMetadata:"data-emit-metadata",inputPosition:"data-input-position",lang:"data-lang",loading:"data-loading",mapping:"data-mapping",reactionsEnabled:"data-reactions-enabled",repo:"data-repo",repoId:"data-repo-id",strict:"data-strict",term:"data-term",theme:"data-theme"},De=t=>{if(!t||t.dataset.giscusLoaded==="true")return;const e=document.createElement("script");e.src=t.dataset.giscusScriptSrc||"https://giscus.app/client.js",e.async=!0,e.crossOrigin="anonymous";for(const[n,s]of Object.entries(Re)){const o=t.dataset[`giscus${n.charAt(0).toUpperCase()}${n.slice(1)}`];o&&e.setAttribute(s,o)}t.append(e),t.dataset.giscusLoaded="true"},We=()=>{const t=document.querySelectorAll("[data-comments-collapsible]");t.length&&t.forEach(e=>{const n=e.querySelector("[data-comments-toggle]"),s=e.querySelector("[data-comments-panel]"),o=e.querySelector("[data-giscus-mount]");!n||!s||!o||n.addEventListener("click",()=>{const c=!(n.getAttribute("aria-expanded")==="true");n.setAttribute("aria-expanded",c?"true":"false"),e.classList.toggle("is-open",c),s.hidden=!c,c&&De(o)})})},Xe=()=>{const t=document.querySelector("#main-header");if(!t)return;const e=()=>{if(window.scrollY>8){t.classList.add("is-scrolled");return}t.classList.remove("is-scrolled")};e(),window.addEventListener("scroll",e,{passive:!0})},Ze=()=>{const t=document.querySelectorAll("[data-series-collapsible]");t.length&&t.forEach(e=>{const n=e.querySelector("[data-series-toggle]"),s=e.querySelector("[data-series-panel]");if(!n||!s)return;const o=()=>{const c=n.getAttribute("aria-expanded")==="true";e.classList.toggle("is-open",c),s.hidden=!c};o(),n.addEventListener("click",()=>{const c=n.getAttribute("aria-expanded")==="true";n.setAttribute("aria-expanded",c?"false":"true"),o()});const i=e.querySelectorAll("[data-series-overflow-toggle]");i.length&&i.forEach(c=>{c.addEventListener("click",()=>{const r=c.dataset.seriesOverflowGroup,l=r?`[data-series-overflow-item][data-series-overflow-group="${r}"]`:"[data-series-overflow-item]";e.querySelectorAll(l).forEach(d=>{d.hidden=!1}),c.hidden=!0})})})},Ge=()=>{const t=document.querySelector("[data-reading-progress]"),e=document.querySelector(".content");if(!t||!e)return;const n=()=>{const s=e.offsetTop,o=e.offsetHeight,i=window.innerHeight,c=window.scrollY,r=Math.max(o-i,1),a=Math.min(Math.max(c-s,0),r)/r*100;t.style.transform=`scaleX(${a/100})`};n(),window.addEventListener("scroll",n,{passive:!0}),window.addEventListener("resize",n)};_t({"chevron-down-outline":Oe,close:Ce,"logo-github":Te,"logo-linkedin":Pe,"logo-twitter":He,"logo-youtube":qe,"menu-outline":je,"time-outline":Ue}),Ie(),Be(),We(),Xe(),Ze(),Ge()})();
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: imdhemy-jekyll-theme
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Mohamad Eldhemy
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-03-
|
|
11
|
+
date: 2026-03-10 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: jekyll
|
|
@@ -79,6 +79,7 @@ files:
|
|
|
79
79
|
- _includes/content.html
|
|
80
80
|
- _includes/contributions.html
|
|
81
81
|
- _includes/footer.html
|
|
82
|
+
- _includes/giscus-comments.html
|
|
82
83
|
- _includes/header.html
|
|
83
84
|
- _includes/hero.html
|
|
84
85
|
- _includes/latest-posts.html
|
|
@@ -87,7 +88,9 @@ files:
|
|
|
87
88
|
- _includes/pagination-links.html
|
|
88
89
|
- _includes/post-header.html
|
|
89
90
|
- _includes/post-item.html
|
|
91
|
+
- _includes/post-meta.html
|
|
90
92
|
- _includes/post-navigation.html
|
|
93
|
+
- _includes/post-series.html
|
|
91
94
|
- _includes/post-tags.html
|
|
92
95
|
- _includes/reading-progress.html
|
|
93
96
|
- _includes/related-posts.html
|