valaxy-theme-hairy 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. package/@types/markdown-it.d.ts +1 -0
  2. package/@types/markdown-toc.d.ts +1 -0
  3. package/@types/types.d.ts +1 -0
  4. package/@types/valaxy.d.ts +10 -0
  5. package/LICENSE +21 -0
  6. package/components/HairyAlgoliaSearchBox.vue +118 -0
  7. package/components/HairyArticleImage.vue +17 -0
  8. package/components/HairyArticleImageDefault.vue +127 -0
  9. package/components/HairyArticleImageSmall.vue +49 -0
  10. package/components/HairyArticleSeries.vue +73 -0
  11. package/components/HairyArticleText.vue +38 -0
  12. package/components/HairyArticleTop.vue +0 -0
  13. package/components/HairyBackToTop.vue +72 -0
  14. package/components/HairyBody.vue +55 -0
  15. package/components/HairyBreadcrumb.vue +51 -0
  16. package/components/HairyBreadcrumbItem.vue +14 -0
  17. package/components/HairyCarousel.vue +45 -0
  18. package/components/HairyDivider.vue +0 -0
  19. package/components/HairyHeader.vue +31 -0
  20. package/components/HairyImage.vue +14 -0
  21. package/components/HairyImageGroup.vue +69 -0
  22. package/components/HairyImageViewer.vue +22 -0
  23. package/components/HairyLayout.vue +29 -0
  24. package/components/HairyLink.vue +10 -0
  25. package/components/HairyMenu.vue +15 -0
  26. package/components/HairyMenuItem.vue +40 -0
  27. package/components/HairyMeting.vue +19 -0
  28. package/components/HairyNav.vue +39 -0
  29. package/components/HairyNavBackground.vue +7 -0
  30. package/components/HairyNavSearch.vue +265 -0
  31. package/components/HairyNavTitle.vue +13 -0
  32. package/components/HairyNavToggleDark.vue +16 -0
  33. package/components/HairyPostImageList.vue +28 -0
  34. package/components/HairyPostList.vue +24 -0
  35. package/components/HairyPostTitle.vue +33 -0
  36. package/components/HairySocialLinks.vue +27 -0
  37. package/components/HairyTimelinePostItem.vue +40 -0
  38. package/components/HairyToc.vue +135 -0
  39. package/components/HairyUserCard.vue +30 -0
  40. package/components/HairyUserNav.vue +68 -0
  41. package/components/HairyUserTab.vue +40 -0
  42. package/components/HairyWaline.vue +25 -0
  43. package/components/HairyWaves.vue +67 -0
  44. package/components/ValaxyMain.vue +45 -0
  45. package/hooks/useCategory.ts +18 -0
  46. package/hooks/useCategoryPost.ts +21 -0
  47. package/hooks/useContext.ts +16 -0
  48. package/hooks/useHeaderHeight.ts +9 -0
  49. package/hooks/usePostLayout.ts +9 -0
  50. package/hooks/useYearArchives.ts +43 -0
  51. package/images.json +101 -0
  52. package/index.d.ts +54 -0
  53. package/layouts/archives.vue +11 -0
  54. package/layouts/categories.vue +6 -0
  55. package/layouts/default.vue +9 -0
  56. package/layouts/home.vue +23 -0
  57. package/layouts/month.vue +6 -0
  58. package/layouts/post.vue +26 -0
  59. package/layouts/tag.vue +6 -0
  60. package/layouts/tags.vue +6 -0
  61. package/layouts/year.vue +6 -0
  62. package/locales/en.yml +1 -0
  63. package/locales/zh-CN.yml +3 -0
  64. package/modules/context.ts +5 -0
  65. package/modules/loading.scss +531 -0
  66. package/modules/loading.ts +42 -0
  67. package/modules/scroll.ts +21 -0
  68. package/node/addon-hairy.ts +18 -0
  69. package/node/addon-images.ts +61 -0
  70. package/node/addon-meting.ts +13 -0
  71. package/node/addon-statistics.ts +19 -0
  72. package/node/addon-toc.ts +20 -0
  73. package/node/utils.ts +20 -0
  74. package/package.json +47 -0
  75. package/pages/archives/[year]/[month]/index.vue +52 -0
  76. package/pages/archives/[year]/index.vue +73 -0
  77. package/pages/archives/index.vue +53 -0
  78. package/pages/categories/[...categories].vue +115 -0
  79. package/pages/index.vue +14 -0
  80. package/pages/tags/[tag].vue +40 -0
  81. package/pages/tags/index.vue +31 -0
  82. package/setup/main.ts +11 -0
  83. package/shims.d.ts +8 -0
  84. package/styles/css-vars.scss +161 -0
  85. package/styles/element-plus/index.scss +2 -0
  86. package/styles/element-plus/tabs.scss +26 -0
  87. package/styles/element-plus/timeline.scss +19 -0
  88. package/styles/font-face.scss +20 -0
  89. package/styles/fonts/FrederickatheGreat.ttf +0 -0
  90. package/styles/fonts/Modesty.ttf +0 -0
  91. package/styles/fonts/MountainsofChristmas-Bold.ttf +0 -0
  92. package/styles/fonts/MountainsofChristmas-Regular.ttf +0 -0
  93. package/styles/fonts/Seto.ttf +0 -0
  94. package/styles/index.scss +65 -0
  95. package/styles/markdown.scss +60 -0
  96. package/styles/scrollbar.scss +26 -0
  97. package/unocss.config.ts +29 -0
  98. package/utils/createContext.ts +40 -0
  99. package/utils/index.ts +28 -0
  100. package/utils/loading.scss +531 -0
  101. package/utils/loading.ts +30 -0
  102. package/valaxy.config.ts +26 -0
@@ -0,0 +1,531 @@
1
+ .vp-loading {
2
+ position: absolute;
3
+ top: 0;
4
+ left: 0;
5
+ z-index: 100;
6
+ width: 100vw;
7
+ height: 100vh;
8
+ background: #eee;
9
+
10
+ transition: opacity 0.5s;
11
+
12
+ .wrapper {
13
+ width: 50px;
14
+ height: 50px;
15
+ position: fixed;
16
+ top: 50%;
17
+ left: 50%;
18
+ margin-left: -50px;
19
+ margin-top: -50px;
20
+
21
+ }
22
+
23
+ #preloader {
24
+ width: 50px;
25
+ height: 50px;
26
+ border: 2px solid var(--hy-c-primary);
27
+ border-radius: 0px;
28
+ -webkit-animation: preloader 4.5s infinite linear;
29
+ -moz-animation: preloader 4.5s infinite linear;
30
+ -ms-animation: preloader 4.5s infinite linear;
31
+ animation: preloader 4.5s infinite linear;
32
+ }
33
+
34
+ #preloader:after {
35
+ content: '';
36
+ width: 14px;
37
+ height: 14px;
38
+ background: var(--hy-c-primary);
39
+ position: absolute;
40
+ top: 50%;
41
+ left: 50%;
42
+ margin-left: -7px;
43
+ margin-top: -7px;
44
+ border-radius: 20px;
45
+ -webkit-animation: preloader_after 4.5s infinite linear;
46
+ -moz-animation: preloader_after 4.5s infinite linear;
47
+ -ms-animation: preloader_after 4.5s infinite linear;
48
+ animation: preloader_after 4.5s infinite linear;
49
+ -webkit-transform: scale(0);
50
+ }
51
+
52
+ @-webkit-keyframes preloader {
53
+ 0% {
54
+ -webkit-transform: scale(0)
55
+ }
56
+
57
+ 10% {
58
+ -webkit-transform: scale(1.3)
59
+ }
60
+
61
+ 12% {
62
+ -webkit-transform: scale(1)
63
+ }
64
+
65
+ 15% {
66
+ -webkit-transform: scale(1.3)
67
+ }
68
+
69
+ 17% {
70
+ -webkit-transform: scale(1)
71
+ }
72
+
73
+ 25% {
74
+ -webkit-transform: scale(1)
75
+ }
76
+
77
+ 40% {
78
+ -webkit-transform: scale(1) rotate(180deg);
79
+ border-radius: 20px;
80
+ }
81
+
82
+ 42% {
83
+ -webkit-transform: scale(1) rotate(180deg);
84
+ border-radius: 0px;
85
+ }
86
+
87
+ 44% {
88
+ -webkit-transform: scale(1) rotate(180deg);
89
+ border-radius: 20px;
90
+ }
91
+
92
+ 46% {
93
+ -webkit-transform: scale(1) rotate(180deg);
94
+ border-radius: 0px;
95
+ }
96
+
97
+ 48% {
98
+ -webkit-transform: scale(1) rotate(180deg);
99
+ border-radius: 20px;
100
+ }
101
+
102
+ 50% {
103
+ -webkit-transform: scale(1) rotate(180deg);
104
+ border-radius: 20px;
105
+ }
106
+
107
+ 95% {
108
+ -webkit-transform: scale(1) rotate(180deg);
109
+ border-radius: 20px;
110
+ }
111
+
112
+ 100% {
113
+ -webkit-transform: scale(0) rotate(180deg);
114
+ border-radius: 100px;
115
+ }
116
+ }
117
+
118
+ @-moz-keyframes preloader {
119
+ 0% {
120
+ -moz-transform: scale(0)
121
+ }
122
+
123
+ 10% {
124
+ -moz-transform: scale(1.3)
125
+ }
126
+
127
+ 12% {
128
+ -moz-transform: scale(1)
129
+ }
130
+
131
+ 15% {
132
+ -moz-transform: scale(1.3)
133
+ }
134
+
135
+ 17% {
136
+ -moz-transform: scale(1)
137
+ }
138
+
139
+ 25% {
140
+ -moz-transform: scale(1)
141
+ }
142
+
143
+ 40% {
144
+ -moz-transform: scale(1) rotate(180deg);
145
+ border-radius: 20px;
146
+ }
147
+
148
+ 42% {
149
+ -moz-transform: scale(1) rotate(180deg);
150
+ border-radius: 0px;
151
+ }
152
+
153
+ 44% {
154
+ -moz-transform: scale(1) rotate(180deg);
155
+ border-radius: 20px;
156
+ }
157
+
158
+ 46% {
159
+ -moz-transform: scale(1) rotate(180deg);
160
+ border-radius: 0px;
161
+ }
162
+
163
+ 48% {
164
+ -moz-transform: scale(1) rotate(180deg);
165
+ border-radius: 20px;
166
+ }
167
+
168
+ 50% {
169
+ -moz-transform: scale(1) rotate(180deg);
170
+ border-radius: 20px;
171
+ }
172
+
173
+ 95% {
174
+ -moz-transform: scale(1) rotate(180deg);
175
+ border-radius: 20px;
176
+ }
177
+
178
+ 100% {
179
+ -moz-transform: scale(0) rotate(180deg);
180
+ border-radius: 100px;
181
+ }
182
+ }
183
+
184
+ @-ms-keyframes preloader {
185
+ 0% {
186
+ -ms-transform: scale(0)
187
+ }
188
+
189
+ 10% {
190
+ -ms-transform: scale(1.3)
191
+ }
192
+
193
+ 12% {
194
+ -ms-transform: scale(1)
195
+ }
196
+
197
+ 15% {
198
+ -ms-transform: scale(1.3)
199
+ }
200
+
201
+ 17% {
202
+ -ms-transform: scale(1)
203
+ }
204
+
205
+ 25% {
206
+ -ms-transform: scale(1)
207
+ }
208
+
209
+ 40% {
210
+ -ms-transform: scale(1) rotate(180deg);
211
+ border-radius: 20px;
212
+ }
213
+
214
+ 42% {
215
+ -ms-transform: scale(1) rotate(180deg);
216
+ border-radius: 0px;
217
+ }
218
+
219
+ 44% {
220
+ -ms-transform: scale(1) rotate(180deg);
221
+ border-radius: 20px;
222
+ }
223
+
224
+ 46% {
225
+ -ms-transform: scale(1) rotate(180deg);
226
+ border-radius: 0px;
227
+ }
228
+
229
+ 48% {
230
+ -ms-transform: scale(1) rotate(180deg);
231
+ border-radius: 20px;
232
+ }
233
+
234
+ 50% {
235
+ -ms-transform: scale(1) rotate(180deg);
236
+ border-radius: 20px;
237
+ }
238
+
239
+ 95% {
240
+ -ms-transform: scale(1) rotate(180deg);
241
+ border-radius: 20px;
242
+ }
243
+
244
+ 100% {
245
+ -ms-transform: scale(0) rotate(180deg);
246
+ border-radius: 100px;
247
+ }
248
+ }
249
+
250
+ @keyframes preloader {
251
+ 0% {
252
+ transform: scale(0)
253
+ }
254
+
255
+ 10% {
256
+ transform: scale(1.3)
257
+ }
258
+
259
+ 12% {
260
+ transform: scale(1)
261
+ }
262
+
263
+ 15% {
264
+ transform: scale(1.3)
265
+ }
266
+
267
+ 17% {
268
+ transform: scale(1)
269
+ }
270
+
271
+ 25% {
272
+ transform: scale(1)
273
+ }
274
+
275
+ 40% {
276
+ transform: scale(1) rotate(180deg);
277
+ border-radius: 20px;
278
+ }
279
+
280
+ 42% {
281
+ transform: scale(1) rotate(180deg);
282
+ border-radius: 0px;
283
+ }
284
+
285
+ 44% {
286
+ transform: scale(1) rotate(180deg);
287
+ border-radius: 20px;
288
+ }
289
+
290
+ 46% {
291
+ transform: scale(1) rotate(180deg);
292
+ border-radius: 0px;
293
+ }
294
+
295
+ 48% {
296
+ transform: scale(1) rotate(180deg);
297
+ border-radius: 20px;
298
+ }
299
+
300
+ 50% {
301
+ transform: scale(1) rotate(180deg);
302
+ border-radius: 20px;
303
+ }
304
+
305
+ 95% {
306
+ transform: scale(1) rotate(180deg);
307
+ border-radius: 20px;
308
+ }
309
+
310
+ 100% {
311
+ transform: scale(0) rotate(180deg);
312
+ border-radius: 100px;
313
+ }
314
+ }
315
+
316
+ @-webkit-keyframes preloader_after {
317
+ 0% {
318
+ -webkit-transform: scale(0);
319
+ }
320
+
321
+ 45% {
322
+ -webkit-transform: scale(0);
323
+ }
324
+
325
+ 50% {
326
+ -webkit-transform: scale(1);
327
+ }
328
+
329
+ 55% {
330
+ -webkit-transform: scale(1) translateY(-20px) translateX(-14px);
331
+ }
332
+
333
+ 60% {
334
+ -webkit-transform: scale(1) translateY(20px) translateX(14px);
335
+ }
336
+
337
+ 65% {
338
+ -webkit-transform: scale(1) translateY(-20px) translateX(14px);
339
+ }
340
+
341
+ 70% {
342
+ -webkit-transform: scale(1) translateY(20px) translateX(-14px);
343
+ }
344
+
345
+ 75% {
346
+ -webkit-transform: scale(1) translateY(-20px) translateX(14px);
347
+ }
348
+
349
+ 80% {
350
+ -webkit-transform: scale(1) translateY(20px) translateX(-14px);
351
+ }
352
+
353
+ 85% {
354
+ -webkit-transform: scale(1) translateY(-20px) translateX(-14px);
355
+ }
356
+
357
+ 90% {
358
+ -webkit-transform: scale(1) translateY(0px) translateX(0px);
359
+ }
360
+
361
+ 95% {
362
+ -webkit-transform: scale(1.5);
363
+ }
364
+
365
+ 100% {
366
+ -webkit-transform: scale(0);
367
+ }
368
+ }
369
+
370
+ @-moz-keyframes preloader_after {
371
+ 0% {
372
+ -moz-transform: scale(0);
373
+ }
374
+
375
+ 45% {
376
+ -moz-transform: scale(0);
377
+ }
378
+
379
+ 50% {
380
+ -moz-transform: scale(1);
381
+ }
382
+
383
+ 55% {
384
+ -moz-transform: scale(1) translateY(-20px) translateX(-14px);
385
+ }
386
+
387
+ 60% {
388
+ -moz-transform: scale(1) translateY(20px) translateX(14px);
389
+ }
390
+
391
+ 65% {
392
+ -moz-transform: scale(1) translateY(-20px) translateX(14px);
393
+ }
394
+
395
+ 70% {
396
+ -moz-transform: scale(1) translateY(20px) translateX(-14px);
397
+ }
398
+
399
+ 75% {
400
+ -moz-transform: scale(1) translateY(-20px) translateX(14px);
401
+ }
402
+
403
+ 80% {
404
+ -moz-transform: scale(1) translateY(20px) translateX(-14px);
405
+ }
406
+
407
+ 85% {
408
+ -moz-transform: scale(1) translateY(-20px) translateX(-14px);
409
+ }
410
+
411
+ 90% {
412
+ -moz-transform: scale(1) translateY(0px) translateX(0px);
413
+ }
414
+
415
+ 95% {
416
+ -moz-transform: scale(1.5);
417
+ }
418
+
419
+ 100% {
420
+ -moz-transform: scale(0);
421
+ }
422
+ }
423
+
424
+ @-ms-keyframes preloader_after {
425
+ 0% {
426
+ -ms-transform: scale(0);
427
+ }
428
+
429
+ 45% {
430
+ -ms-transform: scale(0);
431
+ }
432
+
433
+ 50% {
434
+ -ms-transform: scale(1);
435
+ }
436
+
437
+ 55% {
438
+ -ms-transform: scale(1) translateY(-20px) translateX(-14px);
439
+ }
440
+
441
+ 60% {
442
+ -ms-transform: scale(1) translateY(20px) translateX(14px);
443
+ }
444
+
445
+ 65% {
446
+ -ms-transform: scale(1) translateY(-20px) translateX(14px);
447
+ }
448
+
449
+ 70% {
450
+ -ms-transform: scale(1) translateY(20px) translateX(-14px);
451
+ }
452
+
453
+ 75% {
454
+ -ms-transform: scale(1) translateY(-20px) translateX(14px);
455
+ }
456
+
457
+ 80% {
458
+ -ms-transform: scale(1) translateY(20px) translateX(-14px);
459
+ }
460
+
461
+ 85% {
462
+ -ms-transform: scale(1) translateY(-20px) translateX(-14px);
463
+ }
464
+
465
+ 90% {
466
+ -ms-transform: scale(1) translateY(0px) translateX(0px);
467
+ }
468
+
469
+ 95% {
470
+ -ms-transform: scale(1.5);
471
+ }
472
+
473
+ 100% {
474
+ -ms-transform: scale(0);
475
+ }
476
+ }
477
+
478
+ @keyframes preloader_after {
479
+ 0% {
480
+ transform: scale(0);
481
+ }
482
+
483
+ 45% {
484
+ transform: scale(0);
485
+ }
486
+
487
+ 50% {
488
+ transform: scale(1);
489
+ }
490
+
491
+ 55% {
492
+ transform: scale(1) translateY(-20px) translateX(-14px);
493
+ }
494
+
495
+ 60% {
496
+ transform: scale(1) translateY(20px) translateX(14px);
497
+ }
498
+
499
+ 65% {
500
+ transform: scale(1) translateY(-20px) translateX(14px);
501
+ }
502
+
503
+ 70% {
504
+ transform: scale(1) translateY(20px) translateX(-14px);
505
+ }
506
+
507
+ 75% {
508
+ transform: scale(1) translateY(-20px) translateX(14px);
509
+ }
510
+
511
+ 80% {
512
+ transform: scale(1) translateY(20px) translateX(-14px);
513
+ }
514
+
515
+ 85% {
516
+ transform: scale(1) translateY(-20px) translateX(-14px);
517
+ }
518
+
519
+ 90% {
520
+ transform: scale(1) translateY(0px) translateX(0px);
521
+ }
522
+
523
+ 95% {
524
+ transform: scale(1.5);
525
+ }
526
+
527
+ 100% {
528
+ transform: scale(0);
529
+ }
530
+ }
531
+ }
@@ -0,0 +1,30 @@
1
+ import './loading.scss'
2
+
3
+ function createElement() {
4
+ const loadingEl = document.createElement('div')
5
+ loadingEl.className = 'vp-loading'
6
+ loadingEl.innerHTML = `\
7
+ <div class="wrapper">
8
+ <div id="preloader"></div>
9
+ </div>
10
+ `
11
+ return loadingEl
12
+ }
13
+
14
+ let el: HTMLElement
15
+
16
+ export function showFullLoading() {
17
+ if (!el)
18
+ el = createElement()
19
+ el.style.opacity = '0'
20
+ document.body.appendChild(el)
21
+ setTimeout(() => el.style.opacity = '1')
22
+ }
23
+
24
+ export function hideFullLoading() {
25
+ if (!el)
26
+ return
27
+ el.style.opacity = '0'
28
+ setTimeout(() => el.remove(), 500)
29
+ }
30
+
@@ -0,0 +1,26 @@
1
+ import { defineTheme } from 'valaxy'
2
+ import type { HairyTheme } from 'valaxy-theme-hairy'
3
+ import markdownFurigana from 'furigana-markdown-it'
4
+ import addonHairy from './node/addon-hairy'
5
+ import addonImages from './node/addon-images'
6
+ import addonStatistics from './node/addon-statistics'
7
+ import addonToc from './node/addon-toc'
8
+ export default defineTheme<HairyTheme>((options) => {
9
+ const images = addonImages(options)
10
+
11
+ return {
12
+ vite: images.vite,
13
+ extendMd(ctx) {
14
+ addonHairy().extendMd?.(ctx)
15
+ images.extendMd?.(ctx)
16
+ addonStatistics().extendMd?.(ctx)
17
+ addonToc().extendMd?.(ctx)
18
+ },
19
+ markdown: {
20
+ config(md) {
21
+ md.use(markdownFurigana())
22
+ },
23
+ },
24
+ }
25
+ })
26
+