@progress/kendo-angular-conversational-ui 23.4.0-develop.1 → 23.4.0-develop.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/codemods/utils.js +63 -1
- package/codemods/v20/aiprompt-rendering-changes.js +21 -0
- package/codemods/v20/chat-messageboxtype.js +90 -0
- package/codemods/v20/chat-rendering-changes.js +44 -0
- package/codemods/v20/chat-user.js +14 -0
- package/codemods/v21/chat-message-id-required.js +45 -0
- package/codemods/v21/chat-messagetoolbarvisibility.js +13 -0
- package/codemods/v21/chat-pinnedbyfield.js +1 -1
- package/codemods/v21/chat-rendering-changes.js +62 -0
- package/codemods/v23/chat-FileSelectSettings.js +3 -0
- package/codemods/v23/chat-enableFileSelect.js +15 -0
- package/codemods/v23/chat-enableSpeechToText.js +3 -0
- package/codemods/v23/chat-rendering-changes.js +78 -0
- package/codemods/v23/customMessages-send.js +3 -0
- package/fesm2022/progress-kendo-angular-conversational-ui.mjs +2 -2
- package/package-metadata.mjs +2 -2
- package/package.json +52 -22
package/codemods/utils.js
CHANGED
|
@@ -3,11 +3,40 @@
|
|
|
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
|
+
};
|
|
6
29
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
30
|
exports.tsInterfaceTransformer = exports.tsPropertyValueTransformer = exports.tsPropertyTransformer = exports.tsComponentPropertyRemoval = exports.attributeRemoval = exports.attributeValueUpdate = exports.attributeNameValueUpdate = exports.attributeNameUpdate = exports.eventUpdate = exports.htmlTransformer = exports.blockTextElements = void 0;
|
|
8
31
|
exports.hasKendoInTemplate = hasKendoInTemplate;
|
|
9
32
|
exports.isImportedFromPackage = isImportedFromPackage;
|
|
10
33
|
exports.tsPropertyRemoval = tsPropertyRemoval;
|
|
34
|
+
exports.makePattern = makePattern;
|
|
35
|
+
exports.writeInstructionMarker = writeInstructionMarker;
|
|
36
|
+
exports.isApiChangeTarget = isApiChangeTarget;
|
|
37
|
+
exports.isRenderingChangeTarget = isRenderingChangeTarget;
|
|
38
|
+
const fs = __importStar(require("node:fs"));
|
|
39
|
+
const path = __importStar(require("node:path"));
|
|
11
40
|
exports.blockTextElements = {
|
|
12
41
|
script: true,
|
|
13
42
|
noscript: true,
|
|
@@ -575,7 +604,7 @@ const tsComponentPropertyRemoval = (source, root, j, packageName, componentType,
|
|
|
575
604
|
localVariables.add(path.node.id.name);
|
|
576
605
|
}
|
|
577
606
|
});
|
|
578
|
-
// Find array variables of type componentType[]
|
|
607
|
+
// Find array variables of type componentType[]
|
|
579
608
|
// This handles cases like: const arr: ChatComponent[] = [...]; arr[0].property = value;
|
|
580
609
|
const arrayVariables = new Set();
|
|
581
610
|
root.find(j.VariableDeclarator).forEach((path) => {
|
|
@@ -1366,3 +1395,36 @@ function isComponentTypeMatch(root, j, node, componentType) {
|
|
|
1366
1395
|
}
|
|
1367
1396
|
return false;
|
|
1368
1397
|
}
|
|
1398
|
+
// Matches CSS class names in CSS selectors (.foo) and as whitespace/quote-delimited
|
|
1399
|
+
// tokens within attribute values, covering both single-class ("foo") and multi-class ("foo bar") cases.
|
|
1400
|
+
function makePattern(classes) {
|
|
1401
|
+
return new RegExp(classes.map(c => String.raw `\.${c}\b|(?<=["'\s])${c}(?=["'\s])`).join('|'));
|
|
1402
|
+
}
|
|
1403
|
+
function writeInstructionMarker(instruction, codemodFilename, affectedFile) {
|
|
1404
|
+
// Write to node_modules/.kendo/migration/<basename(codemodFilename)>
|
|
1405
|
+
// kendo-cli reads the marker by looking up basename(codemod.file) in that directory
|
|
1406
|
+
const markerDir = path.join(process.cwd(), 'node_modules', '.kendo', 'migration');
|
|
1407
|
+
const markerPath = path.join(markerDir, path.basename(codemodFilename));
|
|
1408
|
+
try {
|
|
1409
|
+
fs.mkdirSync(markerDir, { recursive: true });
|
|
1410
|
+
const existing = fs.existsSync(markerPath) ? fs.readFileSync(markerPath, 'utf8') : '';
|
|
1411
|
+
let content = existing;
|
|
1412
|
+
if (!existing.includes(instruction)) {
|
|
1413
|
+
content += instruction + '\n';
|
|
1414
|
+
}
|
|
1415
|
+
const fileLine = ` - ${path.relative(process.cwd(), affectedFile)}`;
|
|
1416
|
+
if (!content.includes(fileLine)) {
|
|
1417
|
+
content += fileLine + '\n';
|
|
1418
|
+
}
|
|
1419
|
+
fs.writeFileSync(markerPath, content);
|
|
1420
|
+
}
|
|
1421
|
+
catch { /* suppress error */ }
|
|
1422
|
+
}
|
|
1423
|
+
function isApiChangeTarget(filePath) {
|
|
1424
|
+
const ext = path.extname(filePath);
|
|
1425
|
+
return ext === '.ts' || ext === '.html';
|
|
1426
|
+
}
|
|
1427
|
+
function isRenderingChangeTarget(filePath) {
|
|
1428
|
+
const ext = path.extname(filePath);
|
|
1429
|
+
return ext === '.ts' || ext === '.html' || ext === '.css' || ext === '.scss' || ext === '.sass' || ext === '.less';
|
|
1430
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**-----------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright © 2026 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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.aiInstructions = void 0;
|
|
8
|
+
exports.default = default_1;
|
|
9
|
+
const utils_1 = require("../utils");
|
|
10
|
+
exports.aiInstructions = `Review your stylesheets, test files, and any code that references the k-prompt-suggestion class. It has been replaced with k-suggestion on each suggestion element.
|
|
11
|
+
Replace .k-prompt-suggestion selectors with .k-suggestion in your styles and tests.`;
|
|
12
|
+
const classes = ['k-prompt-suggestion'];
|
|
13
|
+
const pattern = (0, utils_1.makePattern)(classes);
|
|
14
|
+
function default_1(fileInfo) {
|
|
15
|
+
if ((0, utils_1.isRenderingChangeTarget)(fileInfo.path)) {
|
|
16
|
+
if (pattern.test(fileInfo.source)) {
|
|
17
|
+
(0, utils_1.writeInstructionMarker)(exports.aiInstructions, __filename, fileInfo.path);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return fileInfo.source;
|
|
21
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**-----------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright © 2026 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
|
+
exports.aiInstructions = void 0;
|
|
31
|
+
exports.default = default_1;
|
|
32
|
+
const fs = __importStar(require("fs"));
|
|
33
|
+
const utils_1 = require("../utils");
|
|
34
|
+
// Matches messageBoxType="textbox" or [messageBoxType]="'textbox'" on kendo-chat
|
|
35
|
+
const textboxPattern = /kendo-chat[^>]*messageBoxType[^>]*("|')textbox\1/;
|
|
36
|
+
function removeTextboxMessageBoxType(templateContent) {
|
|
37
|
+
// Remove static: messageBoxType="textbox" or messageBoxType='textbox'
|
|
38
|
+
let result = templateContent.replace(/\s+messageBoxType=(["'])textbox\1/g, '');
|
|
39
|
+
// Remove bound: [messageBoxType]="'textbox'"
|
|
40
|
+
result = result.replace(/\s+\[messageBoxType\]="'textbox'"/g, '');
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
function default_1(fileInfo, api) {
|
|
44
|
+
const filePath = fileInfo.path;
|
|
45
|
+
if (!(0, utils_1.isApiChangeTarget)(filePath)) {
|
|
46
|
+
return fileInfo.source;
|
|
47
|
+
}
|
|
48
|
+
const htmlResult = (0, utils_1.htmlTransformer)(fileInfo, api, (templateContent) => {
|
|
49
|
+
if (textboxPattern.test(templateContent)) {
|
|
50
|
+
return removeTextboxMessageBoxType(templateContent);
|
|
51
|
+
}
|
|
52
|
+
return templateContent;
|
|
53
|
+
});
|
|
54
|
+
if (filePath.endsWith('.html')) {
|
|
55
|
+
if (htmlResult && htmlResult !== fileInfo.source) {
|
|
56
|
+
fs.writeFileSync(filePath, htmlResult, 'utf-8');
|
|
57
|
+
return htmlResult;
|
|
58
|
+
}
|
|
59
|
+
return fileInfo.source;
|
|
60
|
+
}
|
|
61
|
+
const j = api.jscodeshift;
|
|
62
|
+
const rootSource = j(htmlResult || fileInfo.source);
|
|
63
|
+
if (fileInfo.source.includes('messageBoxType') && fileInfo.source.includes('textbox')) {
|
|
64
|
+
// Remove direct assignments: this.chatComp.messageBoxType = 'textbox';
|
|
65
|
+
rootSource.find(j.AssignmentExpression)
|
|
66
|
+
.filter((path) => {
|
|
67
|
+
const { left, right } = path.node;
|
|
68
|
+
return (left.type === 'MemberExpression' &&
|
|
69
|
+
left.property.type === 'Identifier' &&
|
|
70
|
+
left.property.name === 'messageBoxType' &&
|
|
71
|
+
(right.type === 'StringLiteral' || right.type === 'Literal') &&
|
|
72
|
+
right.value === 'textbox');
|
|
73
|
+
})
|
|
74
|
+
.forEach((path) => {
|
|
75
|
+
j(path).closest(j.ExpressionStatement).remove();
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
return rootSource.toSource();
|
|
79
|
+
}
|
|
80
|
+
exports.aiInstructions = `The Chat component no longer accepts 'textbox' as a value for the messageBoxType property in v20.
|
|
81
|
+
|
|
82
|
+
Before:
|
|
83
|
+
<kendo-chat [messageBoxType]="'textbox'"></kendo-chat>
|
|
84
|
+
// or
|
|
85
|
+
<kendo-chat messageBoxType="textbox"></kendo-chat>
|
|
86
|
+
|
|
87
|
+
After:
|
|
88
|
+
<kendo-chat></kendo-chat>
|
|
89
|
+
|
|
90
|
+
Action: Remove the messageBoxType property binding when set to 'textbox'. If you require a specific message box type, use the supported values available in the updated API.`;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**-----------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright © 2026 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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.aiInstructions = exports.aiInstructionsAvatarImage = exports.aiInstructionsQuickReply = exports.aiInstructionsQuickReplies = void 0;
|
|
8
|
+
exports.default = default_1;
|
|
9
|
+
const utils_1 = require("../utils");
|
|
10
|
+
exports.aiInstructionsQuickReplies = `CSS class k-quick-replies — replaced with k-suggestion-group on the suggested actions of the Chat.
|
|
11
|
+
Replace .k-quick-replies selectors with .k-suggestion-group in your styles and tests.`;
|
|
12
|
+
exports.aiInstructionsQuickReply = `CSS class k-quick-reply — replaced with k-suggestion k-suggestion-primary on each chat suggestion.
|
|
13
|
+
Replace .k-quick-reply selectors with .k-suggestion.k-suggestion-primary in your styles and tests.`;
|
|
14
|
+
exports.aiInstructionsAvatarImage = `CSS class k-avatar-image (inside k-avatar) — moved outside of the k-message-group-content element.
|
|
15
|
+
Before: k-message-group-content > k-avatar > k-avatar-image
|
|
16
|
+
After: k-avatar > k-avatar-image (sibling of k-message-group-content)
|
|
17
|
+
Action: Update any CSS descendant selectors like .k-message-group-content .k-avatar-image to target .k-avatar .k-avatar-image directly.`;
|
|
18
|
+
exports.aiInstructions = `Review your stylesheets, test files, and any code that references these classes:
|
|
19
|
+
|
|
20
|
+
${exports.aiInstructionsQuickReplies}
|
|
21
|
+
|
|
22
|
+
${exports.aiInstructionsQuickReply}
|
|
23
|
+
|
|
24
|
+
${exports.aiInstructionsAvatarImage}`;
|
|
25
|
+
const classesQuickReplies = ['k-quick-replies'];
|
|
26
|
+
const patternQuickReplies = (0, utils_1.makePattern)(classesQuickReplies);
|
|
27
|
+
const classesQuickReply = ['k-quick-reply'];
|
|
28
|
+
const patternQuickReply = (0, utils_1.makePattern)(classesQuickReply);
|
|
29
|
+
const classesAvatarImage = ['k-avatar-image', 'k-message-group-content'];
|
|
30
|
+
const patternAvatarImage = (0, utils_1.makePattern)(classesAvatarImage);
|
|
31
|
+
function default_1(fileInfo) {
|
|
32
|
+
if ((0, utils_1.isRenderingChangeTarget)(fileInfo.path)) {
|
|
33
|
+
if (patternQuickReplies.test(fileInfo.source)) {
|
|
34
|
+
(0, utils_1.writeInstructionMarker)(exports.aiInstructionsQuickReplies, __filename, fileInfo.path);
|
|
35
|
+
}
|
|
36
|
+
if (patternQuickReply.test(fileInfo.source)) {
|
|
37
|
+
(0, utils_1.writeInstructionMarker)(exports.aiInstructionsQuickReply, __filename, fileInfo.path);
|
|
38
|
+
}
|
|
39
|
+
if (patternAvatarImage.test(fileInfo.source)) {
|
|
40
|
+
(0, utils_1.writeInstructionMarker)(exports.aiInstructionsAvatarImage, __filename, fileInfo.path);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return fileInfo.source;
|
|
44
|
+
}
|
|
@@ -27,11 +27,15 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
27
27
|
return result;
|
|
28
28
|
};
|
|
29
29
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.aiInstructions = void 0;
|
|
30
31
|
exports.default = default_1;
|
|
31
32
|
const fs = __importStar(require("fs"));
|
|
32
33
|
const utils_1 = require("../utils");
|
|
33
34
|
function default_1(fileInfo, api) {
|
|
34
35
|
const filePath = fileInfo.path;
|
|
36
|
+
if (!(0, utils_1.isApiChangeTarget)(filePath)) {
|
|
37
|
+
return fileInfo.source;
|
|
38
|
+
}
|
|
35
39
|
// Handle HTML files and inline templates
|
|
36
40
|
const htmlResult = (0, utils_1.htmlTransformer)(fileInfo, api, (templateContent) => (0, utils_1.attributeNameValueUpdate)(templateContent, 'kendo-chat', 'user', 'authorId', 'id'));
|
|
37
41
|
if (filePath.endsWith('.html')) {
|
|
@@ -47,3 +51,13 @@ function default_1(fileInfo, api) {
|
|
|
47
51
|
(0, utils_1.tsPropertyTransformer)(fileInfo.source, rootSource, j, '@progress/kendo-angular-conversational-ui', 'ChatComponent', 'user', 'authorId', 'id');
|
|
48
52
|
return rootSource.toSource();
|
|
49
53
|
}
|
|
54
|
+
exports.aiInstructions = `The Chat's user input property is renamed to authorId, and its value type changed — it now expects the user's ID directly instead of a user object.
|
|
55
|
+
|
|
56
|
+
Before:
|
|
57
|
+
<kendo-chat [user]="currentUser"></kendo-chat>
|
|
58
|
+
// where currentUser: { id: string, ... }
|
|
59
|
+
|
|
60
|
+
After:
|
|
61
|
+
<kendo-chat [authorId]="currentUser.id"></kendo-chat>
|
|
62
|
+
|
|
63
|
+
The codemod automatically appends .id to simple variable references and extracts the id property from object literals. Review the transformed result in cases where the value was a function call, a conditional expression, or a variable of a type that does not have an id property.`;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**-----------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright © 2026 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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.aiInstructions = void 0;
|
|
8
|
+
exports.default = default_1;
|
|
9
|
+
const utils_1 = require("../utils");
|
|
10
|
+
// Matches <kendo-chat ... [messages]="..." ...>
|
|
11
|
+
const chatMessagesPattern = /<kendo-chat[^>]*\[messages\]/;
|
|
12
|
+
function default_1(fileInfo, api) {
|
|
13
|
+
const filePath = fileInfo.path;
|
|
14
|
+
if (!(0, utils_1.isApiChangeTarget)(filePath)) {
|
|
15
|
+
return fileInfo.source;
|
|
16
|
+
}
|
|
17
|
+
if (filePath.endsWith('.html')) {
|
|
18
|
+
if (chatMessagesPattern.test(fileInfo.source)) {
|
|
19
|
+
(0, utils_1.writeInstructionMarker)(exports.aiInstructions, __filename, fileInfo.path);
|
|
20
|
+
}
|
|
21
|
+
return fileInfo.source;
|
|
22
|
+
}
|
|
23
|
+
let patternDetected = false;
|
|
24
|
+
(0, utils_1.htmlTransformer)(fileInfo, api, (templateContent) => {
|
|
25
|
+
if (chatMessagesPattern.test(templateContent)) {
|
|
26
|
+
patternDetected = true;
|
|
27
|
+
}
|
|
28
|
+
return templateContent;
|
|
29
|
+
});
|
|
30
|
+
const j = api.jscodeshift;
|
|
31
|
+
const rootSource = j(fileInfo.source);
|
|
32
|
+
const hasMessageImport = (0, utils_1.isImportedFromPackage)(rootSource, j, '@progress/kendo-angular-conversational-ui', 'Message');
|
|
33
|
+
if (patternDetected || hasMessageImport) {
|
|
34
|
+
(0, utils_1.writeInstructionMarker)(exports.aiInstructions, __filename, fileInfo.path);
|
|
35
|
+
}
|
|
36
|
+
return fileInfo.source;
|
|
37
|
+
}
|
|
38
|
+
exports.aiInstructions = `The 'Message' interface now requires a unique 'id' property.
|
|
39
|
+
|
|
40
|
+
Before:
|
|
41
|
+
const msg: Message = { text: "Hello", author: user };
|
|
42
|
+
After:
|
|
43
|
+
const msg: Message = { id: "msg-1", text: "Hello", author: user };
|
|
44
|
+
|
|
45
|
+
Add a unique id property to all Message object literals in your code. The id should be a unique identifier for each message (e.g., "msg-1", "message-welcome", etc.).`;
|
|
@@ -27,11 +27,15 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
27
27
|
return result;
|
|
28
28
|
};
|
|
29
29
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.aiInstructions = void 0;
|
|
30
31
|
exports.default = default_1;
|
|
31
32
|
const fs = __importStar(require("fs"));
|
|
32
33
|
const utils_1 = require("../utils");
|
|
33
34
|
function default_1(fileInfo, api) {
|
|
34
35
|
const filePath = fileInfo.path;
|
|
36
|
+
if (!(0, utils_1.isApiChangeTarget)(filePath)) {
|
|
37
|
+
return fileInfo.source;
|
|
38
|
+
}
|
|
35
39
|
// Handle HTML files and inline templates
|
|
36
40
|
const htmlResult = (0, utils_1.htmlTransformer)(fileInfo, api, (templateContent) => (0, utils_1.attributeRemoval)(templateContent, 'kendo-chat', 'messageToolbarVisibility'));
|
|
37
41
|
if (filePath.endsWith('.html')) {
|
|
@@ -47,3 +51,12 @@ function default_1(fileInfo, api) {
|
|
|
47
51
|
(0, utils_1.tsComponentPropertyRemoval)(fileInfo.source, rootSource, j, '@progress/kendo-angular-conversational-ui', 'ChatComponent', 'messageToolbarVisibility');
|
|
48
52
|
return rootSource.toSource();
|
|
49
53
|
}
|
|
54
|
+
exports.aiInstructions = `The message toolbar is now shown automatically only when messageToolbarActions are configured.
|
|
55
|
+
|
|
56
|
+
Before:
|
|
57
|
+
<kendo-chat [messageToolbarVisibility]="'hover'"></kendo-chat>
|
|
58
|
+
|
|
59
|
+
After:
|
|
60
|
+
<kendo-chat></kendo-chat>
|
|
61
|
+
|
|
62
|
+
Remove the messageToolbarVisibility binding. To control whether the message toolbar appears, configure the messageToolbarActions input — the toolbar is hidden when the array is empty (the default) and visible when actions are present.`;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**-----------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright © 2026 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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.aiInstructions = exports.aiInstructionsMessageReference = exports.aiInstructionsIconXxl = exports.aiInstructionsAppbarLight = exports.aiInstructionsFirstLast = exports.aiInstructionsAvatars = void 0;
|
|
8
|
+
exports.default = default_1;
|
|
9
|
+
const utils_1 = require("../utils");
|
|
10
|
+
exports.aiInstructionsAvatars = `k-avatars — removed from the k-message-list element.
|
|
11
|
+
Remove any CSS rules or selectors that target .k-message-list.k-avatars or rely on k-avatars being present on k-message-list.`;
|
|
12
|
+
exports.aiInstructionsFirstLast = `k-first / k-last — removed from the k-message element.
|
|
13
|
+
Remove any CSS rules or test assertions that target .k-message.k-first or .k-message.k-last.`;
|
|
14
|
+
exports.aiInstructionsAppbarLight = `k-appbar-light — replaced with k-appbar-inherit on the Chat's AppBar element.
|
|
15
|
+
Replace .k-appbar-light selectors with .k-appbar-inherit in your styles and tests.`;
|
|
16
|
+
exports.aiInstructionsIconXxl = `k-icon-xxl (inside k-chat-file) — replaced with k-chat-xl on file icons.
|
|
17
|
+
Replace .k-icon-xxl selectors scoped to .k-chat-file with .k-chat-xl.`;
|
|
18
|
+
exports.aiInstructionsMessageReference = `k-message-reference / k-message-reference-receiver — moved from inside k-chat-bubble-text to a sibling of k-chat-bubble-text inside k-bubble-content.
|
|
19
|
+
Before: k-chat-bubble-text > k-message-reference
|
|
20
|
+
After: k-bubble-content > k-message-reference (sibling of k-chat-bubble-text)
|
|
21
|
+
Action: Update any CSS descendant selectors like .k-chat-bubble-text .k-message-reference to .k-bubble-content > .k-message-reference.`;
|
|
22
|
+
exports.aiInstructions = `Review your stylesheets, test files, and any code that references these classes:
|
|
23
|
+
|
|
24
|
+
${exports.aiInstructionsAvatars}
|
|
25
|
+
|
|
26
|
+
${exports.aiInstructionsFirstLast}
|
|
27
|
+
|
|
28
|
+
${exports.aiInstructionsAppbarLight}
|
|
29
|
+
|
|
30
|
+
${exports.aiInstructionsIconXxl}
|
|
31
|
+
|
|
32
|
+
${exports.aiInstructionsMessageReference}`;
|
|
33
|
+
const classesAvatars = ['k-avatars'];
|
|
34
|
+
const patternAvatars = (0, utils_1.makePattern)(classesAvatars);
|
|
35
|
+
const classesFirstLast = ['k-first', 'k-last'];
|
|
36
|
+
const patternFirstLast = (0, utils_1.makePattern)(classesFirstLast);
|
|
37
|
+
const classesAppbarLight = ['k-appbar-light'];
|
|
38
|
+
const patternAppbarLight = (0, utils_1.makePattern)(classesAppbarLight);
|
|
39
|
+
const classesIconXxl = ['k-icon-xxl'];
|
|
40
|
+
const patternIconXxl = (0, utils_1.makePattern)(classesIconXxl);
|
|
41
|
+
const classesMessageReference = ['k-message-reference', 'k-message-reference-receiver', 'k-chat-bubble-text', 'k-bubble-content'];
|
|
42
|
+
const patternMessageReference = (0, utils_1.makePattern)(classesMessageReference);
|
|
43
|
+
function default_1(fileInfo) {
|
|
44
|
+
if ((0, utils_1.isRenderingChangeTarget)(fileInfo.path)) {
|
|
45
|
+
if (patternAvatars.test(fileInfo.source)) {
|
|
46
|
+
(0, utils_1.writeInstructionMarker)(exports.aiInstructionsAvatars, __filename, fileInfo.path);
|
|
47
|
+
}
|
|
48
|
+
if (patternFirstLast.test(fileInfo.source)) {
|
|
49
|
+
(0, utils_1.writeInstructionMarker)(exports.aiInstructionsFirstLast, __filename, fileInfo.path);
|
|
50
|
+
}
|
|
51
|
+
if (patternAppbarLight.test(fileInfo.source)) {
|
|
52
|
+
(0, utils_1.writeInstructionMarker)(exports.aiInstructionsAppbarLight, __filename, fileInfo.path);
|
|
53
|
+
}
|
|
54
|
+
if (patternIconXxl.test(fileInfo.source)) {
|
|
55
|
+
(0, utils_1.writeInstructionMarker)(exports.aiInstructionsIconXxl, __filename, fileInfo.path);
|
|
56
|
+
}
|
|
57
|
+
if (patternMessageReference.test(fileInfo.source)) {
|
|
58
|
+
(0, utils_1.writeInstructionMarker)(exports.aiInstructionsMessageReference, __filename, fileInfo.path);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return fileInfo.source;
|
|
62
|
+
}
|
|
@@ -7,6 +7,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
7
7
|
exports.default = default_1;
|
|
8
8
|
const utils_1 = require("../utils");
|
|
9
9
|
function default_1(fileInfo, api) {
|
|
10
|
+
if (!(0, utils_1.isApiChangeTarget)(fileInfo.path)) {
|
|
11
|
+
return fileInfo.source;
|
|
12
|
+
}
|
|
10
13
|
const j = api.jscodeshift;
|
|
11
14
|
const rootSource = j(fileInfo.source);
|
|
12
15
|
(0, utils_1.tsInterfaceTransformer)(fileInfo, rootSource, j, '@progress/kendo-angular-upload', 'FileSelectSettings', 'FileSelectButtonSettings');
|
|
@@ -27,11 +27,15 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
27
27
|
return result;
|
|
28
28
|
};
|
|
29
29
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.aiInstructions = void 0;
|
|
30
31
|
exports.default = default_1;
|
|
31
32
|
const fs = __importStar(require("fs"));
|
|
32
33
|
const utils_1 = require("../utils");
|
|
33
34
|
function default_1(fileInfo, api) {
|
|
34
35
|
const filePath = fileInfo.path;
|
|
36
|
+
if (!(0, utils_1.isApiChangeTarget)(filePath)) {
|
|
37
|
+
return fileInfo.source;
|
|
38
|
+
}
|
|
35
39
|
// Handle HTML files and inline templates
|
|
36
40
|
const htmlResult = (0, utils_1.htmlTransformer)(fileInfo, api, (templateContent) => (0, utils_1.attributeNameUpdate)(templateContent, 'kendo-chat', 'enableFileSelect', 'fileSelectButton'));
|
|
37
41
|
if (filePath.endsWith('.html')) {
|
|
@@ -47,3 +51,14 @@ function default_1(fileInfo, api) {
|
|
|
47
51
|
(0, utils_1.tsPropertyTransformer)(fileInfo.source, rootSource, j, '@progress/kendo-angular-conversational-ui', 'ChatComponent', 'enableFileSelect', 'fileSelectButton');
|
|
48
52
|
return rootSource.toSource();
|
|
49
53
|
}
|
|
54
|
+
exports.aiInstructions = `The new property \`fileSelectButton\` accepts a FileSelectButtonSettings object for finer control over the button.
|
|
55
|
+
|
|
56
|
+
Before:
|
|
57
|
+
<kendo-chat [enableFileSelect]="true"></kendo-chat>
|
|
58
|
+
|
|
59
|
+
After:
|
|
60
|
+
<kendo-chat [fileSelectButton]="true"></kendo-chat>
|
|
61
|
+
// or with settings:
|
|
62
|
+
<kendo-chat [fileSelectButton]="{ themeColor: 'primary' }"></kendo-chat>
|
|
63
|
+
|
|
64
|
+
The codemod handles the rename automatically. No further action is required unless you want to use the new settings object.`;
|
|
@@ -32,6 +32,9 @@ const fs = __importStar(require("fs"));
|
|
|
32
32
|
const utils_1 = require("../utils");
|
|
33
33
|
function default_1(fileInfo, api) {
|
|
34
34
|
const filePath = fileInfo.path;
|
|
35
|
+
if (!(0, utils_1.isApiChangeTarget)(filePath)) {
|
|
36
|
+
return fileInfo.source;
|
|
37
|
+
}
|
|
35
38
|
// Handle HTML files and inline templates
|
|
36
39
|
const htmlResult = (0, utils_1.htmlTransformer)(fileInfo, api, (templateContent) => (0, utils_1.attributeNameUpdate)(templateContent, 'kendo-chat', 'enableSpeechToText', 'speechToTextButton'));
|
|
37
40
|
if (filePath.endsWith('.html')) {
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**-----------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright © 2026 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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.aiInstructions = exports.aiInstructionsMessageTime = exports.aiInstructionsMessagePinned = exports.aiInstructionsAppbar = exports.aiInstructionsChatFile = exports.aiInstructionsChatFileSize = exports.aiInstructionsChatFileName = exports.aiInstructionsChatFileInfo = void 0;
|
|
8
|
+
exports.default = default_1;
|
|
9
|
+
const utils_1 = require("../utils");
|
|
10
|
+
exports.aiInstructionsChatFileInfo = `k-chat-file-info — replaced with k-file-info.
|
|
11
|
+
Replace .k-chat-file-info selectors with .k-file-info in your styles and tests.`;
|
|
12
|
+
exports.aiInstructionsChatFileName = `k-chat-file-name — replaced with k-file-name.
|
|
13
|
+
Replace .k-chat-file-name selectors with .k-file-name in your styles and tests.`;
|
|
14
|
+
exports.aiInstructionsChatFileSize = `k-chat-file-size — replaced with k-file-size.
|
|
15
|
+
Replace .k-chat-file-size selectors with .k-file-size in your styles and tests.`;
|
|
16
|
+
exports.aiInstructionsChatFile = `k-chat-file — replaced with k-file-box.
|
|
17
|
+
Replace .k-chat-file selectors with .k-file-box in your styles and tests.`;
|
|
18
|
+
exports.aiInstructionsAppbar = `AppBar in Chat header — replaced with a div element with k-toolbar class.
|
|
19
|
+
Update any CSS rules or test assertions targeting the Chat header that rely on .k-appbar or the kendo-appbar element selector.`;
|
|
20
|
+
exports.aiInstructionsMessagePinned = `k-message-pinned — moved to be an immediate child of k-message-list.
|
|
21
|
+
Update any CSS descendant selectors targeting .k-message-pinned to reflect its new position as a direct child of .k-message-list.`;
|
|
22
|
+
exports.aiInstructionsMessageTime = `k-message-time — moved to render beneath k-chat-bubble inside a new k-message-info wrapper.
|
|
23
|
+
Update any CSS selectors targeting .k-message-time to account for the new .k-message-info wrapper element.`;
|
|
24
|
+
exports.aiInstructions = `Review your stylesheets, test files, and any code that references these classes:
|
|
25
|
+
|
|
26
|
+
${exports.aiInstructionsChatFileInfo}
|
|
27
|
+
|
|
28
|
+
${exports.aiInstructionsChatFileName}
|
|
29
|
+
|
|
30
|
+
${exports.aiInstructionsChatFileSize}
|
|
31
|
+
|
|
32
|
+
${exports.aiInstructionsChatFile}
|
|
33
|
+
|
|
34
|
+
${exports.aiInstructionsAppbar}
|
|
35
|
+
|
|
36
|
+
${exports.aiInstructionsMessagePinned}
|
|
37
|
+
|
|
38
|
+
${exports.aiInstructionsMessageTime}`;
|
|
39
|
+
const classesChatFileInfo = ['k-chat-file-info'];
|
|
40
|
+
const patternChatFileInfo = (0, utils_1.makePattern)(classesChatFileInfo);
|
|
41
|
+
const classesChatFileName = ['k-chat-file-name'];
|
|
42
|
+
const patternChatFileName = (0, utils_1.makePattern)(classesChatFileName);
|
|
43
|
+
const classesChatFileSize = ['k-chat-file-size'];
|
|
44
|
+
const patternChatFileSize = (0, utils_1.makePattern)(classesChatFileSize);
|
|
45
|
+
const classesChatFile = ['k-chat-file'];
|
|
46
|
+
const patternChatFile = (0, utils_1.makePattern)(classesChatFile);
|
|
47
|
+
const classesAppbar = ['k-appbar'];
|
|
48
|
+
const patternAppbar = (0, utils_1.makePattern)(classesAppbar);
|
|
49
|
+
const classesMessagePinned = ['k-message-pinned'];
|
|
50
|
+
const patternMessagePinned = (0, utils_1.makePattern)(classesMessagePinned);
|
|
51
|
+
const classesMessageTime = ['k-message-time'];
|
|
52
|
+
const patternMessageTime = (0, utils_1.makePattern)(classesMessageTime);
|
|
53
|
+
function default_1(fileInfo) {
|
|
54
|
+
if ((0, utils_1.isRenderingChangeTarget)(fileInfo.path)) {
|
|
55
|
+
if (patternChatFileInfo.test(fileInfo.source)) {
|
|
56
|
+
(0, utils_1.writeInstructionMarker)(exports.aiInstructionsChatFileInfo, __filename, fileInfo.path);
|
|
57
|
+
}
|
|
58
|
+
if (patternChatFileName.test(fileInfo.source)) {
|
|
59
|
+
(0, utils_1.writeInstructionMarker)(exports.aiInstructionsChatFileName, __filename, fileInfo.path);
|
|
60
|
+
}
|
|
61
|
+
if (patternChatFileSize.test(fileInfo.source)) {
|
|
62
|
+
(0, utils_1.writeInstructionMarker)(exports.aiInstructionsChatFileSize, __filename, fileInfo.path);
|
|
63
|
+
}
|
|
64
|
+
if (patternChatFile.test(fileInfo.source)) {
|
|
65
|
+
(0, utils_1.writeInstructionMarker)(exports.aiInstructionsChatFile, __filename, fileInfo.path);
|
|
66
|
+
}
|
|
67
|
+
if (patternAppbar.test(fileInfo.source)) {
|
|
68
|
+
(0, utils_1.writeInstructionMarker)(exports.aiInstructionsAppbar, __filename, fileInfo.path);
|
|
69
|
+
}
|
|
70
|
+
if (patternMessagePinned.test(fileInfo.source)) {
|
|
71
|
+
(0, utils_1.writeInstructionMarker)(exports.aiInstructionsMessagePinned, __filename, fileInfo.path);
|
|
72
|
+
}
|
|
73
|
+
if (patternMessageTime.test(fileInfo.source)) {
|
|
74
|
+
(0, utils_1.writeInstructionMarker)(exports.aiInstructionsMessageTime, __filename, fileInfo.path);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return fileInfo.source;
|
|
78
|
+
}
|
|
@@ -32,6 +32,9 @@ const fs = __importStar(require("fs"));
|
|
|
32
32
|
const utils_1 = require("../utils");
|
|
33
33
|
function default_1(fileInfo, api) {
|
|
34
34
|
const filePath = fileInfo.path;
|
|
35
|
+
if (!(0, utils_1.isApiChangeTarget)(filePath)) {
|
|
36
|
+
return fileInfo.source;
|
|
37
|
+
}
|
|
35
38
|
// Handle HTML files and inline templates
|
|
36
39
|
const htmlResult = (0, utils_1.htmlTransformer)(fileInfo, api, (templateContent) => (0, utils_1.attributeNameUpdate)(templateContent, 'kendo-chat-messages', 'send', 'actionButtonTitle'));
|
|
37
40
|
if (filePath.endsWith('.html')) {
|
|
@@ -215,8 +215,8 @@ const packageMetadata = {
|
|
|
215
215
|
productName: 'Kendo UI for Angular',
|
|
216
216
|
productCode: 'KENDOUIANGULAR',
|
|
217
217
|
productCodes: ['KENDOUIANGULAR'],
|
|
218
|
-
publishDate:
|
|
219
|
-
version: '23.4.0-develop.
|
|
218
|
+
publishDate: 1776175439,
|
|
219
|
+
version: '23.4.0-develop.3',
|
|
220
220
|
licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
|
|
221
221
|
};
|
|
222
222
|
|
package/package-metadata.mjs
CHANGED
|
@@ -7,7 +7,7 @@ export const packageMetadata = {
|
|
|
7
7
|
"productCodes": [
|
|
8
8
|
"KENDOUIANGULAR"
|
|
9
9
|
],
|
|
10
|
-
"publishDate":
|
|
11
|
-
"version": "23.4.0-develop.
|
|
10
|
+
"publishDate": 1776175439,
|
|
11
|
+
"version": "23.4.0-develop.3",
|
|
12
12
|
"licensingDocsUrl": "https://www.telerik.com/kendo-angular-ui/my-license/"
|
|
13
13
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@progress/kendo-angular-conversational-ui",
|
|
3
|
-
"version": "23.4.0-develop.
|
|
3
|
+
"version": "23.4.0-develop.3",
|
|
4
4
|
"description": "Kendo UI for Angular Conversational UI components",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
6
6
|
"author": "Progress",
|
|
@@ -20,48 +20,78 @@
|
|
|
20
20
|
"migrations": {
|
|
21
21
|
"options": {
|
|
22
22
|
"parser": "tsx",
|
|
23
|
-
"pattern": "*.{ts,html}"
|
|
23
|
+
"pattern": "*.{ts,html,css,scss,sass,less}"
|
|
24
24
|
},
|
|
25
25
|
"codemods": {
|
|
26
26
|
"20": [
|
|
27
27
|
{
|
|
28
28
|
"description": "The Chat's user input property is deprecated",
|
|
29
29
|
"file": "codemods/v20/chat-user.js",
|
|
30
|
-
"prompt": "
|
|
30
|
+
"prompt": "false"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"description": "The AIPrompt component has rendering changes that may affect custom styling.",
|
|
34
|
+
"file": "codemods/v20/aiprompt-rendering-changes.js",
|
|
35
|
+
"instructionsOnly": true
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"description": "The Chat component has rendering changes that may affect custom styling.",
|
|
39
|
+
"file": "codemods/v20/chat-rendering-changes.js",
|
|
40
|
+
"instructionsOnly": true
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"description": "The Chat's messageBoxType property is removed.",
|
|
44
|
+
"file": "codemods/v20/chat-messageboxtype.js",
|
|
45
|
+
"prompt": "false"
|
|
31
46
|
}
|
|
32
47
|
],
|
|
33
48
|
"21": [
|
|
34
49
|
{
|
|
35
50
|
"description": "The Chat's messageToolbarVisibility input property is deprecated.",
|
|
36
51
|
"file": "codemods/v21/chat-messagetoolbarvisibility.js",
|
|
37
|
-
"prompt": "
|
|
52
|
+
"prompt": "false"
|
|
38
53
|
},
|
|
39
54
|
{
|
|
40
55
|
"description": "The pinnedByField property of the Chat's ConversationalUIModelFields is deprecated.",
|
|
41
56
|
"file": "codemods/v21/chat-pinnedbyfield.js",
|
|
42
|
-
"prompt": "
|
|
57
|
+
"prompt": "false"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"description": "The Message interface now requires a unique 'id' property.",
|
|
61
|
+
"file": "codemods/v21/chat-message-id-required.js",
|
|
62
|
+
"instructionsOnly": true
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"description": "The Chat component has rendering changes that may affect custom styling.",
|
|
66
|
+
"file": "codemods/v21/chat-rendering-changes.js",
|
|
67
|
+
"instructionsOnly": true
|
|
43
68
|
}
|
|
44
69
|
],
|
|
45
70
|
"23": [
|
|
46
71
|
{
|
|
47
72
|
"description": "The Chat's enableSpeechToText input property is renamed to speechToTextButton.",
|
|
48
73
|
"file": "codemods/v23/chat-enableSpeechToText.js",
|
|
49
|
-
"prompt": "
|
|
74
|
+
"prompt": "false"
|
|
50
75
|
},
|
|
51
76
|
{
|
|
52
77
|
"description": "The Chat's enableFileSelect input property is renamed to fileSelectButton.",
|
|
53
78
|
"file": "codemods/v23/chat-enableFileSelect.js",
|
|
54
|
-
"prompt": "
|
|
79
|
+
"prompt": "false"
|
|
55
80
|
},
|
|
56
81
|
{
|
|
57
82
|
"description": "The Chat's FileSelectSettings is changed to FileSelectButtonSettings.",
|
|
58
83
|
"file": "codemods/v23/chat-FileSelectSettings.js",
|
|
59
|
-
"prompt": "
|
|
84
|
+
"prompt": "false"
|
|
60
85
|
},
|
|
61
86
|
{
|
|
62
87
|
"description": "The CustomMessagesComponent's send property is renamed to actionButtonTitle.",
|
|
63
88
|
"file": "codemods/v23/customMessages-send.js",
|
|
64
|
-
"prompt": "
|
|
89
|
+
"prompt": "false"
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"description": "The Chat component has rendering changes that may affect custom styling.",
|
|
93
|
+
"file": "codemods/v23/chat-rendering-changes.js",
|
|
94
|
+
"instructionsOnly": true
|
|
65
95
|
}
|
|
66
96
|
]
|
|
67
97
|
}
|
|
@@ -69,7 +99,7 @@
|
|
|
69
99
|
"package": {
|
|
70
100
|
"productName": "Kendo UI for Angular",
|
|
71
101
|
"productCode": "KENDOUIANGULAR",
|
|
72
|
-
"publishDate":
|
|
102
|
+
"publishDate": 1776175439,
|
|
73
103
|
"licensingDocsUrl": "https://www.telerik.com/kendo-angular-ui/my-license/"
|
|
74
104
|
}
|
|
75
105
|
},
|
|
@@ -79,22 +109,22 @@
|
|
|
79
109
|
"@angular/core": "19 - 21",
|
|
80
110
|
"@angular/platform-browser": "19 - 21",
|
|
81
111
|
"@progress/kendo-licensing": "^1.10.0",
|
|
82
|
-
"@progress/kendo-angular-buttons": "23.4.0-develop.
|
|
83
|
-
"@progress/kendo-angular-inputs": "23.4.0-develop.
|
|
84
|
-
"@progress/kendo-angular-layout": "23.4.0-develop.
|
|
85
|
-
"@progress/kendo-angular-icons": "23.4.0-develop.
|
|
86
|
-
"@progress/kendo-angular-common": "23.4.0-develop.
|
|
87
|
-
"@progress/kendo-angular-intl": "23.4.0-develop.
|
|
88
|
-
"@progress/kendo-angular-l10n": "23.4.0-develop.
|
|
89
|
-
"@progress/kendo-angular-menu": "23.4.0-develop.
|
|
90
|
-
"@progress/kendo-angular-popup": "23.4.0-develop.
|
|
91
|
-
"@progress/kendo-angular-toolbar": "23.4.0-develop.
|
|
92
|
-
"@progress/kendo-angular-upload": "23.4.0-develop.
|
|
112
|
+
"@progress/kendo-angular-buttons": "23.4.0-develop.3",
|
|
113
|
+
"@progress/kendo-angular-inputs": "23.4.0-develop.3",
|
|
114
|
+
"@progress/kendo-angular-layout": "23.4.0-develop.3",
|
|
115
|
+
"@progress/kendo-angular-icons": "23.4.0-develop.3",
|
|
116
|
+
"@progress/kendo-angular-common": "23.4.0-develop.3",
|
|
117
|
+
"@progress/kendo-angular-intl": "23.4.0-develop.3",
|
|
118
|
+
"@progress/kendo-angular-l10n": "23.4.0-develop.3",
|
|
119
|
+
"@progress/kendo-angular-menu": "23.4.0-develop.3",
|
|
120
|
+
"@progress/kendo-angular-popup": "23.4.0-develop.3",
|
|
121
|
+
"@progress/kendo-angular-toolbar": "23.4.0-develop.3",
|
|
122
|
+
"@progress/kendo-angular-upload": "23.4.0-develop.3",
|
|
93
123
|
"rxjs": "^6.5.3 || ^7.0.0"
|
|
94
124
|
},
|
|
95
125
|
"dependencies": {
|
|
96
126
|
"tslib": "^2.3.1",
|
|
97
|
-
"@progress/kendo-angular-schematics": "23.4.0-develop.
|
|
127
|
+
"@progress/kendo-angular-schematics": "23.4.0-develop.3"
|
|
98
128
|
},
|
|
99
129
|
"schematics": "./schematics/collection.json",
|
|
100
130
|
"module": "fesm2022/progress-kendo-angular-conversational-ui.mjs",
|