@educarehq/solaris-ui 0.2.0 → 0.3.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 (225) hide show
  1. package/esm2022/index.js +40 -1
  2. package/esm2022/index.js.map +1 -1
  3. package/esm2022/lib/components/actions/button/index.js +3 -0
  4. package/esm2022/lib/components/actions/button/index.js.map +1 -0
  5. package/esm2022/lib/components/data-display/badge/index.js +3 -0
  6. package/esm2022/lib/components/data-display/badge/index.js.map +1 -0
  7. package/esm2022/lib/components/data-display/divider/component/divider.component.js +46 -0
  8. package/esm2022/lib/components/data-display/divider/component/divider.component.js.map +1 -0
  9. package/esm2022/lib/components/data-display/divider/index.js +2 -0
  10. package/esm2022/lib/components/data-display/divider/index.js.map +1 -0
  11. package/esm2022/lib/components/data-display/divider/model/divider.types.js +1 -0
  12. package/esm2022/lib/components/data-display/divider/model/divider.types.js.map +1 -0
  13. package/esm2022/lib/components/feedback/toast/component/toast.component.js +268 -0
  14. package/esm2022/lib/components/feedback/toast/component/toast.component.js.map +1 -0
  15. package/esm2022/lib/components/feedback/toast/container/toast-container.component.js +24 -0
  16. package/esm2022/lib/components/feedback/toast/container/toast-container.component.js.map +1 -0
  17. package/esm2022/lib/components/feedback/toast/model/toast.types.js +1 -0
  18. package/esm2022/lib/components/feedback/toast/model/toast.types.js.map +1 -0
  19. package/esm2022/lib/components/feedback/toast/provider/provide-solaris-toast.js +17 -0
  20. package/esm2022/lib/components/feedback/toast/provider/provide-solaris-toast.js.map +1 -0
  21. package/esm2022/lib/components/feedback/toast/service/toast.service.js +219 -0
  22. package/esm2022/lib/components/feedback/toast/service/toast.service.js.map +1 -0
  23. package/esm2022/lib/components/feedback/toast/token/toast.tokens.js +13 -0
  24. package/esm2022/lib/components/feedback/toast/token/toast.tokens.js.map +1 -0
  25. package/esm2022/lib/components/forms/email-field/component/email-field.component.js +5 -4
  26. package/esm2022/lib/components/forms/email-field/component/email-field.component.js.map +1 -1
  27. package/esm2022/lib/components/forms/form-field/component/form-field.component.js +50 -2
  28. package/esm2022/lib/components/forms/form-field/component/form-field.component.js.map +1 -1
  29. package/esm2022/lib/components/forms/form-field/directives/form-field-trigger.directive.js.map +1 -1
  30. package/esm2022/lib/components/forms/form-field/index.js.map +1 -1
  31. package/esm2022/lib/components/forms/multi-select/component/multi-select.component.js +11 -28
  32. package/esm2022/lib/components/forms/multi-select/component/multi-select.component.js.map +1 -1
  33. package/esm2022/lib/components/forms/multi-select/model/multi-select.types.js.map +1 -1
  34. package/esm2022/lib/components/forms/option/component/option.component.js +2 -2
  35. package/esm2022/lib/components/forms/option/component/option.component.js.map +1 -1
  36. package/esm2022/lib/components/forms/password-field/component/password-field.component.js +2 -2
  37. package/esm2022/lib/components/forms/password-field/component/password-field.component.js.map +1 -1
  38. package/esm2022/lib/components/forms/radio/component/radio.component.js +2 -2
  39. package/esm2022/lib/components/forms/select/component/select.component.js +4 -8
  40. package/esm2022/lib/components/forms/select/component/select.component.js.map +1 -1
  41. package/esm2022/lib/components/icon/component/solaris-icon.component.js +2 -2
  42. package/esm2022/lib/components/icon/component/solaris-icon.component.js.map +1 -1
  43. package/esm2022/lib/components/interaction/dropdown-menu/component/dropdown-menu-group.component.js +27 -0
  44. package/esm2022/lib/components/interaction/dropdown-menu/component/dropdown-menu-group.component.js.map +1 -0
  45. package/esm2022/lib/components/interaction/dropdown-menu/component/dropdown-menu-item.component.js +96 -0
  46. package/esm2022/lib/components/interaction/dropdown-menu/component/dropdown-menu-item.component.js.map +1 -0
  47. package/esm2022/lib/components/interaction/dropdown-menu/component/dropdown-menu-label.component.js +22 -0
  48. package/esm2022/lib/components/interaction/dropdown-menu/component/dropdown-menu-label.component.js.map +1 -0
  49. package/esm2022/lib/components/interaction/dropdown-menu/component/dropdown-menu.component.js +105 -0
  50. package/esm2022/lib/components/interaction/dropdown-menu/component/dropdown-menu.component.js.map +1 -0
  51. package/esm2022/lib/components/interaction/dropdown-menu/component/dropdown-submenu-trigger.component.js +95 -0
  52. package/esm2022/lib/components/interaction/dropdown-menu/component/dropdown-submenu-trigger.component.js.map +1 -0
  53. package/esm2022/lib/components/interaction/dropdown-menu/component/dropdown-submenu.component.js +631 -0
  54. package/esm2022/lib/components/interaction/dropdown-menu/component/dropdown-submenu.component.js.map +1 -0
  55. package/esm2022/lib/components/interaction/dropdown-menu/directives/dropdown-menu-trigger.directive.js +365 -0
  56. package/esm2022/lib/components/interaction/dropdown-menu/directives/dropdown-menu-trigger.directive.js.map +1 -0
  57. package/esm2022/lib/components/interaction/dropdown-menu/index.js +8 -0
  58. package/esm2022/lib/components/interaction/dropdown-menu/index.js.map +1 -0
  59. package/esm2022/lib/components/interaction/dropdown-menu/model/dropdown-menu-navigation.js +3 -0
  60. package/esm2022/lib/components/interaction/dropdown-menu/model/dropdown-menu-navigation.js.map +1 -0
  61. package/esm2022/lib/components/interaction/dropdown-menu/model/dropdown-menu.types.js +1 -0
  62. package/esm2022/lib/components/interaction/dropdown-menu/model/dropdown-menu.types.js.map +1 -0
  63. package/esm2022/lib/components/interaction/dropdown-menu/model/dropdown-submenu.types.js +1 -0
  64. package/esm2022/lib/components/interaction/dropdown-menu/model/dropdown-submenu.types.js.map +1 -0
  65. package/esm2022/lib/components/interaction/popover/component/popover-panel.component.js +2 -2
  66. package/esm2022/lib/components/interaction/popover/component/popover-panel.component.js.map +1 -1
  67. package/esm2022/lib/components/interaction/popover/directives/popover-trigger.directive.js +28 -20
  68. package/esm2022/lib/components/interaction/popover/directives/popover-trigger.directive.js.map +1 -1
  69. package/esm2022/lib/components/interaction/tooltip/component/tooltip-panel.component.js.map +1 -1
  70. package/esm2022/lib/components/interaction/tooltip/directive/tooltip.directive.js.map +1 -1
  71. package/esm2022/lib/components/interaction/tooltip/model/tooltip-position.js.map +1 -1
  72. package/esm2022/lib/components/navigation/editable-tabs/component/editable-tabs.component.js +323 -0
  73. package/esm2022/lib/components/navigation/editable-tabs/component/editable-tabs.component.js.map +1 -0
  74. package/esm2022/lib/components/navigation/editable-tabs/editable-tab/editable-tab.component.js +34 -0
  75. package/esm2022/lib/components/navigation/editable-tabs/editable-tab/editable-tab.component.js.map +1 -0
  76. package/esm2022/lib/components/navigation/editable-tabs/model/editable-tabs.types.js +1 -0
  77. package/esm2022/lib/components/navigation/editable-tabs/model/editable-tabs.types.js.map +1 -0
  78. package/esm2022/lib/components/navigation/segmented-control/component/segmented-control.component.js +242 -0
  79. package/esm2022/lib/components/navigation/segmented-control/component/segmented-control.component.js.map +1 -0
  80. package/esm2022/lib/components/navigation/segmented-control/item/segmented-item.component.js +197 -0
  81. package/esm2022/lib/components/navigation/segmented-control/item/segmented-item.component.js.map +1 -0
  82. package/esm2022/lib/components/navigation/segmented-control/model/segmented-control.types.js +1 -0
  83. package/esm2022/lib/components/navigation/segmented-control/model/segmented-control.types.js.map +1 -0
  84. package/esm2022/lib/components/navigation/segmented-control/token/segmented-control.tokens.js +3 -0
  85. package/esm2022/lib/components/navigation/segmented-control/token/segmented-control.tokens.js.map +1 -0
  86. package/esm2022/lib/components/navigation/stepper/actions/stepper-actions.component.js +15 -0
  87. package/esm2022/lib/components/navigation/stepper/actions/stepper-actions.component.js.map +1 -0
  88. package/esm2022/lib/components/navigation/stepper/component/stepper.component.js +99 -0
  89. package/esm2022/lib/components/navigation/stepper/component/stepper.component.js.map +1 -0
  90. package/esm2022/lib/components/navigation/stepper/content/stepper-content.component.js +13 -0
  91. package/esm2022/lib/components/navigation/stepper/content/stepper-content.component.js.map +1 -0
  92. package/esm2022/lib/components/navigation/stepper/model/stepper.types.js +1 -0
  93. package/esm2022/lib/components/navigation/stepper/model/stepper.types.js.map +1 -0
  94. package/esm2022/lib/components/navigation/stepper/step/step.component.js +91 -0
  95. package/esm2022/lib/components/navigation/stepper/step/step.component.js.map +1 -0
  96. package/esm2022/lib/components/navigation/stepper/token/stepper.tokens.js +3 -0
  97. package/esm2022/lib/components/navigation/stepper/token/stepper.tokens.js.map +1 -0
  98. package/esm2022/lib/components/navigation/tabs/component/tabs.component.js +169 -0
  99. package/esm2022/lib/components/navigation/tabs/component/tabs.component.js.map +1 -0
  100. package/esm2022/lib/components/navigation/tabs/index.js +5 -0
  101. package/esm2022/lib/components/navigation/tabs/index.js.map +1 -0
  102. package/esm2022/lib/components/navigation/tabs/model/tabs.types.js +1 -0
  103. package/esm2022/lib/components/navigation/tabs/model/tabs.types.js.map +1 -0
  104. package/esm2022/lib/components/navigation/tabs/tab/tab.component.js +195 -0
  105. package/esm2022/lib/components/navigation/tabs/tab/tab.component.js.map +1 -0
  106. package/esm2022/lib/components/navigation/tabs/tab-panel/tab-panel.component.js +55 -0
  107. package/esm2022/lib/components/navigation/tabs/tab-panel/tab-panel.component.js.map +1 -0
  108. package/esm2022/lib/components/navigation/tabs/token/tabs.tokens.js +3 -0
  109. package/esm2022/lib/components/navigation/tabs/token/tabs.tokens.js.map +1 -0
  110. package/esm2022/lib/components/overlay/dialog/component/dialog.component.js +49 -0
  111. package/esm2022/lib/components/overlay/dialog/component/dialog.component.js.map +1 -0
  112. package/esm2022/lib/components/overlay/dialog/components/dialog-actions.component.js +37 -0
  113. package/esm2022/lib/components/overlay/dialog/components/dialog-actions.component.js.map +1 -0
  114. package/esm2022/lib/components/overlay/dialog/components/dialog-content.component.js +13 -0
  115. package/esm2022/lib/components/overlay/dialog/components/dialog-content.component.js.map +1 -0
  116. package/esm2022/lib/components/overlay/dialog/components/dialog-header.component.js +32 -0
  117. package/esm2022/lib/components/overlay/dialog/components/dialog-header.component.js.map +1 -0
  118. package/esm2022/lib/components/overlay/dialog/container/dialog-container.component.js +142 -0
  119. package/esm2022/lib/components/overlay/dialog/container/dialog-container.component.js.map +1 -0
  120. package/esm2022/lib/components/overlay/dialog/flow/dialog-flow.component.js +56 -0
  121. package/esm2022/lib/components/overlay/dialog/flow/dialog-flow.component.js.map +1 -0
  122. package/esm2022/lib/components/overlay/dialog/flow/dialog-step.component.js +20 -0
  123. package/esm2022/lib/components/overlay/dialog/flow/dialog-step.component.js.map +1 -0
  124. package/esm2022/lib/components/overlay/dialog/model/dialog.types.js +1 -0
  125. package/esm2022/lib/components/overlay/dialog/model/dialog.types.js.map +1 -0
  126. package/esm2022/lib/components/overlay/dialog/provider/provide-solaris-dialog.js +13 -0
  127. package/esm2022/lib/components/overlay/dialog/provider/provide-solaris-dialog.js.map +1 -0
  128. package/esm2022/lib/components/overlay/dialog/service/dialog-ref.js +23 -0
  129. package/esm2022/lib/components/overlay/dialog/service/dialog-ref.js.map +1 -0
  130. package/esm2022/lib/components/overlay/dialog/service/dialog.service.js +111 -0
  131. package/esm2022/lib/components/overlay/dialog/service/dialog.service.js.map +1 -0
  132. package/esm2022/lib/components/overlay/dialog/token/dialog-data.token.js +4 -0
  133. package/esm2022/lib/components/overlay/dialog/token/dialog-data.token.js.map +1 -0
  134. package/esm2022/lib/components/overlay/dialog/token/dialog.tokens.js +15 -0
  135. package/esm2022/lib/components/overlay/dialog/token/dialog.tokens.js.map +1 -0
  136. package/esm2022/lib/services/icon/icons/groups/actions.js +242 -0
  137. package/esm2022/lib/services/icon/icons/groups/actions.js.map +1 -0
  138. package/esm2022/lib/services/icon/icons/groups/data.js +129 -0
  139. package/esm2022/lib/services/icon/icons/groups/data.js.map +1 -0
  140. package/esm2022/lib/services/icon/icons/groups/layout.js +50 -0
  141. package/esm2022/lib/services/icon/icons/groups/layout.js.map +1 -0
  142. package/esm2022/lib/services/icon/icons/groups/navigation.js +354 -0
  143. package/esm2022/lib/services/icon/icons/groups/navigation.js.map +1 -0
  144. package/esm2022/lib/services/icon/icons/groups/status.js +70 -0
  145. package/esm2022/lib/services/icon/icons/groups/status.js.map +1 -0
  146. package/esm2022/lib/services/icon/icons/groups/theme.js +49 -0
  147. package/esm2022/lib/services/icon/icons/groups/theme.js.map +1 -0
  148. package/esm2022/lib/services/icon/icons/solaris-built-in-icons.js +12 -204
  149. package/esm2022/lib/services/icon/icons/solaris-built-in-icons.js.map +1 -1
  150. package/esm2022/lib/services/icon/model/solaris-icon-definition.interface.js.map +1 -1
  151. package/esm2022/lib/services/icon/model/solaris-icon.types.js.map +1 -1
  152. package/esm2022/lib/services/translation/model/solaris-translate-defaults.js +56 -0
  153. package/esm2022/lib/services/translation/model/solaris-translate-defaults.js.map +1 -1
  154. package/index.d.ts +92 -1
  155. package/lib/components/actions/button/index.d.ts +3 -0
  156. package/lib/components/data-display/badge/index.d.ts +3 -0
  157. package/lib/components/data-display/divider/component/divider.component.d.ts +17 -0
  158. package/lib/components/data-display/divider/index.d.ts +2 -0
  159. package/lib/components/data-display/divider/model/divider.types.d.ts +5 -0
  160. package/lib/components/feedback/toast/component/toast.component.d.ts +62 -0
  161. package/lib/components/feedback/toast/container/toast-container.component.d.ts +10 -0
  162. package/lib/components/feedback/toast/model/toast.types.d.ts +106 -0
  163. package/lib/components/feedback/toast/provider/provide-solaris-toast.d.ts +3 -0
  164. package/lib/components/feedback/toast/service/toast.service.d.ts +36 -0
  165. package/lib/components/feedback/toast/token/toast.tokens.d.ts +5 -0
  166. package/lib/components/forms/email-field/component/email-field.component.d.ts +2 -1
  167. package/lib/components/forms/form-field/component/form-field.component.d.ts +6 -0
  168. package/lib/components/forms/multi-select/component/multi-select.component.d.ts +4 -7
  169. package/lib/components/forms/select/component/select.component.d.ts +2 -2
  170. package/lib/components/interaction/dropdown-menu/component/dropdown-menu-group.component.d.ts +10 -0
  171. package/lib/components/interaction/dropdown-menu/component/dropdown-menu-item.component.d.ts +28 -0
  172. package/lib/components/interaction/dropdown-menu/component/dropdown-menu-label.component.d.ts +7 -0
  173. package/lib/components/interaction/dropdown-menu/component/dropdown-menu.component.d.ts +21 -0
  174. package/lib/components/interaction/dropdown-menu/component/dropdown-submenu-trigger.component.d.ts +21 -0
  175. package/lib/components/interaction/dropdown-menu/component/dropdown-submenu.component.d.ts +68 -0
  176. package/lib/components/interaction/dropdown-menu/directives/dropdown-menu-trigger.directive.d.ts +61 -0
  177. package/lib/components/interaction/dropdown-menu/index.d.ts +9 -0
  178. package/lib/components/interaction/dropdown-menu/model/dropdown-menu-navigation.d.ts +8 -0
  179. package/lib/components/interaction/dropdown-menu/model/dropdown-menu.types.d.ts +11 -0
  180. package/lib/components/interaction/dropdown-menu/model/dropdown-submenu.types.d.ts +2 -0
  181. package/lib/components/navigation/editable-tabs/component/editable-tabs.component.d.ts +69 -0
  182. package/lib/components/navigation/editable-tabs/editable-tab/editable-tab.component.d.ts +20 -0
  183. package/lib/components/navigation/editable-tabs/model/editable-tabs.types.d.ts +60 -0
  184. package/lib/components/navigation/segmented-control/component/segmented-control.component.d.ts +64 -0
  185. package/lib/components/navigation/segmented-control/item/segmented-item.component.d.ts +35 -0
  186. package/lib/components/navigation/segmented-control/model/segmented-control.types.d.ts +12 -0
  187. package/lib/components/navigation/segmented-control/token/segmented-control.tokens.d.ts +22 -0
  188. package/lib/components/navigation/stepper/actions/stepper-actions.component.d.ts +7 -0
  189. package/lib/components/navigation/stepper/component/stepper.component.d.ts +36 -0
  190. package/lib/components/navigation/stepper/content/stepper-content.component.d.ts +5 -0
  191. package/lib/components/navigation/stepper/model/stepper.types.d.ts +15 -0
  192. package/lib/components/navigation/stepper/step/step.component.d.ts +27 -0
  193. package/lib/components/navigation/stepper/token/stepper.tokens.d.ts +13 -0
  194. package/lib/components/navigation/tabs/component/tabs.component.d.ts +47 -0
  195. package/lib/components/navigation/tabs/index.d.ts +6 -0
  196. package/lib/components/navigation/tabs/model/tabs.types.d.ts +17 -0
  197. package/lib/components/navigation/tabs/tab/tab.component.d.ts +38 -0
  198. package/lib/components/navigation/tabs/tab-panel/tab-panel.component.d.ts +15 -0
  199. package/lib/components/navigation/tabs/token/tabs.tokens.d.ts +19 -0
  200. package/lib/components/overlay/dialog/component/dialog.component.d.ts +29 -0
  201. package/lib/components/overlay/dialog/components/dialog-actions.component.d.ts +12 -0
  202. package/lib/components/overlay/dialog/components/dialog-content.component.d.ts +5 -0
  203. package/lib/components/overlay/dialog/components/dialog-header.component.d.ts +19 -0
  204. package/lib/components/overlay/dialog/container/dialog-container.component.d.ts +32 -0
  205. package/lib/components/overlay/dialog/flow/dialog-flow.component.d.ts +19 -0
  206. package/lib/components/overlay/dialog/flow/dialog-step.component.d.ts +7 -0
  207. package/lib/components/overlay/dialog/model/dialog.types.d.ts +87 -0
  208. package/lib/components/overlay/dialog/provider/provide-solaris-dialog.d.ts +3 -0
  209. package/lib/components/overlay/dialog/service/dialog-ref.d.ts +11 -0
  210. package/lib/components/overlay/dialog/service/dialog.service.d.ts +20 -0
  211. package/lib/components/overlay/dialog/token/dialog-data.token.d.ts +4 -0
  212. package/lib/components/overlay/dialog/token/dialog.tokens.d.ts +4 -0
  213. package/lib/services/icon/icons/groups/actions.d.ts +2 -0
  214. package/lib/services/icon/icons/groups/data.d.ts +2 -0
  215. package/lib/services/icon/icons/groups/layout.d.ts +2 -0
  216. package/lib/services/icon/icons/groups/navigation.d.ts +2 -0
  217. package/lib/services/icon/icons/groups/status.d.ts +2 -0
  218. package/lib/services/icon/icons/groups/theme.d.ts +2 -0
  219. package/lib/services/icon/model/solaris-icon-definition.interface.d.ts +10 -1
  220. package/lib/services/icon/model/solaris-icon.types.d.ts +1 -1
  221. package/package.json +1 -1
  222. package/styles/_dropdown-menu.scss +72 -0
  223. package/styles/_popover.scss +24 -19
  224. package/styles/_toast.scss +9 -0
  225. package/styles/_tooltip.scss +3 -3
@@ -0,0 +1,105 @@
1
+ import { Component, input, contentChildren, signal, computed, viewChild, TemplateRef, } from '@angular/core';
2
+ import { SOLARIS_DROPDOWN_NAVIGABLE_ITEM, } from '../model/dropdown-menu-navigation';
3
+ import * as i0 from "@angular/core";
4
+ let nextId = 0;
5
+ export class SolarisDropdownMenuComponent {
6
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
7
+ density = input('comfortable', ...(ngDevMode ? [{ debugName: "density" }] : /* istanbul ignore next */ []));
8
+ navigableItems = contentChildren(SOLARIS_DROPDOWN_NAVIGABLE_ITEM, ...(ngDevMode ? [{ debugName: "navigableItems" }] : /* istanbul ignore next */ []));
9
+ contentTemplate = viewChild.required('contentTmpl', {
10
+ read: TemplateRef,
11
+ });
12
+ panelId = `solaris-dropdown-menu-${++nextId}`;
13
+ focusedIndex = signal(-1, ...(ngDevMode ? [{ debugName: "focusedIndex" }] : /* istanbul ignore next */ []));
14
+ enabledNavigableItems = computed(() => {
15
+ return this.navigableItems().filter((item) => !item.disabled());
16
+ }, ...(ngDevMode ? [{ debugName: "enabledNavigableItems" }] : /* istanbul ignore next */ []));
17
+ focusFirstItem() {
18
+ const enabled = this.enabledNavigableItems();
19
+ if (enabled.length > 0) {
20
+ const idx = this.navigableItems().indexOf(enabled[0]);
21
+ this.focusedIndex.set(idx);
22
+ enabled[0].focus();
23
+ }
24
+ }
25
+ focusLastItem() {
26
+ const enabled = this.enabledNavigableItems();
27
+ const last = enabled.at(-1);
28
+ if (last) {
29
+ const idx = this.navigableItems().indexOf(last);
30
+ this.focusedIndex.set(idx);
31
+ last.focus();
32
+ }
33
+ }
34
+ focusNextItem() {
35
+ const items = this.navigableItems();
36
+ const enabled = this.enabledNavigableItems();
37
+ if (enabled.length === 0)
38
+ return;
39
+ const currentFocused = this.focusedIndex();
40
+ const currentFocusedItem = currentFocused >= 0 ? items[currentFocused] : null;
41
+ let currentEnabledIndex = -1;
42
+ if (currentFocusedItem) {
43
+ currentEnabledIndex = enabled.indexOf(currentFocusedItem);
44
+ }
45
+ const nextEnabledIndex = (currentEnabledIndex + 1) % enabled.length;
46
+ const nextItem = enabled[nextEnabledIndex];
47
+ const nextItemIndex = items.indexOf(nextItem);
48
+ this.focusedIndex.set(nextItemIndex);
49
+ nextItem.focus();
50
+ }
51
+ focusPreviousItem() {
52
+ const items = this.navigableItems();
53
+ const enabled = this.enabledNavigableItems();
54
+ if (enabled.length === 0)
55
+ return;
56
+ const currentFocused = this.focusedIndex();
57
+ const currentFocusedItem = currentFocused >= 0 ? items[currentFocused] : null;
58
+ let currentEnabledIndex = -1;
59
+ if (currentFocusedItem) {
60
+ currentEnabledIndex = enabled.indexOf(currentFocusedItem);
61
+ }
62
+ const prevEnabledIndex = currentEnabledIndex <= 0 ? enabled.length - 1 : currentEnabledIndex - 1;
63
+ const prevItem = enabled[prevEnabledIndex];
64
+ const prevItemIndex = items.indexOf(prevItem);
65
+ this.focusedIndex.set(prevItemIndex);
66
+ prevItem.focus();
67
+ }
68
+ focusItemByLabel(label) {
69
+ const enabled = this.enabledNavigableItems();
70
+ const lowerLabel = label.toLowerCase();
71
+ const match = enabled.find((item) => {
72
+ const itemLabel = item.label();
73
+ return itemLabel?.toLowerCase().startsWith(lowerLabel);
74
+ });
75
+ if (match) {
76
+ const idx = this.navigableItems().indexOf(match);
77
+ this.focusedIndex.set(idx);
78
+ match.focus();
79
+ }
80
+ }
81
+ activateFocusedItem() {
82
+ const items = this.navigableItems();
83
+ const idx = this.focusedIndex();
84
+ if (idx >= 0 && idx < items.length) {
85
+ const item = items[idx];
86
+ if (!item.disabled()) {
87
+ item.handleClick();
88
+ }
89
+ }
90
+ }
91
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: SolarisDropdownMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
92
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.17", type: SolarisDropdownMenuComponent, isStandalone: true, selector: "solaris-dropdown-menu", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, density: { classPropertyName: "density", publicName: "density", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "id": "panelId", "attr.role": "\"menu\"", "attr.data-size": "size()", "attr.data-density": "density()" } }, queries: [{ propertyName: "navigableItems", predicate: SOLARIS_DROPDOWN_NAVIGABLE_ITEM, isSignal: true }], viewQueries: [{ propertyName: "contentTemplate", first: true, predicate: ["contentTmpl"], descendants: true, read: TemplateRef, isSignal: true }], ngImport: i0, template: "<ng-template #contentTmpl>\n <div class=\"solaris-dropdown-menu__wrapper\">\n <ng-content />\n </div>\n</ng-template>\n", styles: [":host{--solaris-dropdown-menu-min-width: calc( var(--solaris-spacing-24) + var(--solaris-spacing-10) + var(--solaris-spacing-1) );--solaris-dropdown-menu-max-width: calc( var(--solaris-spacing-24) * 2 + var(--solaris-spacing-10) + var(--solaris-spacing-2) );display:none}.solaris-dropdown-menu__wrapper{--solaris-dropdown-menu-gap: var(--solaris-spacing-1);--solaris-dropdown-menu-padding: var(--solaris-spacing-2);display:flex;outline:none;-webkit-user-select:none;user-select:none;flex-direction:column;box-sizing:border-box;gap:var(--solaris-dropdown-menu-gap);padding:var(--solaris-dropdown-menu-padding);min-width:var(--solaris-dropdown-menu-min-width);max-width:var(--solaris-dropdown-menu-max-width)}.solaris-dropdown-menu__wrapper ::ng-deep solaris-divider{margin-inline:calc(-1 * var(--solaris-dropdown-menu-padding));width:calc(100% + 2 * var(--solaris-dropdown-menu-padding))}::ng-deep solaris-dropdown-menu-group{display:flex;flex-direction:column;padding-block:var(--solaris-spacing-1)}::ng-deep solaris-dropdown-menu-group:first-child{padding-block-start:0}::ng-deep solaris-dropdown-menu-group:last-child{padding-block-end:0}::ng-deep solaris-dropdown-menu-label{display:flex;cursor:default;-webkit-user-select:none;user-select:none;align-items:center;letter-spacing:.05em;text-transform:uppercase;color:var(--solaris-text-muted);font-weight:var(--solaris-font-weight-semibold);font-size:var(--solaris-font-size-xs);line-height:var(--solaris-line-height-xs);padding:var(--solaris-spacing-2) var(--solaris-spacing-3)}[data-size=sm] .solaris-dropdown-menu__wrapper{--solaris-dropdown-menu-min-width: calc( var(--solaris-dropdown-menu-min-width) - var(--solaris-spacing-5) );--solaris-dropdown-menu-max-width: calc( var(--solaris-dropdown-menu-max-width) - var(--solaris-spacing-5) )}[data-size=lg] .solaris-dropdown-menu__wrapper{--solaris-dropdown-menu-min-width: calc( var(--solaris-dropdown-menu-min-width) + var(--solaris-spacing-5) );--solaris-dropdown-menu-max-width: calc( var(--solaris-dropdown-menu-max-width) + var(--solaris-spacing-5) )}\n"] });
93
+ }
94
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: SolarisDropdownMenuComponent, decorators: [{
95
+ type: Component,
96
+ args: [{ selector: 'solaris-dropdown-menu', standalone: true, host: {
97
+ '[id]': 'panelId',
98
+ '[attr.role]': '"menu"',
99
+ '[attr.data-size]': 'size()',
100
+ '[attr.data-density]': 'density()',
101
+ }, template: "<ng-template #contentTmpl>\n <div class=\"solaris-dropdown-menu__wrapper\">\n <ng-content />\n </div>\n</ng-template>\n", styles: [":host{--solaris-dropdown-menu-min-width: calc( var(--solaris-spacing-24) + var(--solaris-spacing-10) + var(--solaris-spacing-1) );--solaris-dropdown-menu-max-width: calc( var(--solaris-spacing-24) * 2 + var(--solaris-spacing-10) + var(--solaris-spacing-2) );display:none}.solaris-dropdown-menu__wrapper{--solaris-dropdown-menu-gap: var(--solaris-spacing-1);--solaris-dropdown-menu-padding: var(--solaris-spacing-2);display:flex;outline:none;-webkit-user-select:none;user-select:none;flex-direction:column;box-sizing:border-box;gap:var(--solaris-dropdown-menu-gap);padding:var(--solaris-dropdown-menu-padding);min-width:var(--solaris-dropdown-menu-min-width);max-width:var(--solaris-dropdown-menu-max-width)}.solaris-dropdown-menu__wrapper ::ng-deep solaris-divider{margin-inline:calc(-1 * var(--solaris-dropdown-menu-padding));width:calc(100% + 2 * var(--solaris-dropdown-menu-padding))}::ng-deep solaris-dropdown-menu-group{display:flex;flex-direction:column;padding-block:var(--solaris-spacing-1)}::ng-deep solaris-dropdown-menu-group:first-child{padding-block-start:0}::ng-deep solaris-dropdown-menu-group:last-child{padding-block-end:0}::ng-deep solaris-dropdown-menu-label{display:flex;cursor:default;-webkit-user-select:none;user-select:none;align-items:center;letter-spacing:.05em;text-transform:uppercase;color:var(--solaris-text-muted);font-weight:var(--solaris-font-weight-semibold);font-size:var(--solaris-font-size-xs);line-height:var(--solaris-line-height-xs);padding:var(--solaris-spacing-2) var(--solaris-spacing-3)}[data-size=sm] .solaris-dropdown-menu__wrapper{--solaris-dropdown-menu-min-width: calc( var(--solaris-dropdown-menu-min-width) - var(--solaris-spacing-5) );--solaris-dropdown-menu-max-width: calc( var(--solaris-dropdown-menu-max-width) - var(--solaris-spacing-5) )}[data-size=lg] .solaris-dropdown-menu__wrapper{--solaris-dropdown-menu-min-width: calc( var(--solaris-dropdown-menu-min-width) + var(--solaris-spacing-5) );--solaris-dropdown-menu-max-width: calc( var(--solaris-dropdown-menu-max-width) + var(--solaris-spacing-5) )}\n"] }]
102
+ }], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], density: [{ type: i0.Input, args: [{ isSignal: true, alias: "density", required: false }] }], navigableItems: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => SOLARIS_DROPDOWN_NAVIGABLE_ITEM), { isSignal: true }] }], contentTemplate: [{ type: i0.ViewChild, args: ['contentTmpl', { ...{
103
+ read: TemplateRef,
104
+ }, isSignal: true }] }] } });
105
+ //# sourceMappingURL=dropdown-menu.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdown-menu.component.js","sourceRoot":"","sources":["../../../../../../../../../packages/angular/src/lib/components/interaction/dropdown-menu/component/dropdown-menu.component.ts","../../../../../../../../../packages/angular/src/lib/components/interaction/dropdown-menu/component/dropdown-menu.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n input,\n contentChildren,\n signal,\n computed,\n viewChild,\n TemplateRef,\n} from '@angular/core';\n\nimport {\n SOLARIS_DROPDOWN_NAVIGABLE_ITEM,\n type SolarisDropdownNavigableItem,\n} from '../model/dropdown-menu-navigation';\n\nimport type {\n SolarisDropdownMenuSize,\n SolarisDropdownMenuDensity,\n} from '../model/dropdown-menu.types';\n\nlet nextId = 0;\n\n@Component({\n selector: 'solaris-dropdown-menu',\n standalone: true,\n templateUrl: './dropdown-menu.component.html',\n styleUrls: ['./dropdown-menu.component.scss'],\n host: {\n '[id]': 'panelId',\n '[attr.role]': '\"menu\"',\n '[attr.data-size]': 'size()',\n '[attr.data-density]': 'density()',\n },\n})\nexport class SolarisDropdownMenuComponent {\n readonly size = input<SolarisDropdownMenuSize>('md');\n readonly density = input<SolarisDropdownMenuDensity>('comfortable');\n\n readonly navigableItems = contentChildren<SolarisDropdownNavigableItem>(\n SOLARIS_DROPDOWN_NAVIGABLE_ITEM,\n );\n\n readonly contentTemplate = viewChild.required('contentTmpl', {\n read: TemplateRef,\n });\n\n readonly panelId = `solaris-dropdown-menu-${++nextId}`;\n\n readonly focusedIndex = signal(-1);\n\n readonly enabledNavigableItems = computed(() => {\n return this.navigableItems().filter((item) => !item.disabled());\n });\n\n focusFirstItem(): void {\n const enabled = this.enabledNavigableItems();\n if (enabled.length > 0) {\n const idx = this.navigableItems().indexOf(enabled[0]);\n this.focusedIndex.set(idx);\n enabled[0].focus();\n }\n }\n\n focusLastItem(): void {\n const enabled = this.enabledNavigableItems();\n const last = enabled.at(-1);\n if (last) {\n const idx = this.navigableItems().indexOf(last);\n this.focusedIndex.set(idx);\n last.focus();\n }\n }\n\n focusNextItem(): void {\n const items = this.navigableItems();\n const enabled = this.enabledNavigableItems();\n if (enabled.length === 0) return;\n\n const currentFocused = this.focusedIndex();\n const currentFocusedItem =\n currentFocused >= 0 ? items[currentFocused] : null;\n\n let currentEnabledIndex = -1;\n if (currentFocusedItem) {\n currentEnabledIndex = enabled.indexOf(currentFocusedItem);\n }\n\n const nextEnabledIndex = (currentEnabledIndex + 1) % enabled.length;\n const nextItem = enabled[nextEnabledIndex];\n const nextItemIndex = items.indexOf(nextItem);\n this.focusedIndex.set(nextItemIndex);\n nextItem.focus();\n }\n\n focusPreviousItem(): void {\n const items = this.navigableItems();\n const enabled = this.enabledNavigableItems();\n if (enabled.length === 0) return;\n\n const currentFocused = this.focusedIndex();\n const currentFocusedItem =\n currentFocused >= 0 ? items[currentFocused] : null;\n\n let currentEnabledIndex = -1;\n if (currentFocusedItem) {\n currentEnabledIndex = enabled.indexOf(currentFocusedItem);\n }\n\n const prevEnabledIndex =\n currentEnabledIndex <= 0 ? enabled.length - 1 : currentEnabledIndex - 1;\n const prevItem = enabled[prevEnabledIndex];\n const prevItemIndex = items.indexOf(prevItem);\n this.focusedIndex.set(prevItemIndex);\n prevItem.focus();\n }\n\n focusItemByLabel(label: string): void {\n const enabled = this.enabledNavigableItems();\n const lowerLabel = label.toLowerCase();\n const match = enabled.find((item) => {\n const itemLabel = item.label();\n return itemLabel?.toLowerCase().startsWith(lowerLabel);\n });\n if (match) {\n const idx = this.navigableItems().indexOf(match);\n this.focusedIndex.set(idx);\n match.focus();\n }\n }\n\n activateFocusedItem(): void {\n const items = this.navigableItems();\n const idx = this.focusedIndex();\n if (idx >= 0 && idx < items.length) {\n const item = items[idx];\n if (!item.disabled()) {\n item.handleClick();\n }\n }\n }\n}\n","<ng-template #contentTmpl>\n <div class=\"solaris-dropdown-menu__wrapper\">\n <ng-content />\n </div>\n</ng-template>\n"]}
@@ -0,0 +1,95 @@
1
+ import { Component, ElementRef, HostListener, inject, input, computed, forwardRef, } from '@angular/core';
2
+ import { SolarisIconComponent } from '../../../icon';
3
+ import { SOLARIS_DROPDOWN_NAVIGABLE_ITEM } from '../model/dropdown-menu-navigation';
4
+ import { SolarisDropdownSubmenuComponent } from './dropdown-submenu.component';
5
+ import * as i0 from "@angular/core";
6
+ export class SolarisDropdownSubmenuTriggerComponent {
7
+ elementRef = inject(ElementRef);
8
+ submenu = inject(SolarisDropdownSubmenuComponent, {
9
+ optional: true,
10
+ });
11
+ icon = input(undefined, ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
12
+ label = input(undefined, ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
13
+ labelKey = input(undefined, ...(ngDevMode ? [{ debugName: "labelKey" }] : /* istanbul ignore next */ []));
14
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
15
+ color = input('neutral', ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
16
+ isSubmenuOpen = computed(() => {
17
+ return this.submenu?.isOpen() ?? false;
18
+ }, ...(ngDevMode ? [{ debugName: "isSubmenuOpen" }] : /* istanbul ignore next */ []));
19
+ submenuPanelId = computed(() => {
20
+ return this.submenu?.nestedMenuPanelId() ?? null;
21
+ }, ...(ngDevMode ? [{ debugName: "submenuPanelId" }] : /* istanbul ignore next */ []));
22
+ hasLeadingContent = computed(() => !!this.icon(), ...(ngDevMode ? [{ debugName: "hasLeadingContent" }] : /* istanbul ignore next */ []));
23
+ handleClick() {
24
+ if (this.disabled())
25
+ return;
26
+ this.submenu?.toggle();
27
+ }
28
+ onMouseEnter() {
29
+ if (this.disabled())
30
+ return;
31
+ this.submenu?.onTriggerHover();
32
+ }
33
+ onMouseLeave() {
34
+ if (this.disabled())
35
+ return;
36
+ this.submenu?.onTriggerLeave();
37
+ }
38
+ onKeydown(event) {
39
+ if (this.disabled())
40
+ return;
41
+ if (event.key === 'Enter' || event.key === ' ') {
42
+ event.preventDefault();
43
+ event.stopPropagation();
44
+ this.submenu?.toggle();
45
+ }
46
+ else if (event.key === 'ArrowRight') {
47
+ event.preventDefault();
48
+ event.stopPropagation();
49
+ this.submenu?.open();
50
+ }
51
+ }
52
+ focus() {
53
+ // SECURITY_EXCEPTION: nativeElement.focus() required for programmatic focus. No alternative exists.
54
+ this.elementRef.nativeElement.focus();
55
+ }
56
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: SolarisDropdownSubmenuTriggerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
57
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: SolarisDropdownSubmenuTriggerComponent, isStandalone: true, selector: "solaris-dropdown-submenu-trigger", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, labelKey: { classPropertyName: "labelKey", publicName: "labelKey", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "handleClick()", "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()", "keydown": "onKeydown($event)" }, properties: { "attr.role": "\"menuitem\"", "attr.data-color": "color()", "attr.aria-haspopup": "\"menu\"", "attr.aria-controls": "submenuPanelId()", "attr.tabindex": "disabled() ? \"-1\" : \"0\"", "attr.data-disabled": "disabled() ? \"\" : null", "attr.aria-disabled": "disabled() ? \"true\" : null", "attr.aria-expanded": "isSubmenuOpen() ? \"true\" : \"false\"" }, classAttribute: "solaris-dropdown-submenu-trigger" }, providers: [
58
+ {
59
+ provide: SOLARIS_DROPDOWN_NAVIGABLE_ITEM,
60
+ useExisting: forwardRef(() => SolarisDropdownSubmenuTriggerComponent),
61
+ },
62
+ ], ngImport: i0, template: "<div class=\"solaris-dropdown-submenu-trigger__wrapper\">\n @if (hasLeadingContent()) {\n <div class=\"solaris-dropdown-submenu-trigger__leading\">\n <solaris-icon [name]=\"icon()!\" aria-hidden=\"true\" />\n </div>\n }\n <div class=\"solaris-dropdown-submenu-trigger__content\">\n <ng-content></ng-content>\n @if (label()) {\n <span class=\"solaris-dropdown-submenu-trigger__label\">{{ label() }}</span>\n }\n </div>\n <div class=\"solaris-dropdown-submenu-trigger__trailing\">\n <solaris-icon name=\"chevron-right\" aria-hidden=\"true\" />\n </div>\n</div>\n", styles: [":host{--solaris-dropdown-submenu-trigger-gap: var(--solaris-spacing-2);--solaris-dropdown-submenu-trigger-radius: var(--solaris-radius-sm);--solaris-dropdown-submenu-trigger-padding-y: var(--solaris-spacing-2);--solaris-dropdown-submenu-trigger-padding-x: var(--solaris-spacing-4);--solaris-dropdown-submenu-trigger-label-color: var(--solaris-text-default);--solaris-dropdown-submenu-trigger-danger-color: var(--solaris-danger-text);--solaris-dropdown-submenu-trigger-danger-hover: var( --solaris-danger-surface );--solaris-dropdown-submenu-trigger-focus-ring-color: var( --solaris-primary-base );--solaris-dropdown-submenu-trigger-hover-background: var( --solaris-surface-muted );--solaris-dropdown-submenu-trigger-trailing-color: var(--solaris-text-muted);display:flex;outline:none;cursor:pointer;align-items:center;text-decoration:none;box-sizing:border-box;min-height:var(--solaris-spacing-8);font-size:var(--solaris-font-size-sm);line-height:var(--solaris-line-height-sm);gap:var(--solaris-dropdown-submenu-trigger-gap);color:var(--solaris-dropdown-submenu-trigger-label-color);border-radius:var(--solaris-dropdown-submenu-trigger-radius);font-family:var(--solaris-font-family-sans),system-ui;padding:var(--solaris-dropdown-submenu-trigger-padding-y) var(--solaris-dropdown-submenu-trigger-padding-x);transition:background var(--solaris-motion-duration-fast) var(--solaris-motion-easing-standard)}:host(:hover){background:var(--solaris-dropdown-submenu-trigger-hover-background)}:host(:focus){outline-offset:-2px;background:var(--solaris-dropdown-submenu-trigger-hover-background)}:host(:focus-visible){outline:var(--solaris-border-width-md) solid var(--solaris-dropdown-submenu-trigger-focus-ring-color)}:host([data-disabled]){opacity:.5;cursor:not-allowed}:host([data-color=danger]){color:var(--solaris-dropdown-submenu-trigger-danger-color)}:host([data-color=danger]:hover),:host([data-color=danger]:focus){background:var(--solaris-dropdown-submenu-trigger-danger-hover)}.solaris-dropdown-submenu-trigger__wrapper{display:flex;flex:1;min-width:0;align-items:center;gap:var(--solaris-dropdown-submenu-trigger-gap)}.solaris-dropdown-submenu-trigger__leading{display:flex;flex-shrink:0;align-items:center;justify-content:center;width:var(--solaris-spacing-5);height:var(--solaris-spacing-5);color:var(--solaris-text-muted)}:host([data-color=danger]) .solaris-dropdown-submenu-trigger__leading{color:var(--solaris-dropdown-submenu-trigger-danger-color)}.solaris-dropdown-submenu-trigger__content{flex:1;min-width:0}.solaris-dropdown-submenu-trigger__label{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.solaris-dropdown-submenu-trigger__trailing{display:flex;flex-shrink:0;align-items:center;justify-content:center;width:var(--solaris-spacing-4);height:var(--solaris-spacing-4);margin-inline-start:var(--solaris-spacing-4);color:var(--solaris-dropdown-submenu-trigger-trailing-color)}@media(prefers-reduced-motion:reduce){:host{transition:none}}[data-reduced-motion=true] :host{transition:none}\n"], dependencies: [{ kind: "component", type: SolarisIconComponent, selector: "solaris-icon", inputs: ["name", "ariaLabel", "decorative"] }] });
63
+ }
64
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: SolarisDropdownSubmenuTriggerComponent, decorators: [{
65
+ type: Component,
66
+ args: [{ selector: 'solaris-dropdown-submenu-trigger', standalone: true, imports: [SolarisIconComponent], providers: [
67
+ {
68
+ provide: SOLARIS_DROPDOWN_NAVIGABLE_ITEM,
69
+ useExisting: forwardRef(() => SolarisDropdownSubmenuTriggerComponent),
70
+ },
71
+ ], host: {
72
+ '[attr.role]': '"menuitem"',
73
+ '[attr.data-color]': 'color()',
74
+ '[attr.aria-haspopup]': '"menu"',
75
+ class: 'solaris-dropdown-submenu-trigger',
76
+ '[attr.aria-controls]': 'submenuPanelId()',
77
+ '[attr.tabindex]': 'disabled() ? "-1" : "0"',
78
+ '[attr.data-disabled]': 'disabled() ? "" : null',
79
+ '[attr.aria-disabled]': 'disabled() ? "true" : null',
80
+ '[attr.aria-expanded]': 'isSubmenuOpen() ? "true" : "false"',
81
+ }, template: "<div class=\"solaris-dropdown-submenu-trigger__wrapper\">\n @if (hasLeadingContent()) {\n <div class=\"solaris-dropdown-submenu-trigger__leading\">\n <solaris-icon [name]=\"icon()!\" aria-hidden=\"true\" />\n </div>\n }\n <div class=\"solaris-dropdown-submenu-trigger__content\">\n <ng-content></ng-content>\n @if (label()) {\n <span class=\"solaris-dropdown-submenu-trigger__label\">{{ label() }}</span>\n }\n </div>\n <div class=\"solaris-dropdown-submenu-trigger__trailing\">\n <solaris-icon name=\"chevron-right\" aria-hidden=\"true\" />\n </div>\n</div>\n", styles: [":host{--solaris-dropdown-submenu-trigger-gap: var(--solaris-spacing-2);--solaris-dropdown-submenu-trigger-radius: var(--solaris-radius-sm);--solaris-dropdown-submenu-trigger-padding-y: var(--solaris-spacing-2);--solaris-dropdown-submenu-trigger-padding-x: var(--solaris-spacing-4);--solaris-dropdown-submenu-trigger-label-color: var(--solaris-text-default);--solaris-dropdown-submenu-trigger-danger-color: var(--solaris-danger-text);--solaris-dropdown-submenu-trigger-danger-hover: var( --solaris-danger-surface );--solaris-dropdown-submenu-trigger-focus-ring-color: var( --solaris-primary-base );--solaris-dropdown-submenu-trigger-hover-background: var( --solaris-surface-muted );--solaris-dropdown-submenu-trigger-trailing-color: var(--solaris-text-muted);display:flex;outline:none;cursor:pointer;align-items:center;text-decoration:none;box-sizing:border-box;min-height:var(--solaris-spacing-8);font-size:var(--solaris-font-size-sm);line-height:var(--solaris-line-height-sm);gap:var(--solaris-dropdown-submenu-trigger-gap);color:var(--solaris-dropdown-submenu-trigger-label-color);border-radius:var(--solaris-dropdown-submenu-trigger-radius);font-family:var(--solaris-font-family-sans),system-ui;padding:var(--solaris-dropdown-submenu-trigger-padding-y) var(--solaris-dropdown-submenu-trigger-padding-x);transition:background var(--solaris-motion-duration-fast) var(--solaris-motion-easing-standard)}:host(:hover){background:var(--solaris-dropdown-submenu-trigger-hover-background)}:host(:focus){outline-offset:-2px;background:var(--solaris-dropdown-submenu-trigger-hover-background)}:host(:focus-visible){outline:var(--solaris-border-width-md) solid var(--solaris-dropdown-submenu-trigger-focus-ring-color)}:host([data-disabled]){opacity:.5;cursor:not-allowed}:host([data-color=danger]){color:var(--solaris-dropdown-submenu-trigger-danger-color)}:host([data-color=danger]:hover),:host([data-color=danger]:focus){background:var(--solaris-dropdown-submenu-trigger-danger-hover)}.solaris-dropdown-submenu-trigger__wrapper{display:flex;flex:1;min-width:0;align-items:center;gap:var(--solaris-dropdown-submenu-trigger-gap)}.solaris-dropdown-submenu-trigger__leading{display:flex;flex-shrink:0;align-items:center;justify-content:center;width:var(--solaris-spacing-5);height:var(--solaris-spacing-5);color:var(--solaris-text-muted)}:host([data-color=danger]) .solaris-dropdown-submenu-trigger__leading{color:var(--solaris-dropdown-submenu-trigger-danger-color)}.solaris-dropdown-submenu-trigger__content{flex:1;min-width:0}.solaris-dropdown-submenu-trigger__label{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.solaris-dropdown-submenu-trigger__trailing{display:flex;flex-shrink:0;align-items:center;justify-content:center;width:var(--solaris-spacing-4);height:var(--solaris-spacing-4);margin-inline-start:var(--solaris-spacing-4);color:var(--solaris-dropdown-submenu-trigger-trailing-color)}@media(prefers-reduced-motion:reduce){:host{transition:none}}[data-reduced-motion=true] :host{transition:none}\n"] }]
82
+ }], propDecorators: { icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], labelKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelKey", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], handleClick: [{
83
+ type: HostListener,
84
+ args: ['click']
85
+ }], onMouseEnter: [{
86
+ type: HostListener,
87
+ args: ['mouseenter']
88
+ }], onMouseLeave: [{
89
+ type: HostListener,
90
+ args: ['mouseleave']
91
+ }], onKeydown: [{
92
+ type: HostListener,
93
+ args: ['keydown', ['$event']]
94
+ }] } });
95
+ //# sourceMappingURL=dropdown-submenu-trigger.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdown-submenu-trigger.component.js","sourceRoot":"","sources":["../../../../../../../../../packages/angular/src/lib/components/interaction/dropdown-menu/component/dropdown-submenu-trigger.component.ts","../../../../../../../../../packages/angular/src/lib/components/interaction/dropdown-menu/component/dropdown-submenu-trigger.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n ElementRef,\n HostListener,\n inject,\n input,\n computed,\n forwardRef,\n} from '@angular/core';\n\nimport { SolarisIconComponent } from '../../../icon';\n\nimport type { SolarisDropdownMenuItemColor } from '../model/dropdown-menu.types';\nimport { SOLARIS_DROPDOWN_NAVIGABLE_ITEM } from '../model/dropdown-menu-navigation';\nimport { SolarisDropdownSubmenuComponent } from './dropdown-submenu.component';\n\n@Component({\n selector: 'solaris-dropdown-submenu-trigger',\n standalone: true,\n imports: [SolarisIconComponent],\n providers: [\n {\n provide: SOLARIS_DROPDOWN_NAVIGABLE_ITEM,\n useExisting: forwardRef(() => SolarisDropdownSubmenuTriggerComponent),\n },\n ],\n templateUrl: './dropdown-submenu-trigger.component.html',\n styleUrls: ['./dropdown-submenu-trigger.component.scss'],\n host: {\n '[attr.role]': '\"menuitem\"',\n '[attr.data-color]': 'color()',\n '[attr.aria-haspopup]': '\"menu\"',\n class: 'solaris-dropdown-submenu-trigger',\n '[attr.aria-controls]': 'submenuPanelId()',\n '[attr.tabindex]': 'disabled() ? \"-1\" : \"0\"',\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\n '[attr.aria-expanded]': 'isSubmenuOpen() ? \"true\" : \"false\"',\n },\n})\nexport class SolarisDropdownSubmenuTriggerComponent {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly submenu = inject(SolarisDropdownSubmenuComponent, {\n optional: true,\n });\n\n readonly icon = input<string | undefined>(undefined);\n readonly label = input<string | undefined>(undefined);\n readonly labelKey = input<string | undefined>(undefined);\n readonly disabled = input<boolean>(false);\n readonly color = input<SolarisDropdownMenuItemColor>('neutral');\n\n protected readonly isSubmenuOpen = computed(() => {\n return this.submenu?.isOpen() ?? false;\n });\n\n protected readonly submenuPanelId = computed(() => {\n return this.submenu?.nestedMenuPanelId() ?? null;\n });\n\n protected readonly hasLeadingContent = computed(() => !!this.icon());\n\n @HostListener('click')\n handleClick(): void {\n if (this.disabled()) return;\n this.submenu?.toggle();\n }\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n if (this.disabled()) return;\n this.submenu?.onTriggerHover();\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n if (this.disabled()) return;\n this.submenu?.onTriggerLeave();\n }\n\n @HostListener('keydown', ['$event'])\n onKeydown(event: KeyboardEvent): void {\n if (this.disabled()) return;\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n event.stopPropagation();\n this.submenu?.toggle();\n } else if (event.key === 'ArrowRight') {\n event.preventDefault();\n event.stopPropagation();\n this.submenu?.open();\n }\n }\n\n focus(): void {\n // SECURITY_EXCEPTION: nativeElement.focus() required for programmatic focus. No alternative exists.\n this.elementRef.nativeElement.focus();\n }\n}\n","<div class=\"solaris-dropdown-submenu-trigger__wrapper\">\n @if (hasLeadingContent()) {\n <div class=\"solaris-dropdown-submenu-trigger__leading\">\n <solaris-icon [name]=\"icon()!\" aria-hidden=\"true\" />\n </div>\n }\n <div class=\"solaris-dropdown-submenu-trigger__content\">\n <ng-content></ng-content>\n @if (label()) {\n <span class=\"solaris-dropdown-submenu-trigger__label\">{{ label() }}</span>\n }\n </div>\n <div class=\"solaris-dropdown-submenu-trigger__trailing\">\n <solaris-icon name=\"chevron-right\" aria-hidden=\"true\" />\n </div>\n</div>\n"]}