@progress/kendo-angular-conversational-ui 23.0.0-develop.9 → 23.0.1-develop.1

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
@@ -775,6 +775,83 @@ const tsPropertyTransformer = (source, root, j, packageName, componentType, prop
775
775
  localVariables.add(path.node.id.name);
776
776
  }
777
777
  });
778
+ // Find array variables of type componentType[]
779
+ // This handles cases like: const arr: ChatComponent[] = [...]; arr[0].property = value;
780
+ const arrayVariables = new Set();
781
+ root.find(j.VariableDeclarator).forEach((path) => {
782
+ if (path.node.id.type === 'Identifier' &&
783
+ path.node.id.typeAnnotation &&
784
+ path.node.id.typeAnnotation.typeAnnotation?.type === 'TSArrayType' &&
785
+ path.node.id.typeAnnotation.typeAnnotation.elementType?.type === 'TSTypeReference' &&
786
+ path.node.id.typeAnnotation.typeAnnotation.elementType.typeName?.type === 'Identifier' &&
787
+ path.node.id.typeAnnotation.typeAnnotation.elementType.typeName.name === componentType) {
788
+ arrayVariables.add(path.node.id.name);
789
+ }
790
+ });
791
+ // Find object properties that have componentType (e.g., {chat: ChatComponent})
792
+ // This handles cases like: const config: {chat: ChatComponent} = {...}; config.chat.property = value;
793
+ const objectProperties = new Map(); // Maps variable name to property names
794
+ root.find(j.VariableDeclarator).forEach((path) => {
795
+ if (path.node.id.type === 'Identifier' &&
796
+ path.node.id.typeAnnotation &&
797
+ path.node.id.typeAnnotation.typeAnnotation?.type === 'TSTypeLiteral') {
798
+ const varName = path.node.id.name;
799
+ const members = path.node.id.typeAnnotation.typeAnnotation.members;
800
+ members.forEach((member) => {
801
+ if (member.type === 'TSPropertySignature' &&
802
+ member.key &&
803
+ member.key.type === 'Identifier' &&
804
+ member.typeAnnotation &&
805
+ member.typeAnnotation.typeAnnotation?.type === 'TSTypeReference' &&
806
+ member.typeAnnotation.typeAnnotation.typeName?.type === 'Identifier' &&
807
+ member.typeAnnotation.typeAnnotation.typeName.name === componentType) {
808
+ if (!objectProperties.has(varName)) {
809
+ objectProperties.set(varName, []);
810
+ }
811
+ objectProperties.get(varName).push(member.key.name);
812
+ }
813
+ });
814
+ }
815
+ });
816
+ // Helper function to check if a node is a componentType instance
817
+ const isComponentTypeInstance = (node) => {
818
+ // Direct identifier (parameter or local variable)
819
+ if (node.type === 'Identifier') {
820
+ return parameters.has(node.name) || localVariables.has(node.name);
821
+ }
822
+ // this.property where property is of componentType
823
+ if (node.type === 'MemberExpression' && node.property.type === 'Identifier') {
824
+ if (node.object.type === 'ThisExpression' && properties.has(node.property.name)) {
825
+ return true;
826
+ }
827
+ // Handle nested object properties: objectVar.propertyName where propertyName is of componentType
828
+ if (node.object.type === 'Identifier') {
829
+ const objName = node.object.name;
830
+ const propName = node.property.name;
831
+ if (objectProperties.has(objName)) {
832
+ const props = objectProperties.get(objName);
833
+ return props.includes(propName);
834
+ }
835
+ }
836
+ }
837
+ // Array element access: arrayVar[index]
838
+ if (node.type === 'MemberExpression' &&
839
+ node.object.type === 'Identifier' &&
840
+ arrayVariables.has(node.object.name)) {
841
+ return true;
842
+ }
843
+ // TypeScript type assertions like (this.componentProperty as ComponentType)
844
+ if (node.type === 'TSAsExpression') {
845
+ if (node.typeAnnotation &&
846
+ node.typeAnnotation.type === 'TSTypeReference' &&
847
+ node.typeAnnotation.typeName &&
848
+ node.typeAnnotation.typeName.type === 'Identifier' &&
849
+ node.typeAnnotation.typeName.name === componentType) {
850
+ return true;
851
+ }
852
+ }
853
+ return false;
854
+ };
778
855
  // Find all member expressions where propertyName is accessed on any componentType instance
779
856
  root.find(j.MemberExpression, {
780
857
  property: {
@@ -783,31 +860,7 @@ const tsPropertyTransformer = (source, root, j, packageName, componentType, prop
783
860
  },
784
861
  })
785
862
  .filter((path) => {
786
- // Filter to only include accesses on properties that are componentType instances
787
- if (path.node.object.type === 'MemberExpression' && path.node.object.property.type === 'Identifier') {
788
- // handle properties of this
789
- if (path.node.object.object.type === 'ThisExpression' &&
790
- properties.has(path.node.object.property.name)) {
791
- return true;
792
- }
793
- }
794
- // Handle function parameters and local variables
795
- if (path.node.object.type === 'Identifier') {
796
- return parameters.has(path.node.object.name) || localVariables.has(path.node.object.name);
797
- }
798
- // Handle TypeScript type assertions like (this.componentProperty as ComponentType).property
799
- if (path.node.object.type === 'TSAsExpression') {
800
- const typeAssertion = path.node.object;
801
- // Check if the type assertion is casting to our componentType
802
- if (typeAssertion.typeAnnotation &&
803
- typeAssertion.typeAnnotation.type === 'TSTypeReference' &&
804
- typeAssertion.typeAnnotation.typeName &&
805
- typeAssertion.typeAnnotation.typeName.type === 'Identifier' &&
806
- typeAssertion.typeAnnotation.typeName.name === componentType) {
807
- return true;
808
- }
809
- }
810
- return false;
863
+ return isComponentTypeInstance(path.node.object);
811
864
  })
812
865
  .forEach((path) => {
813
866
  // Replace old property name with new property name
@@ -844,6 +897,91 @@ const tsPropertyTransformer = (source, root, j, packageName, componentType, prop
844
897
  }
845
898
  }
846
899
  });
900
+ // Transform object literal properties in variable declarations and assignments
901
+ // This handles cases like: const obj: ComponentType = { oldProperty: 'value' }
902
+ root.find(j.VariableDeclarator)
903
+ .filter((path) => {
904
+ // Check if the variable has the componentType type annotation
905
+ return Boolean(path.node.id.type === 'Identifier' &&
906
+ path.node.id.typeAnnotation &&
907
+ path.node.id.typeAnnotation.typeAnnotation?.type === 'TSTypeReference' &&
908
+ path.node.id.typeAnnotation.typeAnnotation.typeName?.type === 'Identifier' &&
909
+ path.node.id.typeAnnotation.typeAnnotation.typeName.name === componentType);
910
+ })
911
+ .forEach((path) => {
912
+ // Check if the initializer is an object expression
913
+ if (path.node.init && path.node.init.type === 'ObjectExpression') {
914
+ path.node.init.properties.forEach((prop) => {
915
+ // Rename the property if it matches
916
+ if (prop.type === 'ObjectProperty' &&
917
+ prop.key &&
918
+ prop.key.type === 'Identifier' &&
919
+ prop.key.name === propertyName) {
920
+ prop.key.name = newPropertyName;
921
+ }
922
+ });
923
+ }
924
+ });
925
+ // Transform object literal properties in class properties
926
+ // This handles cases like: customMessages: ComponentType = { oldProperty: 'value' }
927
+ root.find(j.ClassProperty)
928
+ .filter((path) => {
929
+ // Check if the property has the componentType type annotation
930
+ return Boolean(path.node.typeAnnotation &&
931
+ path.node.typeAnnotation.typeAnnotation?.type === 'TSTypeReference' &&
932
+ path.node.typeAnnotation.typeAnnotation.typeName?.type === 'Identifier' &&
933
+ path.node.typeAnnotation.typeAnnotation.typeName.name === componentType);
934
+ })
935
+ .forEach((path) => {
936
+ // Check if the value is an object expression
937
+ if (path.node.value && path.node.value.type === 'ObjectExpression') {
938
+ path.node.value.properties.forEach((prop) => {
939
+ // Rename the property if it matches
940
+ if (prop.type === 'ObjectProperty' &&
941
+ prop.key &&
942
+ prop.key.type === 'Identifier' &&
943
+ prop.key.name === propertyName) {
944
+ prop.key.name = newPropertyName;
945
+ }
946
+ });
947
+ }
948
+ });
949
+ // Transform object literal properties in assignment expressions
950
+ // This handles cases like: this.obj = { oldProperty: 'value' }
951
+ root.find(j.AssignmentExpression)
952
+ .filter((path) => {
953
+ // Check if we're assigning an object literal
954
+ return path.node.right.type === 'ObjectExpression';
955
+ })
956
+ .forEach((path) => {
957
+ // We need to determine if the left side is of componentType
958
+ // This is more complex as we need to check the type of the assignment target
959
+ const leftSide = path.node.left;
960
+ let isTargetComponentType = false;
961
+ // Check if it's a property that we know is of componentType
962
+ if (leftSide.type === 'MemberExpression' && leftSide.property.type === 'Identifier') {
963
+ if (leftSide.object.type === 'ThisExpression' && properties.has(leftSide.property.name)) {
964
+ isTargetComponentType = true;
965
+ }
966
+ else if (leftSide.object.type === 'Identifier' && localVariables.has(leftSide.object.name)) {
967
+ isTargetComponentType = true;
968
+ }
969
+ }
970
+ else if (leftSide.type === 'Identifier') {
971
+ isTargetComponentType = localVariables.has(leftSide.name) || parameters.has(leftSide.name);
972
+ }
973
+ if (isTargetComponentType && path.node.right.type === 'ObjectExpression') {
974
+ path.node.right.properties.forEach((prop) => {
975
+ // Rename the property if it matches
976
+ if (prop.type === 'ObjectProperty' &&
977
+ prop.key &&
978
+ prop.key.type === 'Identifier' &&
979
+ prop.key.name === propertyName) {
980
+ prop.key.name = newPropertyName;
981
+ }
982
+ });
983
+ }
984
+ });
847
985
  }
848
986
  };
849
987
  exports.tsPropertyTransformer = tsPropertyTransformer;
@@ -1022,6 +1160,103 @@ const tsInterfaceTransformer = (fileInfo, rootSource, j, packageName, interfaceN
1022
1160
  path.node.callee.name = newName;
1023
1161
  }
1024
1162
  });
1163
+ // Helper function to recursively transform type references
1164
+ const transformTypeReference = (typeNode) => {
1165
+ if (!typeNode)
1166
+ return;
1167
+ // Handle TSTypeReference (e.g., FileSelectSettings)
1168
+ if (typeNode.type === 'TSTypeReference' &&
1169
+ typeNode.typeName &&
1170
+ typeNode.typeName.type === 'Identifier' &&
1171
+ typeNode.typeName.name === interfaceName) {
1172
+ typeNode.typeName.name = newName;
1173
+ }
1174
+ // Handle TSArrayType (e.g., FileSelectSettings[])
1175
+ if (typeNode.type === 'TSArrayType' && typeNode.elementType) {
1176
+ transformTypeReference(typeNode.elementType);
1177
+ }
1178
+ // Handle generic Array<T> (e.g., Array<FileSelectSettings>)
1179
+ if (typeNode.type === 'TSTypeReference' &&
1180
+ typeNode.typeParameters &&
1181
+ typeNode.typeParameters.params) {
1182
+ typeNode.typeParameters.params.forEach((param) => {
1183
+ transformTypeReference(param);
1184
+ });
1185
+ }
1186
+ // Handle TSTypeLiteral (e.g., { primary: FileSelectSettings })
1187
+ if (typeNode.type === 'TSTypeLiteral' && typeNode.members) {
1188
+ typeNode.members.forEach((member) => {
1189
+ if (member.typeAnnotation && member.typeAnnotation.typeAnnotation) {
1190
+ transformTypeReference(member.typeAnnotation.typeAnnotation);
1191
+ }
1192
+ });
1193
+ }
1194
+ // Handle TSFunctionType (e.g., (settings: FileSelectSettings) => void)
1195
+ if (typeNode.type === 'TSFunctionType') {
1196
+ if (typeNode.parameters) {
1197
+ typeNode.parameters.forEach((param) => {
1198
+ if (param.typeAnnotation && param.typeAnnotation.typeAnnotation) {
1199
+ transformTypeReference(param.typeAnnotation.typeAnnotation);
1200
+ }
1201
+ });
1202
+ }
1203
+ if (typeNode.typeAnnotation && typeNode.typeAnnotation.typeAnnotation) {
1204
+ transformTypeReference(typeNode.typeAnnotation.typeAnnotation);
1205
+ }
1206
+ }
1207
+ };
1208
+ // Apply recursive transformation to all type annotations
1209
+ rootSource.find(j.VariableDeclarator).forEach((path) => {
1210
+ if (path.node.id.type === 'Identifier' &&
1211
+ path.node.id.typeAnnotation &&
1212
+ path.node.id.typeAnnotation.typeAnnotation) {
1213
+ transformTypeReference(path.node.id.typeAnnotation.typeAnnotation);
1214
+ }
1215
+ });
1216
+ rootSource.find(j.ClassProperty).forEach((path) => {
1217
+ if (path.node.typeAnnotation && path.node.typeAnnotation.typeAnnotation) {
1218
+ transformTypeReference(path.node.typeAnnotation.typeAnnotation);
1219
+ }
1220
+ });
1221
+ rootSource.find(j.ClassMethod).forEach((path) => {
1222
+ if (path.node.returnType && path.node.returnType.typeAnnotation) {
1223
+ transformTypeReference(path.node.returnType.typeAnnotation);
1224
+ }
1225
+ // Transform parameter types recursively
1226
+ if (path.node.params) {
1227
+ path.node.params.forEach((param) => {
1228
+ if (param.typeAnnotation && param.typeAnnotation.typeAnnotation) {
1229
+ transformTypeReference(param.typeAnnotation.typeAnnotation);
1230
+ }
1231
+ });
1232
+ }
1233
+ });
1234
+ rootSource.find(j.FunctionDeclaration).forEach((path) => {
1235
+ if (path.node.returnType && path.node.returnType.typeAnnotation) {
1236
+ transformTypeReference(path.node.returnType.typeAnnotation);
1237
+ }
1238
+ // Transform parameter types recursively
1239
+ if (path.node.params) {
1240
+ path.node.params.forEach((param) => {
1241
+ if (param.typeAnnotation && param.typeAnnotation.typeAnnotation) {
1242
+ transformTypeReference(param.typeAnnotation.typeAnnotation);
1243
+ }
1244
+ });
1245
+ }
1246
+ });
1247
+ rootSource.find(j.ArrowFunctionExpression).forEach((path) => {
1248
+ if (path.node.returnType && path.node.returnType.typeAnnotation) {
1249
+ transformTypeReference(path.node.returnType.typeAnnotation);
1250
+ }
1251
+ // Transform parameter types recursively
1252
+ if (path.node.params) {
1253
+ path.node.params.forEach((param) => {
1254
+ if (param.typeAnnotation && param.typeAnnotation.typeAnnotation) {
1255
+ transformTypeReference(param.typeAnnotation.typeAnnotation);
1256
+ }
1257
+ });
1258
+ }
1259
+ });
1025
1260
  }
1026
1261
  };
1027
1262
  exports.tsInterfaceTransformer = tsInterfaceTransformer;
@@ -1035,21 +1270,26 @@ function isComponentTypeMatch(root, j, node, componentType) {
1035
1270
  if (node.type === 'Identifier') {
1036
1271
  const paramName = node.name;
1037
1272
  // Check function parameters
1038
- const isParameter = root.find(j.Function).some((path) => {
1039
- return (path.node.params &&
1040
- path.node.params.some((param) => param.type === 'Identifier' &&
1041
- param.name === paramName &&
1042
- param.typeAnnotation?.typeAnnotation?.typeName?.name === componentType));
1273
+ let isParameter = false;
1274
+ root.find(j.Function).forEach((path) => {
1275
+ if (path.node.params && path.node.params.some((param) => param.type === 'Identifier' &&
1276
+ param.name === paramName &&
1277
+ param.typeAnnotation?.typeAnnotation?.typeName?.name === componentType)) {
1278
+ isParameter = true;
1279
+ }
1043
1280
  });
1044
1281
  if (isParameter)
1045
1282
  return true;
1046
1283
  // Check local variable declarations
1047
- const isLocalVariable = root.find(j.VariableDeclarator).some((path) => {
1048
- return (path.node.id.type === 'Identifier' &&
1284
+ let isLocalVariable = false;
1285
+ root.find(j.VariableDeclarator).forEach((path) => {
1286
+ if (path.node.id.type === 'Identifier' &&
1049
1287
  path.node.id.name === paramName &&
1050
1288
  path.node.id.typeAnnotation?.typeAnnotation?.type === 'TSTypeReference' &&
1051
1289
  path.node.id.typeAnnotation.typeAnnotation.typeName?.type === 'Identifier' &&
1052
- path.node.id.typeAnnotation.typeAnnotation.typeName.name === componentType);
1290
+ path.node.id.typeAnnotation.typeAnnotation.typeName.name === componentType) {
1291
+ isLocalVariable = true;
1292
+ }
1053
1293
  });
1054
1294
  return isLocalVariable;
1055
1295
  }
@@ -1072,13 +1312,14 @@ function isComponentTypeMatch(root, j, node, componentType) {
1072
1312
  const varName = node.object.name;
1073
1313
  const propName = node.property.name;
1074
1314
  // Check if this is an object with a property of componentType
1075
- const hasMatchingProperty = root.find(j.VariableDeclarator).some((path) => {
1315
+ let hasMatchingProperty = false;
1316
+ root.find(j.VariableDeclarator).forEach((path) => {
1076
1317
  if (path.node.id.type === 'Identifier' &&
1077
1318
  path.node.id.name === varName &&
1078
1319
  path.node.id.typeAnnotation &&
1079
1320
  path.node.id.typeAnnotation.typeAnnotation?.type === 'TSTypeLiteral') {
1080
1321
  const members = path.node.id.typeAnnotation.typeAnnotation.members;
1081
- return members.some((member) => {
1322
+ const found = members.some((member) => {
1082
1323
  return (member.type === 'TSPropertySignature' &&
1083
1324
  member.key?.type === 'Identifier' &&
1084
1325
  member.key.name === propName &&
@@ -1086,8 +1327,10 @@ function isComponentTypeMatch(root, j, node, componentType) {
1086
1327
  member.typeAnnotation.typeAnnotation.typeName?.type === 'Identifier' &&
1087
1328
  member.typeAnnotation.typeAnnotation.typeName.name === componentType);
1088
1329
  });
1330
+ if (found) {
1331
+ hasMatchingProperty = true;
1332
+ }
1089
1333
  }
1090
- return false;
1091
1334
  });
1092
1335
  return hasMatchingProperty;
1093
1336
  }
@@ -1097,13 +1340,16 @@ function isComponentTypeMatch(root, j, node, componentType) {
1097
1340
  if (node.type === 'MemberExpression' && node.computed === true && node.object.type === 'Identifier') {
1098
1341
  const arrayName = node.object.name;
1099
1342
  // Check if this array is of type ChatComponent[]
1100
- const isComponentArray = root.find(j.VariableDeclarator).some((path) => {
1101
- return (path.node.id.type === 'Identifier' &&
1343
+ let isComponentArray = false;
1344
+ root.find(j.VariableDeclarator).forEach((path) => {
1345
+ if (path.node.id.type === 'Identifier' &&
1102
1346
  path.node.id.name === arrayName &&
1103
1347
  path.node.id.typeAnnotation?.typeAnnotation?.type === 'TSArrayType' &&
1104
1348
  path.node.id.typeAnnotation.typeAnnotation.elementType?.type === 'TSTypeReference' &&
1105
1349
  path.node.id.typeAnnotation.typeAnnotation.elementType.typeName?.type === 'Identifier' &&
1106
- path.node.id.typeAnnotation.typeAnnotation.elementType.typeName.name === componentType);
1350
+ path.node.id.typeAnnotation.typeAnnotation.elementType.typeName.name === componentType) {
1351
+ isComponentArray = true;
1352
+ }
1107
1353
  });
1108
1354
  return isComponentArray;
1109
1355
  }
@@ -0,0 +1,27 @@
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.default = default_1;
8
+ const utils_1 = require("../utils");
9
+ function default_1(fileInfo, api) {
10
+ const j = api.jscodeshift;
11
+ const rootSource = j(fileInfo.source);
12
+ (0, utils_1.tsInterfaceTransformer)(fileInfo, rootSource, j, '@progress/kendo-angular-upload', 'FileSelectSettings', 'FileSelectButtonSettings');
13
+ // Update import statement from @progress/kendo-angular-upload to @progress/kendo-angular-conversational-ui
14
+ rootSource.find(j.ImportDeclaration, {
15
+ source: { value: '@progress/kendo-angular-upload' }
16
+ }).forEach(path => {
17
+ const specifiers = path.node.specifiers;
18
+ const hasFileSelectButtonSettings = specifiers?.some(spec => spec.type === 'ImportSpecifier' &&
19
+ spec.imported.type === 'Identifier' &&
20
+ spec.imported.name === 'FileSelectButtonSettings');
21
+ if (hasFileSelectButtonSettings) {
22
+ path.node.source.value = '@progress/kendo-angular-conversational-ui';
23
+ }
24
+ });
25
+ //to use single quotes in the transformed file use rootSource.toSource({ quote: 'single' });
26
+ return rootSource.toSource();
27
+ }
@@ -0,0 +1,49 @@
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.default = default_1;
31
+ const fs = __importStar(require("fs"));
32
+ const utils_1 = require("../utils");
33
+ function default_1(fileInfo, api) {
34
+ const filePath = fileInfo.path;
35
+ // Handle HTML files and inline templates
36
+ const htmlResult = (0, utils_1.htmlTransformer)(fileInfo, api, (templateContent) => (0, utils_1.attributeNameUpdate)(templateContent, 'kendo-chat', 'enableFileSelect', 'fileSelectButton'));
37
+ if (filePath.endsWith('.html')) {
38
+ if (htmlResult && htmlResult !== fileInfo.source) {
39
+ fs.writeFileSync(filePath, htmlResult, 'utf-8');
40
+ return htmlResult;
41
+ }
42
+ return fileInfo.source; // Return original source if no changes
43
+ }
44
+ // Handle TypeScript property transformations
45
+ const j = api.jscodeshift;
46
+ const rootSource = j(htmlResult || fileInfo.source);
47
+ (0, utils_1.tsPropertyTransformer)(fileInfo.source, rootSource, j, '@progress/kendo-angular-conversational-ui', 'ChatComponent', 'enableFileSelect', 'fileSelectButton');
48
+ return rootSource.toSource();
49
+ }
@@ -0,0 +1,49 @@
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.default = default_1;
31
+ const fs = __importStar(require("fs"));
32
+ const utils_1 = require("../utils");
33
+ function default_1(fileInfo, api) {
34
+ const filePath = fileInfo.path;
35
+ // Handle HTML files and inline templates
36
+ const htmlResult = (0, utils_1.htmlTransformer)(fileInfo, api, (templateContent) => (0, utils_1.attributeNameUpdate)(templateContent, 'kendo-chat', 'enableSpeechToText', 'speechToTextButton'));
37
+ if (filePath.endsWith('.html')) {
38
+ if (htmlResult && htmlResult !== fileInfo.source) {
39
+ fs.writeFileSync(filePath, htmlResult, 'utf-8');
40
+ return htmlResult;
41
+ }
42
+ return fileInfo.source; // Return original source if no changes
43
+ }
44
+ // Handle TypeScript property transformations
45
+ const j = api.jscodeshift;
46
+ const rootSource = j(htmlResult || fileInfo.source);
47
+ (0, utils_1.tsPropertyTransformer)(fileInfo.source, rootSource, j, '@progress/kendo-angular-conversational-ui', 'ChatComponent', 'enableSpeechToText', 'speechToTextButton');
48
+ return rootSource.toSource();
49
+ }
@@ -0,0 +1,49 @@
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.default = default_1;
31
+ const fs = __importStar(require("fs"));
32
+ const utils_1 = require("../utils");
33
+ function default_1(fileInfo, api) {
34
+ const filePath = fileInfo.path;
35
+ // Handle HTML files and inline templates
36
+ const htmlResult = (0, utils_1.htmlTransformer)(fileInfo, api, (templateContent) => (0, utils_1.attributeNameUpdate)(templateContent, 'kendo-chat-messages', 'send', 'actionButtonTitle'));
37
+ if (filePath.endsWith('.html')) {
38
+ if (htmlResult && htmlResult !== fileInfo.source) {
39
+ fs.writeFileSync(filePath, htmlResult, 'utf-8');
40
+ return htmlResult;
41
+ }
42
+ return fileInfo.source; // Return original source if no changes
43
+ }
44
+ // Handle TypeScript property transformations
45
+ const j = api.jscodeshift;
46
+ const rootSource = j(htmlResult || fileInfo.source);
47
+ (0, utils_1.tsPropertyTransformer)(fileInfo.source, rootSource, j, '@progress/kendo-angular-conversational-ui', 'CustomMessagesComponent', 'send', 'actionButtonTitle');
48
+ return rootSource.toSource();
49
+ }
@@ -11,7 +11,7 @@ import { isPresent, normalizeKeys, Keys, focusableSelector, guid, getter, isDocu
11
11
  import { DialogContainerService, DialogService, WindowService, WindowContainerService } from '@progress/kendo-angular-dialog';
12
12
  import { NgTemplateOutlet, NgClass } from '@angular/common';
13
13
  import { Subject, Subscription, fromEvent } from 'rxjs';
14
- import { moreHorizontalIcon, commentIcon, sparklesIcon, stopSmIcon, thumbUpIcon, thumbDownOutlineIcon, thumbDownIcon, thumbUpOutlineIcon, copyIcon, arrowRotateCwIcon, chevronUpIcon, chevronDownIcon, arrowUpOutlineIcon, undoIcon, downloadIcon, chevronLeftIcon, chevronRightIcon, xIcon, moreVerticalIcon, paperclipOutlineAltRightIcon, arrowRotateCwOutlineIcon, warningTriangleIcon, pinOutlineIcon, arrowDownOutlineIcon, cancelOutlineIcon, menuIcon, paperPlaneIcon } from '@progress/kendo-svg-icons';
14
+ import { moreHorizontalIcon, commentIcon, sparklesIcon, stopSmIcon, thumbUpIcon, thumbDownOutlineIcon, thumbDownIcon, thumbUpOutlineIcon, copyIcon, arrowRotateCwIcon, chevronUpIcon, chevronDownIcon, arrowUpOutlineIcon, paperclipOutlineAltRightIcon, undoIcon, downloadIcon, chevronLeftIcon, chevronRightIcon, xIcon, moreVerticalIcon, arrowRotateCwOutlineIcon, warningTriangleIcon, pinOutlineIcon, arrowDownOutlineIcon, cancelOutlineIcon, menuIcon, paperPlaneIcon } from '@progress/kendo-svg-icons';
15
15
  import * as i1 from '@progress/kendo-angular-l10n';
16
16
  import { ComponentMessages, LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';
17
17
  import { validatePackage } from '@progress/kendo-licensing';
@@ -216,7 +216,7 @@ const packageMetadata = {
216
216
  productCode: 'KENDOUIANGULAR',
217
217
  productCodes: ['KENDOUIANGULAR'],
218
218
  publishDate: 0,
219
- version: '23.0.0-develop.9',
219
+ version: '23.0.1-develop.1',
220
220
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
221
221
  };
222
222
 
@@ -2025,6 +2025,7 @@ const STB_DEFAULT_SETTINGS$1 = {
2025
2025
  lang: 'en-US',
2026
2026
  maxAlternatives: 1,
2027
2027
  size: 'small',
2028
+ rounded: 'full',
2028
2029
  };
2029
2030
  /**
2030
2031
  * @hidden
@@ -2043,7 +2044,11 @@ const SEND_BTN_DEFAULT_SETTINGS = {
2043
2044
  const FILESELECT_BUTTON_DEFAULT_SETTINGS$1 = {
2044
2045
  multiple: true,
2045
2046
  disabled: false,
2046
- fillMode: 'clear'
2047
+ fillMode: 'clear',
2048
+ icon: 'paperclip-outline-alt-right',
2049
+ svgIcon: paperclipOutlineAltRightIcon,
2050
+ size: 'small',
2051
+ rounded: 'full',
2047
2052
  };
2048
2053
  /**
2049
2054
  * @hidden
@@ -3063,6 +3068,7 @@ class ChatFileComponent extends ChatItem {
3063
3068
  kendoButton
3064
3069
  [attr.title]="textFor('removeFileTitle')"
3065
3070
  [svgIcon]="deleteIcon"
3071
+ icon="x"
3066
3072
  (click)="remove.emit(chatFile)"
3067
3073
  fillMode="flat"
3068
3074
  ></button>
@@ -3106,6 +3112,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
3106
3112
  kendoButton
3107
3113
  [attr.title]="textFor('removeFileTitle')"
3108
3114
  [svgIcon]="deleteIcon"
3115
+ icon="x"
3109
3116
  (click)="remove.emit(chatFile)"
3110
3117
  fillMode="flat"
3111
3118
  ></button>
@@ -3438,6 +3445,7 @@ const STB_DEFAULT_SETTINGS = {
3438
3445
  lang: 'en-US',
3439
3446
  maxAlternatives: 1,
3440
3447
  size: 'small',
3448
+ rounded: 'full',
3441
3449
  };
3442
3450
  /**
3443
3451
  * @hidden
@@ -3446,6 +3454,7 @@ const FILESELECT_BUTTON_DEFAULT_SETTINGS = {
3446
3454
  disabled: false,
3447
3455
  fillMode: 'flat',
3448
3456
  size: 'small',
3457
+ rounded: 'full',
3449
3458
  icon: 'paperclip-outline-alt-right',
3450
3459
  svgIcon: paperclipOutlineAltRightIcon,
3451
3460
  multiple: true,
@@ -3794,7 +3803,7 @@ class PromptBoxFileSelectButtonComponent extends PromptBoxBaseTool {
3794
3803
  this.disabled = false;
3795
3804
  this.fillMode = 'flat';
3796
3805
  this.size = 'small';
3797
- this.icon = 'paperclip';
3806
+ this.icon = 'paperclip-outline-alt-right';
3798
3807
  this.svgIcon = paperclipOutlineAltRightIcon;
3799
3808
  }
3800
3809
  /**
@@ -3832,13 +3841,13 @@ class PromptBoxFileSelectButtonComponent extends PromptBoxBaseTool {
3832
3841
  [attr.title]="title || textFor('fileSelectButtonTitle')"
3833
3842
  [disabled]="disabled"
3834
3843
  [fillMode]="fillMode"
3835
- [icon]="icon"
3836
- [iconClass]="iconClass"
3837
3844
  [imageUrl]="imageUrl"
3838
3845
  [rounded]="rounded"
3839
3846
  [size]="size"
3840
- [svgIcon]="svgIcon"
3841
3847
  [themeColor]="themeColor"
3848
+ [icon]="iconClass ? undefined : icon"
3849
+ [svgIcon]="iconClass ? undefined : svgIcon"
3850
+ [iconClass]="iconClass"
3842
3851
  (click)="selectFiles()"
3843
3852
  ></button>
3844
3853
  <kendo-fileselect
@@ -3870,13 +3879,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
3870
3879
  [attr.title]="title || textFor('fileSelectButtonTitle')"
3871
3880
  [disabled]="disabled"
3872
3881
  [fillMode]="fillMode"
3873
- [icon]="icon"
3874
- [iconClass]="iconClass"
3875
3882
  [imageUrl]="imageUrl"
3876
3883
  [rounded]="rounded"
3877
3884
  [size]="size"
3878
- [svgIcon]="svgIcon"
3879
3885
  [themeColor]="themeColor"
3886
+ [icon]="iconClass ? undefined : icon"
3887
+ [svgIcon]="iconClass ? undefined : svgIcon"
3888
+ [iconClass]="iconClass"
3880
3889
  (click)="selectFiles()"
3881
3890
  ></button>
3882
3891
  <kendo-fileselect
@@ -3951,6 +3960,7 @@ class PromptBoxFileComponent {
3951
3960
  kendoButton
3952
3961
  [attr.title]="textFor('removeFileTitle')"
3953
3962
  [svgIcon]="deleteIcon"
3963
+ icon="x"
3954
3964
  [disabled]="disabled"
3955
3965
  (click)="remove.emit(promptBoxFile)"
3956
3966
  fillMode="flat"
@@ -3978,6 +3988,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
3978
3988
  kendoButton
3979
3989
  [attr.title]="textFor('removeFileTitle')"
3980
3990
  [svgIcon]="deleteIcon"
3991
+ icon="x"
3981
3992
  [disabled]="disabled"
3982
3993
  (click)="remove.emit(promptBoxFile)"
3983
3994
  fillMode="flat"
@@ -4534,6 +4545,7 @@ class PromptBoxComponent {
4534
4545
  this.ngZone = ngZone;
4535
4546
  this.localization = localization;
4536
4547
  this.hostElement = hostElement;
4548
+ validatePackage(packageMetadata);
4537
4549
  }
4538
4550
  ngAfterViewInit() {
4539
4551
  if (this.mode !== 'single' && this.textareaElement) {
@@ -5768,13 +5780,14 @@ class MessageBoxComponent {
5768
5780
  kendoButton
5769
5781
  [attr.title]="textFor('removeReplyTitle')"
5770
5782
  [svgIcon]="deleteIcon"
5783
+ icon="x"
5771
5784
  (click)="removeReply()"
5772
5785
  fillMode="flat"
5773
5786
  ></button>
5774
5787
  </div>
5775
5788
  </ng-template>
5776
5789
  }
5777
- <kendo-promptbox-end-affix>
5790
+ <kendo-promptbox-start-affix>
5778
5791
  @if (fileSelectButton) {
5779
5792
  <kendo-promptbox-fileselect-button
5780
5793
  [disabled]="fileSelectButtonSettings?.disabled"
@@ -5785,9 +5798,14 @@ class MessageBoxComponent {
5785
5798
  [restrictions]="fileSelectButtonSettings?.restrictions"
5786
5799
  [multiple]="fileSelectButtonSettings?.multiple"
5787
5800
  [accept]="fileSelectButtonSettings?.accept"
5801
+ [svgIcon]="fileSelectButtonSettings?.svgIcon"
5802
+ [icon]="fileSelectButtonSettings?.icon"
5803
+ [iconClass]="fileSelectButtonSettings?.iconClass"
5804
+ [imageUrl]="fileSelectButtonSettings?.imageUrl"
5788
5805
  ></kendo-promptbox-fileselect-button>
5789
5806
  }
5790
- <div class="k-spacer"></div>
5807
+ </kendo-promptbox-start-affix>
5808
+ <kendo-promptbox-end-affix>
5791
5809
  @if (speechToTextButtonSettings) {
5792
5810
  <kendo-promptbox-speech-to-text-button
5793
5811
  [continuous]="speechToTextButtonSettings?.continuous"
@@ -5820,7 +5838,7 @@ class MessageBoxComponent {
5820
5838
  } @if (messageBoxTemplate?.templateRef) {
5821
5839
  <ng-template [ngTemplateOutlet]="messageBoxTemplate?.templateRef"></ng-template>
5822
5840
  }
5823
- `, isInline: true, dependencies: [{ kind: "component", type: ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: PromptBoxComponent, selector: "kendo-promptbox", inputs: ["disabled", "focusableId", "loading", "placeholder", "readonly", "title", "mode", "rows", "maxTextAreaHeight", "value", "actionButton", "fileSelectButton", "speechToTextButton"], outputs: ["valueChange", "focus", "blur", "inputFocus", "inputBlur", "promptAction", "selectAttachments", "fileRemove", "speechToTextClick", "speechToTextStart", "speechToTextEnd", "speechToTextError", "speechToTextResult"], exportAs: ["kendoPromptBox"] }, { kind: "component", type: PromptBoxCustomMessagesComponent, selector: "kendo-promptbox-messages" }, { kind: "directive", type: PromptBoxHeaderTemplateDirective, selector: "[kendoPromptBoxHeaderTemplate]" }, { kind: "component", type: PromptBoxEndAffixComponent, selector: "kendo-promptbox-end-affix", exportAs: ["kendoPromptBoxEndAffix"] }, { kind: "component", type: PromptBoxActionButtonComponent, selector: "kendo-promptbox-action-button", inputs: ["buttonClass", "loading", "loadingIcon", "loadingSVGIcon"], outputs: ["promptAction"], exportAs: ["kendoPromptBoxActionButton"] }, { kind: "component", type: PromptBoxFileSelectButtonComponent, selector: "kendo-promptbox-fileselect-button", inputs: ["restrictions", "multiple", "accept"], outputs: ["selectAttachments"], exportAs: ["kendoPromptBoxFileSelectButton"] }, { kind: "component", type: PromptBoxSpeechToTextButtonComponent, selector: "kendo-promptbox-speech-to-text-button", inputs: ["continuous", "integrationMode", "interimResults", "lang", "maxAlternatives"], outputs: ["stbClick", "stbStart", "stbEnd", "stbError", "stbResult"], exportAs: ["kendoPromptBoxSpeechToTextButton"] }, { kind: "component", type: MessageReferenceComponent, selector: "chat-message-reference-content", inputs: ["message"] }, { kind: "component", type: SuggestedActionsComponent, selector: "kendo-chat-suggested-actions", inputs: ["actions", "suggestions", "tabbable", "type", "suggestionTemplate"], outputs: ["dispatchAction", "dispatchSuggestion"] }] });
5841
+ `, isInline: true, dependencies: [{ kind: "component", type: ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: PromptBoxComponent, selector: "kendo-promptbox", inputs: ["disabled", "focusableId", "loading", "placeholder", "readonly", "title", "mode", "rows", "maxTextAreaHeight", "value", "actionButton", "fileSelectButton", "speechToTextButton"], outputs: ["valueChange", "focus", "blur", "inputFocus", "inputBlur", "promptAction", "selectAttachments", "fileRemove", "speechToTextClick", "speechToTextStart", "speechToTextEnd", "speechToTextError", "speechToTextResult"], exportAs: ["kendoPromptBox"] }, { kind: "component", type: PromptBoxCustomMessagesComponent, selector: "kendo-promptbox-messages" }, { kind: "directive", type: PromptBoxHeaderTemplateDirective, selector: "[kendoPromptBoxHeaderTemplate]" }, { kind: "component", type: PromptBoxStartAffixComponent, selector: "kendo-promptbox-start-affix", exportAs: ["kendoPromptBoxStartAffix"] }, { kind: "component", type: PromptBoxEndAffixComponent, selector: "kendo-promptbox-end-affix", exportAs: ["kendoPromptBoxEndAffix"] }, { kind: "component", type: PromptBoxActionButtonComponent, selector: "kendo-promptbox-action-button", inputs: ["buttonClass", "loading", "loadingIcon", "loadingSVGIcon"], outputs: ["promptAction"], exportAs: ["kendoPromptBoxActionButton"] }, { kind: "component", type: PromptBoxFileSelectButtonComponent, selector: "kendo-promptbox-fileselect-button", inputs: ["restrictions", "multiple", "accept"], outputs: ["selectAttachments"], exportAs: ["kendoPromptBoxFileSelectButton"] }, { kind: "component", type: PromptBoxSpeechToTextButtonComponent, selector: "kendo-promptbox-speech-to-text-button", inputs: ["continuous", "integrationMode", "interimResults", "lang", "maxAlternatives"], outputs: ["stbClick", "stbStart", "stbEnd", "stbError", "stbResult"], exportAs: ["kendoPromptBoxSpeechToTextButton"] }, { kind: "component", type: MessageReferenceComponent, selector: "chat-message-reference-content", inputs: ["message"] }, { kind: "component", type: SuggestedActionsComponent, selector: "kendo-chat-suggested-actions", inputs: ["actions", "suggestions", "tabbable", "type", "suggestionTemplate"], outputs: ["dispatchAction", "dispatchSuggestion"] }] });
5824
5842
  }
5825
5843
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: MessageBoxComponent, decorators: [{
5826
5844
  type: Component,
@@ -5873,13 +5891,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
5873
5891
  kendoButton
5874
5892
  [attr.title]="textFor('removeReplyTitle')"
5875
5893
  [svgIcon]="deleteIcon"
5894
+ icon="x"
5876
5895
  (click)="removeReply()"
5877
5896
  fillMode="flat"
5878
5897
  ></button>
5879
5898
  </div>
5880
5899
  </ng-template>
5881
5900
  }
5882
- <kendo-promptbox-end-affix>
5901
+ <kendo-promptbox-start-affix>
5883
5902
  @if (fileSelectButton) {
5884
5903
  <kendo-promptbox-fileselect-button
5885
5904
  [disabled]="fileSelectButtonSettings?.disabled"
@@ -5890,9 +5909,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
5890
5909
  [restrictions]="fileSelectButtonSettings?.restrictions"
5891
5910
  [multiple]="fileSelectButtonSettings?.multiple"
5892
5911
  [accept]="fileSelectButtonSettings?.accept"
5912
+ [svgIcon]="fileSelectButtonSettings?.svgIcon"
5913
+ [icon]="fileSelectButtonSettings?.icon"
5914
+ [iconClass]="fileSelectButtonSettings?.iconClass"
5915
+ [imageUrl]="fileSelectButtonSettings?.imageUrl"
5893
5916
  ></kendo-promptbox-fileselect-button>
5894
5917
  }
5895
- <div class="k-spacer"></div>
5918
+ </kendo-promptbox-start-affix>
5919
+ <kendo-promptbox-end-affix>
5896
5920
  @if (speechToTextButtonSettings) {
5897
5921
  <kendo-promptbox-speech-to-text-button
5898
5922
  [continuous]="speechToTextButtonSettings?.continuous"
@@ -5933,6 +5957,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
5933
5957
  PromptBoxComponent,
5934
5958
  PromptBoxCustomMessagesComponent,
5935
5959
  PromptBoxHeaderTemplateDirective,
5960
+ PromptBoxStartAffixComponent,
5936
5961
  PromptBoxEndAffixComponent,
5937
5962
  PromptBoxActionButtonComponent,
5938
5963
  PromptBoxFileSelectButtonComponent,
@@ -6591,7 +6616,7 @@ class MessageComponent extends ChatItem {
6591
6616
  </div>
6592
6617
  </div>
6593
6618
  } @if (!message.typing) { @if (useCustomContentTemplate) { @if (message.failed) {
6594
- <button kendoButton class="k-resend-button" size="small" fillMode="clear" [svgIcon]="resendIcon" (click)="onResendMessage($event)"></button>
6619
+ <button kendoButton class="k-resend-button" size="small" fillMode="clear" icon="arrow-rotate-cw-outline" [svgIcon]="resendIcon" (click)="onResendMessage($event)"></button>
6595
6620
  }
6596
6621
  <div
6597
6622
  class="k-chat-bubble k-bubble"
@@ -6627,7 +6652,7 @@ class MessageComponent extends ChatItem {
6627
6652
  }
6628
6653
  </div>
6629
6654
  } @if (!useCustomContentTemplate && hasMessageContent) { @if (message.failed) {
6630
- <button kendoButton class="k-resend-button" size="small" fillMode="clear" [svgIcon]="resendIcon" (click)="onResendMessage($event)"></button>
6655
+ <button kendoButton class="k-resend-button" size="small" fillMode="clear" icon="arrow-rotate-cw-outline" [svgIcon]="resendIcon" (click)="onResendMessage($event)"></button>
6631
6656
  }
6632
6657
  <div
6633
6658
  class="k-chat-bubble k-bubble"
@@ -6808,7 +6833,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
6808
6833
  </div>
6809
6834
  </div>
6810
6835
  } @if (!message.typing) { @if (useCustomContentTemplate) { @if (message.failed) {
6811
- <button kendoButton class="k-resend-button" size="small" fillMode="clear" [svgIcon]="resendIcon" (click)="onResendMessage($event)"></button>
6836
+ <button kendoButton class="k-resend-button" size="small" fillMode="clear" icon="arrow-rotate-cw-outline" [svgIcon]="resendIcon" (click)="onResendMessage($event)"></button>
6812
6837
  }
6813
6838
  <div
6814
6839
  class="k-chat-bubble k-bubble"
@@ -6844,7 +6869,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
6844
6869
  }
6845
6870
  </div>
6846
6871
  } @if (!useCustomContentTemplate && hasMessageContent) { @if (message.failed) {
6847
- <button kendoButton class="k-resend-button" size="small" fillMode="clear" [svgIcon]="resendIcon" (click)="onResendMessage($event)"></button>
6872
+ <button kendoButton class="k-resend-button" size="small" fillMode="clear" icon="arrow-rotate-cw-outline" [svgIcon]="resendIcon" (click)="onResendMessage($event)"></button>
6848
6873
  }
6849
6874
  <div
6850
6875
  class="k-chat-bubble k-bubble"
@@ -9031,7 +9056,7 @@ class ChatComponent {
9031
9056
  <kendo-icon-wrapper name="pin" [svgIcon]="pinIcon"> </kendo-icon-wrapper>
9032
9057
  <chat-message-reference-content [message]="pinnedMessage"></chat-message-reference-content>
9033
9058
  <span class="k-spacer"></span>
9034
- <button kendoButton [svgIcon]="deleteIcon" [attr.title]="textFor('unpinMessageTitle')" (click)="unpin.emit(pinnedMessage)" fillMode="flat"></button>
9059
+ <button kendoButton icon="x" [svgIcon]="deleteIcon" [attr.title]="textFor('unpinMessageTitle')" (click)="unpin.emit(pinnedMessage)" fillMode="flat"></button>
9035
9060
  </div>
9036
9061
  } @if (processedMessages && processedMessages.length === 0) {
9037
9062
  <div class="k-message-list-content k-message-list-content-empty">
@@ -9064,6 +9089,7 @@ class ChatComponent {
9064
9089
  [size]="'small'"
9065
9090
  [themeColor]="'light'"
9066
9091
  [align]="{ horizontal: 'center' }"
9092
+ icon="arrow-down-outline"
9067
9093
  [svgIcon]="scrollToBottomIcon"
9068
9094
  (click)="anchor.scrollToBottom()"
9069
9095
  ></kendo-floatingactionbutton>
@@ -9216,7 +9242,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
9216
9242
  <kendo-icon-wrapper name="pin" [svgIcon]="pinIcon"> </kendo-icon-wrapper>
9217
9243
  <chat-message-reference-content [message]="pinnedMessage"></chat-message-reference-content>
9218
9244
  <span class="k-spacer"></span>
9219
- <button kendoButton [svgIcon]="deleteIcon" [attr.title]="textFor('unpinMessageTitle')" (click)="unpin.emit(pinnedMessage)" fillMode="flat"></button>
9245
+ <button kendoButton icon="x" [svgIcon]="deleteIcon" [attr.title]="textFor('unpinMessageTitle')" (click)="unpin.emit(pinnedMessage)" fillMode="flat"></button>
9220
9246
  </div>
9221
9247
  } @if (processedMessages && processedMessages.length === 0) {
9222
9248
  <div class="k-message-list-content k-message-list-content-empty">
@@ -9249,6 +9275,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
9249
9275
  [size]="'small'"
9250
9276
  [themeColor]="'light'"
9251
9277
  [align]="{ horizontal: 'center' }"
9278
+ icon="arrow-down-outline"
9252
9279
  [svgIcon]="scrollToBottomIcon"
9253
9280
  (click)="anchor.scrollToBottom()"
9254
9281
  ></kendo-floatingactionbutton>
@@ -7,7 +7,7 @@ export const packageMetadata = {
7
7
  "productCodes": [
8
8
  "KENDOUIANGULAR"
9
9
  ],
10
- "publishDate": 1770392117,
11
- "version": "23.0.0-develop.9",
10
+ "publishDate": 1770808444,
11
+ "version": "23.0.1-develop.1",
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.0.0-develop.9",
3
+ "version": "23.0.1-develop.1",
4
4
  "description": "Kendo UI for Angular Conversational UI components",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "author": "Progress",
@@ -41,13 +41,35 @@
41
41
  "file": "codemods/v21/chat-pinnedbyfield.js",
42
42
  "prompt": "true"
43
43
  }
44
+ ],
45
+ "23": [
46
+ {
47
+ "description": "The Chat's enableSpeechToText input property is renamed to speechToTextButton.",
48
+ "file": "codemods/v23/chat-enableSpeechToText.js",
49
+ "prompt": "true"
50
+ },
51
+ {
52
+ "description": "The Chat's enableFileSelect input property is renamed to fileSelectButton.",
53
+ "file": "codemods/v23/chat-enableFileSelect.js",
54
+ "prompt": "true"
55
+ },
56
+ {
57
+ "description": "The Chat's FileSelectSettings is changed to FileSelectButtonSettings.",
58
+ "file": "codemods/v23/chat-FileSelectSettings.js",
59
+ "prompt": "true"
60
+ },
61
+ {
62
+ "description": "The CustomMessagesComponent's send property is renamed to actionButtonTitle.",
63
+ "file": "codemods/v23/customMessages-send.js",
64
+ "prompt": "true"
65
+ }
44
66
  ]
45
67
  }
46
68
  },
47
69
  "package": {
48
70
  "productName": "Kendo UI for Angular",
49
71
  "productCode": "KENDOUIANGULAR",
50
- "publishDate": 1770392117,
72
+ "publishDate": 1770808444,
51
73
  "licensingDocsUrl": "https://www.telerik.com/kendo-angular-ui/my-license/"
52
74
  }
53
75
  },
@@ -57,22 +79,22 @@
57
79
  "@angular/core": "19 - 21",
58
80
  "@angular/platform-browser": "19 - 21",
59
81
  "@progress/kendo-licensing": "^1.10.0",
60
- "@progress/kendo-angular-buttons": "23.0.0-develop.9",
61
- "@progress/kendo-angular-inputs": "23.0.0-develop.9",
62
- "@progress/kendo-angular-layout": "23.0.0-develop.9",
63
- "@progress/kendo-angular-icons": "23.0.0-develop.9",
64
- "@progress/kendo-angular-common": "23.0.0-develop.9",
65
- "@progress/kendo-angular-intl": "23.0.0-develop.9",
66
- "@progress/kendo-angular-l10n": "23.0.0-develop.9",
67
- "@progress/kendo-angular-menu": "23.0.0-develop.9",
68
- "@progress/kendo-angular-popup": "23.0.0-develop.9",
69
- "@progress/kendo-angular-toolbar": "23.0.0-develop.9",
70
- "@progress/kendo-angular-upload": "23.0.0-develop.9",
82
+ "@progress/kendo-angular-buttons": "23.0.1-develop.1",
83
+ "@progress/kendo-angular-inputs": "23.0.1-develop.1",
84
+ "@progress/kendo-angular-layout": "23.0.1-develop.1",
85
+ "@progress/kendo-angular-icons": "23.0.1-develop.1",
86
+ "@progress/kendo-angular-common": "23.0.1-develop.1",
87
+ "@progress/kendo-angular-intl": "23.0.1-develop.1",
88
+ "@progress/kendo-angular-l10n": "23.0.1-develop.1",
89
+ "@progress/kendo-angular-menu": "23.0.1-develop.1",
90
+ "@progress/kendo-angular-popup": "23.0.1-develop.1",
91
+ "@progress/kendo-angular-toolbar": "23.0.1-develop.1",
92
+ "@progress/kendo-angular-upload": "23.0.1-develop.1",
71
93
  "rxjs": "^6.5.3 || ^7.0.0"
72
94
  },
73
95
  "dependencies": {
74
96
  "tslib": "^2.3.1",
75
- "@progress/kendo-angular-schematics": "23.0.0-develop.9"
97
+ "@progress/kendo-angular-schematics": "23.0.1-develop.1"
76
98
  },
77
99
  "schematics": "./schematics/collection.json",
78
100
  "module": "fesm2022/progress-kendo-angular-conversational-ui.mjs",