@net7/boilerplate-muruca 5.5.8 → 5.5.9

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.
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, Pipe, Input, Component, TemplateRef, ContentChild, ElementRef, ViewChild, NgModule } from '@angular/core';
2
+ import { Injectable, Pipe, Input, Component, HostListener, TemplateRef, ContentChild, ElementRef, ViewChild, NgModule } from '@angular/core';
3
3
  import * as i1$2 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
5
  import * as i7 from '@net7/components';
@@ -4172,6 +4172,70 @@ class MrInputCheckboxEH extends EventHandler {
4172
4172
  }
4173
4173
  }
4174
4174
 
4175
+ class MrInputTypeaheadDS extends DataSource {
4176
+ constructor() {
4177
+ super(...arguments);
4178
+ this.state = {
4179
+ value: null,
4180
+ disabled: false,
4181
+ hidden: false,
4182
+ };
4183
+ this.getState = () => this.state;
4184
+ }
4185
+ transform(data) {
4186
+ return {
4187
+ ...data,
4188
+ placeholder: _t(data.placeholder)
4189
+ };
4190
+ }
4191
+ setState(newState) {
4192
+ this.state = {
4193
+ ...this.state,
4194
+ ...newState
4195
+ };
4196
+ this.refresh();
4197
+ }
4198
+ clear() {
4199
+ this.setState({ value: null });
4200
+ }
4201
+ refresh() {
4202
+ const { value, hidden, disabled } = this.state;
4203
+ // render value
4204
+ this.output.value = value;
4205
+ // fix element update (same DOM hack as MrInputTextDS)
4206
+ const el = document.getElementById(this.id);
4207
+ if (el) {
4208
+ el.value = value;
4209
+ }
4210
+ // render disabled
4211
+ this.output.disabled = disabled;
4212
+ // render hidden
4213
+ this.output.classes = hidden ? 'is-hidden' : '';
4214
+ }
4215
+ }
4216
+
4217
+ class MrInputTypeaheadEH extends EventHandler {
4218
+ listen() {
4219
+ this.innerEvents$.subscribe(({ type, payload }) => {
4220
+ switch (type) {
4221
+ case `${this.dataSource.id}.change`: {
4222
+ const { value } = payload;
4223
+ // set new value
4224
+ this.dataSource.setState({ value });
4225
+ // emit changed signal
4226
+ this.changed$.next({
4227
+ id: this.dataSource.id,
4228
+ state: this.dataSource.getState()
4229
+ });
4230
+ break;
4231
+ }
4232
+ default:
4233
+ break;
4234
+ }
4235
+ });
4236
+ }
4237
+ }
4238
+
4175
4239
  class MrFormModel {
4176
4240
  constructor() {
4177
4241
  this.loaded$ = new ReplaySubject();
@@ -4188,6 +4252,10 @@ class MrFormModel {
4188
4252
  checkbox: {
4189
4253
  ds: MrInputCheckboxDS,
4190
4254
  eh: MrInputCheckboxEH
4255
+ },
4256
+ typeahead: {
4257
+ ds: MrInputTypeaheadDS,
4258
+ eh: MrInputTypeaheadEH
4191
4259
  }
4192
4260
  };
4193
4261
  this.changed$ = new Subject();
@@ -4377,8 +4445,8 @@ class MrAdvancedSearchLayoutDS extends LayoutDataSource {
4377
4445
  if (input.data.legend) {
4378
4446
  input.data.legend = _t(input.data.legend);
4379
4447
  }
4380
- // input text
4381
- if (input.type === 'text') {
4448
+ // input text / typeahead
4449
+ if (input.type === 'text' || input.type === 'typeahead') {
4382
4450
  if (input.data.placeholder) {
4383
4451
  input.data.placeholder = _t(input.data.placeholder);
4384
4452
  }
@@ -4396,7 +4464,7 @@ class MrAdvancedSearchLayoutDS extends LayoutDataSource {
4396
4464
  });
4397
4465
  }
4398
4466
  // info tooltip
4399
- if (input.info && input.data.label && ['text', 'select'].includes(input.type)) {
4467
+ if (input.info && input.data.label && ['text', 'select', 'typeahead'].includes(input.type)) {
4400
4468
  const inputData = input.data;
4401
4469
  if (/n7-icon/.test(input.data.label))
4402
4470
  return;
@@ -4481,6 +4549,144 @@ const MrAdvancedSearchLayoutConfig = {
4481
4549
  layoutOptions: {}
4482
4550
  };
4483
4551
 
4552
+ /**
4553
+ * MrInputTypeaheadComponent
4554
+ *
4555
+ * A text input with an inline autocomplete dropdown. Supports two modes:
4556
+ *
4557
+ * 1. **Static (local) filtering** — provide a fixed list of strings via `data.options`.
4558
+ * No API call is made; suggestions are filtered client-side on every keystroke.
4559
+ *
4560
+ * ```ts
4561
+ * {
4562
+ * id: 'my-field',
4563
+ * type: 'typeahead',
4564
+ * data: {
4565
+ * id: 'my-field',
4566
+ * label: 'My Field',
4567
+ * options: ['Apple', 'Banana', 'Cherry'],
4568
+ * }
4569
+ * }
4570
+ * ```
4571
+ *
4572
+ * 2. **Dynamic (API) autocomplete** — omit `data.options` and provide
4573
+ * `data.communicationKey` instead. The component calls
4574
+ * `CommunicationService.request$(communicationKey, { queryParams: { q } })`
4575
+ * after a 200 ms debounce. The endpoint must return `string[]`.
4576
+ *
4577
+ * ```ts
4578
+ * {
4579
+ * id: 'my-field',
4580
+ * type: 'typeahead',
4581
+ * data: {
4582
+ * id: 'my-field',
4583
+ * label: 'My Field',
4584
+ * communicationKey: 'myAutocompleteEndpoint',
4585
+ * }
4586
+ * }
4587
+ * ```
4588
+ *
4589
+ * Suggestions appear after 2 characters are typed. Tab completes with the first
4590
+ * suggestion. Clicking outside dismisses the dropdown.
4591
+ */
4592
+ class MrInputTypeaheadComponent {
4593
+ constructor(communication, el) {
4594
+ this.communication = communication;
4595
+ this.el = el;
4596
+ this.suggestions = [];
4597
+ this.isLoading = false;
4598
+ this.currentQuery = '';
4599
+ /** Wraps the form emit to intercept change events for autocomplete fetching */
4600
+ this.localEmit = (type, payload) => {
4601
+ this.emit(type, payload);
4602
+ if (type === 'change') {
4603
+ this.onValueChange(payload?.value || '');
4604
+ }
4605
+ };
4606
+ }
4607
+ /** Wraps the first occurrence of `query` in `text` with a <strong> tag */
4608
+ highlight(text, query) {
4609
+ if (!query)
4610
+ return text;
4611
+ const idx = text.toLowerCase().indexOf(query.toLowerCase());
4612
+ if (idx === -1)
4613
+ return text;
4614
+ return (text.slice(0, idx) +
4615
+ '<strong>' + text.slice(idx, idx + query.length) + '</strong>' +
4616
+ text.slice(idx + query.length));
4617
+ }
4618
+ /** Completes with the first suggestion on Tab */
4619
+ onKeydown(event) {
4620
+ if (event.key === 'Tab' && this.suggestions.length > 0) {
4621
+ event.preventDefault();
4622
+ this.onSelect(this.suggestions[0]);
4623
+ }
4624
+ }
4625
+ /** Selects a suggestion, updates the input and form state */
4626
+ onSelect(suggestion, event) {
4627
+ if (event)
4628
+ event.preventDefault();
4629
+ this.emit('change', { value: suggestion });
4630
+ this.suggestions = [];
4631
+ this.isLoading = false;
4632
+ const input = this.el.nativeElement.querySelector('input');
4633
+ if (input)
4634
+ input.value = suggestion;
4635
+ }
4636
+ onDocumentClick(event) {
4637
+ if (!this.el.nativeElement.contains(event.target)) {
4638
+ this.suggestions = [];
4639
+ this.isLoading = false;
4640
+ }
4641
+ }
4642
+ ngOnDestroy() {
4643
+ clearTimeout(this.timer);
4644
+ }
4645
+ onValueChange(value) {
4646
+ clearTimeout(this.timer);
4647
+ this.currentQuery = value;
4648
+ if (!value || value.length < 2) {
4649
+ this.suggestions = [];
4650
+ this.isLoading = false;
4651
+ return;
4652
+ }
4653
+ // Static options: filter locally, no API call needed
4654
+ if (Array.isArray(this.data?.options)) {
4655
+ const q = value.toLowerCase();
4656
+ this.suggestions = this.data.options
4657
+ .filter((o) => o.toLowerCase().includes(q))
4658
+ .slice(0, 20);
4659
+ return;
4660
+ }
4661
+ this.isLoading = true;
4662
+ this.timer = setTimeout(() => {
4663
+ this.communication.request$(this.data.communicationKey, {
4664
+ queryParams: { q: value },
4665
+ onError: () => {
4666
+ this.isLoading = false;
4667
+ this.suggestions = [];
4668
+ }
4669
+ }).subscribe((res) => {
4670
+ this.isLoading = false;
4671
+ this.suggestions = res || [];
4672
+ });
4673
+ }, 200);
4674
+ }
4675
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MrInputTypeaheadComponent, deps: [{ token: i1.CommunicationService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
4676
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: MrInputTypeaheadComponent, selector: "mr-input-typeahead", inputs: { data: "data", emit: "emit" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, ngImport: i0, template: "<div class=\"mr-input-typeahead\" (keydown)=\"onKeydown($event)\">\n <n7-input-text\n [data]=\"data\"\n [emit]=\"localEmit\">\n </n7-input-text>\n <ul *ngIf=\"suggestions.length > 0\" class=\"mr-input-typeahead__dropdown\">\n <li *ngFor=\"let s of suggestions\"\n class=\"mr-input-typeahead__option\"\n (mousedown)=\"onSelect(s, $event)\">\n <span [innerHTML]=\"highlight(s, currentQuery)\"></span>\n </li>\n </ul>\n</div>\n", dependencies: [{ kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.InputTextComponent, selector: "n7-input-text", inputs: ["data", "emit"] }] }); }
4677
+ }
4678
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MrInputTypeaheadComponent, decorators: [{
4679
+ type: Component,
4680
+ args: [{ selector: 'mr-input-typeahead', template: "<div class=\"mr-input-typeahead\" (keydown)=\"onKeydown($event)\">\n <n7-input-text\n [data]=\"data\"\n [emit]=\"localEmit\">\n </n7-input-text>\n <ul *ngIf=\"suggestions.length > 0\" class=\"mr-input-typeahead__dropdown\">\n <li *ngFor=\"let s of suggestions\"\n class=\"mr-input-typeahead__option\"\n (mousedown)=\"onSelect(s, $event)\">\n <span [innerHTML]=\"highlight(s, currentQuery)\"></span>\n </li>\n </ul>\n</div>\n" }]
4681
+ }], ctorParameters: () => [{ type: i1.CommunicationService }, { type: i0.ElementRef }], propDecorators: { data: [{
4682
+ type: Input
4683
+ }], emit: [{
4684
+ type: Input
4685
+ }], onDocumentClick: [{
4686
+ type: HostListener,
4687
+ args: ['document:click', ['$event']]
4688
+ }] } });
4689
+
4484
4690
  class MrFormComponent {
4485
4691
  ngOnInit() {
4486
4692
  if (this.group) {
@@ -4498,11 +4704,11 @@ class MrFormComponent {
4498
4704
  }));
4499
4705
  }
4500
4706
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MrFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4501
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: MrFormComponent, selector: "mr-form", inputs: { form: "form", group: "group" }, queries: [{ propertyName: "templateRef", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: "<div *ngIf=\"form.loaded$ | async\" class=\"mr-form {{ group?.classes || '' }}\">\n <div *ngFor=\"let section of sections\" class=\"mr-form__section {{ section.classes || '' }}\" \n [ngClass]=\"{ 'mr-form__section-advanced' : section.advancedSection }\" >\n \n <div class=\"mr-form__section-header\">\n <h3 *ngIf=\"section.title\" class=\"mr-form__section-title\">{{ section.title }}</h3>\n <p *ngIf=\"section.description\" class=\"mr-form__section-description\">{{ section.description }}</p>\n </div>\n \n <div class=\"mr-form__section-content\">\n <div *ngFor=\"let input of section.inputs\" class=\"mr-form__element {{ input.options?.classes || '' }}\">\n <ng-container [ngSwitch]=\"input.type\">\n\n <!-- INPUT TEXT -->\n <n7-input-text *ngSwitchCase=\"'text'\" \n [data]=\"form.inputs[input.id].ds.out$ | async\"\n [emit]=\"form.inputs[input.id].emit\"></n7-input-text>\n\n <!-- INPUT CHECKBOX -->\n <n7-input-checkbox *ngSwitchCase=\"'checkbox'\" \n [data]=\"form.inputs[input.id].ds.out$ | async\"\n [emit]=\"form.inputs[input.id].emit\"></n7-input-checkbox>\n\n <!-- INPUT SELECT -->\n <n7-input-select *ngSwitchCase=\"'select'\" \n [data]=\"form.inputs[input.id].ds.out$ | async\"\n [emit]=\"form.inputs[input.id].emit\"></n7-input-select>\n\n <!-- DEFAULT (external template) -->\n <ng-container *ngSwitchDefault>\n <ng-template *ngTemplateOutlet=\"\n templateRef; \n context: { \n type: input.type, \n input: form.inputs[input.id] \n }\"></ng-template>\n </ng-container>\n\n </ng-container>\n </div>\n </div>\n </div>\n</div>", dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1$2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i7.InputCheckboxComponent, selector: "n7-input-checkbox", inputs: ["data", "emit"] }, { kind: "component", type: i7.InputSelectComponent, selector: "n7-input-select", inputs: ["data", "emit"] }, { kind: "component", type: i7.InputTextComponent, selector: "n7-input-text", inputs: ["data", "emit"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }] }); }
4707
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: MrFormComponent, selector: "mr-form", inputs: { form: "form", group: "group" }, queries: [{ propertyName: "templateRef", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: "<div *ngIf=\"form.loaded$ | async\" class=\"mr-form {{ group?.classes || '' }}\">\n <div *ngFor=\"let section of sections\" class=\"mr-form__section {{ section.classes || '' }}\" \n [ngClass]=\"{ 'mr-form__section-advanced' : section.advancedSection }\" >\n \n <div class=\"mr-form__section-header\">\n <h3 *ngIf=\"section.title\" class=\"mr-form__section-title\">{{ section.title }}</h3>\n <p *ngIf=\"section.description\" class=\"mr-form__section-description\">{{ section.description }}</p>\n </div>\n \n <div class=\"mr-form__section-content\">\n <div *ngFor=\"let input of section.inputs\" class=\"mr-form__element {{ input.options?.classes || '' }}\">\n <ng-container [ngSwitch]=\"input.type\">\n\n <!-- INPUT TEXT -->\n <n7-input-text *ngSwitchCase=\"'text'\" \n [data]=\"form.inputs[input.id].ds.out$ | async\"\n [emit]=\"form.inputs[input.id].emit\"></n7-input-text>\n\n <!-- INPUT CHECKBOX -->\n <n7-input-checkbox *ngSwitchCase=\"'checkbox'\" \n [data]=\"form.inputs[input.id].ds.out$ | async\"\n [emit]=\"form.inputs[input.id].emit\"></n7-input-checkbox>\n\n <!-- INPUT SELECT -->\n <n7-input-select *ngSwitchCase=\"'select'\"\n [data]=\"form.inputs[input.id].ds.out$ | async\"\n [emit]=\"form.inputs[input.id].emit\"></n7-input-select>\n\n <!-- INPUT TYPEAHEAD -->\n <mr-input-typeahead *ngSwitchCase=\"'typeahead'\"\n [data]=\"form.inputs[input.id].ds.out$ | async\"\n [emit]=\"form.inputs[input.id].emit\"></mr-input-typeahead>\n\n <!-- DEFAULT (external template) -->\n <ng-container *ngSwitchDefault>\n <ng-template *ngTemplateOutlet=\"\n templateRef; \n context: { \n type: input.type, \n input: form.inputs[input.id] \n }\"></ng-template>\n </ng-container>\n\n </ng-container>\n </div>\n </div>\n </div>\n</div>", dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1$2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i7.InputCheckboxComponent, selector: "n7-input-checkbox", inputs: ["data", "emit"] }, { kind: "component", type: i7.InputSelectComponent, selector: "n7-input-select", inputs: ["data", "emit"] }, { kind: "component", type: i7.InputTextComponent, selector: "n7-input-text", inputs: ["data", "emit"] }, { kind: "component", type: MrInputTypeaheadComponent, selector: "mr-input-typeahead", inputs: ["data", "emit"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }] }); }
4502
4708
  }
4503
4709
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MrFormComponent, decorators: [{
4504
4710
  type: Component,
4505
- args: [{ selector: 'mr-form', template: "<div *ngIf=\"form.loaded$ | async\" class=\"mr-form {{ group?.classes || '' }}\">\n <div *ngFor=\"let section of sections\" class=\"mr-form__section {{ section.classes || '' }}\" \n [ngClass]=\"{ 'mr-form__section-advanced' : section.advancedSection }\" >\n \n <div class=\"mr-form__section-header\">\n <h3 *ngIf=\"section.title\" class=\"mr-form__section-title\">{{ section.title }}</h3>\n <p *ngIf=\"section.description\" class=\"mr-form__section-description\">{{ section.description }}</p>\n </div>\n \n <div class=\"mr-form__section-content\">\n <div *ngFor=\"let input of section.inputs\" class=\"mr-form__element {{ input.options?.classes || '' }}\">\n <ng-container [ngSwitch]=\"input.type\">\n\n <!-- INPUT TEXT -->\n <n7-input-text *ngSwitchCase=\"'text'\" \n [data]=\"form.inputs[input.id].ds.out$ | async\"\n [emit]=\"form.inputs[input.id].emit\"></n7-input-text>\n\n <!-- INPUT CHECKBOX -->\n <n7-input-checkbox *ngSwitchCase=\"'checkbox'\" \n [data]=\"form.inputs[input.id].ds.out$ | async\"\n [emit]=\"form.inputs[input.id].emit\"></n7-input-checkbox>\n\n <!-- INPUT SELECT -->\n <n7-input-select *ngSwitchCase=\"'select'\" \n [data]=\"form.inputs[input.id].ds.out$ | async\"\n [emit]=\"form.inputs[input.id].emit\"></n7-input-select>\n\n <!-- DEFAULT (external template) -->\n <ng-container *ngSwitchDefault>\n <ng-template *ngTemplateOutlet=\"\n templateRef; \n context: { \n type: input.type, \n input: form.inputs[input.id] \n }\"></ng-template>\n </ng-container>\n\n </ng-container>\n </div>\n </div>\n </div>\n</div>" }]
4711
+ args: [{ selector: 'mr-form', template: "<div *ngIf=\"form.loaded$ | async\" class=\"mr-form {{ group?.classes || '' }}\">\n <div *ngFor=\"let section of sections\" class=\"mr-form__section {{ section.classes || '' }}\" \n [ngClass]=\"{ 'mr-form__section-advanced' : section.advancedSection }\" >\n \n <div class=\"mr-form__section-header\">\n <h3 *ngIf=\"section.title\" class=\"mr-form__section-title\">{{ section.title }}</h3>\n <p *ngIf=\"section.description\" class=\"mr-form__section-description\">{{ section.description }}</p>\n </div>\n \n <div class=\"mr-form__section-content\">\n <div *ngFor=\"let input of section.inputs\" class=\"mr-form__element {{ input.options?.classes || '' }}\">\n <ng-container [ngSwitch]=\"input.type\">\n\n <!-- INPUT TEXT -->\n <n7-input-text *ngSwitchCase=\"'text'\" \n [data]=\"form.inputs[input.id].ds.out$ | async\"\n [emit]=\"form.inputs[input.id].emit\"></n7-input-text>\n\n <!-- INPUT CHECKBOX -->\n <n7-input-checkbox *ngSwitchCase=\"'checkbox'\" \n [data]=\"form.inputs[input.id].ds.out$ | async\"\n [emit]=\"form.inputs[input.id].emit\"></n7-input-checkbox>\n\n <!-- INPUT SELECT -->\n <n7-input-select *ngSwitchCase=\"'select'\"\n [data]=\"form.inputs[input.id].ds.out$ | async\"\n [emit]=\"form.inputs[input.id].emit\"></n7-input-select>\n\n <!-- INPUT TYPEAHEAD -->\n <mr-input-typeahead *ngSwitchCase=\"'typeahead'\"\n [data]=\"form.inputs[input.id].ds.out$ | async\"\n [emit]=\"form.inputs[input.id].emit\"></mr-input-typeahead>\n\n <!-- DEFAULT (external template) -->\n <ng-container *ngSwitchDefault>\n <ng-template *ngTemplateOutlet=\"\n templateRef; \n context: { \n type: input.type, \n input: form.inputs[input.id] \n }\"></ng-template>\n </ng-container>\n\n </ng-container>\n </div>\n </div>\n </div>\n</div>" }]
4506
4712
  }], propDecorators: { form: [{
4507
4713
  type: Input
4508
4714
  }], group: [{
@@ -8601,6 +8807,7 @@ const COMPONENTS = [
8601
8807
  MrGalleryComponent,
8602
8808
  MrAdvancedResultComponent,
8603
8809
  MrMetadataDynamicComponent,
8810
+ MrInputTypeaheadComponent,
8604
8811
  ];
8605
8812
  class N7BoilerplateMurucaModule {
8606
8813
  constructor(localeService, mainState, router) {
@@ -8645,7 +8852,8 @@ class N7BoilerplateMurucaModule {
8645
8852
  MrResourceModalComponent,
8646
8853
  MrGalleryComponent,
8647
8854
  MrAdvancedResultComponent,
8648
- MrMetadataDynamicComponent], imports: [CommonModule,
8855
+ MrMetadataDynamicComponent,
8856
+ MrInputTypeaheadComponent], imports: [CommonModule,
8649
8857
  DvComponentsLibModule,
8650
8858
  N7BoilerplateCommonModule], exports: [
8651
8859
  // Layout components
@@ -8670,7 +8878,8 @@ class N7BoilerplateMurucaModule {
8670
8878
  MrResourceModalComponent,
8671
8879
  MrGalleryComponent,
8672
8880
  MrAdvancedResultComponent,
8673
- MrMetadataDynamicComponent] }); }
8881
+ MrMetadataDynamicComponent,
8882
+ MrInputTypeaheadComponent] }); }
8674
8883
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: N7BoilerplateMurucaModule, providers: [
8675
8884
  MrSearchService,
8676
8885
  MrLayoutStateService,
@@ -8966,5 +9175,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
8966
9175
  * Generated bundle index. Do not edit.
8967
9176
  */
8968
9177
 
8969
- export { DynamicPathGuard, FACETS_REQUEST_STATE_CONTEXT, FACET_STATE_CONTEXT, INPUT_STATE_CONTEXT, LayoutState, LocaleDependenciesGuard, MrAdvancedResultComponent, MrAdvancedResultsLayoutComponent, MrAdvancedResultsLayoutConfig, MrAdvancedResultsLayoutDS, MrAdvancedResultsLayoutEH, MrAdvancedSearchLayoutComponent, MrAdvancedSearchLayoutConfig, MrAdvancedSearchLayoutDS, MrAdvancedSearchLayoutEH, MrAdvancedSearchTagsDS, MrBreadcrumbsDS, MrButtonDS, MrButtonEH, MrCollectionDS, MrCollectionEH, MrContentDS, MrDummyEH, MrFiltersDS, MrFiltersEH, MrFooterService, MrFormComponent, MrFormWrapperAccordionComponent, MrFormWrapperAccordionDS, MrFormWrapperAccordionEH, MrGalleryComponent, MrGalleryDS, MrGalleryEH, MrHeroDS, MrHomeLayoutComponent, MrHomeLayoutConfig, MrHomeLayoutDS, MrHomeLayoutEH, MrImageViewerDS, MrImageViewerIiifDS, MrImageViewerOverlayDetailsDS, MrImageViewerToolsDS, MrInfoBoxDS, MrInnerTitleDS, MrItemPreviewDS, MrItemPreviewsDS, MrItineraryLayoutComponent, MrItineraryLayoutConfig, MrItineraryLayoutDS, MrItineraryLayoutEH, MrLayoutStateService, MrLocaleService, MrMapDS, MrMapEH, MrMapLayoutComponent, MrMapLayoutConfig, MrMapLayoutDS, MrMapLayoutEH, MrMenuService, MrMetadataDS, MrMetadataDynamicComponent, MrMetadataDynamicDS, MrMetadataDynamicEH, MrMetadataReadmoreComponent, MrNavDS, MrNavEH, MrNetworkDS, MrNetworkEH, MrNetworkLayoutComponent, MrNetworkLayoutConfig, MrNetworkLayoutDS, MrNetworkLayoutEH, MrNetworkResourceDS, MrNetworkResourceEH, MrParallelTextViewerDS, MrParallelTextViewerEH, MrPostsLayoutComponent, MrPostsLayoutConfig, MrPostsLayoutDS, MrPostsLayoutEH, MrResourceLayoutComponent, MrResourceLayoutConfig, MrResourceLayoutDS, MrResourceLayoutEH, MrResourceModalComponent, MrResourceModalService, MrResourceTabsDS, MrSearchFacetsLayoutComponent, MrSearchLayoutComponent, MrSearchLayoutConfig, MrSearchLayoutDS, MrSearchLayoutEH, MrSearchPageDescriptionComponent, MrSearchPageDescriptionDS, MrSearchPageDescriptionEH, MrSearchPageTitleDS, MrSearchPageTitleEH, MrSearchResultsDS, MrSearchResultsEH, MrSearchResultsTitleDS, MrSearchResultsTitleEH, MrSearchService, MrSearchTagsDS, MrSearchTagsEH, MrStaticLayoutComponent, MrStaticLayoutConfig, MrStaticLayoutDS, MrStaticLayoutEH, MrStaticMetadataDS, MrTextViewerDS, MrTextViewerEH, MrTimelineDS, MrTimelineEH, MrTimelineLayoutComponent, MrTimelineLayoutConfig, MrTimelineLayoutDS, MrTimelineLayoutEH, MrTranslationsLoaderService, MrYearHeaderDS, MrYearHeaderEH, N7BoilerplateMurucaModule, RESULTS_REQUEST_STATE_CONTEXT, ReadMoreComponent, SECTION_STATE_CONTEXT, SearchFacetsLayoutConfig, SearchFacetsLayoutDS, SearchFacetsLayoutEH };
9178
+ export { DynamicPathGuard, FACETS_REQUEST_STATE_CONTEXT, FACET_STATE_CONTEXT, INPUT_STATE_CONTEXT, LayoutState, LocaleDependenciesGuard, MrAdvancedResultComponent, MrAdvancedResultsLayoutComponent, MrAdvancedResultsLayoutConfig, MrAdvancedResultsLayoutDS, MrAdvancedResultsLayoutEH, MrAdvancedSearchLayoutComponent, MrAdvancedSearchLayoutConfig, MrAdvancedSearchLayoutDS, MrAdvancedSearchLayoutEH, MrAdvancedSearchTagsDS, MrBreadcrumbsDS, MrButtonDS, MrButtonEH, MrCollectionDS, MrCollectionEH, MrContentDS, MrDummyEH, MrFiltersDS, MrFiltersEH, MrFooterService, MrFormComponent, MrFormWrapperAccordionComponent, MrFormWrapperAccordionDS, MrFormWrapperAccordionEH, MrGalleryComponent, MrGalleryDS, MrGalleryEH, MrHeroDS, MrHomeLayoutComponent, MrHomeLayoutConfig, MrHomeLayoutDS, MrHomeLayoutEH, MrImageViewerDS, MrImageViewerIiifDS, MrImageViewerOverlayDetailsDS, MrImageViewerToolsDS, MrInfoBoxDS, MrInnerTitleDS, MrInputTypeaheadComponent, MrItemPreviewDS, MrItemPreviewsDS, MrItineraryLayoutComponent, MrItineraryLayoutConfig, MrItineraryLayoutDS, MrItineraryLayoutEH, MrLayoutStateService, MrLocaleService, MrMapDS, MrMapEH, MrMapLayoutComponent, MrMapLayoutConfig, MrMapLayoutDS, MrMapLayoutEH, MrMenuService, MrMetadataDS, MrMetadataDynamicComponent, MrMetadataDynamicDS, MrMetadataDynamicEH, MrMetadataReadmoreComponent, MrNavDS, MrNavEH, MrNetworkDS, MrNetworkEH, MrNetworkLayoutComponent, MrNetworkLayoutConfig, MrNetworkLayoutDS, MrNetworkLayoutEH, MrNetworkResourceDS, MrNetworkResourceEH, MrParallelTextViewerDS, MrParallelTextViewerEH, MrPostsLayoutComponent, MrPostsLayoutConfig, MrPostsLayoutDS, MrPostsLayoutEH, MrResourceLayoutComponent, MrResourceLayoutConfig, MrResourceLayoutDS, MrResourceLayoutEH, MrResourceModalComponent, MrResourceModalService, MrResourceTabsDS, MrSearchFacetsLayoutComponent, MrSearchLayoutComponent, MrSearchLayoutConfig, MrSearchLayoutDS, MrSearchLayoutEH, MrSearchPageDescriptionComponent, MrSearchPageDescriptionDS, MrSearchPageDescriptionEH, MrSearchPageTitleDS, MrSearchPageTitleEH, MrSearchResultsDS, MrSearchResultsEH, MrSearchResultsTitleDS, MrSearchResultsTitleEH, MrSearchService, MrSearchTagsDS, MrSearchTagsEH, MrStaticLayoutComponent, MrStaticLayoutConfig, MrStaticLayoutDS, MrStaticLayoutEH, MrStaticMetadataDS, MrTextViewerDS, MrTextViewerEH, MrTimelineDS, MrTimelineEH, MrTimelineLayoutComponent, MrTimelineLayoutConfig, MrTimelineLayoutDS, MrTimelineLayoutEH, MrTranslationsLoaderService, MrYearHeaderDS, MrYearHeaderEH, N7BoilerplateMurucaModule, RESULTS_REQUEST_STATE_CONTEXT, ReadMoreComponent, SECTION_STATE_CONTEXT, SearchFacetsLayoutConfig, SearchFacetsLayoutDS, SearchFacetsLayoutEH };
8970
9179
  //# sourceMappingURL=net7-boilerplate-muruca.mjs.map