@progress/kendo-angular-toolbar 19.0.0-develop.26 → 19.0.0-develop.28

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/codemods/utils.js CHANGED
@@ -3,54 +3,25 @@
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
5
  "use strict";
6
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
- if (k2 === undefined) k2 = k;
8
- var desc = Object.getOwnPropertyDescriptor(m, k);
9
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
- desc = { enumerable: true, get: function() { return m[k]; } };
11
- }
12
- Object.defineProperty(o, k2, desc);
13
- }) : (function(o, m, k, k2) {
14
- if (k2 === undefined) k2 = k;
15
- o[k2] = m[k];
16
- }));
17
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
- Object.defineProperty(o, "default", { enumerable: true, value: v });
19
- }) : function(o, v) {
20
- o["default"] = v;
21
- });
22
- var __importStar = (this && this.__importStar) || function (mod) {
23
- if (mod && mod.__esModule) return mod;
24
- var result = {};
25
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
26
- __setModuleDefault(result, mod);
27
- return result;
28
- };
29
6
  var __importDefault = (this && this.__importDefault) || function (mod) {
30
7
  return (mod && mod.__esModule) ? mod : { "default": mod };
31
8
  };
32
9
  Object.defineProperty(exports, "__esModule", { value: true });
33
- exports.htmlAttributeValueTransformer = exports.htmlAttributeTransformer = exports.tsPropertyTransformer = exports.tsPropertyValueTransformer = exports.templateAttributeTransformer = exports.templateAttributeValueTransformer = void 0;
10
+ exports.tsComponentPropertyRemoval = exports.tsPropertyRemoval = exports.templateAttributeRemoval = exports.htmlAttributeRemoval = exports.htmlAttributeValueTransformer = exports.tsPropertyValueTransformer = exports.templateAttributeValueTransformer = exports.htmlAttributeTransformer = exports.htmlBoundAttributeTransformer = exports.htmlStaticAttributeTransformer = exports.tsPropertyTransformer = exports.templateAttributeTransformer = exports.templateBoundAttributeTransformer = exports.templateStaticAttributeTransformer = void 0;
34
11
  const node_html_parser_1 = __importDefault(require("node-html-parser"));
35
- const fs = __importStar(require("fs"));
36
- const templateAttributeValueTransformer = (root, tagName, attributeName, oldAttributeValue, newAttributeValue) => {
12
+ const templateStaticAttributeTransformer = (root, tagName, attributeName, newAttributeName) => {
37
13
  const elements = Array.from(root.getElementsByTagName(tagName)) || [];
38
14
  for (const element of elements) {
39
- // Handle bound attributes (e.g., [showText]="'overflow'")
40
- const boundAttr = element.getAttribute(`[${attributeName}]`);
41
- if (boundAttr === `'${oldAttributeValue}'`) {
42
- // For bound literals like [showText]="'overflow'" or [showText]="\"overflow\""
43
- element.setAttribute(`[${attributeName}]`, boundAttr.replace(oldAttributeValue, newAttributeValue));
44
- }
45
15
  // Handle static attributes like title="foo"
46
- const staticAttrValue = element.getAttribute(attributeName);
47
- if (staticAttrValue === oldAttributeValue) {
48
- element.setAttribute(attributeName, newAttributeValue);
16
+ const staticAttr = element.getAttribute(attributeName);
17
+ if (staticAttr) {
18
+ element.setAttribute(newAttributeName, staticAttr);
19
+ element.removeAttribute(attributeName);
49
20
  }
50
21
  }
51
22
  };
52
- exports.templateAttributeValueTransformer = templateAttributeValueTransformer;
53
- const templateAttributeTransformer = (root, tagName, attributeName, newAttributeName) => {
23
+ exports.templateStaticAttributeTransformer = templateStaticAttributeTransformer;
24
+ const templateBoundAttributeTransformer = (root, tagName, attributeName, newAttributeName) => {
54
25
  const elements = Array.from(root.getElementsByTagName(tagName)) || [];
55
26
  for (const element of elements) {
56
27
  // Handle bound attributes like [title]="foo" or [title]="'foo'"
@@ -59,93 +30,14 @@ const templateAttributeTransformer = (root, tagName, attributeName, newAttribute
59
30
  element.setAttribute(`[${newAttributeName}]`, boundAttr);
60
31
  element.removeAttribute(`[${attributeName}]`);
61
32
  }
62
- // Handle static attributes like title="foo"
63
- const staticAttr = element.getAttribute(attributeName);
64
- if (staticAttr) {
65
- element.setAttribute(newAttributeName, staticAttr);
66
- element.removeAttribute(attributeName);
67
- }
68
33
  }
69
34
  };
70
- exports.templateAttributeTransformer = templateAttributeTransformer;
71
- const tsPropertyValueTransformer = (root, j, typeName, oldValue, newValue) => {
72
- // 1. Find all class properties with the specified type
73
- root
74
- .find(j.ClassProperty)
75
- .filter(path => {
76
- // Check if the property has a type annotation matching the specified type
77
- if (path.node.typeAnnotation &&
78
- path.node.typeAnnotation.typeAnnotation &&
79
- path.node.typeAnnotation.typeAnnotation.type === 'TSTypeReference' &&
80
- path.node.typeAnnotation.typeAnnotation.typeName &&
81
- path.node.typeAnnotation.typeAnnotation.typeName.type === 'Identifier' &&
82
- path.node.typeAnnotation.typeAnnotation.typeName.name === typeName) {
83
- return true;
84
- }
85
- return false;
86
- })
87
- .forEach(path => {
88
- // Update the value if it matches the old value
89
- if (path.node.value &&
90
- path.node.value.type === 'StringLiteral' &&
91
- path.node.value.value === oldValue) {
92
- path.node.value.value = newValue;
93
- }
94
- });
95
- // 2. Find all assignments to variables of the specified type
96
- const variablesOfType = new Set();
97
- // First, collect all variables with the specified type
98
- root
99
- .find(j.VariableDeclarator)
100
- .filter(path => {
101
- if (path.node.id.type === 'Identifier' &&
102
- path.node.id.typeAnnotation &&
103
- path.node.id.typeAnnotation.typeAnnotation &&
104
- path.node.id.typeAnnotation.typeAnnotation.type === 'TSTypeReference' &&
105
- path.node.id.typeAnnotation.typeAnnotation.typeName.type === 'Identifier' &&
106
- path.node.id.typeAnnotation.typeAnnotation.typeName.name === typeName) {
107
- return true;
108
- }
109
- return false;
110
- })
111
- .forEach(path => {
112
- if (path.node.id.type === 'Identifier') {
113
- variablesOfType.add(path.node.id.name);
114
- // Also update the initial value if it matches
115
- if (path.node.init &&
116
- path.node.init.type === 'StringLiteral' &&
117
- path.node.init.value === oldValue) {
118
- path.node.init.value = newValue;
119
- }
120
- }
121
- });
122
- // 3. Update literals in assignment expressions
123
- root
124
- .find(j.AssignmentExpression)
125
- .filter(path => {
126
- // Only process string literals with the old value
127
- return path.node.right.type === 'StringLiteral' &&
128
- path.node.right.value === oldValue;
129
- })
130
- .forEach(path => {
131
- // Update the value
132
- path.node.right.value = newValue;
133
- });
134
- // 4. Also look for string literals in attributes within JSX elements
135
- root
136
- .find(j.JSXAttribute, {
137
- value: {
138
- type: 'StringLiteral',
139
- value: oldValue
140
- }
141
- })
142
- .forEach(path => {
143
- if (path.node.value?.type === 'StringLiteral') {
144
- path.node.value.value = newValue;
145
- }
146
- });
35
+ exports.templateBoundAttributeTransformer = templateBoundAttributeTransformer;
36
+ const templateAttributeTransformer = (root, tagName, attributeName, newAttributeName) => {
37
+ (0, exports.templateBoundAttributeTransformer)(root, tagName, attributeName, newAttributeName);
38
+ (0, exports.templateStaticAttributeTransformer)(root, tagName, attributeName, newAttributeName);
147
39
  };
148
- exports.tsPropertyValueTransformer = tsPropertyValueTransformer;
40
+ exports.templateAttributeTransformer = templateAttributeTransformer;
149
41
  const tsPropertyTransformer = (root, j, componentType, propertyName, newPropertyName) => {
150
42
  // Find all class properties that are of type DropDownListComponent
151
43
  const properties = new Set();
@@ -231,30 +123,143 @@ const tsPropertyTransformer = (root, j, componentType, propertyName, newProperty
231
123
  });
232
124
  };
233
125
  exports.tsPropertyTransformer = tsPropertyTransformer;
234
- const htmlAttributeTransformer = (fileInfo, tagName, oldName, newName) => {
235
- const filePath = fileInfo.path;
126
+ const htmlStaticAttributeTransformer = (fileInfo, tagName, oldName, newName) => {
236
127
  const fileContent = fileInfo.source;
237
128
  const root = (0, node_html_parser_1.default)(fileContent);
238
- // Locate elements using [oldName] binding and update the old attribute to the new one
129
+ let modified = false;
239
130
  const elements = Array.from(root.querySelectorAll(tagName));
240
131
  for (const element of elements) {
241
- const boundTitleAttr = element.getAttribute(`[${oldName}]`);
242
- if (boundTitleAttr) {
243
- element.removeAttribute(`[${oldName}]`);
244
- element.setAttribute(`[${newName}]`, boundTitleAttr);
245
- }
246
- const staticTitleAttr = element.getAttribute(oldName);
247
- if (staticTitleAttr) {
132
+ const staticAttr = element.getAttribute(oldName);
133
+ if (staticAttr) {
248
134
  element.removeAttribute(oldName);
249
- element.setAttribute(newName, staticTitleAttr);
135
+ element.setAttribute(newName, staticAttr);
136
+ modified = true;
250
137
  }
251
138
  }
252
- // Write the updated content back to the file
253
- const updatedContent = root.toString();
254
- fs.writeFileSync(filePath, updatedContent, 'utf-8');
255
- return;
139
+ if (modified) {
140
+ return root.toString();
141
+ }
142
+ return fileContent;
143
+ };
144
+ exports.htmlStaticAttributeTransformer = htmlStaticAttributeTransformer;
145
+ const htmlBoundAttributeTransformer = (fileInfo, tagName, oldName, newName) => {
146
+ const fileContent = fileInfo.source;
147
+ const root = (0, node_html_parser_1.default)(fileContent);
148
+ let modified = false;
149
+ const elements = Array.from(root.querySelectorAll(tagName));
150
+ for (const element of elements) {
151
+ const boundAttr = element.getAttribute(`[${oldName}]`);
152
+ if (boundAttr) {
153
+ element.removeAttribute(`[${oldName}]`);
154
+ element.setAttribute(`[${newName}]`, boundAttr);
155
+ modified = true;
156
+ }
157
+ }
158
+ if (modified) {
159
+ return root.toString();
160
+ }
161
+ return fileContent;
162
+ };
163
+ exports.htmlBoundAttributeTransformer = htmlBoundAttributeTransformer;
164
+ const htmlAttributeTransformer = (fileInfo, tagName, oldName, newName) => {
165
+ let content = (0, exports.htmlBoundAttributeTransformer)(fileInfo, tagName, oldName, newName);
166
+ content = (0, exports.htmlStaticAttributeTransformer)({ path: fileInfo.path, source: content }, tagName, oldName, newName);
167
+ return content;
256
168
  };
257
169
  exports.htmlAttributeTransformer = htmlAttributeTransformer;
170
+ const templateAttributeValueTransformer = (root, tagName, attributeName, oldAttributeValue, newAttributeValue) => {
171
+ const elements = Array.from(root.getElementsByTagName(tagName)) || [];
172
+ for (const element of elements) {
173
+ // Handle bound attributes (e.g., [showText]="'overflow'")
174
+ const boundAttr = element.getAttribute(`[${attributeName}]`);
175
+ if (boundAttr === `'${oldAttributeValue}'`) {
176
+ // For bound literals like [showText]="'overflow'" or [showText]="\"overflow\""
177
+ element.setAttribute(`[${attributeName}]`, boundAttr.replace(oldAttributeValue, newAttributeValue));
178
+ }
179
+ // Handle static attributes like title="foo"
180
+ const staticAttrValue = element.getAttribute(attributeName);
181
+ if (staticAttrValue === oldAttributeValue) {
182
+ element.setAttribute(attributeName, newAttributeValue);
183
+ }
184
+ }
185
+ };
186
+ exports.templateAttributeValueTransformer = templateAttributeValueTransformer;
187
+ const tsPropertyValueTransformer = (root, j, typeName, oldValue, newValue) => {
188
+ // 1. Find all class properties with the specified type
189
+ root
190
+ .find(j.ClassProperty)
191
+ .filter(path => {
192
+ // Check if the property has a type annotation matching the specified type
193
+ if (path.node.typeAnnotation?.typeAnnotation &&
194
+ path.node.typeAnnotation.typeAnnotation.type === 'TSTypeReference' &&
195
+ path.node.typeAnnotation.typeAnnotation.typeName &&
196
+ path.node.typeAnnotation.typeAnnotation.typeName.type === 'Identifier' &&
197
+ path.node.typeAnnotation.typeAnnotation.typeName.name === typeName) {
198
+ return true;
199
+ }
200
+ return false;
201
+ })
202
+ .forEach(path => {
203
+ // Update the value if it matches the old value
204
+ if (path.node.value &&
205
+ path.node.value.type === 'StringLiteral' &&
206
+ path.node.value.value === oldValue) {
207
+ path.node.value.value = newValue;
208
+ }
209
+ });
210
+ // 2. Find all assignments to variables of the specified type
211
+ const variablesOfType = new Set();
212
+ // First, collect all variables with the specified type
213
+ root
214
+ .find(j.VariableDeclarator)
215
+ .filter(path => {
216
+ if (path.node.id.type === 'Identifier' &&
217
+ path.node.id.typeAnnotation?.typeAnnotation &&
218
+ path.node.id.typeAnnotation.typeAnnotation.type === 'TSTypeReference' &&
219
+ path.node.id.typeAnnotation.typeAnnotation.typeName.type === 'Identifier' &&
220
+ path.node.id.typeAnnotation.typeAnnotation.typeName.name === typeName) {
221
+ return true;
222
+ }
223
+ return false;
224
+ })
225
+ .forEach(path => {
226
+ if (path.node.id.type === 'Identifier') {
227
+ variablesOfType.add(path.node.id.name);
228
+ // Also update the initial value if it matches
229
+ if (path.node.init &&
230
+ path.node.init.type === 'StringLiteral' &&
231
+ path.node.init.value === oldValue) {
232
+ path.node.init.value = newValue;
233
+ }
234
+ }
235
+ });
236
+ // 3. Update literals in assignment expressions
237
+ root
238
+ .find(j.AssignmentExpression)
239
+ .filter(path => {
240
+ // Only process string literals with the old value
241
+ return path.node.right.type === 'StringLiteral' &&
242
+ path.node.right.value === oldValue;
243
+ })
244
+ .forEach(path => {
245
+ // Update the value
246
+ path.node.right.value = newValue;
247
+ });
248
+ // 4. Also look for string literals in attributes within JSX elements
249
+ root
250
+ .find(j.JSXAttribute, {
251
+ value: {
252
+ type: 'StringLiteral',
253
+ value: oldValue
254
+ }
255
+ })
256
+ .forEach(path => {
257
+ if (path.node.value?.type === 'StringLiteral') {
258
+ path.node.value.value = newValue;
259
+ }
260
+ });
261
+ };
262
+ exports.tsPropertyValueTransformer = tsPropertyValueTransformer;
258
263
  const htmlAttributeValueTransformer = (fileInfo, tagName, attributeName, oldValue, newValue) => {
259
264
  // Read file content from fileInfo
260
265
  const fileContent = fileInfo.source;
@@ -293,3 +298,256 @@ const htmlAttributeValueTransformer = (fileInfo, tagName, attributeName, oldValu
293
298
  return fileContent;
294
299
  };
295
300
  exports.htmlAttributeValueTransformer = htmlAttributeValueTransformer;
301
+ const htmlAttributeRemoval = (fileInfo, tagName, attributeName, propertyToRemove) => {
302
+ const filePath = fileInfo.path;
303
+ const fileContent = fileInfo.source;
304
+ const root = (0, node_html_parser_1.default)(fileContent);
305
+ // Use the same logic as templateAttributeRemoval
306
+ const elements = root.querySelectorAll(tagName);
307
+ for (const element of elements) {
308
+ // Look for bound attribute (e.g., [scrollable]="...")
309
+ const boundAttr = element.getAttribute(`[${attributeName}]`);
310
+ if (boundAttr) {
311
+ // Check if it's an object literal
312
+ if (boundAttr.trim().startsWith('{') && boundAttr.trim().endsWith('}')) {
313
+ // Process object literal like {mouseScrollSpeed: 10000}
314
+ const objectLiteral = boundAttr.trim();
315
+ // Build a regex that matches the property and its value
316
+ // This handles various formats like {prop: value}, { prop: value }, etc.
317
+ const propRegex = new RegExp(`\\s*${propertyToRemove}\\s*:\\s*[^,}]+\\s*(,\\s*)?`, 'g');
318
+ // Remove the property and any trailing comma
319
+ let newObjectLiteral = objectLiteral.replace(propRegex, '');
320
+ // Fix syntax if we removed the last property with trailing comma
321
+ newObjectLiteral = newObjectLiteral.replace(/,\s*}$/, '}');
322
+ // If the object is now empty, remove the attribute completely
323
+ if (newObjectLiteral === '{}') {
324
+ element.removeAttribute(`[${attributeName}]`);
325
+ }
326
+ else {
327
+ element.setAttribute(`[${attributeName}]`, newObjectLiteral);
328
+ }
329
+ }
330
+ // Check if it's a variable reference to an object
331
+ else {
332
+ // For variable references, we can't modify them in the template
333
+ // We should warn the user or handle this case specially
334
+ console.warn(`Cannot remove property from variable reference: ${boundAttr} in file ${filePath}`);
335
+ }
336
+ }
337
+ }
338
+ // Return the modified HTML content
339
+ return root.toString();
340
+ };
341
+ exports.htmlAttributeRemoval = htmlAttributeRemoval;
342
+ /**
343
+ * Removes a specified property from an object binding in HTML templates
344
+ *
345
+ * @param root - The HTML root element
346
+ * @param tagName - The tag to search for (e.g., 'kendo-tabstrip')
347
+ * @param attributeName - The attribute containing the object binding (e.g., 'scrollable')
348
+ * @param propertyToRemove - The property to remove from the object (e.g., 'mouseScrollSpeed')
349
+ */
350
+ const templateAttributeRemoval = (root, tagName, attributeName, propertyToRemove) => {
351
+ const elements = root.querySelectorAll(tagName);
352
+ for (const element of elements) {
353
+ // Look for bound attribute (e.g., [scrollable]="...")
354
+ const boundAttr = element.getAttribute(`[${attributeName}]`);
355
+ if (boundAttr) {
356
+ // Check if it's an object literal
357
+ if (boundAttr.trim().startsWith('{') && boundAttr.trim().endsWith('}')) {
358
+ // Process object literal like {mouseScrollSpeed: 10000}
359
+ const objectLiteral = boundAttr.trim();
360
+ // Build a regex that matches the property and its value
361
+ // This handles various formats like {prop: value}, { prop: value }, etc.
362
+ const propRegex = new RegExp(`\\s*${propertyToRemove}\\s*:\\s*[^,}]+\\s*(,\\s*)?`, 'g');
363
+ // Remove the property and any trailing comma
364
+ let newObjectLiteral = objectLiteral.replace(propRegex, '');
365
+ // Fix syntax if we removed the last property with trailing comma
366
+ newObjectLiteral = newObjectLiteral.replace(/,\s*}$/, '}');
367
+ // If the object is now empty, remove the attribute completely
368
+ if (newObjectLiteral === '{}') {
369
+ element.removeAttribute(`[${attributeName}]`);
370
+ }
371
+ else {
372
+ element.setAttribute(`[${attributeName}]`, newObjectLiteral);
373
+ }
374
+ }
375
+ // Check if it's a variable reference to an object
376
+ else {
377
+ // For variable references, we can't modify them in the template
378
+ // We should warn the user or handle this case specially
379
+ console.warn(`Cannot remove property from variable reference: ${boundAttr}`);
380
+ }
381
+ }
382
+ }
383
+ };
384
+ exports.templateAttributeRemoval = templateAttributeRemoval;
385
+ /**
386
+ * Removes a property from object literals of a specified type
387
+ *
388
+ * @param root - The AST root
389
+ * @param j - The JSCodeshift instance
390
+ * @param typeName - The type to target (e.g., 'TabStripScrollableSettings')
391
+ * @param propertyToRemove - The property to remove (e.g., 'mouseScrollSpeed')
392
+ */
393
+ function tsPropertyRemoval(rootSource, j, typeName, propertyName) {
394
+ // Find class properties that have the specified type
395
+ rootSource
396
+ .find(j.ClassProperty, {
397
+ typeAnnotation: {
398
+ typeAnnotation: {
399
+ typeName: {
400
+ name: typeName
401
+ }
402
+ }
403
+ }
404
+ })
405
+ .forEach(path => {
406
+ // Check if there's an object literal initializer
407
+ if (path.node.value && path.node.value.type === 'ObjectExpression') {
408
+ const properties = path.node.value.properties;
409
+ // Find the property we want to remove - safely handle different property types
410
+ const propIndex = properties.findIndex((p) => p.type === 'ObjectProperty' &&
411
+ p.key &&
412
+ p.key.type === 'Identifier' &&
413
+ p.key.name === propertyName);
414
+ if (propIndex !== -1) {
415
+ // If property exists, remove it
416
+ // Case 1: If it's the only property, remove the entire class property
417
+ if (properties.length === 1) {
418
+ j(path).remove();
419
+ }
420
+ // Case 2: If there are other properties, just remove this one property
421
+ else {
422
+ properties.splice(propIndex, 1);
423
+ }
424
+ }
425
+ }
426
+ });
427
+ // Also handle property assignments (e.g., in methods like ngOnInit)
428
+ rootSource
429
+ .find(j.AssignmentExpression, {
430
+ left: {
431
+ type: 'MemberExpression',
432
+ object: {
433
+ type: 'MemberExpression'
434
+ },
435
+ property: {
436
+ name: propertyName
437
+ }
438
+ }
439
+ })
440
+ .forEach(path => {
441
+ j(path).remove();
442
+ });
443
+ return rootSource;
444
+ }
445
+ exports.tsPropertyRemoval = tsPropertyRemoval;
446
+ /**
447
+ * Removes assignments to a specific nested property of a component
448
+ *
449
+ * @param root - The AST root
450
+ * @param j - The JSCodeshift instance
451
+ * @param componentType - The component type to target (e.g., 'TabStripComponent')
452
+ * @param componentProperty - The component property (e.g., 'scrollable')
453
+ * @param propertyToRemove - The nested property to remove assignments to (e.g., 'mouseScrollSpeed')
454
+ */
455
+ const tsComponentPropertyRemoval = (root, j, componentType, componentProperty, propertyToRemove) => {
456
+ // CASE 1: Handle direct property assignments like: foo.scrollable.mouseScrollSpeed = 3000;
457
+ root
458
+ .find(j.AssignmentExpression)
459
+ .filter((path) => {
460
+ const { left } = path.value;
461
+ // Check if this is a member expression assignment
462
+ if (left && left.type === 'MemberExpression') {
463
+ // Check if we're accessing the property to remove
464
+ if (left.property && left.property.name === propertyToRemove) {
465
+ // Check if we're accessing it from component.componentProperty
466
+ const obj = left.object;
467
+ if (obj && obj.type === 'MemberExpression' &&
468
+ obj.property && obj.property.name === componentProperty) {
469
+ // Now check if the base object is our component type
470
+ return isComponentTypeMatch(root, j, obj.object, componentType);
471
+ }
472
+ }
473
+ }
474
+ return false;
475
+ })
476
+ .forEach((path) => {
477
+ // Remove the entire statement
478
+ j(path).closest(j.ExpressionStatement).remove();
479
+ });
480
+ // CASE 2 & 3: Handle object assignments like: foo.scrollable = { mouseScrollSpeed: 3000, ... };
481
+ root
482
+ .find(j.AssignmentExpression)
483
+ .filter((path) => {
484
+ const { left, right } = path.value;
485
+ // Check if this assigns to component.componentProperty
486
+ if (left && left.type === 'MemberExpression' &&
487
+ left.property && left.property.name === componentProperty &&
488
+ right && right.type === 'ObjectExpression') {
489
+ // Check if the base object is our component type
490
+ return isComponentTypeMatch(root, j, left.object, componentType);
491
+ }
492
+ return false;
493
+ })
494
+ .forEach((path) => {
495
+ const properties = path.value.right.properties;
496
+ // Find the property we want to remove
497
+ const propIndex = properties.findIndex((p) => p && p.type === 'ObjectProperty' &&
498
+ p.key && p.key.type === 'Identifier' &&
499
+ p.key.name === propertyToRemove);
500
+ if (propIndex !== -1) {
501
+ // Case 2: If it's the only property, remove the entire statement
502
+ if (properties.length === 1) {
503
+ j(path).closest(j.ExpressionStatement).remove();
504
+ }
505
+ // Case 3: If there are other properties, just remove this one property
506
+ else {
507
+ properties.splice(propIndex, 1);
508
+ }
509
+ }
510
+ });
511
+ return root;
512
+ };
513
+ exports.tsComponentPropertyRemoval = tsComponentPropertyRemoval;
514
+ // Helper function to check if a node is a component of the specified type
515
+ function isComponentTypeMatch(root, j, node, componentType) {
516
+ if (!node)
517
+ return false;
518
+ // Case 1: Direct match for 'this.propertyName'
519
+ if (node.type === 'ThisExpression') {
520
+ return true; // Assuming 'this' refers to the component class
521
+ }
522
+ // Case 2: Function parameter
523
+ if (node.type === 'Identifier') {
524
+ const paramName = node.name;
525
+ // Check function parameters
526
+ return root
527
+ .find(j.Function)
528
+ .some(path => {
529
+ return path.node.params && path.node.params.some((param) => param.type === 'Identifier' &&
530
+ param.name === paramName &&
531
+ param.typeAnnotation?.typeAnnotation?.typeName?.name === componentType);
532
+ });
533
+ }
534
+ // Case 3: Member expression (obj.prop)
535
+ if (node.type === 'MemberExpression') {
536
+ // This would need more complex logic to determine if the object is of the right type
537
+ // For now, we can check if it's a property that has been declared with the right type
538
+ if (node.object.type === 'ThisExpression' && node.property.type === 'Identifier') {
539
+ const propName = node.property.name;
540
+ return root
541
+ .find(j.ClassProperty, {
542
+ key: { name: propName },
543
+ typeAnnotation: {
544
+ typeAnnotation: {
545
+ typeName: { name: componentType }
546
+ }
547
+ }
548
+ })
549
+ .size() > 0;
550
+ }
551
+ }
552
+ return false;
553
+ }
@@ -27,7 +27,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
27
27
  return result;
28
28
  };
29
29
  Object.defineProperty(exports, "__esModule", { value: true });
30
- const template_transformer_1 = require("../template-transformer");
30
+ const index_1 = require("../template-transformer/index");
31
31
  const utils_1 = require("../utils");
32
32
  const fs = __importStar(require("fs"));
33
33
  function default_1(fileInfo, api) {
@@ -42,7 +42,7 @@ function default_1(fileInfo, api) {
42
42
  }
43
43
  const j = api.jscodeshift;
44
44
  const rootSource = j(fileInfo.source);
45
- (0, template_transformer_1.templateTransformer)(rootSource, j, (root) => {
45
+ (0, index_1.templateTransformer)(rootSource, j, (root) => {
46
46
  (0, utils_1.templateAttributeValueTransformer)(root, 'kendo-toolbar-button', 'showIcon', 'overflow', 'menu');
47
47
  (0, utils_1.templateAttributeValueTransformer)(root, 'kendo-toolbar-button', 'showIcon', 'both', 'always');
48
48
  });
@@ -27,7 +27,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
27
27
  return result;
28
28
  };
29
29
  Object.defineProperty(exports, "__esModule", { value: true });
30
- const template_transformer_1 = require("../template-transformer");
30
+ const index_1 = require("../template-transformer/index");
31
31
  const utils_1 = require("../utils");
32
32
  const fs = __importStar(require("fs"));
33
33
  function default_1(fileInfo, api) {
@@ -42,7 +42,7 @@ function default_1(fileInfo, api) {
42
42
  }
43
43
  const j = api.jscodeshift;
44
44
  const rootSource = j(fileInfo.source);
45
- (0, template_transformer_1.templateTransformer)(rootSource, j, (root) => {
45
+ (0, index_1.templateTransformer)(rootSource, j, (root) => {
46
46
  (0, utils_1.templateAttributeValueTransformer)(root, 'kendo-toolbar-button', 'showText', 'overflow', 'menu');
47
47
  (0, utils_1.templateAttributeValueTransformer)(root, 'kendo-toolbar-button', 'showText', 'both', 'always');
48
48
  });
@@ -10,7 +10,7 @@ export const packageMetadata = {
10
10
  productName: 'Kendo UI for Angular',
11
11
  productCode: 'KENDOUIANGULAR',
12
12
  productCodes: ['KENDOUIANGULAR'],
13
- publishDate: 1747728044,
14
- version: '19.0.0-develop.26',
13
+ publishDate: 1747760889,
14
+ version: '19.0.0-develop.28',
15
15
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
16
16
  };
@@ -26,8 +26,8 @@ const packageMetadata = {
26
26
  productName: 'Kendo UI for Angular',
27
27
  productCode: 'KENDOUIANGULAR',
28
28
  productCodes: ['KENDOUIANGULAR'],
29
- publishDate: 1747728044,
30
- version: '19.0.0-develop.26',
29
+ publishDate: 1747760889,
30
+ version: '19.0.0-develop.28',
31
31
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
32
32
  };
33
33
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@progress/kendo-angular-toolbar",
3
- "version": "19.0.0-develop.26",
3
+ "version": "19.0.0-develop.28",
4
4
  "description": "Kendo UI Angular Toolbar component - a single UI element that organizes buttons and other navigation elements",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "author": "Progress",
@@ -25,23 +25,18 @@
25
25
  "migrations": {
26
26
  "options": {
27
27
  "parser": "tsx",
28
- "pattern": "*.{t,j}s"
28
+ "pattern": "*.{ts,html}"
29
29
  },
30
30
  "codemods": {
31
31
  "19": [
32
- {
33
- "description": "Migrate all breaking changes for the toolbar package",
34
- "file": "codemods/v19/index.js",
35
- "prompt": "true"
36
- },
37
32
  {
38
33
  "description": "Migrate showIcon's overflow value to menu and both value to always",
39
- "file": "codemods/v19/toolbar-button-showicon.ts",
34
+ "file": "codemods/v19/toolbar-button-showicon.js",
40
35
  "prompt": "true"
41
36
  },
42
37
  {
43
38
  "description": "Migrate showText's overflow value to menu and both value to always",
44
- "file": "codemods/v19/toolbar-button-showtext.ts",
39
+ "file": "codemods/v19/toolbar-button-showtext.js",
45
40
  "prompt": "true"
46
41
  }
47
42
  ]
@@ -50,7 +45,7 @@
50
45
  "package": {
51
46
  "productName": "Kendo UI for Angular",
52
47
  "productCode": "KENDOUIANGULAR",
53
- "publishDate": 1747728044,
48
+ "publishDate": 1747760889,
54
49
  "licensingDocsUrl": "https://www.telerik.com/kendo-angular-ui/my-license/"
55
50
  }
56
51
  },
@@ -60,17 +55,17 @@
60
55
  "@angular/core": "16 - 19",
61
56
  "@angular/platform-browser": "16 - 19",
62
57
  "@progress/kendo-licensing": "^1.5.0",
63
- "@progress/kendo-angular-buttons": "19.0.0-develop.26",
64
- "@progress/kendo-angular-common": "19.0.0-develop.26",
65
- "@progress/kendo-angular-l10n": "19.0.0-develop.26",
66
- "@progress/kendo-angular-icons": "19.0.0-develop.26",
67
- "@progress/kendo-angular-indicators": "19.0.0-develop.26",
68
- "@progress/kendo-angular-popup": "19.0.0-develop.26",
58
+ "@progress/kendo-angular-buttons": "19.0.0-develop.28",
59
+ "@progress/kendo-angular-common": "19.0.0-develop.28",
60
+ "@progress/kendo-angular-l10n": "19.0.0-develop.28",
61
+ "@progress/kendo-angular-icons": "19.0.0-develop.28",
62
+ "@progress/kendo-angular-indicators": "19.0.0-develop.28",
63
+ "@progress/kendo-angular-popup": "19.0.0-develop.28",
69
64
  "rxjs": "^6.5.3 || ^7.0.0"
70
65
  },
71
66
  "dependencies": {
72
67
  "tslib": "^2.3.1",
73
- "@progress/kendo-angular-schematics": "19.0.0-develop.26"
68
+ "@progress/kendo-angular-schematics": "19.0.0-develop.28"
74
69
  },
75
70
  "schematics": "./schematics/collection.json",
76
71
  "module": "fesm2022/progress-kendo-angular-toolbar.mjs",
@@ -1,57 +0,0 @@
1
- /**-----------------------------------------------------------------------------------------
2
- * Copyright © 2025 Progress Software Corporation. All rights reserved.
3
- * Licensed under commercial license. See LICENSE.md in the project root for more information
4
- *-------------------------------------------------------------------------------------------*/
5
- "use strict";
6
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
- if (k2 === undefined) k2 = k;
8
- var desc = Object.getOwnPropertyDescriptor(m, k);
9
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
- desc = { enumerable: true, get: function() { return m[k]; } };
11
- }
12
- Object.defineProperty(o, k2, desc);
13
- }) : (function(o, m, k, k2) {
14
- if (k2 === undefined) k2 = k;
15
- o[k2] = m[k];
16
- }));
17
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
- Object.defineProperty(o, "default", { enumerable: true, value: v });
19
- }) : function(o, v) {
20
- o["default"] = v;
21
- });
22
- var __importStar = (this && this.__importStar) || function (mod) {
23
- if (mod && mod.__esModule) return mod;
24
- var result = {};
25
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
26
- __setModuleDefault(result, mod);
27
- return result;
28
- };
29
- Object.defineProperty(exports, "__esModule", { value: true });
30
- const template_transformer_1 = require("../template-transformer");
31
- const utils_1 = require("../utils");
32
- const fs = __importStar(require("fs"));
33
- function default_1(fileInfo, api) {
34
- const filePath = fileInfo.path;
35
- if (filePath.endsWith('.html')) {
36
- let updatedContent = fileInfo.source;
37
- updatedContent = (0, utils_1.htmlAttributeValueTransformer)({ ...fileInfo, source: updatedContent }, 'kendo-toolbar-button', 'showText', 'overflow', 'menu');
38
- updatedContent = (0, utils_1.htmlAttributeValueTransformer)({ ...fileInfo, source: updatedContent }, 'kendo-toolbar-button', 'showText', 'both', 'always');
39
- updatedContent = (0, utils_1.htmlAttributeValueTransformer)({ ...fileInfo, source: updatedContent }, 'kendo-toolbar-button', 'showIcon', 'overflow', 'menu');
40
- updatedContent = (0, utils_1.htmlAttributeValueTransformer)({ ...fileInfo, source: updatedContent }, 'kendo-toolbar-button', 'showIcon', 'both', 'always');
41
- // Only write to file once after all transformations
42
- fs.writeFileSync(filePath, updatedContent, 'utf-8');
43
- return;
44
- }
45
- const j = api.jscodeshift;
46
- const rootSource = j(fileInfo.source);
47
- (0, template_transformer_1.templateTransformer)(rootSource, j, (root) => {
48
- (0, utils_1.templateAttributeValueTransformer)(root, 'kendo-toolbar-button', 'showText', 'overflow', 'menu');
49
- (0, utils_1.templateAttributeValueTransformer)(root, 'kendo-toolbar-button', 'showText', 'both', 'always');
50
- (0, utils_1.templateAttributeValueTransformer)(root, 'kendo-toolbar-button', 'showIcon', 'overflow', 'menu');
51
- (0, utils_1.templateAttributeValueTransformer)(root, 'kendo-toolbar-button', 'showIcon', 'both', 'always');
52
- });
53
- (0, utils_1.tsPropertyValueTransformer)(rootSource, j, 'DisplayMode', 'overflow', 'menu');
54
- (0, utils_1.tsPropertyValueTransformer)(rootSource, j, 'DisplayMode', 'both', 'always');
55
- return rootSource.toSource();
56
- }
57
- exports.default = default_1;