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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy