@vscode/codicons 0.0.43 → 0.0.45-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.
Files changed (97) hide show
  1. package/.fantasticonrc.js +12 -1
  2. package/.github/workflows/build.yml +17 -14
  3. package/RELEASING.md +32 -0
  4. package/_iconCloud/categories.csv +533 -0
  5. package/_iconCloud/categories.transforms.json +92 -0
  6. package/_iconCloud/categories.variables.json +48 -0
  7. package/_iconCloud/descriptions.csv +533 -0
  8. package/_iconCloud/descriptions.transforms.json +83 -0
  9. package/_iconCloud/descriptions.variables.json +47 -0
  10. package/_iconCloud/keywords.csv +533 -1
  11. package/_iconCloud/keywords.transforms.json +22 -13
  12. package/_iconCloud/keywords.variables.json +19 -18
  13. package/_iconCloud/manifest.json +11 -1
  14. package/_iconCloud/manifest.transforms.json +2 -2
  15. package/_iconCloud/metaphors.csv +533 -0
  16. package/_iconCloud/metaphors.transforms.json +92 -0
  17. package/_iconCloud/metaphors.variables.json +48 -0
  18. package/build/pipeline.yml +18 -7
  19. package/dist/codicon.css +14 -3
  20. package/dist/codicon.csv +16 -2
  21. package/dist/codicon.html +8171 -853
  22. package/dist/codicon.svg +1 -1
  23. package/dist/codicon.ttf +0 -0
  24. package/dist/codiconsLibrary.ts +13 -2
  25. package/dist/metadata.json +2672 -0
  26. package/package.json +6 -2
  27. package/scripts/check-metadata.js +126 -0
  28. package/scripts/embed-metadata.js +25 -0
  29. package/scripts/embed-svg-data.js +31 -0
  30. package/scripts/export-to-ts.js +9 -2
  31. package/scripts/svg-sprite.js +34 -6
  32. package/src/icons/add-small.svg +1 -0
  33. package/src/icons/ask.svg +1 -0
  34. package/src/icons/chat-sparkle-error.svg +1 -1
  35. package/src/icons/chat-sparkle-warning.svg +1 -1
  36. package/src/icons/chat-sparkle.svg +1 -1
  37. package/src/icons/clockface.svg +1 -0
  38. package/src/icons/cloud-download.svg +1 -1
  39. package/src/icons/cloud-small.svg +1 -0
  40. package/src/icons/cloud-upload.svg +1 -1
  41. package/src/icons/cloud.svg +1 -1
  42. package/src/icons/collection-small.svg +1 -0
  43. package/src/icons/copilot-blocked.svg +1 -1
  44. package/src/icons/copilot-error.svg +1 -1
  45. package/src/icons/copilot-in-progress.svg +1 -1
  46. package/src/icons/copilot-success.svg +1 -1
  47. package/src/icons/copilot-warning.svg +1 -1
  48. package/src/icons/debug-continue.svg +1 -1
  49. package/src/icons/debug-pause.svg +1 -1
  50. package/src/icons/debug-restart.svg +1 -1
  51. package/src/icons/debug-reverse-continue.svg +1 -1
  52. package/src/icons/debug-start.svg +1 -1
  53. package/src/icons/debug-step-back.svg +1 -1
  54. package/src/icons/debug-step-into.svg +1 -1
  55. package/src/icons/debug-step-out.svg +1 -1
  56. package/src/icons/debug-step-over.svg +1 -1
  57. package/src/icons/debug-stop.svg +1 -1
  58. package/src/icons/empty-window.svg +1 -1
  59. package/src/icons/exclude.svg +1 -1
  60. package/src/icons/extensions-large.svg +1 -1
  61. package/src/icons/extensions.svg +1 -1
  62. package/src/icons/filter-filled.svg +1 -1
  63. package/src/icons/filter.svg +1 -1
  64. package/src/icons/folder-active.svg +1 -1
  65. package/src/icons/git-branch-changes.svg +1 -1
  66. package/src/icons/git-branch-conflicts.svg +1 -1
  67. package/src/icons/git-branch-staged-changes.svg +1 -1
  68. package/src/icons/git-pull-request-create.svg +1 -1
  69. package/src/icons/git-pull-request-done.svg +1 -1
  70. package/src/icons/git-stash-apply.svg +1 -1
  71. package/src/icons/git-stash-pop.svg +1 -1
  72. package/src/icons/git-stash.svg +1 -1
  73. package/src/icons/index-zero.svg +1 -1
  74. package/src/icons/keyboard-tab-above.svg +1 -1
  75. package/src/icons/new-collection.svg +1 -1
  76. package/src/icons/new-file.svg +1 -1
  77. package/src/icons/new-folder.svg +1 -1
  78. package/src/icons/person-add.svg +1 -1
  79. package/src/icons/remove-small.svg +1 -0
  80. package/src/icons/report.svg +1 -1
  81. package/src/icons/run-all-coverage.svg +1 -1
  82. package/src/icons/run-coverage.svg +1 -1
  83. package/src/icons/run-errors.svg +1 -1
  84. package/src/icons/screen-cut.svg +1 -0
  85. package/src/icons/session-in-progress.svg +1 -0
  86. package/src/icons/unarchive.svg +1 -0
  87. package/src/icons/unfold.svg +1 -1
  88. package/src/icons/vm-active.svg +1 -1
  89. package/src/icons/vm-pending.svg +1 -1
  90. package/src/icons/vm-small.svg +1 -0
  91. package/src/icons/window-active.svg +1 -1
  92. package/src/icons/worktree-small.svg +1 -0
  93. package/src/icons/worktree.svg +1 -0
  94. package/src/template/mapping.json +1716 -633
  95. package/src/template/metadata.json +2672 -0
  96. package/src/template/preview.hbs +583 -321
  97. package/src/icons/git-lens.svg +0 -1
@@ -30,17 +30,85 @@
30
30
  height: auto;
31
31
  }
32
32
 
33
+ :root {
34
+ --bg-color: #f8f8f8;
35
+ --text-color: #333;
36
+ --text-secondary: #666;
37
+ --card-bg: white;
38
+ --card-shadow: rgba(0, 0, 0, 0.06);
39
+ --card-shadow-hover: rgba(0, 0, 0, 0.24);
40
+ --input-border: rgba(0,0,0,.1);
41
+ --notification-bg: #212121;
42
+ --notification-text: white;
43
+ }
44
+
45
+ [data-theme="dark"] {
46
+ --bg-color: #1e1e1e;
47
+ --text-color: #cccccc;
48
+ --text-secondary: #999;
49
+ --card-bg: #252526;
50
+ --card-shadow: rgba(0, 0, 0, 0.3);
51
+ --card-shadow-hover: rgba(255, 255, 255, 0.1);
52
+ --input-border: rgba(255,255,255,.1);
53
+ --notification-bg: #3c3c3c;
54
+ --notification-text: #cccccc;
55
+ }
56
+
33
57
  body {
34
58
  font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;
35
59
  margin: 0;
36
- padding: 10px 20px;
60
+ padding: 0px 20px 10px 20px;
37
61
  text-align: center;
38
- background-color: #f8f8f8;
62
+ background-color: var(--bg-color);
63
+ color: var(--text-color);
64
+ transition: background-color 0.3s ease, color 0.3s ease;
65
+ }
66
+
67
+ #header {
68
+ position: sticky;
69
+ top: 0;
70
+ display: flex;
71
+ align-items: center;
72
+ gap: 20px;
73
+ margin: 0 auto;
74
+ padding: 20px 64px;
75
+ background-color: var(--bg-color);
76
+ z-index: 100;
77
+ transition: background-color 0.3s ease;
39
78
  }
40
79
 
41
80
  h1 {
42
81
  font-weight: bold;
43
- margin: 24px;
82
+ margin: 0;
83
+ color: var(--text-color);
84
+ white-space: nowrap;
85
+ flex-shrink: 0;
86
+ }
87
+
88
+ #theme-toggle {
89
+ display: flex;
90
+ align-items: center;
91
+ gap: 4px;
92
+ padding: 10px 20px;
93
+ background-color: var(--card-bg);
94
+ color: var(--text-color);
95
+ border: 1px solid var(--input-border);
96
+ border-radius: 4px;
97
+ cursor: pointer;
98
+ font-size: 14px;
99
+ box-shadow: 0px 0px 12px var(--card-shadow);
100
+ transition: all 0.3s ease;
101
+ flex-shrink: 0;
102
+ white-space: nowrap;
103
+ }
104
+
105
+ #theme-toggle:hover {
106
+ box-shadow: 0px 0px 12px var(--card-shadow-hover);
107
+ }
108
+
109
+ #theme-toggle:focus {
110
+ outline: none;
111
+ border-color: #18a0fb;
44
112
  }
45
113
 
46
114
  .icon {
@@ -49,20 +117,16 @@
49
117
  margin: 8px;
50
118
  }
51
119
 
52
- .icon:hover {
53
- cursor: pointer;
54
- }
55
-
56
120
  .icon:hover .inner {
57
- box-shadow: 0px 0px 12px rgba(0, 0, 0, 0.24);
121
+ box-shadow: 0px 0px 12px var(--card-shadow-hover);
58
122
  }
59
123
 
60
124
  .icon .inner {
61
125
  display: inline-block;
62
126
  width: 100%;
63
127
  text-align: center;
64
- background-color: white;
65
- box-shadow: 0px 0px 12px rgba(0, 0, 0, 0.06);
128
+ background-color: var(--card-bg);
129
+ box-shadow: 0px 0px 12px var(--card-shadow);
66
130
  border-radius: 4px;
67
131
  transition: all .3s ease-in-out;
68
132
  }
@@ -70,7 +134,7 @@
70
134
  .icon .inner {{ tag }} {
71
135
  padding: 16px 0;
72
136
  font-size: 48px;
73
- color: #333;
137
+ color: var(--text-color);
74
138
  overflow: hidden;
75
139
  }
76
140
 
@@ -85,26 +149,65 @@
85
149
  box-sizing: border-box;
86
150
  padding: 4px;
87
151
  font-size: 10px;
88
- color: #666;
152
+ color: var(--text-secondary);
89
153
  white-space: nowrap;
90
154
  overflow: hidden;
91
155
  text-overflow: ellipsis;
92
156
  }
93
157
 
158
+ .copy-buttons {
159
+ display: flex;
160
+ justify-content: center;
161
+ gap: 8px;
162
+ margin-top: 4px;
163
+ opacity: 0;
164
+ visibility: hidden;
165
+ pointer-events: none;
166
+ transition: opacity 0.2s ease-in-out;
167
+ }
168
+
169
+ .icon:hover .copy-buttons {
170
+ opacity: 1;
171
+ visibility: visible;
172
+ pointer-events: auto;
173
+ }
174
+
175
+ .copy-btn {
176
+ background: none;
177
+ border: none;
178
+ cursor: pointer;
179
+ padding: 4px;
180
+ color: var(--text-secondary);
181
+ border-radius: 4px;
182
+ transition: color 0.2s ease, background-color 0.2s ease;
183
+ display: flex;
184
+ align-items: center;
185
+ justify-content: center;
186
+ }
187
+
188
+ .copy-btn:hover {
189
+ color: var(--text-color);
190
+ background-color: var(--input-border);
191
+ }
192
+
193
+ .copy-btn i {
194
+ font-size: 14px;
195
+ }
196
+
94
197
  .description {
95
198
  display: none;
96
199
  }
97
200
 
98
201
  #search {
99
- display: flex;
100
- width: 100%;
202
+ flex: 1;
101
203
  font-size: 16px;
102
204
  padding: 12px 16px;
103
- margin: 0 auto;
104
- max-width: 900px;
105
- margin-bottom: 24px;
106
- border: 1px solid rgba(0,0,0,.1);
107
- box-shadow: 0px 0px 12px rgba(0, 0, 0, 0.06);
205
+ border: 1px solid var(--input-border);
206
+ box-shadow: 0px 0px 12px var(--card-shadow);
207
+ background-color: var(--card-bg);
208
+ color: var(--text-color);
209
+ transition: all 0.3s ease;
210
+ border-radius: 4px;
108
211
  }
109
212
 
110
213
  #search:focus {
@@ -125,8 +228,8 @@
125
228
  left: 50%;
126
229
  width: auto;
127
230
  transform: translateX(-50%);
128
- color: white;
129
- background-color: #212121;
231
+ color: var(--notification-text);
232
+ background-color: var(--notification-bg);
130
233
  padding: 8px 24px;
131
234
  border-radius: 8px;
132
235
  opacity: 0;
@@ -148,25 +251,35 @@
148
251
  </head>
149
252
  <body>
150
253
 
151
- <h1>{{ name }}</h1>
152
-
153
- <input type="text" id="search" placeholder="Search for icon names">
254
+ <div id="header">
255
+ <h1>{{ name }}</h1>
256
+ <input type="text" id="search" placeholder="Search for icon names" aria-label="Search for icon names">
257
+ <button id="theme-toggle" aria-label="Toggle theme"><i class="codicon codicon-color-mode"></i> Dark Mode</button>
258
+ </div>
154
259
 
155
260
  <div id="icons">
156
261
  {{# each assets }}
157
- <div class="icon" data-name="{{ @key }}" title="{{ @key }}">
262
+ <div class="icon" data-name="{{ @key }}" title="{{ @key }}" data-tags="" data-description="">
158
263
  <span class="inner">
159
264
  <{{ ../tag }} class="{{ ../prefix }} {{ ../prefix }}-{{ @key }}" aria-hidden="true"></{{ ../tag }}>
160
265
  </span>
161
266
  <br>
162
267
  <span class='label'>{{ @key }}</span>
163
268
  <span class='description'></span>
269
+ <div class="copy-buttons">
270
+ <button class="copy-btn copy-name-btn" title="Copy icon name" aria-label="Copy icon name">
271
+ <i class="codicon codicon-copy" aria-hidden="true"></i>
272
+ </button>
273
+ <button class="copy-btn copy-svg-btn" title="Copy SVG" aria-label="Copy SVG">
274
+ <i class="codicon codicon-file-code" aria-hidden="true"></i>
275
+ </button>
276
+ </div>
164
277
  </div>
165
278
  {{/ each }}
166
279
  </div>
167
280
 
168
281
  <div id="notification">📋 Copied: <span id="notification-id"></span></div>
169
- <input type="text" id="copier">
282
+ <input type="text" id="copier" aria-label="Clipboard helper">
170
283
 
171
284
  <script type="text/javascript">
172
285
  let icons = document.getElementsByClassName('icon');
@@ -175,306 +288,403 @@
175
288
  let notificationText = document.getElementById('notification-id');
176
289
  let search = document.getElementById('search');
177
290
  let timer;
178
- let descriptions = [
179
- {
180
- name: 'account',
181
- description: 'person people face user contact outline'
182
- },
183
- {
184
- name: 'activate-breakpoints',
185
- description: 'dot circle toggle switch'
186
- },
187
- {
188
- name: 'add',
189
- description: 'combine plus add more new'
190
- },
191
- {
192
- name: 'archive',
193
- description: 'save box delivery package'
194
- },
195
- {
196
- name: 'arrow-both',
197
- description: 'switch swap'
198
- },
199
- {
200
- name: 'beaker',
201
- description: 'test lab tube tool'
202
- },
203
- {
204
- name: 'bell',
205
- description: 'alert notify notification'
206
- },
207
- {
208
- name: 'bell-dot',
209
- description: 'alert notify notification'
210
- },
211
- {
212
- name: 'bold',
213
- description: 'text format weight font style'
214
- },
215
- {
216
- name: 'book',
217
- description: 'library text read open'
218
- },
219
- {
220
- name: 'bookmark',
221
- description: 'book save later'
222
- },
223
- {
224
- name: 'briefcase',
225
- description: 'work workplace'
226
- },
227
- {
228
- name: 'broadcast',
229
- description: 'tower signal connect connection'
230
- },
231
- {
232
- name: 'browser',
233
- description: 'web internet page window'
234
- },
235
- {
236
- name: 'bug',
237
- description: 'error issue insect block'
238
- },
239
- {
240
- name: 'calendar',
241
- description: 'day time week month date schedule event planner'
242
- },
243
- {
244
- name: 'call-incoming',
245
- description: 'phone cell voice connection direction'
246
- },
247
- {
248
- name: 'call-outgoing',
249
- description: 'phone cell voice connection direction'
250
- },
251
- {
252
- name: 'case-sensitive',
253
- description: 'search filter option letters words'
254
- },
255
- {
256
- name: 'check-all',
257
- description: 'checkmark select everything checked mark complete finish done accept approve'
258
- },
259
- {
260
- name: 'check',
261
- description: 'checkmark select everything checked mark complete finish done accept approve'
262
- },
263
- {
264
- name: 'checklist',
265
- description: 'checkmark select everything checked mark complete finish done accept todo task text'
266
- },
267
- {
268
- name: 'chevron-down',
269
- description: 'twistie tree node folder fold collapse'
270
- },
271
- {
272
- name: 'chevron-left',
273
- description: 'twistie tree node folder fold collapse'
274
- },
275
- {
276
- name: 'chevron-right',
277
- description: 'twistie tree node folder fold collapse'
278
- },
279
- {
280
- name: 'chevron-up',
281
- description: 'twistie tree node folder fold collapse'
282
- },
283
- {
284
- name: 'chrome-close',
285
- description: 'menu bar window dismiss'
286
- },
287
- {
288
- name: 'chrome-maximize',
289
- description: 'menu bar window large increase'
290
- },
291
- {
292
- name: 'chrome-minimize',
293
- description: 'menu bar window small decrease'
294
- },
295
- {
296
- name: 'chrome-restore',
297
- description: 'menu bar window'
298
- },
299
- {
300
- name: 'circle-filled',
301
- description: 'dot round small bullet breakpoint'
302
- },
303
- {
304
- name: 'circle-large-filled',
305
- description: 'dot round bullet'
306
- },
307
- {
308
- name: 'circle-large',
309
- description: 'dot round bullet'
310
- },
311
- {
312
- name: 'circle',
313
- description: 'dot round small bullet unverified breakpoint'
314
- },
315
- {
316
- name: 'circle-slash',
317
- description: 'error block stop disable'
318
- },
319
- {
320
- name: 'circuit-board',
321
- description: 'iot device process lines'
322
- },
323
- {
324
- name: 'clear-all',
325
- description: 'reset remove'
326
- },
327
- {
328
- name: 'clippy',
329
- description: 'clipboard document edit copy'
330
- },
331
- {
332
- name: 'close-all',
333
- description: 'remove bulk'
334
- },
335
- {
336
- name: 'close',
337
- description: 'remove x cancel stop miltiply'
338
- },
339
- {
340
- name: 'cloud-download',
341
- description: 'install import'
342
- },
343
- {
344
- name: 'cloud-upload',
345
- description: 'export'
346
- },
347
- {
348
- name: 'cloud',
349
- description: 'online service'
350
- },
351
- {
352
- name: 'code',
353
- description: 'embed script programming server'
354
- },
355
- {
356
- name: 'collapse-all',
357
- description: 'bulk fold minimize'
358
- },
359
- {
360
- name: 'color-mode',
361
- description: 'switch dark light contrast mode toggle'
362
- },
363
- {
364
- name: 'comment-discussion',
365
- description: 'dialog message bubble chat'
366
- },
367
- {
368
- name: 'comment',
369
- description: 'dialog message bubble chat'
370
- },
371
- {
372
- name: 'credit-card',
373
- description: 'payment merchant money'
374
- },
375
- {
376
- name: 'dash',
377
- description: 'line minus subtract hyphen'
378
- },
379
- {
380
- name: 'dashboard',
381
- description: 'panel stats dial'
382
- },
383
- {
384
- name: 'database',
385
- description: 'sql db storage online cloud'
386
- },
387
- {
388
- name: 'debug-alt-small',
389
- description: 'run'
390
- },
391
- {
392
- name: 'debug-alt',
393
- description: 'run'
394
- },
395
- {
396
- name: 'debug-console',
397
- description: 'terminal command input compile build'
398
- },
399
- {
400
- name: 'debug-disconnect',
401
- description: 'stop unplug eject'
402
- },
403
- {
404
- name: 'desktop-download',
405
- description: 'install'
406
- },
407
- {
408
- name: 'device-camera-video',
409
- description: 'movie record capture'
410
- },
411
- {
412
- name: 'device-camera',
413
- description: 'capture picture image'
414
- },
415
- {
416
- name: 'device-mobile',
417
- description: 'phone handheld smartphone'
418
- },
419
- {
420
- name: 'diff-added',
421
- description: 'git change'
422
- },
423
- {
424
- name: 'diff-ignored',
425
- description: 'git change'
426
- },
427
- {
428
- name: 'diff-modified',
429
- description: 'git change'
430
- },
431
- {
432
- name: 'diff-renamed',
433
- description: 'git change'
434
- },
435
- {
436
- name: 'diff-removed',
437
- description: 'git change'
438
- },
439
- {
440
- name: 'play-circle',
441
- description: 'run'
442
- },
443
- {
444
- name: 'pass',
445
- description: 'play check checkmark outline issue closed'
446
- },
447
- {
448
- name: 'pass-filled',
449
- description: 'play check checkmark filled issue closed'
450
- },
451
- {
452
- name: 'play',
453
- description: 'run'
454
- },
455
- ];
456
-
457
- descriptions.some(function(item) {
458
- let findIcon = document.querySelectorAll(`[data-name="${item.name}"]`);
459
- findIcon[0].querySelector('.description').innerHTML += item.description;
460
- });
291
+
292
+ // Load metadata
293
+ let metadata = {}; // METADATA_PLACEHOLDER
294
+
295
+ // Load SVG data
296
+ let svgData = {}; // SVG_DATA_PLACEHOLDER
297
+
298
+ if (Object.keys(metadata).length > 0) {
299
+ applyMetadata();
300
+ } else {
301
+ fetch('metadata.json')
302
+ .then(response => response.json())
303
+ .then(data => {
304
+ metadata = data;
305
+ applyMetadata();
306
+ })
307
+ .catch(error => {
308
+ console.warn('Could not load metadata.json, using fallback descriptions', error);
309
+ applyLegacyDescriptions();
310
+ });
311
+ }
312
+
313
+ function applyMetadata() {
314
+ for (let i = 0; i < icons.length; i++) {
315
+ let icon = icons[i];
316
+ let name = icon.getAttribute('data-name');
317
+
318
+ if (metadata[name]) {
319
+ let meta = metadata[name];
320
+ let tags = meta.tags ? meta.tags.join(' ') : '';
321
+ let description = meta.description || '';
322
+
323
+ icon.setAttribute('data-tags', tags);
324
+ icon.setAttribute('data-description', description);
325
+
326
+ // Update visible description
327
+ let descriptionSpan = icon.querySelector('.description');
328
+ if (descriptionSpan) {
329
+ descriptionSpan.innerHTML = description + (tags ? ' - ' + tags : '');
330
+ }
331
+ }
332
+ }
333
+ }
461
334
 
462
- for(i=0;i<icons.length;i++){
463
- let icon = icons[i]
464
- icon.onclick = function(e){
465
- let name = this.getAttribute('data-name');
335
+ function applyLegacyDescriptions() {
336
+ let descriptions = [
337
+ {
338
+ name: 'account',
339
+ description: 'person people face user contact outline'
340
+ },
341
+ {
342
+ name: 'activate-breakpoints',
343
+ description: 'dot circle toggle switch'
344
+ },
345
+ {
346
+ name: 'add',
347
+ description: 'combine plus add more new'
348
+ },
349
+ {
350
+ name: 'archive',
351
+ description: 'save box delivery package'
352
+ },
353
+ {
354
+ name: 'arrow-both',
355
+ description: 'switch swap'
356
+ },
357
+ {
358
+ name: 'attach',
359
+ description: 'clip paperclip file link connect add'
360
+ },
361
+ {
362
+ name: 'beaker',
363
+ description: 'test lab tube tool'
364
+ },
365
+ {
366
+ name: 'bell',
367
+ description: 'alert notify notification'
368
+ },
369
+ {
370
+ name: 'bell-dot',
371
+ description: 'alert notify notification'
372
+ },
373
+ {
374
+ name: 'bold',
375
+ description: 'text format weight font style'
376
+ },
377
+ {
378
+ name: 'book',
379
+ description: 'library text read open'
380
+ },
381
+ {
382
+ name: 'bookmark',
383
+ description: 'book save later'
384
+ },
385
+ {
386
+ name: 'briefcase',
387
+ description: 'work workplace'
388
+ },
389
+ {
390
+ name: 'broadcast',
391
+ description: 'tower signal connect connection'
392
+ },
393
+ {
394
+ name: 'browser',
395
+ description: 'web internet page window'
396
+ },
397
+ {
398
+ name: 'bug',
399
+ description: 'error issue insect block'
400
+ },
401
+ {
402
+ name: 'calendar',
403
+ description: 'day time week month date schedule event planner'
404
+ },
405
+ {
406
+ name: 'call-incoming',
407
+ description: 'phone cell voice connection direction'
408
+ },
409
+ {
410
+ name: 'call-outgoing',
411
+ description: 'phone cell voice connection direction'
412
+ },
413
+ {
414
+ name: 'case-sensitive',
415
+ description: 'search filter option letters words'
416
+ },
417
+ {
418
+ name: 'check-all',
419
+ description: 'checkmark select everything checked mark complete finish done accept approve'
420
+ },
421
+ {
422
+ name: 'check',
423
+ description: 'checkmark select everything checked mark complete finish done accept approve'
424
+ },
425
+ {
426
+ name: 'checklist',
427
+ description: 'checkmark select everything checked mark complete finish done accept todo task text'
428
+ },
429
+ {
430
+ name: 'chevron-down',
431
+ description: 'twistie tree node folder fold collapse'
432
+ },
433
+ {
434
+ name: 'chevron-left',
435
+ description: 'twistie tree node folder fold collapse'
436
+ },
437
+ {
438
+ name: 'chevron-right',
439
+ description: 'twistie tree node folder fold collapse'
440
+ },
441
+ {
442
+ name: 'chevron-up',
443
+ description: 'twistie tree node folder fold collapse'
444
+ },
445
+ {
446
+ name: 'chrome-close',
447
+ description: 'menu bar window dismiss'
448
+ },
449
+ {
450
+ name: 'chrome-maximize',
451
+ description: 'menu bar window large increase'
452
+ },
453
+ {
454
+ name: 'chrome-minimize',
455
+ description: 'menu bar window small decrease'
456
+ },
457
+ {
458
+ name: 'chrome-restore',
459
+ description: 'menu bar window'
460
+ },
461
+ {
462
+ name: 'circle-filled',
463
+ description: 'dot round small bullet breakpoint'
464
+ },
465
+ {
466
+ name: 'circle-large-filled',
467
+ description: 'dot round bullet'
468
+ },
469
+ {
470
+ name: 'circle-large',
471
+ description: 'dot round bullet'
472
+ },
473
+ {
474
+ name: 'circle',
475
+ description: 'dot round small bullet unverified breakpoint'
476
+ },
477
+ {
478
+ name: 'circle-slash',
479
+ description: 'error block stop disable'
480
+ },
481
+ {
482
+ name: 'circuit-board',
483
+ description: 'iot device process lines'
484
+ },
485
+ {
486
+ name: 'clear-all',
487
+ description: 'reset remove'
488
+ },
489
+ {
490
+ name: 'clippy',
491
+ description: 'clipboard document edit copy'
492
+ },
493
+ {
494
+ name: 'close-all',
495
+ description: 'remove bulk'
496
+ },
497
+ {
498
+ name: 'close',
499
+ description: 'remove x cancel stop miltiply'
500
+ },
501
+ {
502
+ name: 'cloud-download',
503
+ description: 'install import'
504
+ },
505
+ {
506
+ name: 'cloud-upload',
507
+ description: 'export'
508
+ },
509
+ {
510
+ name: 'cloud',
511
+ description: 'online service'
512
+ },
513
+ {
514
+ name: 'code',
515
+ description: 'embed script programming server'
516
+ },
517
+ {
518
+ name: 'collapse-all',
519
+ description: 'bulk fold minimize'
520
+ },
521
+ {
522
+ name: 'color-mode',
523
+ description: 'switch dark light contrast mode toggle'
524
+ },
525
+ {
526
+ name: 'comment-discussion',
527
+ description: 'dialog message bubble chat'
528
+ },
529
+ {
530
+ name: 'comment',
531
+ description: 'dialog message bubble chat'
532
+ },
533
+ {
534
+ name: 'credit-card',
535
+ description: 'payment merchant money'
536
+ },
537
+ {
538
+ name: 'dash',
539
+ description: 'line minus subtract hyphen'
540
+ },
541
+ {
542
+ name: 'dashboard',
543
+ description: 'panel stats dial'
544
+ },
545
+ {
546
+ name: 'database',
547
+ description: 'sql db storage online cloud'
548
+ },
549
+ {
550
+ name: 'debug-alt-small',
551
+ description: 'run'
552
+ },
553
+ {
554
+ name: 'debug-alt',
555
+ description: 'run'
556
+ },
557
+ {
558
+ name: 'debug-console',
559
+ description: 'terminal command input compile build'
560
+ },
561
+ {
562
+ name: 'debug-disconnect',
563
+ description: 'stop unplug eject'
564
+ },
565
+ {
566
+ name: 'desktop-download',
567
+ description: 'install'
568
+ },
569
+ {
570
+ name: 'device-camera-video',
571
+ description: 'movie record capture'
572
+ },
573
+ {
574
+ name: 'device-camera',
575
+ description: 'capture picture image'
576
+ },
577
+ {
578
+ name: 'device-mobile',
579
+ description: 'phone handheld smartphone'
580
+ },
581
+ {
582
+ name: 'diff-added',
583
+ description: 'git change'
584
+ },
585
+ {
586
+ name: 'diff-ignored',
587
+ description: 'git change'
588
+ },
589
+ {
590
+ name: 'diff-modified',
591
+ description: 'git change'
592
+ },
593
+ {
594
+ name: 'diff-renamed',
595
+ description: 'git change'
596
+ },
597
+ {
598
+ name: 'diff-removed',
599
+ description: 'git change'
600
+ },
601
+ {
602
+ name: 'play-circle',
603
+ description: 'run'
604
+ },
605
+ {
606
+ name: 'pass',
607
+ description: 'play check checkmark outline issue closed'
608
+ },
609
+ {
610
+ name: 'pass-filled',
611
+ description: 'play check checkmark filled issue closed'
612
+ },
613
+ {
614
+ name: 'play',
615
+ description: 'run'
616
+ },
617
+ ];
618
+
619
+ descriptions.some(function(item) {
620
+ let findIcon = document.querySelectorAll(`[data-name="${item.name}"]`);
621
+ if (findIcon[0]) {
622
+ findIcon[0].querySelector('.description').innerHTML += item.description;
623
+ findIcon[0].setAttribute('data-description', item.description);
624
+ }
625
+ });
626
+ }
466
627
 
467
- copier.value = name;
628
+ // Copy functionality
629
+ function copyToClipboard(text, displayText) {
630
+ if (navigator.clipboard && navigator.clipboard.writeText) {
631
+ navigator.clipboard.writeText(text).then(function() {
632
+ notificationText.innerHTML = displayText;
633
+ animateNotification();
634
+ }).catch(function() {
635
+ // Fallback to old method
636
+ copier.value = text;
637
+ copier.select();
638
+ copier.setSelectionRange(0, 99999);
639
+ document.execCommand('copy');
640
+ notificationText.innerHTML = displayText;
641
+ animateNotification();
642
+ });
643
+ } else {
644
+ copier.value = text;
468
645
  copier.select();
469
- copier.setSelectionRange(0, 99999)
646
+ copier.setSelectionRange(0, 99999);
470
647
  document.execCommand('copy');
471
-
472
- notificationText.innerHTML = name;
648
+ notificationText.innerHTML = displayText;
473
649
  animateNotification();
474
- e.preventDefault();
475
650
  }
476
651
  }
477
652
 
653
+ // Setup copy buttons for each icon
654
+ for(let i=0;i<icons.length;i++){
655
+ let icon = icons[i];
656
+
657
+ // Copy name button
658
+ let copyNameBtn = icon.querySelector('.copy-name-btn');
659
+ copyNameBtn.onclick = function(e){
660
+ e.stopPropagation();
661
+ let iconName = this.closest('.icon').getAttribute('data-name');
662
+ copyToClipboard(iconName, iconName);
663
+ };
664
+
665
+ // Copy SVG button
666
+ let copySvgBtn = icon.querySelector('.copy-svg-btn');
667
+ copySvgBtn.onclick = function(e){
668
+ e.stopPropagation();
669
+ let iconName = this.closest('.icon').getAttribute('data-name');
670
+ if (svgData[iconName]) {
671
+ copyToClipboard(svgData[iconName], iconName + ' (SVG)');
672
+ } else {
673
+ // Fallback: try to fetch SVG if not in embedded data
674
+ fetch('icons/' + iconName + '.svg')
675
+ .then(response => response.text())
676
+ .then(svg => {
677
+ copyToClipboard(svg, iconName + ' (SVG)');
678
+ })
679
+ .catch(error => {
680
+ console.warn('Could not fetch SVG for ' + iconName, error);
681
+ notificationText.innerHTML = 'SVG not available';
682
+ animateNotification();
683
+ });
684
+ }
685
+ };
686
+ }
687
+
478
688
  function animateNotification(){
479
689
  window.clearTimeout(timer);
480
690
  search.focus();
@@ -494,11 +704,16 @@
494
704
  let icon = wrapper.getElementsByTagName('div');
495
705
 
496
706
  for (i = 0; i < icon.length; i++) {
497
- let textInner = sanitizeText(icon[i].innerText)
707
+ let name = icon[i].getAttribute('data-name') || '';
708
+ let tags = icon[i].getAttribute('data-tags') || '';
709
+ let description = icon[i].getAttribute('data-description') || '';
710
+ let textInner = sanitizeText(icon[i].innerText);
498
711
  let textContents = sanitizeText(icon[i].textContent);
499
- compareText = textContents || textInner;
712
+
713
+ // Search in name, tags, description, and text content
714
+ let searchableText = (name + ' ' + tags + ' ' + description + ' ' + textContents + ' ' + textInner).toUpperCase();
500
715
 
501
- if (compareText.toUpperCase().indexOf(filter) > -1) {
716
+ if (searchableText.indexOf(filter) > -1) {
502
717
  icon[i].style.display = '';
503
718
  } else {
504
719
  icon[i].style.display = 'none';
@@ -508,6 +723,53 @@
508
723
 
509
724
  search.focus();
510
725
 
726
+ // Theme toggle functionality
727
+ const themeToggle = document.getElementById('theme-toggle');
728
+ const html = document.documentElement;
729
+ const prefersDarkScheme = window.matchMedia('(prefers-color-scheme: dark)');
730
+
731
+ // Function to get the theme: check localStorage first, then system preference
732
+ function getTheme() {
733
+ const savedTheme = localStorage.getItem('theme');
734
+ if (savedTheme) {
735
+ return savedTheme;
736
+ }
737
+ return prefersDarkScheme.matches ? 'dark' : 'light';
738
+ }
739
+
740
+ // Initialize theme
741
+ const currentTheme = getTheme();
742
+ html.setAttribute('data-theme', currentTheme);
743
+ updateThemeButton(currentTheme);
744
+
745
+ // Listen for system theme changes
746
+ prefersDarkScheme.addEventListener('change', function(e) {
747
+ // Only update if user hasn't manually set a preference
748
+ if (!localStorage.getItem('theme')) {
749
+ const newTheme = e.matches ? 'dark' : 'light';
750
+ html.setAttribute('data-theme', newTheme);
751
+ updateThemeButton(newTheme);
752
+ }
753
+ });
754
+
755
+ // Manual toggle
756
+ themeToggle.addEventListener('click', function() {
757
+ const currentTheme = html.getAttribute('data-theme');
758
+ const newTheme = currentTheme === 'dark' ? 'light' : 'dark';
759
+
760
+ html.setAttribute('data-theme', newTheme);
761
+ localStorage.setItem('theme', newTheme);
762
+ updateThemeButton(newTheme);
763
+ });
764
+
765
+ function updateThemeButton(theme) {
766
+ if (theme === 'dark') {
767
+ themeToggle.innerHTML = '<i class="codicon codicon-color-mode"></i> Light Mode';
768
+ } else {
769
+ themeToggle.innerHTML = '<i class="codicon codicon-color-mode"></i> Dark Mode';
770
+ }
771
+ }
772
+
511
773
  </script>
512
774
  </body>
513
775
  </html>