Skip to content

Commit c4f13d5

Browse files
committed
style the ui component header
1 parent 4caed1c commit c4f13d5

File tree

3 files changed

+61
-23
lines changed

3 files changed

+61
-23
lines changed

src/App.vue

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,32 @@
11
<template>
2-
Test:
2+
<h1>Vuejs Code Block UI Component</h1>
3+
34
<CodeBlock
5+
class="pt-8"
46
theme="dracula"
57
:code="code"
68
language="python"
79
:numbered="true"
8-
file-name="">
10+
:show-header="true"
11+
file-name="ss">
912
</CodeBlock>
10-
<!-- :lines-highlighted="[1, 2]"
11-
:words-highlighted="['log']" -->
12-
End of App.vue
13-
<!-- <pre>
14-
{{ langs }}
15-
</pre> -->
1613
</template>
1714

1815
<script setup lang="ts">
19-
// import { CodeBlock } from '../dist';
20-
2116
import { CodeBlock } from './components/code-block';
22-
23-
// import { Prism } from './components/prism-langs';
24-
// const langs = ref(Object.keys(Prism.languages));
25-
2617
const code = `print("Hello, World!")
2718
s = 2
2819
def add(a, b):
2920
const ant = 1
3021
`;
22+
23+
// import { CodeBlock } from '../dist';
24+
// import { Prism } from './components/prism-langs';
25+
// const langs = ref(Object.keys(Prism.languages));
3126
</script>
27+
28+
<style>
29+
.pt-8 {
30+
padding-top: 2rem;
31+
}
32+
</style>

src/components/code-block/CodeBlock.vue

Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,26 @@
11
<template>
2-
<img
3-
width="240"
4-
:src="icons[props.language]"
5-
alt="" />
62
<!-- Code Block Component -->
73
<div
84
:id="props.id"
95
:class="`vuejs-code-block ${props.class} ${props.theme}`">
106
<component
117
ref="codeBlock"
128
:is="props.asElement || 'pre'"
13-
v-bind="$attrs">
9+
v-bind="$attrs"
10+
:style="props.showHeader ? '' : 'padding-top: 1rem'">
1411
<!-- Header Component -->
15-
<div class=""></div>
12+
<div
13+
v-if="props.showHeader"
14+
class="header">
15+
<div class="file-name">
16+
<img
17+
width="18"
18+
:src="icons[props.language]"
19+
alt="" />
20+
<p>{{ props.fileName }}</p>
21+
</div>
22+
<div class="copy"></div>
23+
</div>
1624

1725
<!-- Line Component -->
1826
<slot>
@@ -57,7 +65,6 @@
5765
import { addThemeToCodeBlock, themes } from '../themes';
5866
5967
const props = defineProps(codeBlockProps());
60-
const langIcon = ref(`../icons/${props.language}.svg`);
6168
6269
const codeBlock: Ref<HTMLDivElement | null> = ref(null);
6370
@@ -98,20 +105,45 @@
98105
}
99106
100107
.vuejs-code-block pre {
101-
padding: 1rem;
108+
padding-bottom: 1rem;
102109
border-radius: 0.25rem;
103110
border: 0.5px solid #888;
104111
}
105112
113+
.vuejs-code-block pre .header {
114+
padding: 0.5rem 1rem;
115+
display: flex;
116+
align-items: center;
117+
justify-content: space-between;
118+
margin-bottom: 1rem;
119+
background-color: rgba(0, 0, 0, 0.001);
120+
backdrop-filter: brightness(0.9);
121+
}
122+
123+
.vuejs-code-block pre .header .file-name {
124+
border-radius: 0.25rem;
125+
display: flex;
126+
gap: 0.5rem;
127+
padding: 0.5rem 5rem;
128+
padding-left: 0.25rem;
129+
}
130+
131+
.vuejs-code-block pre .header .file-name p {
132+
font-size: 1rem;
133+
}
134+
106135
.vuejs-code-block pre .line {
136+
padding: 0 1rem;
137+
107138
display: flex;
108139
align-items: center;
140+
font-size: 1rem;
109141
}
110142
111143
.vuejs-code-block pre .line-number {
112144
color: #888;
113145
user-select: none;
114-
font-size: 0.8rem;
146+
font-size: 0.9rem;
115147
padding: 0.1rem 1rem 0.1rem 0;
116148
}
117149
</style>

src/components/code-block/types.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,11 @@ export const codeBlockProps = () =>
6262
type: String as PropType<string>,
6363
required: false,
6464
default: ''
65+
},
66+
showHeader: {
67+
type: Boolean as PropType<boolean>,
68+
required: false,
69+
default: false
6570
}
6671
} as const);
6772

0 commit comments

Comments
 (0)