{"version":3,"sources":["../../src/ToolsJs.js","../../src/ToolsDom.js","../../src/ToolsStyling.js","../../src/ChoiceDomFactory.js","../../src/FilterManagerAspect.js","../../src/Wraps.js","../../src/MultiSelectInlineLayoutAspect.js","../../src/BsMultiSelect.js","../../src/CreateElementAspect.js","../../src/StaticDomFactory.js","../../src/PicksDomFactory.js","../../src/FilterDomFactory.js","../../src/ChoicesDomFactory.js","../../src/PickDomFactory.js","../../src/ShowErrorAspect.js","../../src/OnChangeAspect.js","../../src/ProducePickAspect.js","../../src/ProduceChoiceAspect.js","../../src/CountableChoicesListInsertAspect.js","../../src/CreateWrapAspect.js","../../src/ChoicesEnumerableAspect.js","../../src/NavigateAspect.js","../../src/SpecialPicksEventsAspect.js","../../src/ResetFilterListAspect.js","../../src/InputAspect.js","../../src/ResetLayoutAspect.js","../../src/OptionsLoopAspect.js","../../src/UpdateDataAspect.js","../../src/LoadAspect.js","../../src/PicksElementAspect.js","../../src/ChoicesVisibilityAspect.js","../../src/AfterInputAspect.js","../../src/PluginManager.js","../../src/BsMultiSelectDepricatedParameters.js","../../src/MultiSelectBuilder.js","../../src/CreateForJQuery.js","../../src/AddToJQueryPrototype.js","../../src/plugins/BsAppearancePlugin.js","../../src/plugins/BsAppearanceBs5Plugin.js","../../src/plugins/LabelForAttributePlugin.js","../../src/plugins/RtlPlugin.js","../../src/plugins/FormResetPlugin.js","../../src/plugins/ValidationApiPlugin.js","../../src/plugins/HiddenOptionPlugin.js","../../src/plugins/CssPatchPlugin.js","../../src/plugins/JQueryMethodsPlugin.js","../../src/plugins/OptionsApiPlugin.js","../../src/plugins/FormRestoreOnBackwardPlugin.js","../../src/plugins/SelectElementPlugin.js","../../src/plugins/SelectedOptionPlugin.js","../../src/plugins/DisabledOptionPlugin.js","../../src/plugins/PicksApiPlugin.js","../../src/plugins/PicksPlugin.js","../../src/plugins/CreatePopperPlugin.js","../../src/plugins/ChoicesDynamicStylingPlugin.js","../../src/plugins/HighlightPlugin.js","../../src/plugins/CustomChoiceStylingsPlugin.js","../../src/plugins/CustomPickStylingsPlugin.js","../../src/plugins/UpdateAppearancePlugin.js","../../src/plugins/DisableComponentPlugin.js","../../src/plugins/PlaceholderPlugin.js","../../src/plugins/PlaceholderCssPatchPlugin.js","../../src/plugins/FloatingLabelPlugin.js","../../src/plugins/WarningCssPatchPlugin.js","../../src/plugins/WarningPlugin.js","../../src/plugins/PickButtonPlugin.js","../../src/PluginSet.js","../../src/plugins/WarningBs5Plugin.js","../../src/plugins/CssPatchBs5Plugin.js","../../src/plugins/BsAppearanceBs5CssPatchPlugin.js","../../src/plugins/FloatingLabelCssPatchBs5Plugin.js","../../src/ToolSet.js","../../src/BsMultiSelect.jquery.js","../../src/DomFactories.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","EventTumbler","on","off","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","ChoiceDomFactory","css","createElementAspect","dataWrap","create","choice","wrap","choiceDom","choiceDomManagerHandlers","choiceElement","createElementFromHtml","choiceContentElement","querySelector","choiceCheckBoxElement","choiceLabelElement","choiceContent","choiceCheckBox","choiceLabel","buildDom","choiceHoverToggle","isOptionDisabled","choice_disabled_hover","isOptionSelected","choice_hover","updateHoverIn","isHoverIn","choiceSelectedToggle","choice_selected","updateSelected","checked","choiceDisabledToggle","choice_disabled","choiceCheckBoxDisabledToggle","choiceCheckBox_disabled","choiceLabelDisabledToggle","choiceLabel_disabled","choiceCursorDisabledToggle","cursor","updateDisabled","isCheckBoxDisabled","disabled","buidDisabled","updateData","textContent","getText","option","eventBinder","event","choiсeClick","dispose","NavigateManager","navigate","down","Wraps","wrapsCollection","listFacade_reset","listFacade_remove","listFacade_add","insert","key","clear","forLoop","MultiSelectInlineLayoutAspect","environment","filterDom","choicesDom","choicesVisibilityAspect","hoveredChoiceAspect","navigateAspect","filterManagerAspect","focusInAspect","picksList","inputAspect","specialPicksEventsAspect","produceChoiceAspect","resetLayoutAspect","picksElementAspect","afterInputAspect","disposeAspect","pickDomFactory","choicesElement","window","document","eventLoopFlag","flag","pr","get","set","timeout","clearTimeout","setTimeout","EventLoopProlongableFlag","skipFocusout","resetSkipFocusout","skipoutMousedown","choicesElementMousedownEventTumbler","documentMouseupEventTumbler","documentMouseup","target","setFocus","resetLayout","setFocusIn","showChoices","isChoicesVisible","updatePopupLocation","setChoicesVisible","scrollTop","hideChoices","resetMouseCandidateChoice","resetHoveredChoice","preventDefaultClickEvent","skipoutAndResetMousedown","composeOnRemoveButtonEventHandler","removeOnButton","setPreventDefaultClickEvent","mouseCandidateEventBinder","mouseOverToHoveredAndReset","hoverIn","keyDownArrow","onKeyDown","keyCode","which","empty","indexOf","preventDefault","pick","backSpace","stopPropagation","onKeyUp","hoveredWrap","getNavigateManager","getHoveredChoice","tryToggleChoice","clickToShowChoices","setFocusIfNotTarget","layout","onFocusIn","onFocusOut","onInput","visibleCount","_inputAspect$processI","processInput","filterInputValue","processEmptyInput","setWidth","visible","notVisible","onClick","onMousedown","origCreatePickDomFactory","origRemoveOnButton","origProduceChoice","produceChoice","pickHandlers","addPickForChoice","detach","removeAndDispose","unbindChoiceElement","overAndLeaveEventBinder","adoptChoiceElement","BsMultiSelect","initialElement","pluginManager","configuration","containerClass","options","trigger","createElement","html","innerHTML","createElementFromHtmlPutAfter","newElement","DOMParser","parseFromString","body","insertBefore","nextSibling","staticDom","staticDomFactory","createStaticDom","containerElement","picksElement","removableContainerClass","Error","isDisposablePicksElementFlag","staticManager","appendToContainer","picksDom","pickFilterElement","appendChild","filterInputElement","removeChild","StaticDomFactory","picksDomFactory","picks","pickFilter","disableToggleStyling","picks_disabled","focusToggleStyling","picks_focus","isFocusIn","createPickElement","pickElement","beforeElement","disable","isComponentDisabled","toggleFocusStyling","getIsFocusIn","setIsFocusIn","newIsFocusIn","PicksDomFactory","filterDomFactory","filterInput","setAttribute","setEmpty","focus","text","width","onFilterInputInput","onfilterInputKeyDown","onFilterInputKeyUp","FilterDomFactory","choicesDomFactory","choicesListElement","display","choices","choicesList","createChoiceElement","setVisible","isVisible","ChoicesDomFactory","getOptions","pickDom","pickDomManagerHandlers","pickContentElement","pickContent","PickDomFactory","choiceDomFactory","showErrorAspect","showError","error","errorElement","backgroundColor","color","block","padding","toString","ShowErrorAspect","eventHandlers","_eventHandlers$layout","onChangeAspect","onChange","OnChangeAspect","dom","producePickAspect","producePick","_picksDom$createPickE","ProducePickAspect","_choicesDom$createCho","setHoverIn","ProduceChoiceAspect","splice","start","countableChoicesList","itemPrev","warp","itemNext","countableChoicesListInsertAspect","countableChoicesListInsert","choiceNext","CountableChoicesListInsertAspect","wraps","w","createWrapAspect","createWrap","createChoiceBaseAspect","createChoiceBase","filteredPrev","filteredNext","searchText","toLowerCase","trim","CreateChoiceBaseAspect","choicesEnumerableAspect","ChoicesEnumerableAspect","filteredChoicesList","emptyNavigateManager","filteredNavigateManager","filterPredicateAspect","filterPredicate","showEmptyFilter","filterText","getFilter","setFilter","FilterManagerAspect","hoveredChoice","setHoveredChoice","NavigateAspect","plugStaticDom","setSelectedFalse","resetFilterListAspect","forceResetFilter","ResetFilterListAspect","resetFilterAspect","resetFilter","ResetFilterAspect","FocusInAspect","fullMatchWrap","fullMatch","InputAspect","buildAndAttachChoiceAspect","buildAndAttachChoice","getNextElement","BuildAndAttachChoiceAspect","ResetLayoutAspect","optionAttachAspect","OptionAttachAspect","optionsLoopAspect","loop","OptionsLoopAspect","updateDataAspect","UpdateDataAspect","loadAspect","load","LoadAspect","updateAspect","update","UpdateAspect","componentDisabledEventBinder","skipoutAndResetMousedownEventBinder","onClickUnbind","panelIsVisble","AfterInputAspect","multiSelectInlineLayoutAspect","append","api","component","buildApi","BsMultiSelectImpl","createHandlers","parseEventHandler","eventHandler","doms","plugStaticDoms","preLayouts","layouts","appends","buildApis","disposes","preLayout","ComposePluginManagerFactory","plugins","defaults","plugedList","mergeList","pluged","plug","merge","settings","inlineBuildAspects","buildAspectsList","j","buildAspects","aspects","newAspects","k","_doms$i$value","_doms$i","_plugStaticDoms$i$val","_plugStaticDoms$i","_preLayouts$i$value","_preLayouts$i","_layouts$j$value","_layouts$j","_appends$i$value","_appends$i","_buildApis$i$value","_buildApis$i","_disposes$i$value","_disposes$i","PluginManager","transformStyles","old","opt","transformClasses","MultiSelectBuilder","defaultCss","pluginManagerFactory","_settings","buildConfiguration","console","log","cssPatch","selectedPanelFocusBorderColor","selectedPanelFocusBoxShadow","boxShadow","borderColor","inputColor","useCss","pick_disabled","useCssPatch","getIsValid","getIsInValid","adjustLegacySettings","inlineBuildAspectsList","defaultSettings","createForJQuery","$","globalPopper","isJQyery","hasAttribute","Event","dispatchEvent","createEvent","initCustomEvent","composeEventTrigger","isIE11","MSInputMethodContext","documentMode","_MultiSelectBuilder","object","arr","ObjectValuesEx","createForUmd","Default","prototypable","pluginName","createPlugin","firstChar","charAt","firstCharLower","prototypableName","noConflictPrototypable","fn","noConflictPrototypableForInstance","dataKey","createInstance","$e","instance","removeData","data","output","this","each","isMethodName","test","methodName","lMethodName","result","prototypableForInstance","noConflict","addToJQueryPrototype","removeInstanceData","multiSelect","getSizeComponentAspect","getValidityComponentAspect","getLabelAspect","selectElement","getDefaultLabel","origLabelAspectGetLabel","getLabel","updateSize","validationApiAspect","updateAppearanceAspect","floatingLabelAspect","getValidity","getSize","composeGetSize","isFloatingLabel","composeGetValidity","picks_lg","picks_sm","picks_def","picks_floating_def","picksLgStyling","picksSmStyling","picksDefStyling","size","updateSizeClasses","updateSizeJsPicks","updateSizeJs","updateSizeJsForAdapter","updateSizeForAdapter","origToggleFocusStyling","validity","validationObservable","picks_focus_invalid","picks_focus_valid","wasUpdatedObservable","getManualValidationObservable","_getMessagesElements","siblings","l","siblingsAsArray","invalidMessages","filter","validMessages","getMessagesElements","map","updateValidity","updateAppearance","updateWasValidated","inputGroupElement","query","id","p1","parentElement","LabelForAttributePlugin","label","createFilterInputElementIdAspect","createFilterInputElementId","filterInputElementId","labelElement","backupedForAttribute","inputId","RtlPlugin","popperRtlAspect","forceRtlOnContainer","attributeBackup","currentAtribute","restore","removeAttribute","dirAttributeValue","eventBuilder","form","ValidationApiPlugin","getValueRequired","valueMissingMessage","preset","required","getIsValueMissing","getValueRequiredAspect","getValueRequiredCfg","GetValueRequiredAspect","valueMissingMessageEx","optionsArray","selected","isValueMissingObservable","validationApiObservable","setValue","newValue","ValidationApiAspect","validationApi","visibleElement","onValid","customValidationMessage","validationMessage","willValidate","setMessage","valueMissing","customError","valid","setCustomValidity","checkValidity","message","reportValidity","ValidityApi","isValid","isChoiceSelectableAspect","isOptionHidden","origBuildAndAttachChoice","buildHiddenChoice","origIsSelectable","isSelectable","getIsOptionHidden","hidden","origCreateWrap","getNextNonHidden","updateOptionsHidden","updateChoiceHidden","updateOptionHidden","newIsOptionHidden","nextChoice","extendCss","JQueryMethodsPlugin","getContainer","getChoices","getChoicesList","getFilterInput","getPicks","picksCount","OptionsApiPlugin","updateOptionAdded","_nextChoice","updateOptionRemoved","updateOptionsSelectedAspect","readyState","updateOptionsSelected","origCreateStaticDom","optGroupAspect","disabledComponentAspect","isDisposableContainerElementFlag","backupDisplay","backupedRequired","fieldsetElement","origGetDisabled","getDisabled","getOptionOptGroup","getOptGroupText","optGroup","getOptGroupId","origCreateFilterInputElementId","origLoadAspectLoop","domContentLoadedHandler","getIsOptionSelected","getSelected","setIsOptionSelected","setSelected","getSelectedAspect","setSelectedAspect","updateChoiceSelected","UpdateOptionsSelectedAspect","origFilterPredicate","composeUpdateSelected","booleanValue","trySetWrapSelected","success","orig","val","ExtendProduceChoiceAspectProduceChoice","ExtendProducePickAspect","selectAll","deselectAll","setOptionSelected","updateOptionSelected","newIsSelected","getIsOptionDisabled","origToggle","choiceUpdateDisabledBackup","ExtendProducePickAspectProducePick","disableToggle","pickContent_disabled","ExtendPickDomFactoryCreate","updateOptionsDisabled","updateChoiceDisabled","updateOptionDisabled","newIsDisabled","PicksApiPlugin","forEachPeak","getTailPeak","_picksList$getTail","countPeaks","isEmptyPeaks","addPick","updateHidden","PicksPlugin","origAdd","origReset","_origAdd","addOptionPicked","CreatePopperPlugin","createPopperConstructor","createPopper","Popper","createModifiersVX","createPopperVX","anchorElement","popperConfiguration","CreateModifiersV1","CreateModifiersV2","createPopperConfigurationAspect","createConfiguration","preventOverflow","placement","modifiers","CreatePopperConfigurationAspect","createPopperAspect","popper","init","destroy","CreatePopperAspect","pop","origBackSpace","enabled","hide","flip","fallbackPlacements","ChoicesDynamicStylingPlugin","useChoicesDynamicStyling","choicesDynamicStyling","minimalChoicesDynamicStylingMaxHeight","g","getElementsByTagName","documentElement","y","innerHeight","clientHeight","pos","getBoundingClientRect","new_y","top","msHeight","Math","max","round","setProperty","ChoicesDynamicStylingPlugin_scrollHandle","origNavigateAspectNavigate","scrollIntoView","origSetChoicesVisible","HighlightPlugin","useHighlighting","ExtendChoiceDomFactory","origChoiceDomFactoryCreate","updateHighlighted","highlighter","highlightAspect","getHighlighter","guarded","replace","regex","RegExp","origProcessEmptyInput","origSetFilter","origSetVisible","CustomChoiceStylingsPlugin","customChoiceStylings","customChoiceStylingsAspect","customize","handlers","customChoiceStylingsClosure","custom","CustomChoiceStylingsAspect","CustomPickStylingsPlugin","customPickStylings","customPickStylingsAspect","customPickStylingsClosure","updateComponentDisabled","CustomPickStylingsAspect","ExtendPickDomFactory","UpdateAppearancePlugin","DisableComponentPlugin","_disabledComponentAsp2","disableButton","disableComponent","origOnClick","_disabledComponentAsp","newIsComponentDisabled","PlaceholderPlugin","resetableFlag","placeholder","setPlaceholder","ignoreNextInputResetableFlag","placeholderStopInputAspect","setPlaceholderOrig","origOnInput","setEmptyInputWidth","emptyToggleStyling","filterInput_empty","showPlacehodler","updatePlacehodlerVisibility","updateEmptyInputWidth","origDisable","setDisabled","returnValue","PlaceholderCssPatchPlugin","FloatingLabelPlugin","label_floating_lifted","picks_floating_lifted","updateLiftedLabel","liftToggleStyling1","liftToggleStyling2","liftedLabel","WarningCssPatchPlugin","warning","paddingLeft","paddingRight","zIndex","fontSize","noResultsWarning","isNoResultsWarningEnabled","warningAspect","warningElement","show","WarningAspect","origVisible","origNotVisible","ExtendAfterInputAspect","pop2","origWarningAspectShow","msg","pickButtonHTML","pickButtonElement","pickButton","origProducePickPickAspect","Bs5PluginSet","BsAppearanceBs5Plugin","PickButtonBs5Plugin","WarningBs5Plugin","plug2","CssPatchBs5Plugin","listStyleType","flexWrap","height","marginBottom","paddingInlineStart","paddingInlineEnd","PicksDomFactoryPlugCssPatch","PicksDomFactoryPlugCssPatchBs5","justifyContent","opacity","ChoiceDomFactoryPlugCssPatch","ChoicesDomFactoryPlugCssPatch","border","margin","outline","backgroundImage","FilterDomFactoryPlugCssPatch","CssPatchPlugin","BsAppearanceBs5CssPatchPlugin","minHeight","PickButtonPlugCssPatchBs5","float","verticalAlign","FloatingLabelCssPatchBs5Plugin","transform","paddingTop","paddingBottom","multiSelectPlugins","SelectElementPlugin","HiddenOptionPlugin","FormResetPlugin","SelectedOptionPlugin","FormRestoreOnBackwardPlugin","DisabledOptionPlugin","DisabledOptionCssPatchPlugin","picksPlugins","allPlugins","utilities","PicksDomFactoryPlugCss","ChoiceDomFactoryPlugCss","ChoiceDomFactoryPlugCssBs5","ChoicesDomFactoryPlugCss","FilterDomFactoryPlugCss","createDefaultCssBs5","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\n// export 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// }\r\n\r\nexport function ObjectValuesEx(object){ \r\n var arr = [];\r\n\tfor (var key in object) {\r\n arr.push({key:key, value: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 EventTumbler(element, eventName, handler){\r\n return {\r\n on() {\r\n element.addEventListener(eventName, handler)\r\n },\r\n off() {\r\n element.removeEventListener(eventName, handler)\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}","import {EventBinder} from './ToolsDom';\r\nimport {addStyling, toggleStyling} from './ToolsStyling';\r\nimport {composeSync} from './ToolsJs';\r\n\r\nfunction buildDom(choiceElement, choiceDom, createElementAspect, css){\r\n createElementAspect.createElementFromHtml(choiceElement, '
');\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 choiceDom.choiceContentElement = choiceContentElement;\r\n choiceDom.choiceCheckBoxElement = choiceCheckBoxElement;\r\n choiceDom.choiceLabelElement = choiceLabelElement;\r\n\r\n addStyling(choiceContentElement, css.choiceContent); \r\n addStyling(choiceCheckBoxElement, css.choiceCheckBox); \r\n addStyling(choiceLabelElement, css.choiceLabel); \r\n}\r\n\r\nfunction buidDisabled(choiceDom, choiceDomManagerHandlers, css, wrap){\r\n let choiceDisabledToggle = toggleStyling(choiceDom.choiceElement, css.choice_disabled);\r\n let choiceCheckBoxDisabledToggle = toggleStyling(choiceDom.choiceCheckBoxElement, css.choiceCheckBox_disabled);\r\n let choiceLabelDisabledToggle = toggleStyling(choiceDom.choiceLabelElement, css.choiceLabel_disabled);\r\n let choiceCursorDisabledToggle = toggleStyling(choiceDom.choiceElement, {classes:[], styles:{cursor:\"default\"}}); \r\n \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 choiceDom.choiceCheckBoxElement.disabled = isCheckBoxDisabled;\r\n choiceCursorDisabledToggle(isCheckBoxDisabled);\r\n }\r\n choiceDomManagerHandlers.updateDisabled = updateDisabled; \r\n}\r\n\r\nexport function ChoiceDomFactory(css, createElementAspect, dataWrap){\r\n //TODO move check which aspects availbale like wrap.hasOwnProperty(\"isOptionSelected\") to there\r\n return {\r\n create(choice){\r\n let wrap = choice.wrap;\r\n let {choiceDom, choiceDomManagerHandlers} = choice;\r\n let choiceElement = choice.choiceDom.choiceElement;\r\n\r\n buildDom(choiceElement, choiceDom, createElementAspect, css);\r\n \r\n // --- --- --- ---\r\n let choiceHoverToggle = toggleStyling(choiceElement, () =>\r\n (wrap.isOptionDisabled===true && css.choice_disabled_hover && wrap.isOptionSelected===false)?\r\n css.choice_disabled_hover:\r\n css.choice_hover\r\n );\r\n\r\n //let choiceHoverToggle2 = toggleStyling(choiceElement, css.choice_disabled_hover, css.choice_hover);\r\n choiceDomManagerHandlers.updateHoverIn=()=>choiceHoverToggle(choice.isHoverIn);\r\n\r\n let choiceSelectedToggle = toggleStyling(choiceElement, css.choice_selected);\r\n let updateSelected = function(){ \r\n choiceSelectedToggle(wrap.isOptionSelected);\r\n choiceDom.choiceCheckBoxElement.checked = wrap.isOptionSelected;\r\n if (wrap.isOptionDisabled || choice.isHoverIn){\r\n choiceHoverToggle(choice.isHoverIn, true);\r\n // choiceHoverToggle2(\r\n // choice.isHoverIn?(wrap.isOptionDisabled?1:2):0\r\n // );\r\n }\r\n }\r\n choiceDomManagerHandlers.updateSelected = updateSelected;\r\n // --- --- --- ---\r\n\r\n buidDisabled(choiceDom, choiceDomManagerHandlers, css, wrap)\r\n\r\n choiceDomManagerHandlers.updateData = ()=> {choiceDom.choiceLabelElement.textContent = dataWrap.getText(wrap.option)};\r\n //updateDataInternal(wrap, choiceLabelElement, dataWrap);\r\n choiceDomManagerHandlers.updateData();\r\n\r\n let eventBinder = EventBinder();\r\n eventBinder.bind(choiceElement, \"click\", event=>choice.choiсeClick(event) );\r\n\r\n composeSync(choice.dispose, ()=>{ \r\n eventBinder.unbind(); \r\n choiceDomManagerHandlers.updateData = null;\r\n choiceDomManagerHandlers.updateHoverIn = null;\r\n choiceDomManagerHandlers.updateSelected = null;\r\n choiceDomManagerHandlers.updateDisabled = null;\r\n choiceDom.choiceContentElement = null;\r\n choiceDom.choiceCheckBoxElement = null;\r\n choiceDom.choiceLabelElement = null;\r\n });\r\n }\r\n }\r\n}\r\n\r\nfunction ChoiceDomFactoryPlugCss(css){\r\n css.choiceCheckBox_disabled = 'disabled'; // not bs, in scss as 'ul.form-control li .custom-control-input.disabled ~ .custom-control-label'\r\n css.choiceLabel_disabled = '';\r\n css.choice_disabled_hover = '';\r\n css.choice_hover = 'hover'; // not bs, in scss as 'ul.dropdown-menu li.hover'\r\n}\r\n\r\nexport function ChoiceDomFactoryPlugCssBs4(css){\r\n ChoiceDomFactoryPlugCss(css)\r\n css.choiceCheckBox = 'custom-control-input';\r\n css.choiceContent = 'custom-control custom-checkbox d-flex';\r\n css.choiceLabel = 'custom-control-label justify-content-start';\r\n css.choice_selected = '';\r\n css.choice_disabled = '';\r\n}\r\n\r\nexport function ChoiceDomFactoryPlugCssBs5(css){\r\n ChoiceDomFactoryPlugCss(css)\r\n css.choiceCheckBox = 'form-check-input'; // bs\r\n css.choiceContent = 'form-check'; // bs d-flex required for rtl to align items\r\n css.choiceLabel = 'form-check-label';\r\n css.choice_selected = 'selected'; // not bs,\r\n css.choice_disabled = 'disabled'; // not bs,\r\n}\r\n\r\nexport function ChoiceDomFactoryPlugCssPatch(cssPatch){\r\n cssPatch.choiceCheckBox = {color: 'inherit', cursor:'inherit'};\r\n cssPatch.choiceContent = {justifyContent: 'flex-start', cursor:'inherit'}; // BS problem: without this on inline form menu items justified center\r\n cssPatch.choiceLabel = {color: 'inherit', cursor:'inherit'}; // otherwise BS .was-validated set its color\r\n cssPatch.choiceLabel_disabled = {opacity: '.65'}; // more flexible than {color: '#6c757d'}; note: avoid opacity on pickElement's border; TODO write to BS4 \r\n cssPatch.choice_disabled_hover = 'bg-light';\r\n cssPatch.choice_hover = 'bg-light text-primary';\r\n}\r\n\r\nexport function ChoiceDomFactory2(css, createElementAspect, dataWrap){\r\n //TODO move check which aspects availbale like wrap.hasOwnProperty(\"isOptionSelected\") to there\r\n return {\r\n create(choice){\r\n let wrap = choice.wrap;\r\n let {choiceDom, choiceDomManagerHandlers} = choice;\r\n let choiceElement = choice.choiceDom.choiceElement;\r\n\r\n choiceElement.innerHTML = '';\r\n let choiceContentElement = choiceElement.querySelector('span');\r\n\r\n choiceDom.choiceContentElement = choiceContentElement;\r\n \r\n choiceDomManagerHandlers.updateData = () => {\r\n choiceContentElement.textContent = dataWrap.getText(wrap.option);\r\n }\r\n choiceDomManagerHandlers.updateData();\r\n\r\n let choiceHoverToggle = toggleStyling(choiceElement, css.choice_hover);\r\n\r\n choiceDomManagerHandlers.updateHoverIn = () => choiceHoverToggle(choice.isHoverIn);\r\n\r\n let eventBinder = EventBinder();\r\n eventBinder.bind(choiceElement, \"click\", event=>choice.choiсeClick(event));\r\n\r\n composeSync(choice.dispose, ()=>{ \r\n choiceDomManagerHandlers.updateData = null;\r\n choiceDomManagerHandlers.updateHoverIn = null;\r\n choiceDom.choiceContentElement = null;\r\n eventBinder.unbind(); \r\n });\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.choiceDomManagerHandlers.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.choiceDomManagerHandlers.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, EventTumbler, containsAndSelf} from './ToolsDom'\r\n\r\nexport function MultiSelectInlineLayoutAspect (\r\n environment, filterDom, choicesDom, \r\n choicesVisibilityAspect, \r\n hoveredChoiceAspect, navigateAspect, filterManagerAspect,\r\n focusInAspect,\r\n picksList,\r\n inputAspect, specialPicksEventsAspect, produceChoiceAspect, \r\n resetLayoutAspect,\r\n picksElementAspect,\r\n \r\n afterInputAspect,\r\n disposeAspect,\r\n pickDomFactory\r\n ) \r\n{\r\n \r\n //return \r\n let choicesElement = choicesDom.choicesElement;\r\n var window = environment.window;\r\n var document = window.document;\r\n var eventLoopFlag =EventLoopProlongableFlag(window); \r\n var skipFocusout = false; // state\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 // add listeners that manages close dropdown on click outside container\r\n var choicesElementMousedownEventTumbler = EventTumbler(choicesElement, \"mousedown\", skipoutMousedown);\r\n var documentMouseupEventTumbler = EventTumbler(document, \"mouseup\", documentMouseup);\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) && !picksElementAspect.containsAndSelf(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 \r\n // TODO: move to scroll plugin\r\n choicesElement.scrollTop = 0;\r\n \r\n choicesElementMousedownEventTumbler.on();\r\n documentMouseupEventTumbler.on();\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 choicesElementMousedownEventTumbler.off();\r\n documentMouseupEventTumbler.off();\r\n }\r\n }\r\n\r\n var preventDefaultClickEvent = null; // state\r\n function setPreventDefaultClickEvent(event){\r\n preventDefaultClickEvent=event;\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\r\n\r\n // function composeOnRemoveButtonEventHandler(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 // 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\r\n function composeOnRemoveButtonEventHandler(removeOnButton){ return (event) => {\r\n window.setTimeout(()=>removeOnButton(event))\r\n \r\n setPreventDefaultClickEvent(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.choiceDom.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\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 afterInputAspect.visible(showChoices, visibleCount);\r\n }else{\r\n afterInputAspect.notVisible(hideChoices);\r\n }\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 let hoveredWrap = hoveredChoiceAspect.getHoveredChoice(); \r\n if (hoveredWrap){\r\n let wasToggled = hoveredWrap.choice.tryToggleChoice(); \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 /*tab*/) {\r\n if (choicesVisibilityAspect.isChoicesVisible()) {\r\n keyDownArrow(true);\r\n } else {\r\n if (filterManagerAspect.getNavigateManager().getCount()>0){\r\n showChoices();\r\n }\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 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 return {\r\n layout(){\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 filterDom.onInput(() => {\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 filterDom.onKeyDown(onKeyDown); \r\n filterDom.onKeyUp(onKeyUp);\r\n \r\n picksElementAspect.onClick(clickToShowChoices);\r\n picksElementAspect.onMousedown(skipoutAndResetMousedown);\r\n \r\n resetLayoutAspect.resetLayout = composeSync(\r\n hideChoices,\r\n resetLayoutAspect.resetLayout // resetFilter by default\r\n );\r\n \r\n var origCreatePickDomFactory = pickDomFactory.create;\r\n pickDomFactory.create = (pick) => {\r\n origCreatePickDomFactory(pick);\r\n if (pick.removeOnButton){\r\n var origRemoveOnButton = pick.removeOnButton;\r\n pick.removeOnButton = composeOnRemoveButtonEventHandler(origRemoveOnButton);\r\n }\r\n }\r\n \r\n \r\n let origProduceChoice = produceChoiceAspect.produceChoice;\r\n produceChoiceAspect.produceChoice = (wrap) => {\r\n origProduceChoice(wrap);\r\n var pickHandlers = wrap.choice.addPickForChoice(); \r\n // note pickHandlers.removeAndDispose not exist (till produce is created)\r\n wrap.choice.choiceDomManagerHandlers.detach = composeSync(wrap.choice.choiceDomManagerHandlers.detach, () => {\r\n if (pickHandlers.removeAndDispose) {\r\n pickHandlers.removeAndDispose();\r\n pickHandlers.removeAndDispose=null;\r\n }\r\n })\r\n\r\n wrap.choice.choiсeClick = composeSync(wrap.choice.choiсeClick, ()=>filterDom.setFocus());\r\n \r\n let unbindChoiceElement = adoptChoiceElement(wrap);\r\n wrap.choice.dispose = composeSync(unbindChoiceElement, wrap.choice.dispose);\r\n }\r\n\r\n disposeAspect.dispose = composeSync(disposeAspect.dispose, resetMouseCandidateChoice, () => picksElementAspect.unbind() );\r\n }\r\n }\r\n}\r\n","import {composeSync, List} from './ToolsJs';\r\nimport {PickDomFactory} from './PickDomFactory';\r\nimport {ChoiceDomFactory} from './ChoiceDomFactory';\r\n\r\nimport {StaticDomFactory} from './StaticDomFactory';\r\n\r\nimport {CreateElementAspect} from './CreateElementAspect';\r\n\r\nimport {PicksDomFactory} from './PicksDomFactory';\r\nimport {FilterDomFactory} from './FilterDomFactory';\r\n\r\nimport {ChoicesDomFactory} from './ChoicesDomFactory';\r\nimport {ChoicesVisibilityAspect} from './ChoicesVisibilityAspect';\r\nimport {SpecialPicksEventsAspect} from './SpecialPicksEventsAspect';\r\n \r\nimport {OnChangeAspect} from './OnChangeAspect';\r\n//import {OptionsAspect} from './OptionsAspect';\r\n\r\nimport {ChoicesEnumerableAspect } from './ChoicesEnumerableAspect'\r\nimport {FilterManagerAspect, NavigateManager, FilterPredicateAspect} from './FilterManagerAspect'\r\nimport {BuildAndAttachChoiceAspect, ProduceChoiceAspect} from './ProduceChoiceAspect'\r\nimport {OptionsLoopAspect, OptionAttachAspect} from './OptionsLoopAspect'\r\n\r\nimport {UpdateDataAspect } from './UpdateDataAspect'\r\nimport {UpdateAspect } from './UpdateDataAspect'\r\nimport {CreateWrapAspect, CreateChoiceBaseAspect} from './CreateWrapAspect'\r\n\r\nimport {ProducePickAspect} from './ProducePickAspect'\r\nimport {NavigateAspect, HoveredChoiceAspect} from './NavigateAspect'\r\nimport {Wraps} from './Wraps'\r\n\r\nimport {AppendAspect} from './AppendAspect'\r\n\r\n\r\nimport {InputAspect} from './InputAspect'\r\nimport {ResetFilterAspect, FocusInAspect, ResetFilterListAspect} from './ResetFilterListAspect'\r\n\r\nimport {MultiSelectInlineLayoutAspect} from './MultiSelectInlineLayoutAspect'\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\nimport {PicksElementAspect} from './PicksElementAspect'\r\nimport {AfterInputAspect} from './AfterInputAspect'\r\n\r\nimport {ShowErrorAspect} from './ShowErrorAspect'\r\n\r\n/// environment - common for many; configuration for concreate\r\nexport function BsMultiSelect(initialElement, environment, pluginManager, configuration ){\r\n let { css, getText, containerClass, options} = configuration;\r\n let { trigger } = environment;\r\n\r\n let createElementAspect = CreateElementAspect(\r\n name => environment.window.document.createElement(name), \r\n (element, html) => element.innerHTML = html ,\r\n (element, html) => {\r\n var newElement = new environment.window.DOMParser().parseFromString(html, 'text/html').body.children[0]; \r\n element.parentNode.insertBefore(newElement, element.nextSibling);\r\n });\r\n let dataWrap = {};\r\n let staticDom = {initialElement, css, createElementAspect, containerClass}; \r\n\r\n let staticDomFactory = StaticDomFactory(staticDom);\r\n let picksDomFactory = PicksDomFactory(staticDom);\r\n let filterDomFactory = FilterDomFactory(staticDom);\r\n let choicesDomFactory = ChoicesDomFactory(staticDom);\r\n\r\n dataWrap.getText = getText??(option => option.text);\r\n dataWrap.getOptions = ()=> options;\r\n\r\n staticDom.trigger = (eventName) => trigger(initialElement, eventName)\r\n\r\n let pickDomFactory = PickDomFactory (css, staticDom.createElementAspect, dataWrap); // overrided in CustomPickStylingsPlugin, DisableComponentPlugin\r\n let choiceDomFactory = ChoiceDomFactory (css, staticDom.createElementAspect, dataWrap); // overrided in CustomChoicesStylingsPlugin, HighlightPlugin\r\n \r\n staticDom.environment=environment;\r\n staticDom.showErrorAspect=ShowErrorAspect(staticDom);\r\n try{\r\n let eventHandlers = pluginManager.createHandlers();\r\n return BsMultiSelectImpl(dataWrap, staticDom, staticDomFactory, picksDomFactory, filterDomFactory, choicesDomFactory, pickDomFactory, choiceDomFactory, eventHandlers);\r\n } catch(error) {\r\n staticDom.showErrorAspect.showError(error);\r\n throw error;\r\n }\r\n}\r\n\r\nexport function BsMultiSelectImpl(dataWrap, staticDom, staticDomFactory, picksDomFactory, filterDomFactory, choicesDomFactory, pickDomFactory, choiceDomFactory, eventHandlers){\r\n let onChangeAspect = OnChangeAspect(staticDom, 'dashboardcode.multiselect:change');\r\n let disposeAspect = {dispose(){}};\r\n\r\n eventHandlers.dom({\r\n showErrorAspect: staticDom.showErrorAspect,\r\n environment: staticDom.environment, \r\n onChangeAspect, \r\n disposeAspect, \r\n staticDomFactory, choicesDomFactory, filterDomFactory, picksDomFactory,\r\n staticDom,\r\n dataWrap\r\n });\r\n \r\n // --- --- --- --- --- --- --- --- --- --- --- --- --- ---\r\n let {staticManager} = staticDomFactory.createStaticDom(); \r\n let choicesDom = choicesDomFactory.create();\r\n let picksDom = picksDomFactory.create();\r\n let filterDom = filterDomFactory.create();\r\n\r\n staticDom.choicesDom=choicesDom;\r\n staticDom.picksDom=picksDom;\r\n staticDom.filterDom=filterDom;\r\n // --- --- --- --- --- --- --- --- --- --- --- --- --- ---\r\n \r\n let producePickAspect = ProducePickAspect(picksDom, pickDomFactory); \r\n let picksList = List(); \r\n\r\n let produceChoiceAspect = ProduceChoiceAspect(choicesDom, choiceDomFactory);\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(wrapsCollection, countableChoicesList);\r\n\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 createChoiceHandlersAspect = CreateChoiceHandlersAspect(produceChoiceAspect, wraps);\r\n\r\n let createWrapAspect = CreateWrapAspect();\r\n let createChoiceBaseAspect = CreateChoiceBaseAspect(dataWrap);\r\n //let addPickAspect = AddPickAspect();\r\n\r\n //--------------------------\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 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\r\n // TODO: union to events or create event bus\r\n eventHandlers.plugStaticDom({\r\n pickDomFactory, choiceDomFactory, \r\n countableChoicesList, countableChoicesListInsertAspect, \r\n wrapsCollection, choicesEnumerableAspect, filteredChoicesList, \r\n filterPredicateAspect, \r\n hoveredChoiceAspect, navigateAspect, \r\n filterManagerAspect,\r\n createWrapAspect, createChoiceBaseAspect, \r\n picksList, wraps, //addPickAspect,\r\n\r\n producePickAspect, produceChoiceAspect\r\n }); // apply selectElement support; \r\n\r\n // TODO: to staticManager\r\n //let {staticManager, staticDom, filterDom, picksDom, choicesDom} = staticDomFactory.createStaticDom(); // overrided in SelectElementPlugin\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 let specialPicksEventsAspect = SpecialPicksEventsAspect();\r\n\r\n \r\n let resetFilterListAspect = ResetFilterListAspect(filterDom, filterManagerAspect);\r\n let resetFilterAspect = ResetFilterAspect(filterDom, resetFilterListAspect);\r\n\r\n let focusInAspect = FocusInAspect(picksDom);\r\n\r\n let inputAspect = InputAspect(filterDom, filterManagerAspect /*, fullMatchAspect*/); \r\n\r\n \r\n let buildAndAttachChoiceAspect = BuildAndAttachChoiceAspect(produceChoiceAspect);\r\n let resetLayoutAspect = ResetLayoutAspect(resetFilterAspect); //!!!!!!!!!\r\n //createWrapAspect, createChoiceBaseAspect, buildAndAttachChoiceAspect, wraps\r\n let optionAttachAspect = OptionAttachAspect(createWrapAspect, createChoiceBaseAspect, buildAndAttachChoiceAspect, wraps);\r\n let optionsLoopAspect = OptionsLoopAspect(dataWrap, optionAttachAspect);\r\n\r\n let updateDataAspect = UpdateDataAspect(choicesDom, wraps, picksList, optionsLoopAspect, resetLayoutAspect);\r\n let loadAspect = LoadAspect(optionsLoopAspect); // !!!!!!!!!!!\r\n let updateAspect = UpdateAspect(updateDataAspect);\r\n\r\n let picksElementAspect = PicksElementAspect(picksDom.picksElement);\r\n let choicesVisibilityAspect = ChoicesVisibilityAspect(choicesDom.choicesElement);\r\n let afterInputAspect = AfterInputAspect(filterManagerAspect, navigateAspect, choicesVisibilityAspect, hoveredChoiceAspect);\r\n\r\n let multiSelectInlineLayoutAspect = MultiSelectInlineLayoutAspect(\r\n staticDom.environment, \r\n filterDom, \r\n choicesDom, \r\n choicesVisibilityAspect, \r\n hoveredChoiceAspect, \r\n navigateAspect, \r\n filterManagerAspect,\r\n focusInAspect,\r\n picksList,\r\n inputAspect, \r\n specialPicksEventsAspect, \r\n produceChoiceAspect, \r\n resetLayoutAspect, \r\n picksElementAspect,\r\n afterInputAspect,\r\n disposeAspect,\r\n pickDomFactory\r\n );\r\n \r\n eventHandlers.layout({\r\n picksDom, choicesDom, filterDom, resetLayoutAspect, \r\n choicesVisibilityAspect, staticManager, \r\n buildAndAttachChoiceAspect, optionsLoopAspect, optionAttachAspect,\r\n inputAspect, resetFilterListAspect, resetFilterAspect, \r\n specialPicksEventsAspect,\r\n resetLayoutAspect, focusInAspect, \r\n loadAspect, updateDataAspect, updateAspect, \r\n picksElementAspect, afterInputAspect\r\n });\r\n multiSelectInlineLayoutAspect.layout(); // TODO: to staticManager\r\n\r\n eventHandlers.append();\r\n\r\n let api = {\r\n component: \"BsMultiSelect.api\",// key to use in memory leak analyzes\r\n updateData: () => { \r\n updateDataAspect.updateData();\r\n },\r\n update: () => {\r\n updateAspect.update()\r\n }\r\n } \r\n eventHandlers.buildApi(api);\r\n\r\n // TODO api.updateOption = (key) => {/* all updates: selected, disabled, hidden, text */}\r\n\r\n api.dispose = composeSync(\r\n resetLayoutAspect.resetLayout,\r\n ()=>{disposeAspect.dispose()},\r\n eventHandlers.dispose, \r\n ()=>{picksList.forEach(pick=>pick.dispose());},\r\n wraps.dispose,\r\n staticManager.dispose,\r\n ()=>{\r\n staticDom.choicesDom=null;\r\n staticDom.picksDom=null;\r\n staticDom.filterDom=null;\r\n });\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 staticManager.appendToContainer();\r\n\r\n loadAspect.load();\r\n return api;\r\n}","export function CreateElementAspect(createElement, createElementFromHtml, createElementFromHtmlPutAfter){\r\n return {\r\n createElement,\r\n createElementFromHtml,\r\n createElementFromHtmlPutAfter\r\n }\r\n}","import {findDirectChildByTagName, closestByClassName} from './ToolsDom';\r\n\r\nexport function StaticDomFactory(staticDom){\r\n return {\r\n createStaticDom(){\r\n let {createElementAspect, initialElement, containerClass} = staticDom;\r\n\r\n let containerElement, picksElement;\r\n let removableContainerClass= false;\r\n if (initialElement.tagName == 'DIV') {\r\n containerElement = initialElement;\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 (initialElement.tagName == 'UL') {\r\n picksElement = initialElement;\r\n containerElement = closestByClassName(initialElement, containerClass);\r\n if (!containerElement){\r\n throw new Error('BsMultiSelect: defined on UL but precedentant DIV for container not found; class='+containerClass);\r\n }\r\n } \r\n else if (initialElement.tagName==\"INPUT\") {\r\n throw new Error('BsMultiSelect: INPUT element is not supported');\r\n }\r\n \r\n \r\n let isDisposablePicksElementFlag=false;\r\n if (!picksElement) {\r\n picksElement = createElementAspect.createElement('UL');\r\n isDisposablePicksElementFlag = true; \r\n }\r\n staticDom.containerElement = containerElement;\r\n staticDom.isDisposablePicksElementFlag = isDisposablePicksElementFlag;\r\n staticDom.picksElement = picksElement;\r\n\r\n return {\r\n staticManager: {\r\n appendToContainer(){ \r\n let {containerElement, isDisposablePicksElementFlag, choicesDom, picksDom, filterDom} = staticDom;\r\n picksDom.pickFilterElement.appendChild(filterDom.filterInputElement);\r\n picksDom.picksElement.appendChild(picksDom.pickFilterElement); \r\n containerElement.appendChild(choicesDom.choicesElement); \r\n if (isDisposablePicksElementFlag)\r\n containerElement.appendChild(picksDom.picksElement)\r\n },\r\n dispose(){ \r\n let {containerElement, containerClass, isDisposablePicksElementFlag, choicesDom, picksDom, filterDom} = staticDom;\r\n containerElement.removeChild(choicesDom.choicesElement); \r\n if (removableContainerClass)\r\n containerElement.classList.remove(containerClass);\r\n if (isDisposablePicksElementFlag)\r\n containerElement.removeChild(picksDom.picksElement)\r\n picksDom.dispose();\r\n filterDom.dispose();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}","import {addStyling, toggleStyling} from './ToolsStyling';\r\n\r\nexport function PicksDomFactory(staticDom){\r\n return {\r\n create(){\r\n var {picksElement, isDisposablePicksElementFlag, css, createElementAspect} = staticDom;\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 isDisposablePicksElementFlag,\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 (!isDisposablePicksElementFlag){\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 }\r\n}\r\n\r\nexport function PicksDomFactoryPlugCss(css){\r\n css.picks = 'form-control';\r\n css.pickFilter = '';\r\n css.picks_disabled = 'disabled';\r\n css.picks_focus = 'focus';\r\n css.pick = 'badge';\r\n}\r\n\r\nfunction PicksDomFactoryPlugCssPatch(cssPatch){\r\n cssPatch.picks = {listStyleType:'none', display:'flex', flexWrap:'wrap', height: 'auto', marginBottom: '0',cursor: 'text'},\r\n cssPatch.picks_disabled = {backgroundColor: '#e9ecef'};\r\n cssPatch.picks_focus = {borderColor: '#80bdff', boxShadow: '0 0 0 0.2rem rgba(0, 123, 255, 0.25)'};\r\n cssPatch.pick = {paddingLeft: '0', paddingRight: '.5rem', paddingInlineStart:'0', paddingInlineEnd:'0.5rem'}\r\n}\r\n\r\nexport function PicksDomFactoryPlugCssPatchBs4(cssPatch){\r\n PicksDomFactoryPlugCssPatch(cssPatch)\r\n // TODO: this is done for button and should be moved to button plugin\r\n //cssPatch.pick.lineHeight = '1.5em';\r\n cssPatch.pick.paddingTop = '0.35em';\r\n cssPatch.pick.paddingBottom = '0.35em';\r\n}\r\n\r\nexport function PicksDomFactoryPlugCssPatchBs5(cssPatch){\r\n PicksDomFactoryPlugCssPatch(cssPatch)\r\n // TODO: this is done for button and should be moved to button plugin\r\n cssPatch.pick.color ='var(--bs-dark)';\r\n}","import {addStyling} from './ToolsStyling';\r\nimport {EventBinder} from './ToolsDom';\r\n\r\nexport function FilterDomFactory(staticDom){\r\n return {\r\n create(){\r\n let {isDisposablePicksElementFlag, css, createElementAspect} = staticDom;\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\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 (!isDisposablePicksElementFlag){\r\n if (filterInputElement.parentNode)\r\n filterInputElement.parentNode.removeChild(filterInputElement)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function FilterDomFactoryPlugCss(css){\r\n css.filterInput = '';\r\n}\r\n\r\nexport function FilterDomFactoryPlugCssPatch(cssPatch){\r\n cssPatch.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}\r\n","import {addStyling} from './ToolsStyling';\r\n\r\nexport function ChoicesDomFactory(staticDom) {\r\n return {\r\n create(){\r\n let {css, createElementAspect} = staticDom;\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 \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\r\nexport function ChoicesDomFactoryPlugCss(css){\r\n css.choices = 'dropdown-menu';\r\n css.choicesList = '';\r\n css.choice = '';\r\n}\r\n\r\nexport function ChoicesDomFactoryPlugCssPatch(cssPatch){\r\n cssPatch.choicesList = {listStyleType:'none', paddingLeft:'0', paddingRight:'0', marginBottom:'0'};\r\n cssPatch.choice = {classes:'px-md-2 px-1', styles:{cursor:'pointer'}};\r\n}","import {composeSync} from './ToolsJs';\r\nimport {addStyling} from './ToolsStyling';\r\n\r\n// empty but can be usefull in custom development\r\nexport function PickDomFactoryPlugCss(css){\r\n css.pickContent = '';\r\n}\r\n\r\nexport function PickDomFactory(css, createElementAspect, dataWrap){ \r\n return { \r\n create(pick){\r\n let wrap = pick.wrap;\r\n let {pickDom, pickDomManagerHandlers} = pick;\r\n let pickElement = pickDom.pickElement;\r\n \r\n let pickContentElement = createElementAspect.createElement('SPAN');\r\n\r\n pickElement.appendChild(pickContentElement);\r\n pickDom.pickContentElement=pickContentElement;\r\n pickDomManagerHandlers.updateData = () => {\r\n // this is not a generic because there could be more then one text field.\r\n pickContentElement.textContent = dataWrap.getText(wrap.option); \r\n }\r\n addStyling(pickContentElement, css.pickContent);\r\n pick.dispose=composeSync(pick.dispose, ()=>{\r\n pickDom.pickContentElement=null;\r\n pickDomManagerHandlers.updateData=null;\r\n })\r\n pickDomManagerHandlers.updateData(); // set visual text\r\n }\r\n }\r\n}\r\n","export function ShowErrorAspect(staticDom){\r\n return {\r\n showError(error){\r\n let {createElementAspect, initialElement} = staticDom;\r\n let errorElement = createElementAspect.createElement('SPAN'); \r\n errorElement.style.backgroundColor = 'red';\r\n errorElement.style.color = 'white';\r\n errorElement.style.block = 'inline-block';\r\n errorElement.style.padding = '0.2rem 0.5rem';\r\n errorElement.textContent = 'BsMultiSelect ' + error.toString();\r\n initialElement.parentNode.insertBefore(errorElement, initialElement.nextSibling);\r\n }\r\n }\r\n}","export function OnChangeAspect(staticDom, name) {\r\n return {\r\n onChange(){\r\n staticDom.trigger(name)\r\n }\r\n }\r\n}","export function ProducePickAspect(picksDom, pickDomFactory){\r\n return {\r\n // overrided by DisableOptionPlugin\r\n producePick(wrap){\r\n let {pickElement, attach, detach} = picksDom.createPickElement(); \r\n let pickDom = {pickElement};\r\n let pickDomManagerHandlers = {attach, detach};\r\n \r\n let pick = {\r\n wrap,\r\n pickDom,\r\n pickDomManagerHandlers,\r\n \r\n dispose: () => { \r\n detach();\r\n pickDom.pickElement=null;\r\n pickDomManagerHandlers.attach=null;\r\n pick.wrap=null;\r\n pick.pickDom=null;\r\n pick.pickDomManagerHandlers=null;\r\n }\r\n }\r\n\r\n wrap.pick=pick;\r\n pickDomFactory.create(pick); \r\n \r\n pick.pickDomManagerHandlers.attach();\r\n \r\n return pick;\r\n } \r\n }\r\n}","import {composeSync} from './ToolsJs';\r\nexport function BuildAndAttachChoiceAspect(\r\n produceChoiceAspect,\r\n ){\r\n return {\r\n buildAndAttachChoice(\r\n wrap,\r\n getNextElement \r\n )\r\n {\r\n produceChoiceAspect.produceChoice(wrap);\r\n wrap.choice.choiceDomManagerHandlers.attach(getNextElement?.());\r\n }\r\n }\r\n}\r\n\r\nexport function ProduceChoiceAspect(choicesDom, choiceDomFactory) {\r\n return {\r\n // 1 overrided in highlight and option disable plugins\r\n // 2 call in HiddenPlugin (create)\r\n // 3 overrided in layout: pick created, choice.choiceDomManagerHandlers.detach updated to remove pick\r\n produceChoice(wrap) { \r\n var {choiceElement, attach, detach, setVisible} = choicesDom.createChoiceElement();\r\n \r\n let choice = wrap.choice;\r\n choice.wrap = wrap;\r\n\r\n choice.choiceDom={\r\n choiceElement\r\n };\r\n \r\n let choiceDomManagerHandlers = {\r\n attach, \r\n detach,\r\n setVisible // TODO: refactor it there should be 3 types of not visibility: for hidden, for filtered out, for optgroup, for message item\r\n }\r\n choice.choiceDomManagerHandlers = choiceDomManagerHandlers\r\n choiceDomFactory.create(choice);\r\n\r\n // added by \"navigation (by mouse and arrows) plugin\"\r\n choice.isHoverIn = false; // internal state\r\n choice.setHoverIn = (v) => {\r\n choice.isHoverIn =v ;\r\n choiceDomManagerHandlers.updateHoverIn();\r\n }\r\n\r\n choice.dispose = composeSync(() =>{\r\n choice.choiceDom.choiceElement = null;\r\n choice.choiceDom = null;\r\n choiceDomManagerHandlers.attach=null;\r\n choiceDomManagerHandlers.detach=null;\r\n choiceDomManagerHandlers.setVisible=null;\r\n choice.choiceDomManagerHandlers = null;\r\n choice.choiсeClick=null;\r\n \r\n choice.setHoverIn = null;\r\n \r\n choice.wrap = null;\r\n choice.dispose = null;\r\n }, choice.dispose)\r\n\r\n wrap.dispose = () => {\r\n choice.dispose();\r\n wrap.dispose = null;\r\n }\r\n return choice;\r\n }\r\n }\r\n}","export function CountableChoicesListInsertAspect(wrapsCollection, countableChoicesList){\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}","\r\n// no overrides (not an aspect, just )\r\nexport function CreateChoiceBaseAspect(dataWrap){\r\n return {\r\n createChoiceBase(option){\r\n return {\r\n // navigation and filter support\r\n filteredPrev: null, \r\n filteredNext: null, \r\n searchText: dataWrap.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 \r\n setHoverIn: null,\r\n \r\n choiceDom:null,\r\n \r\n itemPrev: null,\r\n itemNext: 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}","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 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 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","export function InputAspect(\r\n filterDom,\r\n filterManagerAspect\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 = fullMatchWrap.choice.fullMatch(); \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}","export function ResetLayoutAspect(resetFilterAspect){\r\n return {\r\n resetLayout(){\r\n resetFilterAspect.resetFilter();\r\n }\r\n }\r\n}","export function OptionAttachAspect(createWrapAspect, createChoiceBaseAspect, buildAndAttachChoiceAspect, wraps){\r\n return {\r\n attach(option){\r\n let wrap = createWrapAspect.createWrap(option);\r\n wrap.choice = createChoiceBaseAspect.createChoiceBase(option);\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(dataWrap, optionAttachAspect){ \r\n return{\r\n loop(){\r\n let options = dataWrap.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}","import {EventBinder, containsAndSelf} from './ToolsDom';\r\n\r\nexport function PicksElementAspect(picksElement){\r\n var componentDisabledEventBinder = EventBinder();\r\n var skipoutAndResetMousedownEventBinder = EventBinder();\r\n return {\r\n containsAndSelf(element){\r\n return containsAndSelf(picksElement, element);\r\n },\r\n onClickUnbind(){\r\n componentDisabledEventBinder.unbind();\r\n },\r\n onClick(handler){\r\n componentDisabledEventBinder.bind(picksElement, \"click\", handler);\r\n },\r\n onMousedown(handler){\r\n skipoutAndResetMousedownEventBinder.bind(picksElement, \"mousedown\", handler);\r\n },\r\n unbind(){\r\n skipoutAndResetMousedownEventBinder.unbind();\r\n componentDisabledEventBinder.unbind();\r\n }\r\n }\r\n}","export function ChoicesVisibilityAspect(choicesElement) {\r\n\r\n return {\r\n isChoicesVisible(){ \r\n return choicesElement.style.display != 'none'},\r\n setChoicesVisible(visible){\r\n choicesElement.style.display = visible ? 'block' : 'none';\r\n },\r\n updatePopupLocation(){\r\n\r\n }\r\n }\r\n}\r\n","export function AfterInputAspect(filterManagerAspect, navigateAspect, choicesVisibilityAspect, hoveredChoiceAspect){\r\n return {\r\n visible(showChoices, visibleCount){\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 },\r\n notVisible(hideChoices){\r\n if (choicesVisibilityAspect.isChoicesVisible()){\r\n hideChoices();\r\n }\r\n }\r\n }\r\n}","import {extendIfUndefined} from './ToolsJs';\r\n\r\nfunction parseEventHandler(key, eventHandler, doms, plugStaticDoms, preLayouts, layouts, appends, buildApis, disposes){\r\n if (eventHandler) {\r\n if (eventHandler.dom)\r\n doms.push({key, value:eventHandler.dom});\r\n if (eventHandler.plugStaticDom)\r\n plugStaticDoms.push({key, value:eventHandler.plugStaticDom});\r\n if (eventHandler.preLayout)\r\n preLayouts.push({key, value:eventHandler.preLayout});\r\n if (eventHandler.layout)\r\n layouts.push({key, value:eventHandler.layout});\r\n if (eventHandler.append)\r\n appends.push({key, value:eventHandler.append});\r\n if (eventHandler.buildApi)\r\n buildApis.push({key, value:eventHandler.buildApi});\r\n if (eventHandler.dispose)\r\n disposes.push({key, value:eventHandler.dispose});\r\n }\r\n}\r\n\r\nexport function ComposePluginManagerFactory(plugins, defaults, environment){ \r\n let plugedList = [];\r\n let mergeList = [];\r\n for(let i = 0; i {\r\n let buildAspectsList = [];\r\n for(let i = 0; i {\r\n extendIfUndefined(aspects, newAspects)\r\n\r\n var doms = [];\r\n var plugStaticDoms = [];\r\n var preLayouts = [];\r\n var layouts = [];\r\n var appends = [];\r\n var buildApis = [];\r\n let disposes = [];\r\n for(let k = 0; k{\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 {ComposePluginManagerFactory} from './PluginManager'\r\n\r\nimport {adjustLegacySettings} from './BsMultiSelectDepricatedParameters'\r\n\r\nimport {extendIfUndefined} from './ToolsJs'\r\n\r\nimport {createCss} from './ToolsStyling'\r\n\r\n// TODO: remove environment - replace it with plugins\r\n// TODO: defaultCss should come together with DomFactories and Layout \r\nexport function MultiSelectBuilder(environment, plugins, defaultCss) \r\n{\r\n const defaults = {containerClass: \"dashboardcode-bsmultiselect\", css: defaultCss}\r\n \r\n var pluginManagerFactory = ComposePluginManagerFactory(plugins, defaults, environment);\r\n\r\n /* NOTE: about namings\r\n defaults - defaults for module \r\n setting - object that could modify defaults (not just overwrite)\r\n options - configuration \"generalization\": can be buildConfiguration function or settings\r\n configuration - for control instance\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 \r\n let buildConfiguration;\r\n let settings;\r\n if (options instanceof Function) {\r\n buildConfiguration = options;\r\n settings = null;\r\n } else {\r\n buildConfiguration = options?.buildConfiguration;\r\n settings = options;\r\n }\r\n if (settings){\r\n adjustLegacySettings(settings);\r\n }\r\n let configuration = {};\r\n \r\n configuration.css = createCss(defaults.css, settings?.css);\r\n \r\n extendIfUndefined(configuration, settings);\r\n // next line: merging of cssPatch will be delayed to the CssPatchPlugin merge handler\r\n extendIfUndefined(configuration, defaults); \r\n let inlineBuildAspectsList = buildConfiguration?.(element, configuration); \r\n // next line merges settings.cssPatch and defaults.cssPatch also merge defaults.css and defaults.cssPatch \r\n var pluginManager = pluginManagerFactory(configuration, settings, inlineBuildAspectsList); \r\n // now we can freeze configuration object\r\n Object.freeze(configuration);\r\n let multiSelect = BsMultiSelect(element, environment, pluginManager, configuration); \r\n return multiSelect;\r\n }\r\n \r\n return {create, defaultSettings: defaults}\r\n}","import {addToJQueryPrototype} from './AddToJQueryPrototype'\r\n\r\nimport {composeSync, ObjectValuesEx, isString} from './ToolsJs'\r\nimport {composeEventTrigger} from './ToolsDom'\r\n\r\nimport {MultiSelectBuilder} from './MultiSelectBuilder'\r\n\r\nexport function createForJQuery(window, $, globalPopper, name, plugins, defaultCss){\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\r\n var isIE11 = !!window.MSInputMethodContext && !!window.document.documentMode;\r\n\r\n let environment = {trigger, window, globalPopper, isIE11}\r\n let pluginsArray = ObjectValuesEx(plugins)\r\n let {create, defaultSettings} = MultiSelectBuilder(environment, pluginsArray, defaultCss);\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 {closestByClassName, siblingsAsArray} from '../ToolsDom';\r\nimport {addStyling} from '../ToolsStyling'\r\nimport {ObservableLambda, composeSync} from '../ToolsJs';\r\n\r\nexport function BsAppearancePlugin(){\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(configuration){ \r\n let getSizeComponentAspect = {};\r\n let getValidityComponentAspect = {};\r\n return (aspects) => {\r\n aspects.getSizeComponentAspect = getSizeComponentAspect;\r\n aspects.getValidityComponentAspect = getValidityComponentAspect;\r\n return {\r\n // TODO1, LabelElement should be moved to StaticDomFactory and staticDom \r\n // NOTE: preLayout means first after createStaticDom\r\n preLayout: () => {\r\n var {getLabelAspect, staticDom} = aspects; \r\n var {selectElement} = staticDom;\r\n var {getDefaultLabel} = configuration;\r\n let origLabelAspectGetLabel = getLabelAspect.getLabel; \r\n getLabelAspect.getLabel = () => {\r\n var e = origLabelAspectGetLabel();\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 layout: () => {\r\n let {validationApiAspect, \r\n picksDom, staticDom, updateAppearanceAspect, floatingLabelAspect} = aspects;\r\n let {getValidity, getSize, useCssPatch, css, composeGetSize} = configuration;\r\n \r\n let {selectElement, initialElement} = staticDom;\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 (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 getSizeComponentAspect.getSize=getSize;\r\n \r\n getValidityComponentAspect.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(initialElement, 'was-validated');\r\n return wasValidatedElement?true:false;\r\n }\r\n \r\n var wasUpdatedObservable = ObservableLambda(()=>getWasValidated());\r\n var getManualValidationObservable = ObservableLambda(()=>getValidity());\r\n \r\n var validationObservable = ObservableLambda(\r\n () => wasUpdatedObservable.getValue()?validationApiAspect.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 (validationApiAspect)\r\n validationApiAspect.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\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}","import {closestByClassName} from '../ToolsDom'\r\nimport {BsAppearancePlugin} from './BsAppearancePlugin'\r\n\r\nexport function BsAppearanceBs5Plugin(defaults) {\r\n defaults.composeGetSize = composeGetSize; // BsAppearancePlugin\r\n defaults.getDefaultLabel = getDefaultLabel; // FloatingLabelPlugin, BsAppearancePlugin\r\n return BsAppearancePlugin();\r\n}\r\n\r\nfunction composeGetSize(element){\r\n let inputGroupElement = closestByClassName(element, '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 (element.classList.contains('form-select-lg') || element.classList.contains('form-control-lg')) // changed for BS\r\n value = 'lg';\r\n else if (element.classList.contains('form-select-sm') || element.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(element){\r\n let value = null;\r\n let query = `label[for=\"${element.id}\"]`;\r\n let p1 = element.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}","import {defCall, composeSync} from '../ToolsJs';\r\n\r\nexport function LabelForAttributePlugin(defaults){\r\n defaults.label = null;\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(configuration){\r\n var getLabelAspect = {getLabel : ()=>defCall(configuration.label)}\r\n var createFilterInputElementIdAspect = {\r\n createFilterInputElementId : ()=>defCall(configuration.filterInputElementId),\r\n }; \r\n return (aspects) => {\r\n aspects.getLabelAspect = getLabelAspect;\r\n aspects.createFilterInputElementIdAspect = createFilterInputElementIdAspect;\r\n return {\r\n layout: () => {\r\n var {filterDom, loadAspect, disposeAspect, staticDom} = aspects;\r\n\r\n loadAspect.load = composeSync(loadAspect.load, ()=>{\r\n let {filterInputElement} = filterDom;\r\n\r\n let labelElement = getLabelAspect.getLabel(); \r\n if (labelElement){\r\n let backupedForAttribute = labelElement.getAttribute('for');\r\n var inputId = createFilterInputElementIdAspect.createFilterInputElementId();\r\n \r\n if (!inputId){\r\n let {containerClass} = configuration;\r\n let {containerElement} = staticDom;\r\n inputId =`${containerClass}-generated-filter-${containerElement.id}` \r\n }\r\n filterInputElement.setAttribute('id', inputId);\r\n labelElement.setAttribute('for',inputId);\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 }\r\n }\r\n}","\r\nimport {getIsRtl, AttributeBackup} from '../ToolsDom';\r\nimport {isBoolean} from '../ToolsJs';\r\n\r\nexport function RtlPlugin(){\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(configuration){\r\n return (aspects) => {\r\n return {\r\n layout: () => {\r\n let {popperRtlAspect, 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 if (popperRtlAspect)\r\n popperRtlAspect.getIsRtl = () => isRtl;\r\n \r\n return {\r\n dispose(){\r\n attributeBackup.restore();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}","import {EventBinder, closestByTagName} from '../ToolsDom';\r\n\r\nexport function FormResetPlugin(){\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(){\r\n return (aspects) => {\r\n return {\r\n layout: () => {\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 }\r\n }\r\n }\r\n}","import {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(defaults){\r\n preset(defaults);\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function preset(defaults){defaults.getValueRequired=() => false; defaults.valueMissingMessage='';}\r\n\r\nexport function plug(configuration){\r\n let {required, getValueRequired, getIsValueMissing, valueMissingMessage} = configuration;\r\n var getValueRequiredAspect = GetValueRequiredAspect(required, getValueRequired);\r\n return (aspects) => {\r\n aspects.getValueRequiredAspect = getValueRequiredAspect;\r\n return {\r\n plugStaticDom: ()=>{\r\n var {dataWrap, staticDom} = aspects;\r\n\r\n var valueMissingMessageEx = 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 = dataWrap.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 return {\r\n preLayout() {\r\n // getValueRequiredAspect redefined on appendToContainer, so this can't be called on prelayout and layout\r\n var isValueMissingObservable = ObservableLambda(()=>getValueRequiredAspect.getValueRequired() && getIsValueMissing());\r\n var validationApiObservable = ObservableValue(!isValueMissingObservable.getValue()); \r\n aspects.validationApiAspect = ValidationApiAspect(validationApiObservable); // used in BsAppearancePlugin layout, possible races\r\n\r\n return {\r\n layout: () => {\r\n var {onChangeAspect, updateDataAspect} = aspects;\r\n // TODO: required could be a function\r\n //let {valueMissingMessage} = configuration;\r\n\r\n onChangeAspect.onChange = composeSync(isValueMissingObservable.call, onChangeAspect.onChange);\r\n updateDataAspect.updateData = composeSync(isValueMissingObservable.call, updateDataAspect.updateData); \r\n \r\n return {\r\n buildApi(api){\r\n var {staticDom, filterDom} = aspects;\r\n api.validationApi = ValidityApi(\r\n filterDom.filterInputElement, // !!\r\n isValueMissingObservable, \r\n valueMissingMessageEx,\r\n (isValid)=>validationApiObservable.setValue(isValid),\r\n staticDom.trigger\r\n );\r\n }\r\n }\r\n },\r\n dispose(){\r\n isValueMissingObservable.detachAll(); \r\n validationApiObservable.detachAll();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction GetValueRequiredAspect(required, getValueRequiredCfg){\r\n return {\r\n getValueRequired(){\r\n let value = false;\r\n if (!isBoolean(required))\r\n if (getValueRequiredCfg)\r\n value = getValueRequiredCfg();\r\n return value;\r\n }\r\n }\r\n}\r\n\r\nfunction ValidationApiAspect(validationApiObservable){\r\n return {\r\n getValue(){\r\n return validationApiObservable.getValue();\r\n },\r\n attach(f){\r\n validationApiObservable.attach(f);\r\n }\r\n }\r\n}\r\n\r\nfunction 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 = Object.freeze({\r\n valueMissing,\r\n customError,\r\n valid: !(valueMissing || customError),\r\n });\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}","export function HiddenOptionPlugin(){\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(configuration){\r\n return (aspects) => {\r\n return {\r\n layout: () => {\r\n let {createWrapAspect, isChoiceSelectableAspect,\r\n wrapsCollection, produceChoiceAspect, 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, produceChoiceAspect)\r\n );\r\n \r\n api.updateOptionHidden = (key) => \r\n updateChoiceHidden(wrapsCollection.get(key), key, getNextNonHidden, countableChoicesList, getIsOptionHidden, produceChoiceAspect);\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\n }\r\n}\r\n\r\nfunction buildHiddenChoice(wrap){\r\n wrap.updateSelected = () => void 0;\r\n \r\n wrap.choice.choicesDom = {};\r\n wrap.choice.choiceDomManagerHandlers ={}\r\n wrap.choice.choiceDomManagerHandlers.setVisible = null; \r\n wrap.choice.setHoverIn = 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, produceChoiceAspect){\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.choiceDomManagerHandlers.detach(); \r\n buildHiddenChoice(wrap);\r\n } else {\r\n let nextChoice = getNextNonHidden(key);\r\n countableChoicesList.add(wrap, nextChoice);\r\n produceChoiceAspect.produceChoice(wrap);\r\n wrap.choice.choiceDomManagerHandlers.attach(nextChoice?.choice.choiceDom.choiceElement);\r\n }\r\n }\r\n}","import {createCss, extendCss} from '../ToolsStyling';\r\nimport {isBoolean} from '../ToolsJs';\r\n\r\nexport function CssPatchPlugin(defaults){\r\n defaults.useCssPatch = true;\r\n return {\r\n merge(configuration, 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 plug\r\n }\r\n}\r\n\r\nexport function plug(configuration){\r\n if (configuration.useCssPatch){\r\n extendCss(configuration.css, configuration.cssPatch);\r\n configuration.cssPatch = undefined;\r\n }\r\n}\r\n\r\nconst _cssPatchBs5 = {\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}\r\n\r\nconst _cssPatchBs4 = {\r\n choicesList: {listStyleType:'none', paddingLeft:'0', paddingRight:'0', marginBottom:'0'},\r\n picks: {listStyleType:'none', display:'flex', flexWrap:'wrap', height: 'auto', marginBottom: '0',cursor: 'text'},\r\n choice: {classes:'px-md-2 px-1', styles:{cursor:'pointer'}}, \r\n choice_hover: 'text-primary bg-light', \r\n choice_disabled_hover: 'bg-light',\r\n filterInput: {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 \r\n // used in pickContentGenerator\r\n pick: {lineHeight: '1.5em', paddingLeft: '0', paddingRight: '.5rem', paddingInlineStart:'0', paddingInlineEnd:'0.5rem'},\r\n pickButton: {fontSize:'1.5em', lineHeight: '.9em', float : \"none\"},\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 BS4 \r\n\r\n warning: {paddingLeft: '.25rem', paddingRight: '.25rem', zIndex: 4, fontSize:'small', backgroundColor: 'var(--bs-warning)'}, // zIndex=4 since the input-group zIndex=3\r\n}\r\n\r\nconst _cssBs4 = {\r\n choices: 'dropdown-menu', // bs4, in bsmultiselect.scss as ul.dropdown-menu\r\n choicesList: '', // bs4, in bsmultiselect.scss as div.dropdown-menu>ul (first child)\r\n choice_hover: 'hover', // not bs4, in scss as 'ul.dropdown-menu li.hover'\r\n choice_selected: '', \r\n choice_disabled: '', \r\n\r\n picks: 'form-control', // bs4, in scss 'ul.form-control'\r\n picks_focus: 'focus', // not bs4, in scss 'ul.form-control.focus'\r\n picks_disabled: 'disabled', // not bs4, in scss 'ul.form-control.disabled'\r\n pick_disabled: '', \r\n \r\n pickFilter: '', \r\n filterInput: '',\r\n\r\n // used in pickContentGenerator\r\n pick: 'badge', // bs4\r\n pickContent: '',\r\n pickContent_disabled: 'disabled', // not bs4, in scss 'ul.form-control li span.disabled'\r\n pickButton: 'close', // bs4\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 bs4, in scss as 'ul.form-control li .custom-control-input.disabled ~ .custom-control-label'\r\n choiceContent: 'custom-control custom-checkbox d-flex', // bs4 d-flex required for rtl to align items\r\n choiceCheckBox: 'custom-control-input', // bs4\r\n choiceLabel: 'custom-control-label justify-content-start',\r\n choiceLabel_disabled: '',\r\n\r\n warning: 'alert-warning bg-warning'\r\n}\r\n\r\nconst _cssBs5 = {\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}","export function JQueryMethodsPlugin(){\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(){ \r\n return (aspects) => {\r\n return {\r\n layout: () => {\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 }\r\n }\r\n }\r\n}","export function OptionsApiPlugin(){\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(){\r\n return (aspects) => {\r\n return {\r\n buildApi(api){\r\n let {buildAndAttachChoiceAspect, wraps, wrapsCollection, createWrapAspect, createChoiceBaseAspect,\r\n dataWrap, resetLayoutAspect} = aspects;\r\n \r\n api.updateOptionAdded = (key) => { // TODO: generalize index as key \r\n let options = dataWrap.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.choiceDom.choiceElement);\r\n \r\n buildAndAttachChoiceAspect.buildAndAttachChoice(\r\n wrap,\r\n () => nextChoice()?.choice.choiceDom.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.choiceDomManagerHandlers.detach?.();\r\n wrap.dispose?.();\r\n }\r\n }\r\n }\r\n }\r\n}","import {composeSync} from '../ToolsJs';\r\n\r\nexport function FormRestoreOnBackwardPlugin(){\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(){\r\n return (aspects) => {\r\n return {\r\n layout: () => {\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 }\r\n }\r\n }\r\n}","import {closestByTagName, findDirectChildByTagName, closestByClassName} from '../ToolsDom';\r\nimport {composeSync} from '../ToolsJs';\r\n\r\nexport function SelectElementPlugin(){\r\n return {plug}\r\n}\r\n\r\nexport function plug(configuration){\r\n return (aspects) => {\r\n return {\r\n data: (initialElement, staticDom, dataWrap, containerClass) => {\r\n let selectElement = null;\r\n staticDom.containerElement = null;\r\n \r\n if (initialElement.tagName == 'SELECT') {\r\n selectElement = initialElement;\r\n if (containerClass) {\r\n staticDom.containerElement = closestByClassName(selectElement, containerClass)\r\n }\r\n } else if (initialElement.tagName == 'DIV') {\r\n selectElement = findDirectChildByTagName(initialElement, 'SELECT');\r\n if (selectElement) {\r\n if (containerClass) {\r\n staticDom.containerElement = closestByClassName(initialElement, containerClass);\r\n }\r\n } else {\r\n return origCreateStaticDom(initialElement, containerClass);\r\n } \r\n }\r\n if (selectElement){\r\n staticDom.selectElement=selectElement;\r\n dataWrap.getOptions = () => selectElement.options;\r\n }\r\n },\r\n dom: ()=> {\r\n let {\r\n staticDomFactory, \r\n onChangeAspect, dataWrap, disposeAspect, \r\n staticDom,\r\n showErrorAspect, \r\n getValueRequiredAspect, createFilterInputElementIdAspect, optGroupAspect, disabledComponentAspect /* those four are plugins */\r\n } = aspects;\r\n\r\n let {createElementAspect, initialElement} = staticDom;\r\n let containerClass = configuration.containerClass;\r\n let origCreateStaticDom = staticDomFactory.createStaticDom;\r\n \r\n staticDomFactory.createStaticDom = () => {\r\n let selectElement = null;\r\n let containerElement = null;\r\n \r\n if (initialElement.tagName == 'SELECT') {\r\n selectElement = initialElement;\r\n if (containerClass) {\r\n containerElement = closestByClassName(selectElement, containerClass)\r\n }\r\n } else if (initialElement.tagName == 'DIV') {\r\n selectElement = findDirectChildByTagName(initialElement, 'SELECT');\r\n if (selectElement) {\r\n if (containerClass) {\r\n containerElement = closestByClassName(initialElement, containerClass);\r\n }\r\n } else {\r\n return origCreateStaticDom(initialElement, containerClass);\r\n } \r\n }\r\n\r\n let picksElement = null;\r\n if (containerElement)\r\n picksElement = findDirectChildByTagName(containerElement, 'UL'); \r\n \r\n let isDisposableContainerElementFlag = false;\r\n if (!containerElement) {\r\n containerElement = createElementAspect.createElement('DIV');\r\n containerElement.classList.add(containerClass);\r\n isDisposableContainerElementFlag= true;\r\n }\r\n \r\n if (selectElement){\r\n \r\n showErrorAspect.showError = (error)=>{\r\n let errorElement = createElementAspect.createElement('SPAN'); \r\n errorElement.style.backgroundColor = 'red';\r\n errorElement.style.color = 'white';\r\n errorElement.style.padding = '0.2rem 0.5rem';\r\n errorElement.textContent = 'BsMultiSelect ' + error.toString();\r\n selectElement.parentNode.insertBefore(errorElement, selectElement.nextSibling)\r\n }\r\n\r\n var backupDisplay = selectElement.style.display;\r\n selectElement.style.display = 'none';\r\n var backupedRequired = selectElement.required;\r\n \r\n if (getValueRequiredAspect){\r\n getValueRequiredAspect.getValueRequired = function(){\r\n return backupedRequired;\r\n }\r\n }\r\n \r\n if(selectElement.required===true)\r\n selectElement.required = false;\r\n \r\n // TODO: move to DisableCompenentPlugin\r\n //let {getDisabled} = configuration;\r\n \r\n if (disabledComponentAspect){\r\n var fieldsetElement = closestByTagName(selectElement, 'FIELDSET');\r\n var origGetDisabled = disabledComponentAspect.getDisabled;\r\n if (fieldsetElement)\r\n disabledComponentAspect.getDisabled = () => {\r\n var value = origGetDisabled();\r\n if (value===null)\r\n value = selectElement.disabled || fieldsetElement.disabled;\r\n return value;\r\n } \r\n else\r\n disabledComponentAspect.getDisabled = () => {\r\n var value = origGetDisabled();\r\n if (value===null)\r\n value = selectElement.disabled;\r\n return value;\r\n }\r\n }\r\n\r\n onChangeAspect.onChange = composeSync(() => staticDom.trigger('change'), onChangeAspect.onChange) \r\n dataWrap.getOptions = () => selectElement.options;\r\n\r\n if (optGroupAspect){\r\n optGroupAspect.getOptionOptGroup = (option) => option.parentNode;\r\n optGroupAspect.getOptGroupText = (optGroup) => optGroup.label;\r\n optGroupAspect.getOptGroupId = (optGroup) => optGroup.id;\r\n }\r\n \r\n if (selectElement && createFilterInputElementIdAspect){\r\n var origCreateFilterInputElementId = createFilterInputElementIdAspect.createFilterInputElementId;\r\n \r\n createFilterInputElementIdAspect.createFilterInputElementId = () =>\r\n { \r\n let id = origCreateFilterInputElementId();\r\n if (!id) {\r\n id =`${containerClass}-generated-input-${((selectElement.id)?selectElement.id:selectElement.name).toLowerCase()}-id`;\r\n }\r\n return id;\r\n }\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 let isDisposablePicksElementFlag = false;\r\n if (!picksElement) {\r\n picksElement = createElementAspect.createElement('UL');\r\n isDisposablePicksElementFlag = true; \r\n }\r\n\r\n staticDom.containerElement = containerElement;\r\n staticDom.isDisposablePicksElementFlag = isDisposablePicksElementFlag;\r\n staticDom.picksElement = picksElement;\r\n staticDom.selectElement = selectElement;\r\n\r\n return {\r\n staticManager:{\r\n appendToContainer(){ \r\n let {choicesDom, filterDom, picksDom, isDisposablePicksElementFlag} = staticDom;\r\n picksDom.pickFilterElement.appendChild(filterDom.filterInputElement);\r\n picksDom.picksElement.appendChild(picksDom.pickFilterElement); \r\n if (isDisposableContainerElementFlag){\r\n selectElement.parentNode.insertBefore(containerElement, selectElement.nextSibling) \r\n containerElement.appendChild(choicesDom.choicesElement)\r\n } else {\r\n selectElement.parentNode.insertBefore(choicesDom.choicesElement, selectElement.nextSibling)\r\n }\r\n if (isDisposablePicksElementFlag)\r\n containerElement.appendChild(picksDom.picksElement)\r\n },\r\n dispose(){ \r\n let {choicesDom, filterDom, picksDom, isDisposablePicksElementFlag} = staticDom;\r\n choicesDom.choicesElement.parentNode.removeChild(choicesDom.choicesElement);\r\n if (isDisposableContainerElementFlag)\r\n selectElement.parentNode.removeChild(containerElement) \r\n if (isDisposablePicksElementFlag)\r\n containerElement.removeChild(picksDom.picksElement)\r\n picksDom.dispose();\r\n filterDom.dispose(); \r\n }\r\n }\r\n }\r\n }\r\n },\r\n layout: ()=>{\r\n var {loadAspect, environment} = aspects;\r\n var document = environment.window.document;\r\n\r\n var origLoadAspectLoop = loadAspect.loop;\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 // NOTE: 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\n }\r\n}","import {composeSync} from '../ToolsJs';\r\nimport {toggleStyling} from '../ToolsStyling';\r\n\r\nexport function SelectedOptionPlugin(){\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(configuration){ \r\n let isChoiceSelectableAspect = IsChoiceSelectableAspect();\r\n return (aspects) => {\r\n aspects.isChoiceSelectableAspect=isChoiceSelectableAspect;\r\n let {getSelected : getIsOptionSelected, setSelected : setIsOptionSelected, options} = configuration;\r\n if (options) {\r\n if (!setIsOptionSelected){\r\n setIsOptionSelected = (option, value) => {option.selected = value};\r\n }\r\n if (!getIsOptionSelected)\r\n getIsOptionSelected = (option) => option.selected; \r\n } else { // selectElement\r\n if (!getIsOptionSelected){\r\n getIsOptionSelected = (option) => option.selected;\r\n }\r\n if (!setIsOptionSelected){\r\n setIsOptionSelected = (option, value) => {option.selected = value};\r\n // NOTE: adding this (setAttribute) break Chrome's html form reset functionality:\r\n // if (value) option.setAttribute('selected','');\r\n // else option.removeAttribute('selected');\r\n }\r\n }\r\n \r\n var getSelectedAspect = {getSelected: getIsOptionSelected};\r\n var setSelectedAspect = {setSelected: setIsOptionSelected};\r\n aspects.getSelectedAspect=getSelectedAspect;\r\n aspects.setSelectedAspect=setSelectedAspect;\r\n\r\n return {\r\n plugStaticDom: ()=> {\r\n // TODO: move to createEventHandlers\r\n let {wrapsCollection} = aspects;\r\n aspects.updateOptionsSelectedAspect = UpdateOptionsSelectedAspect(wrapsCollection, getSelectedAspect);\r\n },\r\n layout: () => {\r\n let {wrapsCollection, updateOptionsSelectedAspect,\r\n createWrapAspect, produceChoiceAspect,\r\n resetLayoutAspect, picksList,\r\n producePickAspect, \r\n onChangeAspect, filterPredicateAspect\r\n } = aspects;\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 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 = setSelectedAspect.setSelected(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 ExtendProduceChoiceAspectProduceChoice(produceChoiceAspect, onChangeAspect, trySetWrapSelected, composeUpdateSelected, producePickAspect, picksList);\r\n \r\n let origCreateWrap = createWrapAspect.createWrap;\r\n createWrapAspect.createWrap = (option)=>{\r\n let wrap = origCreateWrap(option);\r\n wrap.isOptionSelected = getSelectedAspect.getSelected(option);\r\n wrap.updateSelected = null; // can it be combined ?\r\n return wrap;\r\n }\r\n \r\n \r\n ExtendProducePickAspect(producePickAspect, trySetWrapSelected, composeUpdateSelected);\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), getSelectedAspect)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction ExtendProduceChoiceAspectProduceChoice(produceChoiceAspect, onChangeAspect, trySetWrapSelected, composeUpdateSelected, producePickAspect, picksList){\r\n let orig = produceChoiceAspect.produceChoice;\r\n produceChoiceAspect.produceChoice = (wrap) => {\r\n let val = orig(wrap);\r\n wrap.choice.choiceDomManagerHandlers.updateSelected();\r\n\r\n wrap.choice.tryToggleChoice = ()=>\r\n trySetWrapSelected(wrap.option, composeUpdateSelected(wrap, !wrap.isOptionSelected), !wrap.isOptionSelected) \r\n\r\n wrap.choice.fullMatch = () => trySetWrapSelected(wrap.option, composeUpdateSelected(wrap, true), true);\r\n\r\n wrap.choice.choiсeClick = (event) =>{ let wasToggled = wrap.choice.tryToggleChoice();} // TODO: add fail message?\r\n\r\n wrap.updateSelected = () => {\r\n wrap.choice.choiceDomManagerHandlers.updateSelected();\r\n onChangeAspect.onChange();\r\n }\r\n\r\n // addPickForChoice used only in load loop; updateSelected on toggle\r\n wrap.choice.addPickForChoice = () => {\r\n\r\n var pickHandlers = { \r\n producePick: null, // not redefined directly, but redefined in addPickAspect\r\n removeAndDispose: null, // not redefined, used in MultiSelectInlineLayout injected into wrap.choice.choiceRemove \r\n }\r\n \r\n pickHandlers.producePick = () => {\r\n let pick = producePickAspect.producePick(wrap);\r\n let {remove} = picksList.add(pick);\r\n pick.dispose = composeSync(remove, pick.dispose);\r\n pickHandlers.removeAndDispose = () => pick.dispose();\r\n return pick;\r\n }\r\n\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 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 return pickHandlers; //removeAndDispose\r\n }\r\n\r\n wrap.dispose = composeSync( ()=>{\r\n wrap.updateSelected = null;\r\n wrap.choice.choiсeClick = null;\r\n wrap.choice.tryToggleChoice = null;\r\n wrap.choice.fullMatch = null;\r\n wrap.choice.addPickForChoice = null;\r\n }, wrap.dispose)\r\n return val;\r\n }\r\n}\r\n\r\nfunction ExtendProducePickAspect(producePickAspect, trySetWrapSelected, composeUpdateSelected){\r\n let orig = producePickAspect.producePick;\r\n producePickAspect.producePick = function(wrap, pickHandlers){\r\n let pick = orig(wrap, pickHandlers);\r\n pick.setSelectedFalse = () => trySetWrapSelected(wrap.option, composeUpdateSelected(wrap, false), false);\r\n pick.dispose = composeSync(\r\n pick.dispose, ()=> {pick.setSelectedFalse = null}\r\n );\r\n return pick;\r\n }\r\n}\r\n\r\nfunction ExtendChoiceDomFactory(choiceDomFactory, css, createElementAspect, dataWrap){\r\n\r\n var updateDataInternal = function(wrap, element){\r\n element.textContent = dataWrap.getText(wrap.option);\r\n }\r\n\r\n let orig = choiceDomFactory.create;\r\n choiceDomFactory.create = function(choiceElement, wrap){\r\n orig(choiceElement, wrap);\r\n choiceHoverToggle = toggleStyling(choiceElement, () =>\r\n (wrap.isOptionDisabled===true && css.choice_disabled_hover && wrap.isOptionSelected===false)?\r\n css.choice_disabled_hover:css.choice_hover\r\n );\r\n\r\n createElementAspect.createElementFromHtml(choiceElement, '
');\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.choiceContentElement = choiceContentElement;\r\n choiceDom.choiceCheckBoxElement = choiceCheckBoxElement;\r\n choiceDom.choiceLabelElement = choiceLabelElement;\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 choiceDomManagerHandlers.updateData = ()=>updateDataInternal(wrap, choiceLabelElement);\r\n choiceDomManagerHandlers.updateHoverIn = updateHoverIn;\r\n choiceDomManagerHandlers.updateSelected = updateSelected;\r\n choiceDomManagerHandlers.updateDisabled = updateDisabled;\r\n composeSync(choice.dispose, ()=>{ \r\n choiceDomManagerHandlers.updateData = null;\r\n choiceDomManagerHandlers.updateHoverIn = null;\r\n choiceDomManagerHandlers.updateSelected = null;\r\n choiceDomManagerHandlers.updateDisabled = null;\r\n choiceDom.choiceContentElement = null;\r\n choiceDom.choiceCheckBoxElement = null;\r\n choiceDom.choiceLabelElement = null;\r\n });\r\n\r\n choiceDomManagerHandlers.updateData();\r\n\r\n let updateHoverIn = function(){\r\n choiceHoverToggle(wrap.choice.isHoverIn);\r\n }\r\n choiceDomManagerHandlers.updateHoverIn=updateHoverIn;\r\n\r\n let eventBinder = EventBinder();\r\n eventBinder.bind(choiceElement, \"click\", event=>choice.choiсeClick(event) );\r\n\r\n composeSync(choice.dispose, ()=>{ eventBinder.unbind(); });\r\n }\r\n}\r\n\r\n\r\nfunction UpdateOptionsSelectedAspect(wrapsCollection, getSelectedAspect){\r\n return {\r\n updateOptionsSelected(){\r\n wrapsCollection.forLoop( wrap => updateChoiceSelected(wrap, getSelectedAspect));\r\n }\r\n }\r\n}\r\n\r\nfunction updateChoiceSelected(wrap, getSelectedAspect){\r\n let newIsSelected = getSelectedAspect.getSelected(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}\r\n\r\nexport function IsChoiceSelectableAspect(){ // TODO rename to IsSelectableByUserAspect ?\r\n return {\r\n isSelectable: (wrap)=>true \r\n }\r\n}\r\n","import {composeSync} from '../ToolsJs';\r\nimport {toggleStyling} from '../ToolsStyling';\r\n\r\nexport function DisabledOptionCssPatchPlugin(defaults){\r\n defaults.cssPatch.pickContent_disabled = {opacity: '.65'};\r\n}\r\n\r\nexport function DisabledOptionPlugin(defaults){\r\n defaults.css.pickContent_disabled = 'disabled';\r\n return {\r\n plug \r\n }\r\n}\r\n\r\nexport function plug(configuration){\r\n return (aspects) => {\r\n return {\r\n layout: () => {\r\n let {isChoiceSelectableAspect, createWrapAspect, produceChoiceAspect,\r\n filterPredicateAspect, wrapsCollection, producePickAspect, pickDomFactory } = aspects;\r\n \r\n let {getIsOptionDisabled, options, css} = 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 \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 ExtendProduceChoiceAspectProduceChoice(produceChoiceAspect);\r\n \r\n ExtendProducePickAspectProducePick(producePickAspect);\r\n \r\n ExtendPickDomFactoryCreate(pickDomFactory, css);\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\n }\r\n}\r\n\r\nfunction ExtendProduceChoiceAspectProduceChoice(produceChoiceAspect){\r\n let orig = produceChoiceAspect.produceChoice;\r\n produceChoiceAspect.produceChoice = (wrap) => {\r\n let val = orig(wrap);\r\n wrap.choice.choiceDomManagerHandlers.updateDisabled();\r\n wrap.updateDisabled = wrap.choice.choiceDomManagerHandlers.updateDisabled\r\n wrap.choice.dispose = composeSync(()=>{wrap.updateDisabled=null;}, wrap.choice.dispose);\r\n\r\n let origToggle = wrap.choice.tryToggleChoice;\r\n wrap.choice.tryToggleChoice = () => {\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 return val;\r\n }\r\n}\r\n\r\nfunction ExtendProducePickAspectProducePick(producePickAspect){\r\n let orig = producePickAspect.producePick;\r\n producePickAspect.producePick = (wrap) => {\r\n let val = orig(wrap);\r\n let pick = wrap.pick;\r\n let choiceUpdateDisabledBackup = wrap.updateDisabled; // backup disable only choice\r\n wrap.updateDisabled = composeSync(choiceUpdateDisabledBackup, () => pick.pickDomManagerHandlers.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 val;\r\n }\r\n}\r\n\r\nfunction ExtendPickDomFactoryCreate(pickDomFactory, css){\r\n let orig = pickDomFactory.create;\r\n pickDomFactory.create = (pick) => {\r\n orig(pick);\r\n let {pickDom, pickDomManagerHandlers} = pick;\r\n let disableToggle = toggleStyling(pickDom.pickContentElement, css.pickContent_disabled);\r\n pickDomManagerHandlers.updateDisabled = ()=>{\r\n disableToggle(pick.wrap.isOptionDisabled);\r\n }\r\n pickDomManagerHandlers.updateDisabled();\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(){\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(){\r\n return (aspects) => {\r\n return {\r\n buildApi(api){\r\n let {picksList, createWrapAspect} = aspects;\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 \r\n let pickHandlers = wrap.choice.addPickForChoice();\r\n }\r\n }\r\n }\r\n }\r\n}","import {composeSync} from '../ToolsJs';\r\n\r\nexport function PicksPlugin(){\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(configuration){\r\n return (aspects) => {\r\n return {\r\n plugStaticDom: ()=> {\r\n let {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 },\r\n layout: () => {\r\n let {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\n }\r\n}","import {composeSync} from '../ToolsJs';\r\n\r\nexport function CreatePopperPlugin(){\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(){ \r\n var popperRtlAspect = PopperRtlAspect();\r\n return (aspects) => {\r\n aspects.popperRtlAspect = popperRtlAspect;\r\n\r\n let {environment} = aspects;\r\n\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 var createPopperConfigurationAspect = CreatePopperConfigurationAspect(createModifiersVX);\r\n var createPopperAspect = CreatePopperAspect(createPopperVX, popperRtlAspect, createPopperConfigurationAspect); \r\n aspects.createPopperAspect = createPopperAspect;\r\n\r\n return {\r\n append(){\r\n let {filterDom, choicesDom, disposeAspect, staticManager, choicesVisibilityAspect, specialPicksEventsAspect} = aspects;\r\n \r\n let filterInputElement = filterDom.filterInputElement;\r\n let choicesElement = choicesDom.choicesElement;\r\n \r\n let pop = createPopperAspect.createPopper(choicesElement, filterInputElement, true);\r\n \r\n staticManager.appendToContainer = composeSync(staticManager.appendToContainer, pop.init);\r\n \r\n var origBackSpace = specialPicksEventsAspect.backSpace;\r\n specialPicksEventsAspect.backSpace = (pick) => {origBackSpace(pick); pop.update();};\r\n \r\n disposeAspect.dispose = composeSync(disposeAspect.dispose, pop.dispose);\r\n \r\n choicesVisibilityAspect.updatePopupLocation = composeSync(\r\n choicesVisibilityAspect.updatePopupLocation, \r\n function(){pop.update();}\r\n );\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction PopperRtlAspect(){\r\n return {\r\n getIsRtl(){\r\n return false;\r\n }\r\n }\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, popperRtlAspect, createPopperConfigurationAspect){\r\n return {\r\n createPopper(element, anchorElement, preventOverflow){\r\n let popper = null;\r\n return {\r\n init(){\r\n var isRtl = popperRtlAspect.getIsRtl();\r\n var popperConfiguration = createPopperConfigurationAspect.createConfiguration(preventOverflow, isRtl);\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 dispose(){\r\n popper.destroy();\r\n }\r\n }\r\n }\r\n } \r\n}\r\n\r\nfunction CreatePopperConfigurationAspect(createModifiersVX){\r\n return {\r\n createConfiguration(preventOverflow, isRtl){\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\r\n if (isRtl){\r\n popperConfiguration.placement = 'bottom-end';\r\n }\r\n return popperConfiguration;\r\n }\r\n } \r\n}","// aka auto height and scrolling\r\nexport function ChoicesDynamicStylingPlugin(defaults, environment){\r\n preset(defaults)\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function preset(o){\r\n o.useChoicesDynamicStyling = false;\r\n o.choicesDynamicStyling = (aspects)=>choicesDynamicStyling(aspects, window);\r\n o.minimalChoicesDynamicStylingMaxHeight = 20;\r\n}\r\n\r\nexport function plug(configuration){ \r\n let {choicesDynamicStyling, useChoicesDynamicStyling} = configuration;\r\n return (aspects) => {\r\n return {\r\n layout: () => {\r\n \r\n if (useChoicesDynamicStyling) {\r\n let {choicesVisibilityAspect, specialPicksEventsAspect} = aspects;\r\n var origSetChoicesVisible = choicesVisibilityAspect.setChoicesVisible;\r\n 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\n }\r\n}\r\n\r\nfunction choicesDynamicStyling(aspects, window){\r\n let {choicesDom, navigateAspect, configuration} = aspects;\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.choiceDom.choiceElement!=null)\r\n wrap.choice.choiceDom.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","export function HighlightPlugin(defaults){\r\n defaults.useHighlighting = false;\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nfunction ExtendChoiceDomFactory(choiceDomFactory, dataWrap){\r\n var origChoiceDomFactoryCreate = choiceDomFactory.create;\r\n choiceDomFactory.create = (choice) => {\r\n origChoiceDomFactoryCreate(choice);\r\n let choiceElement = choice.choiceDom.choiceElement;\r\n choice.choiceDomManagerHandlers.updateHighlighted = () => {\r\n var text = dataWrap.getText(choice.wrap.option);\r\n var highlighter = aspects.highlightAspect.getHighlighter();\r\n if (highlighter)\r\n highlighter(choiceElement, choice.choiceDom, text); \r\n else\r\n choiceElement.textContent = text;\r\n };\r\n }\r\n}\r\n\r\nexport function plug(configuration){\r\n return (aspects) => {\r\n if (configuration.useHighlighting)\r\n aspects.highlightAspect = HighlightAspect();\r\n return {\r\n plugStaticDom(){\r\n var {choiceDomFactory, dataWrap} = aspects;\r\n ExtendChoiceDomFactory(choiceDomFactory, dataWrap);\r\n },\r\n layout(){\r\n let {highlightAspect, filterManagerAspect, produceChoiceAspect} = 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 origProduceChoice = produceChoiceAspect.produceChoice;\r\n produceChoiceAspect.produceChoice = function(wrap){\r\n origProduceChoice(wrap);\r\n let origSetVisible = wrap.choice.choiceDomManagerHandlers.setVisible;\r\n wrap.choice.choiceDomManagerHandlers.setVisible = function(v){\r\n origSetVisible(v);\r\n wrap.choice.choiceDomManagerHandlers.updateHighlighted();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\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(defaults){\r\n defaults.customChoiceStylings = null;\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(configuration){\r\n return (aspects) => {\r\n return {\r\n plugStaticDom: ()=> {\r\n let {choiceDomFactory} = aspects;\r\n let customChoiceStylings = configuration.customChoiceStylings;\r\n if (customChoiceStylings) {\r\n\r\n let customChoiceStylingsAspect = CustomChoiceStylingsAspect(customChoiceStylings);\r\n ExtendChoiceDomFactory(choiceDomFactory, customChoiceStylingsAspect);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction ExtendChoiceDomFactory(choiceDomFactory, customChoiceStylingsAspect){\r\n let origChoiceDomFactoryCreate = choiceDomFactory.create;\r\n choiceDomFactory.create = function(choice){\r\n origChoiceDomFactoryCreate(choice);\r\n customChoiceStylingsAspect.customize(choice.wrap, choice.choiceDom, choice.choiceDomManagerHandlers);\r\n }\r\n}\r\n\r\nfunction CustomChoiceStylingsAspect(customChoiceStylings){\r\n return {\r\n customize(choice){\r\n var handlers = customChoiceStylings(choice.choiceDom, choice.wrap.option);\r\n\r\n if (handlers){\r\n function customChoiceStylingsClosure(custom){\r\n return function() {\r\n custom({\r\n isOptionSelected: choice.wrap.isOptionSelected,\r\n isOptionDisabled: choice.wrap.isOptionDisabled,\r\n isHoverIn: choice.isHoverIn,\r\n //isHighlighted: wrap.choice.isHighlighted // TODO isHighlighted should be developed\r\n });\r\n }\r\n }\r\n let choiceDomManagerHandlers = choice.choiceDomManagerHandlers;\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}","import { composeSync } from \"../ToolsJs\";\r\n\r\nexport function CustomPickStylingsPlugin(defaults){\r\n defaults.customPickStylings = null;\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(configuration){\r\n return (aspects) => {\r\n return {\r\n plugStaticDom: ()=> {\r\n let {disabledComponentAspect, pickDomFactory} = aspects;\r\n let customPickStylings = configuration.customPickStylings;\r\n let customPickStylingsAspect = CustomPickStylingsAspect(disabledComponentAspect, customPickStylings);\r\n ExtendPickDomFactory(pickDomFactory, customPickStylingsAspect);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction ExtendPickDomFactory(pickDomFactory, customPickStylingsAspect){\r\n let origCreatePickDomFactory = pickDomFactory.create;\r\n pickDomFactory.create = function(pick){\r\n origCreatePickDomFactory(pick);\r\n customPickStylingsAspect.customize(pick);\r\n }\r\n}\r\n\r\nfunction CustomPickStylingsAspect(disabledComponentAspect, customPickStylings){\r\n return {\r\n customize(pick){\r\n if (customPickStylings){\r\n var handlers = customPickStylings(pick.pickDom, pick.wrap.option);\r\n\r\n if (handlers){\r\n function customPickStylingsClosure(custom){\r\n return function() {\r\n custom({\r\n isOptionDisabled: pick.wrap.isOptionDisabled,\r\n // wrap.component.getDisabled();\r\n // wrap.group.getDisabled();\r\n isComponentDisabled: disabledComponentAspect.getDisabled()\r\n });\r\n }\r\n }\r\n let pickDomManagerHandlers = pick.pickDomManagerHandlers;\r\n // TODO: automate it\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}","import {composeSync} from '../ToolsJs';\r\n\r\nexport function UpdateAppearancePlugin(){\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(){\r\n var updateAppearanceAspect = UpdateAppearanceAspect();\r\n return (aspects) => {\r\n aspects.updateAppearanceAspect = updateAppearanceAspect;\r\n return {\r\n layout: () => {\r\n var {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\n }\r\n }\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(defaults){\r\n preset(defaults)\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function preset(defaults){\r\n defaults.getDisabled = () => null;\r\n}\r\n\r\nexport function plug(configuration){ \r\n let disabledComponentAspect = DisabledComponentAspect(configuration.getDisabled);\r\n return (aspects) => {\r\n aspects.disabledComponentAspect=disabledComponentAspect;\r\n return {\r\n plugStaticDom: () => {\r\n var {pickDomFactory} = aspects;\r\n ExtendPickDomFactory(pickDomFactory, disabledComponentAspect);\r\n },\r\n layout: () => {\r\n var {updateAppearanceAspect, picksList, picksDom, picksElementAspect} = aspects;\r\n\r\n var disableComponent = (isComponentDisabled)=>{\r\n picksList.forEach(pick=>pick.pickDomManagerHandlers.updateComponentDisabled())\r\n picksDom.disable(isComponentDisabled);\r\n }\r\n\r\n var origOnClick = picksElementAspect.onClick;\r\n picksElementAspect.onClick = (handler)=>{\r\n disableComponent = (isComponentDisabled)=>{\r\n picksList.forEach(pick=>pick.pickDomManagerHandlers.updateComponentDisabled())\r\n picksDom.disable(isComponentDisabled);\r\n if (isComponentDisabled)\r\n picksElementAspect.onClickUnbind(); //componentDisabledEventBinder.unbind();\r\n else\r\n origOnClick(handler); //componentDisabledEventBinder.bind(picksElement, \"click\", handler); \r\n }\r\n } \r\n \r\n let isComponentDisabled; // state! \r\n function updateDisabled(){\r\n let newIsComponentDisabled = disabledComponentAspect.getDisabled()??false;\r\n if (isComponentDisabled!==newIsComponentDisabled){\r\n isComponentDisabled=newIsComponentDisabled;\r\n 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\n }\r\n}\r\n\r\nexport function DisabledComponentAspect(getDisabled) {\r\n return {\r\n getDisabled\r\n }\r\n}\r\n\r\nfunction ExtendPickDomFactory(pickDomFactory, disabledComponentAspect){\r\n var origCreatePickDomFactory = pickDomFactory.create;\r\n pickDomFactory.create = (pick) => {\r\n origCreatePickDomFactory(pick);\r\n let pickDomManagerHandlers = pick.pickDomManagerHandlers;\r\n pickDomManagerHandlers.updateComponentDisabled = () => {\r\n if (pickDomManagerHandlers.disableButton)\r\n pickDomManagerHandlers.disableButton(disabledComponentAspect.getDisabled()??false)\r\n };\r\n pickDomManagerHandlers.updateComponentDisabled();\r\n }\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(){\r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(configuration){\r\n return (aspects) => {\r\n return {\r\n layout: () => {\r\n let {staticManager, picksList, picksDom, filterDom, updateDataAspect,\r\n resetFilterListAspect, filterManagerAspect, environment, staticDom} = 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 var origOnInput = filterDom.onInput;\r\n filterDom.onInput = (handler) => {\r\n origOnInput(\r\n ()=>{if (placeholderStopInputAspect.get()){\r\n placeholderStopInputAspect.reset();\r\n } else {\r\n handler();\r\n }\r\n });\r\n }\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}\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 PlaceholderCssPatchPlugin(defaults){\r\n defaults.cssPatch.filterInput_empty = 'form-control'\r\n}","import {composeSync} from '../ToolsJs';\r\nimport {toggleStyling} from '../ToolsStyling';\r\n\r\nexport function FloatingLabelPlugin(defaults){\r\n defaults.css.label_floating_lifted = 'floating-lifted';\r\n defaults.css.picks_floating_lifted = 'floating-lifted'; \r\n return {\r\n plug\r\n }\r\n}\r\n\r\nexport function plug(configuration){ \r\n return (aspects) => {\r\n return {\r\n plugStaticDom: ()=> {\r\n aspects.floatingLabelAspect = FloatingLabelAspect();\r\n },\r\n layout: () => {\r\n let {picksList, picksDom, filterDom, \r\n updateDataAspect, resetFilterListAspect, floatingLabelAspect, getLabelAspect} = aspects;\r\n let {css} = configuration;\r\n \r\n if (floatingLabelAspect.isFloatingLabel() ){\r\n let labelElement = getLabelAspect.getLabel(); \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\n }\r\n}\r\n\r\nfunction FloatingLabelAspect() {\r\n return {\r\n isFloatingLabel(){},\r\n }\r\n}","export function WarningCssPatchPlugin(defaults){\r\n defaults.cssPatch.warning = {paddingLeft: '.25rem', paddingRight: '.25rem', zIndex: 4, fontSize:'small', backgroundColor: 'var(--bs-warning)'}\r\n}","import {addStyling} from \"../ToolsStyling\";\r\nimport {composeSync} from '../ToolsJs';\r\n\r\nconst defNoResultsWarningMessage = 'No results found';\r\n\r\nexport function preset(o){o.noResultsWarning=defNoResultsWarningMessage; o.isNoResultsWarningEnabled=false;}\r\n\r\nexport function plug(configuration){\r\n return (aspects) => {\r\n return {\r\n layout: () => {\r\n let {choicesDom, staticManager, afterInputAspect, filterManagerAspect, resetLayoutAspect, staticDom} = aspects;\r\n let {createElementAspect} = staticDom;\r\n let {css, noResultsWarning} = configuration;\r\n\r\n if (configuration.isNoResultsWarningEnabled){\r\n let warningAspect = WarningAspect(choicesDom, createElementAspect, staticManager, css);\r\n aspects.warningAspect = warningAspect;\r\n \r\n ExtendAfterInputAspect(afterInputAspect, warningAspect, filterManagerAspect, noResultsWarning);\r\n \r\n resetLayoutAspect.resetLayout = composeSync(() => warningAspect.hide(), resetLayoutAspect.resetLayout);\r\n }\r\n },\r\n append: ()=> {\r\n let {createPopperAspect, filterDom, warningAspect, staticManager, disposeAspect} = aspects;\r\n if (warningAspect){\r\n let filterInputElement = filterDom.filterInputElement;\r\n\r\n let pop2 = createPopperAspect.createPopper(warningAspect.warningElement, filterInputElement, false);\r\n staticManager.appendToContainer = composeSync(staticManager.appendToContainer, pop2.init);\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 disposeAspect.dispose = composeSync(disposeAspect.dispose, pop2.dispose); \r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction ExtendAfterInputAspect(afterInputAspect, warningAspect, filterManagerAspect, noResultsWarning){\r\n var origVisible = afterInputAspect.visible;\r\n afterInputAspect.visible = (showChoices, visibleCount) => {\r\n warningAspect.hide(); \r\n origVisible(showChoices, visibleCount)\r\n }\r\n\r\n var origNotVisible = afterInputAspect.notVisible;\r\n afterInputAspect.notVisible = (hideChoices) => {\r\n origNotVisible(hideChoices);\r\n \r\n if (filterManagerAspect.getFilter())\r\n warningAspect.show(noResultsWarning); \r\n else\r\n warningAspect.hide();\r\n }\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 staticManager.appendToContainer = composeSync(staticManager.appendToContainer, ()=>\r\n choicesElement.parentNode.insertBefore(warningElement, choicesElement.nextSibling));\r\n\r\n warningElement.style.display = 'none';\r\n addStyling(warningElement, css.warning);\r\n\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}","import {EventBinder} from '../ToolsDom';\r\nimport {addStyling} from '../ToolsStyling';\r\nimport {composeSync} from '../ToolsJs';\r\n\r\nexport function PickButtonPlugCssPatchBs4(defaults){\r\n // increase font and limit the line\r\n defaults.cssPatch.pickButton = {float : \"none\", verticalAlign: \"text-top\", fontSize:'1.8em', lineHeight: '0.5em', fontWeight:'400' }; \r\n\r\n}\r\n\r\nexport function PickButtonPlugCssPatchBs5(defaults){\r\n defaults.cssPatch.pickButton = {float : \"none\", verticalAlign: \"text-top\", fontSize:'0.8em'};\r\n}\r\n\r\nexport function PickButtonBs4Plugin(defaults){\r\n defaults.pickButtonHTML = '';\r\n defaults.css.pickButton = 'close';\r\n return PickButtonPlugin()\r\n}\r\n\r\nexport function PickButtonBs5Plugin(defaults){\r\n defaults.pickButtonHTML = ''; \r\n defaults.css.pickButton = 'btn-close';\r\n return PickButtonPlugin()\r\n}\r\n\r\nexport function PickButtonPlugin(){\r\n return {plug}\r\n}\r\n\r\nexport function plug(configuration){\r\n return (aspects) => {\r\n return {\r\n plugStaticDom: () => {\r\n var {pickDomFactory, staticDom} = aspects;\r\n ExtendPickDomFactory(pickDomFactory, staticDom.createElementAspect, configuration.pickButtonHTML, configuration.css);\r\n },\r\n layout: ()=>{\r\n var {producePickAspect} = aspects;\r\n ExtendProducePickAspect(producePickAspect);\r\n \r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction ExtendProducePickAspect(producePickAspect){\r\n let origProducePickPickAspect = producePickAspect.producePick;\r\n producePickAspect.producePick = (wrap)=>{\r\n let pick = origProducePickPickAspect(wrap)\r\n pick.removeOnButton = (event) => {\r\n pick.setSelectedFalse();\r\n }\r\n pick.dispose = composeSync(\r\n pick.dispose,\r\n ()=>{pick.removeOnButton=null}\r\n );\r\n return pick;\r\n }\r\n}\r\n\r\nfunction ExtendPickDomFactory(pickDomFactory, createElementAspect, pickButtonHTML, css){\r\n var origCreatePickDomFactory = pickDomFactory.create;\r\n pickDomFactory.create = (pick) => {\r\n \r\n origCreatePickDomFactory(pick);\r\n let {pickDom,pickDomManagerHandlers} = pick;\r\n createElementAspect.createElementFromHtmlPutAfter(pickDom.pickContentElement, pickButtonHTML);\r\n let pickButtonElement = pickDom.pickElement.querySelector('BUTTON');\r\n pickDom.pickButtonElement=pickButtonElement;\r\n pickDomManagerHandlers.disableButton = (val)=> {\r\n pickButtonElement.disabled = val;\r\n }\r\n\r\n let eventBinder = EventBinder();\r\n eventBinder.bind(pickButtonElement, \"click\", (event)=>pick.removeOnButton(event));\r\n \r\n addStyling(pickButtonElement, css.pickButton);\r\n \r\n pick.dispose = composeSync(\r\n pick.dispose,\r\n ()=>{\r\n eventBinder.unbind();\r\n pickDom.pickButtonElement=null;\r\n pickDomManagerHandlers.disableButton = null;\r\n }\r\n )\r\n }\r\n}","import {\r\n BsAppearanceBs4Plugin, BsAppearanceBs5Plugin, \r\n \r\n CssPatchBs4Plugin, CssPatchBs5Plugin,\r\n BsAppearanceBs4CssPatchPlugin, BsAppearanceBs5CssPatchPlugin,\r\n \r\n SelectElementPlugin, \r\n LabelForAttributePlugin, ValidationApiPlugin, \r\n UpdateAppearancePlugin, \r\n \r\n DisableComponentPlugin,\r\n FormResetPlugin, CreatePopperPlugin, RtlPlugin, PlaceholderPlugin, PlaceholderCssPatchPlugin, \r\n OptionsApiPlugin, \r\n JQueryMethodsPlugin, \r\n SelectedOptionPlugin, FormRestoreOnBackwardPlugin, \r\n DisabledOptionPlugin, DisabledOptionCssPatchPlugin,\r\n PicksApiPlugin, HighlightPlugin,\r\n ChoicesDynamicStylingPlugin, CustomPickStylingsPlugin, CustomChoiceStylingsPlugin,\r\n \r\n FloatingLabelPlugin, FloatingLabelCssPatchBs5Plugin, \r\n \r\n WarningCssPatchPlugin, WarningBs4Plugin, WarningBs5Plugin,\r\n\r\n PicksPlugin,\r\n PickButtonBs4Plugin, PickButtonBs5Plugin, PickButtonPlugCssPatchBs4, PickButtonPlugCssPatchBs5,\r\n HiddenOptionPlugin,\r\n /*HiddenOptionAltPlugin as HiddenOptionPlugin*/} from './plugins/index'\r\n\r\nimport {shallowClearClone} from './ToolsJs'\r\n\r\n\r\nexport let Bs4PluginSet = {BsAppearanceBs4Plugin, PickButtonBs4Plugin, WarningBs4Plugin, CssPatchBs4Plugin, BsAppearanceBs4CssPatchPlugin, PickButtonPlugCssPatchBs4}\r\n\r\nexport let Bs5PluginSet = {BsAppearanceBs5Plugin, PickButtonBs5Plugin, WarningBs5Plugin, CssPatchBs5Plugin, BsAppearanceBs5CssPatchPlugin, PickButtonPlugCssPatchBs5, FloatingLabelCssPatchBs5Plugin}\r\n\r\nexport let multiSelectPlugins = {SelectElementPlugin, \r\n LabelForAttributePlugin, HiddenOptionPlugin, ValidationApiPlugin, \r\n UpdateAppearancePlugin, \r\n DisableComponentPlugin,\r\n FormResetPlugin, CreatePopperPlugin, WarningCssPatchPlugin, RtlPlugin, PlaceholderPlugin, PlaceholderCssPatchPlugin, FloatingLabelPlugin, OptionsApiPlugin, \r\n JQueryMethodsPlugin, \r\n SelectedOptionPlugin, FormRestoreOnBackwardPlugin, \r\n DisabledOptionPlugin, DisabledOptionCssPatchPlugin, PicksApiPlugin, HighlightPlugin,\r\n ChoicesDynamicStylingPlugin, CustomPickStylingsPlugin, CustomChoiceStylingsPlugin};\r\n\r\nexport let picksPlugins = {PicksPlugin, \r\n LabelForAttributePlugin, ValidationApiPlugin, \r\n UpdateAppearancePlugin, \r\n DisableComponentPlugin, \r\n CreatePopperPlugin, WarningCssPatchPlugin, RtlPlugin, PlaceholderPlugin, PlaceholderCssPatchPlugin, FloatingLabelPlugin, OptionsApiPlugin, \r\n JQueryMethodsPlugin, PicksApiPlugin, HighlightPlugin,\r\n ChoicesDynamicStylingPlugin, CustomPickStylingsPlugin, CustomChoiceStylingsPlugin};\r\n\r\nexport let allPlugins = shallowClearClone(multiSelectPlugins, {PicksPlugin});\r\n\r\n\r\n\r\n\r\n// var defaultConfig = {\r\n// plugins: multiSelectPlugins\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 {plug as plug2, preset as preset2} from './WarningPlugin';\r\n\r\nexport function WarningBs5Plugin(defaults){\r\n preset(defaults);\r\n return {plug:plug2};\r\n}\r\n\r\nexport function preset(defaults){\r\n defaults.css.warning = 'alert-warning';\r\n preset2(defaults);\r\n}\r\n","import {CssPatchPlugin} from './CssPatchPlugin';\r\n\r\nimport {PicksDomFactoryPlugCssPatchBs5} from '../PicksDomFactory' // TODO move specific styles to button plugin\r\nimport {ChoiceDomFactoryPlugCssPatch} from '../ChoiceDomFactory'\r\nimport {ChoicesDomFactoryPlugCssPatch} from '../ChoicesDomFactory'\r\nimport {FilterDomFactoryPlugCssPatch} from '../FilterDomFactory'\r\n\r\nexport function CssPatchBs5Plugin(defaults){\r\n var cssPatch = {};\r\n \r\n PicksDomFactoryPlugCssPatchBs5(cssPatch);\r\n ChoiceDomFactoryPlugCssPatch(cssPatch);\r\n ChoicesDomFactoryPlugCssPatch(cssPatch);\r\n FilterDomFactoryPlugCssPatch(cssPatch);\r\n\r\n defaults.cssPatch = cssPatch;\r\n return CssPatchPlugin(defaults)\r\n}","export function BsAppearanceBs5CssPatchPlugin(defaults){\r\n let cssPatch = defaults.cssPatch;\r\n cssPatch.picks_def = {minHeight: 'calc(2.25rem + 2px)'};\r\n cssPatch.picks_lg = {minHeight: 'calc(2.875rem + 2px)'};\r\n cssPatch.picks_sm = {minHeight: 'calc(1.8125rem + 2px)'};\r\n cssPatch.picks_floating_def = {minHeight: 'calc(3.5rem + 2px)'};\r\n\r\n cssPatch.picks_focus_valid = {borderColor: '', boxShadow: '0 0 0 0.2rem rgba(40, 167, 69, 0.25)'};\r\n cssPatch.picks_focus_invalid = {borderColor: '', boxShadow: '0 0 0 0.2rem rgba(220, 53, 69, 0.25)'}; \r\n}","export function FloatingLabelCssPatchBs5Plugin(defaults){\r\n let cssPatch = defaults.cssPatch;\r\n cssPatch.label_floating_lifted = {opacity: '.65', transform : 'scale(.85) translateY(-.5rem) translateX(.15rem)'};\r\n cssPatch.picks_floating_lifted = {paddingTop: '1.625rem', paddingLeft:'0.8rem', paddingBottom : '0'};\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 {Bs5PluginSet, multiSelectPlugins, picksPlugins, allPlugins} from './PluginSet'\r\nimport {createDefaultCssBs5} from './DomFactories'\r\n\r\nimport {MultiSelectBuilder} from './MultiSelectBuilder'\r\nimport {utilities} from './ToolSet'\r\n\r\nimport {shallowClearClone} from './ToolsJs'\r\n\r\nconst defaultCss = createDefaultCssBs5();\r\n\r\nconst BsMultiSelect = (\r\n (window, jQuery, globalPopper) => {\r\n let plugins = shallowClearClone(Bs5PluginSet, multiSelectPlugins);\r\n return createForJQuery(window, jQuery, globalPopper, 'BsMultiSelect', plugins, defaultCss)\r\n }\r\n)(window, window.jQuery, Popper)\r\n\r\nconst BsPicks = (\r\n (window, jQuery, globalPopper) => {\r\n let plugins = shallowClearClone(Bs5PluginSet, picksPlugins);\r\n return createForJQuery(window, jQuery, globalPopper, 'BsPicks', plugins, defaultCss)\r\n }\r\n)(window, window.jQuery, Popper)\r\n\r\nexport default { BsMultiSelect, BsPicks, \r\n MultiSelectTools: {MultiSelectBuilder, plugins: shallowClearClone(Bs5PluginSet, allPlugins), defaultCss, utilities}\r\n}","import {PickDomFactoryPlugCss} from './PickDomFactory'\r\nimport {PicksDomFactoryPlugCss} from './PicksDomFactory'\r\nimport {ChoiceDomFactoryPlugCssBs5, ChoiceDomFactoryPlugCssBs4} from './ChoiceDomFactory'\r\nimport {ChoicesDomFactoryPlugCss} from './ChoicesDomFactory'\r\nimport {FilterDomFactoryPlugCss} from './FilterDomFactory'\r\n\r\nexport function createDefaultCssBs5(){\r\n var defaultCss={};\r\n PickDomFactoryPlugCss(defaultCss) \r\n PicksDomFactoryPlugCss(defaultCss)\r\n ChoiceDomFactoryPlugCssBs5(defaultCss)\r\n ChoicesDomFactoryPlugCss(defaultCss)\r\n FilterDomFactoryPlugCss(defaultCss)\r\n return defaultCss;\r\n}\r\n\r\nexport function createDefaultCssBs4(){ \r\n var defaultCss={}\r\n PickDomFactoryPlugCss(defaultCss)\r\n PicksDomFactoryPlugCss(defaultCss)\r\n ChoiceDomFactoryPlugCssBs4(defaultCss)\r\n ChoicesDomFactoryPlugCss(defaultCss)\r\n FilterDomFactoryPlugCss(defaultCss)\r\n return defaultCss;\r\n}"]}