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,337 @@
1
+ import * as i0 from '@angular/core';
2
+ import { EventEmitter, Component, ChangeDetectionStrategy, Input, ContentChildren, HostBinding, Output, ViewChild, NgModule } from '@angular/core';
3
+ import { autoUpdate, computePosition, flip } from '@floating-ui/dom';
4
+ import * as i3 from 'carbon-components-angular/context-menu';
5
+ import { ContextMenuItemComponent, ContextMenuModule } from 'carbon-components-angular/context-menu';
6
+ import * as i1 from 'carbon-components-angular/button';
7
+ import { ButtonModule } from 'carbon-components-angular/button';
8
+ import * as i2 from 'carbon-components-angular/icon';
9
+ import { IconModule } from 'carbon-components-angular/icon';
10
+ import { CommonModule } from '@angular/common';
11
+
12
+ class ComboButtonComponent {
13
+ constructor(ngZone, renderer, hostElement, viewContainerRef, changeDetectorRef) {
14
+ this.ngZone = ngZone;
15
+ this.renderer = renderer;
16
+ this.hostElement = hostElement;
17
+ this.viewContainerRef = viewContainerRef;
18
+ this.changeDetectorRef = changeDetectorRef;
19
+ this.comboId = `combo-button-${ComboButtonComponent.comboButtonCounter++}`;
20
+ this.size = "lg";
21
+ this.disabled = false;
22
+ this.menuAlignment = "bottom";
23
+ this.tooltipAutoAlign = false;
24
+ this.tooltipPlacement = "bottom";
25
+ this.open = false;
26
+ this.actionClick = new EventEmitter();
27
+ this.comboButtonContainer = true;
28
+ this.documentClick = this.handleFocusOut.bind(this);
29
+ this.subscriptions = [];
30
+ this._alignment = "bottom";
31
+ }
32
+ // Listen for click & determine if menu should close
33
+ set projectedMenuItems(itemList) {
34
+ // Reset in case user dynamically updates menu item
35
+ this.subscriptions.forEach((sub) => sub?.unsubscribe());
36
+ this.subscriptions = [];
37
+ itemList.forEach((item) => {
38
+ this.subscriptions.push(item.itemClick.subscribe((clickEvent) => this.handleMenuItemClick(clickEvent)));
39
+ });
40
+ }
41
+ get sizeLg() { return this.size === "lg"; }
42
+ get sizeMd() { return this.size === "md"; }
43
+ get sizeSm() { return this.size === "sm"; }
44
+ get ariaOwns() {
45
+ return this.open ? this.comboId : undefined;
46
+ }
47
+ /**
48
+ * In case user updates alignment, store initial value.
49
+ * This allows us to test user passed alignment on each open
50
+ */
51
+ ngOnChanges(changes) {
52
+ if (changes.menuAlignment) {
53
+ this._alignment = changes.menuAlignment.currentValue;
54
+ }
55
+ }
56
+ /**
57
+ * If user has passed in true for open, we dynamically open the menu
58
+ */
59
+ ngAfterViewInit() {
60
+ if (this.open) {
61
+ this.open = !this.open;
62
+ this.toggleMenu();
63
+ }
64
+ }
65
+ /**
66
+ * Clean up Floating-ui & subscriptions
67
+ */
68
+ ngOnDestroy() {
69
+ this.cleanUp();
70
+ this.subscriptions.forEach((sub) => sub.unsubscribe());
71
+ }
72
+ /**
73
+ * As of now, menu button does not support nexted menu, on button click it should close
74
+ */
75
+ handleMenuItemClick(event) {
76
+ // If event is not type radio/checkbox, we close the menu
77
+ if (!event.type) {
78
+ this.toggleMenu();
79
+ }
80
+ }
81
+ /**
82
+ * On body click, close the menu
83
+ * @param event
84
+ */
85
+ handleFocusOut(event) {
86
+ if (!this.hostElement.nativeElement.contains(event.target)) {
87
+ this.toggleMenu();
88
+ }
89
+ }
90
+ /**
91
+ * Clean up `autoUpdate` if auto alignment is enabled
92
+ */
93
+ cleanUp() {
94
+ document.removeEventListener("click", this.documentClick);
95
+ if (this.unmountFloatingElement) {
96
+ this.menuRef.remove();
97
+ this.viewContainerRef.clear();
98
+ this.unmountFloatingElement();
99
+ }
100
+ this.unmountFloatingElement = undefined;
101
+ // On all instances of menu closing, make sure icon direction is correct
102
+ this.changeDetectorRef.markForCheck();
103
+ }
104
+ /**
105
+ * On action click, notify user
106
+ * If the menu is open, close the menu
107
+ * @param event
108
+ */
109
+ onActionClick(event) {
110
+ if (this.open) {
111
+ this.toggleMenu();
112
+ }
113
+ this.actionClick.emit(event);
114
+ }
115
+ /**
116
+ * Handles emitting open/close event
117
+ */
118
+ toggleMenu() {
119
+ this.open = !this.open;
120
+ if (this.open) {
121
+ // Render the template & append to view
122
+ const view = this.viewContainerRef.createEmbeddedView(this.menuTemplate);
123
+ this.menuRef = document.body.appendChild(view.rootNodes[0]);
124
+ // Assign button width to the menu ref to align with button
125
+ Object.assign(this.menuRef.style, {
126
+ width: `${this.hostElement.nativeElement.clientWidth}px`,
127
+ top: "0",
128
+ left: "0"
129
+ });
130
+ // Reset & test alignment every open
131
+ this.menuAlignment = this._alignment;
132
+ document.addEventListener("click", this.documentClick);
133
+ // Listen for events such as scrolling to keep menu aligned
134
+ this.unmountFloatingElement = autoUpdate(this.hostElement.nativeElement, this.menuRef, this.recomputePosition.bind(this));
135
+ }
136
+ else {
137
+ this.cleanUp();
138
+ }
139
+ }
140
+ roundByDPR(value) {
141
+ const dpr = window.devicePixelRatio || 1;
142
+ return Math.round(value * dpr) / dpr;
143
+ }
144
+ /**
145
+ * Compute position of menu
146
+ */
147
+ recomputePosition() {
148
+ if (this.menuTemplate && this.hostElement) {
149
+ // Run outside of angular zone to avoid unnecessary change detection and rely on floating-ui
150
+ this.ngZone.runOutsideAngular(async () => {
151
+ const { x, y, placement } = await computePosition(this.hostElement.nativeElement, this.menuRef, {
152
+ placement: this.menuAlignment,
153
+ strategy: "fixed",
154
+ middleware: [
155
+ flip({ crossAxis: false })
156
+ ]
157
+ });
158
+ this.menuAlignment = placement;
159
+ // Using CSSOM to manipulate CSS to avoid content security policy inline-src
160
+ // https://github.com/w3c/webappsec-csp/issues/212
161
+ Object.assign(this.menuRef.style, {
162
+ position: "fixed",
163
+ // Using transform instead of top/left position to improve performance
164
+ transform: `translate(${this.roundByDPR(x)}px,${this.roundByDPR(y)}px)`
165
+ });
166
+ this.changeDetectorRef.markForCheck();
167
+ });
168
+ }
169
+ }
170
+ }
171
+ ComboButtonComponent.comboButtonCounter = 0;
172
+ 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 });
173
+ 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: `
174
+ <div class="cds--combo-button__primary-action" [attr.aria-owns]="open ? comboId : undefined">
175
+ <button
176
+ cdsButton="primary"
177
+ [size]="size"
178
+ [attr.title]="label"
179
+ [disabled]="disabled"
180
+ type="button"
181
+ (click)="onActionClick($event)">
182
+ {{label}}
183
+ </button>
184
+ </div>
185
+ <cds-icon-button
186
+ [buttonNgClass]="{ 'cds--combo-button__trigger': true }"
187
+ [buttonAttributes]="{
188
+ 'aria-haspopup': true,
189
+ 'aria-expanded': open,
190
+ 'aria-controls': open ? comboId : undefined
191
+ }"
192
+ [size]="size"
193
+ [description]="description"
194
+ [disabled]="disabled"
195
+ [autoAlign]="tooltipAutoAlign"
196
+ [align]="tooltipPlacement"
197
+ (click)="toggleMenu()">
198
+ <svg
199
+ cdsIcon="chevron--down"
200
+ size="16">
201
+ </svg>
202
+ </cds-icon-button>
203
+
204
+ <ng-template #menuTemplate>
205
+ <cds-menu
206
+ mode="basic"
207
+ [size]="size"
208
+ [open]="open"
209
+ [attr.id]="comboId">
210
+ <ng-content select="cds-menu-item, cds-menu-divider"></ng-content>
211
+ </cds-menu>
212
+ </ng-template>
213
+ `, 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 });
214
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ComboButtonComponent, decorators: [{
215
+ type: Component,
216
+ args: [{
217
+ selector: "cds-combo-button",
218
+ template: `
219
+ <div class="cds--combo-button__primary-action" [attr.aria-owns]="open ? comboId : undefined">
220
+ <button
221
+ cdsButton="primary"
222
+ [size]="size"
223
+ [attr.title]="label"
224
+ [disabled]="disabled"
225
+ type="button"
226
+ (click)="onActionClick($event)">
227
+ {{label}}
228
+ </button>
229
+ </div>
230
+ <cds-icon-button
231
+ [buttonNgClass]="{ 'cds--combo-button__trigger': true }"
232
+ [buttonAttributes]="{
233
+ 'aria-haspopup': true,
234
+ 'aria-expanded': open,
235
+ 'aria-controls': open ? comboId : undefined
236
+ }"
237
+ [size]="size"
238
+ [description]="description"
239
+ [disabled]="disabled"
240
+ [autoAlign]="tooltipAutoAlign"
241
+ [align]="tooltipPlacement"
242
+ (click)="toggleMenu()">
243
+ <svg
244
+ cdsIcon="chevron--down"
245
+ size="16">
246
+ </svg>
247
+ </cds-icon-button>
248
+
249
+ <ng-template #menuTemplate>
250
+ <cds-menu
251
+ mode="basic"
252
+ [size]="size"
253
+ [open]="open"
254
+ [attr.id]="comboId">
255
+ <ng-content select="cds-menu-item, cds-menu-divider"></ng-content>
256
+ </cds-menu>
257
+ </ng-template>
258
+ `,
259
+ changeDetection: ChangeDetectionStrategy.OnPush
260
+ }]
261
+ }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { comboId: [{
262
+ type: Input
263
+ }], projectedMenuItems: [{
264
+ type: ContentChildren,
265
+ args: [ContextMenuItemComponent]
266
+ }], size: [{
267
+ type: Input
268
+ }], label: [{
269
+ type: Input
270
+ }], disabled: [{
271
+ type: Input
272
+ }], menuAlignment: [{
273
+ type: Input
274
+ }], description: [{
275
+ type: Input
276
+ }], tooltipAutoAlign: [{
277
+ type: Input
278
+ }], tooltipPlacement: [{
279
+ type: Input
280
+ }], open: [{
281
+ type: Input
282
+ }, {
283
+ type: HostBinding,
284
+ args: ["class.cds--combo-button__container--open"]
285
+ }], actionClick: [{
286
+ type: Output
287
+ }], comboButtonContainer: [{
288
+ type: HostBinding,
289
+ args: ["class.cds--combo-button__container"]
290
+ }], sizeLg: [{
291
+ type: HostBinding,
292
+ args: ["class.cds--combo-button__container--lg"]
293
+ }], sizeMd: [{
294
+ type: HostBinding,
295
+ args: ["class.cds--combo-button__container--md"]
296
+ }], sizeSm: [{
297
+ type: HostBinding,
298
+ args: ["class.cds--combo-button__container--sm"]
299
+ }], ariaOwns: [{
300
+ type: HostBinding,
301
+ args: ["attr.aria-owns"]
302
+ }], menuTemplate: [{
303
+ type: ViewChild,
304
+ args: ["menuTemplate"]
305
+ }] } });
306
+
307
+ class ComboButtonModule {
308
+ }
309
+ ComboButtonModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ComboButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
310
+ ComboButtonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: ComboButtonModule, declarations: [ComboButtonComponent], imports: [CommonModule,
311
+ ButtonModule,
312
+ IconModule,
313
+ ContextMenuModule], exports: [ComboButtonComponent] });
314
+ ComboButtonModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ComboButtonModule, imports: [CommonModule,
315
+ ButtonModule,
316
+ IconModule,
317
+ ContextMenuModule] });
318
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ComboButtonModule, decorators: [{
319
+ type: NgModule,
320
+ args: [{
321
+ imports: [
322
+ CommonModule,
323
+ ButtonModule,
324
+ IconModule,
325
+ ContextMenuModule
326
+ ],
327
+ exports: [ComboButtonComponent],
328
+ declarations: [ComboButtonComponent]
329
+ }]
330
+ }] });
331
+
332
+ /**
333
+ * Generated bundle index. Do not edit.
334
+ */
335
+
336
+ export { ComboButtonComponent, ComboButtonModule };
337
+ //# sourceMappingURL=carbon-components-angular-combo-button.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"carbon-components-angular-combo-button.mjs","sources":["../../src/combo-button/combo-button.component.ts","../../src/combo-button/combo-button.module.ts","../../src/combo-button/carbon-components-angular-combo-button.ts"],"sourcesContent":["import {\n\tAfterViewInit,\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tContentChildren,\n\tElementRef,\n\tEventEmitter,\n\tHostBinding,\n\tInput,\n\tNgZone,\n\tOnChanges,\n\tOnDestroy,\n\tOutput,\n\tQueryList,\n\tRenderer2,\n\tSimpleChanges,\n\tTemplateRef,\n\tViewChild,\n\tViewContainerRef\n} from \"@angular/core\";\nimport { Subscription } from \"rxjs\";\nimport {\n\tautoUpdate,\n\tcomputePosition,\n\tflip\n} from \"@floating-ui/dom\";\nimport { ContextMenuItemComponent, ItemClickEvent } from \"carbon-components-angular/context-menu\";\n\ntype ComboButtonPlacement = \"top\" | \"top-start\" | \"top-end\" | \"bottom\" | \"bottom-start\" | \"bottom-end\";\n\n@Component({\n\tselector: \"cds-combo-button\",\n\ttemplate: `\n\t\t<div class=\"cds--combo-button__primary-action\" [attr.aria-owns]=\"open ? comboId : undefined\">\n\t\t\t<button\n\t\t\t\tcdsButton=\"primary\"\n\t\t\t\t[size]=\"size\"\n\t\t\t\t[attr.title]=\"label\"\n\t\t\t\t[disabled]=\"disabled\"\n\t\t\t\ttype=\"button\"\n\t\t\t\t(click)=\"onActionClick($event)\">\n\t\t\t\t{{label}}\n\t\t\t</button>\n\t\t</div>\n\t\t<cds-icon-button\n\t\t\t[buttonNgClass]=\"{ 'cds--combo-button__trigger': true }\"\n\t\t\t[buttonAttributes]=\"{\n\t\t\t\t'aria-haspopup': true,\n\t\t\t\t'aria-expanded': open,\n\t\t\t\t'aria-controls': open ? comboId : undefined\n\t\t\t}\"\n\t\t\t[size]=\"size\"\n\t\t\t[description]=\"description\"\n\t\t\t[disabled]=\"disabled\"\n\t\t\t[autoAlign]=\"tooltipAutoAlign\"\n\t\t\t[align]=\"tooltipPlacement\"\n\t\t\t(click)=\"toggleMenu()\">\n\t\t\t<svg\n\t\t\t\tcdsIcon=\"chevron--down\"\n\t\t\t\tsize=\"16\">\n\t\t\t</svg>\n\t\t</cds-icon-button>\n\n\t\t<ng-template #menuTemplate>\n\t\t\t<cds-menu\n\t\t\t\tmode=\"basic\"\n\t\t\t\t[size]=\"size\"\n\t\t\t\t[open]=\"open\"\n\t\t\t\t[attr.id]=\"comboId\">\n\t\t\t\t<ng-content select=\"cds-menu-item, cds-menu-divider\"></ng-content>\n\t\t\t</cds-menu>\n\t\t</ng-template>\n\t`,\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ComboButtonComponent implements OnChanges, AfterViewInit, OnDestroy {\n\tstatic comboButtonCounter = 0;\n\t@Input() comboId = `combo-button-${ComboButtonComponent.comboButtonCounter++}`;\n\n\t// Listen for click & determine if menu should close\n\t@ContentChildren(ContextMenuItemComponent) set projectedMenuItems(itemList: QueryList<ContextMenuItemComponent>) {\n\t\t// Reset in case user dynamically updates menu item\n\t\tthis.subscriptions.forEach((sub) => sub?.unsubscribe());\n\t\tthis.subscriptions = [];\n\t\titemList.forEach((item) => {\n\t\t\tthis.subscriptions.push(\n\t\t\t\titem.itemClick.subscribe((clickEvent) => this.handleMenuItemClick(clickEvent))\n\t\t\t);\n\t\t});\n\t}\n\n\t@Input() size: \"sm\" | \"md\" | \"lg\" = \"lg\";\n\t@Input() label: string;\n\t@Input() disabled = false;\n\t@Input() menuAlignment: ComboButtonPlacement = \"bottom\";\n\t@Input() description: string;\n\t@Input() tooltipAutoAlign = false;\n\t@Input() tooltipPlacement = \"bottom\";\n\t@Input() @HostBinding(\"class.cds--combo-button__container--open\") open = false;\n\t@Output() actionClick = new EventEmitter<Event>();\n\t@HostBinding(\"class.cds--combo-button__container\") comboButtonContainer = true;\n\t@HostBinding(\"class.cds--combo-button__container--lg\") get sizeLg() { return this.size === \"lg\"; }\n\t@HostBinding(\"class.cds--combo-button__container--md\") get sizeMd() { return this.size === \"md\"; }\n\t@HostBinding(\"class.cds--combo-button__container--sm\") get sizeSm() { return this.size === \"sm\"; }\n\t@HostBinding(\"attr.aria-owns\") get ariaOwns() {\n\t\treturn this.open ? this.comboId : undefined;\n\t}\n\n\t@ViewChild(\"menuTemplate\") menuTemplate: TemplateRef<any>;\n\n\tprotected documentClick = this.handleFocusOut.bind(this);\n\tprotected unmountFloatingElement: Function;\n\n\tprivate subscriptions: Subscription[] = [];\n\tprivate _alignment: ComboButtonPlacement = \"bottom\";\n\tprivate menuRef: HTMLElement;\n\n\tconstructor(\n\t\tprotected ngZone: NgZone,\n\t\tprotected renderer: Renderer2,\n\t\tprotected hostElement: ElementRef,\n\t\tprotected viewContainerRef: ViewContainerRef,\n\t\tprotected changeDetectorRef: ChangeDetectorRef\n\t) { }\n\n\n\t/**\n\t * In case user updates alignment, store initial value.\n\t * This allows us to test user passed alignment on each open\n\t */\n\tngOnChanges(changes: SimpleChanges): void {\n\t\tif (changes.menuAlignment) {\n\t\t\tthis._alignment = changes.menuAlignment.currentValue;\n\t\t}\n\t}\n\n\n\n\t/**\n\t * If user has passed in true for open, we dynamically open the menu\n\t */\n\tngAfterViewInit(): void {\n\t\tif (this.open) {\n\t\t\tthis.open = !this.open;\n\t\t\tthis.toggleMenu();\n\t\t}\n\t}\n\n\n\n\t/**\n\t* Clean up Floating-ui & subscriptions\n\t*/\n\tngOnDestroy(): void {\n\t\tthis.cleanUp();\n\t\tthis.subscriptions.forEach((sub) => sub.unsubscribe());\n\t}\n\n\n\t/**\n\t * As of now, menu button does not support nexted menu, on button click it should close\n\t */\n\thandleMenuItemClick(event: ItemClickEvent) {\n\t\t// If event is not type radio/checkbox, we close the menu\n\t\tif (!event.type) {\n\t\t\tthis.toggleMenu();\n\t\t}\n\t}\n\n\n\n\t/**\n\t * On body click, close the menu\n\t * @param event\n\t */\n\thandleFocusOut(event) {\n\t\tif (!this.hostElement.nativeElement.contains(event.target)) {\n\t\t\tthis.toggleMenu();\n\t\t}\n\t}\n\n\n\n\t/**\n\t * Clean up `autoUpdate` if auto alignment is enabled\n\t */\n\tcleanUp() {\n\t\tdocument.removeEventListener(\"click\", this.documentClick);\n\t\tif (this.unmountFloatingElement) {\n\t\t\tthis.menuRef.remove();\n\t\t\tthis.viewContainerRef.clear();\n\t\t\tthis.unmountFloatingElement();\n\t\t}\n\t\tthis.unmountFloatingElement = undefined;\n\t\t// On all instances of menu closing, make sure icon direction is correct\n\t\tthis.changeDetectorRef.markForCheck();\n\t}\n\n\n\t/**\n\t * On action click, notify user\n\t * If the menu is open, close the menu\n\t * @param event\n\t */\n\tonActionClick(event: PointerEvent) {\n\t\tif (this.open) {\n\t\t\tthis.toggleMenu();\n\t\t}\n\t\tthis.actionClick.emit(event);\n\t}\n\n\n\n\t/**\n\t * Handles emitting open/close event\n\t */\n\ttoggleMenu() {\n\t\tthis.open = !this.open;\n\t\tif (this.open) {\n\t\t\t// Render the template & append to view\n\t\t\tconst view = this.viewContainerRef.createEmbeddedView(this.menuTemplate);\n\t\t\tthis.menuRef = document.body.appendChild(view.rootNodes[0] as HTMLElement);\n\t\t\t// Assign button width to the menu ref to align with button\n\t\t\tObject.assign(this.menuRef.style, {\n\t\t\t\twidth: `${this.hostElement.nativeElement.clientWidth}px`,\n\t\t\t\ttop: \"0\",\n\t\t\t\tleft: \"0\"\n\t\t\t});\n\n\t\t\t// Reset & test alignment every open\n\t\t\tthis.menuAlignment = this._alignment;\n\n\t\t\tdocument.addEventListener(\"click\", this.documentClick);\n\n\t\t\t// Listen for events such as scrolling to keep menu aligned\n\t\t\tthis.unmountFloatingElement = autoUpdate(\n\t\t\t\tthis.hostElement.nativeElement,\n\t\t\t\tthis.menuRef,\n\t\t\t\tthis.recomputePosition.bind(this)\n\t\t\t);\n\t\t} else {\n\t\t\tthis.cleanUp();\n\t\t}\n\t}\n\n\n\n\troundByDPR(value) {\n\t\tconst dpr = window.devicePixelRatio || 1;\n\t\treturn Math.round(value * dpr) / dpr;\n\t}\n\n\n\n\t/**\n\t * Compute position of menu\n\t */\n\trecomputePosition() {\n\t\tif (this.menuTemplate && this.hostElement) {\n\t\t\t// Run outside of angular zone to avoid unnecessary change detection and rely on floating-ui\n\t\t\tthis.ngZone.runOutsideAngular(async () => {\n\t\t\t\tconst { x, y, placement } = await computePosition(\n\t\t\t\t\tthis.hostElement.nativeElement,\n\t\t\t\t\tthis.menuRef,\n\t\t\t\t\t{\n\t\t\t\t\t\tplacement: this.menuAlignment,\n\t\t\t\t\t\tstrategy: \"fixed\",\n\t\t\t\t\t\tmiddleware: [\n\t\t\t\t\t\t\tflip({ crossAxis: false })\n\t\t\t\t\t\t]\n\t\t\t\t\t});\n\n\t\t\t\tthis.menuAlignment = placement as ComboButtonPlacement;\n\n\t\t\t\t// Using CSSOM to manipulate CSS to avoid content security policy inline-src\n\t\t\t\t// https://github.com/w3c/webappsec-csp/issues/212\n\t\t\t\tObject.assign(this.menuRef.style, {\n\t\t\t\t\tposition: \"fixed\",\n\t\t\t\t\t// Using transform instead of top/left position to improve performance\n\t\t\t\t\ttransform: `translate(${this.roundByDPR(x)}px,${this.roundByDPR(y)}px)`\n\t\t\t\t});\n\t\t\t\tthis.changeDetectorRef.markForCheck();\n\t\t\t});\n\t\t}\n\t}\n}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\n\nimport { IconModule } from \"carbon-components-angular/icon\";\nimport { ContextMenuModule } from \"carbon-components-angular/context-menu\";\nimport { ButtonModule } from \"carbon-components-angular/button\";\n\nimport { ComboButtonComponent } from \"./combo-button.component\";\n\n@NgModule({\n\timports: [\n\t\tCommonModule,\n\t\tButtonModule,\n\t\tIconModule,\n\t\tContextMenuModule\n\t],\n\texports: [ComboButtonComponent],\n\tdeclarations: [ComboButtonComponent]\n})\nexport class ComboButtonModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;MA4Ea,oBAAoB,CAAA;IA0ChC,WACW,CAAA,MAAc,EACd,QAAmB,EACnB,WAAuB,EACvB,gBAAkC,EAClC,iBAAoC,EAAA;QAJpC,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAW;QACnB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAY;QACvB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAClC,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;AA7CtC,QAAA,IAAA,CAAA,OAAO,GAAG,CAAgB,aAAA,EAAA,oBAAoB,CAAC,kBAAkB,EAAE,EAAE,CAAC;QActE,IAAI,CAAA,IAAA,GAAuB,IAAI,CAAC;QAEhC,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;QACjB,IAAa,CAAA,aAAA,GAAyB,QAAQ,CAAC;QAE/C,IAAgB,CAAA,gBAAA,GAAG,KAAK,CAAC;QACzB,IAAgB,CAAA,gBAAA,GAAG,QAAQ,CAAC;QAC6B,IAAI,CAAA,IAAA,GAAG,KAAK,CAAC;AACrE,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAS,CAAC;QACC,IAAoB,CAAA,oBAAA,GAAG,IAAI,CAAC;QAUrE,IAAa,CAAA,aAAA,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAGjD,IAAa,CAAA,aAAA,GAAmB,EAAE,CAAC;QACnC,IAAU,CAAA,UAAA,GAAyB,QAAQ,CAAC;KAS/C;;IA3CL,IAA+C,kBAAkB,CAAC,QAA6C,EAAA;;AAE9G,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;AACxD,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AACxB,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YACzB,IAAI,CAAC,aAAa,CAAC,IAAI,CACtB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAC9E,CAAC;AACH,SAAC,CAAC,CAAC;KACH;IAYD,IAA2D,MAAM,GAAK,EAAA,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE;IAClG,IAA2D,MAAM,GAAK,EAAA,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE;IAClG,IAA2D,MAAM,GAAK,EAAA,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE;AAClG,IAAA,IAAmC,QAAQ,GAAA;AAC1C,QAAA,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;KAC5C;AAoBD;;;AAGG;AACH,IAAA,WAAW,CAAC,OAAsB,EAAA;QACjC,IAAI,OAAO,CAAC,aAAa,EAAE;YAC1B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC;AACrD,SAAA;KACD;AAID;;AAEG;IACH,eAAe,GAAA;QACd,IAAI,IAAI,CAAC,IAAI,EAAE;AACd,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YACvB,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,SAAA;KACD;AAID;;AAEE;IACF,WAAW,GAAA;QACV,IAAI,CAAC,OAAO,EAAE,CAAC;AACf,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;KACvD;AAGD;;AAEG;AACH,IAAA,mBAAmB,CAAC,KAAqB,EAAA;;AAExC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;YAChB,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,SAAA;KACD;AAID;;;AAGG;AACH,IAAA,cAAc,CAAC,KAAK,EAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YAC3D,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,SAAA;KACD;AAID;;AAEG;IACH,OAAO,GAAA;QACN,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1D,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAChC,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;AACtB,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAC9B,SAAA;AACD,QAAA,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;;AAExC,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;KACtC;AAGD;;;;AAIG;AACH,IAAA,aAAa,CAAC,KAAmB,EAAA;QAChC,IAAI,IAAI,CAAC,IAAI,EAAE;YACd,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,SAAA;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC7B;AAID;;AAEG;IACH,UAAU,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,IAAI,CAAC,IAAI,EAAE;;AAEd,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACzE,YAAA,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAgB,CAAC,CAAC;;YAE3E,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;gBACjC,KAAK,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAI,EAAA,CAAA;AACxD,gBAAA,GAAG,EAAE,GAAG;AACR,gBAAA,IAAI,EAAE,GAAG;AACT,aAAA,CAAC,CAAC;;AAGH,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC;YAErC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;;YAGvD,IAAI,CAAC,sBAAsB,GAAG,UAAU,CACvC,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CACjC,CAAC;AACF,SAAA;AAAM,aAAA;YACN,IAAI,CAAC,OAAO,EAAE,CAAC;AACf,SAAA;KACD;AAID,IAAA,UAAU,CAAC,KAAK,EAAA;AACf,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;KACrC;AAID;;AAEG;IACH,iBAAiB,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,WAAW,EAAE;;AAE1C,YAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,YAAW;gBACxC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,MAAM,eAAe,CAChD,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,IAAI,CAAC,OAAO,EACZ;oBACC,SAAS,EAAE,IAAI,CAAC,aAAa;AAC7B,oBAAA,QAAQ,EAAE,OAAO;AACjB,oBAAA,UAAU,EAAE;AACX,wBAAA,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC1B,qBAAA;AACD,iBAAA,CAAC,CAAC;AAEJ,gBAAA,IAAI,CAAC,aAAa,GAAG,SAAiC,CAAC;;;gBAIvD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACjC,oBAAA,QAAQ,EAAE,OAAO;;AAEjB,oBAAA,SAAS,EAAE,CAAA,UAAA,EAAa,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA,GAAA,EAAM,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAK,GAAA,CAAA;AACvE,iBAAA,CAAC,CAAC;AACH,gBAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AACvC,aAAC,CAAC,CAAC;AACH,SAAA;KACD;;AAhNM,oBAAkB,CAAA,kBAAA,GAAG,CAAC,CAAC;iHADlB,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;qGAApB,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,eAAA,EAAA,WAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,0CAAA,EAAA,WAAA,EAAA,oCAAA,EAAA,2BAAA,EAAA,wCAAA,EAAA,aAAA,EAAA,wCAAA,EAAA,aAAA,EAAA,wCAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,SAAA,EAKf,wBAAwB,EAhD/B,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,cAAA,EAAA,UAAA,EAAA,aAAA,EAAA,yBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FAGW,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBA7ChC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCT,CAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,iBAAA,CAAA;6MAGS,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAGyC,kBAAkB,EAAA,CAAA;sBAAhE,eAAe;uBAAC,wBAAwB,CAAA;gBAWhC,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBACG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAC4D,IAAI,EAAA,CAAA;sBAArE,KAAK;;sBAAI,WAAW;uBAAC,0CAA0C,CAAA;gBACtD,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAC4C,oBAAoB,EAAA,CAAA;sBAAtE,WAAW;uBAAC,oCAAoC,CAAA;gBACU,MAAM,EAAA,CAAA;sBAAhE,WAAW;uBAAC,wCAAwC,CAAA;gBACM,MAAM,EAAA,CAAA;sBAAhE,WAAW;uBAAC,wCAAwC,CAAA;gBACM,MAAM,EAAA,CAAA;sBAAhE,WAAW;uBAAC,wCAAwC,CAAA;gBAClB,QAAQ,EAAA,CAAA;sBAA1C,WAAW;uBAAC,gBAAgB,CAAA;gBAIF,YAAY,EAAA,CAAA;sBAAtC,SAAS;uBAAC,cAAc,CAAA;;;MC1Fb,iBAAiB,CAAA;;8GAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAjB,iBAAiB,EAAA,YAAA,EAAA,CAFd,oBAAoB,CAAA,EAAA,OAAA,EAAA,CANlC,YAAY;QACZ,YAAY;QACZ,UAAU;AACV,QAAA,iBAAiB,aAER,oBAAoB,CAAA,EAAA,CAAA,CAAA;AAGlB,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,YAR5B,YAAY;QACZ,YAAY;QACZ,UAAU;QACV,iBAAiB,CAAA,EAAA,CAAA,CAAA;2FAKN,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAV7B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,OAAO,EAAE;wBACR,YAAY;wBACZ,YAAY;wBACZ,UAAU;wBACV,iBAAiB;AACjB,qBAAA;oBACD,OAAO,EAAE,CAAC,oBAAoB,CAAC;oBAC/B,YAAY,EAAE,CAAC,oBAAoB,CAAC;AACpC,iBAAA,CAAA;;;AClBD;;AAEG;;;;"}
@@ -13,11 +13,11 @@ class ContextMenuDividerComponent {
13
13
  }
14
14
  }
15
15
  ContextMenuDividerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ContextMenuDividerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
16
- ContextMenuDividerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ContextMenuDividerComponent, selector: "cds-context-menu-divider, ibm-context-menu-divider", host: { properties: { "class.cds--menu-item-divider": "this.dividerClass", "attr.role": "this.role" } }, ngImport: i0, template: "", isInline: true });
16
+ ContextMenuDividerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ContextMenuDividerComponent, selector: "cds-menu-divider, cds-context-menu-divider, ibm-context-menu-divider", host: { properties: { "class.cds--menu-item-divider": "this.dividerClass", "attr.role": "this.role" } }, ngImport: i0, template: "", isInline: true });
17
17
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ContextMenuDividerComponent, decorators: [{
18
18
  type: Component,
19
19
  args: [{
20
- selector: "cds-context-menu-divider, ibm-context-menu-divider",
20
+ selector: "cds-menu-divider, cds-context-menu-divider, ibm-context-menu-divider",
21
21
  template: ""
22
22
  }]
23
23
  }], propDecorators: { dividerClass: [{
@@ -101,13 +101,13 @@ class ContextMenuGroupComponent {
101
101
  }
102
102
  }
103
103
  ContextMenuGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ContextMenuGroupComponent, deps: [{ token: ContextMenuSelectionService }], target: i0.ɵɵFactoryTarget.Component });
104
- ContextMenuGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ContextMenuGroupComponent, selector: "cds-context-menu-group, ibm-context-menu-group", inputs: { label: "label", value: "value", type: "type" }, outputs: { valueChange: "valueChange" }, host: { properties: { "attr.role": "this.role", "class.cds--menu-item-radio-group": "this.radioGroup", "class.cds--menu-item-group": "this.group", "attr.aria-label": "this.label" } }, providers: [ContextMenuSelectionService], usesOnChanges: true, ngImport: i0, template: `
104
+ ContextMenuGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ContextMenuGroupComponent, selector: "cds-menu-group, cds-context-menu-group, ibm-context-menu-group", inputs: { label: "label", value: "value", type: "type" }, outputs: { valueChange: "valueChange" }, host: { properties: { "attr.role": "this.role", "class.cds--menu-item-radio-group": "this.radioGroup", "class.cds--menu-item-group": "this.group", "attr.aria-label": "this.label" } }, providers: [ContextMenuSelectionService], usesOnChanges: true, ngImport: i0, template: `
105
105
  <ng-content></ng-content>
106
106
  `, isInline: true });
107
107
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ContextMenuGroupComponent, decorators: [{
108
108
  type: Component,
109
109
  args: [{
110
- selector: "cds-context-menu-group, ibm-context-menu-group",
110
+ selector: "cds-menu-group, cds-context-menu-group, ibm-context-menu-group",
111
111
  template: `
112
112
  <ng-content></ng-content>
113
113
  `,
@@ -152,24 +152,35 @@ class ContextMenuComponent {
152
152
  left: 0,
153
153
  top: 0
154
154
  };
155
- this.contextMenu = true;
155
+ this.size = "lg";
156
156
  this.role = "menu";
157
157
  this.tabindex = "-1";
158
+ /**
159
+ * @todo - convert to getter in v6, should resolve expression has changed
160
+ * after switching to on OnPush Change Detection Strategy
161
+ */
162
+ this.iconClass = false;
163
+ }
164
+ get hostClass() {
165
+ const open = this.open ? "cds--menu--open cds--menu--shown" : "";
166
+ return `cds--menu cds--autoalign cds--menu--${this.size} ${open}`;
158
167
  }
159
- get contextMenuOpen() { return this.open; }
160
- get showMenu() { return this.open; }
161
168
  get leftPosition() { return this.position.left; }
162
169
  get topPosition() { return this.position.top; }
163
- get classIcons() {
164
- const svgElement = this.elementRef.nativeElement
165
- .querySelector(".cds--menu-item .cds--menu-item__icon svg");
166
- return svgElement;
167
- }
168
170
  ngOnChanges(changes) {
169
171
  if (changes.open && changes.open.currentValue) {
170
172
  this.focusMenu();
171
173
  }
172
174
  }
175
+ ngAfterViewInit() {
176
+ setTimeout(() => {
177
+ const nativeElement = this.elementRef.nativeElement;
178
+ if (nativeElement) {
179
+ this.iconClass = !!nativeElement
180
+ .querySelector(".cds--menu-item .cds--menu-item__icon svg");
181
+ }
182
+ });
183
+ }
173
184
  focusMenu() {
174
185
  // wait until the next tick to let the DOM settle before changing the focus
175
186
  setTimeout(() => {
@@ -225,27 +236,23 @@ class ContextMenuComponent {
225
236
  }
226
237
  }
227
238
  ContextMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ContextMenuComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
228
- ContextMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ContextMenuComponent, selector: "cds-context-menu, ibm-context-menu", inputs: { open: "open", position: "position" }, host: { listeners: { "keydown": "handleNavigation($event)" }, properties: { "class.cds--menu": "this.contextMenu", "class.cds--menu--open": "this.contextMenuOpen", "class.cds--menu--shown": "this.showMenu", "attr.role": "this.role", "attr.tabindex": "this.tabindex", "style.left.px": "this.leftPosition", "style.top.px": "this.topPosition", "class.cds--menu--with-icons": "this.classIcons" } }, usesOnChanges: true, ngImport: i0, template: `
239
+ ContextMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ContextMenuComponent, selector: "cds-menu, cds-context-menu, ibm-context-menu", inputs: { open: "open", position: "position", size: "size" }, host: { listeners: { "keydown": "handleNavigation($event)" }, properties: { "class": "this.hostClass", "attr.role": "this.role", "attr.tabindex": "this.tabindex", "style.left.px": "this.leftPosition", "style.top.px": "this.topPosition", "class.cds--menu--with-icons": "this.iconClass" } }, usesOnChanges: true, ngImport: i0, template: `
229
240
  <ng-content></ng-content>
230
241
  `, isInline: true, styles: [":host{display:block}\n"] });
231
242
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ContextMenuComponent, decorators: [{
232
243
  type: Component,
233
- args: [{ selector: "cds-context-menu, ibm-context-menu", template: `
244
+ args: [{ selector: "cds-menu, cds-context-menu, ibm-context-menu", template: `
234
245
  <ng-content></ng-content>
235
246
  `, styles: [":host{display:block}\n"] }]
236
247
  }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { open: [{
237
248
  type: Input
238
249
  }], position: [{
239
250
  type: Input
240
- }], contextMenu: [{
241
- type: HostBinding,
242
- args: ["class.cds--menu"]
243
- }], contextMenuOpen: [{
244
- type: HostBinding,
245
- args: ["class.cds--menu--open"]
246
- }], showMenu: [{
251
+ }], size: [{
252
+ type: Input
253
+ }], hostClass: [{
247
254
  type: HostBinding,
248
- args: ["class.cds--menu--shown"]
255
+ args: ["class"]
249
256
  }], role: [{
250
257
  type: HostBinding,
251
258
  args: ["attr.role"]
@@ -258,7 +265,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
258
265
  }], topPosition: [{
259
266
  type: HostBinding,
260
267
  args: ["style.top.px"]
261
- }], classIcons: [{
268
+ }], iconClass: [{
262
269
  type: HostBinding,
263
270
  args: ["class.cds--menu--with-icons"]
264
271
  }], handleNavigation: [{
@@ -275,6 +282,8 @@ class ContextMenuItemComponent {
275
282
  this.tabindex = -1;
276
283
  this.ariaHasPopup = null;
277
284
  this.ariaExpanded = null;
285
+ this.disabled = false;
286
+ this.danger = false;
278
287
  this.label = "";
279
288
  this.info = "";
280
289
  this.type = null;
@@ -282,6 +291,7 @@ class ContextMenuItemComponent {
282
291
  this.icon = "";
283
292
  this.value = "";
284
293
  this.checkedChange = new EventEmitter();
294
+ this.itemClick = new EventEmitter();
285
295
  this.hasChildren = false;
286
296
  this.selectable = false;
287
297
  this.subscriptions = new Subscription();
@@ -290,6 +300,9 @@ class ContextMenuItemComponent {
290
300
  return this.type === "checkbox" ?
291
301
  (this.checked ? true : false) : null;
292
302
  }
303
+ get ariaDisabled() {
304
+ return this.disabled;
305
+ }
293
306
  ngOnInit() {
294
307
  switch (this.type) {
295
308
  case "checkbox": {
@@ -343,6 +356,15 @@ class ContextMenuItemComponent {
343
356
  this.contextMenuSelectionService.selectCheckbox(this.value);
344
357
  }
345
358
  }
359
+ if (!this.disabled) {
360
+ this.itemClick.emit({
361
+ event,
362
+ label: this.label,
363
+ info: this.info,
364
+ value: this.value,
365
+ type: this.type
366
+ });
367
+ }
346
368
  }
347
369
  handleSelection(selected) {
348
370
  this.checked = selected;
@@ -387,7 +409,7 @@ class ContextMenuItemComponent {
387
409
  }
388
410
  }
389
411
  ContextMenuItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ContextMenuItemComponent, deps: [{ token: i0.ElementRef }, { token: ContextMenuSelectionService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
390
- ContextMenuItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ContextMenuItemComponent, selector: "cds-context-menu-item, ibm-context-menu-item", inputs: { label: "label", info: "info", type: "type", checked: "checked", icon: "icon", value: "value" }, outputs: { checkedChange: "checkedChange" }, host: { listeners: { "keydown.enter": "handleClick($event)", "keydown.space": "handleClick($event)", "click": "handleClick($event)", "mouseover": "handleMouseOver()", "mouseout": "handleMouseOut()", "focus": "handleFocus()", "blur": "handleBlur()" }, properties: { "class.cds--menu-item": "this.optionClass", "attr.role": "this.role", "attr.tabindex": "this.tabindex", "attr.aria-haspopup": "this.ariaHasPopup", "attr.aria-expanded": "this.ariaExpanded", "attr.aria-checked": "this.ariaChecked" } }, queries: [{ propertyName: "childContextMenu", first: true, predicate: ContextMenuComponent, descendants: true, static: true }], ngImport: i0, template: `
412
+ ContextMenuItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ContextMenuItemComponent, selector: "cds-menu-item, cds-context-menu-item, ibm-context-menu-item", inputs: { disabled: "disabled", danger: "danger", label: "label", info: "info", type: "type", checked: "checked", icon: "icon", value: "value" }, outputs: { checkedChange: "checkedChange", itemClick: "itemClick" }, host: { listeners: { "keydown.enter": "handleClick($event)", "keydown.space": "handleClick($event)", "click": "handleClick($event)", "mouseover": "handleMouseOver()", "mouseout": "handleMouseOut()", "focus": "handleFocus()", "blur": "handleBlur()" }, properties: { "class.cds--menu-item": "this.optionClass", "attr.role": "this.role", "attr.tabindex": "this.tabindex", "attr.aria-haspopup": "this.ariaHasPopup", "attr.aria-expanded": "this.ariaExpanded", "attr.aria-checked": "this.ariaChecked", "attr.aria-disabled": "this.ariaDisabled", "class.cds--menu-item--disabled": "this.disabled", "class.cds--menu-item--danger": "this.danger" } }, queries: [{ propertyName: "childContextMenu", first: true, predicate: ContextMenuComponent, descendants: true, static: true }], ngImport: i0, template: `
391
413
  <div class="cds--menu-item__icon">
392
414
  <svg *ngIf="selectable && checked" cdsIcon="checkmark" size="16"></svg>
393
415
  <svg *ngIf="!selectable && icon" [cdsIcon]="icon" size="16"></svg>
@@ -401,7 +423,7 @@ ContextMenuItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0
401
423
  `, isInline: true, styles: [":host{grid-template-columns:1rem 1fr max-content}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }] });
402
424
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ContextMenuItemComponent, decorators: [{
403
425
  type: Component,
404
- args: [{ selector: "cds-context-menu-item, ibm-context-menu-item", template: `
426
+ args: [{ selector: "cds-menu-item, cds-context-menu-item, ibm-context-menu-item", template: `
405
427
  <div class="cds--menu-item__icon">
406
428
  <svg *ngIf="selectable && checked" cdsIcon="checkmark" size="16"></svg>
407
429
  <svg *ngIf="!selectable && icon" [cdsIcon]="icon" size="16"></svg>
@@ -433,6 +455,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
433
455
  }], ariaChecked: [{
434
456
  type: HostBinding,
435
457
  args: ["attr.aria-checked"]
458
+ }], ariaDisabled: [{
459
+ type: HostBinding,
460
+ args: ["attr.aria-disabled"]
461
+ }], disabled: [{
462
+ type: Input
463
+ }, {
464
+ type: HostBinding,
465
+ args: ["class.cds--menu-item--disabled"]
466
+ }], danger: [{
467
+ type: Input
468
+ }, {
469
+ type: HostBinding,
470
+ args: ["class.cds--menu-item--danger"]
436
471
  }], label: [{
437
472
  type: Input
438
473
  }], info: [{
@@ -447,6 +482,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
447
482
  type: Input
448
483
  }], checkedChange: [{
449
484
  type: Output
485
+ }], itemClick: [{
486
+ type: Output
450
487
  }], childContextMenu: [{
451
488
  type: ContentChild,
452
489
  args: [ContextMenuComponent, { static: true }]