@unthinkmedia/coherence-prototyper-mcp 1.0.0

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,530 @@
1
+ /**
2
+ * Icon Browser MCP App — Client-side UI
3
+ *
4
+ * Interactive visual browser for all Azure & Coherence icons.
5
+ * Renders icons as a visual grid with search, source/category filtering,
6
+ * and a "Use this icon" selection flow that saves the choice to disk
7
+ * so the model can read it.
8
+ */
9
+ import { App } from "@modelcontextprotocol/ext-apps";
10
+ import "@vscode-elements/elements/dist/bundled.js";
11
+ const app = new App({ name: "Icon Browser", version: "1.0.0" });
12
+ let allIcons = [];
13
+ let allSources = [];
14
+ let allCategories = [];
15
+ let totalCount = 0;
16
+ let selectedIcon = null;
17
+ let lastFingerprint = "";
18
+ // Currently loaded page (for lazy loading)
19
+ let displayLimit = 100;
20
+ const root = document.getElementById("app");
21
+ root.innerHTML = buildShell();
22
+ const searchEl = document.getElementById("search");
23
+ const sourceFilterEl = document.getElementById("source-filter");
24
+ const categoryFilterEl = document.getElementById("category-filter");
25
+ const countEl = document.getElementById("count");
26
+ const iconsEl = document.getElementById("icons");
27
+ const copiedEl = document.getElementById("copied");
28
+ const loadMoreEl = document.getElementById("load-more");
29
+ const selectedEl = document.getElementById("selected-panel");
30
+ const selectedIconEl = document.getElementById("selected-icon");
31
+ const selectedNameEl = document.getElementById("selected-name");
32
+ const selectedSourceEl = document.getElementById("selected-source");
33
+ const selectedCategoryEl = document.getElementById("selected-category");
34
+ const selectedUsageEl = document.getElementById("selected-usage");
35
+ const copyBtnEl = document.getElementById("copy-btn");
36
+ const useBtnEl = document.getElementById("use-btn");
37
+ const closePanelEl = document.getElementById("close-panel");
38
+ const confirmationEl = document.getElementById("confirmation");
39
+ const newSearchEl = document.getElementById("new-search");
40
+ function escapeHtml(str) {
41
+ return str
42
+ .replace(/&/g, "&")
43
+ .replace(/</g, "&lt;")
44
+ .replace(/>/g, "&gt;")
45
+ .replace(/"/g, "&quot;");
46
+ }
47
+ function showCopied(msg) {
48
+ copiedEl.textContent = msg;
49
+ copiedEl.classList.add("show");
50
+ setTimeout(() => copiedEl.classList.remove("show"), 1500);
51
+ }
52
+ const SOURCE_LABELS = {
53
+ curated: "★ Curated",
54
+ "cui-builtin": "Fluent UI",
55
+ "azure-portal": "Azure Portal",
56
+ "icon-collection": "Community",
57
+ };
58
+ const SOURCE_COLORS = {
59
+ curated: "#0078d4",
60
+ "cui-builtin": "#8764b8",
61
+ "azure-portal": "#107c10",
62
+ "icon-collection": "#ca5010",
63
+ };
64
+ function getFiltered() {
65
+ const q = (searchEl.value ?? "").toLowerCase();
66
+ const src = sourceFilterEl.value ?? "";
67
+ const cat = categoryFilterEl.value ?? "";
68
+ return allIcons.filter((icon) => {
69
+ if (src && icon.source !== src)
70
+ return false;
71
+ if (cat && icon.category !== cat)
72
+ return false;
73
+ if (q && !icon.name.toLowerCase().includes(q) && !icon.category.toLowerCase().includes(q) && !icon.id.toLowerCase().includes(q))
74
+ return false;
75
+ return true;
76
+ });
77
+ }
78
+ function render() {
79
+ const filtered = getFiltered();
80
+ const q = searchEl.value ?? "";
81
+ const src = sourceFilterEl.value ?? "";
82
+ const cat = categoryFilterEl.value ?? "";
83
+ const suffix = (src ? ` from ${SOURCE_LABELS[src] ?? src}` : "") +
84
+ (cat ? ` in "${cat}"` : "") +
85
+ (q ? ` matching "${q}"` : "");
86
+ countEl.textContent = `${filtered.length} icons${suffix}`;
87
+ const visible = filtered.slice(0, displayLimit);
88
+ iconsEl.innerHTML = visible
89
+ .map((icon) => {
90
+ const sourceColor = SOURCE_COLORS[icon.source] ?? "#666";
91
+ const sourceLabel = SOURCE_LABELS[icon.source] ?? icon.source;
92
+ let imgHtml;
93
+ const imgSrc = icon.displayUrl ?? icon.url;
94
+ if (imgSrc) {
95
+ imgHtml = `<img src="${escapeHtml(imgSrc)}" alt="${escapeHtml(icon.name)}" loading="lazy" onerror="this.style.display='none';this.nextElementSibling.style.display='flex'" /><div class="icon-fallback" style="display:none">?</div>`;
96
+ }
97
+ else {
98
+ // For cui-builtin icons, show placeholder with the name
99
+ imgHtml = `<div class="icon-cui-name">${escapeHtml(icon.cuiName ?? icon.name)}</div>`;
100
+ }
101
+ return `<div class="icon-card" data-id="${escapeHtml(icon.id)}" data-idx="${allIcons.indexOf(icon)}">
102
+ <div class="icon-preview">${imgHtml}</div>
103
+ <div class="icon-label">${escapeHtml(icon.name)}</div>
104
+ <div class="icon-source" style="background:${sourceColor}">${escapeHtml(sourceLabel)}</div>
105
+ </div>`;
106
+ })
107
+ .join("");
108
+ // Show/hide load more button
109
+ if (filtered.length > displayLimit) {
110
+ loadMoreEl.style.display = "block";
111
+ loadMoreEl.textContent = `Load more (${filtered.length - displayLimit} remaining)`;
112
+ }
113
+ else {
114
+ loadMoreEl.style.display = "none";
115
+ }
116
+ }
117
+ function populateFilters() {
118
+ // Sources
119
+ sourceFilterEl.innerHTML = '<vscode-option value="">All sources</vscode-option>';
120
+ for (const s of allSources) {
121
+ const label = `${SOURCE_LABELS[s.source] ?? s.source} (${s.count})`;
122
+ sourceFilterEl.insertAdjacentHTML("beforeend", `<vscode-option value="${escapeHtml(s.source)}">${escapeHtml(label)}</vscode-option>`);
123
+ }
124
+ // Categories
125
+ categoryFilterEl.innerHTML = '<vscode-option value="">All categories</vscode-option>';
126
+ for (const c of allCategories) {
127
+ categoryFilterEl.insertAdjacentHTML("beforeend", `<vscode-option value="${escapeHtml(c.category)}">${escapeHtml(c.category)} (${c.count})</vscode-option>`);
128
+ }
129
+ }
130
+ function showSelected(icon) {
131
+ selectedIcon = icon;
132
+ selectedEl.classList.add("visible");
133
+ const detailSrc = icon.displayUrl ?? icon.url;
134
+ if (detailSrc) {
135
+ selectedIconEl.innerHTML = `<img src="${escapeHtml(detailSrc)}" alt="${escapeHtml(icon.name)}" />`;
136
+ }
137
+ else {
138
+ selectedIconEl.innerHTML = `<div class="selected-cui-name">${escapeHtml(icon.cuiName ?? icon.name)}</div>`;
139
+ }
140
+ selectedNameEl.textContent = icon.name;
141
+ selectedSourceEl.textContent = SOURCE_LABELS[icon.source] ?? icon.source;
142
+ selectedSourceEl.style.background = SOURCE_COLORS[icon.source] ?? "#666";
143
+ selectedCategoryEl.textContent = icon.category;
144
+ selectedUsageEl.textContent = icon.usage;
145
+ copyBtnEl.onclick = () => {
146
+ navigator.clipboard.writeText(icon.usage).then(() => showCopied("Copied usage!"));
147
+ };
148
+ useBtnEl.onclick = () => selectIcon(icon);
149
+ }
150
+ function hideSelected() {
151
+ selectedEl.classList.remove("visible");
152
+ }
153
+ // ─── Event Listeners ───
154
+ searchEl.addEventListener("input", () => {
155
+ displayLimit = 100;
156
+ render();
157
+ });
158
+ searchEl.addEventListener("vsc-input", () => {
159
+ displayLimit = 100;
160
+ render();
161
+ });
162
+ sourceFilterEl.addEventListener("change", () => {
163
+ displayLimit = 100;
164
+ render();
165
+ });
166
+ sourceFilterEl.addEventListener("vsc-change", () => {
167
+ displayLimit = 100;
168
+ render();
169
+ });
170
+ categoryFilterEl.addEventListener("change", () => {
171
+ displayLimit = 100;
172
+ render();
173
+ });
174
+ categoryFilterEl.addEventListener("vsc-change", () => {
175
+ displayLimit = 100;
176
+ render();
177
+ });
178
+ loadMoreEl.addEventListener("click", () => {
179
+ displayLimit += 100;
180
+ render();
181
+ });
182
+ iconsEl.addEventListener("click", (e) => {
183
+ const card = e.target.closest(".icon-card");
184
+ if (!card)
185
+ return;
186
+ const idx = parseInt(card.dataset.idx ?? "-1", 10);
187
+ if (idx >= 0 && idx < allIcons.length) {
188
+ showSelected(allIcons[idx]);
189
+ }
190
+ });
191
+ closePanelEl.addEventListener("click", hideSelected);
192
+ newSearchEl.addEventListener("click", async () => {
193
+ newSearchEl.disabled = true;
194
+ newSearchEl.textContent = "Searching...";
195
+ try {
196
+ const args = {};
197
+ const q = searchEl.value;
198
+ const src = sourceFilterEl.value;
199
+ const cat = categoryFilterEl.value;
200
+ if (q)
201
+ args.query = q;
202
+ if (src)
203
+ args.source = src;
204
+ if (cat)
205
+ args.category = cat;
206
+ const result = await app.callServerTool({ name: "browse_icons", arguments: args });
207
+ if (result)
208
+ handleIconData(result.structuredContent);
209
+ }
210
+ catch (err) {
211
+ console.error("Search failed:", err);
212
+ showCopied("Search failed \u2014 try again");
213
+ }
214
+ finally {
215
+ newSearchEl.disabled = false;
216
+ newSearchEl.textContent = "\ud83d\udd0d Search";
217
+ }
218
+ });
219
+ searchEl.addEventListener("keydown", (e) => {
220
+ if (e.key === "Enter")
221
+ newSearchEl.click();
222
+ });
223
+ // ─── Icon Selection ───
224
+ async function selectIcon(icon) {
225
+ useBtnEl.disabled = true;
226
+ useBtnEl.textContent = "Saving...";
227
+ try {
228
+ await app.callServerTool({
229
+ name: "icon_select_data",
230
+ arguments: {
231
+ id: icon.id,
232
+ name: icon.name,
233
+ source: icon.source,
234
+ category: icon.category,
235
+ url: icon.url,
236
+ cuiName: icon.cuiName,
237
+ usage: icon.usage,
238
+ },
239
+ });
240
+ // Show confirmation
241
+ hideSelected();
242
+ showConfirmation(icon);
243
+ }
244
+ catch (err) {
245
+ console.error("Failed to save icon selection:", err);
246
+ showCopied("Selection failed — try again");
247
+ }
248
+ finally {
249
+ useBtnEl.disabled = false;
250
+ useBtnEl.textContent = "✓ Use this icon";
251
+ }
252
+ }
253
+ function showConfirmation(icon) {
254
+ let imgHtml;
255
+ const confirmSrc = icon.displayUrl ?? icon.url;
256
+ if (confirmSrc) {
257
+ imgHtml = `<img src="${escapeHtml(confirmSrc)}" alt="${escapeHtml(icon.name)}" style="max-width:64px;max-height:64px;" />`;
258
+ }
259
+ else {
260
+ imgHtml = `<div style="font-size:14px;color:var(--accent);font-weight:600;width:64px;height:64px;display:flex;align-items:center;justify-content:center;border:1px dashed var(--accent);border-radius:8px;">${escapeHtml(icon.cuiName ?? icon.name)}</div>`;
261
+ }
262
+ confirmationEl.innerHTML = `
263
+ <div class="confirmation-content">
264
+ <div class="confirmation-icon">${imgHtml}</div>
265
+ <div class="confirmation-check">✓</div>
266
+ <div class="confirmation-title">Icon Selected!</div>
267
+ <div class="confirmation-name">${escapeHtml(icon.name)}</div>
268
+ <div class="confirmation-usage">${escapeHtml(icon.usage)}</div>
269
+ <div class="confirmation-hint">Your selection has been saved. You can tell the assistant to use this icon now.</div>
270
+ <vscode-button id="browse-again" appearance="secondary">Browse more icons</vscode-button>
271
+ </div>`;
272
+ confirmationEl.style.display = "flex";
273
+ document.getElementById("browse-again").addEventListener("click", () => {
274
+ confirmationEl.style.display = "none";
275
+ });
276
+ }
277
+ function handleIconData(raw) {
278
+ const data = raw;
279
+ if (!data)
280
+ return;
281
+ allIcons = data.icons ?? [];
282
+ totalCount = data.total ?? allIcons.length;
283
+ allSources = data.sources ?? [];
284
+ allCategories = data.categories ?? [];
285
+ populateFilters();
286
+ if (data.prefillQuery) {
287
+ searchEl.value = data.prefillQuery;
288
+ }
289
+ if (data.prefillSource) {
290
+ sourceFilterEl.value = data.prefillSource;
291
+ }
292
+ if (data.prefillCategory) {
293
+ categoryFilterEl.value = data.prefillCategory;
294
+ }
295
+ displayLimit = 100;
296
+ confirmationEl.style.display = "none";
297
+ render();
298
+ }
299
+ app.ontoolresult = (result) => {
300
+ const fp = JSON.stringify(result.structuredContent);
301
+ if (fp === lastFingerprint)
302
+ return;
303
+ lastFingerprint = fp;
304
+ handleIconData(result.structuredContent);
305
+ };
306
+ // Theme support
307
+ app.onhostcontextchanged = (ctx) => {
308
+ if (ctx.theme) {
309
+ document.documentElement.setAttribute("data-theme", ctx.theme);
310
+ }
311
+ };
312
+ app.connect().then(() => {
313
+ const ctx = app.getHostContext();
314
+ if (ctx?.theme) {
315
+ document.documentElement.setAttribute("data-theme", ctx.theme);
316
+ }
317
+ });
318
+ function buildShell() {
319
+ return `
320
+ <style>
321
+ :root {
322
+ --bg: var(--vscode-editor-background, #fff);
323
+ --fg: var(--vscode-editor-foreground, #1a1a1a);
324
+ --border: var(--vscode-panel-border, #e0e0e0);
325
+ --accent: var(--vscode-focusBorder, #0078d4);
326
+ --card-bg: var(--vscode-editorWidget-background, #f5f5f5);
327
+ --card-hover: var(--vscode-list-hoverBackground, #e8e8e8);
328
+ --panel-bg: var(--vscode-editorWidget-background, #fff);
329
+ --panel-shadow: var(--vscode-widget-shadow, rgba(0,0,0,0.15));
330
+ --muted: var(--vscode-descriptionForeground, #888);
331
+ --success: var(--vscode-testing-iconPassed, #107c10);
332
+ }
333
+ * { box-sizing: border-box; margin: 0; padding: 0; }
334
+ body {
335
+ font-family: var(--vscode-font-family, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif);
336
+ font-size: var(--vscode-font-size, 13px);
337
+ background: var(--bg); color: var(--fg); padding: 16px;
338
+ line-height: 1.4;
339
+ }
340
+
341
+ /* ─── Header ─── */
342
+ .header { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; }
343
+ .header h1 { font-size: 18px; font-weight: 600; }
344
+ .header .subtitle { font-size: 12px; color: var(--muted); }
345
+
346
+ /* ─── Toolbar ─── */
347
+ .toolbar {
348
+ display: flex; gap: 8px; margin-bottom: 12px; flex-wrap: wrap; align-items: center;
349
+ }
350
+ .toolbar vscode-textfield { flex: 1; min-width: 200px; }
351
+
352
+ /* ─── Count ─── */
353
+ .count { font-size: 13px; color: var(--muted); margin-bottom: 12px; }
354
+
355
+ /* ─── Icon Grid ─── */
356
+ .icons {
357
+ display: grid;
358
+ grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
359
+ gap: 8px;
360
+ }
361
+ .icon-card {
362
+ display: flex; flex-direction: column; align-items: center;
363
+ padding: 12px 8px 8px; border-radius: 8px; background: var(--card-bg);
364
+ border: 1px solid var(--border); cursor: pointer;
365
+ transition: border-color 0.15s, background 0.15s, transform 0.1s;
366
+ text-align: center; overflow: hidden;
367
+ }
368
+ .icon-card:hover {
369
+ border-color: var(--accent); background: var(--card-hover);
370
+ transform: translateY(-1px);
371
+ }
372
+
373
+ .icon-preview {
374
+ width: 40px; height: 40px; display: flex; align-items: center;
375
+ justify-content: center; margin-bottom: 6px; flex-shrink: 0;
376
+ }
377
+ .icon-preview img {
378
+ max-width: 40px; max-height: 40px; object-fit: contain;
379
+ }
380
+ .icon-fallback {
381
+ width: 40px; height: 40px; align-items: center; justify-content: center;
382
+ font-size: 20px; color: var(--muted); border: 1px dashed var(--border); border-radius: 4px;
383
+ }
384
+ .icon-cui-name {
385
+ font-size: 10px; color: var(--accent); font-weight: 600;
386
+ display: flex; align-items: center; justify-content: center;
387
+ width: 40px; height: 40px; border: 1px dashed var(--accent);
388
+ border-radius: 4px; opacity: 0.8; word-break: break-all;
389
+ text-align: center; line-height: 1.2; padding: 2px;
390
+ }
391
+
392
+ .icon-label {
393
+ font-size: 11px; font-weight: 500; word-break: break-all;
394
+ max-height: 28px; overflow: hidden; line-height: 1.3;
395
+ }
396
+ .icon-source {
397
+ display: inline-block; padding: 1px 6px; border-radius: 8px;
398
+ font-size: 9px; color: #fff; margin-top: 4px; white-space: nowrap;
399
+ }
400
+
401
+ /* ─── Load More ─── */
402
+ #load-more { display: none; margin: 16px auto; }
403
+
404
+ /* ─── Detail Panel ─── */
405
+ .selected-panel {
406
+ position: fixed; bottom: -200px; left: 16px; right: 16px;
407
+ background: var(--panel-bg); border: 1px solid var(--border);
408
+ border-radius: 12px 12px 0 0; padding: 16px 20px;
409
+ box-shadow: 0 -4px 20px var(--panel-shadow);
410
+ transition: bottom 0.25s ease;
411
+ z-index: 100; display: flex; align-items: center; gap: 16px;
412
+ }
413
+ .selected-panel.visible { bottom: 0; }
414
+
415
+ .selected-preview {
416
+ width: 48px; height: 48px; display: flex; align-items: center;
417
+ justify-content: center; flex-shrink: 0;
418
+ }
419
+ .selected-preview img {
420
+ max-width: 48px; max-height: 48px; object-fit: contain;
421
+ }
422
+ .selected-cui-name {
423
+ font-size: 12px; color: var(--accent); font-weight: 600;
424
+ display: flex; align-items: center; justify-content: center;
425
+ width: 48px; height: 48px; border: 1px dashed var(--accent);
426
+ border-radius: 6px; word-break: break-all; text-align: center;
427
+ }
428
+
429
+ .selected-info { flex: 1; min-width: 0; }
430
+ .selected-name { font-size: 14px; font-weight: 600; }
431
+ .selected-meta { display: flex; gap: 8px; align-items: center; margin: 4px 0; flex-wrap: wrap; }
432
+ .selected-source-chip {
433
+ display: inline-block; padding: 2px 8px; border-radius: 8px;
434
+ font-size: 10px; color: #fff;
435
+ }
436
+ .selected-category-chip {
437
+ font-size: 11px; color: var(--muted);
438
+ }
439
+ .selected-usage {
440
+ font-family: var(--vscode-editor-font-family, 'SF Mono', 'Fira Code', 'Consolas', monospace);
441
+ font-size: 11px; background: var(--card-bg); padding: 6px 10px;
442
+ border-radius: 4px; border: 1px solid var(--border);
443
+ white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
444
+ margin-top: 6px; max-width: 100%;
445
+ }
446
+
447
+ .selected-actions { display: flex; gap: 8px; flex-shrink: 0; }
448
+
449
+ /* ─── Toast ─── */
450
+ .copied {
451
+ position: fixed; top: 16px; right: 16px; background: var(--accent); color: #fff;
452
+ padding: 6px 16px; border-radius: 6px; font-size: 13px; opacity: 0;
453
+ transition: opacity 0.2s; pointer-events: none; z-index: 200;
454
+ }
455
+ .copied.show { opacity: 1; }
456
+
457
+ /* ─── Confirmation Overlay ─── */
458
+ .confirmation-overlay {
459
+ display: none; position: fixed; inset: 0; z-index: 150;
460
+ background: var(--bg); align-items: center; justify-content: center;
461
+ }
462
+ .confirmation-content {
463
+ text-align: center; padding: 32px; max-width: 400px;
464
+ }
465
+ .confirmation-icon { margin-bottom: 12px; }
466
+ .confirmation-check {
467
+ font-size: 32px; color: var(--success); margin-bottom: 8px;
468
+ }
469
+ .confirmation-title {
470
+ font-size: 18px; font-weight: 600; margin-bottom: 4px;
471
+ }
472
+ .confirmation-name {
473
+ font-size: 14px; color: var(--muted); margin-bottom: 12px;
474
+ }
475
+ .confirmation-usage {
476
+ font-family: var(--vscode-editor-font-family, 'SF Mono', 'Fira Code', 'Consolas', monospace);
477
+ font-size: 12px; background: var(--card-bg); padding: 8px 14px;
478
+ border-radius: 6px; border: 1px solid var(--border);
479
+ margin-bottom: 16px; word-break: break-all;
480
+ }
481
+ .confirmation-hint {
482
+ font-size: 13px; color: var(--muted); margin-bottom: 16px; line-height: 1.5;
483
+ }
484
+ </style>
485
+
486
+ <div class="header">
487
+ <h1>Icon Browser</h1>
488
+ <span class="subtitle">Browse all Azure & Coherence icons</span>
489
+ </div>
490
+
491
+ <div class="toolbar">
492
+ <vscode-textfield id="search" placeholder="Search icons by name, category, or extension..."></vscode-textfield>
493
+ <vscode-single-select id="source-filter">
494
+ <vscode-option value="">All sources</vscode-option>
495
+ </vscode-single-select>
496
+ <vscode-single-select id="category-filter">
497
+ <vscode-option value="">All categories</vscode-option>
498
+ </vscode-single-select>
499
+ <vscode-button id="new-search" title="Fetch new results from server">Search</vscode-button>
500
+ </div>
501
+
502
+ <div class="count" id="count">Loading icons...</div>
503
+ <div class="icons" id="icons"></div>
504
+ <vscode-button id="load-more" appearance="secondary" style="display:none;margin:16px auto;">Load more</vscode-button>
505
+
506
+ <!-- Detail panel -->
507
+ <div class="selected-panel" id="selected-panel">
508
+ <div class="selected-preview" id="selected-icon"></div>
509
+ <div class="selected-info">
510
+ <div class="selected-name" id="selected-name"></div>
511
+ <div class="selected-meta">
512
+ <span class="selected-source-chip" id="selected-source"></span>
513
+ <span class="selected-category-chip" id="selected-category"></span>
514
+ </div>
515
+ <div class="selected-usage" id="selected-usage"></div>
516
+ </div>
517
+ <div class="selected-actions">
518
+ <vscode-button id="use-btn">Use this icon</vscode-button>
519
+ <vscode-button id="copy-btn" appearance="secondary">Copy usage</vscode-button>
520
+ <vscode-button id="close-panel" appearance="icon">✕</vscode-button>
521
+ </div>
522
+ </div>
523
+
524
+ <div class="copied" id="copied">Copied!</div>
525
+
526
+ <!-- Confirmation overlay -->
527
+ <div class="confirmation-overlay" id="confirmation"></div>
528
+ `;
529
+ }
530
+ //# sourceMappingURL=icon-browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon-browser.js","sourceRoot":"","sources":["../../src/icon-browser.ts"],"names":[],"mappings":"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"}