{"version":3,"sources":["../../js/src/ToolsJs.js","../../js/src/ToolsDom.js","../../js/src/ToolsStyling.js","../../js/src/FilterManagerAspect.js","../../js/src/Wraps.js","../../js/src/MultiSelectInlineLayout.js","../../js/src/BsMultiSelect.js","../../js/src/NavigateAspect.js","../../js/src/ComponentPropertiesAspect.js","../../js/src/OptionsAspect.js","../../js/src/CreateWrapAspect.js","../../js/src/StaticDomFactory.js","../../js/src/ChoicesDomFactory.js","../../js/src/CountableChoicesListInsertAspect.js","../../js/src/ChoicesEnumerableAspect.js","../../js/src/PluginManager.js","../../js/src/ChoicesVisibilityAspect.js","../../js/src/PickButtonAspect.js","../../js/src/FilterDom.js","../../js/src/SpecialPicksEventsAspect.js","../../js/src/ResetFilterListAspect.js","../../js/src/PicksDom.js","../../js/src/PickDomFactory.js","../../js/src/BuildPickAspect.js","../../js/src/InputAspect.js","../../js/src/ChoiceDomFactory.js","../../js/src/BuildChoiceAspect.js","../../js/src/AppearanceAspect.js","../../js/src/OptionsLoopAspect.js","../../js/src/LoadAspect.js","../../js/src/UpdateDataAspect.js","../../js/src/BsMultiSelectDepricatedParameters.js","../../js/src/MultiSelectBuilder.js","../../js/src/CreateForJQuery.js","../../js/src/AddToJQueryPrototype.js","../../js/src/plugins/LabelPlugin.js","../../js/src/plugins/RtlPlugin.js","../../js/src/ValidityApi.js","../../js/src/plugins/ValidationApiPlugin.js","../../js/src/plugins/BsAppearancePlugin.js","../../js/src/plugins/HiddenOptionPlugin.js","../../js/src/plugins/CssPatchPlugin.js","../../js/src/plugins/PlaceholderPlugin.js","../../js/src/plugins/JQueryMethodsPlugin.js","../../js/src/plugins/OptionsApiPlugin.js","../../js/src/plugins/SelectElementPlugin.js","../../js/src/plugins/SelectedOptionPlugin.js","../../js/src/plugins/DisabledOptionPlugin.js","../../js/src/plugins/PicksApiPlugin.js","../../js/src/plugins/PicksPlugin.js","../../js/src/plugins/CreatePopperPlugin.js","../../js/src/plugins/FloatingLabelPlugin.js","../../js/src/plugins/ChoicesDynamicStylingPlugin.js","../../js/src/plugins/WarningPlugin.js","../../js/src/plugins/HighlightPlugin.js","../../js/src/plugins/CustomChoiceStylingsPlugin.js","../../js/src/plugins/CustomPickStylingsPlugin.js","../../js/src/PluginSet.js","../../js/src/plugins/FormResetPlugin.js","../../js/src/plugins/FormRestoreOnBackwardPlugin.js","../../js/src/plugins/Bs5Plugin.js","../../js/src/ToolSet.js","../../js/src/BsMultiSelect.jquery.js"],"names":["isBoolean","value","isString","String","extendIfUndefined","destination","source","property","undefined","shallowClearClone","v","_len","arguments","length","sources","Array","_key","forEach","s","hasOwnProperty","forEachRecursion","f","e","prev","indexRecursion","index","List","tail","count","add","next","node","remove","getTail","getCount","isEmpty","reset","DoublyLinkedList","getPrev","setPrev","getNext","setNext","head","getHead","composeSync","_len2","functions","_key2","defCall","_len3","_key3","_i","_functions","Function","tmp","ObservableLambda","func","list","getValue","call","attach","detachAll","findDirectChildByTagName","element","tagName","i","children","closestByTagName","closest","closestByClassName","className","classList","contains","containsAndSelf","otherNode","getDataGuardedWithPrefix","prefix","name","tmp1","getAttribute","tmp2","predicate","Element","parentNode","getIsRtl","isRtl","attributeName","attribute","closestByAttribute","EventBinder","bind","eventName","handler","addEventListener","push","unbind","removeEventListener","addStyling","styling","backupStyling","classes","styles","slice","style","toggleStyling","isOn","removeStyling","extendClasses","out","param","actionStr","actionArr","isRemoveEmptyClasses","c","split","extend","actionObj","Object","Styling","a","o","freeze","createStyling","isReplace","params","extendInt","p","concat","createCss","stylings1","stylings2","param1","param2","NavigateManager","navigate","down","wrap","Wraps","wrapsCollection","listFacade_reset","listFacade_remove","listFacade_add","insert","key","clear","dispose","forLoop","MultiSelectInlineLayout","aspects","environment","filterDom","picksDom","choicesDom","choicesVisibilityAspect","hoveredChoiceAspect","navigateAspect","filterManagerAspect","focusInAspect","optionToggleAspect","createPickHandlersAspect","picksList","inputAspect","specialPicksEventsAspect","buildChoiceAspect","setDisabledComponentAspect","resetLayoutAspect","placeholderStopInputAspect","warningAspect","configuration","createPopperAspect","rtlAspect","staticManager","picksElement","choicesElement","filterInputElement","pop","create","appendToContainer","init","origBackSpace","backSpace","pick","update","origUpdateRtl","updateRtl","setRtl","updatePopupLocation","pop2","warningElement","origUpdateRtl2","origWarningAspectShow","show","msg","window","document","eventLoopFlag","flag","pr","get","set","timeout","clearTimeout","setTimeout","EventLoopProlongableFlag","skipFocusout","resetSkipFocusout","skipoutMousedown","documentMouseup","event","target","setFocus","resetLayout","setFocusIn","showChoices","isChoicesVisible","setChoicesVisible","scrollTop","hideChoices","resetMouseCandidateChoice","resetHoveredChoice","preventDefaultClickEvent","componentDisabledEventBinder","skipoutAndResetMousedown","clickToShowChoices","setFocusIfNotTarget","getNavigateManager","handleOnRemoveButton","setSelectedFalse","uncheckOption","processUncheck","mouseCandidateEventBinder","mouseOverToHoveredAndReset","choice","isHoverIn","hoverIn","keyDownArrow","hoveredToSelected","hoveredWrap","getHoveredChoice","toggle","onFocusIn","onFocusOut","onInput","_inputAspect$processI","processInput","filterInputValue","processEmptyInput","setWidth","visibleCount","hide","panelIsVisble","getFilter","noResultsWarning","afterInput","onKeyDown","keyCode","which","empty","indexOf","preventDefault","stopPropagation","onKeyUp","origSetDisabledComponent","setDisabledComponent","isComponentDisabled","origCreatePickHandlers","createPickHandlers","pickHandlers","removeOnButton","origBuildChoice","buildChoice","removeAndDispose","unbindChoiceElement","choiceElement","overAndLeaveEventBinder","adoptChoiceElement","BsMultiSelect","plugins","onInit","_extendIfUndefined","isIE11","MSInputMethodContext","documentMode","hoveredChoice","containerClass","css","getDisabled","options","getText","disposeAspect","triggerAspect","trigger","TriggerAspect","onChangeAspect","onChange","OnChangeAspect","componentPropertiesAspect","ComponentPropertiesAspect","optionsAspect","getOptions","OptionsAspect","optionPropertiesAspect","option","text","OptionPropertiesAspect","isChoiceSelectableAspect","isSelectable","createWrapAspect","createWrap","createChoiceBaseAspect","createChoiceBase","filteredPrev","filteredNext","searchText","toLowerCase","trim","isFilteredIn","setVisible","setHoverIn","isChoiceElementAttached","choiceDom","choiceElementAttach","itemPrev","itemNext","CreateChoiceBaseAspect","addPickAspect","addPick","producePick","removePickAspect","removePick","createElementAspect","createElement","choicesDomFactory","choicesListElement","appendChild","display","choices","choicesList","createChoiceElement","isVisible","beforeElement","insertBefore","detach","removeChild","ChoicesDomFactory","staticDomFactory","createStaticDom","showError","message","backgroundColor","color","Error","containerElement","removableContainerClass","disposablePicksElement","staticDom","initialElement","StaticDomFactory","splice","start","countableChoicesList","warp","countableChoicesListInsertAspect","countableChoicesListInsert","choiceNext","CountableChoicesListInsertAspect","choicesEnumerableAspect","ChoicesEnumerableAspect","filteredChoicesList","filterPredicateAspect","filterPredicate","emptyNavigateManager","filteredNavigateManager","showEmptyFilter","filterText","setFilter","FilterManagerAspect","setHoveredChoice","NavigateAspect","wraps","w","constructors","_constructors$i$plugS","_constructors$i3","plugStaticDom","buttonHTML","_staticDomFactory$cre","_createStaticDom","filterInput","setAttribute","eventBinder","setEmpty","focus","width","onFilterInputInput","onfilterInputKeyDown","onFilterInputKeyUp","FilterDom","visible","resetFilterListAspect","forceResetFilter","ResetFilterListAspect","resetFilterAspect","resetFilter","ResetFilterAspect","pickFilterElement","picks","pickFilter","disableToggleStyling","picks_disabled","focusToggleStyling","picks_focus","isFocusIn","createPickElement","pickElement","disable","toggleFocusStyling","getIsFocusIn","setIsFocusIn","newIsFocusIn","PicksDom","FocusInAspect","pickDomFactory","pickButtonAspect","getButtonHTML","innerHTML","pickContentElement","querySelector","pickButtonElement","pickContent","pickButton","disableToggle","pickContent_disabled","pickDom","pickDomManagerHandlers","updateData","textContent","updateDisabled","isOptionDisabled","updateComponentDisabled","disabled","PickDomFactory","pickButtonHTML","buildPickAspect","buildPick","_picksDom$createPickE","_pickDomFactory$creat","pickElementAttach","BuildPickAspect","producePickAspect","fixSelectedFalse","removeFromPicksList","ProducePickAspect","CreatePickHandlersAspect","OptionToggleAspect","fullMatchAspect","fullMatch","FullMatchAspect","fullMatchWrap","InputAspect","choiceClickAspect","choiceClick","ChoiceClickAspect","choiceDomFactory","highlightAspect","updateHighlightedInternal","highlighter","getHighlighter","updateDataInternal","choiceDomManagerHandlers","choiceHoverToggle","choice_hover","updateHoverIn","choiceContentElement","choiceCheckBoxElement","choiceLabelElement","choiceContent","choiceCheckBox","choiceLabel","choiceSelectedToggle","choice_selected","choiceDisabledToggle","choice_disabled","choiceCheckBoxDisabledToggle","choiceCheckBox_disabled","choiceLabelDisabledToggle","choiceLabel_disabled","choiceCursorDisabledToggle","cursor","updateHighlighted","isCheckBoxDisabled","isOptionSelected","updateSelected","checked","ChoiceDomFactory","_choicesDom$createCho","_choiceDomFactory$cre","BuildChoiceAspect","buildAndAttachChoiceAspect","buildAndAttachChoice","getNextElement","BuildAndAttachChoiceAspect","SetDisabledComponentAspect","updateDisabledComponentAspect","updateDisabledComponent","newIsComponentDisabled","UpdateDisabledComponentAspect","appearanceAspect","updateAppearance","AppearanceAspect","optionAttachAspect","OptionAttachAspect","optionsLoopAspect","loop","OptionsLoopAspect","loadAspect","load","LoadAspect","updateDataAspect","UpdateDataAspect","pluginManager","pluginData","instances","instance","disposes","buildApi","api","_instances$_i$buildAp","_instances$_i","_instances$_i3$dispos","_instances$_i2","PluginManager","multiSelectInlineLayout","component","transformStyles","old","opt","transformClasses","MultiSelectBuilder","defaults","_constructors$i$plugD","_constructors$i","plugDefaultConfig","_options2","console","log","buildConfiguration","_options","settings","cssPatch","selectedPanelFocusBorderColor","selectedPanelFocusBoxShadow","boxShadow","borderColor","inputColor","useCss","pick_disabled","useCssPatch","getIsValid","getIsInValid","adjustLegacySettings","_constructors$i$plugM","_constructors$i2","plugMergeSettings","defaultSettings","createForJQuery","$","createPopper","pluginsSet","stylePlugin","isJQyery","body","hasAttribute","Event","dispatchEvent","createEvent","initCustomEvent","composeEventTrigger","_MultiSelectBuilder","object","arr","ObjectValues","createForUmd","Default","pluginName","createPlugin","firstChar","charAt","firstCharLower","prototypableName","noConflictPrototypable","fn","noConflictPrototypableForInstance","dataKey","createInstance","$e","removeData","data","prototypable","output","this","each","isMethodName","test","methodName","lMethodName","result","prototypableForInstance","noConflict","addToJQueryPrototype","removeInstanceData","multiSelect","LabelPlugin","label","labelPluginData","getLabelElementAspect","createInputId","selectElement","id","labelElement","backupedForAttribute","newId","RtlPlugin","forceRtlOnContainer","attributeBackup","currentAtribute","restore","removeAttribute","dirAttributeValue","ValidityApi","visibleElement","isValueMissingObservable","valueMissingMessage","onValid","customValidationMessage","validationMessage","validity","setMessage","valueMissing","customError","valid","createValidity","setCustomValidity","checkValidity","willValidate","reportValidity","ValidationApiPlugin","getIsValueMissing","required","getValueRequired","optionsArray","selected","validationApiObservable","setValue","newValue","validationApiPluginData","validationApi","isValid","BsAppearancePlugin","updateSize","floatingLabelAspect","getValidity","getSize","composeGetSize","getDefaultLabel","isFloatingLabel","origGetLabelElementAspect","composeGetValidity","picks_lg","picks_sm","picks_def","picks_floating_def","picksLgStyling","picksSmStyling","picksDefStyling","size","updateSizeClasses","updateSizeJsPicks","updateSizeJs","updateSizeJsForAdapter","updateSizeForAdapter","origToggleFocusStyling","validationObservable","picks_focus_invalid","picks_focus_valid","wasUpdatedObservable","getManualValidationObservable","_getMessagesElements","siblings","l","siblingsAsArray","invalidMessages","filter","validMessages","getMessagesElements","map","updateValidity","updateWasValidated","buildHiddenChoice","updateChoiceHidden","getNextNonHidden","getIsOptionHidden","newIsOptionHidden","isOptionHidden","nextChoice","CssPatchPlugin","PlaceholderPlugin","resetableFlag","placeholder","setPlaceholder","ignoreNextInputResetableFlag","setPlaceholderOrig","setEmptyInputWidth","emptyToggleStyling","filterInput_empty","showPlacehodler","updatePlacehodlerVisibility","updateEmptyInputWidth","origDisable","setDisabled","origAdd","returnValue","JQueryMethodsPlugin","getContainer","getChoices","getChoicesList","getFilterInput","getPicks","picksCount","jQueryMethodsPluginData","OptionsApiPlugin","updateOptionAdded","_nextChoice","updateOptionRemoved","SelectElementPlugin","origLoadAspectLoop","readyState","domContentLoadedHandler","updateChoiceSelected","getIsOptionSelected","newIsSelected","updateChoiceDisabled","getIsOptionDisabled","newIsDisabled","PicksApiPlugin","forEachPeak","getTailPeak","_picksList$getTail","countPeaks","isEmptyPeaks","updateHidden","PicksPlugin","addOptionPicked","CreatePopperPlugin","Popper","anchorElement","preventOverflow","popperConfiguration","placement","modifiers","enabled","flip","popper","prototype","constructor","destroy","FloatingLabelPlugin","updateLiftedLabel","liftToggleStyling1","liftToggleStyling2","liftedLabel","label_floating_lifted","picks_floating_lifted","ChoicesDynamicStylingPlugin","useChoicesDynamicStyling","origSetChoicesVisible","choicesDynamicStyling","minimalChoicesDynamicStylingMaxHeight","g","getElementsByTagName","documentElement","new_y","innerHeight","clientHeight","getBoundingClientRect","top","msHeight","Math","max","round","setProperty","ChoicesDynamicStylingPlugin_scrollHandle","origNavigateAspectNavigate","scrollIntoView","WarningPlugin","isNoResultsWarningEnabled","origAppendToContainer","nextSibling","warning","WarningAspect","HighlightPlugin","origProcessEmptyInput","origSetFilter","origSetVisible","CustomChoiceStylingsPlugin","apsects","customChoiceStylings","customChoiceStylingsAspect","customize","handlers","customChoiceStylingsClosure","custom","origChoiceDomFactoryCreate","CustomPickStylingsPlugin","customPickStylingsAspect","customPickStylings","customPickStylingsClosure","CustomPickStylingsAspect","origPickDomFactoryCreate","configurationPluginData","extendCss","optGroupAspect","origStaticDomFactoryCreate","_origStaticDomFactory","origCreateStaticDom","disposableContainerElement","backupDisplay","backupedRequired","fieldsetElement","getOptionOptGroup","getOptGroupText","optGroup","getOptGroupId","origReset","_origAdd","useHighlighting","guarded","replace","regex","RegExp","defaultPlugins","HiddenOptionPlugin","origBuildAndAttachChoice","origIsSelectable","hidden","origCreateWrap","updateOptionsHidden","updateOptionHidden","FormResetPlugin","eventBuilder","form","SelectedOptionPlugin","getSelected","setIsOptionSelected","setSelected","origFilterPredicate","composeUpdateSelected","booleanValue","trySetWrapSelected","success","origAddPick","selectAll","deselectAll","setOptionSelected","updateOptionsSelected","updateOptionSelected","FormRestoreOnBackwardPlugin","origLoadAspectLoad","DisabledOptionPlugin","origToggle","origBuildPick","choiceUpdateDisabledBackup","updateOptionsDisabled","updateOptionDisabled","picksPlugins","allPlugins","Bs5Plugin","inputGroupElement","query","p1","parentElement","setDefaults","listStyleType","paddingLeft","paddingRight","marginBottom","flexWrap","height","border","padding","margin","outline","backgroundImage","minHeight","paddingInlineStart","paddingInlineEnd","fontSize","float","verticalAlign","opacity","justifyContent","transform","paddingTop","paddingBottom","zIndex","utilities","jQuery","BsPicks","MultiSelectTools"],"mappings":"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","sourcesContent":["export function isBoolean(value){\r\n return value === true || value === false;\r\n}\r\n\r\nexport function isString(value){\r\n return value instanceof String || typeof(value) === 'string';\r\n}\r\n\r\nexport function extendIfUndefined(destination, source) {\r\n for (let property in source)\r\n if (destination[property] === undefined)\r\n destination[property] = source[property];\r\n}\r\n\r\nexport function shallowClearClone(source, ...sources) { // override previous, no null and undefined\r\n var destination = {};\r\n for (let property in source){ // TODO: Object.assign (need polyfill for IE11)\r\n let v = source[property];\r\n if (!(v === null || v===undefined))\r\n destination[property] = v;\r\n }\r\n if(sources)\r\n sources.forEach(\r\n s=>{\r\n for(let property in s){\r\n let v = s[property];\r\n if (!(v === null || v===undefined))\r\n destination[property] = v;\r\n else\r\n if (destination.hasOwnProperty(property)){\r\n delete destination[property];\r\n }\r\n }\r\n }\r\n )\r\n return destination;\r\n}\r\n\r\nfunction forEachRecursion(f, e){\r\n if (!e)\r\n return;\r\n let goOn = f(e.value); \r\n if (!(goOn===false))\r\n forEachRecursion(f, e.prev);\r\n}\r\n\r\nfunction indexRecursion(index, e){\r\n if (!e.prev)\r\n return index;\r\n indexRecursion(++index, e.prev);\r\n}\r\n\r\nexport function List(){\r\n var tail = null;\r\n var count = 0;\r\n return {\r\n add(e){\r\n if (tail){\r\n tail.next = {value:e, prev:tail, next:null};\r\n tail = tail.next;\r\n } else \r\n tail = {value:e, prev:null, next:null}\r\n count++;\r\n let node = tail;\r\n function remove(){\r\n if (node.prev){\r\n (node.prev).next = node.next;\r\n }\r\n if (node.next){\r\n (node.next).prev = node.prev;\r\n }\r\n if (tail == node){\r\n tail = node.prev;\r\n }\r\n count--;\r\n }\r\n function index(){\r\n return indexRecursion(0, node);\r\n }\r\n return {remove, index};\r\n },\r\n forEach(f){\r\n forEachRecursion(f, tail);\r\n },\r\n getTail(){ return (tail)?tail.value:null },\r\n getCount(){ return count },\r\n isEmpty(){ return count==0 },\r\n reset(){ tail=null; count = 0 }\r\n }\r\n}\r\n\r\nexport function DoublyLinkedList(getPrev, setPrev, getNext, setNext){\r\n var head = null, tail = null;\r\n var count = 0;\r\n return {\r\n add(e, next){\r\n if (!tail){\r\n head = tail = e;\r\n setPrev(e, null);\r\n setNext(e, null);\r\n }\r\n else {\r\n if (!next){\r\n setPrev(e, tail);\r\n setNext(e, null);\r\n setNext(tail, e);\r\n tail = e;\r\n } \r\n else{\r\n if (next===head)\r\n head=e;\r\n let prev = getPrev(next);\r\n setNext(e, next);\r\n setPrev(next, e);\r\n if (prev){\r\n setPrev(e, prev);\r\n setNext(prev, e);\r\n } else {\r\n setPrev(e, null);\r\n }\r\n } \r\n }\r\n count++;\r\n },\r\n remove(e){\r\n let next = getNext(e);\r\n let prev = getPrev(e);\r\n if (prev) {\r\n setNext(prev, next)\r\n }\r\n if (next) {\r\n setPrev(next, prev)\r\n }\r\n if (tail == e) {\r\n tail = prev;\r\n }\r\n if (head == e) {\r\n head = next; \r\n }\r\n count--;\r\n }, \r\n getHead(){ return head },\r\n getTail(){ return tail },\r\n getCount(){ return count },\r\n isEmpty(){ return count==0 },\r\n reset(){ \r\n tail=head=null; \r\n count = 0; }\r\n }\r\n}\r\n\r\nexport function DoublyLinkedCollection(getPrev, setPrev, getNext, setNext){\r\n var list = [];\r\n var head = null, tail = null;\r\n return {\r\n push(e){\r\n list.push(e);\r\n if (!tail){\r\n head = tail = e;\r\n setPrev(e, null);\r\n setNext(e, null);\r\n }\r\n else {\r\n setPrev(e, tail);\r\n setNext(e, null);\r\n setNext(tail, e);\r\n tail = e;\r\n }\r\n },\r\n add(e, key){\r\n list.splice(key, 0, e);\r\n if (!tail){\r\n head = tail = e;\r\n setPrev(e, null);\r\n setNext(e, null);\r\n }\r\n else {\r\n let next = list[key];\r\n if (!next) {\r\n setPrev(e, tail);\r\n setNext(e, null);\r\n setNext(tail, e);\r\n tail = e;\r\n } \r\n else {\r\n if (next===head)\r\n head=e;\r\n let prev = getPrev(next);\r\n setNext(e, next);\r\n setPrev(next, e);\r\n if (prev){\r\n setPrev(e, prev);\r\n setNext(prev, e);\r\n } else {\r\n setPrev(e, null);\r\n }\r\n } \r\n }\r\n },\r\n get: (key) => list[key],\r\n remove(key){\r\n var e = list[key];\r\n list.splice(key, 1);\r\n let next = getNext(e);\r\n let prev = getPrev(e);\r\n if (prev) {\r\n setNext(prev, next)\r\n }\r\n if (next) {\r\n setPrev(next, prev)\r\n }\r\n if (tail == e) {\r\n tail = prev;\r\n }\r\n if (head == e) {\r\n head = next; \r\n }\r\n return e;\r\n }, \r\n forLoop(f){\r\n for(let i=0; i list[key],\r\n getNext: (key, predicate) => {\r\n let count = list.length;\r\n let start = key+1;\r\n if (key functions.forEach(\r\n (f) => {\r\n if (f)\r\n f();\r\n }\r\n )\r\n}\r\n\r\nexport function defCall(...functions){\r\n for (let f of functions) \r\n if (f) {\r\n if (f instanceof Function){\r\n let tmp = f();\r\n if (tmp)\r\n return tmp;\r\n }\r\n else\r\n return f \r\n }\r\n}\r\n\r\nexport function ObservableValue(value){\r\n var list = List();\r\n return {\r\n getValue(){\r\n return value;\r\n },\r\n setValue(newValue){\r\n value = newValue;\r\n list.forEach(f=>f(newValue));\r\n },\r\n attach(f){\r\n return list.add(f)\r\n },\r\n detachAll(){\r\n list.reset();\r\n }\r\n }\r\n}\r\n\r\nexport function ObservableLambda(func){\r\n var list = List();\r\n var value = func();\r\n return {\r\n getValue(){\r\n return value;\r\n },\r\n call(){\r\n value = func();\r\n list.forEach(f=>f(value));\r\n },\r\n attach(f){\r\n return list.add(f)\r\n },\r\n detachAll(){\r\n list.reset();\r\n }\r\n }\r\n}\r\n\r\nexport function ObjectValues(object){ // Object.values(plugins) - problem for IE11; full impementation of polifill is mor complex, but for our purpose this is enough\r\n var arr = [];\r\n\tfor (var key in object) {\r\n arr.push(object[key]);\r\n\t}\r\n\treturn arr;\r\n}","export function findDirectChildByTagName(element, tagName){\r\n let value = null;\r\n for (let i = 0; i{ \r\n var event = new window.Event(eventName);\r\n e.dispatchEvent(event);\r\n }\r\n }\r\n else\r\n trigger = (e, eventName) => { // IE 11 polyfill\r\n let event = window.document.createEvent(\"CustomEvent\");\r\n event.initCustomEvent(eventName, false, false, undefined);\r\n e.dispatchEvent(event);\r\n }\r\n return trigger;\r\n}\r\n\r\nexport function closestByTagName(element, tagName){\r\n return closest(element, e => e.tagName === tagName) // TODO support xhtml? e.tagName.toUpperCase() ?\r\n}\r\n\r\nexport function closestByClassName(element, className){\r\n return closest(element, e => e.classList.contains(className))\r\n}\r\n\r\nexport function closestByAttribute(element, attributeName, attribute){\r\n return closest(element, e => e.getAttribute(attributeName)===attribute )\r\n}\r\n\r\nexport function containsAndSelf(node, otherNode ){\r\n return node === otherNode || node.contains(otherNode); \r\n}\r\n\r\nexport function getDataGuardedWithPrefix(element, prefix, name){\r\n var tmp1 = element.getAttribute('data-' + prefix + '-' + name);\r\n if (tmp1) {\r\n return tmp1;\r\n } else {\r\n var tmp2 = element.getAttribute('data-' + name);\r\n if (tmp2)\r\n return tmp2;\r\n }\r\n return null;\r\n}\r\n\r\nfunction closest(element, predicate){\r\n if (!element || !(element instanceof Element)) return null; // should be element, not document (TODO: check iframe)\r\n \r\n if (predicate(element)) return element;\r\n return closest(element.parentNode, predicate);\r\n}\r\n\r\nexport function siblingsAsArray(element){\r\n var value = []\r\n if (element.parentNode){\r\n var children = element.parentNode.children;\r\n var l = element.parentNode.children.length;\r\n if (children.length>1){\r\n for (var i=0; i < l; ++i){\r\n var e = children[i];\r\n if (e!=element)\r\n value.push(e);\r\n \r\n }\r\n }\r\n }\r\n return value;\r\n}\r\n\r\nexport function getIsRtl(element){\r\n var isRtl = false;\r\n var e = closestByAttribute(element,\"dir\",\"rtl\");\r\n if (e)\r\n isRtl = true;\r\n return isRtl;\r\n}\r\n\r\nexport function EventBinder(){\r\n var list = [];\r\n return {\r\n bind(element, eventName, handler) {\r\n element.addEventListener(eventName, handler)\r\n list.push( {element, eventName, handler} )\r\n },\r\n unbind() {\r\n list.forEach( e=> {\r\n let {element, eventName, handler}=e;\r\n element.removeEventListener(eventName, handler)\r\n })\r\n }\r\n }\r\n}\r\n\r\nexport function AttributeBackup(){\r\n var list = [];\r\n return {\r\n set(element, attributeName, attribute){\r\n var currentAtribute = element.getAttribute(attributeName); \r\n list.push( {element, currentAtribute, attribute} )\r\n element.setAttribute(attributeName, attribute)\r\n },\r\n restore(){\r\n list.forEach(e=>{\r\n let {element, attributeName, attribute} = e;\r\n if (attributeName)\r\n element.setAttribute(attributeName, attribute)\r\n else\r\n element.removeAttribute(attributeName)\r\n })\r\n }\r\n }\r\n}\r\n\r\nexport function EventLoopFlag(window) {\r\n var flag = false;\r\n return {\r\n get(){\r\n return flag;\r\n },\r\n set(){\r\n flag = true;\r\n pr = window.setTimeout( \r\n () => { \r\n flag = false;\r\n })\r\n \r\n }\r\n }\r\n}\r\n\r\nexport function EventLoopProlongableFlag(window) {\r\n var flag = false;\r\n var pr = null;\r\n return {\r\n get(){\r\n return flag;\r\n },\r\n set(timeout){\r\n if (flag && pr){\r\n window.clearTimeout(pr);\r\n }\r\n flag = true;\r\n pr = window.setTimeout( \r\n () => { \r\n flag = false;\r\n pr=null;\r\n }, timeout?timeout:0)\r\n \r\n }\r\n }\r\n}\r\n\r\nexport function ResetableFlag() {\r\n var flag = false;\r\n return {\r\n get(){\r\n return flag;\r\n },\r\n set(){\r\n flag = true;\r\n },\r\n reset(){\r\n flag = false;\r\n }\r\n }\r\n}","import {shallowClearClone, isString} from './ToolsJs';\r\n\r\nexport function addStyling(element, styling){\r\n var backupStyling = {classes:[], styles:{}}\r\n if (styling) {\r\n var {classes, styles} = styling;\r\n classes.forEach(e => element.classList.add(e)) // todo use add(classes)\r\n backupStyling.classes = classes.slice();\r\n for (let property in styles){\r\n backupStyling.styles[property] = element.style[property];\r\n element.style[property] = styles[property]; // todo use Object.assign (need polyfill for IE11)\r\n }\r\n }\r\n return backupStyling;\r\n}\r\n\r\nfunction removeStyling(element, styling){\r\n if (styling) {\r\n var {classes, styles} = styling;\r\n classes.forEach(e=>element.classList.remove(e)) // todo use remove(classes)\r\n for (let property in styles)\r\n element.style[property] = styles[property]; // todo use Object.assign (need polyfill for IE11)\r\n }\r\n}\r\n\r\nexport function toggleStyling(element, styling){\r\n var backupStyling = {classes:[], styles:{}};\r\n var isOn=false;\r\n return (value)=>{\r\n if (value) {\r\n if (isOn===false){\r\n backupStyling = addStyling(element, styling)\r\n isOn=true;\r\n }\r\n } else {\r\n if (isOn===true){\r\n removeStyling(element, backupStyling);\r\n isOn=false;\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction extendClasses(out, param, actionStr, actionArr, isRemoveEmptyClasses){\r\n if (isString(param)){\r\n if (param === \"\"){\r\n if (isRemoveEmptyClasses){\r\n out.classes = [];\r\n }\r\n } else {\r\n let c = param.split(' ');\r\n out.classes = actionStr(c);\r\n }\r\n return true;\r\n } else if (param instanceof Array){\r\n if (param.length==0){\r\n if (isRemoveEmptyClasses){\r\n out.classes = [];\r\n }\r\n }\r\n else{\r\n out.classes = actionArr(param);\r\n }\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nfunction extend(value, param, actionStr, actionArr, actionObj, isRemoveEmptyClasses){\r\n var success = extendClasses(value, param, actionStr, actionArr, isRemoveEmptyClasses);\r\n if (success === false){\r\n if (param instanceof Object){\r\n var {classes, styles} = param;\r\n extendClasses(value, classes, actionStr, actionArr, isRemoveEmptyClasses);\r\n \r\n if (styles) {\r\n value.styles = actionObj(styles);\r\n } else if (!classes) {\r\n value.styles = actionObj(param)\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function Styling(param){\r\n var value = {classes:[], styles:{}};\r\n if (param){\r\n extend(value, param, a=>a, a=>a.slice(), o=>shallowClearClone(o), true);\r\n }\r\n return Object.freeze(value);\r\n}\r\n\r\nfunction createStyling(isReplace, param, ...params){\r\n var value = {classes:[], styles:{}};\r\n if (param){\r\n extend(value, param, a=>a, a=>a.slice(), o=>shallowClearClone(o),true);\r\n if (params){\r\n var {classes, styles} = value;\r\n var extendInt = isReplace? (p)=>extend(value, p, s=>s, a=>a.slice(), o=> shallowClearClone(styles, o),true):\r\n (p)=>extend(value, p, a=>classes.concat(a), a=>classes.concat(a), o=>shallowClearClone(styles, o),false)\r\n params.forEach(p=> extendInt(p));\r\n }\r\n }\r\n return Styling(value);\r\n}\r\n\r\nexport function createCss(stylings1, stylings2){\r\n var destination = {};\r\n for (let property in stylings1) {\r\n let param1 = stylings1[property];\r\n\r\n let param2 = stylings2?stylings2[property]:undefined;\r\n if (param2===undefined)\r\n destination[property] = Styling(param1)\r\n else{\r\n destination[property] = createStyling(true, param1, param2); \r\n }\r\n }\r\n if (stylings2)\r\n for (let property in stylings2) {\r\n if (!stylings1[property])\r\n destination[property] = Styling(stylings2[property])\r\n }\r\n return destination;\r\n}\r\n\r\nexport function extendCss(stylings1, stylings2){\r\n for (let property in stylings2) {\r\n let param2 = stylings2[property];\r\n let param1 = stylings1[property];\r\n if (param1 === undefined)\r\n stylings1[property] = Styling(param2)\r\n else{\r\n stylings1[property] = createStyling(false, param1, param2); \r\n }\r\n }\r\n}","export function NavigateManager(\r\n list, getPrev, getNext\r\n){\r\n return {\r\n navigate(down, wrap /* hoveredChoice */){ \r\n if (down) {\r\n return wrap?getNext(wrap): list.getHead();\r\n } else {\r\n return wrap?getPrev(wrap): list.getTail();\r\n }\r\n },\r\n getCount(){\r\n return list.getCount()\r\n },\r\n getHead(){\r\n return list.getHead()\r\n }\r\n }\r\n}\r\n\r\nexport function FilterPredicateAspect(){\r\n return {\r\n filterPredicate: (wrap, text) => \r\n wrap.choice.searchText.indexOf(text) >= 0 \r\n }\r\n}\r\n\r\nexport function FilterManagerAspect(\r\n emptyNavigateManager,\r\n filteredNavigateManager,\r\n filteredChoicesList, \r\n choicesEnumerableAspect,\r\n filterPredicateAspect\r\n ) {\r\n let showEmptyFilter=true;\r\n let filterText = \"\";\r\n return {\r\n getNavigateManager(){\r\n return (showEmptyFilter)?emptyNavigateManager:filteredNavigateManager;\r\n },\r\n processEmptyInput(){ // redefined in PlaceholderPulgin, HighlightPlugin\r\n showEmptyFilter =true;\r\n filterText =\"\";\r\n choicesEnumerableAspect.forEach( (wrap)=>{\r\n wrap.choice.setVisible(true);\r\n });\r\n },\r\n getFilter(){\r\n return filterText;\r\n },\r\n setFilter(text){ // redefined in HighlightPlugin\r\n showEmptyFilter =false;\r\n filterText = text;\r\n filteredChoicesList.reset();\r\n choicesEnumerableAspect.forEach( (wrap)=>{\r\n wrap.choice.filteredPrev = wrap.choice.filteredNext = null;\r\n var v = filterPredicateAspect.filterPredicate(wrap, text)\r\n if (v)\r\n filteredChoicesList.add(wrap);\r\n wrap.choice.setVisible(v);\r\n });\r\n }\r\n }\r\n}\r\n\r\n\r\n","export function Wraps(wrapsCollection, \r\n listFacade_reset, listFacade_remove, listFacade_add) \r\n{\r\n return {\r\n push: (wrap) => push(wrap, wrapsCollection, listFacade_add),\r\n insert: (key, wrap) => insert(key, wrap, wrapsCollection, listFacade_add),\r\n remove: (key) => {\r\n var wrap = wrapsCollection.remove(key);\r\n listFacade_remove(wrap);\r\n return wrap;\r\n },\r\n clear: () => {\r\n wrapsCollection.reset();\r\n listFacade_reset();\r\n }, \r\n dispose: () => wrapsCollection.forLoop(wrap => wrap.dispose()) \r\n }\r\n}\r\n\r\nfunction push(wrap, wrapsCollection, listFacade_add){\r\n wrapsCollection.push(wrap);\r\n listFacade_add(wrap);\r\n}\r\n\r\nfunction insert(key, wrap, wrapsCollection, listFacade_add){\r\n if (key>=wrapsCollection.getCount()) {\r\n push(wrap, wrapsCollection, listFacade_add);\r\n }\r\n else {\r\n wrapsCollection.add(wrap, key);\r\n listFacade_add(wrap, key);\r\n }\r\n}","import {composeSync} from './ToolsJs';\r\nimport {EventBinder, EventLoopProlongableFlag, containsAndSelf} from './ToolsDom'\r\n\r\nexport function MultiSelectInlineLayout (\r\n aspects\r\n ) \r\n{\r\n let {environment,filterDom,picksDom,choicesDom, \r\n choicesVisibilityAspect, \r\n hoveredChoiceAspect, navigateAspect, filterManagerAspect,\r\n focusInAspect, optionToggleAspect,\r\n createPickHandlersAspect,\r\n picksList,\r\n inputAspect, specialPicksEventsAspect, buildChoiceAspect, \r\n setDisabledComponentAspect, resetLayoutAspect, placeholderStopInputAspect,\r\n warningAspect,\r\n configuration,\r\n createPopperAspect, rtlAspect, staticManager\r\n } = aspects;\r\n\r\n let picksElement = picksDom.picksElement;\r\n let choicesElement = choicesDom.choicesElement;\r\n\r\n // pop up layout, require createPopperPlugin\r\n let filterInputElement = filterDom.filterInputElement;\r\n let pop = createPopperAspect.create(choicesElement, filterInputElement, true);\r\n staticManager.appendToContainer = composeSync(staticManager.appendToContainer, pop.init);\r\n var origBackSpace = specialPicksEventsAspect.backSpace;\r\n specialPicksEventsAspect.backSpace = (pick) => { origBackSpace(pick); pop.update();};\r\n if (rtlAspect){\r\n let origUpdateRtl = rtlAspect.updateRtl;\r\n rtlAspect.updateRtl = (isRtl) => {\r\n origUpdateRtl(isRtl); \r\n pop.setRtl(isRtl);\r\n };\r\n }\r\n choicesVisibilityAspect.updatePopupLocation = composeSync(choicesVisibilityAspect.updatePopupLocation, \r\n function(){pop.update();}\r\n )\r\n\r\n if (warningAspect) {\r\n let pop2 = createPopperAspect.create(warningAspect.warningElement, filterInputElement, false);\r\n staticManager.appendToContainer = composeSync(staticManager.appendToContainer, pop2.init);\r\n if (rtlAspect){\r\n let origUpdateRtl2 = rtlAspect.updateRtl;\r\n rtlAspect.updateRtl = (isRtl) => {\r\n origUpdateRtl2(isRtl); \r\n pop2.setRtl(isRtl);\r\n };\r\n }\r\n var origWarningAspectShow =warningAspect.show;\r\n warningAspect.show = (msg) => {\r\n pop2.update();\r\n origWarningAspectShow(msg);\r\n }\r\n pop.dispose = composeSync(pop.dispose, pop2.dispose);\r\n }\r\n\r\n var window = environment.window;\r\n var document = window.document;\r\n var eventLoopFlag =EventLoopProlongableFlag(window); \r\n var skipFocusout = false;\r\n \r\n function getSkipFocusout() {\r\n return skipFocusout;\r\n };\r\n function resetSkipFocusout() {\r\n skipFocusout = false;\r\n };\r\n function setSkipFocusout() {\r\n skipFocusout = true;\r\n };\r\n\r\n // we want to escape the closing of the menu (because of focus out from) on a user's click inside the container\r\n var skipoutMousedown = function() {\r\n setSkipFocusout();\r\n }\r\n\r\n var documentMouseup = function(event) {\r\n // if we would left without focus then \"close the drop\" do not remove focus border\r\n if (choicesElement == event.target) \r\n filterDom.setFocus()\r\n\r\n // if click outside container - close dropdown\r\n else if ( !containsAndSelf(choicesElement, event.target) && !containsAndSelf(picksElement, event.target)) {\r\n resetLayoutAspect.resetLayout();\r\n focusInAspect.setFocusIn(false);\r\n }\r\n }\r\n\r\n function showChoices() {\r\n if ( !choicesVisibilityAspect.isChoicesVisible() )\r\n {\r\n choicesVisibilityAspect.updatePopupLocation();\r\n eventLoopFlag.set();\r\n choicesVisibilityAspect.setChoicesVisible(true);\r\n // TODO: move to scroll plugin\r\n choicesElement.scrollTop =0;\r\n // add listeners that manages close dropdown on click outside container\r\n choicesElement.addEventListener(\"mousedown\", skipoutMousedown);\r\n document.addEventListener(\"mouseup\", documentMouseup);\r\n }\r\n }\r\n\r\n function hideChoices() {\r\n resetMouseCandidateChoice();\r\n hoveredChoiceAspect.resetHoveredChoice();\r\n if (choicesVisibilityAspect.isChoicesVisible())\r\n {\r\n // COOMENT OUT DEBUGGING popup layout\r\n choicesVisibilityAspect.setChoicesVisible(false);\r\n \r\n choicesElement.removeEventListener(\"mousedown\", skipoutMousedown);\r\n document.removeEventListener(\"mouseup\", documentMouseup);\r\n }\r\n }\r\n\r\n var preventDefaultClickEvent = null;\r\n\r\n var componentDisabledEventBinder = EventBinder();\r\n\r\n\r\n // TODO: remove setTimeout: set on start of mouse event reset on end\r\n function skipoutAndResetMousedown(){\r\n skipoutMousedown();\r\n window.setTimeout(()=>resetSkipFocusout());\r\n }\r\n picksElement.addEventListener(\"mousedown\", skipoutAndResetMousedown);\r\n\r\n function clickToShowChoices(event){\r\n filterDom.setFocusIfNotTarget(event.target);\r\n if (preventDefaultClickEvent != event) {\r\n if (choicesVisibilityAspect.isChoicesVisible()){\r\n hideChoices() \r\n } else {\r\n if (filterManagerAspect.getNavigateManager().getCount()>0)\r\n showChoices();\r\n }\r\n }\r\n preventDefaultClickEvent=null;\r\n }\r\n\r\n function processUncheck(uncheckOption, event){\r\n // we can't remove item on \"click\" in the same loop iteration - it is unfrendly for 3PP event handlers (they will get detached element)\r\n // never remove elements in the same event iteration\r\n window.setTimeout(()=>uncheckOption())\r\n preventDefaultClickEvent = event; // setPreventDefaultMultiSelectEvent\r\n }\r\n\r\n // function handleOnRemoveButton(onRemove, setSelectedFalse){\r\n // // processRemoveButtonClick removes the item\r\n // // what is a problem with calling 'remove' directly (not using setTimeout('remove', 0)):\r\n // // consider situation \"MultiSelect\" on DROPDOWN (that should be closed on the click outside dropdown)\r\n // // therefore we aslo have document's click's handler where we decide to close or leave the DROPDOWN open.\r\n // // because of the event's bubling process 'remove' runs first. \r\n // // that means the event's target element on which we click (the x button) will be removed from the DOM together with badge \r\n // // before we could analize is it belong to our dropdown or not.\r\n // // important 1: we can't just the stop propogation using stopPropogate because click outside dropdown on the similar \r\n // // component that use stopPropogation will not close dropdown (error, dropdown should be closed)\r\n // // important 2: we can't change the dropdown's event handler to leave dropdown open if event's target is null because of\r\n // // the situation described above: click outside dropdown on the same component.\r\n // // Alternatively it could be possible to use stopPropogate but together create custom click event setting new target \r\n // // that belomgs to DOM (e.g. panel)\r\n\r\n\r\n // onRemove(event => {\r\n // processUncheck(setSelectedFalse, event);\r\n // hideChoices();\r\n // resetFilterAspect.resetFilter(); \r\n // });\r\n // }\r\n \r\n function handleOnRemoveButton(setSelectedFalse){ return (event) => {\r\n processUncheck(setSelectedFalse, event);\r\n resetLayoutAspect.resetLayout(); \r\n }}\r\n \r\n let mouseCandidateEventBinder = EventBinder();\r\n var resetMouseCandidateChoice = () => {\r\n mouseCandidateEventBinder.unbind();\r\n };\r\n\r\n var mouseOverToHoveredAndReset = (wrap) => {\r\n \r\n if (!wrap.choice.isHoverIn)\r\n navigateAspect.hoverIn(wrap);\r\n resetMouseCandidateChoice();\r\n };\r\n \r\n function adoptChoiceElement(wrap){\r\n let choiceElement = wrap.choice.choiceElement;\r\n // in chrome it happens on \"become visible\" so we need to skip it, \r\n // for IE11 and edge it doesn't happens, but for IE11 and Edge it doesn't happens on small \r\n // mouse moves inside the item. \r\n // https://stackoverflow.com/questions/59022563/browser-events-mouseover-doesnt-happen-when-you-make-element-visible-and-mous\r\n \r\n var onChoiceElementMouseover = () => \r\n {\r\n if (eventLoopFlag.get() )\r\n {\r\n resetMouseCandidateChoice();\r\n mouseCandidateEventBinder.bind(choiceElement, 'mousemove', ()=>mouseOverToHoveredAndReset(wrap));\r\n mouseCandidateEventBinder.bind(choiceElement, 'mousedown', ()=>mouseOverToHoveredAndReset(wrap));\r\n }\r\n else\r\n {\r\n if (!wrap.choice.isHoverIn)\r\n {\r\n // NOTE: mouseleave is not enough to guarantee remove hover styles in situations\r\n // when style was setuped without mouse (keyboard arrows)\r\n // therefore force reset manually (done inside hoverIn)\r\n navigateAspect.hoverIn(wrap);\r\n } \r\n }\r\n }\r\n \r\n // note 1: mouseleave preferred to mouseout - which fires on each descendant\r\n // note 2: since I want add aditional info panels to the dropdown put mouseleave on dropdwon would not work\r\n var onChoiceElementMouseleave = () => {\r\n if (!eventLoopFlag.get()) {\r\n hoveredChoiceAspect.resetHoveredChoice();\r\n }\r\n }\r\n var overAndLeaveEventBinder = EventBinder();\r\n overAndLeaveEventBinder.bind(choiceElement, 'mouseover', onChoiceElementMouseover);\r\n overAndLeaveEventBinder.bind(choiceElement, 'mouseleave', onChoiceElementMouseleave);\r\n\r\n return overAndLeaveEventBinder.unbind;\r\n }\r\n\r\n \r\n filterDom.onFocusIn(()=>focusInAspect.setFocusIn(true));\r\n filterDom.onFocusOut(() => { \r\n if (!getSkipFocusout()){ // skip initiated by mouse click (we manage it different way)\r\n resetLayoutAspect.resetLayout(); // if do not do this we will return to filtered list without text filter in input\r\n focusInAspect.setFocusIn(false);\r\n }\r\n resetSkipFocusout();\r\n }\r\n );\r\n\r\n // it can be initated by 3PP functionality\r\n // sample (1) BS functionality - input x button click - clears input\r\n // sample (2) BS functionality - esc keydown - clears input\r\n // and there could be difference in processing: (2) should hide the menu, then reset , when (1) should just reset without hiding.\r\n\r\n function afterInput(){\r\n let visibleCount = filterManagerAspect.getNavigateManager().getCount();\r\n\r\n if (visibleCount > 0){\r\n if (warningAspect){\r\n warningAspect.hide();\r\n }\r\n let panelIsVisble = choicesVisibilityAspect.isChoicesVisible();\r\n if (!panelIsVisble){\r\n showChoices(); \r\n }\r\n if (visibleCount == 1){\r\n navigateAspect.hoverIn(filterManagerAspect.getNavigateManager().getHead())\r\n }else{\r\n if (panelIsVisble)\r\n hoveredChoiceAspect.resetHoveredChoice();\r\n } \r\n }else{\r\n if (choicesVisibilityAspect.isChoicesVisible()){\r\n hideChoices();\r\n }\r\n if (warningAspect){\r\n if (filterManagerAspect.getFilter())\r\n warningAspect.show(configuration.noResultsWarning);\r\n else\r\n warningAspect.hide();\r\n } \r\n }\r\n }\r\n\r\n filterDom.onInput(() => {\r\n if (placeholderStopInputAspect && placeholderStopInputAspect.get()){\r\n placeholderStopInputAspect.reset();\r\n return; \r\n }\r\n let {filterInputValue, isEmpty} = inputAspect.processInput();\r\n if (isEmpty)\r\n filterManagerAspect.processEmptyInput();\r\n else\r\n filterDom.setWidth(filterInputValue); \r\n eventLoopFlag.set(); // means disable mouse handlers that set hovered item; otherwise we will get \"Hover On MouseEnter\" when filter's changes should remove hover\r\n afterInput();\r\n });\r\n\r\n function keyDownArrow(down) {\r\n let wrap = navigateAspect.navigate(down); \r\n if (wrap)\r\n {\r\n // TODO: next line should be moved to planned \"HeightAndScroll\" plugin, actual only for scrolling with keyDown functionality\r\n eventLoopFlag.set(400); // means disable mouse handlers that set hovered choice item; arrowDown can intiate scrolling when scrolling can itiate mouse leave on hovered item; this stops it\r\n navigateAspect.hoverIn(wrap); // !\r\n showChoices(); \r\n }\r\n }\r\n\r\n function hoveredToSelected(){\r\n \r\n let hoveredWrap = hoveredChoiceAspect.getHoveredChoice(); \r\n if (hoveredWrap){\r\n let wasToggled = optionToggleAspect.toggle(hoveredWrap); \r\n if (wasToggled) {\r\n resetLayoutAspect.resetLayout();\r\n }\r\n }\r\n }\r\n\r\n // TODO: bind it more declarative way? (compact code)\r\n var onKeyDown = (event) => {\r\n let keyCode = event.which;\r\n var empty = filterDom.isEmpty();\r\n if ([ 13,\r\n 27 // '27-esc' there is \"just in case\", I can imagine that there are user agents that do UNDO\r\n ].indexOf(keyCode)>=0 \r\n || (keyCode == 9 && !empty) // otherwice there are no keyup (true at least for '9-tab'),\r\n ) {\r\n event.preventDefault(); \r\n \r\n // '13-enter' - prevention against form's default button \r\n // but doesn't help with bootsrap modal ESC or ENTER (close behaviour);\r\n }\r\n if ([ 38, 40 ].indexOf(keyCode) >= 0 )\r\n event.preventDefault(); \r\n if (keyCode == 8 /*backspace*/) {\r\n // NOTE: this will process backspace only if there are no text in the input field\r\n // If user will find this inconvinient, we will need to calculate something like this\r\n // let isBackspaceAtStartPoint = (this.filterInput.selectionStart == 0 && this.filterInput.selectionEnd == 0);\r\n if (empty) {\r\n let pick = picksList.getTail();\r\n if (pick){ \r\n specialPicksEventsAspect.backSpace(pick);\r\n }\r\n }\r\n }\r\n // ---------------------------------------------------------------------------------\r\n // NOTE: no preventDefault called in case of empty for 9-tab\r\n else if (keyCode == 9 /*tab*/) { // NOTE: no keydown for this (without preventDefaul after TAB keyup event will be targeted another element) \r\n if (empty) { \r\n hideChoices(); // hideChoices inside (and no filter reset since it is empty) \r\n }\r\n }\r\n else if (keyCode == 27 /*esc*/ ) { // NOTE: forbid the ESC to close the modal (in case the nonempty or dropdown is open)\r\n if (!empty || choicesVisibilityAspect.isChoicesVisible())\r\n event.stopPropagation()\r\n }\r\n else if (keyCode == 38) {\r\n keyDownArrow(false); // up\r\n }\r\n else if (keyCode == 40) {\r\n keyDownArrow(true); // down\r\n }\r\n }\r\n var onKeyUp = (event) => {\r\n let keyCode = event.which;\r\n //var handler = keyUp[event.which/* key code */];\r\n //handler(); \r\n if (keyCode == 9) {\r\n if (choicesVisibilityAspect.isChoicesVisible()) {\r\n hoveredToSelected();\r\n } \r\n }\r\n else if (keyCode == 13 ) {\r\n if (choicesVisibilityAspect.isChoicesVisible()) {\r\n hoveredToSelected();\r\n } else {\r\n if (filterManagerAspect.getNavigateManager().getCount()>0){\r\n showChoices();\r\n }\r\n }\r\n }\r\n else if (keyCode == 27) { // escape\r\n // is it always empty (bs x can still it) \r\n resetLayoutAspect.resetLayout();\r\n }\r\n }\r\n\r\n filterDom.onKeyDown(onKeyDown); \r\n filterDom.onKeyUp(onKeyUp);\r\n\r\n let origSetDisabledComponent = setDisabledComponentAspect.setDisabledComponent; \r\n setDisabledComponentAspect.setDisabledComponent = (isComponentDisabled) => {\r\n origSetDisabledComponent(isComponentDisabled);\r\n if (isComponentDisabled)\r\n componentDisabledEventBinder.unbind();\r\n else\r\n componentDisabledEventBinder.bind(picksElement, \"click\", clickToShowChoices); \r\n }\r\n\r\n resetLayoutAspect.resetLayout = composeSync(\r\n hideChoices,\r\n ()=>{if (warningAspect)\r\n warningAspect.hide();},\r\n resetLayoutAspect.resetLayout // resetFilter by default\r\n );\r\n\r\n let origCreatePickHandlers = createPickHandlersAspect.createPickHandlers;\r\n createPickHandlersAspect.createPickHandlers = (wrap) => {\r\n let pickHandlers = origCreatePickHandlers(wrap);\r\n pickHandlers.removeOnButton = handleOnRemoveButton(pickHandlers.removeOnButton);\r\n return pickHandlers;\r\n } \r\n\r\n let origBuildChoice = buildChoiceAspect.buildChoice;\r\n buildChoiceAspect.buildChoice = (wrap) => {\r\n origBuildChoice(wrap);\r\n let pickHandlers = createPickHandlersAspect.createPickHandlers(wrap);\r\n\r\n wrap.choice.remove = composeSync(wrap.choice.remove, () => {\r\n if (pickHandlers.removeAndDispose) {\r\n pickHandlers.removeAndDispose();\r\n pickHandlers.removeAndDispose=null;\r\n }\r\n })\r\n \r\n let unbindChoiceElement = adoptChoiceElement(wrap);\r\n wrap.choice.dispose = composeSync(unbindChoiceElement, wrap.choice.dispose);\r\n }\r\n\r\n return {\r\n dispose(){\r\n resetMouseCandidateChoice();\r\n picksElement.removeEventListener(\"mousedown\", skipoutAndResetMousedown);\r\n componentDisabledEventBinder.unbind();\r\n pop.dispose(); \r\n }\r\n }\r\n}\r\n","import {PluginManager, plugStaticDom} from './PluginManager'\r\n\r\nimport {composeSync, List, extendIfUndefined} from './ToolsJs';\r\nimport {PickDomFactory} from './PickDomFactory';\r\nimport {ChoiceDomFactory} from './ChoiceDomFactory';\r\n\r\nimport {StaticDomFactory, CreateElementAspect} from './StaticDomFactory';\r\n\r\nimport {PicksDom} from './PicksDom';\r\nimport {FilterDom} from './FilterDom';\r\n\r\nimport {ChoicesDomFactory} from './ChoicesDomFactory';\r\nimport {ChoicesVisibilityAspect} from './ChoicesVisibilityAspect';\r\nimport {SpecialPicksEventsAspect} from './SpecialPicksEventsAspect';\r\n \r\nimport {ComponentPropertiesAspect, TriggerAspect, OnChangeAspect} from './ComponentPropertiesAspect';\r\nimport {OptionsAspect, OptionPropertiesAspect} from './OptionsAspect';\r\n\r\nimport {ChoicesEnumerableAspect } from './ChoicesEnumerableAspect'\r\nimport {FilterManagerAspect, NavigateManager, FilterPredicateAspect} from './FilterManagerAspect'\r\nimport {BuildAndAttachChoiceAspect, BuildChoiceAspect} from './BuildChoiceAspect'\r\nimport {OptionsLoopAspect, OptionAttachAspect} from './OptionsLoopAspect'\r\n\r\nimport {UpdateDataAspect } from './UpdateDataAspect'\r\nimport {CreateWrapAspect, CreateChoiceBaseAspect, OptionToggleAspect, CreatePickHandlersAspect, RemovePickAspect, \r\n AddPickAspect, FullMatchAspect, ChoiceClickAspect, IsChoiceSelectableAspect, ProducePickAspect} from './CreateWrapAspect.js'\r\nimport {NavigateAspect, HoveredChoiceAspect} from './NavigateAspect'\r\nimport {Wraps} from './Wraps'\r\n\r\n\r\nimport {PickButtonAspect} from './PickButtonAspect'\r\n\r\nimport {BuildPickAspect} from './BuildPickAspect'\r\nimport {InputAspect} from './InputAspect'\r\nimport {ResetFilterAspect, FocusInAspect, ResetFilterListAspect} from './ResetFilterListAspect'\r\n\r\nimport {MultiSelectInlineLayout} from './MultiSelectInlineLayout'\r\n\r\nimport {SetDisabledComponentAspect, UpdateDisabledComponentAspect, AppearanceAspect, ResetLayoutAspect} from './AppearanceAspect'\r\nimport {LoadAspect} from './LoadAspect'\r\nimport {DoublyLinkedList, ArrayFacade} from './ToolsJs'\r\nimport {CountableChoicesListInsertAspect} from './CountableChoicesListInsertAspect'\r\n\r\n/// environment - common for many; configuration for concreate\r\nexport function BsMultiSelect(element, environment, plugins, configuration, onInit){\r\n var {window} = environment;\r\n environment.isIE11 = !!window.MSInputMethodContext && !!document.documentMode;\r\n\r\n let { containerClass,\r\n css, \r\n getDisabled,\r\n options, \r\n getText\r\n } = configuration;\r\n \r\n let disposeAspect = {};\r\n let triggerAspect = TriggerAspect(element, environment.trigger);\r\n let onChangeAspect = OnChangeAspect(triggerAspect, 'dashboardcode.multiselect:change');\r\n let componentPropertiesAspect = ComponentPropertiesAspect(getDisabled??(() => false));\r\n let optionsAspect = OptionsAspect(options); \r\n let optionPropertiesAspect = OptionPropertiesAspect(getText);\r\n let isChoiceSelectableAspect = IsChoiceSelectableAspect();\r\n let createWrapAspect = CreateWrapAspect();\r\n let createChoiceBaseAspect = CreateChoiceBaseAspect(optionPropertiesAspect);\r\n //let rtlAspect = RtlAspect();\r\n //let setOptionSelectedAspect = SetOptionSelectedAspect(optionPropertiesAspect);\r\n \r\n let addPickAspect = AddPickAspect();\r\n let removePickAspect = RemovePickAspect();\r\n \r\n let createElementAspect = CreateElementAspect(name => window.document.createElement(name));\r\n \r\n let choicesDomFactory = ChoicesDomFactory(createElementAspect);\r\n let staticDomFactory = StaticDomFactory(choicesDomFactory, createElementAspect);\r\n \r\n let wrapsCollection = ArrayFacade();\r\n \r\n let countableChoicesList = DoublyLinkedList(\r\n (wrap)=>wrap.choice.itemPrev, \r\n (warp, v)=>warp.choice.itemPrev=v, \r\n (wrap)=>wrap.choice.itemNext, \r\n (wrap, v)=>wrap.choice.itemNext=v\r\n );\r\n \r\n let countableChoicesListInsertAspect = CountableChoicesListInsertAspect(countableChoicesList, wrapsCollection);\r\n\r\n let choicesEnumerableAspect = ChoicesEnumerableAspect(countableChoicesList, wrap=>wrap.choice.itemNext)\r\n \r\n let filteredChoicesList = DoublyLinkedList(\r\n (wrap)=>wrap.choice.filteredPrev, \r\n (wrap, v)=>wrap.choice.filteredPrev=v, \r\n (wrap)=>wrap.choice.filteredNext, \r\n (wrap, v)=>wrap.choice.filteredNext=v\r\n );\r\n \r\n let emptyNavigateManager = NavigateManager(\r\n countableChoicesList,\r\n (wrap)=>wrap.choice.itemPrev,\r\n (wrap)=>wrap.choice.itemNext \r\n \r\n ); \r\n let filteredNavigateManager = NavigateManager(\r\n filteredChoicesList, \r\n (wrap)=>wrap.choice.filteredPrev,\r\n (wrap)=>wrap.choice.filteredNext ); \r\n\r\n let filterPredicateAspect = FilterPredicateAspect()\r\n\r\n let filterManagerAspect = FilterManagerAspect(\r\n emptyNavigateManager,\r\n filteredNavigateManager,\r\n \r\n filteredChoicesList, \r\n choicesEnumerableAspect,\r\n filterPredicateAspect\r\n );\r\n\r\n let hoveredChoiceAspect = HoveredChoiceAspect()\r\n let navigateAspect = NavigateAspect(hoveredChoiceAspect, \r\n (down, hoveredChoice)=>filterManagerAspect.getNavigateManager().navigate(down, hoveredChoice));\r\n let picksList = List();\r\n let wraps = Wraps(\r\n wrapsCollection,\r\n ()=>countableChoicesList.reset(), \r\n (w)=>countableChoicesList.remove(w),\r\n (w, key)=>countableChoicesListInsertAspect.countableChoicesListInsert(w, key));\r\n\r\n let aspects = {\r\n environment, configuration, triggerAspect, onChangeAspect, componentPropertiesAspect, disposeAspect, \r\n countableChoicesList, countableChoicesListInsertAspect,\r\n optionsAspect, optionPropertiesAspect, \r\n createWrapAspect, createChoiceBaseAspect, isChoiceSelectableAspect, \r\n createElementAspect,\r\n choicesDomFactory, staticDomFactory,\r\n filterPredicateAspect, wrapsCollection, choicesEnumerableAspect, \r\n filteredChoicesList, filterManagerAspect, hoveredChoiceAspect, navigateAspect, picksList, wraps,\r\n addPickAspect, removePickAspect\r\n }\r\n\r\n plugStaticDom(plugins, aspects); // apply cssPatch to css, apply selectElement support; \r\n\r\n let {choicesDom, createStaticDom} = staticDomFactory.create(css)\r\n\r\n let {staticDom, staticManager} = createStaticDom(element, containerClass)\r\n\r\n // after this we can use staticDom in construtctor, this simplifies parameters passing a lot \r\n\r\n let filterDom = FilterDom(staticDom.disposablePicksElement, createElementAspect, css);\r\n let specialPicksEventsAspect = SpecialPicksEventsAspect();\r\n\r\n let choicesVisibilityAspect = ChoicesVisibilityAspect(choicesDom.choicesElement);\r\n let resetFilterListAspect = ResetFilterListAspect(filterDom, filterManagerAspect)\r\n let resetFilterAspect = ResetFilterAspect(filterDom, resetFilterListAspect)\r\n \r\n\r\n // TODO get picksDom from staticDomFactory\r\n let picksDom = PicksDom(staticDom.picksElement, staticDom.disposablePicksElement, createElementAspect, css);\r\n let focusInAspect = FocusInAspect(picksDom);\r\n \r\n let pickButtonAspect = PickButtonAspect(configuration.pickButtonHTML);\r\n \r\n let pickDomFactory = PickDomFactory(css, componentPropertiesAspect, optionPropertiesAspect, pickButtonAspect);\r\n let buildPickAspect = BuildPickAspect(picksDom, pickDomFactory);\r\n let producePickAspect = ProducePickAspect(picksList, removePickAspect, buildPickAspect)\r\n let createPickHandlersAspect = CreatePickHandlersAspect(producePickAspect);\r\n \r\n \r\n let optionToggleAspect = OptionToggleAspect(createPickHandlersAspect, addPickAspect);\r\n let fullMatchAspect = FullMatchAspect(createPickHandlersAspect, addPickAspect);\r\n let inputAspect = InputAspect(filterDom, filterManagerAspect, fullMatchAspect); \r\n\r\n let choiceClickAspect = ChoiceClickAspect(optionToggleAspect, filterDom);\r\n\r\n let choiceDomFactory = ChoiceDomFactory(css, optionPropertiesAspect, aspects.highlightAspect); // optional highlightAspect added by highlightPlugin\r\n \r\n let buildChoiceAspect = BuildChoiceAspect( choicesDom, choiceDomFactory, choiceClickAspect);\r\n let buildAndAttachChoiceAspect = BuildAndAttachChoiceAspect(buildChoiceAspect);\r\n let resetLayoutAspect = ResetLayoutAspect(() => resetFilterAspect.resetFilter());\r\n\r\n let setDisabledComponentAspect = SetDisabledComponentAspect(picksList, picksDom);\r\n let updateDisabledComponentAspect = UpdateDisabledComponentAspect(componentPropertiesAspect,setDisabledComponentAspect );\r\n let appearanceAspect = AppearanceAspect(updateDisabledComponentAspect);\r\n \r\n let optionAttachAspect = OptionAttachAspect(createWrapAspect, createChoiceBaseAspect, buildAndAttachChoiceAspect, wraps);\r\n let optionsLoopAspect = OptionsLoopAspect(optionsAspect, optionAttachAspect);\r\n let loadAspect = LoadAspect(optionsLoopAspect, appearanceAspect);\r\n let updateDataAspect = UpdateDataAspect(choicesDom, wraps, picksList, optionsLoopAspect, resetLayoutAspect);\r\n\r\n extendIfUndefined(aspects, {\r\n staticDom, picksDom, choicesDom,filterDom, resetLayoutAspect, pickDomFactory, choiceDomFactory,\r\n choicesVisibilityAspect, staticManager, buildChoiceAspect, optionToggleAspect, choiceClickAspect, \r\n buildAndAttachChoiceAspect, optionsLoopAspect, optionAttachAspect,\r\n buildPickAspect, producePickAspect, createPickHandlersAspect, inputAspect, resetFilterListAspect, resetFilterAspect, \r\n specialPicksEventsAspect,\r\n resetLayoutAspect, focusInAspect, \r\n updateDisabledComponentAspect, setDisabledComponentAspect, appearanceAspect, loadAspect,\r\n updateDataAspect, fullMatchAspect} )\r\n \r\n let pluginManager = PluginManager(plugins, aspects);\r\n \r\n let multiSelectInlineLayout = MultiSelectInlineLayout(aspects);\r\n\r\n let api = {component: \"BsMultiSelect.api\"} // key used in memory leak analyzes\r\n \r\n pluginManager.buildApi(api);\r\n // after this we can pass aspects methods call without wrapping - there should be no more overridings. TODO freeze aspects?\r\n api.dispose = composeSync(\r\n resetLayoutAspect.resetLayout,\r\n disposeAspect.dispose,\r\n pluginManager.dispose, \r\n ()=>{picksList.forEach(pick=>pick.dispose());},\r\n multiSelectInlineLayout.dispose, // TODO move to layout\r\n wraps.dispose,\r\n staticManager.dispose, picksDom.dispose, filterDom.dispose );\r\n \r\n api.updateAppearance = appearanceAspect.updateAppearance;\r\n api.updateData = updateDataAspect.updateData;\r\n api.update = () => {\r\n updateDataAspect.updateData();\r\n appearanceAspect.updateAppearance();\r\n }\r\n\r\n api.updateDisabled = updateDisabledComponentAspect.updateDisabledComponent;\r\n // TODO api.updateOption = (key) => {/* all updates: selected, disabled, hidden, text */}\r\n\r\n onInit?.(api, aspects);\r\n picksDom.pickFilterElement.appendChild(filterDom.filterInputElement);\r\n picksDom.picksElement.appendChild(picksDom.pickFilterElement); \r\n staticManager.appendToContainer();\r\n loadAspect.load();\r\n return api;\r\n}\r\n","export function HoveredChoiceAspect(){\r\n let hoveredChoice=null;\r\n return {\r\n getHoveredChoice: () => hoveredChoice,\r\n setHoveredChoice: (wrap) => {hoveredChoice = wrap},\r\n resetHoveredChoice() {\r\n if (hoveredChoice) {\r\n hoveredChoice.choice.setHoverIn(false)\r\n hoveredChoice = null;\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function NavigateAspect(hoveredChoiceAspect, navigate){\r\n return {\r\n hoverIn(wrap){\r\n hoveredChoiceAspect.resetHoveredChoice(); \r\n hoveredChoiceAspect.setHoveredChoice(wrap);\r\n wrap.choice.setHoverIn(true);\r\n },\r\n navigate: (down) => navigate(down, hoveredChoiceAspect.getHoveredChoice()), \r\n }\r\n}","export function TriggerAspect(element, trigger) {\r\n return {\r\n trigger: (eventName) => {\r\n trigger(element, eventName)\r\n }\r\n }\r\n}\r\n\r\nexport function OnChangeAspect(triggerAspect, name) {\r\n return {\r\n onChange(){\r\n triggerAspect.trigger(name)\r\n }\r\n }\r\n}\r\n\r\nexport function ComponentPropertiesAspect(getDisabled) {\r\n return {\r\n getDisabled\r\n }\r\n}\r\n\r\n","export function OptionsAspect(options){\r\n return {\r\n getOptions : () => options\r\n }\r\n}\r\n\r\nexport function OptionPropertiesAspect(getText){\r\n if (!getText){\r\n getText = (option) => option.text;\r\n }\r\n return {\r\n getText\r\n }\r\n}\r\n","import {composeSync} from './ToolsJs';\r\n\r\nexport function IsChoiceSelectableAspect(){ // TODO rename to IsSelectableByUserAspect ?\r\n return {\r\n isSelectable: (wrap)=>true \r\n }\r\n}\r\n\r\n// todo: remove?\r\nexport function ChoiceClickAspect(optionToggleAspect, filterDom){\r\n return {\r\n choiceClick: (wrap) => {\r\n optionToggleAspect.toggle(wrap);\r\n filterDom.setFocus();\r\n }\r\n }\r\n}\r\n\r\n// // fullMatchAspect trySetWrapSelected(fullMatchWrap.option, composeUpdateSelected(fullMatchWrap, true), true);\r\n\r\nexport function OptionToggleAspect(createPickHandlersAspect, addPickAspect /*, setOptionSelectedAspect*/){\r\n return {\r\n toggle: (wrap) => {\r\n let pickHandlers = createPickHandlersAspect.createPickHandlers(wrap);\r\n addPickAspect.addPick(wrap, pickHandlers);\r\n return true; // TODO: process setOptionSelectedAspect\r\n }\r\n }\r\n}\r\n\r\nexport function AddPickAspect(){\r\n return {\r\n addPick(wrap, pickHandlers){\r\n return pickHandlers.producePick();\r\n }\r\n }\r\n}\r\n\r\nexport function FullMatchAspect(createPickHandlersAspect, addPickAspect){\r\n return {\r\n fullMatch(wrap){\r\n let pickHandlers = createPickHandlersAspect.createPickHandlers(wrap);\r\n addPickAspect.addPick(wrap, pickHandlers);\r\n return true; // TODO: process setOptionSelectedAspect\r\n }\r\n }\r\n}\r\n\r\nexport function RemovePickAspect(){\r\n return {\r\n removePick(wrap, pick){\r\n pick.dispose(); // overrided in SelectedOptionPlugin with trySetWrapSelected(wrap, false);\r\n }\r\n }\r\n}\r\n\r\nexport function ProducePickAspect(picksList, removePickAspect, buildPickAspect){\r\n return {\r\n producePick(wrap, pickHandlers){\r\n let pick = buildPickAspect.buildPick(wrap, (event)=>pickHandlers.removeOnButton(event));\r\n \r\n let fixSelectedFalse = () => removePickAspect.removePick(wrap, pick)\r\n\r\n pickHandlers.removeOnButton = fixSelectedFalse;\r\n \r\n pick.pickElementAttach();\r\n let {remove: removeFromPicksList} = picksList.add(pick);\r\n pick.setSelectedFalse = fixSelectedFalse;\r\n pick.wrap = wrap; \r\n pick.dispose = composeSync(\r\n removeFromPicksList,\r\n ()=>{\r\n pick.setSelectedFalse=null;\r\n pick.wrap = null;\r\n }, \r\n pick.dispose);\r\n pickHandlers.removeAndDispose = () => pick.dispose();\r\n return pick;\r\n }\r\n }\r\n}\r\n\r\n// redefined in MultiSelectInlineLayout to redefine handlers removeOnButton\r\n// redefined in SelectedOptionPlugin to compose wrap.updateSelected\r\nexport function CreatePickHandlersAspect(producePickAspect){\r\n return{\r\n createPickHandlers(wrap){\r\n let pickHandlers = { \r\n producePick: null, // not redefined directly, but redefined in addPickAspect\r\n removeAndDispose: null, // not redefined, \r\n removeOnButton: null // redefined in MultiSelectInlineLayout\r\n }\r\n \r\n pickHandlers.producePick = () => producePickAspect.producePick(wrap, pickHandlers);\r\n return pickHandlers;\r\n }\r\n }\r\n}\r\n\r\nexport function CreateChoiceBaseAspect(optionPropertiesAspect){\r\n return {\r\n createChoiceBase(option){\r\n return {\r\n \r\n //updateDisabled:null, \r\n //updateHidden:null,\r\n \r\n // navigation and filter support\r\n filteredPrev: null, \r\n filteredNext: null, \r\n searchText: optionPropertiesAspect.getText(option).toLowerCase().trim(), // TODO make an index abstraction\r\n \r\n // internal state handlers, so they do not have \"update semantics\"\r\n isHoverIn: false,\r\n isFilteredIn: false,\r\n \r\n setVisible: null,\r\n setHoverIn: null,\r\n \r\n // TODO: is it a really sense to have them there?\r\n isChoiceElementAttached: false,\r\n choiceElement: null,\r\n choiceDom:null,\r\n choiceElementAttach: null,\r\n \r\n itemPrev: null,\r\n itemNext: null,\r\n \r\n remove: null,\r\n \r\n dispose: null\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function CreateWrapAspect(){\r\n return {\r\n createWrap(option){\r\n return {\r\n option: option\r\n }\r\n }\r\n }\r\n}","import {findDirectChildByTagName, closestByClassName} from './ToolsDom';\r\n\r\nexport function CreateElementAspect(createElement){\r\n return {\r\n createElement\r\n }\r\n}\r\n\r\nexport function StaticDomFactory(choicesDomFactory, createElementAspect){\r\n return {\r\n create(css){\r\n let choicesDom = choicesDomFactory.create(css);\r\n return {\r\n choicesDom,\r\n createStaticDom(element, containerClass){\r\n function showError(message){\r\n element.style.backgroundColor = 'red';\r\n element.style.color = 'white';\r\n throw new Error(message);\r\n }\r\n \r\n let containerElement, picksElement;\r\n let removableContainerClass= false;\r\n if (element.tagName == 'DIV') {\r\n containerElement = element;\r\n if (!containerElement.classList.contains(containerClass)){\r\n containerElement.classList.add(containerClass);\r\n removableContainerClass = true;\r\n }\r\n picksElement = findDirectChildByTagName(containerElement, 'UL');\r\n }\r\n else if (element.tagName == 'UL') {\r\n picksElement = element;\r\n containerElement = closestByClassName(element, containerClass);\r\n if (!containerElement){\r\n showError('BsMultiSelect: defined on UL but precedentant DIV for container not found; class='+containerClass);\r\n }\r\n } \r\n else if (element.tagName==\"INPUT\"){\r\n showError('BsMultiSelect: INPUT element is not supported');\r\n }\r\n let disposablePicksElement=false;\r\n if (!picksElement) {\r\n picksElement = createElementAspect.createElement('UL');\r\n disposablePicksElement = true; \r\n }\r\n \r\n return {\r\n choicesDom,\r\n staticDom: {\r\n initialElement:element,\r\n containerElement,\r\n picksElement,\r\n disposablePicksElement\r\n },\r\n staticManager: {\r\n appendToContainer(){ \r\n containerElement.appendChild(choicesDom.choicesElement); \r\n if (disposablePicksElement)\r\n containerElement.appendChild(picksElement)\r\n },\r\n dispose(){ \r\n containerElement.removeChild(choicesDom.choicesElement); \r\n if (removableContainerClass)\r\n containerElement.classList.remove(containerClass);\r\n if (disposablePicksElement)\r\n containerElement.removeChild(picksElement)\r\n }\r\n }\r\n };\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import {addStyling} from './ToolsStyling';\r\n\r\nexport function ChoicesDomFactory(createElementAspect) {\r\n return {\r\n create(css){\r\n var choicesElement = createElementAspect.createElement('DIV');\r\n var choicesListElement = createElementAspect.createElement('UL');\r\n \r\n choicesElement.appendChild(choicesListElement);\r\n choicesElement.style.display = 'none';\r\n\r\n addStyling(choicesElement, css.choices);\r\n addStyling(choicesListElement, css.choicesList);\r\n return {\r\n choicesElement,\r\n choicesListElement,\r\n createChoiceElement(){\r\n var choiceElement = createElementAspect.createElement('LI');\r\n addStyling(choiceElement, css.choice);\r\n return {\r\n choiceElement,\r\n setVisible: (isVisible) => choiceElement.style.display = isVisible ? 'block': 'none',\r\n attach: (beforeElement) => choicesListElement.insertBefore(choiceElement, beforeElement),\r\n detach: () => choicesListElement.removeChild(choiceElement)\r\n };\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","export function CountableChoicesListInsertAspect(countableChoicesList, wrapsCollection){\r\n return {\r\n countableChoicesListInsert(wrap, key){\r\n let choiceNext = wrapsCollection.getNext(key);\r\n countableChoicesList.add(wrap, choiceNext)\r\n }\r\n }\r\n}","export function ChoicesEnumerableAspect(countableChoicesList, getNext){\r\n return {\r\n forEach(f){\r\n let wrap = countableChoicesList.getHead(); \r\n while(wrap){\r\n f(wrap);\r\n wrap = getNext(wrap);\r\n }\r\n }\r\n }\r\n}","export function PluginManager(plugins, pluginData){\r\n let instances = [];\r\n if (plugins){\r\n for(let i = 0; i buttonHTML\r\n }\r\n}","import {addStyling} from './ToolsStyling';\r\nimport {EventBinder} from './ToolsDom';\r\n\r\nexport function FilterDom(disposablePicksElement, createElementAspect, css){\r\n var filterInputElement = createElementAspect.createElement('INPUT');\r\n addStyling(filterInputElement, css.filterInput);\r\n\r\n filterInputElement.setAttribute(\"type\",\"search\");\r\n filterInputElement.setAttribute(\"autocomplete\",\"off\");\r\n var eventBinder = EventBinder();\r\n return {\r\n filterInputElement,\r\n isEmpty(){return filterInputElement.value ? false : true},\r\n setEmpty(){\r\n filterInputElement.value ='';\r\n },\r\n getValue(){\r\n return filterInputElement.value;\r\n },\r\n setFocus(){\r\n filterInputElement.focus();\r\n },\r\n setWidth(text){\r\n filterInputElement.style.width = text.length * 1.3 + 2 + \"ch\"\r\n },\r\n // TODO: check why I need this comparision? \r\n setFocusIfNotTarget(target){\r\n if (target != filterInputElement)\r\n filterInputElement.focus();\r\n },\r\n onInput(onFilterInputInput){\r\n eventBinder.bind(filterInputElement,'input', onFilterInputInput);\r\n },\r\n onFocusIn(onFocusIn){\r\n eventBinder.bind(filterInputElement,'focusin', onFocusIn);\r\n },\r\n onFocusOut(onFocusOut){\r\n eventBinder.bind(filterInputElement,'focusout', onFocusOut);\r\n },\r\n onKeyDown(onfilterInputKeyDown){\r\n eventBinder.bind(filterInputElement,'keydown', onfilterInputKeyDown); \r\n },\r\n onKeyUp(onFilterInputKeyUp){\r\n eventBinder.bind(filterInputElement,'keyup', onFilterInputKeyUp);\r\n },\r\n dispose(){\r\n eventBinder.unbind();\r\n if (!disposablePicksElement){\r\n if (filterInputElement.parentNode)\r\n filterInputElement.parentNode.removeChild(filterInputElement)\r\n }\r\n }\r\n }\r\n}\r\n","export function SpecialPicksEventsAspect(){\r\n return {\r\n backSpace(pick){ \r\n pick.setSelectedFalse(); \r\n }\r\n }\r\n}","export function ResetFilterListAspect(filterDom, filterManagerAspect){\r\n return {\r\n forceResetFilter(){ // over in PlaceholderPlugin\r\n filterDom.setEmpty();\r\n filterManagerAspect.processEmptyInput(); // over in PlaceholderPlugin\r\n }\r\n }\r\n}\r\n\r\nexport function ResetFilterAspect(filterDom, resetFilterListAspect){\r\n return {\r\n resetFilter(){ // call in OptionsApiPlugin\r\n if (!filterDom.isEmpty()) // call in Placeholder\r\n resetFilterListAspect.forceResetFilter(); // over in Placeholder\r\n }\r\n }\r\n}\r\n\r\nexport function FocusInAspect(picksDom){\r\n return {\r\n setFocusIn(focus){ // call in OptionsApiPlugin\r\n picksDom.setIsFocusIn(focus) // unique call, call BsAppearancePlugin\r\n picksDom.toggleFocusStyling() // over BsAppearancePlugin\r\n }\r\n }\r\n}\r\n\r\n","import {addStyling, toggleStyling} from './ToolsStyling';\r\n\r\nexport function PicksDom(picksElement, disposablePicksElement, createElementAspect, css){\r\n var pickFilterElement = createElementAspect.createElement('LI');\r\n \r\n addStyling(picksElement, css.picks);\r\n addStyling(pickFilterElement, css.pickFilter);\r\n\r\n let disableToggleStyling = toggleStyling(picksElement, css.picks_disabled);\r\n let focusToggleStyling = toggleStyling(picksElement, css.picks_focus);\r\n let isFocusIn = false;\r\n\r\n return {\r\n picksElement,\r\n pickFilterElement,\r\n\r\n createPickElement(){\r\n var pickElement = createElementAspect.createElement('LI');\r\n addStyling(pickElement, css.pick);\r\n return {\r\n pickElement, \r\n attach: (beforeElement) => picksElement.insertBefore(pickElement, beforeElement??pickFilterElement),\r\n detach: () => picksElement.removeChild(pickElement)\r\n };\r\n },\r\n disable(isComponentDisabled){\r\n disableToggleStyling(isComponentDisabled)\r\n },\r\n toggleFocusStyling(){\r\n focusToggleStyling(isFocusIn)\r\n },\r\n getIsFocusIn(){\r\n return isFocusIn;\r\n },\r\n setIsFocusIn(newIsFocusIn){\r\n isFocusIn = newIsFocusIn\r\n }, \r\n dispose(){\r\n if (!disposablePicksElement){\r\n disableToggleStyling(false)\r\n focusToggleStyling(false)\r\n \r\n if (pickFilterElement.parentNode)\r\n pickFilterElement.parentNode.removeChild(pickFilterElement)\r\n }\r\n }\r\n }\r\n}\r\n","import {EventBinder} from './ToolsDom';\r\nimport {addStyling, toggleStyling} from './ToolsStyling';\r\n\r\nexport function PickDomFactory(css, componentPropertiesAspect, optionPropertiesAspect, pickButtonAspect){\r\n return { \r\n create(pickElement, wrap, remove){\r\n let eventBinder = EventBinder();\r\n let buttonHTML = pickButtonAspect.getButtonHTML();\r\n pickElement.innerHTML = ''+buttonHTML;\r\n let pickContentElement = pickElement.querySelector('SPAN');\r\n let pickButtonElement = pickElement.querySelector('BUTTON');\r\n eventBinder.bind(pickButtonElement, \"click\", remove);\r\n \r\n addStyling(pickContentElement, css.pickContent);\r\n addStyling(pickButtonElement, css.pickButton);\r\n let disableToggle = toggleStyling(pickContentElement, css.pickContent_disabled);\r\n\r\n function updateData(){\r\n pickContentElement.textContent = optionPropertiesAspect.getText(wrap.option); \r\n }\r\n function updateDisabled(){\r\n disableToggle(wrap.isOptionDisabled)\r\n }\r\n function updateComponentDisabled(){\r\n pickButtonElement.disabled = componentPropertiesAspect.getDisabled();\r\n }\r\n \r\n\r\n return {\r\n pickDom:{\r\n pickContentElement,\r\n pickButtonElement,\r\n },\r\n pickDomManagerHandlers:{\r\n updateData,\r\n updateDisabled,\r\n updateComponentDisabled,\r\n },\r\n dispose(){\r\n eventBinder.unbind();\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","export function BuildPickAspect(\r\n picksDom, \r\n pickDomFactory\r\n){\r\n return {\r\n buildPick(wrap, removeOnButton){\r\n let {pickElement, attach, detach} = picksDom.createPickElement(); \r\n let {dispose, pickDom, pickDomManagerHandlers} = pickDomFactory.create(pickElement, wrap, removeOnButton); \r\n \r\n pickDomManagerHandlers.updateData();\r\n if (pickDomManagerHandlers.updateDisabled)\r\n pickDomManagerHandlers.updateDisabled();\r\n if (pickDomManagerHandlers.updateComponentDisabled)\r\n pickDomManagerHandlers.updateComponentDisabled();\r\n let pick = {\r\n pickDom,\r\n pickDomManagerHandlers,\r\n pickElementAttach: attach,\r\n dispose: () => { \r\n detach(); \r\n dispose(); \r\n pick.pickDomManagerHandlers = null;\r\n pick.pickDom = pickDom;\r\n pick.pickElementAttach = null;\r\n pick.dispose = null;\r\n }\r\n }\r\n return pick;\r\n }\r\n }\r\n}","export function InputAspect(\r\n filterDom,\r\n filterManagerAspect,\r\n fullMatchAspect\r\n ){\r\n\r\n return {\r\n // overrided in SelectedOptionPlugin\r\n processInput(){ \r\n let filterInputValue = filterDom.getValue();\r\n let text = filterInputValue.trim();\r\n var isEmpty=false;\r\n if (text == '')\r\n isEmpty=true;\r\n else\r\n {\r\n filterManagerAspect.setFilter(text.toLowerCase());\r\n }\r\n \r\n if (!isEmpty)\r\n {\r\n if ( filterManagerAspect.getNavigateManager().getCount() == 1)\r\n {\r\n // todo: move exact match to filterManager\r\n let fullMatchWrap = filterManagerAspect.getNavigateManager().getHead();\r\n let text = filterManagerAspect.getFilter();\r\n if (fullMatchWrap.choice.searchText == text)\r\n {\r\n let success = fullMatchAspect.fullMatch(fullMatchWrap); \r\n if (success) {\r\n filterDom.setEmpty();\r\n isEmpty = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return {filterInputValue, isEmpty};\r\n }\r\n }\r\n}","import {EventBinder} from './ToolsDom';\r\nimport {addStyling, toggleStyling} from './ToolsStyling';\r\n\r\nexport function ChoiceDomFactory(css, optionPropertiesAspect, highlightAspect){\r\n \r\n var updateHighlightedInternal = function(wrap, choiceDom, element) {\r\n var text = optionPropertiesAspect.getText(wrap.option);\r\n var highlighter = highlightAspect.getHighlighter();\r\n if (highlighter)\r\n highlighter(element, choiceDom, text); \r\n else\r\n element.textContent = text;\r\n }\r\n var updateDataInternal = function(wrap, element){\r\n element.textContent = optionPropertiesAspect.getText(wrap.option);;\r\n }\r\n //TODO move check which aspects availbale like wrap.hasOwnProperty(\"isOptionSelected\") to there\r\n return {\r\n create(choiceElement, wrap, toggle){\r\n let choiceDom = null;\r\n let choiceDomManagerHandlers = null;\r\n let eventBinder = EventBinder();\r\n eventBinder.bind(choiceElement, \"click\", toggle);\r\n let choiceHoverToggle = toggleStyling(choiceElement, css.choice_hover);\r\n let updateHoverIn = function(){\r\n choiceHoverToggle(wrap.choice.isHoverIn);\r\n }\r\n \r\n if (wrap.hasOwnProperty(\"isOptionSelected\")){\r\n choiceElement.innerHTML = '
';\r\n \r\n let choiceContentElement = choiceElement.querySelector('DIV');\r\n let choiceCheckBoxElement = choiceContentElement.querySelector('INPUT');\r\n let choiceLabelElement = choiceContentElement.querySelector('LABEL');\r\n \r\n addStyling(choiceContentElement, css.choiceContent); \r\n addStyling(choiceCheckBoxElement, css.choiceCheckBox); \r\n addStyling(choiceLabelElement, css.choiceLabel); \r\n\r\n choiceDom = {\r\n choiceElement,\r\n choiceContentElement,\r\n choiceCheckBoxElement,\r\n choiceLabelElement\r\n };\r\n \r\n let choiceSelectedToggle = toggleStyling(choiceElement, css.choice_selected);\r\n let updateSelected = function(){ \r\n choiceSelectedToggle(wrap.isOptionSelected);\r\n choiceCheckBoxElement.checked = wrap.isOptionSelected;\r\n }\r\n\r\n let choiceDisabledToggle = toggleStyling(choiceElement, css.choice_disabled);\r\n let choiceCheckBoxDisabledToggle = toggleStyling(choiceCheckBoxElement, css.choiceCheckBox_disabled);\r\n let choiceLabelDisabledToggle = toggleStyling(choiceLabelElement, css.choiceLabel_disabled);\r\n let choiceCursorDisabledToggle = toggleStyling(choiceElement, {classes:[], styles:{cursor:\"default\"}}); \r\n let updateDisabled = function(){\r\n choiceDisabledToggle(wrap.isOptionDisabled);\r\n choiceCheckBoxDisabledToggle(wrap.isOptionDisabled);\r\n choiceLabelDisabledToggle(wrap.isOptionDisabled);\r\n \r\n // do not desable checkBox if option is selected! there should be possibility to unselect \"disabled\"\r\n let isCheckBoxDisabled = wrap.isOptionDisabled && !wrap.isOptionSelected;\r\n choiceCheckBoxElement.disabled = isCheckBoxDisabled;\r\n choiceCursorDisabledToggle(isCheckBoxDisabled);\r\n \r\n }\r\n\r\n choiceDomManagerHandlers = {\r\n updateData: ()=>updateDataInternal(wrap, choiceLabelElement),\r\n updateHighlighted: ()=>updateHighlightedInternal(wrap, choiceDom, choiceLabelElement), \r\n updateHoverIn,\r\n updateDisabled,\r\n updateSelected, \r\n }\r\n\r\n \r\n }else{\r\n choiceElement.innerHTML = '';\r\n let choiceContentElement = choiceElement.querySelector('SPAN');\r\n choiceDom = {\r\n \r\n choiceElement,\r\n choiceContentElement,\r\n };\r\n choiceDomManagerHandlers = {\r\n updateData: ()=>updateDataInternal(wrap, choiceContentElement),\r\n updateHighlighted: ()=>updateHighlightedInternal(wrap, choiceDom, choiceElement), \r\n updateHoverIn\r\n }\r\n }\r\n \r\n return {\r\n choiceDom,\r\n choiceDomManagerHandlers, \r\n dispose(){\r\n eventBinder.unbind();\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n\r\n","export function BuildAndAttachChoiceAspect(\r\n buildChoiceAspect,\r\n ){\r\n return {\r\n buildAndAttachChoice(\r\n wrap,\r\n getNextElement \r\n ){\r\n buildChoiceAspect.buildChoice(wrap);\r\n wrap.choice.choiceElementAttach(getNextElement?.());\r\n }\r\n }\r\n}\r\n\r\nexport function BuildChoiceAspect(\r\n choicesDom,\r\n choiceDomFactory,\r\n choiceClickAspect\r\n ) {\r\n return {\r\n buildChoice(wrap) {\r\n var {choiceElement, setVisible, attach, detach} = choicesDom.createChoiceElement();\r\n wrap.choice.choiceElement = choiceElement;\r\n wrap.choice.choiceElementAttach = attach;\r\n wrap.choice.isChoiceElementAttached = true;\r\n \r\n let {dispose, choiceDom, choiceDomManagerHandlers} = choiceDomFactory.create(choiceElement, wrap, () => choiceClickAspect.choiceClick(wrap));\r\n wrap.choice.choiceDom=choiceDom;\r\n choiceDomManagerHandlers.updateData();\r\n if (choiceDomManagerHandlers.updateSelected) \r\n choiceDomManagerHandlers.updateSelected();\r\n if (choiceDomManagerHandlers.updateDisabled) \r\n choiceDomManagerHandlers.updateDisabled();\r\n \r\n\r\n wrap.choice.choiceDomManagerHandlers = choiceDomManagerHandlers;\r\n \r\n wrap.choice.remove = () => {\r\n detach();\r\n };\r\n \r\n wrap.choice.isFilteredIn = true;\r\n \r\n wrap.choice.setHoverIn = (v) => {\r\n wrap.choice.isHoverIn =v ;\r\n choiceDomManagerHandlers.updateHoverIn();\r\n }\r\n \r\n wrap.choice.setVisible = (v) => {\r\n wrap.choice.isFilteredIn = v;\r\n setVisible(wrap.choice.isFilteredIn)\r\n }\r\n \r\n wrap.choice.dispose = () => {\r\n wrap.choice.choiceDomManagerHandlers = null;\r\n dispose();\r\n \r\n wrap.choice.choiceElement = null;\r\n wrap.choice.choiceDom = null;\r\n wrap.choice.choiceElementAttach = null;\r\n wrap.choice.isChoiceElementAttached = false;\r\n wrap.choice.remove = null; \r\n \r\n // not real data manipulation but internal state\r\n wrap.choice.setVisible = null; // TODO: refactor it there should be 3 types of not visibility: for hidden, for filtered out, for optgroup, for message item\r\n wrap.choice.setHoverIn = null;\r\n \r\n wrap.choice.dispose = null;\r\n }\r\n\r\n wrap.dispose = () => {\r\n wrap.choice.dispose();\r\n wrap.dispose = null;\r\n }\r\n }\r\n }\r\n}","\r\nexport function SetDisabledComponentAspect(picksList, picksDom){\r\n return {\r\n setDisabledComponent(isComponentDisabled){\r\n picksList.forEach(pick=>pick.pickDomManagerHandlers.updateComponentDisabled())\r\n picksDom.disable(isComponentDisabled);\r\n }\r\n }\r\n}\r\n\r\nexport function UpdateDisabledComponentAspect(componentPropertiesAspect, setDisabledComponentAspect\r\n ){\r\n let isComponentDisabled;\r\n return {\r\n updateDisabledComponent(){\r\n let newIsComponentDisabled = componentPropertiesAspect.getDisabled();\r\n if (isComponentDisabled!==newIsComponentDisabled){\r\n isComponentDisabled=newIsComponentDisabled;\r\n setDisabledComponentAspect.setDisabledComponent(newIsComponentDisabled);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function ResetLayoutAspect(resetLayout){\r\n return {\r\n resetLayout\r\n }\r\n}\r\n\r\nexport function AppearanceAspect(updateDisabledComponentAspect){\r\n return {\r\n updateAppearance(){\r\n updateDisabledComponentAspect.updateDisabledComponent();\r\n }\r\n }\r\n}\r\n","export function OptionAttachAspect(createWrapAspect, createChoiceBaseAspect, buildAndAttachChoiceAspect, wraps){\r\n return {\r\n attach(option){\r\n let wrap = createWrapAspect.createWrap(option);\r\n\r\n // let optGroup = optGroupAspect.getOptionOptGroup(option);\r\n // if (prevOptGroup != optGroup){\r\n // currentOptGroup = optGroup;\r\n // var optGroupWrap = optGroupBuildAspect.wrapAndAttachOptGroupItem(option);\r\n // }\r\n // wrap.optGroup = currentOptGroup;\r\n \r\n wrap.choice = createChoiceBaseAspect.createChoiceBase(option);\r\n wraps.push(wrap); // TODO move to the end\r\n buildAndAttachChoiceAspect.buildAndAttachChoice(wrap);\r\n //wraps.push(wrap);\r\n }\r\n }\r\n}\r\n\r\nexport function OptionsLoopAspect(optionsAspect, optionAttachAspect){ \r\n return{\r\n loop(){\r\n let options = optionsAspect.getOptions();\r\n for(let i = 0; ipick.dispose());\r\n picksList.reset();\r\n optionsLoopAspect.loop();\r\n }\r\n }\r\n}\r\n","const transformStyles = [\r\n {old:'selectedPanelDisabledBackgroundColor', opt:'picks_disabled', style:\"backgroundColor\"},\r\n {old:'selectedPanelFocusValidBoxShadow', opt:'picks_focus_valid', style:\"boxShadow\"},\r\n {old:'selectedPanelFocusInvalidBoxShadow', opt:'picks_focus_invalid', style:\"boxShadow\"},\r\n {old:'selectedPanelDefMinHeight', opt:'picks_def', style:\"minHeight\"},\r\n {old:'selectedPanelLgMinHeight', opt:'picks_lg', style:\"minHeight\"},\r\n {old:'selectedPanelSmMinHeight', opt:'picks_sm', style:\"minHeight\"},\r\n {old:'selectedItemContentDisabledOpacity', opt:'choiceLabel_disabled', style:\"opacity\"}\r\n]\r\n\r\nconst transformClasses = [\r\n {old:'dropDownMenuClass', opt:'choices'},\r\n {old:'dropDownItemClass', opt:'choice'},\r\n {old:'dropDownItemHoverClass', opt:'choice_hover'},\r\n {old:'selectedPanelClass', opt:'picks'},\r\n {old:'selectedItemClass', opt:'pick'},\r\n {old:'removeSelectedItemButtonClass', opt:'pickButton'},\r\n {old:'filterInputItemClass', opt:'pickFilter'},\r\n {old:'filterInputClass', opt:'filterInput'},\r\n {old:'selectedPanelFocusClass', opt:'picks_focus'},\r\n {old:'selectedPanelDisabledClass', opt:'picks_disabled'},\r\n {old:'selectedItemContentDisabledClass', opt:'pick_disabled'}\r\n]\r\n\r\nexport function adjustLegacySettings(settings){\r\n if (!settings.css)\r\n settings.css={}\r\n var css =settings.css;\r\n\r\n if (!settings.cssPatch)\r\n settings.cssPatch={}\r\n var cssPatch =settings.cssPatch;\r\n\r\n if (settings.selectedPanelFocusBorderColor || settings.selectedPanelFocusBoxShadow){\r\n console.log(\"DashboarCode.BsMultiSelect: selectedPanelFocusBorderColor and selectedPanelFocusBoxShadow are depricated, use - cssPatch:{picks_focus:{borderColor:'myValue', boxShadow:'myValue'}}\");\r\n if(!cssPatch.picks_focus){\r\n cssPatch.picks_focus = {boxShadow: settings.selectedPanelFocusBoxShadow, borderColor: settings.selectedPanelFocusBorderColor}\r\n }\r\n delete settings.selectedPanelFocusBorderColor;\r\n delete settings.selectedPanelFocusBoxShadow;\r\n }\r\n\r\n transformStyles.forEach(\r\n (i)=>{\r\n if (settings[i.old]){\r\n console.log(`DashboarCode.BsMultiSelect: ${i.old} is depricated, use - cssPatch:{${i.opt}:{${i.style}:'myValue'}}`);\r\n if(!settings[i.opt]){\r\n let opt = {}\r\n opt[i.style] = settings[i.old]\r\n settings.cssPatch[i.opt]=opt;\r\n }\r\n delete settings[i.old];\r\n }\r\n }\r\n )\r\n \r\n transformClasses.forEach( (i) => {\r\n if (settings[i.old]){\r\n console.log(`DashboarCode.BsMultiSelect: ${i.old} is depricated, use - css:{${i.opt}:'myValue'}`);\r\n if(!css[i.opt]){\r\n css[i.opt]= settings[i.old]\r\n }\r\n delete settings[i.old];\r\n }\r\n })\r\n \r\n if (settings.inputColor){\r\n console.log(\"DashboarCode.BsMultiSelect: inputColor is depricated, remove parameter\");\r\n delete settings.inputColor;\r\n }\r\n\r\n if (settings.useCss){\r\n console.log(\"DashboarCode.BsMultiSelect: useCss(=true) is depricated, use - 'useCssPatch: false'\");\r\n if(!css.pick_disabled){\r\n settings.useCssPatch = !settings.useCss\r\n }\r\n delete settings.useCss;\r\n } \r\n\r\n if (settings.getIsValid || settings.getIsInValid){\r\n throw \"DashboarCode.BsMultiSelect: parameters getIsValid and getIsInValid are depricated and removed, use - getValidity that should return (true|false|null) \"\r\n } \r\n}","import {BsMultiSelect} from './BsMultiSelect'\r\nimport {plugMergeSettings, plugDefaultConfig} from './PluginManager'\r\n\r\nimport {adjustLegacySettings} from './BsMultiSelectDepricatedParameters'\r\n\r\nimport {createCss} from './ToolsStyling'\r\nimport {extendIfUndefined} from './ToolsJs'\r\n\r\n// TODO: remove environment - replace it with plugins\r\nexport function MultiSelectBuilder(environment, plugins) \r\n{\r\n const defaults = {containerClass: \"dashboardcode-bsmultiselect\"}\r\n\r\n let create = (element, options) => { \r\n if (options && options.plugins)\r\n console.log(\"DashboarCode.BsMultiSelect: 'options.plugins' is depricated, use - MultiSelectBuilder(environment, plugins) instead\");\r\n let configuration = {};\r\n let buildConfiguration;\r\n if (options instanceof Function) {\r\n buildConfiguration = options;\r\n options = null;\r\n } else {\r\n buildConfiguration = options?.buildConfiguration;\r\n }\r\n if (options){\r\n adjustLegacySettings(options);\r\n }\r\n configuration.css = createCss(defaults.css, options?.css);\r\n plugMergeSettings(plugins, configuration, defaults, options); // merge settings.cssPatch and defaults.cssPatch\r\n extendIfUndefined(configuration, options);\r\n extendIfUndefined(configuration, defaults);\r\n let onInit = buildConfiguration?.(element, configuration);\r\n let multiSelect = BsMultiSelect(element, environment, plugins, configuration, onInit); // onInit(api, aspects) - before load data\r\n return multiSelect;\r\n }\r\n plugDefaultConfig(plugins, defaults);\r\n return {create, defaultSettings: defaults}\r\n}\r\n","import {addToJQueryPrototype} from './AddToJQueryPrototype'\r\n\r\nimport {composeSync, shallowClearClone, ObjectValues, isString} from './ToolsJs'\r\nimport {composeEventTrigger} from './ToolsDom'\r\n\r\nimport {MultiSelectBuilder} from './MultiSelectBuilder'\r\n\r\nexport function createForJQuery(window, $, createPopper, name, pluginsSet, stylePlugin){\r\n let trigger = null;\r\n let isJQyery = $ && !window.document.body.hasAttribute('data-bs-no-jquery');\r\n if (isJQyery) {\r\n trigger = (e, eventName) => $(e).trigger(eventName);\r\n } else {\r\n trigger = composeEventTrigger(window);\r\n }\r\n let plugins = shallowClearClone({stylePlugin}, pluginsSet);\r\n\r\n let environment = {trigger, window, createPopper}\r\n let pluginsArray = ObjectValues(plugins)\r\n let {create, defaultSettings} = MultiSelectBuilder(environment, pluginsArray);\r\n let createForUmd = (element, settings) => {\r\n if (isString(element))\r\n element = window.document.querySelector(element);\r\n return create(element, settings);\r\n }\r\n createForUmd.Default = defaultSettings;\r\n\r\n if (isJQyery) {\r\n let constructorForJquery = (element, settings, removeInstanceData) => {let multiSelect = create(element, settings); multiSelect.dispose = composeSync(multiSelect.dispose, removeInstanceData); return multiSelect;} \r\n let prototypable = addToJQueryPrototype(name, constructorForJquery, $);\r\n \r\n prototypable.defaults = defaultSettings;\r\n }\r\n return createForUmd; \r\n}\r\n","export function addToJQueryPrototype(pluginName, createPlugin, $){\r\n const firstChar = pluginName.charAt(0);\r\n const firstCharLower = firstChar.toLowerCase();\r\n if (firstCharLower == firstChar) {\r\n throw new Error(`Plugin name '${pluginName}' should be started from upper case char`)\r\n }\r\n const prototypableName = firstCharLower + pluginName.slice(1)\r\n const noConflictPrototypable = $.fn[prototypableName];\r\n const noConflictPrototypableForInstance = $.fn[pluginName];\r\n const dataKey = `DashboardCode.${pluginName}`;\r\n\r\n function createInstance(options, e, $e){\r\n const optionsRef = (typeof options === 'object') || options instanceof Function ? options:null;\r\n let instance = createPlugin(e, optionsRef,\r\n () => {\r\n $e.removeData(dataKey)\r\n });\r\n $e.data(dataKey, instance);\r\n return instance;\r\n }\r\n\r\n function prototypable(options){\r\n let output=[];\r\n this.each( function (i, e) {\r\n let $e = $(e);\r\n let instance = $e.data(dataKey)\r\n let isMethodName = typeof options === 'string';\r\n if (!instance) {\r\n if (isMethodName && /Dispose/.test(options)) \r\n return;\r\n instance = createInstance(options, e, $e);\r\n }\r\n if (isMethodName) {\r\n let methodName = options;\r\n if (typeof instance[methodName] === 'undefined') {\r\n let lMethodName = methodName.charAt(0).toLowerCase() + methodName.slice(1)\r\n if ( typeof instance[lMethodName] === 'undefined') {\r\n throw new Error(`No method named '${methodName}'`)\r\n } else {\r\n methodName = lMethodName;\r\n }\r\n }\r\n let result = instance[methodName]();\r\n if (result !== undefined){\r\n output.push(result);\r\n }\r\n }\r\n })\r\n if (output.length==0)\r\n return this;\r\n else if (output.length==1)\r\n return output[0];\r\n else\r\n return output;\r\n }\r\n\r\n function prototypableForInstance(options){\r\n let instance = this.data(dataKey);\r\n if (instance)\r\n return instance;\r\n else if (this.length === 1){\r\n return createInstance(options, this.get(0), this);\r\n } else if (this.length > 1){\r\n let output=[];\r\n this.each(function(i, e){\r\n output.push(createInstance(options, e, $(e)));\r\n })\r\n return output;\r\n }\r\n }\r\n \r\n $.fn[prototypableName] = prototypable;\r\n $.fn[prototypableName].noConflict = function () {\r\n $.fn[prototypableName] = noConflictPrototypable\r\n return prototypable;\r\n }\r\n\r\n $.fn[pluginName] = prototypableForInstance;\r\n $.fn[pluginName].noConflict = function () {\r\n $.fn[pluginName] = noConflictPrototypableForInstance\r\n return prototypableForInstance;\r\n }\r\n\r\n return prototypable;\r\n}","import {defCall} from '../ToolsJs';\r\n\r\nexport function LabelPlugin(pluginData){\r\n let {configuration, staticDom, filterDom} = pluginData;\r\n let {containerClass, label} = configuration\r\n let getLabelElementAspect = () => defCall(label); \r\n let labelPluginData = {getLabelElementAspect}; // overrided by BS Appearance Plugin\r\n pluginData.labelPluginData=labelPluginData;\r\n let createInputId = null;\r\n let {selectElement, containerElement} = staticDom;\r\n let {filterInputElement} = filterDom;\r\n if(selectElement)\r\n createInputId = () => `${containerClass}-generated-input-${((selectElement.id)?selectElement.id:selectElement.name).toLowerCase()}-id`;\r\n else\r\n createInputId = () => `${containerClass}-generated-filter-${containerElement.id}`;\r\n\r\n return {\r\n buildApi(){\r\n let labelElement = labelPluginData.getLabelElementAspect();\r\n let backupedForAttribute = null; // state saved between init and dispose\r\n if (labelElement) {\r\n backupedForAttribute = labelElement.getAttribute('for');\r\n var newId = createInputId();\r\n filterInputElement.setAttribute('id', newId);\r\n labelElement.setAttribute('for',newId);\r\n }\r\n if (backupedForAttribute)\r\n return () => labelElement.setAttribute('for',backupedForAttribute);\r\n }\r\n }\r\n}","import {getIsRtl, AttributeBackup} from '../ToolsDom';\r\nimport {isBoolean} from '../ToolsJs';\r\n\r\nexport function RtlPlugin(pluginData){\r\n \r\n let {configuration, rtlAspect, staticDom} = pluginData;\r\n let {isRtl} = configuration;\r\n let forceRtlOnContainer = false; \r\n if (isBoolean(isRtl))\r\n forceRtlOnContainer = true;\r\n else\r\n isRtl = getIsRtl(staticDom.initialElement);\r\n \r\n var attributeBackup = AttributeBackup();\r\n if (forceRtlOnContainer){\r\n attributeBackup.set(staticDom.containerElement, \"dir\", \"rtl\");\r\n }\r\n else if (staticDom.selectElement){\r\n var dirAttributeValue = staticDom.selectElement.getAttribute(\"dir\");\r\n if (dirAttributeValue){\r\n attributeBackup.set(staticDom.containerElement, \"dir\", dirAttributeValue);\r\n }\r\n } \r\n \r\n return {\r\n buildApi(api){\r\n // TODO there is something wrong with this. may be should moved to specific plugin\r\n // sample of correct plugin - aspect pair is WarningPlugin: aspect is added on plugin constrictor\r\n if (rtlAspect.updateRtl)\r\n rtlAspect.updateRtl(isRtl);\r\n },\r\n dispose(){\r\n attributeBackup.restore;\r\n }\r\n }\r\n}\r\n\r\nRtlPlugin.plugStaticDom = (aspects) => {\r\n aspects.rtlAspect = RtlAspect();\r\n}\r\n\r\nfunction RtlAspect() {\r\n return {\r\n updateRtl(){},\r\n }\r\n}","function createValidity(valueMissing, customError){\r\n return Object.freeze({\r\n valueMissing,\r\n customError,\r\n valid: !(valueMissing || customError),\r\n });\r\n}\r\n\r\nexport function ValidityApi(visibleElement, isValueMissingObservable, valueMissingMessage, onValid, trigger){\r\n var customValidationMessage = \"\";\r\n var validationMessage = \"\";\r\n var validity = null;\r\n var willValidate = true;\r\n \r\n function setMessage(valueMissing, customError){\r\n validity = createValidity(valueMissing, customError);\r\n validationMessage = customError?customValidationMessage:(valueMissing?valueMissingMessage:\"\")\r\n visibleElement.setCustomValidity(validationMessage);\r\n onValid(validity.valid);\r\n }\r\n\r\n setMessage(isValueMissingObservable.getValue(), false);\r\n\r\n isValueMissingObservable.attach(\r\n (value) => {\r\n setMessage(value, validity.customError);\r\n }\r\n );\r\n var checkValidity = () => {\r\n if (!validity.valid)\r\n trigger('dashboardcode.multiselect:invalid')\r\n return validity.valid;\r\n }\r\n return {\r\n validationMessage,\r\n willValidate,\r\n validity,\r\n setCustomValidity(message){\r\n customValidationMessage = message;\r\n setMessage(validity.valueMissing, customValidationMessage?true:false);\r\n },\r\n checkValidity,\r\n reportValidity(){\r\n visibleElement.reportValidity();\r\n return checkValidity();\r\n }\r\n }\r\n}","import {ValidityApi} from '../ValidityApi'\r\nimport {ObservableValue, ObservableLambda, defCall, isBoolean, composeSync} from '../ToolsJs';\r\nimport {getDataGuardedWithPrefix} from '../ToolsDom';\r\n\r\nconst defValueMissingMessage = 'Please select an item in the list'\r\n\r\nexport function ValidationApiPlugin(pluginData){\r\n var {configuration, triggerAspect, onChangeAspect, optionsAspect, \r\n staticDom, filterDom, updateDataAspect} = pluginData;\r\n // TODO: required could be a function\r\n let {getIsValueMissing, valueMissingMessage, required, getValueRequired} = configuration;\r\n if (!isBoolean(required))\r\n required = getValueRequired(); \r\n valueMissingMessage = defCall(valueMissingMessage,\r\n ()=> getDataGuardedWithPrefix(staticDom.initialElement,\"bsmultiselect\",\"value-missing-message\"),\r\n defValueMissingMessage)\r\n\r\n if (!getIsValueMissing) {\r\n getIsValueMissing = () => {\r\n let count = 0;\r\n let optionsArray = optionsAspect.getOptions();\r\n for (var i=0; i < optionsArray.length; i++) {\r\n if (optionsArray[i].selected) \r\n count++;\r\n }\r\n return count===0;\r\n }\r\n }\r\n \r\n var isValueMissingObservable = ObservableLambda(()=>required && getIsValueMissing());\r\n var validationApiObservable = ObservableValue(!isValueMissingObservable.getValue());\r\n\r\n onChangeAspect.onChange = composeSync(isValueMissingObservable.call, onChangeAspect.onChange);\r\n updateDataAspect.updateData = composeSync(isValueMissingObservable.call, updateDataAspect.updateData);\r\n pluginData.validationApiPluginData = {validationApiObservable};\r\n\r\n var validationApi = ValidityApi(\r\n filterDom.filterInputElement, \r\n isValueMissingObservable, \r\n valueMissingMessage,\r\n (isValid)=>validationApiObservable.setValue(isValid),\r\n triggerAspect.trigger\r\n );\r\n\r\n return {\r\n buildApi(api){\r\n api.validationApi = validationApi;\r\n },\r\n dispose(){\r\n isValueMissingObservable.detachAll(); \r\n validationApiObservable.detachAll();\r\n }\r\n }\r\n}\r\n\r\nValidationApiPlugin.plugDefaultConfig = (defaults)=>{\r\n defaults.getValueRequired = function(){\r\n return false;\r\n }\r\n defaults.valueMissingMessage = '';\r\n}","import {closestByClassName, siblingsAsArray} from '../ToolsDom';\r\nimport {addStyling} from '../ToolsStyling'\r\nimport {ObservableLambda, composeSync} from '../ToolsJs';\r\n\r\nexport function BsAppearancePlugin(pluginData){\r\n let {configuration, validationApiPluginData, \r\n picksDom, staticDom, labelPluginData, appearanceAspect, componentPropertiesAspect, floatingLabelAspect} = pluginData;\r\n let {getValidity, getSize, useCssPatch, css, composeGetSize, getDefaultLabel} = configuration;\r\n let selectElement = staticDom.selectElement;\r\n \r\n let initialElement = staticDom.initialElement;\r\n\r\n let isFloatingLabel = false;\r\n if (floatingLabelAspect){\r\n isFloatingLabel = closestByClassName(initialElement, 'form-floating');\r\n floatingLabelAspect.isFloatingLabel = () => isFloatingLabel\r\n }\r\n\r\n if (labelPluginData){\r\n let origGetLabelElementAspect = labelPluginData.getLabelElementAspect;\r\n labelPluginData.getLabelElementAspect = () => {\r\n var e = origGetLabelElementAspect();\r\n if (e)\r\n return e;\r\n else{\r\n if (selectElement){\r\n let labelElement = getDefaultLabel(selectElement);\r\n return labelElement;\r\n }\r\n }\r\n }\r\n }\r\n \r\n if (staticDom.selectElement) {\r\n if(!getValidity)\r\n getValidity = composeGetValidity(selectElement)\r\n if(!getSize) \r\n getSize = composeGetSize(selectElement)\r\n } else {\r\n if (!getValidity)\r\n getValidity = () => null\r\n if (!getSize)\r\n getSize = () => null\r\n }\r\n\r\n componentPropertiesAspect.getSize=getSize;\r\n componentPropertiesAspect.getValidity=getValidity;\r\n\r\n var updateSize;\r\n if (!useCssPatch){\r\n updateSize= () => updateSizeForAdapter(picksDom.picksElement, getSize)\r\n }\r\n else{\r\n let {picks_lg, picks_sm, picks_def, picks_floating_def} = css;\r\n if (isFloatingLabel)\r\n picks_lg = picks_sm = picks_def = picks_floating_def;\r\n updateSize = () => updateSizeJsForAdapter(picksDom.picksElement, picks_lg, picks_sm, picks_def, getSize);\r\n }\r\n\r\n if (useCssPatch){\r\n var origToggleFocusStyling = picksDom.toggleFocusStyling;\r\n picksDom.toggleFocusStyling = () => {\r\n var validity = validationObservable.getValue();\r\n var isFocusIn = picksDom.getIsFocusIn();\r\n origToggleFocusStyling(isFocusIn)\r\n if (isFocusIn){\r\n if (validity===false) { \r\n // but not toggle events (I know it will be done in future)\r\n picksDom.setIsFocusIn(isFocusIn);\r\n \r\n addStyling(picksDom.picksElement, css.picks_focus_invalid)\r\n } else if (validity===true) {\r\n // but not toggle events (I know it will be done in future)\r\n picksDom.setIsFocusIn(isFocusIn);\r\n \r\n addStyling(picksDom.picksElement, css.picks_focus_valid) \r\n } \r\n }\r\n }\r\n }\r\n\r\n var getWasValidated = () => {\r\n var wasValidatedElement = closestByClassName(staticDom.initialElement, 'was-validated');\r\n return wasValidatedElement?true:false;\r\n }\r\n var wasUpdatedObservable = ObservableLambda(()=>getWasValidated());\r\n var getManualValidationObservable = ObservableLambda(()=>getValidity());\r\n let validationApiObservable = validationApiPluginData?.validationApiObservable;\r\n \r\n var validationObservable = ObservableLambda(\r\n () => wasUpdatedObservable.getValue()?validationApiObservable.getValue():getManualValidationObservable.getValue()\r\n )\r\n \r\n validationObservable.attach(\r\n (value)=>{\r\n var {validMessages, invalidMessages} = getMessagesElements(staticDom.containerElement);\r\n updateValidity( picksDom.picksElement, validMessages, invalidMessages, value);\r\n picksDom.toggleFocusStyling();\r\n }\r\n )\r\n wasUpdatedObservable.attach(\r\n ()=>validationObservable.call()\r\n )\r\n if (validationApiObservable)\r\n validationApiObservable.attach(\r\n ()=>validationObservable.call()\r\n )\r\n getManualValidationObservable.attach(\r\n ()=>validationObservable.call()\r\n )\r\n\r\n appearanceAspect.updateAppearance = composeSync(\r\n appearanceAspect.updateAppearance, \r\n updateSize, \r\n validationObservable.call, getManualValidationObservable.call);\r\n\r\n return {\r\n buildApi(api){\r\n api.updateSize = updateSize;\r\n api.updateValidity = ()=> getManualValidationObservable.call();\r\n api.updateWasValidated = ()=>wasUpdatedObservable.call();\r\n },\r\n dispose(){\r\n wasUpdatedObservable.detachAll();\r\n validationObservable.detachAll();\r\n getManualValidationObservable.detachAll();\r\n }\r\n }\r\n}\r\n\r\nfunction updateValidity(picksElement, validMessages, invalidMessages, validity){\r\n if (validity===false){\r\n picksElement.classList.add('is-invalid');\r\n picksElement.classList.remove('is-valid');\r\n invalidMessages.map(e=>e.style.display='block'); \r\n validMessages.map(e=>e.style.display='none'); \r\n }\r\n else if (validity===true){\r\n picksElement.classList.remove('is-invalid');\r\n picksElement.classList.add('is-valid');\r\n invalidMessages.map(e=>e.style.display='none'); \r\n validMessages.map(e=>e.style.display='block'); \r\n }else {\r\n picksElement.classList.remove('is-invalid');\r\n picksElement.classList.remove('is-valid');\r\n invalidMessages.map(e=>e.style.display=''); \r\n validMessages.map(e=>e.style.display=''); \r\n }\r\n}\r\n\r\nfunction updateSizeClasses(picksElement, size){\r\n if (size==\"lg\"){\r\n picksElement.classList.add('form-control-lg');\r\n picksElement.classList.remove('form-control-sm');\r\n }\r\n else if (size==\"sm\"){\r\n picksElement.classList.remove('form-control-lg');\r\n picksElement.classList.add('form-control-sm');\r\n }\r\n else{\r\n picksElement.classList.remove('form-control-lg');\r\n picksElement.classList.remove('form-control-sm');\r\n }\r\n}\r\n\r\nfunction updateSizeJsPicks(picksElement, picksLgStyling, picksSmStyling, picksDefStyling, size){\r\n if (size==\"lg\"){\r\n addStyling(picksElement, picksLgStyling);\r\n } else if (size==\"sm\"){\r\n addStyling(picksElement, picksSmStyling);\r\n } else {\r\n addStyling(picksElement, picksDefStyling);\r\n }\r\n}\r\n\r\nfunction updateSizeJs(picksElement, picksLgStyling, picksSmStyling, picksDefStyling, size){\r\n updateSizeClasses(picksElement, size);\r\n updateSizeJsPicks(picksElement, picksLgStyling, picksSmStyling, picksDefStyling, size)\r\n}\r\n\r\nfunction updateSizeForAdapter(picksElement, getSize){\r\n updateSizeClasses(picksElement, getSize())\r\n}\r\n\r\nfunction updateSizeJsForAdapter(picksElement, picksLgStyling, picksSmStyling, picksDefStyling, getSize){\r\n updateSizeJs(picksElement, picksLgStyling, picksSmStyling, picksDefStyling, getSize())\r\n}\r\n\r\nfunction getMessagesElements(containerElement){\r\n var siblings = siblingsAsArray(containerElement);\r\n var invalidMessages = siblings.filter(e=>e.classList.contains('invalid-feedback') || \r\n e.classList.contains('invalid-tooltip'));\r\n var validMessages = siblings.filter(e=>e.classList.contains('valid-feedback') || \r\n e.classList.contains('valid-tooltip'));\r\n return {validMessages, invalidMessages} \r\n} \r\n\r\nfunction composeGetValidity(selectElement){\r\n var getValidity = () => \r\n selectElement.classList.contains('is-invalid')?false:\r\n (selectElement.classList.contains('is-valid')?true:null);\r\n return getValidity;\r\n}\r\n\r\n\r\n\r\n","export function HiddenOptionPlugin(aspects){\r\n let {configuration, createWrapAspect, isChoiceSelectableAspect,\r\n wrapsCollection, buildChoiceAspect, buildAndAttachChoiceAspect,\r\n countableChoicesListInsertAspect, countableChoicesList} = aspects;\r\n\r\n countableChoicesListInsertAspect.countableChoicesListInsert = (wrap, key) => {\r\n if ( !wrap.isOptionHidden ){\r\n let choiceNext = wrapsCollection.getNext(key, c=>!c.isOptionHidden );\r\n countableChoicesList.add(wrap, choiceNext)\r\n }\r\n }\r\n\r\n let origBuildAndAttachChoice = buildAndAttachChoiceAspect.buildAndAttachChoice;\r\n buildAndAttachChoiceAspect.buildAndAttachChoice=(wrap, getNextElement)=>{\r\n if (wrap.isOptionHidden){ \r\n buildHiddenChoice(wrap);\r\n }\r\n else{ \r\n origBuildAndAttachChoice(wrap, getNextElement);\r\n }\r\n }\r\n\r\n var origIsSelectable = isChoiceSelectableAspect.isSelectable;\r\n isChoiceSelectableAspect.isSelectable = (wrap) => origIsSelectable(wrap) && !wrap.isOptionHidden;\r\n\r\n let {getIsOptionHidden, options} = configuration;\r\n if (options) {\r\n if (!getIsOptionHidden)\r\n getIsOptionHidden = (option) => (option.hidden===undefined)?false:option.hidden; \r\n } else {\r\n if (!getIsOptionHidden)\r\n getIsOptionHidden = (option) => {\r\n return option.hidden; \r\n } \r\n }\r\n \r\n var origCreateWrap = createWrapAspect.createWrap;\r\n createWrapAspect.createWrap = (option) => {\r\n let wrap = origCreateWrap(option);\r\n wrap.isOptionHidden = getIsOptionHidden(option);\r\n return wrap;\r\n };\r\n\r\n return {\r\n buildApi(api){ \r\n let getNextNonHidden = (key) => wrapsCollection.getNext(key, c => !c.isOptionHidden );\r\n\r\n api.updateOptionsHidden = () => \r\n wrapsCollection.forLoop( (wrap, key) => \r\n updateChoiceHidden(wrap, key, getNextNonHidden, countableChoicesList, getIsOptionHidden, buildChoiceAspect)\r\n );\r\n\r\n api.updateOptionHidden = (key) => \r\n updateChoiceHidden(wrapsCollection.get(key), key, getNextNonHidden, countableChoicesList, getIsOptionHidden, buildChoiceAspect);\r\n // TODO create updateHidden ? \r\n // it is too complex since we need to find the next non hidden, when this depends on key \r\n // there should be the backreference \"wrap -> index\" invited before\r\n // api.updateOptionHidden = (key) => wrapsCollection.get(key).updateHidden();\r\n }\r\n }\r\n}\r\n\r\nfunction buildHiddenChoice(wrap){\r\n wrap.updateSelected = () => void 0;\r\n \r\n wrap.choice.isChoiceElementAttached = false;\r\n wrap.choice.choiceElement = null;\r\n wrap.choice.choiceElementAttach = null;\r\n wrap.choice.setVisible = null; \r\n wrap.choice.setHoverIn = null;\r\n wrap.choice.remove = null; \r\n \r\n wrap.choice.dispose = () => { \r\n wrap.choice.dispose = null;\r\n };\r\n\r\n wrap.dispose = () => { \r\n wrap.choice.dispose();\r\n wrap.dispose = null;\r\n };\r\n}\r\n\r\nfunction updateChoiceHidden(wrap, key, getNextNonHidden, countableChoicesList, getIsOptionHidden, buildChoiceAspect){\r\n let newIsOptionHidden = getIsOptionHidden(wrap.option);\r\n if (newIsOptionHidden != wrap.isOptionHidden)\r\n {\r\n wrap.isOptionHidden= newIsOptionHidden;\r\n if (wrap.isOptionHidden) {\r\n\r\n countableChoicesList.remove(wrap);\r\n wrap.choice.remove(); \r\n buildHiddenChoice(wrap);\r\n } else {\r\n let nextChoice = getNextNonHidden(key);\r\n countableChoicesList.add(wrap, nextChoice);\r\n buildChoiceAspect.buildChoice(wrap);\r\n wrap.choice.choiceElementAttach(nextChoice?.choice.choiceElement);\r\n }\r\n }\r\n}\r\n","import {createCss, extendCss} from '../ToolsStyling';\r\nimport {isBoolean} from '../ToolsJs';\r\n\r\nexport function CssPatchPlugin(){\r\n}\r\n\r\nCssPatchPlugin.plugMergeSettings = (configuration, defaults, settings) => {\r\n let cssPatch = settings?.cssPatch;\r\n if (isBoolean(cssPatch))\r\n throw new Error(\"BsMultiSelect: 'cssPatch' was used instead of 'useCssPatch'\") // often type of error\r\n configuration.cssPatch = createCss(defaults.cssPatch, cssPatch); // replace classes, merge styles\r\n}\r\n\r\nCssPatchPlugin.plugStaticDom = (configurationPluginData) => {\r\n let {configuration} = configurationPluginData;\r\n if (configuration.useCssPatch)\r\n extendCss(configuration.css, configuration.cssPatch); \r\n}","import {composeSync} from '../ToolsJs';\r\nimport {getDataGuardedWithPrefix} from '../ToolsDom';\r\nimport {toggleStyling} from '../ToolsStyling';\r\nimport {ResetableFlag} from '../ToolsDom'\r\n\r\nexport function PlaceholderPlugin(aspects){\r\n let {configuration, staticManager, picksList, picksDom, filterDom, staticDom, updateDataAspect,\r\n resetFilterListAspect, filterManagerAspect, environment} = aspects;\r\n let isIE11 = environment.isIE11;\r\n let {placeholder, css} = configuration;\r\n let {picksElement} = picksDom;\r\n let filterInputElement = filterDom.filterInputElement;\r\n\r\n function setPlaceholder(placeholder){\r\n filterInputElement.placeholder = placeholder;\r\n }\r\n if (isIE11){\r\n var ignoreNextInputResetableFlag = ResetableFlag(); \r\n let placeholderStopInputAspect = PlaceholderStopInputAspect(ignoreNextInputResetableFlag);\r\n var setPlaceholderOrig = setPlaceholder;\r\n setPlaceholder = function(placeholder){\r\n ignoreNextInputResetableFlag.set();\r\n setPlaceholderOrig(placeholder);\r\n }\r\n \r\n aspects.placeholderStopInputAspect=placeholderStopInputAspect;\r\n }\r\n\r\n if (!placeholder){\r\n placeholder = getDataGuardedWithPrefix(staticDom.initialElement,\"bsmultiselect\",\"placeholder\");\r\n }\r\n\r\n function setEmptyInputWidth(isVisible){\r\n if(isVisible)\r\n filterInputElement.style.width ='100%';\r\n else \r\n filterInputElement.style.width ='2ch';\r\n }\r\n var emptyToggleStyling = toggleStyling(filterInputElement, css.filterInput_empty);\r\n function showPlacehodler(isVisible){\r\n if (isVisible)\r\n {\r\n setPlaceholder(placeholder?placeholder:'');\r\n picksElement.style.display = 'block';\r\n }\r\n else\r\n {\r\n setPlaceholder('');\r\n picksElement.style.display = 'flex';\r\n }\r\n emptyToggleStyling(isVisible);\r\n setEmptyInputWidth(isVisible);\r\n }\r\n showPlacehodler(true);\r\n \r\n function setDisabled(isComponentDisabled){ \r\n filterInputElement.disabled = isComponentDisabled;\r\n };\r\n let isEmpty = () => picksList.isEmpty() && filterDom.isEmpty()\r\n\r\n function updatePlacehodlerVisibility(){\r\n showPlacehodler(isEmpty());\r\n };\r\n function updateEmptyInputWidth(){\r\n setEmptyInputWidth(isEmpty())\r\n };\r\n \r\n let origDisable = picksDom.disable;\r\n picksDom.disable = (isComponentDisabled)=>{\r\n setDisabled(isComponentDisabled);\r\n origDisable(isComponentDisabled);\r\n };\r\n\r\n staticManager.appendToContainer = composeSync(staticManager.appendToContainer, updateEmptyInputWidth);\r\n\r\n filterManagerAspect.processEmptyInput = composeSync(updateEmptyInputWidth, filterManagerAspect.processEmptyInput);\r\n resetFilterListAspect.forceResetFilter = composeSync(resetFilterListAspect.forceResetFilter, updatePlacehodlerVisibility);\r\n \r\n let origAdd = picksList.add;\r\n picksList.add = (pick) => { \r\n let returnValue = origAdd(pick);\r\n if (picksList.getCount()==1 ){ // make flex\r\n if (filterDom.isEmpty()){\r\n setPlaceholder('');\r\n picksElement.style.display = 'flex';\r\n emptyToggleStyling(false);\r\n filterInputElement.style.width ='2ch';\r\n } else {\r\n picksElement.style.display = 'flex';\r\n }\r\n }\r\n pick.dispose = composeSync(pick.dispose, function()\r\n { \r\n if (isEmpty()) {\r\n showPlacehodler(true);\r\n }\r\n });\r\n return returnValue;\r\n };\r\n\r\n updateDataAspect.updateData = composeSync(updateDataAspect.updateData, updatePlacehodlerVisibility);\r\n \r\n}\r\n\r\n// ie11 support\r\nfunction PlaceholderStopInputAspect(resetableFlag){\r\n return{\r\n get(){\r\n return resetableFlag.get();\r\n },\r\n reset(){\r\n return resetableFlag.reset();\r\n } \r\n }\r\n}","import {EventBinder} from '../ToolsDom';\r\nimport {addStyling, toggleStyling} from '../ToolsStyling';\r\n\r\nexport function JQueryMethodsPlugin(pluginData){\r\n let {staticDom, choicesDom, filterDom, picksList} = pluginData;\r\n return {\r\n buildApi(api){\r\n api.getContainer = () => staticDom.containerElement;\r\n api.getChoices = () => choicesDom.choicesElement;\r\n api.getChoicesList = () => choicesDom.choicesListElement;\r\n api.getFilterInput = () => filterDom.filterInputElement;\r\n api.getPicks = () => picksDom.picksElement;\r\n \r\n api.picksCount = () => picksList.getCount();\r\n\r\n pluginData.jQueryMethodsPluginData = {EventBinder, addStyling, toggleStyling}\r\n }\r\n }\r\n}","export function OptionsApiPlugin(pluginData){\r\n let {buildAndAttachChoiceAspect, wraps, wrapsCollection, createWrapAspect, createChoiceBaseAspect,\r\n optionsAspect, resetLayoutAspect} = pluginData;\r\n return {\r\n buildApi(api){\r\n\r\n api.updateOptionAdded = (key) => { // TODO: generalize index as key \r\n let options = optionsAspect.getOptions();\r\n let option = options[key];\r\n \r\n let wrap = createWrapAspect.createWrap(option);\r\n wrap.choice= createChoiceBaseAspect.createChoiceBase(option);\r\n wraps.insert(key, wrap);\r\n let nextChoice = ()=> wrapsCollection.getNext(key, c => c.choice.choiceElement);\r\n\r\n buildAndAttachChoiceAspect.buildAndAttachChoice(\r\n wrap,\r\n () => nextChoice()?.choice.choiceElement\r\n )\r\n }\r\n \r\n api.updateOptionRemoved = (key) => { // TODO: generalize index as key \r\n resetLayoutAspect.resetLayout(); // always hide 1st, then reset filter\r\n \r\n var wrap = wraps.remove(key);\r\n wrap.choice.remove?.();\r\n wrap.dispose?.();\r\n }\r\n }\r\n }\r\n}","import {closestByTagName, findDirectChildByTagName, closestByClassName} from '../ToolsDom';\r\nimport {composeSync} from '../ToolsJs';\r\n\r\nexport function SelectElementPlugin(aspects){\r\n var {/*optionsLoopAspect,*/ loadAspect, environment} = aspects;\r\n // var origOptionsLoopAspectLoop = optionsLoopAspect.loop;\r\n // var document = environment.window.document;\r\n\r\n // optionsLoopAspect.loop = function(){\r\n // // browsers can change select value as part of \"autocomplete\" (IE11) \r\n // // or \"show preserved on go back\" (Chrome) after page is loaded but before \"ready\" event;\r\n // // but they never \"restore\" selected-disabled options.\r\n // // TODO: make the FROM Validation for 'selected-disabled' easy.\r\n // if (document.readyState != 'loading'){\r\n // origOptionsLoopAspectLoop();\r\n // }else{\r\n // var domContentLoadedHandler = function(){\r\n // origOptionsLoopAspectLoop();\r\n // document.removeEventListener(\"DOMContentLoaded\", domContentLoadedHandler);\r\n // }\r\n // document.addEventListener('DOMContentLoaded', domContentLoadedHandler); // IE9+\r\n // }\r\n // }\r\n\r\n var origLoadAspectLoop = loadAspect.loop;\r\n var document = environment.window.document;\r\n\r\n loadAspect.loop = function(){\r\n // browsers can change select value as part of \"autocomplete\" (IE11) \r\n // or \"show preserved on go back\" (Chrome) after page is loaded but before \"ready\" event;\r\n // but they never \"restore\" selected-disabled options.\r\n // TODO: make the FROM Validation for 'selected-disabled' easy.\r\n if (document.readyState != 'loading'){\r\n origLoadAspectLoop();\r\n }else{\r\n var domContentLoadedHandler = function(){\r\n origLoadAspectLoop();\r\n document.removeEventListener(\"DOMContentLoaded\", domContentLoadedHandler);\r\n }\r\n document.addEventListener('DOMContentLoaded', domContentLoadedHandler); // IE9+\r\n }\r\n }\r\n}\r\n\r\nSelectElementPlugin.plugStaticDom = (aspects)=>{\r\n let {configuration, staticDomFactory, createElementAspect,\r\n componentPropertiesAspect, onChangeAspect, triggerAspect, optionsAspect, optGroupAspect, disposeAspect} = aspects;\r\n let origStaticDomFactoryCreate = staticDomFactory.create;\r\n staticDomFactory.create = (css) => {\r\n let {choicesDom, createStaticDom: origCreateStaticDom} = origStaticDomFactoryCreate(css);\r\n let {choicesElement} = choicesDom;\r\n return { \r\n choicesDom,\r\n createStaticDom(element, containerClass){\r\n let selectElement = null;\r\n let containerElement = null;\r\n let picksElement = null;\r\n if (element.tagName == 'SELECT') {\r\n selectElement = element;\r\n if (containerClass){\r\n containerElement = closestByClassName(selectElement, containerClass)\r\n if (containerElement)\r\n picksElement = findDirectChildByTagName(containerElement, 'UL');\r\n }\r\n } else if (element.tagName == 'DIV') {\r\n selectElement = findDirectChildByTagName(element, 'SELECT');\r\n if (selectElement) {\r\n if (containerClass){\r\n containerElement = closestByClassName(element, containerClass);\r\n if (containerElement)\r\n picksElement = findDirectChildByTagName(containerElement, 'UL');\r\n }\r\n } else {\r\n return origCreateStaticDom(element, containerClass);\r\n } \r\n }\r\n\r\n let disposableContainerElement = false;\r\n if (!containerElement) {\r\n containerElement = createElementAspect.createElement('DIV');\r\n containerElement.classList.add(containerClass);\r\n disposableContainerElement= true;\r\n }\r\n \r\n let disposablePicksElement = false;\r\n if (!picksElement) {\r\n picksElement = createElementAspect.createElement('UL');\r\n disposablePicksElement = true; \r\n }\r\n \r\n if (selectElement){\r\n var backupDisplay = selectElement.style.display;\r\n selectElement.style.display = 'none';\r\n var backupedRequired = selectElement.required;\r\n\r\n configuration.getValueRequired = function(){\r\n return backupedRequired;\r\n }\r\n\r\n if(selectElement.required===true)\r\n selectElement.required = false;\r\n\r\n let {getDisabled} = configuration;\r\n\r\n if(!getDisabled) {\r\n var fieldsetElement = closestByTagName(selectElement, 'FIELDSET');\r\n if (fieldsetElement) {\r\n componentPropertiesAspect.getDisabled = () => selectElement.disabled || fieldsetElement.disabled;\r\n } else {\r\n componentPropertiesAspect.getDisabled = () => selectElement.disabled;\r\n }\r\n }\r\n onChangeAspect.onChange = composeSync(() => triggerAspect.trigger('change'), onChangeAspect.onChange) \r\n optionsAspect.getOptions = () => selectElement.options;\r\n \r\n if (optGroupAspect){\r\n optGroupAspect.getOptionOptGroup = (option) => option.parentNode;\r\n optGroupAspect.getOptGroupText = (optGroup) => optGroup.label;\r\n optGroupAspect.getOptGroupId = (optGroup) => optGroup.id;\r\n }\r\n\r\n // if (!setSelected){\r\n // setSelected = (option, value) => {option.selected = value};\r\n // // NOTE: adding this (setAttribute) break Chrome's html form reset functionality:\r\n // // if (value) option.setAttribute('selected','');\r\n // // else option.removeAttribute('selected');\r\n // }\r\n \r\n disposeAspect.dispose = composeSync(disposeAspect.dispose, () => {\r\n selectElement.required = backupedRequired;\r\n selectElement.style.display = backupDisplay;\r\n });\r\n }\r\n\r\n return {\r\n staticDom:{\r\n initialElement:element,\r\n containerElement,\r\n picksElement,\r\n disposablePicksElement,\r\n selectElement\r\n }, \r\n staticManager:{\r\n appendToContainer(){ \r\n if (disposableContainerElement){\r\n selectElement.parentNode.insertBefore(containerElement, selectElement.nextSibling) \r\n containerElement.appendChild(choicesElement)\r\n }else {\r\n selectElement.parentNode.insertBefore(choicesElement, selectElement.nextSibling)\r\n }\r\n if (disposablePicksElement)\r\n containerElement.appendChild(picksElement)\r\n },\r\n dispose(){ \r\n choicesElement.parentNode.removeChild(choicesElement);\r\n if (disposableContainerElement)\r\n selectElement.parentNode.removeChild(containerElement) \r\n if (disposablePicksElement)\r\n containerElement.removeChild(picksElement)\r\n }\r\n }\r\n };\r\n }\r\n }\r\n }\r\n}","import {composeSync} from '../ToolsJs';\r\n\r\n// TODO: there should be two new \"independent aspects\" AddPickAspect and RemovePickAspect \r\n// plugin should overdrive them : call setWrapSelected and etc\r\n// therefore there should new component API methods\r\n// addOptionPick(key) -> call addPick(pick) which returns removePick() \r\n// SetOptionSelectedAspect, OptionToggleAspect should be moved there \r\n// OptionToggleAspect overrided in DisabledOptionPlugin\r\n\r\n// wrap.isOptionSelected , wrap.updateSelected\r\nexport function SelectedOptionPlugin(aspects){\r\n let {configuration, wrapsCollection, \r\n createWrapAspect, buildChoiceAspect, removePickAspect,\r\n resetLayoutAspect, picksList, isChoiceSelectableAspect, optionToggleAspect,\r\n /*inputAspect, filterDom, filterManagerAspect,*/ createPickHandlersAspect, addPickAspect, fullMatchAspect, \r\n onChangeAspect, filterPredicateAspect\r\n } = aspects;\r\n let {getSelected : getIsOptionSelected, setSelected : setIsOptionSelected, options} = configuration;\r\n \r\n if (options) {\r\n if (!setIsOptionSelected){\r\n setIsOptionSelected = (option, value) => {option.selected = value};\r\n }\r\n if (!getIsOptionSelected)\r\n getIsOptionSelected = (option) => option.selected; \r\n } else { // selectElement\r\n if (!getIsOptionSelected){\r\n getIsOptionSelected = (option) => option.selected;\r\n }\r\n if (!setIsOptionSelected){\r\n setIsOptionSelected = (option, value) => {option.selected = value};\r\n // NOTE: adding this (setAttribute) break Chrome's html form reset functionality:\r\n // if (value) option.setAttribute('selected','');\r\n // else option.removeAttribute('selected');\r\n }\r\n }\r\n\r\n let origFilterPredicate = filterPredicateAspect.filterPredicate;\r\n filterPredicateAspect.filterPredicate = (wrap, text) =>\r\n !wrap.isOptionSelected && origFilterPredicate(wrap, text)\r\n\r\n\r\n let origBuildChoice = buildChoiceAspect.buildChoice;\r\n buildChoiceAspect.buildChoice= (wrap) => {\r\n origBuildChoice(wrap);\r\n wrap.updateSelected = () => {\r\n wrap.choice.choiceDomManagerHandlers.updateSelected();\r\n onChangeAspect.onChange();\r\n }\r\n wrap.dispose = composeSync( ()=>{wrap.updateSelected = null}, wrap.dispose)\r\n }\r\n\r\n // TODO: test this instead of wrap.updateSelected\r\n // function updateSelected(wrap){\r\n // if (wrap.pick){\r\n // if (wrap.isOptionSelected)\r\n // pickHandlers.producePick();\r\n // else {\r\n // pickHandlers.removeAndDispose();\r\n // pickHandlers.removeAndDispose=null;\r\n // }\r\n // }\r\n // wrap.choice.choiceDomManagerHandlers.updateSelected();\r\n // onChangeAspect.onChange();\r\n // }\r\n\r\n\r\n function composeUpdateSelected(wrap, booleanValue){\r\n return () => {\r\n wrap.isOptionSelected = booleanValue;\r\n wrap.updateSelected();\r\n }\r\n }\r\n\r\n function trySetWrapSelected(option, updateSelected, booleanValue){ // wrap.option\r\n let success = false;\r\n var confirmed = setIsOptionSelected(option, booleanValue); \r\n if (!(confirmed===false)) {\r\n updateSelected(); \r\n success = true;\r\n }\r\n return success;\r\n }\r\n\r\n let origCreateWrap = createWrapAspect.createWrap;\r\n createWrapAspect.createWrap = (option)=>{\r\n let wrap = origCreateWrap(option);\r\n wrap.isOptionSelected = getIsOptionSelected(option);\r\n wrap.updateSelected = null; // can it be combined ?\r\n return wrap;\r\n }\r\n \r\n\r\n let origToggle = optionToggleAspect.toggle; // TODO: improve design, no replace\r\n optionToggleAspect.toggle= (wrap) => {\r\n return trySetWrapSelected(wrap.option, composeUpdateSelected(wrap, !wrap.isOptionSelected), !wrap.isOptionSelected)\r\n }\r\n \r\n let origFullMatch = fullMatchAspect.fullMatch;\r\n fullMatchAspect.fullMatch = (wrap) => {\r\n return trySetWrapSelected(wrap.option, composeUpdateSelected(wrap, true), true);\r\n }\r\n\r\n let removePickOrig = removePickAspect.removePick; // TODO: improve design, no replace\r\n removePickAspect.removePick = (wrap, pick) => { // TODO: try remove pick\r\n return trySetWrapSelected(wrap.option, composeUpdateSelected(wrap, false), false);\r\n }\r\n\r\n \r\n let origCreatePickHandlers = createPickHandlersAspect.createPickHandlers;\r\n createPickHandlersAspect.createPickHandlers = (wrap)=>{\r\n let pickHandlers = origCreatePickHandlers(wrap);\r\n wrap.updateSelected = composeSync(\r\n ()=>{\r\n if (wrap.isOptionSelected){\r\n let pick = pickHandlers.producePick();\r\n wrap.pick = pick;\r\n pick.dispose = composeSync(pick.dispose, ()=>{wrap.pick=null;});\r\n }\r\n else {\r\n pickHandlers.removeAndDispose();\r\n pickHandlers.removeAndDispose=null;\r\n }\r\n },\r\n wrap.updateSelected\r\n )\r\n\r\n addPickAspect.addPick(wrap, pickHandlers); \r\n return pickHandlers;\r\n }\r\n\r\n let origAddPick = addPickAspect.addPick;\r\n addPickAspect.addPick = (wrap, pickHandlers) => {\r\n if (wrap.isOptionSelected){\r\n let pick = origAddPick(wrap, pickHandlers);\r\n wrap.pick = pick;\r\n pick.dispose = composeSync(pick.dispose, ()=>{wrap.pick=null;});\r\n return pick;\r\n }\r\n }\r\n\r\n return {\r\n buildApi(api){\r\n api.selectAll= ()=>{\r\n resetLayoutAspect.resetLayout(); // always hide 1st\r\n wrapsCollection.forLoop(\r\n wrap => {\r\n if (isChoiceSelectableAspect.isSelectable(wrap) && !wrap.isOptionSelected)\r\n trySetWrapSelected(wrap.option, composeUpdateSelected(wrap, true), true)\r\n }\r\n ); \r\n }\r\n \r\n api.deselectAll= ()=>{\r\n resetLayoutAspect.resetLayout(); // always hide 1st\r\n picksList.forEach(pick=>pick.setSelectedFalse())\r\n }\r\n\r\n api.setOptionSelected = (key, value) => {\r\n let wrap = wrapsCollection.get(key);\r\n return trySetWrapSelected(wrap.option, composeUpdateSelected(wrap, value), value);\r\n }\r\n\r\n // used in FormRestoreOnBackwardPlugin\r\n api.updateOptionsSelected = () => wrapsCollection.forLoop( wrap => updateChoiceSelected(wrap, getIsOptionSelected))\r\n api.updateOptionSelected = (key) => updateChoiceSelected(wrapsCollection.get(key), getIsOptionSelected)\r\n }\r\n }\r\n}\r\n\r\nfunction updateChoiceSelected(wrap, getIsOptionSelected){\r\n let newIsSelected = getIsOptionSelected(wrap.option);\r\n if (newIsSelected != wrap.isOptionSelected)\r\n {\r\n wrap.isOptionSelected = newIsSelected;\r\n wrap.updateSelected?.(); // some hidden oesn't have element (and need to be updated)\r\n }\r\n}","import {composeSync} from '../ToolsJs';\r\n\r\nexport function DisabledOptionPlugin(pluginData){\r\n let {configuration, isChoiceSelectableAspect, createWrapAspect, buildChoiceAspect,\r\n filterPredicateAspect, wrapsCollection, optionToggleAspect, buildPickAspect } = pluginData;\r\n \r\n let {getIsOptionDisabled, options} = configuration;\r\n if (options) {\r\n if (!getIsOptionDisabled)\r\n getIsOptionDisabled = (option) => (option.disabled===undefined) ? false : option.disabled; \r\n } else { // selectElement\r\n if (!getIsOptionDisabled)\r\n getIsOptionDisabled = (option) => option.disabled; \r\n }\r\n\r\n // TODO check this instead of wrap.updateDisabled\r\n // function updateDisabled(wrap){\r\n // wrap?.choice?.choiceDomManagerHandlers?.updateDisabled?.();\r\n // wrap?.pick?.pickDomManagerHandlers?.updateDisabled?.();\r\n // }\r\n\r\n let origCreateWrap = createWrapAspect.createWrap;\r\n createWrapAspect.createWrap = (option) => {\r\n let wrap = origCreateWrap(option);\r\n wrap.isOptionDisabled = getIsOptionDisabled(option); // TODO: remove usage wrap.isOptionDisabled\r\n wrap.updateDisabled = null; \r\n return wrap;\r\n };\r\n\r\n let origToggle = optionToggleAspect.toggle;\r\n optionToggleAspect.toggle = (wrap) => {\r\n let success = false;\r\n if (wrap.isOptionSelected!==undefined){\r\n if (wrap.isOptionSelected || !wrap.isOptionDisabled) // TODO: declare dependency on SelectedOptionPlugin\r\n success = origToggle(wrap);\r\n }\r\n else{\r\n if (!wrap.isOptionDisabled) {\r\n success = origToggle(wrap);\r\n }\r\n }\r\n return success;\r\n };\r\n\r\n let origIsSelectable = isChoiceSelectableAspect.isSelectable\r\n isChoiceSelectableAspect.isSelectable = (wrap) => {\r\n return origIsSelectable(wrap) && !wrap.isOptionDisabled ;\r\n };\r\n\r\n let origFilterPredicate = filterPredicateAspect.filterPredicate;\r\n filterPredicateAspect.filterPredicate = (wrap, text) => {\r\n return !wrap.isOptionDisabled && origFilterPredicate(wrap, text) ;\r\n };\r\n\r\n let origBuildChoice = buildChoiceAspect.buildChoice;\r\n buildChoiceAspect.buildChoice = (wrap) => {\r\n origBuildChoice(wrap);\r\n wrap.updateDisabled = wrap.choice.choiceDomManagerHandlers.updateDisabled\r\n wrap.choice.dispose = composeSync(()=>{wrap.updateDisabled=null;}, wrap.choice.dispose);\r\n }\r\n \r\n let origBuildPick = buildPickAspect.buildPick;\r\n buildPickAspect.buildPick = (wrap, removeOnButton) => {\r\n let pick = origBuildPick(wrap, removeOnButton);\r\n \r\n pick.updateDisabled = () => pick.pickDomManagerHandlers.updateDisabled();\r\n pick.dispose = composeSync(pick.dispose, ()=>{pick.updateDisabled=null});\r\n\r\n let choiceUpdateDisabledBackup = wrap.updateDisabled;\r\n wrap.updateDisabled = composeSync(choiceUpdateDisabledBackup, pick.updateDisabled); // add pickDisabled\r\n pick.dispose = composeSync(pick.dispose, \r\n ()=>{\r\n wrap.updateDisabled = choiceUpdateDisabledBackup; // remove pickDisabled\r\n wrap.updateDisabled(); // make \"true disabled\" without it checkbox only looks disabled\r\n }\r\n )\r\n return pick;\r\n }\r\n\r\n return {\r\n buildApi(api){\r\n api.updateOptionsDisabled = () => wrapsCollection.forLoop( wrap => updateChoiceDisabled(wrap, getIsOptionDisabled))\r\n api.updateOptionDisabled = (key) => updateChoiceDisabled(wrapsCollection.get(key), getIsOptionDisabled)\r\n }\r\n };\r\n}\r\n\r\nfunction updateChoiceDisabled(wrap, getIsOptionDisabled){\r\n let newIsDisabled = getIsOptionDisabled(wrap.option);\r\n if (newIsDisabled != wrap.isOptionDisabled)\r\n {\r\n wrap.isOptionDisabled= newIsDisabled;\r\n wrap.updateDisabled?.(); // some hidden oesn't have element (and need to be updated)\r\n }\r\n}","export function PicksApiPlugin(pluginData){\r\n let {picksList, createWrapAspect, createPickHandlersAspect, addPickAspect} = pluginData;\r\n return {\r\n buildApi(api){\r\n api.forEachPeak = (f) => \r\n picksList.forEach(wrap=>f(wrap.option));\r\n // TODO: getHeadPeak\r\n api.getTailPeak = () => picksList.getTail()?.option;\r\n api.countPeaks = () => picksList.getCount();\r\n api.isEmptyPeaks = () => picksList.isEmpty();\r\n \r\n api.addPick = (option) => {\r\n let wrap = createWrapAspect.createWrap(option);\r\n // TODO should be moved to specific plugins\r\n wrap.updateDisabled = ()=>{};\r\n wrap.updateHidden = ()=>{};\r\n let pickHandlers = createPickHandlersAspect.createPickHandlers(wrap);\r\n addPickAspect.addPick(wrap, pickHandlers);\r\n }\r\n }\r\n }\r\n}","import {composeSync} from '../ToolsJs';\r\n\r\nexport function PicksPlugin(aspects){\r\n let {configuration, inputAspect, filterDom, filterManagerAspect} = aspects;\r\n let {picks, addOptionPicked} = configuration;\r\n /*\r\n if (!addOptionPicked){\r\n addOptionPicked = (option, index, value) => {\r\n if (value)\r\n picks.push(option);\r\n else\r\n picks.splice(index, 1);\r\n return true;\r\n };\r\n }\r\n\r\n function trySetWrapSelected(option, updateSelected, booleanValue){\r\n let success = false;\r\n var confirmed = setIsOptionSelected(option, booleanValue);\r\n if (!(confirmed===false)) {\r\n updateSelected();\r\n success = true;\r\n }\r\n return success;\r\n }\r\n\r\n let origProcessInput = inputAspect.processInput;\r\n inputAspect.processInput = () => {\r\n let origResult = origProcessInput();\r\n if (!origResult.isEmpty)\r\n {\r\n if ( filterManagerAspect.getNavigateManager().getCount() == 1)\r\n {\r\n // todo: move exact match to filterManager\r\n let fullMatchWrap = filterManagerAspect.getNavigateManager().getHead();\r\n let text = filterManagerAspect.getFilter();\r\n if (fullMatchWrap.choice.searchText == text)\r\n {\r\n let success = trySetWrapSelected(fullMatchWrap, true);\r\n if (success) {\r\n filterDom.setEmpty();\r\n origResult.isEmpty = true;\r\n }\r\n }\r\n }\r\n }\r\n return origResult;\r\n }*/\r\n}\r\n\r\nPicksPlugin.plugStaticDom = (aspects) => {\r\n let {configuration, picksList} = aspects;\r\n let {picks} = configuration;\r\n if (picks) {\r\n let {add: origAdd, reset: origReset} = picksList;\r\n\r\n picksList.add = (e) => {\r\n let {remove, index} = origAdd(e);\r\n picks.push(e);\r\n return { remove: composeSync(remove, () => void picks.splice(index(), 1)), index};\r\n }\r\n\r\n picksList.reset = () => {\r\n origReset();\r\n picks.length = 0;\r\n }\r\n }\r\n}","export function CreatePopperPlugin(pluginData){\r\n let {environment} = pluginData;\r\n let {createPopper, Popper} = environment;\r\n\r\n if (typeof createPopper === 'undefined') {\r\n createPopper = Popper;\r\n if (typeof createPopper === 'undefined') {\r\n throw new Error(\"BsMultiSelect: Popper component (https://popper.js.org) is required\")\r\n }\r\n } else {\r\n if (createPopper.createPopper) {\r\n createPopper = createPopper.createPopper;\r\n }\r\n }\r\n\r\n pluginData.createPopperAspect = {\r\n create(element, anchorElement, preventOverflow){\r\n let popperConfiguration = {\r\n placement: 'bottom-start',\r\n modifiers: {\r\n preventOverflow: {enabled:preventOverflow},\r\n hide: {enabled:false},\r\n flip: {enabled:false}\r\n }\r\n };\r\n let popper = null;\r\n return {\r\n init(){\r\n if (!!createPopper.prototype && !!createPopper.prototype.constructor) { // it is a constructor\r\n popper = new createPopper(anchorElement, element, popperConfiguration); \r\n }else{\r\n popper = createPopper(anchorElement, element, popperConfiguration); \r\n }\r\n },\r\n update(){ \r\n popper.update(); // become async in poppoer 2; use forceUpdate if sync is needed? \r\n },\r\n setRtl(isRtl){\r\n if (isRtl) {\r\n popperConfiguration.placement = 'bottom-end';\r\n }\r\n },\r\n dispose(){\r\n popper.destroy();\r\n }\r\n }\r\n }\r\n };\r\n}\r\n\r\n","import {composeSync} from '../ToolsJs';\r\nimport {toggleStyling} from '../ToolsStyling';\r\n\r\nexport function FloatingLabelPlugin(pluginData){\r\n let {configuration, picksList, picksDom, filterDom, staticDom, updateDataAspect,\r\n resetFilterListAspect, floatingLabelAspect} = pluginData;\r\n let {css, getDefaultLabel} = configuration;\r\n \r\n let initialElement = staticDom.initialElement;\r\n if (floatingLabelAspect.isFloatingLabel() ){\r\n \r\n let labelElement = getDefaultLabel(initialElement);\r\n let picksElement = picksDom.picksElement;\r\n\r\n var liftToggleStyling1 = toggleStyling(labelElement, css.label_floating_lifted);\r\n var liftToggleStyling2 = toggleStyling(picksElement, css.picks_floating_lifted);\r\n\r\n function liftedLabel(isEmpty){\r\n liftToggleStyling1(isEmpty);\r\n liftToggleStyling2(isEmpty);\r\n }\r\n\r\n let isEmpty = () => picksList.isEmpty() && filterDom.isEmpty() && !picksDom.getIsFocusIn();;\r\n\r\n function updateLiftedLabel(){\r\n liftedLabel(!isEmpty());\r\n };\r\n\r\n updateLiftedLabel();\r\n\r\n resetFilterListAspect.forceResetFilter = composeSync(resetFilterListAspect.forceResetFilter, updateLiftedLabel);\r\n \r\n let origAdd = picksList.add;\r\n picksList.add = (pick) => { \r\n let returnValue = origAdd(pick);\r\n if (picksList.getCount()==1) \r\n updateLiftedLabel()\r\n pick.dispose = composeSync(pick.dispose, ()=>\r\n { \r\n if (picksList.getCount()==0) \r\n updateLiftedLabel()\r\n })\r\n return returnValue;\r\n };\r\n \r\n var origToggleFocusStyling = picksDom.toggleFocusStyling;\r\n picksDom.toggleFocusStyling = () => {\r\n var isFocusIn = picksDom.getIsFocusIn();\r\n origToggleFocusStyling(isFocusIn);\r\n updateLiftedLabel();\r\n }\r\n\r\n updateDataAspect.updateData = composeSync(updateDataAspect.updateData, updateLiftedLabel);\r\n }\r\n}\r\n\r\nFloatingLabelPlugin.plugStaticDom = (aspects) => {\r\n aspects.floatingLabelAspect = FloatingLabelAspect();\r\n}\r\n\r\nfunction FloatingLabelAspect() {\r\n return {\r\n isFloatingLabel(){},\r\n }\r\n}","export function ChoicesDynamicStylingPlugin(aspects){\r\n let {configuration} = aspects;\r\n if (configuration.useChoicesDynamicStyling) {\r\n let {choicesVisibilityAspect, specialPicksEventsAspect} = aspects;\r\n var origSetChoicesVisible = choicesVisibilityAspect.setChoicesVisible;\r\n aspects.choicesVisibilityAspect.setChoicesVisible = \r\n function(visible){\r\n if (visible)\r\n choicesDynamicStyling(aspects);\r\n origSetChoicesVisible(visible);\r\n };\r\n var origBackSpace = specialPicksEventsAspect.backSpace;\r\n specialPicksEventsAspect.backSpace = (pick) => { origBackSpace(pick); choicesDynamicStyling(aspects);};\r\n }\r\n}\r\n\r\nfunction choicesDynamicStyling(aspects){\r\n let {configuration, environment, choicesDom, navigateAspect} = aspects;\r\n let window = environment.window;\r\n let choicesElement = choicesDom.choicesElement;\r\n let minimalChoicesDynamicStylingMaxHeight = configuration.minimalChoicesDynamicStylingMaxHeight;\r\n\r\n //find height of the browser window\r\n var g = window.document.getElementsByTagName('body')[0],\r\n e = window.document.documentElement,\r\n y = window.innerHeight || e.clientHeight || g.clientHeight;\r\n \r\n //find position of choicesElement, if it's at the bottom of the page make the choicesElement shorter\r\n var pos = choicesElement.parentNode.getBoundingClientRect();\r\n var new_y = y - pos.top;\r\n \r\n //calculate multi select max-height\r\n var msHeight = Math.max(minimalChoicesDynamicStylingMaxHeight, Math.round((new_y * 0.85))); // Michalek: 0.85 is empiric value, without it list was longer than footer height ; TODO: propose better way\r\n \r\n //add css height value\r\n choicesElement.style.setProperty(\"max-height\", msHeight+\"px\");\r\n choicesElement.style.setProperty(\"overflow-y\", \"auto\");\r\n\r\n if (!choicesDom.ChoicesDynamicStylingPlugin_scrollHandle){\r\n choicesDom.ChoicesDynamicStylingPlugin_scrollHandle = true;\r\n var origNavigateAspectNavigate = navigateAspect.navigate;\r\n navigateAspect.navigate = function(down){\r\n var wrap = origNavigateAspectNavigate(down);\r\n if (wrap!= null && wrap.choice!=null && wrap.choice.choiceElement!=null)\r\n wrap.choice.choiceElement.scrollIntoView(false); // alignTo false - scroll to the top bottom of dropdown first\r\n // TODO: BUG if mouse left on the dropdow scroll to bottom and one after doesn't work properly\r\n return wrap;\r\n }\r\n }\r\n}\r\n\r\nChoicesDynamicStylingPlugin.plugDefaultConfig = (defaults)=>{\r\n defaults.useChoicesDynamicStyling = false;\r\n defaults.choicesDynamicStyling = choicesDynamicStyling;\r\n defaults.minimalChoicesDynamicStylingMaxHeight = 20;\r\n}\r\n","import { addStyling } from \"../ToolsStyling\";\r\n\r\nexport function WarningPlugin(pluginData){\r\n\r\n let {configuration, choicesDom, createElementAspect, staticManager} = pluginData;\r\n let {css} = configuration;\r\n if (configuration.isNoResultsWarningEnabled)\r\n pluginData.warningAspect = WarningAspect(choicesDom, createElementAspect, staticManager, css)\r\n}\r\n\r\nWarningPlugin.plugDefaultConfig = (defaults)=>{\r\n defaults.noResultsWarning = \"No results found\";\r\n defaults.isNoResultsWarningEnabled = false;\r\n}\r\n\r\nfunction WarningAspect(choicesDom, createElementAspect, staticManager, css){\r\n let choicesElement = choicesDom.choicesElement;\r\n\r\n var warningElement = createElementAspect.createElement('div'); \r\n \r\n var origAppendToContainer = staticManager.appendToContainer;\r\n staticManager.appendToContainer = function(){\r\n origAppendToContainer();\r\n choicesElement.parentNode.insertBefore(warningElement, choicesElement.nextSibling); // insert after\r\n }\r\n \r\n warningElement.style.display = 'none';\r\n addStyling(warningElement, css.warning);\r\n\r\n return {\r\n warningElement,\r\n show(message){\r\n warningElement.style.display = 'block';\r\n warningElement.innerHTML = message;\r\n },\r\n hide(){\r\n warningElement.style.display = 'none';\r\n warningElement.innerHTML = \"\";\r\n }\r\n }\r\n}","export function HighlightPlugin(aspects){\r\n let {highlightAspect, filterManagerAspect, buildChoiceAspect} = aspects;\r\n if (highlightAspect) {\r\n let origProcessEmptyInput = filterManagerAspect.processEmptyInput;\r\n filterManagerAspect.processEmptyInput = function(){\r\n highlightAspect.reset();\r\n origProcessEmptyInput(); \r\n }\r\n let origSetFilter = filterManagerAspect.setFilter;\r\n filterManagerAspect.setFilter = function(text){\r\n highlightAspect.set(text);\r\n origSetFilter(text);\r\n }\r\n let origBuildChoice = buildChoiceAspect.buildChoice;\r\n buildChoiceAspect.buildChoice = function(wrap){\r\n origBuildChoice(wrap);\r\n let origSetVisible = wrap.choice.setVisible;\r\n wrap.choice.setVisible = function(v){\r\n origSetVisible(v);\r\n wrap.choice.choiceDomManagerHandlers.updateHighlighted();\r\n }\r\n }\r\n }\r\n}\r\n\r\nHighlightPlugin.plugStaticDom = (aspects) => {\r\n if (aspects.configuration.useHighlighting)\r\n aspects.highlightAspect = HighlightAspect();\r\n}\r\n\r\nHighlightPlugin.plugDefaultConfig = (defaults) => {\r\n defaults.useHighlighting = false;\r\n}\r\n\r\nfunction HighlightAspect(){\r\n let highlighter = null;\r\n return {\r\n getHighlighter(){\r\n return highlighter;\r\n },\r\n set(filter){\r\n var guarded = filter.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n var regex = new RegExp(\"(\"+guarded+\")\",\"gi\");\r\n highlighter = function(e, choiceDom, text){\r\n // TODO replace with\r\n // var pos = text.indexOf(filter);\r\n e.innerHTML = text.replace(regex,\"$1\");\r\n // TODO to method\r\n // var nodes = e.querySelectorAll('u');\r\n // var array = Array.prototype.slice.call(nodes);\r\n // if (choiceDom.highlightedElements)\r\n // choiceDom.highlightedElements.concat(array);\r\n // else\r\n // choiceDom.highlightedElements = array;\r\n }\r\n },\r\n reset(){\r\n highlighter = null;\r\n }\r\n }\r\n}","import { composeSync } from \"../ToolsJs\";\r\n\r\nexport function CustomChoiceStylingsPlugin(apsects){\r\n let {configuration, choiceDomFactory} = apsects;\r\n let customChoiceStylingsAspect = CustomChoiceStylingsAspect(configuration.customChoiceStylings);\r\n let origChoiceDomFactoryCreate = choiceDomFactory.create;\r\n choiceDomFactory.create = function(choiceElement, wrap, toggle){\r\n var o = origChoiceDomFactoryCreate(choiceElement, wrap, toggle);\r\n customChoiceStylingsAspect.customize(wrap, o.choiceDom, o.choiceDomManagerHandlers);\r\n return o;\r\n }\r\n}\r\n\r\nCustomChoiceStylingsPlugin.plugDefaultConfig = (defaults)=>{\r\n defaults.customChoiceStylings = null;\r\n}\r\n\r\nexport function CustomChoiceStylingsAspect(customChoiceStylings){\r\n \r\n return {\r\n customize(wrap, choiceDom, choiceDomManagerHandlers){\r\n if (customChoiceStylings){\r\n var handlers = customChoiceStylings(choiceDom, wrap.option);\r\n\r\n if (handlers){\r\n function customChoiceStylingsClosure(custom){\r\n return function() {\r\n custom({\r\n isOptionSelected: wrap.isOptionSelected,\r\n isOptionDisabled: wrap.isOptionDisabled,\r\n isHoverIn: wrap.choice.isHoverIn,\r\n //isHighlighted: wrap.choice.isHighlighted // TODO isHighlighted should be developed\r\n });\r\n }\r\n }\r\n if (choiceDomManagerHandlers.updateHoverIn && handlers.updateHoverIn) \r\n choiceDomManagerHandlers.updateHoverIn \r\n = composeSync(choiceDomManagerHandlers.updateHoverIn, customChoiceStylingsClosure(handlers.updateHoverIn) );\r\n if (choiceDomManagerHandlers.updateSelected && handlers.updateSelected) \r\n choiceDomManagerHandlers.updateSelected \r\n = composeSync(choiceDomManagerHandlers.updateSelected, customChoiceStylingsClosure(handlers.updateSelected));\r\n if (choiceDomManagerHandlers.updateDisabled && handlers.updateDisabled) \r\n choiceDomManagerHandlers.updateDisabled\r\n = composeSync(choiceDomManagerHandlers.updateDisabled, customChoiceStylingsClosure(handlers.updateDisabled));\r\n if (choiceDomManagerHandlers.updateHighlighted && handlers.updateHighlighted) \r\n choiceDomManagerHandlers.updateHighlighted\r\n = composeSync(choiceDomManagerHandlers.updateHighlighted, customChoiceStylingsClosure(handlers.updateHighlighted));\r\n }\r\n }\r\n }\r\n }\r\n}","import { composeSync } from \"../ToolsJs\";\r\n\r\nexport function CustomPickStylingsPlugin(aspects){\r\n let {componentPropertiesAspect,configuration, pickDomFactory} = aspects;\r\n let customPickStylingsAspect = CustomPickStylingsAspect(componentPropertiesAspect, configuration.customPickStylings);\r\n let origPickDomFactoryCreate = pickDomFactory.create;\r\n pickDomFactory.create = function(pickElement, wrap, removeOnButton){\r\n var o = origPickDomFactoryCreate(pickElement, wrap, removeOnButton);\r\n customPickStylingsAspect.customize(wrap, o.pickDom, o.pickDomManagerHandlers);\r\n return o;\r\n }\r\n}\r\n\r\nCustomPickStylingsPlugin.plugDefaultConfig = (defaults)=>{\r\n defaults.customPickStylings = null;\r\n}\r\n\r\nfunction CustomPickStylingsAspect(componentPropertiesAspect, customPickStylings){\r\n \r\n return {\r\n customize(wrap, pickDom, pickDomManagerHandlers){\r\n if (customPickStylings){\r\n var handlers = customPickStylings(pickDom, wrap.option);\r\n\r\n if (handlers){\r\n function customPickStylingsClosure(custom){\r\n return function() {\r\n custom({\r\n isOptionDisabled: wrap.isOptionDisabled,\r\n isComponentDisabled: componentPropertiesAspect.getDisabled()\r\n });\r\n }\r\n }\r\n if (pickDomManagerHandlers.updateDisabled && handlers.updateDisabled) \r\n pickDomManagerHandlers.updateDisabled \r\n = composeSync(pickDomManagerHandlers.updateDisabled, customPickStylingsClosure(handlers.updateDisabled));\r\n if (pickDomManagerHandlers.updateComponentDisabled && handlers.updateComponentDisabled) \r\n pickDomManagerHandlers.updateComponentDisabled \r\n = composeSync(pickDomManagerHandlers.updateComponentDisabled, customPickStylingsClosure(handlers.updateComponentDisabled));\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import {LabelPlugin} from './plugins/LabelPlugin'\r\nimport {RtlPlugin} from './plugins/RtlPlugin'\r\nimport {FormResetPlugin} from './plugins/FormResetPlugin'\r\nimport {ValidationApiPlugin} from './plugins/ValidationApiPlugin'\r\nimport {BsAppearancePlugin} from './plugins/BsAppearancePlugin'\r\n\r\nimport {HiddenOptionPlugin} from './plugins/HiddenOptionPlugin'\r\n//import {HiddenOptionPlugin} from './plugins/HiddenOptionAltPlugin'\r\n\r\nimport {CssPatchPlugin} from './plugins/CssPatchPlugin'\r\nimport {PlaceholderPlugin} from './plugins/PlaceholderPlugin'\r\nimport {JQueryMethodsPlugin} from './plugins/JQueryMethodsPlugin'\r\nimport {OptionsApiPlugin} from './plugins/OptionsApiPlugin'\r\nimport {FormRestoreOnBackwardPlugin} from './plugins/FormRestoreOnBackwardPlugin'\r\nimport {SelectElementPlugin} from './plugins/SelectElementPlugin'\r\nimport {SelectedOptionPlugin} from './plugins/SelectedOptionPlugin'\r\nimport {DisabledOptionPlugin} from './plugins/DisabledOptionPlugin'\r\nimport {PicksApiPlugin} from './plugins/PicksApiPlugin'\r\nimport {PicksPlugin} from './plugins/PicksPlugin'\r\n\r\nimport {CreatePopperPlugin} from './plugins/CreatePopperPlugin'\r\n\r\nimport {FloatingLabelPlugin} from './plugins/FloatingLabelPlugin'\r\n\r\nimport {ChoicesDynamicStylingPlugin} from './plugins/ChoicesDynamicStylingPlugin'\r\n\r\nimport {shallowClearClone} from './ToolsJs'\r\n\r\nimport {WarningPlugin} from './plugins/WarningPlugin'\r\nimport {HighlightPlugin} from './plugins/HighlightPlugin'\r\n\r\nimport {CustomChoiceStylingsPlugin} from './plugins/CustomChoiceStylingsPlugin'\r\nimport {CustomPickStylingsPlugin} from './plugins/CustomPickStylingsPlugin'\r\n\r\n\r\nexport let defaultPlugins = {CssPatchPlugin, SelectElementPlugin, LabelPlugin, HiddenOptionPlugin, ValidationApiPlugin, \r\n BsAppearancePlugin, FormResetPlugin, CreatePopperPlugin, WarningPlugin, RtlPlugin, PlaceholderPlugin, FloatingLabelPlugin, OptionsApiPlugin, \r\n JQueryMethodsPlugin, SelectedOptionPlugin, FormRestoreOnBackwardPlugin, \r\n DisabledOptionPlugin, PicksApiPlugin, HighlightPlugin,\r\n ChoicesDynamicStylingPlugin, CustomPickStylingsPlugin, CustomChoiceStylingsPlugin};\r\n\r\nexport let picksPlugins = {CssPatchPlugin, PicksPlugin, LabelPlugin, ValidationApiPlugin, \r\n BsAppearancePlugin, CreatePopperPlugin, WarningPlugin, RtlPlugin, PlaceholderPlugin, FloatingLabelPlugin, OptionsApiPlugin, \r\n JQueryMethodsPlugin, PicksApiPlugin, HighlightPlugin,\r\n ChoicesDynamicStylingPlugin, CustomPickStylingsPlugin, CustomChoiceStylingsPlugin};\r\n\r\nexport let allPlugins = shallowClearClone(defaultPlugins, {PicksPlugin});\r\n\r\n","import {EventBinder, closestByTagName} from '../ToolsDom';\r\n\r\nexport function FormResetPlugin(pluginData){\r\n var {staticDom, environment} = pluginData;\r\n return {\r\n buildApi(api){\r\n var eventBuilder = EventBinder();\r\n if (staticDom.selectElement){\r\n var form = closestByTagName(staticDom.selectElement, 'FORM');\r\n if (form) {\r\n eventBuilder.bind(form, \r\n 'reset', \r\n () => environment.window.setTimeout( ()=>api.updateData() ) );\r\n }\r\n }\r\n return eventBuilder.unbind;\r\n }\r\n }\r\n}","export function FormRestoreOnBackwardPlugin(pluginData){\r\n let {staticDom, environment, loadAspect, configuration} = pluginData;\r\n let window = environment.window;\r\n return {\r\n buildApi(api){\r\n if (!api.updateOptionsSelected){\r\n if (options && configuration.setSelected)\r\n throw new Error(\"BsMultisilect: FormRestoreOnBackwardPlugin requires SelectedOptionPlugin defined first\");\r\n }\r\n else{\r\n let origLoadAspectLoad = loadAspect.load;\r\n loadAspect.load = ()=>{\r\n origLoadAspectLoad();\r\n // support browser's \"step backward\" and form's values restore\r\n if (staticDom.selectElement && window.document.readyState !=\"complete\"){\r\n window.setTimeout(function(){\r\n //TODO : from do not use api, migrate to aspects\r\n //console.log(\"FormRestoreOnBackwardPlugin\");\r\n api.updateOptionsSelected();\r\n // there are no need to add more updates as api.updateWasValidated() because backward never trigger .was-validate\r\n // also backward never set the state to invalid\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}","import {closestByClassName} from '../ToolsDom'\r\n\r\nexport function Bs5Plugin(){\r\n}\r\n\r\nBs5Plugin.plugDefaultConfig = (defaults) => {\r\n defaults.css = css;\r\n setDefaults(defaults);\r\n}\r\n\r\n\r\nfunction setDefaults(defaults){\r\n defaults.useCssPatch = true;\r\n defaults.cssPatch = cssPatch;\r\n defaults.pickButtonHTML = ''\r\n defaults.composeGetSize = composeGetSize;\r\n defaults.getDefaultLabel = getDefaultLabel;\r\n}\r\n\r\nfunction composeGetSize(selectElement){\r\n let inputGroupElement = closestByClassName(selectElement, 'input-group');\r\n let getSize = null;\r\n if (inputGroupElement){\r\n getSize = function(){\r\n var value = null;\r\n if (inputGroupElement.classList.contains('input-group-lg'))\r\n value = 'lg';\r\n else if (inputGroupElement.classList.contains('input-group-sm'))\r\n value = 'sm';\r\n return value;\r\n }\r\n }\r\n else{ \r\n getSize = function(){\r\n var value = null;\r\n if (selectElement.classList.contains('form-select-lg') || selectElement.classList.contains('form-control-lg')) // changed for BS\r\n value = 'lg';\r\n else if (selectElement.classList.contains('form-select-sm') || selectElement.classList.contains('form-control-sm'))\r\n value = 'sm'; \r\n return value;\r\n }\r\n }\r\n return getSize;\r\n}\r\n\r\nfunction getDefaultLabel(selectElement){\r\n let value = null;\r\n let query = `label[for=\"${selectElement.id}\"]`;\r\n let p1 = selectElement.parentElement;\r\n value = p1.querySelector(query); // label can be wrapped into col-auto\r\n if (!value){\r\n let p2 = p1.parentElement;\r\n value = p2.querySelector(query);\r\n }\r\n return value;\r\n}\r\n\r\nconst css = {\r\n choices: 'dropdown-menu', // bs, in bsmultiselect.scss as div.dropdown-menu\r\n choicesList: '', // bs, in bsmultiselect.scss as div.dropdown-menu>ul (first child)\r\n choice_hover: 'hover', // not bs, in scss as 'ul.dropdown-menu li.hover'\r\n choice_selected: '', \r\n choice_disabled: '', \r\n\r\n picks: 'form-control', // bs, in scss 'ul.form-control'\r\n picks_focus: 'focus', // not bs, in scss 'ul.form-control.focus'\r\n picks_disabled: 'disabled', // not bs, in scss 'ul.form-control.disabled'\r\n pick_disabled: '', \r\n \r\n pickFilter: '', \r\n filterInput: '',\r\n\r\n // used in pickContentGenerator\r\n pick: 'badge text-dark', // bs\r\n pickContent: '',\r\n pickContent_disabled: 'disabled', // not bs, in scss 'ul.form-control li span.disabled'\r\n pickButton: 'btn-close', // bs\r\n\r\n // used in choiceContentGenerator\r\n // choice: 'dropdown-item', // it seems like hover should be managed manually since there should be keyboard support\r\n choiceCheckBox_disabled: 'disabled', // not bs, in scss as 'ul.form-control li .custom-control-input.disabled ~ .custom-control-label'\r\n choiceContent: 'form-check', // bs d-flex required for rtl to align items\r\n choiceCheckBox: 'form-check-input', // bs\r\n choiceLabel: 'form-check-label',\r\n choiceLabel_disabled: '',\r\n\r\n label_floating_lifted: 'floating-lifted',\r\n picks_floating_lifted: 'floating-lifted',\r\n\r\n warning: 'alert-warning',\r\n}\r\n\r\nconst cssPatch = {\r\n choicesList: {listStyleType:'none', paddingLeft:'0', paddingRight:'0', marginBottom:'0'},\r\n picks: {listStyleType:'none', display:'flex', flexWrap:'wrap', height: 'auto', marginBottom: '0', cursor: 'text'},\r\n choice: {classes:'px-md-2 px-1', styles:{cursor:'pointer'}},\r\n choice_hover: 'text-primary bg-light', \r\n filterInput: {\r\n border:'0px', height: 'auto', boxShadow:'none', \r\n padding:'0', margin:'0', \r\n outline:'none', backgroundColor:'transparent',\r\n backgroundImage: 'none' // otherwise BS .was-validated set its image\r\n },\r\n filterInput_empty: 'form-control', // need for placeholder, TODO test form-control-plaintext\r\n\r\n // used in PicksDom\r\n picks_disabled: {backgroundColor: '#e9ecef'},\r\n\r\n picks_focus: {borderColor: '#80bdff', boxShadow: '0 0 0 0.2rem rgba(0, 123, 255, 0.25)'},\r\n picks_focus_valid: {borderColor: '', boxShadow: '0 0 0 0.2rem rgba(40, 167, 69, 0.25)'},\r\n picks_focus_invalid: {borderColor: '', boxShadow: '0 0 0 0.2rem rgba(220, 53, 69, 0.25)'},\r\n \r\n // used in BsAppearancePlugin\r\n picks_def: {minHeight: 'calc(2.25rem + 2px)'},\r\n picks_lg: {minHeight: 'calc(2.875rem + 2px)'},\r\n picks_sm: {minHeight: 'calc(1.8125rem + 2px)'},\r\n picks_floating_def: {minHeight: 'calc(3.5rem + 2px)'},\r\n \r\n // used in pickContentGenerator\r\n pick: {paddingLeft: '0', paddingRight: '.5rem', paddingInlineStart:'0', paddingInlineEnd:'0.5rem'},\r\n pickButton: {fontSize:'0.8em', float : \"none\", verticalAlign: \"text-top\"},\r\n pickContent_disabled: {opacity: '.65'}, \r\n \r\n // used in choiceContentGenerator\r\n choiceContent: {justifyContent: 'flex-start', cursor:'inherit'}, // BS problem: without this on inline form menu items justified center\r\n choiceLabel: {color: 'inherit', cursor:'inherit'}, // otherwise BS .was-validated set its color\r\n choiceCheckBox: {color: 'inherit', cursor:'inherit'},\r\n choiceLabel_disabled: {opacity: '.65'}, // more flexible than {color: '#6c757d'}; note: avoid opacity on pickElement's border; TODO write to BS \r\n\r\n // floating plugin\r\n label_floating_lifted: {opacity: '.65', transform : 'scale(.85) translateY(-.5rem) translateX(.15rem)'},\r\n picks_floating_lifted: {paddingTop: '1.625rem', paddingLeft:'0.8rem', paddingBottom : '0'},\r\n\r\n warning: {paddingLeft: '.25rem', paddingRight: '.25rem', zIndex: 4, fontSize:'small', backgroundColor: 'var(--bs-warning)'}, // zIndex=4 since the input-group zIndex=3\r\n}\r\n\r\n","import {composeSync} from './ToolsJs'\r\nimport {EventBinder} from './ToolsDom'\r\nimport {addStyling, toggleStyling} from './ToolsStyling'\r\n\r\nexport let utilities = {composeSync, EventBinder, addStyling, toggleStyling};\r\n","import Popper from '@popperjs/core'\r\n\r\nimport {createForJQuery} from './CreateForJQuery'\r\n\r\nimport {defaultPlugins, picksPlugins, allPlugins} from './PluginSet'\r\nimport {Bs5Plugin} from './plugins/Bs5Plugin'\r\n\r\nimport {MultiSelectBuilder} from './MultiSelectBuilder'\r\nimport {utilities} from './ToolSet'\r\n\r\nimport {shallowClearClone} from './ToolsJs'\r\n\r\nconst BsMultiSelect = (\r\n (window, jQuery, createPopper) => {\r\n return createForJQuery(window, jQuery, createPopper, 'BsMultiSelect', defaultPlugins, Bs5Plugin)\r\n }\r\n)(window, window.jQuery, Popper)\r\n\r\n\r\nconst BsPicks = (\r\n (window, jQuery, createPopper) => {\r\n return createForJQuery(window, jQuery, createPopper, 'BsPicks', picksPlugins, Bs5Plugin)\r\n }\r\n)(window, window.jQuery, Popper)\r\n\r\n\r\nexport default {BsMultiSelect, BsPicks , MultiSelectTools: {MultiSelectBuilder, plugins: shallowClearClone({Bs5Plugin}, allPlugins), utilities} }"]}