@cute-widgets/base 20.0.2 → 20.0.4

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 (63) hide show
  1. package/CHANGELOG.md +35 -1
  2. package/abstract/index.d.ts +5 -2
  3. package/button/index.d.ts +7 -6
  4. package/card/index.d.ts +9 -6
  5. package/core/directives/index.d.ts +2 -32
  6. package/core/index.d.ts +35 -28
  7. package/core/interfaces/index.d.ts +1 -1
  8. package/core/layout/index.d.ts +34 -27
  9. package/core/nav/index.d.ts +1 -2
  10. package/expansion/index.d.ts +5 -18
  11. package/fesm2022/cute-widgets-base-abstract.mjs +20 -5
  12. package/fesm2022/cute-widgets-base-abstract.mjs.map +1 -1
  13. package/fesm2022/cute-widgets-base-button-toggle.mjs +2 -2
  14. package/fesm2022/cute-widgets-base-button-toggle.mjs.map +1 -1
  15. package/fesm2022/cute-widgets-base-button.mjs +12 -11
  16. package/fesm2022/cute-widgets-base-button.mjs.map +1 -1
  17. package/fesm2022/cute-widgets-base-card.mjs +46 -29
  18. package/fesm2022/cute-widgets-base-card.mjs.map +1 -1
  19. package/fesm2022/cute-widgets-base-chips.mjs +6 -6
  20. package/fesm2022/cute-widgets-base-chips.mjs.map +1 -1
  21. package/fesm2022/cute-widgets-base-core-directives.mjs +5 -73
  22. package/fesm2022/cute-widgets-base-core-directives.mjs.map +1 -1
  23. package/fesm2022/cute-widgets-base-core-interfaces.mjs.map +1 -1
  24. package/fesm2022/cute-widgets-base-core-layout.mjs +64 -40
  25. package/fesm2022/cute-widgets-base-core-layout.mjs.map +1 -1
  26. package/fesm2022/cute-widgets-base-core-nav.mjs +1 -2
  27. package/fesm2022/cute-widgets-base-core-nav.mjs.map +1 -1
  28. package/fesm2022/cute-widgets-base-core.mjs +64 -40
  29. package/fesm2022/cute-widgets-base-core.mjs.map +1 -1
  30. package/fesm2022/cute-widgets-base-dialog.mjs +1 -1
  31. package/fesm2022/cute-widgets-base-dialog.mjs.map +1 -1
  32. package/fesm2022/cute-widgets-base-expansion.mjs +19 -13
  33. package/fesm2022/cute-widgets-base-expansion.mjs.map +1 -1
  34. package/fesm2022/cute-widgets-base-list.mjs +2 -2
  35. package/fesm2022/cute-widgets-base-list.mjs.map +1 -1
  36. package/fesm2022/cute-widgets-base-navbar.mjs +6 -0
  37. package/fesm2022/cute-widgets-base-navbar.mjs.map +1 -1
  38. package/fesm2022/cute-widgets-base-paginator.mjs +12 -10
  39. package/fesm2022/cute-widgets-base-paginator.mjs.map +1 -1
  40. package/fesm2022/cute-widgets-base-radio.mjs +1 -2
  41. package/fesm2022/cute-widgets-base-radio.mjs.map +1 -1
  42. package/fesm2022/cute-widgets-base-select.mjs +2 -2
  43. package/fesm2022/cute-widgets-base-select.mjs.map +1 -1
  44. package/fesm2022/cute-widgets-base-sidenav.mjs +31 -30
  45. package/fesm2022/cute-widgets-base-sidenav.mjs.map +1 -1
  46. package/fesm2022/cute-widgets-base-snack-bar.mjs +2 -2
  47. package/fesm2022/cute-widgets-base-snack-bar.mjs.map +1 -1
  48. package/fesm2022/cute-widgets-base-sort.mjs +63 -260
  49. package/fesm2022/cute-widgets-base-sort.mjs.map +1 -1
  50. package/fesm2022/cute-widgets-base-table.mjs +22 -16
  51. package/fesm2022/cute-widgets-base-table.mjs.map +1 -1
  52. package/fesm2022/cute-widgets-base-tree.mjs +11 -2
  53. package/fesm2022/cute-widgets-base-tree.mjs.map +1 -1
  54. package/fesm2022/cute-widgets-base.mjs +3 -1
  55. package/fesm2022/cute-widgets-base.mjs.map +1 -1
  56. package/navbar/index.d.ts +6 -0
  57. package/package.json +18 -17
  58. package/paginator/index.d.ts +5 -16
  59. package/radio/index.d.ts +0 -1
  60. package/sidenav/index.d.ts +1 -2
  61. package/sort/index.d.ts +25 -138
  62. package/table/index.d.ts +24 -21
  63. package/tree/index.d.ts +5 -0
@@ -1 +1 @@
1
- {"version":3,"file":"cute-widgets-base-abstract.mjs","sources":["../../../../projects/cute-widgets/base/abstract/src/base-control.directive.ts","../../../../projects/cute-widgets/base/abstract/src/focusable-control.directive.ts","../../../../projects/cute-widgets/base/abstract/src/input-control.directive.ts","../../../../projects/cute-widgets/base/abstract/src/input-dropdown-control.directive.ts","../../../../projects/cute-widgets/base/abstract/src/layout-control.directive.ts","../../../../projects/cute-widgets/base/abstract/cute-widgets-base-abstract.ts"],"sourcesContent":["/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\nimport {\r\n Directive,\r\n ChangeDetectorRef,\r\n ElementRef,\r\n inject,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n SimpleChanges,\r\n Renderer2, AfterViewInit, OnInit, AfterContentInit, booleanAttribute, isDevMode, InjectionToken,\r\n} from '@angular/core';\r\nimport {BooleanInput, coerceBooleanProperty} from \"@angular/cdk/coercion\";\r\nimport {Observable, Subscriber} from \"rxjs\";\r\nimport {RichThemeColor} from \"@cute-widgets/base/core\";\r\n\r\nexport interface ThematicControl {\r\n /** Theme color palette for the component. */\r\n color: RichThemeColor | undefined;\r\n /** Adds a linear gradient as background image to the backgrounds. */\r\n gradientFill: boolean;\r\n /** Default color to fall back to if no value is set. */\r\n defaultColor: RichThemeColor | undefined;\r\n}\r\n\r\nexport interface CuteWidget extends ThematicControl {\r\n id: string | undefined;\r\n role: string | undefined;\r\n element: Readonly<ElementRef<HTMLElement>>;\r\n owner: CuteWidget | null;\r\n disabled: boolean;\r\n tag: any;\r\n enable(): void;\r\n disable(): void;\r\n toggleDisabled(): void;\r\n hasClass(name: string): boolean;\r\n toggleClass(name: string, force?: boolean): boolean;\r\n getAttribute(name: string): string | null;\r\n setAttribute(name: string, value: string, namespace?: string | null | undefined): void;\r\n hasAttributes(...attributes: string[]): boolean;\r\n markForCheck(): void;\r\n}\r\n\r\n/** Widget's injection token */\r\nexport const CUTE_WIDGET = new InjectionToken<CuteWidget>(\"CUTE-WIDGET\");\r\n\r\n/**\r\n * This widget base class and each of its descendant should be used as a parent for classes decorated with `@Component`.\r\n * Attribute directives should not extend this class and its descendants to avoid property value conflicts.\r\n */\r\n@Directive({\r\n host: {\r\n 'class': 'cute-widget',\r\n '[class.cute-thematic-widget]': 'color',\r\n '[class.bg-gradient]': 'gradientFill',\r\n },\r\n providers: [{provide: CUTE_WIDGET, useExisting: CuteBaseControl}]\r\n})\r\nexport abstract class CuteBaseControl\r\n implements CuteWidget, OnInit, AfterViewInit, AfterContentInit, OnChanges, OnDestroy\r\n{\r\n private readonly _uniqueId: string | undefined;\r\n\r\n protected readonly _elementRef: ElementRef<HTMLElement> = inject(ElementRef);\r\n protected readonly _changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef);\r\n protected readonly _renderer: Renderer2 = inject(Renderer2);\r\n\r\n /** Owner widget */\r\n readonly owner = inject(CUTE_WIDGET, {skipSelf: true, optional: true})\r\n\r\n /**\r\n * A list of subscribers that subscribed before the directive was initialized.\r\n * Should be notified during markInitialized.\r\n * Set to null after pending subscribers are notified, and should\r\n * not expect to be populated after.\r\n */\r\n private _pendingSubscribers: Subscriber<void>[] | null = [];\r\n\r\n protected get _nativeElement(): HTMLElement {\r\n return this._elementRef.nativeElement;\r\n }\r\n\r\n /**\r\n * Marks the state as initialized and notifies pending subscribers. Should be called at the end\r\n * of ngOnInit.\r\n */\r\n protected _markInitialized(): void {\r\n if (this.isInitialized && isDevMode()) {\r\n throw Error('CuteBaseControl error:/r/n'\r\n +'This directive has already been marked as initialized and '\r\n +'should not be called twice.',\r\n );\r\n }\r\n\r\n this._isInitialized = true;\r\n\r\n if (this._pendingSubscribers != null) {\r\n this._pendingSubscribers.forEach(this._notifySubscriber);\r\n this._pendingSubscribers = null;\r\n }\r\n }\r\n\r\n /** Emits and completes the subscriber stream (should only emit once). */\r\n private _notifySubscriber(subscriber: Subscriber<void>): void {\r\n subscriber.next();\r\n subscriber.complete();\r\n }\r\n\r\n /**\r\n * Observable stream that emits when the directive initializes. If already initialized, the\r\n * subscriber is stored to be notified once _markInitialized is called.\r\n */\r\n readonly initialized$:Observable<void> = new Observable<void>(subscriber => {\r\n // If initialized, immediately notify the subscriber. Otherwise, store the subscriber to notify\r\n // when _markInitialized is called.\r\n if (this.isInitialized) {\r\n this._notifySubscriber(subscriber);\r\n } else {\r\n this._pendingSubscribers!.push(subscriber);\r\n }\r\n });\r\n\r\n /** Whether this directive has been marked as initialized. */\r\n get isInitialized(): boolean {\r\n return this._isInitialized;\r\n }\r\n private _isInitialized: boolean = false;\r\n\r\n /** Gets a reference to the `ElementRef` object */\r\n get element(): Readonly<ElementRef<HTMLElement>> {\r\n return this._elementRef;\r\n }\r\n\r\n /** The element's identifier */\r\n @Input()\r\n get id(): string|undefined {return this._id};\r\n set id(value: string|undefined) {this._id = value;}\r\n private _id: string | undefined;\r\n\r\n /** Default color, which is set when no value is set to the `color` property */\r\n @Input() defaultColor: RichThemeColor | undefined;\r\n\r\n /** Theme color palette for the component. */\r\n @Input()\r\n get color(): RichThemeColor|undefined { return this._color ?? this.defaultColor; }\r\n set color(value: RichThemeColor|undefined) { this.setColor(value); }\r\n private _color: RichThemeColor | undefined;\r\n\r\n /** Adds a linear gradient as a background image to the backgrounds */\r\n @Input({transform: booleanAttribute})\r\n gradientFill: boolean = false;\r\n\r\n /**\r\n * Makes the host element not mutable, focusable, or even submitted with the form\r\n */\r\n @Input({transform: booleanAttribute})\r\n get disabled(): boolean { return this.getDisabledState(); }\r\n set disabled(value: BooleanInput) {\r\n if (coerceBooleanProperty(value) !== this._disabled) {\r\n this.setDisabledState(value);\r\n }\r\n }\r\n private _disabled: boolean = false;\r\n\r\n /**\r\n * Attached to the aria-label attribute of the host element.In most cases, aria-labelledby will\r\n * take precedence so this may be omitted.\r\n */\r\n @Input('aria-label')\r\n ariaLabel: string | null = null;\r\n /**\r\n * Users can specify the `aria-labelledby` attribute which will be forwarded to the input element\r\n */\r\n @Input('aria-labelledby')\r\n ariaLabelledby: string | null = null;\r\n /**\r\n * The 'aria-describedby' attribute is read after the element's label and field type.\r\n */\r\n @Input('aria-describedby')\r\n ariaDescribedby: string | null = null;\r\n /**\r\n * The 'aria-description' attribute for the content of the element.\r\n */\r\n @Input('aria-description')\r\n ariaDescription: string | null = null;\r\n /**\r\n * Provides semantic meaning to content, allowing screen readers and other tools to present and\r\n * support interaction with an object\r\n */\r\n @Input()\r\n get role(): string | undefined {return this._role;}\r\n set role(value: string|undefined) {\r\n this._role = (typeof value == \"string\" ? value.trim().toLowerCase() : \"\") || undefined;\r\n }\r\n private _role: string | undefined;\r\n\r\n /** Any arbitrary user data */\r\n @Input()\r\n tag: any;\r\n\r\n /** Returns the unique id for the visual hidden input control */\r\n protected get inputId(): string {\r\n return `${this.id || this._uniqueId}-input`;\r\n }\r\n\r\n protected constructor() {\r\n const generatedId = this.generateId().trim();\r\n if (generatedId.length > 0) {\r\n this._id = this._uniqueId = generatedId;\r\n }\r\n }\r\n\r\n /**\r\n * Sets the type of mouse cursor using a keyword, or load a specific icon to use.\r\n * @param cursor A mouse cursor keyword or icon\r\n * @returns The current mouse cursor\r\n */\r\n // async setCursor(cursor: MouseCursor|string): Promise<MouseCursor|string> {\r\n // const oldCursor = <MouseCursor> getComputedStyle(this._nativeElement).cursor;\r\n // this._nativeElement.style.cursor = cursor;\r\n // await yieldToMain();\r\n // return oldCursor;\r\n // }\r\n\r\n /**\r\n * Whether the option is disabled. Can be overridden in descendant classes\r\n * @returns Current disabled state\r\n */\r\n protected getDisabledState(): boolean {\r\n return this._disabled;\r\n }\r\n\r\n /**\r\n * Changes the `disabled` status of the component. Can be overridden in descendant classes\r\n * @param newState New boolean for `disabled` state\r\n * @param emitEvent Emit state change event\r\n * @returns Change result\r\n */\r\n protected setDisabledState(newState: BooleanInput, emitEvent?: boolean): boolean {\r\n const coercedState = coerceBooleanProperty(newState);\r\n if (coercedState !== this.disabled) {\r\n this._disabled = coercedState;\r\n Promise.resolve().then(()=>this.markForCheck());\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Sets a new color value. Can be overridden in descendant classes.\r\n * @param value New `ThemeColor` value\r\n * @returns Old color value\r\n */\r\n protected setColor(value: RichThemeColor | undefined): RichThemeColor | undefined {\r\n const oldColor = this._color;\r\n if (oldColor !== value) {\r\n this._color = value;\r\n this.markForCheck();\r\n }\r\n return oldColor;\r\n }\r\n\r\n /**\r\n * Returns an element's unique identifier that, if not empty, is assigned to `id` property as a default value.\r\n * Must be overridden in the descendant classes.\r\n * @abstract\r\n */\r\n protected abstract generateId(): string;\r\n\r\n /** Returns the root owner widget if it exists */\r\n getRootOwner(): CuteWidget | null {\r\n let root = this.owner;\r\n while (root) {\r\n root = root.owner;\r\n }\r\n return root;\r\n }\r\n\r\n /** Sets a property on a target element using the current Renderer implementation. */\r\n setProperty(key: string, value: unknown): void {\r\n this._renderer.setProperty(this._nativeElement, key, value);\r\n }\r\n /** Returns the value of a specified attribute on the component's host element. */\r\n getAttribute(name: string): string | null {\r\n return this._nativeElement.getAttribute(name);\r\n }\r\n /** Sets the value of an attribute on the component's host element */\r\n setAttribute(name: string, value: string, namespace?: string | null | undefined): void {\r\n this._renderer.setAttribute(this._nativeElement, name, value, namespace);\r\n }\r\n /** Gets whether the component has one of the given attributes. */\r\n hasAttributes(...attributes: string[]): boolean {\r\n return attributes.some(attribute => this._nativeElement.hasAttribute(attribute));\r\n }\r\n /** Adds a class to an element in the DOM. */\r\n addClass(name: string): void {\r\n this._renderer.addClass(this._nativeElement, name);\r\n }\r\n /** Removes a class from an element in the DOM. */\r\n removeClass(name: string): void {\r\n this._renderer.removeClass(this._nativeElement, name);\r\n }\r\n /** Returns a boolean value — _true_ if the element's class list contains the given token, otherwise _false_. */\r\n hasClass(name: string): boolean {\r\n return this._nativeElement.classList.contains(name);\r\n }\r\n /**\r\n * Adds a CSS class if it is not in the element's class list, otherwise remove it\r\n * @param name CSS class name\r\n * @param force If included, turns the toggle into a one way-only operation. If set to _false_, then the class name will only be removed, but not added. If set to _true_, then the class name will only be added, but not removed.\r\n */\r\n toggleClass(name: string, force?: boolean): boolean {\r\n return this._nativeElement.classList.toggle(name, force);\r\n }\r\n /**\r\n * Returns a boolean value indicating whether a _node_ is a descendant of the current node\r\n * @param node HTML element reference to test\r\n * @returns A boolean value that is `true` if _node_ is contained in the current node, `false` if not.\r\n * If the _node_ parameter is `null`, contains() always returns `false`.\r\n */\r\n contains(node: HTMLElement): boolean {\r\n return this._nativeElement.contains(node);\r\n }\r\n\r\n /** Enables the user interaction */\r\n enable(): void {\r\n this.disabled = false;\r\n }\r\n\r\n /** Disables the user interaction */\r\n disable(): void {\r\n this.disabled = true;\r\n }\r\n\r\n /** Explicitly marks the view as changed so that it can be checked again. */\r\n markForCheck(): void {\r\n this._changeDetectorRef.markForCheck();\r\n }\r\n\r\n /** Toggles the `disabled` state of the component */\r\n toggleDisabled(): void {\r\n this.disabled = !this.disabled;\r\n }\r\n\r\n ngOnInit() {\r\n this._markInitialized();\r\n }\r\n\r\n ngAfterViewInit() {\r\n }\r\n\r\n ngAfterContentInit() {\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n}\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\nimport {Directive, EventEmitter, inject, Input, numberAttribute, Output} from '@angular/core';\r\nimport {FocusableOption, FocusMonitor, FocusOrigin, ListKeyManagerOption} from \"@angular/cdk/a11y\";\r\nimport {CuteBaseControl} from './base-control.directive';\r\nimport {RippleManager} from \"@cute-widgets/base/core/ripple\";\r\n\r\nfunction transformTabIndex(value: unknown): number | undefined {\r\n return value == null ? undefined : numberAttribute(value);\r\n}\r\n\r\n@Directive()\r\nexport abstract class CuteFocusableControl extends CuteBaseControl\r\n implements FocusableOption, ListKeyManagerOption\r\n{\r\n // If necessary, the `monitor` method should be called from descendant classes in one of the\r\n // directive/component's life circle methods\r\n protected readonly _focusMonitor: FocusMonitor = inject(FocusMonitor);\r\n\r\n /**\r\n * Allows making HTML elements un/focusable (usually with the Tab key, hence the name) and\r\n * determines their relative ordering for sequential focus navigation.\r\n */\r\n @Input({transform: transformTabIndex})\r\n get tabIndex(): number | undefined { return this._tabIndex; }\r\n set tabIndex(value: number | undefined) {\r\n if (value !== this._tabIndex) {\r\n this._tabIndex = value;\r\n if (this.isInitialized) {\r\n this.tabIndexChange.emit();\r\n }\r\n }\r\n }\r\n private _tabIndex: number | undefined;\r\n\r\n @Output() tabIndexChange = new EventEmitter<void>();\r\n\r\n protected constructor() {\r\n super();\r\n const tabInd = this.getAttribute(\"tabindex\");\r\n if (tabInd) {\r\n this.tabIndex = numberAttribute(tabInd, 0);\r\n }\r\n }\r\n\r\n /** Set focus on this component */\r\n focus(origin?: FocusOrigin, options?: FocusOptions): void {\r\n if (origin) {\r\n this._focusMonitor.focusVia(this._elementRef.nativeElement, origin, options);\r\n } else if (options && !Array.isArray(options)) {\r\n this._nativeElement.focus(options);\r\n } else {\r\n this._nativeElement.focus();\r\n }\r\n }\r\n\r\n /** Gets the current label of the component. Part of `ListKeyManagerOption` interface. */\r\n getLabel(): string {\r\n return (this._nativeElement.textContent||\"\").trim();\r\n }\r\n\r\n override ngOnDestroy() {\r\n super.ngOnDestroy();\r\n this._focusMonitor.stopMonitoring(this._elementRef);\r\n RippleManager.removeRipple(this._nativeElement);\r\n }\r\n\r\n}\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\nimport {booleanAttribute, Directive, Input} from '@angular/core';\r\nimport {ControlValueAccessor} from \"@angular/forms\";\r\nimport {BooleanInput, coerceBooleanProperty} from \"@angular/cdk/coercion\";\r\nimport {Subject} from \"rxjs\";\r\nimport {CuteFocusableControl} from './focusable-control.directive';\r\n\r\n@Directive()\r\nexport abstract class CuteInputControl extends CuteFocusableControl implements ControlValueAccessor {\r\n\r\n private _isTouched: boolean = false;\r\n\r\n /**\r\n * Emits whenever the component state changes and should cause the parent\r\n * form-field to update. Implemented as part of `CuteFormFieldControl`.\r\n */\r\n readonly stateChanges = new Subject<void>();\r\n\r\n protected _onChange: (value: unknown) => void = () => {};\r\n protected _onTouched: Function = ()=>{};\r\n\r\n /** The value attribute of the native input element */\r\n abstract value: any;\r\n\r\n /** Name value will be applied to the input element if present */\r\n @Input()\r\n name: string | null = null;\r\n\r\n /** Whether the element's value input is required. */\r\n @Input({transform: booleanAttribute})\r\n get required(): boolean {return this._required ?? false;}\r\n set required(newValue: BooleanInput) {\r\n this._required = coerceBooleanProperty(newValue);\r\n this.stateChanges.next();\r\n }\r\n private _required: boolean | undefined;\r\n\r\n override get id(): string|undefined {return super.id;}\r\n override set id(value: string|undefined) {\r\n if (value !== super.id) {\r\n super.id = value;\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n protected constructor() { super(); }\r\n\r\n /* ControlValueAccessor interface */\r\n //++\r\n registerOnChange(fn: (value: any) => void): void {\r\n this._onChange = fn;\r\n }\r\n registerOnTouched(fn: () => void): void {\r\n this._onTouched = fn;\r\n }\r\n override setDisabledState(isDisabled: BooleanInput, emitEvent: boolean = true): boolean {\r\n const changed = super.setDisabledState(isDisabled, emitEvent);\r\n if (changed && emitEvent) {\r\n this.stateChanges.next();\r\n }\r\n return changed;\r\n }\r\n abstract writeValue(obj: any): void;\r\n //--\r\n\r\n /**\r\n * Mark widget gets a touched state\r\n * @protected\r\n */\r\n protected markAsTouched() {\r\n if (!this._isTouched) {\r\n this._onTouched();\r\n this._isTouched = true;\r\n }\r\n }\r\n\r\n override ngOnDestroy() {\r\n super.ngOnDestroy();\r\n\r\n this.stateChanges.complete();\r\n }\r\n\r\n}\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\nimport {Directive, Input} from \"@angular/core\";\r\nimport {CuteInputControl} from \"./input-control.directive\";\r\nimport {Expandable} from \"./expandable.interface\";\r\n\r\n@Directive()\r\nexport abstract class CuteInputDropdownControl extends CuteInputControl implements Expandable {\r\n\r\n @Input()\r\n withShadow: boolean = false;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n /** Expandable interface */\r\n abstract open(): void;\r\n abstract close(): void;\r\n abstract toggle(): void;\r\n\r\n abstract get expanded(): boolean;\r\n}\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\nimport {\r\n booleanAttribute,\r\n Directive,\r\n EventEmitter,\r\n HostBinding,\r\n inject,\r\n Input,\r\n Output,\r\n SimpleChanges\r\n} from \"@angular/core\";\r\nimport {CuteBaseControl} from \"./base-control.directive\";\r\nimport {bsBreakpoints, LayoutBreakpoint, toBgCssClass} from \"@cute-widgets/base/core\";\r\nimport {BreakpointObserver, BreakpointState} from '@angular/cdk/layout';\r\nimport {Subscription} from 'rxjs';\r\n\r\n@Directive({\r\n host: {\r\n '[class.clearfix]': 'clearfix',\r\n '[attr.tabindex]': '-1',\r\n '[attr.aria-label]': 'ariaLabel || null',\r\n '[attr.aria-labelledby]': 'ariaLabelledby || null',\r\n '[attr.aria-describedby]': 'ariaDescribedby || null',\r\n '[attr.role]': 'role || null',\r\n '[attr.id]': 'id || null',\r\n }\r\n})\r\nexport abstract class CuteLayoutControl extends CuteBaseControl {\r\n protected breakpointObserver = inject(BreakpointObserver);\r\n private _subscription: Subscription | undefined;\r\n\r\n /** Returns CSS-class list */\r\n @HostBinding(\"class\")\r\n protected get classList(): string {\r\n // We interpret `color` value as a background color of the container\r\n return this.color ? toBgCssClass(this.color) : \"\";\r\n }\r\n\r\n /** Clears floated content within a container */\r\n @Input({transform: booleanAttribute}) clearfix: boolean = false;\r\n\r\n /** Symbolic name of the screen minimum width which determines how the responsive layout behaves across device or viewport sizes. */\r\n @Input() breakpoint: LayoutBreakpoint | undefined;\r\n\r\n /** Event that is raised when the width of viewport is changed and crosses the size of `breakpoint`'s value. */\r\n @Output() breakpointState = new EventEmitter<BreakpointState>();\r\n\r\n override ngOnChanges(changes: SimpleChanges) {\r\n super.ngOnChanges(changes);\r\n\r\n const change = changes[\"breakpoint\"];\r\n if (change) {\r\n\r\n this._subscription?.unsubscribe();\r\n\r\n if (change.currentValue) { // && (change.currentValue !== change.previousValue)) {\r\n const bpName = bsBreakpoints.getLabel(change.currentValue);\r\n this._subscription = this.breakpointObserver\r\n .observe((bsBreakpoints as any)[bpName+\"AndDown\"])\r\n .subscribe(state => this.breakpointState.emit(state));\r\n }\r\n }\r\n }\r\n\r\n override ngOnDestroy() {\r\n super.ngOnDestroy();\r\n\r\n this._subscription?.unsubscribe();\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;AAAA;;;;;;;AAOG;AA2CH;MACa,WAAW,GAAG,IAAI,cAAc,CAAa,aAAa;AAEvE;;;AAGG;MASmB,eAAe,CAAA;AAoBnC,IAAA,IAAc,cAAc,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa;IACvC;AAEA;;;AAGG;IACO,gBAAgB,GAAA;AACxB,QAAA,IAAI,IAAI,CAAC,aAAa,IAAI,SAAS,EAAE,EAAE;YACrC,MAAM,KAAK,CAAC;kBACU;AACA,kBAAA,6BAA6B,CAClD;QACH;AAEA,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAE1B,QAAA,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,EAAE;YACpC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACxD,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;QACjC;IACF;;AAGQ,IAAA,iBAAiB,CAAC,UAA4B,EAAA;QACpD,UAAU,CAAC,IAAI,EAAE;QACjB,UAAU,CAAC,QAAQ,EAAE;IACvB;;AAiBA,IAAA,IAAI,aAAa,GAAA;QACf,OAAO,IAAI,CAAC,cAAc;IAC5B;;AAIA,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,WAAW;IACzB;;IAGA,IACI,EAAE,KAAsB,OAAO,IAAI,CAAC,GAAG,CAAA,CAAA;;IAC3C,IAAI,EAAE,CAAC,KAAuB,EAAA,EAAG,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,CAAA;;AAOlD,IAAA,IACI,KAAK,GAAA,EAA+B,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;AACjF,IAAA,IAAI,KAAK,CAAC,KAA+B,EAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAOnE;;AAEG;IACH,IACI,QAAQ,KAAc,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC1D,IAAI,QAAQ,CAAC,KAAmB,EAAA;QAC9B,IAAI,qBAAqB,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,SAAS,EAAE;AACnD,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;QAC9B;IACF;AAwBA;;;AAGG;IACH,IACI,IAAI,KAAwB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAA;IAClD,IAAI,IAAI,CAAC,KAAuB,EAAA;QAC9B,IAAI,CAAC,KAAK,GAAG,CAAC,OAAO,KAAK,IAAI,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE,KAAK,SAAS;IACxF;;AAQA,IAAA,IAAc,OAAO,GAAA;QACnB,OAAO,CAAA,EAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,SAAS,CAAA,MAAA,CAAQ;IAC7C;AAEA,IAAA,WAAA,GAAA;AA9ImB,QAAA,IAAA,CAAA,WAAW,GAA4B,MAAM,CAAC,UAAU,CAAC;AACzD,QAAA,IAAA,CAAA,kBAAkB,GAAsB,MAAM,CAAC,iBAAiB,CAAC;AACjE,QAAA,IAAA,CAAA,SAAS,GAAc,MAAM,CAAC,SAAS,CAAC;;AAGlD,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;AAEtE;;;;;AAKG;QACK,IAAA,CAAA,mBAAmB,GAA8B,EAAE;AAgC3D;;;AAGG;AACM,QAAA,IAAA,CAAA,YAAY,GAAoB,IAAI,UAAU,CAAO,UAAU,IAAG;;;AAGzE,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;YACpC;iBAAO;AACL,gBAAA,IAAI,CAAC,mBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC;YAC5C;AACF,QAAA,CAAC,CAAC;QAMM,IAAA,CAAA,cAAc,GAAY,KAAK;;QAwBvC,IAAA,CAAA,YAAY,GAAY,KAAK;QAYrB,IAAA,CAAA,SAAS,GAAY,KAAK;AAElC;;;AAGG;QAEH,IAAA,CAAA,SAAS,GAAkB,IAAI;AAC/B;;AAEG;QAEH,IAAA,CAAA,cAAc,GAAkB,IAAI;AACpC;;AAEG;QAEH,IAAA,CAAA,eAAe,GAAkB,IAAI;AACrC;;AAEG;QAEH,IAAA,CAAA,eAAe,GAAkB,IAAI;QAsBnC,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE;AAC5C,QAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,GAAG,WAAW;QACzC;IACF;AAEA;;;;AAIG;;;;;;;AAQH;;;AAGG;IACO,gBAAgB,GAAA;QACxB,OAAO,IAAI,CAAC,SAAS;IACvB;AAEA;;;;;AAKG;IACO,gBAAgB,CAAC,QAAsB,EAAE,SAAmB,EAAA;AACpE,QAAA,MAAM,YAAY,GAAG,qBAAqB,CAAC,QAAQ,CAAC;AACpD,QAAA,IAAI,YAAY,KAAK,IAAI,CAAC,QAAQ,EAAE;AAClC,YAAA,IAAI,CAAC,SAAS,GAAG,YAAY;AAC7B,YAAA,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAI,IAAI,CAAC,YAAY,EAAE,CAAC;AAC/C,YAAA,OAAO,IAAI;QACb;AACA,QAAA,OAAO,KAAK;IACd;AAEA;;;;AAIG;AACO,IAAA,QAAQ,CAAC,KAAiC,EAAA;AAClD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM;AAC5B,QAAA,IAAI,QAAQ,KAAK,KAAK,EAAE;AACtB,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;YACnB,IAAI,CAAC,YAAY,EAAE;QACrB;AACA,QAAA,OAAO,QAAQ;IACjB;;IAUA,YAAY,GAAA;AACV,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK;QACrB,OAAO,IAAI,EAAE;AACX,YAAA,IAAI,GAAG,IAAI,CAAC,KAAK;QACnB;AACA,QAAA,OAAO,IAAI;IACb;;IAGA,WAAW,CAAC,GAAW,EAAE,KAAc,EAAA;AACrC,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE,KAAK,CAAC;IAC7D;;AAEA,IAAA,YAAY,CAAC,IAAY,EAAA;QACvB,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC;IAC/C;;AAEA,IAAA,YAAY,CAAC,IAAY,EAAE,KAAa,EAAE,SAAqC,EAAA;AAC7E,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC;IAC1E;;IAEA,aAAa,CAAC,GAAG,UAAoB,EAAA;AACnC,QAAA,OAAO,UAAU,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAClF;;AAEA,IAAA,QAAQ,CAAC,IAAY,EAAA;QACnB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC;IACpD;;AAEA,IAAA,WAAW,CAAC,IAAY,EAAA;QACtB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC;IACvD;;AAEA,IAAA,QAAQ,CAAC,IAAY,EAAA;QACnB,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;IACrD;AACA;;;;AAIG;IACH,WAAW,CAAC,IAAY,EAAE,KAAe,EAAA;AACvC,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IAC1D;AACA;;;;;AAKG;AACH,IAAA,QAAQ,CAAC,IAAiB,EAAA;QACxB,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC3C;;IAGA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;IACvB;;IAGA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACtB;;IAGA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;IACxC;;IAGA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ;IAChC;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,gBAAgB,EAAE;IACzB;IAEA,eAAe,GAAA;IACf;IAEA,kBAAkB,GAAA;IAClB;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;IAClC;IAEA,WAAW,GAAA;IACX;+GA5SoB,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,CAAA,cAAA,EAAA,cAAA,EA2FhB,gBAAgB,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAMhB,gBAAgB,kYAnGtB,CAAC,EAAC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAC,CAAC,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAE/C,eAAe,EAAA,UAAA,EAAA,CAAA;kBARpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,IAAI,EAAE;AACF,wBAAA,OAAO,EAAE,aAAa;AACtB,wBAAA,8BAA8B,EAAE,OAAO;AACvC,wBAAA,qBAAqB,EAAE,cAAc;AACxC,qBAAA;oBACD,SAAS,EAAE,CAAC,EAAC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAA,eAAiB,EAAC;AACnE,iBAAA;;sBA6EE;;sBAMA;;sBAGA;;sBAMA,KAAK;uBAAC,EAAC,SAAS,EAAE,gBAAgB,EAAC;;sBAMnC,KAAK;uBAAC,EAAC,SAAS,EAAE,gBAAgB,EAAC;;sBAanC,KAAK;uBAAC,YAAY;;sBAKlB,KAAK;uBAAC,iBAAiB;;sBAKvB,KAAK;uBAAC,kBAAkB;;sBAKxB,KAAK;uBAAC,kBAAkB;;sBAMxB;;sBAQA;;;AC5MH;;;;;;;AAOG;AAMH,SAAS,iBAAiB,CAAC,KAAc,EAAA;AACvC,IAAA,OAAO,KAAK,IAAI,IAAI,GAAG,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC;AAC3D;AAGM,MAAgB,oBAAqB,SAAQ,eAAe,CAAA;AAOhE;;;AAGG;IACH,IACI,QAAQ,KAAyB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5D,IAAI,QAAQ,CAAC,KAAyB,EAAA;AACpC,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE;AAC5B,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;YAC5B;QACF;IACF;AAKA,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;;;AArBU,QAAA,IAAA,CAAA,aAAa,GAAiB,MAAM,CAAC,YAAY,CAAC;AAkB3D,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAQ;QAIjD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;QAC5C,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,QAAQ,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5C;IACF;;IAGA,KAAK,CAAC,MAAoB,EAAE,OAAsB,EAAA;QAChD,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC;QAC9E;aAAO,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAC7C,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC;QACpC;aAAO;AACL,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;QAC7B;IACF;;IAGA,QAAQ,GAAA;AACN,QAAA,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,IAAE,EAAE,EAAE,IAAI,EAAE;IACrD;IAES,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE;QACnB,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACnD,QAAA,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;IACjD;+GArDoB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,mEALjC,iBAAiB,CAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAKJ,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADzC;;sBAYE,KAAK;uBAAC,EAAC,SAAS,EAAE,iBAAiB,EAAC;;sBAYpC;;;ACzCH;;;;;;;AAOG;AAQG,MAAgB,gBAAiB,SAAQ,oBAAoB,CAAA;;IAqBjE,IACI,QAAQ,GAAA,EAAa,OAAO,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,CAAA;IACxD,IAAI,QAAQ,CAAC,QAAsB,EAAA;AACjC,QAAA,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,QAAQ,CAAC;AAChD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;IAGA,IAAa,EAAE,KAAsB,OAAO,KAAK,CAAC,EAAE,CAAC,CAAA;IACrD,IAAa,EAAE,CAAC,KAAuB,EAAA;AACrC,QAAA,IAAI,KAAK,KAAK,KAAK,CAAC,EAAE,EAAE;AACtB,YAAA,KAAK,CAAC,EAAE,GAAG,KAAK;AAChB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;QAC1B;IACF;AAEA,IAAA,WAAA,GAAA;AAA0B,QAAA,KAAK,EAAE;QAnCzB,IAAA,CAAA,UAAU,GAAY,KAAK;AAEnC;;;AAGG;AACM,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAQ;AAEjC,QAAA,IAAA,CAAA,SAAS,GAA6B,MAAK,EAAE,CAAC;AAC9C,QAAA,IAAA,CAAA,UAAU,GAAa,MAAI,EAAC,CAAC;;QAOvC,IAAA,CAAA,IAAI,GAAkB,IAAI;IAmBS;;;AAInC,IAAA,gBAAgB,CAAC,EAAwB,EAAA;AACvC,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;AACS,IAAA,gBAAgB,CAAC,UAAwB,EAAE,SAAA,GAAqB,IAAI,EAAA;QAC3E,MAAM,OAAO,GAAG,KAAK,CAAC,gBAAgB,CAAC,UAAU,EAAE,SAAS,CAAC;AAC7D,QAAA,IAAI,OAAO,IAAI,SAAS,EAAE;AACxB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;QAC1B;AACA,QAAA,OAAO,OAAO;IAChB;;AAIA;;;AAGG;IACO,aAAa,GAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QACxB;IACF;IAES,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE;AAEnB,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;IAC9B;+GAxEoB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,iFAqBjB,gBAAgB,CAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FArBf,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBADrC;;sBAkBE;;sBAIA,KAAK;uBAAC,EAAC,SAAS,EAAE,gBAAgB,EAAC;;;ACpCtC;;;;;;;AAOG;AAMG,MAAgB,wBAAyB,SAAQ,gBAAgB,CAAA;AAKnE,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;QAHX,IAAA,CAAA,UAAU,GAAY,KAAK;IAI3B;+GAPkB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAD7C;;sBAGI;;;ACfL;;;;;;;AAOG;AA2BG,MAAgB,iBAAkB,SAAQ,eAAe,CAAA;AAX/D,IAAA,WAAA,GAAA;;AAYY,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;;QAWnB,IAAA,CAAA,QAAQ,GAAY,KAAK;;AAMrD,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAmB;AAwBhE,IAAA;;AArCC,IAAA,IACc,SAAS,GAAA;;AAErB,QAAA,OAAO,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;IACnD;AAWS,IAAA,WAAW,CAAC,OAAsB,EAAA;AACzC,QAAA,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC;AAE1B,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;QACpC,IAAI,MAAM,EAAE;AAEV,YAAA,IAAI,CAAC,aAAa,EAAE,WAAW,EAAE;AAEjC,YAAA,IAAI,MAAM,CAAC,YAAY,EAAE;gBACvB,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC;AAC1D,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AACvB,qBAAA,OAAO,CAAE,aAAqB,CAAC,MAAM,GAAC,SAAS,CAAC;AAChD,qBAAA,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzD;QACF;IACF;IAES,WAAW,GAAA;QAClB,KAAK,CAAC,WAAW,EAAE;AAEnB,QAAA,IAAI,CAAC,aAAa,EAAE,WAAW,EAAE;IACnC;+GAzCoB,iBAAiB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,mEAYlB,gBAAgB,CAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,eAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,SAAA,EAAA,YAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAZf,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAXtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,IAAI,EAAE;AACF,wBAAA,kBAAkB,EAAE,UAAU;AAC9B,wBAAA,iBAAiB,EAAE,IAAI;AACvB,wBAAA,mBAAmB,EAAE,mBAAmB;AACxC,wBAAA,wBAAwB,EAAE,wBAAwB;AAClD,wBAAA,yBAAyB,EAAE,yBAAyB;AACpD,wBAAA,aAAa,EAAE,cAAc;AAC7B,wBAAA,WAAW,EAAE,YAAY;AAC5B;AACJ,iBAAA;;sBAME,WAAW;uBAAC,OAAO;;sBAOnB,KAAK;uBAAC,EAAC,SAAS,EAAE,gBAAgB,EAAC;;sBAGnC;;sBAGA;;;ACpDH;;AAEG;;;;"}
1
+ {"version":3,"file":"cute-widgets-base-abstract.mjs","sources":["../../../../projects/cute-widgets/base/abstract/src/base-control.directive.ts","../../../../projects/cute-widgets/base/abstract/src/focusable-control.directive.ts","../../../../projects/cute-widgets/base/abstract/src/input-control.directive.ts","../../../../projects/cute-widgets/base/abstract/src/input-dropdown-control.directive.ts","../../../../projects/cute-widgets/base/abstract/src/layout-control.directive.ts","../../../../projects/cute-widgets/base/abstract/cute-widgets-base-abstract.ts"],"sourcesContent":["/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\nimport {\r\n Directive,\r\n ChangeDetectorRef,\r\n ElementRef,\r\n inject,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n SimpleChanges,\r\n Renderer2, AfterViewInit, OnInit, AfterContentInit, booleanAttribute, isDevMode, InjectionToken, DestroyRef,\r\n} from '@angular/core';\r\nimport {BooleanInput, coerceBooleanProperty} from \"@angular/cdk/coercion\";\r\nimport {Observable, Subscriber} from \"rxjs\";\r\nimport {RichThemeColor} from \"@cute-widgets/base/core\";\r\n\r\nexport interface ThematicControl {\r\n /** Theme color palette for the component. */\r\n color: RichThemeColor | undefined;\r\n /** Adds a linear gradient as background image to the backgrounds. */\r\n gradientFill: boolean;\r\n /** Default color to fall back to if no value is set. */\r\n defaultColor: RichThemeColor | undefined;\r\n}\r\n\r\nexport interface CuteWidget extends ThematicControl {\r\n id: string | undefined;\r\n role: string | undefined;\r\n element: Readonly<ElementRef<HTMLElement>>;\r\n owner: CuteWidget | null;\r\n disabled: boolean;\r\n tag: any;\r\n enable(): void;\r\n disable(): void;\r\n toggleDisabled(): void;\r\n hasClass(name: string): boolean;\r\n toggleClass(name: string, force?: boolean): boolean;\r\n getAttribute(name: string): string | null;\r\n setAttribute(name: string, value: string, namespace?: string | null | undefined): void;\r\n hasAttributes(...attributes: string[]): boolean;\r\n markForCheck(): void;\r\n}\r\n\r\n/** Widget's injection token */\r\nexport const CUTE_WIDGET = new InjectionToken<CuteWidget>(\"CUTE-WIDGET\");\r\n\r\n/**\r\n * This widget base class and each of its descendant should be used as a parent for classes decorated with `@Component`.\r\n * Attribute directives should not extend this class and its descendants to avoid property value conflicts.\r\n */\r\n@Directive({\r\n host: {\r\n 'class': 'cute-widget',\r\n '[class.cute-thematic-widget]': 'color',\r\n '[class.bg-gradient]': 'gradientFill',\r\n },\r\n providers: [{provide: CUTE_WIDGET, useExisting: CuteBaseControl}]\r\n})\r\nexport abstract class CuteBaseControl\r\n implements CuteWidget, OnInit, AfterViewInit, AfterContentInit, OnChanges, OnDestroy\r\n{\r\n private readonly _uniqueId: string | undefined;\r\n\r\n protected readonly _elementRef: ElementRef<HTMLElement> = inject(ElementRef);\r\n protected readonly _changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef);\r\n protected readonly _renderer: Renderer2 = inject(Renderer2);\r\n protected readonly _destroyRef: DestroyRef = inject(DestroyRef);\r\n\r\n /** Owner widget */\r\n readonly owner = inject(CUTE_WIDGET, {skipSelf: true, optional: true})\r\n\r\n /**\r\n * A list of subscribers that subscribed before the directive was initialized.\r\n * Should be notified during markInitialized.\r\n * Set to null after pending subscribers are notified, and should\r\n * not expect to be populated after.\r\n */\r\n private _pendingSubscribers: Subscriber<void>[] | null = [];\r\n\r\n protected get _nativeElement(): HTMLElement {\r\n return this._elementRef.nativeElement;\r\n }\r\n\r\n /**\r\n * Marks the state as initialized and notifies pending subscribers. Should be called at the end\r\n * of ngOnInit.\r\n */\r\n protected _markInitialized(): void {\r\n if (this.isInitialized && isDevMode()) {\r\n throw Error('CuteBaseControl error:/r/n'\r\n +'This directive has already been marked as initialized and '\r\n +'should not be called twice.',\r\n );\r\n }\r\n\r\n this._isInitialized = true;\r\n\r\n if (this._pendingSubscribers != null) {\r\n this._pendingSubscribers.forEach(this._notifySubscriber);\r\n this._pendingSubscribers = null;\r\n }\r\n }\r\n\r\n /** Emits and completes the subscriber stream (should only emit once). */\r\n private _notifySubscriber(subscriber: Subscriber<void>): void {\r\n subscriber.next();\r\n subscriber.complete();\r\n }\r\n\r\n /**\r\n * Observable stream that emits when the directive initializes. If already initialized, the\r\n * subscriber is stored to be notified once _markInitialized is called.\r\n */\r\n readonly initialized$:Observable<void> = new Observable<void>(subscriber => {\r\n // If initialized, immediately notify the subscriber. Otherwise, store the subscriber to notify\r\n // when _markInitialized is called.\r\n if (this.isInitialized) {\r\n this._notifySubscriber(subscriber);\r\n } else {\r\n this._pendingSubscribers!.push(subscriber);\r\n }\r\n });\r\n\r\n /** Whether this directive has been marked as initialized. */\r\n get isInitialized(): boolean {\r\n return this._isInitialized;\r\n }\r\n private _isInitialized: boolean = false;\r\n\r\n /** Gets a reference to the `ElementRef` object */\r\n get element(): Readonly<ElementRef<HTMLElement>> {\r\n return this._elementRef;\r\n }\r\n\r\n /** The element's identifier */\r\n @Input()\r\n get id(): string|undefined {return this._id};\r\n set id(value: string|undefined) {this._id = value;}\r\n private _id: string | undefined;\r\n\r\n /** Default color, which is set when no value is set to the `color` property */\r\n @Input() defaultColor: RichThemeColor | undefined;\r\n\r\n /** Theme color palette for the component. */\r\n @Input()\r\n get color(): RichThemeColor|undefined { return this._color ?? this.defaultColor ?? this.owner?.color; }\r\n set color(value: RichThemeColor|undefined) { this.setColor(value); }\r\n private _color: RichThemeColor | undefined;\r\n\r\n /** Adds a linear gradient as a background image to the backgrounds */\r\n @Input({transform: booleanAttribute})\r\n gradientFill: boolean = false;\r\n\r\n /**\r\n * Makes the host element not mutable, focusable, or even submitted with the form\r\n */\r\n @Input({transform: booleanAttribute})\r\n get disabled(): boolean { return this.getDisabledState(); }\r\n set disabled(value: BooleanInput) {\r\n if (coerceBooleanProperty(value) !== this._disabled) {\r\n this.setDisabledState(value);\r\n }\r\n }\r\n private _disabled: boolean = false;\r\n\r\n /**\r\n * Attached to the aria-label attribute of the host element.In most cases, aria-labelledby will\r\n * take precedence so this may be omitted.\r\n */\r\n @Input('aria-label')\r\n ariaLabel: string | null = null;\r\n /**\r\n * Users can specify the `aria-labelledby` attribute which will be forwarded to the input element\r\n */\r\n @Input('aria-labelledby')\r\n ariaLabelledby: string | null = null;\r\n /**\r\n * The 'aria-describedby' attribute is read after the element's label and field type.\r\n */\r\n @Input('aria-describedby')\r\n ariaDescribedby: string | null = null;\r\n /**\r\n * The 'aria-description' attribute for the content of the element.\r\n */\r\n @Input('aria-description')\r\n ariaDescription: string | null = null;\r\n /**\r\n * Provides semantic meaning to content, allowing screen readers and other tools to present and\r\n * support interaction with an object\r\n */\r\n @Input()\r\n get role(): string | undefined {return this._role;}\r\n set role(value: string|undefined) {\r\n this._role = (typeof value == \"string\" ? value.trim().toLowerCase() : \"\") || undefined;\r\n }\r\n private _role: string | undefined;\r\n\r\n /** Any arbitrary user data */\r\n @Input()\r\n tag: any;\r\n\r\n /** Returns the unique id for the visual hidden input control */\r\n protected get inputId(): string {\r\n return `${this.id || this._uniqueId}-input`;\r\n }\r\n\r\n protected constructor() {\r\n const generatedId = this.generateId().trim();\r\n if (generatedId.length > 0) {\r\n this._id = this._uniqueId = generatedId;\r\n }\r\n }\r\n\r\n /**\r\n * Sets the type of mouse cursor using a keyword, or load a specific icon to use.\r\n * @param cursor A mouse cursor keyword or icon\r\n * @returns The current mouse cursor\r\n */\r\n // async setCursor(cursor: MouseCursor|string): Promise<MouseCursor|string> {\r\n // const oldCursor = <MouseCursor> getComputedStyle(this._nativeElement).cursor;\r\n // this._nativeElement.style.cursor = cursor;\r\n // await yieldToMain();\r\n // return oldCursor;\r\n // }\r\n\r\n /**\r\n * Whether the option is disabled. Can be overridden in descendant classes\r\n * @returns Current disabled state\r\n */\r\n protected getDisabledState(): boolean {\r\n return this._disabled;\r\n }\r\n\r\n /**\r\n * Changes the `disabled` status of the component. Can be overridden in descendant classes\r\n * @param newState New boolean for `disabled` state\r\n * @param emitEvent Emit state change event\r\n * @returns Change result\r\n */\r\n protected setDisabledState(newState: BooleanInput, emitEvent?: boolean): boolean {\r\n const coercedState = coerceBooleanProperty(newState);\r\n if (coercedState !== this.disabled) {\r\n this._disabled = coercedState;\r\n Promise.resolve().then(()=>this.markForCheck());\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Sets a new color value. Can be overridden in descendant classes.\r\n * @param value New `ThemeColor` value\r\n * @returns Old color value\r\n */\r\n protected setColor(value: RichThemeColor | undefined): RichThemeColor | undefined {\r\n const oldColor = this._color;\r\n if (oldColor !== value) {\r\n this._color = value;\r\n this.markForCheck();\r\n }\r\n return oldColor;\r\n }\r\n\r\n /**\r\n * Returns an element's unique identifier that, if not empty, is assigned to `id` property as a default value.\r\n * Must be overridden in the descendant classes.\r\n * @abstract\r\n */\r\n protected abstract generateId(): string;\r\n\r\n /** Returns the root owner widget if it exists */\r\n getRootOwner(): CuteWidget | null {\r\n let root = this.owner;\r\n while (root) {\r\n root = root.owner;\r\n }\r\n return root;\r\n }\r\n\r\n /** Sets a property on a target element using the current Renderer implementation. */\r\n setProperty(key: string, value: unknown): void {\r\n this._renderer.setProperty(this._nativeElement, key, value);\r\n }\r\n /** Returns the value of a specified attribute on the component's host element. */\r\n getAttribute(name: string): string | null {\r\n return this._nativeElement.getAttribute(name);\r\n }\r\n /** Sets the value of an attribute on the component's host element */\r\n setAttribute(name: string, value: string, namespace?: string | null | undefined): void {\r\n this._renderer.setAttribute(this._nativeElement, name, value, namespace);\r\n }\r\n /** Gets whether the component has one of the given attributes. */\r\n hasAttributes(...attributes: string[]): boolean {\r\n return attributes.some(attribute => this._nativeElement.hasAttribute(attribute));\r\n }\r\n /** Adds a class to an element in the DOM. */\r\n addClass(name: string): void {\r\n this._renderer.addClass(this._nativeElement, name);\r\n }\r\n /** Removes a class from an element in the DOM. */\r\n removeClass(name: string): void {\r\n this._renderer.removeClass(this._nativeElement, name);\r\n }\r\n /** Returns a boolean value — _true_ if the element's class list contains the given token, otherwise _false_. */\r\n hasClass(name: string): boolean {\r\n return this._nativeElement.classList.contains(name);\r\n }\r\n /**\r\n * Adds a CSS class if it is not in the element's class list, otherwise remove it\r\n * @param name CSS class name\r\n * @param force If included, turns the toggle into a one way-only operation. If set to _false_, then the class name will only be removed, but not added. If set to _true_, then the class name will only be added, but not removed.\r\n */\r\n toggleClass(name: string, force?: boolean): boolean {\r\n return this._nativeElement.classList.toggle(name, force);\r\n }\r\n /**\r\n * Returns a boolean value indicating whether a _node_ is a descendant of the current node\r\n * @param node HTML element reference to test\r\n * @returns A boolean value that is `true` if _node_ is contained in the current node, `false` if not.\r\n * If the _node_ parameter is `null`, contains() always returns `false`.\r\n */\r\n contains(node: HTMLElement): boolean {\r\n return this._nativeElement.contains(node);\r\n }\r\n\r\n /** Enables the user interaction */\r\n enable(): void {\r\n this.disabled = false;\r\n }\r\n\r\n /** Disables the user interaction */\r\n disable(): void {\r\n this.disabled = true;\r\n }\r\n\r\n /** Explicitly marks the view as changed so that it can be checked again. */\r\n markForCheck(): void {\r\n this._changeDetectorRef.markForCheck();\r\n }\r\n \r\n /** Checks this view and its children. */\r\n detectChanges(): void {\r\n this._changeDetectorRef.detectChanges();\r\n }\r\n\r\n /** Toggles the `disabled` state of the component */\r\n toggleDisabled(): void {\r\n this.disabled = !this.disabled;\r\n }\r\n\r\n ngOnInit() {\r\n this._markInitialized();\r\n }\r\n\r\n ngAfterViewInit() {\r\n }\r\n\r\n ngAfterContentInit() {\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n}\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\nimport {Directive, EventEmitter, inject, Input, numberAttribute, Output} from '@angular/core';\r\nimport {FocusableOption, FocusMonitor, FocusOrigin, ListKeyManagerOption} from \"@angular/cdk/a11y\";\r\nimport {CuteBaseControl} from './base-control.directive';\r\nimport {RippleManager} from \"@cute-widgets/base/core/ripple\";\r\n\r\nfunction transformTabIndex(value: unknown): number | undefined {\r\n return value == null ? undefined : numberAttribute(value);\r\n}\r\n\r\n@Directive()\r\nexport abstract class CuteFocusableControl extends CuteBaseControl\r\n implements FocusableOption, ListKeyManagerOption\r\n{\r\n // If necessary, the `monitor` method should be called from descendant classes in one of the\r\n // directive/component's life circle methods\r\n protected readonly _focusMonitor: FocusMonitor = inject(FocusMonitor);\r\n\r\n /**\r\n * Allows making HTML elements un/focusable (usually with the Tab key, hence the name) and\r\n * determines their relative ordering for sequential focus navigation.\r\n */\r\n @Input({transform: transformTabIndex})\r\n get tabIndex(): number | undefined { return this._tabIndex; }\r\n set tabIndex(value: number | undefined) {\r\n if (value !== this._tabIndex) {\r\n this._tabIndex = value;\r\n if (this.isInitialized) {\r\n this.tabIndexChange.emit();\r\n }\r\n }\r\n }\r\n private _tabIndex: number | undefined;\r\n\r\n @Output() tabIndexChange = new EventEmitter<void>();\r\n\r\n protected constructor() {\r\n super();\r\n const tabInd = this.getAttribute(\"tabindex\");\r\n if (tabInd) {\r\n this.tabIndex = numberAttribute(tabInd, 0);\r\n }\r\n }\r\n\r\n /** Set focus on this component */\r\n focus(origin?: FocusOrigin, options?: FocusOptions): void {\r\n if (origin) {\r\n this._focusMonitor.focusVia(this._elementRef.nativeElement, origin, options);\r\n } else if (options && !Array.isArray(options)) {\r\n this._nativeElement.focus(options);\r\n } else {\r\n this._nativeElement.focus();\r\n }\r\n }\r\n\r\n /** Gets the current label of the component. Part of `ListKeyManagerOption` interface. */\r\n getLabel(): string {\r\n return (this._nativeElement.textContent||\"\").trim();\r\n }\r\n\r\n override ngOnDestroy() {\r\n super.ngOnDestroy();\r\n this._focusMonitor.stopMonitoring(this._elementRef);\r\n RippleManager.removeRipple(this._nativeElement);\r\n }\r\n\r\n}\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\nimport {booleanAttribute, Directive, Input} from '@angular/core';\r\nimport {ControlValueAccessor} from \"@angular/forms\";\r\nimport {BooleanInput, coerceBooleanProperty} from \"@angular/cdk/coercion\";\r\nimport {Subject} from \"rxjs\";\r\nimport {CuteFocusableControl} from './focusable-control.directive';\r\n\r\n@Directive()\r\nexport abstract class CuteInputControl extends CuteFocusableControl implements ControlValueAccessor {\r\n\r\n private _isTouched: boolean = false;\r\n\r\n /**\r\n * Emits whenever the component state changes and should cause the parent\r\n * form-field to update. Implemented as part of `CuteFormFieldControl`.\r\n */\r\n readonly stateChanges = new Subject<void>();\r\n\r\n protected _onChange: (value: unknown) => void = () => {};\r\n protected _onTouched: Function = ()=>{};\r\n\r\n /** The value attribute of the native input element */\r\n abstract value: any;\r\n\r\n /** Name value will be applied to the input element if present */\r\n @Input()\r\n name: string | null = null;\r\n\r\n /** Whether the element's value input is required. */\r\n @Input({transform: booleanAttribute})\r\n get required(): boolean {return this._required ?? false;}\r\n set required(newValue: BooleanInput) {\r\n this._required = coerceBooleanProperty(newValue);\r\n this.stateChanges.next();\r\n }\r\n private _required: boolean | undefined;\r\n\r\n override get id(): string|undefined {return super.id;}\r\n override set id(value: string|undefined) {\r\n if (value !== super.id) {\r\n super.id = value;\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n protected constructor() { super(); }\r\n\r\n /* ControlValueAccessor interface */\r\n //++\r\n registerOnChange(fn: (value: any) => void): void {\r\n this._onChange = fn;\r\n }\r\n registerOnTouched(fn: () => void): void {\r\n this._onTouched = fn;\r\n }\r\n override setDisabledState(isDisabled: BooleanInput, emitEvent: boolean = true): boolean {\r\n const changed = super.setDisabledState(isDisabled, emitEvent);\r\n if (changed && emitEvent) {\r\n this.stateChanges.next();\r\n }\r\n return changed;\r\n }\r\n abstract writeValue(obj: any): void;\r\n //--\r\n\r\n /**\r\n * Mark widget gets a touched state\r\n * @protected\r\n */\r\n protected markAsTouched() {\r\n if (!this._isTouched) {\r\n this._onTouched();\r\n this._isTouched = true;\r\n }\r\n }\r\n\r\n override ngOnDestroy() {\r\n super.ngOnDestroy();\r\n\r\n this.stateChanges.complete();\r\n }\r\n\r\n}\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\nimport {Directive, Input} from \"@angular/core\";\r\nimport {CuteInputControl} from \"./input-control.directive\";\r\nimport {Expandable} from \"./expandable.interface\";\r\n\r\n@Directive()\r\nexport abstract class CuteInputDropdownControl extends CuteInputControl implements Expandable {\r\n\r\n @Input()\r\n withShadow: boolean = false;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n /** Expandable interface */\r\n abstract open(): void;\r\n abstract close(): void;\r\n abstract toggle(): void;\r\n\r\n abstract get expanded(): boolean;\r\n}\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\nimport {\r\n booleanAttribute,\r\n Directive,\r\n EventEmitter,\r\n HostBinding,\r\n inject,\r\n Input,\r\n Output,\r\n SimpleChanges\r\n} from \"@angular/core\";\r\nimport {CuteBaseControl} from \"./base-control.directive\";\r\nimport {bsBreakpoints, LayoutBreakpoint, toBgCssClass} from \"@cute-widgets/base/core\";\r\nimport {BreakpointObserver, BreakpointState} from '@angular/cdk/layout';\r\nimport {Subscription} from 'rxjs';\r\n\r\n@Directive({\r\n host: {\r\n '[class.clearfix]': 'clearfix',\r\n '[attr.tabindex]': '-1',\r\n '[attr.aria-label]': 'ariaLabel || null',\r\n '[attr.aria-labelledby]': 'ariaLabelledby || null',\r\n '[attr.aria-describedby]': 'ariaDescribedby || null',\r\n '[attr.role]': 'role || null',\r\n '[attr.id]': 'id || null',\r\n }\r\n})\r\nexport abstract class CuteLayoutControl extends CuteBaseControl {\r\n protected breakpointObserver = inject(BreakpointObserver);\r\n private _subscription: Subscription | undefined;\r\n\r\n /** Returns CSS-class list */\r\n @HostBinding(\"class\")\r\n protected get classList(): string {\r\n // We interpret `color` value as a background color of the container\r\n return this.color ? toBgCssClass(this.color) : \"\";\r\n }\r\n\r\n /** Clears floated content within a container */\r\n @Input({transform: booleanAttribute}) clearfix: boolean = false;\r\n\r\n /** Symbolic name of the screen minimum width which determines how the responsive layout behaves across device or viewport sizes. */\r\n @Input() breakpoint: LayoutBreakpoint | LayoutBreakpoint[] | undefined;\r\n\r\n /** Event that is raised when the width of viewport is changed and crosses the size of `breakpoint`'s value. */\r\n @Output() breakpointState = new EventEmitter<BreakpointState>();\r\n\r\n override ngOnChanges(changes: SimpleChanges) {\r\n super.ngOnChanges(changes);\r\n\r\n const change = changes[\"breakpoint\"];\r\n if (change) {\r\n\r\n this._subscription?.unsubscribe();\r\n\r\n if (change.currentValue) {\r\n let bpArray: string[];\r\n if (Array.isArray(change.currentValue)) {\r\n bpArray = change.currentValue;\r\n } else {\r\n bpArray = [change.currentValue];\r\n }\r\n const queries = bpArray.map(value => {\r\n const label = bsBreakpoints.getLabel(value);\r\n return bsBreakpoints.getQuery(label+\"AndDown\") ?? \"\";\r\n });\r\n this._subscription = this.breakpointObserver\r\n .observe( queries )\r\n .subscribe(state => this.breakpointState.emit(state));\r\n }\r\n }\r\n }\r\n\r\n override ngOnDestroy() {\r\n super.ngOnDestroy();\r\n\r\n this._subscription?.unsubscribe();\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -575,7 +575,7 @@ class CuteButtonToggle extends CuteButtonBase {
575
575
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteButtonToggle, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
576
576
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: CuteButtonToggle, isStandalone: true, selector: "cute-button-toggle", inputs: { name: "name", value: "value", checked: ["checked", "checked", booleanAttribute] }, outputs: { change: "change" }, host: { listeners: { "focus": "focus()", "click": "_onButtonClick()" }, properties: { "class.cute-button-toggle-standalone": "!buttonToggleGroup", "class.active": "checked", "attr.aria-label": "null", "attr.aria-labelledby": "null", "attr.name": "null", "style.--bs-btn-hover-color": "'var(--bs-'+toThemeColor(color)+'-text-emphasis)'" }, classAttribute: "cute-button-toggle" }, providers: [
577
577
  { provide: CUTE_BUTTON_BASE, useExisting: CuteButtonToggle }
578
- ], exportAs: ["cuteButtonToggle"], usesInheritance: true, ngImport: i0, template: "<!--\r\n For capturing HTML-elements such as <i class..> or <img src=\"\"...> and others\r\n we need apply [cuteButtonIcon] attribute to them.\r\n-->\r\n<span class=\"cute-icon-wrapper\">\r\n <ng-content select=\".material-icons:not([iconPositionEnd]),\r\n .bi:not([iconPositionEnd]),\r\n cute-icon:not([iconPositionEnd]),\r\n cute-avatar:not([iconPositionEnd]),\r\n [cuteButtonIcon]:not([iconPositionEnd])\">\r\n </ng-content>\r\n</span>\r\n\r\n<span class=\"cute-button-label\">\r\n <ng-content>\r\n @if(visuallyHiddenLabel) {\r\n <span class=\"visually-hidden\"> {{visuallyHiddenLabel}} </span>\r\n }\r\n </ng-content>\r\n</span>\r\n\r\n<span class=\"cute-icon-wrapper\">\r\n <ng-content select=\".material-icons[iconPositionEnd],\r\n .bi:[iconPositionEnd],\r\n cute-icon[iconPositionEnd],\r\n cute-avatar:[iconPositionEnd],\r\n [cuteButtonIcon][iconPositionEnd]\">\r\n </ng-content>\r\n</span>\r\n", styles: [".cute-ripple-element{--cute-ripple-duration: .5s;--cute-ripple-bg-color: rgba(255, 255, 255, .18);position:absolute;border-radius:50%;pointer-events:none;transform:scale3d(0,0,0);animation:cute-ripple-element-animation var(--cute-ripple-duration) cubic-bezier(.65,.05,.36,1);background-color:var(--cute-ripple-bg-color);will-change:transform,opacity}@media (forced-colors: active){.cute-ripple-element{display:none}}@keyframes cute-ripple-element-animation{to{transform:scale(8);opacity:0}}.cute-button,.cute-anchor{position:relative;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;overflow:visible;box-shadow:none}.cute-button:has(>:not(.cute-ripple):nth-child(2)),.cute-anchor:has(>:not(.cute-ripple):nth-child(2)){gap:.5em}.cute-button.dropdown-toggle,.cute-anchor.dropdown-toggle{gap:.375em}.cute-button.dropdown-toggle-split,.cute-anchor.dropdown-toggle-split{gap:0}.cute-button .cute-icon-wrapper,.cute-anchor .cute-icon-wrapper{display:contents}.cute-button .cute-icon-wrapper:empty,.cute-anchor .cute-icon-wrapper:empty{display:none}.cute-button .cute-button-label,.cute-anchor .cute-button-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cute-button .cute-button-label .badge,.cute-anchor .cute-button-label .badge{line-height:var(--bs-btn-line-height);top:0}.cute-button .cute-button-label:empty,.cute-anchor .cute-button-label:empty{display:none}.cute-button.cute-button-disabled-interactive,.cute-anchor.cute-button-disabled-interactive{cursor:pointer}.cute-button.cute-button-disabled-interactive:disabled,.cute-button.cute-button-disabled-interactive.disabled,.cute-anchor.cute-button-disabled-interactive:disabled,.cute-anchor.cute-button-disabled-interactive.disabled{pointer-events:auto;cursor:default;box-shadow:none;--bs-btn-active-bg: var(--bs-btn-disabled-bg);--bs-btn-active-border-color: var(--bs-btn-disabled-border-color);--bs-btn-active-color: var(--bs-btn-disabled-color)}.cute-button.cute-button-disabled-interactive:disabled.cute-icon-button,.cute-button.cute-button-disabled-interactive.disabled.cute-icon-button,.cute-anchor.cute-button-disabled-interactive:disabled.cute-icon-button,.cute-anchor.cute-button-disabled-interactive.disabled.cute-icon-button{--bs-btn-active-bg: transparent;--bs-btn-active-border-color: transparent;--bs-btn-hover-bg: transparent}.cute-button.cute-base-button,.cute-anchor.cute-base-button{font-weight:500;--cute-base-button-color-rgb: var(--bs-body-color-rgb);--bs-btn-active-bg: rgba(var(--cute-base-button-color-rgb), .08);--bs-btn-active-border-color: rgba(var(--cute-base-button-color-rgb), .12);--bs-btn-disabled-border-color: transparent;--bs-btn-hover-bg: rgba(var(--cute-base-button-color-rgb), .06)}.cute-button.cute-flat-button.cute-unthemed,.cute-anchor.cute-flat-button.cute-unthemed{--bs-btn-bg: var(--bs-tertiary-bg);--bs-btn-hover-bg: var(--bs-secondary-bg);--bs-btn-active-bg: var(--bs-secondary-bg);border-color:transparent}.cute-button.raised,.cute-anchor.raised{box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f;transition:box-shadow .2s cubic-bezier(.4,0,.2,1)}.cute-button.raised:hover,.cute-button.raised:focus,.cute-anchor.raised:hover,.cute-anchor.raised:focus{box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.cute-button.raised:active,.cute-anchor.raised:active{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cute-button.raised:disabled,.cute-button.raised.disabled,.cute-anchor.raised:disabled,.cute-anchor.raised.disabled{box-shadow:0 0 #0003,0 0 #00000024,0 0 #0000001f}.cute-button.btn-light:disabled,.cute-button.btn-light.disabled,.cute-anchor.btn-light:disabled,.cute-anchor.btn-light.disabled{background-color:#0000001a}.cute-button>[role=img],.cute-button i[class],.cute-anchor>[role=img],.cute-anchor i[class]{align-self:center;pointer-events:none;overflow:visible}.cute-button.cute-fab-button,.cute-anchor.cute-fab-button{--icon-size: 40px;width:var(--icon-size);height:var(--icon-size);min-width:var(--icon-size);line-height:1;padding:0;padding-top:revert;gap:0;border-radius:50%;flex-shrink:0;-webkit-tap-highlight-color:rgba(0,0,0,0);box-shadow:0 3px 5px -1px #0003,0 6px 10px #00000024,0 1px 18px #0000001f}.cute-button.cute-fab-button[magnitude=largest],.cute-anchor.cute-fab-button[magnitude=largest]{--icon-size: 64px}.cute-button.cute-fab-button[magnitude=larger],.cute-anchor.cute-fab-button[magnitude=larger]{--icon-size: 56px}.cute-button.cute-fab-button[magnitude=large],.cute-anchor.cute-fab-button[magnitude=large]{--icon-size: 48px}.cute-button.cute-fab-button[magnitude=middle],.cute-anchor.cute-fab-button[magnitude=middle]{--icon-size: 40px}.cute-button.cute-fab-button[magnitude=small],.cute-anchor.cute-fab-button[magnitude=small]{--icon-size: 32px}.cute-button.cute-fab-button[magnitude=smaller],.cute-anchor.cute-fab-button[magnitude=smaller]{--icon-size: 24px}.cute-button.cute-fab-button[magnitude=smallest],.cute-anchor.cute-fab-button[magnitude=smallest]{--icon-size: 16px}.cute-button.cute-fab-button svg,.cute-anchor.cute-fab-button svg{vertical-align:baseline}.cute-button.cute-fab-button:active,.cute-anchor.cute-fab-button:active{box-shadow:0 7px 8px -4px #0003,0 12px 17px 2px #00000024,0 5px 22px 4px #0000001f}.cute-button.cute-fab-button:active.btn-light,.cute-anchor.cute-fab-button:active.btn-light{border-color:#00000040}.cute-button.cute-fab-button:hover,.cute-button.cute-fab-button.cdk-focused,.cute-anchor.cute-fab-button:hover,.cute-anchor.cute-fab-button.cdk-focused{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cute-button.cute-fab-button:disabled,.cute-button.cute-fab-button.disabled,.cute-anchor.cute-fab-button:disabled,.cute-anchor.cute-fab-button.disabled{border:0;box-shadow:none}.cute-button.cute-fab-button:disabled>[role=img],.cute-button.cute-fab-button:disabled i[class],.cute-button.cute-fab-button.disabled>[role=img],.cute-button.cute-fab-button.disabled i[class],.cute-anchor.cute-fab-button:disabled>[role=img],.cute-anchor.cute-fab-button:disabled i[class],.cute-anchor.cute-fab-button.disabled>[role=img],.cute-anchor.cute-fab-button.disabled i[class]{color:#00000061!important}.cute-button.cute-icon-button,.cute-anchor.cute-icon-button{overflow:hidden;border-radius:50%;border:0;padding:0;gap:0!important;--icon-size: 40px;width:var(--icon-size);height:var(--icon-size);min-width:var(--icon-size);line-height:1;--cute-icon-button-color-rgb: var(--bs-body-color-rgb);--bs-btn-active-bg: rgba(var(--cute-icon-button-color-rgb), .12);--bs-btn-active-border-color: rgba(var(--cute-icon-button-color-rgb), .12);--bs-btn-hover-bg: rgba(var(--cute-icon-button-color-rgb), .06)}.cute-button.cute-icon-button[magnitude=largest],.cute-anchor.cute-icon-button[magnitude=largest]{--icon-size: 64px}.cute-button.cute-icon-button[magnitude=larger],.cute-anchor.cute-icon-button[magnitude=larger]{--icon-size: 56px}.cute-button.cute-icon-button[magnitude=large],.cute-anchor.cute-icon-button[magnitude=large]{--icon-size: 48px}.cute-button.cute-icon-button[magnitude=middle],.cute-anchor.cute-icon-button[magnitude=middle]{--icon-size: 40px}.cute-button.cute-icon-button[magnitude=small],.cute-anchor.cute-icon-button[magnitude=small]{--icon-size: 32px}.cute-button.cute-icon-button[magnitude=smaller],.cute-anchor.cute-icon-button[magnitude=smaller]{--icon-size: 24px}.cute-button.cute-icon-button[magnitude=smallest],.cute-anchor.cute-icon-button[magnitude=smallest]{--icon-size: 16px}.cute-button.cute-icon-button svg,.cute-anchor.cute-icon-button svg{vertical-align:baseline}.cute-button.cute-icon-button.cdk-focused,.cute-anchor.cute-icon-button.cdk-focused{--bs-btn-hover-bg: rgba(var(--cute-icon-button-color-rgb), .04)}.cute-btn-xxs,.cute-btn-group-xxs>.btn{--bs-btn-padding-y: .25rem;--bs-btn-padding-x: .5rem;--bs-btn-font-size: .5rem}.cute-btn-xs,.cute-btn-group-xs>.btn{--bs-btn-padding-y: .25rem;--bs-btn-padding-x: .5rem;--bs-btn-font-size: .75rem}.cute-btn-xl,.cute-btn-group-xl>.btn{--bs-btn-padding-y: .5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size: 1.5rem}.cute-btn-xxl,.cute-btn-group-xxl>.btn{--bs-btn-padding-y: .5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size: 2.5rem}[dir=rtl] .btn-group>.btn:not(:first-child):not(.dropdown-toggle),[dir=rtl] .btn-group>.btn.dropdown-toggle-split:last-child,[dir=rtl] .btn-group>.btn-group:not(:first-child)>.btn{border-radius:0}[dir=rtl] .btn-group>.btn:nth-child(n+3),[dir=rtl] .btn-group>:not(.btn-check)+.btn,[dir=rtl] .btn-group>.btn-group:not(:last-child)>.btn{border-radius:0 var(--bs-btn-border-radius) var(--bs-btn-border-radius) 0}[dir=rtl] .btn-group>.btn:first-child:not(.dropdown-toggle),[dir=rtl] .btn-group>.btn.dropdown-toggle-split:first-child,[dir=rtl] .btn-group>.btn-group:first-child>.btn{border-radius:0 var(--bs-btn-border-radius) var(--bs-btn-border-radius) 0}[dir=rtl] .btn-group>.btn:last-child:not(.dropdown-toggle),[dir=rtl] .btn-group>.btn.dropdown-toggle-split:last-child,[dir=rtl] .btn-group>.btn-group:last-child>.btn{border-radius:var(--bs-btn-border-radius) 0 0 var(--bs-btn-border-radius)}.cute-button-expandable{padding:.25rem .5rem;font-weight:600;color:var(--bs-emphasis-color);background-color:transparent}.cute-button-expandable:hover,.cute-button-expandable:focus{color:rgba(var(--bs-emphasis-color-rgb),.85);background-color:var(--bs-tertiary-bg)}.cute-button-expandable:before{width:1.25em;line-height:0;content:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='rgba%280,0,0,.5%29' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M5 14l6-6-6-6'/%3e%3c/svg%3e\");transition:transform .35s ease;transform-origin:.5em 50%;transform:scale(.85)}[data-bs-theme=dark] .cute-button-expandable:before{content:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='rgba%28255,255,255,.5%29' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M5 14l6-6-6-6'/%3e%3c/svg%3e\")}[dir=rtl] .cute-button-expandable:before{transform:rotate(180deg) scale(.85);margin-left:.25em;text-align:end}.cute-button-expandable[aria-expanded=true]{color:rgba(var(--bs-emphasis-color-rgb),.85)}.cute-button-expandable[aria-expanded=true]:before{transform:rotate(90deg) scale(.85)}\n", ".cute-button-toggle{--bs-btn-hover-bg: transparent}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
578
+ ], exportAs: ["cuteButtonToggle"], usesInheritance: true, ngImport: i0, template: "<!--\r\n For capturing HTML-elements such as <i class..> or <img src=\"\"...> and others\r\n we need apply [cuteButtonIcon] attribute to them.\r\n-->\r\n<span class=\"cute-icon-wrapper\">\r\n <ng-content select=\".material-icons:not([iconPositionEnd]),\r\n .bi:not([iconPositionEnd]),\r\n cute-icon:not([iconPositionEnd]),\r\n cute-avatar:not([iconPositionEnd]),\r\n [cuteButtonIcon]:not([iconPositionEnd])\">\r\n </ng-content>\r\n</span>\r\n\r\n<span class=\"cute-button-label\" [class.cute-button-label__wrap]=\"wrapLabel\">\r\n <ng-content>\r\n @if(visuallyHiddenLabel) {\r\n <span class=\"visually-hidden\"> {{visuallyHiddenLabel}} </span>\r\n }\r\n </ng-content>\r\n</span>\r\n\r\n<span class=\"cute-icon-wrapper\">\r\n <ng-content select=\".material-icons[iconPositionEnd],\r\n .bi:[iconPositionEnd],\r\n cute-icon[iconPositionEnd],\r\n cute-avatar:[iconPositionEnd],\r\n [cuteButtonIcon][iconPositionEnd]\">\r\n </ng-content>\r\n</span>\r\n", styles: [".cute-ripple-element{--cute-ripple-duration: .5s;--cute-ripple-bg-color: rgba(255, 255, 255, .18);position:absolute;border-radius:50%;pointer-events:none;transform:scale3d(0,0,0);animation:cute-ripple-element-animation var(--cute-ripple-duration) cubic-bezier(.65,.05,.36,1);background-color:var(--cute-ripple-bg-color);will-change:transform,opacity}@media (forced-colors: active){.cute-ripple-element{display:none}}@keyframes cute-ripple-element-animation{to{transform:scale(8);opacity:0}}.cute-button,.cute-anchor{position:relative;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;overflow:visible;box-shadow:none}.cute-button:has(>:nth-child(2)),.cute-anchor:has(>:nth-child(2)){gap:.5em}.cute-button.dropdown-toggle,.cute-anchor.dropdown-toggle{gap:.375em}.cute-button.dropdown-toggle-split,.cute-anchor.dropdown-toggle-split{gap:0}.cute-button .cute-icon-wrapper,.cute-anchor .cute-icon-wrapper{display:contents}.cute-button .cute-icon-wrapper:empty,.cute-anchor .cute-icon-wrapper:empty{display:none}.cute-button .cute-button-label:not(.cute-button-label__wrap),.cute-anchor .cute-button-label:not(.cute-button-label__wrap){min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cute-button .cute-button-label .badge,.cute-anchor .cute-button-label .badge{line-height:var(--bs-btn-line-height);top:0}.cute-button .cute-button-label:empty,.cute-anchor .cute-button-label:empty{display:none}.cute-button.cute-button-disabled-interactive,.cute-anchor.cute-button-disabled-interactive{cursor:pointer}.cute-button.cute-button-disabled-interactive:disabled,.cute-button.cute-button-disabled-interactive.disabled,.cute-anchor.cute-button-disabled-interactive:disabled,.cute-anchor.cute-button-disabled-interactive.disabled{pointer-events:auto;cursor:default;box-shadow:none;--bs-btn-active-bg: var(--bs-btn-disabled-bg);--bs-btn-active-border-color: var(--bs-btn-disabled-border-color);--bs-btn-active-color: var(--bs-btn-disabled-color)}.cute-button.cute-button-disabled-interactive:disabled.cute-icon-button,.cute-button.cute-button-disabled-interactive.disabled.cute-icon-button,.cute-anchor.cute-button-disabled-interactive:disabled.cute-icon-button,.cute-anchor.cute-button-disabled-interactive.disabled.cute-icon-button{--bs-btn-active-bg: transparent;--bs-btn-active-border-color: transparent;--bs-btn-hover-bg: transparent}.cute-button.cute-base-button,.cute-anchor.cute-base-button{font-weight:500;--cute-base-button-color-rgb: var(--bs-body-color-rgb);--bs-btn-active-bg: rgba(var(--cute-base-button-color-rgb), .08);--bs-btn-active-border-color: rgba(var(--cute-base-button-color-rgb), .12);--bs-btn-disabled-border-color: transparent;--bs-btn-hover-bg: rgba(var(--cute-base-button-color-rgb), .06)}.cute-button.cute-flat-button.cute-unthemed,.cute-anchor.cute-flat-button.cute-unthemed{--bs-btn-bg: var(--bs-tertiary-bg);--bs-btn-hover-bg: var(--bs-secondary-bg);--bs-btn-active-bg: var(--bs-secondary-bg);border-color:transparent}.cute-button.raised,.cute-anchor.raised{box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f;transition:box-shadow .2s cubic-bezier(.4,0,.2,1)}.cute-button.raised:hover,.cute-button.raised:focus,.cute-anchor.raised:hover,.cute-anchor.raised:focus{box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.cute-button.raised:active,.cute-anchor.raised:active{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cute-button.raised:disabled,.cute-button.raised.disabled,.cute-anchor.raised:disabled,.cute-anchor.raised.disabled{box-shadow:0 0 #0003,0 0 #00000024,0 0 #0000001f}.cute-button.btn-light:disabled,.cute-button.btn-light.disabled,.cute-anchor.btn-light:disabled,.cute-anchor.btn-light.disabled{background-color:#0000001a}.cute-button>[role=img],.cute-button i[class],.cute-anchor>[role=img],.cute-anchor i[class]{align-self:center;pointer-events:none;overflow:visible}.cute-button.cute-fab-button,.cute-anchor.cute-fab-button{--icon-size: 40px;width:var(--icon-size);height:var(--icon-size);min-width:var(--icon-size);line-height:1;padding:0;padding-top:revert;gap:0;border-radius:50%;flex-shrink:0;-webkit-tap-highlight-color:rgba(0,0,0,0);box-shadow:0 3px 5px -1px #0003,0 6px 10px #00000024,0 1px 18px #0000001f}.cute-button.cute-fab-button[magnitude=largest],.cute-anchor.cute-fab-button[magnitude=largest]{--icon-size: 64px}.cute-button.cute-fab-button[magnitude=larger],.cute-anchor.cute-fab-button[magnitude=larger]{--icon-size: 56px}.cute-button.cute-fab-button[magnitude=large],.cute-anchor.cute-fab-button[magnitude=large]{--icon-size: 48px}.cute-button.cute-fab-button[magnitude=middle],.cute-anchor.cute-fab-button[magnitude=middle]{--icon-size: 40px}.cute-button.cute-fab-button[magnitude=small],.cute-anchor.cute-fab-button[magnitude=small]{--icon-size: 32px}.cute-button.cute-fab-button[magnitude=smaller],.cute-anchor.cute-fab-button[magnitude=smaller]{--icon-size: 24px}.cute-button.cute-fab-button[magnitude=smallest],.cute-anchor.cute-fab-button[magnitude=smallest]{--icon-size: 16px}.cute-button.cute-fab-button svg,.cute-anchor.cute-fab-button svg{vertical-align:baseline}.cute-button.cute-fab-button:active,.cute-anchor.cute-fab-button:active{box-shadow:0 7px 8px -4px #0003,0 12px 17px 2px #00000024,0 5px 22px 4px #0000001f}.cute-button.cute-fab-button:active.btn-light,.cute-anchor.cute-fab-button:active.btn-light{border-color:#00000040}.cute-button.cute-fab-button:hover,.cute-button.cute-fab-button.cdk-focused,.cute-anchor.cute-fab-button:hover,.cute-anchor.cute-fab-button.cdk-focused{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cute-button.cute-fab-button:disabled,.cute-button.cute-fab-button.disabled,.cute-anchor.cute-fab-button:disabled,.cute-anchor.cute-fab-button.disabled{border:0;box-shadow:none}.cute-button.cute-fab-button:disabled>[role=img],.cute-button.cute-fab-button:disabled i[class],.cute-button.cute-fab-button.disabled>[role=img],.cute-button.cute-fab-button.disabled i[class],.cute-anchor.cute-fab-button:disabled>[role=img],.cute-anchor.cute-fab-button:disabled i[class],.cute-anchor.cute-fab-button.disabled>[role=img],.cute-anchor.cute-fab-button.disabled i[class]{color:#00000061!important}.cute-button.cute-icon-button,.cute-anchor.cute-icon-button{overflow:hidden;border-radius:50%;border:0;padding:0;gap:0!important;--icon-size: 40px;width:var(--icon-size);height:var(--icon-size);min-width:var(--icon-size);line-height:1;--cute-icon-button-color-rgb: var(--bs-body-color-rgb);--bs-btn-active-bg: rgba(var(--cute-icon-button-color-rgb), .12);--bs-btn-active-border-color: rgba(var(--cute-icon-button-color-rgb), .12);--bs-btn-hover-bg: rgba(var(--cute-icon-button-color-rgb), .06)}.cute-button.cute-icon-button[magnitude=largest],.cute-anchor.cute-icon-button[magnitude=largest]{--icon-size: 64px}.cute-button.cute-icon-button[magnitude=larger],.cute-anchor.cute-icon-button[magnitude=larger]{--icon-size: 56px}.cute-button.cute-icon-button[magnitude=large],.cute-anchor.cute-icon-button[magnitude=large]{--icon-size: 48px}.cute-button.cute-icon-button[magnitude=middle],.cute-anchor.cute-icon-button[magnitude=middle]{--icon-size: 40px}.cute-button.cute-icon-button[magnitude=small],.cute-anchor.cute-icon-button[magnitude=small]{--icon-size: 32px}.cute-button.cute-icon-button[magnitude=smaller],.cute-anchor.cute-icon-button[magnitude=smaller]{--icon-size: 24px}.cute-button.cute-icon-button[magnitude=smallest],.cute-anchor.cute-icon-button[magnitude=smallest]{--icon-size: 16px}.cute-button.cute-icon-button svg,.cute-anchor.cute-icon-button svg{vertical-align:baseline}.cute-button.cute-icon-button.cdk-focused,.cute-anchor.cute-icon-button.cdk-focused{--bs-btn-hover-bg: rgba(var(--cute-icon-button-color-rgb), .04)}.cute-btn-xxs,.cute-btn-group-xxs>.btn{--bs-btn-padding-y: .25rem;--bs-btn-padding-x: .5rem;--bs-btn-font-size: .5rem}.cute-btn-xs,.cute-btn-group-xs>.btn{--bs-btn-padding-y: .25rem;--bs-btn-padding-x: .5rem;--bs-btn-font-size: .75rem}.cute-btn-xl,.cute-btn-group-xl>.btn{--bs-btn-padding-y: .5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size: 1.5rem}.cute-btn-xxl,.cute-btn-group-xxl>.btn{--bs-btn-padding-y: .5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size: 2.5rem}[dir=rtl] .btn-group>.btn:not(:first-child):not(.dropdown-toggle),[dir=rtl] .btn-group>.btn.dropdown-toggle-split:last-child,[dir=rtl] .btn-group>.btn-group:not(:first-child)>.btn{border-radius:0}[dir=rtl] .btn-group>.btn:nth-child(n+3),[dir=rtl] .btn-group>:not(.btn-check)+.btn,[dir=rtl] .btn-group>.btn-group:not(:last-child)>.btn{border-radius:0 var(--bs-btn-border-radius) var(--bs-btn-border-radius) 0}[dir=rtl] .btn-group>.btn:first-child:not(.dropdown-toggle),[dir=rtl] .btn-group>.btn.dropdown-toggle-split:first-child,[dir=rtl] .btn-group>.btn-group:first-child>.btn{border-radius:0 var(--bs-btn-border-radius) var(--bs-btn-border-radius) 0}[dir=rtl] .btn-group>.btn:last-child:not(.dropdown-toggle),[dir=rtl] .btn-group>.btn.dropdown-toggle-split:last-child,[dir=rtl] .btn-group>.btn-group:last-child>.btn{border-radius:var(--bs-btn-border-radius) 0 0 var(--bs-btn-border-radius)}.cute-button-expandable{padding:.25rem .5rem;font-weight:600;color:var(--bs-emphasis-color);background-color:transparent}.cute-button-expandable:hover,.cute-button-expandable:focus{color:rgba(var(--bs-emphasis-color-rgb),.85);background-color:var(--bs-tertiary-bg)}.cute-button-expandable:before{width:1.25em;line-height:0;content:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='rgba%280,0,0,.5%29' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M5 14l6-6-6-6'/%3e%3c/svg%3e\");transition:transform .35s ease;transform-origin:.5em 50%;transform:scale(.85)}[data-bs-theme=dark] .cute-button-expandable:before{content:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='rgba%28255,255,255,.5%29' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M5 14l6-6-6-6'/%3e%3c/svg%3e\")}[dir=rtl] .cute-button-expandable:before{transform:rotate(180deg) scale(.85);margin-left:.25em;text-align:end}.cute-button-expandable[aria-expanded=true]{color:rgba(var(--bs-emphasis-color-rgb),.85)}.cute-button-expandable[aria-expanded=true]:before{transform:rotate(90deg) scale(.85)}\n", ".cute-button-toggle{--bs-btn-hover-bg: transparent}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
579
579
  }
580
580
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteButtonToggle, decorators: [{
581
581
  type: Component,
@@ -592,7 +592,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
592
592
  //'role': 'presentation',
593
593
  }, providers: [
594
594
  { provide: CUTE_BUTTON_BASE, useExisting: CuteButtonToggle }
595
- ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<!--\r\n For capturing HTML-elements such as <i class..> or <img src=\"\"...> and others\r\n we need apply [cuteButtonIcon] attribute to them.\r\n-->\r\n<span class=\"cute-icon-wrapper\">\r\n <ng-content select=\".material-icons:not([iconPositionEnd]),\r\n .bi:not([iconPositionEnd]),\r\n cute-icon:not([iconPositionEnd]),\r\n cute-avatar:not([iconPositionEnd]),\r\n [cuteButtonIcon]:not([iconPositionEnd])\">\r\n </ng-content>\r\n</span>\r\n\r\n<span class=\"cute-button-label\">\r\n <ng-content>\r\n @if(visuallyHiddenLabel) {\r\n <span class=\"visually-hidden\"> {{visuallyHiddenLabel}} </span>\r\n }\r\n </ng-content>\r\n</span>\r\n\r\n<span class=\"cute-icon-wrapper\">\r\n <ng-content select=\".material-icons[iconPositionEnd],\r\n .bi:[iconPositionEnd],\r\n cute-icon[iconPositionEnd],\r\n cute-avatar:[iconPositionEnd],\r\n [cuteButtonIcon][iconPositionEnd]\">\r\n </ng-content>\r\n</span>\r\n", styles: [".cute-ripple-element{--cute-ripple-duration: .5s;--cute-ripple-bg-color: rgba(255, 255, 255, .18);position:absolute;border-radius:50%;pointer-events:none;transform:scale3d(0,0,0);animation:cute-ripple-element-animation var(--cute-ripple-duration) cubic-bezier(.65,.05,.36,1);background-color:var(--cute-ripple-bg-color);will-change:transform,opacity}@media (forced-colors: active){.cute-ripple-element{display:none}}@keyframes cute-ripple-element-animation{to{transform:scale(8);opacity:0}}.cute-button,.cute-anchor{position:relative;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;overflow:visible;box-shadow:none}.cute-button:has(>:not(.cute-ripple):nth-child(2)),.cute-anchor:has(>:not(.cute-ripple):nth-child(2)){gap:.5em}.cute-button.dropdown-toggle,.cute-anchor.dropdown-toggle{gap:.375em}.cute-button.dropdown-toggle-split,.cute-anchor.dropdown-toggle-split{gap:0}.cute-button .cute-icon-wrapper,.cute-anchor .cute-icon-wrapper{display:contents}.cute-button .cute-icon-wrapper:empty,.cute-anchor .cute-icon-wrapper:empty{display:none}.cute-button .cute-button-label,.cute-anchor .cute-button-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cute-button .cute-button-label .badge,.cute-anchor .cute-button-label .badge{line-height:var(--bs-btn-line-height);top:0}.cute-button .cute-button-label:empty,.cute-anchor .cute-button-label:empty{display:none}.cute-button.cute-button-disabled-interactive,.cute-anchor.cute-button-disabled-interactive{cursor:pointer}.cute-button.cute-button-disabled-interactive:disabled,.cute-button.cute-button-disabled-interactive.disabled,.cute-anchor.cute-button-disabled-interactive:disabled,.cute-anchor.cute-button-disabled-interactive.disabled{pointer-events:auto;cursor:default;box-shadow:none;--bs-btn-active-bg: var(--bs-btn-disabled-bg);--bs-btn-active-border-color: var(--bs-btn-disabled-border-color);--bs-btn-active-color: var(--bs-btn-disabled-color)}.cute-button.cute-button-disabled-interactive:disabled.cute-icon-button,.cute-button.cute-button-disabled-interactive.disabled.cute-icon-button,.cute-anchor.cute-button-disabled-interactive:disabled.cute-icon-button,.cute-anchor.cute-button-disabled-interactive.disabled.cute-icon-button{--bs-btn-active-bg: transparent;--bs-btn-active-border-color: transparent;--bs-btn-hover-bg: transparent}.cute-button.cute-base-button,.cute-anchor.cute-base-button{font-weight:500;--cute-base-button-color-rgb: var(--bs-body-color-rgb);--bs-btn-active-bg: rgba(var(--cute-base-button-color-rgb), .08);--bs-btn-active-border-color: rgba(var(--cute-base-button-color-rgb), .12);--bs-btn-disabled-border-color: transparent;--bs-btn-hover-bg: rgba(var(--cute-base-button-color-rgb), .06)}.cute-button.cute-flat-button.cute-unthemed,.cute-anchor.cute-flat-button.cute-unthemed{--bs-btn-bg: var(--bs-tertiary-bg);--bs-btn-hover-bg: var(--bs-secondary-bg);--bs-btn-active-bg: var(--bs-secondary-bg);border-color:transparent}.cute-button.raised,.cute-anchor.raised{box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f;transition:box-shadow .2s cubic-bezier(.4,0,.2,1)}.cute-button.raised:hover,.cute-button.raised:focus,.cute-anchor.raised:hover,.cute-anchor.raised:focus{box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.cute-button.raised:active,.cute-anchor.raised:active{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cute-button.raised:disabled,.cute-button.raised.disabled,.cute-anchor.raised:disabled,.cute-anchor.raised.disabled{box-shadow:0 0 #0003,0 0 #00000024,0 0 #0000001f}.cute-button.btn-light:disabled,.cute-button.btn-light.disabled,.cute-anchor.btn-light:disabled,.cute-anchor.btn-light.disabled{background-color:#0000001a}.cute-button>[role=img],.cute-button i[class],.cute-anchor>[role=img],.cute-anchor i[class]{align-self:center;pointer-events:none;overflow:visible}.cute-button.cute-fab-button,.cute-anchor.cute-fab-button{--icon-size: 40px;width:var(--icon-size);height:var(--icon-size);min-width:var(--icon-size);line-height:1;padding:0;padding-top:revert;gap:0;border-radius:50%;flex-shrink:0;-webkit-tap-highlight-color:rgba(0,0,0,0);box-shadow:0 3px 5px -1px #0003,0 6px 10px #00000024,0 1px 18px #0000001f}.cute-button.cute-fab-button[magnitude=largest],.cute-anchor.cute-fab-button[magnitude=largest]{--icon-size: 64px}.cute-button.cute-fab-button[magnitude=larger],.cute-anchor.cute-fab-button[magnitude=larger]{--icon-size: 56px}.cute-button.cute-fab-button[magnitude=large],.cute-anchor.cute-fab-button[magnitude=large]{--icon-size: 48px}.cute-button.cute-fab-button[magnitude=middle],.cute-anchor.cute-fab-button[magnitude=middle]{--icon-size: 40px}.cute-button.cute-fab-button[magnitude=small],.cute-anchor.cute-fab-button[magnitude=small]{--icon-size: 32px}.cute-button.cute-fab-button[magnitude=smaller],.cute-anchor.cute-fab-button[magnitude=smaller]{--icon-size: 24px}.cute-button.cute-fab-button[magnitude=smallest],.cute-anchor.cute-fab-button[magnitude=smallest]{--icon-size: 16px}.cute-button.cute-fab-button svg,.cute-anchor.cute-fab-button svg{vertical-align:baseline}.cute-button.cute-fab-button:active,.cute-anchor.cute-fab-button:active{box-shadow:0 7px 8px -4px #0003,0 12px 17px 2px #00000024,0 5px 22px 4px #0000001f}.cute-button.cute-fab-button:active.btn-light,.cute-anchor.cute-fab-button:active.btn-light{border-color:#00000040}.cute-button.cute-fab-button:hover,.cute-button.cute-fab-button.cdk-focused,.cute-anchor.cute-fab-button:hover,.cute-anchor.cute-fab-button.cdk-focused{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cute-button.cute-fab-button:disabled,.cute-button.cute-fab-button.disabled,.cute-anchor.cute-fab-button:disabled,.cute-anchor.cute-fab-button.disabled{border:0;box-shadow:none}.cute-button.cute-fab-button:disabled>[role=img],.cute-button.cute-fab-button:disabled i[class],.cute-button.cute-fab-button.disabled>[role=img],.cute-button.cute-fab-button.disabled i[class],.cute-anchor.cute-fab-button:disabled>[role=img],.cute-anchor.cute-fab-button:disabled i[class],.cute-anchor.cute-fab-button.disabled>[role=img],.cute-anchor.cute-fab-button.disabled i[class]{color:#00000061!important}.cute-button.cute-icon-button,.cute-anchor.cute-icon-button{overflow:hidden;border-radius:50%;border:0;padding:0;gap:0!important;--icon-size: 40px;width:var(--icon-size);height:var(--icon-size);min-width:var(--icon-size);line-height:1;--cute-icon-button-color-rgb: var(--bs-body-color-rgb);--bs-btn-active-bg: rgba(var(--cute-icon-button-color-rgb), .12);--bs-btn-active-border-color: rgba(var(--cute-icon-button-color-rgb), .12);--bs-btn-hover-bg: rgba(var(--cute-icon-button-color-rgb), .06)}.cute-button.cute-icon-button[magnitude=largest],.cute-anchor.cute-icon-button[magnitude=largest]{--icon-size: 64px}.cute-button.cute-icon-button[magnitude=larger],.cute-anchor.cute-icon-button[magnitude=larger]{--icon-size: 56px}.cute-button.cute-icon-button[magnitude=large],.cute-anchor.cute-icon-button[magnitude=large]{--icon-size: 48px}.cute-button.cute-icon-button[magnitude=middle],.cute-anchor.cute-icon-button[magnitude=middle]{--icon-size: 40px}.cute-button.cute-icon-button[magnitude=small],.cute-anchor.cute-icon-button[magnitude=small]{--icon-size: 32px}.cute-button.cute-icon-button[magnitude=smaller],.cute-anchor.cute-icon-button[magnitude=smaller]{--icon-size: 24px}.cute-button.cute-icon-button[magnitude=smallest],.cute-anchor.cute-icon-button[magnitude=smallest]{--icon-size: 16px}.cute-button.cute-icon-button svg,.cute-anchor.cute-icon-button svg{vertical-align:baseline}.cute-button.cute-icon-button.cdk-focused,.cute-anchor.cute-icon-button.cdk-focused{--bs-btn-hover-bg: rgba(var(--cute-icon-button-color-rgb), .04)}.cute-btn-xxs,.cute-btn-group-xxs>.btn{--bs-btn-padding-y: .25rem;--bs-btn-padding-x: .5rem;--bs-btn-font-size: .5rem}.cute-btn-xs,.cute-btn-group-xs>.btn{--bs-btn-padding-y: .25rem;--bs-btn-padding-x: .5rem;--bs-btn-font-size: .75rem}.cute-btn-xl,.cute-btn-group-xl>.btn{--bs-btn-padding-y: .5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size: 1.5rem}.cute-btn-xxl,.cute-btn-group-xxl>.btn{--bs-btn-padding-y: .5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size: 2.5rem}[dir=rtl] .btn-group>.btn:not(:first-child):not(.dropdown-toggle),[dir=rtl] .btn-group>.btn.dropdown-toggle-split:last-child,[dir=rtl] .btn-group>.btn-group:not(:first-child)>.btn{border-radius:0}[dir=rtl] .btn-group>.btn:nth-child(n+3),[dir=rtl] .btn-group>:not(.btn-check)+.btn,[dir=rtl] .btn-group>.btn-group:not(:last-child)>.btn{border-radius:0 var(--bs-btn-border-radius) var(--bs-btn-border-radius) 0}[dir=rtl] .btn-group>.btn:first-child:not(.dropdown-toggle),[dir=rtl] .btn-group>.btn.dropdown-toggle-split:first-child,[dir=rtl] .btn-group>.btn-group:first-child>.btn{border-radius:0 var(--bs-btn-border-radius) var(--bs-btn-border-radius) 0}[dir=rtl] .btn-group>.btn:last-child:not(.dropdown-toggle),[dir=rtl] .btn-group>.btn.dropdown-toggle-split:last-child,[dir=rtl] .btn-group>.btn-group:last-child>.btn{border-radius:var(--bs-btn-border-radius) 0 0 var(--bs-btn-border-radius)}.cute-button-expandable{padding:.25rem .5rem;font-weight:600;color:var(--bs-emphasis-color);background-color:transparent}.cute-button-expandable:hover,.cute-button-expandable:focus{color:rgba(var(--bs-emphasis-color-rgb),.85);background-color:var(--bs-tertiary-bg)}.cute-button-expandable:before{width:1.25em;line-height:0;content:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='rgba%280,0,0,.5%29' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M5 14l6-6-6-6'/%3e%3c/svg%3e\");transition:transform .35s ease;transform-origin:.5em 50%;transform:scale(.85)}[data-bs-theme=dark] .cute-button-expandable:before{content:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='rgba%28255,255,255,.5%29' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M5 14l6-6-6-6'/%3e%3c/svg%3e\")}[dir=rtl] .cute-button-expandable:before{transform:rotate(180deg) scale(.85);margin-left:.25em;text-align:end}.cute-button-expandable[aria-expanded=true]{color:rgba(var(--bs-emphasis-color-rgb),.85)}.cute-button-expandable[aria-expanded=true]:before{transform:rotate(90deg) scale(.85)}\n", ".cute-button-toggle{--bs-btn-hover-bg: transparent}\n"] }]
595
+ ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<!--\r\n For capturing HTML-elements such as <i class..> or <img src=\"\"...> and others\r\n we need apply [cuteButtonIcon] attribute to them.\r\n-->\r\n<span class=\"cute-icon-wrapper\">\r\n <ng-content select=\".material-icons:not([iconPositionEnd]),\r\n .bi:not([iconPositionEnd]),\r\n cute-icon:not([iconPositionEnd]),\r\n cute-avatar:not([iconPositionEnd]),\r\n [cuteButtonIcon]:not([iconPositionEnd])\">\r\n </ng-content>\r\n</span>\r\n\r\n<span class=\"cute-button-label\" [class.cute-button-label__wrap]=\"wrapLabel\">\r\n <ng-content>\r\n @if(visuallyHiddenLabel) {\r\n <span class=\"visually-hidden\"> {{visuallyHiddenLabel}} </span>\r\n }\r\n </ng-content>\r\n</span>\r\n\r\n<span class=\"cute-icon-wrapper\">\r\n <ng-content select=\".material-icons[iconPositionEnd],\r\n .bi:[iconPositionEnd],\r\n cute-icon[iconPositionEnd],\r\n cute-avatar:[iconPositionEnd],\r\n [cuteButtonIcon][iconPositionEnd]\">\r\n </ng-content>\r\n</span>\r\n", styles: [".cute-ripple-element{--cute-ripple-duration: .5s;--cute-ripple-bg-color: rgba(255, 255, 255, .18);position:absolute;border-radius:50%;pointer-events:none;transform:scale3d(0,0,0);animation:cute-ripple-element-animation var(--cute-ripple-duration) cubic-bezier(.65,.05,.36,1);background-color:var(--cute-ripple-bg-color);will-change:transform,opacity}@media (forced-colors: active){.cute-ripple-element{display:none}}@keyframes cute-ripple-element-animation{to{transform:scale(8);opacity:0}}.cute-button,.cute-anchor{position:relative;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;overflow:visible;box-shadow:none}.cute-button:has(>:nth-child(2)),.cute-anchor:has(>:nth-child(2)){gap:.5em}.cute-button.dropdown-toggle,.cute-anchor.dropdown-toggle{gap:.375em}.cute-button.dropdown-toggle-split,.cute-anchor.dropdown-toggle-split{gap:0}.cute-button .cute-icon-wrapper,.cute-anchor .cute-icon-wrapper{display:contents}.cute-button .cute-icon-wrapper:empty,.cute-anchor .cute-icon-wrapper:empty{display:none}.cute-button .cute-button-label:not(.cute-button-label__wrap),.cute-anchor .cute-button-label:not(.cute-button-label__wrap){min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cute-button .cute-button-label .badge,.cute-anchor .cute-button-label .badge{line-height:var(--bs-btn-line-height);top:0}.cute-button .cute-button-label:empty,.cute-anchor .cute-button-label:empty{display:none}.cute-button.cute-button-disabled-interactive,.cute-anchor.cute-button-disabled-interactive{cursor:pointer}.cute-button.cute-button-disabled-interactive:disabled,.cute-button.cute-button-disabled-interactive.disabled,.cute-anchor.cute-button-disabled-interactive:disabled,.cute-anchor.cute-button-disabled-interactive.disabled{pointer-events:auto;cursor:default;box-shadow:none;--bs-btn-active-bg: var(--bs-btn-disabled-bg);--bs-btn-active-border-color: var(--bs-btn-disabled-border-color);--bs-btn-active-color: var(--bs-btn-disabled-color)}.cute-button.cute-button-disabled-interactive:disabled.cute-icon-button,.cute-button.cute-button-disabled-interactive.disabled.cute-icon-button,.cute-anchor.cute-button-disabled-interactive:disabled.cute-icon-button,.cute-anchor.cute-button-disabled-interactive.disabled.cute-icon-button{--bs-btn-active-bg: transparent;--bs-btn-active-border-color: transparent;--bs-btn-hover-bg: transparent}.cute-button.cute-base-button,.cute-anchor.cute-base-button{font-weight:500;--cute-base-button-color-rgb: var(--bs-body-color-rgb);--bs-btn-active-bg: rgba(var(--cute-base-button-color-rgb), .08);--bs-btn-active-border-color: rgba(var(--cute-base-button-color-rgb), .12);--bs-btn-disabled-border-color: transparent;--bs-btn-hover-bg: rgba(var(--cute-base-button-color-rgb), .06)}.cute-button.cute-flat-button.cute-unthemed,.cute-anchor.cute-flat-button.cute-unthemed{--bs-btn-bg: var(--bs-tertiary-bg);--bs-btn-hover-bg: var(--bs-secondary-bg);--bs-btn-active-bg: var(--bs-secondary-bg);border-color:transparent}.cute-button.raised,.cute-anchor.raised{box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f;transition:box-shadow .2s cubic-bezier(.4,0,.2,1)}.cute-button.raised:hover,.cute-button.raised:focus,.cute-anchor.raised:hover,.cute-anchor.raised:focus{box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.cute-button.raised:active,.cute-anchor.raised:active{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cute-button.raised:disabled,.cute-button.raised.disabled,.cute-anchor.raised:disabled,.cute-anchor.raised.disabled{box-shadow:0 0 #0003,0 0 #00000024,0 0 #0000001f}.cute-button.btn-light:disabled,.cute-button.btn-light.disabled,.cute-anchor.btn-light:disabled,.cute-anchor.btn-light.disabled{background-color:#0000001a}.cute-button>[role=img],.cute-button i[class],.cute-anchor>[role=img],.cute-anchor i[class]{align-self:center;pointer-events:none;overflow:visible}.cute-button.cute-fab-button,.cute-anchor.cute-fab-button{--icon-size: 40px;width:var(--icon-size);height:var(--icon-size);min-width:var(--icon-size);line-height:1;padding:0;padding-top:revert;gap:0;border-radius:50%;flex-shrink:0;-webkit-tap-highlight-color:rgba(0,0,0,0);box-shadow:0 3px 5px -1px #0003,0 6px 10px #00000024,0 1px 18px #0000001f}.cute-button.cute-fab-button[magnitude=largest],.cute-anchor.cute-fab-button[magnitude=largest]{--icon-size: 64px}.cute-button.cute-fab-button[magnitude=larger],.cute-anchor.cute-fab-button[magnitude=larger]{--icon-size: 56px}.cute-button.cute-fab-button[magnitude=large],.cute-anchor.cute-fab-button[magnitude=large]{--icon-size: 48px}.cute-button.cute-fab-button[magnitude=middle],.cute-anchor.cute-fab-button[magnitude=middle]{--icon-size: 40px}.cute-button.cute-fab-button[magnitude=small],.cute-anchor.cute-fab-button[magnitude=small]{--icon-size: 32px}.cute-button.cute-fab-button[magnitude=smaller],.cute-anchor.cute-fab-button[magnitude=smaller]{--icon-size: 24px}.cute-button.cute-fab-button[magnitude=smallest],.cute-anchor.cute-fab-button[magnitude=smallest]{--icon-size: 16px}.cute-button.cute-fab-button svg,.cute-anchor.cute-fab-button svg{vertical-align:baseline}.cute-button.cute-fab-button:active,.cute-anchor.cute-fab-button:active{box-shadow:0 7px 8px -4px #0003,0 12px 17px 2px #00000024,0 5px 22px 4px #0000001f}.cute-button.cute-fab-button:active.btn-light,.cute-anchor.cute-fab-button:active.btn-light{border-color:#00000040}.cute-button.cute-fab-button:hover,.cute-button.cute-fab-button.cdk-focused,.cute-anchor.cute-fab-button:hover,.cute-anchor.cute-fab-button.cdk-focused{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cute-button.cute-fab-button:disabled,.cute-button.cute-fab-button.disabled,.cute-anchor.cute-fab-button:disabled,.cute-anchor.cute-fab-button.disabled{border:0;box-shadow:none}.cute-button.cute-fab-button:disabled>[role=img],.cute-button.cute-fab-button:disabled i[class],.cute-button.cute-fab-button.disabled>[role=img],.cute-button.cute-fab-button.disabled i[class],.cute-anchor.cute-fab-button:disabled>[role=img],.cute-anchor.cute-fab-button:disabled i[class],.cute-anchor.cute-fab-button.disabled>[role=img],.cute-anchor.cute-fab-button.disabled i[class]{color:#00000061!important}.cute-button.cute-icon-button,.cute-anchor.cute-icon-button{overflow:hidden;border-radius:50%;border:0;padding:0;gap:0!important;--icon-size: 40px;width:var(--icon-size);height:var(--icon-size);min-width:var(--icon-size);line-height:1;--cute-icon-button-color-rgb: var(--bs-body-color-rgb);--bs-btn-active-bg: rgba(var(--cute-icon-button-color-rgb), .12);--bs-btn-active-border-color: rgba(var(--cute-icon-button-color-rgb), .12);--bs-btn-hover-bg: rgba(var(--cute-icon-button-color-rgb), .06)}.cute-button.cute-icon-button[magnitude=largest],.cute-anchor.cute-icon-button[magnitude=largest]{--icon-size: 64px}.cute-button.cute-icon-button[magnitude=larger],.cute-anchor.cute-icon-button[magnitude=larger]{--icon-size: 56px}.cute-button.cute-icon-button[magnitude=large],.cute-anchor.cute-icon-button[magnitude=large]{--icon-size: 48px}.cute-button.cute-icon-button[magnitude=middle],.cute-anchor.cute-icon-button[magnitude=middle]{--icon-size: 40px}.cute-button.cute-icon-button[magnitude=small],.cute-anchor.cute-icon-button[magnitude=small]{--icon-size: 32px}.cute-button.cute-icon-button[magnitude=smaller],.cute-anchor.cute-icon-button[magnitude=smaller]{--icon-size: 24px}.cute-button.cute-icon-button[magnitude=smallest],.cute-anchor.cute-icon-button[magnitude=smallest]{--icon-size: 16px}.cute-button.cute-icon-button svg,.cute-anchor.cute-icon-button svg{vertical-align:baseline}.cute-button.cute-icon-button.cdk-focused,.cute-anchor.cute-icon-button.cdk-focused{--bs-btn-hover-bg: rgba(var(--cute-icon-button-color-rgb), .04)}.cute-btn-xxs,.cute-btn-group-xxs>.btn{--bs-btn-padding-y: .25rem;--bs-btn-padding-x: .5rem;--bs-btn-font-size: .5rem}.cute-btn-xs,.cute-btn-group-xs>.btn{--bs-btn-padding-y: .25rem;--bs-btn-padding-x: .5rem;--bs-btn-font-size: .75rem}.cute-btn-xl,.cute-btn-group-xl>.btn{--bs-btn-padding-y: .5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size: 1.5rem}.cute-btn-xxl,.cute-btn-group-xxl>.btn{--bs-btn-padding-y: .5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size: 2.5rem}[dir=rtl] .btn-group>.btn:not(:first-child):not(.dropdown-toggle),[dir=rtl] .btn-group>.btn.dropdown-toggle-split:last-child,[dir=rtl] .btn-group>.btn-group:not(:first-child)>.btn{border-radius:0}[dir=rtl] .btn-group>.btn:nth-child(n+3),[dir=rtl] .btn-group>:not(.btn-check)+.btn,[dir=rtl] .btn-group>.btn-group:not(:last-child)>.btn{border-radius:0 var(--bs-btn-border-radius) var(--bs-btn-border-radius) 0}[dir=rtl] .btn-group>.btn:first-child:not(.dropdown-toggle),[dir=rtl] .btn-group>.btn.dropdown-toggle-split:first-child,[dir=rtl] .btn-group>.btn-group:first-child>.btn{border-radius:0 var(--bs-btn-border-radius) var(--bs-btn-border-radius) 0}[dir=rtl] .btn-group>.btn:last-child:not(.dropdown-toggle),[dir=rtl] .btn-group>.btn.dropdown-toggle-split:last-child,[dir=rtl] .btn-group>.btn-group:last-child>.btn{border-radius:var(--bs-btn-border-radius) 0 0 var(--bs-btn-border-radius)}.cute-button-expandable{padding:.25rem .5rem;font-weight:600;color:var(--bs-emphasis-color);background-color:transparent}.cute-button-expandable:hover,.cute-button-expandable:focus{color:rgba(var(--bs-emphasis-color-rgb),.85);background-color:var(--bs-tertiary-bg)}.cute-button-expandable:before{width:1.25em;line-height:0;content:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='rgba%280,0,0,.5%29' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M5 14l6-6-6-6'/%3e%3c/svg%3e\");transition:transform .35s ease;transform-origin:.5em 50%;transform:scale(.85)}[data-bs-theme=dark] .cute-button-expandable:before{content:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='rgba%28255,255,255,.5%29' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M5 14l6-6-6-6'/%3e%3c/svg%3e\")}[dir=rtl] .cute-button-expandable:before{transform:rotate(180deg) scale(.85);margin-left:.25em;text-align:end}.cute-button-expandable[aria-expanded=true]{color:rgba(var(--bs-emphasis-color-rgb),.85)}.cute-button-expandable[aria-expanded=true]:before{transform:rotate(90deg) scale(.85)}\n", ".cute-button-toggle{--bs-btn-hover-bg: transparent}\n"] }]
596
596
  }], ctorParameters: () => [], propDecorators: { name: [{
597
597
  type: Input
598
598
  }], value: [{
@@ -1 +1 @@
1
- {"version":3,"file":"cute-widgets-base-button-toggle.mjs","sources":["../../../../projects/cute-widgets/base/button-toggle/src/button-toggle-group.directive.ts","../../../../projects/cute-widgets/base/button-toggle/src/button-toggle.component.ts","../../../../projects/cute-widgets/base/button/src/button.component.html","../../../../projects/cute-widgets/base/button-toggle/src/button-toggle.module.ts","../../../../projects/cute-widgets/base/button-toggle/cute-widgets-base-button-toggle.ts"],"sourcesContent":["/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\nimport {\r\n AfterContentInit, booleanAttribute,\r\n ContentChildren,\r\n Directive, EventEmitter,\r\n forwardRef, inject,\r\n InjectionToken, Input, isDevMode,\r\n OnInit, Output,\r\n QueryList\r\n} from \"@angular/core\";\r\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from \"@angular/forms\";\r\nimport {SelectionModel} from \"@angular/cdk/collections\";\r\nimport {DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, UP_ARROW, SPACE, ENTER, hasModifierKey} from '@angular/cdk/keycodes';\r\nimport {\r\n CUTE_BUTTON_TOGGLE_DEFAULT_OPTIONS,\r\n CuteButtonToggle,\r\n CuteButtonToggleChange,\r\n CuteButtonToggleDefaultOptions\r\n} from \"./button-toggle.component\";\r\nimport {Direction, Directionality} from \"@angular/cdk/bidi\";\r\nimport {CuteButtonGroup, CuteButtonStyle} from '@cute-widgets/base/button';\r\n\r\n/**\r\n * Injection token that can be used to reference instances of `CuteButtonToggleGroup`.\r\n * It serves as an alternative token to the actual `CuteButtonToggleGroup` class which\r\n * could cause unnecessary retention of the class and its component metadata.\r\n */\r\nexport const CUTE_BUTTON_TOGGLE_GROUP = new InjectionToken<CuteButtonToggleGroup>(\r\n 'CuteButtonToggleGroup',\r\n);\r\n\r\n/**\r\n * Provider Expression that allows cute-button-toggle-group to register as a ControlValueAccessor.\r\n * This allows it to support [(ngModel)].\r\n * @docs-private\r\n */\r\nexport const CUTE_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => CuteButtonToggleGroup),\r\n multi: true,\r\n};\r\n\r\n// Counter used to generate unique IDs.\r\nlet uniqueIdCounter = 0;\r\n\r\n/** Exclusive selection button toggle group that behaves like a radio-button group. */\r\n@Directive({\r\n selector: 'cute-button-toggle-group',\r\n providers: [\r\n CUTE_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR,\r\n {provide: CUTE_BUTTON_TOGGLE_GROUP, useExisting: CuteButtonToggleGroup},\r\n ],\r\n host: {\r\n 'class': 'cute-button-toggle-group',\r\n '[attr.role]': 'multiple ? \"group\" : \"radiogroup\"',\r\n '[attr.aria-disabled]': 'disabled',\r\n '[attr.tabindex]': '-1',\r\n '(keydown)': '_keydown($event)',\r\n },\r\n exportAs: 'cuteButtonToggleGroup',\r\n standalone: true,\r\n})\r\nexport class CuteButtonToggleGroup extends CuteButtonGroup implements ControlValueAccessor, OnInit, AfterContentInit {\r\n private _dir = inject(Directionality, {optional: true});\r\n private _multiple = false;\r\n private _selectionModel: SelectionModel<CuteButtonToggle> | undefined;\r\n\r\n /**\r\n * Reference to the raw value that the consumer tried to assign. The real\r\n * value will exclude any values from this one that don't correspond to a\r\n * toggle. Useful for the cases where the value is assigned before the toggles\r\n * have been initialized or at the same that they're being swapped out.\r\n */\r\n private _rawValue: any;\r\n\r\n /**\r\n * The method to be called in order to update ngModel.\r\n * Now `ngModel` binding is not supported in multiple selection mode.\r\n */\r\n private _controlValueAccessorChangeFn: (value: any) => void = () => {};\r\n\r\n /** onTouch function registered via registerOnTouch (ControlValueAccessor). */\r\n _onTouched: () => any = () => {};\r\n\r\n /** Child button toggle buttons. */\r\n @ContentChildren(forwardRef(() => CuteButtonToggle), {\r\n // Note that this would technically pick up toggles\r\n // from nested groups, but that's not a case that we support.\r\n descendants: true,\r\n })\r\n _buttonToggles: QueryList<CuteButtonToggle> | undefined;\r\n\r\n /** The button toggle default style. Only outlined buttons supported. */\r\n override buttonStyle: Extract<CuteButtonStyle, \"outlined\"|\"outline-button\"> = \"outline-button\";\r\n\r\n /** `name` attribute for the underlying `input` element. */\r\n @Input()\r\n get name(): string { return this._name; }\r\n set name(value: string) {\r\n this._name = value;\r\n this._markButtonsForCheck();\r\n }\r\n private _name = `cute-button-toggle-group-${uniqueIdCounter++}`;\r\n\r\n /** Value of the toggle group. */\r\n @Input()\r\n get value(): any {\r\n const selected = this._selectionModel ? this._selectionModel.selected : [];\r\n\r\n if (this.multiple) {\r\n return selected.map(toggle => toggle.value);\r\n }\r\n\r\n return selected[0] ? selected[0].value : undefined;\r\n }\r\n set value(newValue: any) {\r\n this._setSelectionByValue(newValue);\r\n this.valueChange.emit(this.value);\r\n }\r\n\r\n /** Selected button toggles in the group. */\r\n get selected(): CuteButtonToggle | CuteButtonToggle[] {\r\n const selected = this._selectionModel ? this._selectionModel.selected : [];\r\n return this.multiple ? selected : selected[0] || null;\r\n }\r\n\r\n /** Whether multiple button toggles can be selected. */\r\n @Input({transform: booleanAttribute})\r\n get multiple(): boolean { return this._multiple; }\r\n set multiple(value: boolean) {\r\n this._multiple = value;\r\n this._markButtonsForCheck();\r\n }\r\n\r\n /** Whether buttons in the group should be interactive while they're disabled. */\r\n @Input({transform: booleanAttribute})\r\n get disabledInteractive(): boolean { return this._disabledInteractive; }\r\n set disabledInteractive(value: boolean) {\r\n this._disabledInteractive = value;\r\n this._markButtonsForCheck();\r\n }\r\n private _disabledInteractive = false;\r\n\r\n /** Whether the checkmark indicator for single-selection button toggle groups is hidden. */\r\n @Input({transform: booleanAttribute})\r\n get hideSingleSelectionIndicator(): boolean { return this._hideSingleSelectionIndicator; }\r\n set hideSingleSelectionIndicator(value: boolean) {\r\n this._hideSingleSelectionIndicator = value;\r\n this._markButtonsForCheck();\r\n }\r\n private _hideSingleSelectionIndicator: boolean = false;\r\n\r\n /** Whether the checkmark indicator for multiple-selection button toggle groups is hidden. */\r\n @Input({transform: booleanAttribute})\r\n get hideMultipleSelectionIndicator(): boolean { return this._hideMultipleSelectionIndicator; }\r\n set hideMultipleSelectionIndicator(value: boolean) {\r\n this._hideMultipleSelectionIndicator = value;\r\n this._markButtonsForCheck();\r\n }\r\n private _hideMultipleSelectionIndicator: boolean = false;\r\n\r\n /**\r\n * Event that emits whenever the value of the group changes.\r\n * Used to facilitate two-way data binding.\r\n * @docs-private\r\n */\r\n @Output() readonly valueChange = new EventEmitter<any>();\r\n\r\n /** Event emitted when the group's value changes. */\r\n @Output() readonly change = new EventEmitter<CuteButtonToggleChange>();\r\n\r\n\r\n /** The layout direction of the toggle button group. */\r\n get dir(): Direction {\r\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\r\n }\r\n\r\n constructor(...args: unknown[]);\r\n constructor() {\r\n super();\r\n\r\n const defaultOptions = inject<CuteButtonToggleDefaultOptions>(\r\n CUTE_BUTTON_TOGGLE_DEFAULT_OPTIONS,\r\n {optional: true},\r\n );\r\n\r\n //this.appearance =\r\n // defaultOptions && defaultOptions.appearance ? defaultOptions.appearance : 'standard';\r\n this.hideSingleSelectionIndicator = defaultOptions?.hideSingleSelectionIndicator ?? false;\r\n this.hideMultipleSelectionIndicator = defaultOptions?.hideMultipleSelectionIndicator ?? false;\r\n }\r\n\r\n override ngOnInit() {\r\n super.ngOnInit();\r\n this._selectionModel = new SelectionModel<CuteButtonToggle>(this.multiple, undefined, false);\r\n }\r\n\r\n override ngAfterContentInit() {\r\n super.ngAfterContentInit();\r\n\r\n if (this._buttonToggles) {\r\n this._selectionModel?.select(...this._buttonToggles.filter(toggle => toggle.checked));\r\n }\r\n if (!this.multiple) {\r\n this._initializeTabIndex();\r\n }\r\n }\r\n\r\n /** Initializes the tabindex attribute using the radio pattern. */\r\n private _initializeTabIndex() {\r\n if (this._buttonToggles) {\r\n this._buttonToggles.forEach(toggle => {\r\n toggle.tabIndex = -1;\r\n });\r\n if (this.selected) {\r\n (this.selected as CuteButtonToggle).tabIndex = 0;\r\n } else {\r\n for (let i = 0; i < this._buttonToggles.length; i++) {\r\n const toggle = this._buttonToggles.get(i)!;\r\n\r\n if (!toggle.disabled) {\r\n toggle.tabIndex = 0;\r\n break;\r\n }\r\n }\r\n }\r\n this._markButtonsForCheck();\r\n }\r\n }\r\n\r\n /**\r\n * Sets the model value. Implemented as part of ControlValueAccessor.\r\n * @param value Value to be set to the model.\r\n */\r\n writeValue(value: any) {\r\n this.value = value;\r\n this.markForCheck();\r\n }\r\n\r\n // Implemented as part of ControlValueAccessor.\r\n registerOnChange(fn: (value: any) => void) {\r\n this._controlValueAccessorChangeFn = fn;\r\n }\r\n\r\n // Implemented as part of ControlValueAccessor.\r\n registerOnTouched(fn: any) {\r\n this._onTouched = fn;\r\n }\r\n\r\n // Implemented as part of ControlValueAccessor.\r\n override setDisabledState(isDisabled: boolean): boolean {\r\n if (super.setDisabledState(isDisabled)) {\r\n this._buttonToggles?.forEach(toggle => toggle.disabled = isDisabled)\r\n this._markButtonsForCheck();\r\n }\r\n return false;\r\n }\r\n\r\n /** Handle keydown event calling to single-select button toggle. */\r\n protected _keydown(event: KeyboardEvent) {\r\n if (this.multiple || this.disabled || hasModifierKey(event) || !this._buttonToggles) {\r\n return;\r\n }\r\n\r\n const target = event.target as HTMLButtonElement;\r\n const buttonId = target.id;\r\n const index = this._buttonToggles.toArray().findIndex(toggle => {\r\n return toggle.buttonId === buttonId;\r\n });\r\n\r\n if (index == -1) { return; }\r\n\r\n let nextButton: CuteButtonToggle | null = null;\r\n switch (event.keyCode) {\r\n case SPACE:\r\n case ENTER:\r\n nextButton = this._buttonToggles.get(index) || null;\r\n //nextButton.checked = true;\r\n break;\r\n case UP_ARROW:\r\n nextButton = this._getNextButton(index, -1);\r\n break;\r\n case LEFT_ARROW:\r\n nextButton = this._getNextButton(index, this.dir === 'ltr' ? -1 : 1);\r\n break;\r\n case DOWN_ARROW:\r\n nextButton = this._getNextButton(index, 1);\r\n break;\r\n case RIGHT_ARROW:\r\n nextButton = this._getNextButton(index, this.dir === 'ltr' ? 1 : -1);\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n if (nextButton) {\r\n event.preventDefault();\r\n nextButton._onButtonClick();\r\n nextButton.focus();\r\n }\r\n }\r\n\r\n /** Dispatch change event with current selection and group value. */\r\n private _emitChangeEvent(toggle: CuteButtonToggle): void {\r\n const event = new CuteButtonToggleChange(toggle, this.value);\r\n this._rawValue = event.value;\r\n this._controlValueAccessorChangeFn(event.value);\r\n this.change.emit(event);\r\n }\r\n\r\n /**\r\n * Syncs a button toggle's selected state with the model value.\r\n * @param toggle Toggle to be synced.\r\n * @param select Whether the toggle should be selected.\r\n * @param isUserInput Whether the change was a result of a user interaction.\r\n * @param deferEvents Whether to defer emitting the change events.\r\n */\r\n _syncButtonToggle(\r\n toggle: CuteButtonToggle,\r\n select: boolean,\r\n isUserInput = false,\r\n deferEvents = false,\r\n ) {\r\n // Deselect the currently selected toggle if we're in single-selection\r\n // mode and the button being toggled isn't selected at the moment.\r\n if (!this.multiple && this.selected && !toggle.checked) {\r\n (this.selected as CuteButtonToggle).checked = false;\r\n }\r\n\r\n if (this._selectionModel) {\r\n if (select) {\r\n this._selectionModel.select(toggle);\r\n } else {\r\n this._selectionModel.deselect(toggle);\r\n }\r\n } else {\r\n deferEvents = true;\r\n }\r\n\r\n // We need to defer in some cases in order to avoid \"changed after checked errors\", however,\r\n // the side effect is that we may end up updating the model value out of sequence in others\r\n // The `deferEvents` flag allows us to decide whether to do it on a case-by-case basis.\r\n if (deferEvents) {\r\n Promise.resolve().then(() => this._updateModelValue(toggle, isUserInput));\r\n } else {\r\n this._updateModelValue(toggle, isUserInput);\r\n }\r\n }\r\n\r\n /** Checks whether a button toggle is selected. */\r\n _isSelected(toggle: CuteButtonToggle): boolean {\r\n return this._selectionModel ? this._selectionModel.isSelected(toggle) : false;\r\n }\r\n\r\n /** Determines whether a button toggle should be checked on init. */\r\n _isPrechecked(toggle: CuteButtonToggle) {\r\n if (typeof this._rawValue === 'undefined') {\r\n return false;\r\n }\r\n\r\n if (this.multiple && Array.isArray(this._rawValue)) {\r\n return this._rawValue.some(value => toggle.value != null && value === toggle.value);\r\n }\r\n\r\n return toggle.value === this._rawValue;\r\n }\r\n\r\n /** Obtains the subsequent toggle to which the focus shifts. */\r\n private _getNextButton(startIndex: number, offset: number): CuteButtonToggle | null {\r\n const items = this._buttonToggles;\r\n\r\n if (items) {\r\n for (let i = 1; i <= items.length; i++) {\r\n const index = (startIndex + offset * i + items.length) % items.length;\r\n const item = items.get(index);\r\n\r\n if (item && !item.disabled) {\r\n return item;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /** Updates the selection state of the toggles in the group based on a value. */\r\n private _setSelectionByValue(value: any | any[]) {\r\n this._rawValue = value;\r\n\r\n if (!this._buttonToggles) {\r\n return;\r\n }\r\n\r\n const toggles = this._buttonToggles.toArray();\r\n\r\n if (this.multiple && value) {\r\n if (!Array.isArray(value) && isDevMode() ) {\r\n throw Error('Value must be an array in multiple-selection mode.');\r\n }\r\n\r\n this._clearSelection();\r\n value.forEach((currentValue: any) => this._selectValue(currentValue, toggles));\r\n } else {\r\n this._clearSelection();\r\n this._selectValue(value, toggles);\r\n }\r\n\r\n // In single selection mode, we need at least one enabled toggle to always be focusable.\r\n if (!this.multiple && toggles.every(toggle => toggle.tabIndex === -1)) {\r\n for (const toggle of toggles) {\r\n if (!toggle.disabled) {\r\n toggle.tabIndex = 0;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Clears the selected toggles. */\r\n private _clearSelection() {\r\n this._selectionModel?.clear();\r\n this._buttonToggles?.forEach(toggle => {\r\n toggle.checked = false;\r\n // If the button toggle is in single select mode, initialize the tabIndex.\r\n if (!this.multiple) {\r\n toggle.tabIndex = -1;\r\n }\r\n });\r\n }\r\n\r\n /** Selects a value if there's a toggle that corresponds to it. */\r\n private _selectValue(value: any, toggles: CuteButtonToggle[]) {\r\n if (this._selectionModel) {\r\n for (const toggle of toggles) {\r\n if (toggle.value != null && toggle.value === value) {\r\n toggle.checked = true;\r\n this._selectionModel.select(toggle);\r\n if (!this.multiple) {\r\n // If the button toggle is in single select mode, reset the tabIndex.\r\n toggle.tabIndex = 0;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Syncs up the group's value with the model and emits the change event. */\r\n private _updateModelValue(toggle: CuteButtonToggle, isUserInput: boolean) {\r\n // Only emit the change event for user input.\r\n if (isUserInput) {\r\n this._emitChangeEvent(toggle);\r\n }\r\n\r\n // Note: we emit this one no matter whether it was a user interaction, because\r\n // it is used by Angular to sync up the two-way data binding.\r\n this.valueChange.emit(this.value);\r\n }\r\n\r\n /** Marks all the child button toggles to be checked. */\r\n private _markButtonsForCheck() {\r\n this._buttonToggles?.forEach(toggle => toggle.markForCheck());\r\n }\r\n\r\n}\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\nimport {\r\n EventEmitter,\r\n Input,\r\n Output,\r\n InjectionToken,\r\n booleanAttribute, inject, OnInit, OnDestroy, Component, ViewEncapsulation, ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport {CuteButtonBase, CuteButtonStyle} from \"@cute-widgets/base/button\";\r\nimport {CUTE_BUTTON_TOGGLE_GROUP, CuteButtonToggleGroup} from \"./button-toggle-group.directive\";\r\nimport {_animationsDisabled, toThemeColor} from \"@cute-widgets/base/core\";\r\nimport {CUTE_BUTTON_BASE} from '@cute-widgets/base/button';\r\n\r\n/**\r\n * Represents the default options for the button toggle that can be configured\r\n * using the `CUTE_BUTTON_TOGGLE_DEFAULT_OPTIONS` injection token.\r\n */\r\nexport interface CuteButtonToggleDefaultOptions {\r\n /**\r\n * Default appearance to be used by button toggles. Can be overridden by explicitly\r\n * setting an appearance on a button toggle or group.\r\n */\r\n //appearance?: CuteButtonToggleAppearance;\r\n /** Whether icon indicators should be hidden for single-selection button toggle groups. */\r\n hideSingleSelectionIndicator?: boolean;\r\n /** Whether icon indicators should be hidden for multiple-selection button toggle groups. */\r\n hideMultipleSelectionIndicator?: boolean;\r\n /** Whether disabled toggle buttons should be interactive. */\r\n disabledInteractive?: boolean;\r\n}\r\n\r\n/**\r\n * Injection token that can be used to configure the\r\n * default options for all button toggles within an app.\r\n */\r\nexport const CUTE_BUTTON_TOGGLE_DEFAULT_OPTIONS = new InjectionToken<CuteButtonToggleDefaultOptions>(\r\n 'CUTE_BUTTON_TOGGLE_DEFAULT_OPTIONS',\r\n {\r\n providedIn: 'root',\r\n factory: () => ({\r\n hideSingleSelectionIndicator: false,\r\n hideMultipleSelectionIndicator: false,\r\n disabledInteractive: false,\r\n }),\r\n },\r\n);\r\n\r\n// Counter used to generate unique IDs.\r\nlet uniqueId = 0;\r\n\r\n/** Change event object emitted by button toggle. */\r\nexport class CuteButtonToggleChange {\r\n constructor(\r\n /** The button toggle that emits the event. */\r\n public source: CuteButtonToggle,\r\n\r\n /** The value assigned to the button toggle. */\r\n public value: any,\r\n ) {}\r\n}\r\n\r\n/** Single toggle button that should be nested directly inside a toggle group. */\r\n@Component({\r\n selector: 'cute-button-toggle',\r\n templateUrl: '../../button/src/button.component.html',\r\n styleUrls: ['../../button/src/button.component.scss', './button-toggle.component.scss'],\r\n exportAs: 'cuteButtonToggle',\r\n host: {\r\n 'class': 'cute-button-toggle',\r\n '[class.cute-button-toggle-standalone]': '!buttonToggleGroup',\r\n '[class.active]': 'checked',\r\n '[attr.aria-label]': 'null',\r\n '[attr.aria-labelledby]': 'null',\r\n '[attr.name]': 'null',\r\n '(focus)': 'focus()',\r\n '(click)': '_onButtonClick()',\r\n '[style.--bs-btn-hover-color]': \"'var(--bs-'+toThemeColor(color)+'-text-emphasis)'\",\r\n //'role': 'presentation',\r\n },\r\n providers:[\r\n { provide: CUTE_BUTTON_BASE, useExisting: CuteButtonToggle }\r\n ],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n})\r\nexport class CuteButtonToggle extends CuteButtonBase implements OnInit, OnDestroy {\r\n private _animationDisabled = _animationsDisabled();\r\n protected _multiple: boolean = true;\r\n /** The parent button toggle group (exclusive selection). Optional. */\r\n protected readonly buttonToggleGroup: CuteButtonToggleGroup;\r\n\r\n /** Unique ID for the underlying `button` element. */\r\n get buttonId(): string {\r\n return this.id ?? `cute-toggle-button-${uniqueId++}`;\r\n }\r\n\r\n override get inputButtonStyle(): Extract<CuteButtonStyle, \"outlined\"|\"outline-button\"> {\r\n return super.inputButtonStyle as Extract<CuteButtonStyle, \"outlined\"|\"outline-button\">;\r\n }\r\n override set inputButtonStyle(value: Extract<CuteButtonStyle, \"outlined\"|\"outline-button\">) {\r\n super.inputButtonStyle = value;\r\n }\r\n\r\n /** HTML's 'name' attribute used to group radios for unique selection. */\r\n @Input() name: string | undefined;\r\n\r\n /** CuteButtonToggleGroup reads this to assign its own value. */\r\n @Input() value: any;\r\n\r\n /** Whether ripples are disabled on the button toggle. */\r\n //@Input({transform: booleanAttribute}) disableRipple: boolean = false;\r\n\r\n /** Whether the button is checked. */\r\n @Input({transform: booleanAttribute})\r\n get checked(): boolean {\r\n return this.buttonToggleGroup ? this.buttonToggleGroup._isSelected(this) : this._checked;\r\n }\r\n set checked(value: boolean) {\r\n if (value !== this._checked) {\r\n this._checked = value;\r\n\r\n if (this.buttonToggleGroup) {\r\n this.buttonToggleGroup._syncButtonToggle(this, this._checked);\r\n }\r\n\r\n this.markForCheck();\r\n }\r\n }\r\n private _checked = false;\r\n\r\n /** Whether the button should remain interactive when it is disabled. */\r\n override get disabledInteractive(): boolean {\r\n return (super.disabledInteractive ||\r\n (this.buttonToggleGroup !== null && this.buttonToggleGroup.disabledInteractive)\r\n );\r\n }\r\n override set disabledInteractive(value: boolean) {\r\n super.disabledInteractive = value;\r\n }\r\n\r\n /** Event emitted when the group value changes. */\r\n @Output() readonly change = new EventEmitter<CuteButtonToggleChange>();\r\n\r\n /** Whether the button is disabled. */\r\n // protected override getDisabledState(): boolean {\r\n // const isDisabled = super.getDisabledState();\r\n // return isDisabled || (this.buttonToggleGroup && this.buttonToggleGroup.disabled);\r\n // }\r\n\r\n constructor(...args: unknown[]);\r\n constructor() {\r\n super();\r\n\r\n const toggleGroup = inject<CuteButtonToggleGroup>(CUTE_BUTTON_TOGGLE_GROUP, {optional: true})!;\r\n //const defaultTabIndex = inject(new HostAttributeToken('tabindex'), {optional: true}) || '';\r\n const defaultOptions = inject<CuteButtonToggleDefaultOptions>(\r\n CUTE_BUTTON_TOGGLE_DEFAULT_OPTIONS,\r\n {optional: true},\r\n );\r\n\r\n //this._tabIndex = parseInt(defaultTabIndex) || 0;\r\n this.buttonToggleGroup = toggleGroup;\r\n this.disabledInteractive = defaultOptions?.disabledInteractive ?? false;\r\n }\r\n\r\n override ngOnInit() {\r\n super.ngOnInit();\r\n\r\n const group = this.buttonToggleGroup;\r\n this.id = this.id || `cute-button-toggle-${uniqueId++}`;\r\n\r\n if (group) {\r\n\r\n if (!this.color) {\r\n this.defaultColor = group.color;\r\n }\r\n\r\n if (group._isPrechecked(this)) {\r\n this.checked = true;\r\n } else if (group._isSelected(this) !== this._checked) {\r\n // As a side effect of the circular dependency between the toggle group and the button,\r\n // we may end up in a state where the button is supposed to be checked on init, but it\r\n // isn't, because the checked value was assigned too early. This can happen when Ivy\r\n // assigns the static input value before the `ngOnInit` has run.\r\n group._syncButtonToggle(this, this._checked);\r\n }\r\n }\r\n }\r\n\r\n /*\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n // This serves two purposes:\r\n // 1. We don't want the animation to fire on the first render for pre-checked toggles so we\r\n // delay adding the class until the view is rendered.\r\n // 2. We don't want animation if the `NoopAnimationsModule` is provided.\r\n //if (this._animationMode !== 'NoopAnimations') {\r\n // this._elementRef.nativeElement.classList.add('mat-button-toggle-animations-enabled');\r\n //}\r\n\r\n this._focusMonitor.monitor(this._elementRef, true);\r\n }\r\n*/\r\n\r\n override ngOnDestroy() {\r\n super.ngOnDestroy();\r\n\r\n const group = this.buttonToggleGroup;\r\n\r\n // Remove the toggle from the selection once it's destroyed. Needs to happen\r\n // on the next tick to avoid \"changed after checked\" errors.\r\n if (group && group._isSelected(this)) {\r\n group._syncButtonToggle(this, false, false, true);\r\n }\r\n }\r\n\r\n /** Checks the button toggle due to an interaction with the underlying native button. */\r\n _onButtonClick() {\r\n if (this.disabled) {\r\n return;\r\n }\r\n\r\n const newChecked = this.isSingleSelector() ? true : !this._checked;\r\n\r\n if (newChecked !== this._checked) {\r\n this._checked = newChecked;\r\n if (this.buttonToggleGroup) {\r\n this.buttonToggleGroup._syncButtonToggle(this, this._checked, true);\r\n this.buttonToggleGroup._onTouched();\r\n }\r\n }\r\n\r\n if (this.isSingleSelector()) {\r\n const focusable = this.buttonToggleGroup._buttonToggles?.find(toggle => {\r\n return toggle.tabIndex === 0;\r\n });\r\n // Modify the tabindex attribute of the last focusable button toggle to -1.\r\n if (focusable) {\r\n focusable.tabIndex = -1;\r\n }\r\n // Modify the tabindex attribute of the presently selected button toggle to 0.\r\n this.tabIndex = 0;\r\n }\r\n\r\n // Emit a change event when it's the single selector\r\n this.change.emit(new CuteButtonToggleChange(this, this.value));\r\n }\r\n\r\n /** Gets the name that should be assigned to the inner DOM node. */\r\n protected _getButtonName(): string | null {\r\n if (this.isSingleSelector()) {\r\n return this.buttonToggleGroup.name;\r\n }\r\n return this.name || null;\r\n }\r\n\r\n /** Whether the toggle is in single selection mode. */\r\n private isSingleSelector(): boolean {\r\n return this.buttonToggleGroup && !this.buttonToggleGroup.multiple;\r\n }\r\n\r\n protected readonly toThemeColor = toThemeColor;\r\n}\r\n","<!--\r\n For capturing HTML-elements such as <i class..> or <img src=\"\"...> and others\r\n we need apply [cuteButtonIcon] attribute to them.\r\n-->\r\n<span class=\"cute-icon-wrapper\">\r\n <ng-content select=\".material-icons:not([iconPositionEnd]),\r\n .bi:not([iconPositionEnd]),\r\n cute-icon:not([iconPositionEnd]),\r\n cute-avatar:not([iconPositionEnd]),\r\n [cuteButtonIcon]:not([iconPositionEnd])\">\r\n </ng-content>\r\n</span>\r\n\r\n<span class=\"cute-button-label\">\r\n <ng-content>\r\n @if(visuallyHiddenLabel) {\r\n <span class=\"visually-hidden\"> {{visuallyHiddenLabel}} </span>\r\n }\r\n </ng-content>\r\n</span>\r\n\r\n<span class=\"cute-icon-wrapper\">\r\n <ng-content select=\".material-icons[iconPositionEnd],\r\n .bi:[iconPositionEnd],\r\n cute-icon[iconPositionEnd],\r\n cute-avatar:[iconPositionEnd],\r\n [cuteButtonIcon][iconPositionEnd]\">\r\n </ng-content>\r\n</span>\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\nimport {NgModule, Type} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {CuteButtonToggle} from \"./button-toggle.component\";\r\nimport {CuteButtonToggleGroup} from \"./button-toggle-group.directive\";\r\n\r\nconst TYPES: (any | Type<any>)[] = [\r\n CuteButtonToggle,\r\n CuteButtonToggleGroup,\r\n];\r\n\r\n@NgModule({\r\n imports: [CommonModule, ...TYPES],\r\n exports: TYPES,\r\n declarations: [],\r\n})\r\nexport class CuteButtonToggleModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cute-widgets-base-button-toggle.mjs","sources":["../../../../projects/cute-widgets/base/button-toggle/src/button-toggle-group.directive.ts","../../../../projects/cute-widgets/base/button-toggle/src/button-toggle.component.ts","../../../../projects/cute-widgets/base/button/src/button.component.html","../../../../projects/cute-widgets/base/button-toggle/src/button-toggle.module.ts","../../../../projects/cute-widgets/base/button-toggle/cute-widgets-base-button-toggle.ts"],"sourcesContent":["/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\nimport {\r\n AfterContentInit, booleanAttribute,\r\n ContentChildren,\r\n Directive, EventEmitter,\r\n forwardRef, inject,\r\n InjectionToken, Input, isDevMode,\r\n OnInit, Output,\r\n QueryList\r\n} from \"@angular/core\";\r\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from \"@angular/forms\";\r\nimport {SelectionModel} from \"@angular/cdk/collections\";\r\nimport {DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, UP_ARROW, SPACE, ENTER, hasModifierKey} from '@angular/cdk/keycodes';\r\nimport {\r\n CUTE_BUTTON_TOGGLE_DEFAULT_OPTIONS,\r\n CuteButtonToggle,\r\n CuteButtonToggleChange,\r\n CuteButtonToggleDefaultOptions\r\n} from \"./button-toggle.component\";\r\nimport {Direction, Directionality} from \"@angular/cdk/bidi\";\r\nimport {CuteButtonGroup, CuteButtonStyle} from '@cute-widgets/base/button';\r\n\r\n/**\r\n * Injection token that can be used to reference instances of `CuteButtonToggleGroup`.\r\n * It serves as an alternative token to the actual `CuteButtonToggleGroup` class which\r\n * could cause unnecessary retention of the class and its component metadata.\r\n */\r\nexport const CUTE_BUTTON_TOGGLE_GROUP = new InjectionToken<CuteButtonToggleGroup>(\r\n 'CuteButtonToggleGroup',\r\n);\r\n\r\n/**\r\n * Provider Expression that allows cute-button-toggle-group to register as a ControlValueAccessor.\r\n * This allows it to support [(ngModel)].\r\n * @docs-private\r\n */\r\nexport const CUTE_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => CuteButtonToggleGroup),\r\n multi: true,\r\n};\r\n\r\n// Counter used to generate unique IDs.\r\nlet uniqueIdCounter = 0;\r\n\r\n/** Exclusive selection button toggle group that behaves like a radio-button group. */\r\n@Directive({\r\n selector: 'cute-button-toggle-group',\r\n providers: [\r\n CUTE_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR,\r\n {provide: CUTE_BUTTON_TOGGLE_GROUP, useExisting: CuteButtonToggleGroup},\r\n ],\r\n host: {\r\n 'class': 'cute-button-toggle-group',\r\n '[attr.role]': 'multiple ? \"group\" : \"radiogroup\"',\r\n '[attr.aria-disabled]': 'disabled',\r\n '[attr.tabindex]': '-1',\r\n '(keydown)': '_keydown($event)',\r\n },\r\n exportAs: 'cuteButtonToggleGroup',\r\n standalone: true,\r\n})\r\nexport class CuteButtonToggleGroup extends CuteButtonGroup implements ControlValueAccessor, OnInit, AfterContentInit {\r\n private _dir = inject(Directionality, {optional: true});\r\n private _multiple = false;\r\n private _selectionModel: SelectionModel<CuteButtonToggle> | undefined;\r\n\r\n /**\r\n * Reference to the raw value that the consumer tried to assign. The real\r\n * value will exclude any values from this one that don't correspond to a\r\n * toggle. Useful for the cases where the value is assigned before the toggles\r\n * have been initialized or at the same that they're being swapped out.\r\n */\r\n private _rawValue: any;\r\n\r\n /**\r\n * The method to be called in order to update ngModel.\r\n * Now `ngModel` binding is not supported in multiple selection mode.\r\n */\r\n private _controlValueAccessorChangeFn: (value: any) => void = () => {};\r\n\r\n /** onTouch function registered via registerOnTouch (ControlValueAccessor). */\r\n _onTouched: () => any = () => {};\r\n\r\n /** Child button toggle buttons. */\r\n @ContentChildren(forwardRef(() => CuteButtonToggle), {\r\n // Note that this would technically pick up toggles\r\n // from nested groups, but that's not a case that we support.\r\n descendants: true,\r\n })\r\n _buttonToggles: QueryList<CuteButtonToggle> | undefined;\r\n\r\n /** The button toggle default style. Only outlined buttons supported. */\r\n override buttonStyle: Extract<CuteButtonStyle, \"outlined\"|\"outline-button\"> = \"outline-button\";\r\n\r\n /** `name` attribute for the underlying `input` element. */\r\n @Input()\r\n get name(): string { return this._name; }\r\n set name(value: string) {\r\n this._name = value;\r\n this._markButtonsForCheck();\r\n }\r\n private _name = `cute-button-toggle-group-${uniqueIdCounter++}`;\r\n\r\n /** Value of the toggle group. */\r\n @Input()\r\n get value(): any {\r\n const selected = this._selectionModel ? this._selectionModel.selected : [];\r\n\r\n if (this.multiple) {\r\n return selected.map(toggle => toggle.value);\r\n }\r\n\r\n return selected[0] ? selected[0].value : undefined;\r\n }\r\n set value(newValue: any) {\r\n this._setSelectionByValue(newValue);\r\n this.valueChange.emit(this.value);\r\n }\r\n\r\n /** Selected button toggles in the group. */\r\n get selected(): CuteButtonToggle | CuteButtonToggle[] {\r\n const selected = this._selectionModel ? this._selectionModel.selected : [];\r\n return this.multiple ? selected : selected[0] || null;\r\n }\r\n\r\n /** Whether multiple button toggles can be selected. */\r\n @Input({transform: booleanAttribute})\r\n get multiple(): boolean { return this._multiple; }\r\n set multiple(value: boolean) {\r\n this._multiple = value;\r\n this._markButtonsForCheck();\r\n }\r\n\r\n /** Whether buttons in the group should be interactive while they're disabled. */\r\n @Input({transform: booleanAttribute})\r\n get disabledInteractive(): boolean { return this._disabledInteractive; }\r\n set disabledInteractive(value: boolean) {\r\n this._disabledInteractive = value;\r\n this._markButtonsForCheck();\r\n }\r\n private _disabledInteractive = false;\r\n\r\n /** Whether the checkmark indicator for single-selection button toggle groups is hidden. */\r\n @Input({transform: booleanAttribute})\r\n get hideSingleSelectionIndicator(): boolean { return this._hideSingleSelectionIndicator; }\r\n set hideSingleSelectionIndicator(value: boolean) {\r\n this._hideSingleSelectionIndicator = value;\r\n this._markButtonsForCheck();\r\n }\r\n private _hideSingleSelectionIndicator: boolean = false;\r\n\r\n /** Whether the checkmark indicator for multiple-selection button toggle groups is hidden. */\r\n @Input({transform: booleanAttribute})\r\n get hideMultipleSelectionIndicator(): boolean { return this._hideMultipleSelectionIndicator; }\r\n set hideMultipleSelectionIndicator(value: boolean) {\r\n this._hideMultipleSelectionIndicator = value;\r\n this._markButtonsForCheck();\r\n }\r\n private _hideMultipleSelectionIndicator: boolean = false;\r\n\r\n /**\r\n * Event that emits whenever the value of the group changes.\r\n * Used to facilitate two-way data binding.\r\n * @docs-private\r\n */\r\n @Output() readonly valueChange = new EventEmitter<any>();\r\n\r\n /** Event emitted when the group's value changes. */\r\n @Output() readonly change = new EventEmitter<CuteButtonToggleChange>();\r\n\r\n\r\n /** The layout direction of the toggle button group. */\r\n get dir(): Direction {\r\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\r\n }\r\n\r\n constructor(...args: unknown[]);\r\n constructor() {\r\n super();\r\n\r\n const defaultOptions = inject<CuteButtonToggleDefaultOptions>(\r\n CUTE_BUTTON_TOGGLE_DEFAULT_OPTIONS,\r\n {optional: true},\r\n );\r\n\r\n //this.appearance =\r\n // defaultOptions && defaultOptions.appearance ? defaultOptions.appearance : 'standard';\r\n this.hideSingleSelectionIndicator = defaultOptions?.hideSingleSelectionIndicator ?? false;\r\n this.hideMultipleSelectionIndicator = defaultOptions?.hideMultipleSelectionIndicator ?? false;\r\n }\r\n\r\n override ngOnInit() {\r\n super.ngOnInit();\r\n this._selectionModel = new SelectionModel<CuteButtonToggle>(this.multiple, undefined, false);\r\n }\r\n\r\n override ngAfterContentInit() {\r\n super.ngAfterContentInit();\r\n\r\n if (this._buttonToggles) {\r\n this._selectionModel?.select(...this._buttonToggles.filter(toggle => toggle.checked));\r\n }\r\n if (!this.multiple) {\r\n this._initializeTabIndex();\r\n }\r\n }\r\n\r\n /** Initializes the tabindex attribute using the radio pattern. */\r\n private _initializeTabIndex() {\r\n if (this._buttonToggles) {\r\n this._buttonToggles.forEach(toggle => {\r\n toggle.tabIndex = -1;\r\n });\r\n if (this.selected) {\r\n (this.selected as CuteButtonToggle).tabIndex = 0;\r\n } else {\r\n for (let i = 0; i < this._buttonToggles.length; i++) {\r\n const toggle = this._buttonToggles.get(i)!;\r\n\r\n if (!toggle.disabled) {\r\n toggle.tabIndex = 0;\r\n break;\r\n }\r\n }\r\n }\r\n this._markButtonsForCheck();\r\n }\r\n }\r\n\r\n /**\r\n * Sets the model value. Implemented as part of ControlValueAccessor.\r\n * @param value Value to be set to the model.\r\n */\r\n writeValue(value: any) {\r\n this.value = value;\r\n this.markForCheck();\r\n }\r\n\r\n // Implemented as part of ControlValueAccessor.\r\n registerOnChange(fn: (value: any) => void) {\r\n this._controlValueAccessorChangeFn = fn;\r\n }\r\n\r\n // Implemented as part of ControlValueAccessor.\r\n registerOnTouched(fn: any) {\r\n this._onTouched = fn;\r\n }\r\n\r\n // Implemented as part of ControlValueAccessor.\r\n override setDisabledState(isDisabled: boolean): boolean {\r\n if (super.setDisabledState(isDisabled)) {\r\n this._buttonToggles?.forEach(toggle => toggle.disabled = isDisabled)\r\n this._markButtonsForCheck();\r\n }\r\n return false;\r\n }\r\n\r\n /** Handle keydown event calling to single-select button toggle. */\r\n protected _keydown(event: KeyboardEvent) {\r\n if (this.multiple || this.disabled || hasModifierKey(event) || !this._buttonToggles) {\r\n return;\r\n }\r\n\r\n const target = event.target as HTMLButtonElement;\r\n const buttonId = target.id;\r\n const index = this._buttonToggles.toArray().findIndex(toggle => {\r\n return toggle.buttonId === buttonId;\r\n });\r\n\r\n if (index == -1) { return; }\r\n\r\n let nextButton: CuteButtonToggle | null = null;\r\n switch (event.keyCode) {\r\n case SPACE:\r\n case ENTER:\r\n nextButton = this._buttonToggles.get(index) || null;\r\n //nextButton.checked = true;\r\n break;\r\n case UP_ARROW:\r\n nextButton = this._getNextButton(index, -1);\r\n break;\r\n case LEFT_ARROW:\r\n nextButton = this._getNextButton(index, this.dir === 'ltr' ? -1 : 1);\r\n break;\r\n case DOWN_ARROW:\r\n nextButton = this._getNextButton(index, 1);\r\n break;\r\n case RIGHT_ARROW:\r\n nextButton = this._getNextButton(index, this.dir === 'ltr' ? 1 : -1);\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n if (nextButton) {\r\n event.preventDefault();\r\n nextButton._onButtonClick();\r\n nextButton.focus();\r\n }\r\n }\r\n\r\n /** Dispatch change event with current selection and group value. */\r\n private _emitChangeEvent(toggle: CuteButtonToggle): void {\r\n const event = new CuteButtonToggleChange(toggle, this.value);\r\n this._rawValue = event.value;\r\n this._controlValueAccessorChangeFn(event.value);\r\n this.change.emit(event);\r\n }\r\n\r\n /**\r\n * Syncs a button toggle's selected state with the model value.\r\n * @param toggle Toggle to be synced.\r\n * @param select Whether the toggle should be selected.\r\n * @param isUserInput Whether the change was a result of a user interaction.\r\n * @param deferEvents Whether to defer emitting the change events.\r\n */\r\n _syncButtonToggle(\r\n toggle: CuteButtonToggle,\r\n select: boolean,\r\n isUserInput = false,\r\n deferEvents = false,\r\n ) {\r\n // Deselect the currently selected toggle if we're in single-selection\r\n // mode and the button being toggled isn't selected at the moment.\r\n if (!this.multiple && this.selected && !toggle.checked) {\r\n (this.selected as CuteButtonToggle).checked = false;\r\n }\r\n\r\n if (this._selectionModel) {\r\n if (select) {\r\n this._selectionModel.select(toggle);\r\n } else {\r\n this._selectionModel.deselect(toggle);\r\n }\r\n } else {\r\n deferEvents = true;\r\n }\r\n\r\n // We need to defer in some cases in order to avoid \"changed after checked errors\", however,\r\n // the side effect is that we may end up updating the model value out of sequence in others\r\n // The `deferEvents` flag allows us to decide whether to do it on a case-by-case basis.\r\n if (deferEvents) {\r\n Promise.resolve().then(() => this._updateModelValue(toggle, isUserInput));\r\n } else {\r\n this._updateModelValue(toggle, isUserInput);\r\n }\r\n }\r\n\r\n /** Checks whether a button toggle is selected. */\r\n _isSelected(toggle: CuteButtonToggle): boolean {\r\n return this._selectionModel ? this._selectionModel.isSelected(toggle) : false;\r\n }\r\n\r\n /** Determines whether a button toggle should be checked on init. */\r\n _isPrechecked(toggle: CuteButtonToggle) {\r\n if (typeof this._rawValue === 'undefined') {\r\n return false;\r\n }\r\n\r\n if (this.multiple && Array.isArray(this._rawValue)) {\r\n return this._rawValue.some(value => toggle.value != null && value === toggle.value);\r\n }\r\n\r\n return toggle.value === this._rawValue;\r\n }\r\n\r\n /** Obtains the subsequent toggle to which the focus shifts. */\r\n private _getNextButton(startIndex: number, offset: number): CuteButtonToggle | null {\r\n const items = this._buttonToggles;\r\n\r\n if (items) {\r\n for (let i = 1; i <= items.length; i++) {\r\n const index = (startIndex + offset * i + items.length) % items.length;\r\n const item = items.get(index);\r\n\r\n if (item && !item.disabled) {\r\n return item;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /** Updates the selection state of the toggles in the group based on a value. */\r\n private _setSelectionByValue(value: any | any[]) {\r\n this._rawValue = value;\r\n\r\n if (!this._buttonToggles) {\r\n return;\r\n }\r\n\r\n const toggles = this._buttonToggles.toArray();\r\n\r\n if (this.multiple && value) {\r\n if (!Array.isArray(value) && isDevMode() ) {\r\n throw Error('Value must be an array in multiple-selection mode.');\r\n }\r\n\r\n this._clearSelection();\r\n value.forEach((currentValue: any) => this._selectValue(currentValue, toggles));\r\n } else {\r\n this._clearSelection();\r\n this._selectValue(value, toggles);\r\n }\r\n\r\n // In single selection mode, we need at least one enabled toggle to always be focusable.\r\n if (!this.multiple && toggles.every(toggle => toggle.tabIndex === -1)) {\r\n for (const toggle of toggles) {\r\n if (!toggle.disabled) {\r\n toggle.tabIndex = 0;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Clears the selected toggles. */\r\n private _clearSelection() {\r\n this._selectionModel?.clear();\r\n this._buttonToggles?.forEach(toggle => {\r\n toggle.checked = false;\r\n // If the button toggle is in single select mode, initialize the tabIndex.\r\n if (!this.multiple) {\r\n toggle.tabIndex = -1;\r\n }\r\n });\r\n }\r\n\r\n /** Selects a value if there's a toggle that corresponds to it. */\r\n private _selectValue(value: any, toggles: CuteButtonToggle[]) {\r\n if (this._selectionModel) {\r\n for (const toggle of toggles) {\r\n if (toggle.value != null && toggle.value === value) {\r\n toggle.checked = true;\r\n this._selectionModel.select(toggle);\r\n if (!this.multiple) {\r\n // If the button toggle is in single select mode, reset the tabIndex.\r\n toggle.tabIndex = 0;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Syncs up the group's value with the model and emits the change event. */\r\n private _updateModelValue(toggle: CuteButtonToggle, isUserInput: boolean) {\r\n // Only emit the change event for user input.\r\n if (isUserInput) {\r\n this._emitChangeEvent(toggle);\r\n }\r\n\r\n // Note: we emit this one no matter whether it was a user interaction, because\r\n // it is used by Angular to sync up the two-way data binding.\r\n this.valueChange.emit(this.value);\r\n }\r\n\r\n /** Marks all the child button toggles to be checked. */\r\n private _markButtonsForCheck() {\r\n this._buttonToggles?.forEach(toggle => toggle.markForCheck());\r\n }\r\n\r\n}\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\nimport {\r\n EventEmitter,\r\n Input,\r\n Output,\r\n InjectionToken,\r\n booleanAttribute, inject, OnInit, OnDestroy, Component, ViewEncapsulation, ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport {CuteButtonBase, CuteButtonStyle} from \"@cute-widgets/base/button\";\r\nimport {CUTE_BUTTON_TOGGLE_GROUP, CuteButtonToggleGroup} from \"./button-toggle-group.directive\";\r\nimport {_animationsDisabled, toThemeColor} from \"@cute-widgets/base/core\";\r\nimport {CUTE_BUTTON_BASE} from '@cute-widgets/base/button';\r\n\r\n/**\r\n * Represents the default options for the button toggle that can be configured\r\n * using the `CUTE_BUTTON_TOGGLE_DEFAULT_OPTIONS` injection token.\r\n */\r\nexport interface CuteButtonToggleDefaultOptions {\r\n /**\r\n * Default appearance to be used by button toggles. Can be overridden by explicitly\r\n * setting an appearance on a button toggle or group.\r\n */\r\n //appearance?: CuteButtonToggleAppearance;\r\n /** Whether icon indicators should be hidden for single-selection button toggle groups. */\r\n hideSingleSelectionIndicator?: boolean;\r\n /** Whether icon indicators should be hidden for multiple-selection button toggle groups. */\r\n hideMultipleSelectionIndicator?: boolean;\r\n /** Whether disabled toggle buttons should be interactive. */\r\n disabledInteractive?: boolean;\r\n}\r\n\r\n/**\r\n * Injection token that can be used to configure the\r\n * default options for all button toggles within an app.\r\n */\r\nexport const CUTE_BUTTON_TOGGLE_DEFAULT_OPTIONS = new InjectionToken<CuteButtonToggleDefaultOptions>(\r\n 'CUTE_BUTTON_TOGGLE_DEFAULT_OPTIONS',\r\n {\r\n providedIn: 'root',\r\n factory: () => ({\r\n hideSingleSelectionIndicator: false,\r\n hideMultipleSelectionIndicator: false,\r\n disabledInteractive: false,\r\n }),\r\n },\r\n);\r\n\r\n// Counter used to generate unique IDs.\r\nlet uniqueId = 0;\r\n\r\n/** Change event object emitted by button toggle. */\r\nexport class CuteButtonToggleChange {\r\n constructor(\r\n /** The button toggle that emits the event. */\r\n public source: CuteButtonToggle,\r\n\r\n /** The value assigned to the button toggle. */\r\n public value: any,\r\n ) {}\r\n}\r\n\r\n/** Single toggle button that should be nested directly inside a toggle group. */\r\n@Component({\r\n selector: 'cute-button-toggle',\r\n templateUrl: '../../button/src/button.component.html',\r\n styleUrls: ['../../button/src/button.component.scss', './button-toggle.component.scss'],\r\n exportAs: 'cuteButtonToggle',\r\n host: {\r\n 'class': 'cute-button-toggle',\r\n '[class.cute-button-toggle-standalone]': '!buttonToggleGroup',\r\n '[class.active]': 'checked',\r\n '[attr.aria-label]': 'null',\r\n '[attr.aria-labelledby]': 'null',\r\n '[attr.name]': 'null',\r\n '(focus)': 'focus()',\r\n '(click)': '_onButtonClick()',\r\n '[style.--bs-btn-hover-color]': \"'var(--bs-'+toThemeColor(color)+'-text-emphasis)'\",\r\n //'role': 'presentation',\r\n },\r\n providers:[\r\n { provide: CUTE_BUTTON_BASE, useExisting: CuteButtonToggle }\r\n ],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n})\r\nexport class CuteButtonToggle extends CuteButtonBase implements OnInit, OnDestroy {\r\n private _animationDisabled = _animationsDisabled();\r\n protected _multiple: boolean = true;\r\n /** The parent button toggle group (exclusive selection). Optional. */\r\n protected readonly buttonToggleGroup: CuteButtonToggleGroup;\r\n\r\n /** Unique ID for the underlying `button` element. */\r\n get buttonId(): string {\r\n return this.id ?? `cute-toggle-button-${uniqueId++}`;\r\n }\r\n\r\n override get inputButtonStyle(): Extract<CuteButtonStyle, \"outlined\"|\"outline-button\"> {\r\n return super.inputButtonStyle as Extract<CuteButtonStyle, \"outlined\"|\"outline-button\">;\r\n }\r\n override set inputButtonStyle(value: Extract<CuteButtonStyle, \"outlined\"|\"outline-button\">) {\r\n super.inputButtonStyle = value;\r\n }\r\n\r\n /** HTML's 'name' attribute used to group radios for unique selection. */\r\n @Input() name: string | undefined;\r\n\r\n /** CuteButtonToggleGroup reads this to assign its own value. */\r\n @Input() value: any;\r\n\r\n /** Whether ripples are disabled on the button toggle. */\r\n //@Input({transform: booleanAttribute}) disableRipple: boolean = false;\r\n\r\n /** Whether the button is checked. */\r\n @Input({transform: booleanAttribute})\r\n get checked(): boolean {\r\n return this.buttonToggleGroup ? this.buttonToggleGroup._isSelected(this) : this._checked;\r\n }\r\n set checked(value: boolean) {\r\n if (value !== this._checked) {\r\n this._checked = value;\r\n\r\n if (this.buttonToggleGroup) {\r\n this.buttonToggleGroup._syncButtonToggle(this, this._checked);\r\n }\r\n\r\n this.markForCheck();\r\n }\r\n }\r\n private _checked = false;\r\n\r\n /** Whether the button should remain interactive when it is disabled. */\r\n override get disabledInteractive(): boolean {\r\n return (super.disabledInteractive ||\r\n (this.buttonToggleGroup !== null && this.buttonToggleGroup.disabledInteractive)\r\n );\r\n }\r\n override set disabledInteractive(value: boolean) {\r\n super.disabledInteractive = value;\r\n }\r\n\r\n /** Event emitted when the group value changes. */\r\n @Output() readonly change = new EventEmitter<CuteButtonToggleChange>();\r\n\r\n /** Whether the button is disabled. */\r\n // protected override getDisabledState(): boolean {\r\n // const isDisabled = super.getDisabledState();\r\n // return isDisabled || (this.buttonToggleGroup && this.buttonToggleGroup.disabled);\r\n // }\r\n\r\n constructor(...args: unknown[]);\r\n constructor() {\r\n super();\r\n\r\n const toggleGroup = inject<CuteButtonToggleGroup>(CUTE_BUTTON_TOGGLE_GROUP, {optional: true})!;\r\n //const defaultTabIndex = inject(new HostAttributeToken('tabindex'), {optional: true}) || '';\r\n const defaultOptions = inject<CuteButtonToggleDefaultOptions>(\r\n CUTE_BUTTON_TOGGLE_DEFAULT_OPTIONS,\r\n {optional: true},\r\n );\r\n\r\n //this._tabIndex = parseInt(defaultTabIndex) || 0;\r\n this.buttonToggleGroup = toggleGroup;\r\n this.disabledInteractive = defaultOptions?.disabledInteractive ?? false;\r\n }\r\n\r\n override ngOnInit() {\r\n super.ngOnInit();\r\n\r\n const group = this.buttonToggleGroup;\r\n this.id = this.id || `cute-button-toggle-${uniqueId++}`;\r\n\r\n if (group) {\r\n\r\n if (!this.color) {\r\n this.defaultColor = group.color;\r\n }\r\n\r\n if (group._isPrechecked(this)) {\r\n this.checked = true;\r\n } else if (group._isSelected(this) !== this._checked) {\r\n // As a side effect of the circular dependency between the toggle group and the button,\r\n // we may end up in a state where the button is supposed to be checked on init, but it\r\n // isn't, because the checked value was assigned too early. This can happen when Ivy\r\n // assigns the static input value before the `ngOnInit` has run.\r\n group._syncButtonToggle(this, this._checked);\r\n }\r\n }\r\n }\r\n\r\n /*\r\n override ngAfterViewInit() {\r\n super.ngAfterViewInit();\r\n // This serves two purposes:\r\n // 1. We don't want the animation to fire on the first render for pre-checked toggles so we\r\n // delay adding the class until the view is rendered.\r\n // 2. We don't want animation if the `NoopAnimationsModule` is provided.\r\n //if (this._animationMode !== 'NoopAnimations') {\r\n // this._elementRef.nativeElement.classList.add('mat-button-toggle-animations-enabled');\r\n //}\r\n\r\n this._focusMonitor.monitor(this._elementRef, true);\r\n }\r\n*/\r\n\r\n override ngOnDestroy() {\r\n super.ngOnDestroy();\r\n\r\n const group = this.buttonToggleGroup;\r\n\r\n // Remove the toggle from the selection once it's destroyed. Needs to happen\r\n // on the next tick to avoid \"changed after checked\" errors.\r\n if (group && group._isSelected(this)) {\r\n group._syncButtonToggle(this, false, false, true);\r\n }\r\n }\r\n\r\n /** Checks the button toggle due to an interaction with the underlying native button. */\r\n _onButtonClick() {\r\n if (this.disabled) {\r\n return;\r\n }\r\n\r\n const newChecked = this.isSingleSelector() ? true : !this._checked;\r\n\r\n if (newChecked !== this._checked) {\r\n this._checked = newChecked;\r\n if (this.buttonToggleGroup) {\r\n this.buttonToggleGroup._syncButtonToggle(this, this._checked, true);\r\n this.buttonToggleGroup._onTouched();\r\n }\r\n }\r\n\r\n if (this.isSingleSelector()) {\r\n const focusable = this.buttonToggleGroup._buttonToggles?.find(toggle => {\r\n return toggle.tabIndex === 0;\r\n });\r\n // Modify the tabindex attribute of the last focusable button toggle to -1.\r\n if (focusable) {\r\n focusable.tabIndex = -1;\r\n }\r\n // Modify the tabindex attribute of the presently selected button toggle to 0.\r\n this.tabIndex = 0;\r\n }\r\n\r\n // Emit a change event when it's the single selector\r\n this.change.emit(new CuteButtonToggleChange(this, this.value));\r\n }\r\n\r\n /** Gets the name that should be assigned to the inner DOM node. */\r\n protected _getButtonName(): string | null {\r\n if (this.isSingleSelector()) {\r\n return this.buttonToggleGroup.name;\r\n }\r\n return this.name || null;\r\n }\r\n\r\n /** Whether the toggle is in single selection mode. */\r\n private isSingleSelector(): boolean {\r\n return this.buttonToggleGroup && !this.buttonToggleGroup.multiple;\r\n }\r\n\r\n protected readonly toThemeColor = toThemeColor;\r\n}\r\n","<!--\r\n For capturing HTML-elements such as <i class..> or <img src=\"\"...> and others\r\n we need apply [cuteButtonIcon] attribute to them.\r\n-->\r\n<span class=\"cute-icon-wrapper\">\r\n <ng-content select=\".material-icons:not([iconPositionEnd]),\r\n .bi:not([iconPositionEnd]),\r\n cute-icon:not([iconPositionEnd]),\r\n cute-avatar:not([iconPositionEnd]),\r\n [cuteButtonIcon]:not([iconPositionEnd])\">\r\n </ng-content>\r\n</span>\r\n\r\n<span class=\"cute-button-label\" [class.cute-button-label__wrap]=\"wrapLabel\">\r\n <ng-content>\r\n @if(visuallyHiddenLabel) {\r\n <span class=\"visually-hidden\"> {{visuallyHiddenLabel}} </span>\r\n }\r\n </ng-content>\r\n</span>\r\n\r\n<span class=\"cute-icon-wrapper\">\r\n <ng-content select=\".material-icons[iconPositionEnd],\r\n .bi:[iconPositionEnd],\r\n cute-icon[iconPositionEnd],\r\n cute-avatar:[iconPositionEnd],\r\n [cuteButtonIcon][iconPositionEnd]\">\r\n </ng-content>\r\n</span>\r\n","/**\r\n * @license Apache-2.0\r\n *\r\n * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.\r\n *\r\n * You may not use this file except in compliance with the License\r\n * that can be found at http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\nimport {NgModule, Type} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {CuteButtonToggle} from \"./button-toggle.component\";\r\nimport {CuteButtonToggleGroup} from \"./button-toggle-group.directive\";\r\n\r\nconst TYPES: (any | Type<any>)[] = [\r\n CuteButtonToggle,\r\n CuteButtonToggleGroup,\r\n];\r\n\r\n@NgModule({\r\n imports: [CommonModule, ...TYPES],\r\n exports: TYPES,\r\n declarations: [],\r\n})\r\nexport class CuteButtonToggleModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}