@nanahoshi/mona-ui 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.
- package/README.md +25 -0
- package/fesm2022/nanahoshi-mona-ui-auto-complete.mjs +590 -0
- package/fesm2022/nanahoshi-mona-ui-avatar.mjs +168 -0
- package/fesm2022/nanahoshi-mona-ui-breadcrumb.mjs +220 -0
- package/fesm2022/nanahoshi-mona-ui-button-group.mjs +225 -0
- package/fesm2022/nanahoshi-mona-ui-button.mjs +497 -0
- package/fesm2022/nanahoshi-mona-ui-calendar.mjs +1569 -0
- package/fesm2022/nanahoshi-mona-ui-check-box.mjs +339 -0
- package/fesm2022/nanahoshi-mona-ui-chip.mjs +453 -0
- package/fesm2022/nanahoshi-mona-ui-circular-progress-bar.mjs +200 -0
- package/fesm2022/nanahoshi-mona-ui-color-gradient.mjs +853 -0
- package/fesm2022/nanahoshi-mona-ui-color-palette.mjs +923 -0
- package/fesm2022/nanahoshi-mona-ui-color-picker.mjs +495 -0
- package/fesm2022/nanahoshi-mona-ui-combo-box.mjs +686 -0
- package/fesm2022/nanahoshi-mona-ui-common.mjs +642 -0
- package/fesm2022/nanahoshi-mona-ui-contextmenu.mjs +485 -0
- package/fesm2022/nanahoshi-mona-ui-date-input.mjs +132 -0
- package/fesm2022/nanahoshi-mona-ui-date-picker.mjs +460 -0
- package/fesm2022/nanahoshi-mona-ui-datetime-picker.mjs +659 -0
- package/fesm2022/nanahoshi-mona-ui-dialog.mjs +828 -0
- package/fesm2022/nanahoshi-mona-ui-dropdown-button.mjs +523 -0
- package/fesm2022/nanahoshi-mona-ui-dropdown-list.mjs +615 -0
- package/fesm2022/nanahoshi-mona-ui-dropdowns.mjs +701 -0
- package/fesm2022/nanahoshi-mona-ui-editor.mjs +1400 -0
- package/fesm2022/nanahoshi-mona-ui-expansion-panel.mjs +245 -0
- package/fesm2022/nanahoshi-mona-ui-fieldset.mjs +170 -0
- package/fesm2022/nanahoshi-mona-ui-filter.mjs +680 -0
- package/fesm2022/nanahoshi-mona-ui-grid-grid-footer-cell.component-B9SQH5N-.mjs +105 -0
- package/fesm2022/nanahoshi-mona-ui-grid-grid-footer-table-cell.directive-DlLwcCFT.mjs +42 -0
- package/fesm2022/nanahoshi-mona-ui-grid-grid-list.component-Dgea-O0X.mjs +130 -0
- package/fesm2022/nanahoshi-mona-ui-grid-grid-toggle.component-DIUutx9s.mjs +773 -0
- package/fesm2022/nanahoshi-mona-ui-grid-grid-virtual-list.component-DRHycGIh.mjs +240 -0
- package/fesm2022/nanahoshi-mona-ui-grid-nanahoshi-mona-ui-grid-C3eZIaJK.mjs +5374 -0
- package/fesm2022/nanahoshi-mona-ui-grid.mjs +2 -0
- package/fesm2022/nanahoshi-mona-ui-internal-filter-input.mjs +87 -0
- package/fesm2022/nanahoshi-mona-ui-internal-indicator-icon.mjs +154 -0
- package/fesm2022/nanahoshi-mona-ui-internal-list.mjs +1356 -0
- package/fesm2022/nanahoshi-mona-ui-internal-tree.mjs +2263 -0
- package/fesm2022/nanahoshi-mona-ui-internal.mjs +379 -0
- package/fesm2022/nanahoshi-mona-ui-list-box.mjs +630 -0
- package/fesm2022/nanahoshi-mona-ui-list-view.mjs +527 -0
- package/fesm2022/nanahoshi-mona-ui-list.mjs +4 -0
- package/fesm2022/nanahoshi-mona-ui-menubar.mjs +966 -0
- package/fesm2022/nanahoshi-mona-ui-multi-select.mjs +641 -0
- package/fesm2022/nanahoshi-mona-ui-notification.mjs +536 -0
- package/fesm2022/nanahoshi-mona-ui-numeric-text-box.mjs +597 -0
- package/fesm2022/nanahoshi-mona-ui-pager.mjs +790 -0
- package/fesm2022/nanahoshi-mona-ui-placeholder.mjs +83 -0
- package/fesm2022/nanahoshi-mona-ui-popover.mjs +325 -0
- package/fesm2022/nanahoshi-mona-ui-popup-menu.mjs +1559 -0
- package/fesm2022/nanahoshi-mona-ui-popup.mjs +1321 -0
- package/fesm2022/nanahoshi-mona-ui-progress-bar.mjs +294 -0
- package/fesm2022/nanahoshi-mona-ui-query.mjs +175 -0
- package/fesm2022/nanahoshi-mona-ui-radio-button.mjs +339 -0
- package/fesm2022/nanahoshi-mona-ui-scroll-view.mjs +565 -0
- package/fesm2022/nanahoshi-mona-ui-slider.mjs +1049 -0
- package/fesm2022/nanahoshi-mona-ui-split-button.mjs +636 -0
- package/fesm2022/nanahoshi-mona-ui-splitter.mjs +843 -0
- package/fesm2022/nanahoshi-mona-ui-stepper.mjs +537 -0
- package/fesm2022/nanahoshi-mona-ui-switch.mjs +308 -0
- package/fesm2022/nanahoshi-mona-ui-tabs.mjs +664 -0
- package/fesm2022/nanahoshi-mona-ui-text-area.mjs +111 -0
- package/fesm2022/nanahoshi-mona-ui-text-box.mjs +369 -0
- package/fesm2022/nanahoshi-mona-ui-theme.mjs +314 -0
- package/fesm2022/nanahoshi-mona-ui-time-picker.mjs +450 -0
- package/fesm2022/nanahoshi-mona-ui-time-selector.mjs +723 -0
- package/fesm2022/nanahoshi-mona-ui-tooltip.mjs +716 -0
- package/fesm2022/nanahoshi-mona-ui-tree-view.mjs +733 -0
- package/fesm2022/nanahoshi-mona-ui-window.mjs +1329 -0
- package/fesm2022/nanahoshi-mona-ui.mjs +9 -0
- package/package.json +289 -0
- package/types/nanahoshi-mona-ui-auto-complete.d.ts +223 -0
- package/types/nanahoshi-mona-ui-avatar.d.ts +642 -0
- package/types/nanahoshi-mona-ui-breadcrumb.d.ts +70 -0
- package/types/nanahoshi-mona-ui-button-group.d.ts +77 -0
- package/types/nanahoshi-mona-ui-button.d.ts +111 -0
- package/types/nanahoshi-mona-ui-calendar.d.ts +262 -0
- package/types/nanahoshi-mona-ui-check-box.d.ts +133 -0
- package/types/nanahoshi-mona-ui-chip.d.ts +130 -0
- package/types/nanahoshi-mona-ui-circular-progress-bar.d.ts +113 -0
- package/types/nanahoshi-mona-ui-color-gradient.d.ts +201 -0
- package/types/nanahoshi-mona-ui-color-palette.d.ts +102 -0
- package/types/nanahoshi-mona-ui-color-picker.d.ts +156 -0
- package/types/nanahoshi-mona-ui-combo-box.d.ts +232 -0
- package/types/nanahoshi-mona-ui-common.d.ts +386 -0
- package/types/nanahoshi-mona-ui-contextmenu.d.ts +129 -0
- package/types/nanahoshi-mona-ui-date-input.d.ts +60 -0
- package/types/nanahoshi-mona-ui-date-picker.d.ts +177 -0
- package/types/nanahoshi-mona-ui-datetime-picker.d.ts +199 -0
- package/types/nanahoshi-mona-ui-dialog.d.ts +261 -0
- package/types/nanahoshi-mona-ui-dropdown-button.d.ts +159 -0
- package/types/nanahoshi-mona-ui-dropdown-list.d.ts +219 -0
- package/types/nanahoshi-mona-ui-dropdowns.d.ts +176 -0
- package/types/nanahoshi-mona-ui-editor.d.ts +113 -0
- package/types/nanahoshi-mona-ui-expansion-panel.d.ts +87 -0
- package/types/nanahoshi-mona-ui-fieldset.d.ts +68 -0
- package/types/nanahoshi-mona-ui-filter.d.ts +115 -0
- package/types/nanahoshi-mona-ui-grid.d.ts +1114 -0
- package/types/nanahoshi-mona-ui-internal-filter-input.d.ts +25 -0
- package/types/nanahoshi-mona-ui-internal-indicator-icon.d.ts +28 -0
- package/types/nanahoshi-mona-ui-internal-list.d.ts +269 -0
- package/types/nanahoshi-mona-ui-internal-tree.d.ts +391 -0
- package/types/nanahoshi-mona-ui-internal.d.ts +136 -0
- package/types/nanahoshi-mona-ui-list-box.d.ts +225 -0
- package/types/nanahoshi-mona-ui-list-view.d.ts +188 -0
- package/types/nanahoshi-mona-ui-list.d.ts +1 -0
- package/types/nanahoshi-mona-ui-menubar.d.ts +198 -0
- package/types/nanahoshi-mona-ui-multi-select.d.ts +247 -0
- package/types/nanahoshi-mona-ui-notification.d.ts +106 -0
- package/types/nanahoshi-mona-ui-numeric-text-box.d.ts +161 -0
- package/types/nanahoshi-mona-ui-pager.d.ts +238 -0
- package/types/nanahoshi-mona-ui-placeholder.d.ts +35 -0
- package/types/nanahoshi-mona-ui-popover.d.ts +130 -0
- package/types/nanahoshi-mona-ui-popup-menu.d.ts +412 -0
- package/types/nanahoshi-mona-ui-popup.d.ts +485 -0
- package/types/nanahoshi-mona-ui-progress-bar.d.ts +139 -0
- package/types/nanahoshi-mona-ui-query.d.ts +89 -0
- package/types/nanahoshi-mona-ui-radio-button.d.ts +128 -0
- package/types/nanahoshi-mona-ui-scroll-view.d.ts +166 -0
- package/types/nanahoshi-mona-ui-slider.d.ts +305 -0
- package/types/nanahoshi-mona-ui-split-button.d.ts +182 -0
- package/types/nanahoshi-mona-ui-splitter.d.ts +70 -0
- package/types/nanahoshi-mona-ui-stepper.d.ts +173 -0
- package/types/nanahoshi-mona-ui-switch.d.ts +125 -0
- package/types/nanahoshi-mona-ui-tabs.d.ts +158 -0
- package/types/nanahoshi-mona-ui-text-area.d.ts +42 -0
- package/types/nanahoshi-mona-ui-text-box.d.ts +164 -0
- package/types/nanahoshi-mona-ui-theme.d.ts +23 -0
- package/types/nanahoshi-mona-ui-time-picker.d.ts +184 -0
- package/types/nanahoshi-mona-ui-time-selector.d.ts +143 -0
- package/types/nanahoshi-mona-ui-tooltip.d.ts +130 -0
- package/types/nanahoshi-mona-ui-tree-view.d.ts +274 -0
- package/types/nanahoshi-mona-ui-window.d.ts +295 -0
- package/types/nanahoshi-mona-ui.d.ts +2 -0
|
@@ -0,0 +1,966 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Directive, contentChildren, input, contentChild, TemplateRef, computed, ChangeDetectionStrategy, Component, effect, forwardRef, inject, DestroyRef, DOCUMENT, ElementRef, signal, viewChildren, output, untracked, afterNextRender } from '@angular/core';
|
|
3
|
+
import { PopupMenuToken, preparePopupMenuItems, PopupMenuItemType, PopupMenuTemplateType, ensurePopupComponentTypes, PopupMenuOrigin, ensurePopupTemplateTypes, PopupMenuTemplateOrigin, PopupMenuCheckboxItemComponent, PopupMenuGroupComponent, PopupMenuItemComponent, PopupMenuRadioGroupComponent, PopupMenuRadioItemComponent, PopupMenuRadioItemToken, PopupMenuSeparatorComponent, PopupMenuGroupTemplateDirective, PopupMenuGroupTemplateToken, PopupMenuIconTemplateDirective, PopupMenuIconTemplateToken, PopupMenuShortcutTemplateDirective, PopupMenuShortcutTemplateToken, PopupMenuTextTemplateDirective, PopupMenuTextTemplateToken, PopupMenuComponent } from '@nanahoshi/mona-ui/popup-menu';
|
|
4
|
+
import { any, zip, rotate } from '@mirei/ts-collections';
|
|
5
|
+
import { v4 } from 'uuid';
|
|
6
|
+
import { NgTemplateOutlet } from '@angular/common';
|
|
7
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
8
|
+
import { ThemeService } from '@nanahoshi/mona-ui/theme';
|
|
9
|
+
import { Subject, startWith, pairwise, tap } from 'rxjs';
|
|
10
|
+
import { twMerge } from 'tailwind-merge';
|
|
11
|
+
import { cva } from 'class-variance-authority';
|
|
12
|
+
|
|
13
|
+
class MenuIconTemplateDirective {
|
|
14
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MenuIconTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
15
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.6", type: MenuIconTemplateDirective, isStandalone: true, selector: "ng-template[monaMenuIconTemplate]", ngImport: i0 }); }
|
|
16
|
+
}
|
|
17
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MenuIconTemplateDirective, decorators: [{
|
|
18
|
+
type: Directive,
|
|
19
|
+
args: [{
|
|
20
|
+
selector: "ng-template[monaMenuIconTemplate]"
|
|
21
|
+
}]
|
|
22
|
+
}] });
|
|
23
|
+
|
|
24
|
+
class MenuTextTemplateDirective {
|
|
25
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MenuTextTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
26
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.6", type: MenuTextTemplateDirective, isStandalone: true, selector: "ng-template[monaMenuTextTemplate]", ngImport: i0 }); }
|
|
27
|
+
}
|
|
28
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MenuTextTemplateDirective, decorators: [{
|
|
29
|
+
type: Directive,
|
|
30
|
+
args: [{
|
|
31
|
+
selector: "ng-template[monaMenuTextTemplate]"
|
|
32
|
+
}]
|
|
33
|
+
}] });
|
|
34
|
+
|
|
35
|
+
class MenuComponent {
|
|
36
|
+
constructor() {
|
|
37
|
+
this.menuItemComponents = contentChildren(PopupMenuToken, { ...(ngDevMode ? { debugName: "menuItemComponents" } : /* istanbul ignore next */ {}), descendants: false });
|
|
38
|
+
/**
|
|
39
|
+
* @description Sets the menu as disabled.
|
|
40
|
+
*/
|
|
41
|
+
this.disabled = input(false, /* @ts-ignore */
|
|
42
|
+
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
43
|
+
this.iconTemplate = contentChild(MenuIconTemplateDirective, { ...(ngDevMode ? { debugName: "iconTemplate" } : /* istanbul ignore next */ {}), read: TemplateRef });
|
|
44
|
+
/**
|
|
45
|
+
* @description Sets the items of the menu.
|
|
46
|
+
* If provided, it will override the menu items defined by the menu item components.
|
|
47
|
+
*/
|
|
48
|
+
this.items = input([], /* @ts-ignore */
|
|
49
|
+
...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
|
|
50
|
+
this.menuItems = computed(() => {
|
|
51
|
+
if (any(this.items())) {
|
|
52
|
+
return preparePopupMenuItems(this.items());
|
|
53
|
+
}
|
|
54
|
+
return this.menuItemComponents()
|
|
55
|
+
.map(item => item.getPopupMenuItem())
|
|
56
|
+
.flatMap(i => i);
|
|
57
|
+
}, /* @ts-ignore */
|
|
58
|
+
...(ngDevMode ? [{ debugName: "menuItems" }] : /* istanbul ignore next */ []));
|
|
59
|
+
this.textTemplate = contentChild(MenuTextTemplateDirective, { ...(ngDevMode ? { debugName: "textTemplate" } : /* istanbul ignore next */ {}), read: TemplateRef });
|
|
60
|
+
/**
|
|
61
|
+
* @description The text of the menu.
|
|
62
|
+
*/
|
|
63
|
+
this.text = input("", /* @ts-ignore */
|
|
64
|
+
...(ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []));
|
|
65
|
+
this.uid = v4();
|
|
66
|
+
this.popupMenu = null;
|
|
67
|
+
}
|
|
68
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
69
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.0.6", type: MenuComponent, isStandalone: true, selector: "mona-menu", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "menuItemComponents", predicate: PopupMenuToken, isSignal: true }, { propertyName: "iconTemplate", first: true, predicate: MenuIconTemplateDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "textTemplate", first: true, predicate: MenuTextTemplateDirective, descendants: true, read: TemplateRef, isSignal: true }], ngImport: i0, template: "", isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
70
|
+
}
|
|
71
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MenuComponent, decorators: [{
|
|
72
|
+
type: Component,
|
|
73
|
+
args: [{
|
|
74
|
+
selector: "mona-menu",
|
|
75
|
+
template: "",
|
|
76
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
|
77
|
+
}]
|
|
78
|
+
}], propDecorators: { menuItemComponents: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => PopupMenuToken), { ...{ descendants: false }, isSignal: true }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], iconTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MenuIconTemplateDirective), { ...{
|
|
79
|
+
read: TemplateRef
|
|
80
|
+
}, isSignal: true }] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], textTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MenuTextTemplateDirective), { ...{ read: TemplateRef }, isSignal: true }] }], text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: false }] }] } });
|
|
81
|
+
|
|
82
|
+
const componentTypeMap = {
|
|
83
|
+
[PopupMenuItemType.CheckboxMenuItem]: "mona-menu-checkbox-item",
|
|
84
|
+
[PopupMenuItemType.MenuGroup]: "mona-menu-group",
|
|
85
|
+
[PopupMenuItemType.MenuItem]: "mona-menu-item",
|
|
86
|
+
[PopupMenuItemType.RadioGroup]: "mona-menu-radio-group",
|
|
87
|
+
[PopupMenuItemType.RadioItem]: "mona-menu-radio-item",
|
|
88
|
+
[PopupMenuItemType.Separator]: "mona-menu-separator"
|
|
89
|
+
};
|
|
90
|
+
const templateTypeMap = {
|
|
91
|
+
[PopupMenuTemplateType.Group]: "monaMenubarMenuGroupTemplate",
|
|
92
|
+
[PopupMenuTemplateType.Icon]: "monaMenubarMenuItemIconTemplate",
|
|
93
|
+
[PopupMenuTemplateType.Shortcut]: "monaMenubarMenuItemShortcutTemplate",
|
|
94
|
+
[PopupMenuTemplateType.Text]: "monaMenubarMenuItemTextTemplate"
|
|
95
|
+
};
|
|
96
|
+
const ensureMenubarComponentTypes = (components) => {
|
|
97
|
+
ensurePopupComponentTypes({
|
|
98
|
+
components,
|
|
99
|
+
componentTypeMap,
|
|
100
|
+
origin: PopupMenuOrigin.MenubarMenu,
|
|
101
|
+
prefix: "mona-menu"
|
|
102
|
+
});
|
|
103
|
+
};
|
|
104
|
+
const ensureMenubarTemplateTypes = (templates) => {
|
|
105
|
+
ensurePopupTemplateTypes({
|
|
106
|
+
templates,
|
|
107
|
+
templateTypeMap,
|
|
108
|
+
origin: PopupMenuTemplateOrigin.MenubarMenu,
|
|
109
|
+
prefix: "mona-menu"
|
|
110
|
+
});
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
class MenuCheckboxItemComponent extends PopupMenuCheckboxItemComponent {
|
|
114
|
+
constructor() {
|
|
115
|
+
super();
|
|
116
|
+
this.origin = PopupMenuOrigin.MenubarMenu;
|
|
117
|
+
effect(() => ensureMenubarTemplateTypes([this.shortcutTemplateConfig(), this.textTemplateConfig()].filter(t => t !== undefined)));
|
|
118
|
+
}
|
|
119
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MenuCheckboxItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
120
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.6", type: MenuCheckboxItemComponent, isStandalone: true, selector: "mona-menu-checkbox-item", providers: [
|
|
121
|
+
{
|
|
122
|
+
provide: PopupMenuToken,
|
|
123
|
+
useExisting: forwardRef(() => MenuCheckboxItemComponent)
|
|
124
|
+
}
|
|
125
|
+
], usesInheritance: true, ngImport: i0, template: "", isInline: true }); }
|
|
126
|
+
}
|
|
127
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MenuCheckboxItemComponent, decorators: [{
|
|
128
|
+
type: Component,
|
|
129
|
+
args: [{
|
|
130
|
+
selector: "mona-menu-checkbox-item",
|
|
131
|
+
template: "",
|
|
132
|
+
providers: [
|
|
133
|
+
{
|
|
134
|
+
provide: PopupMenuToken,
|
|
135
|
+
useExisting: forwardRef(() => MenuCheckboxItemComponent)
|
|
136
|
+
}
|
|
137
|
+
]
|
|
138
|
+
}]
|
|
139
|
+
}], ctorParameters: () => [] });
|
|
140
|
+
|
|
141
|
+
class MenuGroupComponent extends PopupMenuGroupComponent {
|
|
142
|
+
constructor() {
|
|
143
|
+
super();
|
|
144
|
+
this.origin = PopupMenuOrigin.MenubarMenu;
|
|
145
|
+
effect(() => ensureMenubarComponentTypes(this.items()));
|
|
146
|
+
effect(() => ensureMenubarTemplateTypes([this.groupTemplateConfig()].filter(t => t !== undefined)));
|
|
147
|
+
}
|
|
148
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MenuGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
149
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.6", type: MenuGroupComponent, isStandalone: true, selector: "mona-menu-group", providers: [
|
|
150
|
+
{
|
|
151
|
+
provide: PopupMenuToken,
|
|
152
|
+
useExisting: forwardRef(() => MenuGroupComponent)
|
|
153
|
+
}
|
|
154
|
+
], usesInheritance: true, ngImport: i0, template: "", isInline: true }); }
|
|
155
|
+
}
|
|
156
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MenuGroupComponent, decorators: [{
|
|
157
|
+
type: Component,
|
|
158
|
+
args: [{
|
|
159
|
+
selector: "mona-menu-group",
|
|
160
|
+
template: "",
|
|
161
|
+
providers: [
|
|
162
|
+
{
|
|
163
|
+
provide: PopupMenuToken,
|
|
164
|
+
useExisting: forwardRef(() => MenuGroupComponent)
|
|
165
|
+
}
|
|
166
|
+
]
|
|
167
|
+
}]
|
|
168
|
+
}], ctorParameters: () => [] });
|
|
169
|
+
|
|
170
|
+
class MenuItemComponent extends PopupMenuItemComponent {
|
|
171
|
+
constructor() {
|
|
172
|
+
super();
|
|
173
|
+
this.origin = PopupMenuOrigin.MenubarMenu;
|
|
174
|
+
effect(() => ensureMenubarComponentTypes(this.items()));
|
|
175
|
+
effect(() => ensureMenubarTemplateTypes([this.iconTemplateConfig(), this.shortcutTemplateConfig(), this.textTemplateConfig()].filter(t => t !== undefined)));
|
|
176
|
+
}
|
|
177
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MenuItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
178
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.6", type: MenuItemComponent, isStandalone: true, selector: "mona-menu-item", providers: [
|
|
179
|
+
{
|
|
180
|
+
provide: PopupMenuToken,
|
|
181
|
+
useExisting: forwardRef(() => MenuItemComponent)
|
|
182
|
+
}
|
|
183
|
+
], usesInheritance: true, ngImport: i0, template: "", isInline: true }); }
|
|
184
|
+
}
|
|
185
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MenuItemComponent, decorators: [{
|
|
186
|
+
type: Component,
|
|
187
|
+
args: [{
|
|
188
|
+
selector: "mona-menu-item",
|
|
189
|
+
template: "",
|
|
190
|
+
providers: [
|
|
191
|
+
{
|
|
192
|
+
provide: PopupMenuToken,
|
|
193
|
+
useExisting: forwardRef(() => MenuItemComponent)
|
|
194
|
+
}
|
|
195
|
+
]
|
|
196
|
+
}]
|
|
197
|
+
}], ctorParameters: () => [] });
|
|
198
|
+
|
|
199
|
+
class MenuRadioGroupComponent extends PopupMenuRadioGroupComponent {
|
|
200
|
+
constructor() {
|
|
201
|
+
super();
|
|
202
|
+
this.origin = PopupMenuOrigin.MenubarMenu;
|
|
203
|
+
effect(() => ensureMenubarComponentTypes(this.items()));
|
|
204
|
+
effect(() => ensureMenubarTemplateTypes([this.groupTemplateConfig()].filter(t => t !== undefined)));
|
|
205
|
+
}
|
|
206
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MenuRadioGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
207
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.6", type: MenuRadioGroupComponent, isStandalone: true, selector: "mona-menu-radio-group", providers: [
|
|
208
|
+
{
|
|
209
|
+
provide: PopupMenuToken,
|
|
210
|
+
useExisting: forwardRef(() => MenuRadioGroupComponent)
|
|
211
|
+
}
|
|
212
|
+
], usesInheritance: true, ngImport: i0, template: "", isInline: true }); }
|
|
213
|
+
}
|
|
214
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MenuRadioGroupComponent, decorators: [{
|
|
215
|
+
type: Component,
|
|
216
|
+
args: [{
|
|
217
|
+
selector: "mona-menu-radio-group",
|
|
218
|
+
template: "",
|
|
219
|
+
providers: [
|
|
220
|
+
{
|
|
221
|
+
provide: PopupMenuToken,
|
|
222
|
+
useExisting: forwardRef(() => MenuRadioGroupComponent)
|
|
223
|
+
}
|
|
224
|
+
]
|
|
225
|
+
}]
|
|
226
|
+
}], ctorParameters: () => [] });
|
|
227
|
+
|
|
228
|
+
class MenuRadioItemComponent extends PopupMenuRadioItemComponent {
|
|
229
|
+
constructor() {
|
|
230
|
+
super();
|
|
231
|
+
this.origin = PopupMenuOrigin.MenubarMenu;
|
|
232
|
+
effect(() => ensureMenubarTemplateTypes([this.shortcutTemplateConfig(), this.textTemplateConfig()].filter(t => t !== undefined)));
|
|
233
|
+
}
|
|
234
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MenuRadioItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
235
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.6", type: MenuRadioItemComponent, isStandalone: true, selector: "mona-menu-radio-item", providers: [
|
|
236
|
+
{
|
|
237
|
+
provide: PopupMenuToken,
|
|
238
|
+
useExisting: forwardRef(() => MenuRadioItemComponent)
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
provide: PopupMenuRadioItemToken,
|
|
242
|
+
useExisting: forwardRef(() => MenuRadioItemComponent)
|
|
243
|
+
}
|
|
244
|
+
], usesInheritance: true, ngImport: i0, template: "", isInline: true }); }
|
|
245
|
+
}
|
|
246
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MenuRadioItemComponent, decorators: [{
|
|
247
|
+
type: Component,
|
|
248
|
+
args: [{
|
|
249
|
+
selector: "mona-menu-radio-item",
|
|
250
|
+
template: "",
|
|
251
|
+
providers: [
|
|
252
|
+
{
|
|
253
|
+
provide: PopupMenuToken,
|
|
254
|
+
useExisting: forwardRef(() => MenuRadioItemComponent)
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
provide: PopupMenuRadioItemToken,
|
|
258
|
+
useExisting: forwardRef(() => MenuRadioItemComponent)
|
|
259
|
+
}
|
|
260
|
+
]
|
|
261
|
+
}]
|
|
262
|
+
}], ctorParameters: () => [] });
|
|
263
|
+
|
|
264
|
+
class MenuSeparatorComponent extends PopupMenuSeparatorComponent {
|
|
265
|
+
constructor() {
|
|
266
|
+
super(...arguments);
|
|
267
|
+
this.origin = PopupMenuOrigin.MenubarMenu;
|
|
268
|
+
}
|
|
269
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MenuSeparatorComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
270
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.6", type: MenuSeparatorComponent, isStandalone: true, selector: "mona-menu-separator", providers: [
|
|
271
|
+
{
|
|
272
|
+
provide: PopupMenuToken,
|
|
273
|
+
useExisting: forwardRef(() => MenuSeparatorComponent)
|
|
274
|
+
}
|
|
275
|
+
], usesInheritance: true, ngImport: i0, template: "", isInline: true }); }
|
|
276
|
+
}
|
|
277
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MenuSeparatorComponent, decorators: [{
|
|
278
|
+
type: Component,
|
|
279
|
+
args: [{
|
|
280
|
+
selector: "mona-menu-separator",
|
|
281
|
+
template: "",
|
|
282
|
+
providers: [
|
|
283
|
+
{
|
|
284
|
+
provide: PopupMenuToken,
|
|
285
|
+
useExisting: forwardRef(() => MenuSeparatorComponent)
|
|
286
|
+
}
|
|
287
|
+
]
|
|
288
|
+
}]
|
|
289
|
+
}] });
|
|
290
|
+
|
|
291
|
+
class MenuGroupTemplateDirective extends PopupMenuGroupTemplateDirective {
|
|
292
|
+
constructor() {
|
|
293
|
+
super(...arguments);
|
|
294
|
+
this.origin = PopupMenuTemplateOrigin.MenubarMenu;
|
|
295
|
+
}
|
|
296
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MenuGroupTemplateDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
297
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.6", type: MenuGroupTemplateDirective, isStandalone: true, selector: "ng-template[monaMenuGroupTemplate]", providers: [
|
|
298
|
+
{
|
|
299
|
+
provide: PopupMenuGroupTemplateToken,
|
|
300
|
+
useExisting: forwardRef(() => MenuGroupTemplateDirective)
|
|
301
|
+
}
|
|
302
|
+
], usesInheritance: true, ngImport: i0 }); }
|
|
303
|
+
}
|
|
304
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MenuGroupTemplateDirective, decorators: [{
|
|
305
|
+
type: Directive,
|
|
306
|
+
args: [{
|
|
307
|
+
selector: "ng-template[monaMenuGroupTemplate]",
|
|
308
|
+
providers: [
|
|
309
|
+
{
|
|
310
|
+
provide: PopupMenuGroupTemplateToken,
|
|
311
|
+
useExisting: forwardRef(() => MenuGroupTemplateDirective)
|
|
312
|
+
}
|
|
313
|
+
]
|
|
314
|
+
}]
|
|
315
|
+
}] });
|
|
316
|
+
|
|
317
|
+
class MenuItemIconTemplateDirective extends PopupMenuIconTemplateDirective {
|
|
318
|
+
constructor() {
|
|
319
|
+
super(...arguments);
|
|
320
|
+
this.origin = PopupMenuTemplateOrigin.MenubarMenu;
|
|
321
|
+
}
|
|
322
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MenuItemIconTemplateDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
323
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.6", type: MenuItemIconTemplateDirective, isStandalone: true, selector: "ng-template[monaMenuItemIconTemplate]", providers: [
|
|
324
|
+
{
|
|
325
|
+
provide: PopupMenuIconTemplateToken,
|
|
326
|
+
useExisting: forwardRef(() => MenuItemIconTemplateDirective)
|
|
327
|
+
}
|
|
328
|
+
], usesInheritance: true, ngImport: i0 }); }
|
|
329
|
+
}
|
|
330
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MenuItemIconTemplateDirective, decorators: [{
|
|
331
|
+
type: Directive,
|
|
332
|
+
args: [{
|
|
333
|
+
selector: "ng-template[monaMenuItemIconTemplate]",
|
|
334
|
+
providers: [
|
|
335
|
+
{
|
|
336
|
+
provide: PopupMenuIconTemplateToken,
|
|
337
|
+
useExisting: forwardRef(() => MenuItemIconTemplateDirective)
|
|
338
|
+
}
|
|
339
|
+
]
|
|
340
|
+
}]
|
|
341
|
+
}] });
|
|
342
|
+
|
|
343
|
+
class MenuItemShortcutTemplateDirective extends PopupMenuShortcutTemplateDirective {
|
|
344
|
+
constructor() {
|
|
345
|
+
super(...arguments);
|
|
346
|
+
this.origin = PopupMenuTemplateOrigin.MenubarMenu;
|
|
347
|
+
}
|
|
348
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MenuItemShortcutTemplateDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
349
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.6", type: MenuItemShortcutTemplateDirective, isStandalone: true, selector: "ng-template[monaMenuItemShortcutTemplate]", providers: [
|
|
350
|
+
{
|
|
351
|
+
provide: PopupMenuShortcutTemplateToken,
|
|
352
|
+
useExisting: forwardRef(() => MenuItemShortcutTemplateDirective)
|
|
353
|
+
}
|
|
354
|
+
], usesInheritance: true, ngImport: i0 }); }
|
|
355
|
+
}
|
|
356
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MenuItemShortcutTemplateDirective, decorators: [{
|
|
357
|
+
type: Directive,
|
|
358
|
+
args: [{
|
|
359
|
+
selector: "ng-template[monaMenuItemShortcutTemplate]",
|
|
360
|
+
providers: [
|
|
361
|
+
{
|
|
362
|
+
provide: PopupMenuShortcutTemplateToken,
|
|
363
|
+
useExisting: forwardRef(() => MenuItemShortcutTemplateDirective)
|
|
364
|
+
}
|
|
365
|
+
]
|
|
366
|
+
}]
|
|
367
|
+
}] });
|
|
368
|
+
|
|
369
|
+
class MenuItemTextTemplateDirective extends PopupMenuTextTemplateDirective {
|
|
370
|
+
constructor() {
|
|
371
|
+
super(...arguments);
|
|
372
|
+
this.origin = PopupMenuTemplateOrigin.MenubarMenu;
|
|
373
|
+
}
|
|
374
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MenuItemTextTemplateDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
375
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.6", type: MenuItemTextTemplateDirective, isStandalone: true, selector: "ng-template[monaMenuItemTextTemplate]", providers: [
|
|
376
|
+
{
|
|
377
|
+
provide: PopupMenuTextTemplateToken,
|
|
378
|
+
useExisting: forwardRef(() => MenuItemTextTemplateDirective)
|
|
379
|
+
}
|
|
380
|
+
], usesInheritance: true, ngImport: i0 }); }
|
|
381
|
+
}
|
|
382
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MenuItemTextTemplateDirective, decorators: [{
|
|
383
|
+
type: Directive,
|
|
384
|
+
args: [{
|
|
385
|
+
selector: "ng-template[monaMenuItemTextTemplate]",
|
|
386
|
+
providers: [
|
|
387
|
+
{
|
|
388
|
+
provide: PopupMenuTextTemplateToken,
|
|
389
|
+
useExisting: forwardRef(() => MenuItemTextTemplateDirective)
|
|
390
|
+
}
|
|
391
|
+
]
|
|
392
|
+
}]
|
|
393
|
+
}] });
|
|
394
|
+
|
|
395
|
+
const contextMenuContentVariants = cva(`
|
|
396
|
+
w-full gap-4 overflow-hidden
|
|
397
|
+
bg-background text-foreground
|
|
398
|
+
shadow-lg border border-border
|
|
399
|
+
`, {
|
|
400
|
+
variants: {
|
|
401
|
+
rounded: {
|
|
402
|
+
small: "rounded-sm",
|
|
403
|
+
medium: "rounded-md",
|
|
404
|
+
large: "rounded-lg",
|
|
405
|
+
none: "rounded-none"
|
|
406
|
+
},
|
|
407
|
+
size: {
|
|
408
|
+
small: "px-1 py-0.5",
|
|
409
|
+
medium: "px-1.5 py-1",
|
|
410
|
+
large: "px-2 py-1.5"
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
});
|
|
414
|
+
const contextMenuDividerVariants = cva(`-mx-0.5 my-1 h-px bg-border`);
|
|
415
|
+
const menuItemGroupHeaderVariants = cva(`font-bold inline-flex select-none px-2 py-1 w-full`, {
|
|
416
|
+
variants: {
|
|
417
|
+
size: {
|
|
418
|
+
small: "text-xs",
|
|
419
|
+
medium: "text-sm",
|
|
420
|
+
large: "text-md"
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
});
|
|
424
|
+
const menuItemIconVariants = cva(`absolute left-2 flex h-3.5 w-3.5 items-center justify-center`);
|
|
425
|
+
const menuItemLinkVariants = cva(`flex h-3.5 w-3.5 items-center justify-center`);
|
|
426
|
+
const menuItemShortcutVariants = cva(`flex items-center justify-end flex-1 opacity-60 text-xs`);
|
|
427
|
+
const menuItemTextVariants = cva(`flex flex-1 items-center justify-start gap-2`);
|
|
428
|
+
const menuItemVariants = cva(`
|
|
429
|
+
relative flex cursor-default select-none items-center px-2 py-1.5 gap-4
|
|
430
|
+
outline-none
|
|
431
|
+
|
|
432
|
+
hover:bg-hover
|
|
433
|
+
hover:text-hover-foreground
|
|
434
|
+
|
|
435
|
+
focus-within:bg-accent
|
|
436
|
+
focus-within:text-accent-foreground
|
|
437
|
+
focus-within:outline-none
|
|
438
|
+
|
|
439
|
+
data-[disabled='true']:pointer-events-none
|
|
440
|
+
data-[disabled='true']:cursor-not-allowed
|
|
441
|
+
data-[disabled='true']:opacity-50
|
|
442
|
+
|
|
443
|
+
data-[focused]:bg-accent
|
|
444
|
+
data-[focused]:text-accent-foreground
|
|
445
|
+
`, {
|
|
446
|
+
variants: {
|
|
447
|
+
size: {
|
|
448
|
+
small: "px-2 py-1 text-xs",
|
|
449
|
+
medium: "px-2 py-1.5 text-sm",
|
|
450
|
+
large: "px-3 py-2 text-md"
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
});
|
|
454
|
+
const menubarBaseVariants = cva(`
|
|
455
|
+
flex items-center justify-center
|
|
456
|
+
gap-1 overflow-hidden
|
|
457
|
+
bg-background text-foreground
|
|
458
|
+
shadow-sm border border-border
|
|
459
|
+
|
|
460
|
+
data-[disabled='true']:pointer-events-none
|
|
461
|
+
data-[disabled='true']:cursor-not-allowed
|
|
462
|
+
data-[disabled='true']:opacity-50
|
|
463
|
+
`, {
|
|
464
|
+
variants: {
|
|
465
|
+
rounded: {
|
|
466
|
+
small: "rounded-sm",
|
|
467
|
+
medium: "rounded-md",
|
|
468
|
+
large: "rounded-lg",
|
|
469
|
+
none: "rounded-none"
|
|
470
|
+
},
|
|
471
|
+
size: {
|
|
472
|
+
small: "h-8 text-xs",
|
|
473
|
+
medium: "h-10 text-sm",
|
|
474
|
+
large: "h-12 text-md"
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
});
|
|
478
|
+
const menubarListItemVariants = cva(`
|
|
479
|
+
h-full flex items-center justify-center
|
|
480
|
+
px-2 py-1.5
|
|
481
|
+
cursor-pointer outline-none
|
|
482
|
+
|
|
483
|
+
hover:bg-hover
|
|
484
|
+
hover:text-hover-foreground
|
|
485
|
+
focus-within:bg-accent
|
|
486
|
+
focus-within:text-accent-foreground
|
|
487
|
+
focus-within:outline-none
|
|
488
|
+
data-[disabled='true']:pointer-events-none
|
|
489
|
+
data-[disabled='true']:cursor-not-allowed
|
|
490
|
+
data-[disabled='true']:opacity-50
|
|
491
|
+
data-[active='true']:bg-accent
|
|
492
|
+
data-[active='true']:text-accent-foreground
|
|
493
|
+
`, {
|
|
494
|
+
variants: {
|
|
495
|
+
rounded: {
|
|
496
|
+
small: "rounded-sm",
|
|
497
|
+
medium: "rounded-md",
|
|
498
|
+
large: "rounded-lg",
|
|
499
|
+
none: "rounded-none"
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
});
|
|
503
|
+
const menubarListVariants = cva(`
|
|
504
|
+
w-full h-full list-none
|
|
505
|
+
flex items-center select-none
|
|
506
|
+
p-1
|
|
507
|
+
`);
|
|
508
|
+
|
|
509
|
+
const contextMenuContentThemeVariants = (theme) => {
|
|
510
|
+
switch (theme) {
|
|
511
|
+
case "mona":
|
|
512
|
+
return contextMenuContentVariants;
|
|
513
|
+
default:
|
|
514
|
+
return contextMenuContentVariants;
|
|
515
|
+
}
|
|
516
|
+
};
|
|
517
|
+
const contextMenuDividerThemeVariants = (theme) => {
|
|
518
|
+
switch (theme) {
|
|
519
|
+
case "mona":
|
|
520
|
+
return contextMenuDividerVariants;
|
|
521
|
+
default:
|
|
522
|
+
return contextMenuDividerVariants;
|
|
523
|
+
}
|
|
524
|
+
};
|
|
525
|
+
const menuItemGroupHeaderThemeVariants = (theme) => {
|
|
526
|
+
switch (theme) {
|
|
527
|
+
case "mona":
|
|
528
|
+
return menuItemGroupHeaderVariants;
|
|
529
|
+
default:
|
|
530
|
+
return menuItemGroupHeaderVariants;
|
|
531
|
+
}
|
|
532
|
+
};
|
|
533
|
+
const menuItemIconThemeVariants = (theme) => {
|
|
534
|
+
switch (theme) {
|
|
535
|
+
case "mona":
|
|
536
|
+
return menuItemIconVariants;
|
|
537
|
+
default:
|
|
538
|
+
return menuItemIconVariants;
|
|
539
|
+
}
|
|
540
|
+
};
|
|
541
|
+
const menuItemLinkThemeVariants = (theme) => {
|
|
542
|
+
switch (theme) {
|
|
543
|
+
case "mona":
|
|
544
|
+
return menuItemLinkVariants;
|
|
545
|
+
default:
|
|
546
|
+
return menuItemLinkVariants;
|
|
547
|
+
}
|
|
548
|
+
};
|
|
549
|
+
const menuItemShortcutThemeVariants = (theme) => {
|
|
550
|
+
switch (theme) {
|
|
551
|
+
case "mona":
|
|
552
|
+
return menuItemShortcutVariants;
|
|
553
|
+
default:
|
|
554
|
+
return menuItemShortcutVariants;
|
|
555
|
+
}
|
|
556
|
+
};
|
|
557
|
+
const menuItemTextThemeVariants = (theme) => {
|
|
558
|
+
switch (theme) {
|
|
559
|
+
case "mona":
|
|
560
|
+
return menuItemTextVariants;
|
|
561
|
+
default:
|
|
562
|
+
return menuItemTextVariants;
|
|
563
|
+
}
|
|
564
|
+
};
|
|
565
|
+
const menuItemThemeVariants = (theme) => {
|
|
566
|
+
switch (theme) {
|
|
567
|
+
case "mona":
|
|
568
|
+
return menuItemVariants;
|
|
569
|
+
default:
|
|
570
|
+
return menuItemVariants;
|
|
571
|
+
}
|
|
572
|
+
};
|
|
573
|
+
const menubarBaseThemeVariants = (theme) => {
|
|
574
|
+
switch (theme) {
|
|
575
|
+
case "mona":
|
|
576
|
+
return menubarBaseVariants;
|
|
577
|
+
default:
|
|
578
|
+
return menubarBaseVariants;
|
|
579
|
+
}
|
|
580
|
+
};
|
|
581
|
+
const menubarListItemThemeVariants = (theme) => {
|
|
582
|
+
switch (theme) {
|
|
583
|
+
case "mona":
|
|
584
|
+
return menubarListItemVariants;
|
|
585
|
+
default:
|
|
586
|
+
return menubarListItemVariants;
|
|
587
|
+
}
|
|
588
|
+
};
|
|
589
|
+
const menubarListThemeVariants = (theme) => {
|
|
590
|
+
switch (theme) {
|
|
591
|
+
case "mona":
|
|
592
|
+
return menubarListVariants;
|
|
593
|
+
default:
|
|
594
|
+
return menubarListVariants;
|
|
595
|
+
}
|
|
596
|
+
};
|
|
597
|
+
|
|
598
|
+
class MenubarComponent {
|
|
599
|
+
#destroyRef;
|
|
600
|
+
#document;
|
|
601
|
+
#hostElementRef;
|
|
602
|
+
#themeService;
|
|
603
|
+
constructor() {
|
|
604
|
+
this.#destroyRef = inject(DestroyRef);
|
|
605
|
+
this.#document = inject(DOCUMENT);
|
|
606
|
+
this.#hostElementRef = inject((ElementRef));
|
|
607
|
+
this.#themeService = inject(ThemeService);
|
|
608
|
+
this.activeIndex = signal(0, /* @ts-ignore */
|
|
609
|
+
...(ngDevMode ? [{ debugName: "activeIndex" }] : /* istanbul ignore next */ []));
|
|
610
|
+
this.baseClasses = computed(() => {
|
|
611
|
+
const theme = this.#themeService.theme();
|
|
612
|
+
const rounded = this.rounded();
|
|
613
|
+
const size = this.size();
|
|
614
|
+
const userClasses = this.userClasses();
|
|
615
|
+
const variants = menubarBaseThemeVariants(theme)({ rounded, size });
|
|
616
|
+
return twMerge(variants, userClasses);
|
|
617
|
+
}, /* @ts-ignore */
|
|
618
|
+
...(ngDevMode ? [{ debugName: "baseClasses" }] : /* istanbul ignore next */ []));
|
|
619
|
+
this.currentPopupElement = signal(null, /* @ts-ignore */
|
|
620
|
+
...(ngDevMode ? [{ debugName: "currentPopupElement" }] : /* istanbul ignore next */ []));
|
|
621
|
+
this.currentPopupMenu = signal(null, /* @ts-ignore */
|
|
622
|
+
...(ngDevMode ? [{ debugName: "currentPopupMenu" }] : /* istanbul ignore next */ []));
|
|
623
|
+
this.groupTemplate = contentChild(MenuGroupTemplateDirective, { ...(ngDevMode ? { debugName: "groupTemplate" } : /* istanbul ignore next */ {}), read: TemplateRef,
|
|
624
|
+
descendants: false });
|
|
625
|
+
this.iconTemplate = contentChild(MenuIconTemplateDirective, { ...(ngDevMode ? { debugName: "iconTemplate" } : /* istanbul ignore next */ {}), read: TemplateRef,
|
|
626
|
+
descendants: false });
|
|
627
|
+
this.listClasses = computed(() => {
|
|
628
|
+
const theme = this.#themeService.theme();
|
|
629
|
+
return menubarListThemeVariants(theme)();
|
|
630
|
+
}, /* @ts-ignore */
|
|
631
|
+
...(ngDevMode ? [{ debugName: "listClasses" }] : /* istanbul ignore next */ []));
|
|
632
|
+
this.listItemClasses = computed(() => {
|
|
633
|
+
const theme = this.#themeService.theme();
|
|
634
|
+
const rounded = this.rounded();
|
|
635
|
+
return menubarListItemThemeVariants(theme)({ rounded });
|
|
636
|
+
}, /* @ts-ignore */
|
|
637
|
+
...(ngDevMode ? [{ debugName: "listItemClasses" }] : /* istanbul ignore next */ []));
|
|
638
|
+
this.menuItemIconTemplate = contentChild(MenuItemIconTemplateDirective, { ...(ngDevMode ? { debugName: "menuItemIconTemplate" } : /* istanbul ignore next */ {}), read: TemplateRef,
|
|
639
|
+
descendants: false });
|
|
640
|
+
this.menuItemShortcutTemplate = contentChild(MenuItemShortcutTemplateDirective, { ...(ngDevMode ? { debugName: "menuItemShortcutTemplate" } : /* istanbul ignore next */ {}), read: TemplateRef,
|
|
641
|
+
descendants: false });
|
|
642
|
+
this.menuItemTextTemplate = contentChild(MenuItemTextTemplateDirective, { ...(ngDevMode ? { debugName: "menuItemTextTemplate" } : /* istanbul ignore next */ {}), read: TemplateRef,
|
|
643
|
+
descendants: false });
|
|
644
|
+
this.menuList = contentChildren(MenuComponent, /* @ts-ignore */
|
|
645
|
+
...(ngDevMode ? [{ debugName: "menuList" }] : /* istanbul ignore next */ []));
|
|
646
|
+
this.navigate$ = new Subject();
|
|
647
|
+
this.popupMenuComponents = viewChildren(PopupMenuComponent, /* @ts-ignore */
|
|
648
|
+
...(ngDevMode ? [{ debugName: "popupMenuComponents" }] : /* istanbul ignore next */ []));
|
|
649
|
+
this.textTemplate = contentChild(MenuTextTemplateDirective, { ...(ngDevMode ? { debugName: "textTemplate" } : /* istanbul ignore next */ {}), read: TemplateRef,
|
|
650
|
+
descendants: false });
|
|
651
|
+
/**
|
|
652
|
+
* @description ARIA label for the menubar.
|
|
653
|
+
*/
|
|
654
|
+
this.ariaLabel = input("", /* @ts-ignore */
|
|
655
|
+
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
656
|
+
/**
|
|
657
|
+
* @description ARIA labelledby for the menubar.
|
|
658
|
+
*/
|
|
659
|
+
this.ariaLabelledby = input("", /* @ts-ignore */
|
|
660
|
+
...(ngDevMode ? [{ debugName: "ariaLabelledby" }] : /* istanbul ignore next */ []));
|
|
661
|
+
/**
|
|
662
|
+
* @description Sets the disabled state of menubar.
|
|
663
|
+
*/
|
|
664
|
+
this.disabled = input(false, /* @ts-ignore */
|
|
665
|
+
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
666
|
+
/**
|
|
667
|
+
* @description Emits when a menu item is clicked.
|
|
668
|
+
*/
|
|
669
|
+
this.menuItemClick = output();
|
|
670
|
+
/**
|
|
671
|
+
* @description Sets the size of the menubar.
|
|
672
|
+
*/
|
|
673
|
+
this.size = input("medium", /* @ts-ignore */
|
|
674
|
+
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
675
|
+
/**
|
|
676
|
+
* @description Sets the rounded style of the menubar.
|
|
677
|
+
*/
|
|
678
|
+
this.rounded = input("medium", /* @ts-ignore */
|
|
679
|
+
...(ngDevMode ? [{ debugName: "rounded" }] : /* istanbul ignore next */ []));
|
|
680
|
+
/**
|
|
681
|
+
* @description Additional CSS classes to apply to the menubar, merged with the computed theme classes.
|
|
682
|
+
*/
|
|
683
|
+
this.userClasses = input("", { ...(ngDevMode ? { debugName: "userClasses" } : /* istanbul ignore next */ {}), alias: "class" });
|
|
684
|
+
effect(() => {
|
|
685
|
+
const popupMenuComponents = this.popupMenuComponents();
|
|
686
|
+
untracked(() => {
|
|
687
|
+
zip(this.menuList(), popupMenuComponents).forEach(([menu, popupMenu]) => {
|
|
688
|
+
menu.popupMenu = popupMenu;
|
|
689
|
+
});
|
|
690
|
+
});
|
|
691
|
+
});
|
|
692
|
+
effect(() => {
|
|
693
|
+
this.menuList();
|
|
694
|
+
untracked(() => {
|
|
695
|
+
this.currentPopupMenu()?.closeMenu();
|
|
696
|
+
this.currentPopupMenu.set(null);
|
|
697
|
+
this.currentPopupElement.set(null);
|
|
698
|
+
});
|
|
699
|
+
});
|
|
700
|
+
effect(() => {
|
|
701
|
+
const menuList = this.menuList();
|
|
702
|
+
untracked(() => {
|
|
703
|
+
const currentItem = menuList[this.activeIndex()];
|
|
704
|
+
if (!currentItem || currentItem.disabled()) {
|
|
705
|
+
const fallbackIndex = menuList.findIndex(m => !m.disabled());
|
|
706
|
+
this.activeIndex.set(fallbackIndex >= 0 ? fallbackIndex : 0);
|
|
707
|
+
}
|
|
708
|
+
});
|
|
709
|
+
});
|
|
710
|
+
afterNextRender({
|
|
711
|
+
read: () => this.setSubscriptions()
|
|
712
|
+
});
|
|
713
|
+
}
|
|
714
|
+
onMenuBlur(event) {
|
|
715
|
+
if (!this.currentPopupMenu()) {
|
|
716
|
+
const relatedTarget = event.relatedTarget;
|
|
717
|
+
const menubarElement = this.#hostElementRef.nativeElement;
|
|
718
|
+
if (!relatedTarget || !menubarElement.contains(relatedTarget)) {
|
|
719
|
+
this.currentPopupElement.set(null);
|
|
720
|
+
}
|
|
721
|
+
}
|
|
722
|
+
}
|
|
723
|
+
onMenuClick(event, item) {
|
|
724
|
+
if (this.disabled() || item.disabled()) {
|
|
725
|
+
event.preventDefault();
|
|
726
|
+
event.stopImmediatePropagation();
|
|
727
|
+
}
|
|
728
|
+
}
|
|
729
|
+
onMenuFocus(index) {
|
|
730
|
+
this.activeIndex.set(index);
|
|
731
|
+
}
|
|
732
|
+
onMenuItemClick(event) {
|
|
733
|
+
this.menuItemClick.emit(event);
|
|
734
|
+
}
|
|
735
|
+
onMenuKeyDown(event, item, popupMenu) {
|
|
736
|
+
if (this.disabled()) {
|
|
737
|
+
return;
|
|
738
|
+
}
|
|
739
|
+
switch (event.key) {
|
|
740
|
+
case "Enter":
|
|
741
|
+
case " ":
|
|
742
|
+
event.preventDefault();
|
|
743
|
+
if (popupMenu && !item.disabled()) {
|
|
744
|
+
popupMenu.openMenuViaKeyboard();
|
|
745
|
+
}
|
|
746
|
+
break;
|
|
747
|
+
case "ArrowRight":
|
|
748
|
+
event.preventDefault();
|
|
749
|
+
this.moveToNextMenu();
|
|
750
|
+
break;
|
|
751
|
+
case "ArrowLeft":
|
|
752
|
+
event.preventDefault();
|
|
753
|
+
this.moveToPreviousMenu();
|
|
754
|
+
break;
|
|
755
|
+
case "ArrowDown":
|
|
756
|
+
event.preventDefault();
|
|
757
|
+
if (popupMenu && !item.disabled() && !this.currentPopupMenu()) {
|
|
758
|
+
popupMenu.openMenuViaKeyboard();
|
|
759
|
+
}
|
|
760
|
+
break;
|
|
761
|
+
case "Home":
|
|
762
|
+
event.preventDefault();
|
|
763
|
+
this.moveToFirstMenu();
|
|
764
|
+
break;
|
|
765
|
+
case "End":
|
|
766
|
+
event.preventDefault();
|
|
767
|
+
this.moveToLastMenu();
|
|
768
|
+
break;
|
|
769
|
+
case "Escape":
|
|
770
|
+
event.preventDefault();
|
|
771
|
+
this.closeCurrentMenu();
|
|
772
|
+
break;
|
|
773
|
+
}
|
|
774
|
+
}
|
|
775
|
+
onMenuPointerEnter(item, element, popupMenu) {
|
|
776
|
+
if (this.disabled() || item.disabled() || this.currentPopupMenu() === popupMenu || !this.currentPopupMenu()) {
|
|
777
|
+
return;
|
|
778
|
+
}
|
|
779
|
+
this.currentPopupMenu()?.clearFocusRestoration();
|
|
780
|
+
this.currentPopupMenu()?.closeMenu();
|
|
781
|
+
this.currentPopupMenu.set(popupMenu);
|
|
782
|
+
this.currentPopupElement.set(element);
|
|
783
|
+
this.currentPopupMenu().openMenu(false);
|
|
784
|
+
}
|
|
785
|
+
onPopupMenuClose() {
|
|
786
|
+
this.currentPopupMenu.set(null);
|
|
787
|
+
this.currentPopupElement.set(null);
|
|
788
|
+
}
|
|
789
|
+
onPopupMenuOpen(popupMenu, element) {
|
|
790
|
+
if (this.currentPopupMenu() === popupMenu) {
|
|
791
|
+
return;
|
|
792
|
+
}
|
|
793
|
+
this.currentPopupMenu.set(popupMenu);
|
|
794
|
+
this.currentPopupElement.set(element);
|
|
795
|
+
}
|
|
796
|
+
closeCurrentMenu() {
|
|
797
|
+
if (this.currentPopupMenu()) {
|
|
798
|
+
this.currentPopupMenu()?.closeMenu();
|
|
799
|
+
}
|
|
800
|
+
}
|
|
801
|
+
findCurrentMenuIndex() {
|
|
802
|
+
let currentIndex = this.menuList().findIndex(n => n.popupMenu === this.currentPopupMenu());
|
|
803
|
+
if (currentIndex < 0) {
|
|
804
|
+
const focusedElement = this.#document.activeElement;
|
|
805
|
+
if (focusedElement && focusedElement.hasAttribute("data-mid")) {
|
|
806
|
+
const uid = focusedElement.getAttribute("data-mid");
|
|
807
|
+
currentIndex = this.menuList().findIndex(m => m.uid === uid);
|
|
808
|
+
}
|
|
809
|
+
}
|
|
810
|
+
return currentIndex >= 0 ? currentIndex : null;
|
|
811
|
+
}
|
|
812
|
+
findMenuElementByUid(uid) {
|
|
813
|
+
const menuList = this.menuList();
|
|
814
|
+
const index = menuList.findIndex(m => m.uid === uid);
|
|
815
|
+
if (index < 0) {
|
|
816
|
+
return null;
|
|
817
|
+
}
|
|
818
|
+
return this.#hostElementRef.nativeElement.querySelector(`li[data-mid="${uid}"]`);
|
|
819
|
+
}
|
|
820
|
+
findNextNonDisabledMenuIndex() {
|
|
821
|
+
const currentIndex = this.findCurrentMenuIndex();
|
|
822
|
+
if (currentIndex == null || currentIndex < 0) {
|
|
823
|
+
return this.menuList().findIndex(m => !m.disabled());
|
|
824
|
+
}
|
|
825
|
+
const next = rotate(this.menuList(), currentIndex)
|
|
826
|
+
.skip(1)
|
|
827
|
+
.firstOrDefault(m => !m.disabled());
|
|
828
|
+
if (next) {
|
|
829
|
+
return this.menuList().findIndex(m => m === next);
|
|
830
|
+
}
|
|
831
|
+
return -1;
|
|
832
|
+
}
|
|
833
|
+
findPreviousNonDisabledMenuIndex() {
|
|
834
|
+
let currentIndex = this.findCurrentMenuIndex();
|
|
835
|
+
if (currentIndex == null || currentIndex < 0) {
|
|
836
|
+
const menuList = this.menuList();
|
|
837
|
+
const lastEnabledIndex = menuList
|
|
838
|
+
.slice()
|
|
839
|
+
.reverse()
|
|
840
|
+
.findIndex(m => !m.disabled());
|
|
841
|
+
return lastEnabledIndex >= 0 ? menuList.length - 1 - lastEnabledIndex : -1;
|
|
842
|
+
}
|
|
843
|
+
const next = rotate(this.menuList(), currentIndex)
|
|
844
|
+
.reverse()
|
|
845
|
+
.firstOrDefault(m => !m.disabled());
|
|
846
|
+
if (next) {
|
|
847
|
+
return this.menuList().findIndex(m => m === next);
|
|
848
|
+
}
|
|
849
|
+
return -1;
|
|
850
|
+
}
|
|
851
|
+
focusMenuAt(index) {
|
|
852
|
+
const menu = this.menuList()[index];
|
|
853
|
+
if (menu && !menu.disabled()) {
|
|
854
|
+
const element = this.findMenuElementByUid(menu.uid);
|
|
855
|
+
if (element) {
|
|
856
|
+
element.focus();
|
|
857
|
+
}
|
|
858
|
+
}
|
|
859
|
+
}
|
|
860
|
+
moveToFirstMenu() {
|
|
861
|
+
const firstEnabledIndex = this.menuList().findIndex(m => !m.disabled());
|
|
862
|
+
if (firstEnabledIndex >= 0) {
|
|
863
|
+
this.focusMenuAt(firstEnabledIndex);
|
|
864
|
+
}
|
|
865
|
+
}
|
|
866
|
+
moveToLastMenu() {
|
|
867
|
+
const menuList = this.menuList();
|
|
868
|
+
const lastEnabledIndex = menuList
|
|
869
|
+
.slice()
|
|
870
|
+
.reverse()
|
|
871
|
+
.findIndex(m => !m.disabled());
|
|
872
|
+
if (lastEnabledIndex >= 0) {
|
|
873
|
+
const actualIndex = menuList.length - 1 - lastEnabledIndex;
|
|
874
|
+
this.focusMenuAt(actualIndex);
|
|
875
|
+
}
|
|
876
|
+
}
|
|
877
|
+
moveToNextMenu() {
|
|
878
|
+
const index = this.findNextNonDisabledMenuIndex();
|
|
879
|
+
if (index >= 0) {
|
|
880
|
+
this.focusMenuAt(index);
|
|
881
|
+
}
|
|
882
|
+
}
|
|
883
|
+
moveToPreviousMenu() {
|
|
884
|
+
const index = this.findPreviousNonDisabledMenuIndex();
|
|
885
|
+
if (index >= 0) {
|
|
886
|
+
this.focusMenuAt(index);
|
|
887
|
+
}
|
|
888
|
+
}
|
|
889
|
+
setNavigationSubscription() {
|
|
890
|
+
this.navigate$
|
|
891
|
+
.pipe(takeUntilDestroyed(this.#destroyRef), startWith(null), pairwise(), tap(([prev, next]) => {
|
|
892
|
+
if (next && next.direction === "right" && (next.level === 0 || (next.level > 0 && !next.item))) {
|
|
893
|
+
const index = this.findNextNonDisabledMenuIndex();
|
|
894
|
+
if (index >= 0) {
|
|
895
|
+
this.updateCurrentMenuData(index);
|
|
896
|
+
}
|
|
897
|
+
}
|
|
898
|
+
else if (next && prev && next.direction === "left" && prev.level === 0 && next.level === 0) {
|
|
899
|
+
const index = this.findPreviousNonDisabledMenuIndex();
|
|
900
|
+
if (index >= 0) {
|
|
901
|
+
this.updateCurrentMenuData(index);
|
|
902
|
+
}
|
|
903
|
+
}
|
|
904
|
+
if (next && this.currentPopupMenu()) {
|
|
905
|
+
this.currentPopupMenu()?.setRestoreFocusForKeyboard();
|
|
906
|
+
}
|
|
907
|
+
}))
|
|
908
|
+
.subscribe();
|
|
909
|
+
}
|
|
910
|
+
setSubscriptions() {
|
|
911
|
+
this.setNavigationSubscription();
|
|
912
|
+
}
|
|
913
|
+
updateCurrentMenuData(index) {
|
|
914
|
+
this.currentPopupMenu()?.clearFocusRestoration();
|
|
915
|
+
this.currentPopupMenu()?.closeMenu();
|
|
916
|
+
this.currentPopupMenu.set(this.menuList()[index].popupMenu);
|
|
917
|
+
const element = this.findMenuElementByUid(this.menuList()[index].uid);
|
|
918
|
+
this.currentPopupElement.set(element);
|
|
919
|
+
this.currentPopupMenu()?.openMenuViaKeyboard();
|
|
920
|
+
}
|
|
921
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MenubarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
922
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: MenubarComponent, isStandalone: true, selector: "mona-menubar", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledby: { classPropertyName: "ariaLabelledby", publicName: "ariaLabelledby", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null }, userClasses: { classPropertyName: "userClasses", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { menuItemClick: "menuItemClick" }, host: { properties: { "class": "baseClasses()", "attr.data-disabled": "disabled()" } }, queries: [{ propertyName: "groupTemplate", first: true, predicate: MenuGroupTemplateDirective, read: TemplateRef, isSignal: true }, { propertyName: "iconTemplate", first: true, predicate: MenuIconTemplateDirective, read: TemplateRef, isSignal: true }, { propertyName: "menuItemIconTemplate", first: true, predicate: MenuItemIconTemplateDirective, read: TemplateRef, isSignal: true }, { propertyName: "menuItemShortcutTemplate", first: true, predicate: MenuItemShortcutTemplateDirective, read: TemplateRef, isSignal: true }, { propertyName: "menuItemTextTemplate", first: true, predicate: MenuItemTextTemplateDirective, read: TemplateRef, isSignal: true }, { propertyName: "menuList", predicate: MenuComponent, isSignal: true }, { propertyName: "textTemplate", first: true, predicate: MenuTextTemplateDirective, read: TemplateRef, isSignal: true }], viewQueries: [{ propertyName: "popupMenuComponents", predicate: PopupMenuComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<ul\n [class]=\"listClasses()\"\n role=\"menubar\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"ariaLabelledby() || null\">\n @for (item of menuList(); track item; let i = $index) {\n @let menuIconTemplate = item.iconTemplate() ?? iconTemplate() ?? null;\n @let menuTextTemplate = item.textTemplate() ?? textTemplate() ?? null;\n @let menuId = item.uid + \"-menu\";\n <li\n [class]=\"listItemClasses()\"\n [attr.data-disabled]=\"item.disabled()\"\n [attr.data-active]=\"currentPopupMenu() != null && currentPopupMenu() === item.popupMenu\"\n [attr.data-mid]=\"item.uid\"\n [attr.tabindex]=\"item.disabled() ? -1 : i === activeIndex() ? 0 : -1\"\n [attr.role]=\"'menuitem'\"\n [attr.aria-haspopup]=\"'menu'\"\n [attr.aria-expanded]=\"\n currentPopupMenu() != null && currentPopupMenu() === item.popupMenu ? 'true' : 'false'\n \"\n [attr.aria-controls]=\"currentPopupMenu() != null && currentPopupMenu() === item.popupMenu ? menuId : null\"\n [attr.aria-disabled]=\"item.disabled()\"\n (pointerenter)=\"onMenuPointerEnter(item, listItemElement, popupMenu)\"\n (keydown)=\"onMenuKeyDown($event, item, popupMenu)\"\n (click)=\"onMenuClick($event, item)\"\n (focus)=\"onMenuFocus(i)\"\n (blur)=\"onMenuBlur($event)\"\n #listItemElement>\n @if (menuIconTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"menuIconTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item.text(), items: item.menuItems() }\"></ng-container>\n }\n @if (!menuTextTemplate) {\n <span>{{ item.text() }}</span>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"menuTextTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item.text(), items: item.menuItems() }\">\n </ng-container>\n }\n </li>\n <mona-popup-menu\n [rounded]=\"rounded()\"\n [size]=\"size()\"\n [target]=\"listItemElement\"\n [anchorConnectionPoint]=\"'bottomleft'\"\n [popupConnectionPoint]=\"'topleft'\"\n (menuClick)=\"onMenuItemClick($event)\"\n (navigate)=\"navigate$.next($event)\"\n [trigger]=\"'click'\"\n [offset]=\"{ horizontal: 0, vertical: 2 }\"\n (close)=\"onPopupMenuClose()\"\n (open)=\"onPopupMenuOpen(popupMenu, listItemElement)\"\n [items]=\"item.menuItems()\"\n [id]=\"menuId\"\n #popupMenu>\n @if (groupTemplate()) {\n <ng-template monaPopupMenuGroupTemplate let-group>\n <ng-container\n [ngTemplateOutlet]=\"groupTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: group }\"></ng-container>\n </ng-template>\n }\n @if (menuItemIconTemplate()) {\n <ng-template monaPopupMenuIconTemplate let-item>\n <ng-container\n [ngTemplateOutlet]=\"menuItemIconTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\n </ng-template>\n }\n @if (menuItemShortcutTemplate()) {\n <ng-template monaPopupMenuShortcutTemplate let-item>\n <ng-container\n [ngTemplateOutlet]=\"menuItemShortcutTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\n </ng-template>\n }\n @if (menuItemTextTemplate()) {\n <ng-template monaPopupMenuTextTemplate let-item>\n <ng-container\n [ngTemplateOutlet]=\"menuItemTextTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\n </ng-template>\n }\n </mona-popup-menu>\n }\n</ul>\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: PopupMenuComponent, selector: "mona-popup-menu", inputs: ["anchor", "anchorConnectionPoint", "items", "id", "minWidth", "offset", "popupConnectionPoint", "precise", "rounded", "size", "target", "trigger", "width"], outputs: ["close", "menuClick", "navigate", "open"] }, { kind: "directive", type: PopupMenuTextTemplateDirective, selector: "ng-template[monaPopupMenuTextTemplate]" }, { kind: "directive", type: PopupMenuIconTemplateDirective, selector: "ng-template[monaPopupMenuIconTemplate]" }, { kind: "directive", type: PopupMenuShortcutTemplateDirective, selector: "ng-template[monaPopupMenuShortcutTemplate]" }, { kind: "directive", type: PopupMenuGroupTemplateDirective, selector: "ng-template[monaPopupMenuGroupTemplate]" }] }); }
|
|
923
|
+
}
|
|
924
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: MenubarComponent, decorators: [{
|
|
925
|
+
type: Component,
|
|
926
|
+
args: [{ selector: "mona-menubar", imports: [
|
|
927
|
+
NgTemplateOutlet,
|
|
928
|
+
PopupMenuComponent,
|
|
929
|
+
PopupMenuTextTemplateDirective,
|
|
930
|
+
PopupMenuIconTemplateDirective,
|
|
931
|
+
PopupMenuShortcutTemplateDirective,
|
|
932
|
+
PopupMenuGroupTemplateDirective
|
|
933
|
+
], host: {
|
|
934
|
+
"[class]": "baseClasses()",
|
|
935
|
+
"[attr.data-disabled]": "disabled()"
|
|
936
|
+
}, template: "<ul\n [class]=\"listClasses()\"\n role=\"menubar\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"ariaLabelledby() || null\">\n @for (item of menuList(); track item; let i = $index) {\n @let menuIconTemplate = item.iconTemplate() ?? iconTemplate() ?? null;\n @let menuTextTemplate = item.textTemplate() ?? textTemplate() ?? null;\n @let menuId = item.uid + \"-menu\";\n <li\n [class]=\"listItemClasses()\"\n [attr.data-disabled]=\"item.disabled()\"\n [attr.data-active]=\"currentPopupMenu() != null && currentPopupMenu() === item.popupMenu\"\n [attr.data-mid]=\"item.uid\"\n [attr.tabindex]=\"item.disabled() ? -1 : i === activeIndex() ? 0 : -1\"\n [attr.role]=\"'menuitem'\"\n [attr.aria-haspopup]=\"'menu'\"\n [attr.aria-expanded]=\"\n currentPopupMenu() != null && currentPopupMenu() === item.popupMenu ? 'true' : 'false'\n \"\n [attr.aria-controls]=\"currentPopupMenu() != null && currentPopupMenu() === item.popupMenu ? menuId : null\"\n [attr.aria-disabled]=\"item.disabled()\"\n (pointerenter)=\"onMenuPointerEnter(item, listItemElement, popupMenu)\"\n (keydown)=\"onMenuKeyDown($event, item, popupMenu)\"\n (click)=\"onMenuClick($event, item)\"\n (focus)=\"onMenuFocus(i)\"\n (blur)=\"onMenuBlur($event)\"\n #listItemElement>\n @if (menuIconTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"menuIconTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item.text(), items: item.menuItems() }\"></ng-container>\n }\n @if (!menuTextTemplate) {\n <span>{{ item.text() }}</span>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"menuTextTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item.text(), items: item.menuItems() }\">\n </ng-container>\n }\n </li>\n <mona-popup-menu\n [rounded]=\"rounded()\"\n [size]=\"size()\"\n [target]=\"listItemElement\"\n [anchorConnectionPoint]=\"'bottomleft'\"\n [popupConnectionPoint]=\"'topleft'\"\n (menuClick)=\"onMenuItemClick($event)\"\n (navigate)=\"navigate$.next($event)\"\n [trigger]=\"'click'\"\n [offset]=\"{ horizontal: 0, vertical: 2 }\"\n (close)=\"onPopupMenuClose()\"\n (open)=\"onPopupMenuOpen(popupMenu, listItemElement)\"\n [items]=\"item.menuItems()\"\n [id]=\"menuId\"\n #popupMenu>\n @if (groupTemplate()) {\n <ng-template monaPopupMenuGroupTemplate let-group>\n <ng-container\n [ngTemplateOutlet]=\"groupTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: group }\"></ng-container>\n </ng-template>\n }\n @if (menuItemIconTemplate()) {\n <ng-template monaPopupMenuIconTemplate let-item>\n <ng-container\n [ngTemplateOutlet]=\"menuItemIconTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\n </ng-template>\n }\n @if (menuItemShortcutTemplate()) {\n <ng-template monaPopupMenuShortcutTemplate let-item>\n <ng-container\n [ngTemplateOutlet]=\"menuItemShortcutTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\n </ng-template>\n }\n @if (menuItemTextTemplate()) {\n <ng-template monaPopupMenuTextTemplate let-item>\n <ng-container\n [ngTemplateOutlet]=\"menuItemTextTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\n </ng-template>\n }\n </mona-popup-menu>\n }\n</ul>\n" }]
|
|
937
|
+
}], ctorParameters: () => [], propDecorators: { groupTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MenuGroupTemplateDirective), { ...{
|
|
938
|
+
read: TemplateRef,
|
|
939
|
+
descendants: false
|
|
940
|
+
}, isSignal: true }] }], iconTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MenuIconTemplateDirective), { ...{
|
|
941
|
+
read: TemplateRef,
|
|
942
|
+
descendants: false
|
|
943
|
+
}, isSignal: true }] }], menuItemIconTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MenuItemIconTemplateDirective), { ...{
|
|
944
|
+
read: TemplateRef,
|
|
945
|
+
descendants: false
|
|
946
|
+
}, isSignal: true }] }], menuItemShortcutTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MenuItemShortcutTemplateDirective), { ...{
|
|
947
|
+
read: TemplateRef,
|
|
948
|
+
descendants: false
|
|
949
|
+
}, isSignal: true }] }], menuItemTextTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MenuItemTextTemplateDirective), { ...{
|
|
950
|
+
read: TemplateRef,
|
|
951
|
+
descendants: false
|
|
952
|
+
}, isSignal: true }] }], menuList: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => MenuComponent), { isSignal: true }] }], popupMenuComponents: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => PopupMenuComponent), { isSignal: true }] }], textTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => MenuTextTemplateDirective), { ...{
|
|
953
|
+
read: TemplateRef,
|
|
954
|
+
descendants: false
|
|
955
|
+
}, isSignal: true }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], ariaLabelledby: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabelledby", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], menuItemClick: [{ type: i0.Output, args: ["menuItemClick"] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], rounded: [{ type: i0.Input, args: [{ isSignal: true, alias: "rounded", required: false }] }], userClasses: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
956
|
+
|
|
957
|
+
/*
|
|
958
|
+
* Public API Surface of @nanahoshi/mona-ui/menubar
|
|
959
|
+
*/
|
|
960
|
+
|
|
961
|
+
/**
|
|
962
|
+
* Generated bundle index. Do not edit.
|
|
963
|
+
*/
|
|
964
|
+
|
|
965
|
+
export { MenuCheckboxItemComponent, MenuComponent, MenuGroupComponent, MenuGroupTemplateDirective, MenuIconTemplateDirective, MenuItemComponent, MenuItemIconTemplateDirective, MenuItemShortcutTemplateDirective, MenuItemTextTemplateDirective, MenuRadioGroupComponent, MenuRadioItemComponent, MenuSeparatorComponent, MenuTextTemplateDirective, MenubarComponent };
|
|
966
|
+
//# sourceMappingURL=nanahoshi-mona-ui-menubar.mjs.map
|