primereact
Version:
PrimeReact is an open source UI library for React featuring a rich set of 90+ components, a theme designer, various theme alternatives such as Material, Bootstrap, Tailwind, premium templates and professional support. In addition, it integrates with Prime
2 lines (1 loc) • 7.13 kB
JavaScript
import*as e from"react";import t from"primereact/api";import{Button as n}from"primereact/button";import{useOverlayListener as o,useMountEffect as r,useUnmountEffect as l}from"primereact/hooks";import{OverlayService as i}from"primereact/overlayservice";import{Tooltip as a}from"primereact/tooltip";import{ObjectUtils as u,classNames as m,IconUtils as s,UniqueComponentId as c,ZIndexUtils as p,DomHandler as d}from"primereact/utils";import{CSSTransition as f}from"primereact/csstransition";import{Portal as b}from"primereact/portal";function y(){return y=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},y.apply(this,arguments)}function v(e){return v="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},v(e)}function g(e,t){if("object"!==v(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||"default");if("object"!==v(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}function E(e){var t=g(e,"string");return"symbol"===v(t)?t:String(t)}function N(e,t,n){return(t=E(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function S(e){if(Array.isArray(e))return e}function h(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var o,r,l,i,a=[],u=!0,m=!1;try{if(l=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;u=!1}else for(;!(u=(o=l.call(n)).done)&&(a.push(o.value),a.length!==t);u=!0);}catch(e){m=!0,r=e}finally{try{if(!u&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(m)throw r}}return a}}function C(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}function x(e,t){if(e){if("string"==typeof e)return C(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?C(e,t):void 0}}function I(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function P(e,t){return S(e)||h(e,t)||x(e,t)||I()}var O={defaultProps:{__TYPE:"SplitButton",id:null,label:null,icon:null,loading:!1,loadingIcon:"pi pi-spinner pi-spin",model:null,disabled:null,style:null,className:null,buttonClassName:null,menuStyle:null,menuClassName:null,menuButtonClassName:null,buttonProps:null,menuButtonProps:null,tabIndex:null,severity:null,rounded:!1,raised:!1,outlined:!1,text:!1,size:null,appendTo:null,tooltip:null,tooltipOptions:null,buttonTemplate:null,transitionOptions:null,dropdownIcon:"pi pi-chevron-down",onClick:null,onShow:null,onHide:null,children:void 0},getProps:function(e){return u.getMergedProps(e,O.defaultProps)},getOtherProps:function(e){return u.getDiffProps(e,O.defaultProps)}},w=e.memo((function(t){var n=function(e){t.menuitem.command&&t.menuitem.command({originalEvent:e,item:t.menuitem}),t.onItemClick&&t.onItemClick(e),e.preventDefault()},o=function(){if(!1===t.menuitem.visible)return null;var o=t.menuitem,r=o.icon,l=o.label,i=o.template,a=o.url,c=o.target,p=m("p-menuitem-link",o.className,{"p-disabled":o.disabled}),d=m("p-menuitem-icon",r),f=s.getJSXIcon(r,{className:"p-menuitem-icon"},{props:t.splitButtonProps}),b=e.createElement("a",{href:a||"#",role:"menuitem",className:p,target:c,onClick:n,"aria-label":l},f,l&&e.createElement("span",{className:"p-menuitem-text"},l));i&&(b=u.getJSXElement(i,t.menuitem,{onClick:n,className:p,labelClassName:"p-menuitem-text",iconClassName:d,element:b,props:t}));return e.createElement("li",{className:"p-menuitem",role:"none"},b)};return t.menuitem.separator?e.createElement("li",{className:"p-menu-separator",role:"separator"}):o()}));w.displayName="SplitButtonItem";var k=e.forwardRef((function(t,n){var o,r=(o=m("p-menu p-menu-overlay p-component",t.menuClassName),e.createElement(f,{nodeRef:n,classNames:"p-connected-overlay",in:t.in,timeout:{enter:120,exit:100},options:t.transitionOptions,unmountOnExit:!0,onEnter:t.onEnter,onEntered:t.onEntered,onExit:t.onExit,onExited:t.onExited},e.createElement("div",{ref:n,className:o,style:t.menuStyle,onClick:t.onClick},e.createElement("ul",{id:t.menuId,className:"p-menu-list p-reset",role:"menu"},t.children))));return e.createElement(b,{element:r,appendTo:t.appendTo})}));k.displayName="SplitButtonPanel";var T=e.memo(e.forwardRef((function(s,f){var b,v=O.getProps(s),g=P(e.useState(v.id),2),E=g[0],S=g[1],h=P(e.useState(!1),2),C=h[0],x=h[1],I=e.useRef(null),T=e.useRef(null),j=e.useRef(null),B=P(o({target:I,overlay:j,listener:function(e,t){t.valid&&J()},when:C}),2),A=B[0],R=B[1],H=function(){J()},z=function(){x(!0)},J=function(){x(!1)},X=function(){d.alignOverlay(j.current,T.current.parentElement,v.appendTo||t.appendTo)};r((function(){E||S(c())})),l((function(){p.clear(j.current)})),e.useImperativeHandle(f,(function(){return{props:v,show:z,hide:J,getElement:function(){return I.current}}}));if(!1===v.visible)return null;var _=u.isNotEmpty(v.tooltip),D=O.getOtherProps(v),M={large:"lg",small:"sm"}[v.size],F=m("p-splitbutton p-component",v.className,(N(b={"p-disabled":v.disabled,"p-button-loading-label-only":v.loading&&!v.icon&&v.label},"p-button-".concat(v.severity),v.severity),N(b,"p-button-raised",v.raised),N(b,"p-button-rounded",v.rounded),N(b,"p-button-text",v.text),N(b,"p-button-outlined",v.outlined),N(b,"p-button-".concat(M),M),b)),U=m("p-splitbutton-defaultbutton",v.buttonClassName),Y=m("p-splitbutton-menubutton",v.menuButtonClassName),Z=v.buttonTemplate?u.getJSXElement(v.buttonTemplate,v):null,$=v.model?v.model.map((function(t,n){return e.createElement(w,{splitButtonProps:v,menuitem:t,key:n,onItemClick:H})})):null,q=E+"_menu";return e.createElement(e.Fragment,null,e.createElement("div",y({ref:I,id:E,className:F,style:v.style},D),e.createElement(n,y({ref:T,type:"button",className:U,icon:v.icon,loading:v.loading,loadingIcon:v.loadingIcon,label:v.label,onClick:v.onClick,disabled:v.disabled,tabIndex:v.tabIndex},v.buttonProps),Z),e.createElement(n,y({type:"button",className:Y,icon:v.dropdownIcon,onClick:function(){C?J():z()},disabled:v.disabled,"aria-expanded":C,"aria-haspopup":"true","aria-controls":C?q:null},v.menuButtonProps)),e.createElement(k,{ref:j,appendTo:v.appendTo,menuId:q,menuStyle:v.menuStyle,menuClassName:v.menuClassName,onClick:function(e){i.emit("overlay-click",{originalEvent:e,target:I.current})},in:C,onEnter:function(){p.set("overlay",j.current,t.autoZIndex,t.zIndex.overlay),X()},onEntered:function(){A(),v.onShow&&v.onShow()},onExit:function(){R()},onExited:function(){p.clear(j.current),v.onHide&&v.onHide()},transitionOptions:v.transitionOptions},$)),_&&e.createElement(a,y({target:I,content:v.tooltip},v.tooltipOptions)))})));T.displayName="SplitButton";export{T as SplitButton};