-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathsmart.bootstrap.js
6 lines (4 loc) · 31 KB
/
smart.bootstrap.js
1
2
3
4
5
6
/* Smart UI v15.2.0 (2023-04-20)
Copyright (c) 2011-2023 jQWidgets.
License: https://htmlelements.com/license/ */ //
Smart("bootstrap-button",class extends Smart.ContentElement{static get properties(){return{value:{type:"string"},name:{type:"string"},type:{type:"string"},styleMode:{value:"primary",type:"string"},outlined:{value:!1,type:"boolean"},sizeMode:{value:"",allowedValue:["lg","sm",""],type:"string"}}}template(){return"<button inner-h-t-m-l='[[innerHTML]]' id='button' type='[[type]]' name='[[name]]' value='[[value]]' disabled='[[disabled]]' role='button'></button>"}ready(){this.render()}render(){const t=this;t.classList.contains("close")?t.$.button.classList.add("close"):(t.$.button.className="btn",t.outlined?t.$.button.classList.add("btn-outline-"+t.styleMode):t.$.button.classList.add("btn-"+t.styleMode),""!==t.sizeMode&&t.$.button.classList.add("btn-"+t.sizeMode))}propertyChangedHandler(){this.render()}}),Smart("bootstrap-check-box",class extends Smart.ContentElement{static get properties(){return{checked:{value:!1,type:"boolean"},indeterminate:{value:!1,type:"boolean"},name:{type:"string"},styleMode:{value:"secondary",type:"string"},type:{value:"checkbox",type:"string"}}}static get listeners(){return{click:"toggle","input.focus":"focus","input.blur":"blur"}}template(){return'<div><div id="button" class="btn">\n\t\t\t\t \t<input indeterminate=[[indeterminate]] checked=[[checked]] id="input" type="checkbox" name=\'[[name]]\' autocomplete="off"/>\n\t\t\t\t \t<label id="label"><span><content></content></span></label>\n\t\t\t </div></div>'}ready(){const t=this;t.$.button.classList.add("component"),t.$.label.classList.add("component-label"),t.$.input.classList.add("component-input"),t.$.button.classList.remove("btn"),t.$.button.classList.remove("switch"),t.$.button.classList.remove("checkbox"),t.$.button.classList.remove("radio"),"switch"===t.type&&t.$.button.classList.add("switch"),"button"===t.type&&(t.$.button.classList.add("btn"),t.$.button.classList.add("btn-"+t.styleMode)),"checkbox"===t.type&&t.$.button.classList.add("checkbox"),"radio"===t.type&&(t.$.button.classList.add("radio"),t.$.input.type="radio"),t instanceof Smart.Bootstrap.ToggleButton||t.classList.add("btn-group-toggle"),t.checked?t.$.button.classList.add("active"):t.$.button.classList.remove("active")}propertyChangedHandler(t){"checked"===t&&this.toggle()}toggle(t){const e=this,n=e.querySelector("input");if(t&&t.preventDefault(),!e.disabled){if(e.indeterminate&&(e.indeterminate=!1),e.checked)e.$.button.classList.remove("active"),e.checked=!1;else{if(e instanceof Smart.Bootstrap.RadioButton){const t=document.querySelectorAll("bootstrap-radio-button");for(let n=0;n<t.length;n++)t[n].group===e.group&&(t[n].set("checked",!1),t[n].$.button.classList.remove("active"))}e.$.button.classList.add("active"),e.checked=!0}e.$.fireEvent("change"),n.focus()}}dispose(){const t=this;t.parentElement&&t.parentElement.removeChild(t)}blur(){this.$.button.classList.remove("focus")}focus(){this.$.button.classList.add("focus")}}),Smart("bootstrap-switch-button",class extends Smart.Bootstrap.CheckBox{static get properties(){return{type:{value:"switch",type:"string"}}}}),Smart("bootstrap-toggle-button",class extends Smart.Bootstrap.CheckBox{static get properties(){return{styleMode:{value:"primary",type:"string"},type:{value:"button",type:"string"}}}static get listeners(){return{click:"toggle","button.focus":"focus","button.blur":"blur"}}template(){return'<div><div id="button" class="btn">\n\t\t\t\t \t<input class="hide" indeterminate=[[indeterminate]] checked=[[checked]] id="input" type="checkbox" name=\'[[name]]\' autocomplete="off"/>\n\t\t\t\t \t<label id="label"><content></content></label>\n\t\t\t </div></div>'}toggle(t){const e=this;if(t&&t.preventDefault(),!e.disabled){if(e.checked){if(e instanceof Smart.Bootstrap.RadioButton)return void e.$.button.focus();e.$.button.classList.remove("active"),e.set("checked",!1)}else e.$.button.classList.add("active"),e.set("checked",!0);e.$.fireEvent("change"),e.$.button.focus(),e.$.button.setAttribute("area-pressed",e.checked)}}}),Smart("bootstrap-radio-button",class extends Smart.Bootstrap.CheckBox{static get properties(){return{styleMode:{value:"secondary",type:"string"},group:{value:"",type:"string"},type:{value:"radio",type:"string"}}}}),Smart("bootstrap-drop-down",class extends Smart.ContentElement{static get properties(){return{styleMode:{value:"secondary",type:"string"},label:{value:"",type:"string"},labelType:{allowedValues:["a","button"],value:"button",type:"string"},href:{value:"#",type:"string"},opened:{value:!1,type:"boolean"},outlined:{value:!1,type:"boolean"},dropDownPosition:{allowedValues:["auto","top","bottom","left","right","custom"],value:"auto",type:"string"},customDropDownPositionCallback:{value:null,type:"function"},sizeMode:{value:"",allowedValue:["lg","sm",""],type:"string"}}}static get listeners(){return{"document.click":"_clearMenus","document.keyup":"_clearMenus","button.keydown":"_dataApiKeydownHandler","container.click":"_clickHandler","dropDownContainer.click":"_clickHandler",keydown:"_dataApiKeydownHandler"}}propertyChangedHandler(t,e,n){const o=this;"styleMode"===t||"sizeMode"===t?(o.$.button.classList.remove("button-"+e),"styleMode"===t?(o.$.button.classList.remove("button-outline-"+n),o.$.actionButton&&o.$.actionButton.classList.remove("button-outline-"+e),"outlined"===t?(o.$.button.classList.add("button-outline-"+n),o.$.actionButton&&o.$.actionButton.classList.add("button-outline-"+n)):(o.$.button.classList.add("button-"+n),o.$.actionButton&&o.$.actionButton.classList.add("button-"+n))):(o.$.button.classList.add("button-"+n),o.$.actionButton&&(o.$.actionButton.classList.remove("button-"+e),o.$.actionButton.classList.add("button-"+n)))):"dropDownPosition"===t?(o._positionDetection.dropDownPositionChangedHandler(),o._setArrowPosition()):"opened"===t?n?o.show():o.hide():"labelType"===t?(o.$.button.outerHTML=o.$.button.outerHTML.replace("<"+e+" ","<"+n+" ").replace("</"+e+">","</"+n+">"),o.$.button=o.querySelector('[smart-id="button"]'),"a"===n?o.$.button.setAttribute("href",o.href):(o.$.button.classList.add("button"),o.$.button.removeAttribute("href"))):"href"===t&&"a"===o.labelType&&o.$.button.setAttribute("href",n)}template(){return'<div class="dropdown btn-group" id="container">\n\t\t\t\t\t<button id="button" class="btn dropdown-toggle" data-toggle="dropdown">[[label]]</button>\n\t\t\t\t\t<div id="dropDownContainer" class="dropdown-menu"><content></content></div>\n\t\t\t\t</div>'}ready(){const t=this;t.ESCAPE_KEYCODE=27,t.SPACE_KEYCODE=32,t.TAB_KEYCODE=9,t.ARROW_UP_KEYCODE=38,t.ARROW_DOWN_KEYCODE=40,t.RIGHT_MOUSE_BUTTON_WHICH=3,t.REGEXP_KEYDOWN=new RegExp(`${t.ARROW_UP_KEYCODE}|${t.ARROW_DOWN_KEYCODE}|${t.ESCAPE_KEYCODE}`),"a"===t.labelType&&(t.$.button.outerHTML=t.$.button.outerHTML.replace("<button ","<a ").replace("</button>","</a>"),t.$.button=t.querySelector('[smart-id="button"]'),t.$.button.setAttribute("href",t.href),t.$.button.classList.remove("btn")),t.dropDownAppendTo||(t.dropDownAppendTo=t.$.container),t._positionDetection=new Smart.Utilities.PositionDetection(t,t.$.dropDownContainer,t.$.container,"hide"),t._positionDetection.getDropDownParent(!0),t._positionDetection.handleAutoPositioning(),t._positionDetection.setDropDownPosition(),t._positionDetection.customPositionDropDown=t._customPositionDropDown.bind(t),t._setArrowPosition(),t.styleMode&&(t.outlined?t.$.button.classList.add("btn-outline-"+t.styleMode):t.$.button.classList.add("btn-"+t.styleMode)),t.sizeMode&&t.$.button.classList.add("btn-"+t.sizeMode),t.$.actionButton&&(t.outlined?t.$.actionButton.classList.add("btn-outline-"+t.styleMode):t.$.actionButton.classList.add("btn-"+t.styleMode),t.sizeMode&&t.$.actionButton.classList.add("btn-"+t.sizeMode)),t.opened&&(t.$.dropDownContainer.classList.add("show"),t.$.container.classList.add("show"),t.set("opened",!0))}toggle(){const t=this;if(t.disabled||t.classList.contains("disabled"))return;const e=!t.opened;t._clearMenus(),e&&t.show()}show(){const t=this;t.disabled||t.classList.contains("disabled")||t.$.dropDownContainer.classList.contains("show")||t.$.fireEvent("show").defaultPrevented||(t.setAttribute("aria-expanded",!0),t.$.dropDownContainer.classList.add("show"),t.$.container.classList.add("show"),t.set("opened",!0),t.customDropDownPositionCallback?t.customDropDownPositionCallback(t.$.dropDownContainer):(t._positionDetection.checkBrowserBounds("vertically"),t._positionDetection.positionDropDown(),t._positionDetection.checkBrowserBounds("horizontally"),t.$.dropDownContainer.setAttribute("x-placement",t._dropDownListPosition+"-start")),t.$.fireEvent("shown"),t.$.button.focus())}_setArrowPosition(){const t=this;if(t.$.container.classList.remove("dropup"),t.$.container.classList.remove("dropleft"),t.$.container.classList.remove("dropright"),"auto"!==t.dropDownPosition)switch(t._dropDownListPosition){case"top":t.$.container.classList.add("dropup");break;case"right":t.$.container.classList.add("dropright");break;case"left":t.$.container.classList.add("dropleft")}t._repositionButtons&&t._repositionButtons()}hide(){const t=this;t.disabled||t.classList.contains("disabled")||!t.$.dropDownContainer.classList.contains("show")||t.$.fireEvent("hide").defaultPrevented||(t.removeAttribute("aria-expanded",!0),t.$.dropDownContainer.classList.remove("show"),t.$.container.classList.remove("show"),t.set("opened",!1),t.$.fireEvent("hidden"),t.$.button.focus())}dispose(){const t=this;t.parentElement&&t.parentElement.removeChild(t)}_dataApiKeydownHandler(t){const e=this;if(/input|textarea/i.test(t.target.tagName)?t.which===e.SPACE_KEYCODE||t.which!==e.ESCAPE_KEYCODE&&(t.which!==e.ARROW_DOWN_KEYCODE&&t.which!==e.ARROW_UP_KEYCODE||t.target.closest(".dropdown-menu")):!e.REGEXP_KEYDOWN.test(t.which))return;if(t.preventDefault(),t.stopPropagation(),this.disabled||e.classList.contains("disabled"))return;const n=e.opened;if(!n||n&&(t.which===e.ESCAPE_KEYCODE||t.which===e.SPACE_KEYCODE))return t.which===e.ESCAPE_KEYCODE&&e.$.button.focus(t),void e._clickHandler(t);const o=[].slice.call(e.querySelectorAll(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)"));if(0===o.length)return;let s=o.indexOf(t.target);t.which===e.ARROW_UP_KEYCODE&&s>0&&s--,t.which===e.ARROW_DOWN_KEYCODE&&s<o.length-1&&s++,s<0&&(s=0),o[s].focus()}_clickHandler(t){t.stopPropagation(),(t.target.closest(".dropdown-menu")||t.target.closest(".dropdown-toggle"))&&(t.preventDefault(),this.toggle())}_getParentFromElement(t){return t.closest("bootstrap-drop-down")}_clearMenus(t){const e=this;if(t&&(t.which===e.RIGHT_MOUSE_BUTTON_WHICH||"keyup"===t.type&&t.which!==e.TAB_KEYCODE&&t.which!==e.ESCAPE_KEYCODE))return;const n=[].slice.call(document.querySelectorAll(".dropdown-menu"));for(let o=0,s=n.length;o<s;o++){const s=n[o].closest("bootstrap-drop-down")||n[o].closest("bootstrap-split-button");if(!s)continue;const i=s.$.dropDownContainer;if(s.opened&&!(t&&("click"===t.type&&/input|textarea/i.test(t.target.tagName)||"keyup"===t.type&&t.which===e.TAB_KEYCODE)&&s.contains(t.target))){if(e.$.fireEvent("hide").defaultPrevented)return;s.setAttribute("aria-expanded","false"),s.$.container.classList.remove("show"),s.set("opened",!1),i.classList.remove("show"),s.$.fireEvent("hidden")}}}_customPositionDropDown(){const t=this,e=t.$[t instanceof Smart.Bootstrap.SplitButton?"button":"container"].getBoundingClientRect(),n=t.$.dropDownContainer;let o=e.top,s=e.left;switch(t._dropDownListPosition){case"bottom":o=e.bottom;break;case"top":o=e.top-n.offsetHeight;break;case"left":o=e.top,s-=n.offsetWidth;break;case"right":o=e.top,s+=e.width}return{left:s,top:o}}}),Smart("bootstrap-split-button",class extends Smart.Bootstrap.DropDown{template(){return'<div class="dropdown btn-group" id="container">\n\t\t\t\t\t<div id="buttonGroup" class="btn-group"></div>\n\t\t\t\t\t<button id="actionButton" class="btn">[[label]]</button>\n\t\t\t\t\t<button id="button" class="btn dropdown-toggle dropdown-toggle-split" data-toggle="dropdown"></button>\n\t\t\t\t\t<div id="dropDownContainer" class="dropdown-menu"><content></content></div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>'}_repositionButtons(){const t=this,e=t.$.actionButton,n=t.$.dropDownContainer,o=t.$.button,s=t.$.container,i=t.$.buttonGroup;e.parentElement.removeChild(e),o.parentElement.removeChild(o),n.parentElement.removeChild(n),s.appendChild(e),s.appendChild(o),s.appendChild(n),"left"!==t.dropDownPosition||i.contains(o)?"right"!==t.dropDownPosition||i.contains(e)||i.appendChild(e):(i.appendChild(o),i.appendChild(n)),"left"!==t.dropDownPosition&&"right"!==t.dropDownPosition?t.$.container.removeChild(i):i.parentElement||t.$.container.insertBefore(i,e)}}),Smart("bootstrap-input-group",class extends Smart.ContentElement{static get properties(){return{contentBefore:{value:"",type:"string"},contentAfter:{value:"",type:"string"},type:{value:"text",type:"string"},name:{value:"",type:"string"},placeholder:{value:"",type:"string"},styleMode:{value:"",type:"string"},noWrap:{value:!1,type:"boolean"},sizeMode:{value:"",allowedValue:["lg","sm",""],type:"string"},value:{value:"",allowedValue:[],type:"string"}}}template(){return'<div class="input-group" id="container">\n\t\t\t\t\t<div id="prependContainer" class="input-group-prepend">[[contentBefore]]</div>\n\t\t\t\t\t<div id="contentContainer"><content></content></div>\n\t\t\t\t\t<div id="appendContainer" class="input-group-append">[[contentAfter]]</div>\n\t\t\t\t</div>'}ready(){const t=this;t.noWrap?t.$.container.classList.add("flex-nowrap"):t.$.container.classList.remove("flex-nowrap")}propertyChangedHandler(t,e,n){const o=this;if("noWrap"===t)n?o.$.container.classList.add("flex-nowrap"):o.$.container.classList.remove("flex-nowrap");else if("value"===t){o.input&&(o.input.value=n);const e=o.$.inputContainer.querySelectorAll(".form-component");for(let o=0;o<e.length;o++)e[o][t]=n}else if("placeholder"===t||"name"===t||"type"===t){const e=o.$.inputContainer.querySelectorAll(".form-component");for(let o=0;o<e.length;o++)e[o][t]=n}else if("styleMode"===t||"sizeMode"===t)o.$.container.classList.remove("input-group-"+e),o.$.container.classList.add("input-group-"+n);else if("contentBefore"===t||"contentAfter"===t){const e=o.$["contentBefore"===t?"prependContainer":"appendContainer"];e.innerHTML=n,n&&!e.parentElement?"contentBefore"===t?o.$.container.insertBefore(e,o.$.container.firstElementChild):o.$.container.appendChild(e):n||o.$.container.removeChild(e)}}render(){const t=this,e=t.$.contentContainer,n=t.$.prependContainer,o=t.$.appendContainer;let s=e.querySelector(".form-component");if(!s){const n=document.createElement("input");n.type=t.type,n.placeholder=t.placeholder,n.name=t.name,n.value=t.value,n.classList.add("form-component"),n.onchange=function(){t.value=n.value},n.onkeyup=function(){t.value=n.value},t.input=n,e.appendChild(n),s=n}let i=s.previousElementSibling;for(;i;){const t=i;if(t===n)break;i=i.previousElementSibling,t.classList.contains("form-component")||n.insertBefore(t,n.firstElementChild)}for(let t=0;t<n.children.length;t++)n.children[t].classList.add("input-group-item");let a=s.nextElementSibling;for(;a;){const t=a;if(t===o)break;a=a.nextElementSibling,t.classList.contains("form-component")||o.appendChild(t)}for(let t=0;t<o.children.length;t++)o.children[t].classList.add("input-group-item");for(;e.firstElementChild;)t.$.container.insertBefore(e.firstElementChild,o);o.children.length||t.$.container.removeChild(o),n.children.length||t.$.container.removeChild(n),e.children.length||t.$.container.removeChild(e),t.sizeMode&&t.$.container.classList.add("input-group-"+t.sizeMode),t.styleMode&&t.$.container.classList.add("input-group-"+t.styleMode)}}),Smart("bootstrap-modal",class extends Smart.ContentElement{static get properties(){return{sizeMode:{value:"",allowedValue:["sm","","lg","xl"],type:"string"},scrollable:{value:!1,type:"boolean"},focusable:{value:!0,type:"boolean"},centered:{value:!1,type:"boolean"},opened:{value:!1,type:"boolean"},backdrop:{allowedValues:["static","default","none"],value:"default",type:"string"},keyboard:{value:!0,type:"boolean"}}}static get listeners(){return{keydown:"_keydownHandler",click:"_clickHandler"}}template(){return'<div><div class="modal-dialog" id="dialog">\n\t\t\t\t\t<div class="modal-content" inner-h-t-m-l="[[innerHTML]]">\n\t\t\t\t\t\t<content></content>\n\t\t\t\t</div></div>'}ready(){}propertyChangedHandler(t,e,n){const o=this;"focusable"===t?n?o.setAttribute("tabindex",-1):o.removeAttribute("tabindex"):"scrollable"===t||"centered"===t?o.$.dialog.classList[n?"add":"remove"]("modal-dialog-"+t):"sizeMode"===t&&(o.$.dialog.classList.remove("modal-"+e),o.$.dialog.classList.add("modal-"+n))}render(){const t=this;t.classList.add("modal"),t.$.dialog.classList[t.scrollable?"add":"remove"]("modal-dialog-scrollable"),t.$.dialog.classList[t.centered?"add":"remove"]("modal-dialog-centered"),""!==t.sizeMode&&t.$.dialog.classList.add("modal-"+t.sizeMode),t.opened&&t.show(!0),t.setAttribute("tabindex",t.tabindex),super.render()}handleUpdate(){this._adjustDialog()}toggle(){return this.opened?this.hide():this.show()}show(t){const e=this;!t&&e.opened||e._isTransitioning||(e.classList.contains("fade")&&(this._isTransitioning=!0),e.$.fireEvent("show").defaultPrevented||(e.set("opened",!0),e._setScrollbar(),e._adjustDialog(),e._setResizeEvent(),e._showBackdrop((()=>e._showElement()))))}hide(t){const e=this;if(t&&t.preventDefault(),!e.opened||e._isTransitioning)return;if(e.$.fireEvent("hide").defaultPrevented)return;e.set("opened",!1);const n=e.classList.contains("fade");n&&(e._isTransitioning=!0),e._setResizeEvent(),e.classList.remove("show"),n?e.addEventListener("transitionend",(t=>e._hideModal(t)),{once:!0}):e._hideModal()}dispose(){const t=this;t.parentElement&&t.parentElement.removeChild(t),window.removeEventListener("resize",t._windowResizeHandler),document.removeEventListener("focusin",t._forceFocusHandler)}_hideModal(){const t=this;t.style.display="none",t.setAttribute("aria-hidden",!0),t.removeAttribute("aria-modal"),t._isTransitioning=!1,t._showBackdrop((()=>{document.body.classList.remove("modal-open"),t.style.paddingLeft="",t.style.paddingRight="",[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top")).forEach(((t,e)=>{const n=e._paddingRight;delete e._paddingRight,e.style.paddingRight=n||""})),[].slice.call(document.querySelectorAll(".sticky-top")).forEach(((t,e)=>{const n=e._marginRight;void 0!==n&&(delete e._marginRight,e.style.marginRight=n||"")}));const e=document.body._paddingRight;delete document.body._paddingRight,document.body.style.paddingRight=e||"",t.$.fireEvent("hidden")}))}_keydownHandler(t){27===t.which&&this.keyboard&&(t.preventDefault(),this.hide())}_clickHandler(t){const e=this;t.target.closest('[data-dismiss="modal"]')?e.hide():e._ignoreBackdropClick?e._ignoreBackdropClick=!1:t.target===t.currentTarget&&("static"!==e.backdrop?e.hide():e.focus())}_setScrollbar(){const t=this,e=document.body.getBoundingClientRect();if(e.left+e.right<window.innerWidth){const e=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top")),n=[].slice.call(document.querySelectorAll(".sticky-top"));for(let n=0;n<e.length;n++){const o=e[n],s=parseFloat(getComputedStyle(o).getPropertyValue("padding-right"))||0;o.style.paddingRight=(o._paddingRight=s+t._getScrollbarWidth())+"px"}for(let e=0;e<n.length;e++){const o=n[e],s=parseFloat(getComputedStyle(o).getPropertyValue("margin-right"))||0;o.style.marginRight=(o._marginRight=s+t._getScrollbarWidth())+"px"}document.body._paddingRight=document.body.style.paddingRight,document.body.style.paddingRight=(parseFloat(getComputedStyle(document.body).getPropertyValue("padding-right"))||0)+t._getScrollbarWidth()+"px"}document.body.classList.add("modal-open")}_getScrollbarWidth(){const t=document.createElement("div");t.className="modal-scrollbar-measure",document.body.appendChild(t);const e=t.getBoundingClientRect().width-t.clientWidth;return document.body.removeChild(t),e}_adjustDialog(){const t=this,e=t.scrollHeight>document.documentElement.clientHeight,n=document.body.getBoundingClientRect(),o=n.left+n.right<window.innerWidth;o&&e&&(t.style.paddingLeft=t._getScrollbarWidth()+"px"),o&&!e&&(t.style.paddingRight=t._getScrollbarWidth()+"px")}_windowResizeHandler(){this._adjustDialog()}_setResizeEvent(){const t=this;t.opened?window.addEventListener("resize",t._windowResizeHandler):window.removeEventListener("resize",t._windowResizeHandler)}_showElement(){const t=this,e=t.classList.contains("fade"),n=t.$.dialog;t.style.display="block",t.removeAttribute("aria-hidden"),t.setAttribute("aria-modal",!0),n.classList.contains("modal-dialog-scrollable")?n.querySelector(".modal-body").scrollTop=0:t.scrollTop=0,e&&t.offsetHeight,t.classList.add("show"),t._enforceFocus();const o=()=>{t.focus(),t._isTransitioning=!1,t.$.fireEvent("shown")};e?t.$.dialog.addEventListener("transitionend",o,{once:!0}):o()}_forceFocusHandler(t){const e=this;document===t.target||e===t.target||e.contains(t.target)||(t.preventDefault(),e.hide())}_enforceFocus(){document.removeEventListener("focusin",this._forceFocusHandler),document.addEventListener("focusin",this._forceFocusHandler)}_showBackdrop(t){const e=this,n=e.classList.contains("fade");if(e.opened&&"none"!==e.backdrop){if(e._backdrop||(e._backdrop=document.createElement("div"),e._backdrop.className="modal-backdrop"),n&&this._backdrop.classList.add("fade"),e._backdrop.parentElement||document.body.appendChild(e._backdrop),n&&e._backdrop.offsetHeight,this._backdrop.classList.add("show"),!t)return;if(!n)return void t();0===e._backdrop.offsetHeight&&t(),e._backdrop.addEventListener("transitionend",t,{once:!0})}else if(!e.opened&&e._backdrop){e._backdrop.classList.remove("show");const n=()=>{e._backdrop.parentElement&&e._backdrop.parentElement.removeChild(e._backdrop),t&&t()};e.classList.contains("fade")?e._backdrop.addEventListener("transitionend",n,{once:!0}):n()}else t&&t()}}),Smart("bootstrap-tabs",class extends Smart.ContentElement{static get properties(){return{sizeMode:{value:"",allowedValue:["sm","","lg","xl"],type:"string"},tabType:{value:"tabs",allowedValue:["tabs","nav","pills"],type:"string"},listType:{value:"ul",allowedValue:["ul","ol","nav"],type:"string"},alignment:{value:"",allowedValue:["","center","end","vertical"],type:"string"},fill:{value:!1,type:"boolean"},justified:{value:!1,type:"boolean"},styleMode:{value:"",type:"string"}}}static get listeners(){return{click:"_clickHandler"}}template(){return'<div id="container"><content></content></div>'}ready(){}appendChild(t){const e=this;if(!e.isCompleted){const t=Array.prototype.slice.call(arguments,2);return HTMLElement.prototype.appendChild.apply(e,t.concat(Array.prototype.slice.call(arguments)))}t&&e.$.container.appendChild(t)}removeChild(t){const e=this;if(!e.isCompleted){const t=Array.prototype.slice.call(arguments,2);return HTMLElement.prototype.removeChild.apply(e,t.concat(Array.prototype.slice.call(arguments)))}t||e.$.container.removeChild(t)}insertBefore(t,e){const n=this;if(!n.isCompleted){const t=Array.prototype.slice.call(arguments,2);return HTMLElement.prototype.insertBefore.apply(n,t.concat(Array.prototype.slice.call(arguments)))}t&&n.$.container.insertBefore(t,e)}propertyChangedHandler(t,e,n){const o=this;if("listType"===t){const t=o.querySelectorAll(".nav-link");o.$.container.innerHTML="";for(let e=0;e<t.length;e++)o.appendChild(t[e]);o.render()}"styleMode"===t&&(o.classList.remove(e),o.styleMode&&o.classList.add(o.styleMode)),o._list&&("alignment"===t?(o._list.classList.remove("vertical"===n?"flex-column":"justify-content-"+e),n&&o._list.classList.add("vertical"===n?"flex-column":"justify-content-"+n)):"tabType"===t?(o._list.classList.remove("nav-"+e),"nav"!==n&&o._list.classList.add("nav-"+n)):"fill"!==t&&"justified"!==t||o._list.classList[n?"add":"remove"]("nav-"+t))}render(){const t=this,e=t.$.container,n=document.createDocumentFragment();for(;e.firstElementChild;){const t=e.firstElementChild;t&&(t instanceof Smart.Bootstrap.DropDown?t.querySelector(".dropdown-toggle").classList.add("nav-link"):t.classList.add("nav-link"),n.appendChild(t))}if(t.$.container.innerHTML="",!n.children.length)return;const o=document.createElement(t.listType);if(t._list=o,o.classList.add("nav"),"nav"===t.listType)for(;n.firstElementChild;)n.firstElementChild.classList.contains("tab-content")?t.$.container.appendChild(n.firstElementChild):o.appendChild(n.firstElementChild);else for(;n.firstElementChild;){if(n.firstElementChild.classList.contains("tab-content")){t.$.container.appendChild(n.firstElementChild);continue}const e=document.createElement("li");e.classList.add("nav-item"),e.appendChild(n.firstElementChild),o.appendChild(e)}t.$.container.insertBefore(o,t.$.container.lastElementChild),t._refreshBarPosition(),t._list&&(t.alignment&&t._list&&t._list.classList.add("vertical"===t.alignment?"flex-column":"justify-content-"+t.alignment),"nav"!==t.tabType&&t._list.classList.add("nav-"+t.tabType),t.fill&&t._list.classList.add("nav-fill"),t.justified&&t._list.classList.add("nav-justified"),t.styleMode&&t.classList.add(t.styleMode))}_getSelectorFromElement(t){let e=t.getAttribute("data-target");if(!e||"#"===e){const n=t.getAttribute("href");e=n&&"#"!==n?n.trim():""}return document.querySelector(e)}show(t){const e=this;if(e.disabled)return;const n=Array.from(e.getElementsByClassName("nav-link")).find((t=>t.classList.contains("active"))),o=e._getSelectorFromElement(t);if(!t||!t.classList.contains("nav-link")||t===n)return;if(e.$.fireEvent("show",{relatedTarget:n,target:t}),e.$.fireEvent("show",{relatedTarget:n,target:t}).defaultPrevented)return;e._activate(t,e);const s=()=>{e.$.fireEvent("shown",{relatedTarget:n,target:t})};o?e._activate(o,o.parentElement,s):s()}dispose(){const t=this;t.parentElement&&t.parentElement.removeChild(t)}_refreshBarPosition(){const t=this;if(!t.bar){const e=document.createElement("span");t._list.appendChild(e),e.classList.add("bar"),t.bar=e}setTimeout((function(){const e=Array.from(t.getElementsByClassName("nav-link")),n=e.find((t=>t.classList.contains("active")));let o=0,s=0;for(let t=0;t<e.length;t++)o+=e[t].getBoundingClientRect().width,e[t]===n&&(s=o);if(n){const e=n.getBoundingClientRect();t.bar.style.left=-o+s-n.offsetWidth+"px",t.bar.style.top=e.height+"px",t.bar.style.width=n.offsetWidth+"px"}}))}_activate(t,e,n){const o=e&&e.querySelector(".active"),s=()=>this._transitionComplete(t,o,n);n&&o&&o.classList.contains("fade")?(o.classList.remove("show"),o.addEventListener("transitionend",s,{once:!0})):s()}_transitionComplete(t,e,n){if(e){e.classList.remove("active");const t=e.parentElement.querySelector(".dropdown-menu .active");t&&t.classList.remove("active"),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}if(t.classList.add("active"),this._refreshBarPosition(),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),t.offsetHeight,t.classList.contains("fade")&&t.classList.add("show"),t.parentElement&&t.parentElement.classList.contains("dropdown-menu")){const e=t.closest(".dropdown");e&&e.querySelector(".dropdown-toggle").classList.add("active"),t.setAttribute("aria-expanded",!0)}n&&n()}_clickHandler(t){const e=this;if(e.disabled)return;const n=t.target;["tab","pill","list"].indexOf(n.getAttribute("data-toggle"))>-1&&e.show(n),t.stopPropagation(),t.preventDefault()}}),Smart("bootstrap-range",class extends Smart.BaseElement{static get properties(){return{min:{value:0,type:"number"},max:{value:10,type:"number"},name:{type:"string"},value:{value:5,type:"number"}}}static get listeners(){return{"input.focus":"focus","input.blur":"blur"}}template(){return'<div><div id="range" class="slider">\n\t\t\t\t \t<input value=[[value]] max=[[max]] min=[[min]] disabled=[[disabled]] id="input" type="range" name=\'[[name]]\'/>\n\t\t\t </div></div>'}ready(){const t=this;t.$.range.classList.add("component"),t.$.input.classList.add("component-input"),t.$.input.classList.add("range")}propertyChangedHandler(){}blur(){this.$.range.classList.remove("focus")}focus(){this.$.range.classList.add("focus")}}),Smart("bootstrap-progress-bar",class extends Smart.ContentElement{static get properties(){return{min:{value:0,type:"number"},max:{value:10,type:"number"},name:{type:"string"},type:{value:"",type:"string"},value:{value:5,type:"number"},striped:{value:!1,type:"boolean"},styleMode:{value:"primary",type:"string"}}}template(){return'<div><div id="progress" class="progress">\n\t\t\t\t \t<div class="progress-bar" role="progressbar" aria-valuenow==[[value]] aria-valuemax==[[max]] aria-valuemin==[[min]] disabled=[[disabled]] id="progressbar" name=\'[[name]]\'><content></content></div>\n\t\t\t </div>\n\t\t\t <progress id="circular" class="hide circular"/>\n\t\t\t </div>'}refresh(){const t=this;let e=Math.max(t.min,t.value);e=Math.min(t.value,t.max);const n=e*t.offsetWidth/(t.max-t.min);t.$.progressbar.style.width=n+"px",t.$.progressbar.classList.add("bg-"+t.styleMode),t.$.circular.classList.add("bg-"+t.styleMode),t.$.progressbar.classList.remove("progress-bar-striped"),t.striped&&t.$.progressbar.classList.add("progress-bar-striped"),"circular"===t.type?(t.$.progress.classList.add("hide"),t.$.circular.classList.remove("hide")):(t.$.progress.classList.remove("hide"),t.$.circular.classList.add("hide"))}ready(){this.$.progress.classList.add("component"),this.refresh()}propertyChangedHandler(){this.refresh()}}),Smart("bootstrap-circular",class extends Smart.Bootstrap.ProgressBar{static get properties(){return{type:{value:"circular",type:"string"}}}}),Smart("bootstrap-input",class extends Smart.ContentElement{static get properties(){return{name:{value:"",type:"string"},value:{value:"",type:"string"},placeholder:{value:"",type:"string"},required:{value:!1,type:"boolean"},outlined:{value:!1,type:"boolean"},filled:{value:!1,type:"boolean"},styleMode:{value:"outlined",type:"string"}}}template(){return'<div><label input id="label">\n <input name=[[name]] type="text" class="form-component" id="input" placeholder="[[placeholder]]"\n\t\t\t\t\t\t\t\t\tvalue="{{value::keydown}}" required="[[required]]"/>\n <span id="span">[[placeholder]]</span>\n </label></div>'}refresh(){const t=this;t.$.label.removeAttribute("outlined"),t.$.label.removeAttribute("filled"),t.$.label.removeAttribute("default"),t.outlined?t.$.label.setAttribute("outlined",""):t.filled?t.$.label.setAttribute("filled",""):t.$.label.setAttribute("default",""),t.$.label.className="",t.styleMode&&(t.$.label.classList.add(t.styleMode),t.$.label.setAttribute("highlight",""))}ready(){this.refresh()}propertyChangedHandler(){this.refresh()}}),Smart("bootstrap-textarea",class extends Smart.Bootstrap.Input{template(){return'<div><label input id="label">\n <textarea name=[[name]] type="text" class="form-component" id="input" placeholder="[[placeholder]]"\n\t\t\t\t\t\t\t\t\tvalue="{{value::keydown}}" required="[[required]]"></textarea>\n <span id="span">[[placeholder]]</span>\n </label></div>'}}),Smart("bootstrap-file-input",class extends Smart.ContentElement{static get properties(){return{name:{value:"",type:"string"},placeholder:{value:"",type:"string"},styleMode:{value:"",type:"string"},value:{value:"",type:"string"}}}template(){return'<div><div class="file">\n\t\t\t\t\t<input id="input" placeholder=[[placeholder]] name=[[name]] type="file" class="file-input" />\n\t\t\t\t\t<label class="file-label" for="inputGroupFile01"><content></content></label>\n\t\t\t\t</div></div>'}refresh(){const t=this;t.$.input.value=t.value,t.$.input.onchange=function(){t.value=t.$.input.value}}ready(){this.refresh()}propertyChangedHandler(){this.refresh()}});