@rossigee/clarity-angular 18.2.1-fixed.1 → 18.2.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 (180) hide show
  1. package/fesm2022/clr-angular-accordion.mjs +355 -0
  2. package/fesm2022/clr-angular-accordion.mjs.map +1 -0
  3. package/fesm2022/clr-angular-button.mjs +713 -0
  4. package/fesm2022/clr-angular-button.mjs.map +1 -0
  5. package/fesm2022/clr-angular-collapsible-panel.mjs +201 -0
  6. package/fesm2022/clr-angular-collapsible-panel.mjs.map +1 -0
  7. package/fesm2022/clr-angular-data-datagrid.mjs +7635 -0
  8. package/fesm2022/clr-angular-data-datagrid.mjs.map +1 -0
  9. package/fesm2022/clr-angular-data-stack-view.mjs +442 -0
  10. package/fesm2022/clr-angular-data-stack-view.mjs.map +1 -0
  11. package/fesm2022/clr-angular-data-tree-view.mjs +1106 -0
  12. package/fesm2022/clr-angular-data-tree-view.mjs.map +1 -0
  13. package/fesm2022/clr-angular-data.mjs +40 -0
  14. package/fesm2022/clr-angular-data.mjs.map +1 -0
  15. package/fesm2022/clr-angular-emphasis-alert.mjs +624 -0
  16. package/fesm2022/clr-angular-emphasis-alert.mjs.map +1 -0
  17. package/fesm2022/clr-angular-emphasis-badge.mjs +69 -0
  18. package/fesm2022/clr-angular-emphasis-badge.mjs.map +1 -0
  19. package/fesm2022/clr-angular-emphasis-common.mjs +25 -0
  20. package/fesm2022/clr-angular-emphasis-common.mjs.map +1 -0
  21. package/fesm2022/clr-angular-emphasis-label.mjs +105 -0
  22. package/fesm2022/clr-angular-emphasis-label.mjs.map +1 -0
  23. package/fesm2022/clr-angular-emphasis.mjs +41 -0
  24. package/fesm2022/clr-angular-emphasis.mjs.map +1 -0
  25. package/fesm2022/clr-angular-forms-checkbox.mjs +270 -0
  26. package/fesm2022/clr-angular-forms-checkbox.mjs.map +1 -0
  27. package/fesm2022/clr-angular-forms-combobox.mjs +1775 -0
  28. package/fesm2022/clr-angular-forms-combobox.mjs.map +1 -0
  29. package/fesm2022/clr-angular-forms-common.mjs +1251 -0
  30. package/fesm2022/clr-angular-forms-common.mjs.map +1 -0
  31. package/fesm2022/clr-angular-forms-datalist.mjs +263 -0
  32. package/fesm2022/clr-angular-forms-datalist.mjs.map +1 -0
  33. package/fesm2022/clr-angular-forms-datepicker.mjs +3274 -0
  34. package/fesm2022/clr-angular-forms-datepicker.mjs.map +1 -0
  35. package/fesm2022/clr-angular-forms-file-input.mjs +826 -0
  36. package/fesm2022/clr-angular-forms-file-input.mjs.map +1 -0
  37. package/fesm2022/clr-angular-forms-input.mjs +153 -0
  38. package/fesm2022/clr-angular-forms-input.mjs.map +1 -0
  39. package/fesm2022/clr-angular-forms-number-input.mjs +236 -0
  40. package/fesm2022/clr-angular-forms-number-input.mjs.map +1 -0
  41. package/fesm2022/clr-angular-forms-password.mjs +233 -0
  42. package/fesm2022/clr-angular-forms-password.mjs.map +1 -0
  43. package/fesm2022/clr-angular-forms-radio.mjs +231 -0
  44. package/fesm2022/clr-angular-forms-radio.mjs.map +1 -0
  45. package/fesm2022/clr-angular-forms-range.mjs +186 -0
  46. package/fesm2022/clr-angular-forms-range.mjs.map +1 -0
  47. package/fesm2022/clr-angular-forms-select.mjs +153 -0
  48. package/fesm2022/clr-angular-forms-select.mjs.map +1 -0
  49. package/fesm2022/clr-angular-forms-textarea.mjs +136 -0
  50. package/fesm2022/clr-angular-forms-textarea.mjs.map +1 -0
  51. package/fesm2022/clr-angular-forms.mjs +100 -0
  52. package/fesm2022/clr-angular-forms.mjs.map +1 -0
  53. package/fesm2022/clr-angular-icon.mjs +7397 -0
  54. package/fesm2022/clr-angular-icon.mjs.map +1 -0
  55. package/fesm2022/clr-angular-layout-breadcrumbs.mjs +120 -0
  56. package/fesm2022/clr-angular-layout-breadcrumbs.mjs.map +1 -0
  57. package/fesm2022/clr-angular-layout-main-container.mjs +100 -0
  58. package/fesm2022/clr-angular-layout-main-container.mjs.map +1 -0
  59. package/fesm2022/clr-angular-layout-nav.mjs +582 -0
  60. package/fesm2022/clr-angular-layout-nav.mjs.map +1 -0
  61. package/fesm2022/clr-angular-layout-tabs.mjs +807 -0
  62. package/fesm2022/clr-angular-layout-tabs.mjs.map +1 -0
  63. package/fesm2022/clr-angular-layout-vertical-nav.mjs +507 -0
  64. package/fesm2022/clr-angular-layout-vertical-nav.mjs.map +1 -0
  65. package/fesm2022/clr-angular-layout.mjs +44 -0
  66. package/fesm2022/clr-angular-layout.mjs.map +1 -0
  67. package/fesm2022/clr-angular-modal.mjs +617 -0
  68. package/fesm2022/clr-angular-modal.mjs.map +1 -0
  69. package/fesm2022/clr-angular-popover-common.mjs +1082 -0
  70. package/fesm2022/clr-angular-popover-common.mjs.map +1 -0
  71. package/fesm2022/clr-angular-popover-dropdown.mjs +492 -0
  72. package/fesm2022/clr-angular-popover-dropdown.mjs.map +1 -0
  73. package/fesm2022/clr-angular-popover-signpost.mjs +494 -0
  74. package/fesm2022/clr-angular-popover-signpost.mjs.map +1 -0
  75. package/fesm2022/clr-angular-popover-tooltip.mjs +293 -0
  76. package/fesm2022/clr-angular-popover-tooltip.mjs.map +1 -0
  77. package/fesm2022/clr-angular-popover.mjs +41 -0
  78. package/fesm2022/clr-angular-popover.mjs.map +1 -0
  79. package/fesm2022/clr-angular-progress-progress-bars.mjs +217 -0
  80. package/fesm2022/clr-angular-progress-progress-bars.mjs.map +1 -0
  81. package/fesm2022/clr-angular-progress-spinner.mjs +132 -0
  82. package/fesm2022/clr-angular-progress-spinner.mjs.map +1 -0
  83. package/fesm2022/clr-angular-stepper.mjs +694 -0
  84. package/fesm2022/clr-angular-stepper.mjs.map +1 -0
  85. package/fesm2022/clr-angular-timeline.mjs +316 -0
  86. package/fesm2022/clr-angular-timeline.mjs.map +1 -0
  87. package/fesm2022/clr-angular-utils-conditional.mjs +351 -0
  88. package/fesm2022/clr-angular-utils-conditional.mjs.map +1 -0
  89. package/fesm2022/clr-angular-utils-loading.mjs +107 -0
  90. package/fesm2022/clr-angular-utils-loading.mjs.map +1 -0
  91. package/fesm2022/clr-angular-utils.mjs +2079 -0
  92. package/fesm2022/clr-angular-utils.mjs.map +1 -0
  93. package/fesm2022/clr-angular-wizard.mjs +3074 -0
  94. package/fesm2022/clr-angular-wizard.mjs.map +1 -0
  95. package/fesm2022/clr-angular.mjs +2 -2
  96. package/fesm2022/clr-angular.mjs.map +1 -1
  97. package/package.json +7 -5
  98. package/schematics/ng-update/index.d.ts +2 -0
  99. package/schematics/ng-update/index.js +69 -0
  100. package/schematics/ng-update/index.js.map +1 -0
  101. package/schematics/ng-update/migrations/css-migration.d.ts +6 -0
  102. package/schematics/ng-update/migrations/css-migration.js +177 -0
  103. package/schematics/ng-update/migrations/css-migration.js.map +1 -0
  104. package/schematics/ng-update/migrations/import-migration.d.ts +4 -0
  105. package/schematics/ng-update/migrations/import-migration.js +187 -0
  106. package/schematics/ng-update/migrations/import-migration.js.map +1 -0
  107. package/schematics/ng-update/migrations/template-migration.d.ts +6 -0
  108. package/schematics/ng-update/migrations/template-migration.js +261 -0
  109. package/schematics/ng-update/migrations/template-migration.js.map +1 -0
  110. package/schematics/ng-update/replacements/css-replacements.d.ts +17 -0
  111. package/schematics/ng-update/replacements/css-replacements.js +74 -0
  112. package/schematics/ng-update/replacements/css-replacements.js.map +1 -0
  113. package/schematics/ng-update/replacements/import-replacements.d.ts +13 -0
  114. package/schematics/ng-update/replacements/import-replacements.js +108 -0
  115. package/schematics/ng-update/replacements/import-replacements.js.map +1 -0
  116. package/schematics/ng-update/replacements/symbol-replacements.d.ts +12 -0
  117. package/schematics/ng-update/replacements/symbol-replacements.js +67 -0
  118. package/schematics/ng-update/replacements/symbol-replacements.js.map +1 -0
  119. package/schematics/ng-update/replacements/template-replacements.d.ts +19 -0
  120. package/schematics/ng-update/replacements/template-replacements.js +57 -0
  121. package/schematics/ng-update/replacements/template-replacements.js.map +1 -0
  122. package/schematics/ng-update/tests/test-helpers.d.ts +6 -0
  123. package/schematics/ng-update/tests/test-helpers.js +34 -0
  124. package/schematics/ng-update/tests/test-helpers.js.map +1 -0
  125. package/schematics/ng-update/utils/file-visitor.d.ts +8 -0
  126. package/schematics/ng-update/utils/file-visitor.js +44 -0
  127. package/schematics/ng-update/utils/file-visitor.js.map +1 -0
  128. package/schematics/ng-update/utils/regexp-utils.d.ts +16 -0
  129. package/schematics/ng-update/utils/regexp-utils.js +34 -0
  130. package/schematics/ng-update/utils/regexp-utils.js.map +1 -0
  131. package/schematics/vitest.config.d.ts +2 -0
  132. package/schematics/vitest.config.js +17 -0
  133. package/schematics/vitest.config.js.map +1 -0
  134. package/types/clr-angular-accordion.d.ts +100 -0
  135. package/types/clr-angular-button.d.ts +169 -0
  136. package/types/clr-angular-collapsible-panel.d.ts +73 -0
  137. package/types/clr-angular-data-datagrid.d.ts +1843 -0
  138. package/types/clr-angular-data-stack-view.d.ts +87 -0
  139. package/types/clr-angular-data-tree-view.d.ts +229 -0
  140. package/types/clr-angular-data.d.ts +15 -0
  141. package/types/clr-angular-emphasis-alert.d.ts +175 -0
  142. package/types/clr-angular-emphasis-badge.d.ts +25 -0
  143. package/types/clr-angular-emphasis-common.d.ts +6 -0
  144. package/types/clr-angular-emphasis-label.d.ts +29 -0
  145. package/types/clr-angular-emphasis.d.ts +15 -0
  146. package/types/clr-angular-forms-checkbox.d.ts +69 -0
  147. package/types/clr-angular-forms-combobox.d.ts +353 -0
  148. package/types/clr-angular-forms-common.d.ts +339 -0
  149. package/types/clr-angular-forms-datalist.d.ts +59 -0
  150. package/types/clr-angular-forms-datepicker.d.ts +986 -0
  151. package/types/clr-angular-forms-file-input.d.ts +193 -0
  152. package/types/clr-angular-forms-input.d.ts +29 -0
  153. package/types/clr-angular-forms-number-input.d.ts +43 -0
  154. package/types/clr-angular-forms-password.d.ts +52 -0
  155. package/types/clr-angular-forms-radio.d.ts +50 -0
  156. package/types/clr-angular-forms-range.d.ts +37 -0
  157. package/types/clr-angular-forms-select.d.ts +36 -0
  158. package/types/clr-angular-forms-textarea.d.ts +29 -0
  159. package/types/clr-angular-forms.d.ts +36 -0
  160. package/types/clr-angular-icon.d.ts +1498 -0
  161. package/types/clr-angular-layout-breadcrumbs.d.ts +45 -0
  162. package/types/clr-angular-layout-main-container.d.ts +28 -0
  163. package/types/clr-angular-layout-nav.d.ts +142 -0
  164. package/types/clr-angular-layout-tabs.d.ts +158 -0
  165. package/types/clr-angular-layout-vertical-nav.d.ts +128 -0
  166. package/types/clr-angular-layout.d.ts +19 -0
  167. package/types/clr-angular-modal.d.ts +160 -0
  168. package/types/clr-angular-popover-common.d.ts +254 -0
  169. package/types/clr-angular-popover-dropdown.d.ts +123 -0
  170. package/types/clr-angular-popover-signpost.d.ts +157 -0
  171. package/types/clr-angular-popover-tooltip.d.ts +83 -0
  172. package/types/clr-angular-popover.d.ts +16 -0
  173. package/types/clr-angular-progress-progress-bars.d.ts +57 -0
  174. package/types/clr-angular-progress-spinner.d.ts +44 -0
  175. package/types/clr-angular-stepper.d.ts +179 -0
  176. package/types/clr-angular-timeline.d.ts +86 -0
  177. package/types/clr-angular-utils-conditional.d.ts +132 -0
  178. package/types/clr-angular-utils-loading.d.ts +38 -0
  179. package/types/clr-angular-utils.d.ts +913 -0
  180. package/types/clr-angular-wizard.d.ts +1508 -0
@@ -0,0 +1,713 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Injectable, EventEmitter, Input, ViewChild, Output, Optional, SkipSelf, Component, ContentChildren, NgModule } from '@angular/core';
3
+ import * as i6 from '@clr/angular/icon';
4
+ import { ClrIcon, ClarityIcons, ellipsisHorizontalIcon } from '@clr/angular/icon';
5
+ import * as i5 from '@angular/common';
6
+ import { CommonModule } from '@angular/common';
7
+ import * as i2 from '@clr/angular/popover/common';
8
+ import { ClrPopoverType, ClrPopoverPosition, DROPDOWN_POSITIONS, ClrPopoverHostDirective, ClrPopoverModuleNext } from '@clr/angular/popover/common';
9
+ import * as i3 from '@clr/angular/utils';
10
+ import { uniqueIdFactory, ClrLoadingState, LoadingListener, Linkers, ClrDestroyService, FOCUS_SERVICE_PROVIDER } from '@clr/angular/utils';
11
+ import * as i1 from '@angular/router';
12
+ import { Subject } from 'rxjs';
13
+ import { takeUntil } from 'rxjs/operators';
14
+ import { trigger, transition, style, animate, keyframes } from '@angular/animations';
15
+
16
+ /*
17
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
18
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
19
+ * This software is released under MIT license.
20
+ * The full license information can be found in LICENSE in the root directory of this project.
21
+ */
22
+ class ButtonInGroupService {
23
+ constructor() {
24
+ this._changes = new Subject();
25
+ }
26
+ get changes() {
27
+ return this._changes.asObservable();
28
+ }
29
+ updateButtonGroup(button) {
30
+ this._changes.next(button);
31
+ }
32
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ButtonInGroupService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
33
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ButtonInGroupService }); }
34
+ }
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ButtonInGroupService, decorators: [{
36
+ type: Injectable
37
+ }] });
38
+
39
+ /*
40
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
41
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
42
+ * This software is released under MIT license.
43
+ * The full license information can be found in LICENSE in the root directory of this project.
44
+ */
45
+ class ClrButton {
46
+ constructor(routerLinkActive, buttonInGroupService) {
47
+ this.routerLinkActive = routerLinkActive;
48
+ this.buttonInGroupService = buttonInGroupService;
49
+ this._click = new EventEmitter(false);
50
+ this._inMenu = false;
51
+ this._enableService = false;
52
+ this._classNames = 'btn';
53
+ this._name = null;
54
+ this._type = null;
55
+ this._disabled = null;
56
+ this._id = uniqueIdFactory();
57
+ }
58
+ get inMenu() {
59
+ return this._inMenu;
60
+ }
61
+ set inMenu(value) {
62
+ value = !!value;
63
+ if (this._inMenu !== value) {
64
+ this._inMenu = value;
65
+ // We check if the service flag is enabled
66
+ // and if the service exists because the service is optional
67
+ if (this._enableService && this.buttonInGroupService) {
68
+ this.buttonInGroupService.updateButtonGroup(this);
69
+ }
70
+ }
71
+ }
72
+ get classNames() {
73
+ return this.routerLinkActive?.isActive ? `${this._classNames} ${this.routerLinkActiveClasses}` : this._classNames;
74
+ }
75
+ set classNames(value) {
76
+ if (typeof value === 'string') {
77
+ const classNames = value.split(' ');
78
+ if (classNames.indexOf('btn') === -1) {
79
+ classNames.push('btn');
80
+ }
81
+ this._classNames = classNames.join(' ');
82
+ }
83
+ }
84
+ get name() {
85
+ return this._name;
86
+ }
87
+ set name(value) {
88
+ if (typeof value === 'string') {
89
+ this._name = value;
90
+ }
91
+ }
92
+ get type() {
93
+ return this._type;
94
+ }
95
+ set type(value) {
96
+ if (typeof value === 'string') {
97
+ this._type = value;
98
+ }
99
+ }
100
+ get id() {
101
+ return this._id;
102
+ }
103
+ set id(value) {
104
+ if (typeof value === 'string') {
105
+ this._id = value;
106
+ }
107
+ }
108
+ get disabled() {
109
+ return this._disabled;
110
+ }
111
+ set disabled(value) {
112
+ if (value !== null && value !== false) {
113
+ this._disabled = '';
114
+ }
115
+ else {
116
+ this._disabled = null;
117
+ }
118
+ }
119
+ get role() {
120
+ return this.inMenu ? 'menuitem' : null;
121
+ }
122
+ ngAfterViewInit() {
123
+ this._enableService = true;
124
+ }
125
+ loadingStateChange(state) {
126
+ this.loading = state === ClrLoadingState.LOADING;
127
+ }
128
+ emitClick() {
129
+ this._click.emit(true);
130
+ }
131
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrButton, deps: [{ token: i1.RouterLinkActive, optional: true }, { token: ButtonInGroupService, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component }); }
132
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: ClrButton, isStandalone: false, selector: "clr-button", inputs: { routerLinkActiveClasses: ["routerLinkActive", "routerLinkActiveClasses"], inMenu: ["clrInMenu", "inMenu"], classNames: ["class", "classNames"], name: "name", type: "type", id: "id", disabled: "disabled" }, outputs: { _click: "click" }, providers: [{ provide: LoadingListener, useExisting: ClrButton }], viewQueries: [{ propertyName: "templateRef", first: true, predicate: ["buttonProjectedRef"], descendants: true, static: true }], ngImport: i0, template: `
133
+ <ng-template #buttonProjectedRef>
134
+ <button
135
+ [class]="classNames"
136
+ (click)="emitClick()"
137
+ [attr.type]="type"
138
+ [attr.name]="name"
139
+ [attr.disabled]="disabled"
140
+ [attr.role]="role"
141
+ [attr.id]="id"
142
+ >
143
+ @if (loading) {
144
+ <span class="spinner spinner-inline"></span>
145
+ }
146
+ <ng-content></ng-content>
147
+ </button>
148
+ </ng-template>
149
+ `, isInline: true }); }
150
+ }
151
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrButton, decorators: [{
152
+ type: Component,
153
+ args: [{
154
+ selector: 'clr-button',
155
+ template: `
156
+ <ng-template #buttonProjectedRef>
157
+ <button
158
+ [class]="classNames"
159
+ (click)="emitClick()"
160
+ [attr.type]="type"
161
+ [attr.name]="name"
162
+ [attr.disabled]="disabled"
163
+ [attr.role]="role"
164
+ [attr.id]="id"
165
+ >
166
+ @if (loading) {
167
+ <span class="spinner spinner-inline"></span>
168
+ }
169
+ <ng-content></ng-content>
170
+ </button>
171
+ </ng-template>
172
+ `,
173
+ providers: [{ provide: LoadingListener, useExisting: ClrButton }],
174
+ standalone: false,
175
+ }]
176
+ }], ctorParameters: () => [{ type: i1.RouterLinkActive, decorators: [{
177
+ type: Optional
178
+ }] }, { type: ButtonInGroupService, decorators: [{
179
+ type: SkipSelf
180
+ }, {
181
+ type: Optional
182
+ }] }], propDecorators: { _click: [{
183
+ type: Output,
184
+ args: ['click']
185
+ }], routerLinkActiveClasses: [{
186
+ type: Input,
187
+ args: ['routerLinkActive']
188
+ }], templateRef: [{
189
+ type: ViewChild,
190
+ args: ['buttonProjectedRef', { static: true }]
191
+ }], inMenu: [{
192
+ type: Input,
193
+ args: ['clrInMenu']
194
+ }], classNames: [{
195
+ type: Input,
196
+ args: ['class']
197
+ }], name: [{
198
+ type: Input,
199
+ args: ['name']
200
+ }], type: [{
201
+ type: Input,
202
+ args: ['type']
203
+ }], id: [{
204
+ type: Input,
205
+ args: ['id']
206
+ }], disabled: [{
207
+ type: Input,
208
+ args: ['disabled']
209
+ }] } });
210
+
211
+ /*
212
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
213
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
214
+ * This software is released under MIT license.
215
+ * The full license information can be found in LICENSE in the root directory of this project.
216
+ */
217
+ var InitialFocus;
218
+ (function (InitialFocus) {
219
+ InitialFocus["FIRST_ITEM"] = "first";
220
+ InitialFocus["LAST_ITEM"] = "last";
221
+ })(InitialFocus || (InitialFocus = {}));
222
+
223
+ /*
224
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
225
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
226
+ * This software is released under MIT license.
227
+ * The full license information can be found in LICENSE in the root directory of this project.
228
+ */
229
+ class ButtonGroupFocusHandler {
230
+ constructor(focusService, popoverService, renderer) {
231
+ this.focusService = focusService;
232
+ this.popoverService = popoverService;
233
+ this.renderer = renderer;
234
+ this.initialFocus = InitialFocus.FIRST_ITEM;
235
+ this._unlistenFuncs = [];
236
+ }
237
+ ngOnDestroy() {
238
+ this._unlistenFuncs.forEach((unlisten) => unlisten());
239
+ this.focusService.detachListeners(this.menu);
240
+ }
241
+ initialize({ menu, menuToggle }) {
242
+ this.menu = menu;
243
+ this.menuToggle = menuToggle;
244
+ this.focusService.registerContainer(this.menu);
245
+ this.listenToKeys();
246
+ this.linkButtons();
247
+ switch (this.initialFocus) {
248
+ case InitialFocus.LAST_ITEM:
249
+ this.focusLastItem();
250
+ break;
251
+ default:
252
+ this.focusFirstItem();
253
+ break;
254
+ }
255
+ }
256
+ resetButtonsFocus() {
257
+ this.buttons.forEach(button => {
258
+ button.blur();
259
+ });
260
+ }
261
+ listenToKeys() {
262
+ this._unlistenFuncs.push(this.renderer.listen(this.menu, 'keydown.shift.tab', event => this.closeMenu(event, false)));
263
+ this._unlistenFuncs.push(this.renderer.listen(this.menu, 'keydown.tab', event => this.closeMenu(event, true)));
264
+ }
265
+ closeMenu(event, focusBackOnToggle) {
266
+ this.popoverService.toggleWithEvent(event);
267
+ if (focusBackOnToggle) {
268
+ this.menuToggle.focus();
269
+ }
270
+ this.resetButtonsFocus();
271
+ }
272
+ linkButtons() {
273
+ const buttonElements = Array.from(this.menu.children);
274
+ this.buttons = buttonElements.map(buttonElement => {
275
+ this._unlistenFuncs.push(this.renderer.listen(buttonElement, 'click', event => this.closeMenu(event, true)));
276
+ return {
277
+ id: buttonElement.id,
278
+ value: buttonElement,
279
+ focus: () => {
280
+ buttonElement.setAttribute('tabindex', '0');
281
+ buttonElement.focus();
282
+ },
283
+ blur: () => {
284
+ buttonElement.setAttribute('tabindex', '-1');
285
+ buttonElement.blur();
286
+ },
287
+ };
288
+ });
289
+ this.resetButtonsFocus();
290
+ Linkers.linkVertical(this.buttons);
291
+ }
292
+ focusFirstItem() {
293
+ if (this.buttons.length) {
294
+ this.focusService.moveTo(this.buttons[0]);
295
+ }
296
+ this.initialFocus = InitialFocus.FIRST_ITEM;
297
+ }
298
+ focusLastItem() {
299
+ if (this.buttons.length) {
300
+ this.focusService.moveTo(this.buttons[this.buttons.length - 1]);
301
+ }
302
+ this.initialFocus = InitialFocus.FIRST_ITEM;
303
+ }
304
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ButtonGroupFocusHandler, deps: [{ token: i3.FocusService }, { token: i2.ClrPopoverService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Injectable }); }
305
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ButtonGroupFocusHandler }); }
306
+ }
307
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ButtonGroupFocusHandler, decorators: [{
308
+ type: Injectable
309
+ }], ctorParameters: () => [{ type: i3.FocusService }, { type: i2.ClrPopoverService }, { type: i0.Renderer2 }] });
310
+ const BUTTON_GROUP_FOCUS_HANDLER_PROVIDER = {
311
+ provide: ButtonGroupFocusHandler,
312
+ };
313
+
314
+ /*
315
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
316
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
317
+ * This software is released under MIT license.
318
+ * The full license information can be found in LICENSE in the root directory of this project.
319
+ */
320
+ class ClrButtonGroup {
321
+ constructor(buttonGroupNewService, popoverService, commonStrings, destroy$, focusHandler) {
322
+ this.buttonGroupNewService = buttonGroupNewService;
323
+ this.popoverService = popoverService;
324
+ this.commonStrings = commonStrings;
325
+ this.destroy$ = destroy$;
326
+ this.focusHandler = focusHandler;
327
+ this.clrToggleButtonAriaLabel = this.commonStrings.keys.rowActions;
328
+ this.popoverId = uniqueIdFactory();
329
+ this.InitialFocus = InitialFocus;
330
+ this.inlineButtons = [];
331
+ this.menuButtons = [];
332
+ this.popoverType = ClrPopoverType.DROPDOWN;
333
+ this._menuPosition = ClrPopoverPosition.BOTTOM_LEFT;
334
+ }
335
+ get menuPosition() {
336
+ return this._menuPosition;
337
+ }
338
+ set menuPosition(pos) {
339
+ if (!pos) {
340
+ return;
341
+ }
342
+ const posIndex = DROPDOWN_POSITIONS.indexOf(pos);
343
+ if (posIndex === -1) {
344
+ return;
345
+ }
346
+ this._menuPosition = DROPDOWN_POSITIONS[posIndex];
347
+ }
348
+ get open() {
349
+ return this.popoverService.open;
350
+ }
351
+ /**
352
+ * 1. Initializes the initial Button Group View
353
+ * 2. Subscribes to changes on the ContentChildren
354
+ * in case the user content projection changes
355
+ */
356
+ ngAfterContentInit() {
357
+ this.initializeButtons();
358
+ this.buttonGroupNewService.changes.pipe(takeUntil(this.destroy$)).subscribe(button => this.rearrangeButton(button));
359
+ this.buttons.changes.subscribe(() => {
360
+ this.initializeButtons();
361
+ });
362
+ }
363
+ ngAfterViewInit() {
364
+ this.handleFocusOnMenuOpen();
365
+ }
366
+ /**
367
+ * Moves the button into the other ViewContainer
368
+ * when an update is received.
369
+ *
370
+ * @param button
371
+ */
372
+ rearrangeButton(button) {
373
+ let fromView;
374
+ let toView;
375
+ if (button.inMenu) {
376
+ fromView = this.inlineButtons;
377
+ toView = this.menuButtons;
378
+ }
379
+ else {
380
+ fromView = this.menuButtons;
381
+ toView = this.inlineButtons;
382
+ }
383
+ const index = fromView.indexOf(button);
384
+ if (index > -1) {
385
+ fromView.splice(index, 1);
386
+ const moveIndex = this.getMoveIndex(button);
387
+ if (moveIndex <= toView.length) {
388
+ toView.splice(moveIndex, 0, button);
389
+ }
390
+ }
391
+ }
392
+ openMenu(event, initialFocus) {
393
+ this.focusHandler.initialFocus = initialFocus;
394
+ if (!this.popoverService.open) {
395
+ this.popoverService.toggleWithEvent(event);
396
+ }
397
+ }
398
+ /**
399
+ * Author: Eudes
400
+ *
401
+ * Finds the order of a button w.r.t other buttons
402
+ *
403
+ * @param buttonToMove
404
+ * @returns
405
+ */
406
+ getMoveIndex(buttonToMove) {
407
+ const tempArr = this.buttons.filter(button => button.inMenu === buttonToMove.inMenu);
408
+ return tempArr.indexOf(buttonToMove);
409
+ }
410
+ initializeButtons() {
411
+ const tempInlineButtons = [];
412
+ const tempInMenuButtons = [];
413
+ this.buttons.forEach(button => {
414
+ if (button.inMenu) {
415
+ tempInMenuButtons.push(button);
416
+ }
417
+ else {
418
+ tempInlineButtons.push(button);
419
+ }
420
+ });
421
+ this.inlineButtons = tempInlineButtons;
422
+ this.menuButtons = tempInMenuButtons;
423
+ }
424
+ handleFocusOnMenuOpen() {
425
+ this.popoverService.popoverVisible.pipe(takeUntil(this.destroy$)).subscribe(visible => {
426
+ if (visible) {
427
+ this.focusHandler.initialize({
428
+ menu: this.menu.nativeElement,
429
+ menuToggle: this.menuToggle.nativeElement,
430
+ });
431
+ }
432
+ });
433
+ }
434
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrButtonGroup, deps: [{ token: ButtonInGroupService }, { token: i2.ClrPopoverService }, { token: i3.ClrCommonStringsService }, { token: i3.ClrDestroyService }, { token: ButtonGroupFocusHandler }], target: i0.ɵɵFactoryTarget.Component }); }
435
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: ClrButtonGroup, isStandalone: false, selector: "clr-button-group", inputs: { clrToggleButtonAriaLabel: "clrToggleButtonAriaLabel", menuPosition: ["clrMenuPosition", "menuPosition"] }, host: { properties: { "class.btn-group": "true" } }, providers: [ButtonInGroupService, ClrDestroyService, BUTTON_GROUP_FOCUS_HANDLER_PROVIDER, FOCUS_SERVICE_PROVIDER], queries: [{ propertyName: "buttons", predicate: ClrButton }], viewQueries: [{ propertyName: "menuToggle", first: true, predicate: ["menuToggle"], descendants: true }, { propertyName: "menu", first: true, predicate: ["menu"], descendants: true }], hostDirectives: [{ directive: i2.ClrPopoverHostDirective }], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n@for (inlineButton of inlineButtons; track inlineButton) {\n<ng-template [ngTemplateOutlet]=\"inlineButton.templateRef\"></ng-template>\n} @if (menuButtons.length > 0) {\n<div class=\"btn-group-overflow open\" [ngClass]=\"menuPosition\">\n <button\n #menuToggle\n class=\"btn dropdown-toggle\"\n clrPopoverOrigin\n clrPopoverOpenCloseButton\n (keydown.arrowup)=\"openMenu($event, InitialFocus.LAST_ITEM)\"\n (keydown.arrowdown)=\"openMenu($event, InitialFocus.FIRST_ITEM)\"\n [attr.aria-controls]=\"popoverId\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-label]=\"clrToggleButtonAriaLabel\"\n >\n <cds-icon shape=\"ellipsis-horizontal\" [attr.title]=\"commonStrings.keys.more\"></cds-icon>\n </button>\n <div\n #menu\n role=\"menu\"\n class=\"dropdown-menu clr-button-group-menu\"\n [id]=\"popoverId\"\n [attr.id]=\"popoverId\"\n [attr.aria-hidden]=\"!open\"\n *clrPopoverContent=\"open; at menuPosition; type: popoverType; outsideClickToClose: true; scrollToClose: true\"\n >\n @for (menuButton of menuButtons; track menuButton) {\n <ng-template [ngTemplateOutlet]=\"menuButton.templateRef\"></ng-template>\n }\n </div>\n</div>\n}\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i6.ClrIcon, selector: "clr-icon, cds-icon", inputs: ["shape", "size", "direction", "flip", "solid", "status", "inverse", "badge"] }, { kind: "directive", type: i2.ClrPopoverOrigin, selector: "[clrPopoverOrigin]" }, { kind: "directive", type: i2.ClrPopoverOpenCloseButton, selector: "[clrPopoverOpenCloseButton]", outputs: ["clrPopoverOpenCloseChange"] }, { kind: "directive", type: i2.ClrPopoverContent, selector: "[clrPopoverContent]", inputs: ["clrPopoverContent", "clrPopoverContentAt", "clrPopoverContentAvailablePositions", "clrPopoverContentType", "clrPopoverContentOutsideClickToClose", "clrPopoverContentScrollToClose", "clrPopoverContentOrigin"] }] }); }
436
+ }
437
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrButtonGroup, decorators: [{
438
+ type: Component,
439
+ args: [{ selector: 'clr-button-group', providers: [ButtonInGroupService, ClrDestroyService, BUTTON_GROUP_FOCUS_HANDLER_PROVIDER, FOCUS_SERVICE_PROVIDER], hostDirectives: [ClrPopoverHostDirective], host: { '[class.btn-group]': 'true' }, standalone: false, template: "<!--\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n@for (inlineButton of inlineButtons; track inlineButton) {\n<ng-template [ngTemplateOutlet]=\"inlineButton.templateRef\"></ng-template>\n} @if (menuButtons.length > 0) {\n<div class=\"btn-group-overflow open\" [ngClass]=\"menuPosition\">\n <button\n #menuToggle\n class=\"btn dropdown-toggle\"\n clrPopoverOrigin\n clrPopoverOpenCloseButton\n (keydown.arrowup)=\"openMenu($event, InitialFocus.LAST_ITEM)\"\n (keydown.arrowdown)=\"openMenu($event, InitialFocus.FIRST_ITEM)\"\n [attr.aria-controls]=\"popoverId\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-label]=\"clrToggleButtonAriaLabel\"\n >\n <cds-icon shape=\"ellipsis-horizontal\" [attr.title]=\"commonStrings.keys.more\"></cds-icon>\n </button>\n <div\n #menu\n role=\"menu\"\n class=\"dropdown-menu clr-button-group-menu\"\n [id]=\"popoverId\"\n [attr.id]=\"popoverId\"\n [attr.aria-hidden]=\"!open\"\n *clrPopoverContent=\"open; at menuPosition; type: popoverType; outsideClickToClose: true; scrollToClose: true\"\n >\n @for (menuButton of menuButtons; track menuButton) {\n <ng-template [ngTemplateOutlet]=\"menuButton.templateRef\"></ng-template>\n }\n </div>\n</div>\n}\n" }]
440
+ }], ctorParameters: () => [{ type: ButtonInGroupService }, { type: i2.ClrPopoverService }, { type: i3.ClrCommonStringsService }, { type: i3.ClrDestroyService }, { type: ButtonGroupFocusHandler }], propDecorators: { clrToggleButtonAriaLabel: [{
441
+ type: Input,
442
+ args: ['clrToggleButtonAriaLabel']
443
+ }], menuToggle: [{
444
+ type: ViewChild,
445
+ args: ['menuToggle']
446
+ }], menu: [{
447
+ type: ViewChild,
448
+ args: ['menu']
449
+ }], buttons: [{
450
+ type: ContentChildren,
451
+ args: [ClrButton]
452
+ }], menuPosition: [{
453
+ type: Input,
454
+ args: ['clrMenuPosition']
455
+ }] } });
456
+
457
+ /*
458
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
459
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
460
+ * This software is released under MIT license.
461
+ * The full license information can be found in LICENSE in the root directory of this project.
462
+ */
463
+ const CLR_BUTTON_GROUP_DIRECTIVES = [ClrButton, ClrButtonGroup];
464
+ class ClrButtonGroupModule {
465
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrButtonGroupModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
466
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: ClrButtonGroupModule, declarations: [ClrButton, ClrButtonGroup], imports: [CommonModule, ClrIcon, ClrPopoverModuleNext], exports: [ClrButton, ClrButtonGroup] }); }
467
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrButtonGroupModule, imports: [CommonModule, ClrIcon, ClrPopoverModuleNext] }); }
468
+ }
469
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrButtonGroupModule, decorators: [{
470
+ type: NgModule,
471
+ args: [{
472
+ imports: [CommonModule, ClrIcon, ClrPopoverModuleNext],
473
+ declarations: [CLR_BUTTON_GROUP_DIRECTIVES],
474
+ exports: [CLR_BUTTON_GROUP_DIRECTIVES],
475
+ }]
476
+ }] });
477
+
478
+ /*
479
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
480
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
481
+ * This software is released under MIT license.
482
+ * The full license information can be found in LICENSE in the root directory of this project.
483
+ */
484
+ // minimum width to fit loading spinner
485
+ const MIN_BUTTON_WIDTH = 42;
486
+ class ClrLoadingButton {
487
+ constructor(el, renderer) {
488
+ this.el = el;
489
+ this.renderer = renderer;
490
+ this.clrLoadingChange = new EventEmitter(false);
491
+ this.buttonState = ClrLoadingState;
492
+ this.state = ClrLoadingState.DEFAULT;
493
+ }
494
+ loadingStateChange(state) {
495
+ if (state === this.state) {
496
+ return;
497
+ }
498
+ this.state = state;
499
+ switch (state) {
500
+ case ClrLoadingState.DEFAULT:
501
+ this.renderer.removeStyle(this.el.nativeElement, 'width');
502
+ this.renderer.removeStyle(this.el.nativeElement, 'transform'); // for chromium render bug see issue https://github.com/vmware/clarity/issues/2700
503
+ if (!this.disabled) {
504
+ this.renderer.removeAttribute(this.el.nativeElement, 'disabled');
505
+ }
506
+ break;
507
+ case ClrLoadingState.LOADING:
508
+ this.setExplicitButtonWidth();
509
+ this.renderer.setStyle(this.el.nativeElement, 'transform', 'translatez(0)'); // for chromium render bug see issue https://github.com/vmware/clarity/issues/2700
510
+ this.renderer.setAttribute(this.el.nativeElement, 'disabled', '');
511
+ break;
512
+ case ClrLoadingState.SUCCESS:
513
+ this.setExplicitButtonWidth();
514
+ break;
515
+ case ClrLoadingState.ERROR:
516
+ this.loadingStateChange(ClrLoadingState.DEFAULT);
517
+ break;
518
+ default:
519
+ break;
520
+ }
521
+ this.clrLoadingChange.emit(state);
522
+ }
523
+ setExplicitButtonWidth() {
524
+ if (this.el.nativeElement && this.el.nativeElement.getBoundingClientRect) {
525
+ const boundingClientRect = this.el.nativeElement.getBoundingClientRect();
526
+ const width = Math.max(MIN_BUTTON_WIDTH, boundingClientRect.width);
527
+ this.renderer.setStyle(this.el.nativeElement, 'width', `${width}px`);
528
+ }
529
+ }
530
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrLoadingButton, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
531
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: ClrLoadingButton, isStandalone: false, selector: "button[clrLoading]", inputs: { disabled: "disabled" }, outputs: { clrLoadingChange: "clrLoadingChange" }, host: { properties: { "attr.disabled": "disabled? '' : null" } }, providers: [{ provide: LoadingListener, useExisting: ClrLoadingButton }], ngImport: i0, template: `
532
+ <span @parent>
533
+ @switch (state) {
534
+ @case (buttonState.LOADING) {
535
+ <span @spinner class="spinner spinner-inline"></span>
536
+ }
537
+ @case (buttonState.SUCCESS) {
538
+ <span
539
+ @validated
540
+ (@validated.done)="this.loadingStateChange(this.buttonState.DEFAULT)"
541
+ class="spinner spinner-inline spinner-check"
542
+ ></span>
543
+ }
544
+ @case (buttonState.DEFAULT) {
545
+ <span @defaultButton class="clr-loading-btn-content">
546
+ <ng-content></ng-content>
547
+ </span>
548
+ }
549
+ }
550
+ </span>
551
+ `, isInline: true, animations: [
552
+ trigger('parent', [
553
+ // Skip :enter animation on first render.
554
+ // The button text/content should only be faded when transitioning to or from a non-default state.
555
+ transition(':enter', []),
556
+ ]),
557
+ trigger('defaultButton', [
558
+ transition(':enter', [style({ opacity: 0 }), animate('200ms 100ms ease-in', style({ opacity: 1 }))]),
559
+ // TODO: see if we can get leave animation to work before spinner's enter animation
560
+ transition(':leave', [style({ opacity: 0 })]),
561
+ ]),
562
+ trigger('spinner', [
563
+ transition(':enter', [style({ opacity: 0 }), animate('200ms 100ms ease-in', style({ opacity: 1 }))]),
564
+ transition(':leave', [style({ opacity: 1 }), animate('100ms ease-out', style({ opacity: 0 }))]),
565
+ ]),
566
+ trigger('validated', [
567
+ transition(':enter', [
568
+ animate('600ms', keyframes([
569
+ style({ transform: 'scale(0,0)', offset: 0 }),
570
+ style({ opacity: 1, offset: 0.2 }),
571
+ style({ transform: 'scale(1.2,1.2)', offset: 0.4 }),
572
+ style({ transform: 'scale(.9,.9)', offset: 0.6 }),
573
+ style({ transform: 'scale(1,1)', offset: 1 }),
574
+ ])),
575
+ ]),
576
+ transition(':leave', [style({ opacity: 1 }), animate('100ms ease-out', style({ opacity: 0 }))]),
577
+ ]),
578
+ ] }); }
579
+ }
580
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrLoadingButton, decorators: [{
581
+ type: Component,
582
+ args: [{
583
+ selector: 'button[clrLoading]',
584
+ template: `
585
+ <span @parent>
586
+ @switch (state) {
587
+ @case (buttonState.LOADING) {
588
+ <span @spinner class="spinner spinner-inline"></span>
589
+ }
590
+ @case (buttonState.SUCCESS) {
591
+ <span
592
+ @validated
593
+ (@validated.done)="this.loadingStateChange(this.buttonState.DEFAULT)"
594
+ class="spinner spinner-inline spinner-check"
595
+ ></span>
596
+ }
597
+ @case (buttonState.DEFAULT) {
598
+ <span @defaultButton class="clr-loading-btn-content">
599
+ <ng-content></ng-content>
600
+ </span>
601
+ }
602
+ }
603
+ </span>
604
+ `,
605
+ providers: [{ provide: LoadingListener, useExisting: ClrLoadingButton }],
606
+ animations: [
607
+ trigger('parent', [
608
+ // Skip :enter animation on first render.
609
+ // The button text/content should only be faded when transitioning to or from a non-default state.
610
+ transition(':enter', []),
611
+ ]),
612
+ trigger('defaultButton', [
613
+ transition(':enter', [style({ opacity: 0 }), animate('200ms 100ms ease-in', style({ opacity: 1 }))]),
614
+ // TODO: see if we can get leave animation to work before spinner's enter animation
615
+ transition(':leave', [style({ opacity: 0 })]),
616
+ ]),
617
+ trigger('spinner', [
618
+ transition(':enter', [style({ opacity: 0 }), animate('200ms 100ms ease-in', style({ opacity: 1 }))]),
619
+ transition(':leave', [style({ opacity: 1 }), animate('100ms ease-out', style({ opacity: 0 }))]),
620
+ ]),
621
+ trigger('validated', [
622
+ transition(':enter', [
623
+ animate('600ms', keyframes([
624
+ style({ transform: 'scale(0,0)', offset: 0 }),
625
+ style({ opacity: 1, offset: 0.2 }),
626
+ style({ transform: 'scale(1.2,1.2)', offset: 0.4 }),
627
+ style({ transform: 'scale(.9,.9)', offset: 0.6 }),
628
+ style({ transform: 'scale(1,1)', offset: 1 }),
629
+ ])),
630
+ ]),
631
+ transition(':leave', [style({ opacity: 1 }), animate('100ms ease-out', style({ opacity: 0 }))]),
632
+ ]),
633
+ ],
634
+ host: { '[attr.disabled]': "disabled? '' : null" },
635
+ standalone: false,
636
+ }]
637
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { disabled: [{
638
+ type: Input,
639
+ args: ['disabled']
640
+ }], clrLoadingChange: [{
641
+ type: Output,
642
+ args: ['clrLoadingChange']
643
+ }] } });
644
+
645
+ /*
646
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
647
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
648
+ * This software is released under MIT license.
649
+ * The full license information can be found in LICENSE in the root directory of this project.
650
+ */
651
+ const CLR_LOADING_BUTTON_DIRECTIVES = [ClrLoadingButton];
652
+ class ClrLoadingButtonModule {
653
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrLoadingButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
654
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: ClrLoadingButtonModule, declarations: [ClrLoadingButton], imports: [CommonModule], exports: [ClrLoadingButton] }); }
655
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrLoadingButtonModule, imports: [CommonModule] }); }
656
+ }
657
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrLoadingButtonModule, decorators: [{
658
+ type: NgModule,
659
+ args: [{
660
+ imports: [CommonModule],
661
+ declarations: [CLR_LOADING_BUTTON_DIRECTIVES],
662
+ exports: [CLR_LOADING_BUTTON_DIRECTIVES],
663
+ }]
664
+ }] });
665
+
666
+ /*
667
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
668
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
669
+ * This software is released under MIT license.
670
+ * The full license information can be found in LICENSE in the root directory of this project.
671
+ */
672
+ class ClrButtonModule {
673
+ constructor() {
674
+ ClarityIcons.addIcons(ellipsisHorizontalIcon);
675
+ }
676
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
677
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: ClrButtonModule, exports: [ClrLoadingButtonModule, ClrButtonGroupModule] }); }
678
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrButtonModule, imports: [ClrLoadingButtonModule, ClrButtonGroupModule] }); }
679
+ }
680
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrButtonModule, decorators: [{
681
+ type: NgModule,
682
+ args: [{
683
+ exports: [ClrLoadingButtonModule, ClrButtonGroupModule],
684
+ }]
685
+ }], ctorParameters: () => [] });
686
+
687
+ /*
688
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
689
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
690
+ * This software is released under MIT license.
691
+ * The full license information can be found in LICENSE in the root directory of this project.
692
+ */
693
+
694
+ /*
695
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
696
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
697
+ * This software is released under MIT license.
698
+ * The full license information can be found in LICENSE in the root directory of this project.
699
+ */
700
+
701
+ /*
702
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
703
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
704
+ * This software is released under MIT license.
705
+ * The full license information can be found in LICENSE in the root directory of this project.
706
+ */
707
+
708
+ /**
709
+ * Generated bundle index. Do not edit.
710
+ */
711
+
712
+ export { CLR_BUTTON_GROUP_DIRECTIVES, CLR_LOADING_BUTTON_DIRECTIVES, ClrButton, ClrButtonGroup, ClrButtonGroupModule, ClrButtonModule, ClrLoadingButton, ClrLoadingButtonModule };
713
+ //# sourceMappingURL=clr-angular-button.mjs.map