@nice2dev/icons 1.0.5 → 1.0.6

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 (57) hide show
  1. package/dist/cjs/NiceDesktopIconExporter.js +648 -0
  2. package/dist/cjs/NiceDesktopIconExporter.js.map +1 -0
  3. package/dist/cjs/NiceFaviconGenerator.js +429 -0
  4. package/dist/cjs/NiceFaviconGenerator.js.map +1 -0
  5. package/dist/cjs/NiceIconEditor.js +443 -0
  6. package/dist/cjs/NiceIconEditor.js.map +1 -0
  7. package/dist/cjs/NiceIconPreview.js +198 -0
  8. package/dist/cjs/NiceIconPreview.js.map +1 -0
  9. package/dist/cjs/NiceIconSetCreator.js +565 -0
  10. package/dist/cjs/NiceIconSetCreator.js.map +1 -0
  11. package/dist/cjs/_virtual/_commonjsHelpers.js +8 -0
  12. package/dist/cjs/_virtual/_commonjsHelpers.js.map +1 -0
  13. package/dist/cjs/_virtual/client.js +33 -0
  14. package/dist/cjs/_virtual/client.js.map +1 -0
  15. package/dist/cjs/_virtual/client2.js +6 -0
  16. package/dist/cjs/_virtual/client2.js.map +1 -0
  17. package/dist/cjs/advancedIconSearch.js +548 -0
  18. package/dist/cjs/advancedIconSearch.js.map +1 -0
  19. package/dist/cjs/iconAnalytics.js +395 -152
  20. package/dist/cjs/iconAnalytics.js.map +1 -1
  21. package/dist/cjs/index.js +42 -4
  22. package/dist/cjs/index.js.map +1 -1
  23. package/dist/cjs/node_modules/react-dom/client.js +39 -0
  24. package/dist/cjs/node_modules/react-dom/client.js.map +1 -0
  25. package/dist/esm/NiceDesktopIconExporter.js +642 -0
  26. package/dist/esm/NiceDesktopIconExporter.js.map +1 -0
  27. package/dist/esm/NiceFaviconGenerator.js +426 -0
  28. package/dist/esm/NiceFaviconGenerator.js.map +1 -0
  29. package/dist/esm/NiceIconEditor.js +440 -0
  30. package/dist/esm/NiceIconEditor.js.map +1 -0
  31. package/dist/esm/NiceIconPreview.js +196 -0
  32. package/dist/esm/NiceIconPreview.js.map +1 -0
  33. package/dist/esm/NiceIconSetCreator.js +562 -0
  34. package/dist/esm/NiceIconSetCreator.js.map +1 -0
  35. package/dist/esm/_virtual/_commonjsHelpers.js +6 -0
  36. package/dist/esm/_virtual/_commonjsHelpers.js.map +1 -0
  37. package/dist/esm/_virtual/client.js +28 -0
  38. package/dist/esm/_virtual/client.js.map +1 -0
  39. package/dist/esm/_virtual/client2.js +4 -0
  40. package/dist/esm/_virtual/client2.js.map +1 -0
  41. package/dist/esm/advancedIconSearch.js +529 -0
  42. package/dist/esm/advancedIconSearch.js.map +1 -0
  43. package/dist/esm/iconAnalytics.js +393 -152
  44. package/dist/esm/iconAnalytics.js.map +1 -1
  45. package/dist/esm/index.js +7 -1
  46. package/dist/esm/index.js.map +1 -1
  47. package/dist/esm/node_modules/react-dom/client.js +37 -0
  48. package/dist/esm/node_modules/react-dom/client.js.map +1 -0
  49. package/dist/types/NiceDesktopIconExporter.d.ts +119 -0
  50. package/dist/types/NiceFaviconGenerator.d.ts +64 -0
  51. package/dist/types/NiceIconEditor.d.ts +97 -0
  52. package/dist/types/NiceIconPreview.d.ts +47 -0
  53. package/dist/types/NiceIconSetCreator.d.ts +97 -0
  54. package/dist/types/advancedIconSearch.d.ts +218 -0
  55. package/dist/types/iconAnalytics.d.ts +219 -112
  56. package/dist/types/index.d.ts +18 -6
  57. package/package.json +2 -2
@@ -1,131 +1,238 @@
1
1
  /**
2
- * @file iconAnalytics.tsx
3
- * @description Optional icon usage analytics — tracks which icons are rendered,
4
- * provides a dashboard component, and recommendations for unused icons.
2
+ * @file iconAnalytics.ts
3
+ * @module @nice2dev/icons
4
+ * @description PRO-28.3 Icon Usage Analytics Service
5
5
  *
6
- * @example
7
- * ```tsx
8
- * // 1. Wrap your app with the analytics provider
9
- * const { AnalyticsProvider, useIconAnalytics } = createIconAnalyticsProvider();
10
- *
11
- * function App() {
12
- * return (
13
- * <AnalyticsProvider>
14
- * <MyApp />
15
- * <IconAnalyticsDashboard />
16
- * </AnalyticsProvider>
17
- * );
18
- * }
19
- *
20
- * // 2. Use the hook inside icon wrappers or manually
21
- * function TrackedIcon(props) {
22
- * const analytics = useIconAnalytics();
23
- * useEffect(() => { analytics.track('NtdHome'); }, []);
24
- * return <NtdHome {...props} />;
25
- * }
26
- * ```
6
+ * Tracks and analyzes icon usage patterns:
7
+ * - Most used icons
8
+ * - Icons per project
9
+ * - Missing icons suggestions
10
+ * - Unused icons cleanup
27
11
  */
28
- import React from 'react';
29
- /** A single usage tracking event. */
12
+ /** Single icon usage event */
30
13
  export interface IconUsageEvent {
31
- /** Icon component name (e.g. 'NtdHome') */
32
- name: string;
33
- /** Timestamp of last render */
34
- lastSeen: number;
35
- /** Total render count */
36
- count: number;
37
- /** Variant used (last) */
14
+ /** Icon name */
15
+ iconName: string;
16
+ /** Usage context/component */
17
+ context?: string;
18
+ /** Project/app identifier */
19
+ projectId?: string;
20
+ /** Variant used */
38
21
  variant?: string;
39
- /** Size used (last) */
40
- size?: string | number;
41
- /** Component path where the icon was rendered */
42
- location?: string;
22
+ /** Size used */
23
+ size?: number | string;
24
+ /** Timestamp */
25
+ timestamp: number;
43
26
  }
44
- /** Configuration for the analytics system. */
45
- export interface IconAnalyticsOptions {
46
- /** Enable/disable tracking (default: true in dev, false in prod) */
47
- enabled?: boolean;
48
- /** Maximum events to retain in memory */
49
- maxEvents?: number;
50
- /** Callback when a new icon is tracked */
51
- onTrack?: (event: IconUsageEvent) => void;
52
- /** Persist to localStorage key (default: none) */
53
- storageKey?: string;
27
+ /** Usage statistics for a single icon */
28
+ export interface IconUsageStats {
29
+ /** Icon name */
30
+ name: string;
31
+ /** Total usage count */
32
+ totalUsage: number;
33
+ /** First used timestamp */
34
+ firstUsed: number;
35
+ /** Last used timestamp */
36
+ lastUsed: number;
37
+ /** Contexts where used */
38
+ contexts: Map<string, number>;
39
+ /** Projects where used */
40
+ projects: Set<string>;
41
+ /** Variants used */
42
+ variants: Map<string, number>;
43
+ /** Average size */
44
+ avgSize: number;
54
45
  }
55
- /** Aggregated analytics report. */
46
+ /** Project usage summary */
47
+ export interface ProjectIconSummary {
48
+ /** Project identifier */
49
+ projectId: string;
50
+ /** Total unique icons */
51
+ uniqueIcons: number;
52
+ /** Total usage events */
53
+ totalUsage: number;
54
+ /** Most used icons in project */
55
+ topIcons: {
56
+ name: string;
57
+ count: number;
58
+ }[];
59
+ /** Categories used */
60
+ categories: Map<string, number>;
61
+ }
62
+ /** Analytics report */
56
63
  export interface IconAnalyticsReport {
57
- /** Total unique icons tracked */
58
- totalUniqueIcons: number;
59
- /** Total render count across all icons */
60
- totalRenderCount: number;
61
- /** Icons sorted by usage (most used first) */
62
- mostUsed: IconUsageEvent[];
63
- /** Icons that were rendered only once */
64
- rarelyUsed: IconUsageEvent[];
65
- /** Timestamp of report generation */
66
- generatedAt: number;
64
+ /** Report period start */
65
+ periodStart: number;
66
+ /** Report period end */
67
+ periodEnd: number;
68
+ /** Total events */
69
+ totalEvents: number;
70
+ /** Unique icons used */
71
+ uniqueIcons: number;
72
+ /** Top 20 most used icons */
73
+ mostUsed: {
74
+ name: string;
75
+ count: number;
76
+ }[];
77
+ /** Recently added icons that are trending */
78
+ trendingIcons: {
79
+ name: string;
80
+ growth: number;
81
+ }[];
82
+ /** Icons that may be underused */
83
+ underutilized: string[];
84
+ /** Potentially missing icons (common searches with no match) */
85
+ potentiallyMissing: string[];
86
+ /** Deprecated icons still in use */
87
+ deprecatedInUse: {
88
+ name: string;
89
+ count: number;
90
+ }[];
91
+ /** Per-project breakdown */
92
+ projectSummaries: ProjectIconSummary[];
93
+ }
94
+ /** Storage configuration */
95
+ export interface AnalyticsStorageConfig {
96
+ /** Maximum events to keep in memory */
97
+ maxEventsInMemory: number;
98
+ /** Auto-persist interval (ms), 0 = disabled */
99
+ persistInterval: number;
100
+ /** Storage key for localStorage */
101
+ storageKey: string;
102
+ /** Enable console debug logging */
103
+ debug: boolean;
67
104
  }
68
- declare class IconAnalyticsEngine {
105
+ /**
106
+ * Icon Analytics Service for tracking usage patterns.
107
+ */
108
+ export declare class IconAnalyticsService {
69
109
  private events;
70
- private options;
71
- constructor(options?: IconAnalyticsOptions);
72
- track(name: string, meta?: {
73
- variant?: string;
74
- size?: string | number;
75
- location?: string;
76
- }): void;
77
- getReport(): IconAnalyticsReport;
78
- getAll(): IconUsageEvent[];
110
+ private iconStats;
111
+ private config;
112
+ private persistTimer;
113
+ private knownIcons;
114
+ private deprecatedIcons;
115
+ private searchMisses;
116
+ constructor(config?: Partial<AnalyticsStorageConfig>);
117
+ /**
118
+ * Track an icon usage event.
119
+ */
120
+ track(event: Omit<IconUsageEvent, 'timestamp'>): void;
121
+ /**
122
+ * Track a search miss (icon not found).
123
+ */
124
+ trackSearchMiss(query: string): void;
125
+ /**
126
+ * Register an icon as known (for finding unused).
127
+ */
128
+ registerKnownIcon(name: string, deprecated?: boolean): void;
129
+ /**
130
+ * Bulk register icons.
131
+ */
132
+ registerKnownIcons(icons: {
133
+ name: string;
134
+ deprecated?: boolean;
135
+ }[]): void;
136
+ private updateStats;
137
+ /**
138
+ * Get usage stats for a specific icon.
139
+ */
140
+ getIconStats(iconName: string): IconUsageStats | undefined;
141
+ /**
142
+ * Get most used icons.
143
+ */
144
+ getMostUsedIcons(limit?: number): {
145
+ name: string;
146
+ count: number;
147
+ }[];
148
+ /**
149
+ * Get least used icons (icons used but rarely).
150
+ */
151
+ getLeastUsedIcons(limit?: number): {
152
+ name: string;
153
+ count: number;
154
+ }[];
155
+ /**
156
+ * Get icons that have never been used.
157
+ */
158
+ getUnusedIcons(): string[];
159
+ /**
160
+ * Get deprecated icons that are still being used.
161
+ */
162
+ getDeprecatedInUse(): {
163
+ name: string;
164
+ count: number;
165
+ }[];
166
+ /**
167
+ * Get potentially missing icons based on search misses.
168
+ */
169
+ getPotentiallyMissingIcons(minMisses?: number): {
170
+ query: string;
171
+ misses: number;
172
+ }[];
173
+ /**
174
+ * Get icons used in a specific project.
175
+ */
176
+ getIconsByProject(projectId: string): {
177
+ name: string;
178
+ count: number;
179
+ }[];
180
+ /**
181
+ * Get project summaries.
182
+ */
183
+ getProjectSummaries(): ProjectIconSummary[];
184
+ /**
185
+ * Generate full analytics report.
186
+ */
187
+ generateReport(periodDays?: number): IconAnalyticsReport;
188
+ private startPersistTimer;
189
+ private stopPersistTimer;
190
+ private saveToStorage;
191
+ private loadFromStorage;
192
+ /**
193
+ * Force save to storage.
194
+ */
195
+ persist(): void;
196
+ /**
197
+ * Clear all analytics data.
198
+ */
79
199
  clear(): void;
80
- private persist;
81
- }
82
- interface IconAnalyticsContextValue {
83
- track: (name: string, meta?: {
84
- variant?: string;
85
- size?: string | number;
86
- location?: string;
87
- }) => void;
88
- getReport: () => IconAnalyticsReport;
89
- getAll: () => IconUsageEvent[];
90
- clear: () => void;
200
+ /**
201
+ * Destroy the service (cleanup timers).
202
+ */
203
+ destroy(): void;
91
204
  }
92
205
  /**
93
- * Hook to access the icon analytics tracker.
94
- *
95
- * @returns Analytics functions: `track`, `getReport`, `getAll`, `clear`.
96
- *
97
- * @example
98
- * ```tsx
99
- * const analytics = useIconAnalytics();
100
- * analytics.track('NtdHome', { variant: 'solid', size: 'lg' });
101
- * const report = analytics.getReport();
102
- * ```
206
+ * Get the default analytics service instance.
103
207
  */
104
- export declare function useIconAnalytics(): IconAnalyticsContextValue;
208
+ export declare function getIconAnalytics(config?: Partial<AnalyticsStorageConfig>): IconAnalyticsService;
105
209
  /**
106
- * Creates an analytics provider and hook pair.
107
- *
108
- * @param options - Analytics configuration
109
- * @returns `{ AnalyticsProvider, useIconAnalytics }` to wrap your app.
210
+ * Track an icon usage (shorthand).
211
+ */
212
+ export declare function trackIconUsage(iconName: string, options?: Partial<Omit<IconUsageEvent, 'iconName' | 'timestamp'>>): void;
213
+ /**
214
+ * Track a search miss (shorthand).
110
215
  */
111
- export declare function createIconAnalyticsProvider(options?: IconAnalyticsOptions): {
112
- AnalyticsProvider: React.FC<{
113
- children: React.ReactNode;
114
- }>;
115
- useIconAnalytics: typeof useIconAnalytics;
116
- engine: IconAnalyticsEngine;
117
- };
118
- export interface IconAnalyticsDashboardProps {
119
- /** Max items to show in top list */
120
- maxItems?: number;
121
- /** Additional class */
122
- className?: string;
123
- /** Additional styles */
124
- style?: React.CSSProperties;
216
+ export declare function trackIconSearchMiss(query: string): void;
217
+ export interface UseIconAnalyticsReturn {
218
+ /** Track icon usage */
219
+ track: (iconName: string, context?: string) => void;
220
+ /** Most used icons */
221
+ mostUsed: {
222
+ name: string;
223
+ count: number;
224
+ }[];
225
+ /** Unused icons */
226
+ unused: string[];
227
+ /** Refresh data */
228
+ refresh: () => void;
229
+ /** Full report */
230
+ report: IconAnalyticsReport | null;
231
+ /** Generate full report */
232
+ generateReport: (periodDays?: number) => void;
125
233
  }
126
234
  /**
127
- * Dashboard component showing icon usage analytics.
128
- * Displays most-used icons, render counts, and recommendations.
235
+ * React hook for icon analytics.
129
236
  */
130
- export declare const IconAnalyticsDashboard: React.FC<IconAnalyticsDashboardProps>;
131
- export {};
237
+ export declare function useIconAnalytics(projectId?: string): UseIconAnalyticsReturn;
238
+ export default IconAnalyticsService;
@@ -65,27 +65,39 @@ export type { AnimationStep, AnimationSequenceConfig, AnimationPlaybackState, An
65
65
  export { exportIconToFigmaNode, exportIconToSvgString, exportIconToDataUrl, generateFigmaPluginManifest, downloadIconAsSvg, downloadIconAsPng, copyIconToClipboard, batchExportIcons, } from './figmaExport';
66
66
  export type { FigmaVectorPath, FigmaVectorNode, FigmaIconFrame, FigmaComponentSet, FigmaExportOptions, FigmaPluginIconEntry, FigmaPluginManifest, } from './figmaExport';
67
67
  export * from './icons';
68
- export { NtdIconMorph, NtdPathMorph, NtdMorphPair, useMorphState, } from './NtdIconMorph';
68
+ export { NtdIconMorph, NtdPathMorph, NtdMorphPair, useMorphState } from './NtdIconMorph';
69
69
  export type { NtdIconMorphProps, NtdPathMorphProps, NtdMorphPairProps, MorphPairName, MorphTrigger, } from './NtdIconMorph';
70
- export { NtdBadge, NtdStatusDot, NtdIconOverlay, NtdIconStack, } from './NtdIconBadge';
70
+ export { NtdBadge, NtdStatusDot, NtdIconOverlay, NtdIconStack } from './NtdIconBadge';
71
71
  export type { NtdBadgeProps, NtdStatusDotProps, NtdIconOverlayProps, NtdIconStackProps, BadgePosition, StatusType, } from './NtdIconBadge';
72
72
  export { registerIcon, searchIcons, getIcon, getIconMetadata, getIconsByCategory, getAllIcons, getCategoryCounts, getSearchSuggestions, initializeIconMetadata, CATEGORY_INFO, UI_ICON_METADATA, ACTION_ICON_METADATA, } from './iconMetadata';
73
73
  export type { IconMetadata, IconSearchResult, IconCategory, SearchMatch, SearchOptions, } from './iconMetadata';
74
+ export { NiceIconEditor, useIconEditor } from './NiceIconEditor';
75
+ export type { NiceIconEditorProps, IconEditorState } from './NiceIconEditor';
76
+ export { NiceIconSetCreator, useIconSetCreator } from './NiceIconSetCreator';
77
+ export type { NiceIconSetCreatorProps, IconSetConfig, IconSetItem } from './NiceIconSetCreator';
78
+ export { NiceIconPreview } from './NiceIconPreview';
79
+ export type { NiceIconPreviewProps, PreviewMode, PreviewLayout, PreviewSize, } from './NiceIconPreview';
80
+ export { NiceFaviconGenerator, useFaviconGenerator } from './NiceFaviconGenerator';
81
+ export type { NiceFaviconGeneratorProps, FaviconSize, ManifestConfig, GeneratedAsset, UseFaviconGeneratorReturn, } from './NiceFaviconGenerator';
82
+ export { NiceDesktopIconExporter, useDesktopIconExporter, DESKTOP_ICON_SIZES, RETINA_VARIANTS, LINUX_HICOLOR_DIRS, } from './NiceDesktopIconExporter';
83
+ export type { NiceDesktopIconExporterProps, DesktopIconSize, RetinaVariant, ExportedIcon, IconExportConfig, UseDesktopIconExporterReturn, } from './NiceDesktopIconExporter';
84
+ export { advancedSearch, levenshteinDistance, fuzzyMatchScore, tokenizeQuery, registerExtendedIcon, getExtendedMetadata, toggleFavorite, isFavorite, getFavorites, recordIconUsage, getRecentlyUsed, findSimilarIcons, getSearchSuggestions as getAdvancedSearchSuggestions, getSearchAnalytics, getIconUsageStats, clearSearchHistory, clearRecentlyUsed, useAdvancedIconSearch, } from './advancedIconSearch';
85
+ export type { IconDomain, IconUseCase, IconStyle, LocalizedNames, ExtendedIconMetadata, AdvancedSearchFilters, AdvancedSearchResult, SearchAnalytics, UseAdvancedSearchReturn, } from './advancedIconSearch';
86
+ export { IconAnalyticsService, getIconAnalytics, trackIconUsage, trackIconSearchMiss, useIconAnalytics, } from './iconAnalytics';
87
+ export type { IconUsageEvent, IconUsageStats, ProjectIconSummary, IconAnalyticsReport, AnalyticsStorageConfig, UseIconAnalyticsReturn, } from './iconAnalytics';
74
88
  export { createNiceIconResolver, getResolverIconNames } from './resolver';
75
89
  export type { NiceIconResolverOptions } from './resolver';
76
90
  export { ntdIconPlugin, ntdIconPreset } from './tailwind-plugin';
77
91
  export type { NtdTailwindPluginOptions } from './tailwind-plugin';
78
92
  export { isSolidProps, isOutlineProps, isDuotoneProps, isFlatProps, isSharpProps, isRoundedProps, isMiniProps, isThreeDProps, toIconProps, } from './variantProps';
79
93
  export type { VariantIconProps, SolidIconProps, OutlineIconProps, DuotoneIconProps, FlatIconProps, SharpIconProps, RoundedIconProps, MiniIconProps, ThreeDIconProps, } from './variantProps';
80
- export { useIconAnalytics, IconAnalyticsDashboard, createIconAnalyticsProvider } from './iconAnalytics';
81
- export type { IconUsageEvent, IconAnalyticsOptions, IconAnalyticsReport, IconAnalyticsDashboardProps, } from './iconAnalytics';
82
94
  export { NtdStateMorph, useStateMorph } from './NtdStateMorph';
83
95
  export type { NtdStateMorphProps, MorphStateMap, StateMorphHandle } from './NtdStateMorph';
84
96
  export { NtdLottieIcon, lottieToIcon, exportToLottie } from './lottieIntegration';
85
- export type { NtdLottieIconProps, LottieAnimationData, LottieExportOptions } from './lottieIntegration';
97
+ export type { NtdLottieIconProps, LottieAnimationData, LottieExportOptions, } from './lottieIntegration';
86
98
  export { NtdParticleIcon } from './particleEffects';
87
99
  export type { NtdParticleIconProps, ParticlePreset, ParticleConfig } from './particleEffects';
88
- export { FigmaSyncManager, createFigmaSyncManager, diffIconSets, } from './figmaSync';
100
+ export { FigmaSyncManager, createFigmaSyncManager, diffIconSets } from './figmaSync';
89
101
  export type { FigmaSyncConfig, FigmaSyncResult, FigmaIconDiff, FigmaSyncDirection, } from './figmaSync';
90
102
  export { NtdIconFloral, NtdIconFestive, NtdIconNeon, NtdIconSketch, NtdIconWatercolor, NtdIconCosmic, NtdIconSteampunk, NtdIconFrost, NtdIconPixel, NtdIconOrganic, NtdIconGeometric, } from './iconStyles';
91
103
  export type { IconStyleIntensity, IconStyleBaseProps, NtdIconFloralProps, NtdIconFestiveProps, NtdIconNeonProps, NtdIconSketchProps, NtdIconWatercolorProps, NtdIconCosmicProps, NtdIconSteampunkProps, NtdIconFrostProps, NtdIconPixelProps, NtdIconOrganicProps, NtdIconGeometricProps, } from './iconStyles';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nice2dev/icons",
3
- "version": "1.0.5",
3
+ "version": "1.0.6",
4
4
  "description": "Beautiful, lightweight, multi-color SVG icon library for React with animations",
5
5
  "author": "NiceToDev <contact@nicetodev.com>",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -89,7 +89,7 @@
89
89
  "test:visual:ci": "npx chromatic --auto-accept-changes=main",
90
90
  "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s",
91
91
  "changelog:first": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0",
92
- "version": "npm run changelog && git add CHANGELOG.md"
92
+ "version": "1.0.6"
93
93
  },
94
94
  "keywords": [
95
95
  "icons",