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) • 19 kB
JavaScript
import*as e from"react";import t,{PrimeReactContext as n}from"primereact/api";import{ComponentBase as r,useHandleStyle as o}from"primereact/componentbase";import{CSSTransition as a}from"primereact/csstransition";import{useMergeProps as l,useMountEffect as i,useUpdateEffect as c,useOverlayListener as s,useDisplayOrder as u,useGlobalOnEscapeKey as p,ESC_KEY_HANDLING_PRIORITIES as d,useUnmountEffect as f}from"primereact/hooks";import{ChevronDownIcon as m}from"primereact/icons/chevrondown";import{SpinnerIcon as b}from"primereact/icons/spinner";import{OverlayService as v}from"primereact/overlayservice";import{Portal as y}from"primereact/portal";import{classNames as h,DomHandler as g,ObjectUtils as w,IconUtils as O,UniqueComponentId as S,ZIndexUtils as E}from"primereact/utils";import{AngleRightIcon as x}from"primereact/icons/angleright";import{Ripple as I}from"primereact/ripple";function P(){return P=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},P.apply(this,arguments)}function j(e){return j="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},j(e)}function G(e,t){if("object"!==j(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==j(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}function C(e){var t=G(e,"string");return"symbol"===j(t)?t:String(t)}function A(e,t,n){return(t=C(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function N(e){if(Array.isArray(e))return e}function D(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,a,l,i=[],c=!0,s=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(i.push(r.value),i.length!==t);c=!0);}catch(e){s=!0,o=e}finally{try{if(!c&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(s)throw o}}return i}}function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function L(e,t){if(e){if("string"==typeof e)return k(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)?k(e,t):void 0}}function R(){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 T(e,t){return N(e)||D(e,t)||L(e,t)||R()}var H=r.extend({defaultProps:{__TYPE:"CascadeSelect",appendTo:null,ariaLabelledBy:null,autoFocus:!1,breakpoint:void 0,className:null,dataKey:null,disabled:!1,loadingIcon:null,dropdownIcon:null,id:null,inputId:null,inputRef:null,invalid:!1,variant:null,itemTemplate:null,name:null,onBeforeHide:null,onBeforeShow:null,onChange:null,onGroupChange:null,onHide:null,onShow:null,optionGroupChildren:null,optionGroupIcon:null,optionGroupLabel:null,optionLabel:null,optionValue:null,options:null,placeholder:null,scrollHeight:"400px",style:null,tabIndex:null,transitionOptions:null,value:null,children:void 0},css:{classes:{root:function(e){var t=e.props,n=e.focusedState,r=e.context;return h("p-cascadeselect p-component p-inputwrapper",{"p-disabled":t.disabled,"p-invalid":t.invalid,"p-variant-filled":t.variant?"filled"===t.variant:r&&"filled"===r.inputStyle,"p-focus":n,"p-inputwrapper-filled":t.value,"p-inputwrapper-focus":n||e.overlayVisibleState})},label:function(e){var t=e.props,n=e.label;return h("p-cascadeselect-label ",{"p-placeholder":n===t.placeholder,"p-cascadeselect-label-empty":!t.value&&"p-emptylabel"===n})},list:"p-cascadeselect-panel p-cascadeselect-items",sublistWrapper:"p-cascadeselect-sublist-wrapper",sublist:"p-cascadeselect-panel p-cascadeselect-items p-cascadeselect-sublist",item:function(e){return h("p-cascadeselect-item",{"p-cascadeselect-item-group":e.isGroup,"p-cascadeselect-item-active p-highlight":e.isSelected})},dropdownIcon:"p-cascadeselect-trigger-icon",loadingIcon:"p-cascadeselect-trigger-icon",dropdownButton:"p-cascadeselect-trigger",loadingButton:"p-cascadeselect-trigger",wrapper:"p-cascadeselect-items-wrapper",panel:"p-cascadeselect-panel p-component",content:"p-cascadeselect-item-content",optionGroupIcon:"p-cascadeselect-group-icon",text:"p-cascadeselect-item-text",transition:"p-connected-overlay"},styles:"\n@layer primereact {\n .p-cascadeselect {\n display: inline-flex;\n cursor: pointer;\n position: relative;\n user-select: none;\n }\n \n .p-cascadeselect-trigger {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n \n .p-cascadeselect-label {\n display: block;\n white-space: nowrap;\n overflow: hidden;\n flex: 1 1 auto;\n width: 1%;\n text-overflow: ellipsis;\n cursor: pointer;\n }\n \n .p-cascadeselect-label-empty {\n overflow: hidden;\n visibility: hidden;\n }\n \n .p-cascadeselect .p-cascadeselect-panel {\n min-width: 100%;\n }\n \n .p-cascadeselect-item {\n cursor: pointer;\n font-weight: normal;\n white-space: nowrap;\n }\n \n .p-cascadeselect-item-content {\n display: flex;\n align-items: center;\n overflow: hidden;\n position: relative;\n }\n \n .p-cascadeselect-group-icon {\n margin-left: auto;\n }\n \n .p-cascadeselect-items {\n margin: 0;\n padding: 0;\n list-style-type: none;\n min-width: 100%;\n }\n \n .p-fluid .p-cascadeselect {\n display: flex;\n }\n \n .p-fluid .p-cascadeselect .p-cascadeselect-label {\n width: 1%;\n }\n \n .p-cascadeselect-sublist-wrapper {\n position: absolute;\n min-width: 100%;\n z-index: 1;\n display: none;\n }\n \n .p-cascadeselect-item-active {\n overflow: visible;\n }\n \n .p-cascadeselect-item-active > .p-cascadeselect-sublist-wrapper {\n display: block;\n left: 100%;\n top: 0;\n }\n}\n"}});function B(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function V(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?B(Object(n),!0).forEach((function(t){A(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):B(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var F=e.memo((function(t){var r=l(),o=T(e.useState(null),2),a=o[0],s=o[1],u=e.useRef(null),p=e.useContext(n),d=t.ptm,f=t.cx,m=function(e,n){return d(e,{hostName:t.hostName,state:V({},n)})},b=function(e){t.onOptionSelect&&t.onOptionSelect(e)},v=function(e,n){var r=e.currentTarget.parentElement;switch(e.key){case"Down":case"ArrowDown":var o=y(r);o&&o.children[0].focus();break;case"Up":case"ArrowUp":var l=S(r);l&&l.children[0].focus();break;case"Right":case"ArrowRight":A(n)&&(a===n?r.children[1].children[0].children[0].focus():s(n));break;case"Left":case"ArrowLeft":s(null);var i=e.currentTarget.parentElement.parentElement.previousElementSibling;i&&i.focus();break;case"Enter":E(e,n);break;case"Tab":case"Escape":t.onPanelHide&&(t.onPanelHide(),e.preventDefault())}e.preventDefault()},y=function e(t){var n=t.nextElementSibling;return n?g.hasClass(n,"p-disabled")||!g.hasClass(n,"p-cascadeselect-item")?e(n):n:null},S=function e(t){var n=t.previousElementSibling;return n?g.hasClass(n,"p-disabled")||!g.hasClass(n,"p-cascadeselect-item")?e(n):n:null},E=function(e,n){A(n)?(s((function(e){return e===n?null:n})),t.onOptionGroupSelect&&t.onOptionGroupSelect({originalEvent:e,value:n})):t.onOptionSelect&&t.onOptionSelect({originalEvent:e,value:C(n)})},j=function(e){t.onOptionGroupSelect&&t.onOptionGroupSelect(e)},G=function(e){return t.optionLabel?w.resolveFieldData(e,t.optionLabel):e},C=function(e){return t.optionValue?w.resolveFieldData(e,t.optionValue):e},A=function(e){return Object.prototype.hasOwnProperty.call(e,t.optionGroupChildren[t.level])},N=function(e){return A(e)?(n=e,t.optionGroupLabel?w.resolveFieldData(n,t.optionGroupLabel):null):G(e);var n};i((function(){if(t.selectionPath&&t.options&&!t.dirty){var e=t.options.find((function(e){return t.selectionPath.includes(e)}));e&&s(e)}var n,r,o,a,l;t.root||(r=g.getOffset(n=u.current.parentElement.parentElement),o=g.getViewport(),a=u.current.offsetParent?u.current.offsetWidth:g.getHiddenElementOuterWidth(_),l=g.getOuterWidth(n.children[0]),parseInt(r.left,10)+l+a>o.width-g.calculateScrollbarWidth()&&(u.current.parentElement.style.left="-100%"))})),c((function(){t.parentActive||s(null)}),[t.parentActive]);var D,k,L,R,H=function(n){if(A(n)&&a===n){var r=w.resolveFieldData(n,t.optionGroupChildren[t.level]),o=a===n,l=t.level+1;return e.createElement(F,{hostName:t.hostName,options:r,className:f("sublist"),selectionPath:t.selectionPath,optionLabel:t.optionLabel,optionValue:t.optionValue,level:l,onOptionSelect:b,onOptionGroupSelect:j,parentActive:o,optionGroupLabel:t.optionGroupLabel,optionGroupChildren:t.optionGroupChildren,dirty:t.dirty,template:t.template,onPanelHide:t.onPanelHide,ptm:d,cx:f})}return null},B=function(n,o){var l=H(n),i=r({className:f("text")},m("text")),c=t.template?w.getJSXElement(t.template,C(n)):e.createElement("span",i,N(n)),s=r({className:f("optionGroupIcon")},m("optionGroupIcon")),u=t.optionGroupIcon||e.createElement(x,s),p=A(n)&&O.getJSXIcon(u,V({},s),{props:t}),d=N(n)+"_"+o,b=r({className:f("content"),onClick:function(e){return E(e,n)},tabIndex:0,onKeyDown:function(e){return v(e,n)}},m("content")),y=a===n,g=A(n),S=r({className:h(n.className,f("item",{option:n,isGroup:g,isSelected:y})),style:n.style,role:"none","data-p-item-group":g,"data-p-highlight":y},m("item",{selected:y,group:g}));return e.createElement("li",P({key:d},S),e.createElement("div",b,c,p,e.createElement(I,null)),l)},_=(D=r({ref:u,className:f(0===t.level?"list":"sublist",{context:p}),role:"listbox","aria-orientation":"horizontal"},m(0===t.level?"list":"sublist")),k=t.options?t.options.map(B):null,L=e.createElement("ul",D,k),R=r({className:f("sublistWrapper")},m("sublistWrapper")),0===t.level?L:e.createElement("div",R,L));return _}));function _(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=K(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,l=!0,i=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return l=e.done,e},e:function(e){i=!0,a=e},f:function(){try{l||null==n.return||n.return()}finally{if(i)throw a}}}}function K(e,t){if(e){if("string"==typeof e)return W(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)?W(e,t):void 0}}function W(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function M(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function U(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?M(Object(n),!0).forEach((function(t){A(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):M(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var z=e.memo(e.forwardRef((function(r,x){var I=l(),j=e.useContext(n),G=H.getProps(r,j),C=T(e.useState(!1),2),A=C[0],N=C[1],D=T(e.useState(!1),2),k=D[0],L=D[1],R=T(e.useState(null),2),B=R[0],V=R[1],K=H.setMetaData({props:G,state:{focused:A,overlayVisible:k,attributeSelector:B},context:U({},j)}),W=K.ptm,M=K.cx;o(H.css.styles,K.isUnstyled,{name:"cascadeselect"});var z=e.useRef(null),J=e.useRef(null),X=e.useRef(null),Z=e.useRef(null),$=e.useRef(null),q=e.useRef(!1),Y=e.useRef(null),Q=T(s({target:z,overlay:J,listener:function(e,t){t.valid&&be()},when:k}),2),ee=Q[0],te=Q[1],ne=u("cascade-select",k);p({callback:function(){be()},when:k&&ne,priority:[d.CASCADE_SELECT,ne]});var re=function(e){G.onChange&&G.onChange({originalEvent:e,value:e.value}),se(),be(),g.focus(X.current)},oe=function(e){q.current=!0,G.onGroupChange&&G.onGroupChange(e)},ae=function(e){return(G.optionLabel?w.resolveFieldData(e,G.optionLabel):e)||e},le=function(e){return G.optionValue?w.resolveFieldData(e,G.optionValue):e},ie=function(e,t){return w.resolveFieldData(e,G.optionGroupChildren[t])},ce=function(e,t){return Object.prototype.hasOwnProperty.call(e,G.optionGroupChildren[t])},se=function(){var e;if(null!=G.value&&G.options){var t,n=_(G.options);try{for(n.s();!(t=n.n()).done;){if(e=ue(t.value,0))break}}catch(e){n.e(e)}finally{n.f()}}Y.current=e},ue=function e(t,n){if(ce(t,n)){var r,o,a=_(ie(t,n));try{for(a.s();!(o=a.n()).done;){if(r=e(o.value,n+1))return r.unshift(t),r}}catch(e){a.e(e)}finally{a.f()}}else if(w.equals(G.value,le(t),G.dataKey))return[t];return null},pe=function(){N(!0)},de=function(){N(!1)},fe=function(e){switch(e.which){case 40:k?g.findSingle(J.current,'[data-pc-section="item"]').children[0].focus():e.altKey&&G.options&&G.options.length&&me(),e.preventDefault();break;case 32:k?be():me(),e.preventDefault();break;case 9:be()}},me=function(){G.onBeforeShow&&G.onBeforeShow(),L(!0)},be=function(){G.onBeforeHide&&G.onBeforeHide(),L(!1),g.focus(X.current)},ve=function(){E.set("overlay",J.current,j&&j.autoZIndex||t.autoZIndex,j&&j.zIndex.overlay||t.zIndex.overlay),g.addStyles(J.current,{position:"absolute",top:"0",left:"0"}),we(),B&&G.breakpoint&&(J.current.setAttribute(B+"_panel",""),Oe())},ye=function(){ee(),G.onShow&&G.onShow()},he=function(){te(),q.current=!1},ge=function(){E.clear(J.current),G.onHide&&G.onHide(),Se()},we=function(){g.alignOverlay(J.current,Z.current.parentElement,G.appendTo||j&&j.appendTo||t.appendTo)},Oe=function(){if(!$.current){$.current=g.createInlineStyle(j&&j.nonce||t.nonce,j&&j.styleContainer);var e="".concat(B,"_panel"),n="\n@media screen and (max-width: ".concat(G.breakpoint,") {\n .p-cascadeselect-panel[").concat(e,"] .p-cascadeselect-items-wrapper > ul {\n max-height: ").concat(G.scrollHeight,";\n overflow: ").concat(G.scrollHeight?"auto":"",";\n }\n\n .p-cascadeselect-panel[").concat(e,"] .p-cascadeselect-sublist-wrapper {\n position:relative;\n left:0 !important;\n }\n\n .p-cascadeselect-panel[").concat(e,"] .p-cascadeselect-sublist {\n overflow: hidden !important;\n }\n\n .p-cascadeselect-panel[").concat(e,"] .p-cascadeselect-item-active .p-cascadeselect-sublist {\n left: 0;\n box-shadow: none;\n border-radius: 0;\n padding: 0 0 0 calc(var(--inline-spacing) * 2); /* @todo */\n }\n\n .p-cascadeselect-panel[").concat(e,'] .p-cascadeselect-group-icon:before {\n content: "\\e930";\n }\n}\n');$.current.innerHTML=n}},Se=function(){$.current=g.removeInlineStyle($.current)};e.useImperativeHandle(x,(function(){return{props:G,getElement:function(){return z.current},getOverlay:function(){return J.current},getInput:function(){return X.current},getLabel:function(){return Z.current},focus:function(){return g.focus(X.current)}}})),i((function(){G.breakpoint&&!B&&V(S()),G.autoFocus&&g.focus(X.current,G.autoFocus),we()})),e.useEffect((function(){w.combinedRefs(X,G.inputRef)}),[X,G.inputRef]),c((function(){se()}),[G.value]),f((function(){E.clear(J.current)}));var Ee=function(){var t=I({className:M("dropdownIcon")},W("dropdownIcon")),n=O.getJSXIcon(G.dropdownIcon||e.createElement(m,t),U({},t),{props:G}),r=I({className:M("dropdownButton"),role:"button","aria-haspopup":"listbox","aria-expanded":k},W("dropdownButton"));return e.createElement("div",r,n)},xe=I({className:M("wrapper")},W("wrapper")),Ie=I({ref:J,className:M("panel"),onClick:function(e){v.emit("overlay-click",{originalEvent:e,target:z.current})}},W("panel")),Pe=function(){var t=I({classNames:M("transition"),in:k,timeout:{enter:120,exit:100},options:G.transitionOptions,unmountOnExit:!0,onEnter:ve,onEntered:ye,onExit:he,onExited:ge},W("transition")),n=e.createElement(a,P({nodeRef:J},t),e.createElement("div",Ie,e.createElement("div",xe,e.createElement(F,{hostName:"CascadeSelect",options:G.options,selectionPath:Y.current,optionGroupIcon:G.optionGroupIcon,optionLabel:G.optionLabel,optionValue:G.optionValue,parentActive:null!=G.value,level:0,optionGroupLabel:G.optionGroupLabel,optionGroupChildren:G.optionGroupChildren,onOptionSelect:re,onOptionGroupSelect:oe,root:!0,template:G.itemTemplate,onPanelHide:be,ptm:W,cx:M}))));return e.createElement(y,{element:n,appendTo:G.appendTo})},je=H.getOtherProps(G);w.reduceKeys(je,g.DATA_PROPS);var Ge,Ce,Ae,Ne,De,ke,Le,Re,Te,He,Be,Ve,Fe,_e=w.reduceKeys(je,g.ARIA_PROPS);return Ge=G.value?ae(G.value):void 0,Ce=I({className:"p-hidden-accessible"},W("hiddenSelectedMessage")),Ae=I(U({ref:X,type:"text",id:G.inputId,name:G.name,defaultValue:Ge,readOnly:!0,disabled:G.disabled,onFocus:pe,onBlur:de,onKeyDown:function(e){return fe(e)},tabIndex:G.tabIndex,"aria-haspopup":"listbox"},_e),W("input")),Te=e.createElement("div",Ce,e.createElement("input",Ae)),Ne=G.value?ae(G.value):G.placeholder||"p-emptylabel",De=I({ref:Z,className:M("label",{label:Ne})},W("label",{context:U({label:Ne},j)})),He=e.createElement("span",De,Ne),Be=G.loading?(ke=I({className:M("loadingIcon")},W("loadingIcon")),Le=O.getJSXIcon(G.loadingIcon||e.createElement(b,{spin:!0}),U({},ke),{props:G}),Re=I({className:M("loadingButton"),role:"button","aria-haspopup":"listbox","aria-expanded":k},W("dropdownButton")),e.createElement("div",Re,Le)):Ee(),Ve=Pe(),Fe=I({id:G.id,ref:z,className:h(G.className,M("root",{focusedState:A,overlayVisibleState:k,context:j})),style:G.style,onClick:function(e){return t=e,void(G.disabled||G.loading||J.current&&J.current.contains(t.target)||(g.focus(X.current),k?be():me()));var t}},je,W("root")),e.createElement("div",Fe,Te,He,Be,Ve)})));z.displayName="CascadeSelect";export{z as CascadeSelect};