/
meta.tsx
75 lines (71 loc) · 2.06 KB
/
meta.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import React, { ReactElement } from 'react'
import Link from 'next/link'
import ThemeSwitch from './theme-switch'
import { split } from './utils/get-tags'
import { useBlogContext } from './blog-context'
import { getParent } from './utils/parent'
export default function Meta(): ReactElement {
const { opts, config } = useBlogContext()
const { author, date, tag } = opts.frontMatter
const { back } = getParent({ opts, config })
const tags = tag ? split(tag) : []
const tagsEl = tags.map(t => (
<Link key={t} href="/tags/[tag]" as={`/tags/${t}`} passHref>
<a
className="
nx-select-none
nx-rounded-md
nx-px-1
nx-transition-colors
nx-text-sm
nx-text-gray-400
hover:nx-text-gray-500
dark:nx-text-gray-300
dark:hover:nx-text-gray-200
nx-bg-gray-200
hover:nx-bg-gray-300
dark:nx-bg-gray-600
dark:hover:nx-bg-gray-700
"
>
{t}
</a>
</Link>
))
const readingTime = opts.readingTime?.text
return (
<div
className={
'nx-mb-8 nx-flex nx-gap-3 ' +
(readingTime ? 'nx-items-start' : 'nx-items-center')
}
>
<div className="nx-grow nx-text-gray-400">
<div className="nx-flex nx-flex-wrap nx-items-center nx-gap-1 nx-not-prose">
{author}
{author && date && ','}
{date && (
<time dateTime={new Date(date).toISOString()}>
{new Date(date).toDateString()}
</time>
)}
{(author || date) && tags.length > 0 && ' • '}
{readingTime || tagsEl}
</div>
{readingTime && (
<div className="nx-flex nx-flex-wrap nx-items-center nx-gap-1 nx-mt-1 nx-not-prose">
{tagsEl}
</div>
)}
</div>
<div className="nx-flex nx-items-center nx-gap-3">
{back && (
<Link href={back} passHref>
<a>Back</a>
</Link>
)}
{config.darkMode && <ThemeSwitch />}
</div>
</div>
)
}