@nice2dev/icons 1.0.0 → 1.0.3
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/CHANGELOG.md +169 -7
- package/README.md +247 -2
- package/bin/ntd-icons.mjs +732 -0
- package/dist/cjs/NtdIconBadge.js +375 -0
- package/dist/cjs/NtdIconBadge.js.map +1 -0
- package/dist/cjs/NtdIconMorph.js +386 -0
- package/dist/cjs/NtdIconMorph.js.map +1 -0
- package/dist/cjs/NtdStateMorph.js +177 -0
- package/dist/cjs/NtdStateMorph.js.map +1 -0
- package/dist/cjs/createIcon.js +51 -4
- package/dist/cjs/createIcon.js.map +1 -1
- package/dist/cjs/figmaSync.js +308 -0
- package/dist/cjs/figmaSync.js.map +1 -0
- package/dist/cjs/iconAnalytics.js +189 -0
- package/dist/cjs/iconAnalytics.js.map +1 -0
- package/dist/cjs/iconMetadata.js +523 -0
- package/dist/cjs/iconMetadata.js.map +1 -0
- package/dist/cjs/iconStyles.js +597 -0
- package/dist/cjs/iconStyles.js.map +1 -0
- package/dist/cjs/icons/accessibility.js +168 -0
- package/dist/cjs/icons/accessibility.js.map +1 -0
- package/dist/cjs/icons/ai.js +191 -0
- package/dist/cjs/icons/ai.js.map +1 -0
- package/dist/cjs/icons/brand.js +70 -0
- package/dist/cjs/icons/brand.js.map +1 -1
- package/dist/cjs/icons/education.js +212 -0
- package/dist/cjs/icons/education.js.map +1 -0
- package/dist/cjs/icons/food.js +198 -0
- package/dist/cjs/icons/food.js.map +1 -0
- package/dist/cjs/icons/gaming.js +191 -0
- package/dist/cjs/icons/gaming.js.map +1 -0
- package/dist/cjs/icons/index.js +520 -0
- package/dist/cjs/icons/index.js.map +1 -0
- package/dist/cjs/icons/legal.js +168 -0
- package/dist/cjs/icons/legal.js.map +1 -0
- package/dist/cjs/icons/realestate.js +212 -0
- package/dist/cjs/icons/realestate.js.map +1 -0
- package/dist/cjs/icons/science.js +201 -0
- package/dist/cjs/icons/science.js.map +1 -0
- package/dist/cjs/icons/sports.js +176 -0
- package/dist/cjs/icons/sports.js.map +1 -0
- package/dist/cjs/icons/sustainability.js +193 -0
- package/dist/cjs/icons/sustainability.js.map +1 -0
- package/dist/cjs/icons/travel.js +184 -0
- package/dist/cjs/icons/travel.js.map +1 -0
- package/dist/cjs/index.js +265 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/lottieIntegration.js +286 -0
- package/dist/cjs/lottieIntegration.js.map +1 -0
- package/dist/cjs/nicetodev-icons.css +1 -1
- package/dist/cjs/particleEffects.js +259 -0
- package/dist/cjs/particleEffects.js.map +1 -0
- package/dist/cjs/resolver.js +224 -0
- package/dist/cjs/resolver.js.map +1 -0
- package/dist/cjs/tailwind-plugin.js +340 -0
- package/dist/cjs/tailwind-plugin.js.map +1 -0
- package/dist/cjs/types.js +38 -0
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/variantProps.js +78 -0
- package/dist/cjs/variantProps.js.map +1 -0
- package/dist/esm/NtdIconBadge.js +370 -0
- package/dist/esm/NtdIconBadge.js.map +1 -0
- package/dist/esm/NtdIconMorph.js +381 -0
- package/dist/esm/NtdIconMorph.js.map +1 -0
- package/dist/esm/NtdStateMorph.js +174 -0
- package/dist/esm/NtdStateMorph.js.map +1 -0
- package/dist/esm/createIcon.js +53 -6
- package/dist/esm/createIcon.js.map +1 -1
- package/dist/esm/figmaSync.js +304 -0
- package/dist/esm/figmaSync.js.map +1 -0
- package/dist/esm/iconAnalytics.js +185 -0
- package/dist/esm/iconAnalytics.js.map +1 -0
- package/dist/esm/iconMetadata.js +510 -0
- package/dist/esm/iconMetadata.js.map +1 -0
- package/dist/esm/iconStyles.js +585 -0
- package/dist/esm/iconStyles.js.map +1 -0
- package/dist/esm/icons/accessibility.js +153 -0
- package/dist/esm/icons/accessibility.js.map +1 -0
- package/dist/esm/icons/ai.js +174 -0
- package/dist/esm/icons/ai.js.map +1 -0
- package/dist/esm/icons/brand.js +67 -1
- package/dist/esm/icons/brand.js.map +1 -1
- package/dist/esm/icons/education.js +193 -0
- package/dist/esm/icons/education.js.map +1 -0
- package/dist/esm/icons/food.js +180 -0
- package/dist/esm/icons/food.js.map +1 -0
- package/dist/esm/icons/gaming.js +174 -0
- package/dist/esm/icons/gaming.js.map +1 -0
- package/dist/esm/icons/index.js +31 -0
- package/dist/esm/icons/index.js.map +1 -0
- package/dist/esm/icons/legal.js +153 -0
- package/dist/esm/icons/legal.js.map +1 -0
- package/dist/esm/icons/realestate.js +193 -0
- package/dist/esm/icons/realestate.js.map +1 -0
- package/dist/esm/icons/science.js +183 -0
- package/dist/esm/icons/science.js.map +1 -0
- package/dist/esm/icons/sports.js +160 -0
- package/dist/esm/icons/sports.js.map +1 -0
- package/dist/esm/icons/sustainability.js +176 -0
- package/dist/esm/icons/sustainability.js.map +1 -0
- package/dist/esm/icons/travel.js +167 -0
- package/dist/esm/icons/travel.js.map +1 -0
- package/dist/esm/index.js +27 -5
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lottieIntegration.js +282 -0
- package/dist/esm/lottieIntegration.js.map +1 -0
- package/dist/esm/nicetodev-icons.css +1 -1
- package/dist/esm/particleEffects.js +257 -0
- package/dist/esm/particleEffects.js.map +1 -0
- package/dist/esm/resolver.js +221 -0
- package/dist/esm/resolver.js.map +1 -0
- package/dist/esm/tailwind-plugin.js +337 -0
- package/dist/esm/tailwind-plugin.js.map +1 -0
- package/dist/esm/types.js +37 -1
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/variantProps.js +68 -0
- package/dist/esm/variantProps.js.map +1 -0
- package/dist/types/NtdIconBadge.d.ts +209 -0
- package/dist/types/NtdIconMorph.d.ts +183 -0
- package/dist/types/NtdStateMorph.d.ts +100 -0
- package/dist/types/client.d.ts +27 -0
- package/dist/types/design-tokens.d.ts +281 -0
- package/dist/types/figmaSync.d.ts +135 -0
- package/dist/types/headless-ui.d.ts +462 -0
- package/dist/types/iconAnalytics.d.ts +131 -0
- package/dist/types/iconMetadata.d.ts +123 -0
- package/dist/types/iconStyles.d.ts +104 -0
- package/dist/types/icons/accessibility.d.ts +39 -0
- package/dist/types/icons/ai.d.ts +43 -0
- package/dist/types/icons/brand.d.ts +4 -0
- package/dist/types/icons/education.d.ts +47 -0
- package/dist/types/icons/food.d.ts +45 -0
- package/dist/types/icons/gaming.d.ts +42 -0
- package/dist/types/icons/index.d.ts +12 -1
- package/dist/types/icons/legal.d.ts +39 -0
- package/dist/types/icons/realestate.d.ts +47 -0
- package/dist/types/icons/science.d.ts +45 -0
- package/dist/types/icons/sports.d.ts +41 -0
- package/dist/types/icons/sustainability.d.ts +43 -0
- package/dist/types/icons/travel.d.ts +43 -0
- package/dist/types/index.d.ts +28 -6
- package/dist/types/lottieIntegration.d.ts +173 -0
- package/dist/types/micro-interactions.d.ts +146 -0
- package/dist/types/microInteractions.d.ts +174 -0
- package/dist/types/particleEffects.d.ts +69 -0
- package/dist/types/resolver.d.ts +58 -0
- package/dist/types/rsc.d.ts +159 -0
- package/dist/types/tailwind-plugin.d.ts +100 -0
- package/dist/types/types.d.ts +100 -0
- package/dist/types/utilities.d.ts +221 -0
- package/dist/types/variantProps.d.ts +122 -0
- package/package.json +58 -5
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file design-tokens.ts
|
|
3
|
+
* @description Design Tokens Integration for @nice2dev/icons
|
|
4
|
+
*
|
|
5
|
+
* Provides Style Dictionary compatible design tokens for icon styling.
|
|
6
|
+
* Supports auto-generation from design systems and custom token sources.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* // Generate tokens for Style Dictionary
|
|
11
|
+
* import { generateIconTokens, createTokensConfig } from '@nice2dev/icons/design-tokens';
|
|
12
|
+
*
|
|
13
|
+
* const tokens = generateIconTokens({
|
|
14
|
+
* prefix: 'ntd',
|
|
15
|
+
* namespace: 'icon',
|
|
16
|
+
* colorTokens: {
|
|
17
|
+
* primary: '{color.brand.500}',
|
|
18
|
+
* secondary: '{color.gray.400}',
|
|
19
|
+
* },
|
|
20
|
+
* });
|
|
21
|
+
*
|
|
22
|
+
* // tokens.json output
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* @version 1.0.0
|
|
26
|
+
* @since 2026-03
|
|
27
|
+
* @license MIT
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* Token value with metadata
|
|
31
|
+
*/
|
|
32
|
+
export interface DesignToken {
|
|
33
|
+
value: string | number;
|
|
34
|
+
type?: string;
|
|
35
|
+
description?: string;
|
|
36
|
+
deprecated?: boolean;
|
|
37
|
+
original?: {
|
|
38
|
+
value: string;
|
|
39
|
+
};
|
|
40
|
+
$extensions?: {
|
|
41
|
+
'org.nice2dev.icons'?: {
|
|
42
|
+
cssVariable?: string;
|
|
43
|
+
tailwindClass?: string;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Token group structure
|
|
49
|
+
*/
|
|
50
|
+
export interface TokenGroup {
|
|
51
|
+
[key: string]: DesignToken | TokenGroup;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Configuration for generating icon tokens
|
|
55
|
+
*/
|
|
56
|
+
export interface IconTokensConfig {
|
|
57
|
+
/** Token prefix (e.g., 'ntd') */
|
|
58
|
+
prefix?: string;
|
|
59
|
+
/** Token namespace (e.g., 'icon') */
|
|
60
|
+
namespace?: string;
|
|
61
|
+
/** Color tokens mapping */
|
|
62
|
+
colorTokens?: {
|
|
63
|
+
primary?: string;
|
|
64
|
+
secondary?: string;
|
|
65
|
+
accent?: string;
|
|
66
|
+
success?: string;
|
|
67
|
+
warning?: string;
|
|
68
|
+
error?: string;
|
|
69
|
+
info?: string;
|
|
70
|
+
muted?: string;
|
|
71
|
+
};
|
|
72
|
+
/** Size tokens mapping */
|
|
73
|
+
sizeTokens?: {
|
|
74
|
+
xs?: string | number;
|
|
75
|
+
sm?: string | number;
|
|
76
|
+
md?: string | number;
|
|
77
|
+
lg?: string | number;
|
|
78
|
+
xl?: string | number;
|
|
79
|
+
'2xl'?: string | number;
|
|
80
|
+
};
|
|
81
|
+
/** Stroke width tokens */
|
|
82
|
+
strokeTokens?: {
|
|
83
|
+
thin?: string | number;
|
|
84
|
+
normal?: string | number;
|
|
85
|
+
medium?: string | number;
|
|
86
|
+
thick?: string | number;
|
|
87
|
+
bold?: string | number;
|
|
88
|
+
};
|
|
89
|
+
/** Include animations tokens */
|
|
90
|
+
includeAnimations?: boolean;
|
|
91
|
+
/** Include variant tokens */
|
|
92
|
+
includeVariants?: boolean;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Style Dictionary format config
|
|
96
|
+
*/
|
|
97
|
+
export interface StyleDictionaryConfig {
|
|
98
|
+
source: string[];
|
|
99
|
+
platforms: {
|
|
100
|
+
[platform: string]: {
|
|
101
|
+
transformGroup?: string;
|
|
102
|
+
buildPath: string;
|
|
103
|
+
files: Array<{
|
|
104
|
+
destination: string;
|
|
105
|
+
format: string;
|
|
106
|
+
filter?: {
|
|
107
|
+
attributes: {
|
|
108
|
+
category: string;
|
|
109
|
+
};
|
|
110
|
+
};
|
|
111
|
+
}>;
|
|
112
|
+
};
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Default icon size tokens
|
|
117
|
+
*/
|
|
118
|
+
export declare const DEFAULT_SIZE_TOKENS: {
|
|
119
|
+
readonly xs: "0.75rem";
|
|
120
|
+
readonly sm: "1rem";
|
|
121
|
+
readonly md: "1.5rem";
|
|
122
|
+
readonly lg: "2rem";
|
|
123
|
+
readonly xl: "3rem";
|
|
124
|
+
readonly '2xl': "4rem";
|
|
125
|
+
};
|
|
126
|
+
/**
|
|
127
|
+
* Default icon color tokens
|
|
128
|
+
*/
|
|
129
|
+
export declare const DEFAULT_COLOR_TOKENS: {
|
|
130
|
+
readonly primary: "#3b82f6";
|
|
131
|
+
readonly secondary: "#64748b";
|
|
132
|
+
readonly accent: "#8b5cf6";
|
|
133
|
+
readonly success: "#22c55e";
|
|
134
|
+
readonly warning: "#f59e0b";
|
|
135
|
+
readonly error: "#ef4444";
|
|
136
|
+
readonly info: "#06b6d4";
|
|
137
|
+
readonly muted: "#9ca3af";
|
|
138
|
+
};
|
|
139
|
+
/**
|
|
140
|
+
* Default stroke width tokens
|
|
141
|
+
*/
|
|
142
|
+
export declare const DEFAULT_STROKE_TOKENS: {
|
|
143
|
+
readonly thin: "1";
|
|
144
|
+
readonly normal: "1.5";
|
|
145
|
+
readonly medium: "2";
|
|
146
|
+
readonly thick: "2.5";
|
|
147
|
+
readonly bold: "3";
|
|
148
|
+
};
|
|
149
|
+
/**
|
|
150
|
+
* Default animation tokens
|
|
151
|
+
*/
|
|
152
|
+
export declare const DEFAULT_ANIMATION_TOKENS: {
|
|
153
|
+
readonly duration: {
|
|
154
|
+
readonly instant: "0ms";
|
|
155
|
+
readonly fast: "150ms";
|
|
156
|
+
readonly normal: "300ms";
|
|
157
|
+
readonly slow: "500ms";
|
|
158
|
+
readonly slower: "1000ms";
|
|
159
|
+
};
|
|
160
|
+
readonly easing: {
|
|
161
|
+
readonly linear: "linear";
|
|
162
|
+
readonly easeIn: "cubic-bezier(0.4, 0, 1, 1)";
|
|
163
|
+
readonly easeOut: "cubic-bezier(0, 0, 0.2, 1)";
|
|
164
|
+
readonly easeInOut: "cubic-bezier(0.4, 0, 0.2, 1)";
|
|
165
|
+
readonly spring: "cubic-bezier(0.175, 0.885, 0.32, 1.275)";
|
|
166
|
+
};
|
|
167
|
+
};
|
|
168
|
+
/**
|
|
169
|
+
* Generates Style Dictionary compatible design tokens for icons.
|
|
170
|
+
*
|
|
171
|
+
* @param config - Token configuration
|
|
172
|
+
* @returns Token group object ready for Style Dictionary
|
|
173
|
+
*
|
|
174
|
+
* @example
|
|
175
|
+
* ```ts
|
|
176
|
+
* const tokens = generateIconTokens({
|
|
177
|
+
* prefix: 'ntd',
|
|
178
|
+
* colorTokens: {
|
|
179
|
+
* primary: '{color.brand.500}',
|
|
180
|
+
* },
|
|
181
|
+
* });
|
|
182
|
+
*
|
|
183
|
+
* // Output:
|
|
184
|
+
* // {
|
|
185
|
+
* // ntd: {
|
|
186
|
+
* // icon: {
|
|
187
|
+
* // size: { md: { value: '1.5rem', type: 'dimension' } },
|
|
188
|
+
* // color: { primary: { value: '{color.brand.500}', type: 'color' } },
|
|
189
|
+
* // }
|
|
190
|
+
* // }
|
|
191
|
+
* // }
|
|
192
|
+
* ```
|
|
193
|
+
*/
|
|
194
|
+
export declare function generateIconTokens(config?: IconTokensConfig): TokenGroup;
|
|
195
|
+
/**
|
|
196
|
+
* Creates a Style Dictionary configuration for icon tokens.
|
|
197
|
+
*
|
|
198
|
+
* @param options - Configuration options
|
|
199
|
+
* @returns Style Dictionary config object
|
|
200
|
+
*/
|
|
201
|
+
export declare function createStyleDictionaryConfig(options?: {
|
|
202
|
+
sourcePath?: string;
|
|
203
|
+
outputPath?: string;
|
|
204
|
+
platforms?: string[];
|
|
205
|
+
}): StyleDictionaryConfig;
|
|
206
|
+
/**
|
|
207
|
+
* Generates CSS custom properties from icon tokens.
|
|
208
|
+
*
|
|
209
|
+
* @param tokens - Token group
|
|
210
|
+
* @param selector - CSS selector (default: ':root')
|
|
211
|
+
* @returns CSS string with custom properties
|
|
212
|
+
*/
|
|
213
|
+
export declare function generateCSSVariables(tokens: TokenGroup, selector?: string): string;
|
|
214
|
+
/**
|
|
215
|
+
* Generates Tailwind CSS config from icon tokens.
|
|
216
|
+
*
|
|
217
|
+
* @param tokens - Token group
|
|
218
|
+
* @returns Tailwind config extend object
|
|
219
|
+
*/
|
|
220
|
+
export declare function generateTailwindConfig(tokens: TokenGroup): {
|
|
221
|
+
colors: Record<string, string>;
|
|
222
|
+
spacing: Record<string, string>;
|
|
223
|
+
strokeWidth: Record<string, string>;
|
|
224
|
+
};
|
|
225
|
+
/**
|
|
226
|
+
* Converts icon tokens to Figma Tokens format.
|
|
227
|
+
* Compatible with the Figma Tokens plugin.
|
|
228
|
+
*
|
|
229
|
+
* @param tokens - Token group
|
|
230
|
+
* @returns Figma Tokens compatible object
|
|
231
|
+
*/
|
|
232
|
+
export declare function toFigmaTokens(tokens: TokenGroup): Record<string, unknown>;
|
|
233
|
+
declare const _default: {
|
|
234
|
+
generateIconTokens: typeof generateIconTokens;
|
|
235
|
+
createStyleDictionaryConfig: typeof createStyleDictionaryConfig;
|
|
236
|
+
generateCSSVariables: typeof generateCSSVariables;
|
|
237
|
+
generateTailwindConfig: typeof generateTailwindConfig;
|
|
238
|
+
toFigmaTokens: typeof toFigmaTokens;
|
|
239
|
+
DEFAULT_SIZE_TOKENS: {
|
|
240
|
+
readonly xs: "0.75rem";
|
|
241
|
+
readonly sm: "1rem";
|
|
242
|
+
readonly md: "1.5rem";
|
|
243
|
+
readonly lg: "2rem";
|
|
244
|
+
readonly xl: "3rem";
|
|
245
|
+
readonly '2xl': "4rem";
|
|
246
|
+
};
|
|
247
|
+
DEFAULT_COLOR_TOKENS: {
|
|
248
|
+
readonly primary: "#3b82f6";
|
|
249
|
+
readonly secondary: "#64748b";
|
|
250
|
+
readonly accent: "#8b5cf6";
|
|
251
|
+
readonly success: "#22c55e";
|
|
252
|
+
readonly warning: "#f59e0b";
|
|
253
|
+
readonly error: "#ef4444";
|
|
254
|
+
readonly info: "#06b6d4";
|
|
255
|
+
readonly muted: "#9ca3af";
|
|
256
|
+
};
|
|
257
|
+
DEFAULT_STROKE_TOKENS: {
|
|
258
|
+
readonly thin: "1";
|
|
259
|
+
readonly normal: "1.5";
|
|
260
|
+
readonly medium: "2";
|
|
261
|
+
readonly thick: "2.5";
|
|
262
|
+
readonly bold: "3";
|
|
263
|
+
};
|
|
264
|
+
DEFAULT_ANIMATION_TOKENS: {
|
|
265
|
+
readonly duration: {
|
|
266
|
+
readonly instant: "0ms";
|
|
267
|
+
readonly fast: "150ms";
|
|
268
|
+
readonly normal: "300ms";
|
|
269
|
+
readonly slow: "500ms";
|
|
270
|
+
readonly slower: "1000ms";
|
|
271
|
+
};
|
|
272
|
+
readonly easing: {
|
|
273
|
+
readonly linear: "linear";
|
|
274
|
+
readonly easeIn: "cubic-bezier(0.4, 0, 1, 1)";
|
|
275
|
+
readonly easeOut: "cubic-bezier(0, 0, 0.2, 1)";
|
|
276
|
+
readonly easeInOut: "cubic-bezier(0.4, 0, 0.2, 1)";
|
|
277
|
+
readonly spring: "cubic-bezier(0.175, 0.885, 0.32, 1.275)";
|
|
278
|
+
};
|
|
279
|
+
};
|
|
280
|
+
};
|
|
281
|
+
export default _default;
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file figmaSync.ts
|
|
3
|
+
* @description Bidirectional sync between Figma design files and the codebase.
|
|
4
|
+
*
|
|
5
|
+
* - Sync changes from Figma → codebase (import new/updated icons)
|
|
6
|
+
* - Push code changes → Figma (export updated icons to Figma)
|
|
7
|
+
* - Version tracking (track which version of icon is in Figma vs code)
|
|
8
|
+
* - Conflict detection (detect when both sides changed)
|
|
9
|
+
*
|
|
10
|
+
* This module provides the data structures and logic for syncing.
|
|
11
|
+
* The actual Figma API calls are delegated to callbacks so this
|
|
12
|
+
* module can work with any Figma plugin or REST API implementation.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```tsx
|
|
16
|
+
* const manager = createFigmaSyncManager({
|
|
17
|
+
* fetchFromFigma: async () => figmaIcons,
|
|
18
|
+
* pushToFigma: async (icons) => { ... },
|
|
19
|
+
* getLocalIcons: () => localIcons,
|
|
20
|
+
* onConflict: (diff) => 'prefer-local',
|
|
21
|
+
* });
|
|
22
|
+
*
|
|
23
|
+
* // Pull changes from Figma
|
|
24
|
+
* const result = await manager.pull();
|
|
25
|
+
*
|
|
26
|
+
* // Push changes to Figma
|
|
27
|
+
* const pushResult = await manager.push();
|
|
28
|
+
*
|
|
29
|
+
* // Full bidirectional sync
|
|
30
|
+
* const syncResult = await manager.sync();
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
/** Sync direction for a single icon. */
|
|
34
|
+
export type FigmaSyncDirection = 'figma-to-code' | 'code-to-figma' | 'both' | 'none';
|
|
35
|
+
/** Represents a tracked icon with version info. */
|
|
36
|
+
export interface FigmaTrackedIcon {
|
|
37
|
+
/** Icon name (e.g. 'NtdHome') */
|
|
38
|
+
name: string;
|
|
39
|
+
/** SVG path data (d attribute) */
|
|
40
|
+
svgPaths: string[];
|
|
41
|
+
/** ViewBox */
|
|
42
|
+
viewBox: string;
|
|
43
|
+
/** Version hash (content hash for change detection) */
|
|
44
|
+
hash: string;
|
|
45
|
+
/** Last sync timestamp */
|
|
46
|
+
lastSynced?: number;
|
|
47
|
+
/** Icon variant */
|
|
48
|
+
variant?: string;
|
|
49
|
+
/** Figma node ID (if known) */
|
|
50
|
+
figmaNodeId?: string;
|
|
51
|
+
/** Category */
|
|
52
|
+
category?: string;
|
|
53
|
+
}
|
|
54
|
+
/** Diff between Figma and local icon. */
|
|
55
|
+
export interface FigmaIconDiff {
|
|
56
|
+
/** Icon name */
|
|
57
|
+
name: string;
|
|
58
|
+
/** Change type */
|
|
59
|
+
status: 'added' | 'modified' | 'deleted' | 'conflict' | 'unchanged';
|
|
60
|
+
/** Direction of change */
|
|
61
|
+
direction: FigmaSyncDirection;
|
|
62
|
+
/** Local version (if exists) */
|
|
63
|
+
local?: FigmaTrackedIcon;
|
|
64
|
+
/** Figma version (if exists) */
|
|
65
|
+
figma?: FigmaTrackedIcon;
|
|
66
|
+
/** Previous synced hash (for conflict detection) */
|
|
67
|
+
lastSyncedHash?: string;
|
|
68
|
+
}
|
|
69
|
+
/** Configuration for the sync manager. */
|
|
70
|
+
export interface FigmaSyncConfig {
|
|
71
|
+
/** Fetch all icons from Figma (plugin API or REST) */
|
|
72
|
+
fetchFromFigma: () => Promise<FigmaTrackedIcon[]>;
|
|
73
|
+
/** Push icons to Figma */
|
|
74
|
+
pushToFigma: (icons: FigmaTrackedIcon[]) => Promise<void>;
|
|
75
|
+
/** Get all local icons */
|
|
76
|
+
getLocalIcons: () => FigmaTrackedIcon[];
|
|
77
|
+
/** Conflict resolution strategy */
|
|
78
|
+
onConflict?: (diff: FigmaIconDiff) => 'prefer-local' | 'prefer-figma' | 'skip';
|
|
79
|
+
/** Persistent storage for sync state */
|
|
80
|
+
storage?: FigmaSyncStorage;
|
|
81
|
+
}
|
|
82
|
+
/** Persistent storage interface for sync metadata. */
|
|
83
|
+
interface FigmaSyncStorage {
|
|
84
|
+
get: (key: string) => string | null;
|
|
85
|
+
set: (key: string, value: string) => void;
|
|
86
|
+
}
|
|
87
|
+
/** Result of a sync operation. */
|
|
88
|
+
export interface FigmaSyncResult {
|
|
89
|
+
/** Icons pulled from Figma */
|
|
90
|
+
pulled: FigmaIconDiff[];
|
|
91
|
+
/** Icons pushed to Figma */
|
|
92
|
+
pushed: FigmaIconDiff[];
|
|
93
|
+
/** Conflicts detected */
|
|
94
|
+
conflicts: FigmaIconDiff[];
|
|
95
|
+
/** Skipped icons */
|
|
96
|
+
skipped: FigmaIconDiff[];
|
|
97
|
+
/** Total sync time in ms */
|
|
98
|
+
duration: number;
|
|
99
|
+
/** Timestamp */
|
|
100
|
+
timestamp: number;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Computes a diff between two sets of tracked icons.
|
|
104
|
+
*
|
|
105
|
+
* @param localIcons - Icons in the codebase
|
|
106
|
+
* @param figmaIcons - Icons in Figma
|
|
107
|
+
* @param syncState - Previously synced hashes (for conflict detection)
|
|
108
|
+
* @returns Array of diffs
|
|
109
|
+
*/
|
|
110
|
+
export declare function diffIconSets(localIcons: FigmaTrackedIcon[], figmaIcons: FigmaTrackedIcon[], syncState?: Map<string, string>): FigmaIconDiff[];
|
|
111
|
+
/**
|
|
112
|
+
* Creates a FigmaSyncManager for bidirectional icon synchronization.
|
|
113
|
+
*/
|
|
114
|
+
export declare function createFigmaSyncManager(config: FigmaSyncConfig): FigmaSyncManager;
|
|
115
|
+
export declare class FigmaSyncManager {
|
|
116
|
+
private config;
|
|
117
|
+
private syncState;
|
|
118
|
+
constructor(config: FigmaSyncConfig);
|
|
119
|
+
/** Pull changes from Figma → codebase. */
|
|
120
|
+
pull(): Promise<FigmaSyncResult>;
|
|
121
|
+
/** Push changes from codebase → Figma. */
|
|
122
|
+
push(): Promise<FigmaSyncResult>;
|
|
123
|
+
/** Full bidirectional sync. */
|
|
124
|
+
sync(): Promise<FigmaSyncResult>;
|
|
125
|
+
/** Get current diff without making changes. */
|
|
126
|
+
diff(): Promise<FigmaIconDiff[]>;
|
|
127
|
+
/** Get sync history from storage. */
|
|
128
|
+
getSyncState(): Map<string, string>;
|
|
129
|
+
/** Reset sync state (forces full re-sync on next operation). */
|
|
130
|
+
resetSyncState(): void;
|
|
131
|
+
private updateSyncHash;
|
|
132
|
+
private loadSyncState;
|
|
133
|
+
private saveSyncState;
|
|
134
|
+
}
|
|
135
|
+
export {};
|