@acorex/components 22.0.0-next.2 → 22.0.0-next.21
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.
- package/combo-box/README.md +3 -0
- package/fesm2022/acorex-components-calendar.mjs +12 -14
- package/fesm2022/acorex-components-calendar.mjs.map +1 -1
- package/fesm2022/acorex-components-color-palette.mjs +2 -2
- package/fesm2022/acorex-components-color-palette.mjs.map +1 -1
- package/fesm2022/acorex-components-combo-box.mjs +669 -0
- package/fesm2022/acorex-components-combo-box.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-DCcRJYfF.mjs +50 -0
- package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-DCcRJYfF.mjs.map +1 -0
- package/fesm2022/{acorex-components-conversation-open-composer-picker-for-files-Hh5Oyp3p.mjs → acorex-components-conversation-open-composer-picker-for-files-BuNEjswI.mjs} +2 -2
- package/fesm2022/{acorex-components-conversation-open-composer-picker-for-files-Hh5Oyp3p.mjs.map → acorex-components-conversation-open-composer-picker-for-files-BuNEjswI.mjs.map} +1 -1
- package/fesm2022/acorex-components-conversation.mjs +194 -5768
- package/fesm2022/acorex-components-conversation.mjs.map +1 -1
- package/fesm2022/acorex-components-cron-job.mjs +12 -12
- package/fesm2022/acorex-components-cron-job.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-box.mjs +44 -12
- package/fesm2022/acorex-components-datetime-box.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-input.mjs +332 -312
- package/fesm2022/acorex-components-datetime-input.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-picker.mjs +11 -1
- package/fesm2022/acorex-components-datetime-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-decorators.mjs +2 -2
- package/fesm2022/acorex-components-decorators.mjs.map +1 -1
- package/fesm2022/acorex-components-file-viewer.mjs +346 -125
- package/fesm2022/acorex-components-file-viewer.mjs.map +1 -1
- package/fesm2022/acorex-components-form.mjs +4 -3
- package/fesm2022/acorex-components-form.mjs.map +1 -1
- package/fesm2022/acorex-components-list.mjs +265 -19
- package/fesm2022/acorex-components-list.mjs.map +1 -1
- package/fesm2022/acorex-components-map.mjs +1170 -13712
- package/fesm2022/acorex-components-map.mjs.map +1 -1
- package/fesm2022/acorex-components-menu.mjs +211 -74
- package/fesm2022/acorex-components-menu.mjs.map +1 -1
- package/fesm2022/acorex-components-phone-box.mjs +6 -6
- package/fesm2022/acorex-components-phone-box.mjs.map +1 -1
- package/fesm2022/acorex-components-popup.mjs +388 -78
- package/fesm2022/acorex-components-popup.mjs.map +1 -1
- package/fesm2022/acorex-components-query-builder.mjs +6 -2
- package/fesm2022/acorex-components-query-builder.mjs.map +1 -1
- package/fesm2022/acorex-components-rest-api-generator.mjs +2 -2
- package/fesm2022/acorex-components-rest-api-generator.mjs.map +1 -1
- package/fesm2022/acorex-components-rrule.mjs +2 -2
- package/fesm2022/acorex-components-rrule.mjs.map +1 -1
- package/fesm2022/acorex-components-scheduler-picker.mjs +16 -16
- package/fesm2022/acorex-components-scheduler-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-scheduler.mjs +2 -2
- package/fesm2022/acorex-components-scheduler.mjs.map +1 -1
- package/fesm2022/acorex-components-select-box.mjs +176 -451
- package/fesm2022/acorex-components-select-box.mjs.map +1 -1
- package/fesm2022/acorex-components-selection-list.mjs +0 -4
- package/fesm2022/acorex-components-selection-list.mjs.map +1 -1
- package/package.json +7 -7
- package/select-box/README.md +2 -0
- package/types/acorex-components-combo-box.d.ts +202 -0
- package/types/acorex-components-conversation.d.ts +11 -25
- package/types/acorex-components-datetime-box.d.ts +16 -4
- package/types/acorex-components-datetime-input.d.ts +62 -68
- package/types/acorex-components-file-viewer.d.ts +109 -17
- package/types/acorex-components-list.d.ts +65 -3
- package/types/acorex-components-map.d.ts +299 -45
- package/types/acorex-components-menu.d.ts +26 -4
- package/types/acorex-components-phone-box.d.ts +2 -2
- package/types/acorex-components-popup.d.ts +143 -35
- package/types/acorex-components-query-builder.d.ts +10 -9
- package/types/acorex-components-select-box.d.ts +36 -147
- package/types/acorex-components-selection-list.d.ts +1 -2
- package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-CNHiM1Sp.mjs +0 -106
- package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-CNHiM1Sp.mjs.map +0 -1
- package/fesm2022/acorex-components-modal-acorex-components-modal-Djl-uo9b.mjs +0 -388
- package/fesm2022/acorex-components-modal-acorex-components-modal-Djl-uo9b.mjs.map +0 -1
- package/fesm2022/acorex-components-modal-modal-content.component-BpUsCI8D.mjs +0 -247
- package/fesm2022/acorex-components-modal-modal-content.component-BpUsCI8D.mjs.map +0 -1
- package/fesm2022/acorex-components-modal.mjs +0 -2
- package/fesm2022/acorex-components-modal.mjs.map +0 -1
- package/modal/README.md +0 -3
- package/types/acorex-components-modal.d.ts +0 -132
|
@@ -105,6 +105,16 @@ class AXMenuItemClickBaseEvent extends NXClickEvent {
|
|
|
105
105
|
}
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
+
/** Edge padding when clamping floating menu panels to the viewport. */
|
|
109
|
+
const AX_MENU_VIEWPORT_MARGIN = 8;
|
|
110
|
+
/** Limits a fixed menu panel so it stays within the viewport below `top`. */
|
|
111
|
+
function axFitMenuPanelHeight(renderer, el, top) {
|
|
112
|
+
renderer.setStyle(el, 'max-height', `${Math.max(0, window.innerHeight - top - AX_MENU_VIEWPORT_MARGIN)}px`);
|
|
113
|
+
}
|
|
114
|
+
function axClearMenuPanelHeight(renderer, el) {
|
|
115
|
+
renderer.removeStyle(el, 'max-height');
|
|
116
|
+
}
|
|
117
|
+
|
|
108
118
|
/**
|
|
109
119
|
* Represents a menu item component used within an `ax-menu`.
|
|
110
120
|
* @category Components
|
|
@@ -139,8 +149,16 @@ class AXMenuItemComponent extends NXComponent {
|
|
|
139
149
|
this.unsuscriber = inject(AXUnsubscriber);
|
|
140
150
|
this.renderer = inject(Renderer2);
|
|
141
151
|
this.injector = inject(Injector);
|
|
152
|
+
this.document = inject(DOCUMENT);
|
|
142
153
|
this.zIndexService = inject(AXZIndexService);
|
|
143
154
|
this.zToken = null;
|
|
155
|
+
this.submenuPortalParent = null;
|
|
156
|
+
this.submenuPortalNextSibling = null;
|
|
157
|
+
/** Survives submenu portaling when the DOM parent chain is broken. */
|
|
158
|
+
this.linkedParent = null;
|
|
159
|
+
this.mouseLeaveTimeout = null;
|
|
160
|
+
this.submenuUnlistenEnter = null;
|
|
161
|
+
this.submenuUnlistenLeave = null;
|
|
144
162
|
this.arrowIcon = computed(() => {
|
|
145
163
|
const isRtl = AXHtmlUtil.isRtl(this.nativeElement);
|
|
146
164
|
return this.root.orientation() == 'horizontal' && this.isFirstLevel()
|
|
@@ -159,12 +177,12 @@ class AXMenuItemComponent extends NXComponent {
|
|
|
159
177
|
...(ngDevMode ? [undefined, { debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
160
178
|
this.color = input(/* @ts-ignore */
|
|
161
179
|
...(ngDevMode ? [undefined, { debugName: "color" }] : /* istanbul ignore next */ []));
|
|
162
|
-
this.mouseLeaveTimeout = null;
|
|
163
180
|
afterNextRender(() => {
|
|
164
181
|
if (!isPlatformBrowser(this.platformId)) {
|
|
165
182
|
return;
|
|
166
183
|
}
|
|
167
184
|
this.reparentOrphanedChildren();
|
|
185
|
+
this.linkChildItems();
|
|
168
186
|
this.updateDiscoveredSubmenuNodeCount();
|
|
169
187
|
this.childObserver = new MutationObserver((records) => {
|
|
170
188
|
if (!this.hasRelevantChildMutation(records)) {
|
|
@@ -185,6 +203,10 @@ class AXMenuItemComponent extends NXComponent {
|
|
|
185
203
|
this.service.close$.pipe(this.unsuscriber.takeUntilDestroy).subscribe((item) => {
|
|
186
204
|
if (this == item) {
|
|
187
205
|
this.isOpen.set(false);
|
|
206
|
+
this.clearCloseTimeout();
|
|
207
|
+
this.restoreSubmenuPortal();
|
|
208
|
+
this.zIndexService.release(this.zToken);
|
|
209
|
+
this.zToken = null;
|
|
188
210
|
}
|
|
189
211
|
});
|
|
190
212
|
}
|
|
@@ -192,10 +214,13 @@ class AXMenuItemComponent extends NXComponent {
|
|
|
192
214
|
return this.nativeElement.querySelector('ax-text')?.innerText;
|
|
193
215
|
}
|
|
194
216
|
/**
|
|
195
|
-
* Resolves the parent menu item.
|
|
196
|
-
*
|
|
217
|
+
* Resolves the parent menu item. Prefers an explicit link (survives submenu portaling),
|
|
218
|
+
* then DI, then the DOM tree.
|
|
197
219
|
*/
|
|
198
220
|
getParentMenuItem() {
|
|
221
|
+
if (this.linkedParent) {
|
|
222
|
+
return this.linkedParent;
|
|
223
|
+
}
|
|
199
224
|
if (this.parent) {
|
|
200
225
|
return this.parent;
|
|
201
226
|
}
|
|
@@ -203,8 +228,7 @@ class AXMenuItemComponent extends NXComponent {
|
|
|
203
228
|
if (!parentHost || parentHost === this.nativeElement) {
|
|
204
229
|
return null;
|
|
205
230
|
}
|
|
206
|
-
|
|
207
|
-
return ctx instanceof AXMenuItemComponent ? ctx : null;
|
|
231
|
+
return this.getInstanceFromElement(parentHost) ?? null;
|
|
208
232
|
}
|
|
209
233
|
/**
|
|
210
234
|
* Opens the submenu of this menu item if it has sub-items and is not disabled.
|
|
@@ -214,7 +238,13 @@ class AXMenuItemComponent extends NXComponent {
|
|
|
214
238
|
return;
|
|
215
239
|
}
|
|
216
240
|
this.reparentOrphanedChildren();
|
|
241
|
+
this.linkChildItems();
|
|
217
242
|
this.service.closeExcept(this);
|
|
243
|
+
const submenu = this.submenuSlot()?.nativeElement;
|
|
244
|
+
if (submenu) {
|
|
245
|
+
// Portal before `isOpen` so ancestor overflow cannot clip the first paint.
|
|
246
|
+
this.portalSubmenu(submenu);
|
|
247
|
+
}
|
|
218
248
|
if (!this.zToken) {
|
|
219
249
|
this.zToken = this.zIndexService.acquire();
|
|
220
250
|
}
|
|
@@ -224,9 +254,8 @@ class AXMenuItemComponent extends NXComponent {
|
|
|
224
254
|
* Closes the submenu of this menu item if open.
|
|
225
255
|
*/
|
|
226
256
|
close() {
|
|
257
|
+
this.clearCloseTimeout();
|
|
227
258
|
this.service.markClosed(this);
|
|
228
|
-
this.zIndexService.release(this.zToken);
|
|
229
|
-
this.zToken = null;
|
|
230
259
|
}
|
|
231
260
|
/**
|
|
232
261
|
* Positions the submenu after layout so nested levels measure their full height.
|
|
@@ -245,30 +274,35 @@ class AXMenuItemComponent extends NXComponent {
|
|
|
245
274
|
}
|
|
246
275
|
/**
|
|
247
276
|
* Calculate the position of the submenu to avoid it going out of the viewport.
|
|
277
|
+
* Tall panels are height-clamped; the panel is portaled so parent overflow cannot clip it.
|
|
248
278
|
*/
|
|
249
279
|
calculatePosition() {
|
|
250
280
|
const submenu = this.submenuSlot()?.nativeElement;
|
|
251
281
|
if (!submenu)
|
|
252
282
|
return;
|
|
283
|
+
this.portalSubmenu(submenu);
|
|
284
|
+
axClearMenuPanelHeight(this.renderer, submenu);
|
|
253
285
|
const submenuRect = this.measureSubmenuRect(submenu);
|
|
254
286
|
const itemRect = this.nativeElement.getBoundingClientRect();
|
|
255
287
|
const windowWidth = window.innerWidth;
|
|
256
288
|
const windowHeight = window.innerHeight;
|
|
289
|
+
const margin = AX_MENU_VIEWPORT_MARGIN;
|
|
257
290
|
const isRtl = AXHtmlUtil.isRtl(this.nativeElement);
|
|
291
|
+
const effectiveHeight = Math.min(submenuRect.height, Math.max(0, windowHeight - margin * 2));
|
|
258
292
|
let finalTop;
|
|
259
293
|
let finalLeft;
|
|
260
294
|
const preferredTop = this.isFirstLevel() && this.root.orientation() === 'horizontal' ? itemRect.bottom : itemRect.top;
|
|
261
|
-
const alternateTop = itemRect.top -
|
|
262
|
-
if (preferredTop +
|
|
295
|
+
const alternateTop = itemRect.top - effectiveHeight;
|
|
296
|
+
if (preferredTop + effectiveHeight <= windowHeight - margin) {
|
|
263
297
|
finalTop = preferredTop;
|
|
264
298
|
}
|
|
265
|
-
else if (alternateTop >=
|
|
299
|
+
else if (alternateTop >= margin) {
|
|
266
300
|
finalTop = alternateTop;
|
|
267
301
|
}
|
|
268
302
|
else {
|
|
269
|
-
finalTop =
|
|
303
|
+
finalTop = margin;
|
|
270
304
|
}
|
|
271
|
-
finalTop = this.clampVerticalPosition(finalTop,
|
|
305
|
+
finalTop = this.clampVerticalPosition(finalTop, effectiveHeight, windowHeight, margin);
|
|
272
306
|
if (this.isFirstLevel() && this.root.orientation() === 'horizontal') {
|
|
273
307
|
const preferredLeft = isRtl ? itemRect.right - submenuRect.width : itemRect.left;
|
|
274
308
|
const alternateLeft = isRtl ? itemRect.left : itemRect.right - submenuRect.width;
|
|
@@ -280,47 +314,30 @@ class AXMenuItemComponent extends NXComponent {
|
|
|
280
314
|
}
|
|
281
315
|
}
|
|
282
316
|
else {
|
|
283
|
-
const
|
|
284
|
-
const
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
}
|
|
291
|
-
else if (alternateLeftRtl + submenuRect.width <= windowWidth) {
|
|
292
|
-
finalLeft = alternateLeftRtl;
|
|
293
|
-
}
|
|
294
|
-
else {
|
|
295
|
-
finalLeft = 0;
|
|
296
|
-
}
|
|
317
|
+
const preferredLeft = isRtl ? itemRect.left - submenuRect.width : itemRect.right;
|
|
318
|
+
const alternateLeft = isRtl ? itemRect.right : itemRect.left - submenuRect.width;
|
|
319
|
+
if (isRtl ? preferredLeft >= 0 : preferredLeft + submenuRect.width <= windowWidth) {
|
|
320
|
+
finalLeft = preferredLeft;
|
|
321
|
+
}
|
|
322
|
+
else if (isRtl ? alternateLeft + submenuRect.width <= windowWidth : alternateLeft >= 0) {
|
|
323
|
+
finalLeft = alternateLeft;
|
|
297
324
|
}
|
|
298
325
|
else {
|
|
299
|
-
|
|
300
|
-
finalLeft = preferredLeftLtr;
|
|
301
|
-
}
|
|
302
|
-
else if (alternateLeftLtr >= 0) {
|
|
303
|
-
finalLeft = alternateLeftLtr;
|
|
304
|
-
}
|
|
305
|
-
else {
|
|
306
|
-
finalLeft = windowWidth - submenuRect.width;
|
|
307
|
-
}
|
|
326
|
+
finalLeft = isRtl ? 0 : windowWidth - submenuRect.width;
|
|
308
327
|
}
|
|
309
328
|
}
|
|
310
329
|
const isNestedMenu = !(this.isFirstLevel() && this.root.orientation() === 'horizontal');
|
|
311
330
|
if (isNestedMenu) {
|
|
312
331
|
const overlapsParent = finalLeft < itemRect.right && itemRect.left < finalLeft + submenuRect.width;
|
|
313
|
-
if (overlapsParent) {
|
|
314
|
-
|
|
315
|
-
if (shiftedTop + submenuRect.height <= windowHeight) {
|
|
316
|
-
finalTop = shiftedTop;
|
|
317
|
-
}
|
|
332
|
+
if (overlapsParent && itemRect.bottom + effectiveHeight <= windowHeight - margin) {
|
|
333
|
+
finalTop = itemRect.bottom;
|
|
318
334
|
}
|
|
319
335
|
}
|
|
320
|
-
finalTop = this.clampVerticalPosition(finalTop,
|
|
336
|
+
finalTop = this.clampVerticalPosition(finalTop, effectiveHeight, windowHeight, margin);
|
|
321
337
|
this.renderer.setStyle(submenu, 'position', 'fixed');
|
|
322
338
|
this.renderer.setStyle(submenu, 'top', `${finalTop}px`);
|
|
323
339
|
this.renderer.setStyle(submenu, 'left', `${finalLeft}px`);
|
|
340
|
+
axFitMenuPanelHeight(this.renderer, submenu, finalTop);
|
|
324
341
|
if (this.zToken) {
|
|
325
342
|
this.renderer.setStyle(submenu, 'z-index', String(this.zToken.zIndex));
|
|
326
343
|
}
|
|
@@ -334,6 +351,83 @@ class AXMenuItemComponent extends NXComponent {
|
|
|
334
351
|
this.renderer.removeStyle(submenu, 'display');
|
|
335
352
|
return rect;
|
|
336
353
|
}
|
|
354
|
+
/** Moves the submenu under the context-menu backdrop (or body) to escape ancestor overflow. */
|
|
355
|
+
portalSubmenu(submenu) {
|
|
356
|
+
if (!isPlatformBrowser(this.platformId)) {
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
submenu.__axMenuOwner__ = this;
|
|
360
|
+
this.bindSubmenuPointerListeners(submenu);
|
|
361
|
+
if (this.submenuPortalParent) {
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
const parent = submenu.parentElement;
|
|
365
|
+
if (!parent) {
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
this.submenuPortalParent = parent;
|
|
369
|
+
this.submenuPortalNextSibling = submenu.nextSibling;
|
|
370
|
+
const rootEl = this.root.nativeElement;
|
|
371
|
+
const rootParent = rootEl.parentElement;
|
|
372
|
+
const portalHost = rootEl.tagName === 'AX-CONTEXT-MENU' && rootParent && rootParent !== this.document.body
|
|
373
|
+
? rootParent
|
|
374
|
+
: this.document.body;
|
|
375
|
+
if (submenu.parentElement !== portalHost) {
|
|
376
|
+
portalHost.appendChild(submenu);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
restoreSubmenuPortal() {
|
|
380
|
+
const submenu = this.submenuSlot()?.nativeElement;
|
|
381
|
+
this.unbindSubmenuPointerListeners();
|
|
382
|
+
if (submenu) {
|
|
383
|
+
axClearMenuPanelHeight(this.renderer, submenu);
|
|
384
|
+
delete submenu.__axMenuOwner__;
|
|
385
|
+
}
|
|
386
|
+
if (submenu && this.submenuPortalParent) {
|
|
387
|
+
try {
|
|
388
|
+
this.submenuPortalParent.insertBefore(submenu, this.submenuPortalNextSibling);
|
|
389
|
+
}
|
|
390
|
+
catch {
|
|
391
|
+
// Host may already be torn down while the context menu is closing.
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
this.submenuPortalParent = null;
|
|
395
|
+
this.submenuPortalNextSibling = null;
|
|
396
|
+
}
|
|
397
|
+
/** Keep this item open while the pointer is over its portaled submenu panel. */
|
|
398
|
+
bindSubmenuPointerListeners(submenu) {
|
|
399
|
+
this.unbindSubmenuPointerListeners();
|
|
400
|
+
this.submenuUnlistenEnter = this.renderer.listen(submenu, 'mouseenter', () => {
|
|
401
|
+
this.clearCloseTimeout();
|
|
402
|
+
this.clearAncestorCloseTimeouts();
|
|
403
|
+
});
|
|
404
|
+
this.submenuUnlistenLeave = this.renderer.listen(submenu, 'mouseleave', (event) => {
|
|
405
|
+
this.handlePointerLeave(event);
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
unbindSubmenuPointerListeners() {
|
|
409
|
+
this.submenuUnlistenEnter?.();
|
|
410
|
+
this.submenuUnlistenLeave?.();
|
|
411
|
+
this.submenuUnlistenEnter = null;
|
|
412
|
+
this.submenuUnlistenLeave = null;
|
|
413
|
+
}
|
|
414
|
+
/** Links direct children so parent resolution still works after the panel is portaled. */
|
|
415
|
+
linkChildItems() {
|
|
416
|
+
const submenu = this.submenuSlot()?.nativeElement;
|
|
417
|
+
if (!submenu) {
|
|
418
|
+
return;
|
|
419
|
+
}
|
|
420
|
+
submenu.querySelectorAll(':scope > ax-menu-item').forEach((el) => {
|
|
421
|
+
const child = this.getInstanceFromElement(el);
|
|
422
|
+
if (child) {
|
|
423
|
+
child.linkedParent = this;
|
|
424
|
+
}
|
|
425
|
+
});
|
|
426
|
+
}
|
|
427
|
+
getInstanceFromElement(el) {
|
|
428
|
+
const ctx = el.__axContext__;
|
|
429
|
+
return ctx instanceof AXMenuItemComponent ? ctx : undefined;
|
|
430
|
+
}
|
|
337
431
|
/**
|
|
338
432
|
* Moves nested `ax-menu-item` nodes rendered by recursive `ngTemplateOutlet` templates
|
|
339
433
|
* into the submenu slot. Angular content queries do not traverse those embedded views.
|
|
@@ -369,7 +463,13 @@ class AXMenuItemComponent extends NXComponent {
|
|
|
369
463
|
});
|
|
370
464
|
}
|
|
371
465
|
updateDiscoveredSubmenuNodeCount() {
|
|
372
|
-
this.
|
|
466
|
+
const fromHost = this.getDirectSubmenuNodes().length;
|
|
467
|
+
const submenu = this.submenuSlot()?.nativeElement;
|
|
468
|
+
const fromPanel = submenu
|
|
469
|
+
? submenu.querySelectorAll(':scope > ax-menu-item, :scope > ax-title, :scope > ax-divider').length
|
|
470
|
+
: 0;
|
|
471
|
+
// After portaling, projected children live in the panel outside this host.
|
|
472
|
+
this.discoveredSubmenuNodeCount.set(Math.max(fromHost, fromPanel));
|
|
373
473
|
}
|
|
374
474
|
scheduleChildRefresh() {
|
|
375
475
|
if (this.childRefreshScheduled) {
|
|
@@ -379,6 +479,7 @@ class AXMenuItemComponent extends NXComponent {
|
|
|
379
479
|
requestAnimationFrame(() => {
|
|
380
480
|
this.childRefreshScheduled = false;
|
|
381
481
|
this.reparentOrphanedChildren();
|
|
482
|
+
this.linkChildItems();
|
|
382
483
|
this.updateDiscoveredSubmenuNodeCount();
|
|
383
484
|
});
|
|
384
485
|
}
|
|
@@ -407,12 +508,12 @@ class AXMenuItemComponent extends NXComponent {
|
|
|
407
508
|
return false;
|
|
408
509
|
}
|
|
409
510
|
/** Keeps the submenu fully inside the viewport vertically. */
|
|
410
|
-
clampVerticalPosition(top, height, windowHeight) {
|
|
411
|
-
if (top + height > windowHeight) {
|
|
412
|
-
top = windowHeight - height;
|
|
511
|
+
clampVerticalPosition(top, height, windowHeight, margin = 0) {
|
|
512
|
+
if (top + height > windowHeight - margin) {
|
|
513
|
+
top = windowHeight - margin - height;
|
|
413
514
|
}
|
|
414
|
-
if (top <
|
|
415
|
-
top =
|
|
515
|
+
if (top < margin) {
|
|
516
|
+
top = margin;
|
|
416
517
|
}
|
|
417
518
|
return top;
|
|
418
519
|
}
|
|
@@ -442,16 +543,17 @@ class AXMenuItemComponent extends NXComponent {
|
|
|
442
543
|
}
|
|
443
544
|
handleMouseEnter(event) {
|
|
444
545
|
event.stopPropagation();
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
this.mouseLeaveTimeout = null;
|
|
448
|
-
}
|
|
546
|
+
this.clearCloseTimeout();
|
|
547
|
+
this.clearAncestorCloseTimeouts();
|
|
449
548
|
if (!this.isFirstLevel() || this.root.openOn() == 'hover') {
|
|
450
549
|
this.open();
|
|
451
550
|
}
|
|
452
551
|
}
|
|
453
552
|
handleMouseLeave(event) {
|
|
454
553
|
event.stopPropagation();
|
|
554
|
+
this.handlePointerLeave(event);
|
|
555
|
+
}
|
|
556
|
+
handlePointerLeave(event) {
|
|
455
557
|
if (!this.hasSubItems() || this.root.closeOn() !== 'leave') {
|
|
456
558
|
return;
|
|
457
559
|
}
|
|
@@ -459,25 +561,54 @@ class AXMenuItemComponent extends NXComponent {
|
|
|
459
561
|
if (relatedTarget instanceof Node && this.containsSubmenuPointer(relatedTarget)) {
|
|
460
562
|
return;
|
|
461
563
|
}
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
564
|
+
this.scheduleClose();
|
|
565
|
+
}
|
|
566
|
+
scheduleClose() {
|
|
567
|
+
this.clearCloseTimeout();
|
|
465
568
|
this.mouseLeaveTimeout = setTimeout(() => {
|
|
569
|
+
this.mouseLeaveTimeout = null;
|
|
466
570
|
this.close();
|
|
467
571
|
}, 500);
|
|
468
572
|
}
|
|
469
|
-
|
|
573
|
+
clearCloseTimeout() {
|
|
574
|
+
if (this.mouseLeaveTimeout) {
|
|
575
|
+
clearTimeout(this.mouseLeaveTimeout);
|
|
576
|
+
this.mouseLeaveTimeout = null;
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
clearAncestorCloseTimeouts() {
|
|
580
|
+
let current = this.getParentMenuItem();
|
|
581
|
+
while (current) {
|
|
582
|
+
current.clearCloseTimeout();
|
|
583
|
+
current = current.getParentMenuItem();
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
/** True when the pointer is still inside this item's submenu tree (including portaled panels). */
|
|
470
587
|
containsSubmenuPointer(node) {
|
|
471
|
-
|
|
472
|
-
if (submenu?.contains(node)) {
|
|
588
|
+
if (this.submenuSlot()?.nativeElement?.contains(node) || this.nativeElement.contains(node)) {
|
|
473
589
|
return true;
|
|
474
590
|
}
|
|
475
|
-
|
|
476
|
-
|
|
591
|
+
const el = node instanceof Element ? node : node.parentElement;
|
|
592
|
+
if (!el) {
|
|
593
|
+
return false;
|
|
477
594
|
}
|
|
478
|
-
|
|
595
|
+
const item = this.getInstanceFromElement(el.closest('ax-menu-item') ?? el) ??
|
|
596
|
+
el.closest('.ax-menu-items')?.__axMenuOwner__;
|
|
597
|
+
return !!item && this.isSelfOrAncestorOf(item);
|
|
598
|
+
}
|
|
599
|
+
isSelfOrAncestorOf(item) {
|
|
600
|
+
let current = item;
|
|
601
|
+
while (current) {
|
|
602
|
+
if (current === this) {
|
|
603
|
+
return true;
|
|
604
|
+
}
|
|
605
|
+
current = current.getParentMenuItem();
|
|
606
|
+
}
|
|
607
|
+
return false;
|
|
479
608
|
}
|
|
480
609
|
ngOnDestroy() {
|
|
610
|
+
this.clearCloseTimeout();
|
|
611
|
+
this.unbindSubmenuPointerListeners();
|
|
481
612
|
if (this.isOpen()) {
|
|
482
613
|
this.close();
|
|
483
614
|
}
|
|
@@ -643,6 +774,7 @@ class AXContextMenuComponent extends NXComponent {
|
|
|
643
774
|
const wasOpen = this.nativeElement.classList.contains('ax-state-open');
|
|
644
775
|
this.nativeElement.classList.remove('ax-state-open');
|
|
645
776
|
this.lastOpenPoint = null;
|
|
777
|
+
axClearMenuPanelHeight(this.renderer, this.nativeElement);
|
|
646
778
|
// Drop rendered items before moving DOM nodes back to the original parent.
|
|
647
779
|
// This prevents a large menu tree from being re-parented/removed as a single heavy DOM operation.
|
|
648
780
|
if (wasOpen) {
|
|
@@ -739,6 +871,7 @@ class AXContextMenuComponent extends NXComponent {
|
|
|
739
871
|
const itemRect = this.measureMenuRect(elementRef);
|
|
740
872
|
const windowWidth = window.innerWidth;
|
|
741
873
|
const windowHeight = window.innerHeight;
|
|
874
|
+
const margin = AX_MENU_VIEWPORT_MARGIN;
|
|
742
875
|
const isRtl = AXHtmlUtil.isRtl(elementRef);
|
|
743
876
|
let left;
|
|
744
877
|
if (isRtl) {
|
|
@@ -753,23 +886,22 @@ class AXContextMenuComponent extends NXComponent {
|
|
|
753
886
|
left = point.x - itemRect.width;
|
|
754
887
|
}
|
|
755
888
|
}
|
|
756
|
-
const
|
|
757
|
-
let top;
|
|
758
|
-
if (
|
|
759
|
-
top =
|
|
760
|
-
if (top < 0) {
|
|
761
|
-
top = 0;
|
|
762
|
-
}
|
|
889
|
+
const effectiveHeight = Math.min(itemRect.height, Math.max(0, windowHeight - margin * 2));
|
|
890
|
+
let top = point.y;
|
|
891
|
+
if (top + effectiveHeight > windowHeight - margin) {
|
|
892
|
+
top = windowHeight - margin - effectiveHeight;
|
|
763
893
|
}
|
|
764
|
-
|
|
765
|
-
top =
|
|
894
|
+
if (top < margin) {
|
|
895
|
+
top = margin;
|
|
766
896
|
}
|
|
767
897
|
this.renderer.setStyle(elementRef, 'left', `${left}px`);
|
|
768
898
|
this.renderer.setStyle(elementRef, 'top', `${top}px`);
|
|
769
899
|
this.renderer.setStyle(elementRef, 'position', 'fixed');
|
|
900
|
+
axFitMenuPanelHeight(this.renderer, elementRef, top);
|
|
770
901
|
}
|
|
771
902
|
/** Measures menu size even when an ancestor hides the host with `display: none`. */
|
|
772
903
|
measureMenuRect(elementRef) {
|
|
904
|
+
axClearMenuPanelHeight(this.renderer, elementRef);
|
|
773
905
|
this.renderer.setStyle(elementRef, 'visibility', 'hidden');
|
|
774
906
|
this.renderer.setStyle(elementRef, 'display', 'flex');
|
|
775
907
|
const rect = elementRef.getBoundingClientRect();
|
|
@@ -814,7 +946,12 @@ class AXContextMenuComponent extends NXComponent {
|
|
|
814
946
|
this.close();
|
|
815
947
|
l1();
|
|
816
948
|
});
|
|
817
|
-
const l2 = this.renderer.listen(el, 'wheel', () => {
|
|
949
|
+
const l2 = this.renderer.listen(el, 'wheel', (e) => {
|
|
950
|
+
const target = e.target;
|
|
951
|
+
if (target instanceof Element &&
|
|
952
|
+
(this.nativeElement.contains(target) || target.closest('.ax-menu-items'))) {
|
|
953
|
+
return;
|
|
954
|
+
}
|
|
818
955
|
this.close();
|
|
819
956
|
l2();
|
|
820
957
|
});
|
|
@@ -870,7 +1007,7 @@ class AXContextMenuComponent extends NXComponent {
|
|
|
870
1007
|
provide: AXComponent,
|
|
871
1008
|
useExisting: AXContextMenuComponent,
|
|
872
1009
|
},
|
|
873
|
-
], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"ax-menu-item,ax-divider,ax-title,ng-container\"></ng-content>\n\n@for (node of items(); track node) {\n <ng-container [ngTemplateOutlet]=\"Recursion\" [ngTemplateOutletContext]=\"{ $implicit: node }\"> </ng-container>\n}\n\n<ng-template #Recursion let-item>\n @if (item.group?.title) {\n <ax-title>{{ item.group?.title }}</ax-title>\n }\n <ax-menu-item\n [name]=\"item.name\"\n [data]=\"item.data\"\n [disabled]=\"item.disabled\"\n [color]=\"item.color\"\n [subItems]=\"item.items ?? []\"\n >\n @if (item.icon) {\n <ax-prefix>\n <ax-icon [icon]=\"item.icon\"> </ax-icon>\n </ax-prefix>\n }\n @if (item.text) {\n <ax-text>{{ item.text | translate | async }}</ax-text>\n }\n @if (item.suffix) {\n <ax-suffix>\n <ax-text>{{ item.suffix.text | translate | async }}</ax-text>\n </ax-suffix>\n }\n @for (child of item.items; track child) {\n <ng-container [ngTemplateOutlet]=\"Recursion\" [ngTemplateOutletContext]=\"{ $implicit: child }\"></ng-container>\n }\n </ax-menu-item>\n @if (item.break) {\n <ax-divider></ax-divider>\n }\n</ng-template>\n", styles: ["@layer properties;@layer components{ax-context-menu,ax-menu{display:flex;width:max-content;color:inherit}
|
|
1010
|
+
], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"ax-menu-item,ax-divider,ax-title,ng-container\"></ng-content>\n\n@for (node of items(); track node) {\n <ng-container [ngTemplateOutlet]=\"Recursion\" [ngTemplateOutletContext]=\"{ $implicit: node }\"> </ng-container>\n}\n\n<ng-template #Recursion let-item>\n @if (item.group?.title) {\n <ax-title>{{ item.group?.title }}</ax-title>\n }\n <ax-menu-item\n [name]=\"item.name\"\n [data]=\"item.data\"\n [disabled]=\"item.disabled\"\n [color]=\"item.color\"\n [subItems]=\"item.items ?? []\"\n >\n @if (item.icon) {\n <ax-prefix>\n <ax-icon [icon]=\"item.icon\"> </ax-icon>\n </ax-prefix>\n }\n @if (item.text) {\n <ax-text>{{ item.text | translate | async }}</ax-text>\n }\n @if (item.suffix) {\n <ax-suffix>\n <ax-text>{{ item.suffix.text | translate | async }}</ax-text>\n </ax-suffix>\n }\n @for (child of item.items; track child) {\n <ng-container [ngTemplateOutlet]=\"Recursion\" [ngTemplateOutletContext]=\"{ $implicit: child }\"></ng-container>\n }\n </ax-menu-item>\n @if (item.break) {\n <ax-divider></ax-divider>\n }\n</ng-template>\n", styles: ["@layer properties;@layer components{ax-context-menu,ax-menu,.ax-menu-items{--ax-comp-menu-items-min-width: 12rem;--ax-comp-menu-action-list-hover-decorator-opacity: .7;--ax-comp-menu-action-list-horizontal-min-width: 12rem;--ax-comp-menu-action-list-horizontal-gap: 1.25rem;--ax-comp-menu-action-list-vertical-min-width: 12rem}ax-context-menu,ax-menu{display:flex;width:max-content;color:inherit}ax-context-menu.ax-menu-container,.ax-menu-items{--ax-comp-action-item-padding-inline: .875rem;opacity:0;display:flex;position:fixed;visibility:hidden;width:max-content;height:max-content;max-height:calc(100dvh - 1rem);flex-direction:column;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;min-width:var(--ax-comp-menu-items-min-width);color:rgba(var(--ax-comp-menu-items-text-color, var(--ax-sys-color-on-lightest-surface)));background-color:rgba(var(--ax-comp-menu-sub-item-bg-color, var(--ax-sys-color-lightest-surface)));padding-block:var(--ax-comp-menu-items-padding-block, .5rem);border-width:var(--ax-comp-menu-items-border-width, 1px);border-style:solid;border-radius:var(--ax-comp-menu-items-border-radius, var(--ax-sys-border-radius));border-color:rgba(var(--ax-comp-menu-items-border-color, var(--ax-sys-color-border-lightest-surface)));--ax-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--ax-shadow-colored: 0 4px 6px -1px var(--ax-shadow-color), 0 2px 4px -2px var(--ax-shadow-color);box-shadow:var(--ax-ring-offset-shadow, 0 0 #0000),var(--ax-ring-shadow, 0 0 #0000),var(--ax-shadow);transition-property:opacity,color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}:is(ax-context-menu.ax-menu-container,.ax-menu-items).ax-state-open{opacity:1;visibility:visible}:is(ax-context-menu.ax-menu-container,.ax-menu-items) ax-menu-item{color:rgba(var(--ax-comp-menu-item-text-color, var(--ax-sys-color-on-surface)))}:is(ax-context-menu.ax-menu-container,.ax-menu-items) ax-menu-item ax-suffix ax-text{color:rgba(var(--ax-comp-menu-item-suffix-text-color));--tw-font-weight: var(--font-weight-normal, 400) !important;font-weight:var(--font-weight-normal, 400)!important}:is(ax-context-menu.ax-menu-container,.ax-menu-items) ax-menu-item:hover:not(.ax-state-disabled){color:rgba(var(--ax-comp-menu-item-hover-text-color, var(--ax-sys-color-on-surface)));background-color:rgba(var(--ax-comp-menu-item-hover-bg-color, var(--ax-sys-color-surface)))!important}:is(ax-context-menu.ax-menu-container,.ax-menu-items) ax-menu-item:hover:not(.ax-state-disabled) ax-suffix ax-text{color:rgba(var(--ax-comp-menu-item-hover-suffix-text-color))}ax-context-menu.ax-action-list-horizontal{padding-inline:var(--ax-comp-menu-action-list-horizontal-padding-inline, 1rem)}ax-menu>ax-menu-item{--ax-comp-action-item-padding-inline: 0;padding-block:var(--ax-comp-menu-items-padding-block, .5rem)}ax-menu>ax-menu-item:has(>.ax-action-item-suffix:not(:empty)){gap:.5rem}ax-menu>ax-menu-item:hover:not(ax-menu ax-menu-item.ax-state-disabled){border-radius:var(--ax-comp-menu-items-border-radius, var(--ax-sys-border-radius))}ax-menu>ax-menu-item:hover:not(ax-menu ax-menu-item.ax-state-disabled)>ax-icon,ax-menu>ax-menu-item:hover:not(ax-menu ax-menu-item.ax-state-disabled)>ax-text{opacity:var(--ax-comp-menu-action-list-hover-decorator-opacity)}ax-menu.ax-action-list-horizontal{min-width:var(--ax-comp-menu-action-list-horizontal-min-width);gap:var(--ax-comp-menu-action-list-horizontal-gap)}ax-menu.ax-action-list-horizontal>ax-title{display:none}ax-menu.ax-action-list-horizontal>ax-menu-item{--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500)}ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-prefix{padding-inline-start:calc(var(--spacing, .25rem) * 0)!important}ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-suffix:not(ax-menu.ax-action-list-horizontal>ax-menu-item .ax-action-item-suffix:empty){padding-inline-end:0!important;margin-inline-start:0!important}ax-menu.ax-action-list-horizontal>ax-menu-item:hover:not(ax-menu.ax-action-list-horizontal ax-menu-item.ax-state-disabled){background-color:transparent!important}ax-menu.ax-action-list-horizontal>ax-menu-item:hover:not(ax-menu.ax-action-list-horizontal ax-menu-item.ax-state-disabled)>.ax-action-item-prefix,ax-menu.ax-action-list-horizontal>ax-menu-item:hover:not(ax-menu.ax-action-list-horizontal ax-menu-item.ax-state-disabled)>.ax-action-item-suffix{opacity:var(--ax-comp-menu-action-list-hover-decorator-opacity)}ax-menu.ax-action-list-vertical{width:max-content;min-width:var(--ax-comp-menu-action-list-vertical-min-width)}ax-menu.ax-action-list-vertical>ax-menu-item{--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500)}ax-menu.ax-action-list-vertical>ax-menu-item:hover:not(ax-menu.ax-action-list-vertical ax-menu-item.ax-state-disabled){background-color:transparent!important}ax-menu.ax-action-list-vertical>ax-menu-item:hover:not(ax-menu.ax-action-list-vertical ax-menu-item.ax-state-disabled)>.ax-action-item-prefix,ax-menu.ax-action-list-vertical>ax-menu-item:hover:not(ax-menu.ax-action-list-vertical ax-menu-item.ax-state-disabled)>.ax-action-item-suffix{opacity:var(--ax-comp-menu-action-list-hover-decorator-opacity)}}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: initial}}}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "component", type: AXMenuItemComponent, selector: "ax-menu-item", inputs: ["subItems", "name", "data", "disabled", "color"], outputs: ["onClick"] }, { kind: "component", type: AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
874
1011
|
}
|
|
875
1012
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXContextMenuComponent, decorators: [{
|
|
876
1013
|
type: Component,
|
|
@@ -891,7 +1028,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
891
1028
|
AXDecoratorIconComponent,
|
|
892
1029
|
AsyncPipe,
|
|
893
1030
|
AXTranslatorPipe,
|
|
894
|
-
], template: "<ng-content select=\"ax-menu-item,ax-divider,ax-title,ng-container\"></ng-content>\n\n@for (node of items(); track node) {\n <ng-container [ngTemplateOutlet]=\"Recursion\" [ngTemplateOutletContext]=\"{ $implicit: node }\"> </ng-container>\n}\n\n<ng-template #Recursion let-item>\n @if (item.group?.title) {\n <ax-title>{{ item.group?.title }}</ax-title>\n }\n <ax-menu-item\n [name]=\"item.name\"\n [data]=\"item.data\"\n [disabled]=\"item.disabled\"\n [color]=\"item.color\"\n [subItems]=\"item.items ?? []\"\n >\n @if (item.icon) {\n <ax-prefix>\n <ax-icon [icon]=\"item.icon\"> </ax-icon>\n </ax-prefix>\n }\n @if (item.text) {\n <ax-text>{{ item.text | translate | async }}</ax-text>\n }\n @if (item.suffix) {\n <ax-suffix>\n <ax-text>{{ item.suffix.text | translate | async }}</ax-text>\n </ax-suffix>\n }\n @for (child of item.items; track child) {\n <ng-container [ngTemplateOutlet]=\"Recursion\" [ngTemplateOutletContext]=\"{ $implicit: child }\"></ng-container>\n }\n </ax-menu-item>\n @if (item.break) {\n <ax-divider></ax-divider>\n }\n</ng-template>\n", styles: ["@layer properties;@layer components{ax-context-menu,ax-menu{display:flex;width:max-content;color:inherit}
|
|
1031
|
+
], template: "<ng-content select=\"ax-menu-item,ax-divider,ax-title,ng-container\"></ng-content>\n\n@for (node of items(); track node) {\n <ng-container [ngTemplateOutlet]=\"Recursion\" [ngTemplateOutletContext]=\"{ $implicit: node }\"> </ng-container>\n}\n\n<ng-template #Recursion let-item>\n @if (item.group?.title) {\n <ax-title>{{ item.group?.title }}</ax-title>\n }\n <ax-menu-item\n [name]=\"item.name\"\n [data]=\"item.data\"\n [disabled]=\"item.disabled\"\n [color]=\"item.color\"\n [subItems]=\"item.items ?? []\"\n >\n @if (item.icon) {\n <ax-prefix>\n <ax-icon [icon]=\"item.icon\"> </ax-icon>\n </ax-prefix>\n }\n @if (item.text) {\n <ax-text>{{ item.text | translate | async }}</ax-text>\n }\n @if (item.suffix) {\n <ax-suffix>\n <ax-text>{{ item.suffix.text | translate | async }}</ax-text>\n </ax-suffix>\n }\n @for (child of item.items; track child) {\n <ng-container [ngTemplateOutlet]=\"Recursion\" [ngTemplateOutletContext]=\"{ $implicit: child }\"></ng-container>\n }\n </ax-menu-item>\n @if (item.break) {\n <ax-divider></ax-divider>\n }\n</ng-template>\n", styles: ["@layer properties;@layer components{ax-context-menu,ax-menu,.ax-menu-items{--ax-comp-menu-items-min-width: 12rem;--ax-comp-menu-action-list-hover-decorator-opacity: .7;--ax-comp-menu-action-list-horizontal-min-width: 12rem;--ax-comp-menu-action-list-horizontal-gap: 1.25rem;--ax-comp-menu-action-list-vertical-min-width: 12rem}ax-context-menu,ax-menu{display:flex;width:max-content;color:inherit}ax-context-menu.ax-menu-container,.ax-menu-items{--ax-comp-action-item-padding-inline: .875rem;opacity:0;display:flex;position:fixed;visibility:hidden;width:max-content;height:max-content;max-height:calc(100dvh - 1rem);flex-direction:column;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;min-width:var(--ax-comp-menu-items-min-width);color:rgba(var(--ax-comp-menu-items-text-color, var(--ax-sys-color-on-lightest-surface)));background-color:rgba(var(--ax-comp-menu-sub-item-bg-color, var(--ax-sys-color-lightest-surface)));padding-block:var(--ax-comp-menu-items-padding-block, .5rem);border-width:var(--ax-comp-menu-items-border-width, 1px);border-style:solid;border-radius:var(--ax-comp-menu-items-border-radius, var(--ax-sys-border-radius));border-color:rgba(var(--ax-comp-menu-items-border-color, var(--ax-sys-color-border-lightest-surface)));--ax-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--ax-shadow-colored: 0 4px 6px -1px var(--ax-shadow-color), 0 2px 4px -2px var(--ax-shadow-color);box-shadow:var(--ax-ring-offset-shadow, 0 0 #0000),var(--ax-ring-shadow, 0 0 #0000),var(--ax-shadow);transition-property:opacity,color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}:is(ax-context-menu.ax-menu-container,.ax-menu-items).ax-state-open{opacity:1;visibility:visible}:is(ax-context-menu.ax-menu-container,.ax-menu-items) ax-menu-item{color:rgba(var(--ax-comp-menu-item-text-color, var(--ax-sys-color-on-surface)))}:is(ax-context-menu.ax-menu-container,.ax-menu-items) ax-menu-item ax-suffix ax-text{color:rgba(var(--ax-comp-menu-item-suffix-text-color));--tw-font-weight: var(--font-weight-normal, 400) !important;font-weight:var(--font-weight-normal, 400)!important}:is(ax-context-menu.ax-menu-container,.ax-menu-items) ax-menu-item:hover:not(.ax-state-disabled){color:rgba(var(--ax-comp-menu-item-hover-text-color, var(--ax-sys-color-on-surface)));background-color:rgba(var(--ax-comp-menu-item-hover-bg-color, var(--ax-sys-color-surface)))!important}:is(ax-context-menu.ax-menu-container,.ax-menu-items) ax-menu-item:hover:not(.ax-state-disabled) ax-suffix ax-text{color:rgba(var(--ax-comp-menu-item-hover-suffix-text-color))}ax-context-menu.ax-action-list-horizontal{padding-inline:var(--ax-comp-menu-action-list-horizontal-padding-inline, 1rem)}ax-menu>ax-menu-item{--ax-comp-action-item-padding-inline: 0;padding-block:var(--ax-comp-menu-items-padding-block, .5rem)}ax-menu>ax-menu-item:has(>.ax-action-item-suffix:not(:empty)){gap:.5rem}ax-menu>ax-menu-item:hover:not(ax-menu ax-menu-item.ax-state-disabled){border-radius:var(--ax-comp-menu-items-border-radius, var(--ax-sys-border-radius))}ax-menu>ax-menu-item:hover:not(ax-menu ax-menu-item.ax-state-disabled)>ax-icon,ax-menu>ax-menu-item:hover:not(ax-menu ax-menu-item.ax-state-disabled)>ax-text{opacity:var(--ax-comp-menu-action-list-hover-decorator-opacity)}ax-menu.ax-action-list-horizontal{min-width:var(--ax-comp-menu-action-list-horizontal-min-width);gap:var(--ax-comp-menu-action-list-horizontal-gap)}ax-menu.ax-action-list-horizontal>ax-title{display:none}ax-menu.ax-action-list-horizontal>ax-menu-item{--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500)}ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-prefix{padding-inline-start:calc(var(--spacing, .25rem) * 0)!important}ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-suffix:not(ax-menu.ax-action-list-horizontal>ax-menu-item .ax-action-item-suffix:empty){padding-inline-end:0!important;margin-inline-start:0!important}ax-menu.ax-action-list-horizontal>ax-menu-item:hover:not(ax-menu.ax-action-list-horizontal ax-menu-item.ax-state-disabled){background-color:transparent!important}ax-menu.ax-action-list-horizontal>ax-menu-item:hover:not(ax-menu.ax-action-list-horizontal ax-menu-item.ax-state-disabled)>.ax-action-item-prefix,ax-menu.ax-action-list-horizontal>ax-menu-item:hover:not(ax-menu.ax-action-list-horizontal ax-menu-item.ax-state-disabled)>.ax-action-item-suffix{opacity:var(--ax-comp-menu-action-list-hover-decorator-opacity)}ax-menu.ax-action-list-vertical{width:max-content;min-width:var(--ax-comp-menu-action-list-vertical-min-width)}ax-menu.ax-action-list-vertical>ax-menu-item{--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500)}ax-menu.ax-action-list-vertical>ax-menu-item:hover:not(ax-menu.ax-action-list-vertical ax-menu-item.ax-state-disabled){background-color:transparent!important}ax-menu.ax-action-list-vertical>ax-menu-item:hover:not(ax-menu.ax-action-list-vertical ax-menu-item.ax-state-disabled)>.ax-action-item-prefix,ax-menu.ax-action-list-vertical>ax-menu-item:hover:not(ax-menu.ax-action-list-vertical ax-menu-item.ax-state-disabled)>.ax-action-item-suffix{opacity:var(--ax-comp-menu-action-list-hover-decorator-opacity)}}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: initial}}}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"] }]
|
|
895
1032
|
}], ctorParameters: () => [], propDecorators: { orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], openOn: [{ type: i0.Input, args: [{ isSignal: true, alias: "openOn", required: false }] }], closeOn: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOn", required: false }] }], closeOnRouteChange: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnRouteChange", required: false }] }], originalItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], target: [{ type: i0.Input, args: [{ isSignal: true, alias: "target", required: false }] }], onItemClick: [{ type: i0.Output, args: ["onItemClick"] }], onOpening: [{ type: i0.Output, args: ["onOpening"] }], onClose: [{ type: i0.Output, args: ["onClose"] }], onWindowEvent: [{
|
|
896
1033
|
type: HostListener,
|
|
897
1034
|
args: ['window:scroll']
|
|
@@ -954,7 +1091,7 @@ class AXMenuComponent extends NXComponent {
|
|
|
954
1091
|
provide: AXComponent,
|
|
955
1092
|
useExisting: AXMenuComponent,
|
|
956
1093
|
},
|
|
957
|
-
], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"ax-menu-item,ax-divider,ax-title,ng-container\"></ng-content>\n\n@for (node of items(); track node) {\n <ng-container [ngTemplateOutlet]=\"Recursion\" [ngTemplateOutletContext]=\"{ $implicit: node }\"> </ng-container>\n}\n\n<ng-template #Recursion let-item>\n @if (item.group?.title) {\n <ax-title>{{ item.group?.title }}</ax-title>\n }\n <ax-menu-item\n [name]=\"item.name\"\n [data]=\"item.data\"\n [disabled]=\"item.disabled\"\n [color]=\"item.color\"\n [subItems]=\"item.items ?? []\"\n >\n @if (item.icon) {\n <ax-prefix>\n <ax-icon [icon]=\"item.icon\"> </ax-icon>\n </ax-prefix>\n }\n @if (item.text) {\n <ax-text>{{ item.text | translate | async }}</ax-text>\n }\n @if (item.suffix) {\n <ax-suffix>\n <ax-text>{{ item.suffix.text | translate | async }}</ax-text>\n </ax-suffix>\n }\n @for (child of item.items; track child) {\n <ng-container [ngTemplateOutlet]=\"Recursion\" [ngTemplateOutletContext]=\"{ $implicit: child }\"></ng-container>\n }\n </ax-menu-item>\n @if (item.break) {\n <ax-divider></ax-divider>\n }\n</ng-template>\n", styles: ["@layer properties;@layer components{ax-context-menu,ax-menu{display:flex;width:max-content;color:inherit}
|
|
1094
|
+
], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"ax-menu-item,ax-divider,ax-title,ng-container\"></ng-content>\n\n@for (node of items(); track node) {\n <ng-container [ngTemplateOutlet]=\"Recursion\" [ngTemplateOutletContext]=\"{ $implicit: node }\"> </ng-container>\n}\n\n<ng-template #Recursion let-item>\n @if (item.group?.title) {\n <ax-title>{{ item.group?.title }}</ax-title>\n }\n <ax-menu-item\n [name]=\"item.name\"\n [data]=\"item.data\"\n [disabled]=\"item.disabled\"\n [color]=\"item.color\"\n [subItems]=\"item.items ?? []\"\n >\n @if (item.icon) {\n <ax-prefix>\n <ax-icon [icon]=\"item.icon\"> </ax-icon>\n </ax-prefix>\n }\n @if (item.text) {\n <ax-text>{{ item.text | translate | async }}</ax-text>\n }\n @if (item.suffix) {\n <ax-suffix>\n <ax-text>{{ item.suffix.text | translate | async }}</ax-text>\n </ax-suffix>\n }\n @for (child of item.items; track child) {\n <ng-container [ngTemplateOutlet]=\"Recursion\" [ngTemplateOutletContext]=\"{ $implicit: child }\"></ng-container>\n }\n </ax-menu-item>\n @if (item.break) {\n <ax-divider></ax-divider>\n }\n</ng-template>\n", styles: ["@layer properties;@layer components{ax-context-menu,ax-menu,.ax-menu-items{--ax-comp-menu-items-min-width: 12rem;--ax-comp-menu-action-list-hover-decorator-opacity: .7;--ax-comp-menu-action-list-horizontal-min-width: 12rem;--ax-comp-menu-action-list-horizontal-gap: 1.25rem;--ax-comp-menu-action-list-vertical-min-width: 12rem}ax-context-menu,ax-menu{display:flex;width:max-content;color:inherit}ax-context-menu.ax-menu-container,.ax-menu-items{--ax-comp-action-item-padding-inline: .875rem;opacity:0;display:flex;position:fixed;visibility:hidden;width:max-content;height:max-content;max-height:calc(100dvh - 1rem);flex-direction:column;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;min-width:var(--ax-comp-menu-items-min-width);color:rgba(var(--ax-comp-menu-items-text-color, var(--ax-sys-color-on-lightest-surface)));background-color:rgba(var(--ax-comp-menu-sub-item-bg-color, var(--ax-sys-color-lightest-surface)));padding-block:var(--ax-comp-menu-items-padding-block, .5rem);border-width:var(--ax-comp-menu-items-border-width, 1px);border-style:solid;border-radius:var(--ax-comp-menu-items-border-radius, var(--ax-sys-border-radius));border-color:rgba(var(--ax-comp-menu-items-border-color, var(--ax-sys-color-border-lightest-surface)));--ax-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--ax-shadow-colored: 0 4px 6px -1px var(--ax-shadow-color), 0 2px 4px -2px var(--ax-shadow-color);box-shadow:var(--ax-ring-offset-shadow, 0 0 #0000),var(--ax-ring-shadow, 0 0 #0000),var(--ax-shadow);transition-property:opacity,color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}:is(ax-context-menu.ax-menu-container,.ax-menu-items).ax-state-open{opacity:1;visibility:visible}:is(ax-context-menu.ax-menu-container,.ax-menu-items) ax-menu-item{color:rgba(var(--ax-comp-menu-item-text-color, var(--ax-sys-color-on-surface)))}:is(ax-context-menu.ax-menu-container,.ax-menu-items) ax-menu-item ax-suffix ax-text{color:rgba(var(--ax-comp-menu-item-suffix-text-color));--tw-font-weight: var(--font-weight-normal, 400) !important;font-weight:var(--font-weight-normal, 400)!important}:is(ax-context-menu.ax-menu-container,.ax-menu-items) ax-menu-item:hover:not(.ax-state-disabled){color:rgba(var(--ax-comp-menu-item-hover-text-color, var(--ax-sys-color-on-surface)));background-color:rgba(var(--ax-comp-menu-item-hover-bg-color, var(--ax-sys-color-surface)))!important}:is(ax-context-menu.ax-menu-container,.ax-menu-items) ax-menu-item:hover:not(.ax-state-disabled) ax-suffix ax-text{color:rgba(var(--ax-comp-menu-item-hover-suffix-text-color))}ax-context-menu.ax-action-list-horizontal{padding-inline:var(--ax-comp-menu-action-list-horizontal-padding-inline, 1rem)}ax-menu>ax-menu-item{--ax-comp-action-item-padding-inline: 0;padding-block:var(--ax-comp-menu-items-padding-block, .5rem)}ax-menu>ax-menu-item:has(>.ax-action-item-suffix:not(:empty)){gap:.5rem}ax-menu>ax-menu-item:hover:not(ax-menu ax-menu-item.ax-state-disabled){border-radius:var(--ax-comp-menu-items-border-radius, var(--ax-sys-border-radius))}ax-menu>ax-menu-item:hover:not(ax-menu ax-menu-item.ax-state-disabled)>ax-icon,ax-menu>ax-menu-item:hover:not(ax-menu ax-menu-item.ax-state-disabled)>ax-text{opacity:var(--ax-comp-menu-action-list-hover-decorator-opacity)}ax-menu.ax-action-list-horizontal{min-width:var(--ax-comp-menu-action-list-horizontal-min-width);gap:var(--ax-comp-menu-action-list-horizontal-gap)}ax-menu.ax-action-list-horizontal>ax-title{display:none}ax-menu.ax-action-list-horizontal>ax-menu-item{--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500)}ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-prefix{padding-inline-start:calc(var(--spacing, .25rem) * 0)!important}ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-suffix:not(ax-menu.ax-action-list-horizontal>ax-menu-item .ax-action-item-suffix:empty){padding-inline-end:0!important;margin-inline-start:0!important}ax-menu.ax-action-list-horizontal>ax-menu-item:hover:not(ax-menu.ax-action-list-horizontal ax-menu-item.ax-state-disabled){background-color:transparent!important}ax-menu.ax-action-list-horizontal>ax-menu-item:hover:not(ax-menu.ax-action-list-horizontal ax-menu-item.ax-state-disabled)>.ax-action-item-prefix,ax-menu.ax-action-list-horizontal>ax-menu-item:hover:not(ax-menu.ax-action-list-horizontal ax-menu-item.ax-state-disabled)>.ax-action-item-suffix{opacity:var(--ax-comp-menu-action-list-hover-decorator-opacity)}ax-menu.ax-action-list-vertical{width:max-content;min-width:var(--ax-comp-menu-action-list-vertical-min-width)}ax-menu.ax-action-list-vertical>ax-menu-item{--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500)}ax-menu.ax-action-list-vertical>ax-menu-item:hover:not(ax-menu.ax-action-list-vertical ax-menu-item.ax-state-disabled){background-color:transparent!important}ax-menu.ax-action-list-vertical>ax-menu-item:hover:not(ax-menu.ax-action-list-vertical ax-menu-item.ax-state-disabled)>.ax-action-item-prefix,ax-menu.ax-action-list-vertical>ax-menu-item:hover:not(ax-menu.ax-action-list-vertical ax-menu-item.ax-state-disabled)>.ax-action-item-suffix{opacity:var(--ax-comp-menu-action-list-hover-decorator-opacity)}}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: initial}}}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "component", type: AXMenuItemComponent, selector: "ax-menu-item", inputs: ["subItems", "name", "data", "disabled", "color"], outputs: ["onClick"] }, { kind: "component", type: AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
958
1095
|
}
|
|
959
1096
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMenuComponent, decorators: [{
|
|
960
1097
|
type: Component,
|
|
@@ -975,7 +1112,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
975
1112
|
AXDecoratorIconComponent,
|
|
976
1113
|
AsyncPipe,
|
|
977
1114
|
AXTranslatorPipe,
|
|
978
|
-
], template: "<ng-content select=\"ax-menu-item,ax-divider,ax-title,ng-container\"></ng-content>\n\n@for (node of items(); track node) {\n <ng-container [ngTemplateOutlet]=\"Recursion\" [ngTemplateOutletContext]=\"{ $implicit: node }\"> </ng-container>\n}\n\n<ng-template #Recursion let-item>\n @if (item.group?.title) {\n <ax-title>{{ item.group?.title }}</ax-title>\n }\n <ax-menu-item\n [name]=\"item.name\"\n [data]=\"item.data\"\n [disabled]=\"item.disabled\"\n [color]=\"item.color\"\n [subItems]=\"item.items ?? []\"\n >\n @if (item.icon) {\n <ax-prefix>\n <ax-icon [icon]=\"item.icon\"> </ax-icon>\n </ax-prefix>\n }\n @if (item.text) {\n <ax-text>{{ item.text | translate | async }}</ax-text>\n }\n @if (item.suffix) {\n <ax-suffix>\n <ax-text>{{ item.suffix.text | translate | async }}</ax-text>\n </ax-suffix>\n }\n @for (child of item.items; track child) {\n <ng-container [ngTemplateOutlet]=\"Recursion\" [ngTemplateOutletContext]=\"{ $implicit: child }\"></ng-container>\n }\n </ax-menu-item>\n @if (item.break) {\n <ax-divider></ax-divider>\n }\n</ng-template>\n", styles: ["@layer properties;@layer components{ax-context-menu,ax-menu{display:flex;width:max-content;color:inherit}
|
|
1115
|
+
], template: "<ng-content select=\"ax-menu-item,ax-divider,ax-title,ng-container\"></ng-content>\n\n@for (node of items(); track node) {\n <ng-container [ngTemplateOutlet]=\"Recursion\" [ngTemplateOutletContext]=\"{ $implicit: node }\"> </ng-container>\n}\n\n<ng-template #Recursion let-item>\n @if (item.group?.title) {\n <ax-title>{{ item.group?.title }}</ax-title>\n }\n <ax-menu-item\n [name]=\"item.name\"\n [data]=\"item.data\"\n [disabled]=\"item.disabled\"\n [color]=\"item.color\"\n [subItems]=\"item.items ?? []\"\n >\n @if (item.icon) {\n <ax-prefix>\n <ax-icon [icon]=\"item.icon\"> </ax-icon>\n </ax-prefix>\n }\n @if (item.text) {\n <ax-text>{{ item.text | translate | async }}</ax-text>\n }\n @if (item.suffix) {\n <ax-suffix>\n <ax-text>{{ item.suffix.text | translate | async }}</ax-text>\n </ax-suffix>\n }\n @for (child of item.items; track child) {\n <ng-container [ngTemplateOutlet]=\"Recursion\" [ngTemplateOutletContext]=\"{ $implicit: child }\"></ng-container>\n }\n </ax-menu-item>\n @if (item.break) {\n <ax-divider></ax-divider>\n }\n</ng-template>\n", styles: ["@layer properties;@layer components{ax-context-menu,ax-menu,.ax-menu-items{--ax-comp-menu-items-min-width: 12rem;--ax-comp-menu-action-list-hover-decorator-opacity: .7;--ax-comp-menu-action-list-horizontal-min-width: 12rem;--ax-comp-menu-action-list-horizontal-gap: 1.25rem;--ax-comp-menu-action-list-vertical-min-width: 12rem}ax-context-menu,ax-menu{display:flex;width:max-content;color:inherit}ax-context-menu.ax-menu-container,.ax-menu-items{--ax-comp-action-item-padding-inline: .875rem;opacity:0;display:flex;position:fixed;visibility:hidden;width:max-content;height:max-content;max-height:calc(100dvh - 1rem);flex-direction:column;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;min-width:var(--ax-comp-menu-items-min-width);color:rgba(var(--ax-comp-menu-items-text-color, var(--ax-sys-color-on-lightest-surface)));background-color:rgba(var(--ax-comp-menu-sub-item-bg-color, var(--ax-sys-color-lightest-surface)));padding-block:var(--ax-comp-menu-items-padding-block, .5rem);border-width:var(--ax-comp-menu-items-border-width, 1px);border-style:solid;border-radius:var(--ax-comp-menu-items-border-radius, var(--ax-sys-border-radius));border-color:rgba(var(--ax-comp-menu-items-border-color, var(--ax-sys-color-border-lightest-surface)));--ax-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--ax-shadow-colored: 0 4px 6px -1px var(--ax-shadow-color), 0 2px 4px -2px var(--ax-shadow-color);box-shadow:var(--ax-ring-offset-shadow, 0 0 #0000),var(--ax-ring-shadow, 0 0 #0000),var(--ax-shadow);transition-property:opacity,color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}:is(ax-context-menu.ax-menu-container,.ax-menu-items).ax-state-open{opacity:1;visibility:visible}:is(ax-context-menu.ax-menu-container,.ax-menu-items) ax-menu-item{color:rgba(var(--ax-comp-menu-item-text-color, var(--ax-sys-color-on-surface)))}:is(ax-context-menu.ax-menu-container,.ax-menu-items) ax-menu-item ax-suffix ax-text{color:rgba(var(--ax-comp-menu-item-suffix-text-color));--tw-font-weight: var(--font-weight-normal, 400) !important;font-weight:var(--font-weight-normal, 400)!important}:is(ax-context-menu.ax-menu-container,.ax-menu-items) ax-menu-item:hover:not(.ax-state-disabled){color:rgba(var(--ax-comp-menu-item-hover-text-color, var(--ax-sys-color-on-surface)));background-color:rgba(var(--ax-comp-menu-item-hover-bg-color, var(--ax-sys-color-surface)))!important}:is(ax-context-menu.ax-menu-container,.ax-menu-items) ax-menu-item:hover:not(.ax-state-disabled) ax-suffix ax-text{color:rgba(var(--ax-comp-menu-item-hover-suffix-text-color))}ax-context-menu.ax-action-list-horizontal{padding-inline:var(--ax-comp-menu-action-list-horizontal-padding-inline, 1rem)}ax-menu>ax-menu-item{--ax-comp-action-item-padding-inline: 0;padding-block:var(--ax-comp-menu-items-padding-block, .5rem)}ax-menu>ax-menu-item:has(>.ax-action-item-suffix:not(:empty)){gap:.5rem}ax-menu>ax-menu-item:hover:not(ax-menu ax-menu-item.ax-state-disabled){border-radius:var(--ax-comp-menu-items-border-radius, var(--ax-sys-border-radius))}ax-menu>ax-menu-item:hover:not(ax-menu ax-menu-item.ax-state-disabled)>ax-icon,ax-menu>ax-menu-item:hover:not(ax-menu ax-menu-item.ax-state-disabled)>ax-text{opacity:var(--ax-comp-menu-action-list-hover-decorator-opacity)}ax-menu.ax-action-list-horizontal{min-width:var(--ax-comp-menu-action-list-horizontal-min-width);gap:var(--ax-comp-menu-action-list-horizontal-gap)}ax-menu.ax-action-list-horizontal>ax-title{display:none}ax-menu.ax-action-list-horizontal>ax-menu-item{--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500)}ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-prefix{padding-inline-start:calc(var(--spacing, .25rem) * 0)!important}ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-suffix:not(ax-menu.ax-action-list-horizontal>ax-menu-item .ax-action-item-suffix:empty){padding-inline-end:0!important;margin-inline-start:0!important}ax-menu.ax-action-list-horizontal>ax-menu-item:hover:not(ax-menu.ax-action-list-horizontal ax-menu-item.ax-state-disabled){background-color:transparent!important}ax-menu.ax-action-list-horizontal>ax-menu-item:hover:not(ax-menu.ax-action-list-horizontal ax-menu-item.ax-state-disabled)>.ax-action-item-prefix,ax-menu.ax-action-list-horizontal>ax-menu-item:hover:not(ax-menu.ax-action-list-horizontal ax-menu-item.ax-state-disabled)>.ax-action-item-suffix{opacity:var(--ax-comp-menu-action-list-hover-decorator-opacity)}ax-menu.ax-action-list-vertical{width:max-content;min-width:var(--ax-comp-menu-action-list-vertical-min-width)}ax-menu.ax-action-list-vertical>ax-menu-item{--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500)}ax-menu.ax-action-list-vertical>ax-menu-item:hover:not(ax-menu.ax-action-list-vertical ax-menu-item.ax-state-disabled){background-color:transparent!important}ax-menu.ax-action-list-vertical>ax-menu-item:hover:not(ax-menu.ax-action-list-vertical ax-menu-item.ax-state-disabled)>.ax-action-item-prefix,ax-menu.ax-action-list-vertical>ax-menu-item:hover:not(ax-menu.ax-action-list-vertical ax-menu-item.ax-state-disabled)>.ax-action-item-suffix{opacity:var(--ax-comp-menu-action-list-hover-decorator-opacity)}}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: initial}}}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"] }]
|
|
979
1116
|
}], ctorParameters: () => [], propDecorators: { orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], openOn: [{ type: i0.Input, args: [{ isSignal: true, alias: "openOn", required: false }] }], closeOn: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOn", required: false }] }], onItemClick: [{ type: i0.Output, args: ["onItemClick"] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], hasArrow: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasArrow", required: false }] }], __hostClass: [{
|
|
980
1117
|
type: HostBinding,
|
|
981
1118
|
args: ['class']
|