primevue
Version:
[](https://opensource.org/licenses/MIT) [](https://badge.fury.io/js/primevue) [ • 8.93 kB
JavaScript
import e from"primevue/ripple";import t from"primevue/tooltip";import{ObjectUtils as n,DomHandler as i,UniqueComponentId as o}from"primevue/utils";import{resolveComponent as s,resolveDirective as l,openBlock as a,createElementBlock as d,createElementVNode as r,Fragment as c,renderList as p,normalizeClass as u,createBlock as m,withCtx as f,withDirectives as h,resolveDynamicComponent as b,normalizeStyle as k,createVNode as x}from"vue";var y={name:"DockSub",emits:["focus","blur"],props:{position:{type:String,default:"bottom"},model:{type:Array,default:null},templates:{type:null,default:null},exact:{type:Boolean,default:!0},tooltipOptions:null,menuId:{type:String,default:null},tabindex:{type:Number,default:0},"aria-label":{type:String,default:null},"aria-labelledby":{type:String,default:null}},data:()=>({currentIndex:-3,focused:!1,focusedOptionIndex:-1}),methods:{getItemId(e){return`${this.id}_${e}`},getItemProp:(e,t)=>e&&e.item?n.getItemValue(e.item[t]):void 0,isSameMenuItem:e=>e.currentTarget&&(e.currentTarget.isSameNode(e.target)||e.currentTarget.isSameNode(e.target.closest(".p-menuitem"))),onListMouseLeave(){this.currentIndex=-3},onItemMouseEnter(e){this.currentIndex=e},onItemActionClick(e,t){t&&t(e)},onItemClick(e,t){if(this.isSameMenuItem(e)){const n=this.getItemProp(t,"command");n&&n({originalEvent:e,item:t.item})}},onListFocus(e){this.focused=!0,this.changeFocusedOptionIndex(0),this.$emit("focus",e)},onListBlur(e){this.focused=!1,this.focusedOptionIndex=-1,this.$emit("blur",e)},onListKeyDown(e){switch(e.code){case"ArrowDown":"left"!==this.position&&"right"!==this.position||this.onArrowDownKey(),e.preventDefault();break;case"ArrowUp":"left"!==this.position&&"right"!==this.position||this.onArrowUpKey(),e.preventDefault();break;case"ArrowRight":"top"!==this.position&&"bottom"!==this.position||this.onArrowDownKey(),e.preventDefault();break;case"ArrowLeft":"top"!==this.position&&"bottom"!==this.position||this.onArrowUpKey(),e.preventDefault();break;case"Home":this.onHomeKey(),e.preventDefault();break;case"End":this.onEndKey(),e.preventDefault();break;case"Enter":case"Space":this.onSpaceKey(e),e.preventDefault()}},onArrowDownKey(){const e=this.findNextOptionIndex(this.focusedOptionIndex);this.changeFocusedOptionIndex(e)},onArrowUpKey(){const e=this.findPrevOptionIndex(this.focusedOptionIndex);this.changeFocusedOptionIndex(e)},onHomeKey(){this.changeFocusedOptionIndex(0)},onEndKey(){this.changeFocusedOptionIndex(i.find(this.$refs.list,"li.p-dock-item:not(.p-disabled)").length-1)},onSpaceKey(){const e=i.findSingle(this.$refs.list,`li[id="${this.focusedOptionIndex}"]`),t=e&&i.findSingle(e,".p-dock-link");t?t.click():e&&e.click()},findNextOptionIndex(e){const t=[...i.find(this.$refs.list,"li.p-dock-item:not(.p-disabled)")].findIndex((t=>t.id===e));return t>-1?t+1:0},findPrevOptionIndex(e){const t=[...i.find(this.$refs.list,"li.p-dock-item:not(.p-disabled)")].findIndex((t=>t.id===e));return t>-1?t-1:0},changeFocusedOptionIndex(e){const t=i.find(this.$refs.list,"li.p-dock-item:not(.p-disabled)");let n=e>=t.length?t.length-1:e<0?0:e;this.focusedOptionIndex=t[n].getAttribute("id")},itemClass(e,t,n){return["p-dock-item",{"p-focus":n===this.focusedOptionIndex,"p-disabled":this.disabled(e),"p-dock-item-second-prev":this.currentIndex-2===t,"p-dock-item-prev":this.currentIndex-1===t,"p-dock-item-current":this.currentIndex===t,"p-dock-item-next":this.currentIndex+1===t,"p-dock-item-second-next":this.currentIndex+2===t}]},linkClass(e){return["p-dock-link",{"router-link-active":e&&e.isActive,"router-link-active-exact":this.exact&&e&&e.isExactActive}]},disabled:e=>"function"==typeof e.disabled?e.disabled():e.disabled},computed:{id(){return this.menuId||o()},focusedOptionId(){return-1!==this.focusedOptionIndex?this.focusedOptionIndex:null}},directives:{ripple:e,tooltip:t}};const g={class:"p-dock-list-container"},I=["id","aria-orientation","aria-activedescendant","tabindex","aria-label","aria-labelledby"],v=["id","aria-label","aria-disabled","onClick","onMouseenter"],O={class:"p-menuitem-content"},w=["href","target","onClick"],S=["href","target"];y.render=function(e,t,n,i,o,k){const x=s("router-link"),y=l("ripple"),A=l("tooltip");return a(),d("div",g,[r("ul",{ref:"list",id:k.id,class:"p-dock-list",role:"menu","aria-orientation":"bottom"===n.position||"top"===n.position?"horizontal":"vertical","aria-activedescendant":o.focused?k.focusedOptionId:void 0,tabindex:n.tabindex,"aria-label":e.ariaLabel,"aria-labelledby":e.ariaLabelledby,onFocus:t[0]||(t[0]=(...e)=>k.onListFocus&&k.onListFocus(...e)),onBlur:t[1]||(t[1]=(...e)=>k.onListBlur&&k.onListBlur(...e)),onKeydown:t[2]||(t[2]=(...e)=>k.onListKeyDown&&k.onListKeyDown(...e)),onMouseleave:t[3]||(t[3]=(...e)=>k.onListMouseLeave&&k.onListMouseLeave(...e))},[(a(!0),d(c,null,p(n.model,((e,t)=>(a(),d("li",{key:t,id:k.getItemId(t),class:u(k.itemClass(e,t,k.getItemId(t))),role:"menuitem","aria-label":e.label,"aria-disabled":k.disabled(e),onClick:t=>k.onItemClick(t,e),onMouseenter:e=>k.onItemMouseEnter(t)},[r("div",O,[n.templates.item?(a(),m(b(n.templates.item),{key:1,item:e,index:t},null,8,["item","index"])):(a(),d(c,{key:0},[e.to&&!k.disabled(e)?(a(),m(x,{key:0,to:e.to,custom:""},{default:f((({navigate:t,href:i,isActive:o,isExactActive:s})=>[h((a(),d("a",{href:i,class:u(k.linkClass({isActive:o,isExactActive:s})),target:e.target,tabindex:"-1","aria-hidden":"true",onClick:n=>k.onItemActionClick(n,e,t)},[n.templates.icon?(a(),m(b(n.templates.icon),{key:1,item:e},null,8,["item"])):h((a(),d("span",{key:0,class:u(["p-dock-icon",e.icon])},null,2)),[[y]])],10,w)),[[A,{value:e.label,disabled:!n.tooltipOptions},n.tooltipOptions]])])),_:2},1032,["to"])):h((a(),d("a",{key:1,href:e.url,class:u(k.linkClass()),target:e.target,tabindex:"-1","aria-hidden":"true"},[n.templates.icon?(a(),m(b(n.templates.icon),{key:1,item:e},null,8,["item"])):h((a(),d("span",{key:0,class:u(["p-dock-icon",e.icon])},null,2)),[[y]])],10,S)),[[A,{value:e.label,disabled:!n.tooltipOptions},n.tooltipOptions]])],64))])],42,v)))),128))],40,I)])};var A={name:"Dock",props:{position:{type:String,default:"bottom"},model:null,class:null,style:null,tooltipOptions:null,exact:{type:Boolean,default:!0},menuId:{type:String,default:null},tabindex:{type:Number,default:0},"aria-label":{type:String,default:null},"aria-labelledby":{type:String,default:null}},computed:{containerClass(){return["p-dock p-component",`p-dock-${this.position}`,this.class]}},components:{DockSub:y}};!function(e,t){void 0===t&&(t={});var n=t.insertAt;if(e&&"undefined"!=typeof document){var i=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css","top"===n&&i.firstChild?i.insertBefore(o,i.firstChild):i.appendChild(o),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e))}}("\n.p-dock {\n position: absolute;\n z-index: 1;\n display: flex;\n justify-content: center;\n align-items: center;\n pointer-events: none;\n}\n.p-dock-list-container {\n display: flex;\n pointer-events: auto;\n}\n.p-dock-list {\n margin: 0;\n padding: 0;\n list-style: none;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.p-dock-item {\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n will-change: transform;\n}\n.p-dock-link {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n position: relative;\n overflow: hidden;\n cursor: default;\n}\n.p-dock-item-second-prev,\n.p-dock-item-second-next {\n transform: scale(1.2);\n}\n.p-dock-item-prev,\n.p-dock-item-next {\n transform: scale(1.4);\n}\n.p-dock-item-current {\n transform: scale(1.6);\n z-index: 1;\n}\n\n/* Position */\n/* top */\n.p-dock-top {\n left: 0;\n top: 0;\n width: 100%;\n}\n.p-dock-top .p-dock-item {\n transform-origin: center top;\n}\n\n/* bottom */\n.p-dock-bottom {\n left: 0;\n bottom: 0;\n width: 100%;\n}\n.p-dock-bottom .p-dock-item {\n transform-origin: center bottom;\n}\n\n/* right */\n.p-dock-right {\n right: 0;\n top: 0;\n height: 100%;\n}\n.p-dock-right .p-dock-item {\n transform-origin: center right;\n}\n.p-dock-right .p-dock-list {\n flex-direction: column;\n}\n\n/* left */\n.p-dock-left {\n left: 0;\n top: 0;\n height: 100%;\n}\n.p-dock-left .p-dock-item {\n transform-origin: center left;\n}\n.p-dock-left .p-dock-list {\n flex-direction: column;\n}\n"),A.render=function(e,t,n,i,o,l){const r=s("DockSub");return a(),d("div",{class:u(l.containerClass),style:k(n.style)},[x(r,{model:n.model,templates:e.$slots,exact:n.exact,tooltipOptions:n.tooltipOptions,position:n.position,menuId:n.menuId,"aria-label":e.ariaLabel,"aria-labelledby":e.ariaLabelledby,tabindex:n.tabindex},null,8,["model","templates","exact","tooltipOptions","position","menuId","aria-label","aria-labelledby","tabindex"])],6)};export{A as default};