@nice2dev/icons 1.0.5 → 1.0.8
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.
- package/dist/cjs/NiceDesktopIconExporter.js +648 -0
- package/dist/cjs/NiceDesktopIconExporter.js.map +1 -0
- package/dist/cjs/NiceFaviconGenerator.js +429 -0
- package/dist/cjs/NiceFaviconGenerator.js.map +1 -0
- package/dist/cjs/NiceIconEditor.js +443 -0
- package/dist/cjs/NiceIconEditor.js.map +1 -0
- package/dist/cjs/NiceIconPreview.js +198 -0
- package/dist/cjs/NiceIconPreview.js.map +1 -0
- package/dist/cjs/NiceIconSetCreator.js +565 -0
- package/dist/cjs/NiceIconSetCreator.js.map +1 -0
- package/dist/cjs/_virtual/_commonjsHelpers.js +8 -0
- package/dist/cjs/_virtual/_commonjsHelpers.js.map +1 -0
- package/dist/cjs/_virtual/client.js +33 -0
- package/dist/cjs/_virtual/client.js.map +1 -0
- package/dist/cjs/_virtual/client2.js +6 -0
- package/dist/cjs/_virtual/client2.js.map +1 -0
- package/dist/cjs/advancedIconSearch.js +548 -0
- package/dist/cjs/advancedIconSearch.js.map +1 -0
- package/dist/cjs/iconAnalytics.js +395 -152
- package/dist/cjs/iconAnalytics.js.map +1 -1
- package/dist/cjs/index.js +42 -4
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/node_modules/react-dom/client.js +39 -0
- package/dist/cjs/node_modules/react-dom/client.js.map +1 -0
- package/dist/esm/NiceDesktopIconExporter.js +642 -0
- package/dist/esm/NiceDesktopIconExporter.js.map +1 -0
- package/dist/esm/NiceFaviconGenerator.js +426 -0
- package/dist/esm/NiceFaviconGenerator.js.map +1 -0
- package/dist/esm/NiceIconEditor.js +440 -0
- package/dist/esm/NiceIconEditor.js.map +1 -0
- package/dist/esm/NiceIconPreview.js +196 -0
- package/dist/esm/NiceIconPreview.js.map +1 -0
- package/dist/esm/NiceIconSetCreator.js +562 -0
- package/dist/esm/NiceIconSetCreator.js.map +1 -0
- package/dist/esm/_virtual/_commonjsHelpers.js +6 -0
- package/dist/esm/_virtual/_commonjsHelpers.js.map +1 -0
- package/dist/esm/_virtual/client.js +28 -0
- package/dist/esm/_virtual/client.js.map +1 -0
- package/dist/esm/_virtual/client2.js +4 -0
- package/dist/esm/_virtual/client2.js.map +1 -0
- package/dist/esm/advancedIconSearch.js +529 -0
- package/dist/esm/advancedIconSearch.js.map +1 -0
- package/dist/esm/iconAnalytics.js +393 -152
- package/dist/esm/iconAnalytics.js.map +1 -1
- package/dist/esm/index.js +7 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/node_modules/react-dom/client.js +37 -0
- package/dist/esm/node_modules/react-dom/client.js.map +1 -0
- package/dist/types/NiceDesktopIconExporter.d.ts +119 -0
- package/dist/types/NiceFaviconGenerator.d.ts +64 -0
- package/dist/types/NiceIconEditor.d.ts +97 -0
- package/dist/types/NiceIconPreview.d.ts +47 -0
- package/dist/types/NiceIconSetCreator.d.ts +97 -0
- package/dist/types/advancedIconSearch.d.ts +218 -0
- package/dist/types/iconAnalytics.d.ts +219 -112
- package/dist/types/index.d.ts +18 -6
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client2.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,548 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @file advancedIconSearch.ts
|
|
7
|
+
* @module @nice2dev/icons
|
|
8
|
+
* @description PRO-28.3 — Advanced Icon Search with fuzzy matching,
|
|
9
|
+
* filters, semantic search support, and analytics.
|
|
10
|
+
*/
|
|
11
|
+
/* ══════════════════════════════════════════════════════════════════════════════
|
|
12
|
+
Fuzzy Match Utilities
|
|
13
|
+
══════════════════════════════════════════════════════════════════════════════ */
|
|
14
|
+
/**
|
|
15
|
+
* Calculate Levenshtein distance between two strings.
|
|
16
|
+
*/
|
|
17
|
+
function levenshteinDistance(a, b) {
|
|
18
|
+
const matrix = [];
|
|
19
|
+
// Handle empty strings
|
|
20
|
+
if (a.length === 0)
|
|
21
|
+
return b.length;
|
|
22
|
+
if (b.length === 0)
|
|
23
|
+
return a.length;
|
|
24
|
+
// Initialize matrix
|
|
25
|
+
for (let i = 0; i <= b.length; i++) {
|
|
26
|
+
matrix[i] = [i];
|
|
27
|
+
}
|
|
28
|
+
for (let j = 0; j <= a.length; j++) {
|
|
29
|
+
matrix[0][j] = j;
|
|
30
|
+
}
|
|
31
|
+
// Fill matrix
|
|
32
|
+
for (let i = 1; i <= b.length; i++) {
|
|
33
|
+
for (let j = 1; j <= a.length; j++) {
|
|
34
|
+
if (b.charAt(i - 1) === a.charAt(j - 1)) {
|
|
35
|
+
matrix[i][j] = matrix[i - 1][j - 1];
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // substitution
|
|
39
|
+
matrix[i][j - 1] + 1, // insertion
|
|
40
|
+
matrix[i - 1][j] + 1);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return matrix[b.length][a.length];
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Calculate fuzzy match score (0-100).
|
|
48
|
+
*/
|
|
49
|
+
function fuzzyMatchScore(query, target) {
|
|
50
|
+
const q = query.toLowerCase();
|
|
51
|
+
const t = target.toLowerCase();
|
|
52
|
+
// Exact match
|
|
53
|
+
if (q === t)
|
|
54
|
+
return 100;
|
|
55
|
+
// Contains exact
|
|
56
|
+
if (t.includes(q))
|
|
57
|
+
return 90 - (t.length - q.length) / 2;
|
|
58
|
+
// Starts with
|
|
59
|
+
if (t.startsWith(q))
|
|
60
|
+
return 85;
|
|
61
|
+
// Calculate Levenshtein-based similarity
|
|
62
|
+
const distance = levenshteinDistance(q, t);
|
|
63
|
+
const maxLen = Math.max(q.length, t.length);
|
|
64
|
+
const similarity = ((maxLen - distance) / maxLen) * 100;
|
|
65
|
+
return Math.max(0, Math.round(similarity));
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Tokenize a search query.
|
|
69
|
+
*/
|
|
70
|
+
function tokenizeQuery(query) {
|
|
71
|
+
return query
|
|
72
|
+
.toLowerCase()
|
|
73
|
+
.replace(/[^\w\s-]/g, ' ')
|
|
74
|
+
.split(/\s+/)
|
|
75
|
+
.filter((token) => token.length > 1);
|
|
76
|
+
}
|
|
77
|
+
/* ══════════════════════════════════════════════════════════════════════════════
|
|
78
|
+
Extended Icon Registry
|
|
79
|
+
══════════════════════════════════════════════════════════════════════════════ */
|
|
80
|
+
const extendedRegistry = new Map();
|
|
81
|
+
const favoriteIcons = new Set();
|
|
82
|
+
const recentlyUsedIcons = [];
|
|
83
|
+
const searchHistory = [];
|
|
84
|
+
/**
|
|
85
|
+
* Register an icon with extended metadata.
|
|
86
|
+
*/
|
|
87
|
+
function registerExtendedIcon(name, metadata) {
|
|
88
|
+
// Merge with defaults
|
|
89
|
+
const extended = {
|
|
90
|
+
name,
|
|
91
|
+
category: metadata.category || 'ui',
|
|
92
|
+
primaryCategory: metadata.primaryCategory || metadata.category || 'ui',
|
|
93
|
+
secondaryCategories: metadata.secondaryCategories || [],
|
|
94
|
+
domains: metadata.domains || ['general'],
|
|
95
|
+
useCases: metadata.useCases || ['action'],
|
|
96
|
+
styles: metadata.styles || ['solid', 'outline'],
|
|
97
|
+
tags: metadata.tags || [],
|
|
98
|
+
aliases: metadata.aliases || [],
|
|
99
|
+
description: metadata.description || '',
|
|
100
|
+
related: metadata.related || [],
|
|
101
|
+
relatedIcons: metadata.relatedIcons || metadata.related || [],
|
|
102
|
+
recommendedSizes: metadata.recommendedSizes || [16, 48],
|
|
103
|
+
localizedNames: metadata.localizedNames || { en: name },
|
|
104
|
+
searchKeywords: metadata.searchKeywords || [],
|
|
105
|
+
dateAdded: metadata.dateAdded,
|
|
106
|
+
versionAdded: metadata.versionAdded,
|
|
107
|
+
deprecated: metadata.deprecated,
|
|
108
|
+
deprecatedMessage: metadata.deprecatedMessage,
|
|
109
|
+
};
|
|
110
|
+
extendedRegistry.set(name, extended);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Get extended metadata for an icon.
|
|
114
|
+
*/
|
|
115
|
+
function getExtendedMetadata(name) {
|
|
116
|
+
return extendedRegistry.get(name);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Mark an icon as favorite.
|
|
120
|
+
*/
|
|
121
|
+
function toggleFavorite(name) {
|
|
122
|
+
if (favoriteIcons.has(name)) {
|
|
123
|
+
favoriteIcons.delete(name);
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
favoriteIcons.add(name);
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Check if icon is favorite.
|
|
131
|
+
*/
|
|
132
|
+
function isFavorite(name) {
|
|
133
|
+
return favoriteIcons.has(name);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Get all favorite icons.
|
|
137
|
+
*/
|
|
138
|
+
function getFavorites() {
|
|
139
|
+
return Array.from(favoriteIcons);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Record icon usage (for analytics).
|
|
143
|
+
*/
|
|
144
|
+
function recordIconUsage(name) {
|
|
145
|
+
const existing = recentlyUsedIcons.findIndex((item) => item.name === name);
|
|
146
|
+
if (existing >= 0) {
|
|
147
|
+
recentlyUsedIcons.splice(existing, 1);
|
|
148
|
+
}
|
|
149
|
+
recentlyUsedIcons.unshift({ name, timestamp: Date.now() });
|
|
150
|
+
// Keep only last 100
|
|
151
|
+
if (recentlyUsedIcons.length > 100) {
|
|
152
|
+
recentlyUsedIcons.pop();
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Get recently used icons.
|
|
157
|
+
*/
|
|
158
|
+
function getRecentlyUsed(limit = 20) {
|
|
159
|
+
return recentlyUsedIcons.slice(0, limit).map((item) => item.name);
|
|
160
|
+
}
|
|
161
|
+
/* ══════════════════════════════════════════════════════════════════════════════
|
|
162
|
+
Advanced Search Engine
|
|
163
|
+
══════════════════════════════════════════════════════════════════════════════ */
|
|
164
|
+
/**
|
|
165
|
+
* Perform advanced search with fuzzy matching and filters.
|
|
166
|
+
*/
|
|
167
|
+
function advancedSearch(query, filters = {}, options = {}) {
|
|
168
|
+
const startTime = performance.now();
|
|
169
|
+
const { maxResults = 50, minScore = 30, locale = 'en' } = options;
|
|
170
|
+
const tokens = tokenizeQuery(query);
|
|
171
|
+
const results = [];
|
|
172
|
+
for (const [name, metadata] of extendedRegistry) {
|
|
173
|
+
// Apply filters first
|
|
174
|
+
if (!passesFilters(metadata, filters))
|
|
175
|
+
continue;
|
|
176
|
+
// Calculate match score
|
|
177
|
+
const { score, matchedIn, highlights } = calculateMatchScore(tokens, query, name, metadata, locale);
|
|
178
|
+
if (score >= minScore) {
|
|
179
|
+
results.push({ name, metadata, score, matchedIn, highlights });
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// Sort by score descending
|
|
183
|
+
results.sort((a, b) => b.score - a.score);
|
|
184
|
+
// Track analytics
|
|
185
|
+
const duration = performance.now() - startTime;
|
|
186
|
+
searchHistory.push({
|
|
187
|
+
query,
|
|
188
|
+
duration,
|
|
189
|
+
totalResults: results.length,
|
|
190
|
+
filters,
|
|
191
|
+
timestamp: Date.now(),
|
|
192
|
+
});
|
|
193
|
+
return results.slice(0, maxResults);
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Check if metadata passes all filters.
|
|
197
|
+
*/
|
|
198
|
+
function passesFilters(metadata, filters) {
|
|
199
|
+
var _a, _b, _c, _d;
|
|
200
|
+
// Category filter
|
|
201
|
+
if ((_a = filters.categories) === null || _a === void 0 ? void 0 : _a.length) {
|
|
202
|
+
const allCats = [metadata.primaryCategory, ...metadata.secondaryCategories];
|
|
203
|
+
if (!filters.categories.some((c) => allCats.includes(c)))
|
|
204
|
+
return false;
|
|
205
|
+
}
|
|
206
|
+
// Domain filter
|
|
207
|
+
if ((_b = filters.domains) === null || _b === void 0 ? void 0 : _b.length) {
|
|
208
|
+
if (!filters.domains.some((d) => metadata.domains.includes(d)))
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
211
|
+
// Use-case filter
|
|
212
|
+
if ((_c = filters.useCases) === null || _c === void 0 ? void 0 : _c.length) {
|
|
213
|
+
if (!filters.useCases.some((u) => metadata.useCases.includes(u)))
|
|
214
|
+
return false;
|
|
215
|
+
}
|
|
216
|
+
// Style filter
|
|
217
|
+
if ((_d = filters.styles) === null || _d === void 0 ? void 0 : _d.length) {
|
|
218
|
+
if (!filters.styles.some((s) => metadata.styles.includes(s)))
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
// Size filter
|
|
222
|
+
if (filters.minSize !== undefined) {
|
|
223
|
+
if (metadata.recommendedSizes[1] < filters.minSize)
|
|
224
|
+
return false;
|
|
225
|
+
}
|
|
226
|
+
if (filters.maxSize !== undefined) {
|
|
227
|
+
if (metadata.recommendedSizes[0] > filters.maxSize)
|
|
228
|
+
return false;
|
|
229
|
+
}
|
|
230
|
+
// Deprecated filter
|
|
231
|
+
if (filters.excludeDeprecated && metadata.deprecated)
|
|
232
|
+
return false;
|
|
233
|
+
// Favorites filter
|
|
234
|
+
if (filters.favoritesOnly && !favoriteIcons.has(metadata.name))
|
|
235
|
+
return false;
|
|
236
|
+
// Recently used filter
|
|
237
|
+
if (filters.recentlyUsedOnly) {
|
|
238
|
+
const isRecent = recentlyUsedIcons.some((r) => r.name === metadata.name);
|
|
239
|
+
if (!isRecent)
|
|
240
|
+
return false;
|
|
241
|
+
}
|
|
242
|
+
// Recent days filter
|
|
243
|
+
if (filters.recentDays !== undefined && metadata.dateAdded) {
|
|
244
|
+
const addedDate = new Date(metadata.dateAdded).getTime();
|
|
245
|
+
const cutoff = Date.now() - filters.recentDays * 24 * 60 * 60 * 1000;
|
|
246
|
+
if (addedDate < cutoff)
|
|
247
|
+
return false;
|
|
248
|
+
}
|
|
249
|
+
return true;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Calculate match score for an icon.
|
|
253
|
+
*/
|
|
254
|
+
function calculateMatchScore(tokens, fullQuery, name, metadata, locale) {
|
|
255
|
+
let totalScore = 0;
|
|
256
|
+
const matchedIn = [];
|
|
257
|
+
const highlights = [];
|
|
258
|
+
// Match against name (highest weight)
|
|
259
|
+
const nameScore = fuzzyMatchScore(fullQuery, name);
|
|
260
|
+
if (nameScore > 30) {
|
|
261
|
+
totalScore += nameScore * 2; // 2x weight for name
|
|
262
|
+
matchedIn.push('name');
|
|
263
|
+
highlights.push({ field: 'name', text: name });
|
|
264
|
+
}
|
|
265
|
+
// Match against aliases
|
|
266
|
+
for (const alias of metadata.aliases) {
|
|
267
|
+
const aliasScore = fuzzyMatchScore(fullQuery, alias);
|
|
268
|
+
if (aliasScore > 30) {
|
|
269
|
+
totalScore += aliasScore * 1.5;
|
|
270
|
+
if (!matchedIn.includes('alias'))
|
|
271
|
+
matchedIn.push('alias');
|
|
272
|
+
highlights.push({ field: 'alias', text: alias });
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
// Match against localized name
|
|
276
|
+
const localizedName = metadata.localizedNames[locale] || metadata.localizedNames.en;
|
|
277
|
+
if (localizedName && localizedName !== name) {
|
|
278
|
+
const localScore = fuzzyMatchScore(fullQuery, localizedName);
|
|
279
|
+
if (localScore > 30) {
|
|
280
|
+
totalScore += localScore * 1.3;
|
|
281
|
+
if (!matchedIn.includes('localized'))
|
|
282
|
+
matchedIn.push('localized');
|
|
283
|
+
highlights.push({ field: 'localized', text: localizedName });
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
// Match against tags
|
|
287
|
+
for (const tag of metadata.tags) {
|
|
288
|
+
for (const token of tokens) {
|
|
289
|
+
const tagScore = fuzzyMatchScore(token, tag);
|
|
290
|
+
if (tagScore > 50) {
|
|
291
|
+
totalScore += tagScore * 0.7;
|
|
292
|
+
if (!matchedIn.includes('tag'))
|
|
293
|
+
matchedIn.push('tag');
|
|
294
|
+
highlights.push({ field: 'tag', text: tag });
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
// Match against keywords
|
|
299
|
+
for (const keyword of metadata.searchKeywords) {
|
|
300
|
+
for (const token of tokens) {
|
|
301
|
+
const keywordScore = fuzzyMatchScore(token, keyword);
|
|
302
|
+
if (keywordScore > 50) {
|
|
303
|
+
totalScore += keywordScore * 0.8;
|
|
304
|
+
if (!matchedIn.includes('keyword'))
|
|
305
|
+
matchedIn.push('keyword');
|
|
306
|
+
highlights.push({ field: 'keyword', text: keyword });
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
// Match against description
|
|
311
|
+
if (metadata.description) {
|
|
312
|
+
for (const token of tokens) {
|
|
313
|
+
if (metadata.description.toLowerCase().includes(token)) {
|
|
314
|
+
totalScore += 15;
|
|
315
|
+
if (!matchedIn.includes('description'))
|
|
316
|
+
matchedIn.push('description');
|
|
317
|
+
highlights.push({ field: 'description', text: metadata.description });
|
|
318
|
+
break; // Only count once for description
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
// Normalize score to 0-100
|
|
323
|
+
const normalizedScore = Math.min(100, Math.round(totalScore / (tokens.length || 1)));
|
|
324
|
+
return { score: normalizedScore, matchedIn, highlights };
|
|
325
|
+
}
|
|
326
|
+
/* ══════════════════════════════════════════════════════════════════════════════
|
|
327
|
+
Similar Icons Finder
|
|
328
|
+
══════════════════════════════════════════════════════════════════════════════ */
|
|
329
|
+
/**
|
|
330
|
+
* Find similar icons based on metadata overlap.
|
|
331
|
+
*/
|
|
332
|
+
function findSimilarIcons(iconName, limit = 10) {
|
|
333
|
+
const source = extendedRegistry.get(iconName);
|
|
334
|
+
if (!source)
|
|
335
|
+
return [];
|
|
336
|
+
const similarities = [];
|
|
337
|
+
for (const [name, metadata] of extendedRegistry) {
|
|
338
|
+
if (name === iconName)
|
|
339
|
+
continue;
|
|
340
|
+
let similarity = 0;
|
|
341
|
+
// Same primary category (+30)
|
|
342
|
+
if (metadata.primaryCategory === source.primaryCategory)
|
|
343
|
+
similarity += 30;
|
|
344
|
+
// Shared secondary categories (+5 each)
|
|
345
|
+
for (const cat of metadata.secondaryCategories) {
|
|
346
|
+
if (source.secondaryCategories.includes(cat))
|
|
347
|
+
similarity += 5;
|
|
348
|
+
}
|
|
349
|
+
// Shared domains (+10 each)
|
|
350
|
+
for (const domain of metadata.domains) {
|
|
351
|
+
if (source.domains.includes(domain))
|
|
352
|
+
similarity += 10;
|
|
353
|
+
}
|
|
354
|
+
// Shared use-cases (+5 each)
|
|
355
|
+
for (const useCase of metadata.useCases) {
|
|
356
|
+
if (source.useCases.includes(useCase))
|
|
357
|
+
similarity += 5;
|
|
358
|
+
}
|
|
359
|
+
// Shared tags (+3 each)
|
|
360
|
+
for (const tag of metadata.tags) {
|
|
361
|
+
if (source.tags.includes(tag))
|
|
362
|
+
similarity += 3;
|
|
363
|
+
}
|
|
364
|
+
// In related icons list (+20)
|
|
365
|
+
if (source.relatedIcons.includes(name))
|
|
366
|
+
similarity += 20;
|
|
367
|
+
// Similar name (+fuzzy score / 5)
|
|
368
|
+
similarity += fuzzyMatchScore(iconName, name) / 5;
|
|
369
|
+
if (similarity > 20) {
|
|
370
|
+
similarities.push({ name, similarity: Math.min(100, similarity) });
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
// Sort by similarity descending
|
|
374
|
+
similarities.sort((a, b) => b.similarity - a.similarity);
|
|
375
|
+
return similarities.slice(0, limit);
|
|
376
|
+
}
|
|
377
|
+
/* ══════════════════════════════════════════════════════════════════════════════
|
|
378
|
+
Search Suggestions / Autocomplete
|
|
379
|
+
══════════════════════════════════════════════════════════════════════════════ */
|
|
380
|
+
/**
|
|
381
|
+
* Get search suggestions based on partial input.
|
|
382
|
+
*/
|
|
383
|
+
function getSearchSuggestions(partial, limit = 10) {
|
|
384
|
+
if (partial.length < 2)
|
|
385
|
+
return [];
|
|
386
|
+
const p = partial.toLowerCase();
|
|
387
|
+
const suggestions = new Set();
|
|
388
|
+
for (const [name, metadata] of extendedRegistry) {
|
|
389
|
+
// Name starts with partial
|
|
390
|
+
if (name.toLowerCase().startsWith(p)) {
|
|
391
|
+
suggestions.add(name);
|
|
392
|
+
}
|
|
393
|
+
// Alias starts with partial
|
|
394
|
+
for (const alias of metadata.aliases) {
|
|
395
|
+
if (alias.toLowerCase().startsWith(p)) {
|
|
396
|
+
suggestions.add(alias);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
// Tag starts with partial
|
|
400
|
+
for (const tag of metadata.tags) {
|
|
401
|
+
if (tag.toLowerCase().startsWith(p)) {
|
|
402
|
+
suggestions.add(tag);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
if (suggestions.size >= limit * 2)
|
|
406
|
+
break;
|
|
407
|
+
}
|
|
408
|
+
return Array.from(suggestions).slice(0, limit);
|
|
409
|
+
}
|
|
410
|
+
/* ══════════════════════════════════════════════════════════════════════════════
|
|
411
|
+
Analytics & Insights
|
|
412
|
+
══════════════════════════════════════════════════════════════════════════════ */
|
|
413
|
+
/**
|
|
414
|
+
* Get search analytics summary.
|
|
415
|
+
*/
|
|
416
|
+
function getSearchAnalytics() {
|
|
417
|
+
const queryCounts = new Map();
|
|
418
|
+
const zeroResults = [];
|
|
419
|
+
let totalDuration = 0;
|
|
420
|
+
for (const search of searchHistory) {
|
|
421
|
+
totalDuration += search.duration;
|
|
422
|
+
const count = queryCounts.get(search.query) || 0;
|
|
423
|
+
queryCounts.set(search.query, count + 1);
|
|
424
|
+
if (search.totalResults === 0) {
|
|
425
|
+
zeroResults.push(search.query);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
// Top queries
|
|
429
|
+
const topQueries = Array.from(queryCounts.entries())
|
|
430
|
+
.map(([query, count]) => ({ query, count }))
|
|
431
|
+
.sort((a, b) => b.count - a.count)
|
|
432
|
+
.slice(0, 10);
|
|
433
|
+
return {
|
|
434
|
+
totalSearches: searchHistory.length,
|
|
435
|
+
averageDuration: searchHistory.length > 0 ? totalDuration / searchHistory.length : 0,
|
|
436
|
+
topQueries,
|
|
437
|
+
zeroResultQueries: [...new Set(zeroResults)].slice(0, 20),
|
|
438
|
+
};
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* Get icon usage statistics.
|
|
442
|
+
*/
|
|
443
|
+
function getIconUsageStats() {
|
|
444
|
+
// Count usage from history
|
|
445
|
+
const usageCounts = new Map();
|
|
446
|
+
for (const item of recentlyUsedIcons) {
|
|
447
|
+
const count = usageCounts.get(item.name) || 0;
|
|
448
|
+
usageCounts.set(item.name, count + 1);
|
|
449
|
+
}
|
|
450
|
+
// Most used
|
|
451
|
+
const mostUsed = Array.from(usageCounts.entries())
|
|
452
|
+
.map(([name, count]) => ({ name, count }))
|
|
453
|
+
.sort((a, b) => b.count - a.count)
|
|
454
|
+
.slice(0, 20);
|
|
455
|
+
// Find never used
|
|
456
|
+
const usedNames = new Set(recentlyUsedIcons.map((i) => i.name));
|
|
457
|
+
const neverUsed = [];
|
|
458
|
+
for (const name of extendedRegistry.keys()) {
|
|
459
|
+
if (!usedNames.has(name)) {
|
|
460
|
+
neverUsed.push(name);
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
// Least used (used once)
|
|
464
|
+
const leastUsed = Array.from(usageCounts.entries())
|
|
465
|
+
.filter(([_, count]) => count === 1)
|
|
466
|
+
.map(([name]) => name)
|
|
467
|
+
.slice(0, 20);
|
|
468
|
+
return { mostUsed, leastUsed, neverUsed };
|
|
469
|
+
}
|
|
470
|
+
/**
|
|
471
|
+
* Clear search history.
|
|
472
|
+
*/
|
|
473
|
+
function clearSearchHistory() {
|
|
474
|
+
searchHistory.length = 0;
|
|
475
|
+
}
|
|
476
|
+
/**
|
|
477
|
+
* Clear recently used.
|
|
478
|
+
*/
|
|
479
|
+
function clearRecentlyUsed() {
|
|
480
|
+
recentlyUsedIcons.length = 0;
|
|
481
|
+
}
|
|
482
|
+
/**
|
|
483
|
+
* React hook for advanced icon search.
|
|
484
|
+
*/
|
|
485
|
+
function useAdvancedIconSearch(debounceMs = 200, locale = 'en') {
|
|
486
|
+
const [query, setQuery] = React.useState('');
|
|
487
|
+
const [filters, setFilters] = React.useState({});
|
|
488
|
+
const [results, setResults] = React.useState([]);
|
|
489
|
+
const [isSearching, setIsSearching] = React.useState(false);
|
|
490
|
+
// Suggestions
|
|
491
|
+
const suggestions = React.useMemo(() => {
|
|
492
|
+
return query.length >= 2 ? getSearchSuggestions(query) : [];
|
|
493
|
+
}, [query]);
|
|
494
|
+
// Debounced search
|
|
495
|
+
React.useEffect(() => {
|
|
496
|
+
if (!query && !Object.keys(filters).length) {
|
|
497
|
+
setResults([]);
|
|
498
|
+
return;
|
|
499
|
+
}
|
|
500
|
+
setIsSearching(true);
|
|
501
|
+
const timer = setTimeout(() => {
|
|
502
|
+
const searchResults = advancedSearch(query, filters, { locale });
|
|
503
|
+
setResults(searchResults);
|
|
504
|
+
setIsSearching(false);
|
|
505
|
+
}, debounceMs);
|
|
506
|
+
return () => clearTimeout(timer);
|
|
507
|
+
}, [query, filters, debounceMs, locale]);
|
|
508
|
+
const search = React.useCallback(() => {
|
|
509
|
+
setIsSearching(true);
|
|
510
|
+
const searchResults = advancedSearch(query, filters, { locale });
|
|
511
|
+
setResults(searchResults);
|
|
512
|
+
setIsSearching(false);
|
|
513
|
+
}, [query, filters, locale]);
|
|
514
|
+
const clearFilters = React.useCallback(() => {
|
|
515
|
+
setFilters({});
|
|
516
|
+
}, []);
|
|
517
|
+
return {
|
|
518
|
+
query,
|
|
519
|
+
setQuery,
|
|
520
|
+
filters,
|
|
521
|
+
setFilters,
|
|
522
|
+
results,
|
|
523
|
+
isSearching,
|
|
524
|
+
suggestions,
|
|
525
|
+
search,
|
|
526
|
+
clearFilters,
|
|
527
|
+
};
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
exports.advancedSearch = advancedSearch;
|
|
531
|
+
exports.clearRecentlyUsed = clearRecentlyUsed;
|
|
532
|
+
exports.clearSearchHistory = clearSearchHistory;
|
|
533
|
+
exports.findSimilarIcons = findSimilarIcons;
|
|
534
|
+
exports.fuzzyMatchScore = fuzzyMatchScore;
|
|
535
|
+
exports.getExtendedMetadata = getExtendedMetadata;
|
|
536
|
+
exports.getFavorites = getFavorites;
|
|
537
|
+
exports.getIconUsageStats = getIconUsageStats;
|
|
538
|
+
exports.getRecentlyUsed = getRecentlyUsed;
|
|
539
|
+
exports.getSearchAnalytics = getSearchAnalytics;
|
|
540
|
+
exports.getSearchSuggestions = getSearchSuggestions;
|
|
541
|
+
exports.isFavorite = isFavorite;
|
|
542
|
+
exports.levenshteinDistance = levenshteinDistance;
|
|
543
|
+
exports.recordIconUsage = recordIconUsage;
|
|
544
|
+
exports.registerExtendedIcon = registerExtendedIcon;
|
|
545
|
+
exports.toggleFavorite = toggleFavorite;
|
|
546
|
+
exports.tokenizeQuery = tokenizeQuery;
|
|
547
|
+
exports.useAdvancedIconSearch = useAdvancedIconSearch;
|
|
548
|
+
//# sourceMappingURL=advancedIconSearch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advancedIconSearch.js","sources":["../../src/advancedIconSearch.ts"],"sourcesContent":[null],"names":["useState","useMemo","useEffect","useCallback"],"mappings":"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"}
|