hexo-theme-gnix 6.0.1 → 6.0.3

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.
package/languages/en.yml CHANGED
@@ -41,7 +41,7 @@ plugin:
41
41
  policy: Cookie Policy
42
42
  search:
43
43
  search: "Search"
44
- hint: "Search(Ctrl/󰘳 + K)"
44
+ hint: "Search(󰘳 + K)"
45
45
  no_result: "No results for"
46
46
  untitled: "(Untitled)"
47
47
  empty_preview: "(No preview)"
@@ -41,7 +41,7 @@ plugin:
41
41
  policy: Cookie政策
42
42
  search:
43
43
  search: "搜索"
44
- hint: "想要查找什么...(Ctrl/󰘳 + K)"
44
+ hint: "想要查找什么...(󰘳 + K)"
45
45
  no_result: "未找到搜索结果"
46
46
  untitled: "(无标题)"
47
47
  empty_preview: "(无内容预览)"
@@ -8,10 +8,9 @@ const {
8
8
  class Twikoo extends Component {
9
9
  render() {
10
10
  const { envId, region, lang, jsUrl } = this.props;
11
- const js = `
12
- window.twikooConfig = { envId: '${envId}', ${region ? `region: ${JSON.stringify(region)},` : ""} ${lang ? `lang: ${JSON.stringify(lang)},` : ""} };
13
- twikoo.init(window.twikooConfig);
14
- `;
11
+ const configJs = `window.twikooConfig = { envId: '${envId}', ${
12
+ region ? `region: ${JSON.stringify(region)},` : ""
13
+ } ${lang ? `lang: ${JSON.stringify(lang)},` : ""} };`;
15
14
  const lazy_load_css_script = lazy_load_css("/css/twikoo.css");
16
15
  return (
17
16
  <Fragment>
@@ -19,7 +18,8 @@ twikoo.init(window.twikooConfig);
19
18
  <script
20
19
  dangerouslySetInnerHTML={{ __html: lazy_load_css_script }}
21
20
  ></script>
22
- <script defer src={jsUrl} onload={`${js}`}></script>
21
+ <script dangerouslySetInnerHTML={{ __html: configJs }}></script>
22
+ <script defer src={jsUrl}></script>
23
23
  </Fragment>
24
24
  );
25
25
  }
@@ -10,13 +10,9 @@ module.exports = class extends Component {
10
10
 
11
11
  return (
12
12
  <a href={url_for(page.link || page.path)} class="cover-image">
13
+ <img class="cover-lqip" src={lqip_src} alt="placeholder" />
13
14
  <img
14
- class="cover-image-placeholder"
15
- src={lqip_src}
16
- alt="placeholder"
17
- />
18
- <img
19
- class="fill"
15
+ class="cover-origin"
20
16
  src={cover}
21
17
  alt={page.title || cover}
22
18
  srcset={imageSrcset}
@@ -12,8 +12,8 @@ module.exports = class extends Component {
12
12
  return (
13
13
  <Fragment>
14
14
  {Object.keys(plugins).map((name) => {
15
- // plugin is not enabled
16
- if (!plugins[name]) {
15
+ // plugin is not enabled or is 'swup' (which is now built-in)
16
+ if (!plugins[name] || name === "swup") {
17
17
  return null;
18
18
  }
19
19
  const Plugin = loadComponent(`plugin/${name}`);
@@ -1,5 +1,6 @@
1
1
  const { Component, Fragment } = require("../../include/util/common");
2
2
  const Plugins = require("./plugins");
3
+ const Swup = require("../plugin/swup");
3
4
 
4
5
  module.exports = class extends Component {
5
6
  render() {
@@ -14,6 +15,7 @@ module.exports = class extends Component {
14
15
  helper={helper}
15
16
  head={false}
16
17
  />
18
+ <Swup head={false} />
17
19
  <script
18
20
  defer
19
21
  src="/js/host/iconify-icon/3.0.2/iconify-icon.min.js"
@@ -23,7 +25,7 @@ module.exports = class extends Component {
23
25
  defer
24
26
  src="/js/host/medium-zoom/dist/medium-zoom.min.js"
25
27
  ></script>
26
- <script defer src="/js/shiki/shiki.js"></script>
28
+ <script defer src="/js/mdit/shiki.js"></script>
27
29
  <script defer src="/js/main.js"></script>
28
30
  <script async src="/js/instant-page.min.js" type="module"></script>
29
31
  </Fragment>
@@ -41,7 +41,7 @@ class FloatingToc extends Component {
41
41
  </button>
42
42
  <div
43
43
  class="toc-body"
44
- onclick="if(event.target === this || event.target.closest('.toc-link')) { document.getElementById('icarus-toc-container').classList.remove('is-open'); }"
44
+ onclick="if(event.target === this || event.target.matches('.toc-link')) { document.getElementById('icarus-toc-container').classList.remove('is-open'); }"
45
45
  >
46
46
  <div dangerouslySetInnerHTML={{ __html: tocContent }} />
47
47
  </div>
package/layout/layout.jsx CHANGED
@@ -19,7 +19,11 @@ module.exports = class extends Component {
19
19
  <Navbar config={config} helper={helper} page={page} />
20
20
  <ThemeSelector />
21
21
  <section class="section">
22
- <div class="main-content" id="swup" dangerouslySetInnerHTML={{ __html: body }} ></div>
22
+ <div
23
+ class="main-content transition-fade"
24
+ id="swup"
25
+ dangerouslySetInnerHTML={{ __html: body }}
26
+ ></div>
23
27
  </section>
24
28
  <Footer site={site} config={config} helper={helper} />
25
29
  <Scripts site={site} config={config} helper={helper} page={page} />
@@ -10,6 +10,7 @@ class Swup extends Component {
10
10
  const swup = new Swup({
11
11
  containers: ["#swup"],
12
12
  cache: true,
13
+ native: true,
13
14
  plugins: [
14
15
  new SwupHeadPlugin({
15
16
  persistTags: true
@@ -26,7 +26,7 @@ class Insight extends Component {
26
26
  <div class="searchbox-body"></div>
27
27
  </div>
28
28
  </div>
29
- <script src={jsUrl} defer={true}></script>
29
+ <script defer src={jsUrl}></script>
30
30
  <script dangerouslySetInnerHTML={{ __html: js }}></script>
31
31
  </>
32
32
  );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hexo-theme-gnix",
3
- "version": "6.0.1",
3
+ "version": "6.0.3",
4
4
  "author": "Efterklang <gaojiaxing0220@gmail.com>",
5
5
  "license": "MIT",
6
6
  "description": "Second generation of Hexo theme Icarus, now with Catppuccin flavor and night mode support.",
@@ -769,10 +769,8 @@ body {
769
769
  margin: 1rem 0 1rem;
770
770
  border-bottom: 0.8px solid var(--surface0);
771
771
 
772
- > a.header-anchor {
773
- &:hover::after {
774
- content: "##";
775
- }
772
+ > a.header-anchor:hover::after {
773
+ content: "##";
776
774
  }
777
775
  }
778
776
 
@@ -783,10 +781,8 @@ body {
783
781
  letter-spacing: -0.015em;
784
782
  margin: 1.2rem 0 1rem;
785
783
 
786
- > a.header-anchor {
787
- &:hover::after {
788
- content: "###";
789
- }
784
+ > a.header-anchor:hover::after {
785
+ content: "###";
790
786
  }
791
787
  }
792
788
 
@@ -797,10 +793,8 @@ body {
797
793
  letter-spacing: -0.01em;
798
794
  margin: 1.2rem 0 1rem;
799
795
 
800
- > a.header-anchor {
801
- &:hover::after {
802
- content: "####";
803
- }
796
+ > a.header-anchor:hover::after {
797
+ content: "####";
804
798
  }
805
799
  }
806
800
 
@@ -811,10 +805,8 @@ body {
811
805
  letter-spacing: -0.005em;
812
806
  margin: 1.2rem 0 1rem;
813
807
 
814
- > a.header-anchor {
815
- &:hover::after {
816
- content: "#####";
817
- }
808
+ > a.header-anchor:hover::after {
809
+ content: "#####";
818
810
  }
819
811
  }
820
812
 
@@ -824,10 +816,8 @@ body {
824
816
  line-height: 1.25;
825
817
  margin: 1.2rem 0 1rem;
826
818
 
827
- > a.header-anchor {
828
- &:hover::after {
829
- content: "######";
830
- }
819
+ > a.header-anchor:hover::after {
820
+ content: "######";
831
821
  }
832
822
  }
833
823
 
@@ -1254,18 +1244,20 @@ section {
1254
1244
  margin-bottom: 0.25rem;
1255
1245
  }
1256
1246
 
1257
- .licensing-meta .level-item {
1258
- margin-right: 1.5rem;
1259
- font-size: 0.75rem;
1260
- }
1247
+ .licensing-meta {
1248
+ .level-item {
1249
+ margin-right: 1.5rem;
1250
+ font-size: 0.75rem;
1251
+ }
1261
1252
 
1262
- .licensing-meta iconify-icon {
1263
- font-size: 1.5em;
1264
- vertical-align: bottom;
1265
- }
1253
+ iconify-icon {
1254
+ font-size: 1.5em;
1255
+ vertical-align: bottom;
1256
+ }
1266
1257
 
1267
- .licensing-meta a {
1268
- color: inherit;
1258
+ a {
1259
+ color: inherit;
1260
+ }
1269
1261
  }
1270
1262
 
1271
1263
  /* #endregion Licensing */
@@ -1284,12 +1276,12 @@ section {
1284
1276
  opacity: 0;
1285
1277
  visibility: hidden;
1286
1278
  display: flex;
1287
- }
1288
1279
 
1289
- .searchbox.show {
1290
- opacity: 1;
1291
- visibility: visible;
1292
- backdrop-filter: blur(5px);
1280
+ &.show {
1281
+ opacity: 1;
1282
+ visibility: visible;
1283
+ backdrop-filter: blur(5px);
1284
+ }
1293
1285
  }
1294
1286
 
1295
1287
  input.searchbox-input {
@@ -1369,6 +1361,7 @@ input.searchbox-input {
1369
1361
 
1370
1362
  .searchbox-result-preview {
1371
1363
  color: var(--subtext0);
1364
+ margin-top: 0.25em;
1372
1365
  }
1373
1366
 
1374
1367
  .searchbox-result-preview,
@@ -1379,14 +1372,8 @@ input.searchbox-input {
1379
1372
  text-overflow: ellipsis;
1380
1373
  }
1381
1374
 
1382
- .searchbox-result-preview {
1383
- margin-top: 0.25em;
1384
- }
1385
-
1386
1375
  /* #endregion Search */
1387
1376
 
1388
- /* #region Article Cover */
1389
-
1390
1377
  .cover-image {
1391
1378
  position: relative;
1392
1379
  display: block;
@@ -1394,7 +1381,14 @@ input.searchbox-input {
1394
1381
  border-radius: var(--radius) var(--radius) 0 0;
1395
1382
  height: 380px;
1396
1383
 
1397
- .cover-image-placeholder {
1384
+ img {
1385
+ display: block;
1386
+ width: 100%;
1387
+ height: 100%;
1388
+ object-fit: cover;
1389
+ }
1390
+
1391
+ .cover-lqip {
1398
1392
  position: absolute;
1399
1393
  top: 0;
1400
1394
  left: 0;
@@ -1402,17 +1396,29 @@ input.searchbox-input {
1402
1396
  filter: blur(10px);
1403
1397
  }
1404
1398
 
1405
- .fill {
1399
+ .cover-origin {
1406
1400
  position: relative;
1407
1401
  z-index: 2;
1408
1402
  }
1409
1403
  }
1410
1404
 
1411
- .cover-image img {
1412
- display: block;
1413
- width: 100%;
1414
- height: 100%;
1415
- object-fit: cover;
1405
+ /* html.is-changing .transition-fade {
1406
+ view-transition-name: main;
1407
+ }
1408
+
1409
+ ::view-transition-old(main) {
1410
+ animation: fade 0.5s ease-in-out both;
1411
+ }
1412
+
1413
+ ::view-transition-new(main) {
1414
+ animation: fade 0.5s ease-in-out both reverse;
1416
1415
  }
1417
1416
 
1418
- /* #endregion Article Cover */
1417
+ @keyframes fade {
1418
+ from {
1419
+ opacity: 1;
1420
+ }
1421
+ to {
1422
+ opacity: 0;
1423
+ }
1424
+ } */
@@ -0,0 +1,123 @@
1
+ .mermaid-container {
2
+ margin: 1em 0;
3
+ position: relative;
4
+ }
5
+ .mermaid-wrapper {
6
+ border: 1px solid var(--surface0);
7
+ border-radius: 6px;
8
+ overflow: hidden;
9
+ position: relative;
10
+ background: var(--mantle);
11
+ }
12
+ .mermaid-toolbar {
13
+ position: absolute;
14
+ top: 8px;
15
+ right: 8px;
16
+ z-index: 20;
17
+ display: flex;
18
+ gap: 4px;
19
+ opacity: 0;
20
+ transition: opacity 0.2s ease;
21
+ }
22
+ .mermaid-wrapper:hover .mermaid-toolbar {
23
+ opacity: 1;
24
+ }
25
+ .mermaid-view-container {
26
+ position: relative;
27
+ width: 100%;
28
+ height: 100%;
29
+ min-height: 200px;
30
+ overflow: hidden;
31
+ cursor: grab;
32
+ display: flex;
33
+ flex-direction: column;
34
+ }
35
+ .mermaid-view-container:active {
36
+ cursor: grabbing;
37
+ }
38
+ .mermaid-content {
39
+ width: 100%;
40
+ flex: 1;
41
+ display: flex;
42
+ justify-content: center;
43
+ align-items: center;
44
+ padding: 20px;
45
+ box-sizing: border-box;
46
+ transform-origin: center;
47
+ transition: transform 0.2s ease;
48
+ }
49
+ .mermaid-viewer-grid-panel {
50
+ position: absolute;
51
+ bottom: 8px;
52
+ right: 8px;
53
+ z-index: 10;
54
+ opacity: 0;
55
+ transition: opacity 0.2s ease;
56
+ display: grid;
57
+ grid-template-rows: repeat(3, 1fr);
58
+ gap: 4px;
59
+ }
60
+ .mermaid-wrapper:hover .mermaid-viewer-grid-panel {
61
+ opacity: 1;
62
+ }
63
+ .mermaid-viewer-grid-panel .grid-row {
64
+ display: grid;
65
+ grid-template-columns: repeat(3, 1fr);
66
+ gap: 4px;
67
+ }
68
+ .mermaid-viewer-grid-panel .empty-cell {
69
+ width: 32px;
70
+ height: 32px;
71
+ }
72
+ .btn {
73
+ display: flex;
74
+ align-items: center;
75
+ justify-content: center;
76
+ width: 32px;
77
+ height: 32px;
78
+ background: var(--base);
79
+ border: 1px solid var(--surface0);
80
+ border-radius: 6px;
81
+ cursor: pointer;
82
+ transition: all 0.2s ease;
83
+ backdrop-filter: blur(4px);
84
+ color: var(--text);
85
+ padding: 0;
86
+ }
87
+ .btn:hover {
88
+ transform: scale(1.05);
89
+ }
90
+ .btn:active {
91
+ transform: scale(0.95);
92
+ }
93
+ .btn svg {
94
+ fill: currentColor;
95
+ }
96
+ .mermaid-loading {
97
+ display: flex;
98
+ align-items: center;
99
+ justify-content: center;
100
+ position: absolute;
101
+ top: 0;
102
+ left: 0;
103
+ width: 100%;
104
+ height: 100%;
105
+ color: #586069;
106
+ font-style: italic;
107
+ background: rgba(255, 255, 255, 0.5);
108
+ z-index: 5;
109
+ }
110
+
111
+ @media (max-width: 768px) {
112
+ .mermaid-wrapper {
113
+ border-radius: 3px;
114
+ }
115
+ .mermaid-toolbar,
116
+ .mermaid-viewer-grid-panel {
117
+ opacity: 1;
118
+ }
119
+ .btn {
120
+ width: 28px;
121
+ height: 28px;
122
+ }
123
+ }
@@ -45,16 +45,16 @@
45
45
  transform: translateY(-50%);
46
46
  }
47
47
 
48
- #icarus-toc-container .toc-button {
48
+ .toc-button {
49
49
  display: none;
50
50
  }
51
51
 
52
- #icarus-toc-container .toc-body {
52
+ .toc-body {
53
53
  display: block;
54
54
  background: transparent;
55
55
  }
56
56
 
57
- #icarus-toc-container .toc {
57
+ .toc {
58
58
  padding: 0;
59
59
  margin: 0;
60
60
  list-style: none;
@@ -63,7 +63,7 @@
63
63
  align-items: flex-end;
64
64
  }
65
65
 
66
- #icarus-toc-container .toc-item {
66
+ .toc-item {
67
67
  list-style: none;
68
68
  margin-bottom: 8px;
69
69
  position: relative;
@@ -73,91 +73,82 @@
73
73
  align-items: flex-end;
74
74
  }
75
75
 
76
- #icarus-toc-container .toc-link {
76
+ /* Text Label */
77
+ .toc-text {
78
+ opacity: 0;
79
+ transform: translateX(10px);
80
+ transition: all 0.3s ease;
81
+ font-size: 0.9rem;
82
+ color: var(--text);
83
+ white-space: nowrap;
84
+ position: absolute;
85
+ right: 100%;
86
+ margin-right: 10px;
87
+ pointer-events: none;
88
+ }
89
+
90
+ /* Hover on Container -> Show all text */
91
+ #icarus-toc-container:hover .toc-text {
92
+ opacity: 1;
93
+ transform: translateX(0);
94
+ }
95
+
96
+ .toc-link {
77
97
  display: flex;
78
98
  align-items: center;
79
99
  justify-content: flex-end;
80
100
  text-decoration: none;
81
- height: 20px;
101
+ height: 23px;
82
102
  position: relative;
103
+ &:hover {
104
+ &::after {
105
+ background-color: var(--rosewater);
106
+ box-shadow: 0 0 8px var(--lavender);
107
+ }
108
+ .toc-text {
109
+ color: var(--mauve);
110
+ }
111
+ }
83
112
  }
84
113
 
85
114
  /* The Abstract Bar */
86
- #icarus-toc-container .toc-link::after {
115
+ .toc-link::after {
87
116
  content: "";
88
117
  display: block;
89
118
  height: 4px;
90
119
  border-radius: 2px;
91
- background-color: var(--text);
92
- opacity: 0.3;
120
+ background-color: var(--surface0);
93
121
  transition: all 0.3s ease;
94
122
  margin-left: 15px;
95
123
  }
96
124
 
97
125
  /* Level variations - Width */
98
- #icarus-toc-container .toc-level-1 > .toc-link::after {
126
+ .toc-level-1 > .toc-link::after {
99
127
  width: 30px;
100
128
  }
101
129
 
102
- #icarus-toc-container .toc-level-2 > .toc-link::after {
130
+ .toc-level-2 > .toc-link::after {
131
+ width: 30px;
132
+ }
133
+
134
+ .toc-level-3 > .toc-link::after {
103
135
  width: 24px;
104
136
  }
105
137
 
106
- #icarus-toc-container .toc-level-3 > .toc-link::after {
138
+ .toc-level-4 > .toc-link::after {
107
139
  width: 18px;
108
140
  }
109
141
 
110
- #icarus-toc-container .toc-level-4 > .toc-link::after {
142
+ .toc-level-5 > .toc-link::after {
111
143
  width: 14px;
112
144
  }
113
145
 
114
- #icarus-toc-container .toc-level-5 > .toc-link::after {
146
+ .toc-level-6 > .toc-link::after {
115
147
  width: 10px;
116
148
  }
117
149
 
118
- #icarus-toc-container .toc-level-6 > .toc-link::after {
119
- width: 6px;
120
- }
121
-
122
- /* Text Label */
123
- #icarus-toc-container .toc-text {
124
- opacity: 0;
125
- transform: translateX(10px);
126
- transition: all 0.3s ease;
127
- font-size: 0.85rem;
128
- color: var(--text);
129
- white-space: nowrap;
130
- position: absolute;
131
- right: 100%;
132
- /* Position to the left of the link/bar */
133
- margin-right: 10px;
134
- pointer-events: none;
135
- }
136
-
137
- /* Hover on Container -> Show all text */
138
- #icarus-toc-container:hover .toc-text {
139
- opacity: 1;
140
- transform: translateX(0);
141
- }
142
-
143
- /* Active State */
144
- #icarus-toc-container .toc-item.is-active > .toc-link::after {
145
- background-color: var(--lavender);
146
- opacity: 1;
147
- width: 40px;
148
- /* Highlighted length */
149
- box-shadow: 0 0 8px var(--lavender);
150
- }
151
-
152
- #icarus-toc-container .toc-item.is-active > .toc-link .toc-text {
153
- opacity: 1;
154
- transform: translateX(0);
155
- font-weight: bold;
156
- color: var(--lavender);
157
- }
158
-
159
150
  /* Hide children lists container styling if any */
160
- #icarus-toc-container .toc-child {
151
+ .toc-child {
161
152
  padding: 0;
162
153
  margin: 0;
163
154
  display: contents;
@@ -26,10 +26,10 @@
26
26
  justify-content: center;
27
27
  display: inline-flex;
28
28
  flex-direction: row;
29
- padding: 1rem 0;
30
29
  width: 100%;
31
- .navbar-item {
30
+ > .navbar-item {
32
31
  font-size: 1.25em;
32
+ padding: 1em;
33
33
  }
34
34
  }
35
35
 
@@ -136,23 +136,10 @@
136
136
  /* #endregion Navbar */
137
137
 
138
138
  .theme-selector-content {
139
- width: 95%;
139
+ width: 80%;
140
140
  padding: 1.5rem;
141
141
  }
142
142
 
143
- .theme-selector-title {
144
- font-size: 1.5rem;
145
- }
146
-
147
- .theme-option {
148
- padding: 0.875rem 1rem;
149
- gap: 0.75rem;
150
- }
151
-
152
- .theme-option .theme-name {
153
- font-size: 1rem;
154
- }
155
-
156
143
  /* #region TOC */
157
144
  #icarus-toc-container .toc-button:hover {
158
145
  transform: scale(1.1);