@entur/dropdown 4.0.5 → 4.0.7
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.
- package/dist/dropdown.cjs.development.js +8 -3
- package/dist/dropdown.cjs.development.js.map +1 -1
- package/dist/dropdown.cjs.production.min.js +1 -1
- package/dist/dropdown.cjs.production.min.js.map +1 -1
- package/dist/dropdown.esm.js +8 -3
- package/dist/dropdown.esm.js.map +1 -1
- package/dist/styles.css +64 -64
- package/package.json +9 -9
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@entur/utils"),t=require("react"),n=require("downshift"),a=require("classnames"),l=require("@entur/form"),r=require("@entur/icons"),o=require("@entur/a11y"),i=require("@entur/loader"),u=require("@entur/tokens"),s=require("@entur/button");function d(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=d(t),f=d(n),p=d(a);function m(){m=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,a=Object.defineProperty||function(e,t,n){e[t]=n.value},l="function"==typeof Symbol?Symbol:{},r=l.iterator||"@@iterator",o=l.asyncIterator||"@@asyncIterator",i=l.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function s(e,t,n,l){var r=Object.create((t&&t.prototype instanceof f?t:f).prototype),o=new N(l||[]);return a(r,"_invoke",{value:E(e,n,o)}),r}function d(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=s;var c={};function f(){}function p(){}function h(){}var g={};u(g,r,(function(){return this}));var b=Object.getPrototypeOf,v=b&&b(b(C([])));v&&v!==t&&n.call(v,r)&&(g=v);var y=h.prototype=f.prototype=Object.create(g);function w(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function _(e,t){function l(a,r,o,i){var u=d(e[a],e,r);if("throw"!==u.type){var s=u.arg,c=s.value;return c&&"object"==typeof c&&n.call(c,"__await")?t.resolve(c.__await).then((function(e){l("next",e,o,i)}),(function(e){l("throw",e,o,i)})):t.resolve(c).then((function(e){s.value=e,o(s)}),(function(e){return l("throw",e,o,i)}))}i(u.arg)}var r;a(this,"_invoke",{value:function(e,n){function a(){return new t((function(t,a){l(e,n,t,a)}))}return r=r?r.then(a,a):a()}})}function E(e,t,n){var a="suspendedStart";return function(l,r){if("executing"===a)throw new Error("Generator is already running");if("completed"===a){if("throw"===l)throw r;return{value:void 0,done:!0}}for(n.method=l,n.arg=r;;){var o=n.delegate;if(o){var i=x(o,n);if(i){if(i===c)continue;return i}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===a)throw a="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);a="executing";var u=d(e,t,n);if("normal"===u.type){if(a=n.done?"completed":"suspendedYield",u.arg===c)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(a="completed",n.method="throw",n.arg=u.arg)}}}function x(e,t){var n=t.method,a=e.iterator[n];if(void 0===a)return t.delegate=null,"throw"===n&&e.iterator.return&&(t.method="return",t.arg=void 0,x(e,t),"throw"===t.method)||"return"!==n&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+n+"' method")),c;var l=d(a,e.iterator,t.arg);if("throw"===l.type)return t.method="throw",t.arg=l.arg,t.delegate=null,c;var r=l.arg;return r?r.done?(t[e.resultName]=r.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,c):r:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,c)}function I(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function O(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function N(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(I,this),this.reset(!0)}function C(e){if(e){var t=e[r];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var a=-1,l=function t(){for(;++a<e.length;)if(n.call(e,a))return t.value=e[a],t.done=!1,t;return t.value=void 0,t.done=!0,t};return l.next=l}}return{next:T}}function T(){return{value:void 0,done:!0}}return p.prototype=h,a(y,"constructor",{value:h,configurable:!0}),a(h,"constructor",{value:p,configurable:!0}),p.displayName=u(h,i,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,h):(e.__proto__=h,u(e,i,"GeneratorFunction")),e.prototype=Object.create(y),e},e.awrap=function(e){return{__await:e}},w(_.prototype),u(_.prototype,o,(function(){return this})),e.AsyncIterator=_,e.async=function(t,n,a,l,r){void 0===r&&(r=Promise);var o=new _(s(t,n,a,l),r);return e.isGeneratorFunction(n)?o:o.next().then((function(e){return e.done?e.value:o.next()}))},w(y),u(y,i,"Generator"),u(y,r,(function(){return this})),u(y,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=Object(e),n=[];for(var a in t)n.push(a);return n.reverse(),function e(){for(;n.length;){var a=n.pop();if(a in t)return e.value=a,e.done=!1,e}return e.done=!0,e}},e.values=C,N.prototype={constructor:N,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(O),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function a(n,a){return o.type="throw",o.arg=e,t.next=n,a&&(t.method="next",t.arg=void 0),!!a}for(var l=this.tryEntries.length-1;l>=0;--l){var r=this.tryEntries[l],o=r.completion;if("root"===r.tryLoc)return a("end");if(r.tryLoc<=this.prev){var i=n.call(r,"catchLoc"),u=n.call(r,"finallyLoc");if(i&&u){if(this.prev<r.catchLoc)return a(r.catchLoc,!0);if(this.prev<r.finallyLoc)return a(r.finallyLoc)}else if(i){if(this.prev<r.catchLoc)return a(r.catchLoc,!0)}else{if(!u)throw new Error("try statement without catch or finally");if(this.prev<r.finallyLoc)return a(r.finallyLoc)}}}},abrupt:function(e,t){for(var a=this.tryEntries.length-1;a>=0;--a){var l=this.tryEntries[a];if(l.tryLoc<=this.prev&&n.call(l,"finallyLoc")&&this.prev<l.finallyLoc){var r=l;break}}r&&("break"===e||"continue"===e)&&r.tryLoc<=t&&t<=r.finallyLoc&&(r=null);var o=r?r.completion:{};return o.type=e,o.arg=t,r?(this.method="next",this.next=r.finallyLoc,c):this.complete(o)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),c},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),O(n),c}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var a=n.completion;if("throw"===a.type){var l=a.arg;O(n)}return l}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:C(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),c}},e}function h(e,t,n,a,l,r,o){try{var i=e[r](o),u=i.value}catch(e){return void n(e)}i.done?t(u):Promise.resolve(u).then(a,l)}function g(){return g=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},g.apply(this,arguments)}function b(e){if(null==e)throw new TypeError("Cannot destructure "+e)}function v(e,t){if(null==e)return{};var n,a,l={},r=Object.keys(e);for(a=0;a<r.length;a++)t.indexOf(n=r[a])>=0||(l[n]=e[n]);return l}var y=["children","onChange","onInputValueChange","highlightFirstItemOnOpen","className","style","searchable"],w=c.default.createContext(null),_=function(e){var t=e.children,n=e.onChange,a=void 0===n?function(){}:n,l=e.onInputValueChange,r=void 0===l?function(){}:l,o=e.highlightFirstItemOnOpen,i=void 0!==o&&o,u=e.className,s=e.style,d=e.searchable,m=void 0!==d&&d,h=v(e,y);return c.default.createElement(f.default,g({itemToString:function(e){return e?e.label:""},onStateChange:function(e,t){e.type!==f.default.stateChangeTypes.controlledPropUpdatedSelectedItem&&("selectedItem"in e?a(e.selectedItem,t):"inputValue"in e&&r(e.inputValue))},stateReducer:function(e,t){var n=i&&"isOpen"in t&&t.isOpen?{highlightedIndex:0}:{};if(!m)return g({},t,n);switch(t.type){case"__autocomplete_change_input__":default:return g({},t,n);case"__autocomplete_click_item__":case"__autocomplete_keydown_enter__":case"__autocomplete_blur_input__":case"__autocomplete_mouseup__":return g({},t,{inputValue:""},n)}}},h),(function(e){return c.default.createElement("div",{className:p.default("eds-input-group",u),style:s},c.default.createElement(w.Provider,{value:e},t))}))},E=function(){var e=c.default.useContext(w);if(!e)throw new Error("You need to wrap your component in a DownshiftProvider");return e},x=["items"],I=function(e){var t=e.items,n=v(e,x),a=E(),l=a.highlightedIndex,o=a.isOpen,i=a.selectedItem,u=a.getItemProps,s=a.getMenuProps;return c.default.createElement("ul",g({className:p.default("eds-dropdown-list",{"eds-dropdown-list--open":o})},s(),n),o?t.map((function(e,t){return c.default.createElement("li",g({className:p.default("eds-dropdown-list__item",{"eds-dropdown-list__item--highlighted":l===t,"eds-dropdown-list__item--selected":i===e})},u({key:""+t+e.value,item:e,index:t})),c.default.createElement("span",null,e.label),e.icons&&c.default.createElement("span",null,e.icons.map((function(e,t){return c.default.createElement(e,{key:t,inline:!0,className:"eds-dropdown-list__item-icon"})}))),i===e&&c.default.createElement(r.CheckIcon,null))})):null)},O=function(){var e=E();return c.default.createElement("button",g({},(0,e.getToggleButtonProps)({className:p.default("eds-dropdown__toggle-button",{"eds-dropdown__toggle-button--open":e.isOpen})}),{tabIndex:"-1",type:"button"}),c.default.createElement(r.DownArrowIcon,null))},N=["className","children"],C=function(e){var t=e.className,n=e.children,a=v(e,N);return c.default.createElement("div",g({className:p.default("eds-inline-spinner",t)},a),c.default.createElement(i.LoadingDots,null),c.default.createElement(o.VisuallyHidden,null,n))},T=["children","className","items","loading","loadingText","placeholder","style","listStyle","clearable","label","isFilled","disableLabelAnimation"],S=function(e){var t=e.children,n=e.className,a=e.items,r=e.loading,o=void 0!==r&&r,i=e.loadingText,s=void 0===i?"Loading...":i,d=e.style,f=e.listStyle,p=e.clearable,m=e.label,h=e.isFilled,b=void 0!==h&&h,y=e.disableLabelAnimation,w=v(e,T),_=E().getLabelProps;return c.default.createElement("div",{className:"eds-dropdown-wrapper",style:d},c.default.createElement(l.BaseFormControl,g({append:c.default.createElement(L,{clearable:p,loading:o,loadingText:s,readOnly:w.readOnly}),className:n,label:m,isFilled:b,labelProps:_(),disableLabelAnimation:y},w),t),c.default.createElement(I,g({items:a,style:g({position:"absolute",top:u.space.extraLarge3+u.space.extraSmall+"px"},f)},w)))},k=function(e){var t=g({},(b(e),e)),n=E(),a=n.clearSelection,l=n.selectedItem;return c.default.createElement(c.default.Fragment,null,l&&c.default.createElement("button",g({className:"eds-dropdown__clear-button",type:"button",tabIndex:-1,onClick:function(){return a()}},t),c.default.createElement(r.CloseSmallIcon,null)),l&&c.default.createElement("div",{className:"eds-dropdown__divider"}))},L=function(e){var t=e.clearable,n=e.readOnly;return e.loading?c.default.createElement(C,null,e.loadingText):n?null:t?c.default.createElement(c.default.Fragment,null,c.default.createElement(k,null)," ",c.default.createElement(O,null)):c.default.createElement(O,null)},F=["disabled","placeholder","selectOnTab","openOnFocus","listStyle","items","label","disableLabelAnimation","loading","loadingText","className","clearable"],P=c.default.forwardRef((function(e,t){var n=e.disabled,a=e.placeholder,l=void 0===a?"Vennligst velg":a,r=e.selectOnTab,o=void 0!==r&&r,i=e.openOnFocus,u=void 0!==i&&i,s=e.listStyle,d=e.items,f=e.label,p=e.disableLabelAnimation,m=e.loading,h=e.loadingText,b=e.className,y=e.clearable,w=v(e,F),_=E(),x=_.getToggleButtonProps,I=_.selectedItem,O=_.selectHighlightedItem,N=_.openMenu,C=_.isOpen,T=_.highlightedIndex,k=_.setHighlightedIndex;return c.default.createElement(S,g({disabled:n,listStyle:s,items:d,label:f,isFilled:!!I||0!==l.length,disableLabelAnimation:p,loading:m,loadingText:h,className:b,clearable:y},w),c.default.createElement("button",g({},x(g({className:"eds-form-control eds-dropdown__selected-item",style:{textAlign:"left"},disabled:n,type:"button",onKeyDown:function(e){if(o&&"Tab"===e.key&&O(),C){var t=e.key,n=d.map((function(e,t){return g({},e,{index:t})})).filter((function(e){return e.label.trim().charAt(0).toLowerCase()===t})),a=n.find((function(e){return e.index>(null!=T?T:0)}));a?k(a.index):n.length>0&&k(n[0].index)}},onFocus:function(){u&&!C&&N()}},w)),{ref:t}),I?I.label:l))})),A=["disabled","className","items","loading","loadingText","readOnly","prepend","selectOnTab","openOnFocus","listStyle","clearable","itemFilter","label","disableLabelAnimation","placeholder"],M=c.default.forwardRef((function(n,a){var l=n.disabled,r=void 0!==l&&l,o=n.className,i=n.items,u=n.loading,s=n.loadingText,d=n.readOnly,f=void 0!==d&&d,p=n.prepend,m=n.selectOnTab,h=void 0!==m&&m,b=n.openOnFocus,y=void 0!==b&&b,w=n.listStyle,_=n.clearable,x=n.itemFilter,I=void 0===x?function(e,t){return function(e,t){if(!t)return!0;var n=t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&");return new RegExp(n,"i").test(e.label)}(e,t)}:x,O=n.label,N=n.disableLabelAnimation,C=n.placeholder,T=v(n,A),k=E(),L=k.getInputProps,F=k.inputValue,P=k.selectHighlightedItem,M=k.isOpen,B=k.openMenu,j=k.closeMenu,D=k.selectedItem,R=t.useState(!1),V=R[0],q=R[1],G=t.useRef(null),K=c.default.useMemo((function(){return i.filter((function(e){return I(e,F)}))}),[F,i,I]);return c.default.createElement(S,{items:K,disabled:r,readOnly:f,className:o,loading:u,loadingText:s,prepend:p,listStyle:w,clearable:_,label:O,isFilled:!!D,disableLabelAnimation:N},!V&&D&&!F&&c.default.createElement("span",{className:"eds-dropdown__searchable-selected-item__wrapper"},c.default.createElement("span",{className:"eds-dropdown__searchable-selected-item",onClick:function(){var e;return null==(e=G.current)?void 0:e.focus()}},D.label)),c.default.createElement("input",g({},L(g({disabled:r,readOnly:f,className:"eds-form-control eds-dropdown__input",onKeyDown:function(e){h&&"Tab"===e.key&&P()},onFocus:function(){!M&&y&&B(),q(!0)},placeholder:D?D.label:C},T)),{onBlur:function(){q(!1),j()},ref:e.mergeRefs(a,G)})))})),B=function(e){var t=e.feedback,n=e.variant;return c.default.createElement(l.VariantProvider,{variant:n},c.default.createElement("div",{className:e.className,style:e.style},e.children,t&&n&&c.default.createElement(l.FeedbackText,{variant:n},t)))},j=function(e,t){switch(t.type){case"request results":return{items:[],loading:!0};case"received results":return{items:t.payload,loading:!1}}},D=function(t,n){void 0===n&&(n=250);var a,l="function"==typeof t,r=c.default.useMemo((function(){return l?t:function(){return Promise.resolve(t)}}),[t,l]),o=c.default.useReducer(j,{items:l?[]:t,loading:!1}),i=o[0],u=i.items,s=i.loading,d=o[1],f=(a=c.default.useRef(!0),c.default.useEffect((function(){return function(){a.current=!1}}),[]),a.current),p=c.default.useCallback(function(){var e,t=(e=m().mark((function e(t){var n;return m().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(f){e.next=2;break}return e.abrupt("return");case 2:return d({type:"request results"}),e.next=5,r(t);case 5:n=e.sent,f&&d({type:"received results",payload:n});case 7:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(a,l){var r=e.apply(t,n);function o(e){h(r,a,l,o,i,"next",e)}function i(e){h(r,a,l,o,i,"throw",e)}o(void 0)}))});return function(e){return t.apply(this,arguments)}}(),[r,f]),b=function(e){return c.default.useMemo((function(){return e.map((function(e){return"string"==typeof e?{value:e,label:e}:"value"in e?e:g({},e,{value:e.label})}))}),[e])}(u);return c.default.useEffect((function(){l&&p("")}),[l,p]),{items:b,loading:!!l&&s,fetchItems:e.debounce(p,n)}},R=["highlightFirstItemOnOpen","debounceTimeout","disabled","feedback","items","label","loadingText","onChange","placeholder","prepend","readOnly","searchable","selectOnTab","openOnFocus","variant","value","clearable","className","style","listStyle","itemFilter","disableLabelAnimation"],V=c.default.forwardRef((function(e,t){var n=e.highlightFirstItemOnOpen,a=e.debounceTimeout,l=e.disabled,r=e.feedback,o=e.items,i=e.label,u=e.loadingText,s=e.onChange,d=void 0===s?function(){}:s,f=e.placeholder,p=e.prepend,m=e.readOnly,h=e.searchable,b=e.selectOnTab,y=e.openOnFocus,w=e.variant,E=e.value,x=e.clearable,I=void 0!==x&&x,O=e.className,N=e.style,C=e.listStyle,T=e.itemFilter,S=e.disableLabelAnimation,k=v(e,R),L=D(o,a),F=L.items,A=L.loading,j=L.fetchItems,V=void 0===E?void 0:F.find((function(e){return E===e.value}))||null,q=h?M:P,G=h?{itemFilter:T,name:k.name,"data-cy":k["data-cy"]}:{name:k.name,"data-cy":k["data-cy"]};return c.default.createElement(_,g({selectedItem:V,onInputValueChange:j,onChange:d,value:E,highlightFirstItemOnOpen:n,className:O,style:N,searchable:h},k),c.default.createElement(B,{feedback:r,variant:w},c.default.createElement(q,g({label:i,items:F,loading:A,loadingText:u,disabled:l,readOnly:m,placeholder:f,prepend:p,selectOnTab:b,openOnFocus:y,listStyle:C,clearable:I,disableLabelAnimation:S,ref:t},G))))})),q=["className","disabled","readOnly","items","loadingText","prepend","style","label","variant","feedback","disableLabelAnimation"],G=["items","itemsSelectedLabel","label","feedback","variant","disabled","readOnly","onChange","className","clearable","loading","loadingText","openOnFocus","style","listStyle","initialSelectedItems","debounceTimeout"],K=c.default.createContext(null),H=function(){var e=c.default.useContext(K);if(!e)throw new Error("You need to wrap your component in a DownshiftProvider");return e};function Y(e,t){var a=t.changes;switch(t.type){case n.useSelect.stateChangeTypes.MenuKeyDownEnter:case n.useSelect.stateChangeTypes.MenuKeyDownSpaceButton:case n.useSelect.stateChangeTypes.ItemClick:return g({},a,{isOpen:!0,highlightedIndex:e.highlightedIndex});default:return a}}var $=function(e){var t=g({},(b(e),e)),n=H().reset;return c.default.createElement(c.default.Fragment,null,c.default.createElement("button",g({className:"eds-dropdown__clear-button",type:"button",tabIndex:-1,onClick:function(){return n()}},t),c.default.createElement(r.CloseIcon,null)),c.default.createElement("div",{className:"eds-dropdown__divider"}))},U=function(e){var t=e.readOnly,n=e.hasSelected;return e.loading?c.default.createElement(C,null,e.loadingText):t?null:n?c.default.createElement(c.default.Fragment,null,c.default.createElement($,null),c.default.createElement(z,null)):c.default.createElement(z,null)},z=function(){var e=H(),t=e.openMenu,n=e.openOnFocus;return c.default.createElement("button",g({},(0,e.getToggleButtonProps)({className:p.default("eds-dropdown__toggle-button",{"eds-dropdown__toggle-button--open":e.isOpen}),onFocus:function(){n&&t()}}),{type:"button"}),c.default.createElement(r.DownArrowIcon,null))},J=function(){return c.default.createElement("svg",{className:"eds-checkbox-icon",width:"11px",height:"9px",viewBox:"6 11 37 33"},c.default.createElement("path",{className:"eds-checkbox-icon__path",d:"M14.1 27.2l7.1 7.2 14.6-14.8",fill:"none"}))},Q=["selectedItem","isOpen","getMenuProps","getItemProps","filteredItems","highlightedIndex","listStyle"],W=function(e){var t=e.selectedItem,n=e.isOpen,a=e.getMenuProps,l=e.getItemProps,o=e.filteredItems,i=e.highlightedIndex,u=e.listStyle,s=v(e,Q);return c.default.createElement("ul",g({className:p.default("eds-searchable-dropdown__list",{"eds-searchable-dropdown__list--open":n})},a(),{style:g({},s.style,u)}),n?o.map((function(e,n){return c.default.createElement("li",g({className:p.default("eds-searchable-dropdown__list__item",{"eds-searchable-dropdown__list__item--highlighted":i===n,"eds-searchable-dropdown__list__item--selected":(null==t?void 0:t.value)===e.value})},l({key:""+n+e.value,item:e,index:n})),c.default.createElement("span",null,e.label),e.icons&&c.default.createElement("span",null,e.icons.map((function(e,t){return c.default.createElement(e,{key:t,inline:!0,className:"eds-searchable-dropdown__list__item-icon"})}))),(null==t?void 0:t.value)===e.value&&c.default.createElement(r.CheckIcon,null))})):null)},X=["items","selectedItem","onChange","label","placeholder","clearable","openOnFocus","readonly","feedback","variant","className","listStyle"],Z=function(e){var t=e.getToggleButtonProps,n=e.isOpen,a=e.onChange;return e.readOnly?null:c.default.createElement("div",{style:{display:"flex",alignItems:"center"}},e.clearable&&e.selectedItem&&c.default.createElement(c.default.Fragment,null,c.default.createElement(s.IconButton,{className:"eds-searchable-dropdown-appendix__clear-button",type:"button",tabIndex:-1,onClick:function(){return a(null)}},c.default.createElement(r.CloseSmallIcon,null)),c.default.createElement("div",{className:"eds-searchable-dropdown-appendix__divider"})),c.default.createElement(s.IconButton,g({},t({className:p.default("eds-searchable-dropdown-appendix__toggle-button",{"eds-searchable-dropdown-appendix__toggle-button--open":n})}),{tabIndex:-1,type:"button"}),c.default.createElement(r.DownArrowIcon,null)))};e.warnAboutMissingStyles("dropdown","form","a11y","chip"),exports.Dropdown=V,exports.MultiSelect=function(a){var r=a.items,o=a.itemsSelectedLabel,i=void 0===o?function(e){return function(e){return e.length<3?e.map((function(e){return e.label})).toString():e.length+" elementer valgt"}(e)}:o,s=a.label,d=a.feedback,f=a.variant,m=a.disabled,h=a.readOnly,b=void 0!==h&&h,y=a.onChange,w=void 0===y?function(){}:y,_=a.className,E=a.clearable,x=void 0!==E&&E,I=a.loading,O=void 0!==I&&I,N=a.loadingText,C=void 0===N?"":N,T=a.openOnFocus,S=void 0!==T&&T,k=a.style,L=a.listStyle,F=a.initialSelectedItems,P=void 0===F?[]:F,A=a.debounceTimeout,M=v(a,G),B=D(r,A).items,j=t.useState(P),R=j[0],V=j[1],q=c.default.useCallback((function(){V([])}),[]);function H(e){return R.some((function(t){return t.value===e.value}))}var $=n.useSelect(g({items:B,stateReducer:Y,selectedItem:null,onSelectedItemChange:function(e){var t=e.selectedItem;if(t)if(H(t)){var n=R.filter((function(e){return e.value!==t.value}));V(n),w(n)}else{var a=[].concat(R,[t]);V(a),w(a)}}},M)),z=$.isOpen,Q=$.getToggleButtonProps,W=$.getLabelProps,X=$.getMenuProps,Z=$.highlightedIndex,ee=$.getItemProps,te=$.openMenu,ne=R.length?i(R):"",ae=e.useRandomId("eds-multiselect");return c.default.createElement(K.Provider,{value:{isOpen:z,reset:q,getToggleButtonProps:Q,openMenu:te,openOnFocus:S}},c.default.createElement("div",{className:p.default("eds-multiselect","eds-dropdown-wrapper",_),style:k},c.default.createElement(l.BaseFormControl,{label:s,labelId:ae,labelProps:W(),feedback:d,variant:f,isFilled:R.length>0||z,disabled:m,readOnly:b,append:c.default.createElement(U,{hasSelected:x&&R.length>0,loading:O,loadingText:C,readOnly:b})},c.default.createElement("button",g({},Q({style:{textAlign:"left"},type:"button",className:"eds-form-control eds-multiselect__button"})),ne)),c.default.createElement("ul",g({className:p.default("eds-dropdown-list",{"eds-dropdown-list--open":z})},X({style:g({position:"absolute",top:u.space.extraLarge3+u.space.extraSmall+"px"},L)})),z&&B.map((function(e,t){return c.default.createElement("li",g({className:p.default("eds-dropdown-list__item",{"eds-dropdown-list__item--highlighted":Z===t,"eds-dropdown-list__item--selected":H(e)}),key:""+e.value+t},ee({item:e,index:t}),{style:{display:"flex"}}),c.default.createElement("span",{style:{display:"flex"}},c.default.createElement("span",{className:p.default("eds-multiselect-checkbox",{"eds-multiselect-checkbox--checked":H(e)})},c.default.createElement(J,null)),c.default.createElement("span",{className:"eds-multiselect__item-label"},e.label)),e.icons&&c.default.createElement("span",null,e.icons.map((function(e,t){return c.default.createElement(e,{key:t,inline:!0,className:"eds-dropdown-list__item-icon"})}))))})))))},exports.NativeDropdown=function(t){var n=t.className,a=t.disabled,o=void 0!==a&&a,i=t.readOnly,u=void 0!==i&&i,s=t.items,d=t.loadingText,f=t.prepend,p=t.style,m=t.label,h=t.variant,b=t.feedback,y=t.disableLabelAnimation,w=v(t,q),_=D(s),E=_.items,x=_.loading,I=c.default.createElement(r.DownArrowIcon,{inline:!0});o||u?I=null:x&&(I=c.default.createElement(C,null,d));var O=e.useRandomId("eds-native-dropdown");return c.default.createElement(l.BaseFormControl,{disabled:o,readOnly:u,prepend:f,append:I,className:n,style:p,label:m,variant:h,feedback:b,labelId:O,disableLabelAnimation:y,isFilled:!0},c.default.createElement("select",g({"aria-invalid":"error"===h,className:"eds-form-control eds-dropdown",disabled:o||u},w),E.map((function(e){return c.default.createElement("option",{key:e.value,value:e.value},e.label)}))))},exports.SearchableDropdownBeta=function(e){var a,r=e.items,o=e.selectedItem,i=e.onChange,u=e.label,s=e.placeholder,d=e.clearable,f=void 0!==d&&d,m=e.openOnFocus,h=void 0!==m&&m,b=e.readonly,y=void 0!==b&&b,w=e.feedback,_=e.variant,E=void 0===_?"info":_,x=e.className,I=e.listStyle,O=v(e,X),N=c.default.useState(r),C=N[0],T=N[1],S=t.useState(!1),k=S[0],L=S[1],F=t.useRef(null),P=c.default.useCallback((function(e,t){var a=t.changes;switch(t.type){case n.useCombobox.stateChangeTypes.ItemClick:case n.useCombobox.stateChangeTypes.InputKeyDownEnter:case n.useCombobox.stateChangeTypes.InputBlur:case n.useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:return g({},a,a.selectedItem&&{inputValue:""});default:return a}}),[]),A=n.useCombobox(g({onInputValueChange:function(e){var t=e.inputValue;T(r.filter((function(e){return function(e,t){if(!t)return!0;var n=t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&");return new RegExp(n,"i").test(e.label)}(e,t)})))},items:C,itemToString:function(e){return e?e.value:""},stateReducer:P,selectedItem:o,onSelectedItemChange:function(e){var t=e.selectedItem;return i(null!=t?t:null)}},O)),M=A.isOpen,B=A.getLabelProps,j=A.getMenuProps,D=A.getInputProps,R=A.getComboboxProps,V=A.highlightedIndex,q=A.getItemProps,G=A.selectedItem,K=A.openMenu,H=A.inputValue;return c.default.createElement("div",{className:"eds-searchable-dropdown__wrapper"},c.default.createElement(l.BaseFormControl,g({append:c.default.createElement(Z,{selectedItem:G,isOpen:M,clearable:f,loading:!1,loadingText:"",readOnly:y,onChange:i,getToggleButtonProps:A.getToggleButtonProps}),className:p.default("eds-searchable-dropdown",x),label:u,isFilled:!!G,feedback:w,variant:E,readOnly:y,labelProps:B()},R(),O),!k&&G&&!H&&c.default.createElement("span",{className:"eds-searchable-dropdown__selected-item__wrapper"},c.default.createElement("span",{className:"eds-searchable-dropdown__selected-item",onClick:function(){var e;return null==(e=F.current)?void 0:e.focus()}},G.label)),c.default.createElement("input",g({placeholder:null!=(a=null==G?void 0:G.label)?a:s,className:"eds-searchable-dropdown__input eds-form-control"},D({onFocus:function(){!M&&h&&K(),L(!0)},onBlur:function(){L(!1)},ref:F})))),c.default.createElement(W,{selectedItem:G,isOpen:M,filteredItems:C,highlightedIndex:V,listStyle:I,getMenuProps:j,getItemProps:q}))};
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@entur/utils"),t=require("react"),n=require("downshift"),a=require("classnames"),l=require("@entur/form"),r=require("@entur/icons"),o=require("@entur/a11y"),i=require("@entur/loader"),u=require("@entur/tokens"),s=require("@entur/button");function d(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=d(t),f=d(n),p=d(a);function m(){m=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,a=Object.defineProperty||function(e,t,n){e[t]=n.value},l="function"==typeof Symbol?Symbol:{},r=l.iterator||"@@iterator",o=l.asyncIterator||"@@asyncIterator",i=l.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function s(e,t,n,l){var r=Object.create((t&&t.prototype instanceof f?t:f).prototype),o=new N(l||[]);return a(r,"_invoke",{value:E(e,n,o)}),r}function d(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=s;var c={};function f(){}function p(){}function h(){}var g={};u(g,r,(function(){return this}));var b=Object.getPrototypeOf,v=b&&b(b(C([])));v&&v!==t&&n.call(v,r)&&(g=v);var y=h.prototype=f.prototype=Object.create(g);function w(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function _(e,t){function l(a,r,o,i){var u=d(e[a],e,r);if("throw"!==u.type){var s=u.arg,c=s.value;return c&&"object"==typeof c&&n.call(c,"__await")?t.resolve(c.__await).then((function(e){l("next",e,o,i)}),(function(e){l("throw",e,o,i)})):t.resolve(c).then((function(e){s.value=e,o(s)}),(function(e){return l("throw",e,o,i)}))}i(u.arg)}var r;a(this,"_invoke",{value:function(e,n){function a(){return new t((function(t,a){l(e,n,t,a)}))}return r=r?r.then(a,a):a()}})}function E(e,t,n){var a="suspendedStart";return function(l,r){if("executing"===a)throw new Error("Generator is already running");if("completed"===a){if("throw"===l)throw r;return{value:void 0,done:!0}}for(n.method=l,n.arg=r;;){var o=n.delegate;if(o){var i=x(o,n);if(i){if(i===c)continue;return i}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===a)throw a="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);a="executing";var u=d(e,t,n);if("normal"===u.type){if(a=n.done?"completed":"suspendedYield",u.arg===c)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(a="completed",n.method="throw",n.arg=u.arg)}}}function x(e,t){var n=t.method,a=e.iterator[n];if(void 0===a)return t.delegate=null,"throw"===n&&e.iterator.return&&(t.method="return",t.arg=void 0,x(e,t),"throw"===t.method)||"return"!==n&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+n+"' method")),c;var l=d(a,e.iterator,t.arg);if("throw"===l.type)return t.method="throw",t.arg=l.arg,t.delegate=null,c;var r=l.arg;return r?r.done?(t[e.resultName]=r.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,c):r:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,c)}function I(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function O(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function N(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(I,this),this.reset(!0)}function C(e){if(e){var t=e[r];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var a=-1,l=function t(){for(;++a<e.length;)if(n.call(e,a))return t.value=e[a],t.done=!1,t;return t.value=void 0,t.done=!0,t};return l.next=l}}return{next:T}}function T(){return{value:void 0,done:!0}}return p.prototype=h,a(y,"constructor",{value:h,configurable:!0}),a(h,"constructor",{value:p,configurable:!0}),p.displayName=u(h,i,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,h):(e.__proto__=h,u(e,i,"GeneratorFunction")),e.prototype=Object.create(y),e},e.awrap=function(e){return{__await:e}},w(_.prototype),u(_.prototype,o,(function(){return this})),e.AsyncIterator=_,e.async=function(t,n,a,l,r){void 0===r&&(r=Promise);var o=new _(s(t,n,a,l),r);return e.isGeneratorFunction(n)?o:o.next().then((function(e){return e.done?e.value:o.next()}))},w(y),u(y,i,"Generator"),u(y,r,(function(){return this})),u(y,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=Object(e),n=[];for(var a in t)n.push(a);return n.reverse(),function e(){for(;n.length;){var a=n.pop();if(a in t)return e.value=a,e.done=!1,e}return e.done=!0,e}},e.values=C,N.prototype={constructor:N,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(O),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function a(n,a){return o.type="throw",o.arg=e,t.next=n,a&&(t.method="next",t.arg=void 0),!!a}for(var l=this.tryEntries.length-1;l>=0;--l){var r=this.tryEntries[l],o=r.completion;if("root"===r.tryLoc)return a("end");if(r.tryLoc<=this.prev){var i=n.call(r,"catchLoc"),u=n.call(r,"finallyLoc");if(i&&u){if(this.prev<r.catchLoc)return a(r.catchLoc,!0);if(this.prev<r.finallyLoc)return a(r.finallyLoc)}else if(i){if(this.prev<r.catchLoc)return a(r.catchLoc,!0)}else{if(!u)throw new Error("try statement without catch or finally");if(this.prev<r.finallyLoc)return a(r.finallyLoc)}}}},abrupt:function(e,t){for(var a=this.tryEntries.length-1;a>=0;--a){var l=this.tryEntries[a];if(l.tryLoc<=this.prev&&n.call(l,"finallyLoc")&&this.prev<l.finallyLoc){var r=l;break}}r&&("break"===e||"continue"===e)&&r.tryLoc<=t&&t<=r.finallyLoc&&(r=null);var o=r?r.completion:{};return o.type=e,o.arg=t,r?(this.method="next",this.next=r.finallyLoc,c):this.complete(o)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),c},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),O(n),c}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var a=n.completion;if("throw"===a.type){var l=a.arg;O(n)}return l}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:C(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),c}},e}function h(e,t,n,a,l,r,o){try{var i=e[r](o),u=i.value}catch(e){return void n(e)}i.done?t(u):Promise.resolve(u).then(a,l)}function g(){return g=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},g.apply(this,arguments)}function b(e){if(null==e)throw new TypeError("Cannot destructure "+e)}function v(e,t){if(null==e)return{};var n,a,l={},r=Object.keys(e);for(a=0;a<r.length;a++)t.indexOf(n=r[a])>=0||(l[n]=e[n]);return l}var y=["children","onChange","onInputValueChange","highlightFirstItemOnOpen","className","style","searchable"],w=c.default.createContext(null),_=function(e){var t=e.children,n=e.onChange,a=void 0===n?function(){}:n,l=e.onInputValueChange,r=void 0===l?function(){}:l,o=e.highlightFirstItemOnOpen,i=void 0!==o&&o,u=e.className,s=e.style,d=e.searchable,m=void 0!==d&&d,h=v(e,y);return c.default.createElement(f.default,g({itemToString:function(e){return e?e.label:""},onStateChange:function(e,t){e.type!==f.default.stateChangeTypes.controlledPropUpdatedSelectedItem&&("selectedItem"in e?a(e.selectedItem,t):"inputValue"in e&&r(e.inputValue))},stateReducer:function(e,t){var n=i&&"isOpen"in t&&t.isOpen?{highlightedIndex:0}:{};if(!m)return g({},t,n);switch(t.type){case"__autocomplete_change_input__":default:return g({},t,n);case"__autocomplete_click_item__":case"__autocomplete_keydown_enter__":case"__autocomplete_blur_input__":case"__autocomplete_mouseup__":return g({},t,{inputValue:""},n)}}},h),(function(e){return c.default.createElement("div",{className:p.default("eds-input-group",u),style:s},c.default.createElement(w.Provider,{value:e},t))}))},E=function(){var e=c.default.useContext(w);if(!e)throw new Error("You need to wrap your component in a DownshiftProvider");return e},x=["items"],I=function(e){var t=e.items,n=v(e,x),a=E(),l=a.highlightedIndex,o=a.isOpen,i=a.selectedItem,u=a.getItemProps,s=a.getMenuProps;return c.default.createElement("ul",g({className:p.default("eds-dropdown-list",{"eds-dropdown-list--open":o})},s(),n),o?t.map((function(e,t){return c.default.createElement("li",g({className:p.default("eds-dropdown-list__item",{"eds-dropdown-list__item--highlighted":l===t,"eds-dropdown-list__item--selected":i===e})},u({key:""+t+e.value,item:e,index:t})),c.default.createElement("span",null,e.label),e.icons&&c.default.createElement("span",null,e.icons.map((function(e,t){return c.default.createElement(e,{key:t,inline:!0,className:"eds-dropdown-list__item-icon"})}))),i===e&&c.default.createElement(r.CheckIcon,null))})):null)},O=function(){var e=E();return c.default.createElement("button",g({},(0,e.getToggleButtonProps)({className:p.default("eds-dropdown__toggle-button",{"eds-dropdown__toggle-button--open":e.isOpen})}),{tabIndex:"-1",type:"button"}),c.default.createElement(r.DownArrowIcon,null))},N=["className","children"],C=function(e){var t=e.className,n=e.children,a=v(e,N);return c.default.createElement("div",g({className:p.default("eds-inline-spinner",t)},a),c.default.createElement(i.LoadingDots,null),c.default.createElement(o.VisuallyHidden,null,n))},T=["children","className","items","loading","loadingText","placeholder","style","listStyle","clearable","label","isFilled","disableLabelAnimation"],S=function(e){var t=e.children,n=e.className,a=e.items,r=e.loading,o=void 0!==r&&r,i=e.loadingText,s=void 0===i?"Loading...":i,d=e.style,f=e.listStyle,p=e.clearable,m=e.label,h=e.isFilled,b=void 0!==h&&h,y=e.disableLabelAnimation,w=v(e,T),_=E().getLabelProps;return c.default.createElement("div",{className:"eds-dropdown-wrapper",style:d},c.default.createElement(l.BaseFormControl,g({append:c.default.createElement(L,{clearable:p,loading:o,loadingText:s,readOnly:w.readOnly}),className:n,label:m,isFilled:b,labelProps:_(),disableLabelAnimation:y},w),t),c.default.createElement(I,g({items:a,style:g({position:"absolute",top:u.space.extraLarge3+u.space.extraSmall+"px"},f)},w)))},k=function(e){var t=g({},(b(e),e)),n=E(),a=n.clearSelection,l=n.selectedItem;return c.default.createElement(c.default.Fragment,null,l&&c.default.createElement("button",g({className:"eds-dropdown__clear-button",type:"button",tabIndex:-1,onClick:function(){return a()}},t),c.default.createElement(r.CloseSmallIcon,null)),l&&c.default.createElement("div",{className:"eds-dropdown__divider"}))},L=function(e){var t=e.clearable,n=e.readOnly;return e.loading?c.default.createElement(C,null,e.loadingText):n?null:t?c.default.createElement(c.default.Fragment,null,c.default.createElement(k,null)," ",c.default.createElement(O,null)):c.default.createElement(O,null)},F=["disabled","placeholder","selectOnTab","openOnFocus","listStyle","items","label","disableLabelAnimation","loading","loadingText","className","clearable"],P=c.default.forwardRef((function(e,t){var n=e.disabled,a=e.placeholder,l=void 0===a?"Vennligst velg":a,r=e.selectOnTab,o=void 0!==r&&r,i=e.openOnFocus,u=void 0!==i&&i,s=e.listStyle,d=e.items,f=e.label,p=e.disableLabelAnimation,m=e.loading,h=e.loadingText,b=e.className,y=e.clearable,w=v(e,F),_=E(),x=_.getToggleButtonProps,I=_.selectedItem,O=_.selectHighlightedItem,N=_.openMenu,C=_.isOpen,T=_.highlightedIndex,k=_.setHighlightedIndex;return c.default.createElement(S,g({disabled:n,listStyle:s,items:d,label:f,isFilled:!!I||0!==l.length,disableLabelAnimation:p,loading:m,loadingText:h,className:b,clearable:y},w),c.default.createElement("button",g({},x(g({className:"eds-form-control eds-dropdown__selected-item",style:{textAlign:"left"},disabled:n,type:"button",onKeyDown:function(e){if(o&&"Tab"===e.key&&O(),C){var t=e.key,n=d.map((function(e,t){return g({},e,{index:t})})).filter((function(e){return e.label.trim().charAt(0).toLowerCase()===t})),a=n.find((function(e){return e.index>(null!=T?T:0)}));a?k(a.index):n.length>0&&k(n[0].index)}},onFocus:function(){u&&!C&&N()}},w)),{ref:t}),I?I.label:l))})),A=["disabled","className","items","loading","loadingText","readOnly","prepend","selectOnTab","openOnFocus","listStyle","clearable","itemFilter","label","disableLabelAnimation","placeholder"],M=c.default.forwardRef((function(n,a){var l=n.disabled,r=void 0!==l&&l,o=n.className,i=n.items,u=n.loading,s=n.loadingText,d=n.readOnly,f=void 0!==d&&d,p=n.prepend,m=n.selectOnTab,h=void 0!==m&&m,b=n.openOnFocus,y=void 0!==b&&b,w=n.listStyle,_=n.clearable,x=n.itemFilter,I=void 0===x?function(e,t){return function(e,t){if(!t)return!0;var n=t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&");return new RegExp(n,"i").test(e.label)}(e,t)}:x,O=n.label,N=n.disableLabelAnimation,C=n.placeholder,T=v(n,A),k=E(),L=k.getInputProps,F=k.inputValue,P=k.selectHighlightedItem,M=k.isOpen,B=k.openMenu,j=k.closeMenu,D=k.selectedItem,R=t.useState(!1),V=R[0],q=R[1],G=t.useRef(null),K=c.default.useMemo((function(){return i.filter((function(e){return I(e,F)}))}),[F,i,I]);return c.default.createElement(S,{items:K,disabled:r,readOnly:f,className:o,loading:u,loadingText:s,prepend:p,listStyle:w,clearable:_,label:O,isFilled:!!D,disableLabelAnimation:N},!V&&D&&!F&&c.default.createElement("span",{className:"eds-dropdown__searchable-selected-item__wrapper"},c.default.createElement("span",{className:"eds-dropdown__searchable-selected-item",onClick:function(){var e;return null==(e=G.current)?void 0:e.focus()}},D.label)),c.default.createElement("input",g({},L(g({disabled:r,readOnly:f,className:"eds-form-control eds-dropdown__input",onKeyDown:function(e){h&&"Tab"===e.key&&P()},onFocus:function(){!M&&y&&B(),q(!0)},placeholder:D?D.label:C},T)),{onBlur:function(){q(!1),j()},ref:e.mergeRefs(a,G)})))})),B=function(e){var t=e.feedback,n=e.variant;return c.default.createElement(l.VariantProvider,{variant:n},c.default.createElement("div",{className:e.className,style:e.style},e.children,t&&n&&c.default.createElement(l.FeedbackText,{variant:n},t)))},j=function(e,t){switch(t.type){case"request results":return{items:[],loading:!0};case"received results":return{items:t.payload,loading:!1}}},D=function(t,n){void 0===n&&(n=250);var a,l="function"==typeof t,r=c.default.useMemo((function(){return l?t:function(){return Promise.resolve(t)}}),[t,l]),o=c.default.useReducer(j,{items:l?[]:t,loading:!1}),i=o[0],u=i.items,s=i.loading,d=o[1],f=(a=c.default.useRef(!0),c.default.useEffect((function(){return function(){a.current=!1}}),[]),a.current),p=c.default.useCallback(function(){var e,t=(e=m().mark((function e(t){var n;return m().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(f){e.next=2;break}return e.abrupt("return");case 2:return d({type:"request results"}),e.next=5,r(t);case 5:n=e.sent,f&&d({type:"received results",payload:n});case 7:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(a,l){var r=e.apply(t,n);function o(e){h(r,a,l,o,i,"next",e)}function i(e){h(r,a,l,o,i,"throw",e)}o(void 0)}))});return function(e){return t.apply(this,arguments)}}(),[r,f]),b=function(e){return c.default.useMemo((function(){return e.map((function(e){return"string"==typeof e?{value:e,label:e}:"value"in e?e:g({},e,{value:e.label})}))}),[e])}(u);return c.default.useEffect((function(){l&&p("")}),[l,p]),{items:b,loading:!!l&&s,fetchItems:e.debounce(p,n)}},R=["highlightFirstItemOnOpen","debounceTimeout","disabled","feedback","items","label","loadingText","onChange","placeholder","prepend","readOnly","searchable","selectOnTab","openOnFocus","variant","value","clearable","className","style","listStyle","itemFilter","disableLabelAnimation"],V=c.default.forwardRef((function(e,t){var n=e.highlightFirstItemOnOpen,a=e.debounceTimeout,l=e.disabled,r=e.feedback,o=e.items,i=e.label,u=e.loadingText,s=e.onChange,d=void 0===s?function(){}:s,f=e.placeholder,p=e.prepend,m=e.readOnly,h=e.searchable,b=e.selectOnTab,y=e.openOnFocus,w=e.variant,E=e.value,x=e.clearable,I=void 0!==x&&x,O=e.className,N=e.style,C=e.listStyle,T=e.itemFilter,S=e.disableLabelAnimation,k=v(e,R),L=D(o,a),F=L.items,A=L.loading,j=L.fetchItems,V=void 0===E?void 0:F.find((function(e){return E===e.value}))||null,q=h?M:P,G=h?{itemFilter:T,name:k.name,"data-cy":k["data-cy"]}:{name:k.name,"data-cy":k["data-cy"]};return c.default.createElement(_,g({selectedItem:V,onInputValueChange:j,onChange:d,value:E,highlightFirstItemOnOpen:n,className:O,style:N,searchable:h},k),c.default.createElement(B,{feedback:r,variant:w},c.default.createElement(q,g({label:i,items:F,loading:A,loadingText:u,disabled:l,readOnly:m,placeholder:f,prepend:p,selectOnTab:b,openOnFocus:y,listStyle:C,clearable:I,disableLabelAnimation:S,ref:t},G))))})),q=["className","disabled","readOnly","items","loadingText","prepend","style","label","variant","feedback","disableLabelAnimation"],G=["items","itemsSelectedLabel","label","feedback","variant","disabled","readOnly","onChange","className","clearable","loading","loadingText","openOnFocus","style","listStyle","initialSelectedItems","debounceTimeout"],K=c.default.createContext(null),H=function(){var e=c.default.useContext(K);if(!e)throw new Error("You need to wrap your component in a DownshiftProvider");return e};function Y(e,t){var a=t.changes;switch(t.type){case n.useSelect.stateChangeTypes.MenuKeyDownEnter:case n.useSelect.stateChangeTypes.MenuKeyDownSpaceButton:case n.useSelect.stateChangeTypes.ItemClick:return g({},a,{isOpen:!0,highlightedIndex:e.highlightedIndex});default:return a}}var $=function(e){var t=g({},(b(e),e)),n=H().reset;return c.default.createElement(c.default.Fragment,null,c.default.createElement("button",g({className:"eds-dropdown__clear-button",type:"button",tabIndex:-1,onClick:function(){return n()}},t),c.default.createElement(r.CloseIcon,null)),c.default.createElement("div",{className:"eds-dropdown__divider"}))},U=function(e){var t=e.readOnly,n=e.hasSelected;return e.loading?c.default.createElement(C,null,e.loadingText):t?null:n?c.default.createElement(c.default.Fragment,null,c.default.createElement($,null),c.default.createElement(z,null)):c.default.createElement(z,null)},z=function(){var e=H(),t=e.openMenu,n=e.openOnFocus;return c.default.createElement("button",g({},(0,e.getToggleButtonProps)({className:p.default("eds-dropdown__toggle-button",{"eds-dropdown__toggle-button--open":e.isOpen}),onFocus:function(){n&&t()}}),{type:"button"}),c.default.createElement(r.DownArrowIcon,null))},J=function(){return c.default.createElement("svg",{className:"eds-checkbox-icon",width:"11px",height:"9px",viewBox:"6 11 37 33"},c.default.createElement("path",{className:"eds-checkbox-icon__path",d:"M14.1 27.2l7.1 7.2 14.6-14.8",fill:"none"}))},Q=["selectedItem","isOpen","getMenuProps","getItemProps","filteredItems","highlightedIndex","listStyle"],W=function(e){var t=e.selectedItem,n=e.isOpen,a=e.getMenuProps,l=e.getItemProps,o=e.filteredItems,i=e.highlightedIndex,u=e.listStyle,s=v(e,Q);return c.default.createElement("ul",g({className:p.default("eds-searchable-dropdown__list",{"eds-searchable-dropdown__list--open":n})},a(),{style:g({},s.style,u)}),n?o.map((function(e,n){return c.default.createElement("li",g({className:p.default("eds-searchable-dropdown__list__item",{"eds-searchable-dropdown__list__item--highlighted":i===n,"eds-searchable-dropdown__list__item--selected":(null==t?void 0:t.value)===e.value})},l({key:""+n+e.value,item:e,index:n})),c.default.createElement("span",null,e.label),e.icons&&c.default.createElement("span",null,e.icons.map((function(e,t){return c.default.createElement(e,{key:t,inline:!0,className:"eds-searchable-dropdown__list__item-icon"})}))),(null==t?void 0:t.value)===e.value&&c.default.createElement(r.CheckIcon,null))})):null)},X=["items","selectedItem","onChange","label","placeholder","clearable","openOnFocus","readonly","feedback","variant","className","listStyle"],Z=function(e){var t=e.getToggleButtonProps,n=e.isOpen,a=e.onChange;return e.readOnly?null:c.default.createElement("div",{style:{display:"flex",alignItems:"center"}},e.clearable&&e.selectedItem&&c.default.createElement(c.default.Fragment,null,c.default.createElement(s.IconButton,{className:"eds-searchable-dropdown-appendix__clear-button",type:"button",tabIndex:-1,onClick:function(){return a(null)}},c.default.createElement(r.CloseSmallIcon,null)),c.default.createElement("div",{className:"eds-searchable-dropdown-appendix__divider"})),c.default.createElement(s.IconButton,g({},t({className:p.default("eds-searchable-dropdown-appendix__toggle-button",{"eds-searchable-dropdown-appendix__toggle-button--open":n})}),{tabIndex:-1,type:"button"}),c.default.createElement(r.DownArrowIcon,null)))};e.warnAboutMissingStyles("dropdown","form","a11y","chip"),exports.Dropdown=V,exports.MultiSelect=function(a){var r=a.items,o=a.itemsSelectedLabel,i=void 0===o?function(e){return function(e){return e.length<3?e.map((function(e){return e.label})).toString():e.length+" elementer valgt"}(e)}:o,s=a.label,d=a.feedback,f=a.variant,m=a.disabled,h=a.readOnly,b=void 0!==h&&h,y=a.onChange,w=void 0===y?function(){}:y,_=a.className,E=a.clearable,x=void 0!==E&&E,I=a.loading,O=void 0!==I&&I,N=a.loadingText,C=void 0===N?"":N,T=a.openOnFocus,S=void 0!==T&&T,k=a.style,L=a.listStyle,F=a.initialSelectedItems,P=void 0===F?[]:F,A=a.debounceTimeout,M=v(a,G),B=D(r,A).items,j=t.useState(P),R=j[0],V=j[1],q=c.default.useCallback((function(){V([])}),[]);function H(e){return R.some((function(t){return t.value===e.value}))}var $=n.useSelect(g({items:B,stateReducer:Y,selectedItem:null,onSelectedItemChange:function(e){var t=e.selectedItem;if(t)if(H(t)){var n=R.filter((function(e){return e.value!==t.value}));V(n),w(n)}else{var a=[].concat(R,[t]);V(a),w(a)}}},M)),z=$.isOpen,Q=$.getToggleButtonProps,W=$.getLabelProps,X=$.getMenuProps,Z=$.highlightedIndex,ee=$.getItemProps,te=$.openMenu,ne=R.length?i(R):"",ae=e.useRandomId("eds-multiselect");return c.default.createElement(K.Provider,{value:{isOpen:z,reset:q,getToggleButtonProps:Q,openMenu:te,openOnFocus:S}},c.default.createElement("div",{className:p.default("eds-multiselect","eds-dropdown-wrapper",_),style:k},c.default.createElement(l.BaseFormControl,{label:s,labelId:ae,labelProps:W(),feedback:d,variant:f,isFilled:R.length>0||z,disabled:m,readOnly:b,append:c.default.createElement(U,{hasSelected:x&&R.length>0,loading:O,loadingText:C,readOnly:b})},c.default.createElement("button",g({},Q({style:{textAlign:"left"},type:"button",className:"eds-form-control eds-multiselect__button"})),ne)),c.default.createElement("ul",g({className:p.default("eds-dropdown-list",{"eds-dropdown-list--open":z})},X({style:g({position:"absolute",top:u.space.extraLarge3+u.space.extraSmall+"px"},L)})),z&&B.map((function(e,t){return c.default.createElement("li",g({className:p.default("eds-dropdown-list__item",{"eds-dropdown-list__item--highlighted":Z===t,"eds-dropdown-list__item--selected":H(e)}),key:""+e.value+t},ee({item:e,index:t}),{style:{display:"flex"}}),c.default.createElement("span",{style:{display:"flex"}},c.default.createElement("span",{className:p.default("eds-multiselect-checkbox",{"eds-multiselect-checkbox--checked":H(e)})},c.default.createElement(J,null)),c.default.createElement("span",{className:"eds-multiselect__item-label"},e.label)),e.icons&&c.default.createElement("span",null,e.icons.map((function(e,t){return c.default.createElement(e,{key:t,inline:!0,className:"eds-dropdown-list__item-icon"})}))))})))))},exports.NativeDropdown=function(t){var n=t.className,a=t.disabled,o=void 0!==a&&a,i=t.readOnly,u=void 0!==i&&i,s=t.items,d=t.loadingText,f=t.prepend,p=t.style,m=t.label,h=t.variant,b=t.feedback,y=t.disableLabelAnimation,w=v(t,q),_=D(s),E=_.items,x=_.loading,I=c.default.createElement(r.DownArrowIcon,{inline:!0,"aria-hidden":"true"});o||u?I=null:x&&(I=c.default.createElement(C,{"aria-hidden":"true"},d));var O=e.useRandomId("eds-native-dropdown");return c.default.createElement(l.BaseFormControl,{disabled:o,readOnly:u,prepend:f,append:I,className:n,style:p,label:m,labelId:O,variant:h,feedback:b,disableLabelAnimation:y,isFilled:!0},c.default.createElement("select",g({"aria-invalid":"error"===h,"aria-labelledby":O,"aria-busy":x,className:"eds-form-control eds-dropdown",disabled:o||u},w),E.map((function(e){return c.default.createElement("option",{key:e.value,value:e.value},e.label)}))))},exports.SearchableDropdownBeta=function(e){var a,r=e.items,o=e.selectedItem,i=e.onChange,u=e.label,s=e.placeholder,d=e.clearable,f=void 0!==d&&d,m=e.openOnFocus,h=void 0!==m&&m,b=e.readonly,y=void 0!==b&&b,w=e.feedback,_=e.variant,E=void 0===_?"info":_,x=e.className,I=e.listStyle,O=v(e,X),N=c.default.useState(r),C=N[0],T=N[1],S=t.useState(!1),k=S[0],L=S[1],F=t.useRef(null),P=c.default.useCallback((function(e,t){var a=t.changes;switch(t.type){case n.useCombobox.stateChangeTypes.ItemClick:case n.useCombobox.stateChangeTypes.InputKeyDownEnter:case n.useCombobox.stateChangeTypes.InputBlur:case n.useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:return g({},a,a.selectedItem&&{inputValue:""});default:return a}}),[]),A=n.useCombobox(g({onInputValueChange:function(e){var t=e.inputValue;T(r.filter((function(e){return function(e,t){if(!t)return!0;var n=t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&");return new RegExp(n,"i").test(e.label)}(e,t)})))},items:C,itemToString:function(e){return e?e.value:""},stateReducer:P,selectedItem:o,onSelectedItemChange:function(e){var t=e.selectedItem;return i(null!=t?t:null)}},O)),M=A.isOpen,B=A.getLabelProps,j=A.getMenuProps,D=A.getInputProps,R=A.getComboboxProps,V=A.highlightedIndex,q=A.getItemProps,G=A.selectedItem,K=A.openMenu,H=A.inputValue;return c.default.createElement("div",{className:"eds-searchable-dropdown__wrapper"},c.default.createElement(l.BaseFormControl,g({append:c.default.createElement(Z,{selectedItem:G,isOpen:M,clearable:f,loading:!1,loadingText:"",readOnly:y,onChange:i,getToggleButtonProps:A.getToggleButtonProps}),className:p.default("eds-searchable-dropdown",x),label:u,isFilled:!!G,feedback:w,variant:E,readOnly:y,labelProps:B()},R(),O),!k&&G&&!H&&c.default.createElement("span",{className:"eds-searchable-dropdown__selected-item__wrapper"},c.default.createElement("span",{className:"eds-searchable-dropdown__selected-item",onClick:function(){var e;return null==(e=F.current)?void 0:e.focus()}},G.label)),c.default.createElement("input",g({placeholder:null!=(a=null==G?void 0:G.label)?a:s,className:"eds-searchable-dropdown__input eds-form-control"},D({onFocus:function(){!M&&h&&K(),L(!0)},onBlur:function(){L(!1)},ref:F})))),c.default.createElement(W,{selectedItem:G,isOpen:M,filteredItems:C,highlightedIndex:V,listStyle:I,getMenuProps:j,getItemProps:q}))};
|
|
2
2
|
//# sourceMappingURL=dropdown.cjs.production.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown.cjs.production.min.js","sources":["../src/DownshiftProvider.tsx","../src/DropdownList.tsx","../src/DropdownToggleButton.tsx","../src/DropdownLoadingDots.tsx","../src/BaseDropdown.tsx","../src/RegularDropdown.tsx","../src/SearchableDropdown.tsx","../src/DropdownInputGroup.tsx","../src/useResolvedItems.ts","../src/useNormalizedItems.ts","../src/Dropdown.tsx","../src/MultiSelect.tsx","../src/beta/DropdownList.tsx","../src/beta/SearchableDropdown.tsx","../src/index.tsx","../src/NativeDropdown.tsx"],"sourcesContent":["import React from 'react';\nimport Downshift, {\n ControllerStateAndHelpers,\n DownshiftState,\n StateChangeOptions,\n} from 'downshift';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport classNames from 'classnames';\n\nconst DownshiftContext =\n React.createContext<ControllerStateAndHelpers<NormalizedDropdownItemType> | null>(\n null,\n );\n\nexport type DownshiftProviderProps = {\n onChange?: (\n selectedItem: NormalizedDropdownItemType,\n stateAndHelpers: ControllerStateAndHelpers<NormalizedDropdownItemType>,\n ) => void;\n onInputValueChange?: (value: string) => void;\n inputValue?: string;\n initialSelectedItem?: NormalizedDropdownItemType;\n highlightFirstItemOnOpen?: boolean;\n className?: string;\n style?: React.CSSProperties;\n searchable?: boolean;\n [key: string]: any;\n};\nexport const DownshiftProvider: React.FC<DownshiftProviderProps> = ({\n children,\n onChange = () => undefined,\n onInputValueChange = () => undefined,\n highlightFirstItemOnOpen = false,\n className,\n style,\n searchable = false,\n ...rest\n}) => {\n const handleStateChange = (\n changes: any,\n stateAndHelpers: ControllerStateAndHelpers<NormalizedDropdownItemType>,\n ) => {\n if (\n changes.type ===\n Downshift.stateChangeTypes.controlledPropUpdatedSelectedItem\n ) {\n return;\n }\n if ('selectedItem' in changes) {\n onChange(changes.selectedItem, stateAndHelpers);\n } else if ('inputValue' in changes) {\n onInputValueChange(changes.inputValue);\n }\n };\n\n const stateReducer = (\n _: DownshiftState<NormalizedDropdownItemType>,\n changes: StateChangeOptions<NormalizedDropdownItemType>,\n ): Partial<StateChangeOptions<NormalizedDropdownItemType>> => {\n const highlightFirstOnOpen =\n highlightFirstItemOnOpen && 'isOpen' in changes && changes.isOpen;\n const highlightFirstItemIndex: Partial<\n StateChangeOptions<NormalizedDropdownItemType>\n > = highlightFirstOnOpen ? { highlightedIndex: 0 } : {};\n\n if (searchable) {\n const { type } = changes;\n\n switch (type) {\n case '__autocomplete_change_input__':\n return {\n // return normal changes.\n ...changes,\n ...highlightFirstItemIndex,\n };\n case '__autocomplete_click_item__':\n case '__autocomplete_keydown_enter__':\n case '__autocomplete_blur_input__':\n case '__autocomplete_mouseup__':\n return {\n ...changes,\n // if we had an item highlighted in the previous state.\n // we will reset input field value to blank\n inputValue: '',\n ...highlightFirstItemIndex,\n };\n default:\n return {\n ...changes,\n ...highlightFirstItemIndex,\n };\n }\n } else {\n return { ...changes, ...highlightFirstItemIndex };\n }\n };\n\n return (\n <Downshift\n itemToString={item => (item ? item.label : '')}\n onStateChange={handleStateChange}\n stateReducer={stateReducer}\n {...rest}\n >\n {args => (\n <div className={classNames('eds-input-group', className)} style={style}>\n {/* This div is required by Downshift */}\n <DownshiftContext.Provider value={args}>\n {children}\n </DownshiftContext.Provider>\n </div>\n )}\n </Downshift>\n );\n};\n\nexport const useDownshift: () => ControllerStateAndHelpers<NormalizedDropdownItemType> =\n () => {\n const context = React.useContext(DownshiftContext);\n if (!context) {\n throw new Error('You need to wrap your component in a DownshiftProvider');\n }\n return context;\n };\n","import React from 'react';\nimport classNames from 'classnames';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { useDownshift } from './DownshiftProvider';\nimport { CheckIcon } from '@entur/icons';\nimport './DropdownList.scss';\n\nexport type DropdownListProps = {\n items: NormalizedDropdownItemType[];\n [key: string]: any;\n};\n\nexport const DropdownList: React.FC<DropdownListProps> = ({\n items,\n ...rest\n}) => {\n const { highlightedIndex, isOpen, selectedItem, getItemProps, getMenuProps } =\n useDownshift();\n\n return (\n <ul\n className={classNames('eds-dropdown-list', {\n 'eds-dropdown-list--open': isOpen,\n })}\n {...getMenuProps()}\n {...rest}\n >\n {isOpen\n ? items.map((item, index) => (\n // eslint-disable-next-line react/jsx-key\n <li\n className={classNames('eds-dropdown-list__item', {\n 'eds-dropdown-list__item--highlighted':\n highlightedIndex === index,\n 'eds-dropdown-list__item--selected': selectedItem === item,\n })}\n {...getItemProps({ key: `${index}${item.value}`, item, index })}\n >\n <span>{item.label}</span>\n {item.icons && (\n <span>\n {item.icons.map((Icon, index) => (\n <Icon\n key={index}\n inline\n className=\"eds-dropdown-list__item-icon\"\n />\n ))}\n </span>\n )}\n {selectedItem === item && <CheckIcon />}\n </li>\n ))\n : null}\n </ul>\n );\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport { DownArrowIcon } from '@entur/icons';\nimport { useDownshift } from './DownshiftProvider';\nimport './DropdownToggleButton.scss';\n\nexport const DropdownToggleButton: () => JSX.Element = () => {\n const { getToggleButtonProps, isOpen } = useDownshift();\n return (\n <button\n {...getToggleButtonProps({\n className: classNames('eds-dropdown__toggle-button', {\n 'eds-dropdown__toggle-button--open': isOpen,\n }),\n })}\n tabIndex=\"-1\"\n type=\"button\"\n >\n <DownArrowIcon />\n </button>\n );\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport { VisuallyHidden } from '@entur/a11y';\nimport { LoadingDots } from '@entur/loader';\nimport './InlineSpinner.scss';\n\nexport type InlineSpinnerType = {\n /** Ekstra klassenavn */\n className?: string;\n /** Tekst for skjermlesere */\n children: string;\n [key: string]: any;\n};\nexport const DropdownLoadingDots: React.FC<InlineSpinnerType> = ({\n className,\n children,\n ...rest\n}) => (\n <div className={classNames('eds-inline-spinner', className)} {...rest}>\n <LoadingDots />\n <VisuallyHidden>{children}</VisuallyHidden>\n </div>\n);\n","import React from 'react';\nimport { BaseFormControl } from '@entur/form';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { DropdownList } from './DropdownList';\nimport { DropdownToggleButton } from './DropdownToggleButton';\nimport { DropdownLoadingDots } from './DropdownLoadingDots';\nimport { CloseSmallIcon } from '@entur/icons';\nimport './BaseDropdown.scss';\nimport { useDownshift } from './DownshiftProvider';\nimport { space } from '@entur/tokens';\n\ntype BaseDropdownProps = {\n className?: string;\n disabled?: boolean;\n items: NormalizedDropdownItemType[];\n loading?: boolean;\n loadingText?: string;\n placeholder?: string;\n style?: { [key: string]: any };\n listStyle?: { [key: string]: any };\n isFilled?: boolean;\n disableLabelAnimation?: boolean;\n [key: string]: any;\n};\nexport const BaseDropdown: React.FC<BaseDropdownProps> = ({\n children,\n className,\n items,\n loading = false,\n loadingText = 'Loading...',\n //eslint-disable-next-line\n placeholder,\n style,\n listStyle,\n clearable,\n label,\n isFilled = false,\n disableLabelAnimation,\n ...rest\n}) => {\n const { getLabelProps } = useDownshift();\n return (\n <div className=\"eds-dropdown-wrapper\" style={style}>\n {/* eslint-disable-next-line @typescript-eslint/ban-ts-comment */}\n {/* @ts-ignore */}\n <BaseFormControl\n append={\n <Appendix\n clearable={clearable}\n loading={loading}\n loadingText={loadingText}\n readOnly={...rest.readOnly}\n />\n }\n className={className}\n label={label}\n isFilled={isFilled}\n labelProps={getLabelProps()}\n disableLabelAnimation={disableLabelAnimation}\n {...rest}\n >\n {children}\n </BaseFormControl>\n <DropdownList\n items={items}\n style={{\n position: 'absolute',\n top: `${space.extraLarge3 + space.extraSmall}px`,\n ...listStyle,\n }}\n {...rest}\n />\n </div>\n );\n};\n\nconst ClearButton: React.FC<{ [key: string]: any }> = ({ ...props }) => {\n const { clearSelection, selectedItem } = useDownshift();\n return (\n <>\n {selectedItem && (\n <button\n className=\"eds-dropdown__clear-button\"\n type=\"button\"\n tabIndex={-1}\n onClick={() => clearSelection()}\n {...props}\n >\n <CloseSmallIcon />\n </button>\n )}\n {selectedItem && <div className=\"eds-dropdown__divider\"></div>}\n </>\n );\n};\n\nconst Appendix: React.FC<{\n clearable: boolean;\n loading: boolean;\n loadingText: string;\n readOnly: boolean;\n}> = ({ clearable, loading, loadingText, readOnly }) => {\n if (loading) {\n return <DropdownLoadingDots>{loadingText}</DropdownLoadingDots>;\n }\n if (readOnly) {\n return null;\n }\n return clearable ? (\n <>\n <ClearButton></ClearButton> <DropdownToggleButton />\n </>\n ) : (\n <DropdownToggleButton />\n );\n};\n","import React from 'react';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { useDownshift } from './DownshiftProvider';\nimport { BaseDropdown } from './BaseDropdown';\n\ntype RegularDropdownProps = {\n items: NormalizedDropdownItemType[];\n disabled?: boolean;\n placeholder?: string;\n loading?: boolean;\n loadingText?: string;\n className?: string;\n selectOnTab?: boolean;\n openOnFocus?: boolean;\n listStyle?: { [key: string]: any };\n disableLabelAnimation?: boolean;\n clearable?: boolean;\n [key: string]: any;\n};\nexport const RegularDropdown: React.FC<RegularDropdownProps> = React.forwardRef<\n HTMLButtonElement,\n RegularDropdownProps\n>(\n (\n {\n disabled,\n placeholder = 'Vennligst velg',\n selectOnTab = false,\n openOnFocus = false,\n listStyle,\n items,\n label,\n disableLabelAnimation,\n loading,\n loadingText,\n className,\n clearable,\n ...rest\n },\n ref,\n ) => {\n const {\n getToggleButtonProps,\n selectedItem,\n selectHighlightedItem,\n openMenu,\n isOpen,\n highlightedIndex,\n setHighlightedIndex,\n } = useDownshift();\n return (\n <BaseDropdown\n disabled={disabled}\n listStyle={listStyle}\n items={items}\n label={label}\n isFilled={selectedItem ? true : placeholder.length !== 0}\n disableLabelAnimation={disableLabelAnimation}\n loading={loading}\n loadingText={loadingText}\n className={className}\n clearable={clearable}\n {...rest}\n >\n <button\n {...getToggleButtonProps({\n className: 'eds-form-control eds-dropdown__selected-item',\n style: { textAlign: 'left' },\n disabled,\n type: 'button',\n onKeyDown: e => {\n if (selectOnTab && e.key === 'Tab') {\n selectHighlightedItem();\n }\n\n if (isOpen) {\n const keyDownValue = e.key;\n const matchedItems = items\n .map((item, index) => ({ ...item, index }))\n .filter(item => {\n const firstCharacter = item.label\n .trim()\n .charAt(0)\n .toLowerCase();\n return firstCharacter === keyDownValue;\n });\n\n const nextHighlightItem = matchedItems.find(\n item => item.index > (highlightedIndex ?? 0),\n );\n\n if (nextHighlightItem) {\n setHighlightedIndex(nextHighlightItem.index);\n } else if (matchedItems.length > 0) {\n setHighlightedIndex(matchedItems[0].index);\n }\n }\n },\n onFocus: () => {\n if (openOnFocus) {\n !isOpen && openMenu();\n }\n },\n ...rest,\n })}\n ref={ref}\n >\n {selectedItem ? selectedItem.label : placeholder}\n </button>\n </BaseDropdown>\n );\n },\n);\n","import React, { useRef, useState } from 'react';\nimport { mergeRefs } from '@entur/utils';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { BaseDropdown } from './BaseDropdown';\nimport { useDownshift } from './DownshiftProvider';\nimport './SearchableDropdown.scss';\n\ntype SearchableDropdownProps = {\n className?: string;\n disabled?: boolean;\n items: NormalizedDropdownItemType[];\n loading?: boolean;\n loadingText?: string;\n placeholder?: string;\n prepend?: React.ReactNode;\n readOnly?: boolean;\n selectOnTab?: boolean;\n openOnFocus?: boolean;\n listStyle?: { [key: string]: any };\n clearable: boolean;\n itemFilter?: (item: NormalizedDropdownItemType) => boolean;\n disableLabelAnimation?: boolean;\n [key: string]: any;\n};\n\nfunction LowerCaseFilterTest(\n item: NormalizedDropdownItemType,\n input: string | null,\n) {\n if (!input) {\n return true;\n }\n const sanitizeEscapeCharacters = input.replace(\n /[-/\\\\^$*+?.()|[\\]{}]/g,\n '\\\\$&',\n );\n const inputRegex = new RegExp(sanitizeEscapeCharacters, 'i');\n return inputRegex.test(item.label);\n}\n\nexport const SearchableDropdown: React.FC<SearchableDropdownProps> =\n React.forwardRef<HTMLInputElement, SearchableDropdownProps>(\n (\n {\n disabled = false,\n className,\n items,\n loading,\n loadingText,\n readOnly = false,\n prepend,\n selectOnTab = false,\n openOnFocus = false,\n listStyle,\n clearable,\n itemFilter = (\n item: NormalizedDropdownItemType,\n inputValue: string | null,\n ) => LowerCaseFilterTest(item, inputValue),\n label,\n disableLabelAnimation,\n placeholder,\n ...rest\n },\n ref,\n ) => {\n const {\n getInputProps,\n inputValue,\n selectHighlightedItem,\n isOpen,\n openMenu,\n closeMenu,\n selectedItem,\n } = useDownshift();\n\n const [hideSelectedItem, setHideSelectedItem] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const filteredItems = React.useMemo(() => {\n return items.filter(item => itemFilter(item, inputValue));\n }, [inputValue, items, itemFilter]);\n\n return (\n <BaseDropdown\n items={filteredItems}\n disabled={disabled}\n readOnly={readOnly}\n className={className}\n loading={loading}\n loadingText={loadingText}\n prepend={prepend}\n listStyle={listStyle}\n clearable={clearable}\n label={label}\n isFilled={selectedItem ? true : false}\n disableLabelAnimation={disableLabelAnimation}\n >\n {!hideSelectedItem && selectedItem && !inputValue && (\n <span className=\"eds-dropdown__searchable-selected-item__wrapper\">\n <span\n className=\"eds-dropdown__searchable-selected-item\"\n onClick={() => inputRef.current?.focus()}\n >\n {selectedItem.label}\n </span>\n </span>\n )}\n <input\n {...getInputProps({\n disabled,\n readOnly,\n className: 'eds-form-control eds-dropdown__input',\n onKeyDown: e => {\n if (selectOnTab && e.key === 'Tab') selectHighlightedItem();\n },\n onFocus: () => {\n if (!isOpen && openOnFocus) openMenu();\n setHideSelectedItem(true);\n },\n placeholder: selectedItem ? selectedItem.label : placeholder,\n ...rest,\n })}\n onBlur={() => {\n setHideSelectedItem(false);\n closeMenu();\n }}\n ref={mergeRefs<HTMLInputElement>(ref, inputRef)}\n />\n </BaseDropdown>\n );\n },\n );\n","import { FeedbackText, VariantProvider, VariantType } from '@entur/form';\nimport React from 'react';\n\nexport type DropdownInputGroupProps = {\n feedback?: string;\n variant?: VariantType;\n className?: string;\n style?: { [key: string]: any };\n};\nexport const DropdownInputGroup: React.FC<DropdownInputGroupProps> = ({\n children,\n feedback,\n variant,\n className,\n style,\n}) => {\n return (\n <VariantProvider variant={variant}>\n <div className={className} style={style}>\n {children}\n {feedback && variant && (\n <FeedbackText variant={variant}>{feedback}</FeedbackText>\n )}\n </div>\n </VariantProvider>\n );\n};\n","import React from 'react';\nimport { debounce } from '@entur/utils';\nimport {\n DropdownItemType,\n NormalizedDropdownItemType,\n useNormalizedItems,\n} from './useNormalizedItems';\n\nconst useIsMounted = () => {\n const isMountedRef = React.useRef(true);\n React.useEffect(() => {\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n return isMountedRef.current;\n};\n\ntype AsyncDropdownItemType = (inputType: string) => Promise<DropdownItemType[]>;\ntype SyncDropdownItemType = (inputType: string) => DropdownItemType[];\nexport type PotentiallyAsyncDropdownItemType =\n | DropdownItemType[]\n | SyncDropdownItemType\n | AsyncDropdownItemType;\n\ntype ResolverState = {\n items: DropdownItemType[];\n loading: boolean;\n};\n\ntype ResolverAction =\n | {\n type: 'request results';\n }\n | {\n type: 'received results';\n payload: DropdownItemType[];\n };\n\nconst reducer = (_state: ResolverState, action: ResolverAction) => {\n switch (action.type) {\n case 'request results':\n return { items: [], loading: true };\n case 'received results':\n return { items: action.payload, loading: false };\n }\n};\n\nexport const useResolvedItems = (\n /** The list of items, or an async function that resolves the list of items */\n itemsOrItemsResolver: PotentiallyAsyncDropdownItemType,\n /** The time to wait after the input changes to the fetchItems method is called */\n debounceTimeout = 250,\n): {\n fetchItems: (arg: string) => void;\n loading: boolean;\n items: NormalizedDropdownItemType[];\n} => {\n const isItemsFunction = typeof itemsOrItemsResolver === 'function';\n\n // Here, we normalize the itemsResolver argument to an async function, so we\n // can use it without thinking about the differences later\n const itemsResolver = React.useMemo(\n () =>\n isItemsFunction\n ? (itemsOrItemsResolver as AsyncDropdownItemType)\n : () => Promise.resolve(itemsOrItemsResolver as DropdownItemType[]),\n [itemsOrItemsResolver, isItemsFunction],\n );\n\n const [{ items, loading }, dispatch] = React.useReducer(reducer, {\n items: isItemsFunction ? [] : (itemsOrItemsResolver as DropdownItemType[]),\n loading: false,\n });\n\n // This is a way to check whether or not the dropdown is still in the\n // document. We use it below to make sure we're not updating the state of\n // an unmounted component.\n const isMounted = useIsMounted();\n\n // Next, let's create the fetching function. This should be called whenever\n // the input value changes\n const fetchItems = React.useCallback(\n async (inputValue: string) => {\n if (!isMounted) {\n return;\n }\n dispatch({ type: 'request results' });\n const resolvedItems = await itemsResolver(inputValue);\n if (isMounted) {\n dispatch({ type: 'received results', payload: resolvedItems });\n }\n },\n [itemsResolver, isMounted],\n );\n\n const normalizedItems = useNormalizedItems(items);\n React.useEffect(() => {\n // Let's fetch the list initially if it's specified\n if (isItemsFunction) {\n fetchItems('');\n }\n }, [isItemsFunction, fetchItems]);\n\n return {\n items: normalizedItems,\n loading: isItemsFunction ? loading : false,\n fetchItems: debounce(fetchItems, debounceTimeout),\n };\n};\n","import React from 'react';\n\n/** A dropdown item has a string label and a string value */\nexport type NormalizedDropdownItemType = {\n value: string;\n label: string;\n icons?: React.ComponentType<any>[];\n};\n\nexport type DropdownItemType =\n | { value?: string; label: string; icons?: React.ComponentType<any>[] }\n | string;\nexport const useNormalizedItems = (\n items: DropdownItemType[],\n): NormalizedDropdownItemType[] =>\n React.useMemo(\n () =>\n items.map(item => {\n if (typeof item == 'string') {\n return { value: item, label: item };\n }\n\n if (!('value' in item)) {\n return { ...item, value: item.label };\n }\n return item as NormalizedDropdownItemType;\n }),\n [items],\n );\n","import React from 'react';\nimport { VariantType } from '@entur/form';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { RegularDropdown } from './RegularDropdown';\nimport { DownshiftProvider } from './DownshiftProvider';\nimport { SearchableDropdown } from './SearchableDropdown';\nimport { DropdownInputGroup } from './DropdownInputGroup';\nimport {\n useResolvedItems,\n PotentiallyAsyncDropdownItemType,\n} from './useResolvedItems';\n\nexport type DropdownProps = {\n /** Beskrivende tekst som forklarer feltet */\n label: string;\n /** Tilgjengelige valg i dropdownen */\n items: PotentiallyAsyncDropdownItemType;\n /** Valgt verdi. Bruk null for ingen verdi. */\n value?: string | null;\n /** Om man skal kunne søke i dropdownen eller ikke */\n searchable?: boolean;\n /** Tooltip for labelen */\n labelTooltip?: string;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Tekst eller ikon som kommer før dropdownen */\n prepend?: React.ReactNode;\n /** Deaktiver dropdownen */\n disabled?: boolean;\n /** Setter dropdownen i read-only modus */\n readOnly?: boolean;\n /** Placeholder-tekst når ingenting er satt */\n placeholder?: string;\n /** En tekst som beskriver hva som skjer når man venter på items */\n loadingText?: string;\n /** Callback når brukeren endrer valg */\n onChange?: (selectedItem: NormalizedDropdownItemType | null) => void;\n /** Lar brukeren velge ved å \"tæbbe\" seg ut av komponenten */\n selectOnTab?: boolean;\n /** Om man skal vise items ved fokusering av input-feltet, før man skriver inn noe */\n openOnFocus?: boolean;\n /** Antall millisekunder man venter før man kaller en potensiell items-funksjon */\n debounceTimeout?: number;\n /** Om man skal ha muliget for å nullstille Dropdownen\n * @default false\n */\n clearable?: boolean;\n /** Ekstra klassenavn */\n className?: string;\n /** Marker første valgmulighet automatisk */\n highlightFirstItemOnOpen?: boolean;\n /** Styling som sendes ned til Dropdown-lista */\n listStyle?: { [key: string]: any };\n /** Filtreringen som blir brukt dersom man har en searchable Dropdown\n * @default Enkel tekstsammenligning\n */\n itemFilter?: (item: NormalizedDropdownItemType) => boolean;\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n /** Alle ekstra props videresendes til Downshift */\n [key: string]: any;\n};\nexport const Dropdown: React.FC<DropdownProps> = React.forwardRef<\n HTMLInputElement | HTMLButtonElement,\n DropdownProps\n>(\n (\n {\n highlightFirstItemOnOpen,\n debounceTimeout,\n disabled,\n feedback,\n items,\n label,\n loadingText,\n onChange = () => undefined,\n placeholder,\n prepend,\n readOnly,\n searchable,\n selectOnTab,\n openOnFocus,\n variant,\n value,\n clearable = false,\n className,\n style,\n listStyle,\n itemFilter,\n disableLabelAnimation,\n ...rest\n },\n ref,\n ) => {\n const {\n items: normalizedItems,\n loading,\n fetchItems,\n } = useResolvedItems(items, debounceTimeout);\n\n const selectedItem =\n value === undefined\n ? undefined\n : normalizedItems.find(item => value === item.value) || null;\n\n const RenderedDropdown = searchable ? SearchableDropdown : RegularDropdown;\n const searchAbleProps = searchable\n ? { itemFilter: itemFilter, name: rest.name, 'data-cy': rest['data-cy'] }\n : { name: rest.name, 'data-cy': rest['data-cy'] };\n return (\n <DownshiftProvider\n selectedItem={selectedItem}\n onInputValueChange={fetchItems}\n onChange={onChange}\n value={value}\n highlightFirstItemOnOpen={highlightFirstItemOnOpen}\n className={className}\n style={style}\n searchable={searchable}\n {...rest}\n >\n <DropdownInputGroup feedback={feedback} variant={variant}>\n <RenderedDropdown\n label={label}\n items={normalizedItems}\n loading={loading}\n loadingText={loadingText}\n disabled={disabled}\n readOnly={readOnly}\n placeholder={placeholder}\n prepend={prepend}\n selectOnTab={selectOnTab}\n openOnFocus={openOnFocus}\n listStyle={listStyle}\n clearable={clearable}\n disableLabelAnimation={disableLabelAnimation}\n ref={ref}\n {...searchAbleProps}\n />\n </DropdownInputGroup>\n </DownshiftProvider>\n );\n },\n);\n","import React, { useState } from 'react';\nimport {\n useSelect,\n UseSelectProps,\n // StateChangeOptions,\n // UseSelectStateChangeOptions,\n} from 'downshift';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { BaseFormControl, VariantType } from '@entur/form';\nimport {\n PotentiallyAsyncDropdownItemType,\n useResolvedItems,\n} from './useResolvedItems';\nimport { DropdownLoadingDots } from './DropdownLoadingDots';\nimport { useRandomId } from '@entur/utils';\nimport classNames from 'classnames';\nimport { CloseIcon, DownArrowIcon } from '@entur/icons';\nimport { space } from '@entur/tokens';\nimport './MultiSelect.scss';\nimport './DropdownList.scss';\n\nconst MultiSelectContext = React.createContext<{\n isOpen: boolean;\n reset: () => void;\n getToggleButtonProps: any;\n openMenu: () => void;\n openOnFocus?: boolean;\n} | null>(null);\nconst useMultiSelectContext = () => {\n const context = React.useContext(MultiSelectContext);\n if (!context) {\n throw new Error('You need to wrap your component in a DownshiftProvider');\n }\n return context;\n};\n\nfunction stateReducer(\n state: any, //StateChangeOptions<NormalizedDropdownItemType>,\n actionAndChanges: any, //UseSelectStateChangeOptions<NormalizedDropdownItemType>,\n) {\n const { changes, type } = actionAndChanges;\n switch (type) {\n case useSelect.stateChangeTypes.MenuKeyDownEnter:\n case useSelect.stateChangeTypes.MenuKeyDownSpaceButton:\n case useSelect.stateChangeTypes.ItemClick:\n return {\n ...changes,\n isOpen: true, // keep menu open after selection.\n highlightedIndex: state.highlightedIndex,\n };\n default:\n return changes;\n }\n}\ntype MultiSelectProps = {\n /** Tilgjengelige valg i MultiSelect */\n items: PotentiallyAsyncDropdownItemType;\n /** Tekst som vises i boksen når elementer er valgt */\n itemsSelectedLabel?: (\n selectedItems: NormalizedDropdownItemType[],\n numberOfItems?: number,\n ) => string;\n /** Beskrivende tekst som forklarer feltet */\n label?: string;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Tekst eller ikon som kommer før MultiSelect */\n prepend?: React.ReactNode;\n /** Deaktiver dropdownen */\n disabled?: boolean;\n /** Setter dropdownen i read-only modus */\n readOnly?: boolean;\n /** Placeholder-tekst når ingenting er satt */\n placeholder?: string;\n /** En tekst som beskriver hva som skjer når man venter på items */\n loadingText?: string;\n /** Callback når brukeren endrer valg */\n onChange?: (e: any) => void;\n /** Om man skal vise items ved fokusering av input-feltet, før man skriver inn noe\n * @default false\n */\n openOnFocus?: boolean;\n /** Ekstra klassenavn */\n className?: string;\n /** Styling som sendes ned til MultiSelect-lista */\n listStyle?: { [key: string]: any };\n /** Antall millisekunder man venter før man kaller en potensiell items-funksjon\n * @default 250\n */\n debounceTimeout?: number;\n /** Om man skal ha muliget for å nullstille Dropdownen\n * @default false\n */\n clearable?: boolean;\n loading?: boolean;\n style?: React.CSSProperties;\n initialSelectedItems?: NormalizedDropdownItemType[];\n} & Omit<\n UseSelectProps<NormalizedDropdownItemType>,\n 'initialSelectedItem' | 'items'\n>;\n\nexport const MultiSelect: React.FC<MultiSelectProps> = ({\n items: input,\n itemsSelectedLabel = items => SelectedItemsLabel(items),\n label,\n feedback,\n variant,\n disabled,\n readOnly = false,\n onChange = () => undefined,\n className,\n clearable = false,\n loading = false,\n loadingText = '',\n openOnFocus = false,\n style,\n listStyle,\n initialSelectedItems = [],\n debounceTimeout,\n ...rest\n}) => {\n const { items } = useResolvedItems(input, debounceTimeout);\n const [selectedItems, setSelectedItems] =\n useState<NormalizedDropdownItemType[]>(initialSelectedItems);\n\n const reset = React.useCallback(() => {\n setSelectedItems([]);\n }, []);\n\n function isSelected(selectedCheckboxItem: NormalizedDropdownItemType) {\n return selectedItems.some(\n selected => selected.value === selectedCheckboxItem.value,\n );\n }\n\n const {\n isOpen,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n highlightedIndex,\n getItemProps,\n openMenu,\n } = useSelect<NormalizedDropdownItemType>({\n items,\n stateReducer,\n selectedItem: null,\n onSelectedItemChange: ({ selectedItem }) => {\n if (!selectedItem) {\n return;\n }\n const itemIsFound = isSelected(selectedItem);\n if (itemIsFound) {\n const slicedItemList = selectedItems.filter(\n item => item.value !== selectedItem.value,\n );\n setSelectedItems(slicedItemList);\n onChange(slicedItemList);\n } else {\n const slicedItemList = [...selectedItems, selectedItem];\n setSelectedItems(slicedItemList);\n onChange(slicedItemList);\n }\n },\n ...rest,\n });\n const buttonText = selectedItems.length\n ? itemsSelectedLabel(selectedItems)\n : '';\n const multiSelectId = useRandomId('eds-multiselect');\n\n return (\n <MultiSelectContext.Provider\n value={{ isOpen, reset, getToggleButtonProps, openMenu, openOnFocus }}\n >\n <div\n className={classNames(\n 'eds-multiselect',\n 'eds-dropdown-wrapper',\n className,\n )}\n style={style}\n >\n <BaseFormControl\n label={label}\n labelId={multiSelectId}\n labelProps={...getLabelProps()}\n feedback={feedback}\n variant={variant}\n isFilled={selectedItems.length > 0 || isOpen}\n disabled={disabled}\n readOnly={readOnly}\n append={\n <Appendix\n hasSelected={clearable && selectedItems.length > 0}\n loading={loading}\n loadingText={loadingText}\n readOnly={readOnly}\n />\n }\n >\n <button\n {...getToggleButtonProps({\n style: {\n textAlign: 'left',\n },\n type: 'button',\n className: 'eds-form-control eds-multiselect__button',\n })}\n >\n {buttonText}\n </button>\n </BaseFormControl>\n <ul\n className={classNames('eds-dropdown-list', {\n 'eds-dropdown-list--open': isOpen,\n })}\n {...getMenuProps({\n style: {\n position: 'absolute',\n top: `${space.extraLarge3 + space.extraSmall}px`,\n ...listStyle,\n },\n })}\n >\n {isOpen &&\n items.map((item, index) => (\n <li\n className={classNames('eds-dropdown-list__item', {\n 'eds-dropdown-list__item--highlighted':\n highlightedIndex === index,\n 'eds-dropdown-list__item--selected': isSelected(item),\n })}\n key={`${item.value}${index}`}\n {...getItemProps({\n item,\n index,\n })}\n style={{ display: 'flex' }}\n >\n <span style={{ display: 'flex' }}>\n <span\n className={classNames('eds-multiselect-checkbox', {\n 'eds-multiselect-checkbox--checked': isSelected(item),\n })}\n >\n <CheckboxIcon />\n </span>\n <span className=\"eds-multiselect__item-label\">\n {item.label}\n </span>\n </span>\n {item.icons && (\n <span>\n {item.icons.map((Icon, index) => (\n <Icon\n key={index}\n inline\n className=\"eds-dropdown-list__item-icon\"\n />\n ))}\n </span>\n )}\n </li>\n ))}\n </ul>\n </div>\n </MultiSelectContext.Provider>\n );\n};\n\nconst ClearButton: React.FC<{ [key: string]: any }> = ({ ...props }) => {\n const { reset } = useMultiSelectContext();\n return (\n <>\n <button\n className=\"eds-dropdown__clear-button\"\n type=\"button\"\n tabIndex={-1}\n onClick={() => reset()}\n {...props}\n >\n <CloseIcon />\n </button>\n <div className=\"eds-dropdown__divider\"></div>\n </>\n );\n};\n\nconst Appendix: React.FC<{\n loading: boolean;\n loadingText: string;\n readOnly: boolean;\n hasSelected: boolean;\n}> = ({ loading, loadingText, readOnly, hasSelected }) => {\n if (loading) {\n return <DropdownLoadingDots>{loadingText}</DropdownLoadingDots>;\n }\n if (readOnly) {\n return null;\n }\n return hasSelected ? (\n <>\n <ClearButton></ClearButton>\n <DropdownToggleButton />\n </>\n ) : (\n <DropdownToggleButton />\n );\n};\n\nconst DropdownToggleButton = () => {\n const { getToggleButtonProps, isOpen, openMenu, openOnFocus } =\n useMultiSelectContext();\n return (\n <button\n {...getToggleButtonProps({\n className: classNames('eds-dropdown__toggle-button', {\n 'eds-dropdown__toggle-button--open': isOpen,\n }),\n onFocus: () => {\n if (openOnFocus) {\n openMenu();\n }\n },\n })}\n type=\"button\"\n >\n <DownArrowIcon />\n </button>\n );\n};\n\nconst CheckboxIcon: React.FC = () => {\n return (\n <svg\n className=\"eds-checkbox-icon\"\n width=\"11px\"\n height=\"9px\"\n viewBox=\"6 11 37 33\"\n >\n <path\n className=\"eds-checkbox-icon__path\"\n d=\"M14.1 27.2l7.1 7.2 14.6-14.8\"\n fill=\"none\"\n />\n </svg>\n );\n};\n\nfunction SelectedItemsLabel(items: NormalizedDropdownItemType[]) {\n return items.length < 3\n ? items.map(item => item.label).toString()\n : `${items.length} elementer valgt`;\n}\n","import React from 'react';\nimport classNames from 'classnames';\nimport {\n UseComboboxGetMenuPropsOptions,\n GetPropsCommonOptions,\n UseComboboxGetItemPropsOptions,\n} from 'downshift';\n\nimport { CheckIcon } from '@entur/icons';\n\nimport { NormalizedDropdownItemType } from '../useNormalizedItems';\n\ntype DropdownListProps = {\n selectedItem: NormalizedDropdownItemType | null;\n isOpen: boolean;\n filteredItems: NormalizedDropdownItemType[];\n highlightedIndex: number;\n listStyle: { [key: string]: any } | undefined;\n getMenuProps: (\n options?: UseComboboxGetMenuPropsOptions | undefined,\n otherOptions?: GetPropsCommonOptions | undefined,\n ) => any;\n getItemProps: (\n options: UseComboboxGetItemPropsOptions<NormalizedDropdownItemType>,\n ) => any;\n [key: string]: any;\n};\n\nexport const DropdownList = ({\n selectedItem,\n isOpen,\n getMenuProps,\n getItemProps,\n filteredItems,\n highlightedIndex,\n listStyle,\n ...rest\n}: DropdownListProps) => {\n return (\n <ul\n className={classNames('eds-searchable-dropdown__list', {\n 'eds-searchable-dropdown__list--open': isOpen,\n })}\n {...getMenuProps()}\n style={{ ...rest.style, ...listStyle }}\n >\n {isOpen\n ? filteredItems.map((item, index) => (\n // eslint-disable-next-line react/jsx-key\n <li\n className={classNames('eds-searchable-dropdown__list__item', {\n 'eds-searchable-dropdown__list__item--highlighted':\n highlightedIndex === index,\n 'eds-searchable-dropdown__list__item--selected':\n selectedItem?.value === item.value,\n })}\n {...getItemProps({ key: `${index}${item.value}`, item, index })}\n >\n <span>{item.label}</span>\n {item.icons && (\n <span>\n {item.icons.map((Icon, index) => (\n <Icon\n key={index}\n inline\n className=\"eds-searchable-dropdown__list__item-icon\"\n />\n ))}\n </span>\n )}\n {selectedItem?.value === item.value && <CheckIcon />}\n </li>\n ))\n : null}\n </ul>\n );\n};\n","/* eslint-disable no-warning-comments */\nimport React, { useRef, useState } from 'react';\nimport { useCombobox, UseComboboxGetToggleButtonPropsOptions } from 'downshift';\nimport classNames from 'classnames';\n\nimport { CloseSmallIcon, DownArrowIcon } from '@entur/icons';\nimport { BaseFormControl, VariantType } from '@entur/form';\nimport { IconButton } from '@entur/button';\n\nimport { NormalizedDropdownItemType } from '../useNormalizedItems';\nimport { DropdownList } from './DropdownList';\n\nimport './dropdown.scss';\n\nfunction lowerCaseFilterTest(\n item: NormalizedDropdownItemType,\n input: string | undefined,\n) {\n if (!input) {\n return true;\n }\n const sanitizeEscapeCharacters = input.replace(\n /[-/\\\\^$*+?.()|[\\]{}]/g,\n '\\\\$&',\n );\n const inputRegex = new RegExp(sanitizeEscapeCharacters, 'i');\n return inputRegex.test(item.label);\n}\n\nexport type SearchableDropdownProps = {\n /** Tilgjengelige valg i dropdown-en */\n items: NormalizedDropdownItemType[];\n /** Valgt element. Bruk null for ingen verdi. */\n selectedItem: NormalizedDropdownItemType | null;\n /** Callback for når brukeren endrer valg */\n onChange: (value: NormalizedDropdownItemType | null) => void;\n /** Beskrivende tekst som forklarer feltet */\n label: string;\n /** Placeholder-tekst når ingenting er satt */\n placeholder?: string;\n /** Vis knapp for å nullstille Dropdown-en skal vises\n * @default false\n */\n clearable?: boolean;\n /** Vis listen med valg skal vises på fokus av inputfeltet\n * @default false\n */\n openOnFocus?: boolean;\n /** Gjør dropdown-en til å kun kunne leses\n * @default false\n */\n readonly?: boolean;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n className?: string;\n style?: { [key: string]: any };\n /** Style som kun påføres listeelementet */\n listStyle?: { [key: string]: any };\n [key: string]: any;\n};\n\n// TODO Husk å @deprecate searchable-prop-en til Dropdown når denne komponenten skal ha official release\n// TODO Husk å generelt legge inn støtte for typeof value === string\n\nexport const SearchableDropdownBeta = ({\n items,\n selectedItem: value,\n onChange,\n label,\n placeholder,\n clearable = false,\n openOnFocus = false,\n readonly = false,\n feedback,\n variant = 'info',\n className,\n listStyle,\n ...rest\n}: SearchableDropdownProps) => {\n const [filteredItems, setFilteredItems] = React.useState(items);\n const [hideSelectedItem, setHideSelectedItem] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const stateReducer = React.useCallback((_, actionAndChanges) => {\n const { type, changes } = actionAndChanges;\n\n switch (type) {\n case useCombobox.stateChangeTypes.ItemClick:\n case useCombobox.stateChangeTypes.InputKeyDownEnter:\n case useCombobox.stateChangeTypes.InputBlur:\n case useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:\n return {\n ...changes,\n // reset input value to show placeholder on focus\n ...(changes.selectedItem && {\n inputValue: '',\n }),\n };\n default:\n return changes;\n }\n }, []);\n\n const {\n isOpen,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getInputProps,\n getComboboxProps,\n highlightedIndex,\n getItemProps,\n selectedItem,\n openMenu,\n inputValue,\n } = useCombobox({\n onInputValueChange({ inputValue }) {\n setFilteredItems(\n items.filter(item => lowerCaseFilterTest(item, inputValue)),\n );\n },\n items: filteredItems,\n itemToString(item) {\n if (item) return item.value;\n return '';\n },\n stateReducer,\n selectedItem: value,\n onSelectedItemChange: ({ selectedItem: newSelectedItem }) =>\n onChange(newSelectedItem ?? null),\n ...rest,\n });\n\n return (\n <div className=\"eds-searchable-dropdown__wrapper\">\n <BaseFormControl\n append={\n <Appendix\n selectedItem={selectedItem}\n isOpen={isOpen}\n clearable={clearable}\n loading={false}\n loadingText={''}\n readOnly={readonly}\n onChange={onChange}\n getToggleButtonProps={getToggleButtonProps}\n />\n }\n className={classNames('eds-searchable-dropdown', className)}\n label={label}\n isFilled={selectedItem ? true : false}\n feedback={feedback}\n variant={variant}\n readOnly={readonly}\n labelProps={getLabelProps()}\n {...getComboboxProps()}\n {...rest}\n >\n {!hideSelectedItem && selectedItem && !inputValue && (\n <span className=\"eds-searchable-dropdown__selected-item__wrapper\">\n <span\n className=\"eds-searchable-dropdown__selected-item\"\n onClick={() => inputRef.current?.focus()}\n >\n {selectedItem.label}\n </span>\n </span>\n )}\n <input\n placeholder={selectedItem?.label ?? placeholder}\n className=\"eds-searchable-dropdown__input eds-form-control\"\n {...getInputProps({\n onFocus: () => {\n if (!isOpen && openOnFocus) openMenu();\n setHideSelectedItem(true);\n },\n onBlur: () => {\n setHideSelectedItem(false);\n },\n ref: inputRef,\n })}\n />\n </BaseFormControl>\n <DropdownList\n selectedItem={selectedItem}\n isOpen={isOpen}\n filteredItems={filteredItems}\n highlightedIndex={highlightedIndex}\n listStyle={listStyle}\n getMenuProps={getMenuProps}\n getItemProps={getItemProps}\n />\n </div>\n );\n};\n\nconst Appendix: React.FC<{\n selectedItem: NormalizedDropdownItemType | null;\n isOpen: boolean;\n clearable: boolean;\n loading: boolean;\n loadingText: string;\n readOnly: boolean;\n onChange: (value: NormalizedDropdownItemType | null) => void;\n getToggleButtonProps: (\n options?: UseComboboxGetToggleButtonPropsOptions | undefined,\n ) => any;\n}> = ({\n clearable,\n readOnly,\n getToggleButtonProps,\n selectedItem,\n isOpen,\n onChange,\n}) => {\n // TODO implement loading / async\n // if (loading) {\n // return <DropdownLoadingDots>{loadingText}</DropdownLoadingDots>;\n // }\n if (readOnly) {\n return null;\n }\n return (\n <div style={{ display: 'flex', alignItems: 'center' }}>\n {clearable && selectedItem && (\n <>\n <IconButton\n className=\"eds-searchable-dropdown-appendix__clear-button\"\n type=\"button\"\n tabIndex={-1}\n onClick={() => onChange(null)}\n >\n <CloseSmallIcon />\n </IconButton>\n <div className=\"eds-searchable-dropdown-appendix__divider\" />\n </>\n )}\n <IconButton\n {...getToggleButtonProps({\n className: classNames(\n 'eds-searchable-dropdown-appendix__toggle-button',\n {\n 'eds-searchable-dropdown-appendix__toggle-button--open': isOpen,\n },\n ),\n })}\n tabIndex={-1}\n type=\"button\"\n >\n <DownArrowIcon />\n </IconButton>\n </div>\n );\n};\n","import { warnAboutMissingStyles } from '@entur/utils';\nimport './index.scss';\n\nwarnAboutMissingStyles('dropdown', 'form', 'a11y', 'chip');\n\nexport * from './Dropdown';\nexport * from './NativeDropdown';\nexport * from './MultiSelect';\nexport * from './MultiSelect';\nexport * from './beta';\n","import { BaseFormControl, VariantType } from '@entur/form';\nimport { DownArrowIcon } from '@entur/icons';\nimport { useRandomId } from '@entur/utils';\nimport React from 'react';\nimport { DropdownLoadingDots } from './DropdownLoadingDots';\nimport './NativeDropdown.scss';\nimport {\n PotentiallyAsyncDropdownItemType,\n useResolvedItems,\n} from './useResolvedItems';\n\nexport type NativeDropdownProps = {\n /** Ekstra klassenavn */\n className?: string;\n /**\n * For å deaktivere dropdownen\n * @default false\n **/\n disabled?: boolean;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Alle valg for dropdownen å ha */\n items: PotentiallyAsyncDropdownItemType;\n /** Beskrivende tekst som forklarer feltet */\n label: string;\n /** En callback for endringer av value */\n onChange?: (e: React.ChangeEvent<HTMLSelectElement>) => void;\n /** Tekst eller ikon som kommer før dropdownen */\n prepend?: React.ReactNode;\n /**\n * Setter dropdownen i read-only modus\n * @default false\n **/\n readOnly?: boolean;\n /** Den valgte verdien */\n value?: string;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n [key: string]: any;\n};\n\nexport const NativeDropdown: React.FC<NativeDropdownProps> = ({\n className,\n disabled = false,\n readOnly = false,\n items,\n loadingText,\n prepend,\n style,\n label,\n variant,\n feedback,\n disableLabelAnimation,\n ...rest\n}) => {\n const { items: normalizedItems, loading } = useResolvedItems(items);\n\n let rightSideIcon: JSX.Element | null = <DownArrowIcon inline={true} />;\n if (disabled || readOnly) {\n rightSideIcon = null;\n } else if (loading) {\n rightSideIcon = <DropdownLoadingDots>{loadingText}</DropdownLoadingDots>;\n }\n const nativeDropdownId = useRandomId('eds-native-dropdown');\n return (\n <BaseFormControl\n disabled={disabled}\n readOnly={readOnly}\n prepend={prepend}\n append={rightSideIcon}\n className={className}\n style={style}\n label={label}\n variant={variant}\n feedback={feedback}\n labelId={nativeDropdownId}\n disableLabelAnimation={disableLabelAnimation}\n isFilled={true}\n >\n <select\n aria-invalid={variant === 'error'}\n className=\"eds-form-control eds-dropdown\"\n disabled={disabled || readOnly}\n {...rest}\n >\n {normalizedItems.map(item => (\n <option key={item.value} value={item.value}>\n {item.label}\n </option>\n ))}\n </select>\n </BaseFormControl>\n );\n};\n"],"names":["DownshiftContext","React","createContext","DownshiftProvider","_ref","children","_ref$onChange","onChange","_ref$onInputValueChan","onInputValueChange","_ref$highlightFirstIt","highlightFirstItemOnOpen","className","style","_ref$searchable","searchable","rest","_objectWithoutPropertiesLoose","_excluded","Downshift","_extends","itemToString","item","label","onStateChange","changes","stateAndHelpers","type","stateChangeTypes","controlledPropUpdatedSelectedItem","selectedItem","inputValue","stateReducer","_","highlightFirstItemIndex","isOpen","highlightedIndex","args","classNames","createElement","Provider","value","useDownshift","context","useContext","Error","DropdownList","items","_useDownshift","getItemProps","getMenuProps","map","index","key","icons","Icon","inline","CheckIcon","DropdownToggleButton","getToggleButtonProps","tabIndex","DownArrowIcon","DropdownLoadingDots","LoadingDots","VisuallyHidden","BaseDropdown","_ref$loading","loading","_ref$loadingText","loadingText","listStyle","clearable","_ref$isFilled","isFilled","disableLabelAnimation","getLabelProps","BaseFormControl","append","Appendix","readOnly","labelProps","position","top","space","extraLarge3","extraSmall","ClearButton","_ref2","props","_objectDestructuringEmpty","_useDownshift2","clearSelection","Fragment","onClick","CloseSmallIcon","_ref3","RegularDropdown","forwardRef","ref","disabled","_ref$placeholder","placeholder","_ref$selectOnTab","selectOnTab","_ref$openOnFocus","openOnFocus","selectHighlightedItem","openMenu","setHighlightedIndex","length","textAlign","onKeyDown","e","keyDownValue","matchedItems","filter","trim","charAt","toLowerCase","nextHighlightItem","find","onFocus","SearchableDropdown","_ref$disabled","_ref$readOnly","prepend","_ref$itemFilter","itemFilter","input","sanitizeEscapeCharacters","replace","RegExp","test","LowerCaseFilterTest","getInputProps","closeMenu","useState","hideSelectedItem","_useState","setHideSelectedItem","inputRef","useRef","filteredItems","useMemo","_inputRef$current","current","focus","onBlur","mergeRefs","DropdownInputGroup","feedback","variant","VariantProvider","FeedbackText","reducer","_state","action","payload","useResolvedItems","itemsOrItemsResolver","debounceTimeout","isMountedRef","isItemsFunction","itemsResolver","Promise","resolve","_React$useReducer","useReducer","_React$useReducer$","dispatch","isMounted","useEffect","fetchItems","useCallback","_regeneratorRuntime","mark","resolvedItems","wrap","_context","prev","next","abrupt","sent","stop","_callee","_x","apply","this","arguments","normalizedItems","useNormalizedItems","debounce","Dropdown","_ref$clearable","_useResolvedItems","undefined","RenderedDropdown","searchAbleProps","name","MultiSelectContext","useMultiSelectContext","state","actionAndChanges","useSelect","MenuKeyDownEnter","MenuKeyDownSpaceButton","ItemClick","MultiSelect","reset","CloseIcon","_ref4","hasSelected","_useMultiSelectContex2","CheckboxIcon","width","height","viewBox","d","fill","display","alignItems","IconButton","warnAboutMissingStyles","_ref$itemsSelectedLab","itemsSelectedLabel","toString","SelectedItemsLabel","_ref$initialSelectedI","initialSelectedItems","selectedItems","setSelectedItems","isSelected","selectedCheckboxItem","some","selected","_useSelect","onSelectedItemChange","slicedItemList","concat","buttonText","multiSelectId","useRandomId","labelId","rightSideIcon","nativeDropdownId","_selectedItem$label","_ref$readonly","readonly","_ref$variant","_React$useState","setFilteredItems","useCombobox","InputKeyDownEnter","InputBlur","ControlledPropUpdatedSelectedItem","_useCombobox","lowerCaseFilterTest","newSelectedItem","getComboboxProps"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dropdown.cjs.production.min.js","sources":["../src/DownshiftProvider.tsx","../src/DropdownList.tsx","../src/DropdownToggleButton.tsx","../src/DropdownLoadingDots.tsx","../src/BaseDropdown.tsx","../src/RegularDropdown.tsx","../src/SearchableDropdown.tsx","../src/DropdownInputGroup.tsx","../src/useResolvedItems.ts","../src/useNormalizedItems.ts","../src/Dropdown.tsx","../src/MultiSelect.tsx","../src/beta/DropdownList.tsx","../src/beta/SearchableDropdown.tsx","../src/index.tsx","../src/NativeDropdown.tsx"],"sourcesContent":["import React from 'react';\nimport Downshift, {\n ControllerStateAndHelpers,\n DownshiftState,\n StateChangeOptions,\n} from 'downshift';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport classNames from 'classnames';\n\nconst DownshiftContext =\n React.createContext<ControllerStateAndHelpers<NormalizedDropdownItemType> | null>(\n null,\n );\n\nexport type DownshiftProviderProps = {\n onChange?: (\n selectedItem: NormalizedDropdownItemType,\n stateAndHelpers: ControllerStateAndHelpers<NormalizedDropdownItemType>,\n ) => void;\n onInputValueChange?: (value: string) => void;\n inputValue?: string;\n initialSelectedItem?: NormalizedDropdownItemType;\n highlightFirstItemOnOpen?: boolean;\n className?: string;\n style?: React.CSSProperties;\n searchable?: boolean;\n [key: string]: any;\n};\nexport const DownshiftProvider: React.FC<DownshiftProviderProps> = ({\n children,\n onChange = () => undefined,\n onInputValueChange = () => undefined,\n highlightFirstItemOnOpen = false,\n className,\n style,\n searchable = false,\n ...rest\n}) => {\n const handleStateChange = (\n changes: any,\n stateAndHelpers: ControllerStateAndHelpers<NormalizedDropdownItemType>,\n ) => {\n if (\n changes.type ===\n Downshift.stateChangeTypes.controlledPropUpdatedSelectedItem\n ) {\n return;\n }\n if ('selectedItem' in changes) {\n onChange(changes.selectedItem, stateAndHelpers);\n } else if ('inputValue' in changes) {\n onInputValueChange(changes.inputValue);\n }\n };\n\n const stateReducer = (\n _: DownshiftState<NormalizedDropdownItemType>,\n changes: StateChangeOptions<NormalizedDropdownItemType>,\n ): Partial<StateChangeOptions<NormalizedDropdownItemType>> => {\n const highlightFirstOnOpen =\n highlightFirstItemOnOpen && 'isOpen' in changes && changes.isOpen;\n const highlightFirstItemIndex: Partial<\n StateChangeOptions<NormalizedDropdownItemType>\n > = highlightFirstOnOpen ? { highlightedIndex: 0 } : {};\n\n if (searchable) {\n const { type } = changes;\n\n switch (type) {\n case '__autocomplete_change_input__':\n return {\n // return normal changes.\n ...changes,\n ...highlightFirstItemIndex,\n };\n case '__autocomplete_click_item__':\n case '__autocomplete_keydown_enter__':\n case '__autocomplete_blur_input__':\n case '__autocomplete_mouseup__':\n return {\n ...changes,\n // if we had an item highlighted in the previous state.\n // we will reset input field value to blank\n inputValue: '',\n ...highlightFirstItemIndex,\n };\n default:\n return {\n ...changes,\n ...highlightFirstItemIndex,\n };\n }\n } else {\n return { ...changes, ...highlightFirstItemIndex };\n }\n };\n\n return (\n <Downshift\n itemToString={item => (item ? item.label : '')}\n onStateChange={handleStateChange}\n stateReducer={stateReducer}\n {...rest}\n >\n {args => (\n <div className={classNames('eds-input-group', className)} style={style}>\n {/* This div is required by Downshift */}\n <DownshiftContext.Provider value={args}>\n {children}\n </DownshiftContext.Provider>\n </div>\n )}\n </Downshift>\n );\n};\n\nexport const useDownshift: () => ControllerStateAndHelpers<NormalizedDropdownItemType> =\n () => {\n const context = React.useContext(DownshiftContext);\n if (!context) {\n throw new Error('You need to wrap your component in a DownshiftProvider');\n }\n return context;\n };\n","import React from 'react';\nimport classNames from 'classnames';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { useDownshift } from './DownshiftProvider';\nimport { CheckIcon } from '@entur/icons';\nimport './DropdownList.scss';\n\nexport type DropdownListProps = {\n items: NormalizedDropdownItemType[];\n [key: string]: any;\n};\n\nexport const DropdownList: React.FC<DropdownListProps> = ({\n items,\n ...rest\n}) => {\n const { highlightedIndex, isOpen, selectedItem, getItemProps, getMenuProps } =\n useDownshift();\n\n return (\n <ul\n className={classNames('eds-dropdown-list', {\n 'eds-dropdown-list--open': isOpen,\n })}\n {...getMenuProps()}\n {...rest}\n >\n {isOpen\n ? items.map((item, index) => (\n // eslint-disable-next-line react/jsx-key\n <li\n className={classNames('eds-dropdown-list__item', {\n 'eds-dropdown-list__item--highlighted':\n highlightedIndex === index,\n 'eds-dropdown-list__item--selected': selectedItem === item,\n })}\n {...getItemProps({ key: `${index}${item.value}`, item, index })}\n >\n <span>{item.label}</span>\n {item.icons && (\n <span>\n {item.icons.map((Icon, index) => (\n <Icon\n key={index}\n inline\n className=\"eds-dropdown-list__item-icon\"\n />\n ))}\n </span>\n )}\n {selectedItem === item && <CheckIcon />}\n </li>\n ))\n : null}\n </ul>\n );\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport { DownArrowIcon } from '@entur/icons';\nimport { useDownshift } from './DownshiftProvider';\nimport './DropdownToggleButton.scss';\n\nexport const DropdownToggleButton: () => JSX.Element = () => {\n const { getToggleButtonProps, isOpen } = useDownshift();\n return (\n <button\n {...getToggleButtonProps({\n className: classNames('eds-dropdown__toggle-button', {\n 'eds-dropdown__toggle-button--open': isOpen,\n }),\n })}\n tabIndex=\"-1\"\n type=\"button\"\n >\n <DownArrowIcon />\n </button>\n );\n};\n","import React from 'react';\nimport classNames from 'classnames';\nimport { VisuallyHidden } from '@entur/a11y';\nimport { LoadingDots } from '@entur/loader';\nimport './InlineSpinner.scss';\n\nexport type InlineSpinnerType = {\n /** Ekstra klassenavn */\n className?: string;\n /** Tekst for skjermlesere */\n children: string;\n [key: string]: any;\n};\nexport const DropdownLoadingDots: React.FC<InlineSpinnerType> = ({\n className,\n children,\n ...rest\n}) => (\n <div className={classNames('eds-inline-spinner', className)} {...rest}>\n <LoadingDots />\n <VisuallyHidden>{children}</VisuallyHidden>\n </div>\n);\n","import React from 'react';\nimport { BaseFormControl } from '@entur/form';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { DropdownList } from './DropdownList';\nimport { DropdownToggleButton } from './DropdownToggleButton';\nimport { DropdownLoadingDots } from './DropdownLoadingDots';\nimport { CloseSmallIcon } from '@entur/icons';\nimport './BaseDropdown.scss';\nimport { useDownshift } from './DownshiftProvider';\nimport { space } from '@entur/tokens';\n\ntype BaseDropdownProps = {\n className?: string;\n disabled?: boolean;\n items: NormalizedDropdownItemType[];\n loading?: boolean;\n loadingText?: string;\n placeholder?: string;\n style?: { [key: string]: any };\n listStyle?: { [key: string]: any };\n isFilled?: boolean;\n disableLabelAnimation?: boolean;\n [key: string]: any;\n};\nexport const BaseDropdown: React.FC<BaseDropdownProps> = ({\n children,\n className,\n items,\n loading = false,\n loadingText = 'Loading...',\n //eslint-disable-next-line\n placeholder,\n style,\n listStyle,\n clearable,\n label,\n isFilled = false,\n disableLabelAnimation,\n ...rest\n}) => {\n const { getLabelProps } = useDownshift();\n return (\n <div className=\"eds-dropdown-wrapper\" style={style}>\n {/* eslint-disable-next-line @typescript-eslint/ban-ts-comment */}\n {/* @ts-ignore */}\n <BaseFormControl\n append={\n <Appendix\n clearable={clearable}\n loading={loading}\n loadingText={loadingText}\n readOnly={...rest.readOnly}\n />\n }\n className={className}\n label={label}\n isFilled={isFilled}\n labelProps={getLabelProps()}\n disableLabelAnimation={disableLabelAnimation}\n {...rest}\n >\n {children}\n </BaseFormControl>\n <DropdownList\n items={items}\n style={{\n position: 'absolute',\n top: `${space.extraLarge3 + space.extraSmall}px`,\n ...listStyle,\n }}\n {...rest}\n />\n </div>\n );\n};\n\nconst ClearButton: React.FC<{ [key: string]: any }> = ({ ...props }) => {\n const { clearSelection, selectedItem } = useDownshift();\n return (\n <>\n {selectedItem && (\n <button\n className=\"eds-dropdown__clear-button\"\n type=\"button\"\n tabIndex={-1}\n onClick={() => clearSelection()}\n {...props}\n >\n <CloseSmallIcon />\n </button>\n )}\n {selectedItem && <div className=\"eds-dropdown__divider\"></div>}\n </>\n );\n};\n\nconst Appendix: React.FC<{\n clearable: boolean;\n loading: boolean;\n loadingText: string;\n readOnly: boolean;\n}> = ({ clearable, loading, loadingText, readOnly }) => {\n if (loading) {\n return <DropdownLoadingDots>{loadingText}</DropdownLoadingDots>;\n }\n if (readOnly) {\n return null;\n }\n return clearable ? (\n <>\n <ClearButton></ClearButton> <DropdownToggleButton />\n </>\n ) : (\n <DropdownToggleButton />\n );\n};\n","import React from 'react';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { useDownshift } from './DownshiftProvider';\nimport { BaseDropdown } from './BaseDropdown';\n\ntype RegularDropdownProps = {\n items: NormalizedDropdownItemType[];\n disabled?: boolean;\n placeholder?: string;\n loading?: boolean;\n loadingText?: string;\n className?: string;\n selectOnTab?: boolean;\n openOnFocus?: boolean;\n listStyle?: { [key: string]: any };\n disableLabelAnimation?: boolean;\n clearable?: boolean;\n [key: string]: any;\n};\nexport const RegularDropdown: React.FC<RegularDropdownProps> = React.forwardRef<\n HTMLButtonElement,\n RegularDropdownProps\n>(\n (\n {\n disabled,\n placeholder = 'Vennligst velg',\n selectOnTab = false,\n openOnFocus = false,\n listStyle,\n items,\n label,\n disableLabelAnimation,\n loading,\n loadingText,\n className,\n clearable,\n ...rest\n },\n ref,\n ) => {\n const {\n getToggleButtonProps,\n selectedItem,\n selectHighlightedItem,\n openMenu,\n isOpen,\n highlightedIndex,\n setHighlightedIndex,\n } = useDownshift();\n return (\n <BaseDropdown\n disabled={disabled}\n listStyle={listStyle}\n items={items}\n label={label}\n isFilled={selectedItem ? true : placeholder.length !== 0}\n disableLabelAnimation={disableLabelAnimation}\n loading={loading}\n loadingText={loadingText}\n className={className}\n clearable={clearable}\n {...rest}\n >\n <button\n {...getToggleButtonProps({\n className: 'eds-form-control eds-dropdown__selected-item',\n style: { textAlign: 'left' },\n disabled,\n type: 'button',\n onKeyDown: e => {\n if (selectOnTab && e.key === 'Tab') {\n selectHighlightedItem();\n }\n\n if (isOpen) {\n const keyDownValue = e.key;\n const matchedItems = items\n .map((item, index) => ({ ...item, index }))\n .filter(item => {\n const firstCharacter = item.label\n .trim()\n .charAt(0)\n .toLowerCase();\n return firstCharacter === keyDownValue;\n });\n\n const nextHighlightItem = matchedItems.find(\n item => item.index > (highlightedIndex ?? 0),\n );\n\n if (nextHighlightItem) {\n setHighlightedIndex(nextHighlightItem.index);\n } else if (matchedItems.length > 0) {\n setHighlightedIndex(matchedItems[0].index);\n }\n }\n },\n onFocus: () => {\n if (openOnFocus) {\n !isOpen && openMenu();\n }\n },\n ...rest,\n })}\n ref={ref}\n >\n {selectedItem ? selectedItem.label : placeholder}\n </button>\n </BaseDropdown>\n );\n },\n);\n","import React, { useRef, useState } from 'react';\nimport { mergeRefs } from '@entur/utils';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { BaseDropdown } from './BaseDropdown';\nimport { useDownshift } from './DownshiftProvider';\nimport './SearchableDropdown.scss';\n\ntype SearchableDropdownProps = {\n className?: string;\n disabled?: boolean;\n items: NormalizedDropdownItemType[];\n loading?: boolean;\n loadingText?: string;\n placeholder?: string;\n prepend?: React.ReactNode;\n readOnly?: boolean;\n selectOnTab?: boolean;\n openOnFocus?: boolean;\n listStyle?: { [key: string]: any };\n clearable: boolean;\n itemFilter?: (item: NormalizedDropdownItemType) => boolean;\n disableLabelAnimation?: boolean;\n [key: string]: any;\n};\n\nfunction LowerCaseFilterTest(\n item: NormalizedDropdownItemType,\n input: string | null,\n) {\n if (!input) {\n return true;\n }\n const sanitizeEscapeCharacters = input.replace(\n /[-/\\\\^$*+?.()|[\\]{}]/g,\n '\\\\$&',\n );\n const inputRegex = new RegExp(sanitizeEscapeCharacters, 'i');\n return inputRegex.test(item.label);\n}\n\nexport const SearchableDropdown: React.FC<SearchableDropdownProps> =\n React.forwardRef<HTMLInputElement, SearchableDropdownProps>(\n (\n {\n disabled = false,\n className,\n items,\n loading,\n loadingText,\n readOnly = false,\n prepend,\n selectOnTab = false,\n openOnFocus = false,\n listStyle,\n clearable,\n itemFilter = (\n item: NormalizedDropdownItemType,\n inputValue: string | null,\n ) => LowerCaseFilterTest(item, inputValue),\n label,\n disableLabelAnimation,\n placeholder,\n ...rest\n },\n ref,\n ) => {\n const {\n getInputProps,\n inputValue,\n selectHighlightedItem,\n isOpen,\n openMenu,\n closeMenu,\n selectedItem,\n } = useDownshift();\n\n const [hideSelectedItem, setHideSelectedItem] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const filteredItems = React.useMemo(() => {\n return items.filter(item => itemFilter(item, inputValue));\n }, [inputValue, items, itemFilter]);\n\n return (\n <BaseDropdown\n items={filteredItems}\n disabled={disabled}\n readOnly={readOnly}\n className={className}\n loading={loading}\n loadingText={loadingText}\n prepend={prepend}\n listStyle={listStyle}\n clearable={clearable}\n label={label}\n isFilled={selectedItem ? true : false}\n disableLabelAnimation={disableLabelAnimation}\n >\n {!hideSelectedItem && selectedItem && !inputValue && (\n <span className=\"eds-dropdown__searchable-selected-item__wrapper\">\n <span\n className=\"eds-dropdown__searchable-selected-item\"\n onClick={() => inputRef.current?.focus()}\n >\n {selectedItem.label}\n </span>\n </span>\n )}\n <input\n {...getInputProps({\n disabled,\n readOnly,\n className: 'eds-form-control eds-dropdown__input',\n onKeyDown: e => {\n if (selectOnTab && e.key === 'Tab') selectHighlightedItem();\n },\n onFocus: () => {\n if (!isOpen && openOnFocus) openMenu();\n setHideSelectedItem(true);\n },\n placeholder: selectedItem ? selectedItem.label : placeholder,\n ...rest,\n })}\n onBlur={() => {\n setHideSelectedItem(false);\n closeMenu();\n }}\n ref={mergeRefs<HTMLInputElement>(ref, inputRef)}\n />\n </BaseDropdown>\n );\n },\n );\n","import { FeedbackText, VariantProvider, VariantType } from '@entur/form';\nimport React from 'react';\n\nexport type DropdownInputGroupProps = {\n feedback?: string;\n variant?: VariantType;\n className?: string;\n style?: { [key: string]: any };\n};\nexport const DropdownInputGroup: React.FC<DropdownInputGroupProps> = ({\n children,\n feedback,\n variant,\n className,\n style,\n}) => {\n return (\n <VariantProvider variant={variant}>\n <div className={className} style={style}>\n {children}\n {feedback && variant && (\n <FeedbackText variant={variant}>{feedback}</FeedbackText>\n )}\n </div>\n </VariantProvider>\n );\n};\n","import React from 'react';\nimport { debounce } from '@entur/utils';\nimport {\n DropdownItemType,\n NormalizedDropdownItemType,\n useNormalizedItems,\n} from './useNormalizedItems';\n\nconst useIsMounted = () => {\n const isMountedRef = React.useRef(true);\n React.useEffect(() => {\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n return isMountedRef.current;\n};\n\ntype AsyncDropdownItemType = (inputType: string) => Promise<DropdownItemType[]>;\ntype SyncDropdownItemType = (inputType: string) => DropdownItemType[];\nexport type PotentiallyAsyncDropdownItemType =\n | DropdownItemType[]\n | SyncDropdownItemType\n | AsyncDropdownItemType;\n\ntype ResolverState = {\n items: DropdownItemType[];\n loading: boolean;\n};\n\ntype ResolverAction =\n | {\n type: 'request results';\n }\n | {\n type: 'received results';\n payload: DropdownItemType[];\n };\n\nconst reducer = (_state: ResolverState, action: ResolverAction) => {\n switch (action.type) {\n case 'request results':\n return { items: [], loading: true };\n case 'received results':\n return { items: action.payload, loading: false };\n }\n};\n\nexport const useResolvedItems = (\n /** The list of items, or an async function that resolves the list of items */\n itemsOrItemsResolver: PotentiallyAsyncDropdownItemType,\n /** The time to wait after the input changes to the fetchItems method is called */\n debounceTimeout = 250,\n): {\n fetchItems: (arg: string) => void;\n loading: boolean;\n items: NormalizedDropdownItemType[];\n} => {\n const isItemsFunction = typeof itemsOrItemsResolver === 'function';\n\n // Here, we normalize the itemsResolver argument to an async function, so we\n // can use it without thinking about the differences later\n const itemsResolver = React.useMemo(\n () =>\n isItemsFunction\n ? (itemsOrItemsResolver as AsyncDropdownItemType)\n : () => Promise.resolve(itemsOrItemsResolver as DropdownItemType[]),\n [itemsOrItemsResolver, isItemsFunction],\n );\n\n const [{ items, loading }, dispatch] = React.useReducer(reducer, {\n items: isItemsFunction ? [] : (itemsOrItemsResolver as DropdownItemType[]),\n loading: false,\n });\n\n // This is a way to check whether or not the dropdown is still in the\n // document. We use it below to make sure we're not updating the state of\n // an unmounted component.\n const isMounted = useIsMounted();\n\n // Next, let's create the fetching function. This should be called whenever\n // the input value changes\n const fetchItems = React.useCallback(\n async (inputValue: string) => {\n if (!isMounted) {\n return;\n }\n dispatch({ type: 'request results' });\n const resolvedItems = await itemsResolver(inputValue);\n if (isMounted) {\n dispatch({ type: 'received results', payload: resolvedItems });\n }\n },\n [itemsResolver, isMounted],\n );\n\n const normalizedItems = useNormalizedItems(items);\n React.useEffect(() => {\n // Let's fetch the list initially if it's specified\n if (isItemsFunction) {\n fetchItems('');\n }\n }, [isItemsFunction, fetchItems]);\n\n return {\n items: normalizedItems,\n loading: isItemsFunction ? loading : false,\n fetchItems: debounce(fetchItems, debounceTimeout),\n };\n};\n","import React from 'react';\n\n/** A dropdown item has a string label and a string value */\nexport type NormalizedDropdownItemType = {\n value: string;\n label: string;\n icons?: React.ComponentType<any>[];\n};\n\nexport type DropdownItemType =\n | { value?: string; label: string; icons?: React.ComponentType<any>[] }\n | string;\nexport const useNormalizedItems = (\n items: DropdownItemType[],\n): NormalizedDropdownItemType[] =>\n React.useMemo(\n () =>\n items.map(item => {\n if (typeof item == 'string') {\n return { value: item, label: item };\n }\n\n if (!('value' in item)) {\n return { ...item, value: item.label };\n }\n return item as NormalizedDropdownItemType;\n }),\n [items],\n );\n","import React from 'react';\nimport { VariantType } from '@entur/form';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { RegularDropdown } from './RegularDropdown';\nimport { DownshiftProvider } from './DownshiftProvider';\nimport { SearchableDropdown } from './SearchableDropdown';\nimport { DropdownInputGroup } from './DropdownInputGroup';\nimport {\n useResolvedItems,\n PotentiallyAsyncDropdownItemType,\n} from './useResolvedItems';\n\nexport type DropdownProps = {\n /** Beskrivende tekst som forklarer feltet */\n label: string;\n /** Tilgjengelige valg i dropdownen */\n items: PotentiallyAsyncDropdownItemType;\n /** Valgt verdi. Bruk null for ingen verdi. */\n value?: string | null;\n /** Om man skal kunne søke i dropdownen eller ikke */\n searchable?: boolean;\n /** Tooltip for labelen */\n labelTooltip?: string;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Tekst eller ikon som kommer før dropdownen */\n prepend?: React.ReactNode;\n /** Deaktiver dropdownen */\n disabled?: boolean;\n /** Setter dropdownen i read-only modus */\n readOnly?: boolean;\n /** Placeholder-tekst når ingenting er satt */\n placeholder?: string;\n /** En tekst som beskriver hva som skjer når man venter på items */\n loadingText?: string;\n /** Callback når brukeren endrer valg */\n onChange?: (selectedItem: NormalizedDropdownItemType | null) => void;\n /** Lar brukeren velge ved å \"tæbbe\" seg ut av komponenten */\n selectOnTab?: boolean;\n /** Om man skal vise items ved fokusering av input-feltet, før man skriver inn noe */\n openOnFocus?: boolean;\n /** Antall millisekunder man venter før man kaller en potensiell items-funksjon */\n debounceTimeout?: number;\n /** Om man skal ha muliget for å nullstille Dropdownen\n * @default false\n */\n clearable?: boolean;\n /** Ekstra klassenavn */\n className?: string;\n /** Marker første valgmulighet automatisk */\n highlightFirstItemOnOpen?: boolean;\n /** Styling som sendes ned til Dropdown-lista */\n listStyle?: { [key: string]: any };\n /** Filtreringen som blir brukt dersom man har en searchable Dropdown\n * @default Enkel tekstsammenligning\n */\n itemFilter?: (item: NormalizedDropdownItemType) => boolean;\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n /** Alle ekstra props videresendes til Downshift */\n [key: string]: any;\n};\nexport const Dropdown: React.FC<DropdownProps> = React.forwardRef<\n HTMLInputElement | HTMLButtonElement,\n DropdownProps\n>(\n (\n {\n highlightFirstItemOnOpen,\n debounceTimeout,\n disabled,\n feedback,\n items,\n label,\n loadingText,\n onChange = () => undefined,\n placeholder,\n prepend,\n readOnly,\n searchable,\n selectOnTab,\n openOnFocus,\n variant,\n value,\n clearable = false,\n className,\n style,\n listStyle,\n itemFilter,\n disableLabelAnimation,\n ...rest\n },\n ref,\n ) => {\n const {\n items: normalizedItems,\n loading,\n fetchItems,\n } = useResolvedItems(items, debounceTimeout);\n\n const selectedItem =\n value === undefined\n ? undefined\n : normalizedItems.find(item => value === item.value) || null;\n\n const RenderedDropdown = searchable ? SearchableDropdown : RegularDropdown;\n const searchAbleProps = searchable\n ? { itemFilter: itemFilter, name: rest.name, 'data-cy': rest['data-cy'] }\n : { name: rest.name, 'data-cy': rest['data-cy'] };\n return (\n <DownshiftProvider\n selectedItem={selectedItem}\n onInputValueChange={fetchItems}\n onChange={onChange}\n value={value}\n highlightFirstItemOnOpen={highlightFirstItemOnOpen}\n className={className}\n style={style}\n searchable={searchable}\n {...rest}\n >\n <DropdownInputGroup feedback={feedback} variant={variant}>\n <RenderedDropdown\n label={label}\n items={normalizedItems}\n loading={loading}\n loadingText={loadingText}\n disabled={disabled}\n readOnly={readOnly}\n placeholder={placeholder}\n prepend={prepend}\n selectOnTab={selectOnTab}\n openOnFocus={openOnFocus}\n listStyle={listStyle}\n clearable={clearable}\n disableLabelAnimation={disableLabelAnimation}\n ref={ref}\n {...searchAbleProps}\n />\n </DropdownInputGroup>\n </DownshiftProvider>\n );\n },\n);\n","import React, { useState } from 'react';\nimport {\n useSelect,\n UseSelectProps,\n // StateChangeOptions,\n // UseSelectStateChangeOptions,\n} from 'downshift';\nimport { NormalizedDropdownItemType } from './useNormalizedItems';\nimport { BaseFormControl, VariantType } from '@entur/form';\nimport {\n PotentiallyAsyncDropdownItemType,\n useResolvedItems,\n} from './useResolvedItems';\nimport { DropdownLoadingDots } from './DropdownLoadingDots';\nimport { useRandomId } from '@entur/utils';\nimport classNames from 'classnames';\nimport { CloseIcon, DownArrowIcon } from '@entur/icons';\nimport { space } from '@entur/tokens';\nimport './MultiSelect.scss';\nimport './DropdownList.scss';\n\nconst MultiSelectContext = React.createContext<{\n isOpen: boolean;\n reset: () => void;\n getToggleButtonProps: any;\n openMenu: () => void;\n openOnFocus?: boolean;\n} | null>(null);\nconst useMultiSelectContext = () => {\n const context = React.useContext(MultiSelectContext);\n if (!context) {\n throw new Error('You need to wrap your component in a DownshiftProvider');\n }\n return context;\n};\n\nfunction stateReducer(\n state: any, //StateChangeOptions<NormalizedDropdownItemType>,\n actionAndChanges: any, //UseSelectStateChangeOptions<NormalizedDropdownItemType>,\n) {\n const { changes, type } = actionAndChanges;\n switch (type) {\n case useSelect.stateChangeTypes.MenuKeyDownEnter:\n case useSelect.stateChangeTypes.MenuKeyDownSpaceButton:\n case useSelect.stateChangeTypes.ItemClick:\n return {\n ...changes,\n isOpen: true, // keep menu open after selection.\n highlightedIndex: state.highlightedIndex,\n };\n default:\n return changes;\n }\n}\ntype MultiSelectProps = {\n /** Tilgjengelige valg i MultiSelect */\n items: PotentiallyAsyncDropdownItemType;\n /** Tekst som vises i boksen når elementer er valgt */\n itemsSelectedLabel?: (\n selectedItems: NormalizedDropdownItemType[],\n numberOfItems?: number,\n ) => string;\n /** Beskrivende tekst som forklarer feltet */\n label?: string;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Tekst eller ikon som kommer før MultiSelect */\n prepend?: React.ReactNode;\n /** Deaktiver dropdownen */\n disabled?: boolean;\n /** Setter dropdownen i read-only modus */\n readOnly?: boolean;\n /** Placeholder-tekst når ingenting er satt */\n placeholder?: string;\n /** En tekst som beskriver hva som skjer når man venter på items */\n loadingText?: string;\n /** Callback når brukeren endrer valg */\n onChange?: (e: any) => void;\n /** Om man skal vise items ved fokusering av input-feltet, før man skriver inn noe\n * @default false\n */\n openOnFocus?: boolean;\n /** Ekstra klassenavn */\n className?: string;\n /** Styling som sendes ned til MultiSelect-lista */\n listStyle?: { [key: string]: any };\n /** Antall millisekunder man venter før man kaller en potensiell items-funksjon\n * @default 250\n */\n debounceTimeout?: number;\n /** Om man skal ha muliget for å nullstille Dropdownen\n * @default false\n */\n clearable?: boolean;\n loading?: boolean;\n style?: React.CSSProperties;\n initialSelectedItems?: NormalizedDropdownItemType[];\n} & Omit<\n UseSelectProps<NormalizedDropdownItemType>,\n 'initialSelectedItem' | 'items'\n>;\n\nexport const MultiSelect: React.FC<MultiSelectProps> = ({\n items: input,\n itemsSelectedLabel = items => SelectedItemsLabel(items),\n label,\n feedback,\n variant,\n disabled,\n readOnly = false,\n onChange = () => undefined,\n className,\n clearable = false,\n loading = false,\n loadingText = '',\n openOnFocus = false,\n style,\n listStyle,\n initialSelectedItems = [],\n debounceTimeout,\n ...rest\n}) => {\n const { items } = useResolvedItems(input, debounceTimeout);\n const [selectedItems, setSelectedItems] =\n useState<NormalizedDropdownItemType[]>(initialSelectedItems);\n\n const reset = React.useCallback(() => {\n setSelectedItems([]);\n }, []);\n\n function isSelected(selectedCheckboxItem: NormalizedDropdownItemType) {\n return selectedItems.some(\n selected => selected.value === selectedCheckboxItem.value,\n );\n }\n\n const {\n isOpen,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n highlightedIndex,\n getItemProps,\n openMenu,\n } = useSelect<NormalizedDropdownItemType>({\n items,\n stateReducer,\n selectedItem: null,\n onSelectedItemChange: ({ selectedItem }) => {\n if (!selectedItem) {\n return;\n }\n const itemIsFound = isSelected(selectedItem);\n if (itemIsFound) {\n const slicedItemList = selectedItems.filter(\n item => item.value !== selectedItem.value,\n );\n setSelectedItems(slicedItemList);\n onChange(slicedItemList);\n } else {\n const slicedItemList = [...selectedItems, selectedItem];\n setSelectedItems(slicedItemList);\n onChange(slicedItemList);\n }\n },\n ...rest,\n });\n const buttonText = selectedItems.length\n ? itemsSelectedLabel(selectedItems)\n : '';\n const multiSelectId = useRandomId('eds-multiselect');\n\n return (\n <MultiSelectContext.Provider\n value={{ isOpen, reset, getToggleButtonProps, openMenu, openOnFocus }}\n >\n <div\n className={classNames(\n 'eds-multiselect',\n 'eds-dropdown-wrapper',\n className,\n )}\n style={style}\n >\n <BaseFormControl\n label={label}\n labelId={multiSelectId}\n labelProps={...getLabelProps()}\n feedback={feedback}\n variant={variant}\n isFilled={selectedItems.length > 0 || isOpen}\n disabled={disabled}\n readOnly={readOnly}\n append={\n <Appendix\n hasSelected={clearable && selectedItems.length > 0}\n loading={loading}\n loadingText={loadingText}\n readOnly={readOnly}\n />\n }\n >\n <button\n {...getToggleButtonProps({\n style: {\n textAlign: 'left',\n },\n type: 'button',\n className: 'eds-form-control eds-multiselect__button',\n })}\n >\n {buttonText}\n </button>\n </BaseFormControl>\n <ul\n className={classNames('eds-dropdown-list', {\n 'eds-dropdown-list--open': isOpen,\n })}\n {...getMenuProps({\n style: {\n position: 'absolute',\n top: `${space.extraLarge3 + space.extraSmall}px`,\n ...listStyle,\n },\n })}\n >\n {isOpen &&\n items.map((item, index) => (\n <li\n className={classNames('eds-dropdown-list__item', {\n 'eds-dropdown-list__item--highlighted':\n highlightedIndex === index,\n 'eds-dropdown-list__item--selected': isSelected(item),\n })}\n key={`${item.value}${index}`}\n {...getItemProps({\n item,\n index,\n })}\n style={{ display: 'flex' }}\n >\n <span style={{ display: 'flex' }}>\n <span\n className={classNames('eds-multiselect-checkbox', {\n 'eds-multiselect-checkbox--checked': isSelected(item),\n })}\n >\n <CheckboxIcon />\n </span>\n <span className=\"eds-multiselect__item-label\">\n {item.label}\n </span>\n </span>\n {item.icons && (\n <span>\n {item.icons.map((Icon, index) => (\n <Icon\n key={index}\n inline\n className=\"eds-dropdown-list__item-icon\"\n />\n ))}\n </span>\n )}\n </li>\n ))}\n </ul>\n </div>\n </MultiSelectContext.Provider>\n );\n};\n\nconst ClearButton: React.FC<{ [key: string]: any }> = ({ ...props }) => {\n const { reset } = useMultiSelectContext();\n return (\n <>\n <button\n className=\"eds-dropdown__clear-button\"\n type=\"button\"\n tabIndex={-1}\n onClick={() => reset()}\n {...props}\n >\n <CloseIcon />\n </button>\n <div className=\"eds-dropdown__divider\"></div>\n </>\n );\n};\n\nconst Appendix: React.FC<{\n loading: boolean;\n loadingText: string;\n readOnly: boolean;\n hasSelected: boolean;\n}> = ({ loading, loadingText, readOnly, hasSelected }) => {\n if (loading) {\n return <DropdownLoadingDots>{loadingText}</DropdownLoadingDots>;\n }\n if (readOnly) {\n return null;\n }\n return hasSelected ? (\n <>\n <ClearButton></ClearButton>\n <DropdownToggleButton />\n </>\n ) : (\n <DropdownToggleButton />\n );\n};\n\nconst DropdownToggleButton = () => {\n const { getToggleButtonProps, isOpen, openMenu, openOnFocus } =\n useMultiSelectContext();\n return (\n <button\n {...getToggleButtonProps({\n className: classNames('eds-dropdown__toggle-button', {\n 'eds-dropdown__toggle-button--open': isOpen,\n }),\n onFocus: () => {\n if (openOnFocus) {\n openMenu();\n }\n },\n })}\n type=\"button\"\n >\n <DownArrowIcon />\n </button>\n );\n};\n\nconst CheckboxIcon: React.FC = () => {\n return (\n <svg\n className=\"eds-checkbox-icon\"\n width=\"11px\"\n height=\"9px\"\n viewBox=\"6 11 37 33\"\n >\n <path\n className=\"eds-checkbox-icon__path\"\n d=\"M14.1 27.2l7.1 7.2 14.6-14.8\"\n fill=\"none\"\n />\n </svg>\n );\n};\n\nfunction SelectedItemsLabel(items: NormalizedDropdownItemType[]) {\n return items.length < 3\n ? items.map(item => item.label).toString()\n : `${items.length} elementer valgt`;\n}\n","import React from 'react';\nimport classNames from 'classnames';\nimport {\n UseComboboxGetMenuPropsOptions,\n GetPropsCommonOptions,\n UseComboboxGetItemPropsOptions,\n} from 'downshift';\n\nimport { CheckIcon } from '@entur/icons';\n\nimport { NormalizedDropdownItemType } from '../useNormalizedItems';\n\ntype DropdownListProps = {\n selectedItem: NormalizedDropdownItemType | null;\n isOpen: boolean;\n filteredItems: NormalizedDropdownItemType[];\n highlightedIndex: number;\n listStyle: { [key: string]: any } | undefined;\n getMenuProps: (\n options?: UseComboboxGetMenuPropsOptions | undefined,\n otherOptions?: GetPropsCommonOptions | undefined,\n ) => any;\n getItemProps: (\n options: UseComboboxGetItemPropsOptions<NormalizedDropdownItemType>,\n ) => any;\n [key: string]: any;\n};\n\nexport const DropdownList = ({\n selectedItem,\n isOpen,\n getMenuProps,\n getItemProps,\n filteredItems,\n highlightedIndex,\n listStyle,\n ...rest\n}: DropdownListProps) => {\n return (\n <ul\n className={classNames('eds-searchable-dropdown__list', {\n 'eds-searchable-dropdown__list--open': isOpen,\n })}\n {...getMenuProps()}\n style={{ ...rest.style, ...listStyle }}\n >\n {isOpen\n ? filteredItems.map((item, index) => (\n // eslint-disable-next-line react/jsx-key\n <li\n className={classNames('eds-searchable-dropdown__list__item', {\n 'eds-searchable-dropdown__list__item--highlighted':\n highlightedIndex === index,\n 'eds-searchable-dropdown__list__item--selected':\n selectedItem?.value === item.value,\n })}\n {...getItemProps({ key: `${index}${item.value}`, item, index })}\n >\n <span>{item.label}</span>\n {item.icons && (\n <span>\n {item.icons.map((Icon, index) => (\n <Icon\n key={index}\n inline\n className=\"eds-searchable-dropdown__list__item-icon\"\n />\n ))}\n </span>\n )}\n {selectedItem?.value === item.value && <CheckIcon />}\n </li>\n ))\n : null}\n </ul>\n );\n};\n","/* eslint-disable no-warning-comments */\nimport React, { useRef, useState } from 'react';\nimport { useCombobox, UseComboboxGetToggleButtonPropsOptions } from 'downshift';\nimport classNames from 'classnames';\n\nimport { CloseSmallIcon, DownArrowIcon } from '@entur/icons';\nimport { BaseFormControl, VariantType } from '@entur/form';\nimport { IconButton } from '@entur/button';\n\nimport { NormalizedDropdownItemType } from '../useNormalizedItems';\nimport { DropdownList } from './DropdownList';\n\nimport './dropdown.scss';\n\nfunction lowerCaseFilterTest(\n item: NormalizedDropdownItemType,\n input: string | undefined,\n) {\n if (!input) {\n return true;\n }\n const sanitizeEscapeCharacters = input.replace(\n /[-/\\\\^$*+?.()|[\\]{}]/g,\n '\\\\$&',\n );\n const inputRegex = new RegExp(sanitizeEscapeCharacters, 'i');\n return inputRegex.test(item.label);\n}\n\nexport type SearchableDropdownProps = {\n /** Tilgjengelige valg i dropdown-en */\n items: NormalizedDropdownItemType[];\n /** Valgt element. Bruk null for ingen verdi. */\n selectedItem: NormalizedDropdownItemType | null;\n /** Callback for når brukeren endrer valg */\n onChange: (value: NormalizedDropdownItemType | null) => void;\n /** Beskrivende tekst som forklarer feltet */\n label: string;\n /** Placeholder-tekst når ingenting er satt */\n placeholder?: string;\n /** Vis knapp for å nullstille Dropdown-en skal vises\n * @default false\n */\n clearable?: boolean;\n /** Vis listen med valg skal vises på fokus av inputfeltet\n * @default false\n */\n openOnFocus?: boolean;\n /** Gjør dropdown-en til å kun kunne leses\n * @default false\n */\n readonly?: boolean;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n className?: string;\n style?: { [key: string]: any };\n /** Style som kun påføres listeelementet */\n listStyle?: { [key: string]: any };\n [key: string]: any;\n};\n\n// TODO Husk å @deprecate searchable-prop-en til Dropdown når denne komponenten skal ha official release\n// TODO Husk å generelt legge inn støtte for typeof value === string\n\nexport const SearchableDropdownBeta = ({\n items,\n selectedItem: value,\n onChange,\n label,\n placeholder,\n clearable = false,\n openOnFocus = false,\n readonly = false,\n feedback,\n variant = 'info',\n className,\n listStyle,\n ...rest\n}: SearchableDropdownProps) => {\n const [filteredItems, setFilteredItems] = React.useState(items);\n const [hideSelectedItem, setHideSelectedItem] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const stateReducer = React.useCallback((_, actionAndChanges) => {\n const { type, changes } = actionAndChanges;\n\n switch (type) {\n case useCombobox.stateChangeTypes.ItemClick:\n case useCombobox.stateChangeTypes.InputKeyDownEnter:\n case useCombobox.stateChangeTypes.InputBlur:\n case useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem:\n return {\n ...changes,\n // reset input value to show placeholder on focus\n ...(changes.selectedItem && {\n inputValue: '',\n }),\n };\n default:\n return changes;\n }\n }, []);\n\n const {\n isOpen,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getInputProps,\n getComboboxProps,\n highlightedIndex,\n getItemProps,\n selectedItem,\n openMenu,\n inputValue,\n } = useCombobox({\n onInputValueChange({ inputValue }) {\n setFilteredItems(\n items.filter(item => lowerCaseFilterTest(item, inputValue)),\n );\n },\n items: filteredItems,\n itemToString(item) {\n if (item) return item.value;\n return '';\n },\n stateReducer,\n selectedItem: value,\n onSelectedItemChange: ({ selectedItem: newSelectedItem }) =>\n onChange(newSelectedItem ?? null),\n ...rest,\n });\n\n return (\n <div className=\"eds-searchable-dropdown__wrapper\">\n <BaseFormControl\n append={\n <Appendix\n selectedItem={selectedItem}\n isOpen={isOpen}\n clearable={clearable}\n loading={false}\n loadingText={''}\n readOnly={readonly}\n onChange={onChange}\n getToggleButtonProps={getToggleButtonProps}\n />\n }\n className={classNames('eds-searchable-dropdown', className)}\n label={label}\n isFilled={selectedItem ? true : false}\n feedback={feedback}\n variant={variant}\n readOnly={readonly}\n labelProps={getLabelProps()}\n {...getComboboxProps()}\n {...rest}\n >\n {!hideSelectedItem && selectedItem && !inputValue && (\n <span className=\"eds-searchable-dropdown__selected-item__wrapper\">\n <span\n className=\"eds-searchable-dropdown__selected-item\"\n onClick={() => inputRef.current?.focus()}\n >\n {selectedItem.label}\n </span>\n </span>\n )}\n <input\n placeholder={selectedItem?.label ?? placeholder}\n className=\"eds-searchable-dropdown__input eds-form-control\"\n {...getInputProps({\n onFocus: () => {\n if (!isOpen && openOnFocus) openMenu();\n setHideSelectedItem(true);\n },\n onBlur: () => {\n setHideSelectedItem(false);\n },\n ref: inputRef,\n })}\n />\n </BaseFormControl>\n <DropdownList\n selectedItem={selectedItem}\n isOpen={isOpen}\n filteredItems={filteredItems}\n highlightedIndex={highlightedIndex}\n listStyle={listStyle}\n getMenuProps={getMenuProps}\n getItemProps={getItemProps}\n />\n </div>\n );\n};\n\nconst Appendix: React.FC<{\n selectedItem: NormalizedDropdownItemType | null;\n isOpen: boolean;\n clearable: boolean;\n loading: boolean;\n loadingText: string;\n readOnly: boolean;\n onChange: (value: NormalizedDropdownItemType | null) => void;\n getToggleButtonProps: (\n options?: UseComboboxGetToggleButtonPropsOptions | undefined,\n ) => any;\n}> = ({\n clearable,\n readOnly,\n getToggleButtonProps,\n selectedItem,\n isOpen,\n onChange,\n}) => {\n // TODO implement loading / async\n // if (loading) {\n // return <DropdownLoadingDots>{loadingText}</DropdownLoadingDots>;\n // }\n if (readOnly) {\n return null;\n }\n return (\n <div style={{ display: 'flex', alignItems: 'center' }}>\n {clearable && selectedItem && (\n <>\n <IconButton\n className=\"eds-searchable-dropdown-appendix__clear-button\"\n type=\"button\"\n tabIndex={-1}\n onClick={() => onChange(null)}\n >\n <CloseSmallIcon />\n </IconButton>\n <div className=\"eds-searchable-dropdown-appendix__divider\" />\n </>\n )}\n <IconButton\n {...getToggleButtonProps({\n className: classNames(\n 'eds-searchable-dropdown-appendix__toggle-button',\n {\n 'eds-searchable-dropdown-appendix__toggle-button--open': isOpen,\n },\n ),\n })}\n tabIndex={-1}\n type=\"button\"\n >\n <DownArrowIcon />\n </IconButton>\n </div>\n );\n};\n","import { warnAboutMissingStyles } from '@entur/utils';\nimport './index.scss';\n\nwarnAboutMissingStyles('dropdown', 'form', 'a11y', 'chip');\n\nexport * from './Dropdown';\nexport * from './NativeDropdown';\nexport * from './MultiSelect';\nexport * from './MultiSelect';\nexport * from './beta';\n","import { BaseFormControl, VariantType } from '@entur/form';\nimport { DownArrowIcon } from '@entur/icons';\nimport { useRandomId } from '@entur/utils';\nimport React from 'react';\nimport { DropdownLoadingDots } from './DropdownLoadingDots';\nimport './NativeDropdown.scss';\nimport {\n PotentiallyAsyncDropdownItemType,\n useResolvedItems,\n} from './useResolvedItems';\n\nexport type NativeDropdownProps = {\n /** Ekstra klassenavn */\n className?: string;\n /**\n * For å deaktivere dropdownen\n * @default false\n **/\n disabled?: boolean;\n /** Valideringsmelding, brukes sammen med `variant` */\n feedback?: string;\n /** Alle valg for dropdownen å ha */\n items: PotentiallyAsyncDropdownItemType;\n /** Beskrivende tekst som forklarer feltet */\n label: string;\n /** En callback for endringer av value */\n onChange?: (e: React.ChangeEvent<HTMLSelectElement>) => void;\n /** Tekst eller ikon som kommer før dropdownen */\n prepend?: React.ReactNode;\n /**\n * Setter dropdownen i read-only modus\n * @default false\n **/\n readOnly?: boolean;\n /** Den valgte verdien */\n value?: string;\n /** Hvilken valideringsvariant som gjelder */\n variant?: VariantType;\n /** Plasserer labelen statisk på toppen av inputfeltet\n * @default false\n */\n disableLabelAnimation?: boolean;\n [key: string]: any;\n};\n\nexport const NativeDropdown: React.FC<NativeDropdownProps> = ({\n className,\n disabled = false,\n readOnly = false,\n items,\n loadingText,\n prepend,\n style,\n label,\n variant,\n feedback,\n disableLabelAnimation,\n ...rest\n}) => {\n const { items: normalizedItems, loading } = useResolvedItems(items);\n\n let rightSideIcon: JSX.Element | null = (\n <DownArrowIcon inline={true} aria-hidden=\"true\" />\n );\n if (disabled || readOnly) {\n rightSideIcon = null;\n } else if (loading) {\n rightSideIcon = (\n <DropdownLoadingDots aria-hidden=\"true\">\n {loadingText}\n </DropdownLoadingDots>\n );\n }\n const nativeDropdownId = useRandomId('eds-native-dropdown');\n return (\n <BaseFormControl\n disabled={disabled}\n readOnly={readOnly}\n prepend={prepend}\n append={rightSideIcon}\n className={className}\n style={style}\n label={label}\n labelId={nativeDropdownId}\n variant={variant}\n feedback={feedback}\n disableLabelAnimation={disableLabelAnimation}\n isFilled={true}\n >\n <select\n aria-invalid={variant === 'error'}\n aria-labelledby={nativeDropdownId}\n aria-busy={loading}\n className=\"eds-form-control eds-dropdown\"\n disabled={disabled || readOnly}\n {...rest}\n >\n {normalizedItems.map(item => (\n <option key={item.value} value={item.value}>\n {item.label}\n </option>\n ))}\n </select>\n </BaseFormControl>\n );\n};\n"],"names":["DownshiftContext","React","createContext","DownshiftProvider","_ref","children","_ref$onChange","onChange","_ref$onInputValueChan","onInputValueChange","_ref$highlightFirstIt","highlightFirstItemOnOpen","className","style","_ref$searchable","searchable","rest","_objectWithoutPropertiesLoose","_excluded","Downshift","_extends","itemToString","item","label","onStateChange","changes","stateAndHelpers","type","stateChangeTypes","controlledPropUpdatedSelectedItem","selectedItem","inputValue","stateReducer","_","highlightFirstItemIndex","isOpen","highlightedIndex","args","classNames","createElement","Provider","value","useDownshift","context","useContext","Error","DropdownList","items","_useDownshift","getItemProps","getMenuProps","map","index","key","icons","Icon","inline","CheckIcon","DropdownToggleButton","getToggleButtonProps","tabIndex","DownArrowIcon","DropdownLoadingDots","LoadingDots","VisuallyHidden","BaseDropdown","_ref$loading","loading","_ref$loadingText","loadingText","listStyle","clearable","_ref$isFilled","isFilled","disableLabelAnimation","getLabelProps","BaseFormControl","append","Appendix","readOnly","labelProps","position","top","space","extraLarge3","extraSmall","ClearButton","_ref2","props","_objectDestructuringEmpty","_useDownshift2","clearSelection","Fragment","onClick","CloseSmallIcon","_ref3","RegularDropdown","forwardRef","ref","disabled","_ref$placeholder","placeholder","_ref$selectOnTab","selectOnTab","_ref$openOnFocus","openOnFocus","selectHighlightedItem","openMenu","setHighlightedIndex","length","textAlign","onKeyDown","e","keyDownValue","matchedItems","filter","trim","charAt","toLowerCase","nextHighlightItem","find","onFocus","SearchableDropdown","_ref$disabled","_ref$readOnly","prepend","_ref$itemFilter","itemFilter","input","sanitizeEscapeCharacters","replace","RegExp","test","LowerCaseFilterTest","getInputProps","closeMenu","useState","hideSelectedItem","_useState","setHideSelectedItem","inputRef","useRef","filteredItems","useMemo","_inputRef$current","current","focus","onBlur","mergeRefs","DropdownInputGroup","feedback","variant","VariantProvider","FeedbackText","reducer","_state","action","payload","useResolvedItems","itemsOrItemsResolver","debounceTimeout","isMountedRef","isItemsFunction","itemsResolver","Promise","resolve","_React$useReducer","useReducer","_React$useReducer$","dispatch","isMounted","useEffect","fetchItems","useCallback","_regeneratorRuntime","mark","resolvedItems","wrap","_context","prev","next","abrupt","sent","stop","_callee","_x","apply","this","arguments","normalizedItems","useNormalizedItems","debounce","Dropdown","_ref$clearable","_useResolvedItems","undefined","RenderedDropdown","searchAbleProps","name","MultiSelectContext","useMultiSelectContext","state","actionAndChanges","useSelect","MenuKeyDownEnter","MenuKeyDownSpaceButton","ItemClick","MultiSelect","reset","CloseIcon","_ref4","hasSelected","_useMultiSelectContex2","CheckboxIcon","width","height","viewBox","d","fill","display","alignItems","IconButton","warnAboutMissingStyles","_ref$itemsSelectedLab","itemsSelectedLabel","toString","SelectedItemsLabel","_ref$initialSelectedI","initialSelectedItems","selectedItems","setSelectedItems","isSelected","selectedCheckboxItem","some","selected","_useSelect","onSelectedItemChange","slicedItemList","concat","buttonText","multiSelectId","useRandomId","labelId","rightSideIcon","nativeDropdownId","_selectedItem$label","_ref$readonly","readonly","_ref$variant","_React$useState","setFilteredItems","useCombobox","InputKeyDownEnter","InputBlur","ControlledPropUpdatedSelectedItem","_useCombobox","lowerCaseFilterTest","newSelectedItem","getComboboxProps"],"mappings":"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"}
|
package/dist/dropdown.esm.js
CHANGED
|
@@ -983,12 +983,15 @@ var NativeDropdown = function NativeDropdown(_ref) {
|
|
|
983
983
|
normalizedItems = _useResolvedItems.items,
|
|
984
984
|
loading = _useResolvedItems.loading;
|
|
985
985
|
var rightSideIcon = React.createElement(DownArrowIcon, {
|
|
986
|
-
inline: true
|
|
986
|
+
inline: true,
|
|
987
|
+
"aria-hidden": "true"
|
|
987
988
|
});
|
|
988
989
|
if (disabled || readOnly) {
|
|
989
990
|
rightSideIcon = null;
|
|
990
991
|
} else if (loading) {
|
|
991
|
-
rightSideIcon = React.createElement(DropdownLoadingDots,
|
|
992
|
+
rightSideIcon = React.createElement(DropdownLoadingDots, {
|
|
993
|
+
"aria-hidden": "true"
|
|
994
|
+
}, loadingText);
|
|
992
995
|
}
|
|
993
996
|
var nativeDropdownId = useRandomId('eds-native-dropdown');
|
|
994
997
|
return React.createElement(BaseFormControl, {
|
|
@@ -999,13 +1002,15 @@ var NativeDropdown = function NativeDropdown(_ref) {
|
|
|
999
1002
|
className: className,
|
|
1000
1003
|
style: style,
|
|
1001
1004
|
label: label,
|
|
1005
|
+
labelId: nativeDropdownId,
|
|
1002
1006
|
variant: variant,
|
|
1003
1007
|
feedback: feedback,
|
|
1004
|
-
labelId: nativeDropdownId,
|
|
1005
1008
|
disableLabelAnimation: disableLabelAnimation,
|
|
1006
1009
|
isFilled: true
|
|
1007
1010
|
}, React.createElement("select", _extends({
|
|
1008
1011
|
"aria-invalid": variant === 'error',
|
|
1012
|
+
"aria-labelledby": nativeDropdownId,
|
|
1013
|
+
"aria-busy": loading,
|
|
1009
1014
|
className: "eds-form-control eds-dropdown",
|
|
1010
1015
|
disabled: disabled || readOnly
|
|
1011
1016
|
}, rest), normalizedItems.map(function (item) {
|