@progress/kendo-angular-popup 24.0.0-develop.9 → 24.0.0

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.
@@ -4,7 +4,7 @@
4
4
  *-------------------------------------------------------------------------------------------*/
5
5
  "use strict";
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.tsInterfaceTransformer = exports.tsPropertyValueTransformer = exports.tsPropertyTransformer = exports.tsComponentPropertyRemoval = exports.attributeRemoval = exports.attributeValueUpdate = exports.attributeNameValueUpdate = exports.attributeNameUpdate = exports.eventUpdate = exports.htmlTransformer = exports.blockTextElements = void 0;
7
+ exports.tsInterfaceTransformer = exports.tsPropertyValueTransformer = exports.tsPropertyTransformer = exports.tsComponentPropertyRemoval = exports.attributeConditionalRemoval = exports.attributeRemoval = exports.attributeValueUpdate = exports.attributeNameValueUpdate = exports.attributeNameUpdate = exports.eventUpdate = exports.htmlTransformer = exports.blockTextElements = void 0;
8
8
  exports.hasKendoInTemplate = hasKendoInTemplate;
9
9
  exports.isImportedFromPackage = isImportedFromPackage;
10
10
  exports.tsPropertyRemoval = tsPropertyRemoval;
@@ -345,6 +345,34 @@ const attributeRemoval = (templateContent, tagName, attributeName, propertyToRem
345
345
  });
346
346
  };
347
347
  exports.attributeRemoval = attributeRemoval;
348
+ /**
349
+ * Removes an attribute from a tag only when its value matches one of the specified values.
350
+ * Handles both static (`attr="value"`) and bound (`[attr]="'value'"`) forms.
351
+ *
352
+ * @param templateContent - The template string content to transform
353
+ * @param tagName - The HTML tag name to target (e.g., 'kendo-button')
354
+ * @param attributeName - The attribute name to conditionally remove
355
+ * @param values - The attribute values that trigger removal
356
+ * @returns The transformed template content
357
+ */
358
+ const attributeConditionalRemoval = (templateContent, tagName, attributeName, values) => {
359
+ const escapeRegex = (str) => str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
360
+ const escapedTag = escapeRegex(tagName);
361
+ const escapedAttr = escapeRegex(attributeName);
362
+ // Remove bound attributes [attribute]="value"
363
+ const boundAttributePattern = new RegExp(`(<${escapedTag}[^>]*?)\\s+\\[${escapedAttr}\\]\\s*=\\s*("(?:[^"\\\\]|\\\\.)*?"|'(?:[^'\\\\]|\\\\.)*?'|[^\\s>]+)([^>]*?>)`, 'gi');
364
+ // Remove static attributes attribute="value"
365
+ const staticAttributePattern = new RegExp(`(<${escapedTag}[^>]*?)\\s+${escapedAttr}\\s*=\\s*("(?:[^"\\\\]|\\\\.)*?"|'(?:[^'\\\\]|\\\\.)*?'|[^\\s>]+)([^>]*?>)`, 'gi');
366
+ // Strip outer and inner quotes to extract the raw value for comparison
367
+ const matchesValue = (raw) => {
368
+ const inner = raw.replace(/^["']|["']$/g, '').replace(/^['"]|['"]$/g, '');
369
+ return values.includes(inner);
370
+ };
371
+ let result = templateContent.replace(boundAttributePattern, (match, prefix, value, suffix) => matchesValue(value) ? prefix + suffix : match);
372
+ result = result.replace(staticAttributePattern, (match, prefix, value, suffix) => matchesValue(value) ? prefix + suffix : match);
373
+ return result;
374
+ };
375
+ exports.attributeConditionalRemoval = attributeConditionalRemoval;
348
376
  function tsPropertyRemoval(source, rootSource, j, packageName, typeName, propertyName) {
349
377
  if (source.includes(typeName)) {
350
378
  if (!isImportedFromPackage(rootSource, j, packageName, typeName)) {
@@ -441,8 +469,31 @@ function tsPropertyRemoval(source, rootSource, j, packageName, typeName, propert
441
469
  }
442
470
  }
443
471
  });
444
- // Handle return statements with object literals
472
+ // Handle return statements with object literals, but only when the enclosing
473
+ // function's declared return type matches typeName. This prevents removing
474
+ // unrelated propertyName keys from object literals returned in other functions.
475
+ const enclosingFunctionReturnsType = (nodePath) => {
476
+ let current = nodePath.parent;
477
+ while (current) {
478
+ const node = current.node;
479
+ if (node.type === 'FunctionDeclaration' ||
480
+ node.type === 'FunctionExpression' ||
481
+ node.type === 'ArrowFunctionExpression' ||
482
+ node.type === 'ClassMethod' ||
483
+ node.type === 'ObjectMethod') {
484
+ return !!(node.returnType &&
485
+ node.returnType.typeAnnotation?.type === 'TSTypeReference' &&
486
+ node.returnType.typeAnnotation.typeName?.type === 'Identifier' &&
487
+ node.returnType.typeAnnotation.typeName.name === typeName);
488
+ }
489
+ current = current.parent;
490
+ }
491
+ return false;
492
+ };
445
493
  rootSource.find(j.ReturnStatement).forEach((path) => {
494
+ if (!enclosingFunctionReturnsType(path)) {
495
+ return;
496
+ }
446
497
  if (path.node.argument && path.node.argument.type === 'ObjectExpression') {
447
498
  const properties = path.node.argument.properties;
448
499
  const propIndex = properties.findIndex((p) => p.type === 'ObjectProperty' &&
@@ -491,22 +542,6 @@ function tsPropertyRemoval(source, rootSource, j, packageName, typeName, propert
491
542
  statement.remove();
492
543
  }
493
544
  });
494
- // Handle nested member expressions like chatConfig.chat.modelFields.pinnedByField
495
- rootSource
496
- .find(j.AssignmentExpression, {
497
- left: {
498
- type: 'MemberExpression',
499
- object: {
500
- type: 'MemberExpression',
501
- },
502
- property: {
503
- name: propertyName,
504
- },
505
- },
506
- })
507
- .forEach((path) => {
508
- j(path).closest(j.ExpressionStatement).remove();
509
- });
510
545
  return rootSource;
511
546
  }
512
547
  }
@@ -153,7 +153,17 @@ const zIndex = (anchor, container) => {
153
153
  const result = [anchor].concat(parents(anchor, sibling)).reduce((index, p) => {
154
154
  const zIndexStyle = p.style.zIndex || window.getComputedStyle(p).zIndex;
155
155
  const current = parseInt(zIndexStyle, 10);
156
- return current > index ? current : index;
156
+ const updatedIndex = isNaN(current) ? index : Math.max(current, index);
157
+ if (!p.parentElement) {
158
+ return updatedIndex;
159
+ }
160
+ // Also check siblings of each ancestor to account for sibling stacking contexts
161
+ // that may have a higher z-index than the anchor's ancestors (e.g., pinned row containers)
162
+ return Array.from(p.parentElement.children).reduce((sibMax, sibl) => {
163
+ const sibZIndex = sibl.style.zIndex || window.getComputedStyle(sibl).zIndex;
164
+ const sibCurrent = parseInt(sibZIndex, 10);
165
+ return isNaN(sibCurrent) ? sibMax : Math.max(sibCurrent, sibMax);
166
+ }, updatedIndex);
157
167
  }, 0);
158
168
  return result ? (result + 1) : null;
159
169
  };
@@ -683,8 +693,8 @@ const packageMetadata = {
683
693
  productName: 'Kendo UI for Angular',
684
694
  productCode: 'KENDOUIANGULAR',
685
695
  productCodes: ['KENDOUIANGULAR'],
686
- publishDate: 1777365097,
687
- version: '24.0.0-develop.9',
696
+ publishDate: 1779273290,
697
+ version: '24.0.0',
688
698
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'
689
699
  };
690
700
 
@@ -891,6 +901,7 @@ class PopupComponent {
891
901
  set currentOffset(offset) {
892
902
  this.setContainerStyle('left', `${offset.left}px`);
893
903
  this.setContainerStyle('top', `${offset.top}px`);
904
+ this.setContainerStyle('margin', this.hasCustomOffset ? '0' : null);
894
905
  this._currentOffset = offset;
895
906
  }
896
907
  setZIndex() {
@@ -957,6 +968,10 @@ class PopupComponent {
957
968
  this._renderer[action](this.container.nativeElement, ANIMATION_CONTAINER_FIXED);
958
969
  }
959
970
  setContainerStyle(name, value) {
971
+ if (value === null) {
972
+ this._renderer.removeStyle(this.container.nativeElement, name);
973
+ return;
974
+ }
960
975
  this._renderer.setStyle(this.container.nativeElement, name, value);
961
976
  }
962
977
  unsubscribeReposition() {
@@ -964,6 +979,9 @@ class PopupComponent {
964
979
  this.repositionSubscription.unsubscribe();
965
980
  }
966
981
  }
982
+ get hasCustomOffset() {
983
+ return this.offset.left !== DEFAULT_OFFSET.left || this.offset.top !== DEFAULT_OFFSET.top;
984
+ }
967
985
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: PopupComponent, deps: [{ token: i0.ElementRef }, { token: AlignService }, { token: DOMService }, { token: PositionService }, { token: ResizeService }, { token: ScrollableService }, { token: AnimationService }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
968
986
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.20", type: PopupComponent, isStandalone: true, selector: "kendo-popup", inputs: { animate: "animate", anchor: "anchor", anchorAlign: "anchorAlign", collision: "collision", popupAlign: "popupAlign", copyAnchorStyles: "copyAnchorStyles", popupClass: "popupClass", positionMode: "positionMode", offset: "offset", margin: "margin" }, outputs: { anchorViewportLeave: "anchorViewportLeave", close: "close", open: "open", positionChange: "positionChange" }, providers: [AlignService, AnimationService, DOMService, PositionService, ResizeService, ScrollableService], viewQueries: [{ propertyName: "contentContainer", first: true, predicate: ["container"], descendants: true, static: true }, { propertyName: "resizeSensor", first: true, predicate: ResizeSensorComponent, descendants: true, static: true }], exportAs: ["kendo-popup"], usesOnChanges: true, ngImport: i0, template: `
969
987
  <div class="k-child-animation-container">
@@ -7,7 +7,7 @@ export const packageMetadata = {
7
7
  "productCodes": [
8
8
  "KENDOUIANGULAR"
9
9
  ],
10
- "publishDate": 1777365097,
11
- "version": "24.0.0-develop.9",
10
+ "publishDate": 1779273290,
11
+ "version": "24.0.0",
12
12
  "licensingDocsUrl": "https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning"
13
13
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@progress/kendo-angular-popup",
3
- "version": "24.0.0-develop.9",
3
+ "version": "24.0.0",
4
4
  "description": "Kendo UI Angular Popup component - an easily customized popup from the most trusted provider of professional Angular components.",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "author": "Progress",
@@ -34,7 +34,7 @@
34
34
  "package": {
35
35
  "productName": "Kendo UI for Angular",
36
36
  "productCode": "KENDOUIANGULAR",
37
- "publishDate": 1777365097,
37
+ "publishDate": 1779273290,
38
38
  "licensingDocsUrl": "https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning"
39
39
  }
40
40
  },
@@ -43,14 +43,14 @@
43
43
  "@angular/common": "19 - 21",
44
44
  "@angular/core": "19 - 21",
45
45
  "@angular/platform-browser": "19 - 21",
46
- "@progress/kendo-angular-common": "24.0.0-develop.9",
46
+ "@progress/kendo-angular-common": "24.0.0",
47
47
  "@progress/kendo-licensing": "^1.11.0",
48
48
  "rxjs": "^6.5.3 || ^7.0.0"
49
49
  },
50
50
  "dependencies": {
51
51
  "@progress/kendo-popup-common": "1.9.5",
52
52
  "tslib": "^2.3.1",
53
- "@progress/kendo-angular-schematics": "24.0.0-develop.9"
53
+ "@progress/kendo-angular-schematics": "24.0.0"
54
54
  },
55
55
  "schematics": "./schematics/collection.json",
56
56
  "module": "fesm2022/progress-kendo-angular-popup.mjs",
@@ -151,6 +151,7 @@ export declare class PopupComponent implements AfterViewInit, OnInit, OnChanges,
151
151
  private updateFixedClass;
152
152
  private setContainerStyle;
153
153
  private unsubscribeReposition;
154
+ private get hasCustomOffset();
154
155
  static ɵfac: i0.ɵɵFactoryDeclaration<PopupComponent, never>;
155
156
  static ɵcmp: i0.ɵɵComponentDeclaration<PopupComponent, "kendo-popup", ["kendo-popup"], { "animate": { "alias": "animate"; "required": false; }; "anchor": { "alias": "anchor"; "required": false; }; "anchorAlign": { "alias": "anchorAlign"; "required": false; }; "collision": { "alias": "collision"; "required": false; }; "popupAlign": { "alias": "popupAlign"; "required": false; }; "copyAnchorStyles": { "alias": "copyAnchorStyles"; "required": false; }; "popupClass": { "alias": "popupClass"; "required": false; }; "positionMode": { "alias": "positionMode"; "required": false; }; "offset": { "alias": "offset"; "required": false; }; "margin": { "alias": "margin"; "required": false; }; }, { "anchorViewportLeave": "anchorViewportLeave"; "close": "close"; "open": "open"; "positionChange": "positionChange"; }, never, ["*"], true, never>;
156
157
  }