@nova-design-system/nova-react 3.0.0-beta.41 → 3.0.0-beta.43
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/dist/cjs/_commonjsHelpers-1789f0cf-BJu3ubxk.js +10 -0
- package/dist/cjs/clsx-297c1ffe-BtxeOLZW.js +5 -0
- package/dist/cjs/constants-98e2dcc2-C0SBCapP.js +250 -0
- package/dist/cjs/dom.utils-ac71e0ef-CmIwRr6O.js +168 -0
- package/dist/cjs/events.utils-fe1d907f-01N__3wY.js +23 -0
- package/dist/cjs/fade.animation-2a077983-aKN0EDTo.js +1832 -0
- package/dist/cjs/index-C8UfzrMI.js +26405 -0
- package/dist/cjs/index-CinzsZ8D.js +26405 -0
- package/dist/cjs/index.js +48 -0
- package/dist/cjs/inputmask-edcad3c1-B9Omti4z.js +3749 -0
- package/dist/cjs/nv-alert.entry-8esWDUyU.js +173 -0
- package/dist/cjs/nv-alert.entry-BVY_rxey.js +173 -0
- package/dist/cjs/nv-avatar.entry-CO6bt4k6.js +67 -0
- package/dist/cjs/nv-avatar.entry-pREKtiv2.js +67 -0
- package/dist/cjs/nv-badge_2.entry-wDuiCwys.js +195 -0
- package/dist/cjs/nv-badge_2.entry-xfXsesV0.js +195 -0
- package/dist/cjs/nv-base.entry-BO-6krwg.js +71 -0
- package/dist/cjs/nv-base.entry-DwtTXK_n.js +71 -0
- package/dist/cjs/nv-breadcrumb.entry-B0hIeE83.js +45 -0
- package/dist/cjs/nv-breadcrumb.entry-DTwjCmMI.js +45 -0
- package/dist/cjs/nv-breadcrumbs.entry-Cq0LsIFs.js +20 -0
- package/dist/cjs/nv-breadcrumbs.entry-jn5hRjpQ.js +20 -0
- package/dist/cjs/nv-button.entry-DaSGnB1L.js +162 -0
- package/dist/cjs/nv-button.entry-DxzA6-My.js +162 -0
- package/dist/cjs/nv-calendar.entry-BC6NDsVl.js +1036 -0
- package/dist/cjs/nv-calendar.entry-DKz-iBnp.js +1036 -0
- package/dist/cjs/nv-col.entry-DNUY559i.js +37 -0
- package/dist/cjs/nv-col.entry-X7jkNThH.js +37 -0
- package/dist/cjs/nv-datagrid.entry-Cp8RCSEv.js +3671 -0
- package/dist/cjs/nv-datagrid.entry-DL-Fyo4l.js +3671 -0
- package/dist/cjs/nv-datagridcolumn.entry-CR9_1fsZ.js +18 -0
- package/dist/cjs/nv-datagridcolumn.entry-CyTG5E7M.js +18 -0
- package/dist/cjs/nv-dialog.entry-BjTJ5FFL.js +784 -0
- package/dist/cjs/nv-dialog.entry-Do_uALC6.js +784 -0
- package/dist/cjs/nv-dialogfooter_2.entry-DJ8qS9q6.js +134 -0
- package/dist/cjs/nv-dialogfooter_2.entry-DJkKzEgO.js +134 -0
- package/dist/cjs/nv-fieldcheckbox.entry-C0DmeqXD.js +137 -0
- package/dist/cjs/nv-fieldcheckbox.entry-DoGQX-5D.js +137 -0
- package/dist/cjs/nv-fielddate.entry-D-PjbYaA.js +278 -0
- package/dist/cjs/nv-fielddate.entry-DRX2mfZL.js +278 -0
- package/dist/cjs/nv-fielddaterange.entry-BrC5jKLp.js +355 -0
- package/dist/cjs/nv-fielddaterange.entry-ka3JiDvT.js +355 -0
- package/dist/cjs/nv-fielddropdown.entry-DUAKFYgw.js +391 -0
- package/dist/cjs/nv-fielddropdown.entry-MsUR1kVe.js +391 -0
- package/dist/cjs/nv-fielddropdownitem.entry-BsbvJERH.js +70 -0
- package/dist/cjs/nv-fielddropdownitem.entry-DRM-Zljt.js +70 -0
- package/dist/cjs/nv-fieldmultiselect.entry-DFr-ZICs.js +1060 -0
- package/dist/cjs/nv-fieldmultiselect.entry-Dr8FfT_W.js +1060 -0
- package/dist/cjs/nv-fieldnumber.entry-DZsM1vmO.js +126 -0
- package/dist/cjs/nv-fieldnumber.entry-ezdDvJh_.js +126 -0
- package/dist/cjs/nv-fieldpassword.entry-Biw__M2W.js +115 -0
- package/dist/cjs/nv-fieldpassword.entry-D4a8SnGr.js +115 -0
- package/dist/cjs/nv-fieldradio.entry-Co7WX2vI.js +102 -0
- package/dist/cjs/nv-fieldradio.entry-ZL7KgEZ7.js +102 -0
- package/dist/cjs/nv-fieldselect.entry-D6eRsM9T.js +365 -0
- package/dist/cjs/nv-fieldselect.entry-sTbv_flF.js +365 -0
- package/dist/cjs/nv-fieldtext.entry-DKdxC2cG.js +119 -0
- package/dist/cjs/nv-fieldtext.entry-DRPCH6Sf.js +119 -0
- package/dist/cjs/nv-fieldtextarea.entry-BwJCUiVW.js +194 -0
- package/dist/cjs/nv-fieldtextarea.entry-Dc_TGlmI.js +194 -0
- package/dist/cjs/nv-fieldtime.entry-CXRtpWt1.js +1011 -0
- package/dist/cjs/nv-fieldtime.entry-uU-IET2k.js +1011 -0
- package/dist/cjs/nv-icon.entry-iipuvT3D.js +79 -0
- package/dist/cjs/nv-icon.entry-xltjoSa2.js +79 -0
- package/dist/cjs/nv-iconbutton_2.entry-BsXvYbCi.js +163 -0
- package/dist/cjs/nv-iconbutton_2.entry-Dx4usGkY.js +163 -0
- package/dist/cjs/nv-menu.entry-D3qvf_0H.js +227 -0
- package/dist/cjs/nv-menu.entry-DFEYw_KZ.js +227 -0
- package/dist/cjs/nv-menuitem.entry-3t6TixM7.js +58 -0
- package/dist/cjs/nv-menuitem.entry-BeTXOtir.js +58 -0
- package/dist/cjs/nv-popover.entry-Bv6kuTK_.js +1960 -0
- package/dist/cjs/nv-popover.entry-Zt25YeAv.js +1960 -0
- package/dist/cjs/nv-row.entry-BPK1Li7w.js +21 -0
- package/dist/cjs/nv-row.entry-Bwzlub3i.js +21 -0
- package/dist/cjs/nv-stack.entry-ByaO-0TJ.js +30 -0
- package/dist/cjs/nv-stack.entry-bhess4lQ.js +30 -0
- package/dist/cjs/nv-table.entry-C7Hd57Iq.js +338 -0
- package/dist/cjs/nv-table.entry-D3U4dFcw.js +338 -0
- package/dist/cjs/nv-tablecolumn.entry-BDCw_45v.js +18 -0
- package/dist/cjs/nv-tablecolumn.entry-BzwWPlLf.js +18 -0
- package/dist/cjs/nv-toggle.entry-BTqGH_H0.js +79 -0
- package/dist/cjs/nv-toggle.entry-DXpNGkbz.js +79 -0
- package/dist/cjs/nv-tooltip.entry-BDZfrLHv.js +44 -0
- package/dist/cjs/nv-tooltip.entry-CvCZZV88.js +44 -0
- package/dist/cjs/timeline.animation-1b88f052-B8-vCVrY.js +105 -0
- package/dist/cjs/v4-a79185f4-2n0dOd_Y.js +56 -0
- package/dist/generated/components.js +16 -0
- package/dist/types/generated/components.d.ts +19 -3
- package/package.json +1 -1
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var index = require('./index-C8UfzrMI.js');
|
|
4
|
+
require('react');
|
|
5
|
+
|
|
6
|
+
const nvMenuCss = "nv-menuitem{display:flex;align-items:center;max-width:300px;width:100vw;font-size:var(--menu-contextual-item-font-size);font-weight:var(--menu-contextual-item-font-weight);color:var(--components-menu-contextual-item-content);border-radius:var(--menu-contextual-item-radius);gap:var(--menu-contextual-item-gap-x);padding:var(--menu-contextual-item-padding-y) var(--menu-contextual-item-padding-x);transition:background-color 150ms ease-out;cursor:pointer}nv-menuitem:hover,nv-menuitem:focus,nv-menuitem:focus-within{background-color:var(--components-menu-contextual-item-background-hover);color:var(--components-menu-contextual-item-content-hover)}nv-menuitem *{pointer-events:none}nv-menuitem kbd{color:var(--components-menu-contextual-item-shortcut)}nv-menuitem [data-scope=text]{margin-right:auto}nv-menuitem[disabled]:not([disabled=false]){cursor:unset;background-color:unset;color:var(--components-menu-contextual-item-content-disabled)}nv-menu{display:inline-block;position:relative}nv-menu:has([fluid]:not([fluid=false])){display:block}nv-menu nv-popover{display:unset}nv-menu nv-popover [data-scope=popover]{background-color:transparent !important;padding:0 !important}nv-menu [slot=content]{padding:var(--menu-contextual-padding-y) var(--menu-contextual-padding-x);border-radius:var(--menu-contextual-radius);gap:var(--menu-contextual-gap-y);background-color:var(--components-menu-contextual-background);border-color:var(--components-menu-contextual-border);display:flex;flex-direction:column}nv-menu nv-menu[open]:not([open=false])>nv-menuitem{background-color:var(--components-menu-contextual-item-background-hover);color:var(--components-menu-contextual-item-content-hover)}nv-menu hr{display:block;margin:var(--menu-contextual-divider-padding-top) var(--menu-contextual-divider-padding-x) var(--menu-contextual-divider-padding-bottom) var(--menu-contextual-divider-padding-x)}";
|
|
7
|
+
const NvMenuStyle0 = nvMenuCss;
|
|
8
|
+
|
|
9
|
+
const NvMenu = class {
|
|
10
|
+
constructor(hostRef) {
|
|
11
|
+
index.registerInstance(this, hostRef);
|
|
12
|
+
this.menuitemSelected = index.createEvent(this, "menuitemSelected");
|
|
13
|
+
this.isHandlingKeyDown = false;
|
|
14
|
+
/****************************************************************************/
|
|
15
|
+
//#region PROPERTIES
|
|
16
|
+
/**
|
|
17
|
+
* Use this to toggle the initial visibility of the menu, by default the menu
|
|
18
|
+
* is hidden.
|
|
19
|
+
*/
|
|
20
|
+
this.open = false;
|
|
21
|
+
/**
|
|
22
|
+
* Use this if the menu is nested inside another menu. This will prevent the
|
|
23
|
+
* parent menu from closing when the child menu is opened.
|
|
24
|
+
*/
|
|
25
|
+
this.nested = false;
|
|
26
|
+
/**
|
|
27
|
+
* Use this to disable the menu from closing automatically when a menu item is
|
|
28
|
+
* selected.
|
|
29
|
+
*/
|
|
30
|
+
this.disableCloseOnSelect = false;
|
|
31
|
+
/**
|
|
32
|
+
* Decides where the menu shows up next to the button it’s linked to (above,
|
|
33
|
+
* below, to the sides). If there isn’t enough room, it will adjust its
|
|
34
|
+
* position on the axis to fit on the screen, so users can always see it.
|
|
35
|
+
*/
|
|
36
|
+
this.placement = 'bottom-end';
|
|
37
|
+
/**
|
|
38
|
+
* Parsed items stored in state.
|
|
39
|
+
*/
|
|
40
|
+
this.parsedItems = [];
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Watcher to parse the items when the `items` property changes.
|
|
44
|
+
* @param {string} newValue - The new value of the `items` property.
|
|
45
|
+
*/
|
|
46
|
+
handleItemsChange(newValue) {
|
|
47
|
+
if (typeof newValue === 'string') {
|
|
48
|
+
try {
|
|
49
|
+
this.parsedItems = JSON.parse(newValue);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
console.error('Error parsing menu items:', error);
|
|
53
|
+
this.parsedItems = [];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//#endregion PROPERTIES
|
|
58
|
+
/****************************************************************************/
|
|
59
|
+
//#region METHODS
|
|
60
|
+
/**
|
|
61
|
+
* Opens the menu.
|
|
62
|
+
*/
|
|
63
|
+
async show() {
|
|
64
|
+
this.open = true;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Closes the menu.
|
|
68
|
+
*/
|
|
69
|
+
async close() {
|
|
70
|
+
this.open = false;
|
|
71
|
+
}
|
|
72
|
+
handleMenuItemSelect(event) {
|
|
73
|
+
if (this.disableCloseOnSelect)
|
|
74
|
+
return;
|
|
75
|
+
if (event.detail.hasSubmenu)
|
|
76
|
+
return;
|
|
77
|
+
this.open = false;
|
|
78
|
+
}
|
|
79
|
+
handleKeydown(event) {
|
|
80
|
+
// If the menu is not open, check if the trigger is focused
|
|
81
|
+
// and the user presses Enter or ArrowDown, open the menu
|
|
82
|
+
if (!this.open) {
|
|
83
|
+
if ((event.key === 'Enter' ||
|
|
84
|
+
event.key === 'ArrowDown' ||
|
|
85
|
+
event.key === ' ') &&
|
|
86
|
+
document.activeElement === this.triggerElement) {
|
|
87
|
+
event.preventDefault();
|
|
88
|
+
this.show();
|
|
89
|
+
// Then, put the focus on the first menuitem
|
|
90
|
+
const firstMenuItem = this.popoverElement.querySelector('nv-menuitem');
|
|
91
|
+
if (firstMenuItem) {
|
|
92
|
+
requestAnimationFrame(() => firstMenuItem.focus());
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (this.isHandlingKeyDown)
|
|
98
|
+
return;
|
|
99
|
+
this.isHandlingKeyDown = true;
|
|
100
|
+
if (event.key === 'ArrowDown' ||
|
|
101
|
+
event.key === 'ArrowUp' ||
|
|
102
|
+
event.key === 'ArrowLeft' ||
|
|
103
|
+
event.key === 'ArrowRight' ||
|
|
104
|
+
event.key === 'Escape') {
|
|
105
|
+
event.preventDefault();
|
|
106
|
+
}
|
|
107
|
+
if (event.key === 'Escape' && !this.nested) {
|
|
108
|
+
this.close();
|
|
109
|
+
this.triggerElement.focus();
|
|
110
|
+
this.isHandlingKeyDown = false;
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
const menuContent = this.el.querySelector('[slot="content"]');
|
|
114
|
+
const menuItems = Array.from(menuContent.childNodes).filter(item => { var _a; return (_a = item.matches) === null || _a === void 0 ? void 0 : _a.call(item, 'nv-menuitem, nv-menu'); });
|
|
115
|
+
let currentIndex = menuItems.indexOf(document.activeElement);
|
|
116
|
+
if (currentIndex === -1)
|
|
117
|
+
currentIndex = menuItems.indexOf(document.activeElement.parentElement);
|
|
118
|
+
if (currentIndex === -1 &&
|
|
119
|
+
menuItems.find(item => item.matches('nv-menu[open]'))) {
|
|
120
|
+
this.isHandlingKeyDown = false;
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {
|
|
124
|
+
menuItems.forEach(item => {
|
|
125
|
+
if (item.matches('nv-menu'))
|
|
126
|
+
item.close();
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
if (event.key === 'ArrowDown') {
|
|
130
|
+
let nextIndex = (currentIndex + 1) % menuItems.length;
|
|
131
|
+
while (menuItems[nextIndex].matches('nv-menuitem[disabled]')) {
|
|
132
|
+
nextIndex = (nextIndex + 1) % menuItems.length;
|
|
133
|
+
}
|
|
134
|
+
const nextFocusable = menuItems[nextIndex];
|
|
135
|
+
if (nextFocusable.matches('nv-menuitem')) {
|
|
136
|
+
nextFocusable.focus();
|
|
137
|
+
}
|
|
138
|
+
else if (nextFocusable.matches('nv-menu')) {
|
|
139
|
+
nextFocusable.querySelector('nv-menuitem').focus();
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
if (event.key === 'ArrowUp') {
|
|
143
|
+
let prevIndex = (currentIndex - 1 + menuItems.length) % menuItems.length;
|
|
144
|
+
while (menuItems[prevIndex].matches('nv-menuitem[disabled]')) {
|
|
145
|
+
prevIndex = (prevIndex - 1 + menuItems.length) % menuItems.length;
|
|
146
|
+
}
|
|
147
|
+
const prevFocusable = menuItems[prevIndex];
|
|
148
|
+
if (prevFocusable.matches('nv-menuitem')) {
|
|
149
|
+
prevFocusable.focus();
|
|
150
|
+
}
|
|
151
|
+
else if (prevFocusable.matches('nv-menu')) {
|
|
152
|
+
prevFocusable.querySelector('nv-menuitem').focus();
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (event.key === 'ArrowRight') {
|
|
156
|
+
const submenu = menuItems[currentIndex];
|
|
157
|
+
if (!submenu.matches('nv-menu')) {
|
|
158
|
+
this.isHandlingKeyDown = false;
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
submenu.show();
|
|
162
|
+
}
|
|
163
|
+
if (event.key === 'ArrowLeft' && this.nested) {
|
|
164
|
+
if (menuItems.find(item => item.matches('nv-menu[open]'))) {
|
|
165
|
+
this.isHandlingKeyDown = false;
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
this.close();
|
|
169
|
+
this.triggerElement.focus();
|
|
170
|
+
}
|
|
171
|
+
this.isHandlingKeyDown = false;
|
|
172
|
+
}
|
|
173
|
+
handleOpenChanged(event) {
|
|
174
|
+
if (event.target === this.el.querySelector('nv-popover')) {
|
|
175
|
+
this.open = event.detail;
|
|
176
|
+
}
|
|
177
|
+
const triggerHasFocus = this.triggerElement === document.activeElement;
|
|
178
|
+
const triggerHasFocusVisible = this.triggerElement.matches(':focus-visible');
|
|
179
|
+
if (triggerHasFocus && triggerHasFocusVisible)
|
|
180
|
+
this.focusFirstItem();
|
|
181
|
+
}
|
|
182
|
+
focusFirstItem() {
|
|
183
|
+
const firstButton = this.popoverElement.querySelector('nv-menuitem');
|
|
184
|
+
if (firstButton) {
|
|
185
|
+
requestAnimationFrame(() => firstButton.focus());
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
//#endregion EVENTS
|
|
189
|
+
/****************************************************************************/
|
|
190
|
+
//#region LIFECYCLE
|
|
191
|
+
componentWillLoad() {
|
|
192
|
+
this.triggerElement = Array.from(this.el.children).find(child => {
|
|
193
|
+
return child.getAttribute('slot') === 'trigger';
|
|
194
|
+
});
|
|
195
|
+
// If the items attribute is provided, parse its value.
|
|
196
|
+
if (this.items) {
|
|
197
|
+
this.handleItemsChange(this.items);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
//#endregion LIFECYCLE
|
|
201
|
+
/****************************************************************************/
|
|
202
|
+
//#region RENDER
|
|
203
|
+
/**
|
|
204
|
+
* Generates menu items from the `items` property.
|
|
205
|
+
* @param {MenuItem[]} items - The items to display in the menu.
|
|
206
|
+
* @returns {HTMLElement[]} The rendered items.
|
|
207
|
+
*/
|
|
208
|
+
renderMenuItems(items) {
|
|
209
|
+
return items.map(item => {
|
|
210
|
+
var _a;
|
|
211
|
+
if (item.hasSubmenu && ((_a = item.submenuItems) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
212
|
+
return (index.h("nv-menu", { nested: true, placement: "right-start", items: JSON.stringify(item.submenuItems) }, index.h("nv-menuitem", { slot: "trigger", "has-submenu": true, disabled: item.disabled, icon: item.icon, shortcut: item.shortcut, id: item.value, name: item.label, label: item.label })));
|
|
213
|
+
}
|
|
214
|
+
return (index.h("nv-menuitem", { disabled: item.disabled, icon: item.icon, shortcut: item.shortcut, id: item.value, name: item.label, label: item.label }));
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
render() {
|
|
218
|
+
return (index.h(index.Host, { key: '6730d203996374ae1f875271c8a8dfcecbcfe471' }, index.h("slot", { key: 'e3ac0dd17601af87add2b1e36aff9a8176996646', name: "trigger" }), index.h("nv-popover", { key: 'ad1d65fd742aa445e6601587d5bdd45955dc7e93', ref: el => (this.popoverElement = el), triggerMode: "click", triggerElement: this.triggerElement, placement: this.placement, nested: this.nested, open: this.open }, this.parsedItems.length > 0 ? (index.h("ul", { slot: "content" }, this.renderMenuItems(this.parsedItems))) : (index.h("slot", { name: "content" })))));
|
|
219
|
+
}
|
|
220
|
+
get el() { return index.getElement(this); }
|
|
221
|
+
static get watchers() { return {
|
|
222
|
+
"items": ["handleItemsChange"]
|
|
223
|
+
}; }
|
|
224
|
+
};
|
|
225
|
+
NvMenu.style = NvMenuStyle0;
|
|
226
|
+
|
|
227
|
+
exports.nv_menu = NvMenu;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var index = require('./index-CinzsZ8D.js');
|
|
4
|
+
require('react');
|
|
5
|
+
|
|
6
|
+
const nvMenuitemCss = "nv-menuitem{display:flex;align-items:center;max-width:300px;width:100vw;font-size:var(--menu-contextual-item-font-size);font-weight:var(--menu-contextual-item-font-weight);color:var(--components-menu-contextual-item-content);border-radius:var(--menu-contextual-item-radius);gap:var(--menu-contextual-item-gap-x);padding:var(--menu-contextual-item-padding-y) var(--menu-contextual-item-padding-x);transition:background-color 150ms ease-out;cursor:pointer}nv-menuitem:hover,nv-menuitem:focus,nv-menuitem:focus-within{background-color:var(--components-menu-contextual-item-background-hover);color:var(--components-menu-contextual-item-content-hover)}nv-menuitem *{pointer-events:none}nv-menuitem kbd{color:var(--components-menu-contextual-item-shortcut)}nv-menuitem [data-scope=text]{margin-right:auto}nv-menuitem[disabled]:not([disabled=false]){cursor:unset;background-color:unset;color:var(--components-menu-contextual-item-content-disabled)}";
|
|
7
|
+
const NvMenuitemStyle0 = nvMenuitemCss;
|
|
8
|
+
|
|
9
|
+
const NvMenuitem = class {
|
|
10
|
+
constructor(hostRef) {
|
|
11
|
+
index.registerInstance(this, hostRef);
|
|
12
|
+
this.menuitemSelected = index.createEvent(this, "menuitemSelected");
|
|
13
|
+
/**
|
|
14
|
+
* Disables the item, preventing user interaction.
|
|
15
|
+
*/
|
|
16
|
+
this.disabled = false;
|
|
17
|
+
/**
|
|
18
|
+
* If the menu item has a submenu, the a caret icon will be displayed.
|
|
19
|
+
*/
|
|
20
|
+
this.hasSubmenu = false;
|
|
21
|
+
}
|
|
22
|
+
handleMenuItemSelect(event) {
|
|
23
|
+
// If the element is disabled, stop propagation
|
|
24
|
+
if (this.disabled) {
|
|
25
|
+
event.stopPropagation();
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
this.menuitemSelected.emit({
|
|
29
|
+
id: this.el.id,
|
|
30
|
+
name: this.name,
|
|
31
|
+
hasSubmenu: this.hasSubmenu,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
handleClick(event) {
|
|
35
|
+
this.handleMenuItemSelect(event);
|
|
36
|
+
}
|
|
37
|
+
handleKeyDown(event) {
|
|
38
|
+
if (event.key === 'Enter' || event.key === ' ') {
|
|
39
|
+
const activeElement = document.activeElement;
|
|
40
|
+
if (activeElement &&
|
|
41
|
+
activeElement.tagName === 'NV-MENUITEM' &&
|
|
42
|
+
!activeElement.hasAttribute('has-submenu')) {
|
|
43
|
+
event.preventDefault();
|
|
44
|
+
this.el.click();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//#endregion EVENTS
|
|
49
|
+
/****************************************************************************/
|
|
50
|
+
//#region RENDER
|
|
51
|
+
render() {
|
|
52
|
+
return (index.h(index.Host, { key: '2b59ea1b8582c9d5beac1e22c9547bebca9a19c0', role: "menuitem", tabindex: this.disabled ? '-1' : '0' }, this.icon && index.h("nv-icon", { key: 'bd72a3c8ffb0f2bfcecb11017493ee7476a8b34a', name: this.icon }), index.h("slot", { key: 'a3f396ca95fcb14fba1861f641e11abac06c7fe8' }), this.label && index.h("span", { key: 'ffffe933ab348dc617bb2d76f96e6e11e6ea5900', "data-scope": "text" }, this.label), this.shortcut && !this.hasSubmenu && index.h("kbd", { key: 'cc76611b2a113cfa309ba3655d5c335d996380b3' }, this.shortcut), this.hasSubmenu && index.h("nv-icon", { key: '3e90fdb722f845e24d6588b604f292dd7ee2ea4a', name: "chevron-right" })));
|
|
53
|
+
}
|
|
54
|
+
get el() { return index.getElement(this); }
|
|
55
|
+
};
|
|
56
|
+
NvMenuitem.style = NvMenuitemStyle0;
|
|
57
|
+
|
|
58
|
+
exports.nv_menuitem = NvMenuitem;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var index = require('./index-C8UfzrMI.js');
|
|
4
|
+
require('react');
|
|
5
|
+
|
|
6
|
+
const nvMenuitemCss = "nv-menuitem{display:flex;align-items:center;max-width:300px;width:100vw;font-size:var(--menu-contextual-item-font-size);font-weight:var(--menu-contextual-item-font-weight);color:var(--components-menu-contextual-item-content);border-radius:var(--menu-contextual-item-radius);gap:var(--menu-contextual-item-gap-x);padding:var(--menu-contextual-item-padding-y) var(--menu-contextual-item-padding-x);transition:background-color 150ms ease-out;cursor:pointer}nv-menuitem:hover,nv-menuitem:focus,nv-menuitem:focus-within{background-color:var(--components-menu-contextual-item-background-hover);color:var(--components-menu-contextual-item-content-hover)}nv-menuitem *{pointer-events:none}nv-menuitem kbd{color:var(--components-menu-contextual-item-shortcut)}nv-menuitem [data-scope=text]{margin-right:auto}nv-menuitem[disabled]:not([disabled=false]){cursor:unset;background-color:unset;color:var(--components-menu-contextual-item-content-disabled)}";
|
|
7
|
+
const NvMenuitemStyle0 = nvMenuitemCss;
|
|
8
|
+
|
|
9
|
+
const NvMenuitem = class {
|
|
10
|
+
constructor(hostRef) {
|
|
11
|
+
index.registerInstance(this, hostRef);
|
|
12
|
+
this.menuitemSelected = index.createEvent(this, "menuitemSelected");
|
|
13
|
+
/**
|
|
14
|
+
* Disables the item, preventing user interaction.
|
|
15
|
+
*/
|
|
16
|
+
this.disabled = false;
|
|
17
|
+
/**
|
|
18
|
+
* If the menu item has a submenu, the a caret icon will be displayed.
|
|
19
|
+
*/
|
|
20
|
+
this.hasSubmenu = false;
|
|
21
|
+
}
|
|
22
|
+
handleMenuItemSelect(event) {
|
|
23
|
+
// If the element is disabled, stop propagation
|
|
24
|
+
if (this.disabled) {
|
|
25
|
+
event.stopPropagation();
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
this.menuitemSelected.emit({
|
|
29
|
+
id: this.el.id,
|
|
30
|
+
name: this.name,
|
|
31
|
+
hasSubmenu: this.hasSubmenu,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
handleClick(event) {
|
|
35
|
+
this.handleMenuItemSelect(event);
|
|
36
|
+
}
|
|
37
|
+
handleKeyDown(event) {
|
|
38
|
+
if (event.key === 'Enter' || event.key === ' ') {
|
|
39
|
+
const activeElement = document.activeElement;
|
|
40
|
+
if (activeElement &&
|
|
41
|
+
activeElement.tagName === 'NV-MENUITEM' &&
|
|
42
|
+
!activeElement.hasAttribute('has-submenu')) {
|
|
43
|
+
event.preventDefault();
|
|
44
|
+
this.el.click();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//#endregion EVENTS
|
|
49
|
+
/****************************************************************************/
|
|
50
|
+
//#region RENDER
|
|
51
|
+
render() {
|
|
52
|
+
return (index.h(index.Host, { key: '3a80bda645a8c28a9cc660271d02a0bc3a786f84', role: "menuitem", tabindex: this.disabled ? '-1' : '0' }, this.icon && index.h("nv-icon", { key: '13f890147ad70cbc7134bc4c0036bc23328ae522', name: this.icon }), index.h("slot", { key: 'b5d97c5b7171caf26e7d4592ef711f36e261a382' }), this.label && index.h("span", { key: 'fc763d260c77a61a85847815bfeb27255474ae4d', "data-scope": "text" }, this.label), this.shortcut && !this.hasSubmenu && index.h("kbd", { key: '40685c6af8789f943a59c61065786a8f67f9d49b' }, this.shortcut), this.hasSubmenu && index.h("nv-icon", { key: 'ba77aeaaadefddb9bb8403710b1b12ef4a698dee', name: "chevron-right" })));
|
|
53
|
+
}
|
|
54
|
+
get el() { return index.getElement(this); }
|
|
55
|
+
};
|
|
56
|
+
NvMenuitem.style = NvMenuitemStyle0;
|
|
57
|
+
|
|
58
|
+
exports.nv_menuitem = NvMenuitem;
|