carbon-components-angular 5.56.6 → 5.57.0

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 (247) hide show
  1. package/README.md +23 -6
  2. package/combo-button/combo-button.component.d.ts +99 -0
  3. package/combo-button/combo-button.module.d.ts +31 -0
  4. package/combo-button/index.d.ts +22 -0
  5. package/context-menu/context-menu-divider.component.d.ts +1 -1
  6. package/context-menu/context-menu-group.component.d.ts +1 -1
  7. package/context-menu/context-menu-item.component.d.ts +6 -1
  8. package/context-menu/context-menu.component.d.ts +11 -7
  9. package/context-menu/context-menu.types.d.ts +27 -0
  10. package/context-menu/index.d.ts +1 -0
  11. package/docs/documentation/components/Accordion.html +1 -1
  12. package/docs/documentation/components/AccordionItem.html +1 -1
  13. package/docs/documentation/components/ActionableNotification.html +1 -1
  14. package/docs/documentation/components/AlertModal.html +1 -1
  15. package/docs/documentation/components/BaseIconButton.html +1 -1
  16. package/docs/documentation/components/BaseNotification.html +1 -1
  17. package/docs/documentation/components/BaseTabHeader.html +1 -1
  18. package/docs/documentation/components/Breadcrumb.html +1 -1
  19. package/docs/documentation/components/BreadcrumbItemComponent.html +1 -1
  20. package/docs/documentation/components/ButtonSet.html +1 -1
  21. package/docs/documentation/components/Checkbox.html +1 -1
  22. package/docs/documentation/components/ClickableTile.html +1 -1
  23. package/docs/documentation/components/CodeSnippet.html +1 -1
  24. package/docs/documentation/components/ComboBox.html +1 -1
  25. package/docs/documentation/components/ComboButtonComponent.html +2264 -0
  26. package/docs/documentation/components/ContainedList.html +1 -1
  27. package/docs/documentation/components/ContainedListItem.html +1 -1
  28. package/docs/documentation/components/ContentSwitcher.html +1 -1
  29. package/docs/documentation/components/ContextMenuComponent.html +147 -164
  30. package/docs/documentation/components/ContextMenuDividerComponent.html +3 -3
  31. package/docs/documentation/components/ContextMenuGroupComponent.html +4 -4
  32. package/docs/documentation/components/ContextMenuItemComponent.html +218 -66
  33. package/docs/documentation/components/DatePicker.html +1 -1
  34. package/docs/documentation/components/DatePickerInput.html +1 -1
  35. package/docs/documentation/components/Dialog.html +1 -1
  36. package/docs/documentation/components/Documentation.html +1 -1
  37. package/docs/documentation/components/Dropdown.html +1 -1
  38. package/docs/documentation/components/DropdownList.html +1 -1
  39. package/docs/documentation/components/ExpandableTile.html +1 -1
  40. package/docs/documentation/components/FileComponent.html +1 -1
  41. package/docs/documentation/components/FileUploader.html +1 -1
  42. package/docs/documentation/components/Hamburger.html +1 -1
  43. package/docs/documentation/components/Header.html +1 -1
  44. package/docs/documentation/components/HeaderAction.html +1 -1
  45. package/docs/documentation/components/HeaderGlobal.html +1 -1
  46. package/docs/documentation/components/HeaderItem.html +1 -1
  47. package/docs/documentation/components/HeaderMenu.html +1 -1
  48. package/docs/documentation/components/HeaderNavigation.html +1 -1
  49. package/docs/documentation/components/IconButton.html +1 -1
  50. package/docs/documentation/components/InlineLoading.html +1 -1
  51. package/docs/documentation/components/Label.html +1 -1
  52. package/docs/documentation/components/ListColumn.html +1 -1
  53. package/docs/documentation/components/ListHeader.html +1 -1
  54. package/docs/documentation/components/ListRow.html +1 -1
  55. package/docs/documentation/components/Loading.html +1 -1
  56. package/docs/documentation/components/MenuButtonComponent.html +1931 -0
  57. package/docs/documentation/components/Modal.html +1 -1
  58. package/docs/documentation/components/ModalFooter.html +1 -1
  59. package/docs/documentation/components/ModalHeader.html +1 -1
  60. package/docs/documentation/components/Notification.html +1 -1
  61. package/docs/documentation/components/NumberComponent.html +1 -1
  62. package/docs/documentation/components/OverflowMenu.html +1 -1
  63. package/docs/documentation/components/OverflowMenuCustomPane.html +1 -1
  64. package/docs/documentation/components/OverflowMenuOption.html +1 -1
  65. package/docs/documentation/components/OverflowMenuPane.html +1 -1
  66. package/docs/documentation/components/Overlay.html +1 -1
  67. package/docs/documentation/components/Pagination.html +1 -1
  68. package/docs/documentation/components/PaginationNav.html +1 -1
  69. package/docs/documentation/components/PaginationNavItem.html +1 -1
  70. package/docs/documentation/components/PaginationOverflow.html +1 -1
  71. package/docs/documentation/components/Panel.html +1 -1
  72. package/docs/documentation/components/PasswordInputLabelComponent.html +1 -1
  73. package/docs/documentation/components/Placeholder.html +1 -1
  74. package/docs/documentation/components/PopoverContent.html +1 -1
  75. package/docs/documentation/components/ProgressBar.html +1 -1
  76. package/docs/documentation/components/ProgressIndicator.html +1 -1
  77. package/docs/documentation/components/Radio.html +1 -1
  78. package/docs/documentation/components/RadioGroup.html +1 -1
  79. package/docs/documentation/components/Search.html +1 -1
  80. package/docs/documentation/components/Select.html +1 -1
  81. package/docs/documentation/components/SelectionTile.html +1 -1
  82. package/docs/documentation/components/SideNav.html +1 -1
  83. package/docs/documentation/components/SideNavItem.html +1 -1
  84. package/docs/documentation/components/SideNavMenu.html +1 -1
  85. package/docs/documentation/components/SkeletonPlaceholder.html +1 -1
  86. package/docs/documentation/components/SkeletonText.html +1 -1
  87. package/docs/documentation/components/Slider.html +1 -1
  88. package/docs/documentation/components/StructuredList.html +1 -1
  89. package/docs/documentation/components/SwitcherList.html +1 -1
  90. package/docs/documentation/components/SwitcherListItem.html +1 -1
  91. package/docs/documentation/components/Tab.html +1 -1
  92. package/docs/documentation/components/TabHeaderGroup.html +1 -1
  93. package/docs/documentation/components/TabHeaders.html +1 -1
  94. package/docs/documentation/components/TabSkeleton.html +1 -1
  95. package/docs/documentation/components/Table.html +1 -1
  96. package/docs/documentation/components/TableBody.html +1 -1
  97. package/docs/documentation/components/TableCheckbox.html +1 -1
  98. package/docs/documentation/components/TableContainer.html +1 -1
  99. package/docs/documentation/components/TableData.html +1 -1
  100. package/docs/documentation/components/TableExpandButton.html +1 -1
  101. package/docs/documentation/components/TableExpandedRow.html +1 -1
  102. package/docs/documentation/components/TableHead.html +1 -1
  103. package/docs/documentation/components/TableHeadCell.html +1 -1
  104. package/docs/documentation/components/TableHeadCheckbox.html +1 -1
  105. package/docs/documentation/components/TableHeadExpand.html +1 -1
  106. package/docs/documentation/components/TableHeader.html +1 -1
  107. package/docs/documentation/components/TableRadio.html +1 -1
  108. package/docs/documentation/components/TableRowComponent.html +1 -1
  109. package/docs/documentation/components/TableToolbar.html +1 -1
  110. package/docs/documentation/components/TableToolbarActions.html +1 -1
  111. package/docs/documentation/components/TableToolbarContent.html +1 -1
  112. package/docs/documentation/components/TableToolbarSearch.html +1 -1
  113. package/docs/documentation/components/Tabs.html +1 -1
  114. package/docs/documentation/components/Tag.html +1 -1
  115. package/docs/documentation/components/TagFilter.html +1 -1
  116. package/docs/documentation/components/TagOperationalComponent.html +1 -1
  117. package/docs/documentation/components/TagSelectableComponent.html +1 -1
  118. package/docs/documentation/components/TextInputLabelComponent.html +1 -1
  119. package/docs/documentation/components/TextareaLabelComponent.html +1 -1
  120. package/docs/documentation/components/Tile.html +1 -1
  121. package/docs/documentation/components/TileGroup.html +1 -1
  122. package/docs/documentation/components/TimePicker.html +1 -1
  123. package/docs/documentation/components/TimePickerSelect.html +1 -1
  124. package/docs/documentation/components/Toast.html +1 -1
  125. package/docs/documentation/components/Toggle.html +1 -1
  126. package/docs/documentation/components/Toggletip.html +1 -1
  127. package/docs/documentation/components/Tooltip.html +1 -1
  128. package/docs/documentation/components/TooltipDefinition.html +1 -1
  129. package/docs/documentation/components/TreeNodeComponent.html +1 -1
  130. package/docs/documentation/components/TreeViewComponent.html +1 -1
  131. package/docs/documentation/coverage.html +40 -4
  132. package/docs/documentation/dependencies.html +1 -1
  133. package/docs/documentation/graph/dependencies.svg +3058 -2934
  134. package/docs/documentation/index.html +17 -6
  135. package/docs/documentation/interfaces/ItemClickEvent.html +437 -0
  136. package/docs/documentation/js/menu-wc.js +37 -0
  137. package/docs/documentation/js/menu-wc_es5.js +1 -1
  138. package/docs/documentation/js/search/search_index.js +2 -2
  139. package/docs/documentation/miscellaneous/typealiases.html +42 -0
  140. package/docs/documentation/modules/ComboBoxModule/dependencies.svg +4 -4
  141. package/docs/documentation/modules/ComboBoxModule.html +4 -4
  142. package/docs/documentation/modules/ComboButtonModule/dependencies.svg +106 -0
  143. package/docs/documentation/modules/ComboButtonModule.html +397 -0
  144. package/docs/documentation/modules/DatePickerInputModule/dependencies.svg +34 -38
  145. package/docs/documentation/modules/DatePickerInputModule.html +34 -38
  146. package/docs/documentation/modules/DatePickerModule/dependencies.svg +4 -4
  147. package/docs/documentation/modules/DatePickerModule.html +4 -4
  148. package/docs/documentation/modules/DialogModule/dependencies.svg +34 -34
  149. package/docs/documentation/modules/DialogModule.html +34 -34
  150. package/docs/documentation/modules/FileUploaderModule/dependencies.svg +36 -36
  151. package/docs/documentation/modules/FileUploaderModule.html +36 -36
  152. package/docs/documentation/modules/GridModule/dependencies.svg +60 -60
  153. package/docs/documentation/modules/GridModule.html +60 -60
  154. package/docs/documentation/modules/LoadingModule/dependencies.svg +4 -4
  155. package/docs/documentation/modules/LoadingModule.html +4 -4
  156. package/docs/documentation/modules/MenuButtonModule/dependencies.svg +106 -0
  157. package/docs/documentation/modules/MenuButtonModule.html +398 -0
  158. package/docs/documentation/modules/ProgressIndicatorModule/dependencies.svg +4 -4
  159. package/docs/documentation/modules/ProgressIndicatorModule.html +4 -4
  160. package/docs/documentation/modules/RadioModule/dependencies.svg +46 -42
  161. package/docs/documentation/modules/RadioModule.html +46 -42
  162. package/docs/documentation/modules/SearchModule/dependencies.svg +4 -4
  163. package/docs/documentation/modules/SearchModule.html +4 -4
  164. package/docs/documentation/modules/SliderModule/dependencies.svg +4 -4
  165. package/docs/documentation/modules/SliderModule.html +4 -4
  166. package/docs/documentation/modules/TabsModule/dependencies.svg +69 -69
  167. package/docs/documentation/modules/TabsModule.html +69 -69
  168. package/docs/documentation/modules/TagModule/dependencies.svg +4 -4
  169. package/docs/documentation/modules/TagModule.html +4 -4
  170. package/docs/documentation/modules/ThemeModule/dependencies.svg +14 -14
  171. package/docs/documentation/modules/ThemeModule.html +14 -14
  172. package/docs/documentation/modules/TilesModule/dependencies.svg +93 -93
  173. package/docs/documentation/modules/TilesModule.html +93 -93
  174. package/docs/documentation/modules/TimePickerModule/dependencies.svg +18 -18
  175. package/docs/documentation/modules/TimePickerModule.html +18 -18
  176. package/docs/documentation/modules/TimePickerSelectModule/dependencies.svg +30 -30
  177. package/docs/documentation/modules/TimePickerSelectModule.html +30 -30
  178. package/docs/documentation/modules/ToggleModule/dependencies.svg +45 -41
  179. package/docs/documentation/modules/ToggleModule.html +45 -41
  180. package/docs/documentation/modules/ToggletipModule/dependencies.svg +39 -39
  181. package/docs/documentation/modules/ToggletipModule.html +39 -39
  182. package/docs/documentation/modules/TooltipModule/dependencies.svg +4 -4
  183. package/docs/documentation/modules/TooltipModule.html +4 -4
  184. package/docs/documentation/modules/TreeviewModule/dependencies.svg +31 -31
  185. package/docs/documentation/modules/TreeviewModule.html +31 -31
  186. package/docs/documentation/modules/UIShellModule/dependencies.svg +4 -4
  187. package/docs/documentation/modules/UIShellModule.html +4 -4
  188. package/docs/documentation/modules.html +34 -0
  189. package/docs/documentation/overview.html +3061 -2937
  190. package/docs/documentation.json +1710 -271
  191. package/docs/storybook/1125.37c137fa.iframe.bundle.js +1 -0
  192. package/docs/storybook/4292.3a543fed.iframe.bundle.js +1 -0
  193. package/docs/storybook/6702.f2acb76e.iframe.bundle.js +1 -0
  194. package/docs/storybook/combo-button-combo-button-stories.17bfb9ad.iframe.bundle.js +1 -0
  195. package/docs/storybook/context-menu-context-menu-stories.eb5edb41.iframe.bundle.js +1 -0
  196. package/docs/storybook/iframe.html +2 -2
  197. package/docs/storybook/index.json +1 -1
  198. package/docs/storybook/main.625b3296.iframe.bundle.js +1 -0
  199. package/docs/storybook/menu-button-menu-button-stories.869bfd47.iframe.bundle.js +1 -0
  200. package/docs/storybook/popover-popover-stories.ea5149e0.iframe.bundle.js +1 -0
  201. package/docs/storybook/project.json +1 -1
  202. package/docs/storybook/runtime~main.61967556.iframe.bundle.js +1 -0
  203. package/docs/storybook/stories.json +1 -1
  204. package/docs/storybook/tag-tag-stories.7b925787.iframe.bundle.js +1 -0
  205. package/esm2020/combo-button/carbon-components-angular-combo-button.mjs +5 -0
  206. package/esm2020/combo-button/combo-button.component.mjs +302 -0
  207. package/esm2020/combo-button/combo-button.module.mjs +32 -0
  208. package/esm2020/combo-button/index.mjs +3 -0
  209. package/esm2020/context-menu/context-menu-divider.component.mjs +3 -3
  210. package/esm2020/context-menu/context-menu-group.component.mjs +3 -3
  211. package/esm2020/context-menu/context-menu-item.component.mjs +33 -3
  212. package/esm2020/context-menu/context-menu.component.mjs +27 -20
  213. package/esm2020/context-menu/context-menu.types.mjs +2 -0
  214. package/esm2020/context-menu/index.mjs +2 -1
  215. package/esm2020/index.mjs +2 -1
  216. package/esm2020/menu-button/carbon-components-angular-menu-button.mjs +5 -0
  217. package/esm2020/menu-button/index.mjs +3 -0
  218. package/esm2020/menu-button/menu-button.component.mjs +265 -0
  219. package/esm2020/menu-button/menu-button.module.mjs +33 -0
  220. package/fesm2015/carbon-components-angular-combo-button.mjs +338 -0
  221. package/fesm2015/carbon-components-angular-combo-button.mjs.map +1 -0
  222. package/fesm2015/carbon-components-angular-context-menu.mjs +62 -25
  223. package/fesm2015/carbon-components-angular-context-menu.mjs.map +1 -1
  224. package/fesm2015/carbon-components-angular-menu-button.mjs +302 -0
  225. package/fesm2015/carbon-components-angular-menu-button.mjs.map +1 -0
  226. package/fesm2015/carbon-components-angular.mjs +1 -0
  227. package/fesm2015/carbon-components-angular.mjs.map +1 -1
  228. package/fesm2020/carbon-components-angular-combo-button.mjs +337 -0
  229. package/fesm2020/carbon-components-angular-combo-button.mjs.map +1 -0
  230. package/fesm2020/carbon-components-angular-context-menu.mjs +62 -25
  231. package/fesm2020/carbon-components-angular-context-menu.mjs.map +1 -1
  232. package/fesm2020/carbon-components-angular-menu-button.mjs +301 -0
  233. package/fesm2020/carbon-components-angular-menu-button.mjs.map +1 -0
  234. package/fesm2020/carbon-components-angular.mjs +1 -0
  235. package/fesm2020/carbon-components-angular.mjs.map +1 -1
  236. package/index.d.ts +1 -0
  237. package/menu-button/index.d.ts +22 -0
  238. package/menu-button/menu-button.component.d.ts +88 -0
  239. package/menu-button/menu-button.module.d.ts +31 -0
  240. package/package.json +18 -2
  241. package/docs/storybook/1562.1e6a79b6.iframe.bundle.js +0 -1
  242. package/docs/storybook/6702.8b6fb391.iframe.bundle.js +0 -1
  243. package/docs/storybook/context-menu-context-menu-stories.7c62ce72.iframe.bundle.js +0 -1
  244. package/docs/storybook/main.9bc55d67.iframe.bundle.js +0 -1
  245. package/docs/storybook/popover-popover-stories.a91784a3.iframe.bundle.js +0 -1
  246. package/docs/storybook/runtime~main.31991a82.iframe.bundle.js +0 -1
  247. package/docs/storybook/tag-tag-stories.c5c2cc86.iframe.bundle.js +0 -1
@@ -0,0 +1,265 @@
1
+ import { ChangeDetectionStrategy, Component, ContentChildren, HostBinding, Input, ViewChild } from "@angular/core";
2
+ import { autoUpdate, computePosition, flip } from "@floating-ui/dom";
3
+ import { ContextMenuItemComponent } from "carbon-components-angular/context-menu";
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ import * as i2 from "carbon-components-angular/button";
7
+ import * as i3 from "carbon-components-angular/icon";
8
+ import * as i4 from "carbon-components-angular/context-menu";
9
+ export class MenuButtonComponent {
10
+ constructor(ngZone, renderer, hostElement, viewContainerRef, changeDetectorRef) {
11
+ this.ngZone = ngZone;
12
+ this.renderer = renderer;
13
+ this.hostElement = hostElement;
14
+ this.viewContainerRef = viewContainerRef;
15
+ this.changeDetectorRef = changeDetectorRef;
16
+ this.menuId = `menu-button-${MenuButtonComponent.menuButtonCounter++}`;
17
+ this.containerClass = true;
18
+ this.kind = "primary";
19
+ this.size = "lg";
20
+ this.menuAlignment = "bottom";
21
+ this.buttonTabIndex = "0";
22
+ this.disabled = false;
23
+ this.open = false;
24
+ this.documentClick = this.handleFocusOut.bind(this);
25
+ this.subscriptions = [];
26
+ this._alignment = "bottom";
27
+ }
28
+ // Listen for click & determine if menu should close
29
+ set projectedMenuItems(itemList) {
30
+ // Reset in case user dynamically updates menu item
31
+ this.subscriptions.forEach((sub) => sub?.unsubscribe());
32
+ this.subscriptions = [];
33
+ itemList.forEach((item) => {
34
+ this.subscriptions.push(item.itemClick.subscribe((clickEvent) => this.handleMenuItemClick(clickEvent)));
35
+ });
36
+ }
37
+ /**
38
+ * In case user updates alignment, store initial value.
39
+ * This allows us to test user passed alignment on each open
40
+ */
41
+ ngOnChanges(changes) {
42
+ if (changes.menuAlignment) {
43
+ this._alignment = changes.menuAlignment.currentValue;
44
+ }
45
+ }
46
+ /**
47
+ * If user has passed in true for open, we dynamically open the menu
48
+ */
49
+ ngAfterViewInit() {
50
+ if (this.open) {
51
+ this.open = !this.open;
52
+ this.toggleMenu();
53
+ }
54
+ }
55
+ /**
56
+ * Clean up Floating-ui & subscriptions
57
+ */
58
+ ngOnDestroy() {
59
+ this.cleanUp();
60
+ this.subscriptions.forEach((sub) => sub.unsubscribe());
61
+ }
62
+ /**
63
+ * As of now, menu button does not support nexted menu, on button click it should close
64
+ */
65
+ handleMenuItemClick(event) {
66
+ // If event is not type radio/checkbox, we close the menu
67
+ if (!event.type) {
68
+ this.toggleMenu();
69
+ }
70
+ }
71
+ /**
72
+ * On body click, close the menu
73
+ * @param event
74
+ */
75
+ handleFocusOut(event) {
76
+ if (!this.hostElement.nativeElement.contains(event.target)) {
77
+ this.toggleMenu();
78
+ }
79
+ }
80
+ /**
81
+ * Clean up `autoUpdate` if auto alignment is enabled
82
+ */
83
+ cleanUp() {
84
+ document.removeEventListener("click", this.documentClick);
85
+ if (this.unmountFloatingElement) {
86
+ this.menuRef.remove();
87
+ this.viewContainerRef.clear();
88
+ this.unmountFloatingElement();
89
+ }
90
+ this.unmountFloatingElement = undefined;
91
+ // On all instances of menu closing, make sure icon direction is correct
92
+ this.changeDetectorRef.markForCheck();
93
+ }
94
+ /**
95
+ * Handles emitting open/close event
96
+ */
97
+ toggleMenu() {
98
+ this.open = !this.open;
99
+ if (this.open) {
100
+ // Render the template & append to view
101
+ const view = this.viewContainerRef.createEmbeddedView(this.menuTemplate);
102
+ this.menuRef = document.body.appendChild(view.rootNodes[0]);
103
+ // Assign button width to the menu ref to align with button
104
+ Object.assign(this.menuRef.style, {
105
+ width: `${this.referenceElement.nativeElement.clientWidth}px`,
106
+ top: "0",
107
+ left: "0"
108
+ });
109
+ // Reset & test alignment every open
110
+ this.menuAlignment = this._alignment;
111
+ document.addEventListener("click", this.documentClick);
112
+ // Listen for events such as scrolling to keep menu aligned
113
+ this.unmountFloatingElement = autoUpdate(this.referenceElement.nativeElement, this.menuRef, this.recomputePosition.bind(this));
114
+ }
115
+ else {
116
+ this.cleanUp();
117
+ }
118
+ }
119
+ roundByDPR(value) {
120
+ const dpr = window.devicePixelRatio || 1;
121
+ return Math.round(value * dpr) / dpr;
122
+ }
123
+ /**
124
+ * Compute position of menu
125
+ */
126
+ recomputePosition() {
127
+ if (this.menuTemplate && this.referenceElement) {
128
+ // Run outside of angular zone to avoid unnecessary change detection and rely on floating-ui
129
+ this.ngZone.runOutsideAngular(async () => {
130
+ const { x, y, placement } = await computePosition(this.referenceElement.nativeElement, this.menuRef, {
131
+ placement: this.menuAlignment,
132
+ strategy: "fixed",
133
+ middleware: [
134
+ flip({ crossAxis: false })
135
+ ]
136
+ });
137
+ this.menuAlignment = placement;
138
+ // Using CSSOM to manipulate CSS to avoid content security policy inline-src
139
+ // https://github.com/w3c/webappsec-csp/issues/212
140
+ Object.assign(this.menuRef.style, {
141
+ position: "fixed",
142
+ // Using transform instead of top/left position to improve performance
143
+ transform: `translate(${this.roundByDPR(x)}px,${this.roundByDPR(y)}px)`
144
+ });
145
+ this.changeDetectorRef.markForCheck();
146
+ });
147
+ }
148
+ }
149
+ }
150
+ MenuButtonComponent.menuButtonCounter = 0;
151
+ MenuButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MenuButtonComponent, deps: [{ token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
152
+ MenuButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: MenuButtonComponent, selector: "cds-menu-button", inputs: { menuId: "menuId", kind: "kind", size: "size", menuAlignment: "menuAlignment", buttonTabIndex: "buttonTabIndex", disabled: "disabled", open: "open", label: "label" }, host: { properties: { "class.cds--menu-button__container": "this.containerClass" } }, queries: [{ propertyName: "projectedMenuItems", predicate: ContextMenuItemComponent }], viewQueries: [{ propertyName: "referenceElement", first: true, predicate: ["reference"], descendants: true, static: true }, { propertyName: "menuTemplate", first: true, predicate: ["menuTemplate"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
153
+ <button
154
+ #reference
155
+ class="cds--menu-button__trigger"
156
+ [ngClass]="{'cds--menu-button__trigger--open': open}"
157
+ [cdsButton]="kind"
158
+ [size]="size"
159
+ [attr.tabindex]="buttonTabIndex"
160
+ [disabled]="disabled"
161
+ type="button"
162
+ [attr.aria-haspopup]="true"
163
+ [attr.aria-expanded]="open"
164
+ [attr.aria-controls]="open ? menuId : undefined"
165
+ (click)="toggleMenu()">
166
+ {{label}}
167
+ <svg
168
+ cdsIcon="chevron--down"
169
+ size="16"
170
+ class="cds--btn__icon">
171
+ </svg>
172
+ </button>
173
+ <ng-template #menuTemplate>
174
+ <cds-menu
175
+ mode="basic"
176
+ [size]="size"
177
+ [open]="open"
178
+ [attr.id]="menuId"
179
+ [ngClass]="{
180
+ 'cds--menu-button__bottom': this.menuAlignment === 'bottom',
181
+ 'cds--menu-button__bottom-start': this.menuAlignment === 'bottom-start',
182
+ 'cds--menu-button__bottom-end': this.menuAlignment === 'bottom-end',
183
+ 'cds--menu-top': this.menuAlignment === 'top',
184
+ 'cds--menu-top-start': this.menuAlignment === 'top-start',
185
+ 'cds--menu-top-end': this.menuAlignment === 'top-end'
186
+ }">
187
+ <ng-content select="cds-menu-item, cds-menu-divider"></ng-content>
188
+ </cds-menu>
189
+ </ng-template>
190
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i3.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i4.ContextMenuComponent, selector: "cds-menu, cds-context-menu, ibm-context-menu", inputs: ["open", "position", "size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
191
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MenuButtonComponent, decorators: [{
192
+ type: Component,
193
+ args: [{
194
+ selector: "cds-menu-button",
195
+ template: `
196
+ <button
197
+ #reference
198
+ class="cds--menu-button__trigger"
199
+ [ngClass]="{'cds--menu-button__trigger--open': open}"
200
+ [cdsButton]="kind"
201
+ [size]="size"
202
+ [attr.tabindex]="buttonTabIndex"
203
+ [disabled]="disabled"
204
+ type="button"
205
+ [attr.aria-haspopup]="true"
206
+ [attr.aria-expanded]="open"
207
+ [attr.aria-controls]="open ? menuId : undefined"
208
+ (click)="toggleMenu()">
209
+ {{label}}
210
+ <svg
211
+ cdsIcon="chevron--down"
212
+ size="16"
213
+ class="cds--btn__icon">
214
+ </svg>
215
+ </button>
216
+ <ng-template #menuTemplate>
217
+ <cds-menu
218
+ mode="basic"
219
+ [size]="size"
220
+ [open]="open"
221
+ [attr.id]="menuId"
222
+ [ngClass]="{
223
+ 'cds--menu-button__bottom': this.menuAlignment === 'bottom',
224
+ 'cds--menu-button__bottom-start': this.menuAlignment === 'bottom-start',
225
+ 'cds--menu-button__bottom-end': this.menuAlignment === 'bottom-end',
226
+ 'cds--menu-top': this.menuAlignment === 'top',
227
+ 'cds--menu-top-start': this.menuAlignment === 'top-start',
228
+ 'cds--menu-top-end': this.menuAlignment === 'top-end'
229
+ }">
230
+ <ng-content select="cds-menu-item, cds-menu-divider"></ng-content>
231
+ </cds-menu>
232
+ </ng-template>
233
+ `,
234
+ changeDetection: ChangeDetectionStrategy.OnPush
235
+ }]
236
+ }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { menuId: [{
237
+ type: Input
238
+ }], projectedMenuItems: [{
239
+ type: ContentChildren,
240
+ args: [ContextMenuItemComponent]
241
+ }], containerClass: [{
242
+ type: HostBinding,
243
+ args: ["class.cds--menu-button__container"]
244
+ }], kind: [{
245
+ type: Input
246
+ }], size: [{
247
+ type: Input
248
+ }], menuAlignment: [{
249
+ type: Input
250
+ }], buttonTabIndex: [{
251
+ type: Input
252
+ }], disabled: [{
253
+ type: Input
254
+ }], open: [{
255
+ type: Input
256
+ }], label: [{
257
+ type: Input
258
+ }], referenceElement: [{
259
+ type: ViewChild,
260
+ args: ["reference", { static: true }]
261
+ }], menuTemplate: [{
262
+ type: ViewChild,
263
+ args: ["menuTemplate"]
264
+ }] } });
265
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21lbnUtYnV0dG9uL21lbnUtYnV0dG9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRU4sdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxlQUFlLEVBR2YsV0FBVyxFQUNYLEtBQUssRUFRTCxTQUFTLEVBRVQsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUNOLFVBQVUsRUFDVixlQUFlLEVBQ2YsSUFBSSxFQUNKLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLHdCQUF3QixFQUFrQixNQUFNLHdDQUF3QyxDQUFDOzs7Ozs7QUFnRGxHLE1BQU0sT0FBTyxtQkFBbUI7SUFvQy9CLFlBQ1csTUFBYyxFQUNkLFFBQW1CLEVBQ25CLFdBQXVCLEVBQ3ZCLGdCQUFrQyxFQUNsQyxpQkFBb0M7UUFKcEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFDdkIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBdkN0QyxXQUFNLEdBQUcsZUFBZSxtQkFBbUIsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7UUFjekIsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFFL0QsU0FBSSxHQUFxQyxTQUFTLENBQUM7UUFDbkQsU0FBSSxHQUF1QixJQUFJLENBQUM7UUFDaEMsa0JBQWEsR0FBd0IsUUFBUSxDQUFDO1FBQzlDLG1CQUFjLEdBQThCLEdBQUcsQ0FBQztRQUNoRCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLFNBQUksR0FBRyxLQUFLLENBQUM7UUFNWixrQkFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBR2pE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QVc7dUJBQUMsbUNBQW1DO2dCQUV2QyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRW9DLGdCQUFnQjtzQkFBekQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNiLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdEFmdGVyVmlld0luaXQsXG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuXHRDaGFuZ2VEZXRlY3RvclJlZixcblx0Q29tcG9uZW50LFxuXHRDb250ZW50Q2hpbGRyZW4sXG5cdEVsZW1lbnRSZWYsXG5cdGZvcndhcmRSZWYsXG5cdEhvc3RCaW5kaW5nLFxuXHRJbnB1dCxcblx0Tmdab25lLFxuXHRPbkNoYW5nZXMsXG5cdE9uRGVzdHJveSxcblx0UXVlcnlMaXN0LFxuXHRSZW5kZXJlcjIsXG5cdFNpbXBsZUNoYW5nZXMsXG5cdFRlbXBsYXRlUmVmLFxuXHRWaWV3Q2hpbGQsXG5cdFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuaW1wb3J0IHtcblx0YXV0b1VwZGF0ZSxcblx0Y29tcHV0ZVBvc2l0aW9uLFxuXHRmbGlwXG59IGZyb20gXCJAZmxvYXRpbmctdWkvZG9tXCI7XG5pbXBvcnQgeyBDb250ZXh0TWVudUl0ZW1Db21wb25lbnQsIEl0ZW1DbGlja0V2ZW50IH0gZnJvbSBcImNhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXIvY29udGV4dC1tZW51XCI7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuXG50eXBlIE1lbnVCdXR0b25QbGFjZW1lbnQgPSBcInRvcFwiIHwgXCJ0b3Atc3RhcnRcIiB8IFwidG9wLWVuZFwiIHwgXCJib3R0b21cIiB8IFwiYm90dG9tLXN0YXJ0XCIgfCBcImJvdHRvbS1lbmRcIjtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiBcImNkcy1tZW51LWJ1dHRvblwiLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxidXR0b25cblx0XHRcdCNyZWZlcmVuY2Vcblx0XHRcdGNsYXNzPVwiY2RzLS1tZW51LWJ1dHRvbl9fdHJpZ2dlclwiXG5cdFx0XHRbbmdDbGFzc109XCJ7J2Nkcy0tbWVudS1idXR0b25fX3RyaWdnZXItLW9wZW4nOiBvcGVufVwiXG5cdFx0XHRbY2RzQnV0dG9uXT1cImtpbmRcIlxuXHRcdFx0W3NpemVdPVwic2l6ZVwiXG5cdFx0XHRbYXR0ci50YWJpbmRleF09XCJidXR0b25UYWJJbmRleFwiXG5cdFx0XHRbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuXHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRbYXR0ci5hcmlhLWhhc3BvcHVwXT1cInRydWVcIlxuXHRcdFx0W2F0dHIuYXJpYS1leHBhbmRlZF09XCJvcGVuXCJcblx0XHRcdFthdHRyLmFyaWEtY29udHJvbHNdPVwib3BlbiA/IG1lbnVJZCA6IHVuZGVmaW5lZFwiXG5cdFx0XHQoY2xpY2spPVwidG9nZ2xlTWVudSgpXCI+XG5cdFx0XHR7e2xhYmVsfX1cblx0XHRcdDxzdmdcblx0XHRcdFx0Y2RzSWNvbj1cImNoZXZyb24tLWRvd25cIlxuXHRcdFx0XHRzaXplPVwiMTZcIlxuXHRcdFx0XHRjbGFzcz1cImNkcy0tYnRuX19pY29uXCI+XG5cdFx0XHQ8L3N2Zz5cblx0XHQ8L2J1dHRvbj5cblx0XHQ8bmctdGVtcGxhdGUgI21lbnVUZW1wbGF0ZT5cblx0XHRcdDxjZHMtbWVudVxuXHRcdFx0XHRtb2RlPVwiYmFzaWNcIlxuXHRcdFx0XHRbc2l6ZV09XCJzaXplXCJcblx0XHRcdFx0W29wZW5dPVwib3BlblwiXG5cdFx0XHRcdFthdHRyLmlkXT1cIm1lbnVJZFwiXG5cdFx0XHRcdFtuZ0NsYXNzXT1cIntcblx0XHRcdFx0XHQnY2RzLS1tZW51LWJ1dHRvbl9fYm90dG9tJzogdGhpcy5tZW51QWxpZ25tZW50ID09PSAnYm90dG9tJyxcblx0XHRcdFx0XHQnY2RzLS1tZW51LWJ1dHRvbl9fYm90dG9tLXN0YXJ0JzogdGhpcy5tZW51QWxpZ25tZW50ID09PSAnYm90dG9tLXN0YXJ0Jyxcblx0XHRcdFx0XHQnY2RzLS1tZW51LWJ1dHRvbl9fYm90dG9tLWVuZCc6IHRoaXMubWVudUFsaWdubWVudCA9PT0gJ2JvdHRvbS1lbmQnLFxuXHRcdFx0XHRcdCdjZHMtLW1lbnUtdG9wJzogdGhpcy5tZW51QWxpZ25tZW50ID09PSAndG9wJyxcblx0XHRcdFx0XHQnY2RzLS1tZW51LXRvcC1zdGFydCc6IHRoaXMubWVudUFsaWdubWVudCA9PT0gJ3RvcC1zdGFydCcsXG5cdFx0XHRcdFx0J2Nkcy0tbWVudS10b3AtZW5kJzogdGhpcy5tZW51QWxpZ25tZW50ID09PSAndG9wLWVuZCdcblx0XHRcdFx0fVwiPlxuXHRcdFx0XHQ8bmctY29udGVudCBzZWxlY3Q9XCJjZHMtbWVudS1pdGVtLCBjZHMtbWVudS1kaXZpZGVyXCI+PC9uZy1jb250ZW50PlxuXHRcdFx0PC9jZHMtbWVudT5cblx0XHQ8L25nLXRlbXBsYXRlPlxuXHRgLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBNZW51QnV0dG9uQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXHRzdGF0aWMgbWVudUJ1dHRvbkNvdW50ZXIgPSAwO1xuXHRASW5wdXQoKSBtZW51SWQgPSBgbWVudS1idXR0b24tJHtNZW51QnV0dG9uQ29tcG9uZW50Lm1lbnVCdXR0b25Db3VudGVyKyt9YDtcblxuXHQvLyBMaXN0ZW4gZm9yIGNsaWNrICYgZGV0ZXJtaW5lIGlmIG1lbnUgc2hvdWxkIGNsb3NlXG5cdEBDb250ZW50Q2hpbGRyZW4oQ29udGV4dE1lbnVJdGVtQ29tcG9uZW50KSBzZXQgcHJvamVjdGVkTWVudUl0ZW1zKGl0ZW1MaXN0OiBRdWVyeUxpc3Q8Q29udGV4dE1lbnVJdGVtQ29tcG9uZW50Pikge1xuXHRcdC8vIFJlc2V0IGluIGNhc2UgdXNlciBkeW5hbWljYWxseSB1cGRhdGVzIG1lbnUgaXRlbVxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWIpID0+IHN1Yj8udW5zdWJzY3JpYmUoKSk7XG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zID0gW107XG5cdFx0aXRlbUxpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xuXHRcdFx0dGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG5cdFx0XHRcdGl0ZW0uaXRlbUNsaWNrLnN1YnNjcmliZSgoY2xpY2tFdmVudCkgPT4gdGhpcy5oYW5kbGVNZW51SXRlbUNsaWNrKGNsaWNrRXZlbnQpKVxuXHRcdFx0KTtcblx0XHR9KTtcblx0fVxuXG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tbWVudS1idXR0b25fX2NvbnRhaW5lclwiKSBjb250YWluZXJDbGFzcyA9IHRydWU7XG5cblx0QElucHV0KCkga2luZDogXCJwcmltYXJ5XCIgfCBcInRlcnRpYXJ5XCIgfCBcImdob3N0XCIgPSBcInByaW1hcnlcIjtcblx0QElucHV0KCkgc2l6ZTogXCJzbVwiIHwgXCJtZFwiIHwgXCJsZ1wiID0gXCJsZ1wiO1xuXHRASW5wdXQoKSBtZW51QWxpZ25tZW50OiBNZW51QnV0dG9uUGxhY2VtZW50ID0gXCJib3R0b21cIjtcblx0QElucHV0KCkgYnV0dG9uVGFiSW5kZXg6IFwiMFwiIHwgXCIxXCIgfCBcIi0xXCIgfCBzdHJpbmcgPSBcIjBcIjtcblx0QElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcblx0QElucHV0KCkgb3BlbiA9IGZhbHNlO1xuXHRASW5wdXQoKSBsYWJlbDogc3RyaW5nO1xuXG5cdEBWaWV3Q2hpbGQoXCJyZWZlcmVuY2VcIiwgeyBzdGF0aWM6IHRydWUgfSkgcmVmZXJlbmNlRWxlbWVudDogRWxlbWVudFJlZjxIVE1MQnV0dG9uRWxlbWVudD47XG5cdEBWaWV3Q2hpbGQoXCJtZW51VGVtcGxhdGVcIikgbWVudVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG5cdHByb3RlY3RlZCBkb2N1bWVudENsaWNrID0gdGhpcy5oYW5kbGVGb2N1c091dC5iaW5kKHRoaXMpO1xuXHRwcm90ZWN0ZWQgdW5tb3VudEZsb2F0aW5nRWxlbWVudDogRnVuY3Rpb247XG5cblx0cHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXHRwcml2YXRlIF9hbGlnbm1lbnQ6IE1lbnVCdXR0b25QbGFjZW1lbnQgPSBcImJvdHRvbVwiO1xuXHRwcml2YXRlIG1lbnVSZWY6IEhUTUxFbGVtZW50O1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByb3RlY3RlZCBuZ1pvbmU6IE5nWm9uZSxcblx0XHRwcm90ZWN0ZWQgcmVuZGVyZXI6IFJlbmRlcmVyMixcblx0XHRwcm90ZWN0ZWQgaG9zdEVsZW1lbnQ6IEVsZW1lbnRSZWYsXG5cdFx0cHJvdGVjdGVkIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG5cdFx0cHJvdGVjdGVkIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxuXHQpIHsgfVxuXG5cblx0LyoqXG5cdCAqIEluIGNhc2UgdXNlciB1cGRhdGVzIGFsaWdubWVudCwgc3RvcmUgaW5pdGlhbCB2YWx1ZS5cblx0ICogVGhpcyBhbGxvd3MgdXMgdG8gdGVzdCB1c2VyIHBhc3NlZCBhbGlnbm1lbnQgb24gZWFjaCBvcGVuXG5cdCAqL1xuXHRuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG5cdFx0aWYgKGNoYW5nZXMubWVudUFsaWdubWVudCkge1xuXHRcdFx0dGhpcy5fYWxpZ25tZW50ID0gY2hhbmdlcy5tZW51QWxpZ25tZW50LmN1cnJlbnRWYWx1ZTtcblx0XHR9XG5cdH1cblxuXG5cblx0LyoqXG5cdCAqIElmIHVzZXIgaGFzIHBhc3NlZCBpbiB0cnVlIGZvciBvcGVuLCB3ZSBkeW5hbWljYWxseSBvcGVuIHRoZSBtZW51XG5cdCAqL1xuXHRuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMub3Blbikge1xuXHRcdFx0dGhpcy5vcGVuID0gIXRoaXMub3Blbjtcblx0XHRcdHRoaXMudG9nZ2xlTWVudSgpO1xuXHRcdH1cblx0fVxuXG5cblxuXHQvKipcblx0KiBDbGVhbiB1cCBGbG9hdGluZy11aSAmIHN1YnNjcmlwdGlvbnNcblx0Ki9cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0dGhpcy5jbGVhblVwKCk7XG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YikgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xuXHR9XG5cblxuXHQvKipcblx0ICogQXMgb2Ygbm93LCBtZW51IGJ1dHRvbiBkb2VzIG5vdCBzdXBwb3J0IG5leHRlZCBtZW51LCBvbiBidXR0b24gY2xpY2sgaXQgc2hvdWxkIGNsb3NlXG5cdCAqL1xuXHRoYW5kbGVNZW51SXRlbUNsaWNrKGV2ZW50OiBJdGVtQ2xpY2tFdmVudCkge1xuXHRcdC8vIElmIGV2ZW50IGlzIG5vdCB0eXBlIHJhZGlvL2NoZWNrYm94LCB3ZSBjbG9zZSB0aGUgbWVudVxuXHRcdGlmICghZXZlbnQudHlwZSkge1xuXHRcdFx0dGhpcy50b2dnbGVNZW51KCk7XG5cdFx0fVxuXHR9XG5cblxuXG5cdC8qKlxuXHQgKiBPbiBib2R5IGNsaWNrLCBjbG9zZSB0aGUgbWVudVxuXHQgKiBAcGFyYW0gZXZlbnRcblx0ICovXG5cdGhhbmRsZUZvY3VzT3V0KGV2ZW50KSB7XG5cdFx0aWYgKCF0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuXHRcdFx0dGhpcy50b2dnbGVNZW51KCk7XG5cdFx0fVxuXHR9XG5cblxuXG5cdC8qKlxuXHQgKiBDbGVhbiB1cCBgYXV0b1VwZGF0ZWAgaWYgYXV0byBhbGlnbm1lbnQgaXMgZW5hYmxlZFxuXHQgKi9cblx0Y2xlYW5VcCgpIHtcblx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5kb2N1bWVudENsaWNrKTtcblx0XHRpZiAodGhpcy51bm1vdW50RmxvYXRpbmdFbGVtZW50KSB7XG5cdFx0XHR0aGlzLm1lbnVSZWYucmVtb3ZlKCk7XG5cdFx0XHR0aGlzLnZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcblx0XHRcdHRoaXMudW5tb3VudEZsb2F0aW5nRWxlbWVudCgpO1xuXHRcdH1cblx0XHR0aGlzLnVubW91bnRGbG9hdGluZ0VsZW1lbnQgPSB1bmRlZmluZWQ7XG5cdFx0Ly8gT24gYWxsIGluc3RhbmNlcyBvZiBtZW51IGNsb3NpbmcsIG1ha2Ugc3VyZSBpY29uIGRpcmVjdGlvbiBpcyBjb3JyZWN0XG5cdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXG5cblxuXHQvKipcblx0ICogSGFuZGxlcyBlbWl0dGluZyBvcGVuL2Nsb3NlIGV2ZW50XG5cdCAqL1xuXHR0b2dnbGVNZW51KCkge1xuXHRcdHRoaXMub3BlbiA9ICF0aGlzLm9wZW47XG5cdFx0aWYgKHRoaXMub3Blbikge1xuXHRcdFx0Ly8gUmVuZGVyIHRoZSB0ZW1wbGF0ZSAmIGFwcGVuZCB0byB2aWV3XG5cdFx0XHRjb25zdCB2aWV3ID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLm1lbnVUZW1wbGF0ZSk7XG5cdFx0XHR0aGlzLm1lbnVSZWYgPSBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHZpZXcucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50KTtcblx0XHRcdC8vIEFzc2lnbiBidXR0b24gd2lkdGggdG8gdGhlIG1lbnUgcmVmIHRvIGFsaWduIHdpdGggYnV0dG9uXG5cdFx0XHRPYmplY3QuYXNzaWduKHRoaXMubWVudVJlZi5zdHlsZSwge1xuXHRcdFx0XHR3aWR0aDogYCR7dGhpcy5yZWZlcmVuY2VFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGh9cHhgLFxuXHRcdFx0XHR0b3A6IFwiMFwiLFxuXHRcdFx0XHRsZWZ0OiBcIjBcIlxuXHRcdFx0fSk7XG5cblx0XHRcdC8vIFJlc2V0ICYgdGVzdCBhbGlnbm1lbnQgZXZlcnkgb3BlblxuXHRcdFx0dGhpcy5tZW51QWxpZ25tZW50ID0gdGhpcy5fYWxpZ25tZW50O1xuXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5kb2N1bWVudENsaWNrKTtcblxuXHRcdFx0Ly8gTGlzdGVuIGZvciBldmVudHMgc3VjaCBhcyBzY3JvbGxpbmcgdG8ga2VlcCBtZW51IGFsaWduZWRcblx0XHRcdHRoaXMudW5tb3VudEZsb2F0aW5nRWxlbWVudCA9IGF1dG9VcGRhdGUoXG5cdFx0XHRcdHRoaXMucmVmZXJlbmNlRWxlbWVudC5uYXRpdmVFbGVtZW50LFxuXHRcdFx0XHR0aGlzLm1lbnVSZWYsXG5cdFx0XHRcdHRoaXMucmVjb21wdXRlUG9zaXRpb24uYmluZCh0aGlzKVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5jbGVhblVwKCk7XG5cdFx0fVxuXHR9XG5cblxuXG5cdHJvdW5kQnlEUFIodmFsdWUpIHtcblx0XHRjb25zdCBkcHIgPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuXHRcdHJldHVybiBNYXRoLnJvdW5kKHZhbHVlICogZHByKSAvIGRwcjtcblx0fVxuXG5cblxuXHQvKipcblx0ICogQ29tcHV0ZSBwb3NpdGlvbiBvZiBtZW51XG5cdCAqL1xuXHRyZWNvbXB1dGVQb3NpdGlvbigpIHtcblx0XHRpZiAodGhpcy5tZW51VGVtcGxhdGUgJiYgdGhpcy5yZWZlcmVuY2VFbGVtZW50KSB7XG5cdFx0XHQvLyBSdW4gb3V0c2lkZSBvZiBhbmd1bGFyIHpvbmUgdG8gYXZvaWQgdW5uZWNlc3NhcnkgY2hhbmdlIGRldGVjdGlvbiBhbmQgcmVseSBvbiBmbG9hdGluZy11aVxuXHRcdFx0dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRjb25zdCB7IHgsIHksIHBsYWNlbWVudCB9ID0gYXdhaXQgY29tcHV0ZVBvc2l0aW9uKFxuXHRcdFx0XHRcdHRoaXMucmVmZXJlbmNlRWxlbWVudC5uYXRpdmVFbGVtZW50LFxuXHRcdFx0XHRcdHRoaXMubWVudVJlZixcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRwbGFjZW1lbnQ6IHRoaXMubWVudUFsaWdubWVudCxcblx0XHRcdFx0XHRcdHN0cmF0ZWd5OiBcImZpeGVkXCIsXG5cdFx0XHRcdFx0XHRtaWRkbGV3YXJlOiBbXG5cdFx0XHRcdFx0XHRcdGZsaXAoeyBjcm9zc0F4aXM6IGZhbHNlIH0pXG5cdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dGhpcy5tZW51QWxpZ25tZW50ID0gcGxhY2VtZW50IGFzIE1lbnVCdXR0b25QbGFjZW1lbnQ7XG5cblx0XHRcdFx0Ly8gVXNpbmcgQ1NTT00gdG8gbWFuaXB1bGF0ZSBDU1MgdG8gYXZvaWQgY29udGVudCBzZWN1cml0eSBwb2xpY3kgaW5saW5lLXNyY1xuXHRcdFx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vdzNjL3dlYmFwcHNlYy1jc3AvaXNzdWVzLzIxMlxuXHRcdFx0XHRPYmplY3QuYXNzaWduKHRoaXMubWVudVJlZi5zdHlsZSwge1xuXHRcdFx0XHRcdHBvc2l0aW9uOiBcImZpeGVkXCIsXG5cdFx0XHRcdFx0Ly8gVXNpbmcgdHJhbnNmb3JtIGluc3RlYWQgb2YgdG9wL2xlZnQgcG9zaXRpb24gdG8gaW1wcm92ZSBwZXJmb3JtYW5jZVxuXHRcdFx0XHRcdHRyYW5zZm9ybTogYHRyYW5zbGF0ZSgke3RoaXMucm91bmRCeURQUih4KX1weCwke3RoaXMucm91bmRCeURQUih5KX1weClgXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59XG4iXX0=
@@ -0,0 +1,33 @@
1
+ import { NgModule } from "@angular/core";
2
+ import { CommonModule } from "@angular/common";
3
+ import { ButtonModule } from "carbon-components-angular/button";
4
+ import { IconModule } from "carbon-components-angular/icon";
5
+ import { ContextMenuModule } from "carbon-components-angular/context-menu";
6
+ import { MenuButtonComponent } from "./menu-button.component";
7
+ import * as i0 from "@angular/core";
8
+ export class MenuButtonModule {
9
+ }
10
+ MenuButtonModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MenuButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
11
+ MenuButtonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: MenuButtonModule, declarations: [MenuButtonComponent], imports: [CommonModule,
12
+ ButtonModule,
13
+ IconModule,
14
+ ContextMenuModule], exports: [MenuButtonComponent] });
15
+ MenuButtonModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MenuButtonModule, imports: [CommonModule,
16
+ ButtonModule,
17
+ IconModule,
18
+ ContextMenuModule] });
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MenuButtonModule, decorators: [{
20
+ type: NgModule,
21
+ args: [{
22
+ imports: [
23
+ CommonModule,
24
+ ButtonModule,
25
+ IconModule,
26
+ ContextMenuModule
27
+ ],
28
+ exports: [MenuButtonComponent],
29
+ declarations: [MenuButtonComponent],
30
+ providers: []
31
+ }]
32
+ }] });
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1idXR0b24ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21lbnUtYnV0dG9uL21lbnUtYnV0dG9uLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRTNFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQWE5RCxNQUFNLE9BQU8sZ0JBQWdCOzs2R0FBaEIsZ0JBQWdCOzhHQUFoQixnQkFBZ0IsaUJBSGIsbUJBQW1CLGFBTmpDLFlBQVk7UUFDWixZQUFZO1FBQ1osVUFBVTtRQUNWLGlCQUFpQixhQUVSLG1CQUFtQjs4R0FJakIsZ0JBQWdCLFlBVDNCLFlBQVk7UUFDWixZQUFZO1FBQ1osVUFBVTtRQUNWLGlCQUFpQjsyRkFNTixnQkFBZ0I7a0JBWDVCLFFBQVE7bUJBQUM7b0JBQ1QsT0FBTyxFQUFFO3dCQUNSLFlBQVk7d0JBQ1osWUFBWTt3QkFDWixVQUFVO3dCQUNWLGlCQUFpQjtxQkFDakI7b0JBQ0QsT0FBTyxFQUFFLENBQUMsbUJBQW1CLENBQUM7b0JBQzlCLFlBQVksRUFBRSxDQUFDLG1CQUFtQixDQUFDO29CQUNuQyxTQUFTLEVBQUUsRUFBRTtpQkFDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcblxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSBcImNhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXIvYnV0dG9uXCI7XG5pbXBvcnQgeyBJY29uTW9kdWxlIH0gZnJvbSBcImNhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXIvaWNvblwiO1xuaW1wb3J0IHsgQ29udGV4dE1lbnVNb2R1bGUgfSBmcm9tIFwiY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhci9jb250ZXh0LW1lbnVcIjtcblxuaW1wb3J0IHsgTWVudUJ1dHRvbkNvbXBvbmVudCB9IGZyb20gXCIuL21lbnUtYnV0dG9uLmNvbXBvbmVudFwiO1xuXG5ATmdNb2R1bGUoe1xuXHRpbXBvcnRzOiBbXG5cdFx0Q29tbW9uTW9kdWxlLFxuXHRcdEJ1dHRvbk1vZHVsZSxcblx0XHRJY29uTW9kdWxlLFxuXHRcdENvbnRleHRNZW51TW9kdWxlXG5cdF0sXG5cdGV4cG9ydHM6IFtNZW51QnV0dG9uQ29tcG9uZW50XSxcblx0ZGVjbGFyYXRpb25zOiBbTWVudUJ1dHRvbkNvbXBvbmVudF0sXG5cdHByb3ZpZGVyczogW11cbn0pXG5leHBvcnQgY2xhc3MgTWVudUJ1dHRvbk1vZHVsZSB7IH1cbiJdfQ==
@@ -0,0 +1,338 @@
1
+ import { __awaiter } from 'tslib';
2
+ import * as i0 from '@angular/core';
3
+ import { EventEmitter, Component, ChangeDetectionStrategy, Input, ContentChildren, HostBinding, Output, ViewChild, NgModule } from '@angular/core';
4
+ import { autoUpdate, computePosition, flip } from '@floating-ui/dom';
5
+ import * as i3 from 'carbon-components-angular/context-menu';
6
+ import { ContextMenuItemComponent, ContextMenuModule } from 'carbon-components-angular/context-menu';
7
+ import * as i1 from 'carbon-components-angular/button';
8
+ import { ButtonModule } from 'carbon-components-angular/button';
9
+ import * as i2 from 'carbon-components-angular/icon';
10
+ import { IconModule } from 'carbon-components-angular/icon';
11
+ import { CommonModule } from '@angular/common';
12
+
13
+ class ComboButtonComponent {
14
+ constructor(ngZone, renderer, hostElement, viewContainerRef, changeDetectorRef) {
15
+ this.ngZone = ngZone;
16
+ this.renderer = renderer;
17
+ this.hostElement = hostElement;
18
+ this.viewContainerRef = viewContainerRef;
19
+ this.changeDetectorRef = changeDetectorRef;
20
+ this.comboId = `combo-button-${ComboButtonComponent.comboButtonCounter++}`;
21
+ this.size = "lg";
22
+ this.disabled = false;
23
+ this.menuAlignment = "bottom";
24
+ this.tooltipAutoAlign = false;
25
+ this.tooltipPlacement = "bottom";
26
+ this.open = false;
27
+ this.actionClick = new EventEmitter();
28
+ this.comboButtonContainer = true;
29
+ this.documentClick = this.handleFocusOut.bind(this);
30
+ this.subscriptions = [];
31
+ this._alignment = "bottom";
32
+ }
33
+ // Listen for click & determine if menu should close
34
+ set projectedMenuItems(itemList) {
35
+ // Reset in case user dynamically updates menu item
36
+ this.subscriptions.forEach((sub) => sub === null || sub === void 0 ? void 0 : sub.unsubscribe());
37
+ this.subscriptions = [];
38
+ itemList.forEach((item) => {
39
+ this.subscriptions.push(item.itemClick.subscribe((clickEvent) => this.handleMenuItemClick(clickEvent)));
40
+ });
41
+ }
42
+ get sizeLg() { return this.size === "lg"; }
43
+ get sizeMd() { return this.size === "md"; }
44
+ get sizeSm() { return this.size === "sm"; }
45
+ get ariaOwns() {
46
+ return this.open ? this.comboId : undefined;
47
+ }
48
+ /**
49
+ * In case user updates alignment, store initial value.
50
+ * This allows us to test user passed alignment on each open
51
+ */
52
+ ngOnChanges(changes) {
53
+ if (changes.menuAlignment) {
54
+ this._alignment = changes.menuAlignment.currentValue;
55
+ }
56
+ }
57
+ /**
58
+ * If user has passed in true for open, we dynamically open the menu
59
+ */
60
+ ngAfterViewInit() {
61
+ if (this.open) {
62
+ this.open = !this.open;
63
+ this.toggleMenu();
64
+ }
65
+ }
66
+ /**
67
+ * Clean up Floating-ui & subscriptions
68
+ */
69
+ ngOnDestroy() {
70
+ this.cleanUp();
71
+ this.subscriptions.forEach((sub) => sub.unsubscribe());
72
+ }
73
+ /**
74
+ * As of now, menu button does not support nexted menu, on button click it should close
75
+ */
76
+ handleMenuItemClick(event) {
77
+ // If event is not type radio/checkbox, we close the menu
78
+ if (!event.type) {
79
+ this.toggleMenu();
80
+ }
81
+ }
82
+ /**
83
+ * On body click, close the menu
84
+ * @param event
85
+ */
86
+ handleFocusOut(event) {
87
+ if (!this.hostElement.nativeElement.contains(event.target)) {
88
+ this.toggleMenu();
89
+ }
90
+ }
91
+ /**
92
+ * Clean up `autoUpdate` if auto alignment is enabled
93
+ */
94
+ cleanUp() {
95
+ document.removeEventListener("click", this.documentClick);
96
+ if (this.unmountFloatingElement) {
97
+ this.menuRef.remove();
98
+ this.viewContainerRef.clear();
99
+ this.unmountFloatingElement();
100
+ }
101
+ this.unmountFloatingElement = undefined;
102
+ // On all instances of menu closing, make sure icon direction is correct
103
+ this.changeDetectorRef.markForCheck();
104
+ }
105
+ /**
106
+ * On action click, notify user
107
+ * If the menu is open, close the menu
108
+ * @param event
109
+ */
110
+ onActionClick(event) {
111
+ if (this.open) {
112
+ this.toggleMenu();
113
+ }
114
+ this.actionClick.emit(event);
115
+ }
116
+ /**
117
+ * Handles emitting open/close event
118
+ */
119
+ toggleMenu() {
120
+ this.open = !this.open;
121
+ if (this.open) {
122
+ // Render the template & append to view
123
+ const view = this.viewContainerRef.createEmbeddedView(this.menuTemplate);
124
+ this.menuRef = document.body.appendChild(view.rootNodes[0]);
125
+ // Assign button width to the menu ref to align with button
126
+ Object.assign(this.menuRef.style, {
127
+ width: `${this.hostElement.nativeElement.clientWidth}px`,
128
+ top: "0",
129
+ left: "0"
130
+ });
131
+ // Reset & test alignment every open
132
+ this.menuAlignment = this._alignment;
133
+ document.addEventListener("click", this.documentClick);
134
+ // Listen for events such as scrolling to keep menu aligned
135
+ this.unmountFloatingElement = autoUpdate(this.hostElement.nativeElement, this.menuRef, this.recomputePosition.bind(this));
136
+ }
137
+ else {
138
+ this.cleanUp();
139
+ }
140
+ }
141
+ roundByDPR(value) {
142
+ const dpr = window.devicePixelRatio || 1;
143
+ return Math.round(value * dpr) / dpr;
144
+ }
145
+ /**
146
+ * Compute position of menu
147
+ */
148
+ recomputePosition() {
149
+ if (this.menuTemplate && this.hostElement) {
150
+ // Run outside of angular zone to avoid unnecessary change detection and rely on floating-ui
151
+ this.ngZone.runOutsideAngular(() => __awaiter(this, void 0, void 0, function* () {
152
+ const { x, y, placement } = yield computePosition(this.hostElement.nativeElement, this.menuRef, {
153
+ placement: this.menuAlignment,
154
+ strategy: "fixed",
155
+ middleware: [
156
+ flip({ crossAxis: false })
157
+ ]
158
+ });
159
+ this.menuAlignment = placement;
160
+ // Using CSSOM to manipulate CSS to avoid content security policy inline-src
161
+ // https://github.com/w3c/webappsec-csp/issues/212
162
+ Object.assign(this.menuRef.style, {
163
+ position: "fixed",
164
+ // Using transform instead of top/left position to improve performance
165
+ transform: `translate(${this.roundByDPR(x)}px,${this.roundByDPR(y)}px)`
166
+ });
167
+ this.changeDetectorRef.markForCheck();
168
+ }));
169
+ }
170
+ }
171
+ }
172
+ ComboButtonComponent.comboButtonCounter = 0;
173
+ ComboButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ComboButtonComponent, deps: [{ token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
174
+ ComboButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ComboButtonComponent, selector: "cds-combo-button", inputs: { comboId: "comboId", size: "size", label: "label", disabled: "disabled", menuAlignment: "menuAlignment", description: "description", tooltipAutoAlign: "tooltipAutoAlign", tooltipPlacement: "tooltipPlacement", open: "open" }, outputs: { actionClick: "actionClick" }, host: { properties: { "class.cds--combo-button__container--open": "this.open", "class.cds--combo-button__container": "this.comboButtonContainer", "class.cds--combo-button__container--lg": "this.sizeLg", "class.cds--combo-button__container--md": "this.sizeMd", "class.cds--combo-button__container--sm": "this.sizeSm", "attr.aria-owns": "this.ariaOwns" } }, queries: [{ propertyName: "projectedMenuItems", predicate: ContextMenuItemComponent }], viewQueries: [{ propertyName: "menuTemplate", first: true, predicate: ["menuTemplate"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
175
+ <div class="cds--combo-button__primary-action" [attr.aria-owns]="open ? comboId : undefined">
176
+ <button
177
+ cdsButton="primary"
178
+ [size]="size"
179
+ [attr.title]="label"
180
+ [disabled]="disabled"
181
+ type="button"
182
+ (click)="onActionClick($event)">
183
+ {{label}}
184
+ </button>
185
+ </div>
186
+ <cds-icon-button
187
+ [buttonNgClass]="{ 'cds--combo-button__trigger': true }"
188
+ [buttonAttributes]="{
189
+ 'aria-haspopup': true,
190
+ 'aria-expanded': open,
191
+ 'aria-controls': open ? comboId : undefined
192
+ }"
193
+ [size]="size"
194
+ [description]="description"
195
+ [disabled]="disabled"
196
+ [autoAlign]="tooltipAutoAlign"
197
+ [align]="tooltipPlacement"
198
+ (click)="toggleMenu()">
199
+ <svg
200
+ cdsIcon="chevron--down"
201
+ size="16">
202
+ </svg>
203
+ </cds-icon-button>
204
+
205
+ <ng-template #menuTemplate>
206
+ <cds-menu
207
+ mode="basic"
208
+ [size]="size"
209
+ [open]="open"
210
+ [attr.id]="comboId">
211
+ <ng-content select="cds-menu-item, cds-menu-divider"></ng-content>
212
+ </cds-menu>
213
+ </ng-template>
214
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "component", type: i1.IconButton, selector: "cds-icon-button, ibm-icon-button", inputs: ["buttonNgClass", "buttonAttributes", "buttonId", "kind", "size", "type", "isExpressive", "disabled", "description", "showTooltipWhenDisabled"], outputs: ["click", "focus", "blur", "tooltipClick"] }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i3.ContextMenuComponent, selector: "cds-menu, cds-context-menu, ibm-context-menu", inputs: ["open", "position", "size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
215
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ComboButtonComponent, decorators: [{
216
+ type: Component,
217
+ args: [{
218
+ selector: "cds-combo-button",
219
+ template: `
220
+ <div class="cds--combo-button__primary-action" [attr.aria-owns]="open ? comboId : undefined">
221
+ <button
222
+ cdsButton="primary"
223
+ [size]="size"
224
+ [attr.title]="label"
225
+ [disabled]="disabled"
226
+ type="button"
227
+ (click)="onActionClick($event)">
228
+ {{label}}
229
+ </button>
230
+ </div>
231
+ <cds-icon-button
232
+ [buttonNgClass]="{ 'cds--combo-button__trigger': true }"
233
+ [buttonAttributes]="{
234
+ 'aria-haspopup': true,
235
+ 'aria-expanded': open,
236
+ 'aria-controls': open ? comboId : undefined
237
+ }"
238
+ [size]="size"
239
+ [description]="description"
240
+ [disabled]="disabled"
241
+ [autoAlign]="tooltipAutoAlign"
242
+ [align]="tooltipPlacement"
243
+ (click)="toggleMenu()">
244
+ <svg
245
+ cdsIcon="chevron--down"
246
+ size="16">
247
+ </svg>
248
+ </cds-icon-button>
249
+
250
+ <ng-template #menuTemplate>
251
+ <cds-menu
252
+ mode="basic"
253
+ [size]="size"
254
+ [open]="open"
255
+ [attr.id]="comboId">
256
+ <ng-content select="cds-menu-item, cds-menu-divider"></ng-content>
257
+ </cds-menu>
258
+ </ng-template>
259
+ `,
260
+ changeDetection: ChangeDetectionStrategy.OnPush
261
+ }]
262
+ }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { comboId: [{
263
+ type: Input
264
+ }], projectedMenuItems: [{
265
+ type: ContentChildren,
266
+ args: [ContextMenuItemComponent]
267
+ }], size: [{
268
+ type: Input
269
+ }], label: [{
270
+ type: Input
271
+ }], disabled: [{
272
+ type: Input
273
+ }], menuAlignment: [{
274
+ type: Input
275
+ }], description: [{
276
+ type: Input
277
+ }], tooltipAutoAlign: [{
278
+ type: Input
279
+ }], tooltipPlacement: [{
280
+ type: Input
281
+ }], open: [{
282
+ type: Input
283
+ }, {
284
+ type: HostBinding,
285
+ args: ["class.cds--combo-button__container--open"]
286
+ }], actionClick: [{
287
+ type: Output
288
+ }], comboButtonContainer: [{
289
+ type: HostBinding,
290
+ args: ["class.cds--combo-button__container"]
291
+ }], sizeLg: [{
292
+ type: HostBinding,
293
+ args: ["class.cds--combo-button__container--lg"]
294
+ }], sizeMd: [{
295
+ type: HostBinding,
296
+ args: ["class.cds--combo-button__container--md"]
297
+ }], sizeSm: [{
298
+ type: HostBinding,
299
+ args: ["class.cds--combo-button__container--sm"]
300
+ }], ariaOwns: [{
301
+ type: HostBinding,
302
+ args: ["attr.aria-owns"]
303
+ }], menuTemplate: [{
304
+ type: ViewChild,
305
+ args: ["menuTemplate"]
306
+ }] } });
307
+
308
+ class ComboButtonModule {
309
+ }
310
+ ComboButtonModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ComboButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
311
+ ComboButtonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: ComboButtonModule, declarations: [ComboButtonComponent], imports: [CommonModule,
312
+ ButtonModule,
313
+ IconModule,
314
+ ContextMenuModule], exports: [ComboButtonComponent] });
315
+ ComboButtonModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ComboButtonModule, imports: [CommonModule,
316
+ ButtonModule,
317
+ IconModule,
318
+ ContextMenuModule] });
319
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ComboButtonModule, decorators: [{
320
+ type: NgModule,
321
+ args: [{
322
+ imports: [
323
+ CommonModule,
324
+ ButtonModule,
325
+ IconModule,
326
+ ContextMenuModule
327
+ ],
328
+ exports: [ComboButtonComponent],
329
+ declarations: [ComboButtonComponent]
330
+ }]
331
+ }] });
332
+
333
+ /**
334
+ * Generated bundle index. Do not edit.
335
+ */
336
+
337
+ export { ComboButtonComponent, ComboButtonModule };
338
+ //# sourceMappingURL=carbon-components-angular-combo-button.mjs.map