@arsedizioni/ars-utils 22.6.86 → 22.6.88

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +3158 -3344
  2. package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs.map +1 -1
  3. package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +7616 -4772
  4. package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
  5. package/fesm2022/arsedizioni-ars-utils-core.date.mjs +321 -702
  6. package/fesm2022/arsedizioni-ars-utils-core.date.mjs.map +1 -1
  7. package/fesm2022/arsedizioni-ars-utils-core.markdown.mjs +445 -590
  8. package/fesm2022/arsedizioni-ars-utils-core.markdown.mjs.map +1 -1
  9. package/fesm2022/arsedizioni-ars-utils-core.mjs +1735 -2370
  10. package/fesm2022/arsedizioni-ars-utils-core.mjs.map +1 -1
  11. package/fesm2022/arsedizioni-ars-utils-core.validators.mjs +1280 -1470
  12. package/fesm2022/arsedizioni-ars-utils-core.validators.mjs.map +1 -1
  13. package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs +1097 -1528
  14. package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs.map +1 -1
  15. package/fesm2022/arsedizioni-ars-utils-support.common.mjs +198 -294
  16. package/fesm2022/arsedizioni-ars-utils-support.common.mjs.map +1 -1
  17. package/fesm2022/arsedizioni-ars-utils-ui.controls.date.mjs +115 -117
  18. package/fesm2022/arsedizioni-ars-utils-ui.controls.date.mjs.map +1 -1
  19. package/fesm2022/arsedizioni-ars-utils-ui.controls.mjs +1607 -613
  20. package/fesm2022/arsedizioni-ars-utils-ui.controls.mjs.map +1 -1
  21. package/fesm2022/arsedizioni-ars-utils-ui.controls.tree.mjs +840 -367
  22. package/fesm2022/arsedizioni-ars-utils-ui.controls.tree.mjs.map +1 -1
  23. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.auth.mjs +1634 -651
  24. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.auth.mjs.map +1 -1
  25. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.mjs +1255 -792
  26. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.mjs.map +1 -1
  27. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs +1410 -357
  28. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs.map +1 -1
  29. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.select.mjs +2401 -944
  30. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.select.mjs.map +1 -1
  31. package/fesm2022/arsedizioni-ars-utils-ui.files.mjs +1553 -741
  32. package/fesm2022/arsedizioni-ars-utils-ui.files.mjs.map +1 -1
  33. package/fesm2022/arsedizioni-ars-utils-ui.filters.mjs +901 -430
  34. package/fesm2022/arsedizioni-ars-utils-ui.filters.mjs.map +1 -1
  35. package/fesm2022/arsedizioni-ars-utils-ui.help.mjs +737 -530
  36. package/fesm2022/arsedizioni-ars-utils-ui.help.mjs.map +1 -1
  37. package/fesm2022/arsedizioni-ars-utils-ui.mjs +6638 -1755
  38. package/fesm2022/arsedizioni-ars-utils-ui.mjs.map +1 -1
  39. package/fesm2022/arsedizioni-ars-utils-ui.navigation.mjs +1479 -1207
  40. package/fesm2022/arsedizioni-ars-utils-ui.navigation.mjs.map +1 -1
  41. package/fesm2022/arsedizioni-ars-utils-ui.notifications.mjs +1003 -270
  42. package/fesm2022/arsedizioni-ars-utils-ui.notifications.mjs.map +1 -1
  43. package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs +497 -278
  44. package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs.map +1 -1
  45. package/fesm2022/arsedizioni-ars-utils-ui.paginator.mjs +48 -52
  46. package/fesm2022/arsedizioni-ars-utils-ui.paginator.mjs.map +1 -1
  47. package/fesm2022/arsedizioni-ars-utils-ui.shell.mjs +464 -704
  48. package/fesm2022/arsedizioni-ars-utils-ui.shell.mjs.map +1 -1
  49. package/fesm2022/arsedizioni-ars-utils-ui.tinymce.mjs +724 -657
  50. package/fesm2022/arsedizioni-ars-utils-ui.tinymce.mjs.map +1 -1
  51. package/fesm2022/arsedizioni-ars-utils.mjs +3 -19
  52. package/fesm2022/arsedizioni-ars-utils.mjs.map +1 -1
  53. package/package.json +1 -1
  54. package/types/arsedizioni-ars-utils-clipper.common.d.ts +1151 -1163
  55. package/types/arsedizioni-ars-utils-clipper.ui.d.ts +1588 -1426
  56. package/types/arsedizioni-ars-utils-core.d.ts +1169 -1172
  57. package/types/arsedizioni-ars-utils-core.date.d.ts +204 -208
  58. package/types/arsedizioni-ars-utils-core.markdown.d.ts +128 -126
  59. package/types/arsedizioni-ars-utils-core.validators.d.ts +270 -236
  60. package/types/arsedizioni-ars-utils-evolution.common.d.ts +1054 -1067
  61. package/types/arsedizioni-ars-utils-support.common.d.ts +225 -234
  62. package/types/arsedizioni-ars-utils-ui.controls.d.ts +440 -278
  63. package/types/arsedizioni-ars-utils-ui.controls.date.d.ts +24 -28
  64. package/types/arsedizioni-ars-utils-ui.controls.tree.d.ts +172 -136
  65. package/types/arsedizioni-ars-utils-ui.d.ts +2035 -821
  66. package/types/arsedizioni-ars-utils-ui.dialogs.auth.d.ts +327 -322
  67. package/types/arsedizioni-ars-utils-ui.dialogs.d.ts +343 -347
  68. package/types/arsedizioni-ars-utils-ui.dialogs.prompt.d.ts +167 -167
  69. package/types/arsedizioni-ars-utils-ui.dialogs.select.d.ts +373 -367
  70. package/types/arsedizioni-ars-utils-ui.files.d.ts +335 -283
  71. package/types/arsedizioni-ars-utils-ui.filters.d.ts +232 -160
  72. package/types/arsedizioni-ars-utils-ui.help.d.ts +204 -211
  73. package/types/arsedizioni-ars-utils-ui.navigation.d.ts +811 -646
  74. package/types/arsedizioni-ars-utils-ui.notifications.d.ts +74 -78
  75. package/types/arsedizioni-ars-utils-ui.oauth.d.ts +102 -62
  76. package/types/arsedizioni-ars-utils-ui.paginator.d.ts +19 -22
  77. package/types/arsedizioni-ars-utils-ui.shell.d.ts +376 -382
  78. package/types/arsedizioni-ars-utils-ui.tinymce.d.ts +244 -231
  79. package/types/arsedizioni-ars-utils.d.ts +1 -3
@@ -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/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 &nbsp; ({{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":";;;;;;;;;;;;;;;;;;;;;;;;;;;MAwBa,uBAAuB,CAAA;IAalC,IAAI,KAAK,CAAC,KAAqC,EAAA;AAC7C,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;IAC5B;AAEA;;;;;;AAMG;IACK,QAAQ,CAAC,KAAqC,EAAE,SAAkB,EAAA;AACxE,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACnB,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;QACnC;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;QACxB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;IAC/B;;AAGA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;AAIA,IAAA,IACI,QAAQ,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,IAAI,EAAE;AACrD,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ;QAChC;QACA,OAAO,IAAI,CAAC,SAAS;IACvB;IACA,IAAI,QAAQ,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC;AAC7C,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;QAC1B;IACF;AAkCA,IAAA,WAAA,CAAuC,SAAoB,EAAA;QAApB,IAAA,CAAA,SAAS,GAAT,SAAS;;QArFvC,IAAA,CAAA,OAAO,GAAG,MAAM,EAAkC;;QAGlD,IAAA,CAAA,QAAQ,GAAG,MAAM,EAAkC;AAE3C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAQ;QAC3C,IAAA,CAAA,OAAO,GAAG,KAAK;QAEf,IAAA,CAAA,MAAM,GAAmC,SAAS;QA4BlD,IAAA,CAAA,SAAS,GAAY,KAAK;AAiB1B,QAAA,IAAA,CAAA,eAAe,GAAqB,MAAK,EAAE,CAAC;AAC5C,QAAA,IAAA,CAAA,gBAAgB,GAAe,MAAK,EAAE,CAAC;AAE/C,QAAA,IAAA,CAAA,EAAE,GAAG,CAAA,iBAAA,EAAoB,WAAW,CAAC,YAAY,EAAE,EAAE;QACrD,IAAA,CAAA,WAAW,GAAG,EAAE;AAEC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;;QAG1B,IAAA,CAAA,OAAO,GAAG,MAAM,CAAiC,SAAS;oFAAC;;AAGrE,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAS,CAAC,CAAC;kFAAC;;AAGzB,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAS,CAAC,CAAC;mFAAC;;QAG1B,IAAA,CAAA,YAAY,GAAG,KAAK,CAAS,QAAQ;yFAAC;;QAGtC,IAAA,CAAA,KAAK,GAAG,KAAK,CAAqB,SAAS;kFAAC;;QAG5C,IAAA,CAAA,aAAa,GAAG,KAAK,CAAqB,SAAS;0FAAC;;QAGpD,IAAA,CAAA,OAAO,GAAG,KAAK,CAAuB,EAAE;oFAAC;;QAGzC,IAAA,CAAA,UAAU,GAAG,KAAK,CAAU,KAAK;uFAAC;AAGzC,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;AAC1B,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI;QACrC;;QAGA,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AACrB,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;;AAE9B,gBAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE;oBACxD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC9B;YACF;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;IAC9B;AAEA;;;AAGG;AACH,IAAA,UAAU,CAAC,KAAU,EAAA;;AAEnB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAuC,EAAE,KAAK,CAAC;IAC/D;AAEA;;;AAGG;AACH,IAAA,gBAAgB,CAAC,EAAoB,EAAA;AACnC,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;IAC3B;AAEA;;;AAGG;AACH,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;IAC5B;AAEA;;;AAGG;AACH,IAAA,iBAAiB,CAAC,GAAa,EAAA;QAC7B,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;IAClC;AAEA;;;AAGG;AACH,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU;AAC3B,QAAA,IAAI,UAAU,IAAI,IAAI,CAAC,OAAO,EAAE;AAC9B,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;QAC1B;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE;YAAE;QAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC;QACzD;IACF;AAEA;;AAEG;IACH,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE;gBAAE;YAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,KAAK,EAAE;gBACZ,IAAI,CAAC,gBAAgB,EAAE;YACzB;QACF;IACF;AAEA;;;;AAIG;AACH,IAAA,MAAM,CAAC,IAAwB,EAAE,MAAA,GAAkB,IAAI,EAAA;AACrD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;QACzB,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B;IACF;;IAGA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IAChC;8GA5LW,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,IAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,IAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxBpC,mvEA0CW,EAAA,MAAA,EAAA,CAAA,shBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED5BC,gBAAgB,0tJAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACxD,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FASJ,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAbnC,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,OAAA,EACP,CAAC,gBAAgB,EAAE,aAAa,EAAE,eAAe;AACxD,wBAAA,aAAa,CAAC,EAAA,eAAA,EAGC,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,MAAM,EAAE,IAAI;AACZ,wBAAA,yBAAyB,EAAE,aAAa;AACzC,qBAAA,EAAA,QAAA,EAAA,mvEAAA,EAAA,MAAA,EAAA,CAAA,shBAAA,CAAA,EAAA;;0BA0FY;;0BAAY;;sBA/CxB;;;ME7CU,qBAAqB,CAAA;AARlC,IAAA,WAAA,GAAA;;QAWW,IAAA,CAAA,OAAO,GAAG,MAAM,EAAoB;;QAGpC,IAAA,CAAA,KAAK,GAAG,KAAK,CAAU,KAAK;kFAAC;;AAG7B,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAS,CAAC,CAAC;kFAAC;;AAGzB,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAS,CAAC,CAAC;mFAAC;;QAG1B,IAAA,CAAA,OAAO,GAAG,KAAK,CAAqB,SAAS;oFAAC;;QAG9C,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAqB,SAAS;qFAAC;;QAG/C,IAAA,CAAA,MAAM,GAAG,KAAK,CAAqB,SAAS;mFAAC;;QAG7C,IAAA,CAAA,OAAO,GAAG,KAAK,CAAqB,SAAS;oFAAC;;QAG9C,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAqB,SAAS;qFAAC;;QAG/C,IAAA,CAAA,aAAa,GAAG,KAAK,CAAqB,SAAS;0FAAC;;QAG1C,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAClC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE;kFAC5D;;QAGkB,IAAA,CAAA,IAAI,GAAG,QAAQ,CAAC,MACjC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE;iFAC1D;AAUF,IAAA;AARC;;;AAGG;IACH,MAAM,GAAA;AACJ,QAAA,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE;AAC7B,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC;IACrD;8GAjDW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpBlC,2rBAUS,EAAA,MAAA,EAAA,CAAA,6KAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDKG,gBAAgB,wpHAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,YAAY,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAK7D,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBARjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,UAAA,EACb,IAAI,EAAA,OAAA,EACP,CAAC,gBAAgB,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,CAAC,EAAA,eAAA,EAGxD,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,2rBAAA,EAAA,MAAA,EAAA,CAAA,6KAAA,CAAA,EAAA;;;MEiBpC,sBAAsB,CAAA;AAoEjC,IAAA,IACI,QAAQ,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,IAAI,EAAE;AACrD,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ;QAChC;QACA,OAAO,IAAI,CAAC,SAAS;IACvB;IACA,IAAI,QAAQ,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC;AAC7C,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;QAC1B;IACF;;AAMA,IAAA,IAAI,gBAAgB,GAAA;QAClB,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK;IACpC;IAIA,IAAI,KAAK,CAAC,KAAuC,EAAA;AAC/C,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;IAC5B;AAEA;;;;AAIG;IACK,QAAQ,CAAC,KAAuC,EAAE,SAAkB,EAAA;AAC1E,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACnB,MAAM,SAAS,GAAyB,EAAE;AAC1C,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,IAAG;gBACzB,IAAI,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;AAC7D,oBAAA,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;gBACnB;AACF,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;QAC7B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;AACzE,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACvB,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;QACnC;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AACxB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAChC;IACF;;AAGA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;;AAGA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;IACjD;;AAGA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,IAAI,KAAK,IAAI,CAAC,SAAS,EAAE,OAAO,IAAI,KAAK,CAAC;IAC7E;AAwBA,IAAA,WAAA,CAAuC,SAAoB,EAAA;QAApB,IAAA,CAAA,SAAS,GAAT,SAAS;;QA9JvC,IAAA,CAAA,OAAO,GAAG,MAAM,EAAoC;AAE1C,QAAA,IAAA,CAAA,WAAW,GAAG,CAAA,0BAAA,EAA6B,WAAW,CAAC,YAAY,EAAE,EAAE;AACvE,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC;2FAAC;QAEtC,IAAA,CAAA,OAAO,GAAG,KAAK;AACN,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAQ;AAClC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACxC,IAAA,CAAA,cAAc,GAAG,KAAK;QACtB,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,YAAY,GAAG,CAAC;;AAMP,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,OAAO,EAAQ;;QAGrC,IAAA,CAAA,OAAO,GAAG,KAAK,CAAuB,EAAE;oFAAC;;AAGzC,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAS,CAAC,CAAC;2FAAC;;QAGlC,IAAA,CAAA,oBAAoB,GAAG,KAAK,CAAwB,UAAU;iGAAC;;AAG/D,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAS,CAAC,CAAC;uFAAC;;QAG9B,IAAA,CAAA,mBAAmB,GAAG,KAAK,CAAU,KAAK;gGAAC;AAEjC,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AAC3C,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE;AAChC,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE;YAC5B,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,WAAW,KAAK,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;QAClF,CAAC;sFAAC;;QAGO,IAAA,CAAA,KAAK,GAAG,KAAK,CAAS,EAAE;kFAAC;;QAGzB,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK;qFAAC;;QAGhC,IAAA,CAAA,UAAU,GAAG,KAAK,CAAU,KAAK;uFAAC;;QAGlC,IAAA,CAAA,IAAI,GAAG,KAAK,CAA0B,SAAS;iFAAC;;QAGhD,IAAA,CAAA,OAAO,GAAG,KAAK,CAAU,KAAK;oFAAC;;QAG/B,IAAA,CAAA,KAAK,GAAG,KAAK,CAAS,CAAC;kFAAC;;QAGxB,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAmB,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;QAG1E,IAAA,CAAA,WAAW,GAAG,KAAK,CAAS,EAAE;wFAAC;QAEhC,IAAA,CAAA,SAAS,GAAY,KAAK;AAiBlC,QAAA,IAAA,CAAA,EAAE,GAAG,CAAA,gBAAA,EAAmB,WAAW,CAAC,YAAY,EAAE,EAAE;QACpD,IAAA,CAAA,WAAW,GAAG,EAAE;QAOR,IAAA,CAAA,MAAM,GAA0B,EAAE;AAgDlC,QAAA,IAAA,CAAA,eAAe,GAAqB,MAAK,EAAE,CAAC;AAC5C,QAAA,IAAA,CAAA,gBAAgB,GAAe,MAAK,EAAE,CAAC;AAE9B,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAC5B,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAEhD;;;;AAIG;QACgB,IAAA,CAAA,SAAS,GAAG,MAAM,CAAM,EAAE;sFAAC;;QAG3B,IAAA,CAAA,eAAe,GAAG,MAAM,CAAiC,SAAS;4FAAC;;AAGnE,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;;AAGpC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;AAGxD,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;AAC1B,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI;QACrC;;QAGA,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AAC1B,QAAA,CAAC,CAAC;;;;;AAMF,QAAA,IAAI,CAAC;AACF,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,uBAAuB,CAAC;aAC/E,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE;gBACzB,IAAI,CAAC,oBAAoB,EAAE;YAC7B;AACF,QAAA,CAAC,CAAC;QAEJ,eAAe,CAAC,MAAK;YACnB,IAAI,WAAW,CAAC,SAAS,EAAE,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE;gBACpE,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;gBACtD,IAAI,IAAI,EAAE;AACR,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACnE,oBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC;gBACnC;YACF;YAEA,UAAU,CAAC,MAAK;gBACd,IAAI,CAAC,oBAAoB,EAAE;AAC3B,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;YAC5B,CAAC,EAAE,GAAG,CAAC;AACT,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE;AACjC,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;IAC9B;AAEA;;;AAGG;IACK,oBAAoB,GAAA;QAC1B,IAAI,IAAI,CAAC,SAAS;YAAE;QACpB,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;QACtD,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE;AAChC,YAAA,IAAI,CAAC,YAAY,GAAG,CAAC;YACrB,IAAI,CAAC,cAAc,CAAC,GAAG,CACrB,IAAI,CAAC,mBAAmB;kBACpB,IAAI,CAAC;AACP,kBAAE,MAAM,CAAC,UAAU,CAAC;QAC1B;AAAO,aAAA,IAAI,IAAI,CAAC,YAAY,GAAG,EAAE,EAAE;;;YAGjC,IAAI,CAAC,YAAY,EAAE;YACnB,UAAU,CAAC,MAAM,IAAI,CAAC,oBAAoB,EAAE,EAAE,GAAG,CAAC;QACpD;IACF;AAEA;;;;AAIG;IACK,YAAY,GAAA;AAClB,QAAA,MAAM,KAAK,GACT,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,oBAAoB,EAAE,KAAK;AACtE,cAAE,IAAI,CAAC,eAAe;AACtB,cAAE,IAAI,CAAC,SAAS,EAAE;AACtB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,OAAO,KAAK;QACd;QACA,OAAO,KAAK,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE;IAC7B;AAEA;;;AAGG;IACH,WAAW,GAAA;QACT,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC;QAC1C,CAAC,EAAE,GAAG,CAAC;IACT;AAEA;;;;;AAKG;AACH,IAAA,YAAY,CAAC,IAAwB,EAAA;QACnC,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7F;AAEA;;;AAGG;AACH,IAAA,UAAU,CAAC,KAAU,EAAA;QACnB,MAAM,IAAI,GAAG,KAAyC;AACtD,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE;;AAEvB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;QAC5B;IACF;AAEA;;;AAGG;AACH,IAAA,gBAAgB,CAAC,EAAoB,EAAA;AACnC,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;IAC3B;AAEA;;;AAGG;AACH,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;IAC5B;AAEA;;;AAGG;AACH,IAAA,iBAAiB,CAAC,GAAa,EAAA;QAC7B,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;IAClC;AAEA;;;AAGG;AACH,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU;AAC3B,QAAA,IAAI,UAAU,IAAI,IAAI,CAAC,OAAO,EAAE;AAC9B,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;QAC1B;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE;YAAE;QAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC;QACzD;IACF;AAEA;;AAEG;IACH,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE;gBAAE;YAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,KAAK,EAAE;gBACZ,IAAI,CAAC,gBAAgB,EAAE;YACzB;QACF;IACF;AAEA;;;AAGG;AACH,IAAA,KAAK,CAAC,CAAQ,EAAA;AACZ,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;QACvB,CAAC,CAAC,eAAe,EAAE;IACrB;AAEA;;;AAGG;AACH,IAAA,MAAM,CAAC,IAAyB,EAAA;QAC9B,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;QAC7B;IACF;8GA5VW,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,IAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnCnC,iwEAkDM,EAAA,MAAA,EAAA,CAAA,gNAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED5BM,gBAAgB,+BAAE,SAAS,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,uyBACxE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,oFAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,qNAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,cAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChF,uBAAuB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,cAAA,EAAA,OAAA,EAAA,eAAA,EAAA,SAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAWd,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAhBlC,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,OAAA,EACP,CAAC,gBAAgB,EAAE,SAAS,EAAE,kBAAkB,EAAE,eAAe;AACxE,wBAAA,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB;wBAChF;qBACD,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,MAAM,EAAE,IAAI;AACZ,wBAAA,kBAAkB,EAAE,kBAAkB;AACtC,wBAAA,yBAAyB,EAAE,aAAa;AACzC,qBAAA,EAAA,QAAA,EAAA,iwEAAA,EAAA,MAAA,EAAA,CAAA,gNAAA,CAAA,EAAA;;0BAmKY;;0BAAY;;sBA7FxB;;;AEvGH;;;;;;AAMG;;ACNH;;AAEG;;;;"}
1
+ {"version":3,"file":"arsedizioni-ars-utils-ui.controls.mjs","names":[],"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"],"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 &nbsp; ({{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>"],"mappings":"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"}