ng-hub-ui-avatar 22.9.2 → 22.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -17,30 +17,19 @@ class AvatarConfigService {
17
17
  this.userConfig = userConfig;
18
18
  }
19
19
  getAvatarSources(defaultSources) {
20
- if (this.userConfig &&
21
- this.userConfig.sourcePriorityOrder &&
22
- this.userConfig.sourcePriorityOrder.length) {
23
- const uniqueSources = [
24
- ...new Set(this.userConfig.sourcePriorityOrder)
25
- ];
20
+ if (this.userConfig && this.userConfig.sourcePriorityOrder && this.userConfig.sourcePriorityOrder.length) {
21
+ const uniqueSources = [...new Set(this.userConfig.sourcePriorityOrder)];
26
22
  const validSources = uniqueSources.filter((source) => defaultSources.includes(source));
27
- return [
28
- ...validSources,
29
- ...defaultSources.filter((source) => !validSources.includes(source))
30
- ];
23
+ return [...validSources, ...defaultSources.filter((source) => !validSources.includes(source))];
31
24
  }
32
25
  return defaultSources;
33
26
  }
34
27
  getAvatarColors(defaultColors) {
35
- return ((this.userConfig &&
36
- this.userConfig.colors &&
37
- this.userConfig.colors.length &&
38
- this.userConfig.colors) ||
28
+ return ((this.userConfig && this.userConfig.colors && this.userConfig.colors.length && this.userConfig.colors) ||
39
29
  defaultColors);
40
30
  }
41
31
  getDisableSrcCache(defaultDisableSrcCache) {
42
- if (this.userConfig == null ||
43
- this.userConfig.disableSrcCache == null) {
32
+ if (this.userConfig == null || this.userConfig.disableSrcCache == null) {
44
33
  return defaultDisableSrcCache;
45
34
  }
46
35
  else {
@@ -84,16 +73,7 @@ const defaultSources = [
84
73
  /**
85
74
  * list of default colors
86
75
  */
87
- const defaultColors = [
88
- '#1abc9c',
89
- '#3498db',
90
- '#f1c40f',
91
- '#8e44ad',
92
- '#e74c3c',
93
- '#d35400',
94
- '#2c3e50',
95
- '#7f8c8d'
96
- ];
76
+ const defaultColors = ['#1abc9c', '#3498db', '#f1c40f', '#8e44ad', '#e74c3c', '#d35400', '#2c3e50', '#7f8c8d'];
97
77
  /**
98
78
  * Default disable custom source cache settings
99
79
  */
@@ -124,7 +104,7 @@ class AvatarService {
124
104
  return this.avatarColors[asciiCodeSum % this.avatarColors.length];
125
105
  }
126
106
  compareSources(sourceType1, sourceType2) {
127
- return (this.getSourcePriority(sourceType1) - this.getSourcePriority(sourceType2));
107
+ return this.getSourcePriority(sourceType1) - this.getSourcePriority(sourceType2);
128
108
  }
129
109
  isSource(source) {
130
110
  return this.avatarSources.includes(source);
@@ -150,7 +130,7 @@ class AvatarService {
150
130
  calculateAsciiCode(value) {
151
131
  return value
152
132
  .split('')
153
- .map(letter => letter.charCodeAt(0))
133
+ .map((letter) => letter.charCodeAt(0))
154
134
  .reduce((previous, current) => previous + current);
155
135
  }
156
136
  getSourcePriority(sourceType) {
@@ -187,8 +167,7 @@ class Facebook {
187
167
  this.sourceId = sourceId;
188
168
  }
189
169
  getAvatar(size) {
190
- return ('https://graph.facebook.com/' +
191
- `${this.sourceId}/picture?width=${size}&height=${size}`);
170
+ return 'https://graph.facebook.com/' + `${this.sourceId}/picture?width=${size}&height=${size}`;
192
171
  }
193
172
  }
194
173
 
@@ -245,8 +224,8 @@ class Initials {
245
224
  return '';
246
225
  }
247
226
  return elements
248
- .filter(element => element && element.length > 0)
249
- .map(element => element[0].toUpperCase())
227
+ .filter((element) => element && element.length > 0)
228
+ .map((element) => element[0].toUpperCase())
250
229
  .join('');
251
230
  }
252
231
  }
@@ -273,9 +252,7 @@ class Gravatar {
273
252
  sourceId;
274
253
  constructor(value) {
275
254
  this.value = value;
276
- this.sourceId = value.match('^[a-f0-9]{32}$')
277
- ? value
278
- : Md5.hashStr(value).toString();
255
+ this.sourceId = value.match('^[a-f0-9]{32}$') ? value : Md5.hashStr(value).toString();
279
256
  }
280
257
  getAvatar(size) {
281
258
  const avatarSize = isRetina() ? size * 2 : size;
@@ -615,9 +592,7 @@ class AvatarComponent {
615
592
  * Initialize the avatar component and its fallback system
616
593
  */
617
594
  initializeAvatar() {
618
- const computedBorderRadius = this.round()
619
- ? '50%'
620
- : this.cornerRadius() + 'px';
595
+ const computedBorderRadius = this.round() ? '50%' : this.cornerRadius() + 'px';
621
596
  this.hostStyle = {
622
597
  width: this.size() + 'px',
623
598
  height: this.size() + 'px',
@@ -811,7 +786,7 @@ class AvatarComponent {
811
786
  >{{ _badgeText() }}</span
812
787
  >
813
788
  }
814
- `, isInline: true, styles: [":root,:host{--hub-avatar-size: 50px;--hub-avatar-overflow: hidden;--hub-avatar-border-radius-round: 50%;--hub-avatar-border-radius-square: var(--hub-ref-radius-sm, .25rem);--hub-avatar-border-radius: var( --hub-avatar-border-radius-round, var(--hub-avatar-border-radius-square, .25rem) );--hub-avatar-border-width-default: var(--hub-ref-border-width, 1px);--hub-avatar-border-width: 0;--hub-avatar-border-color: transparent;--hub-avatar-accent: var(--hub-sys-color-primary, #0d6efd);--hub-avatar-accent-emphasis: color-mix(in oklch, var(--hub-avatar-accent) 80%, var(--hub-sys-color-ink, #212529));--hub-avatar-accent-subtle: color-mix(in oklch, var(--hub-avatar-accent) 12%, var(--hub-sys-surface-page, #fff));--hub-avatar-accent-on: oklch(from var(--hub-avatar-accent) clamp(0, (.62 - l) * 1000, 1) 0 h);--hub-avatar-fg-color: var(--hub-avatar-accent-on, var(--hub-ref-color-white, #fff));--hub-avatar-bg-color: var(--hub-avatar-accent, var(--hub-sys-color-primary, #0d6efd));--hub-avatar-font-family: var( --hub-ref-font-family-base, system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif );--hub-avatar-font-weight: var(--hub-ref-font-weight-base, 400);--hub-avatar-font-size: calc(var(--hub-avatar-size, 50px) / 3);--hub-avatar-line-height: var(--hub-avatar-size, 50px);--hub-avatar-text-transform: uppercase;--hub-avatar-text-align: center;--hub-avatar-object-fit: cover;--hub-avatar-content-padding: calc(var(--hub-avatar-size, 50px) * .2);--hub-avatar-content-icon-size: calc(var(--hub-avatar-size, 50px) * .55);--hub-avatar-badge-size: calc(var(--hub-avatar-size, 50px) * .28);--hub-avatar-badge-offset: 0px;--hub-avatar-badge-ring-width: max(2px, calc(var(--hub-avatar-size, 50px) * .05));--hub-avatar-badge-ring-color: var(--hub-sys-surface-page, #fff);--hub-avatar-badge-color: var(--hub-sys-color-secondary, #6c757d);--hub-avatar-badge-text-color: var(--hub-ref-color-white, #fff);--hub-avatar-badge-font-size: calc(var(--hub-avatar-size, 50px) * .22);--hub-avatar-badge-padding: calc(var(--hub-avatar-size, 50px) * .08);--hub-avatar-group-overlap: calc(var(--hub-avatar-size, 50px) * .3);--hub-avatar-group-ring-width: max(2px, calc(var(--hub-avatar-size, 50px) * .04));--hub-avatar-group-ring-color: var(--hub-sys-surface-page, #fff)}:host{display:inline-block;position:relative;border-radius:var(--hub-avatar-border-radius, 50%)}.avatar-container{width:var(--hub-avatar-size, 50px);height:var(--hub-avatar-size, 50px);border-radius:var(--hub-avatar-border-radius, 50%);overflow:var(--hub-avatar-overflow, hidden)}.avatar-content{width:100%;height:100%;max-width:100%;box-sizing:border-box;border-radius:var(--hub-avatar-border-radius, 50%);border:var(--hub-avatar-border-width, 0) solid var(--hub-avatar-border-color, transparent);color:var(--hub-avatar-fg-color, var(--hub-ref-color-white, #fff));background-color:var(--hub-avatar-bg-color, var(--hub-sys-surface-page, #fff));font-family:var(--hub-avatar-font-family, system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif);font-size:var(--hub-avatar-font-size, calc(var(--hub-avatar-size, 50px) / 3));font-weight:var(--hub-avatar-font-weight, var(--hub-ref-font-weight-base, 400));line-height:var(--hub-avatar-line-height, var(--hub-avatar-size, 50px));text-transform:var(--hub-avatar-text-transform, uppercase);text-align:var(--hub-avatar-text-align, center)}div.avatar-content{display:flex;align-items:center;justify-content:center}img.avatar-content{display:block;object-fit:var(--hub-avatar-object-fit, cover);background-color:transparent}.hub-avatar__custom{display:none}.hub-avatar--custom .hub-avatar__custom{display:flex;align-items:center;justify-content:center;width:100%;height:100%;box-sizing:border-box;padding:var(--hub-avatar-content-padding, calc(var(--hub-avatar-size, 50px) * .2));border-radius:inherit;overflow:hidden;background-color:var(--hub-avatar-bg-color, var(--hub-sys-color-primary, #0d6efd));color:var(--hub-avatar-fg-color, var(--hub-ref-color-white, #fff));font-size:var(--hub-avatar-content-icon-size, calc(var(--hub-avatar-size, 50px) * .55));line-height:1}.hub-avatar--custom .hub-avatar__custom>*{line-height:1}.hub-avatar--custom .hub-avatar__custom ::ng-deep svg,.hub-avatar--custom .hub-avatar__custom ::ng-deep img{display:block;width:100%;height:100%;max-width:100%;max-height:100%;object-fit:contain}.hub-avatar__badge{position:absolute;inset-block-end:var(--hub-avatar-badge-offset, 0px);inset-inline-end:var(--hub-avatar-badge-offset, 0px);box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;background:var(--hub-avatar-badge-color, var(--hub-sys-color-secondary, #6c757d));color:var(--hub-avatar-badge-text-color, var(--hub-ref-color-white, #fff));box-shadow:0 0 0 var(--hub-avatar-badge-ring-width, 2px) var(--hub-avatar-badge-ring-color, var(--hub-sys-surface-page, #fff))}.hub-avatar__badge--dot{width:var(--hub-avatar-badge-size, calc(var(--hub-avatar-size, 50px) * .28));height:var(--hub-avatar-badge-size, calc(var(--hub-avatar-size, 50px) * .28));border-radius:50%}.hub-avatar__badge--label{min-width:var(--hub-avatar-badge-size, calc(var(--hub-avatar-size, 50px) * .28));height:var(--hub-avatar-badge-size, calc(var(--hub-avatar-size, 50px) * .28));padding-inline:var(--hub-avatar-badge-padding, calc(var(--hub-avatar-size, 50px) * .08));border-radius:var(--hub-sys-radius-pill, 50rem);font-family:var(--hub-avatar-font-family, system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif);font-size:var(--hub-avatar-badge-font-size, calc(var(--hub-avatar-size, 50px) * .22));font-weight:var(--hub-ref-font-weight-bold, 700);line-height:1}:host([data-badge-color=primary]){--hub-avatar-badge-color: var(--hub-sys-color-primary)}:host(.hub-avatar--primary){--hub-avatar-accent: var(--hub-sys-color-primary)}:host([data-badge-color=secondary]){--hub-avatar-badge-color: var(--hub-sys-color-secondary)}:host(.hub-avatar--secondary){--hub-avatar-accent: var(--hub-sys-color-secondary)}:host([data-badge-color=success]){--hub-avatar-badge-color: var(--hub-sys-color-success)}:host(.hub-avatar--success){--hub-avatar-accent: var(--hub-sys-color-success)}:host([data-badge-color=danger]){--hub-avatar-badge-color: var(--hub-sys-color-danger)}:host(.hub-avatar--danger){--hub-avatar-accent: var(--hub-sys-color-danger)}:host([data-badge-color=warning]){--hub-avatar-badge-color: var(--hub-sys-color-warning)}:host(.hub-avatar--warning){--hub-avatar-accent: var(--hub-sys-color-warning)}:host([data-badge-color=info]){--hub-avatar-badge-color: var(--hub-sys-color-info)}:host(.hub-avatar--info){--hub-avatar-accent: var(--hub-sys-color-info)}:host([data-badge-color=neutral]){--hub-avatar-badge-color: var(--hub-sys-color-neutral)}:host(.hub-avatar--neutral){--hub-avatar-accent: var(--hub-sys-color-neutral)}:host([data-badge-color=light]){--hub-avatar-badge-color: var(--hub-sys-color-light)}:host(.hub-avatar--light){--hub-avatar-accent: var(--hub-sys-color-light)}:host([data-badge-color=dark]){--hub-avatar-badge-color: var(--hub-sys-color-dark)}:host(.hub-avatar--dark){--hub-avatar-accent: var(--hub-sys-color-dark)}:host([data-badge-color=warning]),:host([data-badge-color=light]){--hub-avatar-badge-text-color: var(--hub-sys-text-primary, #212529)}.hub-avatar-group{display:inline-flex;align-items:center}.hub-avatar-group hub-avatar{box-shadow:0 0 0 var(--hub-avatar-group-ring-width, 2px) var(--hub-avatar-group-ring-color, var(--hub-sys-surface-page, #fff))}.hub-avatar-group hub-avatar+hub-avatar{margin-inline-start:calc(-1 * var(--hub-avatar-group-overlap, 15px))}\n"] });
789
+ `, isInline: true, styles: [":root,:host{--hub-avatar-size: 50px;--hub-avatar-overflow: hidden;--hub-avatar-border-radius-round: 50%;--hub-avatar-border-radius-square: var(--hub-ref-radius-sm, .25rem);--hub-avatar-border-radius: var(--hub-avatar-border-radius-round, var(--hub-avatar-border-radius-square, .25rem));--hub-avatar-border-width-default: var(--hub-ref-border-width, 1px);--hub-avatar-border-width: 0;--hub-avatar-border-color: transparent;--hub-avatar-accent: var(--hub-sys-color-primary, #0d6efd);--hub-avatar-accent-emphasis: color-mix(in oklch, var(--hub-avatar-accent) 80%, var(--hub-sys-color-ink, #212529));--hub-avatar-accent-subtle: color-mix(in oklch, var(--hub-avatar-accent) 12%, var(--hub-sys-surface-page, #fff));--hub-avatar-accent-on: oklch(from var(--hub-avatar-accent) clamp(0, (.62 - l) * 1000, 1) 0 h);--hub-avatar-fg-color: var(--hub-avatar-accent-on, var(--hub-ref-color-white, #fff));--hub-avatar-bg-color: var(--hub-avatar-accent, var(--hub-sys-color-primary, #0d6efd));--hub-avatar-font-family: var( --hub-ref-font-family-base, system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif );--hub-avatar-font-weight: var(--hub-ref-font-weight-base, 400);--hub-avatar-font-size: calc(var(--hub-avatar-size, 50px) / 3);--hub-avatar-line-height: var(--hub-avatar-size, 50px);--hub-avatar-text-transform: uppercase;--hub-avatar-text-align: center;--hub-avatar-object-fit: cover;--hub-avatar-content-padding: calc(var(--hub-avatar-size, 50px) * .2);--hub-avatar-content-icon-size: calc(var(--hub-avatar-size, 50px) * .55);--hub-avatar-badge-size: calc(var(--hub-avatar-size, 50px) * .28);--hub-avatar-badge-offset: 0px;--hub-avatar-badge-ring-width: max(2px, calc(var(--hub-avatar-size, 50px) * .05));--hub-avatar-badge-ring-color: var(--hub-sys-surface-page, #fff);--hub-avatar-badge-color: var(--hub-sys-color-secondary, #6c757d);--hub-avatar-badge-text-color: var(--hub-ref-color-white, #fff);--hub-avatar-badge-font-size: calc(var(--hub-avatar-size, 50px) * .22);--hub-avatar-badge-padding: calc(var(--hub-avatar-size, 50px) * .08);--hub-avatar-group-overlap: calc(var(--hub-avatar-size, 50px) * .3);--hub-avatar-group-ring-width: max(2px, calc(var(--hub-avatar-size, 50px) * .04));--hub-avatar-group-ring-color: var(--hub-sys-surface-page, #fff)}:host{display:inline-block;position:relative;border-radius:var(--hub-avatar-border-radius, 50%)}.avatar-container{width:var(--hub-avatar-size, 50px);height:var(--hub-avatar-size, 50px);border-radius:var(--hub-avatar-border-radius, 50%);overflow:var(--hub-avatar-overflow, hidden)}.avatar-content{width:100%;height:100%;max-width:100%;box-sizing:border-box;border-radius:var(--hub-avatar-border-radius, 50%);border:var(--hub-avatar-border-width, 0) solid var(--hub-avatar-border-color, transparent);color:var(--hub-avatar-fg-color, var(--hub-ref-color-white, #fff));background-color:var(--hub-avatar-bg-color, var(--hub-sys-surface-page, #fff));font-family:var(--hub-avatar-font-family, system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif);font-size:var(--hub-avatar-font-size, calc(var(--hub-avatar-size, 50px) / 3));font-weight:var(--hub-avatar-font-weight, var(--hub-ref-font-weight-base, 400));line-height:var(--hub-avatar-line-height, var(--hub-avatar-size, 50px));text-transform:var(--hub-avatar-text-transform, uppercase);text-align:var(--hub-avatar-text-align, center)}div.avatar-content{display:flex;align-items:center;justify-content:center}img.avatar-content{display:block;object-fit:var(--hub-avatar-object-fit, cover);background-color:transparent}.hub-avatar__custom{display:none}.hub-avatar--custom .hub-avatar__custom{display:flex;align-items:center;justify-content:center;width:100%;height:100%;box-sizing:border-box;padding:var(--hub-avatar-content-padding, calc(var(--hub-avatar-size, 50px) * .2));border-radius:inherit;overflow:hidden;background-color:var(--hub-avatar-bg-color, var(--hub-sys-color-primary, #0d6efd));color:var(--hub-avatar-fg-color, var(--hub-ref-color-white, #fff));font-size:var(--hub-avatar-content-icon-size, calc(var(--hub-avatar-size, 50px) * .55));line-height:1}.hub-avatar--custom .hub-avatar__custom>*{line-height:1}.hub-avatar--custom .hub-avatar__custom ::ng-deep svg,.hub-avatar--custom .hub-avatar__custom ::ng-deep img{display:block;width:100%;height:100%;max-width:100%;max-height:100%;object-fit:contain}.hub-avatar__badge{position:absolute;inset-block-end:var(--hub-avatar-badge-offset, 0px);inset-inline-end:var(--hub-avatar-badge-offset, 0px);box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;background:var(--hub-avatar-badge-color, var(--hub-sys-color-secondary, #6c757d));color:var(--hub-avatar-badge-text-color, var(--hub-ref-color-white, #fff));box-shadow:0 0 0 var(--hub-avatar-badge-ring-width, 2px) var(--hub-avatar-badge-ring-color, var(--hub-sys-surface-page, #fff))}.hub-avatar__badge--dot{width:var(--hub-avatar-badge-size, calc(var(--hub-avatar-size, 50px) * .28));height:var(--hub-avatar-badge-size, calc(var(--hub-avatar-size, 50px) * .28));border-radius:50%}.hub-avatar__badge--label{min-width:var(--hub-avatar-badge-size, calc(var(--hub-avatar-size, 50px) * .28));height:var(--hub-avatar-badge-size, calc(var(--hub-avatar-size, 50px) * .28));padding-inline:var(--hub-avatar-badge-padding, calc(var(--hub-avatar-size, 50px) * .08));border-radius:var(--hub-sys-radius-pill, 50rem);font-family:var(--hub-avatar-font-family, system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif);font-size:var(--hub-avatar-badge-font-size, calc(var(--hub-avatar-size, 50px) * .22));font-weight:var(--hub-ref-font-weight-bold, 700);line-height:1}:host([data-badge-color=primary]){--hub-avatar-badge-color: var(--hub-sys-color-primary)}:host(.hub-avatar--primary){--hub-avatar-accent: var(--hub-sys-color-primary)}:host([data-badge-color=secondary]){--hub-avatar-badge-color: var(--hub-sys-color-secondary)}:host(.hub-avatar--secondary){--hub-avatar-accent: var(--hub-sys-color-secondary)}:host([data-badge-color=success]){--hub-avatar-badge-color: var(--hub-sys-color-success)}:host(.hub-avatar--success){--hub-avatar-accent: var(--hub-sys-color-success)}:host([data-badge-color=danger]){--hub-avatar-badge-color: var(--hub-sys-color-danger)}:host(.hub-avatar--danger){--hub-avatar-accent: var(--hub-sys-color-danger)}:host([data-badge-color=warning]){--hub-avatar-badge-color: var(--hub-sys-color-warning)}:host(.hub-avatar--warning){--hub-avatar-accent: var(--hub-sys-color-warning)}:host([data-badge-color=info]){--hub-avatar-badge-color: var(--hub-sys-color-info)}:host(.hub-avatar--info){--hub-avatar-accent: var(--hub-sys-color-info)}:host([data-badge-color=neutral]){--hub-avatar-badge-color: var(--hub-sys-color-neutral)}:host(.hub-avatar--neutral){--hub-avatar-accent: var(--hub-sys-color-neutral)}:host([data-badge-color=light]){--hub-avatar-badge-color: var(--hub-sys-color-light)}:host(.hub-avatar--light){--hub-avatar-accent: var(--hub-sys-color-light)}:host([data-badge-color=dark]){--hub-avatar-badge-color: var(--hub-sys-color-dark)}:host(.hub-avatar--dark){--hub-avatar-accent: var(--hub-sys-color-dark)}:host([data-badge-color=warning]),:host([data-badge-color=light]){--hub-avatar-badge-text-color: var(--hub-sys-text-primary, #212529)}.hub-avatar-group{display:inline-flex;align-items:center}.hub-avatar-group hub-avatar{box-shadow:0 0 0 var(--hub-avatar-group-ring-width, 2px) var(--hub-avatar-group-ring-color, var(--hub-sys-surface-page, #fff))}.hub-avatar-group hub-avatar+hub-avatar{margin-inline-start:calc(-1 * var(--hub-avatar-group-overlap, 15px))}\n"] });
815
790
  }
816
791
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AvatarComponent, decorators: [{
817
792
  type: Component,
@@ -862,7 +837,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
862
837
  '[attr.data-badge-color]': 'badgeColor() || null',
863
838
  '[style.--hub-avatar-badge-color]': 'badgeColorVar()',
864
839
  '[style.--hub-avatar-size]': 'avatarSizePx'
865
- }, styles: [":root,:host{--hub-avatar-size: 50px;--hub-avatar-overflow: hidden;--hub-avatar-border-radius-round: 50%;--hub-avatar-border-radius-square: var(--hub-ref-radius-sm, .25rem);--hub-avatar-border-radius: var( --hub-avatar-border-radius-round, var(--hub-avatar-border-radius-square, .25rem) );--hub-avatar-border-width-default: var(--hub-ref-border-width, 1px);--hub-avatar-border-width: 0;--hub-avatar-border-color: transparent;--hub-avatar-accent: var(--hub-sys-color-primary, #0d6efd);--hub-avatar-accent-emphasis: color-mix(in oklch, var(--hub-avatar-accent) 80%, var(--hub-sys-color-ink, #212529));--hub-avatar-accent-subtle: color-mix(in oklch, var(--hub-avatar-accent) 12%, var(--hub-sys-surface-page, #fff));--hub-avatar-accent-on: oklch(from var(--hub-avatar-accent) clamp(0, (.62 - l) * 1000, 1) 0 h);--hub-avatar-fg-color: var(--hub-avatar-accent-on, var(--hub-ref-color-white, #fff));--hub-avatar-bg-color: var(--hub-avatar-accent, var(--hub-sys-color-primary, #0d6efd));--hub-avatar-font-family: var( --hub-ref-font-family-base, system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif );--hub-avatar-font-weight: var(--hub-ref-font-weight-base, 400);--hub-avatar-font-size: calc(var(--hub-avatar-size, 50px) / 3);--hub-avatar-line-height: var(--hub-avatar-size, 50px);--hub-avatar-text-transform: uppercase;--hub-avatar-text-align: center;--hub-avatar-object-fit: cover;--hub-avatar-content-padding: calc(var(--hub-avatar-size, 50px) * .2);--hub-avatar-content-icon-size: calc(var(--hub-avatar-size, 50px) * .55);--hub-avatar-badge-size: calc(var(--hub-avatar-size, 50px) * .28);--hub-avatar-badge-offset: 0px;--hub-avatar-badge-ring-width: max(2px, calc(var(--hub-avatar-size, 50px) * .05));--hub-avatar-badge-ring-color: var(--hub-sys-surface-page, #fff);--hub-avatar-badge-color: var(--hub-sys-color-secondary, #6c757d);--hub-avatar-badge-text-color: var(--hub-ref-color-white, #fff);--hub-avatar-badge-font-size: calc(var(--hub-avatar-size, 50px) * .22);--hub-avatar-badge-padding: calc(var(--hub-avatar-size, 50px) * .08);--hub-avatar-group-overlap: calc(var(--hub-avatar-size, 50px) * .3);--hub-avatar-group-ring-width: max(2px, calc(var(--hub-avatar-size, 50px) * .04));--hub-avatar-group-ring-color: var(--hub-sys-surface-page, #fff)}:host{display:inline-block;position:relative;border-radius:var(--hub-avatar-border-radius, 50%)}.avatar-container{width:var(--hub-avatar-size, 50px);height:var(--hub-avatar-size, 50px);border-radius:var(--hub-avatar-border-radius, 50%);overflow:var(--hub-avatar-overflow, hidden)}.avatar-content{width:100%;height:100%;max-width:100%;box-sizing:border-box;border-radius:var(--hub-avatar-border-radius, 50%);border:var(--hub-avatar-border-width, 0) solid var(--hub-avatar-border-color, transparent);color:var(--hub-avatar-fg-color, var(--hub-ref-color-white, #fff));background-color:var(--hub-avatar-bg-color, var(--hub-sys-surface-page, #fff));font-family:var(--hub-avatar-font-family, system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif);font-size:var(--hub-avatar-font-size, calc(var(--hub-avatar-size, 50px) / 3));font-weight:var(--hub-avatar-font-weight, var(--hub-ref-font-weight-base, 400));line-height:var(--hub-avatar-line-height, var(--hub-avatar-size, 50px));text-transform:var(--hub-avatar-text-transform, uppercase);text-align:var(--hub-avatar-text-align, center)}div.avatar-content{display:flex;align-items:center;justify-content:center}img.avatar-content{display:block;object-fit:var(--hub-avatar-object-fit, cover);background-color:transparent}.hub-avatar__custom{display:none}.hub-avatar--custom .hub-avatar__custom{display:flex;align-items:center;justify-content:center;width:100%;height:100%;box-sizing:border-box;padding:var(--hub-avatar-content-padding, calc(var(--hub-avatar-size, 50px) * .2));border-radius:inherit;overflow:hidden;background-color:var(--hub-avatar-bg-color, var(--hub-sys-color-primary, #0d6efd));color:var(--hub-avatar-fg-color, var(--hub-ref-color-white, #fff));font-size:var(--hub-avatar-content-icon-size, calc(var(--hub-avatar-size, 50px) * .55));line-height:1}.hub-avatar--custom .hub-avatar__custom>*{line-height:1}.hub-avatar--custom .hub-avatar__custom ::ng-deep svg,.hub-avatar--custom .hub-avatar__custom ::ng-deep img{display:block;width:100%;height:100%;max-width:100%;max-height:100%;object-fit:contain}.hub-avatar__badge{position:absolute;inset-block-end:var(--hub-avatar-badge-offset, 0px);inset-inline-end:var(--hub-avatar-badge-offset, 0px);box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;background:var(--hub-avatar-badge-color, var(--hub-sys-color-secondary, #6c757d));color:var(--hub-avatar-badge-text-color, var(--hub-ref-color-white, #fff));box-shadow:0 0 0 var(--hub-avatar-badge-ring-width, 2px) var(--hub-avatar-badge-ring-color, var(--hub-sys-surface-page, #fff))}.hub-avatar__badge--dot{width:var(--hub-avatar-badge-size, calc(var(--hub-avatar-size, 50px) * .28));height:var(--hub-avatar-badge-size, calc(var(--hub-avatar-size, 50px) * .28));border-radius:50%}.hub-avatar__badge--label{min-width:var(--hub-avatar-badge-size, calc(var(--hub-avatar-size, 50px) * .28));height:var(--hub-avatar-badge-size, calc(var(--hub-avatar-size, 50px) * .28));padding-inline:var(--hub-avatar-badge-padding, calc(var(--hub-avatar-size, 50px) * .08));border-radius:var(--hub-sys-radius-pill, 50rem);font-family:var(--hub-avatar-font-family, system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif);font-size:var(--hub-avatar-badge-font-size, calc(var(--hub-avatar-size, 50px) * .22));font-weight:var(--hub-ref-font-weight-bold, 700);line-height:1}:host([data-badge-color=primary]){--hub-avatar-badge-color: var(--hub-sys-color-primary)}:host(.hub-avatar--primary){--hub-avatar-accent: var(--hub-sys-color-primary)}:host([data-badge-color=secondary]){--hub-avatar-badge-color: var(--hub-sys-color-secondary)}:host(.hub-avatar--secondary){--hub-avatar-accent: var(--hub-sys-color-secondary)}:host([data-badge-color=success]){--hub-avatar-badge-color: var(--hub-sys-color-success)}:host(.hub-avatar--success){--hub-avatar-accent: var(--hub-sys-color-success)}:host([data-badge-color=danger]){--hub-avatar-badge-color: var(--hub-sys-color-danger)}:host(.hub-avatar--danger){--hub-avatar-accent: var(--hub-sys-color-danger)}:host([data-badge-color=warning]){--hub-avatar-badge-color: var(--hub-sys-color-warning)}:host(.hub-avatar--warning){--hub-avatar-accent: var(--hub-sys-color-warning)}:host([data-badge-color=info]){--hub-avatar-badge-color: var(--hub-sys-color-info)}:host(.hub-avatar--info){--hub-avatar-accent: var(--hub-sys-color-info)}:host([data-badge-color=neutral]){--hub-avatar-badge-color: var(--hub-sys-color-neutral)}:host(.hub-avatar--neutral){--hub-avatar-accent: var(--hub-sys-color-neutral)}:host([data-badge-color=light]){--hub-avatar-badge-color: var(--hub-sys-color-light)}:host(.hub-avatar--light){--hub-avatar-accent: var(--hub-sys-color-light)}:host([data-badge-color=dark]){--hub-avatar-badge-color: var(--hub-sys-color-dark)}:host(.hub-avatar--dark){--hub-avatar-accent: var(--hub-sys-color-dark)}:host([data-badge-color=warning]),:host([data-badge-color=light]){--hub-avatar-badge-text-color: var(--hub-sys-text-primary, #212529)}.hub-avatar-group{display:inline-flex;align-items:center}.hub-avatar-group hub-avatar{box-shadow:0 0 0 var(--hub-avatar-group-ring-width, 2px) var(--hub-avatar-group-ring-color, var(--hub-sys-surface-page, #fff))}.hub-avatar-group hub-avatar+hub-avatar{margin-inline-start:calc(-1 * var(--hub-avatar-group-overlap, 15px))}\n"] }]
840
+ }, styles: [":root,:host{--hub-avatar-size: 50px;--hub-avatar-overflow: hidden;--hub-avatar-border-radius-round: 50%;--hub-avatar-border-radius-square: var(--hub-ref-radius-sm, .25rem);--hub-avatar-border-radius: var(--hub-avatar-border-radius-round, var(--hub-avatar-border-radius-square, .25rem));--hub-avatar-border-width-default: var(--hub-ref-border-width, 1px);--hub-avatar-border-width: 0;--hub-avatar-border-color: transparent;--hub-avatar-accent: var(--hub-sys-color-primary, #0d6efd);--hub-avatar-accent-emphasis: color-mix(in oklch, var(--hub-avatar-accent) 80%, var(--hub-sys-color-ink, #212529));--hub-avatar-accent-subtle: color-mix(in oklch, var(--hub-avatar-accent) 12%, var(--hub-sys-surface-page, #fff));--hub-avatar-accent-on: oklch(from var(--hub-avatar-accent) clamp(0, (.62 - l) * 1000, 1) 0 h);--hub-avatar-fg-color: var(--hub-avatar-accent-on, var(--hub-ref-color-white, #fff));--hub-avatar-bg-color: var(--hub-avatar-accent, var(--hub-sys-color-primary, #0d6efd));--hub-avatar-font-family: var( --hub-ref-font-family-base, system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif );--hub-avatar-font-weight: var(--hub-ref-font-weight-base, 400);--hub-avatar-font-size: calc(var(--hub-avatar-size, 50px) / 3);--hub-avatar-line-height: var(--hub-avatar-size, 50px);--hub-avatar-text-transform: uppercase;--hub-avatar-text-align: center;--hub-avatar-object-fit: cover;--hub-avatar-content-padding: calc(var(--hub-avatar-size, 50px) * .2);--hub-avatar-content-icon-size: calc(var(--hub-avatar-size, 50px) * .55);--hub-avatar-badge-size: calc(var(--hub-avatar-size, 50px) * .28);--hub-avatar-badge-offset: 0px;--hub-avatar-badge-ring-width: max(2px, calc(var(--hub-avatar-size, 50px) * .05));--hub-avatar-badge-ring-color: var(--hub-sys-surface-page, #fff);--hub-avatar-badge-color: var(--hub-sys-color-secondary, #6c757d);--hub-avatar-badge-text-color: var(--hub-ref-color-white, #fff);--hub-avatar-badge-font-size: calc(var(--hub-avatar-size, 50px) * .22);--hub-avatar-badge-padding: calc(var(--hub-avatar-size, 50px) * .08);--hub-avatar-group-overlap: calc(var(--hub-avatar-size, 50px) * .3);--hub-avatar-group-ring-width: max(2px, calc(var(--hub-avatar-size, 50px) * .04));--hub-avatar-group-ring-color: var(--hub-sys-surface-page, #fff)}:host{display:inline-block;position:relative;border-radius:var(--hub-avatar-border-radius, 50%)}.avatar-container{width:var(--hub-avatar-size, 50px);height:var(--hub-avatar-size, 50px);border-radius:var(--hub-avatar-border-radius, 50%);overflow:var(--hub-avatar-overflow, hidden)}.avatar-content{width:100%;height:100%;max-width:100%;box-sizing:border-box;border-radius:var(--hub-avatar-border-radius, 50%);border:var(--hub-avatar-border-width, 0) solid var(--hub-avatar-border-color, transparent);color:var(--hub-avatar-fg-color, var(--hub-ref-color-white, #fff));background-color:var(--hub-avatar-bg-color, var(--hub-sys-surface-page, #fff));font-family:var(--hub-avatar-font-family, system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif);font-size:var(--hub-avatar-font-size, calc(var(--hub-avatar-size, 50px) / 3));font-weight:var(--hub-avatar-font-weight, var(--hub-ref-font-weight-base, 400));line-height:var(--hub-avatar-line-height, var(--hub-avatar-size, 50px));text-transform:var(--hub-avatar-text-transform, uppercase);text-align:var(--hub-avatar-text-align, center)}div.avatar-content{display:flex;align-items:center;justify-content:center}img.avatar-content{display:block;object-fit:var(--hub-avatar-object-fit, cover);background-color:transparent}.hub-avatar__custom{display:none}.hub-avatar--custom .hub-avatar__custom{display:flex;align-items:center;justify-content:center;width:100%;height:100%;box-sizing:border-box;padding:var(--hub-avatar-content-padding, calc(var(--hub-avatar-size, 50px) * .2));border-radius:inherit;overflow:hidden;background-color:var(--hub-avatar-bg-color, var(--hub-sys-color-primary, #0d6efd));color:var(--hub-avatar-fg-color, var(--hub-ref-color-white, #fff));font-size:var(--hub-avatar-content-icon-size, calc(var(--hub-avatar-size, 50px) * .55));line-height:1}.hub-avatar--custom .hub-avatar__custom>*{line-height:1}.hub-avatar--custom .hub-avatar__custom ::ng-deep svg,.hub-avatar--custom .hub-avatar__custom ::ng-deep img{display:block;width:100%;height:100%;max-width:100%;max-height:100%;object-fit:contain}.hub-avatar__badge{position:absolute;inset-block-end:var(--hub-avatar-badge-offset, 0px);inset-inline-end:var(--hub-avatar-badge-offset, 0px);box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;background:var(--hub-avatar-badge-color, var(--hub-sys-color-secondary, #6c757d));color:var(--hub-avatar-badge-text-color, var(--hub-ref-color-white, #fff));box-shadow:0 0 0 var(--hub-avatar-badge-ring-width, 2px) var(--hub-avatar-badge-ring-color, var(--hub-sys-surface-page, #fff))}.hub-avatar__badge--dot{width:var(--hub-avatar-badge-size, calc(var(--hub-avatar-size, 50px) * .28));height:var(--hub-avatar-badge-size, calc(var(--hub-avatar-size, 50px) * .28));border-radius:50%}.hub-avatar__badge--label{min-width:var(--hub-avatar-badge-size, calc(var(--hub-avatar-size, 50px) * .28));height:var(--hub-avatar-badge-size, calc(var(--hub-avatar-size, 50px) * .28));padding-inline:var(--hub-avatar-badge-padding, calc(var(--hub-avatar-size, 50px) * .08));border-radius:var(--hub-sys-radius-pill, 50rem);font-family:var(--hub-avatar-font-family, system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif);font-size:var(--hub-avatar-badge-font-size, calc(var(--hub-avatar-size, 50px) * .22));font-weight:var(--hub-ref-font-weight-bold, 700);line-height:1}:host([data-badge-color=primary]){--hub-avatar-badge-color: var(--hub-sys-color-primary)}:host(.hub-avatar--primary){--hub-avatar-accent: var(--hub-sys-color-primary)}:host([data-badge-color=secondary]){--hub-avatar-badge-color: var(--hub-sys-color-secondary)}:host(.hub-avatar--secondary){--hub-avatar-accent: var(--hub-sys-color-secondary)}:host([data-badge-color=success]){--hub-avatar-badge-color: var(--hub-sys-color-success)}:host(.hub-avatar--success){--hub-avatar-accent: var(--hub-sys-color-success)}:host([data-badge-color=danger]){--hub-avatar-badge-color: var(--hub-sys-color-danger)}:host(.hub-avatar--danger){--hub-avatar-accent: var(--hub-sys-color-danger)}:host([data-badge-color=warning]){--hub-avatar-badge-color: var(--hub-sys-color-warning)}:host(.hub-avatar--warning){--hub-avatar-accent: var(--hub-sys-color-warning)}:host([data-badge-color=info]){--hub-avatar-badge-color: var(--hub-sys-color-info)}:host(.hub-avatar--info){--hub-avatar-accent: var(--hub-sys-color-info)}:host([data-badge-color=neutral]){--hub-avatar-badge-color: var(--hub-sys-color-neutral)}:host(.hub-avatar--neutral){--hub-avatar-accent: var(--hub-sys-color-neutral)}:host([data-badge-color=light]){--hub-avatar-badge-color: var(--hub-sys-color-light)}:host(.hub-avatar--light){--hub-avatar-accent: var(--hub-sys-color-light)}:host([data-badge-color=dark]){--hub-avatar-badge-color: var(--hub-sys-color-dark)}:host(.hub-avatar--dark){--hub-avatar-accent: var(--hub-sys-color-dark)}:host([data-badge-color=warning]),:host([data-badge-color=light]){--hub-avatar-badge-text-color: var(--hub-sys-text-primary, #212529)}.hub-avatar-group{display:inline-flex;align-items:center}.hub-avatar-group hub-avatar{box-shadow:0 0 0 var(--hub-avatar-group-ring-width, 2px) var(--hub-avatar-group-ring-color, var(--hub-sys-surface-page, #fff))}.hub-avatar-group hub-avatar+hub-avatar{margin-inline-start:calc(-1 * var(--hub-avatar-group-overlap, 15px))}\n"] }]
866
841
  }], ctorParameters: () => [{ type: SourceFactory }, { type: AvatarService }, { type: i3.DomSanitizer }], propDecorators: { round: [{ type: i0.Input, args: [{ isSignal: true, alias: "round", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], interactive: [{ type: i0.Input, args: [{ isSignal: true, alias: "interactive", required: false }] }], textSizeRatio: [{ type: i0.Input, args: [{ isSignal: true, alias: "textSizeRatio", required: false }] }], bgColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "bgColor", required: false }] }], fgColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "fgColor", required: false }] }], borderColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "borderColor", required: false }] }], autoColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoColor", required: false }] }], style: [{ type: i0.Input, args: [{ isSignal: true, alias: "style", required: false }] }], cornerRadius: [{ type: i0.Input, args: [{ isSignal: true, alias: "cornerRadius", required: false }] }], facebook: [{ type: i0.Input, args: [{ isSignal: true, alias: "facebookId", required: false }] }], gravatar: [{ type: i0.Input, args: [{ isSignal: true, alias: "gravatarId", required: false }] }], github: [{ type: i0.Input, args: [{ isSignal: true, alias: "githubId", required: false }] }], custom: [{ type: i0.Input, args: [{ isSignal: true, alias: "src", required: false }] }], customAlt: [{ type: i0.Input, args: [{ isSignal: true, alias: "alt", required: false }] }], initials: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], referrerpolicy: [{ type: i0.Input, args: [{ isSignal: true, alias: "referrerpolicy", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], initialsSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "initialsSize", required: false }] }], badge: [{ type: i0.Input, args: [{ isSignal: true, alias: "badge", required: false }] }], badgeColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "badgeColor", required: false }] }], clickOnAvatar: [{ type: i0.Output, args: ["clickOnAvatar"] }], customContentRef: [{
867
842
  type: ViewChild,
868
843
  args: ['customContent', { static: true }]
@@ -1 +1 @@
1
- {"version":3,"file":"ng-hub-ui-avatar.mjs","sources":["../../../projects/avatar/src/lib/avatar-config.token.ts","../../../projects/avatar/src/lib/avatar-config.service.ts","../../../projects/avatar/src/lib/sources/avatar-source.enum.ts","../../../projects/avatar/src/lib/avatar.service.ts","../../../projects/avatar/src/lib/sources/async-source.ts","../../../projects/avatar/src/lib/sources/facebook.ts","../../../projects/avatar/src/lib/sources/custom.ts","../../../projects/avatar/src/lib/sources/initials.ts","../../../projects/avatar/src/lib/sources/gravatar.ts","../../../projects/avatar/src/lib/sources/value.ts","../../../projects/avatar/src/lib/sources/github.ts","../../../projects/avatar/src/lib/sources/custom-no-cache.ts","../../../projects/avatar/src/lib/sources/source.factory.ts","../../../projects/avatar/src/lib/avatar.component.ts","../../../projects/avatar/src/lib/avatar.module.ts","../../../projects/avatar/src/lib/avatar.providers.ts","../../../projects/avatar/src/public_api.ts","../../../projects/avatar/src/ng-hub-ui-avatar.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nimport { AvatarConfig } from './avatar-config';\n/**\n * Token used to inject the AvatarConfig object\n */\nexport const AVATAR_CONFIG = new InjectionToken<AvatarConfig>('avatar.config');\n","import { Inject, Injectable, Optional } from '@angular/core';\n\nimport type { AvatarConfig } from './avatar-config';\nimport { AVATAR_CONFIG } from './avatar-config.token';\nimport { AvatarSource } from './sources/avatar-source.enum';\n\n@Injectable({ providedIn: 'root' })\nexport class AvatarConfigService {\n\tconstructor(\n\t\t@Optional()\n\t\t@Inject(AVATAR_CONFIG)\n\t\tpublic userConfig: AvatarConfig\n\t) {}\n\n\tpublic getAvatarSources(defaultSources: AvatarSource[]): AvatarSource[] {\n\t\tif (\n\t\t\tthis.userConfig &&\n\t\t\tthis.userConfig.sourcePriorityOrder &&\n\t\t\tthis.userConfig.sourcePriorityOrder.length\n\t\t) {\n\t\t\tconst uniqueSources = [\n\t\t\t\t...new Set(this.userConfig.sourcePriorityOrder)\n\t\t\t];\n\t\t\tconst validSources = uniqueSources.filter((source) =>\n\t\t\t\tdefaultSources.includes(source)\n\t\t\t);\n\t\t\treturn [\n\t\t\t\t...validSources,\n\t\t\t\t...defaultSources.filter(\n\t\t\t\t\t(source) => !validSources.includes(source)\n\t\t\t\t)\n\t\t\t];\n\t\t}\n\t\treturn defaultSources;\n\t}\n\n\tpublic getAvatarColors(defaultColors: string[]): string[] {\n\t\treturn (\n\t\t\t(this.userConfig &&\n\t\t\t\tthis.userConfig.colors &&\n\t\t\t\tthis.userConfig.colors.length &&\n\t\t\t\tthis.userConfig.colors) ||\n\t\t\tdefaultColors\n\t\t);\n\t}\n\n\tpublic getDisableSrcCache(defaultDisableSrcCache: boolean): boolean {\n\t\tif (\n\t\t\tthis.userConfig == null ||\n\t\t\tthis.userConfig.disableSrcCache == null\n\t\t) {\n\t\t\treturn defaultDisableSrcCache;\n\t\t} else {\n\t\t\treturn this.userConfig.disableSrcCache;\n\t\t}\n\t}\n}\n","export enum AvatarSource {\n FACEBOOK = 'facebook',\n GRAVATAR = 'gravatar',\n GITHUB = 'github',\n CUSTOM = 'custom',\n INITIALS = 'initials',\n VALUE = 'value'\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\n\nimport { AvatarConfigService } from './avatar-config.service';\nimport { AvatarSource } from './sources/avatar-source.enum';\nimport { Source } from './sources/source';\n\n/**\n * list of Supported avatar sources\n */\nexport const defaultSources = [\n AvatarSource.FACEBOOK,\n AvatarSource.GRAVATAR,\n AvatarSource.GITHUB,\n AvatarSource.CUSTOM,\n AvatarSource.INITIALS,\n AvatarSource.VALUE\n];\n\n/**\n * list of default colors\n */\nexport const defaultColors = [\n '#1abc9c',\n '#3498db',\n '#f1c40f',\n '#8e44ad',\n '#e74c3c',\n '#d35400',\n '#2c3e50',\n '#7f8c8d'\n];\n\n/**\n * Default disable custom source cache settings\n */\nexport const defaultDisableSrcCache = false;\n\n/**\n * Provides utilities methods related to Avatar component\n */\n@Injectable({providedIn: 'root'})\nexport class AvatarService {\n public avatarSources: AvatarSource[] = defaultSources;\n public avatarColors: string[] = defaultColors;\n\n private readonly failedSources = new Map<string, Source>();\n\n constructor(\n private http: HttpClient,\n private avatarConfigService: AvatarConfigService\n ) {\n this.overrideAvatarSources();\n this.overrideAvatarColors();\n }\n\n public fetchAvatar(avatarUrl: string): Observable<unknown> {\n return this.http.get(avatarUrl);\n }\n\n public getRandomColor(avatarText: string): string {\n if (!avatarText) {\n return 'transparent';\n }\n const asciiCodeSum = this.calculateAsciiCode(avatarText);\n return this.avatarColors[asciiCodeSum % this.avatarColors.length];\n }\n\n public compareSources(\n sourceType1: AvatarSource,\n sourceType2: AvatarSource\n ): number {\n return (\n this.getSourcePriority(sourceType1) - this.getSourcePriority(sourceType2)\n );\n }\n\n public isSource(source: string): boolean {\n return this.avatarSources.includes(source as AvatarSource);\n }\n\n public isTextAvatar(sourceType: AvatarSource): boolean {\n return [AvatarSource.INITIALS, AvatarSource.VALUE].includes(sourceType);\n }\n\n private buildSourceKey(source: Source): string {\n return source.sourceType + '-' + source.sourceId;\n }\n\n public sourceHasFailedBefore(source: Source): boolean {\n return this.failedSources.has(this.buildSourceKey(source));\n }\n\n public markSourceAsFailed(source: Source): void {\n this.failedSources.set(this.buildSourceKey(source), source);\n }\n\n private overrideAvatarSources(): void {\n this.avatarSources = this.avatarConfigService.getAvatarSources(\n defaultSources\n );\n }\n\n private overrideAvatarColors(): void {\n this.avatarColors = this.avatarConfigService.getAvatarColors(defaultColors);\n }\n\n private calculateAsciiCode(value: string): number {\n return value\n .split('')\n .map(letter => letter.charCodeAt(0))\n .reduce((previous: number, current: number) => previous + current);\n }\n\n private getSourcePriority(sourceType: AvatarSource) {\n return this.avatarSources.indexOf(sourceType);\n }\n}\n","import { Source } from './source';\nimport { AvatarSource } from './avatar-source.enum';\n\n/**\n * Contract of all async sources.\n * Every async source must implement the processResponse method that extracts the avatar url from the data\n */\nexport abstract class AsyncSource implements Source {\n readonly abstract sourceType: AvatarSource;\n\n constructor(public sourceId: string) {}\n\n abstract getAvatar(size: number): string;\n abstract processResponse(data: unknown, size?: number): string | null;\n}\n","import { Source } from './source';\nimport { AvatarSource } from './avatar-source.enum';\n/**\n * Facebook source implementation.\n * Fetch avatar source based on facebook identifier\n * and image size\n */\nexport class Facebook implements Source {\n readonly sourceType: AvatarSource = AvatarSource.FACEBOOK;\n\n constructor(public sourceId: string) {}\n\n public getAvatar(size: number): string {\n return (\n 'https://graph.facebook.com/' +\n `${this.sourceId}/picture?width=${size}&height=${size}`\n );\n }\n}\n","import { Source } from './source';\nimport { AvatarSource } from './avatar-source.enum';\n/**\n * Custom source implementation.\n * return custom image as an avatar\n *\n */\nexport class Custom implements Source {\n readonly sourceType: AvatarSource = AvatarSource.CUSTOM;\n\n constructor(public sourceId: string) {}\n\n public getAvatar(): string {\n return this.sourceId;\n }\n}\n","import { Source } from './source';\nimport { AvatarSource } from './avatar-source.enum';\n\n/**\n * Initials source implementation.\n * return the initials of the given value\n */\nexport class Initials implements Source {\n readonly sourceType: AvatarSource = AvatarSource.INITIALS;\n\n constructor(public sourceId: string) {}\n\n public getAvatar(size: number): string {\n return this.getInitials(this.sourceId, size);\n }\n\n /**\n * Returns the initial letters of a name in a string.\n */\n private getInitials(name: string, size: number): string {\n name = name.trim();\n\n if (!name) {\n return '';\n }\n\n const initials = name.split(' ');\n\n if (size && size < initials.length) {\n return this.constructInitials(initials.slice(0, size));\n } else {\n return this.constructInitials(initials);\n }\n }\n\n /**\n * Iterates a person's name string to get the initials of each word in uppercase.\n */\n private constructInitials(elements: string[]): string {\n if (!elements || !elements.length) {\n return '';\n }\n\n return elements\n .filter(element => element && element.length > 0)\n .map(element => element[0].toUpperCase())\n .join('');\n }\n}\n","import { Md5 } from 'ts-md5';\nimport { Source } from './source';\nimport { AvatarSource } from './avatar-source.enum';\n\nfunction isRetina(): boolean {\n if (typeof window !== 'undefined' && window !== null) {\n if (window.devicePixelRatio > 1.25) {\n return true;\n }\n\n const mediaQuery = '(-webkit-min-device-pixel-ratio: 1.25), (min--moz-device-pixel-ratio: 1.25), (-o-min-device-pixel-ratio: 5/4), (min-resolution: 1.25dppx)';\n if (window.matchMedia && window.matchMedia(mediaQuery).matches) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Gravatar source implementation.\n * Fetch avatar source based on gravatar email\n */\nexport class Gravatar implements Source {\n readonly sourceType: AvatarSource = AvatarSource.GRAVATAR;\n public sourceId: string;\n\n constructor(public value: string) {\n this.sourceId = value.match('^[a-f0-9]{32}$')\n ? value\n : Md5.hashStr(value).toString();\n }\n\n public getAvatar(size: number): string {\n const avatarSize = isRetina() ? size * 2 : size;\n return `https://secure.gravatar.com/avatar/${\n this.sourceId\n }?s=${avatarSize}&d=404`;\n }\n}\n","import { Source } from './source';\nimport { AvatarSource } from './avatar-source.enum';\n\n/**\n * Value source implementation.\n * return the value as avatar\n */\nexport class Value implements Source {\n readonly sourceType: AvatarSource = AvatarSource.VALUE;\n\n constructor(public sourceId: string) {}\n\n public getAvatar(): string {\n return this.sourceId;\n }\n}\n","import { AsyncSource } from './async-source';\nimport { AvatarSource } from './avatar-source.enum';\n\n/**\n * GitHub source implementation.\n * Fetch avatar source based on github identifier\n */\nexport class Github extends AsyncSource {\n readonly sourceType: AvatarSource = AvatarSource.GITHUB;\n\n constructor(sourceId: string) {\n super(sourceId);\n }\n\n public getAvatar(): string {\n return `https://api.github.com/users/${this.sourceId}`;\n }\n\n /**\n * extract github avatar from json data\n */\n public processResponse(data: { avatar_url: string }, size?: number): string {\n if (size) {\n return `${data.avatar_url}&s=${size}`;\n }\n return data.avatar_url;\n }\n}\n","import {Source} from './source';\nimport {AvatarSource} from './avatar-source.enum';\n\n/**\n * Custom source implementation (with no cache).\n * return custom image as an avatar\n *\n */\nexport class CustomNoCache implements Source {\n readonly sourceType: AvatarSource = AvatarSource.CUSTOM;\n\n constructor(public sourceId: string) {}\n\n public getAvatar(): string {\n const urlSuffix = Math.random();\n return `${this.sourceId}${this.sourceId.indexOf('?') > -1 ? '&' : '?'}_=${urlSuffix}`;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Source } from './source';\nimport { Facebook } from './facebook';\nimport { Custom } from './custom';\nimport { Initials } from './initials';\nimport { Gravatar } from './gravatar';\nimport { Value } from './value';\nimport { Github } from './github';\nimport { SourceCreator } from './source.creator';\nimport { AvatarSource } from './avatar-source.enum';\nimport { AvatarConfigService } from '../avatar-config.service';\nimport { defaultDisableSrcCache } from '../avatar.service';\nimport { CustomNoCache } from './custom-no-cache';\n\n/**\n * Factory class that implements factory method pattern.\n * Used to create Source implementation class based\n * on the source Type\n */\n@Injectable({providedIn: 'root'})\nexport class SourceFactory {\n private sources: { [key: string]: SourceCreator } = {};\n\n constructor(avatarConfigService: AvatarConfigService) {\n const disableSrcCache = avatarConfigService.getDisableSrcCache(defaultDisableSrcCache);\n this.sources[AvatarSource.FACEBOOK] = Facebook;\n this.sources[AvatarSource.GRAVATAR] = Gravatar;\n this.sources[AvatarSource.CUSTOM] = disableSrcCache ? CustomNoCache : Custom;\n this.sources[AvatarSource.INITIALS] = Initials;\n this.sources[AvatarSource.VALUE] = Value;\n this.sources[AvatarSource.GITHUB] = Github;\n }\n\n public newInstance(sourceType: AvatarSource, sourceValue: string): Source {\n return new this.sources[sourceType](sourceValue);\n }\n}\n","import { AfterContentInit, Component, ElementRef, OnChanges, OnDestroy, SecurityContext, SimpleChanges, ViewChild, booleanAttribute, computed, input, output } from '@angular/core';\n\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\nimport { map, takeWhile } from 'rxjs/operators';\nimport { AvatarService } from './avatar.service';\nimport { AsyncSource } from './sources/async-source';\nimport { AvatarSource } from './sources/avatar-source.enum';\nimport { resolveHubAccent } from 'ng-hub-ui-utils';\nimport { Source } from './sources/source';\nimport { SourceFactory } from './sources/source.factory';\n\ntype StyleObject = Record<string, string | number | null | undefined>;\ntype Style = StyleObject | string;\n\n/**\n * Semantic colours for the avatar badge and the avatar colour variants. Each maps\n * to a design-system `--hub-sys-color-*` token. Use them to colour a presence dot\n * (e.g. `success` = online, `warning` = away, `danger` = busy, `secondary` = offline)\n * or a labelled badge. Any custom string is also accepted (set `--hub-avatar-badge-color`).\n */\nexport type HubAvatarBadgeColor = 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'light' | 'dark';\n\n/**\n * Universal avatar component that\n * generates avatar from different sources\n *\n * export\n * class AvatarComponent\n * implements {OnChanges}\n */\n\n@Component({\n\t// tslint:disable-next-line:component-selector\n\tselector: 'hub-avatar',\n\tstandalone: true,\n\tstyleUrl: './avatar.component.scss',\n\ttemplate: `\n\t\t<div\n\t\t\t(click)=\"onAvatarClicked()\"\n\t\t\t(keydown.enter)=\"onAvatarKeydown($event)\"\n\t\t\t(keydown.space)=\"onAvatarKeydown($event)\"\n\t\t\t[attr.role]=\"interactive() ? 'button' : null\"\n\t\t\t[attr.tabindex]=\"interactive() ? 0 : null\"\n\t\t\tclass=\"avatar-container\"\n\t\t\t[class.hub-avatar--custom]=\"hasCustomContent\"\n\t\t\t[style]=\"hostStyle\"\n\t\t>\n\t\t\t<span #customContent class=\"hub-avatar__custom\" [style]=\"customContentStyle\"><ng-content></ng-content></span>\n\t\t\t@if (!hasCustomContent) {\n\t\t\t\t@if (avatarSrc) {\n\t\t\t\t\t<img\n\t\t\t\t\t\t[src]=\"avatarSrc\"\n\t\t\t\t\t\t[alt]=\"customAlt() ? customAlt() : avatarAlt\"\n\t\t\t\t\t\t[width]=\"size()\"\n\t\t\t\t\t\t[height]=\"size()\"\n\t\t\t\t\t\t[style]=\"avatarStyle\"\n\t\t\t\t\t\t[referrerPolicy]=\"referrerpolicy()\"\n\t\t\t\t\t\t(error)=\"fetchAvatarSource()\"\n\t\t\t\t\t\tclass=\"avatar-content\"\n\t\t\t\t\t\tloading=\"lazy\"\n\t\t\t\t\t/>\n\t\t\t\t} @else {\n\t\t\t\t\t@if (avatarText) {\n\t\t\t\t\t\t<div class=\"avatar-content\" [style]=\"avatarStyle\">\n\t\t\t\t\t\t\t{{ avatarText }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t</div>\n\t\t@if (_hasBadge()) {\n\t\t\t<span\n\t\t\t\tclass=\"hub-avatar__badge\"\n\t\t\t\t[class.hub-avatar__badge--dot]=\"_isDot()\"\n\t\t\t\t[class.hub-avatar__badge--label]=\"!_isDot()\"\n\t\t\t\t[attr.aria-hidden]=\"_isDot() ? 'true' : null\"\n\t\t\t\t>{{ _badgeText() }}</span\n\t\t\t>\n\t\t}\n\t`,\n\thost: {\n\t\t'[attr.data-badge-color]': 'badgeColor() || null',\n\t\t'[style.--hub-avatar-badge-color]': 'badgeColorVar()',\n\t\t'[style.--hub-avatar-size]': 'avatarSizePx'\n\t}\n})\nexport class AvatarComponent implements AfterContentInit, OnChanges, OnDestroy {\n\treadonly round = input(true);\n\treadonly size = input<string | number>(50);\n\n\t/**\n\t * Marks the avatar as an interactive control. When `true`, the container\n\t * exposes `role=\"button\"`, becomes focusable and triggers `clickOnAvatar`\n\t * with Enter/Space. Enable it whenever you bind `(clickOnAvatar)`.\n\t */\n\treadonly interactive = input(false, { transform: booleanAttribute });\n\treadonly textSizeRatio = input(3);\n\treadonly bgColor = input<string>();\n\treadonly fgColor = input('#FFF');\n\treadonly borderColor = input<string>();\n\t/**\n\t * When `true` (default) an initials avatar gets a background colour derived from\n\t * a hash of its `name`, applied inline. Set to `false` to suppress that inline\n\t * colour so the avatar can be themed via the `--hub-avatar-bg-color` CSS variable\n\t * without needing `!important`. An explicit `bgColor` always wins over both.\n\t */\n\treadonly autoColor = input(true, { transform: booleanAttribute });\n\treadonly style = input<Style>({});\n\treadonly cornerRadius = input<string | number>(0);\n\treadonly facebook = input<string | null>(undefined, { alias: 'facebookId' });\n\treadonly gravatar = input<string | null>(undefined, { alias: 'gravatarId' });\n\treadonly github = input<string | null>(undefined, { alias: 'githubId' });\n\treadonly custom = input<string | SafeUrl | null>(undefined, { alias: 'src' });\n\treadonly customAlt = input<string | null>(undefined, { alias: 'alt' });\n\treadonly initials = input<string | null>(undefined, { alias: 'name' });\n\treadonly value = input<string | null>();\n\treadonly referrerpolicy = input<string | null>();\n\treadonly placeholder = input<string>();\n\treadonly initialsSize = input<string | number>(0);\n\t/**\n\t * Overlay badge at the bottom-end corner. A boolean / empty value renders a plain\n\t * dot (great for a presence indicator); a string or number renders a labelled badge\n\t * (e.g. a count like `\"4k\"`). `null` / absent (default) renders nothing.\n\t *\n\t * @example <hub-avatar badge badgeColor=\"success\" /> // dot\n\t * @example <hub-avatar badge=\"4k\" badgeColor=\"danger\" /> // labelled\n\t */\n\treadonly badge = input<string | number | boolean | null>(null);\n\n\t/**\n\t * Semantic colour of the {@link badge} (and, as a host class, of the avatar itself).\n\t * Maps to a `--hub-sys-color-*` token; any custom string also works (set\n\t * `--hub-avatar-badge-color`). When unset the badge uses a neutral default.\n\t */\n\treadonly badgeColor = input<HubAvatarBadgeColor | (string & {}) | null>(null);\n\n\t/**\n\t * Normalises {@link badgeColor} into a paintable value for the `--hub-avatar-badge-color`\n\t * accent slot, accepting ANY colour. A bareword (a semantic name, a host-registered accent,\n\t * or a CSS named colour) resolves to its design-system token `var(--hub-sys-color-<name>,\n\t * <name>)` — the raw word is the fallback so an unregistered name still paints. A literal\n\t * `#hex` / `rgb()` / `oklch()` / `var(...)` is passed through unchanged. `null` when unset,\n\t * so the SCSS default (and the builtin `@each` per `data-badge-color`) takes over.\n\t */\n\tprotected readonly badgeColorVar = computed(() => resolveHubAccent(this.badgeColor()));\n\n\t/** True when a badge should be rendered (the `badge` input is set to anything but `null` / `false`). */\n\tprotected readonly _hasBadge = computed(() => {\n\t\tconst b = this.badge();\n\t\treturn b !== null && b !== undefined && b !== false;\n\t});\n\n\t/** The badge's text content; empty for a plain dot (`badge` is `true` or an empty string). */\n\tprotected readonly _badgeText = computed(() => {\n\t\tconst b = this.badge();\n\t\tif (b === true || b === '' || b === null || b === undefined || b === false) {\n\t\t\treturn '';\n\t\t}\n\t\treturn String(b);\n\t});\n\n\t/** True when the badge is a plain dot (shown, but with no text content). */\n\tprotected readonly _isDot = computed(() => this._hasBadge() && this._badgeText() === '');\n\n\treadonly clickOnAvatar = output<Source>();\n\n\t/** Wrapper around the projected content (`<ng-content>`), used to detect whether the consumer projected anything. */\n\t@ViewChild('customContent', { static: true }) private customContentRef?: ElementRef<HTMLElement>;\n\n\t/** True when the consumer projected custom content (an icon, SVG, image, …) into the avatar. */\n\thasCustomContent = false;\n\n\t/** Inline style applied to the projected-content slot (honours `bgColor` / `fgColor` / `borderColor` / `style`). */\n\tcustomContentStyle: StyleObject = {};\n\n\tisAlive = true;\n\tavatarSrc: SafeUrl | null = null;\n\tavatarAlt: SafeUrl | null = null;\n\tavatarText: string | null = null;\n\tavatarStyle: StyleObject = {};\n\thostStyle: StyleObject = {};\n\n\tprivate currentIndex = -1;\n\tprivate sources: Source[] = [];\n\n\tconstructor(\n\t\tprivate sourceFactory: SourceFactory,\n\t\tprivate avatarService: AvatarService,\n\t\tprivate sanitizer: DomSanitizer\n\t) {}\n\n\tonAvatarClicked(): void {\n\t\tthis.clickOnAvatar.emit(this.sources[this.currentIndex]);\n\t}\n\n\t/**\n\t * Keyboard activation for the interactive avatar (Enter/Space). Inert unless\n\t * `interactive` is enabled; prevents the default Space scroll.\n\t *\n\t * @param event Keyboard event from the container.\n\t */\n\tonAvatarKeydown(event: Event): void {\n\t\tif (!this.interactive()) {\n\t\t\treturn;\n\t\t}\n\t\tevent.preventDefault();\n\t\tthis.onAvatarClicked();\n\t}\n\n\t/**\n\t * Detects projected content once it is available and, when present, computes its style.\n\t * Runs after content init so `<ng-content>` nodes are already in place.\n\t */\n\tngAfterContentInit(): void {\n\t\tconst host = this.customContentRef?.nativeElement;\n\t\tthis.hasCustomContent = !!host && this.hasMeaningfulProjectedContent(host);\n\t\tif (this.hasCustomContent) {\n\t\t\tthis.customContentStyle = this.getCustomContentStyle();\n\t\t}\n\t}\n\n\t/**\n\t * Returns true when the projected slot holds a real element or non-whitespace text,\n\t * so whitespace-only projection does not flip the avatar into custom-content mode.\n\t *\n\t * @param host The element wrapping the projected content.\n\t */\n\tprivate hasMeaningfulProjectedContent(host: HTMLElement): boolean {\n\t\treturn Array.from(host.childNodes).some(\n\t\t\t(node) =>\n\t\t\t\tnode.nodeType === Node.ELEMENT_NODE ||\n\t\t\t\t(node.nodeType === Node.TEXT_NODE && (node.textContent ?? '').trim().length > 0)\n\t\t);\n\t}\n\n\t/**\n\t * Builds the inline style for the projected-content slot. Sensible visible defaults\n\t * (a themed background circle and a readable foreground colour) come from CSS tokens;\n\t * the `bgColor` / `fgColor` / `borderColor` / `style` inputs override them when set.\n\t */\n\tprivate getCustomContentStyle(): StyleObject {\n\t\tconst borderColor = this.borderColor();\n\t\tconst bgColor = this.bgColor();\n\t\tconst hasCustomFgColor = this.fgColor() !== '#FFF';\n\t\treturn {\n\t\t\tbackgroundColor: bgColor ? bgColor : undefined,\n\t\t\tcolor: hasCustomFgColor ? this.fgColor() : undefined,\n\t\t\tborder: borderColor ? '1px solid ' + borderColor : undefined,\n\t\t\t...this.getCustomStyleObject()\n\t\t};\n\t}\n\n\t/**\n\t * The avatar size as a px string. Exposed on the host as `--hub-avatar-size`\n\t * so the status dot (and any token-driven child) scales with the avatar.\n\t */\n\tget avatarSizePx(): string {\n\t\treturn (parseFloat(String(this.size())) || 50) + 'px';\n\t}\n\n\t/**\n\t * Detect inputs change\n\t *\n\t * param {{ [propKey: string]: SimpleChange }} changes\n\t *\n\t * memberof AvatarComponent\n\t */\n\tngOnChanges(changes: SimpleChanges): void {\n\t\tfor (const propName in changes) {\n\t\t\tif (this.avatarService.isSource(propName)) {\n\t\t\t\tconst sourceType: AvatarSource = AvatarSource[propName.toUpperCase() as keyof typeof AvatarSource];\n\t\t\t\tconst currentValue = changes[propName].currentValue;\n\t\t\t\tif (currentValue && typeof currentValue === 'string') {\n\t\t\t\t\tthis.addSource(sourceType, currentValue);\n\t\t\t\t} else {\n\t\t\t\t\tconst sanitized = this.sanitizer.sanitize(SecurityContext.URL, currentValue);\n\t\t\t\t\tif (sanitized) {\n\t\t\t\t\t\tthis.addSource(sourceType, sanitized);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.removeSource(sourceType);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Reinitialize when any source input changes so fallback order is recalculated.\n\t\tthis.initializeAvatar();\n\t\tif (this.hasCustomContent) {\n\t\t\tthis.customContentStyle = this.getCustomContentStyle();\n\t\t}\n\t}\n\n\t/**\n\t * Fetch avatar source\n\t *\n\t * memberOf AvatarComponent\n\t */\n\tfetchAvatarSource(): void {\n\t\tconst previousSource = this.sources[this.currentIndex];\n\t\tif (previousSource) {\n\t\t\tthis.avatarService.markSourceAsFailed(previousSource);\n\t\t}\n\n\t\tconst source = this.findNextSource();\n\t\tif (!source) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.avatarService.isTextAvatar(source.sourceType)) {\n\t\t\tthis.buildTextAvatar(source);\n\t\t\tthis.avatarSrc = null;\n\t\t} else {\n\t\t\tthis.buildImageAvatar(source);\n\t\t}\n\t}\n\n\tprivate findNextSource(): Source | null {\n\t\twhile (++this.currentIndex < this.sources.length) {\n\t\t\tconst source = this.sources[this.currentIndex];\n\t\t\tif (source && !this.avatarService.sourceHasFailedBefore(source)) {\n\t\t\t\treturn source;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.isAlive = false;\n\t}\n\n\t/**\n\t * Initialize the avatar component and its fallback system\n\t */\n\tprivate initializeAvatar(): void {\n\t\tconst computedBorderRadius = this.round()\n\t\t\t? '50%'\n\t\t\t: this.cornerRadius() + 'px';\n\t\tthis.hostStyle = {\n\t\t\twidth: this.size() + 'px',\n\t\t\theight: this.size() + 'px',\n\t\t\tborderRadius: computedBorderRadius\n\t\t};\n\n\t\tthis.currentIndex = -1;\n\t\tif (this.sources.length > 0) {\n\t\t\tthis.sortAvatarSources();\n\t\t\tthis.fetchAvatarSource();\n\t\t}\n\t}\n\n\tprivate sortAvatarSources(): void {\n\t\tthis.sources.sort((source1: Source, source2: Source) =>\n\t\t\tthis.avatarService.compareSources(source1.sourceType, source2.sourceType)\n\t\t);\n\t}\n\n\tprivate buildTextAvatar(avatarSource: Source): void {\n\t\tthis.avatarText = avatarSource.getAvatar(+this.initialsSize());\n\t\tthis.avatarStyle = this.getInitialsStyle(avatarSource.sourceId);\n\t}\n\n\tprivate buildImageAvatar(avatarSource: Source): void {\n\t\tthis.avatarStyle = this.getImageStyle();\n\t\tif (avatarSource instanceof AsyncSource) {\n\t\t\tthis.fetchAndProcessAsyncAvatar(avatarSource);\n\t\t} else {\n\t\t\tthis.avatarSrc = this.sanitizer.bypassSecurityTrustUrl(avatarSource.getAvatar(+this.size()));\n\t\t\tthis.avatarAlt = avatarSource.getAvatar(+this.size());\n\t\t}\n\t}\n\n\t/**\n\t *\n\t * returns initials style\n\t *\n\t * memberOf AvatarComponent\n\t */\n\tprivate getInitialsStyle(avatarValue: string): StyleObject {\n\t\tconst borderColor = this.borderColor();\n\t\tconst bgColor = this.bgColor();\n\t\tconst hasCornerRadius = !this.round() || +this.cornerRadius() > 0;\n\t\tconst hasCustomFgColor = this.fgColor() !== '#FFF';\n\t\treturn {\n\t\t\ttextAlign: 'center',\n\t\t\tborderRadius: hasCornerRadius ? (this.round() ? '100%' : this.cornerRadius() + 'px') : undefined,\n\t\t\tborder: borderColor ? '1px solid ' + borderColor : undefined,\n\t\t\ttextTransform: 'uppercase',\n\t\t\tcolor: hasCustomFgColor ? this.fgColor() : undefined,\n\t\t\t// Explicit `bgColor` wins; otherwise the hash colour is applied inline only\n\t\t\t// while `autoColor` is on. With `[autoColor]=\"false\"` no inline background is\n\t\t\t// emitted, so `.avatar-content { background-color: var(--hub-avatar-bg-color, …) }`\n\t\t\t// takes over and the consumer can theme the avatar through the token.\n\t\t\tbackgroundColor: bgColor ? bgColor : this.autoColor() ? this.avatarService.getRandomColor(avatarValue) : undefined,\n\t\t\t// Only the size is set inline (it scales with `size`); the family comes from\n\t\t\t// `.avatar-content { font-family: var(--hub-avatar-font-family, …) }` so the\n\t\t\t// initials honour the same token as the rest of the avatar (a `font` shorthand\n\t\t\t// here would pin Helvetica and shadow it).\n\t\t\tfontSize: Math.floor(+this.size() / this.textSizeRatio()) + 'px',\n\t\t\tlineHeight: this.size() + 'px',\n\t\t\t...this.getCustomStyleObject()\n\t\t};\n\t}\n\n\t/**\n\t *\n\t * returns image style\n\t *\n\t * memberOf AvatarComponent\n\t */\n\tprivate getImageStyle(): StyleObject {\n\t\tconst borderColor = this.borderColor();\n\t\tconst hasCornerRadius = !this.round() || +this.cornerRadius() > 0;\n\t\treturn {\n\t\t\tmaxWidth: '100%',\n\t\t\tborderRadius: hasCornerRadius ? (this.round() ? '50%' : this.cornerRadius() + 'px') : undefined,\n\t\t\tborder: borderColor ? '1px solid ' + borderColor : undefined,\n\t\t\twidth: this.size() + 'px',\n\t\t\theight: this.size() + 'px',\n\t\t\t...this.getCustomStyleObject()\n\t\t};\n\t}\n\n\tprivate getCustomStyleObject(): StyleObject {\n\t\tconst customStyle = this.style();\n\t\tif (!customStyle) {\n\t\t\treturn {};\n\t\t}\n\n\t\tif (typeof customStyle === 'string') {\n\t\t\treturn this.parseInlineStyleString(customStyle);\n\t\t}\n\n\t\treturn customStyle;\n\t}\n\n\tprivate parseInlineStyleString(styleString: string): StyleObject {\n\t\tconst styleObject: StyleObject = {};\n\t\tstyleString\n\t\t\t.split(';')\n\t\t\t.map((declaration) => declaration.trim())\n\t\t\t.filter((declaration) => declaration.length > 0)\n\t\t\t.forEach((declaration) => {\n\t\t\t\tconst separatorIndex = declaration.indexOf(':');\n\t\t\t\tif (separatorIndex <= 0) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst property = declaration.slice(0, separatorIndex).trim();\n\t\t\t\tconst value = declaration.slice(separatorIndex + 1).trim();\n\t\t\t\tif (property && value) {\n\t\t\t\t\tstyleObject[property] = value;\n\t\t\t\t}\n\t\t\t});\n\t\treturn styleObject;\n\t}\n\n\t/**\n\t * Fetch avatar image asynchronously.\n\t *\n\t * param {Source} source represents avatar source\n\t * memberof AvatarComponent\n\t */\n\tprivate fetchAndProcessAsyncAvatar(source: AsyncSource): void {\n\t\tif (this.avatarService.sourceHasFailedBefore(source)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.avatarService\n\t\t\t.fetchAvatar(source.getAvatar(+this.size()))\n\t\t\t.pipe(\n\t\t\t\ttakeWhile(() => this.isAlive),\n\t\t\t\tmap((response) => source.processResponse(response, +this.size()))\n\t\t\t)\n\t\t\t.subscribe({\n\t\t\t\tnext: (avatarSrc) => (this.avatarSrc = avatarSrc),\n\t\t\t\terror: () => {\n\t\t\t\t\tthis.fetchAvatarSource();\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\t/**\n\t * Add avatar source\n\t *\n\t * param sourceType avatar source type e.g facebook,twitter, etc.\n\t * param sourceValue source value e.g facebookId value, etc.\n\t */\n\tprivate addSource(sourceType: AvatarSource, sourceValue: string): void {\n\t\tconst source = this.sources.find((s) => s.sourceType === sourceType);\n\t\tif (source) {\n\t\t\tsource.sourceId = sourceValue;\n\t\t} else {\n\t\t\tthis.sources.push(this.sourceFactory.newInstance(sourceType, sourceValue));\n\t\t}\n\t}\n\n\t/**\n\t * Remove avatar source\n\t *\n\t * param sourceType avatar source type e.g facebook,twitter, etc.\n\t */\n\tprivate removeSource(sourceType: AvatarSource): void {\n\t\tthis.sources = this.sources.filter((source) => source.sourceType !== sourceType);\n\t}\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { AvatarConfig } from './avatar-config';\nimport { AVATAR_CONFIG } from './avatar-config.token';\nimport { AvatarComponent } from './avatar.component';\n\n/**\n * Backward-compatibility module for `<hub-avatar>`.\n *\n * @deprecated `AvatarComponent` is now a standalone component. Import it directly\n * (`imports: [AvatarComponent]`) and, if you need custom configuration, register\n * `provideAvatar()` in your application providers. This module only re-exports the\n * standalone component and will be removed in a future major version.\n */\n@NgModule({\n\timports: [AvatarComponent],\n\texports: [AvatarComponent]\n})\nexport class AvatarModule {\n\t/**\n\t * @deprecated Use `provideAvatar(config)` with the standalone APIs instead.\n\t * Kept so existing `AvatarModule.forRoot()` consumers keep working.\n\t */\n\tstatic forRoot(avatarConfig?: AvatarConfig): ModuleWithProviders<AvatarModule> {\n\t\treturn {\n\t\t\tngModule: AvatarModule,\n\t\t\tproviders: [\n\t\t\t\t{\n\t\t\t\t\tprovide: AVATAR_CONFIG,\n\t\t\t\t\tuseValue: avatarConfig ? avatarConfig : {}\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t}\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { AvatarConfig } from './avatar-config';\nimport { AVATAR_CONFIG } from './avatar-config.token';\n\n/**\n * Registers the avatar configuration for standalone applications.\n *\n * Standalone-friendly replacement for `AvatarModule.forRoot()`. Add it to your\n * `bootstrapApplication` providers (or a route's `providers`) to customise the\n * avatar source priority, colour palette or src-cache behaviour. Calling it is\n * optional — `<hub-avatar>` works out of the box with sensible defaults.\n *\n * ```ts\n * import { provideAvatar } from 'ng-hub-ui-avatar';\n *\n * bootstrapApplication(AppComponent, {\n * providers: [\n * provideAvatar({ sourcePriorityOrder: [AvatarSource.GRAVATAR, AvatarSource.INITIALS] })\n * ]\n * });\n * ```\n *\n * @param config Optional avatar configuration.\n * @returns Environment providers to add to the application config.\n */\nexport function provideAvatar(config?: AvatarConfig): EnvironmentProviders {\n\treturn makeEnvironmentProviders([\n\t\t{\n\t\t\tprovide: AVATAR_CONFIG,\n\t\t\tuseValue: config ?? {}\n\t\t}\n\t]);\n}\n","/*\n * Public API Surface of ng-hub-ui-avatar\n */\nexport * from './lib/avatar-config';\nexport * from './lib/avatar.component';\nexport * from './lib/avatar.module';\nexport * from './lib/avatar.providers';\nexport * from './lib/avatar.service';\nexport * from './lib/sources/avatar-source.enum';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2.AvatarConfigService","i1.AvatarConfigService","i1.SourceFactory","i2.AvatarService"],"mappings":"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"}
1
+ {"version":3,"file":"ng-hub-ui-avatar.mjs","sources":["../../../projects/avatar/src/lib/avatar-config.token.ts","../../../projects/avatar/src/lib/avatar-config.service.ts","../../../projects/avatar/src/lib/sources/avatar-source.enum.ts","../../../projects/avatar/src/lib/avatar.service.ts","../../../projects/avatar/src/lib/sources/async-source.ts","../../../projects/avatar/src/lib/sources/facebook.ts","../../../projects/avatar/src/lib/sources/custom.ts","../../../projects/avatar/src/lib/sources/initials.ts","../../../projects/avatar/src/lib/sources/gravatar.ts","../../../projects/avatar/src/lib/sources/value.ts","../../../projects/avatar/src/lib/sources/github.ts","../../../projects/avatar/src/lib/sources/custom-no-cache.ts","../../../projects/avatar/src/lib/sources/source.factory.ts","../../../projects/avatar/src/lib/avatar.component.ts","../../../projects/avatar/src/lib/avatar.module.ts","../../../projects/avatar/src/lib/avatar.providers.ts","../../../projects/avatar/src/public_api.ts","../../../projects/avatar/src/ng-hub-ui-avatar.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nimport { AvatarConfig } from './avatar-config';\n/**\n * Token used to inject the AvatarConfig object\n */\nexport const AVATAR_CONFIG = new InjectionToken<AvatarConfig>('avatar.config');\n","import { Inject, Injectable, Optional } from '@angular/core';\n\nimport type { AvatarConfig } from './avatar-config';\nimport { AVATAR_CONFIG } from './avatar-config.token';\nimport { AvatarSource } from './sources/avatar-source.enum';\n\n@Injectable({ providedIn: 'root' })\nexport class AvatarConfigService {\n\tconstructor(\n\t\t@Optional()\n\t\t@Inject(AVATAR_CONFIG)\n\t\tpublic userConfig: AvatarConfig\n\t) {}\n\n\tpublic getAvatarSources(defaultSources: AvatarSource[]): AvatarSource[] {\n\t\tif (this.userConfig && this.userConfig.sourcePriorityOrder && this.userConfig.sourcePriorityOrder.length) {\n\t\t\tconst uniqueSources = [...new Set(this.userConfig.sourcePriorityOrder)];\n\t\t\tconst validSources = uniqueSources.filter((source) => defaultSources.includes(source));\n\t\t\treturn [...validSources, ...defaultSources.filter((source) => !validSources.includes(source))];\n\t\t}\n\t\treturn defaultSources;\n\t}\n\n\tpublic getAvatarColors(defaultColors: string[]): string[] {\n\t\treturn (\n\t\t\t(this.userConfig && this.userConfig.colors && this.userConfig.colors.length && this.userConfig.colors) ||\n\t\t\tdefaultColors\n\t\t);\n\t}\n\n\tpublic getDisableSrcCache(defaultDisableSrcCache: boolean): boolean {\n\t\tif (this.userConfig == null || this.userConfig.disableSrcCache == null) {\n\t\t\treturn defaultDisableSrcCache;\n\t\t} else {\n\t\t\treturn this.userConfig.disableSrcCache;\n\t\t}\n\t}\n}\n","export enum AvatarSource {\n\tFACEBOOK = 'facebook',\n\tGRAVATAR = 'gravatar',\n\tGITHUB = 'github',\n\tCUSTOM = 'custom',\n\tINITIALS = 'initials',\n\tVALUE = 'value'\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\n\nimport { AvatarConfigService } from './avatar-config.service';\nimport { AvatarSource } from './sources/avatar-source.enum';\nimport { Source } from './sources/source';\n\n/**\n * list of Supported avatar sources\n */\nexport const defaultSources = [\n\tAvatarSource.FACEBOOK,\n\tAvatarSource.GRAVATAR,\n\tAvatarSource.GITHUB,\n\tAvatarSource.CUSTOM,\n\tAvatarSource.INITIALS,\n\tAvatarSource.VALUE\n];\n\n/**\n * list of default colors\n */\nexport const defaultColors = ['#1abc9c', '#3498db', '#f1c40f', '#8e44ad', '#e74c3c', '#d35400', '#2c3e50', '#7f8c8d'];\n\n/**\n * Default disable custom source cache settings\n */\nexport const defaultDisableSrcCache = false;\n\n/**\n * Provides utilities methods related to Avatar component\n */\n@Injectable({ providedIn: 'root' })\nexport class AvatarService {\n\tpublic avatarSources: AvatarSource[] = defaultSources;\n\tpublic avatarColors: string[] = defaultColors;\n\n\tprivate readonly failedSources = new Map<string, Source>();\n\n\tconstructor(\n\t\tprivate http: HttpClient,\n\t\tprivate avatarConfigService: AvatarConfigService\n\t) {\n\t\tthis.overrideAvatarSources();\n\t\tthis.overrideAvatarColors();\n\t}\n\n\tpublic fetchAvatar(avatarUrl: string): Observable<unknown> {\n\t\treturn this.http.get(avatarUrl);\n\t}\n\n\tpublic getRandomColor(avatarText: string): string {\n\t\tif (!avatarText) {\n\t\t\treturn 'transparent';\n\t\t}\n\t\tconst asciiCodeSum = this.calculateAsciiCode(avatarText);\n\t\treturn this.avatarColors[asciiCodeSum % this.avatarColors.length];\n\t}\n\n\tpublic compareSources(sourceType1: AvatarSource, sourceType2: AvatarSource): number {\n\t\treturn this.getSourcePriority(sourceType1) - this.getSourcePriority(sourceType2);\n\t}\n\n\tpublic isSource(source: string): boolean {\n\t\treturn this.avatarSources.includes(source as AvatarSource);\n\t}\n\n\tpublic isTextAvatar(sourceType: AvatarSource): boolean {\n\t\treturn [AvatarSource.INITIALS, AvatarSource.VALUE].includes(sourceType);\n\t}\n\n\tprivate buildSourceKey(source: Source): string {\n\t\treturn source.sourceType + '-' + source.sourceId;\n\t}\n\n\tpublic sourceHasFailedBefore(source: Source): boolean {\n\t\treturn this.failedSources.has(this.buildSourceKey(source));\n\t}\n\n\tpublic markSourceAsFailed(source: Source): void {\n\t\tthis.failedSources.set(this.buildSourceKey(source), source);\n\t}\n\n\tprivate overrideAvatarSources(): void {\n\t\tthis.avatarSources = this.avatarConfigService.getAvatarSources(defaultSources);\n\t}\n\n\tprivate overrideAvatarColors(): void {\n\t\tthis.avatarColors = this.avatarConfigService.getAvatarColors(defaultColors);\n\t}\n\n\tprivate calculateAsciiCode(value: string): number {\n\t\treturn value\n\t\t\t.split('')\n\t\t\t.map((letter) => letter.charCodeAt(0))\n\t\t\t.reduce((previous: number, current: number) => previous + current);\n\t}\n\n\tprivate getSourcePriority(sourceType: AvatarSource) {\n\t\treturn this.avatarSources.indexOf(sourceType);\n\t}\n}\n","import { Source } from './source';\nimport { AvatarSource } from './avatar-source.enum';\n\n/**\n * Contract of all async sources.\n * Every async source must implement the processResponse method that extracts the avatar url from the data\n */\nexport abstract class AsyncSource implements Source {\n\tabstract readonly sourceType: AvatarSource;\n\n\tconstructor(public sourceId: string) {}\n\n\tabstract getAvatar(size: number): string;\n\tabstract processResponse(data: unknown, size?: number): string | null;\n}\n","import { Source } from './source';\nimport { AvatarSource } from './avatar-source.enum';\n/**\n * Facebook source implementation.\n * Fetch avatar source based on facebook identifier\n * and image size\n */\nexport class Facebook implements Source {\n\treadonly sourceType: AvatarSource = AvatarSource.FACEBOOK;\n\n\tconstructor(public sourceId: string) {}\n\n\tpublic getAvatar(size: number): string {\n\t\treturn 'https://graph.facebook.com/' + `${this.sourceId}/picture?width=${size}&height=${size}`;\n\t}\n}\n","import { Source } from './source';\nimport { AvatarSource } from './avatar-source.enum';\n/**\n * Custom source implementation.\n * return custom image as an avatar\n *\n */\nexport class Custom implements Source {\n\treadonly sourceType: AvatarSource = AvatarSource.CUSTOM;\n\n\tconstructor(public sourceId: string) {}\n\n\tpublic getAvatar(): string {\n\t\treturn this.sourceId;\n\t}\n}\n","import { Source } from './source';\nimport { AvatarSource } from './avatar-source.enum';\n\n/**\n * Initials source implementation.\n * return the initials of the given value\n */\nexport class Initials implements Source {\n\treadonly sourceType: AvatarSource = AvatarSource.INITIALS;\n\n\tconstructor(public sourceId: string) {}\n\n\tpublic getAvatar(size: number): string {\n\t\treturn this.getInitials(this.sourceId, size);\n\t}\n\n\t/**\n\t * Returns the initial letters of a name in a string.\n\t */\n\tprivate getInitials(name: string, size: number): string {\n\t\tname = name.trim();\n\n\t\tif (!name) {\n\t\t\treturn '';\n\t\t}\n\n\t\tconst initials = name.split(' ');\n\n\t\tif (size && size < initials.length) {\n\t\t\treturn this.constructInitials(initials.slice(0, size));\n\t\t} else {\n\t\t\treturn this.constructInitials(initials);\n\t\t}\n\t}\n\n\t/**\n\t * Iterates a person's name string to get the initials of each word in uppercase.\n\t */\n\tprivate constructInitials(elements: string[]): string {\n\t\tif (!elements || !elements.length) {\n\t\t\treturn '';\n\t\t}\n\n\t\treturn elements\n\t\t\t.filter((element) => element && element.length > 0)\n\t\t\t.map((element) => element[0].toUpperCase())\n\t\t\t.join('');\n\t}\n}\n","import { Md5 } from 'ts-md5';\nimport { Source } from './source';\nimport { AvatarSource } from './avatar-source.enum';\n\nfunction isRetina(): boolean {\n\tif (typeof window !== 'undefined' && window !== null) {\n\t\tif (window.devicePixelRatio > 1.25) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst mediaQuery =\n\t\t\t'(-webkit-min-device-pixel-ratio: 1.25), (min--moz-device-pixel-ratio: 1.25), (-o-min-device-pixel-ratio: 5/4), (min-resolution: 1.25dppx)';\n\t\tif (window.matchMedia && window.matchMedia(mediaQuery).matches) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * Gravatar source implementation.\n * Fetch avatar source based on gravatar email\n */\nexport class Gravatar implements Source {\n\treadonly sourceType: AvatarSource = AvatarSource.GRAVATAR;\n\tpublic sourceId: string;\n\n\tconstructor(public value: string) {\n\t\tthis.sourceId = value.match('^[a-f0-9]{32}$') ? value : Md5.hashStr(value).toString();\n\t}\n\n\tpublic getAvatar(size: number): string {\n\t\tconst avatarSize = isRetina() ? size * 2 : size;\n\t\treturn `https://secure.gravatar.com/avatar/${this.sourceId}?s=${avatarSize}&d=404`;\n\t}\n}\n","import { Source } from './source';\nimport { AvatarSource } from './avatar-source.enum';\n\n/**\n * Value source implementation.\n * return the value as avatar\n */\nexport class Value implements Source {\n\treadonly sourceType: AvatarSource = AvatarSource.VALUE;\n\n\tconstructor(public sourceId: string) {}\n\n\tpublic getAvatar(): string {\n\t\treturn this.sourceId;\n\t}\n}\n","import { AsyncSource } from './async-source';\nimport { AvatarSource } from './avatar-source.enum';\n\n/**\n * GitHub source implementation.\n * Fetch avatar source based on github identifier\n */\nexport class Github extends AsyncSource {\n\treadonly sourceType: AvatarSource = AvatarSource.GITHUB;\n\n\tconstructor(sourceId: string) {\n\t\tsuper(sourceId);\n\t}\n\n\tpublic getAvatar(): string {\n\t\treturn `https://api.github.com/users/${this.sourceId}`;\n\t}\n\n\t/**\n\t * extract github avatar from json data\n\t */\n\tpublic processResponse(data: { avatar_url: string }, size?: number): string {\n\t\tif (size) {\n\t\t\treturn `${data.avatar_url}&s=${size}`;\n\t\t}\n\t\treturn data.avatar_url;\n\t}\n}\n","import { Source } from './source';\nimport { AvatarSource } from './avatar-source.enum';\n\n/**\n * Custom source implementation (with no cache).\n * return custom image as an avatar\n *\n */\nexport class CustomNoCache implements Source {\n\treadonly sourceType: AvatarSource = AvatarSource.CUSTOM;\n\n\tconstructor(public sourceId: string) {}\n\n\tpublic getAvatar(): string {\n\t\tconst urlSuffix = Math.random();\n\t\treturn `${this.sourceId}${this.sourceId.indexOf('?') > -1 ? '&' : '?'}_=${urlSuffix}`;\n\t}\n}\n","import { Injectable } from '@angular/core';\nimport { Source } from './source';\nimport { Facebook } from './facebook';\nimport { Custom } from './custom';\nimport { Initials } from './initials';\nimport { Gravatar } from './gravatar';\nimport { Value } from './value';\nimport { Github } from './github';\nimport { SourceCreator } from './source.creator';\nimport { AvatarSource } from './avatar-source.enum';\nimport { AvatarConfigService } from '../avatar-config.service';\nimport { defaultDisableSrcCache } from '../avatar.service';\nimport { CustomNoCache } from './custom-no-cache';\n\n/**\n * Factory class that implements factory method pattern.\n * Used to create Source implementation class based\n * on the source Type\n */\n@Injectable({ providedIn: 'root' })\nexport class SourceFactory {\n\tprivate sources: { [key: string]: SourceCreator } = {};\n\n\tconstructor(avatarConfigService: AvatarConfigService) {\n\t\tconst disableSrcCache = avatarConfigService.getDisableSrcCache(defaultDisableSrcCache);\n\t\tthis.sources[AvatarSource.FACEBOOK] = Facebook;\n\t\tthis.sources[AvatarSource.GRAVATAR] = Gravatar;\n\t\tthis.sources[AvatarSource.CUSTOM] = disableSrcCache ? CustomNoCache : Custom;\n\t\tthis.sources[AvatarSource.INITIALS] = Initials;\n\t\tthis.sources[AvatarSource.VALUE] = Value;\n\t\tthis.sources[AvatarSource.GITHUB] = Github;\n\t}\n\n\tpublic newInstance(sourceType: AvatarSource, sourceValue: string): Source {\n\t\treturn new this.sources[sourceType](sourceValue);\n\t}\n}\n","import {\n\tAfterContentInit,\n\tComponent,\n\tElementRef,\n\tOnChanges,\n\tOnDestroy,\n\tSecurityContext,\n\tSimpleChanges,\n\tViewChild,\n\tbooleanAttribute,\n\tcomputed,\n\tinput,\n\toutput\n} from '@angular/core';\n\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\nimport { map, takeWhile } from 'rxjs/operators';\nimport { AvatarService } from './avatar.service';\nimport { AsyncSource } from './sources/async-source';\nimport { AvatarSource } from './sources/avatar-source.enum';\nimport { resolveHubAccent } from 'ng-hub-ui-utils';\nimport { Source } from './sources/source';\nimport { SourceFactory } from './sources/source.factory';\n\ntype StyleObject = Record<string, string | number | null | undefined>;\ntype Style = StyleObject | string;\n\n/**\n * Semantic colours for the avatar badge and the avatar colour variants. Each maps\n * to a design-system `--hub-sys-color-*` token. Use them to colour a presence dot\n * (e.g. `success` = online, `warning` = away, `danger` = busy, `secondary` = offline)\n * or a labelled badge. Any custom string is also accepted (set `--hub-avatar-badge-color`).\n */\nexport type HubAvatarBadgeColor = 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'light' | 'dark';\n\n/**\n * Universal avatar component that\n * generates avatar from different sources\n *\n * export\n * class AvatarComponent\n * implements {OnChanges}\n */\n\n@Component({\n\t// tslint:disable-next-line:component-selector\n\tselector: 'hub-avatar',\n\tstandalone: true,\n\tstyleUrl: './avatar.component.scss',\n\ttemplate: `\n\t\t<div\n\t\t\t(click)=\"onAvatarClicked()\"\n\t\t\t(keydown.enter)=\"onAvatarKeydown($event)\"\n\t\t\t(keydown.space)=\"onAvatarKeydown($event)\"\n\t\t\t[attr.role]=\"interactive() ? 'button' : null\"\n\t\t\t[attr.tabindex]=\"interactive() ? 0 : null\"\n\t\t\tclass=\"avatar-container\"\n\t\t\t[class.hub-avatar--custom]=\"hasCustomContent\"\n\t\t\t[style]=\"hostStyle\"\n\t\t>\n\t\t\t<span #customContent class=\"hub-avatar__custom\" [style]=\"customContentStyle\"><ng-content></ng-content></span>\n\t\t\t@if (!hasCustomContent) {\n\t\t\t\t@if (avatarSrc) {\n\t\t\t\t\t<img\n\t\t\t\t\t\t[src]=\"avatarSrc\"\n\t\t\t\t\t\t[alt]=\"customAlt() ? customAlt() : avatarAlt\"\n\t\t\t\t\t\t[width]=\"size()\"\n\t\t\t\t\t\t[height]=\"size()\"\n\t\t\t\t\t\t[style]=\"avatarStyle\"\n\t\t\t\t\t\t[referrerPolicy]=\"referrerpolicy()\"\n\t\t\t\t\t\t(error)=\"fetchAvatarSource()\"\n\t\t\t\t\t\tclass=\"avatar-content\"\n\t\t\t\t\t\tloading=\"lazy\"\n\t\t\t\t\t/>\n\t\t\t\t} @else {\n\t\t\t\t\t@if (avatarText) {\n\t\t\t\t\t\t<div class=\"avatar-content\" [style]=\"avatarStyle\">\n\t\t\t\t\t\t\t{{ avatarText }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t</div>\n\t\t@if (_hasBadge()) {\n\t\t\t<span\n\t\t\t\tclass=\"hub-avatar__badge\"\n\t\t\t\t[class.hub-avatar__badge--dot]=\"_isDot()\"\n\t\t\t\t[class.hub-avatar__badge--label]=\"!_isDot()\"\n\t\t\t\t[attr.aria-hidden]=\"_isDot() ? 'true' : null\"\n\t\t\t\t>{{ _badgeText() }}</span\n\t\t\t>\n\t\t}\n\t`,\n\thost: {\n\t\t'[attr.data-badge-color]': 'badgeColor() || null',\n\t\t'[style.--hub-avatar-badge-color]': 'badgeColorVar()',\n\t\t'[style.--hub-avatar-size]': 'avatarSizePx'\n\t}\n})\nexport class AvatarComponent implements AfterContentInit, OnChanges, OnDestroy {\n\treadonly round = input(true);\n\treadonly size = input<string | number>(50);\n\n\t/**\n\t * Marks the avatar as an interactive control. When `true`, the container\n\t * exposes `role=\"button\"`, becomes focusable and triggers `clickOnAvatar`\n\t * with Enter/Space. Enable it whenever you bind `(clickOnAvatar)`.\n\t */\n\treadonly interactive = input(false, { transform: booleanAttribute });\n\treadonly textSizeRatio = input(3);\n\treadonly bgColor = input<string>();\n\treadonly fgColor = input('#FFF');\n\treadonly borderColor = input<string>();\n\t/**\n\t * When `true` (default) an initials avatar gets a background colour derived from\n\t * a hash of its `name`, applied inline. Set to `false` to suppress that inline\n\t * colour so the avatar can be themed via the `--hub-avatar-bg-color` CSS variable\n\t * without needing `!important`. An explicit `bgColor` always wins over both.\n\t */\n\treadonly autoColor = input(true, { transform: booleanAttribute });\n\treadonly style = input<Style>({});\n\treadonly cornerRadius = input<string | number>(0);\n\treadonly facebook = input<string | null>(undefined, { alias: 'facebookId' });\n\treadonly gravatar = input<string | null>(undefined, { alias: 'gravatarId' });\n\treadonly github = input<string | null>(undefined, { alias: 'githubId' });\n\treadonly custom = input<string | SafeUrl | null>(undefined, { alias: 'src' });\n\treadonly customAlt = input<string | null>(undefined, { alias: 'alt' });\n\treadonly initials = input<string | null>(undefined, { alias: 'name' });\n\treadonly value = input<string | null>();\n\treadonly referrerpolicy = input<string | null>();\n\treadonly placeholder = input<string>();\n\treadonly initialsSize = input<string | number>(0);\n\t/**\n\t * Overlay badge at the bottom-end corner. A boolean / empty value renders a plain\n\t * dot (great for a presence indicator); a string or number renders a labelled badge\n\t * (e.g. a count like `\"4k\"`). `null` / absent (default) renders nothing.\n\t *\n\t * @example <hub-avatar badge badgeColor=\"success\" /> // dot\n\t * @example <hub-avatar badge=\"4k\" badgeColor=\"danger\" /> // labelled\n\t */\n\treadonly badge = input<string | number | boolean | null>(null);\n\n\t/**\n\t * Semantic colour of the {@link badge} (and, as a host class, of the avatar itself).\n\t * Maps to a `--hub-sys-color-*` token; any custom string also works (set\n\t * `--hub-avatar-badge-color`). When unset the badge uses a neutral default.\n\t */\n\treadonly badgeColor = input<HubAvatarBadgeColor | (string & {}) | null>(null);\n\n\t/**\n\t * Normalises {@link badgeColor} into a paintable value for the `--hub-avatar-badge-color`\n\t * accent slot, accepting ANY colour. A bareword (a semantic name, a host-registered accent,\n\t * or a CSS named colour) resolves to its design-system token `var(--hub-sys-color-<name>,\n\t * <name>)` — the raw word is the fallback so an unregistered name still paints. A literal\n\t * `#hex` / `rgb()` / `oklch()` / `var(...)` is passed through unchanged. `null` when unset,\n\t * so the SCSS default (and the builtin `@each` per `data-badge-color`) takes over.\n\t */\n\tprotected readonly badgeColorVar = computed(() => resolveHubAccent(this.badgeColor()));\n\n\t/** True when a badge should be rendered (the `badge` input is set to anything but `null` / `false`). */\n\tprotected readonly _hasBadge = computed(() => {\n\t\tconst b = this.badge();\n\t\treturn b !== null && b !== undefined && b !== false;\n\t});\n\n\t/** The badge's text content; empty for a plain dot (`badge` is `true` or an empty string). */\n\tprotected readonly _badgeText = computed(() => {\n\t\tconst b = this.badge();\n\t\tif (b === true || b === '' || b === null || b === undefined || b === false) {\n\t\t\treturn '';\n\t\t}\n\t\treturn String(b);\n\t});\n\n\t/** True when the badge is a plain dot (shown, but with no text content). */\n\tprotected readonly _isDot = computed(() => this._hasBadge() && this._badgeText() === '');\n\n\treadonly clickOnAvatar = output<Source>();\n\n\t/** Wrapper around the projected content (`<ng-content>`), used to detect whether the consumer projected anything. */\n\t@ViewChild('customContent', { static: true }) private customContentRef?: ElementRef<HTMLElement>;\n\n\t/** True when the consumer projected custom content (an icon, SVG, image, …) into the avatar. */\n\thasCustomContent = false;\n\n\t/** Inline style applied to the projected-content slot (honours `bgColor` / `fgColor` / `borderColor` / `style`). */\n\tcustomContentStyle: StyleObject = {};\n\n\tisAlive = true;\n\tavatarSrc: SafeUrl | null = null;\n\tavatarAlt: SafeUrl | null = null;\n\tavatarText: string | null = null;\n\tavatarStyle: StyleObject = {};\n\thostStyle: StyleObject = {};\n\n\tprivate currentIndex = -1;\n\tprivate sources: Source[] = [];\n\n\tconstructor(\n\t\tprivate sourceFactory: SourceFactory,\n\t\tprivate avatarService: AvatarService,\n\t\tprivate sanitizer: DomSanitizer\n\t) {}\n\n\tonAvatarClicked(): void {\n\t\tthis.clickOnAvatar.emit(this.sources[this.currentIndex]);\n\t}\n\n\t/**\n\t * Keyboard activation for the interactive avatar (Enter/Space). Inert unless\n\t * `interactive` is enabled; prevents the default Space scroll.\n\t *\n\t * @param event Keyboard event from the container.\n\t */\n\tonAvatarKeydown(event: Event): void {\n\t\tif (!this.interactive()) {\n\t\t\treturn;\n\t\t}\n\t\tevent.preventDefault();\n\t\tthis.onAvatarClicked();\n\t}\n\n\t/**\n\t * Detects projected content once it is available and, when present, computes its style.\n\t * Runs after content init so `<ng-content>` nodes are already in place.\n\t */\n\tngAfterContentInit(): void {\n\t\tconst host = this.customContentRef?.nativeElement;\n\t\tthis.hasCustomContent = !!host && this.hasMeaningfulProjectedContent(host);\n\t\tif (this.hasCustomContent) {\n\t\t\tthis.customContentStyle = this.getCustomContentStyle();\n\t\t}\n\t}\n\n\t/**\n\t * Returns true when the projected slot holds a real element or non-whitespace text,\n\t * so whitespace-only projection does not flip the avatar into custom-content mode.\n\t *\n\t * @param host The element wrapping the projected content.\n\t */\n\tprivate hasMeaningfulProjectedContent(host: HTMLElement): boolean {\n\t\treturn Array.from(host.childNodes).some(\n\t\t\t(node) =>\n\t\t\t\tnode.nodeType === Node.ELEMENT_NODE ||\n\t\t\t\t(node.nodeType === Node.TEXT_NODE && (node.textContent ?? '').trim().length > 0)\n\t\t);\n\t}\n\n\t/**\n\t * Builds the inline style for the projected-content slot. Sensible visible defaults\n\t * (a themed background circle and a readable foreground colour) come from CSS tokens;\n\t * the `bgColor` / `fgColor` / `borderColor` / `style` inputs override them when set.\n\t */\n\tprivate getCustomContentStyle(): StyleObject {\n\t\tconst borderColor = this.borderColor();\n\t\tconst bgColor = this.bgColor();\n\t\tconst hasCustomFgColor = this.fgColor() !== '#FFF';\n\t\treturn {\n\t\t\tbackgroundColor: bgColor ? bgColor : undefined,\n\t\t\tcolor: hasCustomFgColor ? this.fgColor() : undefined,\n\t\t\tborder: borderColor ? '1px solid ' + borderColor : undefined,\n\t\t\t...this.getCustomStyleObject()\n\t\t};\n\t}\n\n\t/**\n\t * The avatar size as a px string. Exposed on the host as `--hub-avatar-size`\n\t * so the status dot (and any token-driven child) scales with the avatar.\n\t */\n\tget avatarSizePx(): string {\n\t\treturn (parseFloat(String(this.size())) || 50) + 'px';\n\t}\n\n\t/**\n\t * Detect inputs change\n\t *\n\t * param {{ [propKey: string]: SimpleChange }} changes\n\t *\n\t * memberof AvatarComponent\n\t */\n\tngOnChanges(changes: SimpleChanges): void {\n\t\tfor (const propName in changes) {\n\t\t\tif (this.avatarService.isSource(propName)) {\n\t\t\t\tconst sourceType: AvatarSource = AvatarSource[propName.toUpperCase() as keyof typeof AvatarSource];\n\t\t\t\tconst currentValue = changes[propName].currentValue;\n\t\t\t\tif (currentValue && typeof currentValue === 'string') {\n\t\t\t\t\tthis.addSource(sourceType, currentValue);\n\t\t\t\t} else {\n\t\t\t\t\tconst sanitized = this.sanitizer.sanitize(SecurityContext.URL, currentValue);\n\t\t\t\t\tif (sanitized) {\n\t\t\t\t\t\tthis.addSource(sourceType, sanitized);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.removeSource(sourceType);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Reinitialize when any source input changes so fallback order is recalculated.\n\t\tthis.initializeAvatar();\n\t\tif (this.hasCustomContent) {\n\t\t\tthis.customContentStyle = this.getCustomContentStyle();\n\t\t}\n\t}\n\n\t/**\n\t * Fetch avatar source\n\t *\n\t * memberOf AvatarComponent\n\t */\n\tfetchAvatarSource(): void {\n\t\tconst previousSource = this.sources[this.currentIndex];\n\t\tif (previousSource) {\n\t\t\tthis.avatarService.markSourceAsFailed(previousSource);\n\t\t}\n\n\t\tconst source = this.findNextSource();\n\t\tif (!source) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.avatarService.isTextAvatar(source.sourceType)) {\n\t\t\tthis.buildTextAvatar(source);\n\t\t\tthis.avatarSrc = null;\n\t\t} else {\n\t\t\tthis.buildImageAvatar(source);\n\t\t}\n\t}\n\n\tprivate findNextSource(): Source | null {\n\t\twhile (++this.currentIndex < this.sources.length) {\n\t\t\tconst source = this.sources[this.currentIndex];\n\t\t\tif (source && !this.avatarService.sourceHasFailedBefore(source)) {\n\t\t\t\treturn source;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.isAlive = false;\n\t}\n\n\t/**\n\t * Initialize the avatar component and its fallback system\n\t */\n\tprivate initializeAvatar(): void {\n\t\tconst computedBorderRadius = this.round() ? '50%' : this.cornerRadius() + 'px';\n\t\tthis.hostStyle = {\n\t\t\twidth: this.size() + 'px',\n\t\t\theight: this.size() + 'px',\n\t\t\tborderRadius: computedBorderRadius\n\t\t};\n\n\t\tthis.currentIndex = -1;\n\t\tif (this.sources.length > 0) {\n\t\t\tthis.sortAvatarSources();\n\t\t\tthis.fetchAvatarSource();\n\t\t}\n\t}\n\n\tprivate sortAvatarSources(): void {\n\t\tthis.sources.sort((source1: Source, source2: Source) =>\n\t\t\tthis.avatarService.compareSources(source1.sourceType, source2.sourceType)\n\t\t);\n\t}\n\n\tprivate buildTextAvatar(avatarSource: Source): void {\n\t\tthis.avatarText = avatarSource.getAvatar(+this.initialsSize());\n\t\tthis.avatarStyle = this.getInitialsStyle(avatarSource.sourceId);\n\t}\n\n\tprivate buildImageAvatar(avatarSource: Source): void {\n\t\tthis.avatarStyle = this.getImageStyle();\n\t\tif (avatarSource instanceof AsyncSource) {\n\t\t\tthis.fetchAndProcessAsyncAvatar(avatarSource);\n\t\t} else {\n\t\t\tthis.avatarSrc = this.sanitizer.bypassSecurityTrustUrl(avatarSource.getAvatar(+this.size()));\n\t\t\tthis.avatarAlt = avatarSource.getAvatar(+this.size());\n\t\t}\n\t}\n\n\t/**\n\t *\n\t * returns initials style\n\t *\n\t * memberOf AvatarComponent\n\t */\n\tprivate getInitialsStyle(avatarValue: string): StyleObject {\n\t\tconst borderColor = this.borderColor();\n\t\tconst bgColor = this.bgColor();\n\t\tconst hasCornerRadius = !this.round() || +this.cornerRadius() > 0;\n\t\tconst hasCustomFgColor = this.fgColor() !== '#FFF';\n\t\treturn {\n\t\t\ttextAlign: 'center',\n\t\t\tborderRadius: hasCornerRadius ? (this.round() ? '100%' : this.cornerRadius() + 'px') : undefined,\n\t\t\tborder: borderColor ? '1px solid ' + borderColor : undefined,\n\t\t\ttextTransform: 'uppercase',\n\t\t\tcolor: hasCustomFgColor ? this.fgColor() : undefined,\n\t\t\t// Explicit `bgColor` wins; otherwise the hash colour is applied inline only\n\t\t\t// while `autoColor` is on. With `[autoColor]=\"false\"` no inline background is\n\t\t\t// emitted, so `.avatar-content { background-color: var(--hub-avatar-bg-color, …) }`\n\t\t\t// takes over and the consumer can theme the avatar through the token.\n\t\t\tbackgroundColor: bgColor ? bgColor : this.autoColor() ? this.avatarService.getRandomColor(avatarValue) : undefined,\n\t\t\t// Only the size is set inline (it scales with `size`); the family comes from\n\t\t\t// `.avatar-content { font-family: var(--hub-avatar-font-family, …) }` so the\n\t\t\t// initials honour the same token as the rest of the avatar (a `font` shorthand\n\t\t\t// here would pin Helvetica and shadow it).\n\t\t\tfontSize: Math.floor(+this.size() / this.textSizeRatio()) + 'px',\n\t\t\tlineHeight: this.size() + 'px',\n\t\t\t...this.getCustomStyleObject()\n\t\t};\n\t}\n\n\t/**\n\t *\n\t * returns image style\n\t *\n\t * memberOf AvatarComponent\n\t */\n\tprivate getImageStyle(): StyleObject {\n\t\tconst borderColor = this.borderColor();\n\t\tconst hasCornerRadius = !this.round() || +this.cornerRadius() > 0;\n\t\treturn {\n\t\t\tmaxWidth: '100%',\n\t\t\tborderRadius: hasCornerRadius ? (this.round() ? '50%' : this.cornerRadius() + 'px') : undefined,\n\t\t\tborder: borderColor ? '1px solid ' + borderColor : undefined,\n\t\t\twidth: this.size() + 'px',\n\t\t\theight: this.size() + 'px',\n\t\t\t...this.getCustomStyleObject()\n\t\t};\n\t}\n\n\tprivate getCustomStyleObject(): StyleObject {\n\t\tconst customStyle = this.style();\n\t\tif (!customStyle) {\n\t\t\treturn {};\n\t\t}\n\n\t\tif (typeof customStyle === 'string') {\n\t\t\treturn this.parseInlineStyleString(customStyle);\n\t\t}\n\n\t\treturn customStyle;\n\t}\n\n\tprivate parseInlineStyleString(styleString: string): StyleObject {\n\t\tconst styleObject: StyleObject = {};\n\t\tstyleString\n\t\t\t.split(';')\n\t\t\t.map((declaration) => declaration.trim())\n\t\t\t.filter((declaration) => declaration.length > 0)\n\t\t\t.forEach((declaration) => {\n\t\t\t\tconst separatorIndex = declaration.indexOf(':');\n\t\t\t\tif (separatorIndex <= 0) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst property = declaration.slice(0, separatorIndex).trim();\n\t\t\t\tconst value = declaration.slice(separatorIndex + 1).trim();\n\t\t\t\tif (property && value) {\n\t\t\t\t\tstyleObject[property] = value;\n\t\t\t\t}\n\t\t\t});\n\t\treturn styleObject;\n\t}\n\n\t/**\n\t * Fetch avatar image asynchronously.\n\t *\n\t * param {Source} source represents avatar source\n\t * memberof AvatarComponent\n\t */\n\tprivate fetchAndProcessAsyncAvatar(source: AsyncSource): void {\n\t\tif (this.avatarService.sourceHasFailedBefore(source)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.avatarService\n\t\t\t.fetchAvatar(source.getAvatar(+this.size()))\n\t\t\t.pipe(\n\t\t\t\ttakeWhile(() => this.isAlive),\n\t\t\t\tmap((response) => source.processResponse(response, +this.size()))\n\t\t\t)\n\t\t\t.subscribe({\n\t\t\t\tnext: (avatarSrc) => (this.avatarSrc = avatarSrc),\n\t\t\t\terror: () => {\n\t\t\t\t\tthis.fetchAvatarSource();\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\t/**\n\t * Add avatar source\n\t *\n\t * param sourceType avatar source type e.g facebook,twitter, etc.\n\t * param sourceValue source value e.g facebookId value, etc.\n\t */\n\tprivate addSource(sourceType: AvatarSource, sourceValue: string): void {\n\t\tconst source = this.sources.find((s) => s.sourceType === sourceType);\n\t\tif (source) {\n\t\t\tsource.sourceId = sourceValue;\n\t\t} else {\n\t\t\tthis.sources.push(this.sourceFactory.newInstance(sourceType, sourceValue));\n\t\t}\n\t}\n\n\t/**\n\t * Remove avatar source\n\t *\n\t * param sourceType avatar source type e.g facebook,twitter, etc.\n\t */\n\tprivate removeSource(sourceType: AvatarSource): void {\n\t\tthis.sources = this.sources.filter((source) => source.sourceType !== sourceType);\n\t}\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { AvatarConfig } from './avatar-config';\nimport { AVATAR_CONFIG } from './avatar-config.token';\nimport { AvatarComponent } from './avatar.component';\n\n/**\n * Backward-compatibility module for `<hub-avatar>`.\n *\n * @deprecated `AvatarComponent` is now a standalone component. Import it directly\n * (`imports: [AvatarComponent]`) and, if you need custom configuration, register\n * `provideAvatar()` in your application providers. This module only re-exports the\n * standalone component and will be removed in a future major version.\n */\n@NgModule({\n\timports: [AvatarComponent],\n\texports: [AvatarComponent]\n})\nexport class AvatarModule {\n\t/**\n\t * @deprecated Use `provideAvatar(config)` with the standalone APIs instead.\n\t * Kept so existing `AvatarModule.forRoot()` consumers keep working.\n\t */\n\tstatic forRoot(avatarConfig?: AvatarConfig): ModuleWithProviders<AvatarModule> {\n\t\treturn {\n\t\t\tngModule: AvatarModule,\n\t\t\tproviders: [\n\t\t\t\t{\n\t\t\t\t\tprovide: AVATAR_CONFIG,\n\t\t\t\t\tuseValue: avatarConfig ? avatarConfig : {}\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t}\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { AvatarConfig } from './avatar-config';\nimport { AVATAR_CONFIG } from './avatar-config.token';\n\n/**\n * Registers the avatar configuration for standalone applications.\n *\n * Standalone-friendly replacement for `AvatarModule.forRoot()`. Add it to your\n * `bootstrapApplication` providers (or a route's `providers`) to customise the\n * avatar source priority, colour palette or src-cache behaviour. Calling it is\n * optional — `<hub-avatar>` works out of the box with sensible defaults.\n *\n * ```ts\n * import { provideAvatar } from 'ng-hub-ui-avatar';\n *\n * bootstrapApplication(AppComponent, {\n * providers: [\n * provideAvatar({ sourcePriorityOrder: [AvatarSource.GRAVATAR, AvatarSource.INITIALS] })\n * ]\n * });\n * ```\n *\n * @param config Optional avatar configuration.\n * @returns Environment providers to add to the application config.\n */\nexport function provideAvatar(config?: AvatarConfig): EnvironmentProviders {\n\treturn makeEnvironmentProviders([\n\t\t{\n\t\t\tprovide: AVATAR_CONFIG,\n\t\t\tuseValue: config ?? {}\n\t\t}\n\t]);\n}\n","/*\n * Public API Surface of ng-hub-ui-avatar\n */\nexport * from './lib/avatar-config';\nexport * from './lib/avatar.component';\nexport * from './lib/avatar.module';\nexport * from './lib/avatar.providers';\nexport * from './lib/avatar.service';\nexport * from './lib/sources/avatar-source.enum';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2.AvatarConfigService","i1.AvatarConfigService","i1.SourceFactory","i2.AvatarService"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ng-hub-ui-avatar",
3
3
  "description": "A universal avatar component for Angular applications that fetches / generates avatar based on the information you have about the user. Supports initials, Gravatar integration, custom images and styling options. Perfect for user profiles and comment systems.",
4
- "version": "22.9.2",
4
+ "version": "22.9.3",
5
5
  "keywords": [
6
6
  "angular",
7
7
  "avatar",
@@ -35,7 +35,7 @@
35
35
  "tslib": "^2.6.3",
36
36
  "ts-md5": "^1.3.1"
37
37
  },
38
- "homepage": "https://hubui.dev/",
38
+ "homepage": "https://hubui.dev/en/avatar/overview/",
39
39
  "module": "fesm2022/ng-hub-ui-avatar.mjs",
40
40
  "typings": "types/ng-hub-ui-avatar.d.ts",
41
41
  "exports": {