@cnc_cbz/usefultools-plugin-official 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,337 @@
1
+ import { defineComponent, ref, openBlock, createElementBlock, createCommentVNode, createElementVNode, Fragment, renderList, normalizeClass, toDisplayString, withDirectives, vModelText, withModifiers, createTextVNode } from "vue";
2
+ const _hoisted_1 = { class: "flex flex-col h-full gap-5" };
3
+ const _hoisted_2 = { class: "bg-deep-charcoal border-4 border-black rounded-xl p-4 shadow-hard" };
4
+ const _hoisted_3 = { class: "flex flex-wrap items-center gap-4" };
5
+ const _hoisted_4 = { class: "flex gap-2" };
6
+ const _hoisted_5 = ["onClick"];
7
+ const _hoisted_6 = { class: "flex items-center gap-2" };
8
+ const _hoisted_7 = { class: "font-mono text-xs text-gray-400" };
9
+ const _hoisted_8 = {
10
+ key: 1,
11
+ class: "flex-1 flex flex-col gap-4 min-h-0"
12
+ };
13
+ const _hoisted_9 = { class: "flex items-center gap-4 px-2" };
14
+ const _hoisted_10 = { class: "flex items-center gap-2" };
15
+ const _hoisted_11 = { class: "font-mono text-sm text-gray-300" };
16
+ const _hoisted_12 = { class: "flex items-center gap-2" };
17
+ const _hoisted_13 = { class: "font-mono text-sm text-neon-green" };
18
+ const _hoisted_14 = { class: "flex-1 grid grid-cols-2 gap-4 min-h-0" };
19
+ const _hoisted_15 = { class: "bg-deep-charcoal border-4 border-black rounded-xl shadow-hard overflow-hidden flex flex-col" };
20
+ const _hoisted_16 = { class: "flex-1 overflow-auto flex items-center justify-center p-2" };
21
+ const _hoisted_17 = ["src"];
22
+ const _hoisted_18 = { class: "bg-deep-charcoal border-4 border-black rounded-xl shadow-hard overflow-hidden flex flex-col" };
23
+ const _hoisted_19 = { class: "px-3 py-2 border-b-2 border-black text-xs font-bold text-gray-500 uppercase" };
24
+ const _hoisted_20 = { class: "flex-1 overflow-auto flex items-center justify-center p-2" };
25
+ const _hoisted_21 = ["src"];
26
+ const _hoisted_22 = {
27
+ key: 1,
28
+ class: "text-gray-600 text-sm"
29
+ };
30
+ const _sfc_main = /* @__PURE__ */ defineComponent({
31
+ __name: "index",
32
+ setup(__props) {
33
+ const quality = ref(80);
34
+ const format = ref("jpeg");
35
+ const originalFile = ref(null);
36
+ const originalUrl = ref("");
37
+ const compressedUrl = ref("");
38
+ const originalSize = ref(0);
39
+ const compressedSize = ref(0);
40
+ const processing = ref(false);
41
+ function handleDrop(e) {
42
+ var _a;
43
+ e.preventDefault();
44
+ const file = (_a = e.dataTransfer) == null ? void 0 : _a.files[0];
45
+ if (file && file.type.startsWith("image/")) processFile(file);
46
+ }
47
+ function handleFileInput(e) {
48
+ var _a;
49
+ const file = (_a = e.target.files) == null ? void 0 : _a[0];
50
+ if (file) processFile(file);
51
+ }
52
+ function processFile(file) {
53
+ originalFile.value = file;
54
+ originalSize.value = file.size;
55
+ originalUrl.value = URL.createObjectURL(file);
56
+ compress();
57
+ }
58
+ async function compress() {
59
+ if (!originalFile.value) return;
60
+ processing.value = true;
61
+ const img = new Image();
62
+ img.src = originalUrl.value;
63
+ await new Promise((resolve) => {
64
+ img.onload = resolve;
65
+ });
66
+ const canvas = document.createElement("canvas");
67
+ canvas.width = img.naturalWidth;
68
+ canvas.height = img.naturalHeight;
69
+ const ctx = canvas.getContext("2d");
70
+ ctx.drawImage(img, 0, 0);
71
+ const mimeType = `image/${format.value}`;
72
+ const blob = await new Promise(
73
+ (resolve) => canvas.toBlob(resolve, mimeType, quality.value / 100)
74
+ );
75
+ if (blob) {
76
+ if (compressedUrl.value) URL.revokeObjectURL(compressedUrl.value);
77
+ compressedUrl.value = URL.createObjectURL(blob);
78
+ compressedSize.value = blob.size;
79
+ }
80
+ processing.value = false;
81
+ }
82
+ function download() {
83
+ if (!compressedUrl.value) return;
84
+ const link = document.createElement("a");
85
+ link.download = `compressed.${format.value}`;
86
+ link.href = compressedUrl.value;
87
+ link.click();
88
+ }
89
+ function formatSize(bytes) {
90
+ if (bytes < 1024) return `${bytes} B`;
91
+ if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;
92
+ return `${(bytes / (1024 * 1024)).toFixed(2)} MB`;
93
+ }
94
+ const ratio = () => originalSize.value ? Math.round((1 - compressedSize.value / originalSize.value) * 100) : 0;
95
+ return (_ctx, _cache) => {
96
+ return openBlock(), createElementBlock("div", _hoisted_1, [
97
+ createCommentVNode(" 控制区 "),
98
+ createElementVNode("div", _hoisted_2, [
99
+ _cache[6] || (_cache[6] = createElementVNode(
100
+ "div",
101
+ { class: "flex items-center gap-2 mb-3" },
102
+ [
103
+ createElementVNode("span", { class: "material-icons text-primary text-lg" }, "photo_size_select_large"),
104
+ createElementVNode("span", { class: "text-sm font-bold text-gray-400 uppercase tracking-wider" }, "图片压缩/转换")
105
+ ],
106
+ -1
107
+ /* CACHED */
108
+ )),
109
+ createElementVNode("div", _hoisted_3, [
110
+ createElementVNode("div", _hoisted_4, [
111
+ (openBlock(), createElementBlock(
112
+ Fragment,
113
+ null,
114
+ renderList(["jpeg", "png", "webp"], (f) => {
115
+ return createElementVNode("button", {
116
+ key: f,
117
+ onClick: ($event) => {
118
+ format.value = f;
119
+ originalFile.value && compress();
120
+ },
121
+ class: normalizeClass(["h-9 px-3 font-bold border-2 border-black rounded text-xs transition-all uppercase", format.value === f ? "bg-primary text-black shadow-none translate-x-0.5 translate-y-0.5" : "bg-bg-dark text-gray-400 shadow-hard-sm hover:shadow-none hover:translate-x-0.5 hover:translate-y-0.5"])
122
+ }, toDisplayString(f), 11, _hoisted_5);
123
+ }),
124
+ 64
125
+ /* STABLE_FRAGMENT */
126
+ ))
127
+ ]),
128
+ createElementVNode("div", _hoisted_6, [
129
+ _cache[5] || (_cache[5] = createElementVNode(
130
+ "span",
131
+ { class: "text-xs text-gray-500" },
132
+ "质量:",
133
+ -1
134
+ /* CACHED */
135
+ )),
136
+ withDirectives(createElementVNode(
137
+ "input",
138
+ {
139
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => quality.value = $event),
140
+ type: "range",
141
+ min: "10",
142
+ max: "100",
143
+ class: "w-28 accent-primary",
144
+ onChange: _cache[1] || (_cache[1] = ($event) => originalFile.value && compress())
145
+ },
146
+ null,
147
+ 544
148
+ /* NEED_HYDRATION, NEED_PATCH */
149
+ ), [
150
+ [
151
+ vModelText,
152
+ quality.value,
153
+ void 0,
154
+ { number: true }
155
+ ]
156
+ ]),
157
+ createElementVNode(
158
+ "span",
159
+ _hoisted_7,
160
+ toDisplayString(quality.value) + "%",
161
+ 1
162
+ /* TEXT */
163
+ )
164
+ ])
165
+ ])
166
+ ]),
167
+ createCommentVNode(" 拖拽区 / 预览 "),
168
+ !originalFile.value ? (openBlock(), createElementBlock(
169
+ "div",
170
+ {
171
+ key: 0,
172
+ class: "flex-1 bg-deep-charcoal border-4 border-dashed border-gray-600 rounded-xl flex flex-col items-center justify-center gap-3 cursor-pointer hover:border-primary transition-colors",
173
+ onDrop: handleDrop,
174
+ onDragover: _cache[2] || (_cache[2] = withModifiers(() => {
175
+ }, ["prevent"])),
176
+ onClick: _cache[3] || (_cache[3] = ($event) => {
177
+ var _a;
178
+ return (_a = _ctx.$refs.fileInput) == null ? void 0 : _a.click();
179
+ })
180
+ },
181
+ [
182
+ _cache[7] || (_cache[7] = createElementVNode(
183
+ "span",
184
+ { class: "material-icons text-5xl text-gray-600" },
185
+ "cloud_upload",
186
+ -1
187
+ /* CACHED */
188
+ )),
189
+ _cache[8] || (_cache[8] = createElementVNode(
190
+ "span",
191
+ { class: "text-gray-500 text-sm" },
192
+ "拖拽图片到此处,或点击选择文件",
193
+ -1
194
+ /* CACHED */
195
+ )),
196
+ createElementVNode(
197
+ "input",
198
+ {
199
+ ref: "fileInput",
200
+ type: "file",
201
+ accept: "image/*",
202
+ class: "hidden",
203
+ onChange: handleFileInput
204
+ },
205
+ null,
206
+ 544
207
+ /* NEED_HYDRATION, NEED_PATCH */
208
+ )
209
+ ],
210
+ 32
211
+ /* NEED_HYDRATION */
212
+ )) : (openBlock(), createElementBlock("div", _hoisted_8, [
213
+ createCommentVNode(" 大小对比 "),
214
+ createElementVNode("div", _hoisted_9, [
215
+ createElementVNode("div", _hoisted_10, [
216
+ _cache[9] || (_cache[9] = createElementVNode(
217
+ "span",
218
+ { class: "text-xs text-gray-500" },
219
+ "原始:",
220
+ -1
221
+ /* CACHED */
222
+ )),
223
+ createElementVNode(
224
+ "span",
225
+ _hoisted_11,
226
+ toDisplayString(formatSize(originalSize.value)),
227
+ 1
228
+ /* TEXT */
229
+ )
230
+ ]),
231
+ _cache[12] || (_cache[12] = createElementVNode(
232
+ "span",
233
+ { class: "material-icons text-primary" },
234
+ "arrow_forward",
235
+ -1
236
+ /* CACHED */
237
+ )),
238
+ createElementVNode("div", _hoisted_12, [
239
+ _cache[10] || (_cache[10] = createElementVNode(
240
+ "span",
241
+ { class: "text-xs text-gray-500" },
242
+ "压缩后:",
243
+ -1
244
+ /* CACHED */
245
+ )),
246
+ createElementVNode(
247
+ "span",
248
+ _hoisted_13,
249
+ toDisplayString(formatSize(compressedSize.value)),
250
+ 1
251
+ /* TEXT */
252
+ )
253
+ ]),
254
+ createElementVNode(
255
+ "span",
256
+ {
257
+ class: normalizeClass(["text-xs font-bold", ratio() > 0 ? "text-neon-green" : "text-coral-red"])
258
+ },
259
+ toDisplayString(ratio() > 0 ? `-${ratio()}%` : `+${Math.abs(ratio())}%`),
260
+ 3
261
+ /* TEXT, CLASS */
262
+ ),
263
+ _cache[13] || (_cache[13] = createElementVNode(
264
+ "div",
265
+ { class: "flex-1" },
266
+ null,
267
+ -1
268
+ /* CACHED */
269
+ )),
270
+ createElementVNode("button", {
271
+ onClick: download,
272
+ class: "h-9 px-4 bg-primary text-black font-bold border-2 border-black rounded shadow-hard-sm hover:shadow-none hover:translate-x-0.5 hover:translate-y-0.5 transition-all text-xs flex items-center gap-1"
273
+ }, [..._cache[11] || (_cache[11] = [
274
+ createElementVNode(
275
+ "span",
276
+ { class: "material-icons text-sm" },
277
+ "download",
278
+ -1
279
+ /* CACHED */
280
+ ),
281
+ createTextVNode(
282
+ " 下载 ",
283
+ -1
284
+ /* CACHED */
285
+ )
286
+ ])]),
287
+ createElementVNode("button", {
288
+ onClick: _cache[4] || (_cache[4] = ($event) => {
289
+ originalFile.value = null;
290
+ originalUrl.value = "";
291
+ compressedUrl.value = "";
292
+ }),
293
+ class: "h-9 px-3 bg-bg-dark text-gray-400 font-bold border-2 border-black rounded shadow-hard-sm hover:shadow-none hover:translate-x-0.5 hover:translate-y-0.5 transition-all text-xs"
294
+ }, " 重选 ")
295
+ ]),
296
+ createCommentVNode(" 图片预览 "),
297
+ createElementVNode("div", _hoisted_14, [
298
+ createElementVNode("div", _hoisted_15, [
299
+ _cache[14] || (_cache[14] = createElementVNode(
300
+ "div",
301
+ { class: "px-3 py-2 border-b-2 border-black text-xs font-bold text-gray-500 uppercase" },
302
+ "原始",
303
+ -1
304
+ /* CACHED */
305
+ )),
306
+ createElementVNode("div", _hoisted_16, [
307
+ createElementVNode("img", {
308
+ src: originalUrl.value,
309
+ class: "max-w-full max-h-full object-contain"
310
+ }, null, 8, _hoisted_17)
311
+ ])
312
+ ]),
313
+ createElementVNode("div", _hoisted_18, [
314
+ createElementVNode(
315
+ "div",
316
+ _hoisted_19,
317
+ "压缩后 (" + toDisplayString(format.value.toUpperCase()) + ")",
318
+ 1
319
+ /* TEXT */
320
+ ),
321
+ createElementVNode("div", _hoisted_20, [
322
+ compressedUrl.value ? (openBlock(), createElementBlock("img", {
323
+ key: 0,
324
+ src: compressedUrl.value,
325
+ class: "max-w-full max-h-full object-contain"
326
+ }, null, 8, _hoisted_21)) : (openBlock(), createElementBlock("span", _hoisted_22, "处理中..."))
327
+ ])
328
+ ])
329
+ ])
330
+ ]))
331
+ ]);
332
+ };
333
+ }
334
+ });
335
+ export {
336
+ _sfc_main as default
337
+ };
@@ -0,0 +1,222 @@
1
+ import { defineComponent, ref, computed, openBlock, createElementBlock, createElementVNode, withDirectives, vModelText, Fragment, renderList, toDisplayString, createTextVNode, createCommentVNode, normalizeClass } from "vue";
2
+ const _hoisted_1 = { class: "flex flex-col h-full gap-5" };
3
+ const _hoisted_2 = { class: "bg-deep-charcoal border-4 border-black rounded-xl p-4 shadow-hard" };
4
+ const _hoisted_3 = { class: "flex flex-wrap items-center gap-3" };
5
+ const _hoisted_4 = { class: "flex flex-wrap gap-2 mt-3" };
6
+ const _hoisted_5 = ["onClick"];
7
+ const _hoisted_6 = {
8
+ key: 0,
9
+ class: "px-4 py-2 bg-coral-red/20 border-2 border-coral-red rounded flex items-center gap-2 text-coral-red font-bold text-sm"
10
+ };
11
+ const _hoisted_7 = {
12
+ key: 1,
13
+ class: "flex-1 grid grid-cols-1 lg:grid-cols-2 gap-3 overflow-auto min-h-0"
14
+ };
15
+ const _hoisted_8 = ["onClick"];
16
+ const _hoisted_9 = { class: "flex items-center justify-between mb-1" };
17
+ const _hoisted_10 = { class: "text-xs font-bold text-gray-500 uppercase tracking-wider" };
18
+ const _sfc_main = /* @__PURE__ */ defineComponent({
19
+ __name: "index",
20
+ setup(__props) {
21
+ const ipInput = ref("192.168.1.100");
22
+ const cidr = ref(24);
23
+ const copyField = ref("");
24
+ function ipToNum(ip) {
25
+ const parts = ip.split(".").map(Number);
26
+ return (parts[0] << 24 | parts[1] << 16 | parts[2] << 8 | parts[3]) >>> 0;
27
+ }
28
+ function numToIp(num) {
29
+ return [num >>> 24 & 255, num >>> 16 & 255, num >>> 8 & 255, num & 255].join(".");
30
+ }
31
+ function isValidIp(ip) {
32
+ const parts = ip.split(".");
33
+ if (parts.length !== 4) return false;
34
+ return parts.every((p) => {
35
+ const n = Number(p);
36
+ return !isNaN(n) && n >= 0 && n <= 255 && String(n) === p;
37
+ });
38
+ }
39
+ const result = computed(() => {
40
+ if (!isValidIp(ipInput.value) || cidr.value < 0 || cidr.value > 32) return null;
41
+ const ip = ipToNum(ipInput.value);
42
+ const mask = cidr.value === 0 ? 0 : -1 << 32 - cidr.value >>> 0;
43
+ const network = (ip & mask) >>> 0;
44
+ const broadcast = (network | ~mask) >>> 0;
45
+ const firstHost = cidr.value >= 31 ? network : network + 1 >>> 0;
46
+ const lastHost = cidr.value >= 31 ? broadcast : broadcast - 1 >>> 0;
47
+ const totalHosts = cidr.value >= 31 ? cidr.value === 32 ? 1 : 2 : Math.pow(2, 32 - cidr.value) - 2;
48
+ const ipClass = (() => {
49
+ const first = ip >>> 24 & 255;
50
+ if (first < 128) return "A";
51
+ if (first < 192) return "B";
52
+ if (first < 224) return "C";
53
+ if (first < 240) return "D (组播)";
54
+ return "E (保留)";
55
+ })();
56
+ const isPrivate = (() => {
57
+ const n = ip;
58
+ return n >= ipToNum("10.0.0.0") && n <= ipToNum("10.255.255.255") || n >= ipToNum("172.16.0.0") && n <= ipToNum("172.31.255.255") || n >= ipToNum("192.168.0.0") && n <= ipToNum("192.168.255.255");
59
+ })();
60
+ return [
61
+ { label: "IP 地址", value: ipInput.value, color: "text-primary" },
62
+ { label: "子网掩码", value: numToIp(mask), color: "text-electric-blue" },
63
+ { label: "CIDR", value: `/${cidr.value}`, color: "text-electric-blue" },
64
+ { label: "网络地址", value: numToIp(network), color: "text-vibrant-purple" },
65
+ { label: "广播地址", value: numToIp(broadcast), color: "text-vibrant-purple" },
66
+ { label: "第一个主机", value: numToIp(firstHost), color: "text-neon-green" },
67
+ { label: "最后一个主机", value: numToIp(lastHost), color: "text-neon-green" },
68
+ { label: "可用主机数", value: totalHosts.toLocaleString(), color: "text-primary" },
69
+ { label: "IP 类别", value: ipClass, color: "text-hot-pink" },
70
+ { label: "地址类型", value: isPrivate ? "私有地址" : "公有地址", color: isPrivate ? "text-neon-green" : "text-coral-red" },
71
+ { label: "二进制", value: ip.toString(2).padStart(32, "0").replace(/(.{8})/g, "$1.").slice(0, -1), color: "text-gray-400" }
72
+ ];
73
+ });
74
+ async function copy(text, field) {
75
+ await navigator.clipboard.writeText(text);
76
+ copyField.value = field;
77
+ setTimeout(() => {
78
+ copyField.value = "";
79
+ }, 1200);
80
+ }
81
+ return (_ctx, _cache) => {
82
+ return openBlock(), createElementBlock("div", _hoisted_1, [
83
+ createElementVNode("div", _hoisted_2, [
84
+ _cache[4] || (_cache[4] = createElementVNode(
85
+ "div",
86
+ { class: "flex items-center gap-2 mb-3" },
87
+ [
88
+ createElementVNode("span", { class: "material-icons text-primary text-lg" }, "lan"),
89
+ createElementVNode("span", { class: "text-sm font-bold text-gray-400 uppercase tracking-wider" }, "IP / 子网计算器")
90
+ ],
91
+ -1
92
+ /* CACHED */
93
+ )),
94
+ createElementVNode("div", _hoisted_3, [
95
+ withDirectives(createElementVNode(
96
+ "input",
97
+ {
98
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => ipInput.value = $event),
99
+ placeholder: "192.168.1.100",
100
+ class: "flex-1 h-12 bg-bg-dark text-gray-100 border-4 border-black rounded-lg px-4 font-mono text-lg shadow-hard focus:border-primary focus:shadow-none focus:translate-x-[4px] focus:translate-y-[4px] transition-all outline-none placeholder-gray-600 min-w-[200px]"
101
+ },
102
+ null,
103
+ 512
104
+ /* NEED_PATCH */
105
+ ), [
106
+ [vModelText, ipInput.value]
107
+ ]),
108
+ _cache[2] || (_cache[2] = createElementVNode(
109
+ "span",
110
+ { class: "text-2xl text-gray-500 font-bold" },
111
+ "/",
112
+ -1
113
+ /* CACHED */
114
+ )),
115
+ withDirectives(createElementVNode(
116
+ "input",
117
+ {
118
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => cidr.value = $event),
119
+ type: "number",
120
+ min: "0",
121
+ max: "32",
122
+ class: "w-20 h-12 bg-bg-dark text-gray-100 border-4 border-black rounded-lg px-3 font-mono text-lg text-center shadow-hard focus:border-primary focus:shadow-none focus:translate-x-[4px] focus:translate-y-[4px] transition-all outline-none"
123
+ },
124
+ null,
125
+ 512
126
+ /* NEED_PATCH */
127
+ ), [
128
+ [
129
+ vModelText,
130
+ cidr.value,
131
+ void 0,
132
+ { number: true }
133
+ ]
134
+ ])
135
+ ]),
136
+ createElementVNode("div", _hoisted_4, [
137
+ _cache[3] || (_cache[3] = createElementVNode(
138
+ "span",
139
+ { class: "text-xs text-gray-600" },
140
+ "常用:",
141
+ -1
142
+ /* CACHED */
143
+ )),
144
+ (openBlock(), createElementBlock(
145
+ Fragment,
146
+ null,
147
+ renderList([8, 16, 24, 25, 26, 27, 28, 30, 32], (c) => {
148
+ return createElementVNode("button", {
149
+ key: c,
150
+ onClick: ($event) => cidr.value = c,
151
+ class: "px-2 py-0.5 text-xs font-mono bg-bg-dark border border-gray-700 rounded hover:border-primary hover:text-primary transition-all cursor-pointer text-gray-500"
152
+ }, " /" + toDisplayString(c), 9, _hoisted_5);
153
+ }),
154
+ 64
155
+ /* STABLE_FRAGMENT */
156
+ ))
157
+ ])
158
+ ]),
159
+ !isValidIp(ipInput.value) ? (openBlock(), createElementBlock("div", _hoisted_6, [..._cache[5] || (_cache[5] = [
160
+ createElementVNode(
161
+ "span",
162
+ { class: "material-icons text-lg" },
163
+ "error_outline",
164
+ -1
165
+ /* CACHED */
166
+ ),
167
+ createTextVNode(
168
+ " 无效的 IP 地址 ",
169
+ -1
170
+ /* CACHED */
171
+ )
172
+ ])])) : createCommentVNode("v-if", true),
173
+ result.value ? (openBlock(), createElementBlock("div", _hoisted_7, [
174
+ (openBlock(true), createElementBlock(
175
+ Fragment,
176
+ null,
177
+ renderList(result.value, (r) => {
178
+ return openBlock(), createElementBlock("div", {
179
+ key: r.label,
180
+ class: "bg-deep-charcoal border-4 border-black rounded-xl p-4 shadow-hard cursor-pointer hover:border-primary transition-all group",
181
+ onClick: ($event) => copy(r.value, r.label)
182
+ }, [
183
+ createElementVNode("div", _hoisted_9, [
184
+ createElementVNode(
185
+ "span",
186
+ _hoisted_10,
187
+ toDisplayString(r.label),
188
+ 1
189
+ /* TEXT */
190
+ ),
191
+ createElementVNode(
192
+ "span",
193
+ {
194
+ class: normalizeClass(["material-icons text-sm opacity-0 group-hover:opacity-100 transition-opacity", copyField.value === r.label ? "text-neon-green" : "text-gray-500"])
195
+ },
196
+ toDisplayString(copyField.value === r.label ? "check" : "content_copy"),
197
+ 3
198
+ /* TEXT, CLASS */
199
+ )
200
+ ]),
201
+ createElementVNode(
202
+ "div",
203
+ {
204
+ class: normalizeClass(["font-mono text-sm select-all break-all", r.color])
205
+ },
206
+ toDisplayString(r.value),
207
+ 3
208
+ /* TEXT, CLASS */
209
+ )
210
+ ], 8, _hoisted_8);
211
+ }),
212
+ 128
213
+ /* KEYED_FRAGMENT */
214
+ ))
215
+ ])) : createCommentVNode("v-if", true)
216
+ ]);
217
+ };
218
+ }
219
+ });
220
+ export {
221
+ _sfc_main as default
222
+ };