@arsedizioni/ars-utils 22.5.38 → 22.5.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +185 -179
- package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +15 -15
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +44 -43
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-core.date.mjs +6 -6
- package/fesm2022/arsedizioni-ars-utils-core.markdown.mjs +3 -3
- package/fesm2022/arsedizioni-ars-utils-core.mjs +48 -48
- package/fesm2022/arsedizioni-ars-utils-core.validators.mjs +42 -42
- package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs +15 -15
- package/fesm2022/arsedizioni-ars-utils-support.common.mjs +9 -9
- package/fesm2022/arsedizioni-ars-utils-ui.controls.date.mjs +118 -0
- package/fesm2022/arsedizioni-ars-utils-ui.controls.date.mjs.map +1 -0
- package/fesm2022/arsedizioni-ars-utils-ui.controls.mjs +17 -448
- package/fesm2022/arsedizioni-ars-utils-ui.controls.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.controls.tree.mjs +368 -0
- package/fesm2022/arsedizioni-ars-utils-ui.controls.tree.mjs.map +1 -0
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.auth.mjs +18 -18
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.mjs +12 -12
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs +10 -10
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.select.mjs +12 -12
- package/fesm2022/arsedizioni-ars-utils-ui.files.mjs +12 -12
- package/fesm2022/arsedizioni-ars-utils-ui.filters.mjs +3 -3
- package/fesm2022/arsedizioni-ars-utils-ui.help.mjs +9 -9
- package/fesm2022/arsedizioni-ars-utils-ui.mjs +61 -61
- package/fesm2022/arsedizioni-ars-utils-ui.navigation.mjs +3 -3
- package/fesm2022/arsedizioni-ars-utils-ui.notifications.mjs +6 -6
- package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs +6 -6
- package/fesm2022/arsedizioni-ars-utils-ui.paginator.mjs +3 -3
- package/fesm2022/arsedizioni-ars-utils-ui.shell.mjs +9 -9
- package/fesm2022/arsedizioni-ars-utils-ui.tinymce.mjs +9 -9
- package/package.json +9 -1
- package/types/arsedizioni-ars-utils-clipper.ui.d.ts +3 -2
- package/types/arsedizioni-ars-utils-ui.controls.d.ts +3 -180
- package/types/arsedizioni-ars-utils-ui.controls.date.d.ts +49 -0
- package/types/arsedizioni-ars-utils-ui.controls.tree.d.ts +136 -0
- package/types/arsedizioni-ars-utils-ui.navigation.d.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arsedizioni-ars-utils-ui.controls.mjs","sources":["../../../projects/ars-utils/ui.controls/button-selector/button-selector.component.ts","../../../projects/ars-utils/ui.controls/button-selector/button-selector.component.html","../../../projects/ars-utils/ui.controls/button-toggle/button-toggle.component.ts","../../../projects/ars-utils/ui.controls/button-toggle/button-toggle.component.html","../../../projects/ars-utils/ui.controls/chips-selector/chips-selector.component.ts","../../../projects/ars-utils/ui.controls/chips-selector/chips-selector.component.html","../../../projects/ars-utils/ui.controls/tree-picker/tree-picker.component.ts","../../../projects/ars-utils/ui.controls/tree-picker/tree-picker.component.html","../../../projects/ars-utils/ui.controls/calendar-empty-header/calendar-empy-header.component.ts","../../../projects/ars-utils/ui.controls/date-picker/datepicker-fix.directive.ts","../../../projects/ars-utils/ui.controls/public_api.ts","../../../projects/ars-utils/ui.controls/arsedizioni-ars-utils-ui.controls.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, Input, effect, OnDestroy, Optional, Renderer2, Self, inject, input, signal, output } from '@angular/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { NameValueItem, SystemUtils } from '@arsedizioni/ars-utils/core';\nimport { FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\nimport { Subject } from 'rxjs';\n\n\n@Component({\n selector: 'button-selector',\n standalone: true,\n imports: [FlexLayoutModule, MatIconModule, MatButtonModule,\n MatMenuModule],\n templateUrl: './button-selector.component.html',\n styleUrl: './button-selector.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[id]': 'id',\n '[attr.aria-describedBy]': 'describedBy',\n },\n})\nexport class ButtonSelectorComponent implements OnDestroy, ControlValueAccessor {\n\n /** Emitted whenever the selected value changes (including programmatic resets). */\n readonly changed = output<NameValueItem<any> | undefined>();\n\n /** Emitted when the user explicitly picks an item from the menu. */\n readonly selected = output<NameValueItem<any> | undefined>();\n\n private readonly stateChanges = new Subject<void>();\n private focused = false;\n\n private _value: NameValueItem<any> | undefined = undefined;\n\n set value(value: NameValueItem<any> | undefined) {\n this.setValue(value, true);\n }\n\n /**\n * Updates the internal state. Form propagation is skipped for model->view\n * writes (writeValue) to avoid the CVA echo loop, and performed for\n * user/programmatic changes via the `value` setter.\n * @param value - The new value to store and display.\n * @param propagate - When `true`, notifies the registered onChange callback.\n */\n private setValue(value: NameValueItem<any> | undefined, propagate: boolean): void {\n this._value = value;\n if (propagate) {\n this.propagateChange(this._value);\n }\n this.stateChanges.next();\n this.changed.emit(this._value);\n this.current.set(this._value);\n }\n\n /** The current value as the selected item. */\n get value(): NameValueItem<any> | undefined {\n return this._value;\n }\n\n private _disabled: boolean = false;\n\n @Input()\n get disabled(): boolean {\n if (this.ngControl && this.ngControl.disabled != null) {\n return this.ngControl.disabled;\n }\n return this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n if (this.focused) {\n this.focused = false;\n this.stateChanges.next();\n }\n }\n\n private propagateChange: (_: any) => void = () => {};\n private propagateTouched: () => void = () => {};\n\n id = `button-selector--${SystemUtils.generateUUID()}`;\n describedBy = '';\n\n private readonly renderer = inject(Renderer2);\n\n /** Currently selected item, kept in sync with the form control value. */\n protected readonly current = signal<NameValueItem<any> | undefined>(undefined);\n\n /** Width of the trigger button in pixels. Use `-1` for 100 %, `0` for `auto`. */\n readonly width = input<number>(-1);\n\n /** Border thickness override. Use `-1` to inherit. */\n readonly border = input<number>(-1);\n\n /** CSS border-radius of the trigger button. Defaults to a pill shape. */\n readonly borderRadius = input<string>('9999px');\n\n /** Placeholder label shown when nothing is selected. */\n readonly label = input<string | undefined>(undefined);\n\n /** Label shown above the selected value (replaces `label` when an item is selected). */\n readonly labelSelected = input<string | undefined>(undefined);\n\n /** List of selectable options. */\n readonly options = input<NameValueItem<any>[]>([]);\n\n /** When `true`, the first available option is pre-selected on init. */\n readonly autoSelect = input<boolean>(false);\n\n constructor(@Optional() @Self() public ngControl: NgControl) {\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n\n // Pre-select the first option whenever options change and autoSelect is enabled\n effect(() => {\n if (this.autoSelect()) {\n const options = this.options();\n // !== undefined: values like 0 or false are legitimate selections\n if (options.length > 0 && options[0].value !== undefined) {\n this.current.set(options[0]);\n }\n }\n });\n }\n\n ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n\n /**\n * Writes a new value to the component (called by the form layer).\n * @param value - The new value to display.\n */\n writeValue(value: any): void {\n // Model -> view write: must NOT propagate back to the form (echo loop)\n this.setValue(value as NameValueItem<any> | undefined, false);\n }\n\n /**\n * Registers the on-change callback (called by the form layer).\n * @param fn - Callback to invoke whenever the value changes.\n */\n registerOnChange(fn: (_: any) => void): void {\n this.propagateChange = fn;\n }\n\n /**\n * Registers the on-touched callback (called by the form layer).\n * @param fn - Callback to invoke when the control is touched.\n */\n registerOnTouched(fn: () => void): void {\n this.propagateTouched = fn;\n }\n\n /**\n * Sets the ARIA described-by IDs for accessibility.\n * @param ids - The list of element IDs to associate with this control.\n */\n setDescribedByIds(ids: string[]): void {\n this.describedBy = ids.join(' ');\n }\n\n /**\n * Updates the disabled state when the Angular form layer changes it.\n * @param isDisabled - Whether the control should be disabled.\n */\n setDisabledState(isDisabled: boolean): void {\n this._disabled = isDisabled;\n if (isDisabled && this.focused) {\n this.focused = false;\n this.stateChanges.next();\n }\n if (!SystemUtils.isBrowser()) return;\n const elem = document.getElementById(this.id);\n if (elem) {\n this.renderer.setProperty(elem, 'disabled', isDisabled);\n }\n }\n\n /**\n * Handles a click on the container element, focusing it and marking it as touched.\n */\n onContainerClick(): void {\n if (!this.focused) {\n if (!SystemUtils.isBrowser()) return;\n const elem = document.getElementById(this.id);\n if (elem) {\n elem.focus();\n this.propagateTouched();\n }\n }\n }\n\n /**\n * Selects an option and optionally emits the `selected` output event.\n * @param item - The item to select.\n * @param notify - When `true` (default), emits the `selected` event.\n */\n select(item: NameValueItem<any>, notify: boolean = true): void {\n this.setValue(item, true);\n if (notify) {\n this.selected.emit(item);\n }\n }\n\n /** Clears the current selection and resets the control to an empty state. */\n reset(): void {\n this.setValue(undefined, true);\n }\n}\n","<button mat-stroked-button class=\"menu-selector-button\" [style.border]=\"border() >= 0 ? border() : 'auto'\"\r\n [style.border-radius]=\"borderRadius()\" [style.height]=\"border() <= 0 ? '40px' : 'auto'\"\r\n [style.min-width]=\"width() > 0 ? width()+'px' : (width() === -1 ? '100%' : 'auto')\" [attr.aria-label]=\"label()\"\r\n [matMenuTriggerFor]=\"optionsMenu\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"100\" fxFlexAlign=\"center\">\r\n @if(current()) {\r\n <div style=\"text-align: left;\"\r\n [style.min-width]=\"width() > 0 ? width()+'px' : (width() === -1 ? '100%' : 'auto')\">\r\n @if(labelSelected() || label()) {\r\n <div class=\"x-small \">{{labelSelected() ?? label()}}</div>\r\n <div fxHide.xs class=\"small truncated-1\">{{current()?.shortName ?? current()?.name ?? ''}}</div>\r\n <div fxHide.gt-xs class=\"x-small truncated-1\" style=\"max-width: 120px;\">\r\n <div>{{current()?.shortName ?? current()?.name ?? ''}}</div>\r\n </div>\r\n } @else {\r\n <div fxHide.xs class=\"small truncated\">{{current()?.shortName ?? current()?.name ?? ''}}</div>\r\n <div fxHide.gt-xs class=\"x-small truncated\" style=\"max-width: 120px;\">\r\n <div>{{current()?.shortName ?? current()?.name ?? ''}}</div>\r\n </div>\r\n }\r\n </div>\r\n } @else if(labelSelected() || label()) {\r\n <div class=\"truncated\" style=\"text-align: left;\"\r\n [style.min-width]=\"width() > 0 ? width()+'px' : (width() === -1 ? '100%' : 'auto')\">\r\n {{labelSelected() ?? label()}}</div>\r\n }\r\n </div>\r\n <div fxLayoutAlign=\"end\" fxFlexAlign=\"center\">\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n </div>\r\n </div>\r\n</button>\r\n<mat-menu #optionsMenu=\"matMenu\">\r\n @for (o of options(); track $index) {\r\n <button mat-menu-item (click)=\"select(o)\" [disabled]=\"o.disabled\">\r\n {{o.name}}\r\n @if(o.bag) {\r\n ({{o.bag}})\r\n }\r\n </button>\r\n }\r\n</mat-menu>","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\nimport { FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\n\n\nexport interface ButtonToggleInfo {\n value: boolean;\n toggled: boolean;\n}\n\n@Component({\n selector: 'button-toggle',\n standalone: true,\n imports: [FlexLayoutModule, MatIconModule, MatButtonModule, SafeHtmlPipe],\n templateUrl: './button-toggle.component.html',\n styleUrl: './button-toggle.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ButtonToggleComponent {\n\n /** Emitted each time the button is clicked. Carries the current `value` and the new `toggled` state. */\n readonly changed = output<ButtonToggleInfo>();\n\n /** Current value bound from the parent. Drives label and icon selection. */\n readonly value = input<boolean>(false);\n\n /** Width of the button in pixels. Use `-1` for automatic sizing. */\n readonly width = input<number>(-1);\n\n /** Border thickness override in pixels. Use `-1` to inherit. */\n readonly border = input<number>(-1);\n\n /** Label shown when `value` is `true`. */\n readonly labelOn = input<string | undefined>(undefined);\n\n /** Label shown when `value` is `false`. */\n readonly labelOff = input<string | undefined>(undefined);\n\n /** Material icon name shown when `value` is `true`. */\n readonly iconOn = input<string | undefined>(undefined);\n\n /** Material icon name shown when `value` is `false`. */\n readonly iconOff = input<string | undefined>(undefined);\n\n /** CSS class applied to the button at all breakpoints. */\n readonly cssClass = input<string | undefined>(undefined);\n\n /** CSS class applied to the button on `xs` screens. */\n readonly cssClassSmall = input<string | undefined>(undefined);\n\n /** Resolves the appropriate label for the current value state. */\n protected readonly label = computed(() =>\n this.value() ? this.labelOn() ?? '' : this.labelOff() ?? ''\n );\n\n /** Resolves the appropriate icon name for the current value state. */\n protected readonly icon = computed(() =>\n this.value() ? this.iconOn() ?? '' : this.iconOff() ?? ''\n );\n\n /**\n * Toggles the button state and emits the `changed` event.\n * The emitted `toggled` value is the logical inverse of the current `value`.\n */\n toggle(): void {\n const toggled = !this.value();\n this.changed.emit({ value: this.value(), toggled });\n }\n}\n","<button mat-stroked-button [style.border]=\"border() >= 0 ? border() : 'auto'\"\n [style.height]=\"border() <= 0 ? '40px' : 'auto'\" [style.minWidth.px]=\"width() > 0 ? width() : 'auto'\"\n [style.mxn-width.px]=\"width() > 0 ? width() : 'auto'\" [class]=\"cssClass()\" [attr.aria-label]=\"label()\"\n (click)=\"toggle()\" [class.button-on]=\"value() === true\" [fxClass.xs]=\"cssClassSmall()\">\n <div fxLayout=\"row\" fxLayoutGap=\"8px\" fxLayoutAlign=\"center center\" fxFill>\n @if(icon()) {\n <div fxFlex=\"24px\"><mat-icon style=\"display: block;\">{{icon()}}</mat-icon></div>\n }\n <div [innerHtml]=\"label() | safeHtml\"></div>\n </div>\n</button>","import { afterNextRender, booleanAttribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, DestroyRef, effect, inject, input, Input, OnDestroy, Optional, Renderer2, Self, signal, output } from '@angular/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { FormField, form } from '@angular/forms/signals';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelectModule } from '@angular/material/select';\nimport { NameValueItem, SystemUtils } from '@arsedizioni/ars-utils/core';\nimport { FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\nimport { auditTime, animationFrameScheduler, Subject } from 'rxjs';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ButtonSelectorComponent } from '../button-selector/button-selector.component';\n\n\n\n@Component({\n selector: 'chips-selector',\n standalone: true,\n imports: [FlexLayoutModule, FormField, MatFormFieldModule, MatSelectModule,\n MatChipsModule, MatIconModule, MatButtonModule, MatBadgeModule, MatTooltipModule,\n ButtonSelectorComponent\n ],\n templateUrl: './chips-selector.component.html',\n styleUrl: './chips-selector.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[id]': 'id',\n '[class.floating]': 'shouldLabelFloat',\n '[attr.aria-describedBy]': 'describedBy',\n },\n})\nexport class ChipsSelectorComponent implements OnDestroy, ControlValueAccessor {\n\n /** Emitted when the selection changes. Carries the new array of selected items, or `undefined` when cleared. */\n readonly changed = output<NameValueItem<any>[] | undefined>();\n\n protected readonly containerId = `chips-selector-container--${SystemUtils.generateUUID()}`;\n protected readonly containerWidth = signal(-6);\n\n private focused = false;\n private readonly stateChanges = new Subject<void>();\n private readonly destroyRef = inject(DestroyRef);\n private changesEnabled = false;\n private destroyed = false;\n private widthRetries = 0;\n\n /** Observer that tracks size changes of the container element. */\n private resizeObserver?: ResizeObserver;\n\n /** Debounce bridge for `ResizeObserver` notifications. */\n private readonly resize$ = new Subject<void>();\n\n /** List of available options to display as chips. */\n readonly options = input<NameValueItem<any>[]>([]);\n\n /** Minimum width in pixels when collapsed. Use `-1` for automatic. */\n readonly collapsedWidth = input<number>(-1);\n\n /** Display mode used when the selector is in collapsed state. */\n readonly collapsedDisplayMode = input<'dropdown' | 'button'>('dropdown');\n\n /** Pixel threshold below which the selector collapses. Use `-1` to disable. */\n readonly collapseAt = input<number>(-1);\n\n /** When `true`, `collapseAt` is compared against the container width rather than the window width. */\n readonly collapseAtContainer = input<boolean>(false);\n\n protected readonly collapsed = computed(() => {\n const cw = this.containerWidth();\n const mw = this.collapseAt();\n return this.mode() === 'collapsed' || (mw !== -1 && cw > 0 && mw > 0 && cw < mw);\n });\n\n /** Label shown in the dropdown / above the chip list. */\n readonly label = input<string>('');\n\n /** When `true`, multiple chips can be selected simultaneously. */\n readonly multiple = input<boolean>(false);\n\n /** When `true`, at least one item must remain selected. */\n readonly mustSelect = input<boolean>(false);\n\n /** Layout mode: `'collapsed'` forces dropdown mode, `'dynamic'` collapses based on `collapseAt`. */\n readonly mode = input<'collapsed' | 'dynamic'>('dynamic');\n\n /** When `true`, chips are stacked vertically instead of wrapping horizontally. */\n readonly stacked = input<boolean>(false);\n\n /** Chips below this index receive extra padding to align with other UI elements. */\n readonly padAt = input<number>(0);\n\n /** When `true`, the control is required. */\n readonly required = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Placeholder text shown when no value is selected. */\n readonly placeholder = input<string>('');\n\n private _disabled: boolean = false;\n\n @Input()\n get disabled(): boolean {\n if (this.ngControl && this.ngControl.disabled != null) {\n return this.ngControl.disabled;\n }\n return this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n if (this.focused) {\n this.focused = false;\n this.stateChanges.next();\n }\n }\n\n id = `chips-selector--${SystemUtils.generateUUID()}`;\n describedBy = '';\n\n /** True when the label should float above the field (focused or has a value). */\n get shouldLabelFloat(): boolean {\n return this.focused || !this.empty;\n }\n\n private _value?: NameValueItem<any>[] = [];\n\n set value(value: NameValueItem<any>[] | undefined) {\n this.setValue(value, true);\n }\n\n /**\n * Updates the internal state and selection mirrors.\n * @param value - The new selection array.\n * @param propagate - When `true`, notifies the registered onChange callback.\n */\n private setValue(value: NameValueItem<any>[] | undefined, propagate: boolean): void {\n this._value = value;\n const selection: NameValueItem<any>[] = [];\n if (this._value) {\n this.options().forEach(n => {\n if (this._value?.findIndex((x) => x.value === n.value) !== -1) {\n selection.push(n);\n }\n });\n }\n this.selection.set(selection);\n this.singleSelection.set(selection.length > 0 ? selection[0] : undefined);\n this.cdr.markForCheck();\n if (propagate) {\n this.propagateChange(this._value);\n }\n this.stateChanges.next();\n if (this.changesEnabled) {\n this.changed.emit(this._value);\n }\n }\n\n /** The current value as an array of selected items. */\n get value(): NameValueItem<any>[] | undefined {\n return this._value;\n }\n\n /** True when no item is selected. */\n get empty(): boolean {\n return !this._value || this._value.length === 0;\n }\n\n /** True when the control has validation errors and has been touched. */\n get errorState(): boolean {\n return this.ngControl?.errors != null && (this.ngControl?.touched ?? false);\n }\n\n private propagateChange: (_: any) => void = () => {};\n private propagateTouched: () => void = () => {};\n\n private readonly renderer = inject(Renderer2);\n private readonly cdr = inject(ChangeDetectorRef);\n\n /**\n * Currently selected items. Kept loosely typed on purpose: in multi-select mode the\n * bound controls write an array, while in single-select mode mat-select / the chip\n * listbox write a single item; `getSelection()` normalizes both shapes.\n */\n protected readonly selection = signal<any>([]);\n\n /** The single selected item — used in `button` collapsed-display mode. */\n protected readonly singleSelection = signal<NameValueItem<any> | undefined>(undefined);\n\n /** Root signal form bound to the internal mat-select / chip listbox. */\n protected readonly selectionForm = form(this.selection);\n\n /** Root signal form bound to the internal button-selector in `button` collapsed mode. */\n protected readonly singleForm = form(this.singleSelection);\n\n constructor(@Optional() @Self() public ngControl: NgControl) {\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n\n // Notify state changes whenever required or placeholder inputs change\n effect(() => {\n this.required();\n this.placeholder();\n this.stateChanges.next();\n });\n\n // React to container size changes to keep the collapsed state up to date.\n // `auditTime` on the animation-frame scheduler coalesces ResizeObserver bursts\n // without adding perceptible latency, and defers the layout read out of the\n // observer callback to avoid \"ResizeObserver loop\" warnings.\n this.resize$\n .pipe(takeUntilDestroyed(this.destroyRef), auditTime(0, animationFrameScheduler))\n .subscribe(() => {\n if (this.collapseAt() > 0) {\n this.updateContainerWidth();\n }\n });\n\n afterNextRender(() => {\n if (SystemUtils.isBrowser() && typeof ResizeObserver !== 'undefined') {\n const elem = document.getElementById(this.containerId);\n if (elem) {\n this.resizeObserver = new ResizeObserver(() => this.resize$.next());\n this.resizeObserver.observe(elem);\n }\n }\n\n setTimeout(() => {\n this.updateContainerWidth();\n this.changesEnabled = true;\n }, 250);\n });\n }\n\n ngOnDestroy(): void {\n this.destroyed = true;\n this.resizeObserver?.disconnect();\n this.stateChanges.complete();\n }\n\n /**\n * Measures the container (or window) width and updates the `containerWidth` signal,\n * retrying after 100 ms if the element is not yet laid out.\n */\n private updateContainerWidth(): void {\n if (this.destroyed) return;\n const elem = document.getElementById(this.containerId);\n if (elem && elem.clientWidth > 0) {\n this.widthRetries = 0;\n this.containerWidth.set(\n this.collapseAtContainer()\n ? elem.clientWidth\n : window.innerWidth);\n } else if (this.widthRetries < 50) {\n // Bounded retry (max ~5 s): the old unbounded recursion kept running\n // forever, even after the component was destroyed.\n this.widthRetries++;\n setTimeout(() => this.updateContainerWidth(), 100);\n }\n }\n\n /**\n * Resolves the effective selection array for the current display mode.\n * In single-select collapsed button mode the `singleSelection` item is wrapped in an array.\n * @returns The array of currently selected items.\n */\n private getSelection(): NameValueItem<any>[] {\n const value: NameValueItem<any> | NameValueItem<any>[] | undefined =\n !this.multiple() && this.collapsed() && this.collapsedDisplayMode() === 'button'\n ? this.singleSelection()\n : this.selection();\n if (Array.isArray(value)) {\n return value;\n }\n return value ? [value] : [];\n }\n\n /**\n * Schedules a value update after a short delay, coalescing rapid selection changes\n * before the value is propagated to the outer form.\n */\n updateValue(): void {\n setTimeout(() => {\n this.setValue(this.getSelection(), true);\n }, 250);\n }\n\n /**\n * Returns `true` when the given item can be selected in the current mode.\n * In single-select mode an already-selected item is not re-selectable.\n * @param item - The item to check.\n * @returns True when the item is selectable.\n */\n isSelectable(item: NameValueItem<any>): boolean {\n return this.multiple() || this.getSelection().findIndex(x => x.value === item.value) === -1;\n }\n\n /**\n * Writes a new value to the component (called by the form layer).\n * @param value - The new selection to display.\n */\n writeValue(value: any): void {\n const next = value as NameValueItem<any>[] | undefined;\n if (this.value !== next) {\n // Model -> view write: must NOT propagate back to the form (echo loop)\n this.setValue(next, false);\n }\n }\n\n /**\n * Registers the on-change callback (called by the form layer).\n * @param fn - Callback to invoke whenever the value changes.\n */\n registerOnChange(fn: (_: any) => void): void {\n this.propagateChange = fn;\n }\n\n /**\n * Registers the on-touched callback (called by the form layer).\n * @param fn - Callback to invoke when the control is touched.\n */\n registerOnTouched(fn: () => void): void {\n this.propagateTouched = fn;\n }\n\n /**\n * Sets the ARIA described-by IDs for accessibility.\n * @param ids - The list of element IDs to associate with this control.\n */\n setDescribedByIds(ids: string[]): void {\n this.describedBy = ids.join(' ');\n }\n\n /**\n * Updates the disabled state when the Angular form layer changes it.\n * @param isDisabled - Whether the control should be disabled.\n */\n setDisabledState(isDisabled: boolean): void {\n this._disabled = isDisabled;\n if (isDisabled && this.focused) {\n this.focused = false;\n this.stateChanges.next();\n }\n if (!SystemUtils.isBrowser()) return;\n const elem = document.getElementById(this.id);\n if (elem) {\n this.renderer.setProperty(elem, 'disabled', isDisabled);\n }\n }\n\n /**\n * Handles a click on the container element, focusing it and marking it as touched.\n */\n onContainerClick(): void {\n if (!this.focused) {\n if (!SystemUtils.isBrowser()) return;\n const elem = document.getElementById(this.id);\n if (elem) {\n elem.focus();\n this.propagateTouched();\n }\n }\n }\n\n /**\n * Clears the current selection and stops the event from bubbling.\n * @param e - The originating click event.\n */\n clear(e: Event): void {\n this.setValue([], true);\n e.stopPropagation();\n }\n\n /**\n * Selects a single item, replacing any existing selection.\n * @param item - The item to select. Does nothing when `undefined`.\n */\n select(item?: NameValueItem<any>): void {\n if (item) {\n this.setValue([item], true);\n }\n }\n\n}\n","<div [id]=\"containerId\" class=\"chips-selector\">\n @if(containerWidth() > 0) {\n @if(collapsed()) {\n @if(collapsedDisplayMode() === 'dropdown') {\n <mat-form-field [style.min-width]=\"collapsedWidth() > 0 ? collapsedWidth()+'px' : '100%'\" subscriptSizing=\"dynamic\">\n @if(label()) {\n <mat-label>{{label()}}</mat-label>\n }\n <mat-select [formField]=\"selectionForm\" [multiple]=\"multiple()\" (selectionChange)=\"updateValue()\">\n <mat-select-trigger>\n @if (value && (value.length || 0) > 0) {\n {{value[0].shortName ?? value[0].name}}\n }\n @if (value && (value.length || 0) > 1) {\n <span class=\"collapsed-additional-selection\">\n (+{{(value.length || 0) - 1}} {{value.length === 2 ? 'altro' : 'altri'}})\n </span>\n }\n </mat-select-trigger>\n @for (o of options(); track $index) {\n <mat-option [value]=\"o\" [disabled]=\"o.disabled\">\n {{o.name}}\n @if(o.bag) {\n ({{o.bag}})\n }\n </mat-option>\n }\n </mat-select>\n @if (value && (value.length || 0) > 0) {\n <button matSuffix tabindex=\"-1\" mat-icon-button aria-label=\"Pulisci\" (click)=\"clear($event)\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n } @else {\n <button-selector [label]=\"label()\" [options]=\"options()\" [width]=\"collapsedWidth()\" [formField]=\"singleForm\"\n (selected)=\"updateValue()\"></button-selector>\n\n }\n } @else {\n <mat-chip-listbox [class]=\"stacked() ? 'mat-mdc-chip-set-stacked' : ''\" [multiple]=\"multiple()\"\n [formField]=\"selectionForm\" (change)=\"updateValue()\">\n @for (o of options(); track $index; let i = $index) {\n <mat-chip-option [matBadge]=\"o.bag\" [matTooltip]=\"o.disabled === true ? 'Non disponibile' : (o.bagInfo ?? '')\" [selectable]=\"isSelectable(o)\" [value]=\"o\"\n [disabled]=\"o.disabled\" [class.chip-padded]=\"i < padAt()\">{{o.shortName ??\n o.name}}</mat-chip-option>\n }\n </mat-chip-listbox>\n }\n }\n</div>","import { ChangeDetectionStrategy, Component, computed, effect, ElementRef, inject, input, model, output, signal, viewChild } from '@angular/core';\nimport { FormField, form } from '@angular/forms/signals';\nimport { INode, SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\nimport { MatTree, MatTreeModule } from '@angular/material/tree';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\ninterface TaxonomyMaps {\n parentMap: Map<string, INode>;\n depthMap: Map<string, number>;\n nodeMap: Map<string, INode>;\n}\n\n@Component({\n selector: 'tree-picker',\n templateUrl: './tree-picker.component.html',\n styleUrls: ['./tree-picker.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatTreeModule, MatCheckboxModule, MatIconModule, MatTabsModule, MatChipsModule,\n MatButtonModule, MatTooltipModule, MatFormFieldModule, MatInputModule, FormField, FlexLayoutModule, SafeHtmlPipe]\n})\nexport class TreePickerComponent {\n /** Nested tree data to display. */\n readonly tree = input<INode[]>([]);\n\n /** Currently selected node ids. Supports two-way binding via [(selection)]. */\n readonly selection = model<string[]>([]);\n\n /** When true, checkboxes and chip remove buttons are disabled (mirrors Material convention). */\n readonly disabled = input<boolean>(false);\n\n /** Description to display when no selection is made. */\n readonly descriptionEmpty = input<string>('<span>Nessuna selezione: vengono inclusi <strong>tutti gli elementi</strong>.</span>');\n\n /** Maximum number of tree levels to display (default: 3). */\n readonly maxDepth = input<number>(3);\n\n /**\n * List of node IDs at depth >= maxDepth that unlock selection for themselves\n * and all their descendants, regardless of depth.\n */\n readonly maxDepthOverrides = input<string[]>([]);\n\n /**\n * Number of levels to auto-expand on load.\n * 0 or undefined = only top level visible (no expansion);\n * 1 = expand depth-0 nodes; 2 = expand depth-0 and depth-1 nodes; etc.\n * Must be less than maxDepth.\n */\n readonly minDepth = input<number | undefined>(undefined);\n\n /**\n * Emits the count of visible selected nodes whenever the selection changes.\n * Emits 0 when nothing is selected (meaning all items are implicitly included).\n */\n readonly selectionCount = output<number>();\n\n /** Emits void whenever the user changes the selection (toggle, remove, clear). */\n readonly changed = output<void>();\n\n private readonly _treeRef = viewChild(MatTree<INode>);\n private readonly _elRef = inject(ElementRef);\n\n /**\n * Set of all node IDs selectable via overrides: each listed root and all its descendants.\n * Recomputed whenever the tree data or the override list changes.\n */\n private readonly _overrideSubtreeSet = computed(() => {\n const overrideIds = new Set(this.maxDepthOverrides());\n const maps = this._maps();\n const result = new Set<string>();\n for (const id of overrideIds) {\n const root = maps.nodeMap.get(id);\n if (!root) continue;\n const addSubtree = (n: INode): void => {\n result.add(n.id);\n for (const child of (n.children ?? [])) addSubtree(child as INode);\n };\n addSubtree(root);\n }\n return result;\n });\n\n /** All three maps rebuilt lazily as a single computed whenever taxonomy changes. */\n private readonly _maps = computed<TaxonomyMaps>(() => {\n const parentMap = new Map<string, INode>();\n const depthMap = new Map<string, number>();\n const nodeMap = new Map<string, INode>();\n const build = (nodes: INode[], parent?: INode, depth = 0): void => {\n for (const node of nodes) {\n depthMap.set(node.id, depth);\n nodeMap.set(node.id, node);\n if (parent) parentMap.set(node.id, parent);\n if (node.children?.length) build(node.children as INode[], node, depth + 1);\n }\n };\n build(this.tree());\n return { parentMap, depthMap, nodeMap };\n });\n\n /** O(1) set of selected ids, rebuilt only when selection changes. */\n private readonly _selectedSet = computed(() => new Set(this.selection()));\n\n /** True when at least one node is explicitly selected. */\n protected readonly hasSelection = computed(() => this.selection().length > 0);\n\n /** Count of selected nodes within selectable levels (depth < maxDepth or in overrides), shown in the tab label. */\n protected readonly selectedVisibleCount = computed(() =>\n this.selection().filter(id => {\n const node = this._maps().nodeMap.get(id);\n return node ? this._isSelectableNode(node) : false;\n }).length\n );\n\n readonly treeChildrenAccessor = (node: INode): INode[] => {\n return (node.children ?? []) as INode[];\n };\n\n readonly hasChild = (_: number, node: INode): boolean =>\n !!(node.children?.length);\n\n /** Returns true when the node can be selected: depth < maxDepth or explicitly listed in maxDepthOverrides. */\n protected isSelectable(node: INode): boolean {\n return this._isSelectableNode(node);\n }\n\n private _isSelectableNode(node: INode): boolean {\n const depth = this._maps().depthMap.get(node.id) ?? 0;\n return depth < this.maxDepth() || this._overrideSubtreeSet().has(node.id);\n }\n\n\n /** Current filter text. */\n protected readonly filterText = signal<string>('');\n /** Root signal form bound to the filter text input. */\n protected readonly filterForm = form(this.filterText);\n /** Nodes matching the current filter text, in nodeMap iteration order. */\n protected readonly filteredItems = signal<INode[]>([]);\n /** Index of the currently highlighted filtered node (-1 = none). */\n protected readonly filterIndex = signal(-1);\n /** The currently highlighted filtered node, or null. */\n protected readonly filteredNode = computed<INode | null>(() => {\n const idx = this.filterIndex();\n return idx >= 0 ? (this.filteredItems()[idx] ?? null) : null;\n });\n\n constructor() {\n // Expand nodes up to minDepth whenever new taxonomy data arrives\n effect(() => {\n const maps = this._maps();\n const expandLevels = this.minDepth() ?? 0;\n setTimeout(() => {\n const tree = this._treeRef();\n if (!tree) return;\n tree.collapseAll();\n if (expandLevels <= 0) return;\n maps.depthMap.forEach((depth, id) => {\n if (depth < expandLevels) {\n const node = maps.nodeMap.get(id);\n if (node) tree.expand(node);\n }\n });\n });\n });\n // Emit visible selection count on every selection change\n effect(() => {\n this.selectionCount.emit(this.selectedVisibleCount());\n });\n }\n\n /** Expands all visible nodes in the tree. */\n protected expandAll(): void {\n this._treeRef()?.expandAll();\n }\n\n /** Collapses all nodes in the tree. */\n protected collapseAll(): void {\n this._treeRef()?.collapseAll();\n }\n\n /** Clears the entire selection. */\n protected clearAll(): void {\n this.selection.set([]);\n this.changed.emit();\n }\n\n /** Searches nodes by text and moves to the first match. */\n protected doFilter(): void {\n const text = this.filterText().trim().toLowerCase();\n if (text.length < 3) {\n this.filteredItems.set([]);\n this.filterIndex.set(-1);\n return;\n }\n const matches = Array.from(this._maps().nodeMap.values())\n .filter(n => n.name?.toLowerCase().includes(text));\n this.filteredItems.set(matches);\n const idx = matches.length > 0 ? 0 : -1;\n this.filterIndex.set(idx);\n if (idx >= 0) this._scrollToFiltered(idx, matches);\n }\n\n /** Clears the filter and restores the original tree state. */\n protected clearFilter(): void {\n this.filterText.set('');\n this.filteredItems.set([]);\n this.filterIndex.set(-1);\n }\n\n /** Moves to the next matching node, cycling back to the first. */\n protected nextFiltered(): void {\n const items = this.filteredItems();\n if (!items.length) return;\n const next = (this.filterIndex() + 1) % items.length;\n this.filterIndex.set(next);\n this._scrollToFiltered(next, items);\n }\n\n /** Returns true when the node is the currently highlighted filter match. */\n protected isFilteredNode(node: INode): boolean {\n return this.filteredNode()?.id === node.id;\n }\n\n /** Expands ancestors of the target node and scrolls it into view. */\n private _scrollToFiltered(index: number, items: INode[]): void {\n const node = items[index];\n if (!node) return;\n const tree = this._treeRef();\n if (tree) {\n let parent = this._maps().parentMap.get(node.id);\n while (parent) {\n tree.expand(parent);\n parent = this._maps().parentMap.get(parent.id);\n }\n }\n setTimeout(() => {\n const el: HTMLElement | null = this._elRef.nativeElement.querySelector(`[data-node-id=\"${node.id}\"]`);\n el?.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n });\n }\n\n /**\n * Returns true when the node is in the active selection.\n * @param node - tree node to check\n * @returns true if selected\n */\n protected isSelected(node: INode): boolean {\n return this._selectedSet().has(node.id);\n }\n\n /**\n * Returns true when a subset (but not all) of the node's descendants are selected,\n * producing the indeterminate checkbox state.\n * @param node - tree node to evaluate\n * @returns true if the node is in a partial-selection (indeterminate) state\n */\n protected isIndeterminate(node: INode): boolean {\n if (!node.children?.length) return false;\n const descendants = this._getSelectableDescendants(node);\n const set = this._selectedSet();\n const count = descendants.filter(d => set.has(d.id)).length;\n return count > 0 && count < descendants.length;\n }\n\n /**\n * Toggles the node and all its descendants; then syncs the ancestor chain.\n * @param node - the node that was clicked\n */\n protected toggleNode(node: INode): void {\n this.selection.update(current => {\n const set = new Set(current);\n if (set.has(node.id)) {\n set.delete(node.id);\n } else {\n set.add(node.id);\n }\n this._syncParentsInSet(node, set);\n return Array.from(set);\n });\n this.changed.emit();\n }\n\n /**\n * Deselects the node and all its descendants. Called by the chip remove button.\n * @param node - the node to remove from the selection\n */\n protected removeNode(node: INode): void {\n this.selection.update(current => {\n const set = new Set(current);\n set.delete(node.id);\n this._syncParentsInSet(node, set);\n return Array.from(set);\n });\n this.changed.emit();\n }\n\n /**\n * Returns the INode for the given id, or undefined if not found.\n * @param id - node id to look up\n * @returns the matching INode\n */\n protected nodeById(id: string): INode | undefined {\n return this._maps().nodeMap.get(id);\n }\n\n /**\n * Returns true when the node at the given id is within the visible depth range\n * and should appear in the chip list.\n * @param id - node id to check\n * @returns true if the node depth is less than maxDepth\n */\n protected isChipVisible(id: string): boolean {\n const node = this._maps().nodeMap.get(id);\n return node ? this._isSelectableNode(node) : false;\n }\n\n /**\n * Returns only the selectable descendants of node (depth < maxDepth or in overrides),\n * used for indeterminate state and parent auto-selection logic.\n * @param node - root of the subtree to traverse\n * @returns flat array of selectable descendant INodes\n */\n private _getSelectableDescendants(node: INode): INode[] {\n const result: INode[] = [];\n for (const child of (node.children ?? [])) {\n const c = child as INode;\n if (this._isSelectableNode(c)) result.push(c);\n result.push(...this._getSelectableDescendants(c));\n }\n return result;\n }\n\n /**\n * Walks up the ancestor chain from node, selecting a parent only when all\n * its descendants are in the set, deselecting it otherwise.\n * @param node - starting node for the upward traversal\n * @param set - mutable selection set updated in place\n */\n private _syncParentsInSet(node: INode, set: Set<string>): void {\n let parent = this._maps().parentMap.get(node.id);\n while (parent) {\n const descendants = this._getSelectableDescendants(parent);\n if (descendants.length > 0 && descendants.every(d => set.has(d.id))) {\n set.add(parent.id);\n } else {\n set.delete(parent.id);\n }\n parent = this._maps().parentMap.get(parent.id);\n }\n }\n \n}\n","<mat-tab-group class=\"taxonomy-picker-tabs\" style=\"height:100%\">\n <mat-tab style=\"overflow-x: hidden !important; height: 100%\">\n <ng-template mat-tab-label>\n Seleziona\n <mat-icon\n style=\"font-size:16px;height:16px;width:16px;margin-left:4px;vertical-align:middle;color:var(--mat-sys-primary)\"\n [matTooltip]=\"'Nessuna selezione = tutti gli argomenti inclusi;\\r\\nOgni elemento selezionato include sempre tutti i suoi sottoelementi'\"\n matTooltipPosition=\"above\">\n info\n </mat-icon>\n </ng-template>\n <div fxLayout=\"column\" fxFill style=\"overflow: hidden; height: 100%;\">\n <div fxFlex>\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\" fxFill>\n <div fxFlex fxHide.xs>\n <mat-form-field style=\"width:200px; padding: 8px 0px\" appearance=\"outline\"\n subscriptSizing=\"dynamic\">\n <mat-label>Cerca...</mat-label>\n <input type=\"text\" (keyup)=\"doFilter()\" matInput [formField]=\"filterForm\"\n (keydown.enter)=\"$event.preventDefault(); $event.stopPropagation(); nextFiltered()\"\n (keydown.arrowDown)=\"$event.preventDefault(); $event.stopPropagation(); nextFiltered()\">\n @if (filterText()) {\n <button type=\"button\" type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\n aria-label=\"Clear\" (click)=\"clearFilter()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n </div>\n @if (filteredItems().length > 0) {\n <div fxFlex=\"50px\" fxHide.xs fxLayoutAlign=\"end center\">\n <div class=\"small\">{{filterIndex() + 1}} / {{filteredItems().length}}</div>\n </div>\n <div fxFlex=\"48px\" fxHide.xs fxLayoutAlign=\"end center\">\n <button mat-icon-button (click)=\"nextFiltered()\">\n <mat-icon aria-label=\"Vai al prossimo\"\n matTooltip=\"Vai al prossimo\">arrow_downward</mat-icon>\n </button>\n </div>\n }\n <div fxFlex=\"*\" fxLayoutAlign=\"end center\">\n <button mat-icon-button [matTooltip]=\"'Espandi tutto'\" (click)=\"expandAll()\">\n <mat-icon>unfold_more</mat-icon>\n </button>\n <button mat-icon-button [matTooltip]=\"'Comprimi tutto'\" (click)=\"collapseAll()\">\n <mat-icon>unfold_less</mat-icon>\n </button>\n <button mat-icon-button [matTooltip]=\"'Azzera selezione'\" [disabled]=\"!hasSelection()\"\n (click)=\"clearAll()\">\n <mat-icon>deselect</mat-icon>\n </button>\n </div>\n </div>\n </div>\n <div fxFlex=\"*\" style=\"overflow-y: auto;\">\n <mat-tree [dataSource]=\"tree()\" [childrenAccessor]=\"treeChildrenAccessor\" class=\"tree\">\n <!-- Leaf node -->\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodePadding [matTreeNodePaddingIndent]=\"20\"\n class=\"tree-node\" [class.tree-node-filtered]=\"filteredNode()?.id === node.id\"\n [class.tree-node-no-select]=\"!isSelectable(node)\"\n [attr.data-node-id]=\"node.id\">\n <button mat-icon-button disabled style=\"visibility: hidden\"></button>\n @if (isSelectable(node)) {\n <mat-checkbox [checked]=\"isSelected(node)\" [disabled]=\"disabled()\" (change)=\"toggleNode(node)\">\n <span class=\"small\">{{node.name}}</span>\n </mat-checkbox>\n } @else {\n <div class=\"tree-node-label-only\">\n <span class=\"small\">{{node.name}}</span>\n </div>\n }\n </mat-tree-node>\n <!-- Expandable node with children -->\n <mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\" matTreeNodePadding\n [matTreeNodePaddingIndent]=\"20\" #treeNode=\"matTreeNode\" class=\"tree-node\"\n [class.tree-node-filtered]=\"filteredNode()?.id === node.id\"\n [class.tree-node-no-select]=\"!isSelectable(node)\"\n [attr.data-node-id]=\"node.id\">\n <button mat-icon-button matTreeNodeToggle>\n <mat-icon>{{treeNode.isExpanded ? 'expand_more' : 'chevron_right'}}</mat-icon>\n </button>\n @if (isSelectable(node)) {\n <mat-checkbox [checked]=\"isSelected(node)\" [indeterminate]=\"isIndeterminate(node)\"\n [disabled]=\"disabled()\" (change)=\"toggleNode(node)\">\n <span class=\"small\">{{node.name}}</span>\n </mat-checkbox>\n } @else {\n <div class=\"tree-node-label-only\">\n <span class=\"small\">{{node.name}}</span>\n </div>\n }\n </mat-tree-node>\n </mat-tree>\n </div>\n </div>\n </mat-tab>\n <mat-tab [label]=\"hasSelection() ? 'Selezionati (' + selectedVisibleCount() + ')' : 'Selezionati (tutti)'\"\n style=\"height: 100%;\">\n <div fxLayout=\"column\" fxFill style=\"overflow: hidden; height: 100%;\">\n <div fxFlex>\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"8px\" style=\"padding:12px\">\n @if (!hasSelection()) {\n <mat-icon>info</mat-icon>\n <span [innerHTML]=\"descriptionEmpty() | safeHtml\"></span>\n } @else {\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\n <button mat-button color=\"warn\" style=\"margin-left:auto\" (click)=\"clearAll()\">\n <mat-icon>deselect</mat-icon> Azzera tutto\n </button>\n </div>\n }\n </div>\n </div>\n <div fxFlex=\"*\" style=\"overflow-y: auto; padding-bottom: 12px;\">\n <mat-chip-set>\n @for (id of selection(); track id) {\n @let node = nodeById(id);\n @if (node && isChipVisible(id)) {\n <mat-chip (removed)=\"removeNode(node)\" style=\"max-width: 280px;\" [matTooltip]=\"node.name\">\n {{node.name}}\n @if (!disabled()) {\n <button matChipRemove matTooltip=\"Elimina\"><mat-icon>cancel</mat-icon></button>\n }\n </mat-chip>\n }\n }\n </mat-chip-set>\n </div>\n </div>\n </mat-tab>\n</mat-tab-group>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, inject } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { MatCalendar } from '@angular/material/datepicker';\r\n\r\n/**\r\n * A blank calendar header that hides the month/year navigation controls.\r\n * Used when an inline calendar should render without any navigation UI.\r\n */\r\n@Component({\r\n template: '<div></div>',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class CalendarEmptyHeader<D> {\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly calendar = inject(MatCalendar<D>);\r\n private readonly changeDetector = inject(ChangeDetectorRef);\r\n\r\n constructor() {\r\n // Re-run change detection whenever the calendar's internal state changes\r\n // (e.g. active date, selected date) so the blank header stays in sync.\r\n this.calendar.stateChanges\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(() => this.changeDetector.markForCheck());\r\n }\r\n}\r\n","import { Directive, HostListener, inject } from '@angular/core';\r\nimport { MatDatepickerInput, MatEndDate, MatStartDate } from '@angular/material/datepicker';\r\n\r\n/** Callback Material date inputs expose so their validators can be re-run on demand. */\r\ninterface RevalidatableDateInput {\r\n _validatorOnChange: () => void;\r\n}\r\n\r\n/**\r\n * Works around a MatDatepicker/Signal Forms interop bug.\r\n *\r\n * `MatDatepickerInputBase._onInput()` only notifies its registered validator-change\r\n * callback from the branch it does not take when the parsed date is null. Signal\r\n * Forms recomputes CVA parse errors from that callback or from a model value\r\n * change, and neither happens while the user erases an unparseable date one\r\n * character at a time (the model is already `null`, so the signal write is a\r\n * no-op). The stale `matDatepickerParse` error therefore survives on an empty\r\n * field. Notifying on every keystroke re-runs the datepicker validators.\r\n */\r\n@Directive({\r\n selector: 'input[matDatepicker], input[matStartDate], input[matEndDate]',\r\n})\r\nexport class MatDatepickerParseErrorFixDirective {\r\n private readonly singleDate = inject<MatDatepickerInput<unknown>>(MatDatepickerInput, {\r\n optional: true,\r\n self: true,\r\n });\r\n private readonly startDate = inject<MatStartDate<unknown>>(MatStartDate, {\r\n optional: true,\r\n self: true,\r\n });\r\n private readonly endDate = inject<MatEndDate<unknown>>(MatEndDate, {\r\n optional: true,\r\n self: true,\r\n });\r\n\r\n /**\r\n * Re-runs the datepicker validators after Material has updated its internal\r\n * parse flag.\r\n *\r\n * @returns Nothing.\r\n */\r\n @HostListener('input')\r\n protected onInput(): void {\r\n // Deferred: Material updates `_lastValueValid` in its own `input` host\r\n // listener, and host listener order across directives is not guaranteed.\r\n queueMicrotask(() => this.revalidate());\r\n }\r\n\r\n /**\r\n * Notifies the validator-change callback of this input and, for range parts,\r\n * of the sibling input as well.\r\n *\r\n * @returns Nothing.\r\n */\r\n private revalidate(): void {\r\n const host = this.singleDate ?? this.startDate ?? this.endDate;\r\n if (!host) {\r\n return;\r\n }\r\n (host as unknown as RevalidatableDateInput)._validatorOnChange();\r\n\r\n const rangePart = this.startDate ?? this.endDate;\r\n if (!rangePart) {\r\n return;\r\n }\r\n const rangeInput = rangePart._rangeInput;\r\n const sibling = this.startDate ? rangeInput._endInput : rangeInput._startInput;\r\n (sibling as unknown as RevalidatableDateInput | undefined)?._validatorOnChange();\r\n }\r\n}","/*\n * Public API Surface of @arsedizioni/ars-utils/ui.controls\n */\nexport * from './button-selector/button-selector.component';\nexport * from './button-toggle/button-toggle.component';\nexport * from './chips-selector/chips-selector.component';\nexport * from './tree-picker/tree-picker.component';\nexport * from './calendar-empty-header/calendar-empy-header.component';\nexport * from './date-picker/datepicker-fix.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i4","i2","i3","i5","i1","i7","i8"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"arsedizioni-ars-utils-ui.controls.mjs","sources":["../../../projects/ars-utils/ui.controls/button-selector/button-selector.component.ts","../../../projects/ars-utils/ui.controls/button-selector/button-selector.component.html","../../../projects/ars-utils/ui.controls/button-toggle/button-toggle.component.ts","../../../projects/ars-utils/ui.controls/button-toggle/button-toggle.component.html","../../../projects/ars-utils/ui.controls/chips-selector/chips-selector.component.ts","../../../projects/ars-utils/ui.controls/chips-selector/chips-selector.component.html","../../../projects/ars-utils/ui.controls/public_api.ts","../../../projects/ars-utils/ui.controls/arsedizioni-ars-utils-ui.controls.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, Input, effect, OnDestroy, Optional, Renderer2, Self, inject, input, signal, output } from '@angular/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { NameValueItem, SystemUtils } from '@arsedizioni/ars-utils/core';\nimport { FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\nimport { Subject } from 'rxjs';\n\n\n@Component({\n selector: 'button-selector',\n standalone: true,\n imports: [FlexLayoutModule, MatIconModule, MatButtonModule,\n MatMenuModule],\n templateUrl: './button-selector.component.html',\n styleUrl: './button-selector.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[id]': 'id',\n '[attr.aria-describedBy]': 'describedBy',\n },\n})\nexport class ButtonSelectorComponent implements OnDestroy, ControlValueAccessor {\n\n /** Emitted whenever the selected value changes (including programmatic resets). */\n readonly changed = output<NameValueItem<any> | undefined>();\n\n /** Emitted when the user explicitly picks an item from the menu. */\n readonly selected = output<NameValueItem<any> | undefined>();\n\n private readonly stateChanges = new Subject<void>();\n private focused = false;\n\n private _value: NameValueItem<any> | undefined = undefined;\n\n set value(value: NameValueItem<any> | undefined) {\n this.setValue(value, true);\n }\n\n /**\n * Updates the internal state. Form propagation is skipped for model->view\n * writes (writeValue) to avoid the CVA echo loop, and performed for\n * user/programmatic changes via the `value` setter.\n * @param value - The new value to store and display.\n * @param propagate - When `true`, notifies the registered onChange callback.\n */\n private setValue(value: NameValueItem<any> | undefined, propagate: boolean): void {\n this._value = value;\n if (propagate) {\n this.propagateChange(this._value);\n }\n this.stateChanges.next();\n this.changed.emit(this._value);\n this.current.set(this._value);\n }\n\n /** The current value as the selected item. */\n get value(): NameValueItem<any> | undefined {\n return this._value;\n }\n\n private _disabled: boolean = false;\n\n @Input()\n get disabled(): boolean {\n if (this.ngControl && this.ngControl.disabled != null) {\n return this.ngControl.disabled;\n }\n return this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n if (this.focused) {\n this.focused = false;\n this.stateChanges.next();\n }\n }\n\n private propagateChange: (_: any) => void = () => {};\n private propagateTouched: () => void = () => {};\n\n id = `button-selector--${SystemUtils.generateUUID()}`;\n describedBy = '';\n\n private readonly renderer = inject(Renderer2);\n\n /** Currently selected item, kept in sync with the form control value. */\n protected readonly current = signal<NameValueItem<any> | undefined>(undefined);\n\n /** Width of the trigger button in pixels. Use `-1` for 100 %, `0` for `auto`. */\n readonly width = input<number>(-1);\n\n /** Border thickness override. Use `-1` to inherit. */\n readonly border = input<number>(-1);\n\n /** CSS border-radius of the trigger button. Defaults to a pill shape. */\n readonly borderRadius = input<string>('9999px');\n\n /** Placeholder label shown when nothing is selected. */\n readonly label = input<string | undefined>(undefined);\n\n /** Label shown above the selected value (replaces `label` when an item is selected). */\n readonly labelSelected = input<string | undefined>(undefined);\n\n /** List of selectable options. */\n readonly options = input<NameValueItem<any>[]>([]);\n\n /** When `true`, the first available option is pre-selected on init. */\n readonly autoSelect = input<boolean>(false);\n\n constructor(@Optional() @Self() public ngControl: NgControl) {\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n\n // Pre-select the first option whenever options change and autoSelect is enabled\n effect(() => {\n if (this.autoSelect()) {\n const options = this.options();\n // !== undefined: values like 0 or false are legitimate selections\n if (options.length > 0 && options[0].value !== undefined) {\n this.current.set(options[0]);\n }\n }\n });\n }\n\n ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n\n /**\n * Writes a new value to the component (called by the form layer).\n * @param value - The new value to display.\n */\n writeValue(value: any): void {\n // Model -> view write: must NOT propagate back to the form (echo loop)\n this.setValue(value as NameValueItem<any> | undefined, false);\n }\n\n /**\n * Registers the on-change callback (called by the form layer).\n * @param fn - Callback to invoke whenever the value changes.\n */\n registerOnChange(fn: (_: any) => void): void {\n this.propagateChange = fn;\n }\n\n /**\n * Registers the on-touched callback (called by the form layer).\n * @param fn - Callback to invoke when the control is touched.\n */\n registerOnTouched(fn: () => void): void {\n this.propagateTouched = fn;\n }\n\n /**\n * Sets the ARIA described-by IDs for accessibility.\n * @param ids - The list of element IDs to associate with this control.\n */\n setDescribedByIds(ids: string[]): void {\n this.describedBy = ids.join(' ');\n }\n\n /**\n * Updates the disabled state when the Angular form layer changes it.\n * @param isDisabled - Whether the control should be disabled.\n */\n setDisabledState(isDisabled: boolean): void {\n this._disabled = isDisabled;\n if (isDisabled && this.focused) {\n this.focused = false;\n this.stateChanges.next();\n }\n if (!SystemUtils.isBrowser()) return;\n const elem = document.getElementById(this.id);\n if (elem) {\n this.renderer.setProperty(elem, 'disabled', isDisabled);\n }\n }\n\n /**\n * Handles a click on the container element, focusing it and marking it as touched.\n */\n onContainerClick(): void {\n if (!this.focused) {\n if (!SystemUtils.isBrowser()) return;\n const elem = document.getElementById(this.id);\n if (elem) {\n elem.focus();\n this.propagateTouched();\n }\n }\n }\n\n /**\n * Selects an option and optionally emits the `selected` output event.\n * @param item - The item to select.\n * @param notify - When `true` (default), emits the `selected` event.\n */\n select(item: NameValueItem<any>, notify: boolean = true): void {\n this.setValue(item, true);\n if (notify) {\n this.selected.emit(item);\n }\n }\n\n /** Clears the current selection and resets the control to an empty state. */\n reset(): void {\n this.setValue(undefined, true);\n }\n}\n","<button mat-stroked-button class=\"menu-selector-button\" [style.border]=\"border() >= 0 ? border() : 'auto'\"\r\n [style.border-radius]=\"borderRadius()\" [style.height]=\"border() <= 0 ? '40px' : 'auto'\"\r\n [style.min-width]=\"width() > 0 ? width()+'px' : (width() === -1 ? '100%' : 'auto')\" [attr.aria-label]=\"label()\"\r\n [matMenuTriggerFor]=\"optionsMenu\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"100\" fxFlexAlign=\"center\">\r\n @if(current()) {\r\n <div style=\"text-align: left;\"\r\n [style.min-width]=\"width() > 0 ? width()+'px' : (width() === -1 ? '100%' : 'auto')\">\r\n @if(labelSelected() || label()) {\r\n <div class=\"x-small \">{{labelSelected() ?? label()}}</div>\r\n <div fxHide.xs class=\"small truncated-1\">{{current()?.shortName ?? current()?.name ?? ''}}</div>\r\n <div fxHide.gt-xs class=\"x-small truncated-1\" style=\"max-width: 120px;\">\r\n <div>{{current()?.shortName ?? current()?.name ?? ''}}</div>\r\n </div>\r\n } @else {\r\n <div fxHide.xs class=\"small truncated\">{{current()?.shortName ?? current()?.name ?? ''}}</div>\r\n <div fxHide.gt-xs class=\"x-small truncated\" style=\"max-width: 120px;\">\r\n <div>{{current()?.shortName ?? current()?.name ?? ''}}</div>\r\n </div>\r\n }\r\n </div>\r\n } @else if(labelSelected() || label()) {\r\n <div class=\"truncated\" style=\"text-align: left;\"\r\n [style.min-width]=\"width() > 0 ? width()+'px' : (width() === -1 ? '100%' : 'auto')\">\r\n {{labelSelected() ?? label()}}</div>\r\n }\r\n </div>\r\n <div fxLayoutAlign=\"end\" fxFlexAlign=\"center\">\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n </div>\r\n </div>\r\n</button>\r\n<mat-menu #optionsMenu=\"matMenu\">\r\n @for (o of options(); track $index) {\r\n <button mat-menu-item (click)=\"select(o)\" [disabled]=\"o.disabled\">\r\n {{o.name}}\r\n @if(o.bag) {\r\n ({{o.bag}})\r\n }\r\n </button>\r\n }\r\n</mat-menu>","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\nimport { FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\n\n\nexport interface ButtonToggleInfo {\n value: boolean;\n toggled: boolean;\n}\n\n@Component({\n selector: 'button-toggle',\n standalone: true,\n imports: [FlexLayoutModule, MatIconModule, MatButtonModule, SafeHtmlPipe],\n templateUrl: './button-toggle.component.html',\n styleUrl: './button-toggle.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ButtonToggleComponent {\n\n /** Emitted each time the button is clicked. Carries the current `value` and the new `toggled` state. */\n readonly changed = output<ButtonToggleInfo>();\n\n /** Current value bound from the parent. Drives label and icon selection. */\n readonly value = input<boolean>(false);\n\n /** Width of the button in pixels. Use `-1` for automatic sizing. */\n readonly width = input<number>(-1);\n\n /** Border thickness override in pixels. Use `-1` to inherit. */\n readonly border = input<number>(-1);\n\n /** Label shown when `value` is `true`. */\n readonly labelOn = input<string | undefined>(undefined);\n\n /** Label shown when `value` is `false`. */\n readonly labelOff = input<string | undefined>(undefined);\n\n /** Material icon name shown when `value` is `true`. */\n readonly iconOn = input<string | undefined>(undefined);\n\n /** Material icon name shown when `value` is `false`. */\n readonly iconOff = input<string | undefined>(undefined);\n\n /** CSS class applied to the button at all breakpoints. */\n readonly cssClass = input<string | undefined>(undefined);\n\n /** CSS class applied to the button on `xs` screens. */\n readonly cssClassSmall = input<string | undefined>(undefined);\n\n /** Resolves the appropriate label for the current value state. */\n protected readonly label = computed(() =>\n this.value() ? this.labelOn() ?? '' : this.labelOff() ?? ''\n );\n\n /** Resolves the appropriate icon name for the current value state. */\n protected readonly icon = computed(() =>\n this.value() ? this.iconOn() ?? '' : this.iconOff() ?? ''\n );\n\n /**\n * Toggles the button state and emits the `changed` event.\n * The emitted `toggled` value is the logical inverse of the current `value`.\n */\n toggle(): void {\n const toggled = !this.value();\n this.changed.emit({ value: this.value(), toggled });\n }\n}\n","<button mat-stroked-button [style.border]=\"border() >= 0 ? border() : 'auto'\"\n [style.height]=\"border() <= 0 ? '40px' : 'auto'\" [style.minWidth.px]=\"width() > 0 ? width() : 'auto'\"\n [style.mxn-width.px]=\"width() > 0 ? width() : 'auto'\" [class]=\"cssClass()\" [attr.aria-label]=\"label()\"\n (click)=\"toggle()\" [class.button-on]=\"value() === true\" [fxClass.xs]=\"cssClassSmall()\">\n <div fxLayout=\"row\" fxLayoutGap=\"8px\" fxLayoutAlign=\"center center\" fxFill>\n @if(icon()) {\n <div fxFlex=\"24px\"><mat-icon style=\"display: block;\">{{icon()}}</mat-icon></div>\n }\n <div [innerHtml]=\"label() | safeHtml\"></div>\n </div>\n</button>","import { afterNextRender, booleanAttribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, DestroyRef, effect, inject, input, Input, OnDestroy, Optional, Renderer2, Self, signal, output } from '@angular/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { FormField, form } from '@angular/forms/signals';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelectModule } from '@angular/material/select';\nimport { NameValueItem, SystemUtils } from '@arsedizioni/ars-utils/core';\nimport { FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\nimport { auditTime, animationFrameScheduler, Subject } from 'rxjs';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ButtonSelectorComponent } from '../button-selector/button-selector.component';\n\n\n\n@Component({\n selector: 'chips-selector',\n standalone: true,\n imports: [FlexLayoutModule, FormField, MatFormFieldModule, MatSelectModule,\n MatChipsModule, MatIconModule, MatButtonModule, MatBadgeModule, MatTooltipModule,\n ButtonSelectorComponent\n ],\n templateUrl: './chips-selector.component.html',\n styleUrl: './chips-selector.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[id]': 'id',\n '[class.floating]': 'shouldLabelFloat',\n '[attr.aria-describedBy]': 'describedBy',\n },\n})\nexport class ChipsSelectorComponent implements OnDestroy, ControlValueAccessor {\n\n /** Emitted when the selection changes. Carries the new array of selected items, or `undefined` when cleared. */\n readonly changed = output<NameValueItem<any>[] | undefined>();\n\n protected readonly containerId = `chips-selector-container--${SystemUtils.generateUUID()}`;\n protected readonly containerWidth = signal(-6);\n\n private focused = false;\n private readonly stateChanges = new Subject<void>();\n private readonly destroyRef = inject(DestroyRef);\n private changesEnabled = false;\n private destroyed = false;\n private widthRetries = 0;\n\n /** Observer that tracks size changes of the container element. */\n private resizeObserver?: ResizeObserver;\n\n /** Debounce bridge for `ResizeObserver` notifications. */\n private readonly resize$ = new Subject<void>();\n\n /** List of available options to display as chips. */\n readonly options = input<NameValueItem<any>[]>([]);\n\n /** Minimum width in pixels when collapsed. Use `-1` for automatic. */\n readonly collapsedWidth = input<number>(-1);\n\n /** Display mode used when the selector is in collapsed state. */\n readonly collapsedDisplayMode = input<'dropdown' | 'button'>('dropdown');\n\n /** Pixel threshold below which the selector collapses. Use `-1` to disable. */\n readonly collapseAt = input<number>(-1);\n\n /** When `true`, `collapseAt` is compared against the container width rather than the window width. */\n readonly collapseAtContainer = input<boolean>(false);\n\n protected readonly collapsed = computed(() => {\n const cw = this.containerWidth();\n const mw = this.collapseAt();\n return this.mode() === 'collapsed' || (mw !== -1 && cw > 0 && mw > 0 && cw < mw);\n });\n\n /** Label shown in the dropdown / above the chip list. */\n readonly label = input<string>('');\n\n /** When `true`, multiple chips can be selected simultaneously. */\n readonly multiple = input<boolean>(false);\n\n /** When `true`, at least one item must remain selected. */\n readonly mustSelect = input<boolean>(false);\n\n /** Layout mode: `'collapsed'` forces dropdown mode, `'dynamic'` collapses based on `collapseAt`. */\n readonly mode = input<'collapsed' | 'dynamic'>('dynamic');\n\n /** When `true`, chips are stacked vertically instead of wrapping horizontally. */\n readonly stacked = input<boolean>(false);\n\n /** Chips below this index receive extra padding to align with other UI elements. */\n readonly padAt = input<number>(0);\n\n /** When `true`, the control is required. */\n readonly required = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Placeholder text shown when no value is selected. */\n readonly placeholder = input<string>('');\n\n private _disabled: boolean = false;\n\n @Input()\n get disabled(): boolean {\n if (this.ngControl && this.ngControl.disabled != null) {\n return this.ngControl.disabled;\n }\n return this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n if (this.focused) {\n this.focused = false;\n this.stateChanges.next();\n }\n }\n\n id = `chips-selector--${SystemUtils.generateUUID()}`;\n describedBy = '';\n\n /** True when the label should float above the field (focused or has a value). */\n get shouldLabelFloat(): boolean {\n return this.focused || !this.empty;\n }\n\n private _value?: NameValueItem<any>[] = [];\n\n set value(value: NameValueItem<any>[] | undefined) {\n this.setValue(value, true);\n }\n\n /**\n * Updates the internal state and selection mirrors.\n * @param value - The new selection array.\n * @param propagate - When `true`, notifies the registered onChange callback.\n */\n private setValue(value: NameValueItem<any>[] | undefined, propagate: boolean): void {\n this._value = value;\n const selection: NameValueItem<any>[] = [];\n if (this._value) {\n this.options().forEach(n => {\n if (this._value?.findIndex((x) => x.value === n.value) !== -1) {\n selection.push(n);\n }\n });\n }\n this.selection.set(selection);\n this.singleSelection.set(selection.length > 0 ? selection[0] : undefined);\n this.cdr.markForCheck();\n if (propagate) {\n this.propagateChange(this._value);\n }\n this.stateChanges.next();\n if (this.changesEnabled) {\n this.changed.emit(this._value);\n }\n }\n\n /** The current value as an array of selected items. */\n get value(): NameValueItem<any>[] | undefined {\n return this._value;\n }\n\n /** True when no item is selected. */\n get empty(): boolean {\n return !this._value || this._value.length === 0;\n }\n\n /** True when the control has validation errors and has been touched. */\n get errorState(): boolean {\n return this.ngControl?.errors != null && (this.ngControl?.touched ?? false);\n }\n\n private propagateChange: (_: any) => void = () => {};\n private propagateTouched: () => void = () => {};\n\n private readonly renderer = inject(Renderer2);\n private readonly cdr = inject(ChangeDetectorRef);\n\n /**\n * Currently selected items. Kept loosely typed on purpose: in multi-select mode the\n * bound controls write an array, while in single-select mode mat-select / the chip\n * listbox write a single item; `getSelection()` normalizes both shapes.\n */\n protected readonly selection = signal<any>([]);\n\n /** The single selected item — used in `button` collapsed-display mode. */\n protected readonly singleSelection = signal<NameValueItem<any> | undefined>(undefined);\n\n /** Root signal form bound to the internal mat-select / chip listbox. */\n protected readonly selectionForm = form(this.selection);\n\n /** Root signal form bound to the internal button-selector in `button` collapsed mode. */\n protected readonly singleForm = form(this.singleSelection);\n\n constructor(@Optional() @Self() public ngControl: NgControl) {\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n\n // Notify state changes whenever required or placeholder inputs change\n effect(() => {\n this.required();\n this.placeholder();\n this.stateChanges.next();\n });\n\n // React to container size changes to keep the collapsed state up to date.\n // `auditTime` on the animation-frame scheduler coalesces ResizeObserver bursts\n // without adding perceptible latency, and defers the layout read out of the\n // observer callback to avoid \"ResizeObserver loop\" warnings.\n this.resize$\n .pipe(takeUntilDestroyed(this.destroyRef), auditTime(0, animationFrameScheduler))\n .subscribe(() => {\n if (this.collapseAt() > 0) {\n this.updateContainerWidth();\n }\n });\n\n afterNextRender(() => {\n if (SystemUtils.isBrowser() && typeof ResizeObserver !== 'undefined') {\n const elem = document.getElementById(this.containerId);\n if (elem) {\n this.resizeObserver = new ResizeObserver(() => this.resize$.next());\n this.resizeObserver.observe(elem);\n }\n }\n\n setTimeout(() => {\n this.updateContainerWidth();\n this.changesEnabled = true;\n }, 250);\n });\n }\n\n ngOnDestroy(): void {\n this.destroyed = true;\n this.resizeObserver?.disconnect();\n this.stateChanges.complete();\n }\n\n /**\n * Measures the container (or window) width and updates the `containerWidth` signal,\n * retrying after 100 ms if the element is not yet laid out.\n */\n private updateContainerWidth(): void {\n if (this.destroyed) return;\n const elem = document.getElementById(this.containerId);\n if (elem && elem.clientWidth > 0) {\n this.widthRetries = 0;\n this.containerWidth.set(\n this.collapseAtContainer()\n ? elem.clientWidth\n : window.innerWidth);\n } else if (this.widthRetries < 50) {\n // Bounded retry (max ~5 s): the old unbounded recursion kept running\n // forever, even after the component was destroyed.\n this.widthRetries++;\n setTimeout(() => this.updateContainerWidth(), 100);\n }\n }\n\n /**\n * Resolves the effective selection array for the current display mode.\n * In single-select collapsed button mode the `singleSelection` item is wrapped in an array.\n * @returns The array of currently selected items.\n */\n private getSelection(): NameValueItem<any>[] {\n const value: NameValueItem<any> | NameValueItem<any>[] | undefined =\n !this.multiple() && this.collapsed() && this.collapsedDisplayMode() === 'button'\n ? this.singleSelection()\n : this.selection();\n if (Array.isArray(value)) {\n return value;\n }\n return value ? [value] : [];\n }\n\n /**\n * Schedules a value update after a short delay, coalescing rapid selection changes\n * before the value is propagated to the outer form.\n */\n updateValue(): void {\n setTimeout(() => {\n this.setValue(this.getSelection(), true);\n }, 250);\n }\n\n /**\n * Returns `true` when the given item can be selected in the current mode.\n * In single-select mode an already-selected item is not re-selectable.\n * @param item - The item to check.\n * @returns True when the item is selectable.\n */\n isSelectable(item: NameValueItem<any>): boolean {\n return this.multiple() || this.getSelection().findIndex(x => x.value === item.value) === -1;\n }\n\n /**\n * Writes a new value to the component (called by the form layer).\n * @param value - The new selection to display.\n */\n writeValue(value: any): void {\n const next = value as NameValueItem<any>[] | undefined;\n if (this.value !== next) {\n // Model -> view write: must NOT propagate back to the form (echo loop)\n this.setValue(next, false);\n }\n }\n\n /**\n * Registers the on-change callback (called by the form layer).\n * @param fn - Callback to invoke whenever the value changes.\n */\n registerOnChange(fn: (_: any) => void): void {\n this.propagateChange = fn;\n }\n\n /**\n * Registers the on-touched callback (called by the form layer).\n * @param fn - Callback to invoke when the control is touched.\n */\n registerOnTouched(fn: () => void): void {\n this.propagateTouched = fn;\n }\n\n /**\n * Sets the ARIA described-by IDs for accessibility.\n * @param ids - The list of element IDs to associate with this control.\n */\n setDescribedByIds(ids: string[]): void {\n this.describedBy = ids.join(' ');\n }\n\n /**\n * Updates the disabled state when the Angular form layer changes it.\n * @param isDisabled - Whether the control should be disabled.\n */\n setDisabledState(isDisabled: boolean): void {\n this._disabled = isDisabled;\n if (isDisabled && this.focused) {\n this.focused = false;\n this.stateChanges.next();\n }\n if (!SystemUtils.isBrowser()) return;\n const elem = document.getElementById(this.id);\n if (elem) {\n this.renderer.setProperty(elem, 'disabled', isDisabled);\n }\n }\n\n /**\n * Handles a click on the container element, focusing it and marking it as touched.\n */\n onContainerClick(): void {\n if (!this.focused) {\n if (!SystemUtils.isBrowser()) return;\n const elem = document.getElementById(this.id);\n if (elem) {\n elem.focus();\n this.propagateTouched();\n }\n }\n }\n\n /**\n * Clears the current selection and stops the event from bubbling.\n * @param e - The originating click event.\n */\n clear(e: Event): void {\n this.setValue([], true);\n e.stopPropagation();\n }\n\n /**\n * Selects a single item, replacing any existing selection.\n * @param item - The item to select. Does nothing when `undefined`.\n */\n select(item?: NameValueItem<any>): void {\n if (item) {\n this.setValue([item], true);\n }\n }\n\n}\n","<div [id]=\"containerId\" class=\"chips-selector\">\n @if(containerWidth() > 0) {\n @if(collapsed()) {\n @if(collapsedDisplayMode() === 'dropdown') {\n <mat-form-field [style.min-width]=\"collapsedWidth() > 0 ? collapsedWidth()+'px' : '100%'\" subscriptSizing=\"dynamic\">\n @if(label()) {\n <mat-label>{{label()}}</mat-label>\n }\n <mat-select [formField]=\"selectionForm\" [multiple]=\"multiple()\" (selectionChange)=\"updateValue()\">\n <mat-select-trigger>\n @if (value && (value.length || 0) > 0) {\n {{value[0].shortName ?? value[0].name}}\n }\n @if (value && (value.length || 0) > 1) {\n <span class=\"collapsed-additional-selection\">\n (+{{(value.length || 0) - 1}} {{value.length === 2 ? 'altro' : 'altri'}})\n </span>\n }\n </mat-select-trigger>\n @for (o of options(); track $index) {\n <mat-option [value]=\"o\" [disabled]=\"o.disabled\">\n {{o.name}}\n @if(o.bag) {\n ({{o.bag}})\n }\n </mat-option>\n }\n </mat-select>\n @if (value && (value.length || 0) > 0) {\n <button matSuffix tabindex=\"-1\" mat-icon-button aria-label=\"Pulisci\" (click)=\"clear($event)\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n } @else {\n <button-selector [label]=\"label()\" [options]=\"options()\" [width]=\"collapsedWidth()\" [formField]=\"singleForm\"\n (selected)=\"updateValue()\"></button-selector>\n\n }\n } @else {\n <mat-chip-listbox [class]=\"stacked() ? 'mat-mdc-chip-set-stacked' : ''\" [multiple]=\"multiple()\"\n [formField]=\"selectionForm\" (change)=\"updateValue()\">\n @for (o of options(); track $index; let i = $index) {\n <mat-chip-option [matBadge]=\"o.bag\" [matTooltip]=\"o.disabled === true ? 'Non disponibile' : (o.bagInfo ?? '')\" [selectable]=\"isSelectable(o)\" [value]=\"o\"\n [disabled]=\"o.disabled\" [class.chip-padded]=\"i < padAt()\">{{o.shortName ??\n o.name}}</mat-chip-option>\n }\n </mat-chip-listbox>\n }\n }\n</div>","/*\n * Public API Surface of @arsedizioni/ars-utils/ui.controls\n *\n * Small form controls sharing the same Material base (button, icon, form-field). The datepicker\n * pieces live in `ui.controls.date` and the tree picker in `ui.controls.tree`, so that a chunk\n * needing one of those does not link this file, and vice versa.\n */\nexport * from './button-selector/button-selector.component';\nexport * from './button-toggle/button-toggle.component';\nexport * from './chips-selector/chips-selector.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2","i3","i4","i5"],"mappings":"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"}
|