valtech-components 2.0.659 → 2.0.660

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.
@@ -20234,7 +20234,7 @@ const ACTION_CARD_DEFAULTS = {
20234
20234
  };
20235
20235
 
20236
20236
  addIcons({ chevronForwardOutline });
20237
- const IONIC_COLORS = [
20237
+ const IONIC_COLORS$1 = [
20238
20238
  'primary', 'secondary', 'tertiary', 'success',
20239
20239
  'warning', 'danger', 'light', 'medium', 'dark'
20240
20240
  ];
@@ -20317,7 +20317,7 @@ class ActionCardComponent {
20317
20317
  resolveColor(color) {
20318
20318
  if (!color)
20319
20319
  return null;
20320
- if (IONIC_COLORS.includes(color)) {
20320
+ if (IONIC_COLORS$1.includes(color)) {
20321
20321
  return `var(--ion-color-${color})`;
20322
20322
  }
20323
20323
  return color;
@@ -21027,6 +21027,405 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
21027
21027
  type: Input
21028
21028
  }] } });
21029
21029
 
21030
+ /**
21031
+ * Default values
21032
+ */
21033
+ const WELCOME_CARD_DEFAULTS = {
21034
+ variant: 'gradient',
21035
+ gradientAngle: 135,
21036
+ showParticles: true,
21037
+ loading: false,
21038
+ avatar: {
21039
+ mode: 'initials',
21040
+ size: 'large',
21041
+ showRing: true,
21042
+ },
21043
+ };
21044
+
21045
+ addIcons({ personOutline, chevronForwardOutline });
21046
+ const IONIC_COLORS = [
21047
+ 'primary', 'secondary', 'tertiary', 'success',
21048
+ 'warning', 'danger', 'light', 'medium', 'dark'
21049
+ ];
21050
+ // Vibrant color palette for avatar backgrounds
21051
+ const AVATAR_COLORS = [
21052
+ { bg: '#6366f1', text: '#ffffff' }, // Indigo
21053
+ { bg: '#8b5cf6', text: '#ffffff' }, // Violet
21054
+ { bg: '#ec4899', text: '#ffffff' }, // Pink
21055
+ { bg: '#f43f5e', text: '#ffffff' }, // Rose
21056
+ { bg: '#f97316', text: '#ffffff' }, // Orange
21057
+ { bg: '#eab308', text: '#1f2937' }, // Yellow
21058
+ { bg: '#22c55e', text: '#ffffff' }, // Green
21059
+ { bg: '#14b8a6', text: '#ffffff' }, // Teal
21060
+ { bg: '#06b6d4', text: '#ffffff' }, // Cyan
21061
+ { bg: '#3b82f6', text: '#ffffff' }, // Blue
21062
+ ];
21063
+ /**
21064
+ * val-welcome-card
21065
+ *
21066
+ * A modern welcome/greeting card with avatar, animated gradient background,
21067
+ * and optional action buttons. Perfect for dashboard headers.
21068
+ *
21069
+ * @example Basic usage
21070
+ * ```html
21071
+ * <val-welcome-card
21072
+ * [props]="{
21073
+ * greeting: 'Welcome back',
21074
+ * user: { name: 'John Doe', email: 'john@example.com' }
21075
+ * }"
21076
+ * />
21077
+ * ```
21078
+ *
21079
+ * @example With gradient variant
21080
+ * ```html
21081
+ * <val-welcome-card
21082
+ * [props]="{
21083
+ * variant: 'gradient',
21084
+ * greeting: 'Good morning',
21085
+ * user: { name: 'Jane', email: 'jane@example.com' },
21086
+ * gradientFrom: 'primary',
21087
+ * gradientTo: 'tertiary'
21088
+ * }"
21089
+ * />
21090
+ * ```
21091
+ *
21092
+ * @example With i18n
21093
+ * ```html
21094
+ * <val-welcome-card
21095
+ * [props]="{
21096
+ * greetingKey: 'welcome',
21097
+ * i18nNamespace: 'Dashboard',
21098
+ * user: user()
21099
+ * }"
21100
+ * />
21101
+ * ```
21102
+ */
21103
+ class WelcomeCardComponent {
21104
+ constructor() {
21105
+ this.i18n = inject(I18nService);
21106
+ this.themeService = inject(ThemeService);
21107
+ /** Component configuration */
21108
+ this.props = input({});
21109
+ /** Event emitted when card elements are clicked */
21110
+ this.cardClick = new EventEmitter();
21111
+ /** Merged configuration with defaults */
21112
+ this.config = computed(() => ({
21113
+ ...WELCOME_CARD_DEFAULTS,
21114
+ ...this.props(),
21115
+ }));
21116
+ /** Avatar configuration with defaults */
21117
+ this.avatarConfig = computed(() => ({
21118
+ ...WELCOME_CARD_DEFAULTS.avatar,
21119
+ ...this.props().avatar,
21120
+ }));
21121
+ /** Current theme mode */
21122
+ this.isDark = computed(() => this.themeService.IsDark);
21123
+ /** Color index based on user name hash */
21124
+ this.colorIndex = computed(() => {
21125
+ const name = this.config().user?.name || '';
21126
+ let hash = 0;
21127
+ for (let i = 0; i < name.length; i++) {
21128
+ hash = name.charCodeAt(i) + ((hash << 5) - hash);
21129
+ }
21130
+ return Math.abs(hash) % AVATAR_COLORS.length;
21131
+ });
21132
+ }
21133
+ /** Get initials from user name */
21134
+ getInitials() {
21135
+ const props = this.props();
21136
+ // Check for explicit initials first (from props, not merged config)
21137
+ if (props.avatar?.initials || props.user?.initials) {
21138
+ return props.avatar?.initials || props.user?.initials || '';
21139
+ }
21140
+ const name = props.user?.name || '';
21141
+ if (!name)
21142
+ return '?';
21143
+ const parts = name.trim().split(/\s+/);
21144
+ if (parts.length === 1) {
21145
+ return parts[0].substring(0, 2).toUpperCase();
21146
+ }
21147
+ return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();
21148
+ }
21149
+ /** Get greeting text with i18n support */
21150
+ getGreeting() {
21151
+ const cfg = this.config();
21152
+ if (cfg.i18nNamespace && cfg.greetingKey) {
21153
+ this.i18n.lang(); // Track for reactivity
21154
+ return this.i18n.t(cfg.greetingKey, cfg.i18nNamespace);
21155
+ }
21156
+ return cfg.greeting || '';
21157
+ }
21158
+ /** Get subtitle text with i18n support */
21159
+ getSubtitle() {
21160
+ const cfg = this.config();
21161
+ if (cfg.i18nNamespace && cfg.subtitleKey) {
21162
+ this.i18n.lang();
21163
+ return this.i18n.t(cfg.subtitleKey, cfg.i18nNamespace);
21164
+ }
21165
+ return cfg.subtitle || '';
21166
+ }
21167
+ /** Get action label with i18n support */
21168
+ getActionLabel(action) {
21169
+ const cfg = this.config();
21170
+ if (cfg.i18nNamespace && action.labelKey) {
21171
+ this.i18n.lang();
21172
+ return this.i18n.t(action.labelKey, cfg.i18nNamespace);
21173
+ }
21174
+ return action.label || '';
21175
+ }
21176
+ /** Resolve color value */
21177
+ resolveColor(color) {
21178
+ if (!color)
21179
+ return null;
21180
+ if (IONIC_COLORS.includes(color)) {
21181
+ return `var(--ion-color-${color})`;
21182
+ }
21183
+ return color;
21184
+ }
21185
+ /** Get gradient start color */
21186
+ getGradientFrom() {
21187
+ const color = this.config().gradientFrom;
21188
+ return this.resolveColor(color) || 'var(--ion-color-primary)';
21189
+ }
21190
+ /** Get gradient end color */
21191
+ getGradientTo() {
21192
+ const color = this.config().gradientTo;
21193
+ return this.resolveColor(color) || 'var(--ion-color-tertiary)';
21194
+ }
21195
+ /** Get background color (for non-gradient variants) */
21196
+ getBackgroundColor() {
21197
+ return this.resolveColor(this.config().backgroundColor);
21198
+ }
21199
+ /** Get avatar background based on user name */
21200
+ getAvatarBackground() {
21201
+ const cfg = this.avatarConfig();
21202
+ if (cfg.mode === 'image')
21203
+ return 'transparent';
21204
+ return AVATAR_COLORS[this.colorIndex()].bg;
21205
+ }
21206
+ /** Get avatar text color */
21207
+ getAvatarTextColor() {
21208
+ return AVATAR_COLORS[this.colorIndex()].text;
21209
+ }
21210
+ /** Get ring color */
21211
+ getRingColor() {
21212
+ const ringColor = this.avatarConfig().ringColor;
21213
+ return this.resolveColor(ringColor) || 'rgba(255, 255, 255, 0.5)';
21214
+ }
21215
+ /** Handle card click */
21216
+ onCardClick(event) {
21217
+ // Don't emit if clicking avatar or actions
21218
+ if (event.target.closest('.welcome-card__avatar, .welcome-card__action')) {
21219
+ return;
21220
+ }
21221
+ this.cardClick.emit({ target: 'card' });
21222
+ }
21223
+ /** Handle avatar click */
21224
+ onAvatarClick(event) {
21225
+ event.stopPropagation();
21226
+ this.cardClick.emit({ target: 'avatar' });
21227
+ }
21228
+ /** Handle action click */
21229
+ onActionClick(event, token) {
21230
+ event.stopPropagation();
21231
+ this.cardClick.emit({ target: 'action', actionToken: token });
21232
+ }
21233
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WelcomeCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
21234
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: WelcomeCardComponent, isStandalone: true, selector: "val-welcome-card", inputs: { props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { cardClick: "cardClick" }, ngImport: i0, template: `
21235
+ <article
21236
+ class="welcome-card"
21237
+ [class.welcome-card--default]="config().variant === 'default'"
21238
+ [class.welcome-card--gradient]="config().variant === 'gradient'"
21239
+ [class.welcome-card--glass]="config().variant === 'glass'"
21240
+ [class.welcome-card--minimal]="config().variant === 'minimal'"
21241
+ [class.welcome-card--dark]="isDark()"
21242
+ [class.welcome-card--loading]="config().loading"
21243
+ [style.--gradient-from]="getGradientFrom()"
21244
+ [style.--gradient-to]="getGradientTo()"
21245
+ [style.--gradient-angle]="config().gradientAngle + 'deg'"
21246
+ [style.--bg-color]="getBackgroundColor()"
21247
+ (click)="onCardClick($event)"
21248
+ >
21249
+ <!-- Animated particles background -->
21250
+ @if (config().showParticles && config().variant === 'gradient') {
21251
+ <div class="welcome-card__particles">
21252
+ @for (i of [1,2,3,4,5,6]; track i) {
21253
+ <span class="particle" [class]="'particle--' + i"></span>
21254
+ }
21255
+ </div>
21256
+ }
21257
+
21258
+ <!-- Content -->
21259
+ <div class="welcome-card__content">
21260
+ <!-- Avatar -->
21261
+ <div
21262
+ class="welcome-card__avatar"
21263
+ [class.welcome-card__avatar--small]="avatarConfig().size === 'small'"
21264
+ [class.welcome-card__avatar--medium]="avatarConfig().size === 'medium'"
21265
+ [class.welcome-card__avatar--large]="avatarConfig().size === 'large'"
21266
+ [class.welcome-card__avatar--ring]="avatarConfig().showRing"
21267
+ [style.--avatar-bg]="getAvatarBackground()"
21268
+ [style.--avatar-color]="getAvatarTextColor()"
21269
+ [style.--ring-color]="getRingColor()"
21270
+ (click)="onAvatarClick($event)"
21271
+ >
21272
+ @if (config().loading) {
21273
+ <ion-skeleton-text [animated]="true" class="avatar-skeleton"></ion-skeleton-text>
21274
+ } @else if (avatarConfig().mode === 'image' && (avatarConfig().imageUrl || config().user?.avatarUrl)) {
21275
+ <img
21276
+ [src]="avatarConfig().imageUrl || config().user?.avatarUrl"
21277
+ [alt]="config().user?.name || 'Avatar'"
21278
+ class="avatar-image"
21279
+ />
21280
+ } @else if (avatarConfig().mode === 'icon') {
21281
+ <ion-icon [name]="avatarConfig().icon || 'person-outline'"></ion-icon>
21282
+ } @else {
21283
+ <span class="avatar-initials">{{ getInitials() }}</span>
21284
+ }
21285
+ </div>
21286
+
21287
+ <!-- Text content -->
21288
+ <div class="welcome-card__text">
21289
+ @if (config().loading) {
21290
+ <ion-skeleton-text [animated]="true" style="width: 40%; height: 14px; margin-bottom: 8px;"></ion-skeleton-text>
21291
+ <ion-skeleton-text [animated]="true" style="width: 60%; height: 24px; margin-bottom: 4px;"></ion-skeleton-text>
21292
+ <ion-skeleton-text [animated]="true" style="width: 50%; height: 14px;"></ion-skeleton-text>
21293
+ } @else {
21294
+ @if (getGreeting()) {
21295
+ <span class="welcome-card__greeting">{{ getGreeting() }}</span>
21296
+ }
21297
+ <h2 class="welcome-card__name">{{ config().user?.name || 'User' }}</h2>
21298
+ @if (getSubtitle() || config().user?.email) {
21299
+ <span class="welcome-card__subtitle">{{ getSubtitle() || config().user?.email }}</span>
21300
+ }
21301
+ }
21302
+ </div>
21303
+ </div>
21304
+
21305
+ <!-- Actions -->
21306
+ @if (config().actions?.length && !config().loading) {
21307
+ <div class="welcome-card__actions">
21308
+ @for (action of config().actions; track action.token || action.label) {
21309
+ <button
21310
+ type="button"
21311
+ class="welcome-card__action"
21312
+ [routerLink]="action.routerLink"
21313
+ (click)="onActionClick($event, action.token)"
21314
+ >
21315
+ @if (action.icon) {
21316
+ <ion-icon [name]="action.icon"></ion-icon>
21317
+ }
21318
+ <span>{{ getActionLabel(action) }}</span>
21319
+ <ion-icon name="chevron-forward-outline" class="action-chevron"></ion-icon>
21320
+ </button>
21321
+ }
21322
+ </div>
21323
+ }
21324
+
21325
+ <ion-ripple-effect></ion-ripple-effect>
21326
+ </article>
21327
+ `, isInline: true, styles: [":host{display:block;width:100%}.welcome-card{position:relative;border-radius:20px;padding:1.5rem;overflow:hidden;cursor:pointer;transition:transform .3s ease,box-shadow .3s ease}.welcome-card--default{background:var(--bg-color, var(--ion-card-background, #fff));box-shadow:0 4px 20px #00000014}.welcome-card--default .welcome-card__greeting,.welcome-card--default .welcome-card__subtitle{color:var(--ion-color-medium)}.welcome-card--default .welcome-card__name{color:var(--ion-text-color)}.welcome-card--gradient{background:linear-gradient(var(--gradient-angle, 135deg),var(--gradient-from, var(--ion-color-primary)),var(--gradient-to, var(--ion-color-tertiary)));box-shadow:0 8px 32px #00000026}.welcome-card--gradient .welcome-card__greeting,.welcome-card--gradient .welcome-card__subtitle{color:#ffffffd9}.welcome-card--gradient .welcome-card__name{color:#fff}.welcome-card--gradient .welcome-card__action{background:#ffffff26;color:#fff;border-color:#fff3}.welcome-card--gradient .welcome-card__action:hover{background:#ffffff40}.welcome-card--glass{background:#ffffff26;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.2);box-shadow:0 8px 32px #0000001a}.welcome-card--glass .welcome-card__greeting,.welcome-card--glass .welcome-card__subtitle{color:var(--ion-color-medium)}.welcome-card--glass .welcome-card__name{color:var(--ion-text-color)}.welcome-card--minimal{background:transparent;padding:1rem 0;border-radius:0;box-shadow:none}.welcome-card--minimal .welcome-card__greeting,.welcome-card--minimal .welcome-card__subtitle{color:var(--ion-color-medium)}.welcome-card--minimal .welcome-card__name{color:var(--ion-text-color)}.welcome-card--dark.welcome-card--default{background:var(--ion-card-background, #1e1e1e);box-shadow:0 4px 20px #0000004d}.welcome-card--dark.welcome-card--glass{background:#1e1e1eb3;border-color:#ffffff1a}.welcome-card:hover{transform:translateY(-2px)}.welcome-card--loading{pointer-events:none}.welcome-card__particles{position:absolute;inset:0;overflow:hidden;pointer-events:none}.welcome-card__particles .particle{position:absolute;border-radius:50%;background:#fff3;animation:float 8s ease-in-out infinite}.welcome-card__particles .particle--1{width:80px;height:80px;top:-20px;right:10%;animation-delay:0s}.welcome-card__particles .particle--2{width:60px;height:60px;bottom:-15px;right:25%;animation-delay:-2s}.welcome-card__particles .particle--3{width:40px;height:40px;top:40%;right:-10px;animation-delay:-4s}.welcome-card__particles .particle--4{width:30px;height:30px;top:20%;left:10%;animation-delay:-1s;opacity:.5}.welcome-card__particles .particle--5{width:50px;height:50px;bottom:10%;left:5%;animation-delay:-3s;opacity:.3}.welcome-card__particles .particle--6{width:25px;height:25px;top:60%;left:30%;animation-delay:-5s;opacity:.4}@keyframes float{0%,to{transform:translateY(0) scale(1);opacity:.2}50%{transform:translateY(-20px) scale(1.1);opacity:.35}}.welcome-card__content{position:relative;z-index:1;display:flex;align-items:center;gap:1.25rem}.welcome-card__avatar{position:relative;flex-shrink:0;display:flex;align-items:center;justify-content:center;border-radius:50%;background:var(--avatar-bg);color:var(--avatar-color);font-weight:700;transition:transform .3s ease}.welcome-card__avatar--small{width:48px;height:48px;font-size:1rem}.welcome-card__avatar--small ion-icon{font-size:1.25rem}.welcome-card__avatar--medium{width:64px;height:64px;font-size:1.25rem}.welcome-card__avatar--medium ion-icon{font-size:1.5rem}.welcome-card__avatar--large{width:80px;height:80px;font-size:1.75rem}.welcome-card__avatar--large ion-icon{font-size:2rem}.welcome-card__avatar--ring:before{content:\"\";position:absolute;inset:-4px;border-radius:50%;border:3px solid var(--ring-color, rgba(255, 255, 255, .5));animation:pulse-ring 2s ease-in-out infinite}.welcome-card__avatar .avatar-skeleton{width:100%;height:100%;border-radius:50%}.welcome-card__avatar .avatar-image{width:100%;height:100%;border-radius:50%;object-fit:cover}.welcome-card__avatar .avatar-initials{-webkit-user-select:none;user-select:none;text-transform:uppercase;letter-spacing:.5px}.welcome-card__avatar:hover{transform:scale(1.05)}@keyframes pulse-ring{0%,to{transform:scale(1);opacity:.5}50%{transform:scale(1.05);opacity:.8}}.welcome-card__text{flex:1;min-width:0}.welcome-card__greeting{display:block;font-size:.875rem;font-weight:500;margin-bottom:.25rem;text-transform:uppercase;letter-spacing:.5px}.welcome-card__name{margin:0 0 .25rem;font-size:1.5rem;font-weight:700;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.welcome-card__subtitle{display:block;font-size:.875rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.welcome-card__actions{position:relative;z-index:1;display:flex;flex-wrap:wrap;gap:.75rem;margin-top:1.25rem;padding-top:1rem;border-top:1px solid rgba(255,255,255,.15)}.welcome-card__action{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem 1rem;border-radius:12px;border:1px solid transparent;background:var(--ion-color-light);color:var(--ion-text-color);font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s ease;text-decoration:none}.welcome-card__action ion-icon{font-size:1rem}.welcome-card__action .action-chevron{font-size:.75rem;opacity:.6;transition:transform .2s ease}.welcome-card__action:hover .action-chevron{transform:translate(3px)}@media (max-width: 480px){.welcome-card{padding:1.25rem}.welcome-card__content{gap:1rem}.welcome-card__avatar--large{width:64px;height:64px;font-size:1.25rem}.welcome-card__name{font-size:1.25rem}.welcome-card__actions{flex-direction:column}.welcome-card__action{width:100%;justify-content:space-between}}:host{animation:slideInUp .5s ease-out}@keyframes slideInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonRippleEffect, selector: "ion-ripple-effect", inputs: ["type"] }, { kind: "component", type: IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }] }); }
21328
+ }
21329
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WelcomeCardComponent, decorators: [{
21330
+ type: Component,
21331
+ args: [{ selector: 'val-welcome-card', standalone: true, imports: [CommonModule, RouterLink, IonIcon, IonRippleEffect, IonSkeletonText], template: `
21332
+ <article
21333
+ class="welcome-card"
21334
+ [class.welcome-card--default]="config().variant === 'default'"
21335
+ [class.welcome-card--gradient]="config().variant === 'gradient'"
21336
+ [class.welcome-card--glass]="config().variant === 'glass'"
21337
+ [class.welcome-card--minimal]="config().variant === 'minimal'"
21338
+ [class.welcome-card--dark]="isDark()"
21339
+ [class.welcome-card--loading]="config().loading"
21340
+ [style.--gradient-from]="getGradientFrom()"
21341
+ [style.--gradient-to]="getGradientTo()"
21342
+ [style.--gradient-angle]="config().gradientAngle + 'deg'"
21343
+ [style.--bg-color]="getBackgroundColor()"
21344
+ (click)="onCardClick($event)"
21345
+ >
21346
+ <!-- Animated particles background -->
21347
+ @if (config().showParticles && config().variant === 'gradient') {
21348
+ <div class="welcome-card__particles">
21349
+ @for (i of [1,2,3,4,5,6]; track i) {
21350
+ <span class="particle" [class]="'particle--' + i"></span>
21351
+ }
21352
+ </div>
21353
+ }
21354
+
21355
+ <!-- Content -->
21356
+ <div class="welcome-card__content">
21357
+ <!-- Avatar -->
21358
+ <div
21359
+ class="welcome-card__avatar"
21360
+ [class.welcome-card__avatar--small]="avatarConfig().size === 'small'"
21361
+ [class.welcome-card__avatar--medium]="avatarConfig().size === 'medium'"
21362
+ [class.welcome-card__avatar--large]="avatarConfig().size === 'large'"
21363
+ [class.welcome-card__avatar--ring]="avatarConfig().showRing"
21364
+ [style.--avatar-bg]="getAvatarBackground()"
21365
+ [style.--avatar-color]="getAvatarTextColor()"
21366
+ [style.--ring-color]="getRingColor()"
21367
+ (click)="onAvatarClick($event)"
21368
+ >
21369
+ @if (config().loading) {
21370
+ <ion-skeleton-text [animated]="true" class="avatar-skeleton"></ion-skeleton-text>
21371
+ } @else if (avatarConfig().mode === 'image' && (avatarConfig().imageUrl || config().user?.avatarUrl)) {
21372
+ <img
21373
+ [src]="avatarConfig().imageUrl || config().user?.avatarUrl"
21374
+ [alt]="config().user?.name || 'Avatar'"
21375
+ class="avatar-image"
21376
+ />
21377
+ } @else if (avatarConfig().mode === 'icon') {
21378
+ <ion-icon [name]="avatarConfig().icon || 'person-outline'"></ion-icon>
21379
+ } @else {
21380
+ <span class="avatar-initials">{{ getInitials() }}</span>
21381
+ }
21382
+ </div>
21383
+
21384
+ <!-- Text content -->
21385
+ <div class="welcome-card__text">
21386
+ @if (config().loading) {
21387
+ <ion-skeleton-text [animated]="true" style="width: 40%; height: 14px; margin-bottom: 8px;"></ion-skeleton-text>
21388
+ <ion-skeleton-text [animated]="true" style="width: 60%; height: 24px; margin-bottom: 4px;"></ion-skeleton-text>
21389
+ <ion-skeleton-text [animated]="true" style="width: 50%; height: 14px;"></ion-skeleton-text>
21390
+ } @else {
21391
+ @if (getGreeting()) {
21392
+ <span class="welcome-card__greeting">{{ getGreeting() }}</span>
21393
+ }
21394
+ <h2 class="welcome-card__name">{{ config().user?.name || 'User' }}</h2>
21395
+ @if (getSubtitle() || config().user?.email) {
21396
+ <span class="welcome-card__subtitle">{{ getSubtitle() || config().user?.email }}</span>
21397
+ }
21398
+ }
21399
+ </div>
21400
+ </div>
21401
+
21402
+ <!-- Actions -->
21403
+ @if (config().actions?.length && !config().loading) {
21404
+ <div class="welcome-card__actions">
21405
+ @for (action of config().actions; track action.token || action.label) {
21406
+ <button
21407
+ type="button"
21408
+ class="welcome-card__action"
21409
+ [routerLink]="action.routerLink"
21410
+ (click)="onActionClick($event, action.token)"
21411
+ >
21412
+ @if (action.icon) {
21413
+ <ion-icon [name]="action.icon"></ion-icon>
21414
+ }
21415
+ <span>{{ getActionLabel(action) }}</span>
21416
+ <ion-icon name="chevron-forward-outline" class="action-chevron"></ion-icon>
21417
+ </button>
21418
+ }
21419
+ </div>
21420
+ }
21421
+
21422
+ <ion-ripple-effect></ion-ripple-effect>
21423
+ </article>
21424
+ `, styles: [":host{display:block;width:100%}.welcome-card{position:relative;border-radius:20px;padding:1.5rem;overflow:hidden;cursor:pointer;transition:transform .3s ease,box-shadow .3s ease}.welcome-card--default{background:var(--bg-color, var(--ion-card-background, #fff));box-shadow:0 4px 20px #00000014}.welcome-card--default .welcome-card__greeting,.welcome-card--default .welcome-card__subtitle{color:var(--ion-color-medium)}.welcome-card--default .welcome-card__name{color:var(--ion-text-color)}.welcome-card--gradient{background:linear-gradient(var(--gradient-angle, 135deg),var(--gradient-from, var(--ion-color-primary)),var(--gradient-to, var(--ion-color-tertiary)));box-shadow:0 8px 32px #00000026}.welcome-card--gradient .welcome-card__greeting,.welcome-card--gradient .welcome-card__subtitle{color:#ffffffd9}.welcome-card--gradient .welcome-card__name{color:#fff}.welcome-card--gradient .welcome-card__action{background:#ffffff26;color:#fff;border-color:#fff3}.welcome-card--gradient .welcome-card__action:hover{background:#ffffff40}.welcome-card--glass{background:#ffffff26;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.2);box-shadow:0 8px 32px #0000001a}.welcome-card--glass .welcome-card__greeting,.welcome-card--glass .welcome-card__subtitle{color:var(--ion-color-medium)}.welcome-card--glass .welcome-card__name{color:var(--ion-text-color)}.welcome-card--minimal{background:transparent;padding:1rem 0;border-radius:0;box-shadow:none}.welcome-card--minimal .welcome-card__greeting,.welcome-card--minimal .welcome-card__subtitle{color:var(--ion-color-medium)}.welcome-card--minimal .welcome-card__name{color:var(--ion-text-color)}.welcome-card--dark.welcome-card--default{background:var(--ion-card-background, #1e1e1e);box-shadow:0 4px 20px #0000004d}.welcome-card--dark.welcome-card--glass{background:#1e1e1eb3;border-color:#ffffff1a}.welcome-card:hover{transform:translateY(-2px)}.welcome-card--loading{pointer-events:none}.welcome-card__particles{position:absolute;inset:0;overflow:hidden;pointer-events:none}.welcome-card__particles .particle{position:absolute;border-radius:50%;background:#fff3;animation:float 8s ease-in-out infinite}.welcome-card__particles .particle--1{width:80px;height:80px;top:-20px;right:10%;animation-delay:0s}.welcome-card__particles .particle--2{width:60px;height:60px;bottom:-15px;right:25%;animation-delay:-2s}.welcome-card__particles .particle--3{width:40px;height:40px;top:40%;right:-10px;animation-delay:-4s}.welcome-card__particles .particle--4{width:30px;height:30px;top:20%;left:10%;animation-delay:-1s;opacity:.5}.welcome-card__particles .particle--5{width:50px;height:50px;bottom:10%;left:5%;animation-delay:-3s;opacity:.3}.welcome-card__particles .particle--6{width:25px;height:25px;top:60%;left:30%;animation-delay:-5s;opacity:.4}@keyframes float{0%,to{transform:translateY(0) scale(1);opacity:.2}50%{transform:translateY(-20px) scale(1.1);opacity:.35}}.welcome-card__content{position:relative;z-index:1;display:flex;align-items:center;gap:1.25rem}.welcome-card__avatar{position:relative;flex-shrink:0;display:flex;align-items:center;justify-content:center;border-radius:50%;background:var(--avatar-bg);color:var(--avatar-color);font-weight:700;transition:transform .3s ease}.welcome-card__avatar--small{width:48px;height:48px;font-size:1rem}.welcome-card__avatar--small ion-icon{font-size:1.25rem}.welcome-card__avatar--medium{width:64px;height:64px;font-size:1.25rem}.welcome-card__avatar--medium ion-icon{font-size:1.5rem}.welcome-card__avatar--large{width:80px;height:80px;font-size:1.75rem}.welcome-card__avatar--large ion-icon{font-size:2rem}.welcome-card__avatar--ring:before{content:\"\";position:absolute;inset:-4px;border-radius:50%;border:3px solid var(--ring-color, rgba(255, 255, 255, .5));animation:pulse-ring 2s ease-in-out infinite}.welcome-card__avatar .avatar-skeleton{width:100%;height:100%;border-radius:50%}.welcome-card__avatar .avatar-image{width:100%;height:100%;border-radius:50%;object-fit:cover}.welcome-card__avatar .avatar-initials{-webkit-user-select:none;user-select:none;text-transform:uppercase;letter-spacing:.5px}.welcome-card__avatar:hover{transform:scale(1.05)}@keyframes pulse-ring{0%,to{transform:scale(1);opacity:.5}50%{transform:scale(1.05);opacity:.8}}.welcome-card__text{flex:1;min-width:0}.welcome-card__greeting{display:block;font-size:.875rem;font-weight:500;margin-bottom:.25rem;text-transform:uppercase;letter-spacing:.5px}.welcome-card__name{margin:0 0 .25rem;font-size:1.5rem;font-weight:700;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.welcome-card__subtitle{display:block;font-size:.875rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.welcome-card__actions{position:relative;z-index:1;display:flex;flex-wrap:wrap;gap:.75rem;margin-top:1.25rem;padding-top:1rem;border-top:1px solid rgba(255,255,255,.15)}.welcome-card__action{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem 1rem;border-radius:12px;border:1px solid transparent;background:var(--ion-color-light);color:var(--ion-text-color);font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s ease;text-decoration:none}.welcome-card__action ion-icon{font-size:1rem}.welcome-card__action .action-chevron{font-size:.75rem;opacity:.6;transition:transform .2s ease}.welcome-card__action:hover .action-chevron{transform:translate(3px)}@media (max-width: 480px){.welcome-card{padding:1.25rem}.welcome-card__content{gap:1rem}.welcome-card__avatar--large{width:64px;height:64px;font-size:1.25rem}.welcome-card__name{font-size:1.25rem}.welcome-card__actions{flex-direction:column}.welcome-card__action{width:100%;justify-content:space-between}}:host{animation:slideInUp .5s ease-out}@keyframes slideInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}\n"] }]
21425
+ }], propDecorators: { cardClick: [{
21426
+ type: Output
21427
+ }] } });
21428
+
21030
21429
  /**
21031
21430
  * Configuración de espaciado predefinida
21032
21431
  */
@@ -40821,5 +41220,5 @@ function buildFooterLinks(links, t) {
40821
41220
  * Generated bundle index. Do not edit.
40822
41221
  */
40823
41222
 
40824
- export { ACTION_CARD_DEFAULTS, AD_SIZE_MAP, API_TABLE_COLUMN_LABELS, ARTICLE_SPACING, AccordionComponent, ActionCardComponent, ActionHeaderComponent, ActionType, AdSlotComponent, AdsLoaderService, AdsService, AlertBoxComponent, AnalyticsErrorHandler, AnalyticsRouterTracker, AnalyticsService, AppConfigService, ArticleBuilder, ArticleComponent, AuthBackgroundComponent, AuthService, AuthStateService, AuthStorageService, AuthSyncService, AvatarComponent, BOTTOM_NAV_DEFAULTS, BannerComponent, BaseDefault, BottomNavComponent, BoxComponent, BreadcrumbComponent, ButtonComponent, ButtonGroupComponent, COMMON_COUNTRY_CODES, COMMON_CURRENCIES, CURRENCY_INFO, CardComponent, CardSection, CardType, CardsCarouselComponent, CheckInputComponent, ChipGroupComponent, ClearDefault, ClearDefaultBlock, ClearDefaultFull, ClearDefaultRound, ClearDefaultRoundBlock, ClearDefaultRoundFull, CodeDisplayComponent, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ContentLoaderComponent, ContentReactionComponent, CountdownComponent, CurrencyInputComponent, DEFAULT_ADS_CONFIG, DEFAULT_APP_CONFIG_SERVICE_CONFIG, DEFAULT_AUTH_CONFIG, DEFAULT_CANCEL_BUTTON, DEFAULT_CONFIRM_BUTTON, DEFAULT_COUNTDOWN_LABELS, DEFAULT_COUNTDOWN_LABELS_EN, DEFAULT_EMPTY_STATE, DEFAULT_FEEDBACK_CONFIG, DEFAULT_FEEDBACK_TYPE_OPTIONS, DEFAULT_INFINITE_LIST_METADATA, DEFAULT_LEGEND_LABELS, DEFAULT_MODAL_CANCEL_BUTTON, DEFAULT_MODAL_CONFIRM_BUTTON, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PAYMENT_STATUS_COLORS, DEFAULT_PAYMENT_STATUS_LABELS, DEFAULT_PLATFORMS, DEFAULT_REFRESHER_METADATA, DEFAULT_SKELETON_CONFIG, DEFAULT_STATUS_COLORS, DEFAULT_STATUS_LABELS, DEFAULT_WINNER_LABELS, DataTableComponent, DateInputComponent, DateRangeInputComponent, DetailSkeletonComponent, DeviceService, DisplayComponent, DividerComponent, DocsApiTableComponent, DocsBreadcrumbComponent, DocsCalloutComponent, DocsCodeExampleComponent, DocsLayoutComponent, DocsNavLinksComponent, DocsNavigationService, DocsPageComponent, DocsSearchComponent, DocsSectionComponent, DocsShellComponent, DocsSidebarComponent, DocsTocComponent, DownloadService, EmailInputComponent, ExpandableTextComponent, FEATURES_LIST_DEFAULTS, FabComponent, FeaturesListComponent, FeedbackFormComponent, FeedbackService, FileInputComponent, FirebaseService, FirestoreCollectionFactory, FirestoreService, FooterComponent, FooterLinksComponent, FormComponent, FormFooterComponent, FormSkeletonComponent, FunHeaderComponent, GlowCardComponent, GridSkeletonComponent, HeaderComponent, HintComponent, HorizontalScrollComponent, HourInputComponent, HrefComponent, I18nService, INITIAL_AUTH_STATE, INITIAL_MFA_STATE, Icon, IconComponent, IconService, ImageComponent, InAppBrowserService, InfiniteListComponent, InfoComponent, InputI18nHelper, InputType, ItemListComponent, LANG_STORAGE_KEY$1 as LANG_STORAGE_KEY, LOGIN_DEFAULTS, LanguageSelectorComponent, LayeredCardComponent, LayoutComponent, LinkComponent, LinkProcessorService, LinkedProvidersComponent, LinksAccordionComponent, LinksCakeComponent, ListSkeletonComponent, LoadingDirective, LocalStorageService, LocaleService, LoginComponent, MODAL_SIZES, MOTION, MaintenancePageComponent, MenuComponent, MessagingService, ModalService, MultiSelectSearchComponent, NavigationService, NoContentComponent, NotesBoxComponent, NotificationsService, NumberFromToComponent, NumberInputComponent, NumberStepperComponent, OAUTH_PROVIDERS_INFO, OAuthCallbackComponent, OAuthService, OutlineDefault, OutlineDefaultBlock, OutlineDefaultFull, OutlineDefaultRound, OutlineDefaultRoundBlock, OutlineDefaultRoundFull, PLATFORM_CONFIGS, PageContentComponent, PageTemplateComponent, PageWrapperComponent, PaginationComponent, PaginationService, ParticipantCardComponent, PasswordInputComponent, PhoneInputComponent, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, PresetService, PriceTagComponent, PrimarySolidBlockButton, PrimarySolidBlockHrefButton, PrimarySolidBlockIconButton, PrimarySolidBlockIconHrefButton, PrimarySolidDefaultRoundButton, PrimarySolidDefaultRoundHrefButton, PrimarySolidDefaultRoundIconButton, PrimarySolidDefaultRoundIconHrefButton, PrimarySolidFullButton, PrimarySolidFullHrefButton, PrimarySolidFullIconButton, PrimarySolidFullIconHrefButton, PrimarySolidLargeRoundButton, PrimarySolidLargeRoundHrefButton, PrimarySolidLargeRoundIconButton, PrimarySolidLargeRoundIconHrefButton, PrimarySolidSmallRoundButton, PrimarySolidSmallRoundHrefButton, PrimarySolidSmallRoundIconButton, PrimarySolidSmallRoundIconHrefButton, ProcessLinksPipe, ProfileSkeletonComponent, ProgressBarComponent, ProgressRingComponent, ProgressStatusComponent, PrompterComponent, QR_PRESETS, QrCodeComponent, QrGeneratorService, QueryBuilder, QuoteBoxComponent, RadioInputComponent, RaffleStatusCardComponent, RangeInputComponent, RatingComponent, RecapCardComponent, RefresherComponent, RightsFooterComponent, RotatingTextComponent, SKELETON_PRESETS, SearchSelectorComponent, SearchbarComponent, SecondarySolidBlockButton, SecondarySolidBlockHrefButton, SecondarySolidBlockIconButton, SecondarySolidBlockIconHrefButton, SecondarySolidDefaultRoundButton, SecondarySolidDefaultRoundHrefButton, SecondarySolidDefaultRoundIconButton, SecondarySolidDefaultRoundIconHrefButton, SecondarySolidFullButton, SecondarySolidFullHrefButton, SecondarySolidFullIconButton, SecondarySolidFullIconHrefButton, SecondarySolidLargeRoundButton, SecondarySolidLargeRoundHrefButton, SecondarySolidLargeRoundIconButton, SecondarySolidLargeRoundIconHrefButton, SecondarySolidSmallRoundButton, SecondarySolidSmallRoundHrefButton, SecondarySolidSmallRoundIconButton, SecondarySolidSmallRoundIconHrefButton, SegmentControlComponent, SelectSearchComponent, SessionService, ShareButtonsComponent, SimpleComponent, SkeletonComponent, SkeletonService, SolidBlockButton, SolidDefault, SolidDefaultBlock, SolidDefaultButton, SolidDefaultFull, SolidDefaultRound, SolidDefaultRoundBlock, SolidDefaultRoundButton, SolidDefaultRoundFull, SolidFullButton, SolidLargeButton, SolidLargeRoundButton, SolidSmallButton, SolidSmallRoundButton, StatsCardComponent, StepperComponent, StorageService, SwipeCarouselComponent, TabbedContentComponent, TableSkeletonComponent, TabsComponent, Terminal404Component, TestimonialCardComponent, TestimonialCarouselComponent, TextComponent, TextInputComponent, TextareaInputComponent, ThemeOption, ThemeService, TicketGridComponent, TimelineComponent, TitleBlockComponent, TitleComponent, ToastService, ToggleInputComponent, TokenService, ToolbarActionType, ToolbarComponent, TranslatePipe, TypedCollection, UpdateBannerComponent, UsernameInputComponent, VALTECH_ADS_CONFIG, VALTECH_APP_CONFIG, VALTECH_AUTH_CONFIG, VALTECH_COMPANY_LINKS, VALTECH_DEFAULT_CONTENT, VALTECH_FEEDBACK_CONFIG, VALTECH_FIREBASE_CONFIG, VALTECH_FOOTER_I18N, VALTECH_FOOTER_LOGO, VALTECH_LANGUAGE_SELECTOR, VALTECH_SOCIAL_LINKS, WinnerDisplayComponent, WizardComponent, WizardFooterComponent, applyDefaultValueToControl, authGuard, authInterceptor, buildFooterLinks, buildPath, collections, createFirebaseConfig, createGlowCardProps, createInitialPaginationState, createNumberFromToField, createTitleProps, extractPathParams, getAppInfo, getAppVersion, getCollectionPath, getDocumentId, goToTop, guestGuard, hasEmulators, isAtEnd, isCollectionPath, isDocumentPath, isEmulatorMode, isValidPath, joinPath, maxLength, permissionGuard, permissionGuardFromRoute, provideValtechAds, provideValtechAppConfig, provideValtechAuth, provideValtechAuthInterceptor, provideValtechFeedback, provideValtechFirebase, provideValtechI18n, provideValtechPresets, provideValtechSkeleton, query, replaceSpecialChars, resolveColor, resolveInputDefaultValue, roleGuard, storagePaths, superAdminGuard };
41223
+ export { ACTION_CARD_DEFAULTS, AD_SIZE_MAP, API_TABLE_COLUMN_LABELS, ARTICLE_SPACING, AccordionComponent, ActionCardComponent, ActionHeaderComponent, ActionType, AdSlotComponent, AdsLoaderService, AdsService, AlertBoxComponent, AnalyticsErrorHandler, AnalyticsRouterTracker, AnalyticsService, AppConfigService, ArticleBuilder, ArticleComponent, AuthBackgroundComponent, AuthService, AuthStateService, AuthStorageService, AuthSyncService, AvatarComponent, BOTTOM_NAV_DEFAULTS, BannerComponent, BaseDefault, BottomNavComponent, BoxComponent, BreadcrumbComponent, ButtonComponent, ButtonGroupComponent, COMMON_COUNTRY_CODES, COMMON_CURRENCIES, CURRENCY_INFO, CardComponent, CardSection, CardType, CardsCarouselComponent, CheckInputComponent, ChipGroupComponent, ClearDefault, ClearDefaultBlock, ClearDefaultFull, ClearDefaultRound, ClearDefaultRoundBlock, ClearDefaultRoundFull, CodeDisplayComponent, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ContentLoaderComponent, ContentReactionComponent, CountdownComponent, CurrencyInputComponent, DEFAULT_ADS_CONFIG, DEFAULT_APP_CONFIG_SERVICE_CONFIG, DEFAULT_AUTH_CONFIG, DEFAULT_CANCEL_BUTTON, DEFAULT_CONFIRM_BUTTON, DEFAULT_COUNTDOWN_LABELS, DEFAULT_COUNTDOWN_LABELS_EN, DEFAULT_EMPTY_STATE, DEFAULT_FEEDBACK_CONFIG, DEFAULT_FEEDBACK_TYPE_OPTIONS, DEFAULT_INFINITE_LIST_METADATA, DEFAULT_LEGEND_LABELS, DEFAULT_MODAL_CANCEL_BUTTON, DEFAULT_MODAL_CONFIRM_BUTTON, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PAYMENT_STATUS_COLORS, DEFAULT_PAYMENT_STATUS_LABELS, DEFAULT_PLATFORMS, DEFAULT_REFRESHER_METADATA, DEFAULT_SKELETON_CONFIG, DEFAULT_STATUS_COLORS, DEFAULT_STATUS_LABELS, DEFAULT_WINNER_LABELS, DataTableComponent, DateInputComponent, DateRangeInputComponent, DetailSkeletonComponent, DeviceService, DisplayComponent, DividerComponent, DocsApiTableComponent, DocsBreadcrumbComponent, DocsCalloutComponent, DocsCodeExampleComponent, DocsLayoutComponent, DocsNavLinksComponent, DocsNavigationService, DocsPageComponent, DocsSearchComponent, DocsSectionComponent, DocsShellComponent, DocsSidebarComponent, DocsTocComponent, DownloadService, EmailInputComponent, ExpandableTextComponent, FEATURES_LIST_DEFAULTS, FabComponent, FeaturesListComponent, FeedbackFormComponent, FeedbackService, FileInputComponent, FirebaseService, FirestoreCollectionFactory, FirestoreService, FooterComponent, FooterLinksComponent, FormComponent, FormFooterComponent, FormSkeletonComponent, FunHeaderComponent, GlowCardComponent, GridSkeletonComponent, HeaderComponent, HintComponent, HorizontalScrollComponent, HourInputComponent, HrefComponent, I18nService, INITIAL_AUTH_STATE, INITIAL_MFA_STATE, Icon, IconComponent, IconService, ImageComponent, InAppBrowserService, InfiniteListComponent, InfoComponent, InputI18nHelper, InputType, ItemListComponent, LANG_STORAGE_KEY$1 as LANG_STORAGE_KEY, LOGIN_DEFAULTS, LanguageSelectorComponent, LayeredCardComponent, LayoutComponent, LinkComponent, LinkProcessorService, LinkedProvidersComponent, LinksAccordionComponent, LinksCakeComponent, ListSkeletonComponent, LoadingDirective, LocalStorageService, LocaleService, LoginComponent, MODAL_SIZES, MOTION, MaintenancePageComponent, MenuComponent, MessagingService, ModalService, MultiSelectSearchComponent, NavigationService, NoContentComponent, NotesBoxComponent, NotificationsService, NumberFromToComponent, NumberInputComponent, NumberStepperComponent, OAUTH_PROVIDERS_INFO, OAuthCallbackComponent, OAuthService, OutlineDefault, OutlineDefaultBlock, OutlineDefaultFull, OutlineDefaultRound, OutlineDefaultRoundBlock, OutlineDefaultRoundFull, PLATFORM_CONFIGS, PageContentComponent, PageTemplateComponent, PageWrapperComponent, PaginationComponent, PaginationService, ParticipantCardComponent, PasswordInputComponent, PhoneInputComponent, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, PresetService, PriceTagComponent, PrimarySolidBlockButton, PrimarySolidBlockHrefButton, PrimarySolidBlockIconButton, PrimarySolidBlockIconHrefButton, PrimarySolidDefaultRoundButton, PrimarySolidDefaultRoundHrefButton, PrimarySolidDefaultRoundIconButton, PrimarySolidDefaultRoundIconHrefButton, PrimarySolidFullButton, PrimarySolidFullHrefButton, PrimarySolidFullIconButton, PrimarySolidFullIconHrefButton, PrimarySolidLargeRoundButton, PrimarySolidLargeRoundHrefButton, PrimarySolidLargeRoundIconButton, PrimarySolidLargeRoundIconHrefButton, PrimarySolidSmallRoundButton, PrimarySolidSmallRoundHrefButton, PrimarySolidSmallRoundIconButton, PrimarySolidSmallRoundIconHrefButton, ProcessLinksPipe, ProfileSkeletonComponent, ProgressBarComponent, ProgressRingComponent, ProgressStatusComponent, PrompterComponent, QR_PRESETS, QrCodeComponent, QrGeneratorService, QueryBuilder, QuoteBoxComponent, RadioInputComponent, RaffleStatusCardComponent, RangeInputComponent, RatingComponent, RecapCardComponent, RefresherComponent, RightsFooterComponent, RotatingTextComponent, SKELETON_PRESETS, SearchSelectorComponent, SearchbarComponent, SecondarySolidBlockButton, SecondarySolidBlockHrefButton, SecondarySolidBlockIconButton, SecondarySolidBlockIconHrefButton, SecondarySolidDefaultRoundButton, SecondarySolidDefaultRoundHrefButton, SecondarySolidDefaultRoundIconButton, SecondarySolidDefaultRoundIconHrefButton, SecondarySolidFullButton, SecondarySolidFullHrefButton, SecondarySolidFullIconButton, SecondarySolidFullIconHrefButton, SecondarySolidLargeRoundButton, SecondarySolidLargeRoundHrefButton, SecondarySolidLargeRoundIconButton, SecondarySolidLargeRoundIconHrefButton, SecondarySolidSmallRoundButton, SecondarySolidSmallRoundHrefButton, SecondarySolidSmallRoundIconButton, SecondarySolidSmallRoundIconHrefButton, SegmentControlComponent, SelectSearchComponent, SessionService, ShareButtonsComponent, SimpleComponent, SkeletonComponent, SkeletonService, SolidBlockButton, SolidDefault, SolidDefaultBlock, SolidDefaultButton, SolidDefaultFull, SolidDefaultRound, SolidDefaultRoundBlock, SolidDefaultRoundButton, SolidDefaultRoundFull, SolidFullButton, SolidLargeButton, SolidLargeRoundButton, SolidSmallButton, SolidSmallRoundButton, StatsCardComponent, StepperComponent, StorageService, SwipeCarouselComponent, TabbedContentComponent, TableSkeletonComponent, TabsComponent, Terminal404Component, TestimonialCardComponent, TestimonialCarouselComponent, TextComponent, TextInputComponent, TextareaInputComponent, ThemeOption, ThemeService, TicketGridComponent, TimelineComponent, TitleBlockComponent, TitleComponent, ToastService, ToggleInputComponent, TokenService, ToolbarActionType, ToolbarComponent, TranslatePipe, TypedCollection, UpdateBannerComponent, UsernameInputComponent, VALTECH_ADS_CONFIG, VALTECH_APP_CONFIG, VALTECH_AUTH_CONFIG, VALTECH_COMPANY_LINKS, VALTECH_DEFAULT_CONTENT, VALTECH_FEEDBACK_CONFIG, VALTECH_FIREBASE_CONFIG, VALTECH_FOOTER_I18N, VALTECH_FOOTER_LOGO, VALTECH_LANGUAGE_SELECTOR, VALTECH_SOCIAL_LINKS, WELCOME_CARD_DEFAULTS, WelcomeCardComponent, WinnerDisplayComponent, WizardComponent, WizardFooterComponent, applyDefaultValueToControl, authGuard, authInterceptor, buildFooterLinks, buildPath, collections, createFirebaseConfig, createGlowCardProps, createInitialPaginationState, createNumberFromToField, createTitleProps, extractPathParams, getAppInfo, getAppVersion, getCollectionPath, getDocumentId, goToTop, guestGuard, hasEmulators, isAtEnd, isCollectionPath, isDocumentPath, isEmulatorMode, isValidPath, joinPath, maxLength, permissionGuard, permissionGuardFromRoute, provideValtechAds, provideValtechAppConfig, provideValtechAuth, provideValtechAuthInterceptor, provideValtechFeedback, provideValtechFirebase, provideValtechI18n, provideValtechPresets, provideValtechSkeleton, query, replaceSpecialChars, resolveColor, resolveInputDefaultValue, roleGuard, storagePaths, superAdminGuard };
40825
41224
  //# sourceMappingURL=valtech-components.mjs.map