@progress/kendo-vue-layout 10.2.0-develop.5 → 10.2.0-develop.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/contextmenu/ContextMenu.d.ts +15 -1
  2. package/contextmenu/ContextMenu.js +1 -1
  3. package/contextmenu/ContextMenu.mjs +34 -27
  4. package/dist/cdn/js/kendo-vue-layout.js +1 -1
  5. package/index.d.mts +3 -0
  6. package/index.d.ts +3 -0
  7. package/menu/BaseMenuItemInternalProps.d.ts +4 -0
  8. package/menu/MenuProps.d.ts +35 -0
  9. package/menu/components/Menu.d.ts +11 -3
  10. package/menu/components/Menu.js +1 -1
  11. package/menu/components/Menu.mjs +46 -34
  12. package/menu/components/MenuItemInternal.d.ts +20 -4
  13. package/menu/components/MenuItemInternal.js +1 -1
  14. package/menu/components/MenuItemInternal.mjs +156 -82
  15. package/menu/components/MenuItemLink.d.ts +8 -0
  16. package/menu/components/MenuItemLink.js +1 -1
  17. package/menu/components/MenuItemLink.mjs +13 -11
  18. package/menu/models/BaseMenuItem.d.ts +36 -0
  19. package/menu/models/MenuItemActionsRenderProps.d.ts +17 -0
  20. package/menu/models/MenuItemGroupHeaderRenderProps.d.ts +17 -0
  21. package/menu/utils/getNewItemIdUponKeyboardNavigation.js +1 -1
  22. package/menu/utils/getNewItemIdUponKeyboardNavigation.mjs +57 -62
  23. package/menu/utils/itemsIdsUtils.d.ts +0 -16
  24. package/menu/utils/itemsIdsUtils.js +1 -1
  25. package/menu/utils/itemsIdsUtils.mjs +23 -40
  26. package/menu/utils/misc.d.ts +8 -0
  27. package/menu/utils/misc.js +1 -1
  28. package/menu/utils/misc.mjs +23 -14
  29. package/menu/utils/navigableItems.d.ts +28 -0
  30. package/menu/utils/navigableItems.js +8 -0
  31. package/menu/utils/navigableItems.mjs +45 -0
  32. package/menu/utils/prepareInputItemsForInternalWork.js +1 -1
  33. package/menu/utils/prepareInputItemsForInternalWork.mjs +58 -46
  34. package/package-metadata.js +1 -1
  35. package/package-metadata.mjs +2 -2
  36. package/package.json +7 -7
package/index.d.mts CHANGED
@@ -44,7 +44,10 @@ export * from './menu/components/Menu.js';
44
44
  export * from './menu/components/MenuItemLink.js';
45
45
  export * from './menu/components/MenuItemArrow.js';
46
46
  export * from './menu/models/MenuItemModel.js';
47
+ export * from './menu/models/MenuItemActionsRenderProps.js';
48
+ export * from './menu/models/MenuItemGroupHeaderRenderProps.js';
47
49
  export * from './menu/events.js';
50
+ export type { MenuSize } from './menu/MenuProps.js';
48
51
  export * from './contextmenu/ContextMenu.js';
49
52
  export * from './splitter/Splitter.js';
50
53
  export * from './splitter/SplitterPane.js';
package/index.d.ts CHANGED
@@ -44,7 +44,10 @@ export * from './menu/components/Menu';
44
44
  export * from './menu/components/MenuItemLink';
45
45
  export * from './menu/components/MenuItemArrow';
46
46
  export * from './menu/models/MenuItemModel';
47
+ export * from './menu/models/MenuItemActionsRenderProps';
48
+ export * from './menu/models/MenuItemGroupHeaderRenderProps';
47
49
  export * from './menu/events';
50
+ export type { MenuSize } from './menu/MenuProps';
48
51
  export * from './contextmenu/ContextMenu';
49
52
  export * from './splitter/Splitter';
50
53
  export * from './splitter/SplitterPane';
@@ -5,6 +5,7 @@
5
5
  * Licensed under commercial license. See LICENSE.md in the package root for more information
6
6
  *-------------------------------------------------------------------------------------------
7
7
  */
8
+ import { MenuSize } from './MenuProps';
8
9
  /**
9
10
  * @hidden
10
11
  */
@@ -14,8 +15,11 @@ export interface BaseMenuItemInternalProps {
14
15
  tabbableItemId: string;
15
16
  itemRender?: any;
16
17
  linkRender?: any;
18
+ actionsRender?: any;
17
19
  isMenuVertical: boolean;
18
20
  isDirectionRightToLeft?: boolean;
21
+ size?: MenuSize;
22
+ isContextMenu?: boolean;
19
23
  menuGuid: string;
20
24
  onMouseOver?: any;
21
25
  onMouseLeave?: any;
@@ -7,6 +7,10 @@
7
7
  */
8
8
  import { MenuItemModel } from './models/MenuItemModel';
9
9
  import { MenuSelectEvent } from './events';
10
+ /**
11
+ * Represents the values of the size property of the Menu.
12
+ */
13
+ export type MenuSize = 'small' | 'medium' | 'large';
10
14
  /**
11
15
  * The properties of the [Kendo UI for Vue Menu component]({% slug overview_menu %}).
12
16
  */
@@ -43,6 +47,18 @@ export interface MenuProps {
43
47
  * A Vue functional or class component which is used for rendering the link of the item ([see example]({% slug rendering_menu %}#toc-links)). The item link is a part of the visual representation of the item which, by default, includes an arrow, icon, and text.
44
48
  */
45
49
  linkRender?: any;
50
+ /**
51
+ * Specifies a component, render function, or slot name for trailing actions on each Menu item.
52
+ * Receives `{ item, itemId }`. An item-level `actionsRender` overrides this setting.
53
+ *
54
+ * @example
55
+ * ```vue
56
+ * <Menu :items="items" :actions-render="'actions'">
57
+ * <template #actions="{ props }"><kbd>{{ props.item.data?.shortcut }}</kbd></template>
58
+ * </Menu>
59
+ * ```
60
+ */
61
+ actionsRender?: any;
46
62
  /**
47
63
  * Sets the ids of the Menu items that will not be closed on mouse-leave. The ids are hierarchical and zero-based. The first root item has a `0` id. If the first root item has children, the first child item acquires a `0_0` id and the second acquires a `0_1` id.
48
64
  */
@@ -51,6 +67,25 @@ export interface MenuProps {
51
67
  * Adds a custom className to the Menu top element.
52
68
  */
53
69
  className?: string;
70
+ /**
71
+ * Configures the `size` of the Menu. Applies to the root items and to the popup items.
72
+ *
73
+ * The available options are:
74
+ * - small
75
+ * - medium
76
+ * - large
77
+ *
78
+ * @example
79
+ * ```vue
80
+ * <Menu :items="items" :size="'large'" />
81
+ * ```
82
+ */
83
+ size?: MenuSize;
84
+ /**
85
+ * @hidden
86
+ * Renders the Menu as the root list of a ContextMenu.
87
+ */
88
+ contextMenu?: boolean;
54
89
  /**
55
90
  * Fires when a Menu item is selected.
56
91
  */
@@ -10,7 +10,7 @@ import { PropType } from 'vue';
10
10
  * @hidden
11
11
  */
12
12
  export interface MenuComputed {
13
- menuClassName: object;
13
+ menuClassName: string;
14
14
  }
15
15
  /**
16
16
  * @hidden
@@ -60,10 +60,14 @@ declare const Menu: import('vue').DefineComponent<import('vue').ExtractPropTypes
60
60
  default: any;
61
61
  };
62
62
  openOnClick: PropType<boolean>;
63
+ size: PropType<import('../MenuProps').MenuSize>;
64
+ contextMenu: PropType<boolean>;
63
65
  onSelect: PropType<(event: import('../events').MenuSelectEvent) => void>;
64
66
  itemRender: PropType<any>;
65
67
  linkRender: PropType<any>;
66
- customCloseItemIds: ArrayConstructor;
68
+ actionsRender: PropType<any>;
69
+ customCloseItemIds: PropType<string[]>;
70
+ className: PropType<string>;
67
71
  }>, {}, {
68
72
  focusedItemId: string;
69
73
  hoveredItemId: string;
@@ -105,10 +109,14 @@ declare const Menu: import('vue').DefineComponent<import('vue').ExtractPropTypes
105
109
  default: any;
106
110
  };
107
111
  openOnClick: PropType<boolean>;
112
+ size: PropType<import('../MenuProps').MenuSize>;
113
+ contextMenu: PropType<boolean>;
108
114
  onSelect: PropType<(event: import('../events').MenuSelectEvent) => void>;
109
115
  itemRender: PropType<any>;
110
116
  linkRender: PropType<any>;
111
- customCloseItemIds: ArrayConstructor;
117
+ actionsRender: PropType<any>;
118
+ customCloseItemIds: PropType<string[]>;
119
+ className: PropType<string>;
112
120
  }>> & Readonly<{}>, {
113
121
  vertical: boolean;
114
122
  hoverOpenDelay: number;
@@ -5,4 +5,4 @@
5
5
  * Licensed under commercial license. See LICENSE.md in the package root for more information
6
6
  *-------------------------------------------------------------------------------------------
7
7
  */
8
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("vue"),i=require("@progress/kendo-vue-common"),t=require("../utils/itemsIdsUtils.js"),d=require("../utils/prepareInputItemsForInternalWork.js"),I=require("../utils/getNewItemIdUponKeyboardNavigation.js"),n=require("../utils/hoverDelay.js"),a=require("../utils/DirectionHolder.js"),l=require("../utils/MouseOverHandler.js"),u=require("../../package-metadata.js"),m=require("./MenuItemInternal.js"),h=o.defineComponent({name:"KendoMenu",props:{vertical:{type:Boolean,default:!1},items:Array,dir:String,hoverOpenDelay:{type:Number,default:void 0},hoverCloseDelay:{type:Number,default:void 0},openOnClick:Boolean,onSelect:Function,itemRender:[String,Object,Function],linkRender:[String,Object,Function],customCloseItemIds:Array},created(){i.validatePackage(u.packageMetadata),this.mouseOverHandler=new l.MouseOverHandler(this.$props.openOnClick,this.reset,this.onItemMouseOver),this.guid=i.guid(),this.directionHolder=new a.DirectionHolder,this.inputItems=[],this.currentItems=[]},mounted(){this.isFirstRender=!1,this.menuWrapperEl=i.getRef(this,"menuWrapper")},updated(){this.mouseOverHandler.OpenOnClick=this.$props.openOnClick},unmounted(){this.clearItemHoverAndLeaveRequestsIfApplicable()},data(){return{focusedItemId:t.EMPTY_ID,hoveredItemId:t.EMPTY_ID,tabbableItemId:t.ZERO_LEVEL_ZERO_ITEM_ID,isFirstRender:!0}},computed:{menuClassName(){return{"k-widget":!0,"k-reset":!0,"k-header":!0,"k-menu":!0,"k-menu-horizontal":!this.$props.vertical,"k-menu-vertical":this.$props.vertical}}},render(){this.prepareItems(),this.isFirstRender||this.directionHolder.setIsDirectionRightToLeft(this.checkIsDirectionRightToLeft());let e=this.hoveredItemId?this.hoveredItemId:this.focusedItemId?t.getDirectParentId(this.focusedItemId):t.EMPTY_ID;return o.createVNode("div",{class:this.getMenuWrapperClassName(),ref:i.setRef(this,"menuWrapper")},[o.createVNode(m.MenuItemInternalsList,{class:this.menuClassName,"aria-orientation":this.$props.vertical?"vertical":void 0,items:this.currentItems,isMenuVertical:this.$props.vertical,isDirectionRightToLeft:this.directionHolder.getIsDirectionRightToLeft(),focusedItemId:this.focusedItemId,lastItemIdToBeOpened:e,tabbableItemId:this.tabbableItemId,itemRender:i.templateRendering.call(this,this.$props.itemRender,i.getListeners.call(this)),linkRender:i.templateRendering.call(this,this.$props.linkRender,i.getListeners.call(this)),menuGuid:this.guid,onMouseleave:this.onItemMouseLeave,onMouseover:this.onItemMouseOver,onMousedown:this.onItemMouseDown,onKeydown:this.onKeyDown,onFocus:this.onItemFocus,onClick:this.onItemClick,onBlur:this.onItemBlur,originalItemNeeded:this.getInputItem},null)])},methods:{reset(){this.clearItemHoverAndLeaveRequestsIfApplicable(),this.focusedItemId=t.EMPTY_ID,this.hoveredItemId=t.EMPTY_ID,this.tabbableItemId=t.ZERO_LEVEL_ZERO_ITEM_ID},onKeyDown(e){if(this.focusedItemId!==t.EMPTY_ID){const s=t.getItemById(this.focusedItemId,this.currentItems),r=I.getNewItemIdUponKeyboardNavigation(this.currentItems,s.id,e.keyCode,e.key,this.$props.vertical,this.directionHolder.getIsDirectionRightToLeft());s.id!==r&&(e.preventDefault(),this.setFocusedItemId(r)),(e.keyCode===i.Keys.enter||e.keyCode===i.Keys.space)&&!s.disabled&&(this.mouseOverHandler.handleItemSelectedViaKeyboard(),this.dispatchSelectEventIfWired(e,s.id),!e.defaultPrevented&&s.items.length===0&&s.url&&i.isSafeUrl(s.url)&&i.canUseDOM&&window.location.assign(s.url))}},onItemMouseOver(e){this.mouseOverHandler.IsMouseOverEnabled&&(this.clearItemHoverAndLeaveRequestsIfApplicable(),this.itemHoverRequest=window.setTimeout(()=>{this.setHoveredItemId(e),this.itemHoverRequest=null},n.getHoverOpenDelay({...this.$props})))},onItemMouseLeave(e){this.mouseOverHandler.IsMouseOverEnabled&&this.isItemWithDefaultClose(e)&&(this.clearItemHoverAndLeaveRequestsIfApplicable(),this.itemLeaveRequest=window.setTimeout(()=>{this.setHoveredItemId(t.EMPTY_ID),this.itemLeaveRequest=null},n.getHoverCloseDelay({...this.$props})))},onItemMouseDown(){this.mouseOverHandler.handleItemMouseDown()},onItemFocus(e){this.setFocusedItemId(e),this.mouseOverHandler.handleItemFocus()},onItemClick(e,s){const r=t.getItemById(s,this.currentItems);r.disabled||(this.setFocusedItemId(s),this.mouseOverHandler.handleItemClick(s,this.isItemWithDefaultClose(s)),this.dispatchSelectEventIfWired(e,s),!e.defaultPrevented&&r.url&&i.isSafeUrl(r.url)&&i.canUseDOM&&window.location.assign(r.url))},onItemBlur(e){this.isItemWithDefaultClose(e)&&this.setFocusedItemId(t.EMPTY_ID)},getInputItem(e){return t.getItemById(e,this.inputItems)},setFocusedItemId(e){const s=e===t.EMPTY_ID?this.tabbableItemId:t.getRootParentId(e),r=e===t.EMPTY_ID||t.isIdEmptyOrZeroLevel(this.hoveredItemId)&&t.isIdEmptyOrZeroLevel(e)?this.hoveredItemId:t.EMPTY_ID;this.hoveredItemId=r,this.focusedItemId=e,this.tabbableItemId=s},setHoveredItemId(e){t.isIdEmptyOrZeroLevel(e)&&t.isIdEmptyOrZeroLevel(this.focusedItemId)?this.hoveredItemId=e:(this.hoveredItemId=e,this.focusedItemId=t.EMPTY_ID,this.tabbableItemId=t.ZERO_LEVEL_ZERO_ITEM_ID)},getMenuWrapperClassName(){return{"k-rtl":this.directionHolder.getIsDirectionRightToLeft()}},clearItemHoverAndLeaveRequestsIfApplicable(){this.itemHoverRequest&&(clearTimeout(this.itemHoverRequest),this.itemHoverRequest=null),this.itemLeaveRequest&&(clearTimeout(this.itemLeaveRequest),this.itemLeaveRequest=null)},isItemWithDefaultClose(e){return!this.$props.customCloseItemIds||this.$props.customCloseItemIds.indexOf(e)===-1},checkIsDirectionRightToLeft(){return this.$props.dir!==void 0?this.$props.dir==="rtl":this.menuWrapperEl&&getComputedStyle(this.menuWrapperEl).direction==="rtl"},prepareItems(){const{items:e,inputItems:s}=d.prepareInputItemsForInternalWork.call(this,this.$props.items);this.currentItems=e,this.inputItems=s},dispatchSelectEventIfWired(e,s){this.$emit("select",{event:e,component:this,item:this.getInputItem(s),itemId:s})}}});exports.Menu=h;
8
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("vue"),i=require("@progress/kendo-vue-common"),t=require("../utils/itemsIdsUtils.js"),a=require("../utils/prepareInputItemsForInternalWork.js"),d=require("../utils/getNewItemIdUponKeyboardNavigation.js"),l=require("../utils/navigableItems.js"),n=require("../utils/hoverDelay.js"),I=require("../utils/DirectionHolder.js"),u=require("../utils/MouseOverHandler.js"),m=require("../../package-metadata.js"),h=require("./MenuItemInternal.js"),c=o.defineComponent({name:"KendoMenu",props:{vertical:{type:Boolean,default:!1},items:Array,dir:String,hoverOpenDelay:{type:Number,default:void 0},hoverCloseDelay:{type:Number,default:void 0},openOnClick:Boolean,size:String,contextMenu:Boolean,onSelect:Function,itemRender:[String,Object,Function],linkRender:[String,Object,Function],actionsRender:[String,Object,Function],customCloseItemIds:Array,className:String},created(){i.validatePackage(m.packageMetadata),this.mouseOverHandler=new u.MouseOverHandler(this.$props.openOnClick,this.reset,this.onItemMouseOver),this.guid=i.guid(),this.directionHolder=new I.DirectionHolder,this.inputItems=[],this.currentItems=[]},mounted(){this.isFirstRender=!1,this.menuWrapperEl=i.getRef(this,"menuWrapper")},updated(){this.mouseOverHandler.OpenOnClick=this.$props.openOnClick},unmounted(){this.clearItemHoverAndLeaveRequestsIfApplicable()},data(){return{focusedItemId:t.EMPTY_ID,hoveredItemId:t.EMPTY_ID,tabbableItemId:t.ZERO_LEVEL_ZERO_ITEM_ID,isFirstRender:!0}},computed:{menuClassName(){const e=this.$props.size&&i.kendoThemeMaps.sizeMap[this.$props.size];return this.$props.contextMenu&&this.$props.vertical?i.classNames("k-context-menu","k-menu-group",e&&`k-menu-group-${e}`,this.$props.className):i.classNames({"k-context-menu":!!this.$props.contextMenu,"k-reset":!0,"k-header":!0,"k-menu":!0,"k-menu-horizontal":!this.$props.vertical,"k-menu-vertical":this.$props.vertical,[`k-menu-${e}`]:e},this.$props.className)}},render(){this.prepareItems(),this.isFirstRender||this.directionHolder.setIsDirectionRightToLeft(this.checkIsDirectionRightToLeft());let e=this.hoveredItemId?this.hoveredItemId:this.focusedItemId?t.getDirectParentId(this.focusedItemId):t.EMPTY_ID;const s=this.tabbableItemId===t.ZERO_LEVEL_ZERO_ITEM_ID?l.getFirstNavigableRootId(this.currentItems):this.tabbableItemId;return o.createVNode("div",{class:this.getMenuWrapperClassName(),ref:i.setRef(this,"menuWrapper")},[o.createVNode(h.MenuItemInternalsList,{class:this.menuClassName,"aria-orientation":this.$props.vertical?"vertical":void 0,items:this.currentItems,isMenuVertical:this.$props.vertical,isDirectionRightToLeft:this.directionHolder.getIsDirectionRightToLeft(),size:this.$props.size,isContextMenu:!!this.$props.contextMenu,role:this.$props.contextMenu?"menu":void 0,focusedItemId:this.focusedItemId,lastItemIdToBeOpened:e,tabbableItemId:s,itemRender:i.templateRendering.call(this,this.$props.itemRender,i.getListeners.call(this)),linkRender:i.templateRendering.call(this,this.$props.linkRender,i.getListeners.call(this)),actionsRender:i.templateRendering.call(this,this.$props.actionsRender,i.getListeners.call(this)),menuGuid:this.guid,onMouseleave:this.onItemMouseLeave,onMouseover:this.onItemMouseOver,onMousedown:this.onItemMouseDown,onKeydown:this.onKeyDown,onFocus:this.onItemFocus,onClick:this.onItemClick,onBlur:this.onItemBlur,originalItemNeeded:this.getInputItem},null)])},methods:{reset(){this.clearItemHoverAndLeaveRequestsIfApplicable(),this.focusedItemId=t.EMPTY_ID,this.hoveredItemId=t.EMPTY_ID,this.tabbableItemId=t.ZERO_LEVEL_ZERO_ITEM_ID},onKeyDown(e){if(this.focusedItemId!==t.EMPTY_ID){const s=t.getItemById(this.focusedItemId,this.currentItems),r=d.getNewItemIdUponKeyboardNavigation(this.currentItems,s.id,e.keyCode,e.key,this.$props.vertical,this.directionHolder.getIsDirectionRightToLeft());s.id!==r&&(e.preventDefault(),this.setFocusedItemId(r)),(e.keyCode===i.Keys.enter||e.keyCode===i.Keys.space)&&!s.disabled&&(this.mouseOverHandler.handleItemSelectedViaKeyboard(),this.dispatchSelectEventIfWired(e,s.id),!e.defaultPrevented&&s.items.length===0&&s.url&&i.isSafeUrl(s.url)&&i.canUseDOM&&window.location.assign(s.url))}},onItemMouseOver(e){this.mouseOverHandler.IsMouseOverEnabled&&(this.clearItemHoverAndLeaveRequestsIfApplicable(),this.itemHoverRequest=window.setTimeout(()=>{this.setHoveredItemId(e),this.itemHoverRequest=null},n.getHoverOpenDelay({...this.$props})))},onItemMouseLeave(e){this.mouseOverHandler.IsMouseOverEnabled&&this.isItemWithDefaultClose(e)&&(this.clearItemHoverAndLeaveRequestsIfApplicable(),this.itemLeaveRequest=window.setTimeout(()=>{this.setHoveredItemId(t.EMPTY_ID),this.itemLeaveRequest=null},n.getHoverCloseDelay({...this.$props})))},onItemMouseDown(){this.mouseOverHandler.handleItemMouseDown()},onItemFocus(e){this.setFocusedItemId(e),this.mouseOverHandler.handleItemFocus()},onItemClick(e,s){const r=t.getItemById(s,this.currentItems);r.disabled||(this.setFocusedItemId(s),this.mouseOverHandler.handleItemClick(s,this.isItemWithDefaultClose(s)),this.dispatchSelectEventIfWired(e,s),!e.defaultPrevented&&r.url&&i.isSafeUrl(r.url)&&i.canUseDOM&&window.location.assign(r.url))},onItemBlur(e){this.isItemWithDefaultClose(e)&&this.setFocusedItemId(t.EMPTY_ID)},getInputItem(e){return t.getItemById(e,this.inputItems)},setFocusedItemId(e){const s=e===t.EMPTY_ID?this.tabbableItemId:t.getRootParentId(e),r=e===t.EMPTY_ID||t.isIdEmptyOrZeroLevel(this.hoveredItemId)&&t.isIdEmptyOrZeroLevel(e)?this.hoveredItemId:t.EMPTY_ID;this.hoveredItemId=r,this.focusedItemId=e,this.tabbableItemId=s},setHoveredItemId(e){t.isIdEmptyOrZeroLevel(e)&&t.isIdEmptyOrZeroLevel(this.focusedItemId)?this.hoveredItemId=e:(this.hoveredItemId=e,this.focusedItemId=t.EMPTY_ID,this.tabbableItemId=t.ZERO_LEVEL_ZERO_ITEM_ID)},getMenuWrapperClassName(){return{"k-rtl":this.directionHolder.getIsDirectionRightToLeft()}},clearItemHoverAndLeaveRequestsIfApplicable(){this.itemHoverRequest&&(clearTimeout(this.itemHoverRequest),this.itemHoverRequest=null),this.itemLeaveRequest&&(clearTimeout(this.itemLeaveRequest),this.itemLeaveRequest=null)},isItemWithDefaultClose(e){return!this.$props.customCloseItemIds||this.$props.customCloseItemIds.indexOf(e)===-1},checkIsDirectionRightToLeft(){return this.$props.dir!==void 0?this.$props.dir==="rtl":this.menuWrapperEl&&getComputedStyle(this.menuWrapperEl).direction==="rtl"},prepareItems(){const{items:e,inputItems:s}=a.prepareInputItemsForInternalWork.call(this,this.$props.items);this.currentItems=e,this.inputItems=s},dispatchSelectEventIfWired(e,s){this.$emit("select",{event:e,component:this,item:this.getInputItem(s),itemId:s})}}});exports.Menu=c;
@@ -5,17 +5,18 @@
5
5
  * Licensed under commercial license. See LICENSE.md in the package root for more information
6
6
  *-------------------------------------------------------------------------------------------
7
7
  */
8
- import { defineComponent as I, createVNode as d } from "vue";
9
- import { isSafeUrl as m, canUseDOM as l, Keys as a, setRef as c, templateRendering as h, getListeners as u, getRef as p, validatePackage as f, guid as v } from "@progress/kendo-vue-common";
10
- import { isIdEmptyOrZeroLevel as r, EMPTY_ID as s, ZERO_LEVEL_ZERO_ITEM_ID as o, getRootParentId as b, getItemById as n, getDirectParentId as g } from "../utils/itemsIdsUtils.mjs";
11
- import { prepareInputItemsForInternalWork as R } from "../utils/prepareInputItemsForInternalWork.mjs";
12
- import { getNewItemIdUponKeyboardNavigation as H } from "../utils/getNewItemIdUponKeyboardNavigation.mjs";
13
- import { getHoverCloseDelay as O, getHoverOpenDelay as k } from "../utils/hoverDelay.mjs";
14
- import { DirectionHolder as C } from "../utils/DirectionHolder.mjs";
15
- import { MouseOverHandler as D } from "../utils/MouseOverHandler.mjs";
16
- import { packageMetadata as L } from "../../package-metadata.mjs";
17
- import { MenuItemInternalsList as M } from "./MenuItemInternal.mjs";
18
- const S = /* @__PURE__ */ I({
8
+ import { defineComponent as p, createVNode as m } from "vue";
9
+ import { isSafeUrl as l, canUseDOM as h, Keys as u, setRef as c, templateRendering as n, getListeners as a, kendoThemeMaps as f, classNames as I, getRef as v, validatePackage as b, guid as g } from "@progress/kendo-vue-common";
10
+ import { isIdEmptyOrZeroLevel as r, EMPTY_ID as s, ZERO_LEVEL_ZERO_ITEM_ID as o, getRootParentId as R, getItemById as d, getDirectParentId as k } from "../utils/itemsIdsUtils.mjs";
11
+ import { prepareInputItemsForInternalWork as M } from "../utils/prepareInputItemsForInternalWork.mjs";
12
+ import { getNewItemIdUponKeyboardNavigation as O } from "../utils/getNewItemIdUponKeyboardNavigation.mjs";
13
+ import { getFirstNavigableRootId as H } from "../utils/navigableItems.mjs";
14
+ import { getHoverCloseDelay as $, getHoverOpenDelay as C } from "../utils/hoverDelay.mjs";
15
+ import { DirectionHolder as D } from "../utils/DirectionHolder.mjs";
16
+ import { MouseOverHandler as L } from "../utils/MouseOverHandler.mjs";
17
+ import { packageMetadata as y } from "../../package-metadata.mjs";
18
+ import { MenuItemInternalsList as w } from "./MenuItemInternal.mjs";
19
+ const K = /* @__PURE__ */ p({
19
20
  name: "KendoMenu",
20
21
  props: {
21
22
  vertical: {
@@ -33,16 +34,20 @@ const S = /* @__PURE__ */ I({
33
34
  default: void 0
34
35
  },
35
36
  openOnClick: Boolean,
37
+ size: String,
38
+ contextMenu: Boolean,
36
39
  onSelect: Function,
37
40
  itemRender: [String, Object, Function],
38
41
  linkRender: [String, Object, Function],
39
- customCloseItemIds: Array
42
+ actionsRender: [String, Object, Function],
43
+ customCloseItemIds: Array,
44
+ className: String
40
45
  },
41
46
  created() {
42
- f(L), this.mouseOverHandler = new D(this.$props.openOnClick, this.reset, this.onItemMouseOver), this.guid = v(), this.directionHolder = new C(), this.inputItems = [], this.currentItems = [];
47
+ b(y), this.mouseOverHandler = new L(this.$props.openOnClick, this.reset, this.onItemMouseOver), this.guid = g(), this.directionHolder = new D(), this.inputItems = [], this.currentItems = [];
43
48
  },
44
49
  mounted() {
45
- this.isFirstRender = !1, this.menuWrapperEl = p(this, "menuWrapper");
50
+ this.isFirstRender = !1, this.menuWrapperEl = v(this, "menuWrapper");
46
51
  },
47
52
  updated() {
48
53
  this.mouseOverHandler.OpenOnClick = this.$props.openOnClick;
@@ -60,33 +65,40 @@ const S = /* @__PURE__ */ I({
60
65
  },
61
66
  computed: {
62
67
  menuClassName() {
63
- return {
64
- "k-widget": !0,
68
+ const e = this.$props.size && f.sizeMap[this.$props.size];
69
+ return this.$props.contextMenu && this.$props.vertical ? I("k-context-menu", "k-menu-group", e && `k-menu-group-${e}`, this.$props.className) : I({
70
+ "k-context-menu": !!this.$props.contextMenu,
65
71
  "k-reset": !0,
66
72
  "k-header": !0,
67
73
  "k-menu": !0,
68
74
  "k-menu-horizontal": !this.$props.vertical,
69
- "k-menu-vertical": this.$props.vertical
70
- };
75
+ "k-menu-vertical": this.$props.vertical,
76
+ [`k-menu-${e}`]: e
77
+ }, this.$props.className);
71
78
  }
72
79
  },
73
80
  render() {
74
81
  this.prepareItems(), this.isFirstRender || this.directionHolder.setIsDirectionRightToLeft(this.checkIsDirectionRightToLeft());
75
- let e = this.hoveredItemId ? this.hoveredItemId : this.focusedItemId ? g(this.focusedItemId) : s;
76
- return d("div", {
82
+ let e = this.hoveredItemId ? this.hoveredItemId : this.focusedItemId ? k(this.focusedItemId) : s;
83
+ const t = this.tabbableItemId === o ? H(this.currentItems) : this.tabbableItemId;
84
+ return m("div", {
77
85
  class: this.getMenuWrapperClassName(),
78
86
  ref: c(this, "menuWrapper")
79
- }, [d(M, {
87
+ }, [m(w, {
80
88
  class: this.menuClassName,
81
89
  "aria-orientation": this.$props.vertical ? "vertical" : void 0,
82
90
  items: this.currentItems,
83
91
  isMenuVertical: this.$props.vertical,
84
92
  isDirectionRightToLeft: this.directionHolder.getIsDirectionRightToLeft(),
93
+ size: this.$props.size,
94
+ isContextMenu: !!this.$props.contextMenu,
95
+ role: this.$props.contextMenu ? "menu" : void 0,
85
96
  focusedItemId: this.focusedItemId,
86
97
  lastItemIdToBeOpened: e,
87
- tabbableItemId: this.tabbableItemId,
88
- itemRender: h.call(this, this.$props.itemRender, u.call(this)),
89
- linkRender: h.call(this, this.$props.linkRender, u.call(this)),
98
+ tabbableItemId: t,
99
+ itemRender: n.call(this, this.$props.itemRender, a.call(this)),
100
+ linkRender: n.call(this, this.$props.linkRender, a.call(this)),
101
+ actionsRender: n.call(this, this.$props.actionsRender, a.call(this)),
90
102
  menuGuid: this.guid,
91
103
  onMouseleave: this.onItemMouseLeave,
92
104
  onMouseover: this.onItemMouseOver,
@@ -104,21 +116,21 @@ const S = /* @__PURE__ */ I({
104
116
  },
105
117
  onKeyDown(e) {
106
118
  if (this.focusedItemId !== s) {
107
- const t = n(this.focusedItemId, this.currentItems), i = H(this.currentItems, t.id, e.keyCode, e.key, this.$props.vertical, this.directionHolder.getIsDirectionRightToLeft());
108
- t.id !== i && (e.preventDefault(), this.setFocusedItemId(i)), (e.keyCode === a.enter || e.keyCode === a.space) && !t.disabled && (this.mouseOverHandler.handleItemSelectedViaKeyboard(), this.dispatchSelectEventIfWired(e, t.id), !e.defaultPrevented && t.items.length === 0 && t.url && m(t.url) && l && window.location.assign(t.url));
119
+ const t = d(this.focusedItemId, this.currentItems), i = O(this.currentItems, t.id, e.keyCode, e.key, this.$props.vertical, this.directionHolder.getIsDirectionRightToLeft());
120
+ t.id !== i && (e.preventDefault(), this.setFocusedItemId(i)), (e.keyCode === u.enter || e.keyCode === u.space) && !t.disabled && (this.mouseOverHandler.handleItemSelectedViaKeyboard(), this.dispatchSelectEventIfWired(e, t.id), !e.defaultPrevented && t.items.length === 0 && t.url && l(t.url) && h && window.location.assign(t.url));
109
121
  }
110
122
  },
111
123
  onItemMouseOver(e) {
112
124
  this.mouseOverHandler.IsMouseOverEnabled && (this.clearItemHoverAndLeaveRequestsIfApplicable(), this.itemHoverRequest = window.setTimeout(() => {
113
125
  this.setHoveredItemId(e), this.itemHoverRequest = null;
114
- }, k({
126
+ }, C({
115
127
  ...this.$props
116
128
  })));
117
129
  },
118
130
  onItemMouseLeave(e) {
119
131
  this.mouseOverHandler.IsMouseOverEnabled && this.isItemWithDefaultClose(e) && (this.clearItemHoverAndLeaveRequestsIfApplicable(), this.itemLeaveRequest = window.setTimeout(() => {
120
132
  this.setHoveredItemId(s), this.itemLeaveRequest = null;
121
- }, O({
133
+ }, $({
122
134
  ...this.$props
123
135
  })));
124
136
  },
@@ -129,17 +141,17 @@ const S = /* @__PURE__ */ I({
129
141
  this.setFocusedItemId(e), this.mouseOverHandler.handleItemFocus();
130
142
  },
131
143
  onItemClick(e, t) {
132
- const i = n(t, this.currentItems);
133
- i.disabled || (this.setFocusedItemId(t), this.mouseOverHandler.handleItemClick(t, this.isItemWithDefaultClose(t)), this.dispatchSelectEventIfWired(e, t), !e.defaultPrevented && i.url && m(i.url) && l && window.location.assign(i.url));
144
+ const i = d(t, this.currentItems);
145
+ i.disabled || (this.setFocusedItemId(t), this.mouseOverHandler.handleItemClick(t, this.isItemWithDefaultClose(t)), this.dispatchSelectEventIfWired(e, t), !e.defaultPrevented && i.url && l(i.url) && h && window.location.assign(i.url));
134
146
  },
135
147
  onItemBlur(e) {
136
148
  this.isItemWithDefaultClose(e) && this.setFocusedItemId(s);
137
149
  },
138
150
  getInputItem(e) {
139
- return n(e, this.inputItems);
151
+ return d(e, this.inputItems);
140
152
  },
141
153
  setFocusedItemId(e) {
142
- const t = e === s ? this.tabbableItemId : b(e), i = e === s || r(this.hoveredItemId) && r(e) ? this.hoveredItemId : s;
154
+ const t = e === s ? this.tabbableItemId : R(e), i = e === s || r(this.hoveredItemId) && r(e) ? this.hoveredItemId : s;
143
155
  this.hoveredItemId = i, this.focusedItemId = e, this.tabbableItemId = t;
144
156
  },
145
157
  setHoveredItemId(e) {
@@ -163,7 +175,7 @@ const S = /* @__PURE__ */ I({
163
175
  const {
164
176
  items: e,
165
177
  inputItems: t
166
- } = R.call(this, this.$props.items);
178
+ } = M.call(this, this.$props.items);
167
179
  this.currentItems = e, this.inputItems = t;
168
180
  },
169
181
  dispatchSelectEventIfWired(e, t) {
@@ -177,5 +189,5 @@ const S = /* @__PURE__ */ I({
177
189
  }
178
190
  });
179
191
  export {
180
- S as Menu
192
+ K as Menu
181
193
  };
@@ -20,10 +20,12 @@ export interface MenuItemInternalProps extends BaseMenuItemInternalProps {
20
20
  export interface MenuItemInternalComputed {
21
21
  currentItemRender: any;
22
22
  currentLinkRender: any;
23
+ currentActionsRender: any;
23
24
  contentRender: any;
24
25
  currentOpened: boolean;
25
26
  currentFocused: boolean;
26
27
  popupClassName: string;
28
+ popupListClassName: string;
27
29
  menuItemClassName: object;
28
30
  hasItems: boolean;
29
31
  }
@@ -37,8 +39,11 @@ declare const MenuItemInternal: import('vue').DefineComponent<import('vue').Extr
37
39
  tabbableItemId: PropType<string>;
38
40
  itemRender: PropType<any>;
39
41
  linkRender: PropType<any>;
42
+ actionsRender: PropType<any>;
40
43
  isMenuVertical: PropType<boolean>;
41
44
  isDirectionRightToLeft: PropType<boolean>;
45
+ size: PropType<import('../MenuProps').MenuSize>;
46
+ isContextMenu: PropType<boolean>;
42
47
  menuGuid: PropType<string>;
43
48
  originalItemNeeded: PropType<any>;
44
49
  }>, {}, {
@@ -47,16 +52,16 @@ declare const MenuItemInternal: import('vue').DefineComponent<import('vue').Extr
47
52
  hasItems(): boolean;
48
53
  currentItemRender(): any;
49
54
  currentLinkRender(): any;
55
+ currentActionsRender(): any;
50
56
  contentRender(): any;
51
57
  currentOpened(): boolean;
52
58
  currentFocused(): boolean;
53
59
  popupClassName(): string;
60
+ popupListClassName(): string;
54
61
  menuItemClassName(): {
55
62
  [x: number]: any;
56
63
  'k-item': boolean;
57
64
  'k-menu-item': boolean;
58
- 'k-first': boolean;
59
- 'k-last': any;
60
65
  'k-disabled': any;
61
66
  };
62
67
  }, {
@@ -72,6 +77,7 @@ declare const MenuItemInternal: import('vue').DefineComponent<import('vue').Extr
72
77
  handleOriginalItemNeeded(event: any): any;
73
78
  onMouseOver(event: any): void;
74
79
  onMouseLeave(event: any): void;
80
+ handlePopupMouseDown(event: MouseEvent): void;
75
81
  }, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
76
82
  keydown: any;
77
83
  mouseover: any;
@@ -87,8 +93,11 @@ declare const MenuItemInternal: import('vue').DefineComponent<import('vue').Extr
87
93
  tabbableItemId: PropType<string>;
88
94
  itemRender: PropType<any>;
89
95
  linkRender: PropType<any>;
96
+ actionsRender: PropType<any>;
90
97
  isMenuVertical: PropType<boolean>;
91
98
  isDirectionRightToLeft: PropType<boolean>;
99
+ size: PropType<import('../MenuProps').MenuSize>;
100
+ isContextMenu: PropType<boolean>;
92
101
  menuGuid: PropType<string>;
93
102
  originalItemNeeded: PropType<any>;
94
103
  }>> & Readonly<{
@@ -105,6 +114,7 @@ declare const MenuItemInternal: import('vue').DefineComponent<import('vue').Extr
105
114
  */
106
115
  export interface MenuItemInternalsListProps extends BaseMenuItemInternalProps {
107
116
  items: MenuItemInternalModel[];
117
+ role?: string;
108
118
  parentItemId?: string;
109
119
  }
110
120
  /**
@@ -121,8 +131,12 @@ declare const MenuItemInternalsList: import('vue').DefineComponent<import('vue')
121
131
  tabbableItemId: PropType<string>;
122
132
  itemRender: PropType<any>;
123
133
  linkRender: PropType<any>;
134
+ actionsRender: PropType<any>;
124
135
  isMenuVertical: PropType<boolean>;
125
136
  isDirectionRightToLeft: PropType<boolean>;
137
+ size: PropType<import('../MenuProps').MenuSize>;
138
+ isContextMenu: PropType<boolean>;
139
+ role: PropType<string>;
126
140
  menuGuid: PropType<string>;
127
141
  originalItemNeeded: PropType<any>;
128
142
  }>, {}, {}, {}, {
@@ -134,8 +148,6 @@ declare const MenuItemInternalsList: import('vue').DefineComponent<import('vue')
134
148
  handleItemMouseBlur(event: any): void;
135
149
  handleItemMouseFocus(event: any): void;
136
150
  handleItemMouseClick(event: any, itemId: string): void;
137
- onMouseOver(event: any): void;
138
- onMouseLeave(event: any): void;
139
151
  }, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
140
152
  keydown: any;
141
153
  mouseover: any;
@@ -155,8 +167,12 @@ declare const MenuItemInternalsList: import('vue').DefineComponent<import('vue')
155
167
  tabbableItemId: PropType<string>;
156
168
  itemRender: PropType<any>;
157
169
  linkRender: PropType<any>;
170
+ actionsRender: PropType<any>;
158
171
  isMenuVertical: PropType<boolean>;
159
172
  isDirectionRightToLeft: PropType<boolean>;
173
+ size: PropType<import('../MenuProps').MenuSize>;
174
+ isContextMenu: PropType<boolean>;
175
+ role: PropType<string>;
160
176
  menuGuid: PropType<string>;
161
177
  originalItemNeeded: PropType<any>;
162
178
  }>> & Readonly<{
@@ -5,4 +5,4 @@
5
5
  * Licensed under commercial license. See LICENSE.md in the package root for more information
6
6
  *-------------------------------------------------------------------------------------------
7
7
  */
8
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("vue"),s=require("@progress/kendo-vue-common"),N=require("@progress/kendo-vue-popup"),p=require("../utils/itemsIdsUtils.js"),l=require("../utils/misc.js"),F=require("./MenuItemLink.js"),L=require("./MenuItemArrow.js"),c=n.defineComponent({name:"KendoMenuItemInternal",emits:{keydown:null,mouseover:null,mouseleave:null,blur:null,focus:null,click:null,mousedown:null},props:{item:Object,focusedItemId:String,lastItemIdToBeOpened:String,tabbableItemId:String,itemRender:[String,Object,Function],linkRender:[String,Object,Function],isMenuVertical:Boolean,isDirectionRightToLeft:Boolean,menuGuid:String,originalItemNeeded:Function},created(){this.itemElement=null,this.prevFocusedItemId=this.$props.focusedItemId,this.isFirstRender=!0,this._anchor=s.guid()},data(){return{opened:!1}},mounted(){this.itemElement=s.getRef(this,"kendoAnchor");const e=this.$props.focusedItemId,t=this.$props.item.id;e&&e===t&&this.itemElement&&this.itemElement.focus(),this.isFirstRender=!1},watch:{focusedItemId:function(e,t){this.prevFocusedItemId=t}},updated(){const e=this.$props.focusedItemId,t=this.$props.item.id;e?this.prevFocusedItemId!==e&&e===t&&!this.itemElement.contains(document.activeElement)&&this.itemElement.focus():document.activeElement===this.itemElement&&this.itemElement.blur()},computed:{hasItems(){return this.$props.item.items.length>0},currentItemRender(){return this.$props.item.render||this.$props.itemRender},currentLinkRender(){return this.$props.item.linkRender||this.$props.linkRender},contentRender(){return this.$props.item.contentParentItemId?this.$props.item.contentRender:null},currentOpened(){const e=this.$props;return this.hasItems&&p.shouldOpenItem(e.item.id,e.lastItemIdToBeOpened)&&!this.isFirstRender},currentFocused(){const e=this.$props.focusedItemId,t=this.$props.item.id;return e===t},popupClassName(){return s.classNames({"k-menu-popup":!0,"k-overflow-visible":!0,"k-rtl":this.$props.isDirectionRightToLeft,[this.item.popupClass]:this.item.popupClass})},menuItemClassName(){const e=this.$props.item;return{"k-item":!0,"k-menu-item":!0,"k-first":p.isFirstItemFromSiblings(e.id),"k-last":e.isLastFromSiblings,"k-disabled":e.disabled,[e.cssClass?e.cssClass:""]:e.cssClass}}},render(){const{icon:e,svgIcon:t,id:r,contentParentItemId:m,items:y,text:a,cssStyle:f,disabled:$,url:g,separator:M}=this.$props.item,o=r,k=function(){const i=m,d=function(u){return s.getTemplate.call(this,{h:n.h,template:this.contentRender,additionalProps:u})};return n.createVNode("div",{class:"k-content",role:"presentation"},[d.call(this,{item:this.handleOriginalItemNeeded(i),itemId:i})])},b=function(){return e||t?n.createVNode(s.Icon,{name:s.getIconName(e),icon:t},null):null},v=function(){return this.hasItems?n.createVNode(L.MenuItemArrow,{itemId:r,verticalMenu:this.$props.isMenuVertical,dir:l.convertBoolDirectionToString(this.$props.isDirectionRightToLeft),key:"2"},null):null},h=this.$props.originalItemNeeded(r),R=function(){const i=n.createVNode("span",{class:"k-menu-link-text"},[a]),d=s.getTemplate.call(this,{h:n.h,template:this.currentItemRender,defaultRendering:i,additionalProps:{item:h,itemId:r,key:"1"}}),u=n.createVNode(F.MenuItemLink,{url:g,opened:this.currentOpened,focused:this.currentFocused},{default:()=>[[b.call(this),d,v.call(this)]]});return s.getTemplate.call(this,{h:n.h,template:this.currentLinkRender,defaultRendering:u,additionalProps:{item:h,itemId:r,opened:this.currentOpened,dir:l.convertBoolDirectionToString(this.$props.isDirectionRightToLeft)}})},O=function(){const{anchorAlign:i,popupAlign:d,collision:u}=l.getPopupSettings(o,this.$props.isMenuVertical,this.$props.isDirectionRightToLeft);return n.createVNode(N.Popup,{anchor:this._anchor,show:this.currentOpened,popupClass:this.popupClassName,anchorAlign:i,popupAlign:d,collision:u,animate:!1,key:"1"},{default:()=>[n.createVNode(I,{parentItemId:o,items:this.$props.item.items,menuGuid:this.$props.menuGuid,focusedItemId:this.$props.focusedItemId,lastItemIdToBeOpened:this.$props.lastItemIdToBeOpened,tabbableItemId:this.$props.tabbableItemId,itemRender:this.$props.itemRender,linkRender:this.$props.linkRender,isMenuVertical:this.$props.isMenuVertical,isDirectionRightToLeft:this.$props.isDirectionRightToLeft,class:"k-group k-menu-group k-menu-group-md k-reset",onMouseover:this.handleItemMouseOver,onMouseleave:this.handleItemMouseLeave,onMousedown:this.handleMouseDown,onBlur:this.handleItemMouseBlur,onFocus:this.handleItemMouseFocus,onClick:this.handleClick,onKeydown:this.handleKeyDown,originalItemNeeded:this.handleOriginalItemNeeded},null)]})},w=n.createVNode("li",{class:"k-separator k-item","aria-hidden":!0,key:o},null);return M?w:n.createVNode("li",{class:this.menuItemClassName,style:f,tabindex:o===this.$props.tabbableItemId?0:-1,onMouseover:this.onMouseOver,onMouseleave:this.onMouseLeave,onMousedown:i=>this.handleMouseDown(i),onFocusout:()=>this.handleBlur(o),onFocusin:()=>this.handleFocus(o),onClick:i=>this.handleClick(i,o),onKeydown:this.handleKeyDown,role:"menuitem","aria-disabled":$?!0:void 0,"aria-haspopup":this.hasItems?!0:void 0,"aria-expanded":this.hasItems?this.currentOpened:void 0,"aria-label":a,"aria-owns":this.currentOpened?l.getDOMElementId(this.$props.menuGuid,o):void 0,ref:s.setRef(this,"kendoAnchor"),key:"0"},[this.contentRender?k.call(this):R.call(this),O.call(this)])},methods:{handleKeyDown(e){this.$emit("keydown",e)},handleItemMouseOver(e){this.$emit("mouseover",e)},handleItemMouseLeave(e){this.$emit("mouseleave",e)},handleItemMouseBlur(e){this.$emit("blur",e)},handleItemMouseFocus(e){this.$emit("focus",e)},handleClick(e,t){this.$emit("click",e,t)},handleBlur(e){this.$emit("blur",e)},handleFocus(e){this.$emit("focus",e)},handleMouseDown(e){this.$emit("mousedown",e)},handleOriginalItemNeeded(e){return this.$props.originalItemNeeded(e)},onMouseOver(e){this.$emit("mouseover",this.$props.item.id),e.stopPropagation()},onMouseLeave(e){this.$emit("mouseleave",this.$props.item.id),e.stopPropagation()}}}),I=n.defineComponent({name:"KendoMenuItemInternalsList",emits:{keydown:null,mouseover:null,mouseleave:null,blur:null,focus:null,click:null,mousedown:null},props:{items:Array,parentItemId:{type:String,default:void 0},focusedItemId:String,lastItemIdToBeOpened:String,tabbableItemId:String,itemRender:[String,Object,Function],linkRender:[String,Object,Function],isMenuVertical:Boolean,isDirectionRightToLeft:Boolean,menuGuid:String,originalItemNeeded:Function},render(){const e=this.$props.parentItemId,t=function(){return this.$props.items.length>0?this.$props.items.map(function(r,m){return n.createVNode(c,{item:r,isMenuVertical:this.$props.isMenuVertical,isDirectionRightToLeft:this.$props.isDirectionRightToLeft,focusedItemId:this.$props.focusedItemId,lastItemIdToBeOpened:this.$props.lastItemIdToBeOpened,tabbableItemId:this.$props.tabbableItemId,itemRender:this.$props.itemRender,linkRender:this.$props.linkRender,menuGuid:this.$props.menuGuid,onMouseover:this.handleItemMouseOver,onMouseleave:this.handleItemMouseLeave,onMousedown:this.handleItemMouseDown,onKeydown:this.handleKeyDown,onBlur:this.handleItemMouseBlur,onFocus:this.handleItemMouseFocus,onClick:this.handleItemMouseClick,originalItemNeeded:this.handleOriginalItemNeeded,key:m},null)},this):null};return n.createVNode("ul",{role:e!==void 0?"menu":"menubar",id:e!==void 0?l.getDOMElementId(this.$props.menuGuid,e):void 0},[t.call(this)])},methods:{handleKeyDown(e){this.$emit("keydown",e)},handleOriginalItemNeeded(e){return this.$props.originalItemNeeded(e)},handleItemMouseOver(e){this.$emit("mouseover",e)},handleItemMouseLeave(e){this.$emit("mouseleave",e)},handleItemMouseDown(e){this.$emit("mousedown",e)},handleItemMouseBlur(e){this.$emit("blur",e)},handleItemMouseFocus(e){this.$emit("focus",e)},handleItemMouseClick(e,t){this.$emit("click",e,t)},onMouseOver(e){this.$props.parentItemId!==void 0&&(this.$emit("mouseover",this.$props.parentItemId),e.stopPropagation())},onMouseLeave(e){this.$props.parentItemId!==void 0&&(this.$emit("mouseleave",this.$props.parentItemId),e.stopPropagation())}}});exports.MenuItemInternal=c;exports.MenuItemInternalsList=I;
8
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("vue"),s=require("@progress/kendo-vue-common"),F=require("@progress/kendo-vue-popup"),h=require("../utils/itemsIdsUtils.js"),u=require("../utils/misc.js"),T=require("./MenuItemLink.js"),S=require("./MenuItemArrow.js"),M=t.defineComponent({name:"KendoMenuItemInternal",emits:{keydown:null,mouseover:null,mouseleave:null,blur:null,focus:null,click:null,mousedown:null},props:{item:Object,focusedItemId:String,lastItemIdToBeOpened:String,tabbableItemId:String,itemRender:[String,Object,Function],linkRender:[String,Object,Function],actionsRender:[String,Object,Function],isMenuVertical:Boolean,isDirectionRightToLeft:Boolean,size:String,isContextMenu:Boolean,menuGuid:String,originalItemNeeded:Function},created(){this.itemElement=null,this.prevFocusedItemId=this.$props.focusedItemId,this.isFirstRender=!0,this._anchor=s.guid()},data(){return{opened:!1}},mounted(){this.itemElement=s.getRef(this,"kendoAnchor");const e=this.$props.focusedItemId,n=this.$props.item.id;e&&e===n&&this.itemElement&&this.itemElement.focus(),this.isFirstRender=!1},watch:{focusedItemId:function(e,n){this.prevFocusedItemId=n}},updated(){const e=this.$props.focusedItemId,n=this.$props.item.id;e?this.prevFocusedItemId!==e&&e===n&&!this.itemElement.contains(document.activeElement)&&this.itemElement.focus():document.activeElement===this.itemElement&&this.itemElement.blur()},computed:{hasItems(){return this.$props.item.items.length>0},currentItemRender(){return this.$props.item.render||this.$props.itemRender},currentLinkRender(){return this.$props.item.linkRender||this.$props.linkRender},currentActionsRender(){return this.$props.item.actionsRender||this.$props.actionsRender},contentRender(){return this.$props.item.contentParentItemId?this.$props.item.contentRender:null},currentOpened(){const e=this.$props;return this.hasItems&&h.shouldOpenItem(e.item.id,e.lastItemIdToBeOpened)&&!this.isFirstRender},currentFocused(){const e=this.$props.focusedItemId,n=this.$props.item.id;return e===n},popupClassName(){return s.classNames({"k-menu-popup":!0,"k-overflow-visible":!0,"k-rtl":this.$props.isDirectionRightToLeft,[this.item.popupClass]:this.item.popupClass})},popupListClassName(){return s.classNames("k-menu-group",this.$props.size&&`k-menu-group-${s.kendoThemeMaps.sizeMap[this.$props.size]}`)},menuItemClassName(){const e=this.$props.item;return{"k-item":!0,"k-menu-item":!0,"k-disabled":e.disabled,[e.cssClass?e.cssClass:""]:e.cssClass}}},render(){const{icon:e,svgIcon:n,id:r,contentParentItemId:a,items:P,text:I,description:$,cssStyle:m,disabled:f,url:R,separator:b,groupHeader:v,cssClass:g}=this.$props.item,i=r,p=u.getDOMElementId(this.$props.menuGuid,i);if(b)return t.createVNode("li",{id:p,class:s.classNames("k-separator","k-item",g),style:m,"aria-hidden":!0,key:i},null);if(v){if(!(!h.isIdZeroLevel(i)||!!this.$props.isContextMenu&&!!this.$props.isMenuVertical))return null;const l=this.$props.item.groupHeaderRender,d=l?s.getTemplate.call(this,{h:t.h,template:l,additionalProps:{item:this.$props.originalItemNeeded(i),itemId:i}}):t.createVNode(t.Fragment,null,[e||n?t.createVNode(s.Icon,{class:"k-menu-link-icon",name:s.getIconName(e),icon:n},null):null,t.createVNode("span",{class:"k-menu-link-text"},[I])]);return t.createVNode("li",{id:p,class:s.classNames("k-menu-group-header",g),style:m,role:"presentation",onMousedown:B=>B.preventDefault(),key:i},[d])}const N=!!f&&(!h.isIdZeroLevel(i)||!!this.$props.isContextMenu),O=function(){const o=a,l=function(d){return s.getTemplate.call(this,{h:t.h,template:this.contentRender,additionalProps:d})};return t.createVNode("div",{class:"k-content",role:"presentation"},[l.call(this,{item:this.handleOriginalItemNeeded(o),itemId:o})])},w=function(){return e||n?t.createVNode(s.Icon,{class:"k-menu-link-icon",name:s.getIconName(e),icon:n},null):null},C=function(){return this.hasItems?t.createVNode(S.MenuItemArrow,{itemId:r,verticalMenu:this.$props.isMenuVertical,dir:u.convertBoolDirectionToString(this.$props.isDirectionRightToLeft),key:"2"},null):null},D=function(){return $&&!this.currentItemRender?t.createVNode("span",{class:"k-menu-link-description",key:"3"},[$]):null},c=this.$props.originalItemNeeded(r),L=function(){const o=s.getTemplate.call(this,{h:t.h,template:this.currentActionsRender,additionalProps:{item:c,itemId:r}});return u.hasRenderableContent(o)?t.createVNode("span",{class:"k-menu-link-actions",key:"4"},[o]):null},y=function(){const o=t.createVNode("span",{class:"k-menu-link-text"},[I]),l=s.getTemplate.call(this,{h:t.h,template:this.currentItemRender,defaultRendering:o,additionalProps:{item:c,itemId:r,key:"1"}}),d=t.createVNode(T.MenuItemLink,{url:R,opened:this.currentOpened,focused:this.currentFocused,disabled:N},{default:()=>[[w.call(this),l,L.call(this),C.call(this),D.call(this)]]});return s.getTemplate.call(this,{h:t.h,template:this.currentLinkRender,defaultRendering:d,additionalProps:{item:c,itemId:r,opened:this.currentOpened,dir:u.convertBoolDirectionToString(this.$props.isDirectionRightToLeft)}})},V=function(){const{anchorAlign:o,popupAlign:l,collision:d}=u.getPopupSettings(i,this.$props.isMenuVertical,this.$props.isDirectionRightToLeft);return t.createVNode(F.Popup,t.mergeProps({anchor:this._anchor,show:this.currentOpened,popupClass:this.popupClassName,anchorAlign:o,popupAlign:l,collision:d,animate:!1},{onMouseover:this.onMouseOver,onMouseleave:this.onMouseLeave,onMousedown:this.handlePopupMouseDown},{key:"1"}),{default:()=>[t.createVNode(k,{parentItemId:i,items:this.$props.item.items,menuGuid:this.$props.menuGuid,focusedItemId:this.$props.focusedItemId,lastItemIdToBeOpened:this.$props.lastItemIdToBeOpened,tabbableItemId:this.$props.tabbableItemId,itemRender:this.$props.itemRender,linkRender:this.$props.linkRender,actionsRender:this.$props.actionsRender,isMenuVertical:this.$props.isMenuVertical,isDirectionRightToLeft:this.$props.isDirectionRightToLeft,size:this.$props.size,isContextMenu:this.$props.isContextMenu,class:this.popupListClassName,onMouseover:this.handleItemMouseOver,onMouseleave:this.handleItemMouseLeave,onMousedown:this.handleMouseDown,onBlur:this.handleItemMouseBlur,onFocus:this.handleItemMouseFocus,onClick:this.handleClick,onKeydown:this.handleKeyDown,originalItemNeeded:this.handleOriginalItemNeeded},null)]})};return t.createVNode("li",{id:p,class:this.menuItemClassName,style:m,tabindex:i===this.$props.tabbableItemId?0:-1,onMouseover:this.onMouseOver,onMouseleave:this.onMouseLeave,onMousedown:o=>this.handleMouseDown(o),onFocusout:()=>this.handleBlur(i),onFocusin:()=>this.handleFocus(i),onClick:o=>this.handleClick(o,i),onKeydown:this.handleKeyDown,role:"menuitem","aria-disabled":f?!0:void 0,"aria-haspopup":this.hasItems?"menu":void 0,"aria-expanded":this.hasItems?this.currentOpened:void 0,"aria-controls":this.currentOpened?u.getDOMPopupListId(this.$props.menuGuid,i):void 0,ref:s.setRef(this,"kendoAnchor"),key:"0"},[this.contentRender?O.call(this):y.call(this),V.call(this)])},methods:{handleKeyDown(e){this.$emit("keydown",e)},handleItemMouseOver(e){this.$emit("mouseover",e)},handleItemMouseLeave(e){this.$emit("mouseleave",e)},handleItemMouseBlur(e){this.$emit("blur",e)},handleItemMouseFocus(e){this.$emit("focus",e)},handleClick(e,n){this.$emit("click",e,n)},handleBlur(e){this.$emit("blur",e)},handleFocus(e){this.$emit("focus",e)},handleMouseDown(e){this.$emit("mousedown",e)},handleOriginalItemNeeded(e){return this.$props.originalItemNeeded(e)},onMouseOver(e){this.$emit("mouseover",this.$props.item.id),e.stopPropagation()},onMouseLeave(e){this.$emit("mouseleave",this.$props.item.id),e.stopPropagation()},handlePopupMouseDown(e){e.target.closest(".k-menu-item, .k-content")||e.preventDefault()}}}),k=t.defineComponent({name:"KendoMenuItemInternalsList",emits:{keydown:null,mouseover:null,mouseleave:null,blur:null,focus:null,click:null,mousedown:null},props:{items:Array,parentItemId:{type:String,default:void 0},focusedItemId:String,lastItemIdToBeOpened:String,tabbableItemId:String,itemRender:[String,Object,Function],linkRender:[String,Object,Function],actionsRender:[String,Object,Function],isMenuVertical:Boolean,isDirectionRightToLeft:Boolean,size:String,isContextMenu:Boolean,role:String,menuGuid:String,originalItemNeeded:Function},render(){const e=this.$props.parentItemId,n=function(){return this.$props.items.length>0?this.$props.items.map(function(r,a){return t.createVNode(M,{item:r,isMenuVertical:this.$props.isMenuVertical,isDirectionRightToLeft:this.$props.isDirectionRightToLeft,size:this.$props.size,isContextMenu:this.$props.isContextMenu,focusedItemId:this.$props.focusedItemId,lastItemIdToBeOpened:this.$props.lastItemIdToBeOpened,tabbableItemId:this.$props.tabbableItemId,itemRender:this.$props.itemRender,linkRender:this.$props.linkRender,actionsRender:this.$props.actionsRender,menuGuid:this.$props.menuGuid,onMouseover:this.handleItemMouseOver,onMouseleave:this.handleItemMouseLeave,onMousedown:this.handleItemMouseDown,onKeydown:this.handleKeyDown,onBlur:this.handleItemMouseBlur,onFocus:this.handleItemMouseFocus,onClick:this.handleItemMouseClick,originalItemNeeded:this.handleOriginalItemNeeded,key:a},null)},this):null};return t.createVNode("ul",{role:this.$props.role||(e!==void 0?"menu":"menubar"),id:e!==void 0?u.getDOMPopupListId(this.$props.menuGuid,e):void 0},[n.call(this)])},methods:{handleKeyDown(e){this.$emit("keydown",e)},handleOriginalItemNeeded(e){return this.$props.originalItemNeeded(e)},handleItemMouseOver(e){this.$emit("mouseover",e)},handleItemMouseLeave(e){this.$emit("mouseleave",e)},handleItemMouseDown(e){this.$emit("mousedown",e)},handleItemMouseBlur(e){this.$emit("blur",e)},handleItemMouseFocus(e){this.$emit("focus",e)},handleItemMouseClick(e,n){this.$emit("click",e,n)}}});exports.MenuItemInternal=M;exports.MenuItemInternalsList=k;