@dereekb/dbx-form 13.7.0 → 13.8.0

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.
Files changed (45) hide show
  1. package/fesm2022/dereekb-dbx-form-array.field.component-1wYSd4d3.mjs +169 -0
  2. package/fesm2022/dereekb-dbx-form-array.field.component-1wYSd4d3.mjs.map +1 -0
  3. package/fesm2022/dereekb-dbx-form-calendar.mjs +433 -144
  4. package/fesm2022/dereekb-dbx-form-calendar.mjs.map +1 -1
  5. package/fesm2022/dereekb-dbx-form-expand.field.component-Bp5_uO1A.mjs +56 -0
  6. package/fesm2022/dereekb-dbx-form-expand.field.component-Bp5_uO1A.mjs.map +1 -0
  7. package/fesm2022/dereekb-dbx-form-formfield.field.component-BQyujXe3.mjs +70 -0
  8. package/fesm2022/dereekb-dbx-form-formfield.field.component-BQyujXe3.mjs.map +1 -0
  9. package/fesm2022/dereekb-dbx-form-info.field.component-B0cFprvc.mjs +50 -0
  10. package/fesm2022/dereekb-dbx-form-info.field.component-B0cFprvc.mjs.map +1 -0
  11. package/fesm2022/dereekb-dbx-form-info.wrapper.field.component-Crm4wVr5.mjs +35 -0
  12. package/fesm2022/dereekb-dbx-form-info.wrapper.field.component-Crm4wVr5.mjs.map +1 -0
  13. package/fesm2022/dereekb-dbx-form-mapbox.mjs +629 -32
  14. package/fesm2022/dereekb-dbx-form-mapbox.mjs.map +1 -1
  15. package/fesm2022/dereekb-dbx-form-quiz.mjs +46 -55
  16. package/fesm2022/dereekb-dbx-form-quiz.mjs.map +1 -1
  17. package/fesm2022/dereekb-dbx-form-section.field.component-DliafLqL.mjs +63 -0
  18. package/fesm2022/dereekb-dbx-form-section.field.component-DliafLqL.mjs.map +1 -0
  19. package/fesm2022/dereekb-dbx-form-style.field.component-C3ZNiotx.mjs +71 -0
  20. package/fesm2022/dereekb-dbx-form-style.field.component-C3ZNiotx.mjs.map +1 -0
  21. package/fesm2022/dereekb-dbx-form-working.field.component-CO8vK2bH.mjs +53 -0
  22. package/fesm2022/dereekb-dbx-form-working.field.component-CO8vK2bH.mjs.map +1 -0
  23. package/fesm2022/dereekb-dbx-form-working.wrapper.field.component-BtD7_5i5.mjs +54 -0
  24. package/fesm2022/dereekb-dbx-form-working.wrapper.field.component-BtD7_5i5.mjs.map +1 -0
  25. package/fesm2022/dereekb-dbx-form-wrapper.content.component-Cy4ND_se.mjs +87 -0
  26. package/fesm2022/dereekb-dbx-form-wrapper.content.component-Cy4ND_se.mjs.map +1 -0
  27. package/fesm2022/dereekb-dbx-form.mjs +11789 -4869
  28. package/fesm2022/dereekb-dbx-form.mjs.map +1 -1
  29. package/lib/forge/field/_field.scss +14 -0
  30. package/lib/forge/field/selection/_selection.scss +15 -0
  31. package/lib/forge/field/selection/pickable/_pickable.scss +11 -0
  32. package/lib/forge/field/selection/searchable/_searchable.scss +34 -0
  33. package/lib/forge/field/selection/sourceselect/_sourceselect.scss +46 -0
  34. package/lib/forge/field/wrapper/_wrapper.scss +62 -0
  35. package/lib/forge/style/_shared.scss +26 -0
  36. package/lib/form/_form.scss +95 -0
  37. package/lib/formly/field/texteditor/_texteditor.scss +8 -0
  38. package/lib/formly/field/value/array/_array.scss +6 -0
  39. package/lib/formly/field/value/phone/_phone.scss +4 -1
  40. package/lib/style/_all-core.scss +2 -0
  41. package/lib/style/_all-theme.scss +2 -0
  42. package/package.json +16 -14
  43. package/types/dereekb-dbx-form-calendar.d.ts +313 -96
  44. package/types/dereekb-dbx-form-mapbox.d.ts +297 -4
  45. package/types/dereekb-dbx-form.d.ts +8009 -2498
@@ -0,0 +1,56 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, computed, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import * as i3 from '@angular/material/button';
4
+ import { MatButtonModule } from '@angular/material/button';
5
+ import * as i1 from '@angular/material/icon';
6
+ import { MatIconModule } from '@angular/material/icon';
7
+
8
+ /**
9
+ * Forge ValueFieldComponent that renders an expand/collapse control.
10
+ *
11
+ * Displays as either a Material stroked button or a clickable text link.
12
+ * Writes `true`/`false` to its FieldTree value on click, which drives
13
+ * conditional visibility on sibling groups via ng-forge's `logic` system.
14
+ */
15
+ class DbxForgeExpandFieldComponent {
16
+ // ng-forge ValueFieldComponent inputs
17
+ field = input.required(...(ngDevMode ? [{ debugName: "field" }] : /* istanbul ignore next */ []));
18
+ key = input.required(...(ngDevMode ? [{ debugName: "key" }] : /* istanbul ignore next */ []));
19
+ label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
20
+ placeholder = input(...(ngDevMode ? [undefined, { debugName: "placeholder" }] : /* istanbul ignore next */ []));
21
+ className = input('', ...(ngDevMode ? [{ debugName: "className" }] : /* istanbul ignore next */ []));
22
+ tabIndex = input(...(ngDevMode ? [undefined, { debugName: "tabIndex" }] : /* istanbul ignore next */ []));
23
+ props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : /* istanbul ignore next */ []));
24
+ meta = input(...(ngDevMode ? [undefined, { debugName: "meta" }] : /* istanbul ignore next */ []));
25
+ validationMessages = input(...(ngDevMode ? [undefined, { debugName: "validationMessages" }] : /* istanbul ignore next */ []));
26
+ defaultValidationMessages = input(...(ngDevMode ? [undefined, { debugName: "defaultValidationMessages" }] : /* istanbul ignore next */ []));
27
+ isOpenSignal = computed(() => {
28
+ return this.field()().value() ?? false;
29
+ }, ...(ngDevMode ? [{ debugName: "isOpenSignal" }] : /* istanbul ignore next */ []));
30
+ buttonTypeSignal = computed(() => {
31
+ return this.props()?.buttonType ?? 'text';
32
+ }, ...(ngDevMode ? [{ debugName: "buttonTypeSignal" }] : /* istanbul ignore next */ []));
33
+ labelSignal = computed(() => {
34
+ return this.props()?.expandLabel ?? '';
35
+ }, ...(ngDevMode ? [{ debugName: "labelSignal" }] : /* istanbul ignore next */ []));
36
+ iconSignal = computed(() => {
37
+ return this.isOpenSignal() ? 'expand_less' : 'expand_more';
38
+ }, ...(ngDevMode ? [{ debugName: "iconSignal" }] : /* istanbul ignore next */ []));
39
+ toggle() {
40
+ const fieldState = this.field()();
41
+ const currentValue = fieldState.value() ?? false;
42
+ fieldState.value.set(!currentValue);
43
+ fieldState.markAsTouched();
44
+ }
45
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DbxForgeExpandFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
46
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: DbxForgeExpandFieldComponent, isStandalone: true, selector: "dbx-forge-expand-field", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, meta: { classPropertyName: "meta", publicName: "meta", isSignal: true, isRequired: false, transformFunction: null }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "className()" } }, ngImport: i0, template: "@if (buttonTypeSignal() === 'button') {\n <button mat-stroked-button type=\"button\" class=\"dbx-forge-expand-button\" (click)=\"toggle()\" [attr.aria-expanded]=\"isOpenSignal()\">\n <mat-icon>{{ iconSignal() }}</mat-icon>\n {{ labelSignal() }}\n </button>\n} @else {\n <span class=\"dbx-forge-expand-text\" role=\"button\" tabindex=\"0\" (click)=\"toggle()\" (keydown.enter)=\"toggle()\" (keydown.space)=\"toggle()\" [attr.aria-expanded]=\"isOpenSignal()\">\n <mat-icon class=\"dbx-forge-expand-text-icon\">{{ iconSignal() }}</mat-icon>\n {{ labelSignal() }}\n </span>\n}\n", styles: [":host{display:block}.dbx-forge-expand-text{cursor:pointer;display:inline-flex;align-items:center;gap:4px;-webkit-user-select:none;user-select:none;color:var(--mat-sys-primary);font-size:.875rem}.dbx-forge-expand-text:hover{text-decoration:underline}.dbx-forge-expand-text-icon{font-size:18px;width:18px;height:18px}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
47
+ }
48
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DbxForgeExpandFieldComponent, decorators: [{
49
+ type: Component,
50
+ args: [{ selector: 'dbx-forge-expand-field', imports: [MatButtonModule, MatIconModule], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, host: {
51
+ '[class]': 'className()'
52
+ }, template: "@if (buttonTypeSignal() === 'button') {\n <button mat-stroked-button type=\"button\" class=\"dbx-forge-expand-button\" (click)=\"toggle()\" [attr.aria-expanded]=\"isOpenSignal()\">\n <mat-icon>{{ iconSignal() }}</mat-icon>\n {{ labelSignal() }}\n </button>\n} @else {\n <span class=\"dbx-forge-expand-text\" role=\"button\" tabindex=\"0\" (click)=\"toggle()\" (keydown.enter)=\"toggle()\" (keydown.space)=\"toggle()\" [attr.aria-expanded]=\"isOpenSignal()\">\n <mat-icon class=\"dbx-forge-expand-text-icon\">{{ iconSignal() }}</mat-icon>\n {{ labelSignal() }}\n </span>\n}\n", styles: [":host{display:block}.dbx-forge-expand-text{cursor:pointer;display:inline-flex;align-items:center;gap:4px;-webkit-user-select:none;user-select:none;color:var(--mat-sys-primary);font-size:.875rem}.dbx-forge-expand-text:hover{text-decoration:underline}.dbx-forge-expand-text-icon{font-size:18px;width:18px;height:18px}\n"] }]
53
+ }], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], tabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabIndex", required: false }] }], props: [{ type: i0.Input, args: [{ isSignal: true, alias: "props", required: false }] }], meta: [{ type: i0.Input, args: [{ isSignal: true, alias: "meta", required: false }] }], validationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "validationMessages", required: false }] }], defaultValidationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValidationMessages", required: false }] }] } });
54
+
55
+ export { DbxForgeExpandFieldComponent };
56
+ //# sourceMappingURL=dereekb-dbx-form-expand.field.component-Bp5_uO1A.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dereekb-dbx-form-expand.field.component-Bp5_uO1A.mjs","sources":["../../../../packages/dbx-form/src/lib/forge/field/wrapper/expand/expand.field.component.ts","../../../../packages/dbx-form/src/lib/forge/field/wrapper/expand/expand.field.component.html"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { type FieldTree } from '@angular/forms/signals';\nimport type { DynamicText, FieldMeta, ValidationMessages } from '@ng-forge/dynamic-forms';\nimport type { DbxForgeExpandFieldProps } from './expand.field';\n\n/**\n * Forge ValueFieldComponent that renders an expand/collapse control.\n *\n * Displays as either a Material stroked button or a clickable text link.\n * Writes `true`/`false` to its FieldTree value on click, which drives\n * conditional visibility on sibling groups via ng-forge's `logic` system.\n */\n@Component({\n selector: 'dbx-forge-expand-field',\n templateUrl: './expand.field.component.html',\n styles: `\n :host {\n display: block;\n }\n\n .dbx-forge-expand-text {\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n user-select: none;\n color: var(--mat-sys-primary);\n font-size: 0.875rem;\n }\n\n .dbx-forge-expand-text:hover {\n text-decoration: underline;\n }\n\n .dbx-forge-expand-text-icon {\n font-size: 18px;\n width: 18px;\n height: 18px;\n }\n `,\n imports: [MatButtonModule, MatIconModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n host: {\n '[class]': 'className()'\n }\n})\nexport class DbxForgeExpandFieldComponent {\n // ng-forge ValueFieldComponent inputs\n readonly field = input.required<FieldTree<boolean>>();\n readonly key = input.required<string>();\n readonly label = input<DynamicText | undefined>();\n readonly placeholder = input<DynamicText | undefined>();\n readonly className = input<string>('');\n readonly tabIndex = input<number | undefined>();\n readonly props = input<DbxForgeExpandFieldProps | undefined>();\n readonly meta = input<FieldMeta | undefined>();\n readonly validationMessages = input<ValidationMessages | undefined>();\n readonly defaultValidationMessages = input<ValidationMessages | undefined>();\n\n readonly isOpenSignal = computed((): boolean => {\n return this.field()().value() ?? false;\n });\n\n readonly buttonTypeSignal = computed(() => {\n return this.props()?.buttonType ?? 'text';\n });\n\n readonly labelSignal = computed(() => {\n return this.props()?.expandLabel ?? '';\n });\n\n readonly iconSignal = computed(() => {\n return this.isOpenSignal() ? 'expand_less' : 'expand_more';\n });\n\n toggle(): void {\n const fieldState = this.field()();\n const currentValue = fieldState.value() ?? false;\n fieldState.value.set(!currentValue);\n fieldState.markAsTouched();\n }\n}\n","@if (buttonTypeSignal() === 'button') {\n <button mat-stroked-button type=\"button\" class=\"dbx-forge-expand-button\" (click)=\"toggle()\" [attr.aria-expanded]=\"isOpenSignal()\">\n <mat-icon>{{ iconSignal() }}</mat-icon>\n {{ labelSignal() }}\n </button>\n} @else {\n <span class=\"dbx-forge-expand-text\" role=\"button\" tabindex=\"0\" (click)=\"toggle()\" (keydown.enter)=\"toggle()\" (keydown.space)=\"toggle()\" [attr.aria-expanded]=\"isOpenSignal()\">\n <mat-icon class=\"dbx-forge-expand-text-icon\">{{ iconSignal() }}</mat-icon>\n {{ labelSignal() }}\n </span>\n}\n"],"names":["i2"],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import * as i0 from '@angular/core';
2
+ import { viewChild, computed, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { DynamicTextPipe } from '@ng-forge/dynamic-forms';
4
+ import { AbstractForgeWrapperFieldComponent, forgeFieldDisabled, provideDbxForgeWrapperFieldDirective } from './dereekb-dbx-form.mjs';
5
+ import { AsyncPipe } from '@angular/common';
6
+ import { D as DbxForgeWrapperContentComponent } from './dereekb-dbx-form-wrapper.content.component-Cy4ND_se.mjs';
7
+
8
+ /**
9
+ * Forge wrapper field component that renders child fields inside a Material-style
10
+ * outlined container with a notched outline, floating label, and hint/error subscript.
11
+ *
12
+ * This is the forge equivalent of ngx-formly's `FormlyWrapperFormField` which wraps
13
+ * fields in `<mat-form-field>`. Uses `<dbx-forge-wrapper-content />` for the nested
14
+ * DynamicForm rendering and reads its validation state for error display.
15
+ */
16
+ class DbxForgeFormFieldWrapperComponent extends AbstractForgeWrapperFieldComponent {
17
+ contentRef = viewChild(DbxForgeWrapperContentComponent, ...(ngDevMode ? [{ debugName: "contentRef" }] : /* istanbul ignore next */ []));
18
+ // Disabled state
19
+ isDisabled = forgeFieldDisabled();
20
+ // Child form validation state via content component
21
+ childErrors = computed(() => this.contentRef()?.errors() ?? [], ...(ngDevMode ? [{ debugName: "childErrors" }] : /* istanbul ignore next */ []));
22
+ childTouched = computed(() => this.contentRef()?.touched() ?? false, ...(ngDevMode ? [{ debugName: "childTouched" }] : /* istanbul ignore next */ []));
23
+ childDirty = computed(() => this.contentRef()?.dynamicForm()?.dirty() ?? false, ...(ngDevMode ? [{ debugName: "childDirty" }] : /* istanbul ignore next */ []));
24
+ // Error display: show errors when the child form has been touched OR is dirty (value changed)
25
+ showErrors = computed(() => (this.childTouched() || this.childDirty()) && this.childErrors().length > 0, ...(ngDevMode ? [{ debugName: "showErrors" }] : /* istanbul ignore next */ []));
26
+ hasError = computed(() => this.showErrors(), ...(ngDevMode ? [{ debugName: "hasError" }] : /* istanbul ignore next */ []));
27
+ firstErrorMessage = computed(() => {
28
+ const errors = this.childErrors();
29
+ if (errors.length === 0) {
30
+ return '';
31
+ }
32
+ const error = errors[0];
33
+ // Try raw error message first (set by Angular built-in validators)
34
+ if (error.message) {
35
+ return error.message;
36
+ }
37
+ // Resolve from child field validationMessages by matching error.kind
38
+ const fields = this.props()?.fields;
39
+ if (fields?.length) {
40
+ for (const field of fields) {
41
+ const messages = field.validationMessages;
42
+ if (messages?.[error.kind]) {
43
+ return messages[error.kind];
44
+ }
45
+ }
46
+ }
47
+ return error.kind;
48
+ }, ...(ngDevMode ? [{ debugName: "firstErrorMessage" }] : /* istanbul ignore next */ []));
49
+ // Props
50
+ hintSignal = computed(() => this.props()?.hint, ...(ngDevMode ? [{ debugName: "hintSignal" }] : /* istanbul ignore next */ []));
51
+ /**
52
+ * Whether any child field has `required: true`, used to show the asterisk in the label.
53
+ */
54
+ isRequired = computed(() => {
55
+ const fields = this.props()?.fields;
56
+ return fields?.some((f) => f.required === true) ?? false;
57
+ }, ...(ngDevMode ? [{ debugName: "isRequired" }] : /* istanbul ignore next */ []));
58
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DbxForgeFormFieldWrapperComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
59
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: DbxForgeFormFieldWrapperComponent, isStandalone: true, selector: "dbx-forge-form-field-wrapper", host: { properties: { "class": "className()" }, classAttribute: "mat-mdc-form-field mat-form-field-animations-enabled" }, providers: provideDbxForgeWrapperFieldDirective(DbxForgeFormFieldWrapperComponent), viewQueries: [{ propertyName: "contentRef", first: true, predicate: DbxForgeWrapperContentComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"dbx-forge-form-field-wrapper\" [class.dbx-forge-form-field-wrapper-error]=\"hasError()\" [class.dbx-forge-form-field-wrapper-disabled]=\"isDisabled()\">\n <div class=\"dbx-forge-form-field-outline\">\n <div class=\"dbx-forge-form-field-outline-leading\"></div>\n <div class=\"dbx-forge-form-field-outline-notch\" [class.dbx-forge-form-field-outline-notch-empty]=\"!label()\">\n @if (label(); as labelText) {\n <span class=\"dbx-forge-form-field-outline-label\">\n {{ labelText | dynamicText | async }}\n @if (isRequired()) {\n <span aria-hidden=\"true\" class=\"mat-mdc-form-field-required-marker mdc-floating-label--required\"></span>\n }\n </span>\n }\n </div>\n <div class=\"dbx-forge-form-field-outline-trailing\"></div>\n </div>\n <div class=\"dbx-forge-form-field-content\">\n <dbx-forge-wrapper-content />\n </div>\n</div>\n<div class=\"mat-mdc-form-field-subscript-wrapper mat-mdc-form-field-bottom-align\">\n @if (showErrors()) {\n <div class=\"mat-mdc-form-field-error-wrapper\">\n <div class=\"mat-mdc-form-field-error mat-mdc-form-field-bottom-align\">{{ firstErrorMessage() }}</div>\n </div>\n } @else if (hintSignal(); as hint) {\n <div class=\"mat-mdc-form-field-hint-wrapper\">\n <div class=\"mat-mdc-form-field-hint mat-mdc-form-field-bottom-align\">{{ hint }}</div>\n </div>\n }\n</div>\n", styles: [":host{display:block;width:100%;margin-bottom:16px}.dbx-forge-form-field-wrapper{position:relative;margin-top:8px}.dbx-forge-form-field-outline{display:flex;position:absolute;inset:0;pointer-events:none}.dbx-forge-form-field-outline-leading{border:1px solid var(--mdc-outlined-text-field-outline-color, var(--mat-sys-outline, rgba(0, 0, 0, .38)));border-right:none;border-radius:var(--mdc-outlined-text-field-container-shape, 8px) 0 0 var(--mdc-outlined-text-field-container-shape, 8px);width:12px}.dbx-forge-form-field-outline-notch{border-bottom:1px solid var(--mdc-outlined-text-field-outline-color, var(--mat-sys-outline, rgba(0, 0, 0, .38)));display:flex;align-items:flex-start;max-width:calc(100% - 24px)}.dbx-forge-form-field-outline-notch-empty{border-top:1px solid var(--mdc-outlined-text-field-outline-color, var(--mat-sys-outline, rgba(0, 0, 0, .38)));width:0;padding:0}.dbx-forge-form-field-outline-label{display:inline-block;transform:translateY(-50%);padding:0 4px;background:var(--mat-sys-surface, white);white-space:nowrap;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mat-form-field-outlined-label-text-populated-font, var(--mat-sys-body-small-font));font-size:var(--mat-form-field-outlined-label-text-populated-size, var(--mat-sys-body-small-size));line-height:var(--mat-form-field-outlined-label-text-populated-line-height, var(--mat-sys-body-small-line-height));letter-spacing:var(--mat-form-field-outlined-label-text-populated-tracking, var(--mat-sys-body-small-tracking));font-weight:var(--mat-form-field-outlined-label-text-populated-weight, var(--mat-sys-body-small-weight));color:var(--mdc-outlined-text-field-label-text-color, var(--mat-sys-on-surface-variant, rgba(0, 0, 0, .6)))}.dbx-forge-form-field-outline-trailing{border:1px solid var(--mdc-outlined-text-field-outline-color, var(--mat-sys-outline, rgba(0, 0, 0, .38)));border-left:none;border-radius:0 var(--mdc-outlined-text-field-container-shape, 8px) var(--mdc-outlined-text-field-container-shape, 8px) 0;flex-grow:1}.dbx-forge-form-field-wrapper:hover .dbx-forge-form-field-outline-leading,.dbx-forge-form-field-wrapper:hover .dbx-forge-form-field-outline-notch,.dbx-forge-form-field-wrapper:hover .dbx-forge-form-field-outline-trailing{border-color:var(--mdc-outlined-text-field-hover-outline-color, var(--mat-sys-on-surface, rgba(0, 0, 0, .87)))}.dbx-forge-form-field-wrapper:focus-within .dbx-forge-form-field-outline-leading,.dbx-forge-form-field-wrapper:focus-within .dbx-forge-form-field-outline-notch,.dbx-forge-form-field-wrapper:focus-within .dbx-forge-form-field-outline-trailing{border-color:var(--mdc-outlined-text-field-focus-outline-color, var(--mat-sys-primary));border-width:2px}.dbx-forge-form-field-wrapper:focus-within .dbx-forge-form-field-outline-label{color:var(--mdc-outlined-text-field-focus-label-text-color, var(--mat-sys-primary));padding:0 3px}.dbx-forge-form-field-wrapper-error .dbx-forge-form-field-outline-leading,.dbx-forge-form-field-wrapper-error .dbx-forge-form-field-outline-notch,.dbx-forge-form-field-wrapper-error .dbx-forge-form-field-outline-trailing{border-color:var(--mdc-outlined-text-field-error-outline-color, var(--mat-sys-error, #f44336))}.dbx-forge-form-field-wrapper-error .dbx-forge-form-field-outline-label{color:var(--mdc-outlined-text-field-error-label-text-color, var(--mat-sys-error, #f44336))}.dbx-forge-form-field-content{position:relative;padding:var(--mat-form-field-container-vertical-padding, 16px) 16px 8px;min-height:56px;box-sizing:border-box}.dbx-forge-form-field-wrapper-disabled .dbx-forge-form-field-content{opacity:.38;pointer-events:none}.dbx-forge-form-field-wrapper-disabled .dbx-forge-form-field-outline-leading,.dbx-forge-form-field-wrapper-disabled .dbx-forge-form-field-outline-notch,.dbx-forge-form-field-wrapper-disabled .dbx-forge-form-field-outline-trailing,.dbx-forge-form-field-wrapper-disabled:hover .dbx-forge-form-field-outline-leading,.dbx-forge-form-field-wrapper-disabled:hover .dbx-forge-form-field-outline-notch,.dbx-forge-form-field-wrapper-disabled:hover .dbx-forge-form-field-outline-trailing{border-color:var(--mdc-outlined-text-field-disabled-outline-color, rgba(0, 0, 0, .12))}.dbx-forge-form-field-wrapper-disabled .dbx-forge-form-field-outline-label{color:var(--mdc-outlined-text-field-disabled-label-text-color, rgba(0, 0, 0, .38))}.mat-mdc-form-field-subscript-wrapper{padding:0 16px;box-sizing:border-box}\n"], dependencies: [{ kind: "component", type: DbxForgeWrapperContentComponent, selector: "dbx-forge-wrapper-content" }, { kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
60
+ }
61
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DbxForgeFormFieldWrapperComponent, decorators: [{
62
+ type: Component,
63
+ args: [{ selector: 'dbx-forge-form-field-wrapper', providers: provideDbxForgeWrapperFieldDirective(DbxForgeFormFieldWrapperComponent), imports: [DbxForgeWrapperContentComponent, DynamicTextPipe, AsyncPipe], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, host: {
64
+ class: 'mat-mdc-form-field mat-form-field-animations-enabled',
65
+ '[class]': 'className()'
66
+ }, template: "<div class=\"dbx-forge-form-field-wrapper\" [class.dbx-forge-form-field-wrapper-error]=\"hasError()\" [class.dbx-forge-form-field-wrapper-disabled]=\"isDisabled()\">\n <div class=\"dbx-forge-form-field-outline\">\n <div class=\"dbx-forge-form-field-outline-leading\"></div>\n <div class=\"dbx-forge-form-field-outline-notch\" [class.dbx-forge-form-field-outline-notch-empty]=\"!label()\">\n @if (label(); as labelText) {\n <span class=\"dbx-forge-form-field-outline-label\">\n {{ labelText | dynamicText | async }}\n @if (isRequired()) {\n <span aria-hidden=\"true\" class=\"mat-mdc-form-field-required-marker mdc-floating-label--required\"></span>\n }\n </span>\n }\n </div>\n <div class=\"dbx-forge-form-field-outline-trailing\"></div>\n </div>\n <div class=\"dbx-forge-form-field-content\">\n <dbx-forge-wrapper-content />\n </div>\n</div>\n<div class=\"mat-mdc-form-field-subscript-wrapper mat-mdc-form-field-bottom-align\">\n @if (showErrors()) {\n <div class=\"mat-mdc-form-field-error-wrapper\">\n <div class=\"mat-mdc-form-field-error mat-mdc-form-field-bottom-align\">{{ firstErrorMessage() }}</div>\n </div>\n } @else if (hintSignal(); as hint) {\n <div class=\"mat-mdc-form-field-hint-wrapper\">\n <div class=\"mat-mdc-form-field-hint mat-mdc-form-field-bottom-align\">{{ hint }}</div>\n </div>\n }\n</div>\n", styles: [":host{display:block;width:100%;margin-bottom:16px}.dbx-forge-form-field-wrapper{position:relative;margin-top:8px}.dbx-forge-form-field-outline{display:flex;position:absolute;inset:0;pointer-events:none}.dbx-forge-form-field-outline-leading{border:1px solid var(--mdc-outlined-text-field-outline-color, var(--mat-sys-outline, rgba(0, 0, 0, .38)));border-right:none;border-radius:var(--mdc-outlined-text-field-container-shape, 8px) 0 0 var(--mdc-outlined-text-field-container-shape, 8px);width:12px}.dbx-forge-form-field-outline-notch{border-bottom:1px solid var(--mdc-outlined-text-field-outline-color, var(--mat-sys-outline, rgba(0, 0, 0, .38)));display:flex;align-items:flex-start;max-width:calc(100% - 24px)}.dbx-forge-form-field-outline-notch-empty{border-top:1px solid var(--mdc-outlined-text-field-outline-color, var(--mat-sys-outline, rgba(0, 0, 0, .38)));width:0;padding:0}.dbx-forge-form-field-outline-label{display:inline-block;transform:translateY(-50%);padding:0 4px;background:var(--mat-sys-surface, white);white-space:nowrap;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:var(--mat-form-field-outlined-label-text-populated-font, var(--mat-sys-body-small-font));font-size:var(--mat-form-field-outlined-label-text-populated-size, var(--mat-sys-body-small-size));line-height:var(--mat-form-field-outlined-label-text-populated-line-height, var(--mat-sys-body-small-line-height));letter-spacing:var(--mat-form-field-outlined-label-text-populated-tracking, var(--mat-sys-body-small-tracking));font-weight:var(--mat-form-field-outlined-label-text-populated-weight, var(--mat-sys-body-small-weight));color:var(--mdc-outlined-text-field-label-text-color, var(--mat-sys-on-surface-variant, rgba(0, 0, 0, .6)))}.dbx-forge-form-field-outline-trailing{border:1px solid var(--mdc-outlined-text-field-outline-color, var(--mat-sys-outline, rgba(0, 0, 0, .38)));border-left:none;border-radius:0 var(--mdc-outlined-text-field-container-shape, 8px) var(--mdc-outlined-text-field-container-shape, 8px) 0;flex-grow:1}.dbx-forge-form-field-wrapper:hover .dbx-forge-form-field-outline-leading,.dbx-forge-form-field-wrapper:hover .dbx-forge-form-field-outline-notch,.dbx-forge-form-field-wrapper:hover .dbx-forge-form-field-outline-trailing{border-color:var(--mdc-outlined-text-field-hover-outline-color, var(--mat-sys-on-surface, rgba(0, 0, 0, .87)))}.dbx-forge-form-field-wrapper:focus-within .dbx-forge-form-field-outline-leading,.dbx-forge-form-field-wrapper:focus-within .dbx-forge-form-field-outline-notch,.dbx-forge-form-field-wrapper:focus-within .dbx-forge-form-field-outline-trailing{border-color:var(--mdc-outlined-text-field-focus-outline-color, var(--mat-sys-primary));border-width:2px}.dbx-forge-form-field-wrapper:focus-within .dbx-forge-form-field-outline-label{color:var(--mdc-outlined-text-field-focus-label-text-color, var(--mat-sys-primary));padding:0 3px}.dbx-forge-form-field-wrapper-error .dbx-forge-form-field-outline-leading,.dbx-forge-form-field-wrapper-error .dbx-forge-form-field-outline-notch,.dbx-forge-form-field-wrapper-error .dbx-forge-form-field-outline-trailing{border-color:var(--mdc-outlined-text-field-error-outline-color, var(--mat-sys-error, #f44336))}.dbx-forge-form-field-wrapper-error .dbx-forge-form-field-outline-label{color:var(--mdc-outlined-text-field-error-label-text-color, var(--mat-sys-error, #f44336))}.dbx-forge-form-field-content{position:relative;padding:var(--mat-form-field-container-vertical-padding, 16px) 16px 8px;min-height:56px;box-sizing:border-box}.dbx-forge-form-field-wrapper-disabled .dbx-forge-form-field-content{opacity:.38;pointer-events:none}.dbx-forge-form-field-wrapper-disabled .dbx-forge-form-field-outline-leading,.dbx-forge-form-field-wrapper-disabled .dbx-forge-form-field-outline-notch,.dbx-forge-form-field-wrapper-disabled .dbx-forge-form-field-outline-trailing,.dbx-forge-form-field-wrapper-disabled:hover .dbx-forge-form-field-outline-leading,.dbx-forge-form-field-wrapper-disabled:hover .dbx-forge-form-field-outline-notch,.dbx-forge-form-field-wrapper-disabled:hover .dbx-forge-form-field-outline-trailing{border-color:var(--mdc-outlined-text-field-disabled-outline-color, rgba(0, 0, 0, .12))}.dbx-forge-form-field-wrapper-disabled .dbx-forge-form-field-outline-label{color:var(--mdc-outlined-text-field-disabled-label-text-color, rgba(0, 0, 0, .38))}.mat-mdc-form-field-subscript-wrapper{padding:0 16px;box-sizing:border-box}\n"] }]
67
+ }], propDecorators: { contentRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => DbxForgeWrapperContentComponent), { isSignal: true }] }] } });
68
+
69
+ export { DbxForgeFormFieldWrapperComponent };
70
+ //# sourceMappingURL=dereekb-dbx-form-formfield.field.component-BQyujXe3.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dereekb-dbx-form-formfield.field.component-BQyujXe3.mjs","sources":["../../../../packages/dbx-form/src/lib/forge/field/wrapper/formfield/formfield.field.component.ts","../../../../packages/dbx-form/src/lib/forge/field/wrapper/formfield/formfield.field.component.html"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, viewChild } from '@angular/core';\nimport { DynamicTextPipe, type FieldWithValidation } from '@ng-forge/dynamic-forms';\nimport { forgeFieldDisabled } from '../../field.disabled';\nimport { AsyncPipe } from '@angular/common';\nimport { AbstractForgeWrapperFieldComponent, provideDbxForgeWrapperFieldDirective } from '../wrapper.field';\nimport { DbxForgeWrapperContentComponent } from '../wrapper.content.component';\nimport type { DbxForgeFormFieldWrapperProps } from './formfield.field';\n\n/**\n * Forge wrapper field component that renders child fields inside a Material-style\n * outlined container with a notched outline, floating label, and hint/error subscript.\n *\n * This is the forge equivalent of ngx-formly's `FormlyWrapperFormField` which wraps\n * fields in `<mat-form-field>`. Uses `<dbx-forge-wrapper-content />` for the nested\n * DynamicForm rendering and reads its validation state for error display.\n */\n@Component({\n selector: 'dbx-forge-form-field-wrapper',\n templateUrl: './formfield.field.component.html',\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n margin-bottom: 16px;\n }\n\n .dbx-forge-form-field-wrapper {\n position: relative;\n margin-top: 8px;\n }\n\n /* --- Notched outline --- */\n .dbx-forge-form-field-outline {\n display: flex;\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n pointer-events: none;\n }\n\n .dbx-forge-form-field-outline-leading {\n border: 1px solid var(--mdc-outlined-text-field-outline-color, var(--mat-sys-outline, rgba(0, 0, 0, 0.38)));\n border-right: none;\n border-radius: var(--mdc-outlined-text-field-container-shape, 8px) 0 0 var(--mdc-outlined-text-field-container-shape, 8px);\n width: 12px;\n }\n\n .dbx-forge-form-field-outline-notch {\n border-bottom: 1px solid var(--mdc-outlined-text-field-outline-color, var(--mat-sys-outline, rgba(0, 0, 0, 0.38)));\n display: flex;\n align-items: flex-start;\n max-width: calc(100% - 24px);\n }\n\n .dbx-forge-form-field-outline-notch-empty {\n border-top: 1px solid var(--mdc-outlined-text-field-outline-color, var(--mat-sys-outline, rgba(0, 0, 0, 0.38)));\n width: 0;\n padding: 0;\n }\n\n .dbx-forge-form-field-outline-label {\n display: inline-block;\n transform: translateY(-50%);\n padding: 0 4px;\n background: var(--mat-sys-surface, white);\n white-space: nowrap;\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n font-family: var(--mat-form-field-outlined-label-text-populated-font, var(--mat-sys-body-small-font));\n font-size: var(--mat-form-field-outlined-label-text-populated-size, var(--mat-sys-body-small-size));\n line-height: var(--mat-form-field-outlined-label-text-populated-line-height, var(--mat-sys-body-small-line-height));\n letter-spacing: var(--mat-form-field-outlined-label-text-populated-tracking, var(--mat-sys-body-small-tracking));\n font-weight: var(--mat-form-field-outlined-label-text-populated-weight, var(--mat-sys-body-small-weight));\n color: var(--mdc-outlined-text-field-label-text-color, var(--mat-sys-on-surface-variant, rgba(0, 0, 0, 0.6)));\n }\n\n .dbx-forge-form-field-outline-trailing {\n border: 1px solid var(--mdc-outlined-text-field-outline-color, var(--mat-sys-outline, rgba(0, 0, 0, 0.38)));\n border-left: none;\n border-radius: 0 var(--mdc-outlined-text-field-container-shape, 8px) var(--mdc-outlined-text-field-container-shape, 8px) 0;\n flex-grow: 1;\n }\n\n /* --- Hover state --- */\n .dbx-forge-form-field-wrapper:hover .dbx-forge-form-field-outline-leading,\n .dbx-forge-form-field-wrapper:hover .dbx-forge-form-field-outline-notch,\n .dbx-forge-form-field-wrapper:hover .dbx-forge-form-field-outline-trailing {\n border-color: var(--mdc-outlined-text-field-hover-outline-color, var(--mat-sys-on-surface, rgba(0, 0, 0, 0.87)));\n }\n\n /* --- Focus state --- */\n .dbx-forge-form-field-wrapper:focus-within .dbx-forge-form-field-outline-leading,\n .dbx-forge-form-field-wrapper:focus-within .dbx-forge-form-field-outline-notch,\n .dbx-forge-form-field-wrapper:focus-within .dbx-forge-form-field-outline-trailing {\n border-color: var(--mdc-outlined-text-field-focus-outline-color, var(--mat-sys-primary));\n border-width: 2px;\n }\n\n .dbx-forge-form-field-wrapper:focus-within .dbx-forge-form-field-outline-label {\n color: var(--mdc-outlined-text-field-focus-label-text-color, var(--mat-sys-primary));\n padding: 0 3px;\n }\n\n /* --- Error state --- */\n .dbx-forge-form-field-wrapper-error .dbx-forge-form-field-outline-leading,\n .dbx-forge-form-field-wrapper-error .dbx-forge-form-field-outline-notch,\n .dbx-forge-form-field-wrapper-error .dbx-forge-form-field-outline-trailing {\n border-color: var(--mdc-outlined-text-field-error-outline-color, var(--mat-sys-error, #f44336));\n }\n\n .dbx-forge-form-field-wrapper-error .dbx-forge-form-field-outline-label {\n color: var(--mdc-outlined-text-field-error-label-text-color, var(--mat-sys-error, #f44336));\n }\n\n /* --- Content area --- */\n .dbx-forge-form-field-content {\n position: relative;\n padding: var(--mat-form-field-container-vertical-padding, 16px) 16px 8px;\n min-height: 56px;\n box-sizing: border-box;\n }\n\n /* --- Disabled state --- */\n .dbx-forge-form-field-wrapper-disabled .dbx-forge-form-field-content {\n opacity: 0.38;\n pointer-events: none;\n }\n\n .dbx-forge-form-field-wrapper-disabled .dbx-forge-form-field-outline-leading,\n .dbx-forge-form-field-wrapper-disabled .dbx-forge-form-field-outline-notch,\n .dbx-forge-form-field-wrapper-disabled .dbx-forge-form-field-outline-trailing {\n border-color: var(--mdc-outlined-text-field-disabled-outline-color, rgba(0, 0, 0, 0.12));\n }\n\n .dbx-forge-form-field-wrapper-disabled:hover .dbx-forge-form-field-outline-leading,\n .dbx-forge-form-field-wrapper-disabled:hover .dbx-forge-form-field-outline-notch,\n .dbx-forge-form-field-wrapper-disabled:hover .dbx-forge-form-field-outline-trailing {\n border-color: var(--mdc-outlined-text-field-disabled-outline-color, rgba(0, 0, 0, 0.12));\n }\n\n .dbx-forge-form-field-wrapper-disabled .dbx-forge-form-field-outline-label {\n color: var(--mdc-outlined-text-field-disabled-label-text-color, rgba(0, 0, 0, 0.38));\n }\n\n /* --- Subscript area --- */\n .mat-mdc-form-field-subscript-wrapper {\n padding: 0 16px;\n box-sizing: border-box;\n }\n `\n ],\n providers: provideDbxForgeWrapperFieldDirective(DbxForgeFormFieldWrapperComponent),\n imports: [DbxForgeWrapperContentComponent, DynamicTextPipe, AsyncPipe],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n host: {\n class: 'mat-mdc-form-field mat-form-field-animations-enabled',\n '[class]': 'className()'\n }\n})\nexport class DbxForgeFormFieldWrapperComponent extends AbstractForgeWrapperFieldComponent<DbxForgeFormFieldWrapperProps> {\n readonly contentRef = viewChild(DbxForgeWrapperContentComponent);\n\n // Disabled state\n readonly isDisabled = forgeFieldDisabled();\n\n // Child form validation state via content component\n readonly childErrors = computed(() => this.contentRef()?.errors() ?? []);\n readonly childTouched = computed(() => this.contentRef()?.touched() ?? false);\n readonly childDirty = computed(() => this.contentRef()?.dynamicForm()?.dirty() ?? false);\n\n // Error display: show errors when the child form has been touched OR is dirty (value changed)\n readonly showErrors = computed(() => (this.childTouched() || this.childDirty()) && this.childErrors().length > 0);\n readonly hasError = computed(() => this.showErrors());\n readonly firstErrorMessage = computed(() => {\n const errors = this.childErrors();\n\n if (errors.length === 0) {\n return '';\n }\n\n const error = errors[0];\n\n // Try raw error message first (set by Angular built-in validators)\n if (error.message) {\n return error.message;\n }\n\n // Resolve from child field validationMessages by matching error.kind\n const fields = this.props()?.fields;\n\n if (fields?.length) {\n for (const field of fields) {\n const messages = (field as FieldWithValidation).validationMessages as Record<string, string> | undefined;\n\n if (messages?.[error.kind]) {\n return messages[error.kind];\n }\n }\n }\n\n return error.kind;\n });\n\n // Props\n readonly hintSignal = computed(() => this.props()?.hint);\n\n /**\n * Whether any child field has `required: true`, used to show the asterisk in the label.\n */\n readonly isRequired = computed(() => {\n const fields = this.props()?.fields;\n return fields?.some((f: any) => f.required === true) ?? false;\n });\n}\n","<div class=\"dbx-forge-form-field-wrapper\" [class.dbx-forge-form-field-wrapper-error]=\"hasError()\" [class.dbx-forge-form-field-wrapper-disabled]=\"isDisabled()\">\n <div class=\"dbx-forge-form-field-outline\">\n <div class=\"dbx-forge-form-field-outline-leading\"></div>\n <div class=\"dbx-forge-form-field-outline-notch\" [class.dbx-forge-form-field-outline-notch-empty]=\"!label()\">\n @if (label(); as labelText) {\n <span class=\"dbx-forge-form-field-outline-label\">\n {{ labelText | dynamicText | async }}\n @if (isRequired()) {\n <span aria-hidden=\"true\" class=\"mat-mdc-form-field-required-marker mdc-floating-label--required\"></span>\n }\n </span>\n }\n </div>\n <div class=\"dbx-forge-form-field-outline-trailing\"></div>\n </div>\n <div class=\"dbx-forge-form-field-content\">\n <dbx-forge-wrapper-content />\n </div>\n</div>\n<div class=\"mat-mdc-form-field-subscript-wrapper mat-mdc-form-field-bottom-align\">\n @if (showErrors()) {\n <div class=\"mat-mdc-form-field-error-wrapper\">\n <div class=\"mat-mdc-form-field-error mat-mdc-form-field-bottom-align\">{{ firstErrorMessage() }}</div>\n </div>\n } @else if (hintSignal(); as hint) {\n <div class=\"mat-mdc-form-field-hint-wrapper\">\n <div class=\"mat-mdc-form-field-hint mat-mdc-form-field-bottom-align\">{{ hint }}</div>\n </div>\n }\n</div>\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, computed, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { MatIconButton } from '@angular/material/button';
4
+ import * as i1 from '@angular/material/icon';
5
+ import { MatIconModule } from '@angular/material/icon';
6
+
7
+ /**
8
+ * Forge ValueFieldComponent that renders a Material info icon button.
9
+ *
10
+ * Displays a circular icon button with the `info` icon. On click,
11
+ * invokes the `onInfoClick` callback from props.
12
+ */
13
+ class DbxForgeInfoButtonFieldComponent {
14
+ // ng-forge ValueFieldComponent inputs
15
+ field = input.required(...(ngDevMode ? [{ debugName: "field" }] : /* istanbul ignore next */ []));
16
+ key = input.required(...(ngDevMode ? [{ debugName: "key" }] : /* istanbul ignore next */ []));
17
+ label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : /* istanbul ignore next */ []));
18
+ placeholder = input(...(ngDevMode ? [undefined, { debugName: "placeholder" }] : /* istanbul ignore next */ []));
19
+ className = input('', ...(ngDevMode ? [{ debugName: "className" }] : /* istanbul ignore next */ []));
20
+ tabIndex = input(...(ngDevMode ? [undefined, { debugName: "tabIndex" }] : /* istanbul ignore next */ []));
21
+ props = input(...(ngDevMode ? [undefined, { debugName: "props" }] : /* istanbul ignore next */ []));
22
+ meta = input(...(ngDevMode ? [undefined, { debugName: "meta" }] : /* istanbul ignore next */ []));
23
+ validationMessages = input(...(ngDevMode ? [undefined, { debugName: "validationMessages" }] : /* istanbul ignore next */ []));
24
+ defaultValidationMessages = input(...(ngDevMode ? [undefined, { debugName: "defaultValidationMessages" }] : /* istanbul ignore next */ []));
25
+ ariaLabelSignal = computed(() => {
26
+ return this.props()?.ariaLabel ?? 'More information';
27
+ }, ...(ngDevMode ? [{ debugName: "ariaLabelSignal" }] : /* istanbul ignore next */ []));
28
+ onClick() {
29
+ this.props()?.onInfoClick();
30
+ }
31
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DbxForgeInfoButtonFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
32
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.4", type: DbxForgeInfoButtonFieldComponent, isStandalone: true, selector: "dbx-forge-info-button-field", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, meta: { classPropertyName: "meta", publicName: "meta", isSignal: true, isRequired: false, transformFunction: null }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "className()" } }, ngImport: i0, template: `
33
+ <button mat-icon-button type="button" class="dbx-forge-info-button" (click)="onClick()" [attr.aria-label]="ariaLabelSignal()">
34
+ <mat-icon>info</mat-icon>
35
+ </button>
36
+ `, isInline: true, styles: [":host{display:flex;align-items:center;justify-content:center;align-self:center}\n"], dependencies: [{ kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
37
+ }
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DbxForgeInfoButtonFieldComponent, decorators: [{
39
+ type: Component,
40
+ args: [{ selector: 'dbx-forge-info-button-field', template: `
41
+ <button mat-icon-button type="button" class="dbx-forge-info-button" (click)="onClick()" [attr.aria-label]="ariaLabelSignal()">
42
+ <mat-icon>info</mat-icon>
43
+ </button>
44
+ `, imports: [MatIconButton, MatIconModule], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, host: {
45
+ '[class]': 'className()'
46
+ }, styles: [":host{display:flex;align-items:center;justify-content:center;align-self:center}\n"] }]
47
+ }], propDecorators: { field: [{ type: i0.Input, args: [{ isSignal: true, alias: "field", required: true }] }], key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], tabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabIndex", required: false }] }], props: [{ type: i0.Input, args: [{ isSignal: true, alias: "props", required: false }] }], meta: [{ type: i0.Input, args: [{ isSignal: true, alias: "meta", required: false }] }], validationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "validationMessages", required: false }] }], defaultValidationMessages: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValidationMessages", required: false }] }] } });
48
+
49
+ export { DbxForgeInfoButtonFieldComponent };
50
+ //# sourceMappingURL=dereekb-dbx-form-info.field.component-B0cFprvc.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dereekb-dbx-form-info.field.component-B0cFprvc.mjs","sources":["../../../../packages/dbx-form/src/lib/forge/field/wrapper/info/info.field.component.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { type FieldTree } from '@angular/forms/signals';\nimport type { DynamicText, FieldMeta, ValidationMessages } from '@ng-forge/dynamic-forms';\nimport type { DbxForgeInfoButtonFieldProps } from './info.field';\n\n/**\n * Forge ValueFieldComponent that renders a Material info icon button.\n *\n * Displays a circular icon button with the `info` icon. On click,\n * invokes the `onInfoClick` callback from props.\n */\n@Component({\n selector: 'dbx-forge-info-button-field',\n template: `\n <button mat-icon-button type=\"button\" class=\"dbx-forge-info-button\" (click)=\"onClick()\" [attr.aria-label]=\"ariaLabelSignal()\">\n <mat-icon>info</mat-icon>\n </button>\n `,\n styles: `\n :host {\n display: flex;\n align-items: center;\n justify-content: center;\n align-self: center;\n }\n `,\n imports: [MatIconButton, MatIconModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n host: {\n '[class]': 'className()'\n }\n})\nexport class DbxForgeInfoButtonFieldComponent {\n // ng-forge ValueFieldComponent inputs\n readonly field = input.required<FieldTree<unknown>>();\n readonly key = input.required<string>();\n readonly label = input<DynamicText | undefined>();\n readonly placeholder = input<DynamicText | undefined>();\n readonly className = input<string>('');\n readonly tabIndex = input<number | undefined>();\n readonly props = input<DbxForgeInfoButtonFieldProps | undefined>();\n readonly meta = input<FieldMeta | undefined>();\n readonly validationMessages = input<ValidationMessages | undefined>();\n readonly defaultValidationMessages = input<ValidationMessages | undefined>();\n\n readonly ariaLabelSignal = computed(() => {\n return this.props()?.ariaLabel ?? 'More information';\n });\n\n onClick(): void {\n this.props()?.onInfoClick();\n }\n}\n"],"names":[],"mappings":";;;;;;AAOA;;;;;AAKG;MAuBU,gCAAgC,CAAA;;AAElC,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,2EAAsB;AAC5C,IAAA,GAAG,GAAG,KAAK,CAAC,QAAQ,yEAAU;IAC9B,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAA2B;IACxC,WAAW,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAA2B;AAC9C,IAAA,SAAS,GAAG,KAAK,CAAS,EAAE,gFAAC;IAC7B,QAAQ,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAsB;IACtC,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAA4C;IACzD,IAAI,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAyB;IACrC,kBAAkB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAkC;IAC5D,yBAAyB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,2BAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAkC;AAEnE,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;QACvC,OAAO,IAAI,CAAC,KAAK,EAAE,EAAE,SAAS,IAAI,kBAAkB;AACtD,IAAA,CAAC,sFAAC;IAEF,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE;IAC7B;uGAnBW,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,yBAAA,EAAA,EAAA,iBAAA,EAAA,2BAAA,EAAA,UAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,aAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApBjC;;;;GAIT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,mFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EASS,aAAa,sKAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAO3B,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAtB5C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,6BAA6B,EAAA,QAAA,EAC7B;;;;GAIT,EAAA,OAAA,EASQ,CAAC,aAAa,EAAE,aAAa,CAAC,EAAA,eAAA,EACtB,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,IAAA,EACV;AACJ,wBAAA,SAAS,EAAE;AACZ,qBAAA,EAAA,MAAA,EAAA,CAAA,mFAAA,CAAA,EAAA;;;;;"}
@@ -0,0 +1,35 @@
1
+ import * as i0 from '@angular/core';
2
+ import { computed, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { MatIconButton } from '@angular/material/button';
4
+ import * as i1 from '@angular/material/icon';
5
+ import { MatIconModule } from '@angular/material/icon';
6
+ import { AbstractForgeWrapperFieldComponent, provideDbxForgeWrapperFieldDirective } from './dereekb-dbx-form.mjs';
7
+ import { D as DbxForgeWrapperContentComponent } from './dereekb-dbx-form-wrapper.content.component-Cy4ND_se.mjs';
8
+
9
+ /**
10
+ * Forge wrapper field component that renders child fields inside a flex layout
11
+ * with an info icon button beside them.
12
+ *
13
+ * This is the forge equivalent of formly's `DbxFormInfoWrapperComponent`,
14
+ * providing a content area with a clickable info button on the right side.
15
+ * Supports wrapping groups of fields, not just single fields.
16
+ */
17
+ class DbxForgeInfoWrapperFieldComponent extends AbstractForgeWrapperFieldComponent {
18
+ ariaLabelSignal = computed(() => {
19
+ return this.props()?.ariaLabel ?? 'More information';
20
+ }, ...(ngDevMode ? [{ debugName: "ariaLabelSignal" }] : /* istanbul ignore next */ []));
21
+ onClick() {
22
+ this.props()?.onInfoClick();
23
+ }
24
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DbxForgeInfoWrapperFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
25
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: DbxForgeInfoWrapperFieldComponent, isStandalone: true, selector: "dbx-forge-info-wrapper-field", host: { properties: { "class": "className()" } }, providers: provideDbxForgeWrapperFieldDirective(DbxForgeInfoWrapperFieldComponent), usesInheritance: true, ngImport: i0, template: "<div class=\"dbx-form-info-wrapper dbx-flex-bar\">\n <div class=\"dbx-form-info-wrapper-content dbx-flex-grow\">\n <dbx-forge-wrapper-content />\n </div>\n <div class=\"dbx-form-info-wrapper-info dbx-flex-noshrink dbx-flex-column dbx-flex-center\">\n <button mat-icon-button type=\"button\" (click)=\"onClick()\" [attr.aria-label]=\"ariaLabelSignal()\">\n <mat-icon>info</mat-icon>\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: DbxForgeWrapperContentComponent, selector: "dbx-forge-wrapper-content" }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
26
+ }
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: DbxForgeInfoWrapperFieldComponent, decorators: [{
28
+ type: Component,
29
+ args: [{ selector: 'dbx-forge-info-wrapper-field', providers: provideDbxForgeWrapperFieldDirective(DbxForgeInfoWrapperFieldComponent), imports: [DbxForgeWrapperContentComponent, MatIconButton, MatIconModule], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, host: {
30
+ '[class]': 'className()'
31
+ }, template: "<div class=\"dbx-form-info-wrapper dbx-flex-bar\">\n <div class=\"dbx-form-info-wrapper-content dbx-flex-grow\">\n <dbx-forge-wrapper-content />\n </div>\n <div class=\"dbx-form-info-wrapper-info dbx-flex-noshrink dbx-flex-column dbx-flex-center\">\n <button mat-icon-button type=\"button\" (click)=\"onClick()\" [attr.aria-label]=\"ariaLabelSignal()\">\n <mat-icon>info</mat-icon>\n </button>\n </div>\n</div>\n" }]
32
+ }] });
33
+
34
+ export { DbxForgeInfoWrapperFieldComponent };
35
+ //# sourceMappingURL=dereekb-dbx-form-info.wrapper.field.component-Crm4wVr5.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dereekb-dbx-form-info.wrapper.field.component-Crm4wVr5.mjs","sources":["../../../../packages/dbx-form/src/lib/forge/field/wrapper/info/info.wrapper.field.component.ts","../../../../packages/dbx-form/src/lib/forge/field/wrapper/info/info.wrapper.field.component.html"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed } from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { AbstractForgeWrapperFieldComponent, provideDbxForgeWrapperFieldDirective } from '../wrapper.field';\nimport { DbxForgeWrapperContentComponent } from '../wrapper.content.component';\nimport type { DbxForgeInfoWrapperFieldProps } from './info.wrapper.field';\n\n/**\n * Forge wrapper field component that renders child fields inside a flex layout\n * with an info icon button beside them.\n *\n * This is the forge equivalent of formly's `DbxFormInfoWrapperComponent`,\n * providing a content area with a clickable info button on the right side.\n * Supports wrapping groups of fields, not just single fields.\n */\n@Component({\n selector: 'dbx-forge-info-wrapper-field',\n templateUrl: './info.wrapper.field.component.html',\n providers: provideDbxForgeWrapperFieldDirective(DbxForgeInfoWrapperFieldComponent),\n imports: [DbxForgeWrapperContentComponent, MatIconButton, MatIconModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n host: {\n '[class]': 'className()'\n }\n})\nexport class DbxForgeInfoWrapperFieldComponent extends AbstractForgeWrapperFieldComponent<DbxForgeInfoWrapperFieldProps> {\n readonly ariaLabelSignal = computed(() => {\n return this.props()?.ariaLabel ?? 'More information';\n });\n\n onClick(): void {\n this.props()?.onInfoClick();\n }\n}\n","<div class=\"dbx-form-info-wrapper dbx-flex-bar\">\n <div class=\"dbx-form-info-wrapper-content dbx-flex-grow\">\n <dbx-forge-wrapper-content />\n </div>\n <div class=\"dbx-form-info-wrapper-info dbx-flex-noshrink dbx-flex-column dbx-flex-center\">\n <button mat-icon-button type=\"button\" (click)=\"onClick()\" [attr.aria-label]=\"ariaLabelSignal()\">\n <mat-icon>info</mat-icon>\n </button>\n </div>\n</div>\n"],"names":[],"mappings":";;;;;;;;AAOA;;;;;;;AAOG;AAYG,MAAO,iCAAkC,SAAQ,kCAAiE,CAAA;AAC7G,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;QACvC,OAAO,IAAI,CAAC,KAAK,EAAE,EAAE,SAAS,IAAI,kBAAkB;AACtD,IAAA,CAAC,sFAAC;IAEF,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE;IAC7B;uGAPW,iCAAiC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,aAAA,EAAA,EAAA,EAAA,SAAA,EARjC,oCAAoC,CAAC,iCAAiC,CAAC,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClBpF,gbAUA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDSY,+BAA+B,EAAA,QAAA,EAAA,2BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAO5D,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAX7C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,8BAA8B,aAE7B,oCAAoC,CAAA,iCAAA,CAAmC,EAAA,OAAA,EACzE,CAAC,+BAA+B,EAAE,aAAa,EAAE,aAAa,CAAC,EAAA,eAAA,EACvD,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,IAAA,EACV;AACJ,wBAAA,SAAS,EAAE;AACZ,qBAAA,EAAA,QAAA,EAAA,gbAAA,EAAA;;;;;"}