@acorex/components 22.4.22 → 22.4.24

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.
@@ -177,7 +177,7 @@ class AXTagBoxComponent extends classes((MXInputBaseValueComponent), MXLookCompo
177
177
  multi: true,
178
178
  },
179
179
  AXUnsubscriber,
180
- ], queries: [{ propertyName: "autocompleteComponent", first: true, predicate: AXAutocompleteComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\n (click)=\"input.focus()\"\n [class.ax-state-disabled]=\"disabled\"\n [class.ax-state-readonly]=\"readonly\"\n class=\"ax-editor-container ax-default min-w-0 justify-start! {{ look }}\"\n>\n <ng-content select=\"ax-prefix\"> </ng-content>\n <div class=\"ax-tags-container flex w-0 min-w-0 flex-1 flex-wrap content-center items-center gap-1\">\n @for (tag of value; track $index; let i = $index) {\n @if (tagTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"tagTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: tag, index: i }\"\n ></ng-container>\n } @else {\n <ax-tag\n [text]=\"(getFieldValue(tag, textField()) ?? '') + ''\"\n look=\"twotone\"\n (onClick)=\"onTagClick.emit($event)\"\n (onDblClick)=\"onTagDblClick.emit($event)\"\n (onContextMenu)=\"onTagContextMenu.emit($event)\"\n >\n @if (!getFieldValue(tag, readonlyField()) && !disabled && !readonly) {\n <ax-suffix>\n <button (click)=\"removeItem(i)\"><ax-icon class=\"ax-icon ax-icon-close\"></ax-icon></button>\n </ax-suffix>\n }\n </ax-tag>\n }\n }\n <input\n #input\n [name]=\"name\"\n [id]=\"id\"\n class=\"ax-input m-0! h-7.5 min-w-16 w-auto! flex-1 basis-16 ps-2\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [tabindex]=\"tabIndex\"\n [(ngModel)]=\"inputValue\"\n (blur)=\"emitOnBlurEvent($event)\"\n [attr.placeholder]=\"placeholder\"\n (keyup)=\"emitOnKeyupEvent($event)\"\n (focus)=\"emitOnFocusEvent($event)\"\n [class.ax-state-disabled]=\"disabled\"\n [class.ax-state-readonly]=\"readonly\"\n (keydown)=\"emitOnKeydownEvent($event)\"\n (keypress)=\"emitOnKeypressEvent($event)\"\n [ngModelOptions]=\"{ updateOn: updateOn() }\"\n (ngModelChange)=\"emitOnTextChanged($event, true)\"\n />\n </div>\n @if (!disabled && !readonly && value?.length) {\n <ng-content select=\"ax-clear-button\"></ng-content>\n }\n <ng-content select=\"ax-suffix\"> </ng-content>\n</div>\n<ng-content select=\"ax-autocomplete\"> </ng-content>\n<ng-content select=\"ax-validation-rule\"> </ng-content>\n<div class=\"ax-error-container\"></div>\n", styles: ["ax-tag-box{display:block;width:100%;min-width:calc(var(--spacing, .25rem) * 0)}ax-tag-box .ax-tags-container{align-self:stretch;min-height:0;max-height:100%;overflow-x:hidden;overflow-y:auto;overscroll-behavior-y:contain;-webkit-overflow-scrolling:touch}ax-tag-box .ax-tags-container ax-tag{--ax-comp-tag-border-radius: .375rem}ax-tag-box .ax-tags-container ax-tag ax-prefix,ax-tag-box .ax-tags-container ax-tag ax-suffix{padding:calc(var(--spacing, .25rem) * 0)!important}ax-tag-box .ax-tags-container input.ax-input{margin:calc(var(--spacing, .25rem) * 0)!important;height:calc(var(--spacing, .25rem) * 7.5);width:auto!important;max-width:100%;min-width:calc(var(--spacing, .25rem) * 16)!important;padding-inline-start:calc(var(--spacing, .25rem) * 2);flex:1 1 4rem!important}ax-tag-box ax-clear-button{height:calc(var(--spacing, .25rem) * 4);flex-shrink:0;align-self:center}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "component", type: AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXTagComponent, selector: "ax-tag", inputs: ["color", "look", "text"], outputs: ["onClick", "onDblClick", "onContextMenu"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], encapsulation: i0.ViewEncapsulation.None }); }
180
+ ], queries: [{ propertyName: "autocompleteComponent", first: true, predicate: AXAutocompleteComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\n (click)=\"input.focus()\"\n [class.ax-state-disabled]=\"disabled\"\n [class.ax-state-readonly]=\"readonly\"\n class=\"ax-editor-container ax-default min-w-0 justify-start! {{ look }}\"\n>\n <ng-content select=\"ax-prefix\"> </ng-content>\n <div class=\"ax-tags-container flex w-0 min-w-0 flex-1 flex-wrap content-center items-center gap-1\">\n @for (tag of value; track $index; let i = $index) {\n @if (tagTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"tagTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: tag, index: i }\"\n ></ng-container>\n } @else {\n <ax-tag\n [text]=\"(getFieldValue(tag, textField()) ?? '') + ''\"\n look=\"twotone\"\n (onClick)=\"onTagClick.emit($event)\"\n (onDblClick)=\"onTagDblClick.emit($event)\"\n (onContextMenu)=\"onTagContextMenu.emit($event)\"\n >\n @if (!getFieldValue(tag, readonlyField()) && !disabled && !readonly) {\n <ax-suffix>\n <button (click)=\"removeItem(i)\"><ax-icon class=\"ax-icon ax-icon-close\"></ax-icon></button>\n </ax-suffix>\n }\n </ax-tag>\n }\n }\n <input\n #input\n [name]=\"name\"\n [id]=\"id\"\n class=\"ax-input m-0! h-7.5 min-w-16 w-auto! flex-1 basis-16 ps-2\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [tabindex]=\"tabIndex\"\n [(ngModel)]=\"inputValue\"\n (blur)=\"emitOnBlurEvent($event)\"\n [attr.placeholder]=\"placeholder\"\n (keyup)=\"emitOnKeyupEvent($event)\"\n (focus)=\"emitOnFocusEvent($event)\"\n [class.ax-state-disabled]=\"disabled\"\n [class.ax-state-readonly]=\"readonly\"\n (keydown)=\"emitOnKeydownEvent($event)\"\n (keypress)=\"emitOnKeypressEvent($event)\"\n [ngModelOptions]=\"{ updateOn: updateOn() }\"\n (ngModelChange)=\"emitOnTextChanged($event, true)\"\n />\n </div>\n @if (!disabled && !readonly && value?.length) {\n <ng-content select=\"ax-clear-button\"></ng-content>\n }\n <ng-content select=\"ax-suffix\"> </ng-content>\n</div>\n<ng-content select=\"ax-autocomplete\"> </ng-content>\n<ng-content select=\"ax-validation-rule\"> </ng-content>\n<div class=\"ax-error-container\"></div>\n", styles: ["ax-tag-box{display:block;width:100%;min-width:calc(var(--spacing, .25rem) * 0)}ax-tag-box .ax-tags-container ax-tag{--ax-comp-tag-border-radius: .375rem}ax-tag-box .ax-tags-container ax-tag ax-prefix,ax-tag-box .ax-tags-container ax-tag ax-suffix{padding:calc(var(--spacing, .25rem) * 0)!important}ax-tag-box .ax-tags-container input.ax-input{margin:calc(var(--spacing, .25rem) * 0)!important;height:calc(var(--spacing, .25rem) * 7.5);width:auto!important;max-width:100%;min-width:calc(var(--spacing, .25rem) * 16)!important;padding-inline-start:calc(var(--spacing, .25rem) * 2);flex:1 1 4rem!important}ax-tag-box ax-clear-button{height:calc(var(--spacing, .25rem) * 4);flex-shrink:0;align-self:center}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "component", type: AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXTagComponent, selector: "ax-tag", inputs: ["color", "look", "text"], outputs: ["onClick", "onDblClick", "onContextMenu"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], encapsulation: i0.ViewEncapsulation.None }); }
181
181
  }
182
182
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AXTagBoxComponent, decorators: [{
183
183
  type: Component,
@@ -217,7 +217,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
217
217
  multi: true,
218
218
  },
219
219
  AXUnsubscriber,
220
- ], imports: [FormsModule, AXDecoratorGenericComponent, AXDecoratorIconComponent, AXTagComponent, NgTemplateOutlet], template: "<div\n (click)=\"input.focus()\"\n [class.ax-state-disabled]=\"disabled\"\n [class.ax-state-readonly]=\"readonly\"\n class=\"ax-editor-container ax-default min-w-0 justify-start! {{ look }}\"\n>\n <ng-content select=\"ax-prefix\"> </ng-content>\n <div class=\"ax-tags-container flex w-0 min-w-0 flex-1 flex-wrap content-center items-center gap-1\">\n @for (tag of value; track $index; let i = $index) {\n @if (tagTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"tagTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: tag, index: i }\"\n ></ng-container>\n } @else {\n <ax-tag\n [text]=\"(getFieldValue(tag, textField()) ?? '') + ''\"\n look=\"twotone\"\n (onClick)=\"onTagClick.emit($event)\"\n (onDblClick)=\"onTagDblClick.emit($event)\"\n (onContextMenu)=\"onTagContextMenu.emit($event)\"\n >\n @if (!getFieldValue(tag, readonlyField()) && !disabled && !readonly) {\n <ax-suffix>\n <button (click)=\"removeItem(i)\"><ax-icon class=\"ax-icon ax-icon-close\"></ax-icon></button>\n </ax-suffix>\n }\n </ax-tag>\n }\n }\n <input\n #input\n [name]=\"name\"\n [id]=\"id\"\n class=\"ax-input m-0! h-7.5 min-w-16 w-auto! flex-1 basis-16 ps-2\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [tabindex]=\"tabIndex\"\n [(ngModel)]=\"inputValue\"\n (blur)=\"emitOnBlurEvent($event)\"\n [attr.placeholder]=\"placeholder\"\n (keyup)=\"emitOnKeyupEvent($event)\"\n (focus)=\"emitOnFocusEvent($event)\"\n [class.ax-state-disabled]=\"disabled\"\n [class.ax-state-readonly]=\"readonly\"\n (keydown)=\"emitOnKeydownEvent($event)\"\n (keypress)=\"emitOnKeypressEvent($event)\"\n [ngModelOptions]=\"{ updateOn: updateOn() }\"\n (ngModelChange)=\"emitOnTextChanged($event, true)\"\n />\n </div>\n @if (!disabled && !readonly && value?.length) {\n <ng-content select=\"ax-clear-button\"></ng-content>\n }\n <ng-content select=\"ax-suffix\"> </ng-content>\n</div>\n<ng-content select=\"ax-autocomplete\"> </ng-content>\n<ng-content select=\"ax-validation-rule\"> </ng-content>\n<div class=\"ax-error-container\"></div>\n", styles: ["ax-tag-box{display:block;width:100%;min-width:calc(var(--spacing, .25rem) * 0)}ax-tag-box .ax-tags-container{align-self:stretch;min-height:0;max-height:100%;overflow-x:hidden;overflow-y:auto;overscroll-behavior-y:contain;-webkit-overflow-scrolling:touch}ax-tag-box .ax-tags-container ax-tag{--ax-comp-tag-border-radius: .375rem}ax-tag-box .ax-tags-container ax-tag ax-prefix,ax-tag-box .ax-tags-container ax-tag ax-suffix{padding:calc(var(--spacing, .25rem) * 0)!important}ax-tag-box .ax-tags-container input.ax-input{margin:calc(var(--spacing, .25rem) * 0)!important;height:calc(var(--spacing, .25rem) * 7.5);width:auto!important;max-width:100%;min-width:calc(var(--spacing, .25rem) * 16)!important;padding-inline-start:calc(var(--spacing, .25rem) * 2);flex:1 1 4rem!important}ax-tag-box ax-clear-button{height:calc(var(--spacing, .25rem) * 4);flex-shrink:0;align-self:center}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"] }]
220
+ ], imports: [FormsModule, AXDecoratorGenericComponent, AXDecoratorIconComponent, AXTagComponent, NgTemplateOutlet], template: "<div\n (click)=\"input.focus()\"\n [class.ax-state-disabled]=\"disabled\"\n [class.ax-state-readonly]=\"readonly\"\n class=\"ax-editor-container ax-default min-w-0 justify-start! {{ look }}\"\n>\n <ng-content select=\"ax-prefix\"> </ng-content>\n <div class=\"ax-tags-container flex w-0 min-w-0 flex-1 flex-wrap content-center items-center gap-1\">\n @for (tag of value; track $index; let i = $index) {\n @if (tagTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"tagTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: tag, index: i }\"\n ></ng-container>\n } @else {\n <ax-tag\n [text]=\"(getFieldValue(tag, textField()) ?? '') + ''\"\n look=\"twotone\"\n (onClick)=\"onTagClick.emit($event)\"\n (onDblClick)=\"onTagDblClick.emit($event)\"\n (onContextMenu)=\"onTagContextMenu.emit($event)\"\n >\n @if (!getFieldValue(tag, readonlyField()) && !disabled && !readonly) {\n <ax-suffix>\n <button (click)=\"removeItem(i)\"><ax-icon class=\"ax-icon ax-icon-close\"></ax-icon></button>\n </ax-suffix>\n }\n </ax-tag>\n }\n }\n <input\n #input\n [name]=\"name\"\n [id]=\"id\"\n class=\"ax-input m-0! h-7.5 min-w-16 w-auto! flex-1 basis-16 ps-2\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [tabindex]=\"tabIndex\"\n [(ngModel)]=\"inputValue\"\n (blur)=\"emitOnBlurEvent($event)\"\n [attr.placeholder]=\"placeholder\"\n (keyup)=\"emitOnKeyupEvent($event)\"\n (focus)=\"emitOnFocusEvent($event)\"\n [class.ax-state-disabled]=\"disabled\"\n [class.ax-state-readonly]=\"readonly\"\n (keydown)=\"emitOnKeydownEvent($event)\"\n (keypress)=\"emitOnKeypressEvent($event)\"\n [ngModelOptions]=\"{ updateOn: updateOn() }\"\n (ngModelChange)=\"emitOnTextChanged($event, true)\"\n />\n </div>\n @if (!disabled && !readonly && value?.length) {\n <ng-content select=\"ax-clear-button\"></ng-content>\n }\n <ng-content select=\"ax-suffix\"> </ng-content>\n</div>\n<ng-content select=\"ax-autocomplete\"> </ng-content>\n<ng-content select=\"ax-validation-rule\"> </ng-content>\n<div class=\"ax-error-container\"></div>\n", styles: ["ax-tag-box{display:block;width:100%;min-width:calc(var(--spacing, .25rem) * 0)}ax-tag-box .ax-tags-container ax-tag{--ax-comp-tag-border-radius: .375rem}ax-tag-box .ax-tags-container ax-tag ax-prefix,ax-tag-box .ax-tags-container ax-tag ax-suffix{padding:calc(var(--spacing, .25rem) * 0)!important}ax-tag-box .ax-tags-container input.ax-input{margin:calc(var(--spacing, .25rem) * 0)!important;height:calc(var(--spacing, .25rem) * 7.5);width:auto!important;max-width:100%;min-width:calc(var(--spacing, .25rem) * 16)!important;padding-inline-start:calc(var(--spacing, .25rem) * 2);flex:1 1 4rem!important}ax-tag-box ax-clear-button{height:calc(var(--spacing, .25rem) * 4);flex-shrink:0;align-self:center}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"] }]
221
221
  }], propDecorators: { addOnComma: [{ type: i0.Input, args: [{ isSignal: true, alias: "addOnComma", required: false }] }], addOnEnter: [{ type: i0.Input, args: [{ isSignal: true, alias: "addOnEnter", required: false }] }], valueField: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueField", required: false }] }], textField: [{ type: i0.Input, args: [{ isSignal: true, alias: "textField", required: false }] }], readonlyField: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonlyField", required: false }] }], allowDuplicateValues: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowDuplicateValues", required: false }] }], tagTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "tagTemplate", required: false }] }], onTagClick: [{ type: i0.Output, args: ["onTagClick"] }], onTagDblClick: [{ type: i0.Output, args: ["onTagDblClick"] }], onTagContextMenu: [{ type: i0.Output, args: ["onTagContextMenu"] }], autocompleteComponent: [{ type: i0.ContentChild, args: [i0.forwardRef(() => AXAutocompleteComponent), { isSignal: true }] }], __hostName: [{
222
222
  type: HostBinding,
223
223
  args: ['attr.name']
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-components-tag-box.mjs","sources":["../../../../packages/components/tag-box/src/lib/tag-box.component.ts","../../../../packages/components/tag-box/src/lib/tag-box.component.html","../../../../packages/components/tag-box/src/lib/tag-box.module.ts","../../../../packages/components/tag-box/src/acorex-components-tag-box.ts"],"sourcesContent":["import {\n AXAutocompleteParentComponent,\n AXClearableComponent,\n AXClickEvent,\n AXComponent,\n AXFocusableComponent,\n AXValuableComponent,\n MXInputBaseValueComponent,\n MXLookComponent,\n} from '@acorex/cdk/common';\nimport { AXAutocompleteComponent } from '@acorex/components/autocomplete';\nimport { AXDecoratorGenericComponent, AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXTagComponent } from '@acorex/components/tag';\nimport { AXUnsubscriber } from '@acorex/core/utils';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n Component,\n HostBinding,\n OnInit,\n TemplateRef,\n ViewEncapsulation,\n contentChild,\n forwardRef,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { castArray, cloneDeep, get, isNil, isNull, set } from 'lodash-es';\nimport { classes } from 'polytype';\n\n@Component({\n selector: 'ax-tag-box',\n templateUrl: 'tag-box.component.html',\n styleUrls: ['tag-box.component.css'],\n inputs: [\n 'disabled',\n 'tabIndex',\n 'readonly',\n 'value',\n 'state',\n 'name',\n 'id',\n 'placeholder',\n 'allowNull',\n 'type',\n 'look',\n ],\n outputs: [\n 'onBlur',\n 'onFocus',\n 'valueChange',\n 'stateChange',\n 'onValueChanged',\n 'readonlyChange',\n 'disabledChange',\n 'onKeyDown',\n 'onKeyUp',\n 'onKeyPress',\n ],\n encapsulation: ViewEncapsulation.None,\n\n providers: [\n { provide: AXComponent, useExisting: AXTagBoxComponent },\n { provide: AXValuableComponent, useExisting: AXTagBoxComponent },\n { provide: AXFocusableComponent, useExisting: AXTagBoxComponent },\n { provide: AXClearableComponent, useExisting: AXTagBoxComponent },\n { provide: MXInputBaseValueComponent, useExisting: AXTagBoxComponent },\n { provide: AXAutocompleteParentComponent, useExisting: AXTagBoxComponent },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AXTagBoxComponent),\n multi: true,\n },\n AXUnsubscriber,\n ],\n imports: [FormsModule, AXDecoratorGenericComponent, AXDecoratorIconComponent, AXTagComponent, NgTemplateOutlet],\n})\nexport class AXTagBoxComponent\n extends classes(MXInputBaseValueComponent<unknown[]>, MXLookComponent, AXAutocompleteParentComponent<unknown[]>)\n implements OnInit\n{\n unsubscriber = inject(AXUnsubscriber);\n\n protected updateOn = signal<'change' | 'blur' | 'submit'>('change');\n\n addOnComma = input(true);\n addOnEnter = input(true);\n valueField = input('id');\n textField = input('text');\n readonlyField = input('readonly');\n allowDuplicateValues = input(false);\n tagTemplate = input<TemplateRef<unknown>>();\n\n onTagClick = output<AXClickEvent>();\n onTagDblClick = output<AXClickEvent>();\n onTagContextMenu = output<AXClickEvent>();\n\n inputValue = signal<string>('');\n\n private autocompleteComponent = contentChild(AXAutocompleteComponent);\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.onKeyDown.pipe(this.unsubscriber.takeUntilDestroy).subscribe((e) => {\n const input = this.inputValue().trim();\n\n if (e.nativeEvent.key === 'Enter' && this.addOnEnter()) {\n if (!input.length) return;\n this.addItems(this.convertString(input));\n }\n\n if (e.nativeEvent.key === ',' && this.addOnComma()) {\n if (!input.length) return;\n e.nativeEvent.preventDefault();\n\n if (!input || input === ',') {\n this.inputValue.set('');\n this.emitOnTextChanged('', true);\n return;\n }\n\n this.addItems(this.convertString(input));\n }\n\n if (e.nativeEvent.key === 'Backspace') {\n if (this.inputValue().length) return;\n this.removeItem(this.value?.length - 1);\n }\n });\n\n this.onItemSelected.pipe(this.unsubscriber.takeUntilDestroy).subscribe((e) => {\n const incomingItems = this.convertString(e.value);\n const currentValue = this.value ?? [];\n const vf = this.valueField();\n const filtered = incomingItems.filter((item) => !currentValue.some((prev) => get(prev, vf) === get(item, vf)));\n this.addItems(filtered);\n });\n }\n\n /**\n * Adds items to the tag box.\n *\n * @param items - Array of objects to add as tags\n */\n addItems(items: object[]) {\n if (this.disabled || this.readonly) {\n return;\n }\n //\n if (isNil(items) || items.length === 0) {\n return;\n }\n //\n const value = cloneDeep(this.value ?? []);\n // filter out duplicates instead of early return\n let itemsToAdd = items;\n if (!this.allowDuplicateValues()) {\n const vf = this.valueField();\n itemsToAdd = items.filter((item) => !value.some((prev) => get(prev, vf) === get(item, vf)));\n if (itemsToAdd.length === 0) {\n this.inputValue.set('');\n this.emitOnTextChanged('', true);\n return;\n }\n }\n\n this.inputValue.set('');\n this.emitOnTextChanged('', true);\n\n this.commitValue(value.concat(itemsToAdd), true);\n\n // sync autocomplete selection to avoid re-adding removed items\n this.syncAutocompleteSelection();\n }\n\n /**\n * Removes a tag at the specified index.\n *\n * @param index - Index of the tag to remove\n */\n removeItem(index: number) {\n if (this.disabled || this.readonly) {\n return;\n }\n const value = cloneDeep(this.value ?? []);\n value.splice(index, 1);\n this.commitValue(value, true);\n\n // sync autocomplete selection to avoid re-adding removed items\n this.syncAutocompleteSelection();\n }\n\n /**\n * Converts input values to tag objects.\n *\n * @param v - Value to convert (string, object, or array)\n * @returns Array of tag objects\n */\n convertString(v: unknown): object[] {\n const array = castArray(v);\n\n return array\n .map((c) => {\n if (!c) return null;\n if (typeof c === 'object') {\n return c;\n }\n const obj: Record<string, unknown> = {};\n set(obj, this.valueField(), c);\n set(obj, this.textField(), c);\n return obj;\n })\n .filter((c) => !isNull(c));\n }\n\n getFieldValue(item: unknown, path: string): unknown {\n return get(item as Record<string, unknown>, path);\n }\n\n /**\n * Keep autocomplete selected values in sync with current tags\n */\n private syncAutocompleteSelection(): void {\n const ac = this.autocompleteComponent();\n if (!ac) return;\n const vf = ac.valueField || this.valueField();\n const values = (this.value ?? []).map((t) => get(t as Record<string, unknown>, vf)).filter((v) => v != null);\n ac.value = ac.multiple ? values : (values[0] ?? null);\n }\n\n protected override internalSetValue(value: unknown): unknown[] {\n const result = this.convertString(value);\n return result;\n }\n\n @HostBinding('attr.name')\n private get __hostName(): string {\n return this.name;\n }\n}\n","<div\n (click)=\"input.focus()\"\n [class.ax-state-disabled]=\"disabled\"\n [class.ax-state-readonly]=\"readonly\"\n class=\"ax-editor-container ax-default min-w-0 justify-start! {{ look }}\"\n>\n <ng-content select=\"ax-prefix\"> </ng-content>\n <div class=\"ax-tags-container flex w-0 min-w-0 flex-1 flex-wrap content-center items-center gap-1\">\n @for (tag of value; track $index; let i = $index) {\n @if (tagTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"tagTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: tag, index: i }\"\n ></ng-container>\n } @else {\n <ax-tag\n [text]=\"(getFieldValue(tag, textField()) ?? '') + ''\"\n look=\"twotone\"\n (onClick)=\"onTagClick.emit($event)\"\n (onDblClick)=\"onTagDblClick.emit($event)\"\n (onContextMenu)=\"onTagContextMenu.emit($event)\"\n >\n @if (!getFieldValue(tag, readonlyField()) && !disabled && !readonly) {\n <ax-suffix>\n <button (click)=\"removeItem(i)\"><ax-icon class=\"ax-icon ax-icon-close\"></ax-icon></button>\n </ax-suffix>\n }\n </ax-tag>\n }\n }\n <input\n #input\n [name]=\"name\"\n [id]=\"id\"\n class=\"ax-input m-0! h-7.5 min-w-16 w-auto! flex-1 basis-16 ps-2\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [tabindex]=\"tabIndex\"\n [(ngModel)]=\"inputValue\"\n (blur)=\"emitOnBlurEvent($event)\"\n [attr.placeholder]=\"placeholder\"\n (keyup)=\"emitOnKeyupEvent($event)\"\n (focus)=\"emitOnFocusEvent($event)\"\n [class.ax-state-disabled]=\"disabled\"\n [class.ax-state-readonly]=\"readonly\"\n (keydown)=\"emitOnKeydownEvent($event)\"\n (keypress)=\"emitOnKeypressEvent($event)\"\n [ngModelOptions]=\"{ updateOn: updateOn() }\"\n (ngModelChange)=\"emitOnTextChanged($event, true)\"\n />\n </div>\n @if (!disabled && !readonly && value?.length) {\n <ng-content select=\"ax-clear-button\"></ng-content>\n }\n <ng-content select=\"ax-suffix\"> </ng-content>\n</div>\n<ng-content select=\"ax-autocomplete\"> </ng-content>\n<ng-content select=\"ax-validation-rule\"> </ng-content>\n<div class=\"ax-error-container\"></div>\n","import { NgModule } from '@angular/core';\nimport { AXTagBoxComponent } from './tag-box.component';\n\n@NgModule({\n imports: [AXTagBoxComponent],\n exports: [AXTagBoxComponent],\n providers: [],\n})\nexport class AXTagBoxModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-components-tag-box.mjs","sources":["../../../../packages/components/tag-box/src/lib/tag-box.component.ts","../../../../packages/components/tag-box/src/lib/tag-box.component.html","../../../../packages/components/tag-box/src/lib/tag-box.module.ts","../../../../packages/components/tag-box/src/acorex-components-tag-box.ts"],"sourcesContent":["import {\n AXAutocompleteParentComponent,\n AXClearableComponent,\n AXClickEvent,\n AXComponent,\n AXFocusableComponent,\n AXValuableComponent,\n MXInputBaseValueComponent,\n MXLookComponent,\n} from '@acorex/cdk/common';\nimport { AXAutocompleteComponent } from '@acorex/components/autocomplete';\nimport { AXDecoratorGenericComponent, AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXTagComponent } from '@acorex/components/tag';\nimport { AXUnsubscriber } from '@acorex/core/utils';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n Component,\n HostBinding,\n OnInit,\n TemplateRef,\n ViewEncapsulation,\n contentChild,\n forwardRef,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { castArray, cloneDeep, get, isNil, isNull, set } from 'lodash-es';\nimport { classes } from 'polytype';\n\n@Component({\n selector: 'ax-tag-box',\n templateUrl: 'tag-box.component.html',\n styleUrls: ['tag-box.component.css'],\n inputs: [\n 'disabled',\n 'tabIndex',\n 'readonly',\n 'value',\n 'state',\n 'name',\n 'id',\n 'placeholder',\n 'allowNull',\n 'type',\n 'look',\n ],\n outputs: [\n 'onBlur',\n 'onFocus',\n 'valueChange',\n 'stateChange',\n 'onValueChanged',\n 'readonlyChange',\n 'disabledChange',\n 'onKeyDown',\n 'onKeyUp',\n 'onKeyPress',\n ],\n encapsulation: ViewEncapsulation.None,\n\n providers: [\n { provide: AXComponent, useExisting: AXTagBoxComponent },\n { provide: AXValuableComponent, useExisting: AXTagBoxComponent },\n { provide: AXFocusableComponent, useExisting: AXTagBoxComponent },\n { provide: AXClearableComponent, useExisting: AXTagBoxComponent },\n { provide: MXInputBaseValueComponent, useExisting: AXTagBoxComponent },\n { provide: AXAutocompleteParentComponent, useExisting: AXTagBoxComponent },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AXTagBoxComponent),\n multi: true,\n },\n AXUnsubscriber,\n ],\n imports: [FormsModule, AXDecoratorGenericComponent, AXDecoratorIconComponent, AXTagComponent, NgTemplateOutlet],\n})\nexport class AXTagBoxComponent\n extends classes(MXInputBaseValueComponent<unknown[]>, MXLookComponent, AXAutocompleteParentComponent<unknown[]>)\n implements OnInit\n{\n unsubscriber = inject(AXUnsubscriber);\n\n protected updateOn = signal<'change' | 'blur' | 'submit'>('change');\n\n addOnComma = input(true);\n addOnEnter = input(true);\n valueField = input('id');\n textField = input('text');\n readonlyField = input('readonly');\n allowDuplicateValues = input(false);\n tagTemplate = input<TemplateRef<unknown>>();\n\n onTagClick = output<AXClickEvent>();\n onTagDblClick = output<AXClickEvent>();\n onTagContextMenu = output<AXClickEvent>();\n\n inputValue = signal<string>('');\n\n private autocompleteComponent = contentChild(AXAutocompleteComponent);\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.onKeyDown.pipe(this.unsubscriber.takeUntilDestroy).subscribe((e) => {\n const input = this.inputValue().trim();\n\n if (e.nativeEvent.key === 'Enter' && this.addOnEnter()) {\n if (!input.length) return;\n this.addItems(this.convertString(input));\n }\n\n if (e.nativeEvent.key === ',' && this.addOnComma()) {\n if (!input.length) return;\n e.nativeEvent.preventDefault();\n\n if (!input || input === ',') {\n this.inputValue.set('');\n this.emitOnTextChanged('', true);\n return;\n }\n\n this.addItems(this.convertString(input));\n }\n\n if (e.nativeEvent.key === 'Backspace') {\n if (this.inputValue().length) return;\n this.removeItem(this.value?.length - 1);\n }\n });\n\n this.onItemSelected.pipe(this.unsubscriber.takeUntilDestroy).subscribe((e) => {\n const incomingItems = this.convertString(e.value);\n const currentValue = this.value ?? [];\n const vf = this.valueField();\n const filtered = incomingItems.filter((item) => !currentValue.some((prev) => get(prev, vf) === get(item, vf)));\n this.addItems(filtered);\n });\n }\n\n /**\n * Adds items to the tag box.\n *\n * @param items - Array of objects to add as tags\n */\n addItems(items: object[]) {\n if (this.disabled || this.readonly) {\n return;\n }\n //\n if (isNil(items) || items.length === 0) {\n return;\n }\n //\n const value = cloneDeep(this.value ?? []);\n // filter out duplicates instead of early return\n let itemsToAdd = items;\n if (!this.allowDuplicateValues()) {\n const vf = this.valueField();\n itemsToAdd = items.filter((item) => !value.some((prev) => get(prev, vf) === get(item, vf)));\n if (itemsToAdd.length === 0) {\n this.inputValue.set('');\n this.emitOnTextChanged('', true);\n return;\n }\n }\n\n this.inputValue.set('');\n this.emitOnTextChanged('', true);\n\n this.commitValue(value.concat(itemsToAdd), true);\n\n // sync autocomplete selection to avoid re-adding removed items\n this.syncAutocompleteSelection();\n }\n\n /**\n * Removes a tag at the specified index.\n *\n * @param index - Index of the tag to remove\n */\n removeItem(index: number) {\n if (this.disabled || this.readonly) {\n return;\n }\n const value = cloneDeep(this.value ?? []);\n value.splice(index, 1);\n this.commitValue(value, true);\n\n // sync autocomplete selection to avoid re-adding removed items\n this.syncAutocompleteSelection();\n }\n\n /**\n * Converts input values to tag objects.\n *\n * @param v - Value to convert (string, object, or array)\n * @returns Array of tag objects\n */\n convertString(v: unknown): object[] {\n const array = castArray(v);\n\n return array\n .map((c) => {\n if (!c) return null;\n if (typeof c === 'object') {\n return c;\n }\n const obj: Record<string, unknown> = {};\n set(obj, this.valueField(), c);\n set(obj, this.textField(), c);\n return obj;\n })\n .filter((c) => !isNull(c));\n }\n\n getFieldValue(item: unknown, path: string): unknown {\n return get(item as Record<string, unknown>, path);\n }\n\n /**\n * Keep autocomplete selected values in sync with current tags\n */\n private syncAutocompleteSelection(): void {\n const ac = this.autocompleteComponent();\n if (!ac) return;\n const vf = ac.valueField || this.valueField();\n const values = (this.value ?? []).map((t) => get(t as Record<string, unknown>, vf)).filter((v) => v != null);\n ac.value = ac.multiple ? values : (values[0] ?? null);\n }\n\n protected override internalSetValue(value: unknown): unknown[] {\n const result = this.convertString(value);\n return result;\n }\n\n @HostBinding('attr.name')\n private get __hostName(): string {\n return this.name;\n }\n}\n","<div\n (click)=\"input.focus()\"\n [class.ax-state-disabled]=\"disabled\"\n [class.ax-state-readonly]=\"readonly\"\n class=\"ax-editor-container ax-default min-w-0 justify-start! {{ look }}\"\n>\n <ng-content select=\"ax-prefix\"> </ng-content>\n <div class=\"ax-tags-container flex w-0 min-w-0 flex-1 flex-wrap content-center items-center gap-1\">\n @for (tag of value; track $index; let i = $index) {\n @if (tagTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"tagTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: tag, index: i }\"\n ></ng-container>\n } @else {\n <ax-tag\n [text]=\"(getFieldValue(tag, textField()) ?? '') + ''\"\n look=\"twotone\"\n (onClick)=\"onTagClick.emit($event)\"\n (onDblClick)=\"onTagDblClick.emit($event)\"\n (onContextMenu)=\"onTagContextMenu.emit($event)\"\n >\n @if (!getFieldValue(tag, readonlyField()) && !disabled && !readonly) {\n <ax-suffix>\n <button (click)=\"removeItem(i)\"><ax-icon class=\"ax-icon ax-icon-close\"></ax-icon></button>\n </ax-suffix>\n }\n </ax-tag>\n }\n }\n <input\n #input\n [name]=\"name\"\n [id]=\"id\"\n class=\"ax-input m-0! h-7.5 min-w-16 w-auto! flex-1 basis-16 ps-2\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [tabindex]=\"tabIndex\"\n [(ngModel)]=\"inputValue\"\n (blur)=\"emitOnBlurEvent($event)\"\n [attr.placeholder]=\"placeholder\"\n (keyup)=\"emitOnKeyupEvent($event)\"\n (focus)=\"emitOnFocusEvent($event)\"\n [class.ax-state-disabled]=\"disabled\"\n [class.ax-state-readonly]=\"readonly\"\n (keydown)=\"emitOnKeydownEvent($event)\"\n (keypress)=\"emitOnKeypressEvent($event)\"\n [ngModelOptions]=\"{ updateOn: updateOn() }\"\n (ngModelChange)=\"emitOnTextChanged($event, true)\"\n />\n </div>\n @if (!disabled && !readonly && value?.length) {\n <ng-content select=\"ax-clear-button\"></ng-content>\n }\n <ng-content select=\"ax-suffix\"> </ng-content>\n</div>\n<ng-content select=\"ax-autocomplete\"> </ng-content>\n<ng-content select=\"ax-validation-rule\"> </ng-content>\n<div class=\"ax-error-container\"></div>\n","import { NgModule } from '@angular/core';\nimport { AXTagBoxComponent } from './tag-box.component';\n\n@NgModule({\n imports: [AXTagBoxComponent],\n exports: [AXTagBoxComponent],\n providers: [],\n})\nexport class AXTagBoxModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@acorex/components",
3
- "version": "22.4.22",
3
+ "version": "22.4.24",
4
4
  "peerDependencies": {
5
- "@acorex/core": "22.4.22",
6
- "@acorex/cdk": "22.4.22",
5
+ "@acorex/core": "22.4.24",
6
+ "@acorex/cdk": "22.4.24",
7
7
  "@angular/aria": ">=22.1.0",
8
8
  "polytype": ">=0.17.0",
9
9
  "hammerjs": ">=2.0.8",
@@ -1000,9 +1000,8 @@ declare class AXDataTableComponent extends AXBaseDataTable implements OnInit, Af
1000
1000
  */
1001
1001
  protected normalColumnsList: Signal<AXDataTableColumnComponent[]>;
1002
1002
  /**
1003
- * True when a text column owns the tree expander. Leftover table space is added
1004
- * to that column for nested indent. Its content width is a minimum, so the table
1005
- * scrolls horizontally instead of collapsing the column.
1003
+ * True when a column owns the tree expander. Its width stays the widest parent row.
1004
+ * Nested rows do not widen it, and leftover wrapper space stays in the spacer column.
1006
1005
  */
1007
1006
  protected hasTreeFillColumn: Signal<boolean>;
1008
1007
  /**
@@ -1119,6 +1118,8 @@ declare class AXDataTableComponent extends AXBaseDataTable implements OnInit, Af
1119
1118
  * @ignore
1120
1119
  */
1121
1120
  private readonly treeFillResolvedWidths;
1121
+ /** Coalesces tree remeasure until expanded rows are in the DOM. */
1122
+ private treeFillAfterExpandTimer;
1122
1123
  /** @ignore */
1123
1124
  private resizeObserver;
1124
1125
  /**
@@ -1300,6 +1301,7 @@ declare class AXDataTableComponent extends AXBaseDataTable implements OnInit, Af
1300
1301
  private captureAutoFitIntentColumns;
1301
1302
  /**
1302
1303
  * Tree expand columns keep a content minimum and grow into leftover table space for nested indent.
1304
+ * `expandHandler` opts any column in, including hosts that extend the base column instead of `ax-text-column`.
1303
1305
  */
1304
1306
  private isTreeFillColumn;
1305
1307
  /**
@@ -1472,22 +1474,32 @@ declare class AXDataTableComponent extends AXBaseDataTable implements OnInit, Af
1472
1474
  /** Lets cloned header/cells report their text width instead of the collapsed column width. */
1473
1475
  private prepareMeasuredCell;
1474
1476
  /**
1475
- * Stores the content width of tree-expander columns, including visible nested indent.
1477
+ * Re-measures tree-expander columns and assigns leftover wrapper width.
1478
+ * Does not write a pixel `column.width` or emit `onColumnSizeChanged`.
1479
+ */
1480
+ private refreshTreeFillLayout;
1481
+ /** Nested rows paint after `onItemExpanded`; remeasure parent rows without widening for children. */
1482
+ private scheduleTreeFillAfterExpand;
1483
+ /**
1484
+ * Stores the content width of tree-expander columns from parent rows only.
1485
+ * Child indent must not widen the column.
1476
1486
  */
1477
1487
  private measureTreeFillColumns;
1478
- /** Deepest visible nested-row indent, which content measurement does not include. */
1479
- private readTreeIndentPadding;
1488
+ /** A body row nested under a parent (`data-level` greater than 0). */
1489
+ private isNestedTreeRow;
1490
+ private columnHasVisibleRootRow;
1480
1491
  private readPixelWidth;
1481
1492
  /**
1482
1493
  * Sizes the table to the sum of column widths so columns keep their content width
1483
1494
  * and the wrapper scrolls horizontally when that sum exceeds the container.
1484
- * Tree-expander columns receive any leftover container width.
1495
+ * A tree-expander column stays at the widest parent row. Leftover space stays in the spacer.
1485
1496
  */
1486
1497
  private updateColumnLayoutWidths;
1487
1498
  private observeTableWrapper;
1488
1499
  /**
1489
1500
  * Auto-fits a single column by its `name` / data field.
1490
1501
  * Call after async cell content has rendered when `width` is `'auto'`.
1502
+ * A tree expand column keeps `width: 'auto'` and refreshes the shared tree layout instead of pinning a pixel width.
1491
1503
  *
1492
1504
  * @param columnName - Column `name` / data field.
1493
1505
  * @param options - Measurement options; programmatic calls default to `isUserInteraction: false`.