{"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/PicksDom.js","../../js/src/SpecialPicksEventsAspect.js","../../js/src/ResetFilterListAspect.js","../../js/src/PickDomFactory.js","../../js/src/BuildPickAspect.js","../../js/src/InputAspect.js","../../js/src/ChoiceDomFactory.js","../../js/src/BuildChoiceAspect.js","../../js/src/ResetLayoutAspect.js","../../js/src/OptionsLoopAspect.js","../../js/src/UpdateDataAspect.js","../../js/src/LoadAspect.js","../../js/src/BsMultiSelectDepricatedParameters.js","../../js/src/MultiSelectBuilder.js","../../js/src/CreateForJQuery.js","../../js/src/AddToJQueryPrototype.js","../../js/src/plugins/LabelForAttributePlugin.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/plugins/UpdateAppearancePlugin.js","../../js/src/plugins/DisableComponentPlugin.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","removeStyling","toggleStyling","isOn","isF","force","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","disableComponentAspect","resetLayoutAspect","placeholderStopInputAspect","warningAspect","configuration","createPopperAspect","rtlAspect","staticManager","picksElement","choicesElement","filterInputElement","pop","createPopper","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","origDisableComponent","disableComponent","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","create","choicesListElement","appendChild","display","choices","choicesList","createChoiceElement","isVisible","beforeElement","insertBefore","detach","removeChild","ChoicesDomFactory","staticDomFactory","createStaticDom","showError","message","backgroundColor","color","Error","containerElement","removableContainerClass","isDisposablePicksElement","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","pickFilterElement","picks","pickFilter","disableToggleStyling","picks_disabled","focusToggleStyling","picks_focus","isFocusIn","createPickElement","pickElement","disable","toggleFocusStyling","getIsFocusIn","setIsFocusIn","newIsFocusIn","PicksDom","visible","resetFilterListAspect","forceResetFilter","ResetFilterListAspect","resetFilterAspect","resetFilter","ResetFilterAspect","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","choiceContentElement","choiceCheckBoxElement","choiceLabelElement","choiceContent","choiceCheckBox","choiceLabel","choiceSelectedToggle","choice_selected","choiceDisabledToggle","choice_disabled","choiceCheckBoxDisabledToggle","choiceCheckBox_disabled","choiceLabelDisabledToggle","choiceLabel_disabled","choiceCursorDisabledToggle","cursor","choiceHoverToggle","choice_disabled_hover","isOptionSelected","choice_hover","updateHighlighted","updateHoverIn","isCheckBoxDisabled","updateSelected","checked","ChoiceDomFactory","_choicesDom$createCho","_choiceDomFactory$cre","BuildChoiceAspect","buildAndAttachChoiceAspect","buildAndAttachChoice","getNextElement","BuildAndAttachChoiceAspect","optionAttachAspect","OptionAttachAspect","optionsLoopAspect","loop","OptionsLoopAspect","updateDataAspect","UpdateDataAspect","updateAspect","UpdateAspect","loadAspect","load","LoadAspect","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","$","globalPopper","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","LabelForAttributePlugin","getLabelElementAspect","labelForAttributeAspect","createInputId","selectElement","id","labelElement","getLabelElement","backupedForAttribute","newId","LabelForAttributeAspect","RtlPlugin","forceRtlOnContainer","attributeBackup","currentAtribute","restore","removeAttribute","dirAttributeValue","ValidityApi","visibleElement","isValueMissingObservable","valueMissingMessage","onValid","customValidationMessage","validationMessage","validity","setMessage","valueMissing","customError","valid","createValidity","setCustomValidity","checkValidity","willValidate","reportValidity","label","ValidationApiPlugin","getIsValueMissing","required","getValueRequired","optionsArray","selected","validationApiObservable","setValue","newValue","validationApiPluginData","validationApi","isValid","BsAppearancePlugin","updateSize","updateAppearanceAspect","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","updateAppearance","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","OptionsApiPlugin","updateOptionAdded","_nextChoice","updateOptionRemoved","SelectElementPlugin","origLoadAspectLoop","readyState","domContentLoadedHandler","SelectedOptionPlugin","updateOptionsSelectedAspect","getIsOptionSelected","getSelected","setIsOptionSelected","setSelected","origFilterPredicate","composeUpdateSelected","booleanValue","trySetWrapSelected","success","origCreateWrap","origAddPick","selectAll","deselectAll","setOptionSelected","updateOptionsSelected","updateOptionSelected","updateChoiceSelected","newIsSelected","updateChoiceDisabled","getIsOptionDisabled","newIsDisabled","PicksApiPlugin","forEachPeak","getTailPeak","_picksList$getTail","countPeaks","isEmptyPeaks","updateHidden","PicksPlugin","addOptionPicked","CreatePopperPlugin","createPopperConstructor","Popper","createModifiersVX","createPopperVX","anchorElement","popperConfiguration","CreateModifiersV1","CreateModifiersV2","preventOverflow","placement","modifiers","popper","destroy","CreatePopperAspect","enabled","flip","fallbackPlacements","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","configurationPluginData","extendCss","optGroupAspect","origStaticDomFactoryCreate","_origStaticDomFactory","origCreateStaticDom","disposableContainerElement","backupDisplay","backupedRequired","fieldsetElement","getOptionOptGroup","getOptGroupText","optGroup","getOptGroupId","nextSibling","UpdateOptionsSelectedAspect","origReset","_origAdd","WarningPlugin","isNoResultsWarningEnabled","origAppendToContainer","warning","WarningAspect","HighlightPlugin","origProcessEmptyInput","origSetFilter","origSetVisible","CustomChoiceStylingsPlugin","apsects","customChoiceStylings","customChoiceStylingsAspect","customize","handlers","customChoiceStylingsClosure","custom","origChoiceDomFactoryCreate","CustomPickStylingsPlugin","customPickStylingsAspect","customPickStylings","customPickStylingsClosure","CustomPickStylingsAspect","origPickDomFactoryCreate","UpdateAppearancePlugin","DisableComponentPlugin","DisableComponentAspect","newIsComponentDisabled","useHighlighting","guarded","replace","regex","RegExp","defaultPlugins","HiddenOptionPlugin","origBuildAndAttachChoice","origIsSelectable","hidden","updateOptionsHidden","updateOptionHidden","FormResetPlugin","eventBuilder","form","FormRestoreOnBackwardPlugin","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 \r\n 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 var isF = styling instanceof Function;\r\n return (value, force)=>{\r\n if (value) {\r\n if (isOn===false){\r\n backupStyling = addStyling(element, isF?styling():styling)\r\n isOn=true;\r\n } else if (force){\r\n removeStyling(element, backupStyling);\r\n backupStyling =addStyling(element, isF?styling():styling)\r\n }\r\n } else {\r\n if (isOn===true || force===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 disableComponentAspect, 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.createPopper(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.createPopper(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 if (disableComponentAspect){\r\n let origDisableComponent = disableComponentAspect.disableComponent; \r\n disableComponentAspect.disableComponent = (isComponentDisabled) => {\r\n origDisableComponent(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\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 {UpdateAspect } 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 {ResetLayoutAspect} from './ResetLayoutAspect'\r\n\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 = {dispose(){}};\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 (means generated DOM elements) in plugin construtctor, what simplifies parameters passing a lot \r\n\r\n // THINK: get filterDom, picksDom from createStaticDom ? But this would create excesive dublicate call in selectElementPlugin\r\n let filterDom = FilterDom(staticDom.isDisposablePicksElement, createElementAspect, css);\r\n let picksDom = PicksDom(staticDom.picksElement, staticDom.isDisposablePicksElement, createElementAspect, css);\r\n \r\n\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 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 optionAttachAspect = OptionAttachAspect(createWrapAspect, createChoiceBaseAspect, buildAndAttachChoiceAspect, wraps);\r\n let optionsLoopAspect = OptionsLoopAspect(optionsAspect, optionAttachAspect);\r\n let updateDataAspect = UpdateDataAspect(choicesDom, wraps, picksList, optionsLoopAspect, resetLayoutAspect);\r\n let updateAspect = UpdateAspect(updateDataAspect);\r\n\r\n let loadAspect = LoadAspect(optionsLoopAspect);\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 loadAspect, updateDataAspect, updateAspect, \r\n 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 to use in memory leak analyzes\r\n pluginManager.buildApi(api);\r\n\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.updateData = () => { \r\n updateDataAspect.updateData();\r\n };\r\n api.update = () => {\r\n updateAspect.update()\r\n }\r\n \r\n \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 isDisposablePicksElement=false;\r\n if (!picksElement) {\r\n picksElement = createElementAspect.createElement('UL');\r\n isDisposablePicksElement = true; \r\n }\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 isDisposablePicksElement\r\n },\r\n staticManager: {\r\n appendToContainer(){ \r\n containerElement.appendChild(choicesDom.choicesElement); \r\n if (isDisposablePicksElement)\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 (isDisposablePicksElement)\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(isDisposablePicksElement, 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 (!isDisposablePicksElement){\r\n if (filterInputElement.parentNode)\r\n filterInputElement.parentNode.removeChild(filterInputElement)\r\n }\r\n }\r\n }\r\n}\r\n","import {addStyling, toggleStyling} from './ToolsStyling';\r\n\r\nexport function PicksDom(picksElement, isDisposablePicksElement, 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 (!isDisposablePicksElement){\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","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 {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 \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 if (wrap.isOptionDisabled || wrap.choice.isHoverIn){\r\n choiceHoverToggle(wrap.choice.isHoverIn, true);\r\n }\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 let choiceHoverToggle = toggleStyling(choiceElement, ()=>{\r\n if (css.choice_disabled_hover && wrap.isOptionDisabled===true && wrap.isOptionSelected===false)\r\n return css.choice_disabled_hover;\r\n else\r\n return css.choice_hover;\r\n });\r\n let updateHoverIn = function(){\r\n choiceHoverToggle(wrap.choice.isHoverIn);\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 let choiceHoverToggle = toggleStyling(choiceElement, ()=>\r\n (wrap.isOptionDisabled && css.choice_disabled_hover)?css.choice_disabled_hover:css.choice_hover);\r\n \r\n let updateHoverIn = function(){\r\n choiceHoverToggle(wrap.choice.isHoverIn);\r\n }\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 {\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}","export function ResetLayoutAspect(resetLayout){\r\n return {\r\n resetLayout\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 wrap.choice = createChoiceBaseAspect.createChoiceBase(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 \r\n wraps.push(wrap); // note: before attach because attach need it for navigation management\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\r\nexport function UpdateAspect(updateDataAspect){\r\n return {\r\n update(){\r\n updateDataAspect.updateData();\r\n }\r\n }\r\n}","\r\nexport function LoadAspect(optionsLoopAspect){\r\n return{\r\n load(){ // redriven in AppearancePlugin, FormRestoreOnBackwardPlugin\r\n optionsLoopAspect.loop();\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); // TODO: configuration should become an aspect\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, $, globalPopper, 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, globalPopper}\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, composeSync} from '../ToolsJs';\r\n\r\nexport function LabelForAttributePlugin(aspects){\r\n var {staticDom, filterDom, getLabelElementAspect, configuration, loadAspect, disposeAspect} = aspects;\r\n var {containerClass} = configuration;\r\n \r\n var labelForAttributeAspect = LabelForAttributeAspect(staticDom, filterDom, containerClass, getLabelElementAspect, disposeAspect);\r\n aspects.labelForAttributeAspect=labelForAttributeAspect;\r\n loadAspect.load = composeSync(loadAspect.load, ()=>labelForAttributeAspect.update())\r\n}\r\n\r\nLabelForAttributePlugin.plugDefaultConfig = (defaults)=>{\r\n defaults.label = null;\r\n}\r\n\r\nLabelForAttributePlugin.plugStaticDom = (aspects) => {\r\n aspects.getLabelElementAspect = GetLabelElementAspect(aspects.configuration.label);\r\n}\r\n\r\nfunction GetLabelElementAspect(label){\r\n return{\r\n getLabelElement(){ // overrided by BS Appearance Plugin\r\n defCall(label);\r\n } \r\n }\r\n}\r\n\r\nfunction LabelForAttributeAspect(staticDom, filterDom, containerClass, getLabelElementAspect, disposeAspect){\r\n return{\r\n update(){ \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 let labelElement = getLabelElementAspect.getLabelElement();\r\n \r\n if (labelElement) {\r\n let backupedForAttribute = labelElement.getAttribute('for');\r\n var newId = createInputId();\r\n filterInputElement.setAttribute('id', newId);\r\n labelElement.setAttribute('for',newId);\r\n if (backupedForAttribute){\r\n disposeAspect.dispose = composeSync(\r\n disposeAspect.dispose, \r\n () =>labelElement.setAttribute('for',backupedForAttribute)\r\n )\r\n }\r\n }\r\n } \r\n }\r\n}","import {getIsRtl, AttributeBackup} from '../ToolsDom';\r\nimport {isBoolean} from '../ToolsJs';\r\n\r\nexport function RtlPlugin(aspects){\r\n let {configuration, rtlAspect, staticDom} = aspects;\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 constructor\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, getLabelElementAspect, updateAppearanceAspect, 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 (getLabelElementAspect){\r\n let origGetLabelElementAspect = getLabelElementAspect.getLabelElement;\r\n getLabelElementAspect.getLabelElement = () => {\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 updateAppearanceAspect.updateAppearance = composeSync(\r\n updateAppearanceAspect.updateAppearance, \r\n updateSize, \r\n validationObservable.call, \r\n 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}","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}","export function JQueryMethodsPlugin(aspects){\r\n let {staticDom, choicesDom, filterDom, picksList, picksDom} = aspects;\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 api.picksCount = () => picksList.getCount();\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 { loadAspect, environment} = aspects;\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) at load time\r\n // or \"show preserved on go back\" (Chrome) after page is loaded but before \"ready\" event;\r\n // mote: 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 isDisposablePicksElement = false;\r\n if (!picksElement) {\r\n picksElement = createElementAspect.createElement('UL');\r\n isDisposablePicksElement = 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 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 isDisposablePicksElement,\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 (isDisposablePicksElement)\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 (isDisposablePicksElement)\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, updateOptionsSelectedAspect,\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} = configuration;\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\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 = () => updateOptionsSelectedAspect.updateOptionsSelected();\r\n api.updateOptionSelected = (key) => updateChoiceSelected(wrapsCollection.get(key), getIsOptionSelected)\r\n }\r\n }\r\n}\r\n\r\nSelectedOptionPlugin.plugStaticDom = (aspects) => {\r\n let {configuration, wrapsCollection} = 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 configuration.getSelected= getIsOptionSelected;\r\n configuration.setSelected= setIsOptionSelected;\r\n aspects.updateOptionsSelectedAspect = UpdateOptionsSelectedAspect(wrapsCollection, getIsOptionSelected);\r\n}\r\n\r\nfunction UpdateOptionsSelectedAspect(wrapsCollection, getIsOptionSelected){\r\n return {\r\n updateOptionsSelected(){\r\n wrapsCollection.forLoop( wrap => updateChoiceSelected(wrap, 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(aspects){\r\n let {environment} = aspects;\r\n let {createPopper, Popper, globalPopper} = environment;\r\n let createModifiersVX = null;\r\n let createPopperVX = null;\r\n if (Popper) { // V2\r\n createPopperVX = createPopper = (function(createPopperConstructor) {\r\n return function(anchorElement, element, popperConfiguration) {\r\n return new createPopperConstructor(anchorElement, element, popperConfiguration);\r\n }\r\n })(Popper);;\r\n createModifiersVX = CreateModifiersV1;\r\n } else if (createPopper) {\r\n createPopperVX = createPopper;\r\n createModifiersVX = CreateModifiersV2;\r\n } else if (globalPopper) {\r\n if (globalPopper.createPopper) {\r\n createPopperVX = globalPopper.createPopper;\r\n createModifiersVX = CreateModifiersV2;\r\n } else {\r\n createPopperVX = createPopper = (function(createPopperConstructor) {\r\n return function(anchorElement, element, popperConfiguration) {\r\n return new createPopperConstructor(anchorElement, element, popperConfiguration);\r\n }\r\n })(globalPopper);\r\n createModifiersVX = CreateModifiersV1;\r\n }\r\n } else {\r\n throw new Error(\"BsMultiSelect: Popper component (https://popper.js.org) is required\");\r\n }\r\n \r\n aspects.createPopperAspect = CreatePopperAspect(createPopperVX, createModifiersVX);\r\n}\r\n\r\nfunction CreateModifiersV1(preventOverflow){\r\n return {\r\n preventOverflow: {enabled:preventOverflow},\r\n hide: {enabled:false},\r\n flip: {enabled:false}\r\n };\r\n}\r\n\r\nfunction CreateModifiersV2(preventOverflow){\r\n var modifiers = [{\r\n name: 'flip',\r\n options: {\r\n fallbackPlacements: ['bottom'],\r\n },\r\n }\r\n ];\r\n if (preventOverflow) {\r\n modifiers.push({name: 'preventOverflow'});\r\n }\r\n return modifiers;\r\n}\r\n\r\nfunction CreatePopperAspect(createPopperVX, createModifiersVX){\r\n return {\r\n createPopper(element, anchorElement, preventOverflow){\r\n \r\n let modifiers = createModifiersVX(preventOverflow);\r\n \r\n let popperConfiguration = {\r\n placement: 'bottom-start',\r\n modifiers: modifiers\r\n };\r\n let popper = null;\r\n return {\r\n init(){\r\n popper = createPopperVX(anchorElement, element, popperConfiguration); \r\n },\r\n update(){ \r\n popper.update(); // become async in popper 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}","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}","// aka auto height and scrolling\r\nexport 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\nconst defNoResultsWarningMessage = 'No results found';\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 = defNoResultsWarningMessage;\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 {composeSync} from '../ToolsJs';\r\n\r\nexport function UpdateAppearancePlugin(aspects){\r\n var {updateAppearanceAspect, updateAspect, loadAspect} = aspects;\r\n \r\n updateAspect.update = composeSync(updateAspect.update, ()=>updateAppearanceAspect.updateAppearance())\r\n loadAspect.load = composeSync(loadAspect.load, ()=>updateAppearanceAspect.updateAppearance())\r\n\r\n return{\r\n buildApi(api){\r\n api.updateAppearance = ()=>updateAppearanceAspect.updateAppearance();\r\n }\r\n }\r\n}\r\n\r\nUpdateAppearancePlugin.plugStaticDom = (aspects) => {\r\n aspects.updateAppearanceAspect = UpdateAppearanceAspect();\r\n}\r\n\r\nfunction UpdateAppearanceAspect(){\r\n return {\r\n updateAppearance(){}\r\n }\r\n}","import {composeSync} from '../ToolsJs';\r\n\r\nexport function DisableComponentPlugin(aspects){\r\n var {updateAppearanceAspect, picksList, picksDom, componentPropertiesAspect} = aspects;\r\n var disableComponentAspect = DisableComponentAspect(picksList, picksDom);\r\n aspects.disableComponentAspect=disableComponentAspect;\r\n\r\n let isComponentDisabled; // state! \r\n function updateDisabled(){\r\n let newIsComponentDisabled = componentPropertiesAspect.getDisabled();\r\n if (isComponentDisabled!==newIsComponentDisabled){\r\n isComponentDisabled=newIsComponentDisabled;\r\n disableComponentAspect.disableComponent(newIsComponentDisabled);\r\n }\r\n }\r\n\r\n updateAppearanceAspect.updateAppearance = composeSync (updateAppearanceAspect.updateAppearance, updateDisabled);\r\n \r\n return{\r\n buildApi(api){\r\n api.updateDisabled = updateDisabled;\r\n }\r\n }\r\n}\r\n\r\nfunction DisableComponentAspect(picksList, picksDom){\r\n return {\r\n disableComponent(isComponentDisabled){\r\n picksList.forEach(pick=>pick.pickDomManagerHandlers.updateComponentDisabled())\r\n picksDom.disable(isComponentDisabled);\r\n }\r\n }\r\n}","import {LabelForAttributePlugin} from './plugins/LabelForAttributePlugin'\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\nimport {UpdateAppearancePlugin} from './plugins/UpdateAppearancePlugin'\r\nimport {DisableComponentPlugin} from './plugins/DisableComponentPlugin'\r\n\r\nexport let defaultPlugins = {CssPatchPlugin, SelectElementPlugin, \r\n LabelForAttributePlugin, HiddenOptionPlugin, ValidationApiPlugin, \r\n UpdateAppearancePlugin, BsAppearancePlugin, DisableComponentPlugin,\r\n FormResetPlugin, CreatePopperPlugin, WarningPlugin, RtlPlugin, PlaceholderPlugin, FloatingLabelPlugin, OptionsApiPlugin, \r\n JQueryMethodsPlugin, \r\n SelectedOptionPlugin, FormRestoreOnBackwardPlugin, \r\n DisabledOptionPlugin, PicksApiPlugin, HighlightPlugin,\r\n ChoicesDynamicStylingPlugin, CustomPickStylingsPlugin, CustomChoiceStylingsPlugin};\r\n\r\nexport let picksPlugins = {CssPatchPlugin, PicksPlugin, \r\n LabelForAttributePlugin, ValidationApiPlugin, \r\n UpdateAppearancePlugin, BsAppearancePlugin, DisableComponentPlugin, \r\n 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\r\n// var defaultConfig = {\r\n// plugins: defaultPlugins\r\n// }\r\n\r\n// var picksConfig = {\r\n// plugins: picksPlugins\r\n// }\r\n\r\n// export function createConfig(arg){\r\n// return config;\r\n// }","import {EventBinder, closestByTagName} from '../ToolsDom';\r\n\r\nexport function FormResetPlugin(aspects){\r\n var {staticDom, updateDataAspect, environment} = aspects;\r\n\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( ()=>updateDataAspect.updateData() ) );\r\n }\r\n }\r\n return {\r\n dispose(){\r\n eventBuilder.unbind();\r\n }\r\n }\r\n}","import {composeSync} from '../ToolsJs';\r\n\r\nexport function FormRestoreOnBackwardPlugin(aspects){\r\n let {staticDom, environment, loadAspect, updateOptionsSelectedAspect} = aspects;\r\n let window = environment.window;\r\n\r\n if (staticDom.selectElement && updateOptionsSelectedAspect){\r\n loadAspect.load = composeSync(loadAspect.load,\r\n function(){\r\n // support browser's \"step backward\" and form's values restore\r\n if (window.document.readyState !=\"complete\"){\r\n window.setTimeout(function(){\r\n updateOptionsSelectedAspect.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}","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\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: 'selected', // not bs,\r\n choice_disabled: 'disabled', // not bs,\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: {classes:'badge'}, // 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_selected: 'selected', // remove,\r\n //choice_disabled: 'disabled', // remove,\r\n choice_hover: 'text-primary bg-light', \r\n choice_disabled_hover: 'bg-light', // actually 'disabled, not selected'\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', color:'var(--bs-dark)'},\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}","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}","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, globalPopper) => {\r\n return createForJQuery(window, jQuery, globalPopper, 'BsMultiSelect', defaultPlugins, Bs5Plugin)\r\n }\r\n)(window, window.jQuery, Popper)\r\n\r\nconst BsPicks = (\r\n (window, jQuery, globalPopper) => {\r\n return createForJQuery(window, jQuery, globalPopper, 'BsPicks', picksPlugins, Bs5Plugin)\r\n }\r\n)(window, window.jQuery, Popper)\r\n\r\nexport default { BsMultiSelect, BsPicks, \r\n MultiSelectTools: {MultiSelectBuilder, plugins: shallowClearClone({Bs5Plugin}, allPlugins), utilities}\r\n}"]}