valtech-components 2.0.564 → 2.0.566

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.
@@ -5213,28 +5213,67 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
5213
5213
  * val-alert-box
5214
5214
  *
5215
5215
  * Displays an alert box with an icon and text, using a styled box container.
5216
+ * Supports presets for reusable configurations.
5216
5217
  *
5217
- * @example
5218
+ * @example With preset (recommended):
5219
+ * <val-alert-box preset="warning" [props]="{ text: 'Advertencia!' }"></val-alert-box>
5220
+ *
5221
+ * @example Static (backwards compatible):
5218
5222
  * <val-alert-box [props]="{ box: {...}, icon: {...}, text: { content: 'Alerta' } }"></val-alert-box>
5219
5223
  *
5220
- * @input props: AlertBoxMetadata | ReactiveAlertBoxMetadata - Configuration for the alert box
5224
+ * @input preset: string - Name of preset to apply (e.g., 'info', 'success', 'warning', 'error')
5225
+ * @input props: AlertBoxMetadata | ReactiveAlertBoxMetadata - Configuration for the alert box (overrides preset values)
5221
5226
  */
5222
5227
  class AlertBoxComponent {
5228
+ constructor() {
5229
+ this.presets = inject(PresetService);
5230
+ /**
5231
+ * Alert box configuration object. Values here override preset values.
5232
+ * Supports both legacy AlertBoxMetadata and ReactiveAlertBoxMetadata patterns.
5233
+ */
5234
+ this.props = {};
5235
+ /**
5236
+ * Resolved props after merging preset + explicit props.
5237
+ */
5238
+ this.resolvedProps = {};
5239
+ }
5223
5240
  /** Whether this is using the legacy props pattern */
5224
5241
  get isLegacyProps() {
5225
- return 'text' in this.props && typeof this.props.text === 'object';
5242
+ return 'text' in this.resolvedProps && typeof this.resolvedProps.text === 'object';
5226
5243
  }
5227
5244
  /** Get text props for legacy pattern */
5228
5245
  getLegacyTextProps() {
5229
- return this.props.text;
5246
+ return this.resolvedProps.text;
5230
5247
  }
5231
5248
  ngOnInit() {
5249
+ this.resolveProps();
5232
5250
  if (!this.isLegacyProps) {
5233
5251
  this.initializeTextProps();
5234
5252
  }
5235
5253
  }
5254
+ ngOnChanges(changes) {
5255
+ if (changes['preset'] || changes['props']) {
5256
+ this.resolveProps();
5257
+ if (!this.isLegacyProps) {
5258
+ this.initializeTextProps();
5259
+ }
5260
+ }
5261
+ }
5262
+ /**
5263
+ * Merge preset configuration with explicit props.
5264
+ * Explicit props take precedence over preset values.
5265
+ */
5266
+ resolveProps() {
5267
+ const presetProps = this.preset
5268
+ ? this.presets.get('alertBox', this.preset)
5269
+ : {};
5270
+ this.resolvedProps = {
5271
+ ...presetProps,
5272
+ ...this.props,
5273
+ };
5274
+ }
5236
5275
  initializeTextProps() {
5237
- const reactiveProps = this.props;
5276
+ const reactiveProps = this.resolvedProps;
5238
5277
  // Base text properties with styling
5239
5278
  this.computedTextProps = {
5240
5279
  size: reactiveProps.textStyle?.size || 'medium',
@@ -5247,10 +5286,10 @@ class AlertBoxComponent {
5247
5286
  }
5248
5287
  }
5249
5288
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlertBoxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5250
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AlertBoxComponent, isStandalone: true, selector: "val-alert-box", inputs: { props: "props" }, ngImport: i0, template: `
5251
- <val-box [props]="props.box">
5289
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AlertBoxComponent, isStandalone: true, selector: "val-alert-box", inputs: { preset: "preset", props: "props" }, usesOnChanges: true, ngImport: i0, template: `
5290
+ <val-box [props]="resolvedProps.box">
5252
5291
  <div class="content-container" body>
5253
- <val-icon [props]="props.icon"></val-icon>
5292
+ <val-icon [props]="resolvedProps.icon"></val-icon>
5254
5293
  <!-- Support both legacy and reactive patterns -->
5255
5294
  @if (isLegacyProps) {
5256
5295
  <val-text class="text" [props]="getLegacyTextProps()" />
@@ -5264,9 +5303,9 @@ class AlertBoxComponent {
5264
5303
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlertBoxComponent, decorators: [{
5265
5304
  type: Component,
5266
5305
  args: [{ selector: 'val-alert-box', standalone: true, imports: [CommonModule, BoxComponent, IconComponent, TextComponent], template: `
5267
- <val-box [props]="props.box">
5306
+ <val-box [props]="resolvedProps.box">
5268
5307
  <div class="content-container" body>
5269
- <val-icon [props]="props.icon"></val-icon>
5308
+ <val-icon [props]="resolvedProps.icon"></val-icon>
5270
5309
  <!-- Support both legacy and reactive patterns -->
5271
5310
  @if (isLegacyProps) {
5272
5311
  <val-text class="text" [props]="getLegacyTextProps()" />
@@ -5276,7 +5315,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
5276
5315
  </div>
5277
5316
  </val-box>
5278
5317
  `, styles: [":root{--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}@media (prefers-color-scheme: dark){:root{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.text{margin-left:.25rem}.content-container{display:flex;align-items:flex-start}\n"] }]
5279
- }], propDecorators: { props: [{
5318
+ }], propDecorators: { preset: [{
5319
+ type: Input
5320
+ }], props: [{
5280
5321
  type: Input
5281
5322
  }] } });
5282
5323
 
@@ -5358,15 +5399,37 @@ var CardSection;
5358
5399
  * val-card
5359
5400
  *
5360
5401
  * A flexible card component supporting images, titles, content, actions, and custom sections.
5402
+ * Supports presets for reusable configurations.
5361
5403
  *
5362
- * @example
5363
- * <val-card [props]="{ type: 'native', title: 'Card', image: 'url', content: '...', actions: [...] }" (onClick)="handler($event)"></val-card>
5404
+ * @example With preset (recommended):
5405
+ * <val-card preset="feature" [props]="{ title: 'Card', image: 'url', content: '...' }" (onClick)="handler($event)"></val-card>
5364
5406
  *
5365
- * @input props: CardMetadata - Configuration for the card (type, title, image, content, actions, etc.)
5407
+ * @example Static (backwards compatible):
5408
+ * <val-card [props]="{ type: 'native', title: 'Card', image: 'url', content: '...' }" (onClick)="handler($event)"></val-card>
5409
+ *
5410
+ * @input preset: string - Name of preset to apply (e.g., 'feature', 'compact')
5411
+ * @input props: CardMetadata - Configuration for the card (overrides preset values)
5366
5412
  * @output onClick - Emits a CardClickEvent when the card or an action is clicked
5367
5413
  */
5368
5414
  class CardComponent {
5369
5415
  constructor() {
5416
+ this.presets = inject(PresetService);
5417
+ /**
5418
+ * Card configuration object. Values here override preset values.
5419
+ * @type {CardMetadata}
5420
+ * @property type - The card type (see CardType).
5421
+ * @property title - The card title.
5422
+ * @property image - The card image URL.
5423
+ * @property content - The card content.
5424
+ * @property actions - Array of action buttons (optional).
5425
+ * @property sections - Custom card sections (optional).
5426
+ * @property overtitle - Subtitle or overtitle (optional).
5427
+ */
5428
+ this.props = {};
5429
+ /**
5430
+ * Resolved props after merging preset + explicit props.
5431
+ */
5432
+ this.resolvedProps = {};
5370
5433
  /**
5371
5434
  * Event emitted when the card or an action is clicked.
5372
5435
  */
@@ -5375,64 +5438,82 @@ class CardComponent {
5375
5438
  this.actionTypes = ToolbarActionType;
5376
5439
  this.sections = CardSection;
5377
5440
  }
5378
- ngOnInit() { }
5441
+ ngOnInit() {
5442
+ this.resolveProps();
5443
+ }
5444
+ ngOnChanges(changes) {
5445
+ if (changes['preset'] || changes['props']) {
5446
+ this.resolveProps();
5447
+ }
5448
+ }
5449
+ /**
5450
+ * Merge preset configuration with explicit props.
5451
+ * Explicit props take precedence over preset values.
5452
+ */
5453
+ resolveProps() {
5454
+ const presetProps = this.preset ? this.presets.get('card', this.preset) : {};
5455
+ this.resolvedProps = {
5456
+ ...presetProps,
5457
+ ...this.props,
5458
+ };
5459
+ }
5379
5460
  clickHandler(section, token) {
5380
5461
  this.onClick.emit({ section, token });
5381
5462
  }
5382
5463
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5383
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: CardComponent, isStandalone: true, selector: "val-card", inputs: { props: "props" }, outputs: { onClick: "onClick" }, ngImport: i0, template: `
5384
- <ion-card *ngIf="props.type === types.native">
5385
- <img alt="image" [src]="props.image" />
5386
- <ion-card-header *ngIf="props.title || props.overtitle">
5387
- <ion-card-title *ngIf="props.title">{{ props.title }}</ion-card-title>
5388
- <ion-card-subtitle *ngIf="props.overtitle">{{ props.overtitle }}</ion-card-subtitle>
5464
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: CardComponent, isStandalone: true, selector: "val-card", inputs: { preset: "preset", props: "props" }, outputs: { onClick: "onClick" }, usesOnChanges: true, ngImport: i0, template: `
5465
+ <ion-card *ngIf="resolvedProps.type === types.native">
5466
+ <img alt="image" [src]="resolvedProps.image" />
5467
+ <ion-card-header *ngIf="resolvedProps.title || resolvedProps.overtitle">
5468
+ <ion-card-title *ngIf="resolvedProps.title">{{ resolvedProps.title }}</ion-card-title>
5469
+ <ion-card-subtitle *ngIf="resolvedProps.overtitle">{{ resolvedProps.overtitle }}</ion-card-subtitle>
5389
5470
  </ion-card-header>
5390
5471
 
5391
- <ion-card-content *ngIf="props.content">{{ props.content }}</ion-card-content>
5472
+ <ion-card-content *ngIf="resolvedProps.content">{{ resolvedProps.content }}</ion-card-content>
5392
5473
 
5393
5474
  <val-button
5394
- *ngFor="let b of props.footerActions"
5475
+ *ngFor="let b of resolvedProps.footerActions"
5395
5476
  [props]="b"
5396
5477
  (onClick)="clickHandler(sections.footer, b.token)"
5397
5478
  ></val-button>
5398
5479
  </ion-card>
5399
5480
 
5400
5481
  <ion-card
5401
- *ngIf="props.type === types.tappable"
5402
- (click)="clickHandler(sections.content, props.token)"
5482
+ *ngIf="resolvedProps.type === types.tappable"
5483
+ (click)="clickHandler(sections.content, resolvedProps.token)"
5403
5484
  class="tapable"
5404
5485
  >
5405
- <img alt="image" [src]="props.image" />
5406
- <ion-card-header *ngIf="props.title || props.overtitle">
5407
- <ion-card-title *ngIf="props.title">{{ props.title }}</ion-card-title>
5408
- <ion-card-subtitle *ngIf="props.overtitle">{{ props.overtitle }}</ion-card-subtitle>
5486
+ <img alt="image" [src]="resolvedProps.image" />
5487
+ <ion-card-header *ngIf="resolvedProps.title || resolvedProps.overtitle">
5488
+ <ion-card-title *ngIf="resolvedProps.title">{{ resolvedProps.title }}</ion-card-title>
5489
+ <ion-card-subtitle *ngIf="resolvedProps.overtitle">{{ resolvedProps.overtitle }}</ion-card-subtitle>
5409
5490
  </ion-card-header>
5410
5491
 
5411
- <ion-card-content *ngIf="props.content">{{ props.content }}</ion-card-content>
5492
+ <ion-card-content *ngIf="resolvedProps.content">{{ resolvedProps.content }}</ion-card-content>
5412
5493
  </ion-card>
5413
5494
 
5414
5495
  <ion-card
5415
- *ngIf="props.type === types.checker"
5416
- (click)="clickHandler(sections.content, props.token)"
5496
+ *ngIf="resolvedProps.type === types.checker"
5497
+ (click)="clickHandler(sections.content, resolvedProps.token)"
5417
5498
  class="tapable"
5418
5499
  >
5419
- <ion-card-header *ngIf="props.title || props.overtitle" class="checker">
5500
+ <ion-card-header *ngIf="resolvedProps.title || resolvedProps.overtitle" class="checker">
5420
5501
  <div>
5421
- <ion-card-subtitle *ngIf="props.overtitle">{{ props.overtitle }}</ion-card-subtitle>
5422
- <ion-card-title *ngIf="props.title">{{ props.title }}</ion-card-title>
5502
+ <ion-card-subtitle *ngIf="resolvedProps.overtitle">{{ resolvedProps.overtitle }}</ion-card-subtitle>
5503
+ <ion-card-title *ngIf="resolvedProps.title">{{ resolvedProps.title }}</ion-card-title>
5423
5504
  </div>
5424
5505
  <div>
5425
- <ion-checkbox [checked]="props.selected"></ion-checkbox>
5506
+ <ion-checkbox [checked]="resolvedProps.selected"></ion-checkbox>
5426
5507
  </div>
5427
5508
  </ion-card-header>
5428
5509
 
5429
- <ion-card-content *ngIf="props.content">{{ props.content }}</ion-card-content>
5510
+ <ion-card-content *ngIf="resolvedProps.content">{{ resolvedProps.content }}</ion-card-content>
5430
5511
  </ion-card>
5431
5512
 
5432
- <ion-card *ngIf="props.type === types.complex" class="complex">
5513
+ <ion-card *ngIf="resolvedProps.type === types.complex" class="complex">
5433
5514
  <ion-card-header class="complex-header">
5434
- <ion-buttons style="display: flex; align-items: center" *ngIf="props.leftActions.length > 0">
5435
- <ng-container *ngFor="let action of props.leftActions">
5515
+ <ion-buttons style="display: flex; align-items: center" *ngIf="resolvedProps.leftActions?.length > 0">
5516
+ <ng-container *ngFor="let action of resolvedProps.leftActions">
5436
5517
  <ion-button
5437
5518
  *ngIf="action.type === actionTypes.ICON"
5438
5519
  (click)="clickHandler(sections.headerLeft, action.token)"
@@ -5456,13 +5537,13 @@ class CardComponent {
5456
5537
  >
5457
5538
  {{ action.description }}
5458
5539
  </ion-button>
5459
- <div *ngIf="props.headerText">
5460
- <val-text [props]="{ content: props.headerText, color: 'dark', bold: true, size: 'medium' }" />
5540
+ <div *ngIf="resolvedProps.headerText">
5541
+ <val-text [props]="{ content: resolvedProps.headerText, color: 'dark', bold: true, size: 'medium' }" />
5461
5542
  </div>
5462
5543
  </ng-container>
5463
5544
  </ion-buttons>
5464
- <ion-buttons style="display: flex; align-items: center" *ngIf="props.rightActions.length > 0">
5465
- <ng-container *ngFor="let action of props.rightActions">
5545
+ <ion-buttons style="display: flex; align-items: center" *ngIf="resolvedProps.rightActions?.length > 0">
5546
+ <ng-container *ngFor="let action of resolvedProps.rightActions">
5466
5547
  <ion-button
5467
5548
  *ngIf="action.type === actionTypes.ICON"
5468
5549
  (click)="clickHandler(sections.headerRight, action.token)"
@@ -5490,27 +5571,27 @@ class CardComponent {
5490
5571
  </ion-buttons>
5491
5572
  </ion-card-header>
5492
5573
 
5493
- <div class="tapable" (click)="clickHandler(sections.content, props.token)">
5494
- <ion-card-header *ngIf="props.title || props.overtitle" class="complex-header">
5574
+ <div class="tapable" (click)="clickHandler(sections.content, resolvedProps.token)">
5575
+ <ion-card-header *ngIf="resolvedProps.title || resolvedProps.overtitle" class="complex-header">
5495
5576
  <div>
5496
- <ion-card-subtitle *ngIf="props.overtitle">{{ props.overtitle }}</ion-card-subtitle>
5497
- <ion-card-title *ngIf="props.title">{{ props.title }}</ion-card-title>
5577
+ <ion-card-subtitle *ngIf="resolvedProps.overtitle">{{ resolvedProps.overtitle }}</ion-card-subtitle>
5578
+ <ion-card-title *ngIf="resolvedProps.title">{{ resolvedProps.title }}</ion-card-title>
5498
5579
  </div>
5499
5580
  </ion-card-header>
5500
5581
 
5501
- <img alt="image" [src]="props.image" />
5502
- <ion-card-content *ngIf="props.content" class="complex-content">{{ props.content }}</ion-card-content>
5582
+ <img alt="image" [src]="resolvedProps.image" />
5583
+ <ion-card-content *ngIf="resolvedProps.content" class="complex-content">{{ resolvedProps.content }}</ion-card-content>
5503
5584
  </div>
5504
5585
  <val-button
5505
- *ngFor="let b of props.footerActions"
5586
+ *ngFor="let b of resolvedProps.footerActions"
5506
5587
  [props]="b"
5507
5588
  (onClick)="clickHandler(sections.footer, b.token)"
5508
5589
  ></val-button>
5509
5590
  <ion-buttons
5510
5591
  style="display: flex; align-items: center; justify-content: flex-end; margin: 8px"
5511
- *ngIf="props.footerComplexActions.length > 0"
5592
+ *ngIf="resolvedProps.footerComplexActions?.length > 0"
5512
5593
  >
5513
- <ng-container *ngFor="let action of props.footerComplexActions">
5594
+ <ng-container *ngFor="let action of resolvedProps.footerComplexActions">
5514
5595
  <ion-button
5515
5596
  *ngIf="action.type === actionTypes.ICON"
5516
5597
  (click)="clickHandler(sections.footerExtra, action.token)"
@@ -5558,58 +5639,58 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
5558
5639
  IonButton,
5559
5640
  IonIcon,
5560
5641
  ], template: `
5561
- <ion-card *ngIf="props.type === types.native">
5562
- <img alt="image" [src]="props.image" />
5563
- <ion-card-header *ngIf="props.title || props.overtitle">
5564
- <ion-card-title *ngIf="props.title">{{ props.title }}</ion-card-title>
5565
- <ion-card-subtitle *ngIf="props.overtitle">{{ props.overtitle }}</ion-card-subtitle>
5642
+ <ion-card *ngIf="resolvedProps.type === types.native">
5643
+ <img alt="image" [src]="resolvedProps.image" />
5644
+ <ion-card-header *ngIf="resolvedProps.title || resolvedProps.overtitle">
5645
+ <ion-card-title *ngIf="resolvedProps.title">{{ resolvedProps.title }}</ion-card-title>
5646
+ <ion-card-subtitle *ngIf="resolvedProps.overtitle">{{ resolvedProps.overtitle }}</ion-card-subtitle>
5566
5647
  </ion-card-header>
5567
5648
 
5568
- <ion-card-content *ngIf="props.content">{{ props.content }}</ion-card-content>
5649
+ <ion-card-content *ngIf="resolvedProps.content">{{ resolvedProps.content }}</ion-card-content>
5569
5650
 
5570
5651
  <val-button
5571
- *ngFor="let b of props.footerActions"
5652
+ *ngFor="let b of resolvedProps.footerActions"
5572
5653
  [props]="b"
5573
5654
  (onClick)="clickHandler(sections.footer, b.token)"
5574
5655
  ></val-button>
5575
5656
  </ion-card>
5576
5657
 
5577
5658
  <ion-card
5578
- *ngIf="props.type === types.tappable"
5579
- (click)="clickHandler(sections.content, props.token)"
5659
+ *ngIf="resolvedProps.type === types.tappable"
5660
+ (click)="clickHandler(sections.content, resolvedProps.token)"
5580
5661
  class="tapable"
5581
5662
  >
5582
- <img alt="image" [src]="props.image" />
5583
- <ion-card-header *ngIf="props.title || props.overtitle">
5584
- <ion-card-title *ngIf="props.title">{{ props.title }}</ion-card-title>
5585
- <ion-card-subtitle *ngIf="props.overtitle">{{ props.overtitle }}</ion-card-subtitle>
5663
+ <img alt="image" [src]="resolvedProps.image" />
5664
+ <ion-card-header *ngIf="resolvedProps.title || resolvedProps.overtitle">
5665
+ <ion-card-title *ngIf="resolvedProps.title">{{ resolvedProps.title }}</ion-card-title>
5666
+ <ion-card-subtitle *ngIf="resolvedProps.overtitle">{{ resolvedProps.overtitle }}</ion-card-subtitle>
5586
5667
  </ion-card-header>
5587
5668
 
5588
- <ion-card-content *ngIf="props.content">{{ props.content }}</ion-card-content>
5669
+ <ion-card-content *ngIf="resolvedProps.content">{{ resolvedProps.content }}</ion-card-content>
5589
5670
  </ion-card>
5590
5671
 
5591
5672
  <ion-card
5592
- *ngIf="props.type === types.checker"
5593
- (click)="clickHandler(sections.content, props.token)"
5673
+ *ngIf="resolvedProps.type === types.checker"
5674
+ (click)="clickHandler(sections.content, resolvedProps.token)"
5594
5675
  class="tapable"
5595
5676
  >
5596
- <ion-card-header *ngIf="props.title || props.overtitle" class="checker">
5677
+ <ion-card-header *ngIf="resolvedProps.title || resolvedProps.overtitle" class="checker">
5597
5678
  <div>
5598
- <ion-card-subtitle *ngIf="props.overtitle">{{ props.overtitle }}</ion-card-subtitle>
5599
- <ion-card-title *ngIf="props.title">{{ props.title }}</ion-card-title>
5679
+ <ion-card-subtitle *ngIf="resolvedProps.overtitle">{{ resolvedProps.overtitle }}</ion-card-subtitle>
5680
+ <ion-card-title *ngIf="resolvedProps.title">{{ resolvedProps.title }}</ion-card-title>
5600
5681
  </div>
5601
5682
  <div>
5602
- <ion-checkbox [checked]="props.selected"></ion-checkbox>
5683
+ <ion-checkbox [checked]="resolvedProps.selected"></ion-checkbox>
5603
5684
  </div>
5604
5685
  </ion-card-header>
5605
5686
 
5606
- <ion-card-content *ngIf="props.content">{{ props.content }}</ion-card-content>
5687
+ <ion-card-content *ngIf="resolvedProps.content">{{ resolvedProps.content }}</ion-card-content>
5607
5688
  </ion-card>
5608
5689
 
5609
- <ion-card *ngIf="props.type === types.complex" class="complex">
5690
+ <ion-card *ngIf="resolvedProps.type === types.complex" class="complex">
5610
5691
  <ion-card-header class="complex-header">
5611
- <ion-buttons style="display: flex; align-items: center" *ngIf="props.leftActions.length > 0">
5612
- <ng-container *ngFor="let action of props.leftActions">
5692
+ <ion-buttons style="display: flex; align-items: center" *ngIf="resolvedProps.leftActions?.length > 0">
5693
+ <ng-container *ngFor="let action of resolvedProps.leftActions">
5613
5694
  <ion-button
5614
5695
  *ngIf="action.type === actionTypes.ICON"
5615
5696
  (click)="clickHandler(sections.headerLeft, action.token)"
@@ -5633,13 +5714,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
5633
5714
  >
5634
5715
  {{ action.description }}
5635
5716
  </ion-button>
5636
- <div *ngIf="props.headerText">
5637
- <val-text [props]="{ content: props.headerText, color: 'dark', bold: true, size: 'medium' }" />
5717
+ <div *ngIf="resolvedProps.headerText">
5718
+ <val-text [props]="{ content: resolvedProps.headerText, color: 'dark', bold: true, size: 'medium' }" />
5638
5719
  </div>
5639
5720
  </ng-container>
5640
5721
  </ion-buttons>
5641
- <ion-buttons style="display: flex; align-items: center" *ngIf="props.rightActions.length > 0">
5642
- <ng-container *ngFor="let action of props.rightActions">
5722
+ <ion-buttons style="display: flex; align-items: center" *ngIf="resolvedProps.rightActions?.length > 0">
5723
+ <ng-container *ngFor="let action of resolvedProps.rightActions">
5643
5724
  <ion-button
5644
5725
  *ngIf="action.type === actionTypes.ICON"
5645
5726
  (click)="clickHandler(sections.headerRight, action.token)"
@@ -5667,27 +5748,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
5667
5748
  </ion-buttons>
5668
5749
  </ion-card-header>
5669
5750
 
5670
- <div class="tapable" (click)="clickHandler(sections.content, props.token)">
5671
- <ion-card-header *ngIf="props.title || props.overtitle" class="complex-header">
5751
+ <div class="tapable" (click)="clickHandler(sections.content, resolvedProps.token)">
5752
+ <ion-card-header *ngIf="resolvedProps.title || resolvedProps.overtitle" class="complex-header">
5672
5753
  <div>
5673
- <ion-card-subtitle *ngIf="props.overtitle">{{ props.overtitle }}</ion-card-subtitle>
5674
- <ion-card-title *ngIf="props.title">{{ props.title }}</ion-card-title>
5754
+ <ion-card-subtitle *ngIf="resolvedProps.overtitle">{{ resolvedProps.overtitle }}</ion-card-subtitle>
5755
+ <ion-card-title *ngIf="resolvedProps.title">{{ resolvedProps.title }}</ion-card-title>
5675
5756
  </div>
5676
5757
  </ion-card-header>
5677
5758
 
5678
- <img alt="image" [src]="props.image" />
5679
- <ion-card-content *ngIf="props.content" class="complex-content">{{ props.content }}</ion-card-content>
5759
+ <img alt="image" [src]="resolvedProps.image" />
5760
+ <ion-card-content *ngIf="resolvedProps.content" class="complex-content">{{ resolvedProps.content }}</ion-card-content>
5680
5761
  </div>
5681
5762
  <val-button
5682
- *ngFor="let b of props.footerActions"
5763
+ *ngFor="let b of resolvedProps.footerActions"
5683
5764
  [props]="b"
5684
5765
  (onClick)="clickHandler(sections.footer, b.token)"
5685
5766
  ></val-button>
5686
5767
  <ion-buttons
5687
5768
  style="display: flex; align-items: center; justify-content: flex-end; margin: 8px"
5688
- *ngIf="props.footerComplexActions.length > 0"
5769
+ *ngIf="resolvedProps.footerComplexActions?.length > 0"
5689
5770
  >
5690
- <ng-container *ngFor="let action of props.footerComplexActions">
5771
+ <ng-container *ngFor="let action of resolvedProps.footerComplexActions">
5691
5772
  <ion-button
5692
5773
  *ngIf="action.type === actionTypes.ICON"
5693
5774
  (click)="clickHandler(sections.footerExtra, action.token)"
@@ -5716,7 +5797,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
5716
5797
  </ion-buttons>
5717
5798
  </ion-card>
5718
5799
  `, styles: [":root{--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}@media (prefers-color-scheme: dark){:root{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}ion-card.tapable{transition:transform .3s ease,box-shadow .3s ease}ion-card.tapable:hover{transform:scale(1.01);box-shadow:.1875rem .625rem .5rem #1219541a}.tapable{cursor:pointer}.checker{display:flex;flex-direction:row;justify-content:space-between;align-items:center}.complex-header{padding:10px;display:flex;flex-direction:row;justify-content:space-between;align-items:center}.complex-content{padding-left:10px;padding-top:4px;padding-bottom:10px}.complex{border-radius:16px}img{border-radius:24px}\n"] }]
5719
- }], ctorParameters: () => [], propDecorators: { props: [{
5800
+ }], ctorParameters: () => [], propDecorators: { preset: [{
5801
+ type: Input
5802
+ }], props: [{
5720
5803
  type: Input
5721
5804
  }], onClick: [{
5722
5805
  type: Output
@@ -5936,31 +6019,60 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
5936
6019
  * val-email-input
5937
6020
  *
5938
6021
  * An email input field integrated with Angular forms.
5939
- * For i18n support, pass the translated placeholder text via props.
6022
+ * Supports presets for reusable configurations.
5940
6023
  *
5941
- * @example Static placeholder:
5942
- * <val-email-input [props]="{ control: myControl, placeholder: 'Enter your email' }"></val-email-input>
6024
+ * @example With preset (recommended):
6025
+ * <val-email-input preset="form-field" [props]="{ control: myControl, placeholder: 'Email' }"></val-email-input>
5943
6026
  *
5944
- * @example With i18n:
5945
- * ```typescript
5946
- * // In component
5947
- * emailProps = {
5948
- * control: this.emailControl,
5949
- * placeholder: this.langService.getText('Login', 'emailPlaceholder')
5950
- * };
5951
- * ```
6027
+ * @example Static (backwards compatible):
6028
+ * <val-email-input [props]="{ control: myControl, placeholder: 'Enter your email' }"></val-email-input>
5952
6029
  *
5953
- * @input props: InputMetadata - Configuration for the input (form control, placeholder, etc.)
6030
+ * @input preset: string - Name of preset to apply (e.g., 'form-field')
6031
+ * @input props: InputMetadata - Configuration for the input (overrides preset values)
5954
6032
  */
5955
6033
  class EmailInputComponent {
5956
- ngOnInit() { }
6034
+ constructor() {
6035
+ this.presets = inject(PresetService);
6036
+ /**
6037
+ * Input configuration object. Values here override preset values.
6038
+ * @type {InputMetadata}
6039
+ * @property control - The Angular FormControl for the input.
6040
+ * @property placeholder - The placeholder text.
6041
+ */
6042
+ this.props = {};
6043
+ /**
6044
+ * Resolved props after merging preset + explicit props.
6045
+ */
6046
+ this.resolvedProps = {};
6047
+ }
6048
+ ngOnInit() {
6049
+ this.resolveProps();
6050
+ }
6051
+ ngOnChanges(changes) {
6052
+ if (changes['preset'] || changes['props']) {
6053
+ this.resolveProps();
6054
+ }
6055
+ }
6056
+ /**
6057
+ * Merge preset configuration with explicit props.
6058
+ * Explicit props take precedence over preset values.
6059
+ */
6060
+ resolveProps() {
6061
+ const presetProps = this.preset ? this.presets.get('emailInput', this.preset) : {};
6062
+ this.resolvedProps = {
6063
+ ...presetProps,
6064
+ ...this.props,
6065
+ };
6066
+ }
5957
6067
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EmailInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5958
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: EmailInputComponent, isStandalone: true, selector: "val-email-input", inputs: { props: "props" }, ngImport: i0, template: ` <ion-input [formControl]="props.control" type="email" [placeholder]="props.placeholder"></ion-input> `, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }] }); }
6068
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: EmailInputComponent, isStandalone: true, selector: "val-email-input", inputs: { preset: "preset", props: "props" }, usesOnChanges: true, ngImport: i0, template: ` <ion-input [formControl]="resolvedProps.control" type="email" [placeholder]="resolvedProps.placeholder"></ion-input> `, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }] }); }
5959
6069
  }
5960
6070
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EmailInputComponent, decorators: [{
5961
6071
  type: Component,
5962
- args: [{ selector: 'val-email-input', standalone: true, imports: [CommonModule, ReactiveFormsModule, IonInput], template: ` <ion-input [formControl]="props.control" type="email" [placeholder]="props.placeholder"></ion-input> ` }]
5963
- }], propDecorators: { props: [{
6072
+ args: [{ selector: 'val-email-input', standalone: true, imports: [CommonModule, ReactiveFormsModule, IonInput], template: ` <ion-input [formControl]="resolvedProps.control" type="email" [placeholder]="resolvedProps.placeholder"></ion-input> ` }]
6073
+ }], propDecorators: { preset: [{
6074
+ type: Input
6075
+ }], props: [{
5964
6076
  type: Input
5965
6077
  }] } });
5966
6078
 
@@ -7473,35 +7585,60 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
7473
7585
  * val-password-input
7474
7586
  *
7475
7587
  * A password input field with show/hide toggle, integrated with Angular forms.
7476
- * For i18n support, pass the translated placeholder text via props.
7588
+ * Supports presets for reusable configurations.
7477
7589
  *
7478
- * @example Static placeholder:
7479
- * <val-password-input [props]="{ control: myControl, placeholder: 'Enter password' }"></val-password-input>
7590
+ * @example With preset (recommended):
7591
+ * <val-password-input preset="form-field" [props]="{ control: myControl, placeholder: 'Password' }"></val-password-input>
7480
7592
  *
7481
- * @example With i18n:
7482
- * ```typescript
7483
- * // In component
7484
- * passwordProps = {
7485
- * control: this.passwordControl,
7486
- * placeholder: this.langService.getText('Login', 'passwordPlaceholder')
7487
- * };
7488
- * ```
7593
+ * @example Static (backwards compatible):
7594
+ * <val-password-input [props]="{ control: myControl, placeholder: 'Enter password' }"></val-password-input>
7489
7595
  *
7490
- * @input props: InputMetadata - Configuration for the input (form control, placeholder, etc.)
7596
+ * @input preset: string - Name of preset to apply (e.g., 'form-field', 'login')
7597
+ * @input props: InputMetadata - Configuration for the input (overrides preset values)
7491
7598
  */
7492
7599
  class PasswordInputComponent {
7493
7600
  constructor(icon) {
7601
+ this.presets = inject(PresetService);
7602
+ /**
7603
+ * Input configuration object. Values here override preset values.
7604
+ * @type {InputMetadata}
7605
+ * @property control - The Angular FormControl for the input.
7606
+ * @property placeholder - The placeholder text.
7607
+ */
7608
+ this.props = {};
7609
+ /**
7610
+ * Resolved props after merging preset + explicit props.
7611
+ */
7612
+ this.resolvedProps = {};
7494
7613
  this.hidePassword = true;
7495
7614
  }
7496
- ngOnInit() { }
7615
+ ngOnInit() {
7616
+ this.resolveProps();
7617
+ }
7618
+ ngOnChanges(changes) {
7619
+ if (changes['preset'] || changes['props']) {
7620
+ this.resolveProps();
7621
+ }
7622
+ }
7623
+ /**
7624
+ * Merge preset configuration with explicit props.
7625
+ * Explicit props take precedence over preset values.
7626
+ */
7627
+ resolveProps() {
7628
+ const presetProps = this.preset ? this.presets.get('passwordInput', this.preset) : {};
7629
+ this.resolvedProps = {
7630
+ ...presetProps,
7631
+ ...this.props,
7632
+ };
7633
+ }
7497
7634
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PasswordInputComponent, deps: [{ token: IconService }], target: i0.ɵɵFactoryTarget.Component }); }
7498
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: PasswordInputComponent, isStandalone: true, selector: "val-password-input", inputs: { props: "props" }, ngImport: i0, template: `
7635
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: PasswordInputComponent, isStandalone: true, selector: "val-password-input", inputs: { preset: "preset", props: "props" }, usesOnChanges: true, ngImport: i0, template: `
7499
7636
  <div class="input-container">
7500
7637
  <ion-input
7501
7638
  class="sign-in__input-password"
7502
- [formControl]="props.control"
7639
+ [formControl]="resolvedProps.control"
7503
7640
  [type]="hidePassword ? 'password' : 'text'"
7504
- [placeholder]="props.placeholder"
7641
+ [placeholder]="resolvedProps.placeholder"
7505
7642
  ></ion-input>
7506
7643
  <ion-button color="dark" fill="clear" (click)="hidePassword = !hidePassword" size="small">
7507
7644
  <ion-icon slot="icon-only" [name]="hidePassword ? 'eye-off-outline' : 'eye-outline'"></ion-icon>
@@ -7515,16 +7652,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
7515
7652
  <div class="input-container">
7516
7653
  <ion-input
7517
7654
  class="sign-in__input-password"
7518
- [formControl]="props.control"
7655
+ [formControl]="resolvedProps.control"
7519
7656
  [type]="hidePassword ? 'password' : 'text'"
7520
- [placeholder]="props.placeholder"
7657
+ [placeholder]="resolvedProps.placeholder"
7521
7658
  ></ion-input>
7522
7659
  <ion-button color="dark" fill="clear" (click)="hidePassword = !hidePassword" size="small">
7523
7660
  <ion-icon slot="icon-only" [name]="hidePassword ? 'eye-off-outline' : 'eye-outline'"></ion-icon>
7524
7661
  </ion-button>
7525
7662
  </div>
7526
7663
  `, styles: [":root{--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}@media (prefers-color-scheme: dark){:root{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}.input-container{display:flex;align-items:center;flex-direction:row}\n"] }]
7527
- }], ctorParameters: () => [{ type: IconService }], propDecorators: { props: [{
7664
+ }], ctorParameters: () => [{ type: IconService }], propDecorators: { preset: [{
7665
+ type: Input
7666
+ }], props: [{
7528
7667
  type: Input
7529
7668
  }] } });
7530
7669
 
@@ -8042,8 +8181,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
8042
8181
  * val-select-input
8043
8182
  *
8044
8183
  * A select/dropdown input integrated with Angular forms, using Ionic's select component.
8184
+ * Supports presets for reusable configurations.
8045
8185
  *
8046
- * @example
8186
+ * @example With preset (recommended):
8187
+ * <val-select-input preset="form-field" [props]="{
8188
+ * control: myControl,
8189
+ * label: 'Seleccionar',
8190
+ * options: [{ id: '1', name: 'Opción 1' }]
8191
+ * }"></val-select-input>
8192
+ *
8193
+ * @example Static (backwards compatible):
8047
8194
  * <val-select-input [props]="{
8048
8195
  * control: myControl,
8049
8196
  * label: 'Seleccionar',
@@ -8052,39 +8199,78 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
8052
8199
  * okText: 'Aceptar'
8053
8200
  * }"></val-select-input>
8054
8201
  *
8055
- * @input props: InputMetadata - Configuration for the select input (form control, label, options, etc.)
8202
+ * @input preset: string - Name of preset to apply (e.g., 'form-field')
8203
+ * @input props: InputMetadata - Configuration for the select input (overrides preset values)
8056
8204
  */
8057
8205
  class SearchSelectorComponent {
8058
8206
  constructor() {
8059
8207
  this.i18n = inject(I18nService);
8208
+ this.presets = inject(PresetService);
8209
+ /**
8210
+ * Input configuration object. Values here override preset values.
8211
+ * @type {InputMetadata}
8212
+ * @property control - The Angular FormControl for the select input.
8213
+ * @property label - The label for the select.
8214
+ * @property options - The available options for the select.
8215
+ * @property placeholder - The placeholder text.
8216
+ * @property modalHeader - Custom header text for the modal (optional, uses label if not provided).
8217
+ * @property cancelText - Custom cancel button text (default: 'Cancelar').
8218
+ * @property okText - Custom OK button text (default: 'Aceptar').
8219
+ */
8220
+ this.props = {};
8221
+ /**
8222
+ * Resolved props after merging preset + explicit props.
8223
+ */
8224
+ this.resolvedProps = {};
8060
8225
  }
8061
8226
  ngOnInit() {
8062
- if (this.props?.withDefault || this.props?.value) {
8063
- applyDefaultValueToControl(this.props);
8227
+ this.resolveProps();
8228
+ this.setupComponent();
8229
+ }
8230
+ ngOnChanges(changes) {
8231
+ if (changes['preset'] || changes['props']) {
8232
+ this.resolveProps();
8233
+ this.setupComponent();
8234
+ }
8235
+ }
8236
+ /**
8237
+ * Merge preset configuration with explicit props.
8238
+ * Explicit props take precedence over preset values.
8239
+ */
8240
+ resolveProps() {
8241
+ const presetProps = this.preset ? this.presets.get('selectInput', this.preset) : {};
8242
+ this.resolvedProps = {
8243
+ ...presetProps,
8244
+ ...this.props,
8245
+ };
8246
+ }
8247
+ setupComponent() {
8248
+ if (this.resolvedProps?.withDefault || this.resolvedProps?.value) {
8249
+ applyDefaultValueToControl(this.resolvedProps);
8064
8250
  }
8065
8251
  // Set modal header from props or use label as fallback, then i18n default
8066
- const headerText = this.props.modalHeader || this.props.label || this.i18n.t('selectOption');
8252
+ const headerText = this.resolvedProps.modalHeader || this.resolvedProps.label || this.i18n.t('selectOption');
8067
8253
  this.customModalOptions = {
8068
8254
  header: headerText,
8069
8255
  breakpoints: [0, 0.6],
8070
8256
  initialBreakpoint: 0.6,
8071
8257
  };
8072
8258
  // Set button texts from props or use i18n defaults
8073
- this.cancelText = this.props.cancelText || this.i18n.t('cancel');
8074
- this.okText = this.props.okText || this.i18n.t('ok');
8259
+ this.cancelText = this.resolvedProps.cancelText || this.i18n.t('cancel');
8260
+ this.okText = this.resolvedProps.okText || this.i18n.t('ok');
8075
8261
  }
8076
8262
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SearchSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8077
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SearchSelectorComponent, isStandalone: true, selector: "val-select-input", inputs: { props: "props" }, ngImport: i0, template: `
8263
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SearchSelectorComponent, isStandalone: true, selector: "val-select-input", inputs: { preset: "preset", props: "props" }, usesOnChanges: true, ngImport: i0, template: `
8078
8264
  <ion-select
8079
- [formControl]="props.control"
8080
- [label]="props.label"
8265
+ [formControl]="resolvedProps.control"
8266
+ [label]="resolvedProps.label"
8081
8267
  [interfaceOptions]="customModalOptions"
8082
8268
  interface="modal"
8083
- [placeholder]="[props.placeholder]"
8269
+ [placeholder]="[resolvedProps.placeholder]"
8084
8270
  [cancelText]="cancelText"
8085
8271
  [okText]="okText"
8086
8272
  >
8087
- @for (o of props.options; track o.id) {
8273
+ @for (o of resolvedProps.options; track o.id) {
8088
8274
  <ion-select-option [value]="o.id">{{ o.name }}</ion-select-option>
8089
8275
  }
8090
8276
  </ion-select>
@@ -8094,20 +8280,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
8094
8280
  type: Component,
8095
8281
  args: [{ selector: 'val-select-input', standalone: true, imports: [ReactiveFormsModule, IonSelect, IonSelectOption], template: `
8096
8282
  <ion-select
8097
- [formControl]="props.control"
8098
- [label]="props.label"
8283
+ [formControl]="resolvedProps.control"
8284
+ [label]="resolvedProps.label"
8099
8285
  [interfaceOptions]="customModalOptions"
8100
8286
  interface="modal"
8101
- [placeholder]="[props.placeholder]"
8287
+ [placeholder]="[resolvedProps.placeholder]"
8102
8288
  [cancelText]="cancelText"
8103
8289
  [okText]="okText"
8104
8290
  >
8105
- @for (o of props.options; track o.id) {
8291
+ @for (o of resolvedProps.options; track o.id) {
8106
8292
  <ion-select-option [value]="o.id">{{ o.name }}</ion-select-option>
8107
8293
  }
8108
8294
  </ion-select>
8109
8295
  ` }]
8110
- }], propDecorators: { props: [{
8296
+ }], propDecorators: { preset: [{
8297
+ type: Input
8298
+ }], props: [{
8111
8299
  type: Input
8112
8300
  }] } });
8113
8301
 
@@ -8628,39 +8816,68 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
8628
8816
  * val-text-input
8629
8817
  *
8630
8818
  * A text input field integrated with Angular forms.
8631
- * For i18n support, pass the translated placeholder text via props.
8819
+ * Supports presets for reusable configurations.
8632
8820
  *
8633
- * @example Static placeholder:
8634
- * <val-text-input [props]="{ control: myControl, placeholder: 'Enter text' }"></val-text-input>
8821
+ * @example With preset (recommended):
8822
+ * <val-text-input preset="form-field" [props]="{ control: myControl, placeholder: 'Enter text' }"></val-text-input>
8635
8823
  *
8636
- * @example With i18n:
8637
- * ```typescript
8638
- * // In component
8639
- * textProps = {
8640
- * control: this.textControl,
8641
- * placeholder: this.langService.getText('MyComponent', 'namePlaceholder')
8642
- * };
8643
- * ```
8824
+ * @example Static (backwards compatible):
8825
+ * <val-text-input [props]="{ control: myControl, placeholder: 'Enter text' }"></val-text-input>
8644
8826
  *
8645
- * @input props: InputMetadata - Configuration for the input (form control, placeholder, label, etc.)
8827
+ * @input preset: string - Name of preset to apply (e.g., 'form-field', 'search')
8828
+ * @input props: InputMetadata - Configuration for the input (overrides preset values)
8646
8829
  */
8647
8830
  class TextInputComponent {
8648
8831
  constructor() {
8832
+ this.presets = inject(PresetService);
8833
+ /**
8834
+ * Input configuration object. Values here override preset values.
8835
+ * @type {InputMetadata}
8836
+ * @property control - The Angular FormControl for the input.
8837
+ * @property placeholder - The placeholder text.
8838
+ * @property label, name, hint, type, validators, etc. - See InputMetadata for all options.
8839
+ */
8840
+ this.props = {};
8841
+ /**
8842
+ * Resolved props after merging preset + explicit props.
8843
+ * Preset values are overridden by explicit props.
8844
+ */
8845
+ this.resolvedProps = {};
8649
8846
  this.states = ComponentStates;
8650
8847
  }
8651
8848
  ngOnInit() {
8849
+ this.resolveProps();
8652
8850
  // Apply default values on initialization
8653
- if (this.props?.withDefault || this.props?.value) {
8654
- applyDefaultValueToControl(this.props);
8851
+ if (this.resolvedProps?.withDefault || this.resolvedProps?.value) {
8852
+ applyDefaultValueToControl(this.resolvedProps);
8655
8853
  }
8656
8854
  }
8855
+ ngOnChanges(changes) {
8856
+ if (changes['preset'] || changes['props']) {
8857
+ this.resolveProps();
8858
+ }
8859
+ }
8860
+ /**
8861
+ * Merge preset configuration with explicit props.
8862
+ * Explicit props take precedence over preset values.
8863
+ */
8864
+ resolveProps() {
8865
+ const presetProps = this.preset ? this.presets.get('textInput', this.preset) : {};
8866
+ // Merge: preset defaults < explicit props
8867
+ this.resolvedProps = {
8868
+ ...presetProps,
8869
+ ...this.props,
8870
+ };
8871
+ }
8657
8872
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TextInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8658
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: TextInputComponent, isStandalone: true, selector: "val-text-input", inputs: { props: "props" }, ngImport: i0, template: ` <ion-input [formControl]="props.control" type="text" [placeholder]="props.placeholder" /> `, isInline: true, styles: [":root{--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}@media (prefers-color-scheme: dark){:root{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }] }); }
8873
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: TextInputComponent, isStandalone: true, selector: "val-text-input", inputs: { preset: "preset", props: "props" }, usesOnChanges: true, ngImport: i0, template: ` <ion-input [formControl]="resolvedProps.control" type="text" [placeholder]="resolvedProps.placeholder" /> `, isInline: true, styles: [":root{--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}@media (prefers-color-scheme: dark){:root{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }] }); }
8659
8874
  }
8660
8875
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TextInputComponent, decorators: [{
8661
8876
  type: Component,
8662
- args: [{ selector: 'val-text-input', standalone: true, imports: [ReactiveFormsModule, IonInput], template: ` <ion-input [formControl]="props.control" type="text" [placeholder]="props.placeholder" /> `, styles: [":root{--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}@media (prefers-color-scheme: dark){:root{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}\n"] }]
8663
- }], propDecorators: { props: [{
8877
+ args: [{ selector: 'val-text-input', standalone: true, imports: [ReactiveFormsModule, IonInput], template: ` <ion-input [formControl]="resolvedProps.control" type="text" [placeholder]="resolvedProps.placeholder" /> `, styles: [":root{--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}@media (prefers-color-scheme: dark){:root{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}\n"] }]
8878
+ }], propDecorators: { preset: [{
8879
+ type: Input
8880
+ }], props: [{
8664
8881
  type: Input
8665
8882
  }] } });
8666
8883
 
@@ -18315,7 +18532,7 @@ class FormComponent {
18315
18532
  ></val-button-group>
18316
18533
  </form>
18317
18534
  </div>
18318
- `, isInline: true, styles: [":root{--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}@media (prefers-color-scheme: dark){:root{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: TextInputComponent, selector: "val-text-input", inputs: ["props"] }, { kind: "component", type: CheckInputComponent, selector: "val-check-input", inputs: ["props"] }, { kind: "component", type: ButtonGroupComponent, selector: "val-button-group", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: DividerComponent, selector: "val-divider", inputs: ["props"] }, { kind: "component", type: HintComponent, selector: "val-hint", inputs: ["props"] }, { kind: "component", type: CommentInputComponent, selector: "val-comment-input", inputs: ["props"] }, { kind: "component", type: DateInputComponent, selector: "val-date-input", inputs: ["props"] }, { kind: "component", type: FileInputComponent, selector: "val-file-input", inputs: ["props"] }, { kind: "component", type: HourInputComponent, selector: "val-hour-input", inputs: ["props"] }, { kind: "component", type: EmailInputComponent, selector: "val-email-input", inputs: ["props"] }, { kind: "component", type: NumberInputComponent, selector: "val-number-input", inputs: ["props"] }, { kind: "component", type: NumberFromToComponent, selector: "val-number-from-to", inputs: ["props"] }, { kind: "component", type: RadioInputComponent, selector: "val-radio-input", inputs: ["props"] }, { kind: "component", type: PasswordInputComponent, selector: "val-password-input", inputs: ["props"] }, { kind: "component", type: PinInputComponent, selector: "val-pin-input", inputs: ["props"] }, { kind: "component", type: SelectSearchComponent, selector: "val-select-search", inputs: ["label", "labelProperty", "valueProperty", "multiple", "placeholder", "props"] }, { kind: "component", type: MultiSelectSearchComponent, selector: "val-multi-select-search", inputs: ["label", "labelProperty", "valueProperty", "placeholder", "props"] }, { kind: "component", type: SearchSelectorComponent, selector: "val-select-input", inputs: ["props"] }] }); }
18535
+ `, isInline: true, styles: [":root{--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}@media (prefers-color-scheme: dark){:root{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: TextInputComponent, selector: "val-text-input", inputs: ["preset", "props"] }, { kind: "component", type: CheckInputComponent, selector: "val-check-input", inputs: ["props"] }, { kind: "component", type: ButtonGroupComponent, selector: "val-button-group", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: DividerComponent, selector: "val-divider", inputs: ["props"] }, { kind: "component", type: HintComponent, selector: "val-hint", inputs: ["props"] }, { kind: "component", type: CommentInputComponent, selector: "val-comment-input", inputs: ["props"] }, { kind: "component", type: DateInputComponent, selector: "val-date-input", inputs: ["props"] }, { kind: "component", type: FileInputComponent, selector: "val-file-input", inputs: ["props"] }, { kind: "component", type: HourInputComponent, selector: "val-hour-input", inputs: ["props"] }, { kind: "component", type: EmailInputComponent, selector: "val-email-input", inputs: ["preset", "props"] }, { kind: "component", type: NumberInputComponent, selector: "val-number-input", inputs: ["props"] }, { kind: "component", type: NumberFromToComponent, selector: "val-number-from-to", inputs: ["props"] }, { kind: "component", type: RadioInputComponent, selector: "val-radio-input", inputs: ["props"] }, { kind: "component", type: PasswordInputComponent, selector: "val-password-input", inputs: ["preset", "props"] }, { kind: "component", type: PinInputComponent, selector: "val-pin-input", inputs: ["props"] }, { kind: "component", type: SelectSearchComponent, selector: "val-select-search", inputs: ["label", "labelProperty", "valueProperty", "multiple", "placeholder", "props"] }, { kind: "component", type: MultiSelectSearchComponent, selector: "val-multi-select-search", inputs: ["label", "labelProperty", "valueProperty", "placeholder", "props"] }, { kind: "component", type: SearchSelectorComponent, selector: "val-select-input", inputs: ["preset", "props"] }] }); }
18319
18536
  }
18320
18537
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormComponent, decorators: [{
18321
18538
  type: Component,
@@ -34401,7 +34618,7 @@ class DocsApiTableComponent {
34401
34618
  <p class="docs-api-table__empty">No items to display.</p>
34402
34619
  }
34403
34620
  </div>
34404
- `, isInline: true, styles: [".docs-api-table{--table-bg: var(--ion-background-color, #fff);--table-border: var(--ion-border-color, #e0e0e0);--table-header-bg: #f8f9fa;--table-row-hover: rgba(0, 0, 0, .02);--table-text: var(--ion-text-color, #1a1a1a);--table-text-secondary: #5b6570;--code-bg: #f1f3f5;--code-text: #0d6efd;--type-bg: #e9ecef;--type-text: #495057;margin:1.5rem 0;font-family:var(--ion-font-family, system-ui, -apple-system, sans-serif)}.docs-api-table__title{font-size:1.25rem;font-weight:700;margin:0 0 1rem;color:var(--table-text)}.docs-api-table__wrapper{overflow-x:auto;-webkit-overflow-scrolling:touch;max-width:100%}.docs-api-table__table{width:100%;min-width:550px;border-collapse:separate;border-spacing:0;font-size:.875rem;line-height:1.5;table-layout:fixed}.docs-api-table__th{text-align:left;padding:.625rem .75rem;font-weight:600;font-size:.8125rem;color:var(--table-text-secondary);background:var(--table-header-bg);border-bottom:2px solid var(--table-border);white-space:nowrap}.docs-api-table__th--name{width:120px}.docs-api-table__th--type{width:130px}.docs-api-table__th--default{width:80px}.docs-api-table__th--description{width:auto}.docs-api-table__td{padding:.625rem .75rem;border-bottom:1px solid var(--table-border);vertical-align:top;color:var(--table-text)}.docs-api-table__td--description{color:var(--table-text-secondary);line-height:1.5}.docs-api-table__row{transition:background-color .15s ease}.docs-api-table__row:hover{background:var(--table-row-hover)}.docs-api-table__row:last-child .docs-api-table__td{border-bottom:none}.docs-api-table__row--deprecated{opacity:.65}.docs-api-table__row--deprecated .docs-api-table__code{text-decoration:line-through}.docs-api-table__code{display:inline-block;font-family:SF Mono,Fira Code,Monaco,Consolas,monospace;font-size:.75rem;font-weight:500;color:var(--code-text);background:var(--code-bg);padding:.125rem .375rem;border-radius:4px;word-break:break-word}.docs-api-table__type,.docs-api-table__default{display:inline-block;font-family:SF Mono,Fira Code,Monaco,Consolas,monospace;font-size:.6875rem;font-weight:500;color:var(--type-text);background:var(--type-bg);padding:.1875rem .375rem;border-radius:4px;white-space:normal;word-break:break-word}.docs-api-table__required{color:var(--ion-color-danger, #dc3545);font-weight:700;margin-left:.25rem;font-size:1rem;vertical-align:middle}.docs-api-table__badge{display:inline-block;margin-left:.5rem;padding:.1875rem .5rem;font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.025em;border-radius:4px;background:#e9ecef;color:#495057;vertical-align:middle}.docs-api-table__badge--deprecated{background:#fff3cd;color:#856404}.docs-api-table__deprecation-note{margin-top:.5rem;font-size:.75rem;font-style:italic;color:#856404}.docs-api-table__empty{padding:3rem;text-align:center;color:var(--table-text-secondary);font-style:italic}.docs-api-table--bordered .docs-api-table__wrapper{border:1px solid var(--table-border);border-radius:12px;overflow-x:auto;overflow-y:hidden;background:var(--table-bg)}.docs-api-table--bordered .docs-api-table__th:first-child{border-top-left-radius:11px}.docs-api-table--bordered .docs-api-table__th:last-child{border-top-right-radius:11px}@media (max-width: 768px){.docs-api-table__table{display:block}.docs-api-table__table thead{display:none}.docs-api-table__table tbody{display:block}.docs-api-table__row{display:block;padding:1rem;margin-bottom:.5rem;border:1px solid var(--table-border);border-radius:8px;background:var(--table-bg)}.docs-api-table__row:last-child{margin-bottom:0}.docs-api-table__row:hover{background:var(--table-row-hover)}.docs-api-table__td{display:block;padding:.375rem 0;border:none!important}.docs-api-table__td:before{content:attr(data-label);display:block;font-size:.6875rem;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--table-text-secondary);margin-bottom:.25rem}.docs-api-table__td--name{padding-bottom:.5rem;margin-bottom:.5rem;border-bottom:1px solid var(--table-border)!important}.docs-api-table__td--description:before{display:none}.docs-api-table--bordered .docs-api-table__wrapper{border:none;border-radius:0;background:transparent}}:host-context(.dark) .docs-api-table,:host-context([color-scheme=dark]) .docs-api-table{--table-bg: #1e1e1e;--table-border: #3a3a3a;--table-header-bg: #252525;--table-row-hover: rgba(255, 255, 255, .03);--table-text: #f4f5f8;--table-text-secondary: #a0a0a0;--code-bg: rgba(56, 139, 253, .15);--code-text: #79b8ff;--type-bg: rgba(255, 255, 255, .08);--type-text: #c9d1d9}:host-context(.dark) .docs-api-table__badge,:host-context([color-scheme=dark]) .docs-api-table__badge{background:#ffffff14;color:#c9d1d9}:host-context(.dark) .docs-api-table__badge--deprecated,:host-context([color-scheme=dark]) .docs-api-table__badge--deprecated{background:#ffc10726;color:#ffc107}:host-context(.dark) .docs-api-table__deprecation-note,:host-context([color-scheme=dark]) .docs-api-table__deprecation-note{color:#ffc107}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
34621
+ `, isInline: true, styles: [".docs-api-table{--table-bg: var(--ion-background-color, #fff);--table-border: var(--ion-border-color, #e0e0e0);--table-header-bg: #f8f9fa;--table-row-hover: rgba(0, 0, 0, .02);--table-text: var(--ion-text-color, #1a1a1a);--table-text-secondary: #5b6570;--code-bg: #f1f3f5;--code-text: #0d6efd;--type-bg: #e9ecef;--type-text: #495057;margin:1.5rem 0;font-family:var(--ion-font-family, system-ui, -apple-system, sans-serif)}.docs-api-table__title{font-size:1.25rem;font-weight:700;margin:0 0 1rem;color:var(--table-text)}.docs-api-table__wrapper{overflow-x:auto;-webkit-overflow-scrolling:touch;max-width:100%}.docs-api-table__table{width:100%;min-width:620px;border-collapse:separate;border-spacing:0;font-size:.875rem;line-height:1.5;table-layout:fixed}.docs-api-table__th{text-align:left;padding:.625rem .75rem;font-weight:600;font-size:.8125rem;color:var(--table-text-secondary);background:var(--table-header-bg);border-bottom:2px solid var(--table-border);white-space:nowrap}.docs-api-table__th--name{width:120px}.docs-api-table__th--type{width:160px}.docs-api-table__th--default{width:110px}.docs-api-table__th--description{width:auto}.docs-api-table__td{padding:.625rem .75rem;border-bottom:1px solid var(--table-border);vertical-align:top;color:var(--table-text)}.docs-api-table__td--description{color:var(--table-text-secondary);line-height:1.5}.docs-api-table__row{transition:background-color .15s ease}.docs-api-table__row:hover{background:var(--table-row-hover)}.docs-api-table__row:last-child .docs-api-table__td{border-bottom:none}.docs-api-table__row--deprecated{opacity:.65}.docs-api-table__row--deprecated .docs-api-table__code{text-decoration:line-through}.docs-api-table__code{display:inline-block;font-family:SF Mono,Fira Code,Monaco,Consolas,monospace;font-size:.75rem;font-weight:500;color:var(--code-text);background:var(--code-bg);padding:.125rem .375rem;border-radius:4px;word-break:break-word}.docs-api-table__type,.docs-api-table__default{display:inline-block;font-family:SF Mono,Fira Code,Monaco,Consolas,monospace;font-size:.6875rem;font-weight:500;color:var(--type-text);background:var(--type-bg);padding:.1875rem .375rem;border-radius:4px;white-space:normal;word-break:break-word}.docs-api-table__required{color:var(--ion-color-danger, #dc3545);font-weight:700;margin-left:.25rem;font-size:1rem;vertical-align:middle}.docs-api-table__badge{display:inline-block;margin-left:.5rem;padding:.1875rem .5rem;font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.025em;border-radius:4px;background:#e9ecef;color:#495057;vertical-align:middle}.docs-api-table__badge--deprecated{background:#fff3cd;color:#856404}.docs-api-table__deprecation-note{margin-top:.5rem;font-size:.75rem;font-style:italic;color:#856404}.docs-api-table__empty{padding:3rem;text-align:center;color:var(--table-text-secondary);font-style:italic}.docs-api-table--bordered .docs-api-table__wrapper{border:1px solid var(--table-border);border-radius:12px;overflow-x:auto;overflow-y:hidden;background:var(--table-bg)}.docs-api-table--bordered .docs-api-table__th:first-child{border-top-left-radius:11px}.docs-api-table--bordered .docs-api-table__th:last-child{border-top-right-radius:11px}@media (max-width: 768px){.docs-api-table__table{display:block}.docs-api-table__table thead{display:none}.docs-api-table__table tbody{display:block}.docs-api-table__row{display:block;padding:1rem;margin-bottom:.5rem;border:1px solid var(--table-border);border-radius:8px;background:var(--table-bg)}.docs-api-table__row:last-child{margin-bottom:0}.docs-api-table__row:hover{background:var(--table-row-hover)}.docs-api-table__td{display:block;padding:.375rem 0;border:none!important}.docs-api-table__td:before{content:attr(data-label);display:block;font-size:.6875rem;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--table-text-secondary);margin-bottom:.25rem}.docs-api-table__td--name{padding-bottom:.5rem;margin-bottom:.5rem;border-bottom:1px solid var(--table-border)!important}.docs-api-table__td--description:before{display:none}.docs-api-table--bordered .docs-api-table__wrapper{border:none;border-radius:0;background:transparent}}:host-context(.dark) .docs-api-table,:host-context([color-scheme=dark]) .docs-api-table{--table-bg: #1e1e1e;--table-border: #3a3a3a;--table-header-bg: #252525;--table-row-hover: rgba(255, 255, 255, .03);--table-text: #f4f5f8;--table-text-secondary: #a0a0a0;--code-bg: rgba(56, 139, 253, .15);--code-text: #79b8ff;--type-bg: rgba(255, 255, 255, .08);--type-text: #c9d1d9}:host-context(.dark) .docs-api-table__badge,:host-context([color-scheme=dark]) .docs-api-table__badge{background:#ffffff14;color:#c9d1d9}:host-context(.dark) .docs-api-table__badge--deprecated,:host-context([color-scheme=dark]) .docs-api-table__badge--deprecated{background:#ffc10726;color:#ffc107}:host-context(.dark) .docs-api-table__deprecation-note,:host-context([color-scheme=dark]) .docs-api-table__deprecation-note{color:#ffc107}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
34405
34622
  }
34406
34623
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DocsApiTableComponent, decorators: [{
34407
34624
  type: Component,
@@ -34488,7 +34705,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
34488
34705
  <p class="docs-api-table__empty">No items to display.</p>
34489
34706
  }
34490
34707
  </div>
34491
- `, styles: [".docs-api-table{--table-bg: var(--ion-background-color, #fff);--table-border: var(--ion-border-color, #e0e0e0);--table-header-bg: #f8f9fa;--table-row-hover: rgba(0, 0, 0, .02);--table-text: var(--ion-text-color, #1a1a1a);--table-text-secondary: #5b6570;--code-bg: #f1f3f5;--code-text: #0d6efd;--type-bg: #e9ecef;--type-text: #495057;margin:1.5rem 0;font-family:var(--ion-font-family, system-ui, -apple-system, sans-serif)}.docs-api-table__title{font-size:1.25rem;font-weight:700;margin:0 0 1rem;color:var(--table-text)}.docs-api-table__wrapper{overflow-x:auto;-webkit-overflow-scrolling:touch;max-width:100%}.docs-api-table__table{width:100%;min-width:550px;border-collapse:separate;border-spacing:0;font-size:.875rem;line-height:1.5;table-layout:fixed}.docs-api-table__th{text-align:left;padding:.625rem .75rem;font-weight:600;font-size:.8125rem;color:var(--table-text-secondary);background:var(--table-header-bg);border-bottom:2px solid var(--table-border);white-space:nowrap}.docs-api-table__th--name{width:120px}.docs-api-table__th--type{width:130px}.docs-api-table__th--default{width:80px}.docs-api-table__th--description{width:auto}.docs-api-table__td{padding:.625rem .75rem;border-bottom:1px solid var(--table-border);vertical-align:top;color:var(--table-text)}.docs-api-table__td--description{color:var(--table-text-secondary);line-height:1.5}.docs-api-table__row{transition:background-color .15s ease}.docs-api-table__row:hover{background:var(--table-row-hover)}.docs-api-table__row:last-child .docs-api-table__td{border-bottom:none}.docs-api-table__row--deprecated{opacity:.65}.docs-api-table__row--deprecated .docs-api-table__code{text-decoration:line-through}.docs-api-table__code{display:inline-block;font-family:SF Mono,Fira Code,Monaco,Consolas,monospace;font-size:.75rem;font-weight:500;color:var(--code-text);background:var(--code-bg);padding:.125rem .375rem;border-radius:4px;word-break:break-word}.docs-api-table__type,.docs-api-table__default{display:inline-block;font-family:SF Mono,Fira Code,Monaco,Consolas,monospace;font-size:.6875rem;font-weight:500;color:var(--type-text);background:var(--type-bg);padding:.1875rem .375rem;border-radius:4px;white-space:normal;word-break:break-word}.docs-api-table__required{color:var(--ion-color-danger, #dc3545);font-weight:700;margin-left:.25rem;font-size:1rem;vertical-align:middle}.docs-api-table__badge{display:inline-block;margin-left:.5rem;padding:.1875rem .5rem;font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.025em;border-radius:4px;background:#e9ecef;color:#495057;vertical-align:middle}.docs-api-table__badge--deprecated{background:#fff3cd;color:#856404}.docs-api-table__deprecation-note{margin-top:.5rem;font-size:.75rem;font-style:italic;color:#856404}.docs-api-table__empty{padding:3rem;text-align:center;color:var(--table-text-secondary);font-style:italic}.docs-api-table--bordered .docs-api-table__wrapper{border:1px solid var(--table-border);border-radius:12px;overflow-x:auto;overflow-y:hidden;background:var(--table-bg)}.docs-api-table--bordered .docs-api-table__th:first-child{border-top-left-radius:11px}.docs-api-table--bordered .docs-api-table__th:last-child{border-top-right-radius:11px}@media (max-width: 768px){.docs-api-table__table{display:block}.docs-api-table__table thead{display:none}.docs-api-table__table tbody{display:block}.docs-api-table__row{display:block;padding:1rem;margin-bottom:.5rem;border:1px solid var(--table-border);border-radius:8px;background:var(--table-bg)}.docs-api-table__row:last-child{margin-bottom:0}.docs-api-table__row:hover{background:var(--table-row-hover)}.docs-api-table__td{display:block;padding:.375rem 0;border:none!important}.docs-api-table__td:before{content:attr(data-label);display:block;font-size:.6875rem;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--table-text-secondary);margin-bottom:.25rem}.docs-api-table__td--name{padding-bottom:.5rem;margin-bottom:.5rem;border-bottom:1px solid var(--table-border)!important}.docs-api-table__td--description:before{display:none}.docs-api-table--bordered .docs-api-table__wrapper{border:none;border-radius:0;background:transparent}}:host-context(.dark) .docs-api-table,:host-context([color-scheme=dark]) .docs-api-table{--table-bg: #1e1e1e;--table-border: #3a3a3a;--table-header-bg: #252525;--table-row-hover: rgba(255, 255, 255, .03);--table-text: #f4f5f8;--table-text-secondary: #a0a0a0;--code-bg: rgba(56, 139, 253, .15);--code-text: #79b8ff;--type-bg: rgba(255, 255, 255, .08);--type-text: #c9d1d9}:host-context(.dark) .docs-api-table__badge,:host-context([color-scheme=dark]) .docs-api-table__badge{background:#ffffff14;color:#c9d1d9}:host-context(.dark) .docs-api-table__badge--deprecated,:host-context([color-scheme=dark]) .docs-api-table__badge--deprecated{background:#ffc10726;color:#ffc107}:host-context(.dark) .docs-api-table__deprecation-note,:host-context([color-scheme=dark]) .docs-api-table__deprecation-note{color:#ffc107}\n"] }]
34708
+ `, styles: [".docs-api-table{--table-bg: var(--ion-background-color, #fff);--table-border: var(--ion-border-color, #e0e0e0);--table-header-bg: #f8f9fa;--table-row-hover: rgba(0, 0, 0, .02);--table-text: var(--ion-text-color, #1a1a1a);--table-text-secondary: #5b6570;--code-bg: #f1f3f5;--code-text: #0d6efd;--type-bg: #e9ecef;--type-text: #495057;margin:1.5rem 0;font-family:var(--ion-font-family, system-ui, -apple-system, sans-serif)}.docs-api-table__title{font-size:1.25rem;font-weight:700;margin:0 0 1rem;color:var(--table-text)}.docs-api-table__wrapper{overflow-x:auto;-webkit-overflow-scrolling:touch;max-width:100%}.docs-api-table__table{width:100%;min-width:620px;border-collapse:separate;border-spacing:0;font-size:.875rem;line-height:1.5;table-layout:fixed}.docs-api-table__th{text-align:left;padding:.625rem .75rem;font-weight:600;font-size:.8125rem;color:var(--table-text-secondary);background:var(--table-header-bg);border-bottom:2px solid var(--table-border);white-space:nowrap}.docs-api-table__th--name{width:120px}.docs-api-table__th--type{width:160px}.docs-api-table__th--default{width:110px}.docs-api-table__th--description{width:auto}.docs-api-table__td{padding:.625rem .75rem;border-bottom:1px solid var(--table-border);vertical-align:top;color:var(--table-text)}.docs-api-table__td--description{color:var(--table-text-secondary);line-height:1.5}.docs-api-table__row{transition:background-color .15s ease}.docs-api-table__row:hover{background:var(--table-row-hover)}.docs-api-table__row:last-child .docs-api-table__td{border-bottom:none}.docs-api-table__row--deprecated{opacity:.65}.docs-api-table__row--deprecated .docs-api-table__code{text-decoration:line-through}.docs-api-table__code{display:inline-block;font-family:SF Mono,Fira Code,Monaco,Consolas,monospace;font-size:.75rem;font-weight:500;color:var(--code-text);background:var(--code-bg);padding:.125rem .375rem;border-radius:4px;word-break:break-word}.docs-api-table__type,.docs-api-table__default{display:inline-block;font-family:SF Mono,Fira Code,Monaco,Consolas,monospace;font-size:.6875rem;font-weight:500;color:var(--type-text);background:var(--type-bg);padding:.1875rem .375rem;border-radius:4px;white-space:normal;word-break:break-word}.docs-api-table__required{color:var(--ion-color-danger, #dc3545);font-weight:700;margin-left:.25rem;font-size:1rem;vertical-align:middle}.docs-api-table__badge{display:inline-block;margin-left:.5rem;padding:.1875rem .5rem;font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.025em;border-radius:4px;background:#e9ecef;color:#495057;vertical-align:middle}.docs-api-table__badge--deprecated{background:#fff3cd;color:#856404}.docs-api-table__deprecation-note{margin-top:.5rem;font-size:.75rem;font-style:italic;color:#856404}.docs-api-table__empty{padding:3rem;text-align:center;color:var(--table-text-secondary);font-style:italic}.docs-api-table--bordered .docs-api-table__wrapper{border:1px solid var(--table-border);border-radius:12px;overflow-x:auto;overflow-y:hidden;background:var(--table-bg)}.docs-api-table--bordered .docs-api-table__th:first-child{border-top-left-radius:11px}.docs-api-table--bordered .docs-api-table__th:last-child{border-top-right-radius:11px}@media (max-width: 768px){.docs-api-table__table{display:block}.docs-api-table__table thead{display:none}.docs-api-table__table tbody{display:block}.docs-api-table__row{display:block;padding:1rem;margin-bottom:.5rem;border:1px solid var(--table-border);border-radius:8px;background:var(--table-bg)}.docs-api-table__row:last-child{margin-bottom:0}.docs-api-table__row:hover{background:var(--table-row-hover)}.docs-api-table__td{display:block;padding:.375rem 0;border:none!important}.docs-api-table__td:before{content:attr(data-label);display:block;font-size:.6875rem;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--table-text-secondary);margin-bottom:.25rem}.docs-api-table__td--name{padding-bottom:.5rem;margin-bottom:.5rem;border-bottom:1px solid var(--table-border)!important}.docs-api-table__td--description:before{display:none}.docs-api-table--bordered .docs-api-table__wrapper{border:none;border-radius:0;background:transparent}}:host-context(.dark) .docs-api-table,:host-context([color-scheme=dark]) .docs-api-table{--table-bg: #1e1e1e;--table-border: #3a3a3a;--table-header-bg: #252525;--table-row-hover: rgba(255, 255, 255, .03);--table-text: #f4f5f8;--table-text-secondary: #a0a0a0;--code-bg: rgba(56, 139, 253, .15);--code-text: #79b8ff;--type-bg: rgba(255, 255, 255, .08);--type-text: #c9d1d9}:host-context(.dark) .docs-api-table__badge,:host-context([color-scheme=dark]) .docs-api-table__badge{background:#ffffff14;color:#c9d1d9}:host-context(.dark) .docs-api-table__badge--deprecated,:host-context([color-scheme=dark]) .docs-api-table__badge--deprecated{background:#ffc10726;color:#ffc107}:host-context(.dark) .docs-api-table__deprecation-note,:host-context([color-scheme=dark]) .docs-api-table__deprecation-note{color:#ffc107}\n"] }]
34492
34709
  }], propDecorators: { props: [{
34493
34710
  type: Input
34494
34711
  }] } });
@@ -34641,7 +34858,7 @@ class DocsCodeExampleComponent {
34641
34858
  </div>
34642
34859
  }
34643
34860
  </div>
34644
- `, isInline: true, styles: [".docs-code-example{margin:1.5rem 0;border:1px solid #f2f6f7;border-radius:12px;overflow:hidden;box-shadow:0 2px 4px #0000000d;background:#fff}.docs-code-example__header{padding:1rem 1.25rem;border-bottom:1px solid #f2f6f7;background:#fff}.docs-code-example__title{font-size:1rem;font-weight:600;margin:0 0 .25rem;color:var(--ion-text-color, #1a1a1a)}.docs-code-example__description{font-size:.875rem;color:var(--ion-color-medium, #666);margin:0}.docs-code-example__external-link{display:inline-flex;align-items:center;gap:.25rem;margin-top:.5rem;font-size:.8125rem;color:#555;text-decoration:none}.docs-code-example__external-link:hover{color:#1a1a1a;text-decoration:underline}.docs-code-example__external-link ion-icon{font-size:.875rem}.docs-code-example__preview{padding:1.5rem;background:#fff;border-bottom:1px solid #f2f6f7}.docs-code-example__tabs{background:#f6f9fa}.docs-code-example__tab-list{display:flex;gap:2px;border-bottom:1px solid #f2f6f7;overflow-x:auto;scrollbar-width:thin;font-size:12px}.docs-code-example__tab{padding:10px 18px 8px;font-family:Roboto Mono,SF Mono,Monaco,monospace;font-size:.95em;font-weight:500;color:#899396;background:transparent;border:1px solid transparent;border-bottom:none;border-radius:8px 8px 0 0;cursor:pointer;transition:background .2s,color .2s;margin-bottom:-1px;white-space:nowrap}.docs-code-example__tab:hover{background:#e8eef2}.docs-code-example__tab--active{background:#fff;color:#19422d;border:1px solid #f2f6f7;border-bottom:1px solid #ffffff;font-weight:600;z-index:2}.docs-code-example__code-panel{position:relative;background:#fff}.docs-code-example__code-header{position:sticky;top:10px;float:right;z-index:10;height:0;margin-right:15px}.docs-code-example__copy-btn{--padding-start: 2px;--padding-end: 2px;min-width:28px;min-height:28px;height:28px;width:28px;--color: var(--ion-color-primary);--background: rgba(255, 255, 255, .7);border-radius:6px;box-shadow:0 1px 4px #0000000d;opacity:0;transition:opacity .2s ease}.docs-code-example__code-panel:hover .docs-code-example__copy-btn{opacity:1}.docs-code-example__copy-btn:hover{--background: rgba(255, 255, 255, .9)}.docs-code-example__pre{margin:0;padding:1rem 1.25rem;overflow-x:auto;overflow-y:auto;max-height:30rem;min-height:3rem;background:#fff;white-space:pre;word-break:normal}.docs-code-example__pre--line-numbers{padding-left:3rem;counter-reset:line}.docs-code-example__code{display:block;font-family:Roboto Mono,SF Mono,Monaco,Courier New,monospace;font-size:.85em;line-height:1.5;color:#24292f;white-space:inherit;word-break:normal;tab-size:2}.docs-code-example__code .token{text-decoration:none!important}.docs-code-example__code .token.comment,.docs-code-example__code .token.prolog,.docs-code-example__code .token.doctype,.docs-code-example__code .token.cdata{color:#6a737d}.docs-code-example__code .token.punctuation{color:#24292f}.docs-code-example__code .token.property,.docs-code-example__code .token.tag,.docs-code-example__code .token.boolean,.docs-code-example__code .token.number,.docs-code-example__code .token.constant,.docs-code-example__code .token.symbol,.docs-code-example__code .token.deleted{color:#005cc5}.docs-code-example__code .token.selector,.docs-code-example__code .token.attr-name,.docs-code-example__code .token.string,.docs-code-example__code .token.char,.docs-code-example__code .token.builtin,.docs-code-example__code .token.inserted{color:#22863a}.docs-code-example__code .token.operator,.docs-code-example__code .token.entity,.docs-code-example__code .token.url{color:#24292f}.docs-code-example__code .token.atrule,.docs-code-example__code .token.attr-value,.docs-code-example__code .token.keyword{color:#d73a49}.docs-code-example__code .token.function,.docs-code-example__code .token.class-name{color:#6f42c1}.docs-code-example__code .token.regex,.docs-code-example__code .token.important,.docs-code-example__code .token.variable{color:#e36209}@media (max-width: 600px){.docs-code-example{border-radius:8px}.docs-code-example__tab-list{font-size:11px}.docs-code-example__pre{max-height:20rem}.docs-code-example__code{font-size:.75em}}@media (prefers-color-scheme: dark){.docs-code-example{background:#21252b;border-color:#3b4048;box-shadow:0 4px 15px #0009}.docs-code-example__header{background:#21252b;border-color:#3b4048}.docs-code-example__title{color:#c9d1d9}.docs-code-example__preview{background:#161b22;border-color:#3b4048}.docs-code-example__tabs{background:#1a1a1a}.docs-code-example__tab-list{border-color:#3b4048}.docs-code-example__tab{color:#8b949e}.docs-code-example__tab:hover{background:#21252b}.docs-code-example__tab--active{background:#282c34;color:#c9d1d9;border-color:#3b4048;border-bottom-color:#282c34}.docs-code-example__code-panel,.docs-code-example__pre{background:#161b22}.docs-code-example__code{color:#c9d1d9}.docs-code-example__copy-btn{--background: rgba(0, 0, 0, .4)}.docs-code-example__copy-btn:hover{--background: rgba(0, 0, 0, .6)}.docs-code-example__code .token.comment,.docs-code-example__code .token.prolog,.docs-code-example__code .token.doctype,.docs-code-example__code .token.cdata{color:#8b949e}.docs-code-example__code .token.punctuation{color:#c9d1d9}.docs-code-example__code .token.property,.docs-code-example__code .token.tag,.docs-code-example__code .token.boolean,.docs-code-example__code .token.number,.docs-code-example__code .token.constant,.docs-code-example__code .token.symbol,.docs-code-example__code .token.deleted{color:#79c0ff}.docs-code-example__code .token.selector,.docs-code-example__code .token.attr-name,.docs-code-example__code .token.string,.docs-code-example__code .token.char,.docs-code-example__code .token.builtin,.docs-code-example__code .token.inserted{color:#7ee787}.docs-code-example__code .token.operator,.docs-code-example__code .token.entity,.docs-code-example__code .token.url{color:#c9d1d9}.docs-code-example__code .token.atrule,.docs-code-example__code .token.attr-value,.docs-code-example__code .token.keyword{color:#ff7b72}.docs-code-example__code .token.function,.docs-code-example__code .token.class-name{color:#d2a8ff}.docs-code-example__code .token.regex,.docs-code-example__code .token.important,.docs-code-example__code .token.variable{color:#ffa657}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }], encapsulation: i0.ViewEncapsulation.None }); }
34861
+ `, isInline: true, styles: [".docs-code-example{margin:1.5rem 0;border:1px solid #f2f6f7;border-radius:12px;overflow:hidden;box-shadow:0 2px 4px #0000000d;background:#fff}.docs-code-example__header{padding:1rem 1.25rem;border-bottom:1px solid #f2f6f7;background:#fff}.docs-code-example__title{font-size:1rem;font-weight:600;margin:0 0 .25rem;color:var(--ion-text-color, #1a1a1a)}.docs-code-example__description{font-size:.875rem;color:var(--ion-color-medium, #666);margin:0}.docs-code-example__external-link{display:inline-flex;align-items:center;gap:.25rem;margin-top:.5rem;font-size:.8125rem;color:#555;text-decoration:none}.docs-code-example__external-link:hover{color:#1a1a1a;text-decoration:underline}.docs-code-example__external-link ion-icon{font-size:.875rem}.docs-code-example__preview{padding:1.5rem;background:#fff;border-bottom:1px solid #f2f6f7}.docs-code-example__tabs{background:#f6f9fa}.docs-code-example__tab-list{display:flex;gap:2px;border-bottom:1px solid #f2f6f7;overflow-x:auto;scrollbar-width:thin;font-size:12px}.docs-code-example__tab{padding:10px 18px 8px;font-family:Roboto Mono,SF Mono,Monaco,monospace;font-size:.95em;font-weight:500;color:#899396;background:transparent;border:1px solid transparent;border-bottom:none;border-radius:8px 8px 0 0;cursor:pointer;transition:background .2s,color .2s;margin-bottom:-1px;white-space:nowrap}.docs-code-example__tab:hover{background:#e8eef2}.docs-code-example__tab--active{background:#fff;color:#19422d;border:1px solid #f2f6f7;border-bottom:1px solid #ffffff;font-weight:600;z-index:2}.docs-code-example__code-panel{position:relative;background:#fff}.docs-code-example__code-header{position:sticky;top:10px;float:right;z-index:10;height:0;margin-right:15px}.docs-code-example__copy-btn{--padding-start: 2px;--padding-end: 2px;min-width:28px;min-height:28px;height:28px;width:28px;--color: var(--ion-color-primary);--background: rgba(255, 255, 255, .7);border-radius:6px;box-shadow:0 1px 4px #0000000d;opacity:0;transition:opacity .2s ease}.docs-code-example__code-panel:hover .docs-code-example__copy-btn{opacity:1}.docs-code-example__copy-btn:hover{--background: rgba(255, 255, 255, .9)}.docs-code-example__pre{margin:0;padding:1rem 1.25rem;overflow-x:auto;overflow-y:auto;max-height:30rem;min-height:3rem;background:#fff;white-space:pre;word-break:normal}.docs-code-example__pre--line-numbers{padding-left:3rem;counter-reset:line}.docs-code-example__code{display:block;font-family:Roboto Mono,SF Mono,Monaco,Courier New,monospace;font-size:.75em;line-height:1.5;color:#24292f;white-space:inherit;word-break:normal;tab-size:2}.docs-code-example__code .token{text-decoration:none!important}.docs-code-example__code .token.comment,.docs-code-example__code .token.prolog,.docs-code-example__code .token.doctype,.docs-code-example__code .token.cdata{color:#6a737d}.docs-code-example__code .token.punctuation{color:#24292f}.docs-code-example__code .token.property,.docs-code-example__code .token.tag,.docs-code-example__code .token.boolean,.docs-code-example__code .token.number,.docs-code-example__code .token.constant,.docs-code-example__code .token.symbol,.docs-code-example__code .token.deleted{color:#005cc5}.docs-code-example__code .token.selector,.docs-code-example__code .token.attr-name,.docs-code-example__code .token.string,.docs-code-example__code .token.char,.docs-code-example__code .token.builtin,.docs-code-example__code .token.inserted{color:#22863a}.docs-code-example__code .token.operator,.docs-code-example__code .token.entity,.docs-code-example__code .token.url{color:#24292f}.docs-code-example__code .token.atrule,.docs-code-example__code .token.attr-value,.docs-code-example__code .token.keyword{color:#d73a49}.docs-code-example__code .token.function,.docs-code-example__code .token.class-name{color:#6f42c1}.docs-code-example__code .token.regex,.docs-code-example__code .token.important,.docs-code-example__code .token.variable{color:#e36209}@media (max-width: 600px){.docs-code-example{border-radius:8px}.docs-code-example__tab-list{font-size:11px}.docs-code-example__pre{max-height:20rem}.docs-code-example__code{font-size:.7em}}@media (prefers-color-scheme: dark){.docs-code-example{background:#21252b;border-color:#3b4048;box-shadow:0 4px 15px #0009}.docs-code-example__header{background:#21252b;border-color:#3b4048}.docs-code-example__title{color:#c9d1d9}.docs-code-example__preview{background:#161b22;border-color:#3b4048}.docs-code-example__tabs{background:#1a1a1a}.docs-code-example__tab-list{border-color:#3b4048}.docs-code-example__tab{color:#8b949e}.docs-code-example__tab:hover{background:#21252b}.docs-code-example__tab--active{background:#282c34;color:#c9d1d9;border-color:#3b4048;border-bottom-color:#282c34}.docs-code-example__code-panel,.docs-code-example__pre{background:#161b22}.docs-code-example__code{color:#c9d1d9}.docs-code-example__copy-btn{--background: rgba(0, 0, 0, .4)}.docs-code-example__copy-btn:hover{--background: rgba(0, 0, 0, .6)}.docs-code-example__code .token.comment,.docs-code-example__code .token.prolog,.docs-code-example__code .token.doctype,.docs-code-example__code .token.cdata{color:#8b949e}.docs-code-example__code .token.punctuation{color:#c9d1d9}.docs-code-example__code .token.property,.docs-code-example__code .token.tag,.docs-code-example__code .token.boolean,.docs-code-example__code .token.number,.docs-code-example__code .token.constant,.docs-code-example__code .token.symbol,.docs-code-example__code .token.deleted{color:#79c0ff}.docs-code-example__code .token.selector,.docs-code-example__code .token.attr-name,.docs-code-example__code .token.string,.docs-code-example__code .token.char,.docs-code-example__code .token.builtin,.docs-code-example__code .token.inserted{color:#7ee787}.docs-code-example__code .token.operator,.docs-code-example__code .token.entity,.docs-code-example__code .token.url{color:#c9d1d9}.docs-code-example__code .token.atrule,.docs-code-example__code .token.attr-value,.docs-code-example__code .token.keyword{color:#ff7b72}.docs-code-example__code .token.function,.docs-code-example__code .token.class-name{color:#d2a8ff}.docs-code-example__code .token.regex,.docs-code-example__code .token.important,.docs-code-example__code .token.variable{color:#ffa657}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }], encapsulation: i0.ViewEncapsulation.None }); }
34645
34862
  }
34646
34863
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DocsCodeExampleComponent, decorators: [{
34647
34864
  type: Component,
@@ -34724,7 +34941,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
34724
34941
  </div>
34725
34942
  }
34726
34943
  </div>
34727
- `, styles: [".docs-code-example{margin:1.5rem 0;border:1px solid #f2f6f7;border-radius:12px;overflow:hidden;box-shadow:0 2px 4px #0000000d;background:#fff}.docs-code-example__header{padding:1rem 1.25rem;border-bottom:1px solid #f2f6f7;background:#fff}.docs-code-example__title{font-size:1rem;font-weight:600;margin:0 0 .25rem;color:var(--ion-text-color, #1a1a1a)}.docs-code-example__description{font-size:.875rem;color:var(--ion-color-medium, #666);margin:0}.docs-code-example__external-link{display:inline-flex;align-items:center;gap:.25rem;margin-top:.5rem;font-size:.8125rem;color:#555;text-decoration:none}.docs-code-example__external-link:hover{color:#1a1a1a;text-decoration:underline}.docs-code-example__external-link ion-icon{font-size:.875rem}.docs-code-example__preview{padding:1.5rem;background:#fff;border-bottom:1px solid #f2f6f7}.docs-code-example__tabs{background:#f6f9fa}.docs-code-example__tab-list{display:flex;gap:2px;border-bottom:1px solid #f2f6f7;overflow-x:auto;scrollbar-width:thin;font-size:12px}.docs-code-example__tab{padding:10px 18px 8px;font-family:Roboto Mono,SF Mono,Monaco,monospace;font-size:.95em;font-weight:500;color:#899396;background:transparent;border:1px solid transparent;border-bottom:none;border-radius:8px 8px 0 0;cursor:pointer;transition:background .2s,color .2s;margin-bottom:-1px;white-space:nowrap}.docs-code-example__tab:hover{background:#e8eef2}.docs-code-example__tab--active{background:#fff;color:#19422d;border:1px solid #f2f6f7;border-bottom:1px solid #ffffff;font-weight:600;z-index:2}.docs-code-example__code-panel{position:relative;background:#fff}.docs-code-example__code-header{position:sticky;top:10px;float:right;z-index:10;height:0;margin-right:15px}.docs-code-example__copy-btn{--padding-start: 2px;--padding-end: 2px;min-width:28px;min-height:28px;height:28px;width:28px;--color: var(--ion-color-primary);--background: rgba(255, 255, 255, .7);border-radius:6px;box-shadow:0 1px 4px #0000000d;opacity:0;transition:opacity .2s ease}.docs-code-example__code-panel:hover .docs-code-example__copy-btn{opacity:1}.docs-code-example__copy-btn:hover{--background: rgba(255, 255, 255, .9)}.docs-code-example__pre{margin:0;padding:1rem 1.25rem;overflow-x:auto;overflow-y:auto;max-height:30rem;min-height:3rem;background:#fff;white-space:pre;word-break:normal}.docs-code-example__pre--line-numbers{padding-left:3rem;counter-reset:line}.docs-code-example__code{display:block;font-family:Roboto Mono,SF Mono,Monaco,Courier New,monospace;font-size:.85em;line-height:1.5;color:#24292f;white-space:inherit;word-break:normal;tab-size:2}.docs-code-example__code .token{text-decoration:none!important}.docs-code-example__code .token.comment,.docs-code-example__code .token.prolog,.docs-code-example__code .token.doctype,.docs-code-example__code .token.cdata{color:#6a737d}.docs-code-example__code .token.punctuation{color:#24292f}.docs-code-example__code .token.property,.docs-code-example__code .token.tag,.docs-code-example__code .token.boolean,.docs-code-example__code .token.number,.docs-code-example__code .token.constant,.docs-code-example__code .token.symbol,.docs-code-example__code .token.deleted{color:#005cc5}.docs-code-example__code .token.selector,.docs-code-example__code .token.attr-name,.docs-code-example__code .token.string,.docs-code-example__code .token.char,.docs-code-example__code .token.builtin,.docs-code-example__code .token.inserted{color:#22863a}.docs-code-example__code .token.operator,.docs-code-example__code .token.entity,.docs-code-example__code .token.url{color:#24292f}.docs-code-example__code .token.atrule,.docs-code-example__code .token.attr-value,.docs-code-example__code .token.keyword{color:#d73a49}.docs-code-example__code .token.function,.docs-code-example__code .token.class-name{color:#6f42c1}.docs-code-example__code .token.regex,.docs-code-example__code .token.important,.docs-code-example__code .token.variable{color:#e36209}@media (max-width: 600px){.docs-code-example{border-radius:8px}.docs-code-example__tab-list{font-size:11px}.docs-code-example__pre{max-height:20rem}.docs-code-example__code{font-size:.75em}}@media (prefers-color-scheme: dark){.docs-code-example{background:#21252b;border-color:#3b4048;box-shadow:0 4px 15px #0009}.docs-code-example__header{background:#21252b;border-color:#3b4048}.docs-code-example__title{color:#c9d1d9}.docs-code-example__preview{background:#161b22;border-color:#3b4048}.docs-code-example__tabs{background:#1a1a1a}.docs-code-example__tab-list{border-color:#3b4048}.docs-code-example__tab{color:#8b949e}.docs-code-example__tab:hover{background:#21252b}.docs-code-example__tab--active{background:#282c34;color:#c9d1d9;border-color:#3b4048;border-bottom-color:#282c34}.docs-code-example__code-panel,.docs-code-example__pre{background:#161b22}.docs-code-example__code{color:#c9d1d9}.docs-code-example__copy-btn{--background: rgba(0, 0, 0, .4)}.docs-code-example__copy-btn:hover{--background: rgba(0, 0, 0, .6)}.docs-code-example__code .token.comment,.docs-code-example__code .token.prolog,.docs-code-example__code .token.doctype,.docs-code-example__code .token.cdata{color:#8b949e}.docs-code-example__code .token.punctuation{color:#c9d1d9}.docs-code-example__code .token.property,.docs-code-example__code .token.tag,.docs-code-example__code .token.boolean,.docs-code-example__code .token.number,.docs-code-example__code .token.constant,.docs-code-example__code .token.symbol,.docs-code-example__code .token.deleted{color:#79c0ff}.docs-code-example__code .token.selector,.docs-code-example__code .token.attr-name,.docs-code-example__code .token.string,.docs-code-example__code .token.char,.docs-code-example__code .token.builtin,.docs-code-example__code .token.inserted{color:#7ee787}.docs-code-example__code .token.operator,.docs-code-example__code .token.entity,.docs-code-example__code .token.url{color:#c9d1d9}.docs-code-example__code .token.atrule,.docs-code-example__code .token.attr-value,.docs-code-example__code .token.keyword{color:#ff7b72}.docs-code-example__code .token.function,.docs-code-example__code .token.class-name{color:#d2a8ff}.docs-code-example__code .token.regex,.docs-code-example__code .token.important,.docs-code-example__code .token.variable{color:#ffa657}}\n"] }]
34944
+ `, styles: [".docs-code-example{margin:1.5rem 0;border:1px solid #f2f6f7;border-radius:12px;overflow:hidden;box-shadow:0 2px 4px #0000000d;background:#fff}.docs-code-example__header{padding:1rem 1.25rem;border-bottom:1px solid #f2f6f7;background:#fff}.docs-code-example__title{font-size:1rem;font-weight:600;margin:0 0 .25rem;color:var(--ion-text-color, #1a1a1a)}.docs-code-example__description{font-size:.875rem;color:var(--ion-color-medium, #666);margin:0}.docs-code-example__external-link{display:inline-flex;align-items:center;gap:.25rem;margin-top:.5rem;font-size:.8125rem;color:#555;text-decoration:none}.docs-code-example__external-link:hover{color:#1a1a1a;text-decoration:underline}.docs-code-example__external-link ion-icon{font-size:.875rem}.docs-code-example__preview{padding:1.5rem;background:#fff;border-bottom:1px solid #f2f6f7}.docs-code-example__tabs{background:#f6f9fa}.docs-code-example__tab-list{display:flex;gap:2px;border-bottom:1px solid #f2f6f7;overflow-x:auto;scrollbar-width:thin;font-size:12px}.docs-code-example__tab{padding:10px 18px 8px;font-family:Roboto Mono,SF Mono,Monaco,monospace;font-size:.95em;font-weight:500;color:#899396;background:transparent;border:1px solid transparent;border-bottom:none;border-radius:8px 8px 0 0;cursor:pointer;transition:background .2s,color .2s;margin-bottom:-1px;white-space:nowrap}.docs-code-example__tab:hover{background:#e8eef2}.docs-code-example__tab--active{background:#fff;color:#19422d;border:1px solid #f2f6f7;border-bottom:1px solid #ffffff;font-weight:600;z-index:2}.docs-code-example__code-panel{position:relative;background:#fff}.docs-code-example__code-header{position:sticky;top:10px;float:right;z-index:10;height:0;margin-right:15px}.docs-code-example__copy-btn{--padding-start: 2px;--padding-end: 2px;min-width:28px;min-height:28px;height:28px;width:28px;--color: var(--ion-color-primary);--background: rgba(255, 255, 255, .7);border-radius:6px;box-shadow:0 1px 4px #0000000d;opacity:0;transition:opacity .2s ease}.docs-code-example__code-panel:hover .docs-code-example__copy-btn{opacity:1}.docs-code-example__copy-btn:hover{--background: rgba(255, 255, 255, .9)}.docs-code-example__pre{margin:0;padding:1rem 1.25rem;overflow-x:auto;overflow-y:auto;max-height:30rem;min-height:3rem;background:#fff;white-space:pre;word-break:normal}.docs-code-example__pre--line-numbers{padding-left:3rem;counter-reset:line}.docs-code-example__code{display:block;font-family:Roboto Mono,SF Mono,Monaco,Courier New,monospace;font-size:.75em;line-height:1.5;color:#24292f;white-space:inherit;word-break:normal;tab-size:2}.docs-code-example__code .token{text-decoration:none!important}.docs-code-example__code .token.comment,.docs-code-example__code .token.prolog,.docs-code-example__code .token.doctype,.docs-code-example__code .token.cdata{color:#6a737d}.docs-code-example__code .token.punctuation{color:#24292f}.docs-code-example__code .token.property,.docs-code-example__code .token.tag,.docs-code-example__code .token.boolean,.docs-code-example__code .token.number,.docs-code-example__code .token.constant,.docs-code-example__code .token.symbol,.docs-code-example__code .token.deleted{color:#005cc5}.docs-code-example__code .token.selector,.docs-code-example__code .token.attr-name,.docs-code-example__code .token.string,.docs-code-example__code .token.char,.docs-code-example__code .token.builtin,.docs-code-example__code .token.inserted{color:#22863a}.docs-code-example__code .token.operator,.docs-code-example__code .token.entity,.docs-code-example__code .token.url{color:#24292f}.docs-code-example__code .token.atrule,.docs-code-example__code .token.attr-value,.docs-code-example__code .token.keyword{color:#d73a49}.docs-code-example__code .token.function,.docs-code-example__code .token.class-name{color:#6f42c1}.docs-code-example__code .token.regex,.docs-code-example__code .token.important,.docs-code-example__code .token.variable{color:#e36209}@media (max-width: 600px){.docs-code-example{border-radius:8px}.docs-code-example__tab-list{font-size:11px}.docs-code-example__pre{max-height:20rem}.docs-code-example__code{font-size:.7em}}@media (prefers-color-scheme: dark){.docs-code-example{background:#21252b;border-color:#3b4048;box-shadow:0 4px 15px #0009}.docs-code-example__header{background:#21252b;border-color:#3b4048}.docs-code-example__title{color:#c9d1d9}.docs-code-example__preview{background:#161b22;border-color:#3b4048}.docs-code-example__tabs{background:#1a1a1a}.docs-code-example__tab-list{border-color:#3b4048}.docs-code-example__tab{color:#8b949e}.docs-code-example__tab:hover{background:#21252b}.docs-code-example__tab--active{background:#282c34;color:#c9d1d9;border-color:#3b4048;border-bottom-color:#282c34}.docs-code-example__code-panel,.docs-code-example__pre{background:#161b22}.docs-code-example__code{color:#c9d1d9}.docs-code-example__copy-btn{--background: rgba(0, 0, 0, .4)}.docs-code-example__copy-btn:hover{--background: rgba(0, 0, 0, .6)}.docs-code-example__code .token.comment,.docs-code-example__code .token.prolog,.docs-code-example__code .token.doctype,.docs-code-example__code .token.cdata{color:#8b949e}.docs-code-example__code .token.punctuation{color:#c9d1d9}.docs-code-example__code .token.property,.docs-code-example__code .token.tag,.docs-code-example__code .token.boolean,.docs-code-example__code .token.number,.docs-code-example__code .token.constant,.docs-code-example__code .token.symbol,.docs-code-example__code .token.deleted{color:#79c0ff}.docs-code-example__code .token.selector,.docs-code-example__code .token.attr-name,.docs-code-example__code .token.string,.docs-code-example__code .token.char,.docs-code-example__code .token.builtin,.docs-code-example__code .token.inserted{color:#7ee787}.docs-code-example__code .token.operator,.docs-code-example__code .token.entity,.docs-code-example__code .token.url{color:#c9d1d9}.docs-code-example__code .token.atrule,.docs-code-example__code .token.attr-value,.docs-code-example__code .token.keyword{color:#ff7b72}.docs-code-example__code .token.function,.docs-code-example__code .token.class-name{color:#d2a8ff}.docs-code-example__code .token.regex,.docs-code-example__code .token.important,.docs-code-example__code .token.variable{color:#ffa657}}\n"] }]
34728
34945
  }], propDecorators: { props: [{
34729
34946
  type: Input
34730
34947
  }], previewTpl: [{