imdhemy-jekyll-theme 1.0.0 → 1.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 68a2421fc01b914158903f38955d459bdadcd29e8daf429cf68db51871921ba8
4
- data.tar.gz: 1ffae175b00a683ef6e42746332ec76ad48784560e5d1b4a0ef886c842bcfe45
3
+ metadata.gz: 70e37e5813d32c399c961ac038eaccf43d750e12c301bea3e87894057a5f5204
4
+ data.tar.gz: afa1ea70ebc0a3a774dd50e7899bae7b672cb9f28594ba88f0343e7fc1511f91
5
5
  SHA512:
6
- metadata.gz: d4104d5d88e7915ae5b1648b3987fc5d6b74cd3eb3e29a1fe15928b6a3a27a02d421371455066d3730d144665760fe7cf437f1603c4775b83af0c2483ba5df8a
7
- data.tar.gz: 3095cf8e24b5308c8a0f5578c4179c5cf8e1cd68ab7af867ff3484d9901d43d06f8f5ba9598e3404a09d1154c5d9a09f9573721be71c8604a11a77730f5c1af3
6
+ metadata.gz: cc9619152956c9c89755ed900ddca83eaded5821648027fe60f7f69d519fab9380d7579491833677743806f9ee195934ebebba122c8ceccf49a362c49ee75324
7
+ data.tar.gz: 2258695d5eeb2ac5a204b1dd12e8bf37420fa1573c843cbf94125efb6b84630009d7dde43a238b436e1dd4af1836b4d9c37a954c04833c5480b74091aebcc3cd
data/README.md CHANGED
@@ -1,134 +1,27 @@
1
1
  # Imdhemy Jekyll Theme
2
2
 
3
- Jekyll theme for my personal website. [imdhemy.com](https://imdhemy.com)
3
+ Jekyll theme for my personal website: [imdhemy.com](https://imdhemy.com).
4
4
 
5
- ## Installation (Recommended: RubyGem)
5
+ ## Documentation
6
6
 
7
- Install the theme as a gem and pin a semantic version.
7
+ All documentation lives in the [`docs/`](./docs) directory.
8
8
 
9
- Add to your site's `Gemfile`:
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
- ```ruby
12
- gem "imdhemy-jekyll-theme", "1.0.0"
13
- ```
17
+ ## Example Site
14
18
 
15
- Set the theme in your site's `_config.yml`:
19
+ A complete runnable example is available in [`example/`](./example).
16
20
 
17
- ```yaml
18
- theme: imdhemy-jekyll-theme
19
- ```
21
+ ## Development
20
22
 
21
- Then run:
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](/LICENSE.txt).
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 %}
@@ -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">&larr; {{ back_to_posts_label }}</a>
5
- <p class="post-header__meta">{{ page.date | date: "%b %-d, %Y" }} · {{ read_minutes }} min read</p>
6
- <div>
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">
@@ -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 }} &rarr;</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">&middot;</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>
data/_layouts/post.html CHANGED
@@ -9,6 +9,8 @@ layout: default
9
9
 
10
10
  {% include content.html %}
11
11
 
12
+ {% include giscus-comments.html %}
13
+
12
14
  {% include post-navigation.html %}
13
15
 
14
16
  {% include related-posts.html %}
@@ -396,11 +396,37 @@
396
396
  }
397
397
 
398
398
  .post-card__meta {
399
- margin-bottom: 0.85rem;
400
- font-size: 0.8rem;
401
- font-weight: 600;
402
- letter-spacing: 0.02em;
403
- color: var(--color-muted);
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: 1.25rem;
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);
@@ -552,20 +592,12 @@
552
592
  }
553
593
 
554
594
  .post-page .post-title {
555
- margin-bottom: 1.2rem;
595
+ margin-bottom: 0.95rem;
556
596
  font-size: clamp(2rem, 4.8vw, 3.25rem);
557
597
  line-height: 1.15;
558
598
  letter-spacing: -0.015em;
559
599
  }
560
600
 
561
- .post-header__meta {
562
- margin-bottom: 0.75rem;
563
- font-size: 0.8rem;
564
- font-weight: 600;
565
- letter-spacing: 0.02em;
566
- color: var(--color-muted);
567
- }
568
-
569
601
  .post-page .post-image-wrap {
570
602
  margin-top: 0.45rem;
571
603
  border-radius: 0.8rem;
@@ -591,18 +623,98 @@
591
623
  }
592
624
 
593
625
  .post-page .post-navigation-shell,
594
- .post-page .related-posts-shell {
626
+ .post-page .related-posts-shell,
627
+ .post-page .comments-shell {
595
628
  margin-top: 1rem;
596
629
  }
597
630
 
631
+ .post-page .comments-shell__inner,
598
632
  .post-page .post-navigation-shell__inner,
599
633
  .post-page .related-posts-shell__inner {
634
+ margin-inline: auto;
600
635
  padding: 1.1rem;
601
636
  border: 1px solid color-mix(in srgb, var(--color-border) 84%, #c9d6ff 16%);
602
637
  border-radius: 1rem;
603
638
  background: #fff;
604
639
  }
605
640
 
641
+ .post-page .comments-shell__inner {
642
+ padding: 2rem 2rem 1.8rem;
643
+ }
644
+
645
+ .comments-shell__heading {
646
+ display: block;
647
+ margin-bottom: 0.3rem;
648
+ font-size: 1.3rem;
649
+ font-weight: 800;
650
+ }
651
+
652
+ .comments-collapsible {
653
+ padding-top: 1.15rem;
654
+ padding-bottom: 1.15rem;
655
+ }
656
+
657
+ .comments-collapsible__toggle {
658
+ display: flex;
659
+ align-items: center;
660
+ justify-content: space-between;
661
+ width: 100%;
662
+ padding: 0;
663
+ border: 0;
664
+ background: transparent;
665
+ text-align: left;
666
+ cursor: pointer;
667
+ }
668
+
669
+ .comments-collapsible__copy {
670
+ display: block;
671
+ }
672
+
673
+ .comments-collapsible__hint {
674
+ display: block;
675
+ color: var(--color-muted);
676
+ font-size: 0.9rem;
677
+ font-weight: 600;
678
+ }
679
+
680
+ .comments-collapsible__icon-wrap {
681
+ display: inline-flex;
682
+ align-items: center;
683
+ justify-content: center;
684
+ width: 2rem;
685
+ height: 2rem;
686
+ border: 1px solid color-mix(in srgb, var(--color-border) 84%, #c9d6ff 16%);
687
+ border-radius: 999px;
688
+ color: var(--color-muted);
689
+ transition: color 0.2s ease, border-color 0.2s ease;
690
+ }
691
+
692
+ .comments-collapsible__icon {
693
+ font-size: 1rem;
694
+ transition: transform 0.2s ease;
695
+ }
696
+
697
+ .comments-collapsible__panel {
698
+ margin-top: 0.95rem;
699
+ padding-top: 1rem;
700
+ border-top: 1px solid color-mix(in srgb, var(--color-border) 84%, #c9d6ff 16%);
701
+ }
702
+
703
+ .comments-collapsible.is-open .comments-collapsible__icon {
704
+ transform: rotate(180deg);
705
+ }
706
+
707
+ .comments-collapsible__toggle:hover .comments-collapsible__icon-wrap {
708
+ color: var(--color-brand);
709
+ border-color: color-mix(in srgb, var(--color-brand) 48%, var(--color-border) 52%);
710
+ }
711
+
712
+ .comments-collapsible__toggle:focus-visible {
713
+ outline: 2px solid color-mix(in srgb, var(--color-brand) 55%, white 45%);
714
+ outline-offset: 0.4rem;
715
+ border-radius: 0.5rem;
716
+ }
717
+
606
718
  .post-page .post-navigation {
607
719
  grid-template-columns: repeat(2, minmax(0, 1fr));
608
720
  gap: 0.9rem;
@@ -1482,16 +1594,31 @@
1482
1594
 
1483
1595
  .post-page .post-header,
1484
1596
  .post-page .content-shell,
1597
+ .post-page .comments-shell__inner,
1485
1598
  .post-page .post-navigation-shell__inner,
1486
1599
  .post-page .related-posts-shell__inner {
1487
1600
  width: min(100% - 2rem, 880px);
1488
1601
  }
1489
1602
 
1603
+ .post-page .comments-shell__inner,
1490
1604
  .post-page .post-navigation-shell__inner,
1491
1605
  .post-page .related-posts-shell__inner {
1492
1606
  padding: 0.9rem;
1493
1607
  }
1494
1608
 
1609
+ .post-page .comments-shell__inner {
1610
+ padding: 1.25rem 1rem 1.1rem;
1611
+ }
1612
+
1613
+ .comments-shell__heading {
1614
+ font-size: 1.16rem;
1615
+ }
1616
+
1617
+ .comments-collapsible__icon-wrap {
1618
+ width: 1.85rem;
1619
+ height: 1.85rem;
1620
+ }
1621
+
1495
1622
  .post-page .post-navigation {
1496
1623
  grid-template-columns: 1fr;
1497
1624
  }
@@ -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 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 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=_t(),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),_=new Map,Tt="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,n,s)=>t.addEventListener(e,n,s),rel:(t,e,n,s)=>t.removeEventListener(e,n,s),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})(),j=!1,N=[],tt=[],jt=(t,e)=>n=>{t.push(n),j||(j=!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),(j=N.length>0)&&v.raf(nt)},U=t=>Pt().then(t),Ut=jt(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,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 L;function Zt(t){var e;const n=this.attachShadow({mode:"open"});L===void 0&&(L=(e=void 0)!=null?e:null),L&&n.adoptedStyleSheets.push(L)}var w=(t,e="")=>()=>{},m=new WeakMap,Ft=(t,e,n)=>{let s=_.get(t);V&&n?(s=s||new CSSStyleSheet,typeof s=="string"?s=e:s.replaceSync(e)):s=e,_.set(t,s)},Gt=(t,e,n)=>{var s;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=(s=v.$nonce$)!=null?s: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+=Tt),l&&l.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=Gt(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,l=!1;const r=[],a=d=>{for(let f=0;f<d.length;f++)s=d[f],Array.isArray(s)?a(s):s!=null&&typeof s!="boolean"&&((i=typeof t!="function"&&!q(s))&&(s=String(s)),i&&l?r[r.length-1].$text$+=s:r.push(i?B(null,s):s),l=i)};if(a(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 c=B(t,null);return c.$attrs$=e,r.length>0&&(c.$children$=r),c.$key$=o,c},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&&!q(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,l)=>{if(n===s)return;let r=J(t,e),a=e.toLowerCase();if(e==="class"){const c=t.classList,d=lt(n);let f=lt(s);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 n)(!s||s[c]==null)&&(c.includes("-")?t.style.removeProperty(c):t.style[c]="");for(const c in s)(!n||s[c]!==n[c])&&(c.includes("-")?t.style.setProperty(c,s[c]):t.style[c]=s[c])}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,a)?e=a.slice(2):e=a[2]+e.slice(3),n||s){const c=e.endsWith(at);e=e.replace(Vt,""),n&&v.rel(t,e,n,c),s&&v.ael(t,e,s,c)}}else{const c=q(s);if(r||c&&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;a!==(a=a.replace(/^xlink\:?/,""))&&(e=a,d=!0),s==null||s===!1?(s!==!1||t.getAttribute(e)==="")&&(d?t.removeAttributeNS(Q,e):t.removeAttribute(e)):(!r||i&4||o)&&!c&&t.nodeType===1&&(s=s===!0?"":s,d?t.setAttributeNS(Q,e,s):t.setAttribute(e,s))}},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,n,s)=>{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,n,e.$flags$);for(const r of ft(Object.keys(l)))ct(o,r,i[r],l[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,l;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)l=I(t,s,o),l&&i.appendChild(l)}return i["s-hn"]=D,i},$t=(t,e,n,s,o,i)=>{let l=t,r;for(l.shadowRoot&&l.tagName===D&&(l=l.shadowRoot);o<=i;++o)s[o]&&(r=I(null,n,o),r&&(s[o].$elm$=r,C(l,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,l=0,r=0,a=0,c=e.length-1,d=e[0],f=e[c],u=s.length-1,$=s[0],p=s[u],g,x;for(;i<=c&&l<=u;)if(d==null)d=e[++i];else if(f==null)f=e[--c];else if($==null)$=s[++l];else if(p==null)p=s[--u];else if(O(d,$,o))S(d,$,o),d=e[++i],$=s[++l];else if(O(f,p,o))S(f,p,o),f=e[--c],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[--c],$=s[++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?(x=e[r],x.$tag$!==$.$tag$?g=I(e&&e[l],n,r):(S(x,$,o),e[r]=void 0,g=x.$elm$),$=s[++l]):(g=I(e&&e[l],n,l),$=s[++l]),g&&C(d.$elm$.parentNode,g,d.$elm$)}i>c?$t(t,s[u+1]==null?null:s[u+1].$elm$,n,s,l,u):l>u&&ht(e,i,c)},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$,l=e.$text$;l===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$!==l&&(s.data=l)},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(([a,c])=>r.$attrs$[c]=s[a])),n&&r.$attrs$)for(const a of Object.keys(r.$attrs$))s.hasAttribute(a)&&!["key","ref","style","class"].includes(a)&&(r.$attrs$[a]=s[a]);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$),Ut(()=>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$),l=o["s-rc"];n&&Yt(t);const r=w("render",t.$cmpMeta$.$tagName$);oe(t,e,o,n),l&&(l.map(a=>a()),o["s-rc"]=void 0),r(),i();{const a=(s=o["s-p"])!=null?s:[],c=()=>ie(t);a.length===0?c():(Promise.all(a).then(c),t.$flags$|=4,a.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&&U(()=>W(t,!1)),t.$flags$&=-517},re=t=>{U(()=>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")},le=(t,e)=>y(t).$instanceValues$.get(e),yt=(t,e,n,s)=>{const o=y(t),i=t,l=o.$instanceValues$.get(e),r=o.$flags$,a=i;n=rt(n,s.$members$[e][0]);const c=Number.isNaN(l)&&Number.isNaN(n);if(n!==l&&!c){o.$instanceValues$.set(e,n);{if(s.$watchers$&&r&128){const f=s.$watchers$[e];f&&f.map(u=>{try{a[u](n,l,e)}catch($){A($,i)}})}if((r&18)===2){if(a.componentShouldUpdate&&a.componentShouldUpdate(n,l,e)===!1)return;W(o,!1)}}}},ae=(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 l=Object.entries((s=e.$members$)!=null?s:{});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)&&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!==c){const Y=this,Et=(f=e.$watchers$)==null?void 0:f[a];Et?.forEach(At=>{Y[At]!=null&&Y[At].call(Y,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,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 a=ot(n);if(!_.has(a)){const c=w("registerStyles",n.$tagName$);Ft(a,r,!!(n.$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),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 l=t[o];delete t[o],t[o]=l}}),E.initializeNextTick?U(()=>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$,ae(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 qt(`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&&H(n))==="ios"?"ios":"md",s&&n==="ios"?t=H(s):o&&n==="md"?t=H(o):(!t&&e&&!St(e)&&(t=e),T(t)&&(t=H(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",H=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 F;function G(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(G(t)))};function ke(t){F||(F=new DOMParser);const n=F.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(()=>G(t))).catch(()=>G(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 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,n,s){if(!!!(this.lazy&&typeof window<"u"&&window.IntersectionObserver))return s();const i=this.io=new window.IntersectionObserver(l=>{l[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",l=n?(n.includes("arrow")||n.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)})},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"]}]),_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='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>",He="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>",Pe="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>",je="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>",qe="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 l=!(n.getAttribute("aria-expanded")==="true");n.setAttribute("aria-expanded",l?"true":"false"),e.classList.toggle("is-open",l),s.hidden=!l,l&&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.querySelector("[data-reading-progress]"),e=document.querySelector(".content");if(!t||!e)return;const n=()=>{const s=e.offsetTop,o=e.offsetHeight,i=window.innerHeight,l=window.scrollY,r=Math.max(o-i,1),c=Math.min(Math.max(l-s,0),r)/r*100;t.style.transform=`scaleX(${c/100})`};n(),window.addEventListener("scroll",n,{passive:!0}),window.addEventListener("resize",n)};Lt({"chevron-down-outline":Oe,close:Ce,"logo-github":Te,"logo-linkedin":He,"logo-twitter":Pe,"logo-youtube":je,"menu-outline":Ue,"time-outline":qe}),Ie(),Be(),We(),Xe(),Ze()})();
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: imdhemy-jekyll-theme
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mohamad Eldhemy
@@ -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,6 +88,7 @@ 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
91
93
  - _includes/post-tags.html
92
94
  - _includes/reading-progress.html