Skip to content

Commit 4fd0e42

Browse files
committed
add copy icon
1 parent c842e28 commit 4fd0e42

File tree

3 files changed

+55
-29
lines changed

3 files changed

+55
-29
lines changed

src/App.vue

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
<template>
2-
<h1>Vuejs Code Block UI Component</h1>
2+
<h1 class="">Vuejs Code Block UI Component</h1>
33

44
<CodeBlock
5-
class="pt-8"
6-
theme="dracula"
5+
theme="ultramin"
76
:code="code"
87
language="python"
98
:numbered="true"
@@ -17,16 +16,9 @@
1716
const code = `print("Hello, World!")
1817
s = "lorem ipsum dolor sit amet consect etur adipiscing elit"
1918
def add(a, b):
20-
const ant = 1
21-
`;
19+
const ant = 1`;
2220
2321
// import { CodeBlock } from '../dist';
2422
// import { Prism } from './components/prism-langs';
2523
// const langs = ref(Object.keys(Prism.languages));
2624
</script>
27-
28-
<style>
29-
.pt-8 {
30-
padding-top: 2rem;
31-
}
32-
</style>

src/components/code-block/CodeBlock.vue

Lines changed: 51 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
v-bind="$attrs"
1010
:style="props.showHeader ? '' : 'padding-top: 1rem'">
1111
<!-- Header Component -->
12+
1213
<div
1314
v-if="props.showHeader"
1415
class="header">
@@ -17,9 +18,27 @@
1718
width="18"
1819
:src="icons[props.language]"
1920
alt="" />
20-
<p>{{ props.fileName }}</p>
21+
<span>{{ props.fileName }}</span>
22+
</div>
23+
<div class="actions">
24+
<button
25+
type="button"
26+
class="copy-button">
27+
<svg
28+
fill="none"
29+
stroke="currentColor"
30+
stroke-width="1.5"
31+
stroke-linecap="round"
32+
stroke-linejoin="round"
33+
aria-hidden="true"
34+
class="copy-icon">
35+
<path
36+
d="M13 10.75h-1.25a2 2 0 0 0-2 2v8.5a2 2 0 0 0 2 2h8.5a2 2 0 0 0 2-2v-8.5a2 2 0 0 0-2-2H19"></path>
37+
<path
38+
d="M18 12.25h-4a1 1 0 0 1-1-1v-1.5a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v1.5a1 1 0 0 1-1 1ZM13.75 16.25h4.5M13.75 19.25h4.5"></path>
39+
</svg>
40+
</button>
2141
</div>
22-
<div class="copy"></div>
2342
</div>
2443

2544
<!-- Line Component -->
@@ -93,29 +112,17 @@
93112
</script>
94113

95114
<style>
96-
*,
97-
*::after,
98-
*::before {
99-
box-sizing: border-box;
100-
padding: 0;
101-
margin: 0;
102-
}
103-
body {
104-
padding: 15px;
105-
}
106-
107115
.vuejs-code-block pre {
108116
padding-bottom: 1rem;
109-
border-radius: 0.25rem;
117+
border-radius: 0.3rem;
110118
border: 0.5px solid #888;
111119
}
112120
113121
.vuejs-code-block pre .header {
114-
padding: 0.5rem 1rem;
122+
padding: 0.75rem 1rem;
115123
display: flex;
116124
align-items: center;
117125
justify-content: space-between;
118-
margin-bottom: 1rem;
119126
background-color: rgba(0, 0, 0, 0.001);
120127
backdrop-filter: brightness(0.9);
121128
}
@@ -124,14 +131,41 @@
124131
border-radius: 0.25rem;
125132
display: flex;
126133
gap: 0.5rem;
127-
padding: 0.5rem 5rem;
134+
padding: 0.5rem 1.5rem;
128135
padding-left: 0.25rem;
136+
137+
/* align-items: center;
138+
border-bottom: 1px solid #7dd3fc; */
129139
}
130140
131141
.vuejs-code-block pre .header .file-name p {
132142
font-size: 1rem;
133143
}
134144
145+
.vuejs-code-block pre .header .actions {
146+
display: flex;
147+
align-items: center;
148+
}
149+
150+
.vuejs-code-block pre .header .actions .copy-button {
151+
background: none;
152+
border: none;
153+
margin: 0;
154+
padding: 0;
155+
cursor: pointer;
156+
color: #64748b;
157+
transition: color 150ms ease-in-out;
158+
}
159+
160+
.vuejs-code-block pre .header .actions .copy-button:hover {
161+
color: #94a3b8;
162+
}
163+
164+
.vuejs-code-block pre .header .actions .copy-icon {
165+
width: 2rem;
166+
height: 2rem;
167+
}
168+
135169
.vuejs-code-block pre .line {
136170
padding: 0 1rem;
137171
display: flex;

tsconfig.tsbuildinfo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"root":["./src/index.ts","./src/main.ts","./src/vite-env.d.ts","./src/components/components.ts","./src/components/index.ts","./src/components/prism-langs.ts","./src/components/utils.ts","./src/components/code-block/index.ts","./src/components/code-block/types.ts","./src/components/code-block/use-code-block.ts","./src/components/generate-prism-languages/index.ts","./src/components/themes/index.ts","./src/types/code-block.d.ts","./src/App.vue","./src/components/code-block/CodeBlock.vue"],"version":"5.6.2"}
1+
{"root":["./src/index.ts","./src/main.ts","./src/vite-env.d.ts","./src/components/components.ts","./src/components/index.ts","./src/components/prism-langs.ts","./src/components/utils.ts","./src/components/code-block/index.ts","./src/components/code-block/types.ts","./src/components/code-block/use-code-block.ts","./src/components/generate-prism-languages/index.ts","./src/components/icons/index.ts","./src/components/themes/index.ts","./src/types/code-block.d.ts","./src/App.vue","./src/components/code-block/CodeBlock.vue"],"version":"5.6.2"}

0 commit comments

Comments
 (0)