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) • 11.5 kB
JavaScript
import*as e from"react";import{PrimeReactContext as n}from"primereact/api";import{ComponentBase as t,useHandleStyle as r}from"primereact/componentbase";import{useMergeProps as i,useMountEffect as o}from"primereact/hooks";import{TimesCircleIcon as a}from"primereact/icons/timescircle";import{KeyFilter as l}from"primereact/keyfilter";import{Tooltip as u}from"primereact/tooltip";import{classNames as c,ObjectUtils as p,DomHandler as s,IconUtils as f}from"primereact/utils";function d(e){return d="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},d(e)}function m(e,n){if("object"!=d(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,n||"default");if("object"!=d(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===n?String:Number)(e)}function v(e){var n=m(e,"string");return"symbol"==d(n)?n:n+""}function y(e,n,t){return(n=v(n))in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function h(){return h=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)({}).hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},h.apply(null,arguments)}function b(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function g(e){if(Array.isArray(e))return b(e)}function k(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function w(e,n){if(e){if("string"==typeof e)return b(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?b(e,n):void 0}}function x(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function O(e){return g(e)||k(e)||w(e)||x()}function P(e){if(Array.isArray(e))return e}function E(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,i,o,a,l=[],u=!0,c=!1;try{if(o=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;u=!1}else for(;!(u=(r=o.call(t)).done)&&(l.push(r.value),l.length!==n);u=!0);}catch(e){c=!0,i=e}finally{try{if(!u&&null!=t.return&&(a=t.return(),Object(a)!==a))return}finally{if(c)throw i}}return l}}function S(){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 D(e,n){return P(e)||E(e,n)||w(e,n)||S()}var I=t.extend({defaultProps:{__TYPE:"Chips",addOnBlur:null,allowDuplicate:!0,ariaLabelledBy:null,autoFocus:!1,className:null,disabled:null,id:null,inputId:null,inputRef:null,invalid:!1,variant:null,itemTemplate:null,keyfilter:null,max:null,name:null,onAdd:null,onBlur:null,onChange:null,onFocus:null,onKeyDown:null,onRemove:null,placeholder:null,readOnly:!1,removable:!0,removeIcon:null,separator:null,style:null,tooltip:null,tooltipOptions:null,value:null,children:void 0},css:{classes:{removeTokenIcon:"p-chips-token-icon",label:"p-chips-token-label",token:function(e){return c("p-chips-token",{"p-focus":e.focusedIndex===e.index})},inputToken:"p-chips-input-token",container:function(e){var n=e.props,t=e.context;return c("p-inputtext p-chips-multiple-container",{"p-variant-filled":n.variant?"filled"===n.variant:t&&"filled"===t.inputStyle})},root:function(e){var n=e.focusedState;return c("p-chips p-component p-inputwrapper",{"p-inputwrapper-filled":e.isFilled,"p-inputwrapper-focus":n,"p-disabled":e.disabled,"p-invalid":e.invalid,"p-focus":n})}},styles:"\n@layer primereact {\n .p-chips {\n display: inline-flex;\n }\n \n .p-chips-multiple-container {\n margin: 0;\n padding: 0;\n list-style-type: none;\n cursor: text;\n overflow: hidden;\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n }\n \n .p-chips-token {\n cursor: default;\n display: inline-flex;\n align-items: center;\n flex: 0 0 auto;\n }\n \n .p-chips-input-token {\n flex: 1 1 auto;\n display: inline-flex;\n }\n \n .p-chips-token-icon {\n cursor: pointer;\n }\n \n .p-chips-input-token input {\n border: 0 none;\n outline: 0 none;\n background-color: transparent;\n margin: 0;\n padding: 0;\n box-shadow: none;\n border-radius: 0;\n width: 100%;\n }\n \n .p-fluid .p-chips {\n display: flex;\n }\n \n .p-chips-icon-left,\n .p-chips-icon-right {\n position: relative;\n display: inline-block;\n }\n \n .p-chips-icon-left > i,\n .p-chips-icon-right > i,\n .p-chips-icon-left > svg,\n .p-chips-icon-right > svg,\n .p-chips-icon-left > .p-chips-prefix,\n .p-chips-icon-right > .p-chips-suffix {\n position: absolute;\n top: 50%;\n margin-top: -0.5rem;\n }\n \n .p-fluid .p-chips-icon-left,\n .p-fluid .p-chips-icon-right {\n display: block;\n width: 100%;\n }\n}\n"}});function j(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function A(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?j(Object(t),!0).forEach((function(n){y(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):j(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}var R=e.memo(e.forwardRef((function(t,d){var m=i(),v=e.useContext(n),y=I.getProps(t,v),b=D(e.useState(!1),2),g=b[0],k=b[1],w=D(e.useState(null),2),x=w[0],P=w[1],E=I.setMetaData({props:y,state:{focused:g}}),S=E.ptm,j=E.cx;r(I.css.styles,E.isUnstyled,{name:"chips"});var R=e.useRef(null),_=e.useRef(null),T=e.useRef(y.inputRef),N=function(e,n){if(!y.disabled&&!y.readOnly){var t=O(y.value),r=t.splice(n,1)[0];q(r,n)&&(y.onRemove&&y.onRemove({originalEvent:e,value:r}),y.onChange&&y.onChange({originalEvent:e,value:t,stopPropagation:function(){null==e||e.stopPropagation()},preventDefault:function(){null==e||e.preventDefault()},target:{name:y.name,id:y.id,value:t}}))}},C=function(e,n,t){if(n&&n.trim().length){var r=y.value?O(y.value):[];if(y.allowDuplicate||-1===r.indexOf(n)){var i=!0;y.onAdd&&(i=y.onAdd({originalEvent:e,value:n})),!1!==i&&r.push(n)}z(e,r,t)}},F=function(e){switch(e.code){case"ArrowLeft":B();break;case"ArrowRight":K();break;case"Backspace":L(e)}},B=function(){var e=x;0===T.current.value.length&&y.value&&y.value.length>0&&(e=null===e?y.value.length-1:e-1)<0&&(e=0),P(e)},K=function(){var e=x;0===T.current.value.length&&y.value&&y.value.length>0&&(e===y.value.length-1?(e=null,T.current.focus()):e++),P(e)},L=function(e){null!==x&&N(e,x)},M=function(e){var n=e.target.value,t=y.value||[];if(y.onKeyDown&&y.onKeyDown(e),!e.defaultPrevented)switch(e.key){case"Backspace":0===n.length&&t.length>0&&N(e,t.length-1);break;case"Enter":n&&n.trim().length&&(!y.max||y.max>t.length)&&C(e,n,!0);break;case"ArrowLeft":0===n.length&&t&&t.length>0&&s.focus(_.current);break;case"ArrowRight":e.stopPropagation();break;default:y.keyfilter&&l.onKeyPress(e,y.keyfilter),X()&&e.preventDefault()}},z=function(e,n,t){y.onChange&&y.onChange({originalEvent:e,value:n,stopPropagation:function(){null==e||e.stopPropagation()},preventDefault:function(){null==e||e.preventDefault()},target:{name:y.name,id:y.id,value:n}}),T.current.value="",t&&e.preventDefault()},H=function(e){var n,t=null===(n=e.target.value)||void 0===n?void 0:n.trim();if(t!==y.separator){if(y.separator&&t.endsWith(y.separator)){var r=t.slice(0,-1);C(e,r)}}else T.current.value=""},U=function(e){if(y.separator){var n=y.separator.replace("\\n","\n").replace("\\r","\r").replace("\\t","\t"),t=(e.clipboardData||window.clipboardData).getData("Text");if(y.keyfilter&&l.onPaste(e,y.keyfilter),t){var r=y.value||[],i=t.split(n);i=i.filter((function(e){return(y.allowDuplicate||-1===r.indexOf(e))&&e.trim().length})),r=[].concat(O(r),O(i)),z(e,r,!0)}}},J=function(){k(!0)},V=function(){P(-1),k(!1)},W=function(e){if(y.addOnBlur){var n=e.target.value,t=y.value||[];n&&n.trim().length&&(!y.max||y.max>t.length)&&C(e,n,!0)}k(!1),y.onBlur&&y.onBlur(e)},X=function(){return y.max&&y.value&&y.max===y.value.length},Y=T.current&&T.current.value,$=e.useMemo((function(){return p.isNotEmpty(y.value)||p.isNotEmpty(Y)}),[y.value,Y]),q=function(e,n){return p.getPropValue(y.removable,{value:e,index:n,props:y})};e.useImperativeHandle(d,(function(){return{props:y,focus:function(){return s.focus(T.current)},getElement:function(){return R.current},getInput:function(){return T.current}}})),e.useEffect((function(){p.combinedRefs(T,y.inputRef)}),[T,y.inputRef]),o((function(){y.autoFocus&&s.focus(T.current,y.autoFocus)}));var G,Q,Z,ee,ne,te=function(n,t){if(!y.disabled&&!y.readOnly&&q(n,t)){var r=m({className:j("removeTokenIcon"),onClick:function(e){return N(e,t)},"aria-hidden":"true"},S("removeTokenIcon")),i=y.removeIcon||e.createElement(a,h({},r,{key:"".concat(t,"_icon")}));return f.getJSXIcon(i,A({},r),{props:y})}return null},re=function(n,t){var r=y.itemTemplate?y.itemTemplate(n):n,i=m({className:j("label")},S("label")),o=e.createElement("span",h({},i,{key:"".concat(t,"_").concat(n,"_span")}),r),a=te(n,t),l=m({id:y.inputId+"_chips_item_"+t,role:"option","aria-label":n,className:j("token",{focusedIndex:x,index:t}),"aria-selected":!0,"aria-setsize":y.value.length,"aria-posinset":t+1,"data-p-highlight":!0,"data-p-focused":x===t},S("token"));return e.createElement("li",h({},l,{key:"".concat(t,"_").concat(n)}),o,a)},ie=p.isNotEmpty(y.tooltip),oe=I.getOtherProps(y),ae=p.reduceKeys(oe,s.ARIA_PROPS),le=(Z=y.value?y.value.map(re):null,G=m({className:j("inputToken")},S("inputToken")),Q=m(A({id:y.inputId,ref:T,placeholder:y.placeholder,type:"text",enterKeyHint:"enter",name:y.name,disabled:y.disabled||X(),onKeyDown:function(e){return M(e)},onChange:function(e){return H(e)},onPaste:function(e){return U(e)},onFocus:function(e){return n=e,k(!0),P(null),void(y.onFocus&&y.onFocus(n));var n},onBlur:function(e){return W(e)},readOnly:y.readOnly},ae),S("input")),ee=e.createElement("li",h({},G,{key:y.inputId+"_chips_input"}),e.createElement("input",Q)),ne=m({ref:_,className:j("container",{context:v}),onClick:function(e){s.focus(T.current)},onKeyDown:function(e){return F(e)},tabIndex:-1,role:"listbox","aria-orientation":"horizontal","aria-labelledby":y.ariaLabelledby,"aria-label":y.ariaLabel,"aria-activedescendant":g?null!==x?"".concat(y.inputId,"_chips_item_").concat(x):null:void 0,"data-p-disabled":y.disabled,"data-p-focus":g,onFocus:J,onBlur:V},S("container")),e.createElement("ul",ne,Z,ee)),ue=m({id:y.id,ref:R,className:c(y.className,j("root",{isFilled:$,focusedState:g,disabled:y.disabled,invalid:y.invalid})),style:y.style},S("root"));return e.createElement(e.Fragment,null,e.createElement("div",h({},ue,{key:"chips"}),le),ie&&e.createElement(u,h({target:T,content:y.tooltip,pt:S("tooltip")},y.tooltipOptions)))})));R.displayName="Chips";export{R as Chips};