@mcp-consultant-tools/powerplatform-core 26.0.0-beta.2

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 (153) hide show
  1. package/build/auth/index.d.ts +64 -0
  2. package/build/auth/index.d.ts.map +1 -0
  3. package/build/auth/index.js +39 -0
  4. package/build/auth/index.js.map +1 -0
  5. package/build/auth/interactive-auth.d.ts +60 -0
  6. package/build/auth/interactive-auth.d.ts.map +1 -0
  7. package/build/auth/interactive-auth.js +429 -0
  8. package/build/auth/interactive-auth.js.map +1 -0
  9. package/build/auth/service-principal-auth.d.ts +26 -0
  10. package/build/auth/service-principal-auth.d.ts.map +1 -0
  11. package/build/auth/service-principal-auth.js +60 -0
  12. package/build/auth/service-principal-auth.js.map +1 -0
  13. package/build/auth/token-cache.d.ts +40 -0
  14. package/build/auth/token-cache.d.ts.map +1 -0
  15. package/build/auth/token-cache.js +108 -0
  16. package/build/auth/token-cache.js.map +1 -0
  17. package/build/client/PowerPlatformClient.d.ts +78 -0
  18. package/build/client/PowerPlatformClient.d.ts.map +1 -0
  19. package/build/client/PowerPlatformClient.js +198 -0
  20. package/build/client/PowerPlatformClient.js.map +1 -0
  21. package/build/client/index.d.ts +6 -0
  22. package/build/client/index.d.ts.map +1 -0
  23. package/build/client/index.js +6 -0
  24. package/build/client/index.js.map +1 -0
  25. package/build/client/types.d.ts +300 -0
  26. package/build/client/types.d.ts.map +1 -0
  27. package/build/client/types.js +5 -0
  28. package/build/client/types.js.map +1 -0
  29. package/build/index.d.ts +36 -0
  30. package/build/index.d.ts.map +1 -0
  31. package/build/index.js +55 -0
  32. package/build/index.js.map +1 -0
  33. package/build/services/AppManagementService.d.ts +95 -0
  34. package/build/services/AppManagementService.d.ts.map +1 -0
  35. package/build/services/AppManagementService.js +322 -0
  36. package/build/services/AppManagementService.js.map +1 -0
  37. package/build/services/AppService.d.ts +39 -0
  38. package/build/services/AppService.d.ts.map +1 -0
  39. package/build/services/AppService.js +173 -0
  40. package/build/services/AppService.js.map +1 -0
  41. package/build/services/AttributeService.d.ts +28 -0
  42. package/build/services/AttributeService.d.ts.map +1 -0
  43. package/build/services/AttributeService.js +86 -0
  44. package/build/services/AttributeService.js.map +1 -0
  45. package/build/services/BusinessRuleService.d.ts +22 -0
  46. package/build/services/BusinessRuleService.d.ts.map +1 -0
  47. package/build/services/BusinessRuleService.js +85 -0
  48. package/build/services/BusinessRuleService.js.map +1 -0
  49. package/build/services/DataService.d.ts +53 -0
  50. package/build/services/DataService.d.ts.map +1 -0
  51. package/build/services/DataService.js +204 -0
  52. package/build/services/DataService.js.map +1 -0
  53. package/build/services/DependencyService.d.ts +27 -0
  54. package/build/services/DependencyService.d.ts.map +1 -0
  55. package/build/services/DependencyService.js +47 -0
  56. package/build/services/DependencyService.js.map +1 -0
  57. package/build/services/EntityService.d.ts +42 -0
  58. package/build/services/EntityService.d.ts.map +1 -0
  59. package/build/services/EntityService.js +132 -0
  60. package/build/services/EntityService.js.map +1 -0
  61. package/build/services/FlowService.d.ts +55 -0
  62. package/build/services/FlowService.d.ts.map +1 -0
  63. package/build/services/FlowService.js +608 -0
  64. package/build/services/FlowService.js.map +1 -0
  65. package/build/services/FormService.d.ts +36 -0
  66. package/build/services/FormService.d.ts.map +1 -0
  67. package/build/services/FormService.js +55 -0
  68. package/build/services/FormService.js.map +1 -0
  69. package/build/services/MetadataService.d.ts +63 -0
  70. package/build/services/MetadataService.d.ts.map +1 -0
  71. package/build/services/MetadataService.js +176 -0
  72. package/build/services/MetadataService.js.map +1 -0
  73. package/build/services/OptionSetService.d.ts +40 -0
  74. package/build/services/OptionSetService.d.ts.map +1 -0
  75. package/build/services/OptionSetService.js +91 -0
  76. package/build/services/OptionSetService.js.map +1 -0
  77. package/build/services/PluginDeploymentService.d.ts +102 -0
  78. package/build/services/PluginDeploymentService.d.ts.map +1 -0
  79. package/build/services/PluginDeploymentService.js +412 -0
  80. package/build/services/PluginDeploymentService.js.map +1 -0
  81. package/build/services/PluginService.d.ts +61 -0
  82. package/build/services/PluginService.d.ts.map +1 -0
  83. package/build/services/PluginService.js +289 -0
  84. package/build/services/PluginService.js.map +1 -0
  85. package/build/services/PublishingService.d.ts +37 -0
  86. package/build/services/PublishingService.d.ts.map +1 -0
  87. package/build/services/PublishingService.js +65 -0
  88. package/build/services/PublishingService.js.map +1 -0
  89. package/build/services/RelationshipService.d.ts +29 -0
  90. package/build/services/RelationshipService.d.ts.map +1 -0
  91. package/build/services/RelationshipService.js +46 -0
  92. package/build/services/RelationshipService.js.map +1 -0
  93. package/build/services/SolutionService.d.ts +60 -0
  94. package/build/services/SolutionService.d.ts.map +1 -0
  95. package/build/services/SolutionService.js +125 -0
  96. package/build/services/SolutionService.js.map +1 -0
  97. package/build/services/ValidationService.d.ts +31 -0
  98. package/build/services/ValidationService.d.ts.map +1 -0
  99. package/build/services/ValidationService.js +391 -0
  100. package/build/services/ValidationService.js.map +1 -0
  101. package/build/services/ViewService.d.ts +36 -0
  102. package/build/services/ViewService.d.ts.map +1 -0
  103. package/build/services/ViewService.js +55 -0
  104. package/build/services/ViewService.js.map +1 -0
  105. package/build/services/WebResourceService.d.ts +40 -0
  106. package/build/services/WebResourceService.d.ts.map +1 -0
  107. package/build/services/WebResourceService.js +64 -0
  108. package/build/services/WebResourceService.js.map +1 -0
  109. package/build/services/WorkflowManagementService.d.ts +157 -0
  110. package/build/services/WorkflowManagementService.d.ts.map +1 -0
  111. package/build/services/WorkflowManagementService.js +567 -0
  112. package/build/services/WorkflowManagementService.js.map +1 -0
  113. package/build/services/WorkflowService.d.ts +28 -0
  114. package/build/services/WorkflowService.d.ts.map +1 -0
  115. package/build/services/WorkflowService.js +285 -0
  116. package/build/services/WorkflowService.js.map +1 -0
  117. package/build/services/index.d.ts +29 -0
  118. package/build/services/index.d.ts.map +1 -0
  119. package/build/services/index.js +31 -0
  120. package/build/services/index.js.map +1 -0
  121. package/build/utils/auditLogger.d.ts +76 -0
  122. package/build/utils/auditLogger.d.ts.map +1 -0
  123. package/build/utils/auditLogger.js +110 -0
  124. package/build/utils/auditLogger.js.map +1 -0
  125. package/build/utils/best-practices-formatters.d.ts +26 -0
  126. package/build/utils/best-practices-formatters.d.ts.map +1 -0
  127. package/build/utils/best-practices-formatters.js +238 -0
  128. package/build/utils/best-practices-formatters.js.map +1 -0
  129. package/build/utils/bestPractices.d.ts +150 -0
  130. package/build/utils/bestPractices.d.ts.map +1 -0
  131. package/build/utils/bestPractices.js +324 -0
  132. package/build/utils/bestPractices.js.map +1 -0
  133. package/build/utils/iconManager.d.ts +84 -0
  134. package/build/utils/iconManager.d.ts.map +1 -0
  135. package/build/utils/iconManager.js +338 -0
  136. package/build/utils/iconManager.js.map +1 -0
  137. package/build/utils/index.d.ts +11 -0
  138. package/build/utils/index.d.ts.map +1 -0
  139. package/build/utils/index.js +18 -0
  140. package/build/utils/index.js.map +1 -0
  141. package/build/utils/prompt-templates.d.ts +9 -0
  142. package/build/utils/prompt-templates.d.ts.map +1 -0
  143. package/build/utils/prompt-templates.js +31 -0
  144. package/build/utils/prompt-templates.js.map +1 -0
  145. package/build/utils/publisherConfig.d.ts +33 -0
  146. package/build/utils/publisherConfig.d.ts.map +1 -0
  147. package/build/utils/publisherConfig.js +54 -0
  148. package/build/utils/publisherConfig.js.map +1 -0
  149. package/build/utils/rate-limiter.d.ts +108 -0
  150. package/build/utils/rate-limiter.d.ts.map +1 -0
  151. package/build/utils/rate-limiter.js +242 -0
  152. package/build/utils/rate-limiter.js.map +1 -0
  153. package/package.json +65 -0
@@ -0,0 +1,324 @@
1
+ /**
2
+ * Best Practices Validation Module
3
+ *
4
+ * Hard-coded SmartImpact CRM best practices for entity and attribute customization.
5
+ * These rules are enforced during entity and attribute creation/update operations.
6
+ */
7
+ /**
8
+ * Hard-coded best practices rules for SmartImpact CRM customizations
9
+ */
10
+ export const BEST_PRACTICES = {
11
+ publisher: {
12
+ prefix: 'sic_',
13
+ name: 'SmartImpactCustomer',
14
+ optionValuePrefix: 15743,
15
+ },
16
+ entity: {
17
+ ownershipType: {
18
+ allowed: ['UserOwned', 'TeamOwned'],
19
+ forbidden: ['OrganizationOwned'],
20
+ default: 'UserOwned',
21
+ },
22
+ prefix: 'sic_',
23
+ refDataInfix: 'ref_',
24
+ caseRule: 'lowercase',
25
+ },
26
+ attribute: {
27
+ lookupSuffix: 'id',
28
+ caseRule: 'lowercase',
29
+ avoidBooleans: true,
30
+ dateTimeDefaultBehavior: 'TimeZoneIndependent',
31
+ },
32
+ requiredColumns: {
33
+ allTables: [
34
+ {
35
+ schemaName: 'sic_updatedbyprocess',
36
+ displayName: 'Updated by process',
37
+ description: 'This field is updated, each time an automated process updates this record.',
38
+ type: 'String',
39
+ maxLength: 4000,
40
+ },
41
+ ],
42
+ refDataTables: [
43
+ {
44
+ schemaName: 'sic_startdate',
45
+ displayName: 'Start Date',
46
+ description: 'The date this reference data record started being used.',
47
+ type: 'DateTime',
48
+ format: 'DateOnly',
49
+ behavior: 'TimeZoneIndependent',
50
+ },
51
+ {
52
+ schemaName: 'sic_enddate',
53
+ displayName: 'End Date',
54
+ description: 'The date this reference data record stopped being used.',
55
+ type: 'DateTime',
56
+ format: 'DateOnly',
57
+ behavior: 'TimeZoneIndependent',
58
+ },
59
+ {
60
+ schemaName: 'sic_description',
61
+ displayName: 'Description',
62
+ description: 'Useful information about this reference data record.',
63
+ type: 'Memo',
64
+ maxLength: 20000,
65
+ },
66
+ {
67
+ schemaName: 'sic_code',
68
+ displayName: 'Code',
69
+ description: 'Code to identify the record, instead of GUID',
70
+ type: 'String',
71
+ maxLength: 100,
72
+ },
73
+ ],
74
+ },
75
+ form: {
76
+ firstColumnMustBeName: true,
77
+ standardColumnOrder: [
78
+ 'name',
79
+ 'createdon',
80
+ 'createdby',
81
+ 'modifiedon',
82
+ 'modifiedby',
83
+ 'statuscode',
84
+ 'status',
85
+ ],
86
+ colorPalette: {
87
+ amber: '#ffd175',
88
+ green: '#8ed483',
89
+ red: '#ff8c8c',
90
+ grey: '#d1d1d1',
91
+ },
92
+ timelineActivityLimit: 10,
93
+ },
94
+ status: {
95
+ preferGlobalOptionSets: true,
96
+ avoidOOTBStateStatus: true,
97
+ },
98
+ };
99
+ /**
100
+ * Best Practices Validator Class
101
+ */
102
+ export class BestPracticesValidator {
103
+ /**
104
+ * Validate entity naming conventions
105
+ */
106
+ validateEntityName(schemaName, isRefData) {
107
+ const rules = BEST_PRACTICES.entity;
108
+ const issues = [];
109
+ const warnings = [];
110
+ if (schemaName !== schemaName.toLowerCase()) {
111
+ issues.push(`Entity schema name must be all lowercase. Got: "${schemaName}"`);
112
+ }
113
+ if (!schemaName.startsWith(rules.prefix)) {
114
+ issues.push(`Entity schema name must start with publisher prefix "${rules.prefix}". Got: "${schemaName}"`);
115
+ }
116
+ else if (isRefData) {
117
+ const expectedPattern = rules.prefix + rules.refDataInfix;
118
+ if (!schemaName.startsWith(expectedPattern)) {
119
+ issues.push(`RefData entity schema name must follow pattern "${expectedPattern}<tablename>". ` +
120
+ `Example: ${expectedPattern}cancellationreason. Got: "${schemaName}"`);
121
+ }
122
+ }
123
+ return {
124
+ isValid: issues.length === 0,
125
+ issues,
126
+ warnings,
127
+ };
128
+ }
129
+ /**
130
+ * Validate attribute naming conventions
131
+ */
132
+ validateAttributeName(schemaName, isLookup) {
133
+ const rules = BEST_PRACTICES.attribute;
134
+ const issues = [];
135
+ const warnings = [];
136
+ if (schemaName !== schemaName.toLowerCase()) {
137
+ issues.push(`Attribute schema name must be all lowercase. Got: "${schemaName}"`);
138
+ }
139
+ if (!schemaName.startsWith(BEST_PRACTICES.publisher.prefix)) {
140
+ issues.push(`Attribute schema name must start with "${BEST_PRACTICES.publisher.prefix}". Got: "${schemaName}"`);
141
+ }
142
+ if (isLookup && !schemaName.endsWith(rules.lookupSuffix)) {
143
+ warnings.push(`Lookup attribute should end with "${rules.lookupSuffix}". Got: "${schemaName}"`);
144
+ }
145
+ return {
146
+ isValid: issues.length === 0,
147
+ issues,
148
+ warnings,
149
+ };
150
+ }
151
+ /**
152
+ * Validate entity ownership type
153
+ */
154
+ validateOwnershipType(ownershipType) {
155
+ const rules = BEST_PRACTICES.entity.ownershipType;
156
+ const issues = [];
157
+ if (rules.forbidden.includes(ownershipType)) {
158
+ issues.push(`Ownership type "${ownershipType}" is forbidden. Use "${rules.default}" instead.`);
159
+ }
160
+ if (!rules.allowed.includes(ownershipType)) {
161
+ issues.push(`Ownership type "${ownershipType}" is not in allowed list: ${rules.allowed.join(', ')}`);
162
+ }
163
+ return {
164
+ isValid: issues.length === 0,
165
+ issues,
166
+ warnings: [],
167
+ };
168
+ }
169
+ /**
170
+ * Check if required columns are present
171
+ */
172
+ validateRequiredColumns(existingColumns, isRefData) {
173
+ const rules = BEST_PRACTICES.requiredColumns;
174
+ const issues = [];
175
+ const missingColumns = [];
176
+ for (const column of rules.allTables) {
177
+ if (!existingColumns.includes(column.schemaName)) {
178
+ missingColumns.push(column);
179
+ issues.push(`Missing required column: ${column.schemaName} (${column.displayName})`);
180
+ }
181
+ }
182
+ if (isRefData) {
183
+ for (const column of rules.refDataTables) {
184
+ if (!existingColumns.includes(column.schemaName)) {
185
+ missingColumns.push(column);
186
+ issues.push(`Missing required RefData column: ${column.schemaName} (${column.displayName})`);
187
+ }
188
+ }
189
+ }
190
+ return {
191
+ isValid: issues.length === 0,
192
+ issues,
193
+ warnings: [],
194
+ missingColumns,
195
+ };
196
+ }
197
+ /**
198
+ * Validate boolean usage (discouraged)
199
+ */
200
+ validateBooleanUsage(attributeType, schemaName) {
201
+ const issues = [];
202
+ const warnings = [];
203
+ if (attributeType === 'Boolean' && BEST_PRACTICES.attribute.avoidBooleans) {
204
+ warnings.push(`Boolean attribute "${schemaName}" should be avoided. ` +
205
+ `Consider using a picklist with explicit values instead for better clarity.`);
206
+ }
207
+ return {
208
+ isValid: true,
209
+ issues,
210
+ warnings,
211
+ };
212
+ }
213
+ /**
214
+ * Validate DateTime behavior
215
+ */
216
+ validateDateTimeBehavior(behavior) {
217
+ const issues = [];
218
+ const warnings = [];
219
+ const defaultBehavior = BEST_PRACTICES.attribute.dateTimeDefaultBehavior;
220
+ if (behavior && behavior !== defaultBehavior) {
221
+ warnings.push(`DateTime behavior "${behavior}" differs from recommended "${defaultBehavior}". ` +
222
+ `Consider using "${defaultBehavior}" for consistency.`);
223
+ }
224
+ return {
225
+ isValid: true,
226
+ issues,
227
+ warnings,
228
+ };
229
+ }
230
+ /**
231
+ * Get required columns for entity type
232
+ */
233
+ getRequiredColumns(isRefData) {
234
+ const columns = [...BEST_PRACTICES.requiredColumns.allTables];
235
+ if (isRefData) {
236
+ columns.push(...BEST_PRACTICES.requiredColumns.refDataTables);
237
+ }
238
+ return columns;
239
+ }
240
+ /**
241
+ * Validate option set value prefix
242
+ */
243
+ validateOptionSetValuePrefix(value) {
244
+ const issues = [];
245
+ const warnings = [];
246
+ const expectedPrefix = BEST_PRACTICES.publisher.optionValuePrefix;
247
+ const valueStr = value.toString();
248
+ const prefixStr = expectedPrefix.toString();
249
+ if (!valueStr.startsWith(prefixStr)) {
250
+ warnings.push(`Option set value ${value} does not start with publisher prefix ${expectedPrefix}. ` +
251
+ `Values should start with ${prefixStr} for consistency.`);
252
+ }
253
+ return {
254
+ isValid: true,
255
+ issues,
256
+ warnings,
257
+ };
258
+ }
259
+ /**
260
+ * Generate next option set value with proper prefix
261
+ */
262
+ getNextOptionSetValue(existingValues) {
263
+ const prefix = BEST_PRACTICES.publisher.optionValuePrefix;
264
+ const prefixStr = prefix.toString();
265
+ const ourValues = existingValues
266
+ .filter((v) => v.toString().startsWith(prefixStr))
267
+ .sort((a, b) => b - a);
268
+ if (ourValues.length === 0) {
269
+ return prefix * 10000 + 1;
270
+ }
271
+ return ourValues[0] + 1;
272
+ }
273
+ /**
274
+ * Comprehensive entity validation
275
+ */
276
+ validateEntity(params) {
277
+ const allIssues = [];
278
+ const allWarnings = [];
279
+ let missingColumns;
280
+ const nameResult = this.validateEntityName(params.schemaName, params.isRefData);
281
+ allIssues.push(...nameResult.issues);
282
+ allWarnings.push(...nameResult.warnings);
283
+ const ownershipResult = this.validateOwnershipType(params.ownershipType);
284
+ allIssues.push(...ownershipResult.issues);
285
+ allWarnings.push(...ownershipResult.warnings);
286
+ if (params.existingColumns) {
287
+ const columnsResult = this.validateRequiredColumns(params.existingColumns, params.isRefData);
288
+ allIssues.push(...columnsResult.issues);
289
+ allWarnings.push(...columnsResult.warnings);
290
+ missingColumns = columnsResult.missingColumns;
291
+ }
292
+ return {
293
+ isValid: allIssues.length === 0,
294
+ issues: allIssues,
295
+ warnings: allWarnings,
296
+ missingColumns,
297
+ };
298
+ }
299
+ /**
300
+ * Comprehensive attribute validation
301
+ */
302
+ validateAttribute(params) {
303
+ const allIssues = [];
304
+ const allWarnings = [];
305
+ const isLookup = params.attributeType === 'Lookup' || params.attributeType === 'Customer';
306
+ const nameResult = this.validateAttributeName(params.schemaName, isLookup);
307
+ allIssues.push(...nameResult.issues);
308
+ allWarnings.push(...nameResult.warnings);
309
+ const boolResult = this.validateBooleanUsage(params.attributeType, params.schemaName);
310
+ allWarnings.push(...boolResult.warnings);
311
+ if (params.attributeType === 'DateTime' && params.dateTimeBehavior) {
312
+ const behaviorResult = this.validateDateTimeBehavior(params.dateTimeBehavior);
313
+ allWarnings.push(...behaviorResult.warnings);
314
+ }
315
+ return {
316
+ isValid: allIssues.length === 0,
317
+ issues: allIssues,
318
+ warnings: allWarnings,
319
+ };
320
+ }
321
+ }
322
+ // Export singleton instance
323
+ export const bestPracticesValidator = new BestPracticesValidator();
324
+ //# sourceMappingURL=bestPractices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bestPractices.js","sourceRoot":"","sources":["../../src/utils/bestPractices.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Icon Management Module
3
+ *
4
+ * Integrates with Fluent UI System Icons for entity icon management.
5
+ * Fetches SVG icons from GitHub and uploads them as web resources.
6
+ */
7
+ export interface IconSuggestion {
8
+ name: string;
9
+ fileName: string;
10
+ url: string;
11
+ category: string;
12
+ }
13
+ export interface IconUploadResult {
14
+ webResourceId: string;
15
+ webResourceName: string;
16
+ iconVectorName: string;
17
+ success: boolean;
18
+ error?: string;
19
+ }
20
+ /**
21
+ * Icon Manager Class
22
+ */
23
+ export declare class IconManager {
24
+ private baseUrl;
25
+ private cache;
26
+ constructor();
27
+ /**
28
+ * Suggest icons based on entity name or type
29
+ */
30
+ suggestIcons(entityName: string): IconSuggestion[];
31
+ /**
32
+ * Populate full URLs for icon suggestions
33
+ */
34
+ private populateUrls;
35
+ /**
36
+ * Parse icon filename and construct GitHub path
37
+ * Converts: people_community_24_filled.svg
38
+ * To: assets/People Community/SVG/ic_fluent_people_community_24_filled.svg
39
+ */
40
+ private constructFluentIconPath;
41
+ /**
42
+ * Fetch SVG icon from Fluent UI GitHub repository
43
+ */
44
+ fetchIcon(fileName: string): Promise<string>;
45
+ /**
46
+ * Generate web resource name for icon
47
+ */
48
+ generateWebResourceName(entitySchemaName: string, iconName: string): string;
49
+ /**
50
+ * Generate icon vector name for EntityMetadata
51
+ * Uses $webresource: directive which is the correct syntax for Dynamics 365
52
+ * This creates a solution dependency and tells the system to look up the web resource by name
53
+ */
54
+ generateIconVectorName(webResourceName: string): string;
55
+ /**
56
+ * Validate icon SVG content
57
+ */
58
+ validateIconSvg(svg: string): {
59
+ valid: boolean;
60
+ error?: string;
61
+ };
62
+ /**
63
+ * Get all available icon categories
64
+ */
65
+ getCategories(): string[];
66
+ /**
67
+ * Search icons by name
68
+ */
69
+ searchIcons(searchTerm: string): IconSuggestion[];
70
+ /**
71
+ * Get icons by category
72
+ */
73
+ getIconsByCategory(category: string): IconSuggestion[];
74
+ /**
75
+ * Build custom icon URL for specific size/style
76
+ */
77
+ buildIconUrl(iconName: string, size?: number, style?: 'filled' | 'regular'): string;
78
+ /**
79
+ * Clear icon cache
80
+ */
81
+ clearCache(): void;
82
+ }
83
+ export declare const iconManager: IconManager;
84
+ //# sourceMappingURL=iconManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iconManager.d.ts","sourceRoot":"","sources":["../../src/utils/iconManager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAuID;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAkC;;IAM/C;;OAEG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,EAAE;IAsBlD;;OAEG;IACH,OAAO,CAAC,YAAY;IAkBpB;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;IAuC/B;;OAEG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAsClD;;OAEG;IACH,uBAAuB,CAAC,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAQ3E;;;;OAIG;IACH,sBAAsB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM;IAIvD;;OAEG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAiBhE;;OAEG;IACH,aAAa,IAAI,MAAM,EAAE;IAQzB;;OAEG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,EAAE;IAkBjD;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,EAAE;IActD;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,EAAE,KAAK,GAAE,QAAQ,GAAG,SAAoB,GAAG,MAAM;IAYjG;;OAEG;IACH,UAAU,IAAI,IAAI;CAGnB;AAGD,eAAO,MAAM,WAAW,aAAoB,CAAC"}