igniteui-angular 19.2.0-rc.0 → 19.2.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.
Files changed (32) hide show
  1. package/fesm2022/igniteui-angular.mjs +42 -5
  2. package/fesm2022/igniteui-angular.mjs.map +1 -1
  3. package/lib/core/styles/components/icon-button/_icon-button-theme.scss +2 -2
  4. package/lib/core/styles/components/input/_input-group-theme.scss +23 -1
  5. package/lib/services/exporter-common/base-export-service.d.ts +2 -0
  6. package/package.json +2 -2
  7. package/styles/igniteui-angular-dark.css +1 -1
  8. package/styles/igniteui-angular.css +1 -1
  9. package/styles/igniteui-bootstrap-dark.css +1 -1
  10. package/styles/igniteui-bootstrap-light.css +1 -1
  11. package/styles/igniteui-dark-green.css +1 -1
  12. package/styles/igniteui-fluent-dark-excel.css +1 -1
  13. package/styles/igniteui-fluent-dark-word.css +1 -1
  14. package/styles/igniteui-fluent-dark.css +1 -1
  15. package/styles/igniteui-fluent-light-excel.css +1 -1
  16. package/styles/igniteui-fluent-light-word.css +1 -1
  17. package/styles/igniteui-fluent-light.css +1 -1
  18. package/styles/igniteui-indigo-dark.css +1 -1
  19. package/styles/igniteui-indigo-light.css +1 -1
  20. package/styles/maps/igniteui-angular-dark.css.map +1 -1
  21. package/styles/maps/igniteui-angular.css.map +1 -1
  22. package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
  23. package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
  24. package/styles/maps/igniteui-dark-green.css.map +1 -1
  25. package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
  26. package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
  27. package/styles/maps/igniteui-fluent-dark.css.map +1 -1
  28. package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
  29. package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
  30. package/styles/maps/igniteui-fluent-light.css.map +1 -1
  31. package/styles/maps/igniteui-indigo-dark.css.map +1 -1
  32. package/styles/maps/igniteui-indigo-light.css.map +1 -1
@@ -3476,7 +3476,7 @@ class BaseFilteringStrategy {
3476
3476
  }
3477
3477
  else if (column.dataType === GridColumnDataType.Time) {
3478
3478
  const date = key ? new Date(key) : key;
3479
- key = date ? new Date().setHours(date.getHours(), date.getMinutes(), date.getSeconds()) : key;
3479
+ key = date ? new Date().setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()) : key;
3480
3480
  item.value = key ? new Date(key) : key;
3481
3481
  }
3482
3482
  else if (column.dataType === GridColumnDataType.Date) {
@@ -4050,11 +4050,15 @@ class IgxBaseExporter {
4050
4050
  if (!isSpecialData) {
4051
4051
  const owner = record.owner === undefined ? DEFAULT_OWNER : record.owner;
4052
4052
  const ownerCols = this._ownersMap.get(owner).columns;
4053
+ const hasRowHeaders = ownerCols.some(c => c.headerType === ExportHeaderType.RowHeader);
4053
4054
  if (record.type !== ExportRecordType.HeaderRecord) {
4054
4055
  const columns = ownerCols
4055
4056
  .filter(c => c.headerType === ExportHeaderType.ColumnHeader && !c.skip)
4056
4057
  .sort((a, b) => a.startIndex - b.startIndex)
4057
4058
  .sort((a, b) => a.pinnedIndex - b.pinnedIndex);
4059
+ if (hasRowHeaders) {
4060
+ record.rawData = record.data;
4061
+ }
4058
4062
  record.data = columns.reduce((a, e) => {
4059
4063
  if (!e.skip) {
4060
4064
  let rawValue = resolveNestedPath(record.data, e.field);
@@ -4176,6 +4180,9 @@ class IgxBaseExporter {
4176
4180
  };
4177
4181
  this.flatRecords.push(pivotGridRecord);
4178
4182
  }
4183
+ if (this.flatRecords.length) {
4184
+ this.flatRecords[0].dimensionKeys = Object.values(this.pivotGridRowDimensionsMap);
4185
+ }
4179
4186
  }
4180
4187
  prepareHierarchicalGridData(grid, hasFiltering, hasSorting) {
4181
4188
  const skipOperations = (!hasFiltering || !this.options.ignoreFiltering) &&
@@ -4915,7 +4922,10 @@ class CharSeparatedValueData {
4915
4922
  this._isSpecialData = ExportUtilities.isSpecialData(this._data[0]);
4916
4923
  this._escapeCharacters.push(this._delimiter);
4917
4924
  const headers = columns && columns.length ?
4918
- columns.map(c => c.header ?? c.field) :
4925
+ /* When column groups are present, always use the field as it indicates the group the column belongs to.
4926
+ * Otherwise, in PivotGrid scenarios we can end up with many duplicated column names without a hint what they represent.
4927
+ */
4928
+ columns.map(c => c.columnGroupParent ? c.field : c.header ?? c.field) :
4919
4929
  keys;
4920
4930
  this._headerRecord = this.processHeaderRecord(headers, this._data.length);
4921
4931
  if (keys.length === 0 || ((!this._data || this._data.length === 0) && keys.length === 0)) {
@@ -5254,9 +5264,28 @@ class IgxCsvExporterService extends IgxBaseExporter {
5254
5264
  this.exportEnded = new EventEmitter();
5255
5265
  }
5256
5266
  exportDataImplementation(data, options, done) {
5257
- data = data.map((item) => item.data);
5267
+ const dimensionKeys = data[0]?.dimensionKeys;
5268
+ data = dimensionKeys?.length ?
5269
+ data.map((item) => item.rawData) :
5270
+ data.map((item) => item.data);
5258
5271
  const columnList = this._ownersMap.get(DEFAULT_OWNER);
5259
- const csvData = new CharSeparatedValueData(data, options.valueDelimiter, columnList?.columns);
5272
+ const columns = columnList?.columns.filter(c => c.headerType === ExportHeaderType.ColumnHeader);
5273
+ if (dimensionKeys) {
5274
+ const dimensionCols = dimensionKeys.map((key) => {
5275
+ const columnInfo = {
5276
+ header: key,
5277
+ field: key,
5278
+ dataType: 'string',
5279
+ skip: false,
5280
+ headerType: ExportHeaderType.ColumnHeader,
5281
+ columnSpan: 1,
5282
+ startIndex: 0
5283
+ };
5284
+ return columnInfo;
5285
+ });
5286
+ columns.unshift(...dimensionCols);
5287
+ }
5288
+ const csvData = new CharSeparatedValueData(data, options.valueDelimiter, columns);
5260
5289
  csvData.prepareDataAsync((r) => {
5261
5290
  this._stringData = r;
5262
5291
  this.saveFile(options);
@@ -92228,7 +92257,15 @@ class IgxSplitterComponent {
92228
92257
  this.resizing.emit(args);
92229
92258
  }
92230
92259
  onMoveEnd(delta) {
92231
- const [paneSize, siblingSize] = this.calcNewSizes(delta);
92260
+ let [paneSize, siblingSize] = this.calcNewSizes(delta);
92261
+ if (paneSize + siblingSize > this.getTotalSize() && delta < 0) {
92262
+ paneSize = this.getTotalSize();
92263
+ siblingSize = 0;
92264
+ }
92265
+ else if (paneSize + siblingSize > this.getTotalSize() && delta > 0) {
92266
+ paneSize = 0;
92267
+ siblingSize = this.getTotalSize();
92268
+ }
92232
92269
  if (this.pane.isPercentageSize) {
92233
92270
  // handle % resizes
92234
92271
  const totalSize = this.getTotalSize();