valtech-components 2.0.824 → 2.0.826

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.
@@ -53,7 +53,7 @@ import 'prismjs/components/prism-json';
53
53
  * Current version of valtech-components.
54
54
  * This is automatically updated during the publish process.
55
55
  */
56
- const VERSION = '2.0.824';
56
+ const VERSION = '2.0.826';
57
57
 
58
58
  /**
59
59
  * Servicio para gestionar presets de componentes.
@@ -4776,9 +4776,7 @@ class QrCodeComponent {
4776
4776
  }
4777
4777
  async onDownload() {
4778
4778
  try {
4779
- const options = this.props.downloadFilename
4780
- ? { filename: this.props.downloadFilename }
4781
- : undefined;
4779
+ const options = this.props.downloadFilename ? { filename: this.props.downloadFilename } : undefined;
4782
4780
  await this.qrService.download(this.props.qr, options);
4783
4781
  this.actionComplete.emit({
4784
4782
  action: 'download',
@@ -4860,12 +4858,16 @@ class QrCodeComponent {
4860
4858
  >
4861
4859
  @if (props.loading) {
4862
4860
  <div class="loading-overlay">
4863
- <ion-spinner name="crescent"></ion-spinner>
4861
+ <ion-spinner name="circular"></ion-spinner>
4864
4862
  </div>
4865
4863
  }
4866
4864
 
4867
4865
  @if (props.label && props.label.position === 'top') {
4868
- <div class="qr-label qr-label--top" [style.--label-color]="props.label.color || 'inherit'" [style.--label-size]="getLabelFontSize()">
4866
+ <div
4867
+ class="qr-label qr-label--top"
4868
+ [style.--label-color]="props.label.color || 'inherit'"
4869
+ [style.--label-size]="getLabelFontSize()"
4870
+ >
4869
4871
  @if (props.label.icon && props.label.iconPosition !== 'end') {
4870
4872
  <ion-icon [name]="props.label.icon"></ion-icon>
4871
4873
  }
@@ -4887,7 +4889,11 @@ class QrCodeComponent {
4887
4889
  </div>
4888
4890
 
4889
4891
  @if (props.label && props.label.position !== 'top') {
4890
- <div class="qr-label qr-label--bottom" [style.--label-color]="props.label.color || 'inherit'" [style.--label-size]="getLabelFontSize()">
4892
+ <div
4893
+ class="qr-label qr-label--bottom"
4894
+ [style.--label-color]="props.label.color || 'inherit'"
4895
+ [style.--label-size]="getLabelFontSize()"
4896
+ >
4891
4897
  @if (props.label.icon && props.label.iconPosition !== 'end') {
4892
4898
  <ion-icon [name]="props.label.icon"></ion-icon>
4893
4899
  }
@@ -4901,34 +4907,19 @@ class QrCodeComponent {
4901
4907
  @if (hasActions()) {
4902
4908
  <div class="qr-actions">
4903
4909
  @if (props.showDownload) {
4904
- <ion-button
4905
- fill="clear"
4906
- size="small"
4907
- (click)="onDownload()"
4908
- [title]="getDownloadLabel()"
4909
- >
4910
+ <ion-button fill="clear" size="small" (click)="onDownload()" [title]="getDownloadLabel()">
4910
4911
  <ion-icon name="download-outline" slot="icon-only"></ion-icon>
4911
4912
  </ion-button>
4912
4913
  }
4913
4914
 
4914
4915
  @if (props.showCopy && canCopy) {
4915
- <ion-button
4916
- fill="clear"
4917
- size="small"
4918
- (click)="onCopy()"
4919
- [title]="getCopyLabel()"
4920
- >
4916
+ <ion-button fill="clear" size="small" (click)="onCopy()" [title]="getCopyLabel()">
4921
4917
  <ion-icon name="copy-outline" slot="icon-only"></ion-icon>
4922
4918
  </ion-button>
4923
4919
  }
4924
4920
 
4925
4921
  @if (props.showShare && canShare) {
4926
- <ion-button
4927
- fill="clear"
4928
- size="small"
4929
- (click)="onShare()"
4930
- [title]="getShareLabel()"
4931
- >
4922
+ <ion-button fill="clear" size="small" (click)="onShare()" [title]="getShareLabel()">
4932
4923
  <ion-icon name="share-outline" slot="icon-only"></ion-icon>
4933
4924
  </ion-button>
4934
4925
  }
@@ -4953,12 +4944,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
4953
4944
  >
4954
4945
  @if (props.loading) {
4955
4946
  <div class="loading-overlay">
4956
- <ion-spinner name="crescent"></ion-spinner>
4947
+ <ion-spinner name="circular"></ion-spinner>
4957
4948
  </div>
4958
4949
  }
4959
4950
 
4960
4951
  @if (props.label && props.label.position === 'top') {
4961
- <div class="qr-label qr-label--top" [style.--label-color]="props.label.color || 'inherit'" [style.--label-size]="getLabelFontSize()">
4952
+ <div
4953
+ class="qr-label qr-label--top"
4954
+ [style.--label-color]="props.label.color || 'inherit'"
4955
+ [style.--label-size]="getLabelFontSize()"
4956
+ >
4962
4957
  @if (props.label.icon && props.label.iconPosition !== 'end') {
4963
4958
  <ion-icon [name]="props.label.icon"></ion-icon>
4964
4959
  }
@@ -4980,7 +4975,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
4980
4975
  </div>
4981
4976
 
4982
4977
  @if (props.label && props.label.position !== 'top') {
4983
- <div class="qr-label qr-label--bottom" [style.--label-color]="props.label.color || 'inherit'" [style.--label-size]="getLabelFontSize()">
4978
+ <div
4979
+ class="qr-label qr-label--bottom"
4980
+ [style.--label-color]="props.label.color || 'inherit'"
4981
+ [style.--label-size]="getLabelFontSize()"
4982
+ >
4984
4983
  @if (props.label.icon && props.label.iconPosition !== 'end') {
4985
4984
  <ion-icon [name]="props.label.icon"></ion-icon>
4986
4985
  }
@@ -4994,34 +4993,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
4994
4993
  @if (hasActions()) {
4995
4994
  <div class="qr-actions">
4996
4995
  @if (props.showDownload) {
4997
- <ion-button
4998
- fill="clear"
4999
- size="small"
5000
- (click)="onDownload()"
5001
- [title]="getDownloadLabel()"
5002
- >
4996
+ <ion-button fill="clear" size="small" (click)="onDownload()" [title]="getDownloadLabel()">
5003
4997
  <ion-icon name="download-outline" slot="icon-only"></ion-icon>
5004
4998
  </ion-button>
5005
4999
  }
5006
5000
 
5007
5001
  @if (props.showCopy && canCopy) {
5008
- <ion-button
5009
- fill="clear"
5010
- size="small"
5011
- (click)="onCopy()"
5012
- [title]="getCopyLabel()"
5013
- >
5002
+ <ion-button fill="clear" size="small" (click)="onCopy()" [title]="getCopyLabel()">
5014
5003
  <ion-icon name="copy-outline" slot="icon-only"></ion-icon>
5015
5004
  </ion-button>
5016
5005
  }
5017
5006
 
5018
5007
  @if (props.showShare && canShare) {
5019
- <ion-button
5020
- fill="clear"
5021
- size="small"
5022
- (click)="onShare()"
5023
- [title]="getShareLabel()"
5024
- >
5008
+ <ion-button fill="clear" size="small" (click)="onShare()" [title]="getShareLabel()">
5025
5009
  <ion-icon name="share-outline" slot="icon-only"></ion-icon>
5026
5010
  </ion-button>
5027
5011
  }
@@ -17387,7 +17371,7 @@ const DEFAULT_REFRESHER_METADATA = {
17387
17371
  pullFactor: 0.5,
17388
17372
  snapbackDuration: 280,
17389
17373
  closeDuration: 280,
17390
- spinnerType: 'crescent',
17374
+ spinnerType: 'circular',
17391
17375
  hapticFeedback: true,
17392
17376
  webMode: false,
17393
17377
  };
@@ -17568,7 +17552,7 @@ class RefresherComponent {
17568
17552
  } @else {
17569
17553
  <!-- Default Ionic refresher content -->
17570
17554
  <ion-refresher-content
17571
- [pullingIcon]="mergedProps.spinnerType === 'crescent' ? 'chevron-down-circle-outline' : undefined"
17555
+ pullingIcon="chevron-down-circle-outline"
17572
17556
  [pullingText]="mergedProps.pullingText"
17573
17557
  [refreshingSpinner]="mergedProps.spinnerType"
17574
17558
  [refreshingText]="mergedProps.refreshingText"
@@ -17626,7 +17610,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
17626
17610
  } @else {
17627
17611
  <!-- Default Ionic refresher content -->
17628
17612
  <ion-refresher-content
17629
- [pullingIcon]="mergedProps.spinnerType === 'crescent' ? 'chevron-down-circle-outline' : undefined"
17613
+ pullingIcon="chevron-down-circle-outline"
17630
17614
  [pullingText]="mergedProps.pullingText"
17631
17615
  [refreshingSpinner]="mergedProps.spinnerType"
17632
17616
  [refreshingText]="mergedProps.refreshingText"
@@ -25854,7 +25838,7 @@ class UsernameInputComponent {
25854
25838
  <span slot="end" class="availability-indicator">
25855
25839
  @switch (availabilityStatus()) {
25856
25840
  @case ('checking') {
25857
- <ion-spinner name="crescent" class="checking-spinner" />
25841
+ <ion-spinner name="circular" class="checking-spinner" />
25858
25842
  }
25859
25843
  @case ('available') {
25860
25844
  <ion-icon name="checkmark-circle" class="status-icon available" />
@@ -25915,7 +25899,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
25915
25899
  <span slot="end" class="availability-indicator">
25916
25900
  @switch (availabilityStatus()) {
25917
25901
  @case ('checking') {
25918
- <ion-spinner name="crescent" class="checking-spinner" />
25902
+ <ion-spinner name="circular" class="checking-spinner" />
25919
25903
  }
25920
25904
  @case ('available') {
25921
25905
  <ion-icon name="checkmark-circle" class="status-icon available" />
@@ -29231,13 +29215,13 @@ class CommentSectionComponent {
29231
29215
  }
29232
29216
  getSkeletonArray() {
29233
29217
  const count = this.props.skeletonCount || 3;
29234
- return Array(count).fill(0).map((_, i) => i);
29218
+ return Array(count)
29219
+ .fill(0)
29220
+ .map((_, i) => i);
29235
29221
  }
29236
29222
  canSubmit() {
29237
29223
  const minLength = this.props.inputConfig?.minLength || 1;
29238
- return (this.newCommentText.trim().length >= minLength &&
29239
- !this.props.loading &&
29240
- !this.props.inputConfig?.disabled);
29224
+ return this.newCommentText.trim().length >= minLength && !this.props.loading && !this.props.inputConfig?.disabled;
29241
29225
  }
29242
29226
  isNearLimit() {
29243
29227
  const maxLength = this.props.inputConfig?.maxLength || 2000;
@@ -29245,7 +29229,7 @@ class CommentSectionComponent {
29245
29229
  }
29246
29230
  onSortChange(event) {
29247
29231
  const selectedToken = event.detail.value;
29248
- const option = this.props.sortOptions?.find((o) => o.token === selectedToken);
29232
+ const option = this.props.sortOptions?.find(o => o.token === selectedToken);
29249
29233
  if (option) {
29250
29234
  this.sortChange.emit({
29251
29235
  option,
@@ -29414,14 +29398,9 @@ class CommentSectionComponent {
29414
29398
  @if (props.hasMore && props.paginationMode !== 'infinite') {
29415
29399
  <div class="load-more-section">
29416
29400
  @if (props.loadingMore) {
29417
- <ion-spinner name="crescent" [color]="props.color || 'primary'"></ion-spinner>
29401
+ <ion-spinner name="circular" [color]="props.color || 'primary'"></ion-spinner>
29418
29402
  } @else {
29419
- <ion-button
29420
- fill="outline"
29421
- [color]="props.color || 'primary'"
29422
- expand="block"
29423
- (click)="onLoadMore()"
29424
- >
29403
+ <ion-button fill="outline" [color]="props.color || 'primary'" expand="block" (click)="onLoadMore()">
29425
29404
  {{ displayLoadMoreLabel }}
29426
29405
  </ion-button>
29427
29406
  }
@@ -29444,10 +29423,7 @@ class CommentSectionComponent {
29444
29423
  }
29445
29424
  } @else {
29446
29425
  <div class="empty-state">
29447
- <ion-icon
29448
- [name]="props.emptyState?.icon || 'chatbubble-ellipses-outline'"
29449
- class="empty-icon"
29450
- ></ion-icon>
29426
+ <ion-icon [name]="props.emptyState?.icon || 'chatbubble-ellipses-outline'" class="empty-icon"></ion-icon>
29451
29427
  <h4 class="empty-title">{{ getEmptyTitle() }}</h4>
29452
29428
  <p class="empty-message">{{ getEmptyMessage() }}</p>
29453
29429
  </div>
@@ -29584,14 +29560,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
29584
29560
  @if (props.hasMore && props.paginationMode !== 'infinite') {
29585
29561
  <div class="load-more-section">
29586
29562
  @if (props.loadingMore) {
29587
- <ion-spinner name="crescent" [color]="props.color || 'primary'"></ion-spinner>
29563
+ <ion-spinner name="circular" [color]="props.color || 'primary'"></ion-spinner>
29588
29564
  } @else {
29589
- <ion-button
29590
- fill="outline"
29591
- [color]="props.color || 'primary'"
29592
- expand="block"
29593
- (click)="onLoadMore()"
29594
- >
29565
+ <ion-button fill="outline" [color]="props.color || 'primary'" expand="block" (click)="onLoadMore()">
29595
29566
  {{ displayLoadMoreLabel }}
29596
29567
  </ion-button>
29597
29568
  }
@@ -29614,10 +29585,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
29614
29585
  }
29615
29586
  } @else {
29616
29587
  <div class="empty-state">
29617
- <ion-icon
29618
- [name]="props.emptyState?.icon || 'chatbubble-ellipses-outline'"
29619
- class="empty-icon"
29620
- ></ion-icon>
29588
+ <ion-icon [name]="props.emptyState?.icon || 'chatbubble-ellipses-outline'" class="empty-icon"></ion-icon>
29621
29589
  <h4 class="empty-title">{{ getEmptyTitle() }}</h4>
29622
29590
  <p class="empty-message">{{ getEmptyMessage() }}</p>
29623
29591
  </div>
@@ -30057,7 +30025,7 @@ class DataTableComponent {
30057
30025
  <!-- Loading overlay -->
30058
30026
  @if (props.loadingState?.loading) {
30059
30027
  <div class="loading-overlay">
30060
- <ion-spinner name="crescent"></ion-spinner>
30028
+ <ion-spinner name="circular"></ion-spinner>
30061
30029
  @if (props.loadingState?.message) {
30062
30030
  <span class="loading-message">{{ props.loadingState.message }}</span>
30063
30031
  }
@@ -30065,12 +30033,13 @@ class DataTableComponent {
30065
30033
  }
30066
30034
 
30067
30035
  <div class="table-wrapper" [class.is-loading]="props.loadingState?.loading">
30068
- <table
30069
- role="grid"
30070
- [attr.aria-label]="props.ariaLabel"
30071
- >
30036
+ <table role="grid" [attr.aria-label]="props.ariaLabel">
30072
30037
  @if (props.caption) {
30073
- <caption class="sr-only">{{ props.caption }}</caption>
30038
+ <caption class="sr-only">
30039
+ {{
30040
+ props.caption
30041
+ }}
30042
+ </caption>
30074
30043
  }
30075
30044
 
30076
30045
  <thead>
@@ -30191,12 +30160,14 @@ class DataTableComponent {
30191
30160
 
30192
30161
  <!-- Data cells -->
30193
30162
  @for (column of visibleColumns; track column.key) {
30194
- <td
30195
- [class]="getColumnClass(column)"
30196
- [style.text-align]="column.align"
30197
- >
30163
+ <td [class]="getColumnClass(column)" [style.text-align]="column.align">
30198
30164
  @if (column.cellTemplate) {
30199
- <ng-container *ngTemplateOutlet="column.cellTemplate; context: { row, column, value: getCellValue(row, column) }"></ng-container>
30165
+ <ng-container
30166
+ *ngTemplateOutlet="
30167
+ column.cellTemplate;
30168
+ context: { row, column, value: getCellValue(row, column) }
30169
+ "
30170
+ ></ng-container>
30200
30171
  } @else {
30201
30172
  {{ getFormattedValue(row, column) }}
30202
30173
  }
@@ -30206,7 +30177,9 @@ class DataTableComponent {
30206
30177
  <!-- Actions cell -->
30207
30178
  @if (props.actionsTemplate) {
30208
30179
  <td class="actions-cell">
30209
- <ng-container *ngTemplateOutlet="props.actionsTemplate; context: { row, index: i }"></ng-container>
30180
+ <ng-container
30181
+ *ngTemplateOutlet="props.actionsTemplate; context: { row, index: i }"
30182
+ ></ng-container>
30210
30183
  </td>
30211
30184
  }
30212
30185
  </tr>
@@ -30234,7 +30207,9 @@ class DataTableComponent {
30234
30207
  } @else {
30235
30208
  @for (row of displayedData; track trackByFn(row); let i = $index) {
30236
30209
  @if (props.mobileCardTemplate) {
30237
- <ng-container *ngTemplateOutlet="props.mobileCardTemplate; context: { row, index: i, columns: visibleColumns }"></ng-container>
30210
+ <ng-container
30211
+ *ngTemplateOutlet="props.mobileCardTemplate; context: { row, index: i, columns: visibleColumns }"
30212
+ ></ng-container>
30238
30213
  } @else {
30239
30214
  <div
30240
30215
  class="data-card"
@@ -30273,7 +30248,12 @@ class DataTableComponent {
30273
30248
  <span class="card-field__label">{{ column.label }}</span>
30274
30249
  <span class="card-field__value">
30275
30250
  @if (column.cellTemplate) {
30276
- <ng-container *ngTemplateOutlet="column.cellTemplate; context: { row, column, value: getCellValue(row, column) }"></ng-container>
30251
+ <ng-container
30252
+ *ngTemplateOutlet="
30253
+ column.cellTemplate;
30254
+ context: { row, column, value: getCellValue(row, column) }
30255
+ "
30256
+ ></ng-container>
30277
30257
  } @else {
30278
30258
  {{ getFormattedValue(row, column) }}
30279
30259
  }
@@ -30285,7 +30265,9 @@ class DataTableComponent {
30285
30265
  <!-- Card actions -->
30286
30266
  @if (props.actionsTemplate) {
30287
30267
  <div class="card-actions">
30288
- <ng-container *ngTemplateOutlet="props.actionsTemplate; context: { row, index: i }"></ng-container>
30268
+ <ng-container
30269
+ *ngTemplateOutlet="props.actionsTemplate; context: { row, index: i }"
30270
+ ></ng-container>
30289
30271
  </div>
30290
30272
  }
30291
30273
  </div>
@@ -30339,9 +30321,7 @@ class DataTableComponent {
30339
30321
  <ion-icon slot="icon-only" name="chevron-back-outline"></ion-icon>
30340
30322
  </ion-button>
30341
30323
 
30342
- <span class="page-indicator">
30343
- {{ props.pagination.page + 1 }} / {{ totalPages }}
30344
- </span>
30324
+ <span class="page-indicator"> {{ props.pagination.page + 1 }} / {{ totalPages }} </span>
30345
30325
 
30346
30326
  <ion-button
30347
30327
  fill="clear"
@@ -30371,16 +30351,7 @@ class DataTableComponent {
30371
30351
  }
30372
30352
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DataTableComponent, decorators: [{
30373
30353
  type: Component,
30374
- args: [{ selector: 'val-data-table', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
30375
- CommonModule,
30376
- FormsModule,
30377
- IonButton,
30378
- IonIcon,
30379
- IonCheckbox,
30380
- IonSpinner,
30381
- IonSelect,
30382
- IonSelectOption,
30383
- ], template: `
30354
+ args: [{ selector: 'val-data-table', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, FormsModule, IonButton, IonIcon, IonCheckbox, IonSpinner, IonSelect, IonSelectOption], template: `
30384
30355
  <div
30385
30356
  class="data-table-container"
30386
30357
  [class]="props.cssClass"
@@ -30409,7 +30380,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
30409
30380
  <!-- Loading overlay -->
30410
30381
  @if (props.loadingState?.loading) {
30411
30382
  <div class="loading-overlay">
30412
- <ion-spinner name="crescent"></ion-spinner>
30383
+ <ion-spinner name="circular"></ion-spinner>
30413
30384
  @if (props.loadingState?.message) {
30414
30385
  <span class="loading-message">{{ props.loadingState.message }}</span>
30415
30386
  }
@@ -30417,12 +30388,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
30417
30388
  }
30418
30389
 
30419
30390
  <div class="table-wrapper" [class.is-loading]="props.loadingState?.loading">
30420
- <table
30421
- role="grid"
30422
- [attr.aria-label]="props.ariaLabel"
30423
- >
30391
+ <table role="grid" [attr.aria-label]="props.ariaLabel">
30424
30392
  @if (props.caption) {
30425
- <caption class="sr-only">{{ props.caption }}</caption>
30393
+ <caption class="sr-only">
30394
+ {{
30395
+ props.caption
30396
+ }}
30397
+ </caption>
30426
30398
  }
30427
30399
 
30428
30400
  <thead>
@@ -30543,12 +30515,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
30543
30515
 
30544
30516
  <!-- Data cells -->
30545
30517
  @for (column of visibleColumns; track column.key) {
30546
- <td
30547
- [class]="getColumnClass(column)"
30548
- [style.text-align]="column.align"
30549
- >
30518
+ <td [class]="getColumnClass(column)" [style.text-align]="column.align">
30550
30519
  @if (column.cellTemplate) {
30551
- <ng-container *ngTemplateOutlet="column.cellTemplate; context: { row, column, value: getCellValue(row, column) }"></ng-container>
30520
+ <ng-container
30521
+ *ngTemplateOutlet="
30522
+ column.cellTemplate;
30523
+ context: { row, column, value: getCellValue(row, column) }
30524
+ "
30525
+ ></ng-container>
30552
30526
  } @else {
30553
30527
  {{ getFormattedValue(row, column) }}
30554
30528
  }
@@ -30558,7 +30532,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
30558
30532
  <!-- Actions cell -->
30559
30533
  @if (props.actionsTemplate) {
30560
30534
  <td class="actions-cell">
30561
- <ng-container *ngTemplateOutlet="props.actionsTemplate; context: { row, index: i }"></ng-container>
30535
+ <ng-container
30536
+ *ngTemplateOutlet="props.actionsTemplate; context: { row, index: i }"
30537
+ ></ng-container>
30562
30538
  </td>
30563
30539
  }
30564
30540
  </tr>
@@ -30586,7 +30562,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
30586
30562
  } @else {
30587
30563
  @for (row of displayedData; track trackByFn(row); let i = $index) {
30588
30564
  @if (props.mobileCardTemplate) {
30589
- <ng-container *ngTemplateOutlet="props.mobileCardTemplate; context: { row, index: i, columns: visibleColumns }"></ng-container>
30565
+ <ng-container
30566
+ *ngTemplateOutlet="props.mobileCardTemplate; context: { row, index: i, columns: visibleColumns }"
30567
+ ></ng-container>
30590
30568
  } @else {
30591
30569
  <div
30592
30570
  class="data-card"
@@ -30625,7 +30603,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
30625
30603
  <span class="card-field__label">{{ column.label }}</span>
30626
30604
  <span class="card-field__value">
30627
30605
  @if (column.cellTemplate) {
30628
- <ng-container *ngTemplateOutlet="column.cellTemplate; context: { row, column, value: getCellValue(row, column) }"></ng-container>
30606
+ <ng-container
30607
+ *ngTemplateOutlet="
30608
+ column.cellTemplate;
30609
+ context: { row, column, value: getCellValue(row, column) }
30610
+ "
30611
+ ></ng-container>
30629
30612
  } @else {
30630
30613
  {{ getFormattedValue(row, column) }}
30631
30614
  }
@@ -30637,7 +30620,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
30637
30620
  <!-- Card actions -->
30638
30621
  @if (props.actionsTemplate) {
30639
30622
  <div class="card-actions">
30640
- <ng-container *ngTemplateOutlet="props.actionsTemplate; context: { row, index: i }"></ng-container>
30623
+ <ng-container
30624
+ *ngTemplateOutlet="props.actionsTemplate; context: { row, index: i }"
30625
+ ></ng-container>
30641
30626
  </div>
30642
30627
  }
30643
30628
  </div>
@@ -30691,9 +30676,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
30691
30676
  <ion-icon slot="icon-only" name="chevron-back-outline"></ion-icon>
30692
30677
  </ion-button>
30693
30678
 
30694
- <span class="page-indicator">
30695
- {{ props.pagination.page + 1 }} / {{ totalPages }}
30696
- </span>
30679
+ <span class="page-indicator"> {{ props.pagination.page + 1 }} / {{ totalPages }} </span>
30697
30680
 
30698
30681
  <ion-button
30699
30682
  fill="clear"
@@ -31558,7 +31541,7 @@ const DEFAULT_INFINITE_LIST_METADATA = {
31558
31541
  threshold: '100px',
31559
31542
  debounceTime: 300,
31560
31543
  autoLoad: true,
31561
- spinnerType: 'crescent',
31544
+ spinnerType: 'circular',
31562
31545
  useLoadMoreButton: false,
31563
31546
  showDividers: false,
31564
31547
  enableRefresh: false,
@@ -35437,7 +35420,7 @@ class AvatarUploadComponent {
35437
35420
  <!-- Loading Overlay -->
35438
35421
  @if (loading()) {
35439
35422
  <div class="loading-overlay">
35440
- <ion-spinner name="crescent"></ion-spinner>
35423
+ <ion-spinner name="circular"></ion-spinner>
35441
35424
  </div>
35442
35425
  }
35443
35426
  </div>
@@ -35493,7 +35476,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
35493
35476
  <!-- Loading Overlay -->
35494
35477
  @if (loading()) {
35495
35478
  <div class="loading-overlay">
35496
- <ion-spinner name="crescent"></ion-spinner>
35479
+ <ion-spinner name="circular"></ion-spinner>
35497
35480
  </div>
35498
35481
  }
35499
35482
  </div>
@@ -37183,7 +37166,10 @@ class PageWrapperComponent {
37183
37166
  ion-content — por eso va aquí crudo, no envuelto en val-refresher. -->
37184
37167
  @if (pageRefresh.hasHandler()) {
37185
37168
  <ion-refresher slot="fixed" (ionRefresh)="onPageRefresh($event)">
37186
- <ion-refresher-content pullingIcon="chevron-down-circle-outline"></ion-refresher-content>
37169
+ <ion-refresher-content
37170
+ pullingIcon="chevron-down-circle-outline"
37171
+ refreshingSpinner="circular"
37172
+ ></ion-refresher-content>
37187
37173
  </ion-refresher>
37188
37174
  }
37189
37175
  <val-container [props]="{ size: contentMaxWidth() }">
@@ -37225,7 +37211,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
37225
37211
  ion-content — por eso va aquí crudo, no envuelto en val-refresher. -->
37226
37212
  @if (pageRefresh.hasHandler()) {
37227
37213
  <ion-refresher slot="fixed" (ionRefresh)="onPageRefresh($event)">
37228
- <ion-refresher-content pullingIcon="chevron-down-circle-outline"></ion-refresher-content>
37214
+ <ion-refresher-content
37215
+ pullingIcon="chevron-down-circle-outline"
37216
+ refreshingSpinner="circular"
37217
+ ></ion-refresher-content>
37229
37218
  </ion-refresher>
37230
37219
  }
37231
37220
  <val-container [props]="{ size: contentMaxWidth() }">
@@ -37712,7 +37701,7 @@ class SimpleModalContentComponent {
37712
37701
  (click)="onButtonClick(button)"
37713
37702
  >
37714
37703
  @if (button.loading) {
37715
- <ion-spinner name="crescent"></ion-spinner>
37704
+ <ion-spinner name="circular"></ion-spinner>
37716
37705
  } @else {
37717
37706
  {{ button.text }}
37718
37707
  }
@@ -37726,7 +37715,18 @@ class SimpleModalContentComponent {
37726
37715
  }
37727
37716
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SimpleModalContentComponent, decorators: [{
37728
37717
  type: Component,
37729
- args: [{ selector: 'val-simple-modal-content', standalone: true, imports: [CommonModule, IonHeader, IonToolbar, IonTitle, IonButtons, IonButton, IonIcon, IonContent, IonFooter, IonSpinner], template: `
37718
+ args: [{ selector: 'val-simple-modal-content', standalone: true, imports: [
37719
+ CommonModule,
37720
+ IonHeader,
37721
+ IonToolbar,
37722
+ IonTitle,
37723
+ IonButtons,
37724
+ IonButton,
37725
+ IonIcon,
37726
+ IonContent,
37727
+ IonFooter,
37728
+ IonSpinner,
37729
+ ], template: `
37730
37730
  <ion-header>
37731
37731
  <ion-toolbar>
37732
37732
  <ion-title>{{ title }}</ion-title>
@@ -37758,7 +37758,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
37758
37758
  (click)="onButtonClick(button)"
37759
37759
  >
37760
37760
  @if (button.loading) {
37761
- <ion-spinner name="crescent"></ion-spinner>
37761
+ <ion-spinner name="circular"></ion-spinner>
37762
37762
  } @else {
37763
37763
  {{ button.text }}
37764
37764
  }
@@ -38854,7 +38854,7 @@ class LoadingDirective {
38854
38854
  const element = document.createElement('div');
38855
38855
  element.className = 'val-loading-spinner';
38856
38856
  element.innerHTML = `
38857
- <ion-spinner name="crescent"></ion-spinner>
38857
+ <ion-spinner name="circular"></ion-spinner>
38858
38858
  `;
38859
38859
  element.style.cssText = 'display: flex; justify-content: center; padding: 20px;';
38860
38860
  const hostElement = this.viewContainer.element.nativeElement;
@@ -38864,8 +38864,7 @@ class LoadingDirective {
38864
38864
  // Fallback simple si no hay template registrado
38865
38865
  const element = document.createElement('div');
38866
38866
  element.className = 'val-loading-fallback';
38867
- element.style.cssText =
38868
- 'display: flex; flex-direction: column; gap: 12px; padding: 16px;';
38867
+ element.style.cssText = 'display: flex; flex-direction: column; gap: 12px; padding: 16px;';
38869
38868
  for (let i = 0; i < this.count; i++) {
38870
38869
  const skeleton = document.createElement('div');
38871
38870
  skeleton.style.cssText = `
@@ -42638,7 +42637,7 @@ class FeedbackFormComponent {
42638
42637
  ngOnInit() {
42639
42638
  // Filtrar tipos habilitados si se especifica
42640
42639
  if (this.props.enabledTypes?.length) {
42641
- this.typeOptions = this.typeOptions.filter((opt) => this.props.enabledTypes.includes(opt.value));
42640
+ this.typeOptions = this.typeOptions.filter(opt => this.props.enabledTypes.includes(opt.value));
42642
42641
  }
42643
42642
  // Usar opciones personalizadas si se proporcionan
42644
42643
  if (this.props.typeOptions?.length) {
@@ -42647,14 +42646,8 @@ class FeedbackFormComponent {
42647
42646
  // Inicializar formulario
42648
42647
  this.form = this.fb.group({
42649
42648
  type: [this.props.defaultType || 'feedback', Validators.required],
42650
- title: [
42651
- '',
42652
- [Validators.required, Validators.minLength(5), Validators.maxLength(200)],
42653
- ],
42654
- description: [
42655
- '',
42656
- [Validators.required, Validators.minLength(10), Validators.maxLength(5000)],
42657
- ],
42649
+ title: ['', [Validators.required, Validators.minLength(5), Validators.maxLength(200)]],
42650
+ description: ['', [Validators.required, Validators.minLength(10), Validators.maxLength(5000)]],
42658
42651
  });
42659
42652
  }
42660
42653
  async handleSubmit() {
@@ -42769,22 +42762,13 @@ class FeedbackFormComponent {
42769
42762
  <!-- Actions -->
42770
42763
  <div class="form-actions">
42771
42764
  @if (props.cancelButtonText) {
42772
- <ion-button
42773
- fill="outline"
42774
- color="medium"
42775
- type="button"
42776
- (click)="onCancelClick()"
42777
- >
42765
+ <ion-button fill="outline" color="medium" type="button" (click)="onCancelClick()">
42778
42766
  {{ props.cancelButtonText }}
42779
42767
  </ion-button>
42780
42768
  }
42781
- <ion-button
42782
- type="submit"
42783
- [disabled]="form.invalid || isSubmitting()"
42784
- expand="block"
42785
- >
42769
+ <ion-button type="submit" [disabled]="form.invalid || isSubmitting()" expand="block">
42786
42770
  @if (isSubmitting()) {
42787
- <ion-spinner name="crescent"></ion-spinner>
42771
+ <ion-spinner name="circular"></ion-spinner>
42788
42772
  } @else {
42789
42773
  {{ props.submitButtonText || i18n.t('submit') }}
42790
42774
  }
@@ -42892,22 +42876,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
42892
42876
  <!-- Actions -->
42893
42877
  <div class="form-actions">
42894
42878
  @if (props.cancelButtonText) {
42895
- <ion-button
42896
- fill="outline"
42897
- color="medium"
42898
- type="button"
42899
- (click)="onCancelClick()"
42900
- >
42879
+ <ion-button fill="outline" color="medium" type="button" (click)="onCancelClick()">
42901
42880
  {{ props.cancelButtonText }}
42902
42881
  </ion-button>
42903
42882
  }
42904
- <ion-button
42905
- type="submit"
42906
- [disabled]="form.invalid || isSubmitting()"
42907
- expand="block"
42908
- >
42883
+ <ion-button type="submit" [disabled]="form.invalid || isSubmitting()" expand="block">
42909
42884
  @if (isSubmitting()) {
42910
- <ion-spinner name="crescent"></ion-spinner>
42885
+ <ion-spinner name="circular"></ion-spinner>
42911
42886
  } @else {
42912
42887
  {{ props.submitButtonText || i18n.t('submit') }}
42913
42888
  }