@progress/kendo-angular-icons 25.0.0-develop.2 → 25.0.0-develop.20

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.
@@ -3,8 +3,8 @@
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
5
  import * as i0 from '@angular/core';
6
- import { Input, HostBinding, Directive, Component, isDevMode, ChangeDetectionStrategy, Injectable, InjectionToken, Optional, Inject, NgModule } from '@angular/core';
7
- import { isDocumentAvailable, areObjectsEqual } from '@progress/kendo-angular-common';
6
+ import { Input, HostBinding, Directive, signal, ChangeDetectionStrategy, Component, computed, isDevMode, Injectable, InjectionToken, Optional, Inject, NgModule } from '@angular/core';
7
+ import { isDocumentAvailable, areObjectsEqual, KENDO_COMPONENT_NAME } from '@progress/kendo-angular-common';
8
8
  import { validatePackage } from '@progress/kendo-licensing';
9
9
  import * as i1_1 from '@angular/platform-browser';
10
10
  import { Subject, BehaviorSubject, Subscription } from 'rxjs';
@@ -19,8 +19,8 @@ const packageMetadata = {
19
19
  productName: 'Kendo UI for Angular',
20
20
  productCode: 'KENDOUIANGULAR',
21
21
  productCodes: ['KENDOUIANGULAR'],
22
- publishDate: 1783688442,
23
- version: '25.0.0-develop.2',
22
+ publishDate: 1785763254,
23
+ version: '25.0.0-develop.20',
24
24
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
25
25
  };
26
26
 
@@ -91,10 +91,10 @@ class IconBaseDirective {
91
91
  this.renderer = renderer;
92
92
  validatePackage(packageMetadata);
93
93
  }
94
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: IconBaseDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
95
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.25", type: IconBaseDirective, isStandalone: true, selector: "[kendoIconBase]", inputs: { flip: "flip", themeColor: "themeColor", size: "size" }, host: { properties: { "class.k-flip-h": "this.horizontalFlip", "class.k-flip-v": "this.verticalFlip" } }, ngImport: i0 });
94
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.26", ngImport: i0, type: IconBaseDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
95
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.26", type: IconBaseDirective, isStandalone: true, selector: "[kendoIconBase]", inputs: { flip: "flip", themeColor: "themeColor", size: "size" }, host: { properties: { "class.k-flip-h": "this.horizontalFlip", "class.k-flip-v": "this.verticalFlip" } }, ngImport: i0 });
96
96
  }
97
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: IconBaseDirective, decorators: [{
97
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.26", ngImport: i0, type: IconBaseDirective, decorators: [{
98
98
  type: Directive,
99
99
  args: [{
100
100
  selector: '[kendoIconBase]'
@@ -132,34 +132,35 @@ class IconComponent extends IconBaseDirective {
132
132
  */
133
133
  set name(name) {
134
134
  if (isDocumentAvailable()) {
135
- const newName = name !== this._name;
135
+ const newName = name !== this._name();
136
136
  if (newName) {
137
137
  const element = this.element.nativeElement;
138
138
  this.renderer.removeClass(element, `k-i-${this.name}`);
139
139
  this.renderer.addClass(element, `k-i-${name}`);
140
140
  }
141
141
  }
142
- this._name = name;
142
+ this._name.set(name);
143
143
  }
144
144
  get name() {
145
- return this._name;
145
+ return this._name();
146
146
  }
147
- _name;
147
+ _name = signal(undefined, ...(ngDevMode ? [{ debugName: "_name" }] : []));
148
148
  constructor(element, renderer) {
149
149
  super(element, renderer);
150
150
  this.element = element;
151
151
  this.renderer = renderer;
152
152
  }
153
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: IconComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
154
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.25", type: IconComponent, isStandalone: true, selector: "kendo-icon", inputs: { name: "name" }, host: { properties: { "class.k-icon": "this.hostClass", "class.k-font-icon": "this.hostClass", "attr.aria-hidden": "this.hostAriaHidden" } }, exportAs: ["kendoIcon"], usesInheritance: true, ngImport: i0, template: '', isInline: true });
153
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.26", ngImport: i0, type: IconComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
154
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.26", type: IconComponent, isStandalone: true, selector: "kendo-icon", inputs: { name: "name" }, host: { properties: { "class.k-icon": "this.hostClass", "class.k-font-icon": "this.hostClass", "attr.aria-hidden": "this.hostAriaHidden" } }, exportAs: ["kendoIcon"], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
155
155
  }
156
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: IconComponent, decorators: [{
156
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.26", ngImport: i0, type: IconComponent, decorators: [{
157
157
  type: Component,
158
158
  args: [{
159
- exportAs: 'kendoIcon',
160
159
  selector: 'kendo-icon',
160
+ exportAs: 'kendoIcon',
161
161
  template: '',
162
- standalone: true
162
+ standalone: true,
163
+ changeDetection: ChangeDetectionStrategy.OnPush
163
164
  }]
164
165
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { hostClass: [{
165
166
  type: HostBinding,
@@ -209,19 +210,19 @@ class SVGIconComponent extends IconBaseDirective {
209
210
  set icon(icon) {
210
211
  const element = this.element.nativeElement;
211
212
  const hasDocument = isDocumentAvailable();
212
- const newName = icon?.name && icon.name !== this._icon?.name;
213
- if (this._icon && this._icon.name && newName && hasDocument) {
214
- this.renderer.removeClass(element, `k-svg-i-${this._icon.name}`);
213
+ const newName = icon?.name && icon.name !== this._icon()?.name;
214
+ if (this._icon()?.name && newName && hasDocument) {
215
+ this.renderer.removeClass(element, `k-svg-i-${this._icon().name}`);
215
216
  }
216
- if (!areSame(icon, this._icon)) {
217
- this._icon = icon;
217
+ if (!areSame(icon, this._icon())) {
218
+ this._icon.set(icon);
218
219
  }
219
220
  if (hasDocument && newName) {
220
- this.renderer.addClass(element, `k-svg-i-${this._icon.name}`);
221
+ this.renderer.addClass(element, `k-svg-i-${this._icon().name}`);
221
222
  }
222
223
  }
223
224
  get icon() {
224
- return this._icon;
225
+ return this._icon();
225
226
  }
226
227
  /**
227
228
  * Sets the style variant of the icon.
@@ -229,21 +230,30 @@ class SVGIconComponent extends IconBaseDirective {
229
230
  * > Requires `@progress/kendo-svg-icons` v5 or later for the `variants` property to be available on icons.
230
231
  */
231
232
  set variant(variant) {
232
- this._variant = variant;
233
+ this._variant.set(variant);
233
234
  }
234
235
  get variant() {
235
- return this._variant;
236
+ return this._variant();
236
237
  }
237
238
  get content() {
238
- const variantContent = this.variant && this.icon?.variants?.[this.variant];
239
- const svgContent = variantContent || this.icon.content;
240
- return this.domSanitizer.bypassSecurityTrustHtml(svgContent);
239
+ return this._content();
241
240
  }
242
241
  get visible() {
243
- return this.icon && isDocumentAvailable();
244
- }
245
- _icon;
246
- _variant;
242
+ return this._visible();
243
+ }
244
+ _icon = signal(undefined, ...(ngDevMode ? [{ debugName: "_icon" }] : []));
245
+ _variant = signal(undefined, ...(ngDevMode ? [{ debugName: "_variant" }] : []));
246
+ _content = computed(() => {
247
+ const icon = this._icon();
248
+ if (!icon) {
249
+ return null;
250
+ }
251
+ const variant = this._variant();
252
+ const variantContent = variant && icon.variants?.[variant];
253
+ const svgContent = variantContent || icon.content;
254
+ return this.domSanitizer.bypassSecurityTrustHtml(svgContent);
255
+ }, ...(ngDevMode ? [{ debugName: "_content" }] : []));
256
+ _visible = computed(() => !!this._icon() && isDocumentAvailable(), ...(ngDevMode ? [{ debugName: "_visible" }] : []));
247
257
  constructor(domSanitizer, element, renderer) {
248
258
  super(element, renderer);
249
259
  this.domSanitizer = domSanitizer;
@@ -257,7 +267,7 @@ class SVGIconComponent extends IconBaseDirective {
257
267
  if (!isDevMode()) {
258
268
  return;
259
269
  }
260
- if (!this._icon) {
270
+ if (!this._icon()) {
261
271
  throw new Error(`
262
272
  Invalid configuration.
263
273
  The input [icon] is required for the Kendo UI SVG Icon component for Angular.
@@ -265,15 +275,15 @@ class SVGIconComponent extends IconBaseDirective {
265
275
  `);
266
276
  }
267
277
  }
268
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: SVGIconComponent, deps: [{ token: i1_1.DomSanitizer }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
269
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: SVGIconComponent, isStandalone: true, selector: "kendo-svg-icon, kendo-svgicon", inputs: { icon: "icon", variant: "variant" }, host: { properties: { "class.k-svg-icon": "this.hostClass", "class.k-icon": "this.hostClass", "attr.aria-hidden": "this.hostAriaHidden" } }, exportAs: ["kendoSVGIcon"], usesInheritance: true, ngImport: i0, template: `
278
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.26", ngImport: i0, type: SVGIconComponent, deps: [{ token: i1_1.DomSanitizer }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
279
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.26", type: SVGIconComponent, isStandalone: true, selector: "kendo-svg-icon, kendo-svgicon", inputs: { icon: "icon", variant: "variant" }, host: { properties: { "class.k-svg-icon": "this.hostClass", "class.k-icon": "this.hostClass", "attr.aria-hidden": "this.hostAriaHidden" } }, exportAs: ["kendoSVGIcon"], usesInheritance: true, ngImport: i0, template: `
270
280
  @if (visible) {
271
281
  <svg [style.pointerEvents]="'none'" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
272
282
  [attr.viewBox]="icon.viewBox" [innerHTML]="content" aria-hidden="true">
273
283
  </svg>
274
284
  }`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
275
285
  }
276
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: SVGIconComponent, decorators: [{
286
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.26", ngImport: i0, type: SVGIconComponent, decorators: [{
277
287
  type: Component,
278
288
  args: [{
279
289
  exportAs: 'kendoSVGIcon',
@@ -339,25 +349,27 @@ class IconSettingsService {
339
349
  /**
340
350
  * Returns the [`SVGIcon`](https://www.telerik.com/kendo-angular-ui/components/icons/api/svgicon) object for the provided key.
341
351
  * Override in a custom service to provide custom SVG icons.
352
+ * The optional `_component` parameter carries the host component identity (e.g. `'dateinput'`, `'grid'`)
353
+ * so subclasses can return different icons for the same name depending on the requesting component.
342
354
  *
343
- * @hidden
344
355
  */
345
- getSvgIcon(_name) {
356
+ getSvgIcon(_name, _component) {
346
357
  return null;
347
358
  }
348
359
  /**
349
360
  * Returns the list of classes to be rendered on the host `SPAN` element of custom font icons.
350
361
  * Override in a custom service to provide classes for custom font icons.
362
+ * The optional `_component` parameter carries the host component identity so subclasses can
363
+ * return different classes for the same key depending on the requesting component.
351
364
  *
352
- * @hidden
353
365
  */
354
- getCustomFontIconClass(_key) {
366
+ getCustomFontIconClass(_key, _component) {
355
367
  return null;
356
368
  }
357
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: IconSettingsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
358
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: IconSettingsService });
369
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.26", ngImport: i0, type: IconSettingsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
370
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.26", ngImport: i0, type: IconSettingsService });
359
371
  }
360
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: IconSettingsService, decorators: [{
372
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.26", ngImport: i0, type: IconSettingsService, decorators: [{
361
373
  type: Injectable
362
374
  }] });
363
375
 
@@ -429,25 +441,45 @@ class IconsService {
429
441
  /**
430
442
  * Returns the [`SVGIcon`](https://www.telerik.com/kendo-angular-ui/components/icons/api/svgicon) object for the provided key.
431
443
  * Override in a custom service to provide custom SVG icons.
444
+ * Walks the `componentChain` outermost-first so the closest explicitly configured ancestor wins,
445
+ * falling back to a global (no component) lookup when no level in the chain matches.
432
446
  * @hidden
433
447
  */
434
- getSvgIcon(name) {
435
- const customIcon = this.iconSettingsService && this.iconSettingsService.getSvgIcon(name);
436
- return customIcon;
448
+ getSvgIcon(name, componentChain) {
449
+ if (!this.iconSettingsService) {
450
+ return null;
451
+ }
452
+ for (const component of componentChain ?? []) {
453
+ const scoped = this.iconSettingsService.getSvgIcon(name, component.toLowerCase());
454
+ if (scoped) {
455
+ return scoped;
456
+ }
457
+ }
458
+ return this.iconSettingsService.getSvgIcon(name);
437
459
  }
438
460
  /**
439
461
  * Returns the list of classes to be rendered on the host `SPAN` element of custom font icons.
440
462
  * Override in a custom service to provide classes for custom font icons.
463
+ * Walks the `componentChain` outermost-first so the closest explicitly configured ancestor wins,
464
+ * falling back to a global (no component) lookup when no level in the chain matches.
441
465
  * @hidden
442
466
  */
443
- getCustomFontIconClass(key) {
444
- const customClass = this.iconSettingsService && this.iconSettingsService.getCustomFontIconClass(key);
445
- return customClass;
467
+ getCustomFontIconClass(key, componentChain) {
468
+ if (!this.iconSettingsService) {
469
+ return null;
470
+ }
471
+ for (const component of componentChain ?? []) {
472
+ const scoped = this.iconSettingsService.getCustomFontIconClass(key, component.toLowerCase());
473
+ if (scoped) {
474
+ return scoped;
475
+ }
476
+ }
477
+ return this.iconSettingsService.getCustomFontIconClass(key);
446
478
  }
447
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: IconsService, deps: [{ token: ICON_SETTINGS, optional: true }, { token: IconSettingsService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
448
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: IconsService, providedIn: 'root' });
479
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.26", ngImport: i0, type: IconsService, deps: [{ token: ICON_SETTINGS, optional: true }, { token: IconSettingsService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
480
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.26", ngImport: i0, type: IconsService, providedIn: 'root' });
449
481
  }
450
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: IconsService, decorators: [{
482
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.26", ngImport: i0, type: IconsService, decorators: [{
451
483
  type: Injectable,
452
484
  args: [{
453
485
  providedIn: 'root'
@@ -467,36 +499,52 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
467
499
  class IconWrapperComponent {
468
500
  iconsService;
469
501
  element;
502
+ componentChain;
470
503
  hostClass = true;
471
504
  /**
472
505
  * Sets the name for an existing font icon in a Kendo UI theme to render.
473
506
  * Supports all [Kendo UI Icons](https://www.telerik.com/kendo-angular-ui/components/styling/icons#icons-list).
474
507
  */
475
- name;
508
+ set name(value) { this._name.set(value); }
509
+ get name() { return this._name(); }
476
510
  /**
477
511
  * Sets the [SVGIcon](https://www.telerik.com/kendo-angular-ui/components/icons/api/svgicon) to render.
478
512
  */
479
- svgIcon;
513
+ set svgIcon(value) { this._svgIcon.set(value); }
514
+ get svgIcon() { return this._svgIcon(); }
480
515
  /**
481
516
  * Sets an additional class on the internal Icon component.
482
517
  */
483
- innerCssClass = '';
518
+ set innerCssClass(value) { this._innerCssClass.set(value); }
519
+ get innerCssClass() { return this._innerCssClass(); }
484
520
  /**
485
521
  * Sets a custom font icon class using the API of the consuming component.
486
522
  */
487
- customFontClass = '';
523
+ set customFontClass(value) { this._customFontClass.set(value); }
524
+ get customFontClass() { return this._customFontClass(); }
488
525
  /**
489
526
  * Sets the `IconSize` for the icon.
490
527
  */
491
- size;
528
+ set size(value) { this._size.set(value); }
529
+ get size() { return this._size(); }
492
530
  get customClasses() {
493
531
  const classes = [this.customFontClass, this.innerCssClass, this.customFontIconClass].filter(cl => !!cl).join(' ');
494
532
  return classes;
495
533
  }
496
- iconSettings;
534
+ _name = signal(undefined, ...(ngDevMode ? [{ debugName: "_name" }] : []));
535
+ _svgIcon = signal(undefined, ...(ngDevMode ? [{ debugName: "_svgIcon" }] : []));
536
+ _innerCssClass = signal('', ...(ngDevMode ? [{ debugName: "_innerCssClass" }] : []));
537
+ _customFontClass = signal('', ...(ngDevMode ? [{ debugName: "_customFontClass" }] : []));
538
+ _size = signal(undefined, ...(ngDevMode ? [{ debugName: "_size" }] : []));
539
+ // iconSettings is set from a subscription — must be a signal so changes trigger CD in zoneless apps
540
+ _iconSettings = signal(undefined, ...(ngDevMode ? [{ debugName: "_iconSettings" }] : []));
541
+ get iconSettings() { return this._iconSettings(); }
542
+ // Resolves the effective SVG icon: prefer service-provided icon, then fall back to the svgIcon input.
543
+ // Extracted from hasSvgIcon getter to avoid writing to a signal inside a reactive context.
544
+ _resolvedSvgIcon = computed(() => this.iconsService.getSvgIcon(this._name(), this.componentChain) || this._svgIcon(), ...(ngDevMode ? [{ debugName: "_resolvedSvgIcon" }] : []));
545
+ get resolvedSvgIcon() { return this._resolvedSvgIcon(); }
497
546
  get hasSvgIcon() {
498
- this.svgIcon = this.iconsService.getSvgIcon(this.name) || this.svgIcon;
499
- if (this.svgIcon) {
547
+ if (this._resolvedSvgIcon()) {
500
548
  return true;
501
549
  }
502
550
  if (isDevMode()) {
@@ -520,27 +568,29 @@ https://www.telerik.com/design-system/docs/foundation/iconography/icon-list/
520
568
  return false;
521
569
  }
522
570
  get customFontIconClass() {
523
- return this.iconsService.getCustomFontIconClass(this.name) || this.customFontClass;
571
+ return this.iconsService.getCustomFontIconClass(this.name, this.componentChain) || this.customFontClass;
524
572
  }
525
573
  subs = new Subscription();
526
- constructor(iconsService, element) {
574
+ constructor(iconsService, element, componentChain) {
527
575
  this.iconsService = iconsService;
528
576
  this.element = element;
577
+ this.componentChain = componentChain;
529
578
  this.subs = iconsService.changes.subscribe(iconSettings => {
530
- this.iconSettings = iconSettings;
579
+ this._iconSettings.set(iconSettings);
531
580
  });
532
581
  }
533
582
  ngOnDestroy() {
534
583
  this.subs.unsubscribe();
535
584
  }
536
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: IconWrapperComponent, deps: [{ token: IconsService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
537
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: IconWrapperComponent, isStandalone: true, selector: "kendo-icon-wrapper", inputs: { name: "name", svgIcon: "svgIcon", innerCssClass: "innerCssClass", customFontClass: "customFontClass", size: "size" }, host: { properties: { "class.k-icon-wrapper-host": "this.hostClass" } }, exportAs: ["kendoIconWrapper"], ngImport: i0, template: `
585
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.26", ngImport: i0, type: IconWrapperComponent, deps: [{ token: IconsService }, { token: i0.ElementRef }, { token: KENDO_COMPONENT_NAME, optional: true }], target: i0.ɵɵFactoryTarget.Component });
586
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.26", type: IconWrapperComponent, isStandalone: true, selector: "kendo-icon-wrapper", inputs: { name: "name", svgIcon: "svgIcon", innerCssClass: "innerCssClass", customFontClass: "customFontClass", size: "size" }, host: { properties: { "class.k-icon-wrapper-host": "this.hostClass" } }, exportAs: ["kendoIconWrapper"], ngImport: i0, template: `
538
587
  @if (iconSettings?.type === 'svg' && hasSvgIcon) {
539
588
  <kendo-svgicon
540
589
  [ngClass]="innerCssClass"
541
- [icon]="svgIcon"
590
+ [icon]="resolvedSvgIcon"
542
591
  [size]="size || iconSettings?.size"
543
592
  [themeColor]="iconSettings?.themeColor"
593
+ [variant]="iconSettings?.variant"
544
594
  [flip]="iconSettings?.flip"></kendo-svgicon>
545
595
  } @else {
546
596
  @if (!customFontIconClass) {
@@ -554,20 +604,21 @@ https://www.telerik.com/design-system/docs/foundation/iconography/icon-list/
554
604
  <span [ngClass]="customClasses"></span>
555
605
  }
556
606
  }
557
- `, isInline: true, dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IconComponent, selector: "kendo-icon", inputs: ["name"], exportAs: ["kendoIcon"] }, { kind: "component", type: SVGIconComponent, selector: "kendo-svg-icon, kendo-svgicon", inputs: ["icon", "variant"], exportAs: ["kendoSVGIcon"] }] });
607
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IconComponent, selector: "kendo-icon", inputs: ["name"], exportAs: ["kendoIcon"] }, { kind: "component", type: SVGIconComponent, selector: "kendo-svg-icon, kendo-svgicon", inputs: ["icon", "variant"], exportAs: ["kendoSVGIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
558
608
  }
559
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: IconWrapperComponent, decorators: [{
609
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.26", ngImport: i0, type: IconWrapperComponent, decorators: [{
560
610
  type: Component,
561
611
  args: [{
562
- exportAs: 'kendoIconWrapper',
563
612
  selector: 'kendo-icon-wrapper',
613
+ exportAs: 'kendoIconWrapper',
564
614
  template: `
565
615
  @if (iconSettings?.type === 'svg' && hasSvgIcon) {
566
616
  <kendo-svgicon
567
617
  [ngClass]="innerCssClass"
568
- [icon]="svgIcon"
618
+ [icon]="resolvedSvgIcon"
569
619
  [size]="size || iconSettings?.size"
570
620
  [themeColor]="iconSettings?.themeColor"
621
+ [variant]="iconSettings?.variant"
571
622
  [flip]="iconSettings?.flip"></kendo-svgicon>
572
623
  } @else {
573
624
  @if (!customFontIconClass) {
@@ -583,9 +634,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
583
634
  }
584
635
  `,
585
636
  standalone: true,
637
+ changeDetection: ChangeDetectionStrategy.OnPush,
586
638
  imports: [NgClass, IconComponent, SVGIconComponent]
587
639
  }]
588
- }], ctorParameters: () => [{ type: IconsService }, { type: i0.ElementRef }], propDecorators: { hostClass: [{
640
+ }], ctorParameters: () => [{ type: IconsService }, { type: i0.ElementRef }, { type: undefined, decorators: [{
641
+ type: Optional
642
+ }, {
643
+ type: Inject,
644
+ args: [KENDO_COMPONENT_NAME]
645
+ }] }], propDecorators: { hostClass: [{
589
646
  type: HostBinding,
590
647
  args: ['class.k-icon-wrapper-host']
591
648
  }], name: [{
@@ -620,11 +677,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
620
677
  * ```
621
678
  */
622
679
  class IconModule {
623
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: IconModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
624
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.25", ngImport: i0, type: IconModule, imports: [IconComponent], exports: [IconComponent] });
625
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: IconModule });
680
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.26", ngImport: i0, type: IconModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
681
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.26", ngImport: i0, type: IconModule, imports: [IconComponent], exports: [IconComponent] });
682
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.26", ngImport: i0, type: IconModule });
626
683
  }
627
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: IconModule, decorators: [{
684
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.26", ngImport: i0, type: IconModule, decorators: [{
628
685
  type: NgModule,
629
686
  args: [{
630
687
  exports: [IconComponent],
@@ -652,11 +709,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
652
709
  * ```
653
710
  */
654
711
  class SVGIconModule {
655
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: SVGIconModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
656
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.25", ngImport: i0, type: SVGIconModule, imports: [SVGIconComponent], exports: [SVGIconComponent] });
657
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: SVGIconModule });
712
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.26", ngImport: i0, type: SVGIconModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
713
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.26", ngImport: i0, type: SVGIconModule, imports: [SVGIconComponent], exports: [SVGIconComponent] });
714
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.26", ngImport: i0, type: SVGIconModule });
658
715
  }
659
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: SVGIconModule, decorators: [{
716
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.26", ngImport: i0, type: SVGIconModule, decorators: [{
660
717
  type: NgModule,
661
718
  args: [{
662
719
  exports: [SVGIconComponent],
@@ -746,11 +803,11 @@ const KENDO_ICONS = [
746
803
  * ```
747
804
  */
748
805
  class IconsModule {
749
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: IconsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
750
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.25", ngImport: i0, type: IconsModule, imports: [IconComponent, SVGIconComponent], exports: [IconComponent, SVGIconComponent] });
751
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: IconsModule, providers: [IconsService] });
806
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.26", ngImport: i0, type: IconsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
807
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.26", ngImport: i0, type: IconsModule, imports: [IconComponent, SVGIconComponent], exports: [IconComponent, SVGIconComponent] });
808
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.26", ngImport: i0, type: IconsModule, providers: [IconsService] });
752
809
  }
753
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: IconsModule, decorators: [{
810
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.26", ngImport: i0, type: IconsModule, decorators: [{
754
811
  type: NgModule,
755
812
  args: [{
756
813
  imports: [
package/index.d.ts CHANGED
@@ -158,6 +158,8 @@ declare class SVGIconComponent extends IconBaseDirective implements OnInit {
158
158
  get visible(): boolean;
159
159
  private _icon;
160
160
  private _variant;
161
+ private readonly _content;
162
+ private readonly _visible;
161
163
  constructor(domSanitizer: DomSanitizer, element: ElementRef, renderer: Renderer2);
162
164
  ngOnInit(): void;
163
165
  private verifyIconProperty;
@@ -181,7 +183,8 @@ type IconType = 'font' | 'svg';
181
183
  * type: 'svg',
182
184
  * themeColor: 'primary',
183
185
  * size: 'large',
184
- * flip: 'horizontal'
186
+ * flip: 'horizontal',
187
+ * variant: 'outline'
185
188
  * };
186
189
  * ```
187
190
  */
@@ -202,6 +205,11 @@ interface IconSettings {
202
205
  * Sets the `flip` direction of the icon.
203
206
  */
204
207
  flip?: IconFlip;
208
+ /**
209
+ * Sets the `variant` of the SVG icon.
210
+ * Requires `@progress/kendo-svg-icons` version `5.0.0` or later.
211
+ */
212
+ variant?: IconVariant;
205
213
  }
206
214
 
207
215
  /**
@@ -233,17 +241,19 @@ declare class IconSettingsService {
233
241
  /**
234
242
  * Returns the [`SVGIcon`](https://www.telerik.com/kendo-angular-ui/components/icons/api/svgicon) object for the provided key.
235
243
  * Override in a custom service to provide custom SVG icons.
244
+ * The optional `_component` parameter carries the host component identity (e.g. `'dateinput'`, `'grid'`)
245
+ * so subclasses can return different icons for the same name depending on the requesting component.
236
246
  *
237
- * @hidden
238
247
  */
239
- getSvgIcon(_name: string): SVGIcon;
248
+ getSvgIcon(_name: string, _component?: string): SVGIcon;
240
249
  /**
241
250
  * Returns the list of classes to be rendered on the host `SPAN` element of custom font icons.
242
251
  * Override in a custom service to provide classes for custom font icons.
252
+ * The optional `_component` parameter carries the host component identity so subclasses can
253
+ * return different classes for the same key depending on the requesting component.
243
254
  *
244
- * @hidden
245
255
  */
246
- getCustomFontIconClass(_key: string): string;
256
+ getCustomFontIconClass(_key: string, _component?: string): string;
247
257
  static ɵfac: i0.ɵɵFactoryDeclaration<IconSettingsService, never>;
248
258
  static ɵprov: i0.ɵɵInjectableDeclaration<IconSettingsService>;
249
259
  }
@@ -284,15 +294,19 @@ declare class IconsService implements OnDestroy {
284
294
  /**
285
295
  * Returns the [`SVGIcon`](https://www.telerik.com/kendo-angular-ui/components/icons/api/svgicon) object for the provided key.
286
296
  * Override in a custom service to provide custom SVG icons.
297
+ * Walks the `componentChain` outermost-first so the closest explicitly configured ancestor wins,
298
+ * falling back to a global (no component) lookup when no level in the chain matches.
287
299
  * @hidden
288
300
  */
289
- getSvgIcon(name: string): SVGIcon;
301
+ getSvgIcon(name: string, componentChain?: string[]): SVGIcon;
290
302
  /**
291
303
  * Returns the list of classes to be rendered on the host `SPAN` element of custom font icons.
292
304
  * Override in a custom service to provide classes for custom font icons.
305
+ * Walks the `componentChain` outermost-first so the closest explicitly configured ancestor wins,
306
+ * falling back to a global (no component) lookup when no level in the chain matches.
293
307
  * @hidden
294
308
  */
295
- getCustomFontIconClass(key: string): string;
309
+ getCustomFontIconClass(key: string, componentChain?: string[]): string;
296
310
  static ɵfac: i0.ɵɵFactoryDeclaration<IconsService, [{ optional: true; }, { optional: true; }]>;
297
311
  static ɵprov: i0.ɵɵInjectableDeclaration<IconsService>;
298
312
  }
@@ -303,36 +317,50 @@ declare class IconsService implements OnDestroy {
303
317
  declare class IconWrapperComponent implements OnDestroy {
304
318
  private iconsService;
305
319
  element: ElementRef;
320
+ private componentChain;
306
321
  hostClass: boolean;
307
322
  /**
308
323
  * Sets the name for an existing font icon in a Kendo UI theme to render.
309
324
  * Supports all [Kendo UI Icons](https://www.telerik.com/kendo-angular-ui/components/styling/icons#icons-list).
310
325
  */
311
- name: string;
326
+ set name(value: string);
327
+ get name(): string;
312
328
  /**
313
329
  * Sets the [SVGIcon](https://www.telerik.com/kendo-angular-ui/components/icons/api/svgicon) to render.
314
330
  */
315
- svgIcon: SVGIcon;
331
+ set svgIcon(value: SVGIcon);
332
+ get svgIcon(): SVGIcon;
316
333
  /**
317
334
  * Sets an additional class on the internal Icon component.
318
335
  */
319
- innerCssClass: string;
336
+ set innerCssClass(value: string);
337
+ get innerCssClass(): string;
320
338
  /**
321
339
  * Sets a custom font icon class using the API of the consuming component.
322
340
  */
323
- customFontClass: string;
341
+ set customFontClass(value: string);
342
+ get customFontClass(): string;
324
343
  /**
325
344
  * Sets the `IconSize` for the icon.
326
345
  */
327
- size: IconSize;
346
+ set size(value: IconSize);
347
+ get size(): IconSize;
328
348
  get customClasses(): string;
329
- iconSettings: IconSettings;
349
+ private _name;
350
+ private _svgIcon;
351
+ private _innerCssClass;
352
+ private _customFontClass;
353
+ private _size;
354
+ private _iconSettings;
355
+ get iconSettings(): IconSettings;
356
+ private readonly _resolvedSvgIcon;
357
+ get resolvedSvgIcon(): SVGIcon;
330
358
  get hasSvgIcon(): boolean;
331
359
  get customFontIconClass(): string;
332
360
  private subs;
333
- constructor(iconsService: IconsService, element: ElementRef);
361
+ constructor(iconsService: IconsService, element: ElementRef, componentChain: string[]);
334
362
  ngOnDestroy(): void;
335
- static ɵfac: i0.ɵɵFactoryDeclaration<IconWrapperComponent, never>;
363
+ static ɵfac: i0.ɵɵFactoryDeclaration<IconWrapperComponent, [null, null, { optional: true; }]>;
336
364
  static ɵcmp: i0.ɵɵComponentDeclaration<IconWrapperComponent, "kendo-icon-wrapper", ["kendoIconWrapper"], { "name": { "alias": "name"; "required": false; }; "svgIcon": { "alias": "svgIcon"; "required": false; }; "innerCssClass": { "alias": "innerCssClass"; "required": false; }; "customFontClass": { "alias": "customFontClass"; "required": false; }; "size": { "alias": "size"; "required": false; }; }, {}, never, never, true, never>;
337
365
  }
338
366
 
@@ -7,7 +7,7 @@ export const packageMetadata = {
7
7
  "productCodes": [
8
8
  "KENDOUIANGULAR"
9
9
  ],
10
- "publishDate": 1783688442,
11
- "version": "25.0.0-develop.2",
10
+ "publishDate": 1785763254,
11
+ "version": "25.0.0-develop.20",
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-icons",
3
- "version": "25.0.0-develop.2",
3
+ "version": "25.0.0-develop.20",
4
4
  "description": "Kendo UI Angular component starter template",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "author": "Progress",
@@ -31,7 +31,7 @@
31
31
  "package": {
32
32
  "productName": "Kendo UI for Angular",
33
33
  "productCode": "KENDOUIANGULAR",
34
- "publishDate": 1783688442,
34
+ "publishDate": 1785763254,
35
35
  "licensingDocsUrl": "https://www.telerik.com/kendo-angular-ui/my-license/"
36
36
  }
37
37
  },
@@ -42,7 +42,7 @@
42
42
  "@angular/platform-browser": "20 - 22",
43
43
  "@progress/kendo-licensing": "^1.11.0",
44
44
  "@progress/kendo-svg-icons": "^4.9.0 || ^5.0.0",
45
- "@progress/kendo-angular-common": "25.0.0-develop.2",
45
+ "@progress/kendo-angular-common": "25.0.0-develop.20",
46
46
  "rxjs": "^6.5.3 || ^7.0.0"
47
47
  },
48
48
  "peerDependenciesMeta": {
@@ -52,7 +52,7 @@
52
52
  },
53
53
  "dependencies": {
54
54
  "tslib": "^2.3.1",
55
- "@progress/kendo-angular-schematics": "25.0.0-develop.2"
55
+ "@progress/kendo-angular-schematics": "25.0.0-develop.20"
56
56
  },
57
57
  "schematics": "./schematics/collection.json",
58
58
  "module": "fesm2022/progress-kendo-angular-icons.mjs",