@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.
- package/esm2022/lib/components/form/form.mjs +4 -3
- package/esm2022/lib/components/index.mjs +2 -1
- package/esm2022/lib/components/input-typeahead/input-typeahead.mjs +143 -0
- package/esm2022/lib/data-sources/form/input-typeahead.ds.mjs +43 -0
- package/esm2022/lib/event-handlers/form/input-typeahead.eh.mjs +23 -0
- package/esm2022/lib/layouts/advanced-search-layout/advanced-search-layout.ds.mjs +4 -4
- package/esm2022/lib/models/form.model.mjs +7 -1
- package/esm2022/lib/n7-boilerplate-muruca.module.mjs +7 -3
- package/fesm2022/net7-boilerplate-muruca.mjs +218 -9
- package/fesm2022/net7-boilerplate-muruca.mjs.map +1 -1
- package/lib/components/index.d.ts +1 -0
- package/lib/components/input-typeahead/input-typeahead.d.ts +67 -0
- package/lib/data-sources/form/input-typeahead.ds.d.ts +12 -0
- package/lib/event-handlers/form/input-typeahead.eh.d.ts +9 -0
- package/lib/models/form.model.d.ts +1 -1
- package/lib/n7-boilerplate-muruca.module.d.ts +5 -4
- package/package.json +1 -1
- package/src/lib/styles/muruca/components/_input-typeahead.scss +59 -0
|
@@ -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'\"
|
|
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'\"
|
|
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
|
|
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
|