@star-ng/ui 0.0.0-stage → 0.1.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 (217) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +148 -2
  3. package/fesm2022/star-ng-ui-accordion.mjs +376 -0
  4. package/fesm2022/star-ng-ui-accordion.mjs.map +1 -0
  5. package/fesm2022/star-ng-ui-autocomplete.mjs +782 -0
  6. package/fesm2022/star-ng-ui-autocomplete.mjs.map +1 -0
  7. package/fesm2022/star-ng-ui-avatar.mjs +154 -0
  8. package/fesm2022/star-ng-ui-avatar.mjs.map +1 -0
  9. package/fesm2022/star-ng-ui-badge.mjs +153 -0
  10. package/fesm2022/star-ng-ui-badge.mjs.map +1 -0
  11. package/fesm2022/star-ng-ui-breadcrumb.mjs +199 -0
  12. package/fesm2022/star-ng-ui-breadcrumb.mjs.map +1 -0
  13. package/fesm2022/star-ng-ui-button.mjs +282 -0
  14. package/fesm2022/star-ng-ui-button.mjs.map +1 -0
  15. package/fesm2022/star-ng-ui-card.mjs +112 -0
  16. package/fesm2022/star-ng-ui-card.mjs.map +1 -0
  17. package/fesm2022/star-ng-ui-chart.mjs +1904 -0
  18. package/fesm2022/star-ng-ui-chart.mjs.map +1 -0
  19. package/fesm2022/star-ng-ui-checkbox.mjs +345 -0
  20. package/fesm2022/star-ng-ui-checkbox.mjs.map +1 -0
  21. package/fesm2022/star-ng-ui-core.mjs +392 -0
  22. package/fesm2022/star-ng-ui-core.mjs.map +1 -0
  23. package/fesm2022/star-ng-ui-data-display.mjs +1556 -0
  24. package/fesm2022/star-ng-ui-data-display.mjs.map +1 -0
  25. package/fesm2022/star-ng-ui-date-picker.mjs +2786 -0
  26. package/fesm2022/star-ng-ui-date-picker.mjs.map +1 -0
  27. package/fesm2022/star-ng-ui-dialog.mjs +948 -0
  28. package/fesm2022/star-ng-ui-dialog.mjs.map +1 -0
  29. package/fesm2022/star-ng-ui-drawer.mjs +158 -0
  30. package/fesm2022/star-ng-ui-drawer.mjs.map +1 -0
  31. package/fesm2022/star-ng-ui-editor.mjs +416 -0
  32. package/fesm2022/star-ng-ui-editor.mjs.map +1 -0
  33. package/fesm2022/star-ng-ui-field.mjs +378 -0
  34. package/fesm2022/star-ng-ui-field.mjs.map +1 -0
  35. package/fesm2022/star-ng-ui-file-upload.mjs +762 -0
  36. package/fesm2022/star-ng-ui-file-upload.mjs.map +1 -0
  37. package/fesm2022/star-ng-ui-i18n-de.mjs +179 -0
  38. package/fesm2022/star-ng-ui-i18n-de.mjs.map +1 -0
  39. package/fesm2022/star-ng-ui-i18n-es.mjs +179 -0
  40. package/fesm2022/star-ng-ui-i18n-es.mjs.map +1 -0
  41. package/fesm2022/star-ng-ui-input-group.mjs +188 -0
  42. package/fesm2022/star-ng-ui-input-group.mjs.map +1 -0
  43. package/fesm2022/star-ng-ui-input-mask.mjs +434 -0
  44. package/fesm2022/star-ng-ui-input-mask.mjs.map +1 -0
  45. package/fesm2022/star-ng-ui-input-number.mjs +691 -0
  46. package/fesm2022/star-ng-ui-input-number.mjs.map +1 -0
  47. package/fesm2022/star-ng-ui-input-otp.mjs +343 -0
  48. package/fesm2022/star-ng-ui-input-otp.mjs.map +1 -0
  49. package/fesm2022/star-ng-ui-input-tags.mjs +616 -0
  50. package/fesm2022/star-ng-ui-input-tags.mjs.map +1 -0
  51. package/fesm2022/star-ng-ui-knob.mjs +514 -0
  52. package/fesm2022/star-ng-ui-knob.mjs.map +1 -0
  53. package/fesm2022/star-ng-ui-layout.mjs +608 -0
  54. package/fesm2022/star-ng-ui-layout.mjs.map +1 -0
  55. package/fesm2022/star-ng-ui-listbox.mjs +978 -0
  56. package/fesm2022/star-ng-ui-listbox.mjs.map +1 -0
  57. package/fesm2022/star-ng-ui-media.mjs +833 -0
  58. package/fesm2022/star-ng-ui-media.mjs.map +1 -0
  59. package/fesm2022/star-ng-ui-menu.mjs +1840 -0
  60. package/fesm2022/star-ng-ui-menu.mjs.map +1 -0
  61. package/fesm2022/star-ng-ui-message.mjs +191 -0
  62. package/fesm2022/star-ng-ui-message.mjs.map +1 -0
  63. package/fesm2022/star-ng-ui-paginator.mjs +387 -0
  64. package/fesm2022/star-ng-ui-paginator.mjs.map +1 -0
  65. package/fesm2022/star-ng-ui-panel.mjs +324 -0
  66. package/fesm2022/star-ng-ui-panel.mjs.map +1 -0
  67. package/fesm2022/star-ng-ui-password.mjs +517 -0
  68. package/fesm2022/star-ng-ui-password.mjs.map +1 -0
  69. package/fesm2022/star-ng-ui-popover.mjs +241 -0
  70. package/fesm2022/star-ng-ui-popover.mjs.map +1 -0
  71. package/fesm2022/star-ng-ui-progress-bar.mjs +183 -0
  72. package/fesm2022/star-ng-ui-progress-bar.mjs.map +1 -0
  73. package/fesm2022/star-ng-ui-radio.mjs +411 -0
  74. package/fesm2022/star-ng-ui-radio.mjs.map +1 -0
  75. package/fesm2022/star-ng-ui-rating.mjs +211 -0
  76. package/fesm2022/star-ng-ui-rating.mjs.map +1 -0
  77. package/fesm2022/star-ng-ui-select-button.mjs +613 -0
  78. package/fesm2022/star-ng-ui-select-button.mjs.map +1 -0
  79. package/fesm2022/star-ng-ui-select.mjs +2523 -0
  80. package/fesm2022/star-ng-ui-select.mjs.map +1 -0
  81. package/fesm2022/star-ng-ui-skeleton.mjs +160 -0
  82. package/fesm2022/star-ng-ui-skeleton.mjs.map +1 -0
  83. package/fesm2022/star-ng-ui-slider.mjs +552 -0
  84. package/fesm2022/star-ng-ui-slider.mjs.map +1 -0
  85. package/fesm2022/star-ng-ui-spinner.mjs +148 -0
  86. package/fesm2022/star-ng-ui-spinner.mjs.map +1 -0
  87. package/fesm2022/star-ng-ui-stepper.mjs +360 -0
  88. package/fesm2022/star-ng-ui-stepper.mjs.map +1 -0
  89. package/fesm2022/star-ng-ui-table.mjs +3477 -0
  90. package/fesm2022/star-ng-ui-table.mjs.map +1 -0
  91. package/fesm2022/star-ng-ui-tabs.mjs +464 -0
  92. package/fesm2022/star-ng-ui-tabs.mjs.map +1 -0
  93. package/fesm2022/star-ng-ui-tag.mjs +129 -0
  94. package/fesm2022/star-ng-ui-tag.mjs.map +1 -0
  95. package/fesm2022/star-ng-ui-theme-switch.mjs +105 -0
  96. package/fesm2022/star-ng-ui-theme-switch.mjs.map +1 -0
  97. package/fesm2022/star-ng-ui-theme.mjs +98 -0
  98. package/fesm2022/star-ng-ui-theme.mjs.map +1 -0
  99. package/fesm2022/star-ng-ui-toast.mjs +298 -0
  100. package/fesm2022/star-ng-ui-toast.mjs.map +1 -0
  101. package/fesm2022/star-ng-ui-toggle-switch.mjs +316 -0
  102. package/fesm2022/star-ng-ui-toggle-switch.mjs.map +1 -0
  103. package/fesm2022/star-ng-ui-tooltip.mjs +297 -0
  104. package/fesm2022/star-ng-ui-tooltip.mjs.map +1 -0
  105. package/fesm2022/star-ng-ui-transloco.mjs +40 -0
  106. package/fesm2022/star-ng-ui-transloco.mjs.map +1 -0
  107. package/fesm2022/star-ng-ui-tree.mjs +1446 -0
  108. package/fesm2022/star-ng-ui-tree.mjs.map +1 -0
  109. package/fesm2022/star-ng-ui-utility.mjs +2134 -0
  110. package/fesm2022/star-ng-ui-utility.mjs.map +1 -0
  111. package/fesm2022/star-ng-ui.mjs +51 -0
  112. package/package.json +281 -3
  113. package/styles/_base.scss +70 -0
  114. package/styles/_shared.scss +2 -0
  115. package/styles/_tokens.scss +190 -0
  116. package/styles/controls/_accordion.scss +75 -0
  117. package/styles/controls/_autocomplete.scss +44 -0
  118. package/styles/controls/_avatar.scss +39 -0
  119. package/styles/controls/_breadcrumb.scss +45 -0
  120. package/styles/controls/_button.scss +137 -0
  121. package/styles/controls/_card.scss +38 -0
  122. package/styles/controls/_chart.scss +214 -0
  123. package/styles/controls/_chip.scss +51 -0
  124. package/styles/controls/_choice.scss +153 -0
  125. package/styles/controls/_data-display.scss +118 -0
  126. package/styles/controls/_date-picker.scss +300 -0
  127. package/styles/controls/_dialog.scss +123 -0
  128. package/styles/controls/_drawer.scss +118 -0
  129. package/styles/controls/_editor.scss +74 -0
  130. package/styles/controls/_field.scss +92 -0
  131. package/styles/controls/_file-upload.scss +136 -0
  132. package/styles/controls/_input-group.scss +104 -0
  133. package/styles/controls/_input-mask.scss +46 -0
  134. package/styles/controls/_input-number.scss +125 -0
  135. package/styles/controls/_knob.scss +76 -0
  136. package/styles/controls/_layout.scss +182 -0
  137. package/styles/controls/_listbox.scss +38 -0
  138. package/styles/controls/_media.scss +222 -0
  139. package/styles/controls/_menu.scss +254 -0
  140. package/styles/controls/_message.scss +48 -0
  141. package/styles/controls/_org-chart.scss +128 -0
  142. package/styles/controls/_paginator.scss +59 -0
  143. package/styles/controls/_panel.scss +83 -0
  144. package/styles/controls/_popover.scss +40 -0
  145. package/styles/controls/_progress-bar.scss +74 -0
  146. package/styles/controls/_select-button.scss +61 -0
  147. package/styles/controls/_select.scss +216 -0
  148. package/styles/controls/_skeleton.scss +43 -0
  149. package/styles/controls/_slider.scss +163 -0
  150. package/styles/controls/_spinner.scss +34 -0
  151. package/styles/controls/_stepper.scss +109 -0
  152. package/styles/controls/_table.scss +523 -0
  153. package/styles/controls/_tabs.scss +93 -0
  154. package/styles/controls/_tag.scss +84 -0
  155. package/styles/controls/_toast.scss +141 -0
  156. package/styles/controls/_tooltip.scss +14 -0
  157. package/styles/controls/_tree.scss +113 -0
  158. package/styles/controls/_utility.scss +654 -0
  159. package/styles/star-ng.css +5803 -0
  160. package/styles/star-ng.min.css +1 -0
  161. package/styles/star-ng.scss +50 -0
  162. package/theme/star-theme-first-paint.js +1 -0
  163. package/types/star-ng-ui-accordion.d.ts +82 -0
  164. package/types/star-ng-ui-autocomplete.d.ts +171 -0
  165. package/types/star-ng-ui-avatar.d.ts +43 -0
  166. package/types/star-ng-ui-badge.d.ts +46 -0
  167. package/types/star-ng-ui-breadcrumb.d.ts +39 -0
  168. package/types/star-ng-ui-button.d.ts +79 -0
  169. package/types/star-ng-ui-card.d.ts +29 -0
  170. package/types/star-ng-ui-chart.d.ts +337 -0
  171. package/types/star-ng-ui-checkbox.d.ts +92 -0
  172. package/types/star-ng-ui-core.d.ts +310 -0
  173. package/types/star-ng-ui-data-display.d.ts +339 -0
  174. package/types/star-ng-ui-date-picker.d.ts +701 -0
  175. package/types/star-ng-ui-dialog.d.ts +254 -0
  176. package/types/star-ng-ui-drawer.d.ts +29 -0
  177. package/types/star-ng-ui-editor.d.ts +96 -0
  178. package/types/star-ng-ui-field.d.ts +146 -0
  179. package/types/star-ng-ui-file-upload.d.ts +192 -0
  180. package/types/star-ng-ui-i18n-de.d.ts +7 -0
  181. package/types/star-ng-ui-i18n-es.d.ts +7 -0
  182. package/types/star-ng-ui-input-group.d.ts +58 -0
  183. package/types/star-ng-ui-input-mask.d.ts +126 -0
  184. package/types/star-ng-ui-input-number.d.ts +193 -0
  185. package/types/star-ng-ui-input-otp.d.ts +86 -0
  186. package/types/star-ng-ui-input-tags.d.ts +159 -0
  187. package/types/star-ng-ui-knob.d.ts +121 -0
  188. package/types/star-ng-ui-layout.d.ts +154 -0
  189. package/types/star-ng-ui-listbox.d.ts +197 -0
  190. package/types/star-ng-ui-media.d.ts +161 -0
  191. package/types/star-ng-ui-menu.d.ts +332 -0
  192. package/types/star-ng-ui-message.d.ts +52 -0
  193. package/types/star-ng-ui-paginator.d.ts +85 -0
  194. package/types/star-ng-ui-panel.d.ts +65 -0
  195. package/types/star-ng-ui-password.d.ts +129 -0
  196. package/types/star-ng-ui-popover.d.ts +57 -0
  197. package/types/star-ng-ui-progress-bar.d.ts +49 -0
  198. package/types/star-ng-ui-radio.d.ts +116 -0
  199. package/types/star-ng-ui-rating.d.ts +52 -0
  200. package/types/star-ng-ui-select-button.d.ts +169 -0
  201. package/types/star-ng-ui-select.d.ts +540 -0
  202. package/types/star-ng-ui-skeleton.d.ts +47 -0
  203. package/types/star-ng-ui-slider.d.ts +145 -0
  204. package/types/star-ng-ui-spinner.d.ts +29 -0
  205. package/types/star-ng-ui-stepper.d.ts +89 -0
  206. package/types/star-ng-ui-table.d.ts +829 -0
  207. package/types/star-ng-ui-tabs.d.ts +109 -0
  208. package/types/star-ng-ui-tag.d.ts +35 -0
  209. package/types/star-ng-ui-theme-switch.d.ts +36 -0
  210. package/types/star-ng-ui-theme.d.ts +95 -0
  211. package/types/star-ng-ui-toast.d.ts +84 -0
  212. package/types/star-ng-ui-toggle-switch.d.ts +81 -0
  213. package/types/star-ng-ui-tooltip.d.ts +66 -0
  214. package/types/star-ng-ui-transloco.d.ts +14 -0
  215. package/types/star-ng-ui-tree.d.ts +310 -0
  216. package/types/star-ng-ui-utility.d.ts +533 -0
  217. package/types/star-ng-ui.d.ts +51 -0
@@ -0,0 +1,1840 @@
1
+ import * as i1 from "@angular/cdk/menu";
2
+ import { CdkContextMenuTrigger, CdkMenu, CdkMenuBar, CdkMenuGroup, CdkMenuItem, CdkMenuTrigger } from "@angular/cdk/menu";
3
+ import * as i0 from "@angular/core";
4
+ import { ChangeDetectionStrategy, Component, Directive, ElementRef, afterNextRender, booleanAttribute, effect, inject, input, model, output, viewChild } from "@angular/core";
5
+ import { RouterLink, RouterLinkActive } from "@angular/router";
6
+ import { STAR_UI_TEXT, StarDirectionService } from "@star-ng/ui/core";
7
+ import { NgTemplateOutlet } from "@angular/common";
8
+ import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
9
+ import { StarButton } from "@star-ng/ui/button";
10
+ import { _IdGenerator } from "@angular/cdk/a11y";
11
+ const STAR_MENU_POSITIONS = [
12
+ {
13
+ originX: "start",
14
+ originY: "bottom",
15
+ overlayX: "start",
16
+ overlayY: "top",
17
+ offsetY: 4
18
+ },
19
+ {
20
+ originX: "end",
21
+ originY: "bottom",
22
+ overlayX: "end",
23
+ overlayY: "top",
24
+ offsetY: 4
25
+ },
26
+ {
27
+ originX: "start",
28
+ originY: "top",
29
+ overlayX: "start",
30
+ overlayY: "bottom",
31
+ offsetY: -4
32
+ }
33
+ ];
34
+ function keepMenuInsideDialog(trigger, element) {
35
+ const target = trigger;
36
+ const create = target._getOverlayPositionStrategy;
37
+ if (typeof create !== "function") return;
38
+ target._getOverlayPositionStrategy = (...args) => {
39
+ const strategy = create.apply(trigger, args);
40
+ const dialog = element.closest("dialog");
41
+ return dialog ? strategy.withPopoverLocation({
42
+ type: "parent",
43
+ element: dialog
44
+ }) : strategy;
45
+ };
46
+ }
47
+ var StarMenuInDialog = class StarMenuInDialog {
48
+ constructor() {
49
+ keepMenuInsideDialog(inject(CdkMenuTrigger), inject(ElementRef).nativeElement);
50
+ }
51
+ static ɵfac = i0.ɵɵngDeclareFactory({
52
+ minVersion: "12.0.0",
53
+ version: "22.2.6",
54
+ ngImport: i0,
55
+ type: StarMenuInDialog,
56
+ deps: [],
57
+ target: i0.ɵɵFactoryTarget.Directive
58
+ });
59
+ static ɵdir = i0.ɵɵngDeclareDirective({
60
+ minVersion: "14.0.0",
61
+ version: "22.2.6",
62
+ type: StarMenuInDialog,
63
+ isStandalone: true,
64
+ selector: "[cdkMenuTriggerFor]",
65
+ ngImport: i0
66
+ });
67
+ };
68
+ i0.ɵɵngDeclareClassMetadata({
69
+ minVersion: "12.0.0",
70
+ version: "22.2.6",
71
+ ngImport: i0,
72
+ type: StarMenuInDialog,
73
+ decorators: [{
74
+ type: Directive,
75
+ args: [{ selector: "[cdkMenuTriggerFor]" }]
76
+ }],
77
+ ctorParameters: () => []
78
+ });
79
+ var StarMenu = class StarMenu {
80
+ directionSync = inject(StarDirectionService);
81
+ items = input([], ...ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []);
82
+ inline = input(false, {
83
+ ...ngDevMode ? { debugName: "inline" } : /* istanbul ignore next */ {},
84
+ transform: booleanAttribute
85
+ });
86
+ ariaLabel = input(null, ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
87
+ itemClick = output();
88
+ template = viewChild.required("menu", ...ngDevMode ? [{ debugName: "template" }] : /* istanbul ignore next */ []);
89
+ run(item) {
90
+ if (item.disabled) return;
91
+ item.command?.(item);
92
+ this.itemClick.emit(item);
93
+ }
94
+ static ɵfac = i0.ɵɵngDeclareFactory({
95
+ minVersion: "12.0.0",
96
+ version: "22.2.6",
97
+ ngImport: i0,
98
+ type: StarMenu,
99
+ deps: [],
100
+ target: i0.ɵɵFactoryTarget.Component
101
+ });
102
+ static ɵcmp = i0.ɵɵngDeclareComponent({
103
+ minVersion: "17.0.0",
104
+ version: "22.2.6",
105
+ type: StarMenu,
106
+ isStandalone: true,
107
+ selector: "star-menu",
108
+ inputs: {
109
+ items: {
110
+ classPropertyName: "items",
111
+ publicName: "items",
112
+ isSignal: true,
113
+ isRequired: false,
114
+ transformFunction: null
115
+ },
116
+ inline: {
117
+ classPropertyName: "inline",
118
+ publicName: "inline",
119
+ isSignal: true,
120
+ isRequired: false,
121
+ transformFunction: null
122
+ },
123
+ ariaLabel: {
124
+ classPropertyName: "ariaLabel",
125
+ publicName: "ariaLabel",
126
+ isSignal: true,
127
+ isRequired: false,
128
+ transformFunction: null
129
+ }
130
+ },
131
+ outputs: { itemClick: "itemClick" },
132
+ host: { classAttribute: "star-menu-host" },
133
+ viewQueries: [{
134
+ propertyName: "template",
135
+ first: true,
136
+ predicate: ["menu"],
137
+ descendants: true,
138
+ isSignal: true
139
+ }],
140
+ ngImport: i0,
141
+ template: `
142
+ <ng-template #menu let-items>
143
+ <!-- Items must be direct template children of cdkMenu: CDK resolves the menu by DI. -->
144
+ <div class="star-menu" cdkMenu [attr.aria-label]="ariaLabel()">
145
+ @for (item of items; track $index) {
146
+ @if (item.separator) {
147
+ <div class="star-menu__separator" role="separator"></div>
148
+ } @else if (item.items?.length) {
149
+ <button
150
+ type="button"
151
+ class="star-menu__item"
152
+ cdkMenuItem
153
+ [cdkMenuTriggerFor]="menu"
154
+ [cdkMenuTriggerData]="{ $implicit: item.items }"
155
+ [cdkMenuItemDisabled]="!!item.disabled"
156
+ >
157
+ <ng-container *ngTemplateOutlet="content; context: { $implicit: item }" />
158
+ <i
159
+ class="ph-bold ph-caret-right star-menu__sub star-icon-mirror"
160
+ aria-hidden="true"
161
+ ></i>
162
+ </button>
163
+ } @else if (item.routerLink) {
164
+ <a
165
+ class="star-menu__item"
166
+ cdkMenuItem
167
+ [class.star-menu__item--danger]="item.danger"
168
+ [routerLink]="item.routerLink"
169
+ [cdkMenuItemDisabled]="!!item.disabled"
170
+ (cdkMenuItemTriggered)="run(item)"
171
+ >
172
+ <ng-container *ngTemplateOutlet="content; context: { $implicit: item }" />
173
+ </a>
174
+ } @else if (item.url) {
175
+ <a
176
+ class="star-menu__item"
177
+ cdkMenuItem
178
+ [href]="item.url"
179
+ [cdkMenuItemDisabled]="!!item.disabled"
180
+ (cdkMenuItemTriggered)="run(item)"
181
+ >
182
+ <ng-container *ngTemplateOutlet="content; context: { $implicit: item }" />
183
+ </a>
184
+ } @else {
185
+ <button
186
+ type="button"
187
+ class="star-menu__item"
188
+ cdkMenuItem
189
+ [class.star-menu__item--danger]="item.danger"
190
+ [cdkMenuItemDisabled]="!!item.disabled"
191
+ (cdkMenuItemTriggered)="run(item)"
192
+ >
193
+ <ng-container *ngTemplateOutlet="content; context: { $implicit: item }" />
194
+ </button>
195
+ }
196
+ }
197
+ </div>
198
+ </ng-template>
199
+
200
+ <ng-template #content let-item>
201
+ @if (item.icon) {
202
+ <i class="star-menu__icon" [class]="item.icon" aria-hidden="true"></i>
203
+ }
204
+ <span class="star-menu__label">{{ item.label }}</span>
205
+ @if (item.shortcut) {
206
+ <kbd class="star-menu__shortcut">{{ item.shortcut }}</kbd>
207
+ }
208
+ </ng-template>
209
+
210
+ @if (inline()) {
211
+ <ng-container *ngTemplateOutlet="menu; context: { $implicit: items() }" />
212
+ }
213
+ `,
214
+ isInline: true,
215
+ dependencies: [
216
+ {
217
+ kind: "directive",
218
+ type: CdkMenu,
219
+ selector: "[cdkMenu]",
220
+ outputs: ["closed"],
221
+ exportAs: ["cdkMenu"]
222
+ },
223
+ {
224
+ kind: "directive",
225
+ type: CdkMenuItem,
226
+ selector: "[cdkMenuItem]",
227
+ inputs: ["cdkMenuItemDisabled", "cdkMenuitemTypeaheadLabel"],
228
+ outputs: ["cdkMenuItemTriggered"],
229
+ exportAs: ["cdkMenuItem"]
230
+ },
231
+ {
232
+ kind: "directive",
233
+ type: CdkMenuTrigger,
234
+ selector: "[cdkMenuTriggerFor]",
235
+ inputs: [
236
+ "cdkMenuTriggerFor",
237
+ "cdkMenuPosition",
238
+ "cdkMenuTriggerData",
239
+ "cdkMenuTriggerTransformOriginOn"
240
+ ],
241
+ outputs: ["cdkMenuOpened", "cdkMenuClosed"],
242
+ exportAs: ["cdkMenuTriggerFor"]
243
+ },
244
+ {
245
+ kind: "directive",
246
+ type: NgTemplateOutlet,
247
+ selector: "[ngTemplateOutlet]",
248
+ inputs: [
249
+ "ngTemplateOutletContext",
250
+ "ngTemplateOutlet",
251
+ "ngTemplateOutletInjector"
252
+ ]
253
+ },
254
+ {
255
+ kind: "directive",
256
+ type: RouterLink,
257
+ selector: "[routerLink]",
258
+ inputs: [
259
+ "target",
260
+ "queryParams",
261
+ "fragment",
262
+ "queryParamsHandling",
263
+ "state",
264
+ "info",
265
+ "relativeTo",
266
+ "preserveFragment",
267
+ "skipLocationChange",
268
+ "replaceUrl",
269
+ "browserUrl",
270
+ "routerLink"
271
+ ]
272
+ },
273
+ {
274
+ kind: "directive",
275
+ type: StarMenuInDialog,
276
+ selector: "[cdkMenuTriggerFor]"
277
+ }
278
+ ],
279
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
280
+ });
281
+ };
282
+ i0.ɵɵngDeclareClassMetadata({
283
+ minVersion: "12.0.0",
284
+ version: "22.2.6",
285
+ ngImport: i0,
286
+ type: StarMenu,
287
+ decorators: [{
288
+ type: Component,
289
+ args: [{
290
+ selector: "star-menu",
291
+ imports: [
292
+ CdkMenu,
293
+ CdkMenuItem,
294
+ CdkMenuTrigger,
295
+ NgTemplateOutlet,
296
+ RouterLink,
297
+ StarMenuInDialog
298
+ ],
299
+ changeDetection: ChangeDetectionStrategy.OnPush,
300
+ host: { class: "star-menu-host" },
301
+ template: `
302
+ <ng-template #menu let-items>
303
+ <!-- Items must be direct template children of cdkMenu: CDK resolves the menu by DI. -->
304
+ <div class="star-menu" cdkMenu [attr.aria-label]="ariaLabel()">
305
+ @for (item of items; track $index) {
306
+ @if (item.separator) {
307
+ <div class="star-menu__separator" role="separator"></div>
308
+ } @else if (item.items?.length) {
309
+ <button
310
+ type="button"
311
+ class="star-menu__item"
312
+ cdkMenuItem
313
+ [cdkMenuTriggerFor]="menu"
314
+ [cdkMenuTriggerData]="{ $implicit: item.items }"
315
+ [cdkMenuItemDisabled]="!!item.disabled"
316
+ >
317
+ <ng-container *ngTemplateOutlet="content; context: { $implicit: item }" />
318
+ <i
319
+ class="ph-bold ph-caret-right star-menu__sub star-icon-mirror"
320
+ aria-hidden="true"
321
+ ></i>
322
+ </button>
323
+ } @else if (item.routerLink) {
324
+ <a
325
+ class="star-menu__item"
326
+ cdkMenuItem
327
+ [class.star-menu__item--danger]="item.danger"
328
+ [routerLink]="item.routerLink"
329
+ [cdkMenuItemDisabled]="!!item.disabled"
330
+ (cdkMenuItemTriggered)="run(item)"
331
+ >
332
+ <ng-container *ngTemplateOutlet="content; context: { $implicit: item }" />
333
+ </a>
334
+ } @else if (item.url) {
335
+ <a
336
+ class="star-menu__item"
337
+ cdkMenuItem
338
+ [href]="item.url"
339
+ [cdkMenuItemDisabled]="!!item.disabled"
340
+ (cdkMenuItemTriggered)="run(item)"
341
+ >
342
+ <ng-container *ngTemplateOutlet="content; context: { $implicit: item }" />
343
+ </a>
344
+ } @else {
345
+ <button
346
+ type="button"
347
+ class="star-menu__item"
348
+ cdkMenuItem
349
+ [class.star-menu__item--danger]="item.danger"
350
+ [cdkMenuItemDisabled]="!!item.disabled"
351
+ (cdkMenuItemTriggered)="run(item)"
352
+ >
353
+ <ng-container *ngTemplateOutlet="content; context: { $implicit: item }" />
354
+ </button>
355
+ }
356
+ }
357
+ </div>
358
+ </ng-template>
359
+
360
+ <ng-template #content let-item>
361
+ @if (item.icon) {
362
+ <i class="star-menu__icon" [class]="item.icon" aria-hidden="true"></i>
363
+ }
364
+ <span class="star-menu__label">{{ item.label }}</span>
365
+ @if (item.shortcut) {
366
+ <kbd class="star-menu__shortcut">{{ item.shortcut }}</kbd>
367
+ }
368
+ </ng-template>
369
+
370
+ @if (inline()) {
371
+ <ng-container *ngTemplateOutlet="menu; context: { $implicit: items() }" />
372
+ }
373
+ `
374
+ }]
375
+ }],
376
+ propDecorators: {
377
+ items: [{
378
+ type: i0.Input,
379
+ args: [{
380
+ isSignal: true,
381
+ alias: "items",
382
+ required: false
383
+ }]
384
+ }],
385
+ inline: [{
386
+ type: i0.Input,
387
+ args: [{
388
+ isSignal: true,
389
+ alias: "inline",
390
+ required: false
391
+ }]
392
+ }],
393
+ ariaLabel: [{
394
+ type: i0.Input,
395
+ args: [{
396
+ isSignal: true,
397
+ alias: "ariaLabel",
398
+ required: false
399
+ }]
400
+ }],
401
+ itemClick: [{
402
+ type: i0.Output,
403
+ args: ["itemClick"]
404
+ }],
405
+ template: [{
406
+ type: i0.ViewChild,
407
+ args: ["menu", { isSignal: true }]
408
+ }]
409
+ }
410
+ });
411
+ var StarMenuTrigger = class StarMenuTrigger {
412
+ directionSync = inject(StarDirectionService);
413
+ starMenuTrigger = input.required(...ngDevMode ? [{ debugName: "starMenuTrigger" }] : /* istanbul ignore next */ []);
414
+ trigger = inject(CdkMenuTrigger);
415
+ host = inject(ElementRef);
416
+ constructor() {
417
+ this.trigger.menuPosition = STAR_MENU_POSITIONS;
418
+ keepMenuInsideDialog(this.trigger, this.host.nativeElement);
419
+ effect(() => {
420
+ const menu = this.starMenuTrigger();
421
+ this.trigger.menuTemplateRef = menu.template();
422
+ this.trigger.menuData = { $implicit: menu.items() };
423
+ });
424
+ afterNextRender(() => this.syncInnerButton(false));
425
+ this.trigger.opened.pipe(takeUntilDestroyed()).subscribe(() => this.syncInnerButton(true));
426
+ this.trigger.closed.pipe(takeUntilDestroyed()).subscribe(() => this.syncInnerButton(false));
427
+ this.adaptWrapperHost();
428
+ }
429
+ adaptWrapperHost() {
430
+ const host = this.host.nativeElement;
431
+ if (host.matches("button, a")) return;
432
+ host.focus = (options) => host.querySelector("button")?.focus(options);
433
+ host.addEventListener("keydown", (event) => {
434
+ const inner = event.target?.closest("button");
435
+ if (inner && host.contains(inner) && (event.key === "Enter" || event.key === " ")) event.stopPropagation();
436
+ }, true);
437
+ }
438
+ syncInnerButton(open) {
439
+ const host = this.host.nativeElement;
440
+ if (host.matches("button, a")) return;
441
+ const inner = host.querySelector("button");
442
+ if (!inner) return;
443
+ host.setAttribute("role", "none");
444
+ inner.setAttribute("aria-haspopup", "menu");
445
+ inner.setAttribute("aria-expanded", String(open));
446
+ }
447
+ static ɵfac = i0.ɵɵngDeclareFactory({
448
+ minVersion: "12.0.0",
449
+ version: "22.2.6",
450
+ ngImport: i0,
451
+ type: StarMenuTrigger,
452
+ deps: [],
453
+ target: i0.ɵɵFactoryTarget.Directive
454
+ });
455
+ static ɵdir = i0.ɵɵngDeclareDirective({
456
+ minVersion: "17.1.0",
457
+ version: "22.2.6",
458
+ type: StarMenuTrigger,
459
+ isStandalone: true,
460
+ selector: "[starMenuTrigger]",
461
+ inputs: { starMenuTrigger: {
462
+ classPropertyName: "starMenuTrigger",
463
+ publicName: "starMenuTrigger",
464
+ isSignal: true,
465
+ isRequired: true,
466
+ transformFunction: null
467
+ } },
468
+ hostDirectives: [{
469
+ directive: i1.CdkMenuTrigger,
470
+ outputs: [
471
+ "cdkMenuOpened",
472
+ "menuOpened",
473
+ "cdkMenuClosed",
474
+ "menuClosed"
475
+ ]
476
+ }],
477
+ ngImport: i0
478
+ });
479
+ };
480
+ i0.ɵɵngDeclareClassMetadata({
481
+ minVersion: "12.0.0",
482
+ version: "22.2.6",
483
+ ngImport: i0,
484
+ type: StarMenuTrigger,
485
+ decorators: [{
486
+ type: Directive,
487
+ args: [{
488
+ selector: "[starMenuTrigger]",
489
+ hostDirectives: [{
490
+ directive: CdkMenuTrigger,
491
+ outputs: ["cdkMenuOpened: menuOpened", "cdkMenuClosed: menuClosed"]
492
+ }]
493
+ }]
494
+ }],
495
+ ctorParameters: () => [],
496
+ propDecorators: { starMenuTrigger: [{
497
+ type: i0.Input,
498
+ args: [{
499
+ isSignal: true,
500
+ alias: "starMenuTrigger",
501
+ required: true
502
+ }]
503
+ }] }
504
+ });
505
+ var StarSplitButton = class StarSplitButton {
506
+ text = inject(STAR_UI_TEXT);
507
+ label = input.required(...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
508
+ icon = input(null, ...ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []);
509
+ items = input([], ...ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []);
510
+ variant = input("primary", ...ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []);
511
+ size = input("md", ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
512
+ disabled = input(false, {
513
+ ...ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {},
514
+ transform: booleanAttribute
515
+ });
516
+ pressed = output();
517
+ itemClick = output();
518
+ static ɵfac = i0.ɵɵngDeclareFactory({
519
+ minVersion: "12.0.0",
520
+ version: "22.2.6",
521
+ ngImport: i0,
522
+ type: StarSplitButton,
523
+ deps: [],
524
+ target: i0.ɵɵFactoryTarget.Component
525
+ });
526
+ static ɵcmp = i0.ɵɵngDeclareComponent({
527
+ minVersion: "17.1.0",
528
+ version: "22.2.6",
529
+ type: StarSplitButton,
530
+ isStandalone: true,
531
+ selector: "star-split-button",
532
+ inputs: {
533
+ label: {
534
+ classPropertyName: "label",
535
+ publicName: "label",
536
+ isSignal: true,
537
+ isRequired: true,
538
+ transformFunction: null
539
+ },
540
+ icon: {
541
+ classPropertyName: "icon",
542
+ publicName: "icon",
543
+ isSignal: true,
544
+ isRequired: false,
545
+ transformFunction: null
546
+ },
547
+ items: {
548
+ classPropertyName: "items",
549
+ publicName: "items",
550
+ isSignal: true,
551
+ isRequired: false,
552
+ transformFunction: null
553
+ },
554
+ variant: {
555
+ classPropertyName: "variant",
556
+ publicName: "variant",
557
+ isSignal: true,
558
+ isRequired: false,
559
+ transformFunction: null
560
+ },
561
+ size: {
562
+ classPropertyName: "size",
563
+ publicName: "size",
564
+ isSignal: true,
565
+ isRequired: false,
566
+ transformFunction: null
567
+ },
568
+ disabled: {
569
+ classPropertyName: "disabled",
570
+ publicName: "disabled",
571
+ isSignal: true,
572
+ isRequired: false,
573
+ transformFunction: null
574
+ }
575
+ },
576
+ outputs: {
577
+ pressed: "pressed",
578
+ itemClick: "itemClick"
579
+ },
580
+ host: { classAttribute: "star-split" },
581
+ ngImport: i0,
582
+ template: `
583
+ <star-button
584
+ class="star-split__main"
585
+ [variant]="variant()"
586
+ [size]="size()"
587
+ [leadingIcon]="icon()"
588
+ [disabled]="disabled()"
589
+ (pressed)="pressed.emit($event)"
590
+ >
591
+ {{ label() }}
592
+ </star-button>
593
+ <button
594
+ type="button"
595
+ class="star-btn star-split__toggle"
596
+ [class]="'star-btn star-split__toggle star-btn--' + variant() + ' star-btn--' + size()"
597
+ [disabled]="disabled()"
598
+ [attr.aria-label]="text.moreActions"
599
+ [starMenuTrigger]="menu"
600
+ >
601
+ <i class="ph-bold ph-caret-down" aria-hidden="true"></i>
602
+ </button>
603
+ <star-menu #menu [items]="items()" (itemClick)="itemClick.emit($event)" />
604
+ `,
605
+ isInline: true,
606
+ dependencies: [
607
+ {
608
+ kind: "component",
609
+ type: StarButton,
610
+ selector: "star-button",
611
+ inputs: [
612
+ "variant",
613
+ "size",
614
+ "type",
615
+ "disabled",
616
+ "loading",
617
+ "leadingIcon",
618
+ "trailingIcon",
619
+ "iconOnly",
620
+ "fullWidth",
621
+ "ariaLabel"
622
+ ],
623
+ outputs: ["pressed"]
624
+ },
625
+ {
626
+ kind: "component",
627
+ type: StarMenu,
628
+ selector: "star-menu",
629
+ inputs: [
630
+ "items",
631
+ "inline",
632
+ "ariaLabel"
633
+ ],
634
+ outputs: ["itemClick"]
635
+ },
636
+ {
637
+ kind: "directive",
638
+ type: StarMenuTrigger,
639
+ selector: "[starMenuTrigger]",
640
+ inputs: ["starMenuTrigger"]
641
+ }
642
+ ],
643
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
644
+ });
645
+ };
646
+ i0.ɵɵngDeclareClassMetadata({
647
+ minVersion: "12.0.0",
648
+ version: "22.2.6",
649
+ ngImport: i0,
650
+ type: StarSplitButton,
651
+ decorators: [{
652
+ type: Component,
653
+ args: [{
654
+ selector: "star-split-button",
655
+ imports: [
656
+ StarButton,
657
+ StarMenu,
658
+ StarMenuTrigger
659
+ ],
660
+ changeDetection: ChangeDetectionStrategy.OnPush,
661
+ host: { class: "star-split" },
662
+ template: `
663
+ <star-button
664
+ class="star-split__main"
665
+ [variant]="variant()"
666
+ [size]="size()"
667
+ [leadingIcon]="icon()"
668
+ [disabled]="disabled()"
669
+ (pressed)="pressed.emit($event)"
670
+ >
671
+ {{ label() }}
672
+ </star-button>
673
+ <button
674
+ type="button"
675
+ class="star-btn star-split__toggle"
676
+ [class]="'star-btn star-split__toggle star-btn--' + variant() + ' star-btn--' + size()"
677
+ [disabled]="disabled()"
678
+ [attr.aria-label]="text.moreActions"
679
+ [starMenuTrigger]="menu"
680
+ >
681
+ <i class="ph-bold ph-caret-down" aria-hidden="true"></i>
682
+ </button>
683
+ <star-menu #menu [items]="items()" (itemClick)="itemClick.emit($event)" />
684
+ `
685
+ }]
686
+ }],
687
+ propDecorators: {
688
+ label: [{
689
+ type: i0.Input,
690
+ args: [{
691
+ isSignal: true,
692
+ alias: "label",
693
+ required: true
694
+ }]
695
+ }],
696
+ icon: [{
697
+ type: i0.Input,
698
+ args: [{
699
+ isSignal: true,
700
+ alias: "icon",
701
+ required: false
702
+ }]
703
+ }],
704
+ items: [{
705
+ type: i0.Input,
706
+ args: [{
707
+ isSignal: true,
708
+ alias: "items",
709
+ required: false
710
+ }]
711
+ }],
712
+ variant: [{
713
+ type: i0.Input,
714
+ args: [{
715
+ isSignal: true,
716
+ alias: "variant",
717
+ required: false
718
+ }]
719
+ }],
720
+ size: [{
721
+ type: i0.Input,
722
+ args: [{
723
+ isSignal: true,
724
+ alias: "size",
725
+ required: false
726
+ }]
727
+ }],
728
+ disabled: [{
729
+ type: i0.Input,
730
+ args: [{
731
+ isSignal: true,
732
+ alias: "disabled",
733
+ required: false
734
+ }]
735
+ }],
736
+ pressed: [{
737
+ type: i0.Output,
738
+ args: ["pressed"]
739
+ }],
740
+ itemClick: [{
741
+ type: i0.Output,
742
+ args: ["itemClick"]
743
+ }]
744
+ }
745
+ });
746
+ var StarMegaMenu = class StarMegaMenu {
747
+ directionSync = inject(StarDirectionService);
748
+ items = input([], ...ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []);
749
+ ariaLabel = input(null, ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
750
+ itemClick = output();
751
+ positions = STAR_MENU_POSITIONS;
752
+ panelId = `star-mega-${Math.random().toString(36).slice(2)}`;
753
+ run(item) {
754
+ if (item.disabled) return;
755
+ item.command?.(item);
756
+ this.itemClick.emit(item);
757
+ }
758
+ static ɵfac = i0.ɵɵngDeclareFactory({
759
+ minVersion: "12.0.0",
760
+ version: "22.2.6",
761
+ ngImport: i0,
762
+ type: StarMegaMenu,
763
+ deps: [],
764
+ target: i0.ɵɵFactoryTarget.Component
765
+ });
766
+ static ɵcmp = i0.ɵɵngDeclareComponent({
767
+ minVersion: "17.0.0",
768
+ version: "22.2.6",
769
+ type: StarMegaMenu,
770
+ isStandalone: true,
771
+ selector: "star-mega-menu",
772
+ inputs: {
773
+ items: {
774
+ classPropertyName: "items",
775
+ publicName: "items",
776
+ isSignal: true,
777
+ isRequired: false,
778
+ transformFunction: null
779
+ },
780
+ ariaLabel: {
781
+ classPropertyName: "ariaLabel",
782
+ publicName: "ariaLabel",
783
+ isSignal: true,
784
+ isRequired: false,
785
+ transformFunction: null
786
+ }
787
+ },
788
+ outputs: { itemClick: "itemClick" },
789
+ host: { classAttribute: "star-menubar star-mega-menu" },
790
+ ngImport: i0,
791
+ template: `
792
+ <div class="star-menubar__bar" cdkMenuBar [attr.aria-label]="ariaLabel()">
793
+ @for (item of items(); track $index) {
794
+ @if (item.items?.length) {
795
+ <button
796
+ type="button"
797
+ class="star-menubar__item"
798
+ cdkMenuItem
799
+ [cdkMenuTriggerFor]="panel"
800
+ [cdkMenuTriggerData]="{ $implicit: item.items }"
801
+ [cdkMenuPosition]="positions"
802
+ [cdkMenuItemDisabled]="!!item.disabled"
803
+ >
804
+ @if (item.icon) {
805
+ <i [class]="item.icon" aria-hidden="true"></i>
806
+ }
807
+ {{ item.label }}
808
+ <i class="ph-bold ph-caret-down star-menubar__caret" aria-hidden="true"></i>
809
+ </button>
810
+ } @else if (item.routerLink) {
811
+ <a
812
+ class="star-menubar__item"
813
+ cdkMenuItem
814
+ [routerLink]="item.routerLink"
815
+ [cdkMenuItemDisabled]="!!item.disabled"
816
+ (cdkMenuItemTriggered)="run(item)"
817
+ >
818
+ @if (item.icon) {
819
+ <i [class]="item.icon" aria-hidden="true"></i>
820
+ }
821
+ {{ item.label }}
822
+ </a>
823
+ } @else {
824
+ <button
825
+ type="button"
826
+ class="star-menubar__item"
827
+ cdkMenuItem
828
+ [cdkMenuItemDisabled]="!!item.disabled"
829
+ (cdkMenuItemTriggered)="run(item)"
830
+ >
831
+ @if (item.icon) {
832
+ <i [class]="item.icon" aria-hidden="true"></i>
833
+ }
834
+ {{ item.label }}
835
+ </button>
836
+ }
837
+ }
838
+ </div>
839
+
840
+ <ng-template #panel let-columns>
841
+ <div class="star-menu star-mega-menu__panel" cdkMenu>
842
+ @for (column of columns; track $index; let c = $index) {
843
+ <div
844
+ class="star-mega-menu__column"
845
+ cdkMenuGroup
846
+ [attr.aria-labelledby]="column.label ? panelId + '-' + c : null"
847
+ >
848
+ @if (column.label) {
849
+ <div class="star-mega-menu__heading" [id]="panelId + '-' + c">{{ column.label }}</div>
850
+ }
851
+ @for (entry of column.items ?? []; track $index) {
852
+ @if (entry.separator) {
853
+ <div class="star-menu__separator" role="separator"></div>
854
+ } @else if (entry.routerLink) {
855
+ <a
856
+ class="star-menu__item"
857
+ cdkMenuItem
858
+ [routerLink]="entry.routerLink"
859
+ [cdkMenuItemDisabled]="!!entry.disabled"
860
+ (cdkMenuItemTriggered)="run(entry)"
861
+ >
862
+ @if (entry.icon) {
863
+ <i class="star-menu__icon" [class]="entry.icon" aria-hidden="true"></i>
864
+ }
865
+ <span class="star-menu__label">{{ entry.label }}</span>
866
+ </a>
867
+ } @else if (entry.url) {
868
+ <a
869
+ class="star-menu__item"
870
+ cdkMenuItem
871
+ [href]="entry.url"
872
+ [cdkMenuItemDisabled]="!!entry.disabled"
873
+ (cdkMenuItemTriggered)="run(entry)"
874
+ >
875
+ @if (entry.icon) {
876
+ <i class="star-menu__icon" [class]="entry.icon" aria-hidden="true"></i>
877
+ }
878
+ <span class="star-menu__label">{{ entry.label }}</span>
879
+ </a>
880
+ } @else {
881
+ <button
882
+ type="button"
883
+ class="star-menu__item"
884
+ cdkMenuItem
885
+ [class.star-menu__item--danger]="entry.danger"
886
+ [cdkMenuItemDisabled]="!!entry.disabled"
887
+ (cdkMenuItemTriggered)="run(entry)"
888
+ >
889
+ @if (entry.icon) {
890
+ <i class="star-menu__icon" [class]="entry.icon" aria-hidden="true"></i>
891
+ }
892
+ <span class="star-menu__label">{{ entry.label }}</span>
893
+ </button>
894
+ }
895
+ }
896
+ </div>
897
+ }
898
+ </div>
899
+ </ng-template>
900
+ `,
901
+ isInline: true,
902
+ dependencies: [
903
+ {
904
+ kind: "directive",
905
+ type: CdkMenu,
906
+ selector: "[cdkMenu]",
907
+ outputs: ["closed"],
908
+ exportAs: ["cdkMenu"]
909
+ },
910
+ {
911
+ kind: "directive",
912
+ type: CdkMenuBar,
913
+ selector: "[cdkMenuBar]",
914
+ exportAs: ["cdkMenuBar"]
915
+ },
916
+ {
917
+ kind: "directive",
918
+ type: CdkMenuGroup,
919
+ selector: "[cdkMenuGroup]",
920
+ exportAs: ["cdkMenuGroup"]
921
+ },
922
+ {
923
+ kind: "directive",
924
+ type: CdkMenuItem,
925
+ selector: "[cdkMenuItem]",
926
+ inputs: ["cdkMenuItemDisabled", "cdkMenuitemTypeaheadLabel"],
927
+ outputs: ["cdkMenuItemTriggered"],
928
+ exportAs: ["cdkMenuItem"]
929
+ },
930
+ {
931
+ kind: "directive",
932
+ type: CdkMenuTrigger,
933
+ selector: "[cdkMenuTriggerFor]",
934
+ inputs: [
935
+ "cdkMenuTriggerFor",
936
+ "cdkMenuPosition",
937
+ "cdkMenuTriggerData",
938
+ "cdkMenuTriggerTransformOriginOn"
939
+ ],
940
+ outputs: ["cdkMenuOpened", "cdkMenuClosed"],
941
+ exportAs: ["cdkMenuTriggerFor"]
942
+ },
943
+ {
944
+ kind: "directive",
945
+ type: RouterLink,
946
+ selector: "[routerLink]",
947
+ inputs: [
948
+ "target",
949
+ "queryParams",
950
+ "fragment",
951
+ "queryParamsHandling",
952
+ "state",
953
+ "info",
954
+ "relativeTo",
955
+ "preserveFragment",
956
+ "skipLocationChange",
957
+ "replaceUrl",
958
+ "browserUrl",
959
+ "routerLink"
960
+ ]
961
+ },
962
+ {
963
+ kind: "directive",
964
+ type: StarMenuInDialog,
965
+ selector: "[cdkMenuTriggerFor]"
966
+ }
967
+ ],
968
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
969
+ });
970
+ };
971
+ i0.ɵɵngDeclareClassMetadata({
972
+ minVersion: "12.0.0",
973
+ version: "22.2.6",
974
+ ngImport: i0,
975
+ type: StarMegaMenu,
976
+ decorators: [{
977
+ type: Component,
978
+ args: [{
979
+ selector: "star-mega-menu",
980
+ imports: [
981
+ CdkMenu,
982
+ CdkMenuBar,
983
+ CdkMenuGroup,
984
+ CdkMenuItem,
985
+ CdkMenuTrigger,
986
+ RouterLink,
987
+ StarMenuInDialog
988
+ ],
989
+ changeDetection: ChangeDetectionStrategy.OnPush,
990
+ host: { class: "star-menubar star-mega-menu" },
991
+ template: `
992
+ <div class="star-menubar__bar" cdkMenuBar [attr.aria-label]="ariaLabel()">
993
+ @for (item of items(); track $index) {
994
+ @if (item.items?.length) {
995
+ <button
996
+ type="button"
997
+ class="star-menubar__item"
998
+ cdkMenuItem
999
+ [cdkMenuTriggerFor]="panel"
1000
+ [cdkMenuTriggerData]="{ $implicit: item.items }"
1001
+ [cdkMenuPosition]="positions"
1002
+ [cdkMenuItemDisabled]="!!item.disabled"
1003
+ >
1004
+ @if (item.icon) {
1005
+ <i [class]="item.icon" aria-hidden="true"></i>
1006
+ }
1007
+ {{ item.label }}
1008
+ <i class="ph-bold ph-caret-down star-menubar__caret" aria-hidden="true"></i>
1009
+ </button>
1010
+ } @else if (item.routerLink) {
1011
+ <a
1012
+ class="star-menubar__item"
1013
+ cdkMenuItem
1014
+ [routerLink]="item.routerLink"
1015
+ [cdkMenuItemDisabled]="!!item.disabled"
1016
+ (cdkMenuItemTriggered)="run(item)"
1017
+ >
1018
+ @if (item.icon) {
1019
+ <i [class]="item.icon" aria-hidden="true"></i>
1020
+ }
1021
+ {{ item.label }}
1022
+ </a>
1023
+ } @else {
1024
+ <button
1025
+ type="button"
1026
+ class="star-menubar__item"
1027
+ cdkMenuItem
1028
+ [cdkMenuItemDisabled]="!!item.disabled"
1029
+ (cdkMenuItemTriggered)="run(item)"
1030
+ >
1031
+ @if (item.icon) {
1032
+ <i [class]="item.icon" aria-hidden="true"></i>
1033
+ }
1034
+ {{ item.label }}
1035
+ </button>
1036
+ }
1037
+ }
1038
+ </div>
1039
+
1040
+ <ng-template #panel let-columns>
1041
+ <div class="star-menu star-mega-menu__panel" cdkMenu>
1042
+ @for (column of columns; track $index; let c = $index) {
1043
+ <div
1044
+ class="star-mega-menu__column"
1045
+ cdkMenuGroup
1046
+ [attr.aria-labelledby]="column.label ? panelId + '-' + c : null"
1047
+ >
1048
+ @if (column.label) {
1049
+ <div class="star-mega-menu__heading" [id]="panelId + '-' + c">{{ column.label }}</div>
1050
+ }
1051
+ @for (entry of column.items ?? []; track $index) {
1052
+ @if (entry.separator) {
1053
+ <div class="star-menu__separator" role="separator"></div>
1054
+ } @else if (entry.routerLink) {
1055
+ <a
1056
+ class="star-menu__item"
1057
+ cdkMenuItem
1058
+ [routerLink]="entry.routerLink"
1059
+ [cdkMenuItemDisabled]="!!entry.disabled"
1060
+ (cdkMenuItemTriggered)="run(entry)"
1061
+ >
1062
+ @if (entry.icon) {
1063
+ <i class="star-menu__icon" [class]="entry.icon" aria-hidden="true"></i>
1064
+ }
1065
+ <span class="star-menu__label">{{ entry.label }}</span>
1066
+ </a>
1067
+ } @else if (entry.url) {
1068
+ <a
1069
+ class="star-menu__item"
1070
+ cdkMenuItem
1071
+ [href]="entry.url"
1072
+ [cdkMenuItemDisabled]="!!entry.disabled"
1073
+ (cdkMenuItemTriggered)="run(entry)"
1074
+ >
1075
+ @if (entry.icon) {
1076
+ <i class="star-menu__icon" [class]="entry.icon" aria-hidden="true"></i>
1077
+ }
1078
+ <span class="star-menu__label">{{ entry.label }}</span>
1079
+ </a>
1080
+ } @else {
1081
+ <button
1082
+ type="button"
1083
+ class="star-menu__item"
1084
+ cdkMenuItem
1085
+ [class.star-menu__item--danger]="entry.danger"
1086
+ [cdkMenuItemDisabled]="!!entry.disabled"
1087
+ (cdkMenuItemTriggered)="run(entry)"
1088
+ >
1089
+ @if (entry.icon) {
1090
+ <i class="star-menu__icon" [class]="entry.icon" aria-hidden="true"></i>
1091
+ }
1092
+ <span class="star-menu__label">{{ entry.label }}</span>
1093
+ </button>
1094
+ }
1095
+ }
1096
+ </div>
1097
+ }
1098
+ </div>
1099
+ </ng-template>
1100
+ `
1101
+ }]
1102
+ }],
1103
+ propDecorators: {
1104
+ items: [{
1105
+ type: i0.Input,
1106
+ args: [{
1107
+ isSignal: true,
1108
+ alias: "items",
1109
+ required: false
1110
+ }]
1111
+ }],
1112
+ ariaLabel: [{
1113
+ type: i0.Input,
1114
+ args: [{
1115
+ isSignal: true,
1116
+ alias: "ariaLabel",
1117
+ required: false
1118
+ }]
1119
+ }],
1120
+ itemClick: [{
1121
+ type: i0.Output,
1122
+ args: ["itemClick"]
1123
+ }]
1124
+ }
1125
+ });
1126
+ var StarMenubar = class StarMenubar {
1127
+ directionSync = inject(StarDirectionService);
1128
+ items = input([], ...ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []);
1129
+ ariaLabel = input(null, ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
1130
+ itemClick = output();
1131
+ run(item) {
1132
+ if (item.disabled) return;
1133
+ item.command?.(item);
1134
+ this.itemClick.emit(item);
1135
+ }
1136
+ static ɵfac = i0.ɵɵngDeclareFactory({
1137
+ minVersion: "12.0.0",
1138
+ version: "22.2.6",
1139
+ ngImport: i0,
1140
+ type: StarMenubar,
1141
+ deps: [],
1142
+ target: i0.ɵɵFactoryTarget.Component
1143
+ });
1144
+ static ɵcmp = i0.ɵɵngDeclareComponent({
1145
+ minVersion: "17.0.0",
1146
+ version: "22.2.6",
1147
+ type: StarMenubar,
1148
+ isStandalone: true,
1149
+ selector: "star-menubar",
1150
+ inputs: {
1151
+ items: {
1152
+ classPropertyName: "items",
1153
+ publicName: "items",
1154
+ isSignal: true,
1155
+ isRequired: false,
1156
+ transformFunction: null
1157
+ },
1158
+ ariaLabel: {
1159
+ classPropertyName: "ariaLabel",
1160
+ publicName: "ariaLabel",
1161
+ isSignal: true,
1162
+ isRequired: false,
1163
+ transformFunction: null
1164
+ }
1165
+ },
1166
+ outputs: { itemClick: "itemClick" },
1167
+ host: { classAttribute: "star-menubar" },
1168
+ ngImport: i0,
1169
+ template: `
1170
+ <ng-content select="[starMenubarStart]" />
1171
+ <div class="star-menubar__bar" cdkMenuBar [attr.aria-label]="ariaLabel()">
1172
+ @for (item of items(); track $index) {
1173
+ @if (item.items?.length) {
1174
+ <button
1175
+ type="button"
1176
+ class="star-menubar__item"
1177
+ cdkMenuItem
1178
+ [cdkMenuTriggerFor]="submenu.template()"
1179
+ [cdkMenuTriggerData]="{ $implicit: item.items }"
1180
+ [cdkMenuItemDisabled]="!!item.disabled"
1181
+ >
1182
+ @if (item.icon) {
1183
+ <i [class]="item.icon" aria-hidden="true"></i>
1184
+ }
1185
+ {{ item.label }}
1186
+ <i class="ph-bold ph-caret-down star-menubar__caret" aria-hidden="true"></i>
1187
+ </button>
1188
+ } @else if (item.routerLink) {
1189
+ <a
1190
+ class="star-menubar__item"
1191
+ cdkMenuItem
1192
+ routerLinkActive="star-menubar__item--active"
1193
+ [routerLink]="item.routerLink"
1194
+ [cdkMenuItemDisabled]="!!item.disabled"
1195
+ (cdkMenuItemTriggered)="run(item)"
1196
+ >
1197
+ @if (item.icon) {
1198
+ <i [class]="item.icon" aria-hidden="true"></i>
1199
+ }
1200
+ {{ item.label }}
1201
+ </a>
1202
+ } @else {
1203
+ <button
1204
+ type="button"
1205
+ class="star-menubar__item"
1206
+ cdkMenuItem
1207
+ [cdkMenuItemDisabled]="!!item.disabled"
1208
+ (cdkMenuItemTriggered)="run(item)"
1209
+ >
1210
+ @if (item.icon) {
1211
+ <i [class]="item.icon" aria-hidden="true"></i>
1212
+ }
1213
+ {{ item.label }}
1214
+ </button>
1215
+ }
1216
+ }
1217
+ </div>
1218
+ <span class="star-menubar__end"><ng-content select="[starMenubarEnd]" /></span>
1219
+ <star-menu #submenu (itemClick)="itemClick.emit($event)" />
1220
+ `,
1221
+ isInline: true,
1222
+ dependencies: [
1223
+ {
1224
+ kind: "directive",
1225
+ type: CdkMenuBar,
1226
+ selector: "[cdkMenuBar]",
1227
+ exportAs: ["cdkMenuBar"]
1228
+ },
1229
+ {
1230
+ kind: "directive",
1231
+ type: CdkMenuItem,
1232
+ selector: "[cdkMenuItem]",
1233
+ inputs: ["cdkMenuItemDisabled", "cdkMenuitemTypeaheadLabel"],
1234
+ outputs: ["cdkMenuItemTriggered"],
1235
+ exportAs: ["cdkMenuItem"]
1236
+ },
1237
+ {
1238
+ kind: "directive",
1239
+ type: CdkMenuTrigger,
1240
+ selector: "[cdkMenuTriggerFor]",
1241
+ inputs: [
1242
+ "cdkMenuTriggerFor",
1243
+ "cdkMenuPosition",
1244
+ "cdkMenuTriggerData",
1245
+ "cdkMenuTriggerTransformOriginOn"
1246
+ ],
1247
+ outputs: ["cdkMenuOpened", "cdkMenuClosed"],
1248
+ exportAs: ["cdkMenuTriggerFor"]
1249
+ },
1250
+ {
1251
+ kind: "directive",
1252
+ type: RouterLink,
1253
+ selector: "[routerLink]",
1254
+ inputs: [
1255
+ "target",
1256
+ "queryParams",
1257
+ "fragment",
1258
+ "queryParamsHandling",
1259
+ "state",
1260
+ "info",
1261
+ "relativeTo",
1262
+ "preserveFragment",
1263
+ "skipLocationChange",
1264
+ "replaceUrl",
1265
+ "browserUrl",
1266
+ "routerLink"
1267
+ ]
1268
+ },
1269
+ {
1270
+ kind: "directive",
1271
+ type: RouterLinkActive,
1272
+ selector: "[routerLinkActive]",
1273
+ inputs: [
1274
+ "routerLinkActiveOptions",
1275
+ "ariaCurrentWhenActive",
1276
+ "routerLinkActive"
1277
+ ],
1278
+ outputs: ["isActiveChange"],
1279
+ exportAs: ["routerLinkActive"]
1280
+ },
1281
+ {
1282
+ kind: "component",
1283
+ type: StarMenu,
1284
+ selector: "star-menu",
1285
+ inputs: [
1286
+ "items",
1287
+ "inline",
1288
+ "ariaLabel"
1289
+ ],
1290
+ outputs: ["itemClick"]
1291
+ },
1292
+ {
1293
+ kind: "directive",
1294
+ type: StarMenuInDialog,
1295
+ selector: "[cdkMenuTriggerFor]"
1296
+ }
1297
+ ],
1298
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
1299
+ });
1300
+ };
1301
+ i0.ɵɵngDeclareClassMetadata({
1302
+ minVersion: "12.0.0",
1303
+ version: "22.2.6",
1304
+ ngImport: i0,
1305
+ type: StarMenubar,
1306
+ decorators: [{
1307
+ type: Component,
1308
+ args: [{
1309
+ selector: "star-menubar",
1310
+ imports: [
1311
+ CdkMenuBar,
1312
+ CdkMenuItem,
1313
+ CdkMenuTrigger,
1314
+ RouterLink,
1315
+ RouterLinkActive,
1316
+ StarMenu,
1317
+ StarMenuInDialog
1318
+ ],
1319
+ changeDetection: ChangeDetectionStrategy.OnPush,
1320
+ host: { class: "star-menubar" },
1321
+ template: `
1322
+ <ng-content select="[starMenubarStart]" />
1323
+ <div class="star-menubar__bar" cdkMenuBar [attr.aria-label]="ariaLabel()">
1324
+ @for (item of items(); track $index) {
1325
+ @if (item.items?.length) {
1326
+ <button
1327
+ type="button"
1328
+ class="star-menubar__item"
1329
+ cdkMenuItem
1330
+ [cdkMenuTriggerFor]="submenu.template()"
1331
+ [cdkMenuTriggerData]="{ $implicit: item.items }"
1332
+ [cdkMenuItemDisabled]="!!item.disabled"
1333
+ >
1334
+ @if (item.icon) {
1335
+ <i [class]="item.icon" aria-hidden="true"></i>
1336
+ }
1337
+ {{ item.label }}
1338
+ <i class="ph-bold ph-caret-down star-menubar__caret" aria-hidden="true"></i>
1339
+ </button>
1340
+ } @else if (item.routerLink) {
1341
+ <a
1342
+ class="star-menubar__item"
1343
+ cdkMenuItem
1344
+ routerLinkActive="star-menubar__item--active"
1345
+ [routerLink]="item.routerLink"
1346
+ [cdkMenuItemDisabled]="!!item.disabled"
1347
+ (cdkMenuItemTriggered)="run(item)"
1348
+ >
1349
+ @if (item.icon) {
1350
+ <i [class]="item.icon" aria-hidden="true"></i>
1351
+ }
1352
+ {{ item.label }}
1353
+ </a>
1354
+ } @else {
1355
+ <button
1356
+ type="button"
1357
+ class="star-menubar__item"
1358
+ cdkMenuItem
1359
+ [cdkMenuItemDisabled]="!!item.disabled"
1360
+ (cdkMenuItemTriggered)="run(item)"
1361
+ >
1362
+ @if (item.icon) {
1363
+ <i [class]="item.icon" aria-hidden="true"></i>
1364
+ }
1365
+ {{ item.label }}
1366
+ </button>
1367
+ }
1368
+ }
1369
+ </div>
1370
+ <span class="star-menubar__end"><ng-content select="[starMenubarEnd]" /></span>
1371
+ <star-menu #submenu (itemClick)="itemClick.emit($event)" />
1372
+ `
1373
+ }]
1374
+ }],
1375
+ propDecorators: {
1376
+ items: [{
1377
+ type: i0.Input,
1378
+ args: [{
1379
+ isSignal: true,
1380
+ alias: "items",
1381
+ required: false
1382
+ }]
1383
+ }],
1384
+ ariaLabel: [{
1385
+ type: i0.Input,
1386
+ args: [{
1387
+ isSignal: true,
1388
+ alias: "ariaLabel",
1389
+ required: false
1390
+ }]
1391
+ }],
1392
+ itemClick: [{
1393
+ type: i0.Output,
1394
+ args: ["itemClick"]
1395
+ }]
1396
+ }
1397
+ });
1398
+ var StarContextMenu = class StarContextMenu {
1399
+ directionSync = inject(StarDirectionService);
1400
+ starContextMenu = input.required(...ngDevMode ? [{ debugName: "starContextMenu" }] : /* istanbul ignore next */ []);
1401
+ trigger = inject(CdkContextMenuTrigger);
1402
+ constructor() {
1403
+ this.trigger.menuPosition = STAR_MENU_POSITIONS;
1404
+ keepMenuInsideDialog(this.trigger, inject(ElementRef).nativeElement);
1405
+ effect(() => {
1406
+ const menu = this.starContextMenu();
1407
+ this.trigger.menuTemplateRef = menu.template();
1408
+ this.trigger.menuData = { $implicit: menu.items() };
1409
+ });
1410
+ }
1411
+ static ɵfac = i0.ɵɵngDeclareFactory({
1412
+ minVersion: "12.0.0",
1413
+ version: "22.2.6",
1414
+ ngImport: i0,
1415
+ type: StarContextMenu,
1416
+ deps: [],
1417
+ target: i0.ɵɵFactoryTarget.Directive
1418
+ });
1419
+ static ɵdir = i0.ɵɵngDeclareDirective({
1420
+ minVersion: "17.1.0",
1421
+ version: "22.2.6",
1422
+ type: StarContextMenu,
1423
+ isStandalone: true,
1424
+ selector: "[starContextMenu]",
1425
+ inputs: { starContextMenu: {
1426
+ classPropertyName: "starContextMenu",
1427
+ publicName: "starContextMenu",
1428
+ isSignal: true,
1429
+ isRequired: true,
1430
+ transformFunction: null
1431
+ } },
1432
+ hostDirectives: [{
1433
+ directive: i1.CdkContextMenuTrigger,
1434
+ outputs: [
1435
+ "cdkContextMenuOpened",
1436
+ "menuOpened",
1437
+ "cdkContextMenuClosed",
1438
+ "menuClosed"
1439
+ ]
1440
+ }],
1441
+ ngImport: i0
1442
+ });
1443
+ };
1444
+ i0.ɵɵngDeclareClassMetadata({
1445
+ minVersion: "12.0.0",
1446
+ version: "22.2.6",
1447
+ ngImport: i0,
1448
+ type: StarContextMenu,
1449
+ decorators: [{
1450
+ type: Directive,
1451
+ args: [{
1452
+ selector: "[starContextMenu]",
1453
+ hostDirectives: [{
1454
+ directive: CdkContextMenuTrigger,
1455
+ outputs: ["cdkContextMenuOpened: menuOpened", "cdkContextMenuClosed: menuClosed"]
1456
+ }]
1457
+ }]
1458
+ }],
1459
+ ctorParameters: () => [],
1460
+ propDecorators: { starContextMenu: [{
1461
+ type: i0.Input,
1462
+ args: [{
1463
+ isSignal: true,
1464
+ alias: "starContextMenu",
1465
+ required: true
1466
+ }]
1467
+ }] }
1468
+ });
1469
+ var StarPanelMenu = class StarPanelMenu {
1470
+ id = inject(_IdGenerator).getId("star-panel-menu-");
1471
+ items = input([], ...ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []);
1472
+ ariaLabel = input(null, ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
1473
+ single = input(false, {
1474
+ ...ngDevMode ? { debugName: "single" } : /* istanbul ignore next */ {},
1475
+ transform: booleanAttribute
1476
+ });
1477
+ expandedKeys = model([], ...ngDevMode ? [{ debugName: "expandedKeys" }] : /* istanbul ignore next */ []);
1478
+ itemClick = output();
1479
+ isOpen(key) {
1480
+ return this.expandedKeys().includes(key);
1481
+ }
1482
+ regionId(key) {
1483
+ return `${this.id}-${key.replaceAll(".", "-")}`;
1484
+ }
1485
+ toggle(key) {
1486
+ if (this.isOpen(key)) {
1487
+ this.expandedKeys.update((keys) => keys.filter((open) => open !== key && !open.startsWith(`${key}.`)));
1488
+ return;
1489
+ }
1490
+ const parent = key.includes(".") ? key.slice(0, key.lastIndexOf(".")) : "";
1491
+ const isSibling = (open) => (open.includes(".") ? open.slice(0, open.lastIndexOf(".")) : "") === parent;
1492
+ this.expandedKeys.update((keys) => [...this.single() ? keys.filter((open) => !isSibling(open) && !keys.some((k) => isSibling(k) && open.startsWith(`${k}.`))) : keys, key]);
1493
+ }
1494
+ run(item) {
1495
+ if (item.disabled) return;
1496
+ item.command?.(item);
1497
+ this.itemClick.emit(item);
1498
+ }
1499
+ static ɵfac = i0.ɵɵngDeclareFactory({
1500
+ minVersion: "12.0.0",
1501
+ version: "22.2.6",
1502
+ ngImport: i0,
1503
+ type: StarPanelMenu,
1504
+ deps: [],
1505
+ target: i0.ɵɵFactoryTarget.Component
1506
+ });
1507
+ static ɵcmp = i0.ɵɵngDeclareComponent({
1508
+ minVersion: "17.0.0",
1509
+ version: "22.2.6",
1510
+ type: StarPanelMenu,
1511
+ isStandalone: true,
1512
+ selector: "star-panel-menu",
1513
+ inputs: {
1514
+ items: {
1515
+ classPropertyName: "items",
1516
+ publicName: "items",
1517
+ isSignal: true,
1518
+ isRequired: false,
1519
+ transformFunction: null
1520
+ },
1521
+ ariaLabel: {
1522
+ classPropertyName: "ariaLabel",
1523
+ publicName: "ariaLabel",
1524
+ isSignal: true,
1525
+ isRequired: false,
1526
+ transformFunction: null
1527
+ },
1528
+ single: {
1529
+ classPropertyName: "single",
1530
+ publicName: "single",
1531
+ isSignal: true,
1532
+ isRequired: false,
1533
+ transformFunction: null
1534
+ },
1535
+ expandedKeys: {
1536
+ classPropertyName: "expandedKeys",
1537
+ publicName: "expandedKeys",
1538
+ isSignal: true,
1539
+ isRequired: false,
1540
+ transformFunction: null
1541
+ }
1542
+ },
1543
+ outputs: {
1544
+ expandedKeys: "expandedKeysChange",
1545
+ itemClick: "itemClick"
1546
+ },
1547
+ host: { classAttribute: "star-panel-menu" },
1548
+ ngImport: i0,
1549
+ template: `
1550
+ <nav [attr.aria-label]="ariaLabel()">
1551
+ <ng-container *ngTemplateOutlet="list; context: { $implicit: items(), path: '', level: 0 }" />
1552
+ </nav>
1553
+
1554
+ <ng-template #list let-entries let-path="path" let-level="level">
1555
+ <ul class="star-panel-menu__list" [class.star-panel-menu__list--nested]="level > 0">
1556
+ @for (item of entries; track $index; let i = $index) {
1557
+ @let key = path ? path + '.' + i : '' + i;
1558
+ @if (item.separator) {
1559
+ <li class="star-panel-menu__separator" role="separator"></li>
1560
+ } @else if (item.items?.length) {
1561
+ <li>
1562
+ <button
1563
+ type="button"
1564
+ class="star-panel-menu__item star-panel-menu__item--parent"
1565
+ [class.star-panel-menu__item--root]="level === 0"
1566
+ [style.--star-level]="level"
1567
+ [disabled]="item.disabled"
1568
+ [attr.aria-expanded]="isOpen(key)"
1569
+ [attr.aria-controls]="isOpen(key) ? regionId(key) : null"
1570
+ (click)="toggle(key)"
1571
+ >
1572
+ @if (item.icon) {
1573
+ <i class="star-panel-menu__icon" [class]="item.icon" aria-hidden="true"></i>
1574
+ }
1575
+ <span class="star-panel-menu__label">{{ item.label }}</span>
1576
+ <i class="ph-bold ph-caret-down star-panel-menu__caret" aria-hidden="true"></i>
1577
+ </button>
1578
+ @if (isOpen(key)) {
1579
+ <div [id]="regionId(key)">
1580
+ <ng-container
1581
+ *ngTemplateOutlet="
1582
+ list;
1583
+ context: { $implicit: item.items, path: key, level: level + 1 }
1584
+ "
1585
+ />
1586
+ </div>
1587
+ }
1588
+ </li>
1589
+ } @else if (item.routerLink) {
1590
+ <li>
1591
+ <a
1592
+ class="star-panel-menu__item"
1593
+ routerLinkActive="star-panel-menu__item--active"
1594
+ ariaCurrentWhenActive="page"
1595
+ [style.--star-level]="level"
1596
+ [routerLink]="item.disabled ? null : item.routerLink"
1597
+ [attr.aria-disabled]="item.disabled || null"
1598
+ (click)="run(item)"
1599
+ >
1600
+ <ng-container *ngTemplateOutlet="content; context: { $implicit: item }" />
1601
+ </a>
1602
+ </li>
1603
+ } @else if (item.url) {
1604
+ <li>
1605
+ <a
1606
+ class="star-panel-menu__item"
1607
+ [style.--star-level]="level"
1608
+ [attr.href]="item.disabled ? null : item.url"
1609
+ [attr.aria-disabled]="item.disabled || null"
1610
+ (click)="run(item)"
1611
+ >
1612
+ <ng-container *ngTemplateOutlet="content; context: { $implicit: item }" />
1613
+ </a>
1614
+ </li>
1615
+ } @else {
1616
+ <li>
1617
+ <button
1618
+ type="button"
1619
+ class="star-panel-menu__item"
1620
+ [class.star-panel-menu__item--danger]="item.danger"
1621
+ [style.--star-level]="level"
1622
+ [disabled]="item.disabled"
1623
+ (click)="run(item)"
1624
+ >
1625
+ <ng-container *ngTemplateOutlet="content; context: { $implicit: item }" />
1626
+ </button>
1627
+ </li>
1628
+ }
1629
+ }
1630
+ </ul>
1631
+ </ng-template>
1632
+
1633
+ <ng-template #content let-item>
1634
+ @if (item.icon) {
1635
+ <i class="star-panel-menu__icon" [class]="item.icon" aria-hidden="true"></i>
1636
+ }
1637
+ <span class="star-panel-menu__label">{{ item.label }}</span>
1638
+ </ng-template>
1639
+ `,
1640
+ isInline: true,
1641
+ dependencies: [
1642
+ {
1643
+ kind: "directive",
1644
+ type: NgTemplateOutlet,
1645
+ selector: "[ngTemplateOutlet]",
1646
+ inputs: [
1647
+ "ngTemplateOutletContext",
1648
+ "ngTemplateOutlet",
1649
+ "ngTemplateOutletInjector"
1650
+ ]
1651
+ },
1652
+ {
1653
+ kind: "directive",
1654
+ type: RouterLink,
1655
+ selector: "[routerLink]",
1656
+ inputs: [
1657
+ "target",
1658
+ "queryParams",
1659
+ "fragment",
1660
+ "queryParamsHandling",
1661
+ "state",
1662
+ "info",
1663
+ "relativeTo",
1664
+ "preserveFragment",
1665
+ "skipLocationChange",
1666
+ "replaceUrl",
1667
+ "browserUrl",
1668
+ "routerLink"
1669
+ ]
1670
+ },
1671
+ {
1672
+ kind: "directive",
1673
+ type: RouterLinkActive,
1674
+ selector: "[routerLinkActive]",
1675
+ inputs: [
1676
+ "routerLinkActiveOptions",
1677
+ "ariaCurrentWhenActive",
1678
+ "routerLinkActive"
1679
+ ],
1680
+ outputs: ["isActiveChange"],
1681
+ exportAs: ["routerLinkActive"]
1682
+ }
1683
+ ],
1684
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
1685
+ });
1686
+ };
1687
+ i0.ɵɵngDeclareClassMetadata({
1688
+ minVersion: "12.0.0",
1689
+ version: "22.2.6",
1690
+ ngImport: i0,
1691
+ type: StarPanelMenu,
1692
+ decorators: [{
1693
+ type: Component,
1694
+ args: [{
1695
+ selector: "star-panel-menu",
1696
+ imports: [
1697
+ NgTemplateOutlet,
1698
+ RouterLink,
1699
+ RouterLinkActive
1700
+ ],
1701
+ changeDetection: ChangeDetectionStrategy.OnPush,
1702
+ host: { class: "star-panel-menu" },
1703
+ template: `
1704
+ <nav [attr.aria-label]="ariaLabel()">
1705
+ <ng-container *ngTemplateOutlet="list; context: { $implicit: items(), path: '', level: 0 }" />
1706
+ </nav>
1707
+
1708
+ <ng-template #list let-entries let-path="path" let-level="level">
1709
+ <ul class="star-panel-menu__list" [class.star-panel-menu__list--nested]="level > 0">
1710
+ @for (item of entries; track $index; let i = $index) {
1711
+ @let key = path ? path + '.' + i : '' + i;
1712
+ @if (item.separator) {
1713
+ <li class="star-panel-menu__separator" role="separator"></li>
1714
+ } @else if (item.items?.length) {
1715
+ <li>
1716
+ <button
1717
+ type="button"
1718
+ class="star-panel-menu__item star-panel-menu__item--parent"
1719
+ [class.star-panel-menu__item--root]="level === 0"
1720
+ [style.--star-level]="level"
1721
+ [disabled]="item.disabled"
1722
+ [attr.aria-expanded]="isOpen(key)"
1723
+ [attr.aria-controls]="isOpen(key) ? regionId(key) : null"
1724
+ (click)="toggle(key)"
1725
+ >
1726
+ @if (item.icon) {
1727
+ <i class="star-panel-menu__icon" [class]="item.icon" aria-hidden="true"></i>
1728
+ }
1729
+ <span class="star-panel-menu__label">{{ item.label }}</span>
1730
+ <i class="ph-bold ph-caret-down star-panel-menu__caret" aria-hidden="true"></i>
1731
+ </button>
1732
+ @if (isOpen(key)) {
1733
+ <div [id]="regionId(key)">
1734
+ <ng-container
1735
+ *ngTemplateOutlet="
1736
+ list;
1737
+ context: { $implicit: item.items, path: key, level: level + 1 }
1738
+ "
1739
+ />
1740
+ </div>
1741
+ }
1742
+ </li>
1743
+ } @else if (item.routerLink) {
1744
+ <li>
1745
+ <a
1746
+ class="star-panel-menu__item"
1747
+ routerLinkActive="star-panel-menu__item--active"
1748
+ ariaCurrentWhenActive="page"
1749
+ [style.--star-level]="level"
1750
+ [routerLink]="item.disabled ? null : item.routerLink"
1751
+ [attr.aria-disabled]="item.disabled || null"
1752
+ (click)="run(item)"
1753
+ >
1754
+ <ng-container *ngTemplateOutlet="content; context: { $implicit: item }" />
1755
+ </a>
1756
+ </li>
1757
+ } @else if (item.url) {
1758
+ <li>
1759
+ <a
1760
+ class="star-panel-menu__item"
1761
+ [style.--star-level]="level"
1762
+ [attr.href]="item.disabled ? null : item.url"
1763
+ [attr.aria-disabled]="item.disabled || null"
1764
+ (click)="run(item)"
1765
+ >
1766
+ <ng-container *ngTemplateOutlet="content; context: { $implicit: item }" />
1767
+ </a>
1768
+ </li>
1769
+ } @else {
1770
+ <li>
1771
+ <button
1772
+ type="button"
1773
+ class="star-panel-menu__item"
1774
+ [class.star-panel-menu__item--danger]="item.danger"
1775
+ [style.--star-level]="level"
1776
+ [disabled]="item.disabled"
1777
+ (click)="run(item)"
1778
+ >
1779
+ <ng-container *ngTemplateOutlet="content; context: { $implicit: item }" />
1780
+ </button>
1781
+ </li>
1782
+ }
1783
+ }
1784
+ </ul>
1785
+ </ng-template>
1786
+
1787
+ <ng-template #content let-item>
1788
+ @if (item.icon) {
1789
+ <i class="star-panel-menu__icon" [class]="item.icon" aria-hidden="true"></i>
1790
+ }
1791
+ <span class="star-panel-menu__label">{{ item.label }}</span>
1792
+ </ng-template>
1793
+ `
1794
+ }]
1795
+ }],
1796
+ propDecorators: {
1797
+ items: [{
1798
+ type: i0.Input,
1799
+ args: [{
1800
+ isSignal: true,
1801
+ alias: "items",
1802
+ required: false
1803
+ }]
1804
+ }],
1805
+ ariaLabel: [{
1806
+ type: i0.Input,
1807
+ args: [{
1808
+ isSignal: true,
1809
+ alias: "ariaLabel",
1810
+ required: false
1811
+ }]
1812
+ }],
1813
+ single: [{
1814
+ type: i0.Input,
1815
+ args: [{
1816
+ isSignal: true,
1817
+ alias: "single",
1818
+ required: false
1819
+ }]
1820
+ }],
1821
+ expandedKeys: [{
1822
+ type: i0.Input,
1823
+ args: [{
1824
+ isSignal: true,
1825
+ alias: "expandedKeys",
1826
+ required: false
1827
+ }]
1828
+ }, {
1829
+ type: i0.Output,
1830
+ args: ["expandedKeysChange"]
1831
+ }],
1832
+ itemClick: [{
1833
+ type: i0.Output,
1834
+ args: ["itemClick"]
1835
+ }]
1836
+ }
1837
+ });
1838
+ export { STAR_MENU_POSITIONS, StarContextMenu, StarMegaMenu, StarMenu, StarMenuInDialog, StarMenuTrigger, StarMenubar, StarPanelMenu, StarSplitButton, keepMenuInsideDialog };
1839
+
1840
+ //# sourceMappingURL=star-ng-ui-menu.mjs.map