@cute-widgets/base 20.0.1

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 (183) hide show
  1. package/CHANGELOG.md +1 -0
  2. package/LICENSE.md +191 -0
  3. package/README.md +190 -0
  4. package/abstract/index.d.ts +327 -0
  5. package/alert/index.d.ts +68 -0
  6. package/autocomplete/index.d.ts +442 -0
  7. package/badge/index.d.ts +26 -0
  8. package/bottom-sheet/index.d.ts +231 -0
  9. package/button/index.d.ts +182 -0
  10. package/button-toggle/index.d.ts +225 -0
  11. package/card/index.d.ts +163 -0
  12. package/checkbox/index.d.ts +174 -0
  13. package/chips/index.d.ts +963 -0
  14. package/collapse/index.d.ts +97 -0
  15. package/core/animation/index.d.ts +43 -0
  16. package/core/datetime/index.d.ts +404 -0
  17. package/core/directives/index.d.ts +168 -0
  18. package/core/error/index.d.ts +74 -0
  19. package/core/index.d.ts +1039 -0
  20. package/core/interfaces/index.d.ts +114 -0
  21. package/core/layout/index.d.ts +53 -0
  22. package/core/line/index.d.ts +37 -0
  23. package/core/nav/index.d.ts +321 -0
  24. package/core/observers/index.d.ts +124 -0
  25. package/core/option/index.d.ts +185 -0
  26. package/core/pipes/index.d.ts +53 -0
  27. package/core/ripple/index.d.ts +66 -0
  28. package/core/testing/index.d.ts +154 -0
  29. package/core/theming/index.d.ts +118 -0
  30. package/core/types/index.d.ts +53 -0
  31. package/core/utils/index.d.ts +129 -0
  32. package/cute-widgets-base-20.0.1.tgz +0 -0
  33. package/datepicker/index.d.ts +1817 -0
  34. package/dialog/index.d.ts +484 -0
  35. package/divider/index.d.ts +24 -0
  36. package/expansion/README.md +8 -0
  37. package/expansion/index.d.ts +308 -0
  38. package/fesm2022/cute-widgets-base-abstract.mjs +547 -0
  39. package/fesm2022/cute-widgets-base-abstract.mjs.map +1 -0
  40. package/fesm2022/cute-widgets-base-alert.mjs +198 -0
  41. package/fesm2022/cute-widgets-base-alert.mjs.map +1 -0
  42. package/fesm2022/cute-widgets-base-autocomplete.mjs +1217 -0
  43. package/fesm2022/cute-widgets-base-autocomplete.mjs.map +1 -0
  44. package/fesm2022/cute-widgets-base-badge.mjs +75 -0
  45. package/fesm2022/cute-widgets-base-badge.mjs.map +1 -0
  46. package/fesm2022/cute-widgets-base-bottom-sheet.mjs +416 -0
  47. package/fesm2022/cute-widgets-base-bottom-sheet.mjs.map +1 -0
  48. package/fesm2022/cute-widgets-base-button-toggle.mjs +640 -0
  49. package/fesm2022/cute-widgets-base-button-toggle.mjs.map +1 -0
  50. package/fesm2022/cute-widgets-base-button.mjs +546 -0
  51. package/fesm2022/cute-widgets-base-button.mjs.map +1 -0
  52. package/fesm2022/cute-widgets-base-card.mjs +471 -0
  53. package/fesm2022/cute-widgets-base-card.mjs.map +1 -0
  54. package/fesm2022/cute-widgets-base-checkbox.mjs +390 -0
  55. package/fesm2022/cute-widgets-base-checkbox.mjs.map +1 -0
  56. package/fesm2022/cute-widgets-base-chips.mjs +2360 -0
  57. package/fesm2022/cute-widgets-base-chips.mjs.map +1 -0
  58. package/fesm2022/cute-widgets-base-collapse.mjs +259 -0
  59. package/fesm2022/cute-widgets-base-collapse.mjs.map +1 -0
  60. package/fesm2022/cute-widgets-base-core-animation.mjs +53 -0
  61. package/fesm2022/cute-widgets-base-core-animation.mjs.map +1 -0
  62. package/fesm2022/cute-widgets-base-core-datetime.mjs +568 -0
  63. package/fesm2022/cute-widgets-base-core-datetime.mjs.map +1 -0
  64. package/fesm2022/cute-widgets-base-core-directives.mjs +404 -0
  65. package/fesm2022/cute-widgets-base-core-directives.mjs.map +1 -0
  66. package/fesm2022/cute-widgets-base-core-error.mjs +105 -0
  67. package/fesm2022/cute-widgets-base-core-error.mjs.map +1 -0
  68. package/fesm2022/cute-widgets-base-core-interfaces.mjs +22 -0
  69. package/fesm2022/cute-widgets-base-core-interfaces.mjs.map +1 -0
  70. package/fesm2022/cute-widgets-base-core-layout.mjs +74 -0
  71. package/fesm2022/cute-widgets-base-core-layout.mjs.map +1 -0
  72. package/fesm2022/cute-widgets-base-core-line.mjs +87 -0
  73. package/fesm2022/cute-widgets-base-core-line.mjs.map +1 -0
  74. package/fesm2022/cute-widgets-base-core-nav.mjs +863 -0
  75. package/fesm2022/cute-widgets-base-core-nav.mjs.map +1 -0
  76. package/fesm2022/cute-widgets-base-core-observers.mjs +304 -0
  77. package/fesm2022/cute-widgets-base-core-observers.mjs.map +1 -0
  78. package/fesm2022/cute-widgets-base-core-option.mjs +373 -0
  79. package/fesm2022/cute-widgets-base-core-option.mjs.map +1 -0
  80. package/fesm2022/cute-widgets-base-core-pipes.mjs +97 -0
  81. package/fesm2022/cute-widgets-base-core-pipes.mjs.map +1 -0
  82. package/fesm2022/cute-widgets-base-core-ripple.mjs +172 -0
  83. package/fesm2022/cute-widgets-base-core-ripple.mjs.map +1 -0
  84. package/fesm2022/cute-widgets-base-core-testing.mjs +210 -0
  85. package/fesm2022/cute-widgets-base-core-testing.mjs.map +1 -0
  86. package/fesm2022/cute-widgets-base-core-theming.mjs +314 -0
  87. package/fesm2022/cute-widgets-base-core-theming.mjs.map +1 -0
  88. package/fesm2022/cute-widgets-base-core-types.mjs +22 -0
  89. package/fesm2022/cute-widgets-base-core-types.mjs.map +1 -0
  90. package/fesm2022/cute-widgets-base-core-utils.mjs +257 -0
  91. package/fesm2022/cute-widgets-base-core-utils.mjs.map +1 -0
  92. package/fesm2022/cute-widgets-base-core.mjs +1600 -0
  93. package/fesm2022/cute-widgets-base-core.mjs.map +1 -0
  94. package/fesm2022/cute-widgets-base-datepicker.mjs +4827 -0
  95. package/fesm2022/cute-widgets-base-datepicker.mjs.map +1 -0
  96. package/fesm2022/cute-widgets-base-dialog.mjs +1046 -0
  97. package/fesm2022/cute-widgets-base-dialog.mjs.map +1 -0
  98. package/fesm2022/cute-widgets-base-divider.mjs +86 -0
  99. package/fesm2022/cute-widgets-base-divider.mjs.map +1 -0
  100. package/fesm2022/cute-widgets-base-expansion.mjs +623 -0
  101. package/fesm2022/cute-widgets-base-expansion.mjs.map +1 -0
  102. package/fesm2022/cute-widgets-base-form-field.mjs +969 -0
  103. package/fesm2022/cute-widgets-base-form-field.mjs.map +1 -0
  104. package/fesm2022/cute-widgets-base-grid-list.mjs +715 -0
  105. package/fesm2022/cute-widgets-base-grid-list.mjs.map +1 -0
  106. package/fesm2022/cute-widgets-base-icon.mjs +1105 -0
  107. package/fesm2022/cute-widgets-base-icon.mjs.map +1 -0
  108. package/fesm2022/cute-widgets-base-input.mjs +726 -0
  109. package/fesm2022/cute-widgets-base-input.mjs.map +1 -0
  110. package/fesm2022/cute-widgets-base-layout-container.mjs +95 -0
  111. package/fesm2022/cute-widgets-base-layout-container.mjs.map +1 -0
  112. package/fesm2022/cute-widgets-base-layout-stack.mjs +166 -0
  113. package/fesm2022/cute-widgets-base-layout-stack.mjs.map +1 -0
  114. package/fesm2022/cute-widgets-base-layout.mjs +250 -0
  115. package/fesm2022/cute-widgets-base-layout.mjs.map +1 -0
  116. package/fesm2022/cute-widgets-base-list.mjs +1557 -0
  117. package/fesm2022/cute-widgets-base-list.mjs.map +1 -0
  118. package/fesm2022/cute-widgets-base-menu.mjs +1283 -0
  119. package/fesm2022/cute-widgets-base-menu.mjs.map +1 -0
  120. package/fesm2022/cute-widgets-base-navbar.mjs +359 -0
  121. package/fesm2022/cute-widgets-base-navbar.mjs.map +1 -0
  122. package/fesm2022/cute-widgets-base-paginator.mjs +485 -0
  123. package/fesm2022/cute-widgets-base-paginator.mjs.map +1 -0
  124. package/fesm2022/cute-widgets-base-progress.mjs +321 -0
  125. package/fesm2022/cute-widgets-base-progress.mjs.map +1 -0
  126. package/fesm2022/cute-widgets-base-radio.mjs +637 -0
  127. package/fesm2022/cute-widgets-base-radio.mjs.map +1 -0
  128. package/fesm2022/cute-widgets-base-select.mjs +1208 -0
  129. package/fesm2022/cute-widgets-base-select.mjs.map +1 -0
  130. package/fesm2022/cute-widgets-base-sidenav.mjs +1095 -0
  131. package/fesm2022/cute-widgets-base-sidenav.mjs.map +1 -0
  132. package/fesm2022/cute-widgets-base-slider.mjs +99 -0
  133. package/fesm2022/cute-widgets-base-slider.mjs.map +1 -0
  134. package/fesm2022/cute-widgets-base-snack-bar.mjs +897 -0
  135. package/fesm2022/cute-widgets-base-snack-bar.mjs.map +1 -0
  136. package/fesm2022/cute-widgets-base-sort.mjs +639 -0
  137. package/fesm2022/cute-widgets-base-sort.mjs.map +1 -0
  138. package/fesm2022/cute-widgets-base-spinner.mjs +154 -0
  139. package/fesm2022/cute-widgets-base-spinner.mjs.map +1 -0
  140. package/fesm2022/cute-widgets-base-stepper.mjs +673 -0
  141. package/fesm2022/cute-widgets-base-stepper.mjs.map +1 -0
  142. package/fesm2022/cute-widgets-base-table.mjs +1023 -0
  143. package/fesm2022/cute-widgets-base-table.mjs.map +1 -0
  144. package/fesm2022/cute-widgets-base-tabs.mjs +729 -0
  145. package/fesm2022/cute-widgets-base-tabs.mjs.map +1 -0
  146. package/fesm2022/cute-widgets-base-timepicker.mjs +965 -0
  147. package/fesm2022/cute-widgets-base-timepicker.mjs.map +1 -0
  148. package/fesm2022/cute-widgets-base-toolbar.mjs +120 -0
  149. package/fesm2022/cute-widgets-base-toolbar.mjs.map +1 -0
  150. package/fesm2022/cute-widgets-base-tooltip.mjs +947 -0
  151. package/fesm2022/cute-widgets-base-tooltip.mjs.map +1 -0
  152. package/fesm2022/cute-widgets-base-tree.mjs +598 -0
  153. package/fesm2022/cute-widgets-base-tree.mjs.map +1 -0
  154. package/fesm2022/cute-widgets-base.mjs +68 -0
  155. package/fesm2022/cute-widgets-base.mjs.map +1 -0
  156. package/form-field/index.d.ts +401 -0
  157. package/grid-list/index.d.ts +361 -0
  158. package/icon/index.d.ts +477 -0
  159. package/index.d.ts +3 -0
  160. package/input/index.d.ts +256 -0
  161. package/layout/container/index.d.ts +31 -0
  162. package/layout/index.d.ts +78 -0
  163. package/layout/stack/index.d.ts +52 -0
  164. package/list/index.d.ts +659 -0
  165. package/menu/index.d.ts +497 -0
  166. package/navbar/index.d.ts +91 -0
  167. package/package.json +279 -0
  168. package/paginator/index.d.ts +216 -0
  169. package/progress/index.d.ts +130 -0
  170. package/radio/index.d.ts +259 -0
  171. package/select/index.d.ts +426 -0
  172. package/sidenav/index.d.ts +369 -0
  173. package/slider/index.d.ts +48 -0
  174. package/snack-bar/index.d.ts +374 -0
  175. package/sort/index.d.ts +334 -0
  176. package/spinner/index.d.ts +70 -0
  177. package/stepper/index.d.ts +295 -0
  178. package/table/index.d.ts +395 -0
  179. package/tabs/index.d.ts +307 -0
  180. package/timepicker/index.d.ts +350 -0
  181. package/toolbar/index.d.ts +36 -0
  182. package/tooltip/index.d.ts +299 -0
  183. package/tree/index.d.ts +314 -0
@@ -0,0 +1,547 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, isDevMode, inject, ElementRef, ChangeDetectorRef, Renderer2, booleanAttribute, Input, Directive, numberAttribute, EventEmitter, Output, HostBinding } from '@angular/core';
3
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
4
+ import { Observable, Subject } from 'rxjs';
5
+ import { FocusMonitor } from '@angular/cdk/a11y';
6
+ import { RippleManager } from '@cute-widgets/base/core/ripple';
7
+ import { toBgCssClass, bsBreakpoints } from '@cute-widgets/base/core';
8
+ import { BreakpointObserver } from '@angular/cdk/layout';
9
+
10
+ /**
11
+ * @license Apache-2.0
12
+ *
13
+ * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.
14
+ *
15
+ * You may not use this file except in compliance with the License
16
+ * that can be found at http://www.apache.org/licenses/LICENSE-2.0
17
+ */
18
+ /** Widget's injection token */
19
+ const CUTE_WIDGET = new InjectionToken("CUTE-WIDGET");
20
+ /**
21
+ * This widget base class and each of its descendant should be used as a parent for classes decorated with `@Component`.
22
+ * Attribute directives should not extend this class and its descendants to avoid property value conflicts.
23
+ */
24
+ class CuteBaseControl {
25
+ get _nativeElement() {
26
+ return this._elementRef.nativeElement;
27
+ }
28
+ /**
29
+ * Marks the state as initialized and notifies pending subscribers. Should be called at the end
30
+ * of ngOnInit.
31
+ */
32
+ _markInitialized() {
33
+ if (this.isInitialized && isDevMode()) {
34
+ throw Error('CuteBaseControl error:/r/n'
35
+ + 'This directive has already been marked as initialized and '
36
+ + 'should not be called twice.');
37
+ }
38
+ this._isInitialized = true;
39
+ if (this._pendingSubscribers != null) {
40
+ this._pendingSubscribers.forEach(this._notifySubscriber);
41
+ this._pendingSubscribers = null;
42
+ }
43
+ }
44
+ /** Emits and completes the subscriber stream (should only emit once). */
45
+ _notifySubscriber(subscriber) {
46
+ subscriber.next();
47
+ subscriber.complete();
48
+ }
49
+ /** Whether this directive has been marked as initialized. */
50
+ get isInitialized() {
51
+ return this._isInitialized;
52
+ }
53
+ /** Gets a reference to the `ElementRef` object */
54
+ get element() {
55
+ return this._elementRef;
56
+ }
57
+ /** The element's identifier */
58
+ get id() { return this._id; }
59
+ ;
60
+ set id(value) { this._id = value; }
61
+ /** Theme color palette for the component. */
62
+ get color() { return this._color ?? this.defaultColor; }
63
+ set color(value) { this.setColor(value); }
64
+ /**
65
+ * Makes the host element not mutable, focusable, or even submitted with the form
66
+ */
67
+ get disabled() { return this.getDisabledState(); }
68
+ set disabled(value) {
69
+ if (coerceBooleanProperty(value) !== this._disabled) {
70
+ this.setDisabledState(value);
71
+ }
72
+ }
73
+ /**
74
+ * Provides semantic meaning to content, allowing screen readers and other tools to present and
75
+ * support interaction with an object
76
+ */
77
+ get role() { return this._role; }
78
+ set role(value) {
79
+ this._role = (typeof value == "string" ? value.trim().toLowerCase() : "") || undefined;
80
+ }
81
+ /** Returns the unique id for the visual hidden input control */
82
+ get inputId() {
83
+ return `${this.id || this._uniqueId}-input`;
84
+ }
85
+ constructor() {
86
+ this._elementRef = inject(ElementRef);
87
+ this._changeDetectorRef = inject(ChangeDetectorRef);
88
+ this._renderer = inject(Renderer2);
89
+ /** Owner widget */
90
+ this.owner = inject(CUTE_WIDGET, { skipSelf: true, optional: true });
91
+ /**
92
+ * A list of subscribers that subscribed before the directive was initialized.
93
+ * Should be notified during markInitialized.
94
+ * Set to null after pending subscribers are notified, and should
95
+ * not expect to be populated after.
96
+ */
97
+ this._pendingSubscribers = [];
98
+ /**
99
+ * Observable stream that emits when the directive initializes. If already initialized, the
100
+ * subscriber is stored to be notified once _markInitialized is called.
101
+ */
102
+ this.initialized$ = new Observable(subscriber => {
103
+ // If initialized, immediately notify the subscriber. Otherwise, store the subscriber to notify
104
+ // when _markInitialized is called.
105
+ if (this.isInitialized) {
106
+ this._notifySubscriber(subscriber);
107
+ }
108
+ else {
109
+ this._pendingSubscribers.push(subscriber);
110
+ }
111
+ });
112
+ this._isInitialized = false;
113
+ /** Adds a linear gradient as a background image to the backgrounds */
114
+ this.gradientFill = false;
115
+ this._disabled = false;
116
+ /**
117
+ * Attached to the aria-label attribute of the host element.In most cases, aria-labelledby will
118
+ * take precedence so this may be omitted.
119
+ */
120
+ this.ariaLabel = null;
121
+ /**
122
+ * Users can specify the `aria-labelledby` attribute which will be forwarded to the input element
123
+ */
124
+ this.ariaLabelledby = null;
125
+ /**
126
+ * The 'aria-describedby' attribute is read after the element's label and field type.
127
+ */
128
+ this.ariaDescribedby = null;
129
+ /**
130
+ * The 'aria-description' attribute for the content of the element.
131
+ */
132
+ this.ariaDescription = null;
133
+ const generatedId = this.generateId().trim();
134
+ if (generatedId.length > 0) {
135
+ this._id = this._uniqueId = generatedId;
136
+ }
137
+ }
138
+ /**
139
+ * Sets the type of mouse cursor using a keyword, or load a specific icon to use.
140
+ * @param cursor A mouse cursor keyword or icon
141
+ * @returns The current mouse cursor
142
+ */
143
+ // async setCursor(cursor: MouseCursor|string): Promise<MouseCursor|string> {
144
+ // const oldCursor = <MouseCursor> getComputedStyle(this._nativeElement).cursor;
145
+ // this._nativeElement.style.cursor = cursor;
146
+ // await yieldToMain();
147
+ // return oldCursor;
148
+ // }
149
+ /**
150
+ * Whether the option is disabled. Can be overridden in descendant classes
151
+ * @returns Current disabled state
152
+ */
153
+ getDisabledState() {
154
+ return this._disabled;
155
+ }
156
+ /**
157
+ * Changes the `disabled` status of the component. Can be overridden in descendant classes
158
+ * @param newState New boolean for `disabled` state
159
+ * @param emitEvent Emit state change event
160
+ * @returns Change result
161
+ */
162
+ setDisabledState(newState, emitEvent) {
163
+ const coercedState = coerceBooleanProperty(newState);
164
+ if (coercedState !== this.disabled) {
165
+ this._disabled = coercedState;
166
+ Promise.resolve().then(() => this.markForCheck());
167
+ return true;
168
+ }
169
+ return false;
170
+ }
171
+ /**
172
+ * Sets a new color value. Can be overridden in descendant classes.
173
+ * @param value New `ThemeColor` value
174
+ * @returns Old color value
175
+ */
176
+ setColor(value) {
177
+ const oldColor = this._color;
178
+ if (oldColor !== value) {
179
+ this._color = value;
180
+ this.markForCheck();
181
+ }
182
+ return oldColor;
183
+ }
184
+ /** Returns the root owner widget if it exists */
185
+ getRootOwner() {
186
+ let root = this.owner;
187
+ while (root) {
188
+ root = root.owner;
189
+ }
190
+ return root;
191
+ }
192
+ /** Sets a property on a target element using the current Renderer implementation. */
193
+ setProperty(key, value) {
194
+ this._renderer.setProperty(this._nativeElement, key, value);
195
+ }
196
+ /** Returns the value of a specified attribute on the component's host element. */
197
+ getAttribute(name) {
198
+ return this._nativeElement.getAttribute(name);
199
+ }
200
+ /** Sets the value of an attribute on the component's host element */
201
+ setAttribute(name, value, namespace) {
202
+ this._renderer.setAttribute(this._nativeElement, name, value, namespace);
203
+ }
204
+ /** Gets whether the component has one of the given attributes. */
205
+ hasAttributes(...attributes) {
206
+ return attributes.some(attribute => this._nativeElement.hasAttribute(attribute));
207
+ }
208
+ /** Adds a class to an element in the DOM. */
209
+ addClass(name) {
210
+ this._renderer.addClass(this._nativeElement, name);
211
+ }
212
+ /** Removes a class from an element in the DOM. */
213
+ removeClass(name) {
214
+ this._renderer.removeClass(this._nativeElement, name);
215
+ }
216
+ /** Returns a boolean value — _true_ if the element's class list contains the given token, otherwise _false_. */
217
+ hasClass(name) {
218
+ return this._nativeElement.classList.contains(name);
219
+ }
220
+ /**
221
+ * Adds a CSS class if it is not in the element's class list, otherwise remove it
222
+ * @param name CSS class name
223
+ * @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.
224
+ */
225
+ toggleClass(name, force) {
226
+ return this._nativeElement.classList.toggle(name, force);
227
+ }
228
+ /**
229
+ * Returns a boolean value indicating whether a _node_ is a descendant of the current node
230
+ * @param node HTML element reference to test
231
+ * @returns A boolean value that is `true` if _node_ is contained in the current node, `false` if not.
232
+ * If the _node_ parameter is `null`, contains() always returns `false`.
233
+ */
234
+ contains(node) {
235
+ return this._nativeElement.contains(node);
236
+ }
237
+ /** Enables the user interaction */
238
+ enable() {
239
+ this.disabled = false;
240
+ }
241
+ /** Disables the user interaction */
242
+ disable() {
243
+ this.disabled = true;
244
+ }
245
+ /** Explicitly marks the view as changed so that it can be checked again. */
246
+ markForCheck() {
247
+ this._changeDetectorRef.markForCheck();
248
+ }
249
+ /** Toggles the `disabled` state of the component */
250
+ toggleDisabled() {
251
+ this.disabled = !this.disabled;
252
+ }
253
+ ngOnInit() {
254
+ this._markInitialized();
255
+ }
256
+ ngAfterViewInit() {
257
+ }
258
+ ngAfterContentInit() {
259
+ }
260
+ ngOnChanges(changes) {
261
+ }
262
+ ngOnDestroy() {
263
+ }
264
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteBaseControl, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
265
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "20.3.15", type: CuteBaseControl, isStandalone: true, inputs: { id: "id", defaultColor: "defaultColor", color: "color", gradientFill: ["gradientFill", "gradientFill", booleanAttribute], disabled: ["disabled", "disabled", booleanAttribute], ariaLabel: ["aria-label", "ariaLabel"], ariaLabelledby: ["aria-labelledby", "ariaLabelledby"], ariaDescribedby: ["aria-describedby", "ariaDescribedby"], ariaDescription: ["aria-description", "ariaDescription"], role: "role", tag: "tag" }, host: { properties: { "class.cute-thematic-widget": "color", "class.bg-gradient": "gradientFill" }, classAttribute: "cute-widget" }, providers: [{ provide: CUTE_WIDGET, useExisting: CuteBaseControl }], usesOnChanges: true, ngImport: i0 }); }
266
+ }
267
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteBaseControl, decorators: [{
268
+ type: Directive,
269
+ args: [{
270
+ host: {
271
+ 'class': 'cute-widget',
272
+ '[class.cute-thematic-widget]': 'color',
273
+ '[class.bg-gradient]': 'gradientFill',
274
+ },
275
+ providers: [{ provide: CUTE_WIDGET, useExisting: CuteBaseControl }]
276
+ }]
277
+ }], ctorParameters: () => [], propDecorators: { id: [{
278
+ type: Input
279
+ }], defaultColor: [{
280
+ type: Input
281
+ }], color: [{
282
+ type: Input
283
+ }], gradientFill: [{
284
+ type: Input,
285
+ args: [{ transform: booleanAttribute }]
286
+ }], disabled: [{
287
+ type: Input,
288
+ args: [{ transform: booleanAttribute }]
289
+ }], ariaLabel: [{
290
+ type: Input,
291
+ args: ['aria-label']
292
+ }], ariaLabelledby: [{
293
+ type: Input,
294
+ args: ['aria-labelledby']
295
+ }], ariaDescribedby: [{
296
+ type: Input,
297
+ args: ['aria-describedby']
298
+ }], ariaDescription: [{
299
+ type: Input,
300
+ args: ['aria-description']
301
+ }], role: [{
302
+ type: Input
303
+ }], tag: [{
304
+ type: Input
305
+ }] } });
306
+
307
+ /**
308
+ * @license Apache-2.0
309
+ *
310
+ * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.
311
+ *
312
+ * You may not use this file except in compliance with the License
313
+ * that can be found at http://www.apache.org/licenses/LICENSE-2.0
314
+ */
315
+ function transformTabIndex(value) {
316
+ return value == null ? undefined : numberAttribute(value);
317
+ }
318
+ class CuteFocusableControl extends CuteBaseControl {
319
+ /**
320
+ * Allows making HTML elements un/focusable (usually with the Tab key, hence the name) and
321
+ * determines their relative ordering for sequential focus navigation.
322
+ */
323
+ get tabIndex() { return this._tabIndex; }
324
+ set tabIndex(value) {
325
+ if (value !== this._tabIndex) {
326
+ this._tabIndex = value;
327
+ if (this.isInitialized) {
328
+ this.tabIndexChange.emit();
329
+ }
330
+ }
331
+ }
332
+ constructor() {
333
+ super();
334
+ // If necessary, the `monitor` method should be called from descendant classes in one of the
335
+ // directive/component's life circle methods
336
+ this._focusMonitor = inject(FocusMonitor);
337
+ this.tabIndexChange = new EventEmitter();
338
+ const tabInd = this.getAttribute("tabindex");
339
+ if (tabInd) {
340
+ this.tabIndex = numberAttribute(tabInd, 0);
341
+ }
342
+ }
343
+ /** Set focus on this component */
344
+ focus(origin, options) {
345
+ if (origin) {
346
+ this._focusMonitor.focusVia(this._elementRef.nativeElement, origin, options);
347
+ }
348
+ else if (options && !Array.isArray(options)) {
349
+ this._nativeElement.focus(options);
350
+ }
351
+ else {
352
+ this._nativeElement.focus();
353
+ }
354
+ }
355
+ /** Gets the current label of the component. Part of `ListKeyManagerOption` interface. */
356
+ getLabel() {
357
+ return (this._nativeElement.textContent || "").trim();
358
+ }
359
+ ngOnDestroy() {
360
+ super.ngOnDestroy();
361
+ this._focusMonitor.stopMonitoring(this._elementRef);
362
+ RippleManager.removeRipple(this._nativeElement);
363
+ }
364
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteFocusableControl, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
365
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "20.3.15", type: CuteFocusableControl, isStandalone: true, inputs: { tabIndex: ["tabIndex", "tabIndex", transformTabIndex] }, outputs: { tabIndexChange: "tabIndexChange" }, usesInheritance: true, ngImport: i0 }); }
366
+ }
367
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteFocusableControl, decorators: [{
368
+ type: Directive
369
+ }], ctorParameters: () => [], propDecorators: { tabIndex: [{
370
+ type: Input,
371
+ args: [{ transform: transformTabIndex }]
372
+ }], tabIndexChange: [{
373
+ type: Output
374
+ }] } });
375
+
376
+ /**
377
+ * @license Apache-2.0
378
+ *
379
+ * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.
380
+ *
381
+ * You may not use this file except in compliance with the License
382
+ * that can be found at http://www.apache.org/licenses/LICENSE-2.0
383
+ */
384
+ class CuteInputControl extends CuteFocusableControl {
385
+ /** Whether the element's value input is required. */
386
+ get required() { return this._required ?? false; }
387
+ set required(newValue) {
388
+ this._required = coerceBooleanProperty(newValue);
389
+ this.stateChanges.next();
390
+ }
391
+ get id() { return super.id; }
392
+ set id(value) {
393
+ if (value !== super.id) {
394
+ super.id = value;
395
+ this.stateChanges.next();
396
+ }
397
+ }
398
+ constructor() {
399
+ super();
400
+ this._isTouched = false;
401
+ /**
402
+ * Emits whenever the component state changes and should cause the parent
403
+ * form-field to update. Implemented as part of `CuteFormFieldControl`.
404
+ */
405
+ this.stateChanges = new Subject();
406
+ this._onChange = () => { };
407
+ this._onTouched = () => { };
408
+ /** Name value will be applied to the input element if present */
409
+ this.name = null;
410
+ }
411
+ /* ControlValueAccessor interface */
412
+ //++
413
+ registerOnChange(fn) {
414
+ this._onChange = fn;
415
+ }
416
+ registerOnTouched(fn) {
417
+ this._onTouched = fn;
418
+ }
419
+ setDisabledState(isDisabled, emitEvent = true) {
420
+ const changed = super.setDisabledState(isDisabled, emitEvent);
421
+ if (changed && emitEvent) {
422
+ this.stateChanges.next();
423
+ }
424
+ return changed;
425
+ }
426
+ //--
427
+ /**
428
+ * Mark widget gets a touched state
429
+ * @protected
430
+ */
431
+ markAsTouched() {
432
+ if (!this._isTouched) {
433
+ this._onTouched();
434
+ this._isTouched = true;
435
+ }
436
+ }
437
+ ngOnDestroy() {
438
+ super.ngOnDestroy();
439
+ this.stateChanges.complete();
440
+ }
441
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteInputControl, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
442
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "20.3.15", type: CuteInputControl, isStandalone: true, inputs: { name: "name", required: ["required", "required", booleanAttribute] }, usesInheritance: true, ngImport: i0 }); }
443
+ }
444
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteInputControl, decorators: [{
445
+ type: Directive
446
+ }], ctorParameters: () => [], propDecorators: { name: [{
447
+ type: Input
448
+ }], required: [{
449
+ type: Input,
450
+ args: [{ transform: booleanAttribute }]
451
+ }] } });
452
+
453
+ /**
454
+ * @license Apache-2.0
455
+ *
456
+ * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.
457
+ *
458
+ * You may not use this file except in compliance with the License
459
+ * that can be found at http://www.apache.org/licenses/LICENSE-2.0
460
+ */
461
+ class CuteInputDropdownControl extends CuteInputControl {
462
+ constructor() {
463
+ super();
464
+ this.withShadow = false;
465
+ }
466
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteInputDropdownControl, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
467
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.15", type: CuteInputDropdownControl, isStandalone: true, inputs: { withShadow: "withShadow" }, usesInheritance: true, ngImport: i0 }); }
468
+ }
469
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteInputDropdownControl, decorators: [{
470
+ type: Directive
471
+ }], ctorParameters: () => [], propDecorators: { withShadow: [{
472
+ type: Input
473
+ }] } });
474
+
475
+ /**
476
+ * @license Apache-2.0
477
+ *
478
+ * Copyright (c) 2025 CuteWidgets Team. All Rights Reserved.
479
+ *
480
+ * You may not use this file except in compliance with the License
481
+ * that can be found at http://www.apache.org/licenses/LICENSE-2.0
482
+ */
483
+ class CuteLayoutControl extends CuteBaseControl {
484
+ constructor() {
485
+ super(...arguments);
486
+ this.breakpointObserver = inject(BreakpointObserver);
487
+ /** Clears floated content within a container */
488
+ this.clearfix = false;
489
+ /** Event that is raised when the width of viewport is changed and crosses the size of `breakpoint`'s value. */
490
+ this.breakpointState = new EventEmitter();
491
+ }
492
+ /** Returns CSS-class list */
493
+ get classList() {
494
+ // We interpret `color` value as a background color of the container
495
+ return this.color ? toBgCssClass(this.color) : "";
496
+ }
497
+ ngOnChanges(changes) {
498
+ super.ngOnChanges(changes);
499
+ const change = changes["breakpoint"];
500
+ if (change) {
501
+ this._subscription?.unsubscribe();
502
+ if (change.currentValue) { // && (change.currentValue !== change.previousValue)) {
503
+ const bpName = bsBreakpoints.getLabel(change.currentValue);
504
+ this._subscription = this.breakpointObserver
505
+ .observe(bsBreakpoints[bpName + "AndDown"])
506
+ .subscribe(state => this.breakpointState.emit(state));
507
+ }
508
+ }
509
+ }
510
+ ngOnDestroy() {
511
+ super.ngOnDestroy();
512
+ this._subscription?.unsubscribe();
513
+ }
514
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteLayoutControl, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
515
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "20.3.15", type: CuteLayoutControl, isStandalone: true, inputs: { clearfix: ["clearfix", "clearfix", booleanAttribute], breakpoint: "breakpoint" }, outputs: { breakpointState: "breakpointState" }, host: { properties: { "class.clearfix": "clearfix", "attr.tabindex": "-1", "attr.aria-label": "ariaLabel || null", "attr.aria-labelledby": "ariaLabelledby || null", "attr.aria-describedby": "ariaDescribedby || null", "attr.role": "role || null", "attr.id": "id || null", "class": "this.classList" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
516
+ }
517
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CuteLayoutControl, decorators: [{
518
+ type: Directive,
519
+ args: [{
520
+ host: {
521
+ '[class.clearfix]': 'clearfix',
522
+ '[attr.tabindex]': '-1',
523
+ '[attr.aria-label]': 'ariaLabel || null',
524
+ '[attr.aria-labelledby]': 'ariaLabelledby || null',
525
+ '[attr.aria-describedby]': 'ariaDescribedby || null',
526
+ '[attr.role]': 'role || null',
527
+ '[attr.id]': 'id || null',
528
+ }
529
+ }]
530
+ }], propDecorators: { classList: [{
531
+ type: HostBinding,
532
+ args: ["class"]
533
+ }], clearfix: [{
534
+ type: Input,
535
+ args: [{ transform: booleanAttribute }]
536
+ }], breakpoint: [{
537
+ type: Input
538
+ }], breakpointState: [{
539
+ type: Output
540
+ }] } });
541
+
542
+ /**
543
+ * Generated bundle index. Do not edit.
544
+ */
545
+
546
+ export { CUTE_WIDGET, CuteBaseControl, CuteFocusableControl, CuteInputControl, CuteInputDropdownControl, CuteLayoutControl };
547
+ //# sourceMappingURL=cute-widgets-base-abstract.mjs.map
@@ -0,0 +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":"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"}