{"version":3,"file":"adminlte.js","sources":["../../build/js/CardRefresh.js","../../build/js/CardWidget.js","../../build/js/ControlSidebar.js","../../build/js/DirectChat.js","../../build/js/Dropdown.js","../../build/js/ExpandableTable.js","../../build/js/Fullscreen.js","../../build/js/IFrame.js","../../build/js/Layout.js","../../build/js/PushMenu.js","../../build/js/SidebarSearch.js","../../build/js/Toasts.js","../../build/js/TodoList.js","../../build/js/Treeview.js"],"sourcesContent":["/**\n * --------------------------------------------\n * AdminLTE CardRefresh.js\n * License MIT\n * --------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * Constants\n * ====================================================\n */\n\nconst NAME = 'CardRefresh'\nconst DATA_KEY = 'lte.cardrefresh'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst EVENT_LOADED = `loaded${EVENT_KEY}`\nconst EVENT_OVERLAY_ADDED = `overlay.added${EVENT_KEY}`\nconst EVENT_OVERLAY_REMOVED = `overlay.removed${EVENT_KEY}`\n\nconst CLASS_NAME_CARD = 'card'\n\nconst SELECTOR_CARD = `.${CLASS_NAME_CARD}`\nconst SELECTOR_DATA_REFRESH = '[data-card-widget=\"card-refresh\"]'\n\nconst Default = {\n source: '',\n sourceSelector: '',\n params: {},\n trigger: SELECTOR_DATA_REFRESH,\n content: '.card-body',\n loadInContent: true,\n loadOnInit: true,\n responseType: '',\n overlayTemplate: '
',\n onLoadStart() {\n },\n onLoadDone(response) {\n return response\n }\n}\n\nclass CardRefresh {\n constructor(element, settings) {\n this._element = element\n this._parent = element.parents(SELECTOR_CARD).first()\n this._settings = $.extend({}, Default, settings)\n this._overlay = $(this._settings.overlayTemplate)\n\n if (element.hasClass(CLASS_NAME_CARD)) {\n this._parent = element\n }\n\n if (this._settings.source === '') {\n throw new Error('Source url was not defined. Please specify a url in your CardRefresh source option.')\n }\n }\n\n load() {\n this._addOverlay()\n this._settings.onLoadStart.call($(this))\n\n $.get(this._settings.source, this._settings.params, response => {\n if (this._settings.loadInContent) {\n if (this._settings.sourceSelector !== '') {\n response = $(response).find(this._settings.sourceSelector).html()\n }\n\n this._parent.find(this._settings.content).html(response)\n }\n\n this._settings.onLoadDone.call($(this), response)\n this._removeOverlay()\n }, this._settings.responseType !== '' && this._settings.responseType)\n\n $(this._element).trigger($.Event(EVENT_LOADED))\n }\n\n _addOverlay() {\n this._parent.append(this._overlay)\n $(this._element).trigger($.Event(EVENT_OVERLAY_ADDED))\n }\n\n _removeOverlay() {\n this._parent.find(this._overlay).remove()\n $(this._element).trigger($.Event(EVENT_OVERLAY_REMOVED))\n }\n\n // Private\n\n _init() {\n $(this).find(this._settings.trigger).on('click', () => {\n this.load()\n })\n\n if (this._settings.loadOnInit) {\n this.load()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n let data = $(this).data(DATA_KEY)\n const _options = $.extend({}, Default, $(this).data())\n\n if (!data) {\n data = new CardRefresh($(this), _options)\n $(this).data(DATA_KEY, typeof config === 'string' ? data : config)\n }\n\n if (typeof config === 'string' && config.match(/load/)) {\n data[config]()\n } else {\n data._init($(this))\n }\n }\n}\n\n/**\n * Data API\n * ====================================================\n */\n\n$(document).on('click', SELECTOR_DATA_REFRESH, function (event) {\n if (event) {\n event.preventDefault()\n }\n\n CardRefresh._jQueryInterface.call($(this), 'load')\n})\n\n$(() => {\n $(SELECTOR_DATA_REFRESH).each(function () {\n CardRefresh._jQueryInterface.call($(this))\n })\n})\n\n/**\n * jQuery API\n * ====================================================\n */\n\n$.fn[NAME] = CardRefresh._jQueryInterface\n$.fn[NAME].Constructor = CardRefresh\n$.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return CardRefresh._jQueryInterface\n}\n\nexport default CardRefresh\n","/**\n * --------------------------------------------\n * AdminLTE CardWidget.js\n * License MIT\n * --------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * Constants\n * ====================================================\n */\n\nconst NAME = 'CardWidget'\nconst DATA_KEY = 'lte.cardwidget'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst EVENT_EXPANDED = `expanded${EVENT_KEY}`\nconst EVENT_COLLAPSED = `collapsed${EVENT_KEY}`\nconst EVENT_MAXIMIZED = `maximized${EVENT_KEY}`\nconst EVENT_MINIMIZED = `minimized${EVENT_KEY}`\nconst EVENT_REMOVED = `removed${EVENT_KEY}`\n\nconst CLASS_NAME_CARD = 'card'\nconst CLASS_NAME_COLLAPSED = 'collapsed-card'\nconst CLASS_NAME_COLLAPSING = 'collapsing-card'\nconst CLASS_NAME_EXPANDING = 'expanding-card'\nconst CLASS_NAME_WAS_COLLAPSED = 'was-collapsed'\nconst CLASS_NAME_MAXIMIZED = 'maximized-card'\n\nconst SELECTOR_DATA_REMOVE = '[data-card-widget=\"remove\"]'\nconst SELECTOR_DATA_COLLAPSE = '[data-card-widget=\"collapse\"]'\nconst SELECTOR_DATA_MAXIMIZE = '[data-card-widget=\"maximize\"]'\nconst SELECTOR_CARD = `.${CLASS_NAME_CARD}`\nconst SELECTOR_CARD_HEADER = '.card-header'\nconst SELECTOR_CARD_BODY = '.card-body'\nconst SELECTOR_CARD_FOOTER = '.card-footer'\n\nconst Default = {\n animationSpeed: 'normal',\n collapseTrigger: SELECTOR_DATA_COLLAPSE,\n removeTrigger: SELECTOR_DATA_REMOVE,\n maximizeTrigger: SELECTOR_DATA_MAXIMIZE,\n collapseIcon: 'fa-minus',\n expandIcon: 'fa-plus',\n maximizeIcon: 'fa-expand',\n minimizeIcon: 'fa-compress'\n}\n\nclass CardWidget {\n constructor(element, settings) {\n this._element = element\n this._parent = element.parents(SELECTOR_CARD).first()\n\n if (element.hasClass(CLASS_NAME_CARD)) {\n this._parent = element\n }\n\n this._settings = $.extend({}, Default, settings)\n }\n\n collapse() {\n this._parent.addClass(CLASS_NAME_COLLAPSING).children(`${SELECTOR_CARD_BODY}, ${SELECTOR_CARD_FOOTER}`)\n .slideUp(this._settings.animationSpeed, () => {\n this._parent.addClass(CLASS_NAME_COLLAPSED).removeClass(CLASS_NAME_COLLAPSING)\n })\n\n this._parent.find(`> ${SELECTOR_CARD_HEADER} ${this._settings.collapseTrigger} .${this._settings.collapseIcon}`)\n .addClass(this._settings.expandIcon)\n .removeClass(this._settings.collapseIcon)\n\n this._element.trigger($.Event(EVENT_COLLAPSED), this._parent)\n }\n\n expand() {\n this._parent.addClass(CLASS_NAME_EXPANDING).children(`${SELECTOR_CARD_BODY}, ${SELECTOR_CARD_FOOTER}`)\n .slideDown(this._settings.animationSpeed, () => {\n this._parent.removeClass(CLASS_NAME_COLLAPSED).removeClass(CLASS_NAME_EXPANDING)\n })\n\n this._parent.find(`> ${SELECTOR_CARD_HEADER} ${this._settings.collapseTrigger} .${this._settings.expandIcon}`)\n .addClass(this._settings.collapseIcon)\n .removeClass(this._settings.expandIcon)\n\n this._element.trigger($.Event(EVENT_EXPANDED), this._parent)\n }\n\n remove() {\n this._parent.slideUp()\n this._element.trigger($.Event(EVENT_REMOVED), this._parent)\n }\n\n toggle() {\n if (this._parent.hasClass(CLASS_NAME_COLLAPSED)) {\n this.expand()\n return\n }\n\n this.collapse()\n }\n\n maximize() {\n this._parent.find(`${this._settings.maximizeTrigger} .${this._settings.maximizeIcon}`)\n .addClass(this._settings.minimizeIcon)\n .removeClass(this._settings.maximizeIcon)\n this._parent.css({\n height: this._parent.height(),\n width: this._parent.width(),\n transition: 'all .15s'\n }).delay(150).queue(function () {\n const $element = $(this)\n\n $element.addClass(CLASS_NAME_MAXIMIZED)\n $('html').addClass(CLASS_NAME_MAXIMIZED)\n if ($element.hasClass(CLASS_NAME_COLLAPSED)) {\n $element.addClass(CLASS_NAME_WAS_COLLAPSED)\n }\n\n $element.dequeue()\n })\n\n this._element.trigger($.Event(EVENT_MAXIMIZED), this._parent)\n }\n\n minimize() {\n this._parent.find(`${this._settings.maximizeTrigger} .${this._settings.minimizeIcon}`)\n .addClass(this._settings.maximizeIcon)\n .removeClass(this._settings.minimizeIcon)\n this._parent.css('cssText', `height: ${this._parent[0].style.height} !important; width: ${this._parent[0].style.width} !important; transition: all .15s;`\n ).delay(10).queue(function () {\n const $element = $(this)\n\n $element.removeClass(CLASS_NAME_MAXIMIZED)\n $('html').removeClass(CLASS_NAME_MAXIMIZED)\n $element.css({\n height: 'inherit',\n width: 'inherit'\n })\n if ($element.hasClass(CLASS_NAME_WAS_COLLAPSED)) {\n $element.removeClass(CLASS_NAME_WAS_COLLAPSED)\n }\n\n $element.dequeue()\n })\n\n this._element.trigger($.Event(EVENT_MINIMIZED), this._parent)\n }\n\n toggleMaximize() {\n if (this._parent.hasClass(CLASS_NAME_MAXIMIZED)) {\n this.minimize()\n return\n }\n\n this.maximize()\n }\n\n // Private\n\n _init(card) {\n this._parent = card\n\n $(this).find(this._settings.collapseTrigger).click(() => {\n this.toggle()\n })\n\n $(this).find(this._settings.maximizeTrigger).click(() => {\n this.toggleMaximize()\n })\n\n $(this).find(this._settings.removeTrigger).click(() => {\n this.remove()\n })\n }\n\n // Static\n\n static _jQueryInterface(config) {\n let data = $(this).data(DATA_KEY)\n const _options = $.extend({}, Default, $(this).data())\n\n if (!data) {\n data = new CardWidget($(this), _options)\n $(this).data(DATA_KEY, typeof config === 'string' ? data : config)\n }\n\n if (typeof config === 'string' && config.match(/collapse|expand|remove|toggle|maximize|minimize|toggleMaximize/)) {\n data[config]()\n } else if (typeof config === 'object') {\n data._init($(this))\n }\n }\n}\n\n/**\n * Data API\n * ====================================================\n */\n\n$(document).on('click', SELECTOR_DATA_COLLAPSE, function (event) {\n if (event) {\n event.preventDefault()\n }\n\n CardWidget._jQueryInterface.call($(this), 'toggle')\n})\n\n$(document).on('click', SELECTOR_DATA_REMOVE, function (event) {\n if (event) {\n event.preventDefault()\n }\n\n CardWidget._jQueryInterface.call($(this), 'remove')\n})\n\n$(document).on('click', SELECTOR_DATA_MAXIMIZE, function (event) {\n if (event) {\n event.preventDefault()\n }\n\n CardWidget._jQueryInterface.call($(this), 'toggleMaximize')\n})\n\n/**\n * jQuery API\n * ====================================================\n */\n\n$.fn[NAME] = CardWidget._jQueryInterface\n$.fn[NAME].Constructor = CardWidget\n$.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return CardWidget._jQueryInterface\n}\n\nexport default CardWidget\n","/**\n * --------------------------------------------\n * AdminLTE ControlSidebar.js\n * License MIT\n * --------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * Constants\n * ====================================================\n */\n\nconst NAME = 'ControlSidebar'\nconst DATA_KEY = 'lte.controlsidebar'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst EVENT_COLLAPSED = `collapsed${EVENT_KEY}`\nconst EVENT_EXPANDED = `expanded${EVENT_KEY}`\n\nconst SELECTOR_CONTROL_SIDEBAR = '.control-sidebar'\nconst SELECTOR_CONTROL_SIDEBAR_CONTENT = '.control-sidebar-content'\nconst SELECTOR_DATA_TOGGLE = '[data-widget=\"control-sidebar\"]'\nconst SELECTOR_HEADER = '.main-header'\nconst SELECTOR_FOOTER = '.main-footer'\n\nconst CLASS_NAME_CONTROL_SIDEBAR_ANIMATE = 'control-sidebar-animate'\nconst CLASS_NAME_CONTROL_SIDEBAR_OPEN = 'control-sidebar-open'\nconst CLASS_NAME_CONTROL_SIDEBAR_SLIDE = 'control-sidebar-slide-open'\nconst CLASS_NAME_LAYOUT_FIXED = 'layout-fixed'\nconst CLASS_NAME_NAVBAR_FIXED = 'layout-navbar-fixed'\nconst CLASS_NAME_NAVBAR_SM_FIXED = 'layout-sm-navbar-fixed'\nconst CLASS_NAME_NAVBAR_MD_FIXED = 'layout-md-navbar-fixed'\nconst CLASS_NAME_NAVBAR_LG_FIXED = 'layout-lg-navbar-fixed'\nconst CLASS_NAME_NAVBAR_XL_FIXED = 'layout-xl-navbar-fixed'\nconst CLASS_NAME_FOOTER_FIXED = 'layout-footer-fixed'\nconst CLASS_NAME_FOOTER_SM_FIXED = 'layout-sm-footer-fixed'\nconst CLASS_NAME_FOOTER_MD_FIXED = 'layout-md-footer-fixed'\nconst CLASS_NAME_FOOTER_LG_FIXED = 'layout-lg-footer-fixed'\nconst CLASS_NAME_FOOTER_XL_FIXED = 'layout-xl-footer-fixed'\n\nconst Default = {\n controlsidebarSlide: true,\n scrollbarTheme: 'os-theme-light',\n scrollbarAutoHide: 'l'\n}\n\n/**\n * Class Definition\n * ====================================================\n */\n\nclass ControlSidebar {\n constructor(element, config) {\n this._element = element\n this._config = config\n\n this._init()\n }\n\n // Public\n\n collapse() {\n const $body = $('body')\n const $html = $('html')\n\n // Show the control sidebar\n if (this._config.controlsidebarSlide) {\n $html.addClass(CLASS_NAME_CONTROL_SIDEBAR_ANIMATE)\n $body.removeClass(CLASS_NAME_CONTROL_SIDEBAR_SLIDE).delay(300).queue(function () {\n $(SELECTOR_CONTROL_SIDEBAR).hide()\n $html.removeClass(CLASS_NAME_CONTROL_SIDEBAR_ANIMATE)\n $(this).dequeue()\n })\n } else {\n $body.removeClass(CLASS_NAME_CONTROL_SIDEBAR_OPEN)\n }\n\n $(this._element).trigger($.Event(EVENT_COLLAPSED))\n }\n\n show() {\n const $body = $('body')\n const $html = $('html')\n\n // Collapse the control sidebar\n if (this._config.controlsidebarSlide) {\n $html.addClass(CLASS_NAME_CONTROL_SIDEBAR_ANIMATE)\n $(SELECTOR_CONTROL_SIDEBAR).show().delay(10).queue(function () {\n $body.addClass(CLASS_NAME_CONTROL_SIDEBAR_SLIDE).delay(300).queue(function () {\n $html.removeClass(CLASS_NAME_CONTROL_SIDEBAR_ANIMATE)\n $(this).dequeue()\n })\n $(this).dequeue()\n })\n } else {\n $body.addClass(CLASS_NAME_CONTROL_SIDEBAR_OPEN)\n }\n\n this._fixHeight()\n this._fixScrollHeight()\n\n $(this._element).trigger($.Event(EVENT_EXPANDED))\n }\n\n toggle() {\n const $body = $('body')\n const shouldClose = $body.hasClass(CLASS_NAME_CONTROL_SIDEBAR_OPEN) ||\n $body.hasClass(CLASS_NAME_CONTROL_SIDEBAR_SLIDE)\n\n if (shouldClose) {\n // Close the control sidebar\n this.collapse()\n } else {\n // Open the control sidebar\n this.show()\n }\n }\n\n // Private\n\n _init() {\n this._fixHeight()\n this._fixScrollHeight()\n\n $(window).resize(() => {\n this._fixHeight()\n this._fixScrollHeight()\n })\n\n $(window).scroll(() => {\n const $body = $('body')\n const shouldFixHeight = $body.hasClass(CLASS_NAME_CONTROL_SIDEBAR_OPEN) ||\n $body.hasClass(CLASS_NAME_CONTROL_SIDEBAR_SLIDE)\n\n if (shouldFixHeight) {\n this._fixScrollHeight()\n }\n })\n }\n\n _fixScrollHeight() {\n const $body = $('body')\n\n if (!$body.hasClass(CLASS_NAME_LAYOUT_FIXED)) {\n return\n }\n\n const heights = {\n scroll: $(document).height(),\n window: $(window).height(),\n header: $(SELECTOR_HEADER).outerHeight(),\n footer: $(SELECTOR_FOOTER).outerHeight()\n }\n const positions = {\n bottom: Math.abs((heights.window + $(window).scrollTop()) - heights.scroll),\n top: $(window).scrollTop()\n }\n\n const navbarFixed = (\n $body.hasClass(CLASS_NAME_NAVBAR_FIXED) ||\n $body.hasClass(CLASS_NAME_NAVBAR_SM_FIXED) ||\n $body.hasClass(CLASS_NAME_NAVBAR_MD_FIXED) ||\n $body.hasClass(CLASS_NAME_NAVBAR_LG_FIXED) ||\n $body.hasClass(CLASS_NAME_NAVBAR_XL_FIXED)\n ) && $(SELECTOR_HEADER).css('position') === 'fixed'\n\n const footerFixed = (\n $body.hasClass(CLASS_NAME_FOOTER_FIXED) ||\n $body.hasClass(CLASS_NAME_FOOTER_SM_FIXED) ||\n $body.hasClass(CLASS_NAME_FOOTER_MD_FIXED) ||\n $body.hasClass(CLASS_NAME_FOOTER_LG_FIXED) ||\n $body.hasClass(CLASS_NAME_FOOTER_XL_FIXED)\n ) && $(SELECTOR_FOOTER).css('position') === 'fixed'\n\n const $controlSidebar = $(SELECTOR_CONTROL_SIDEBAR)\n const $controlsidebarContent = $(`${SELECTOR_CONTROL_SIDEBAR}, ${SELECTOR_CONTROL_SIDEBAR} ${SELECTOR_CONTROL_SIDEBAR_CONTENT}`)\n\n if (positions.top === 0 && positions.bottom === 0) {\n $controlSidebar.css({\n bottom: heights.footer,\n top: heights.header\n })\n $controlsidebarContent.css('height', heights.window - (heights.header + heights.footer))\n } else if (positions.bottom <= heights.footer) {\n if (footerFixed === false) {\n const top = heights.header - positions.top\n $controlSidebar.css('bottom', heights.footer - positions.bottom).css('top', top >= 0 ? top : 0)\n $controlsidebarContent.css('height', heights.window - (heights.footer - positions.bottom))\n } else {\n $controlSidebar.css('bottom', heights.footer)\n }\n } else if (positions.top <= heights.header) {\n if (navbarFixed === false) {\n $controlSidebar.css('top', heights.header - positions.top)\n $controlsidebarContent.css('height', heights.window - (heights.header - positions.top))\n } else {\n $controlSidebar.css('top', heights.header)\n }\n } else if (navbarFixed === false) {\n $controlSidebar.css('top', 0)\n $controlsidebarContent.css('height', heights.window)\n } else {\n $controlSidebar.css('top', heights.header)\n }\n }\n\n _fixHeight() {\n const $body = $('body')\n\n if (!$body.hasClass(CLASS_NAME_LAYOUT_FIXED)) {\n return\n }\n\n const heights = {\n window: $(window).height(),\n header: $(SELECTOR_HEADER).outerHeight(),\n footer: $(SELECTOR_FOOTER).outerHeight()\n }\n\n let sidebarHeight = heights.window - heights.header\n\n if (\n $body.hasClass(CLASS_NAME_FOOTER_FIXED) ||\n $body.hasClass(CLASS_NAME_FOOTER_SM_FIXED) ||\n $body.hasClass(CLASS_NAME_FOOTER_MD_FIXED) ||\n $body.hasClass(CLASS_NAME_FOOTER_LG_FIXED) ||\n $body.hasClass(CLASS_NAME_FOOTER_XL_FIXED)\n ) {\n if ($(SELECTOR_FOOTER).css('position') === 'fixed') {\n sidebarHeight = heights.window - heights.header - heights.footer\n }\n }\n\n const $controlSidebar = $(`${SELECTOR_CONTROL_SIDEBAR} ${SELECTOR_CONTROL_SIDEBAR_CONTENT}`)\n $controlSidebar.css('height', sidebarHeight)\n\n if (typeof $.fn.overlayScrollbars !== 'undefined') {\n $controlSidebar.overlayScrollbars({\n className: this._config.scrollbarTheme,\n sizeAutoCapable: true,\n scrollbars: {\n autoHide: this._config.scrollbarAutoHide,\n clickScrolling: true\n }\n })\n }\n }\n\n // Static\n\n static _jQueryInterface(operation) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _options = $.extend({}, Default, $(this).data())\n\n if (!data) {\n data = new ControlSidebar(this, _options)\n $(this).data(DATA_KEY, data)\n }\n\n if (data[operation] === 'undefined') {\n throw new Error(`${operation} is not a function`)\n }\n\n data[operation]()\n })\n }\n}\n\n/**\n *\n * Data Api implementation\n * ====================================================\n */\n$(document).on('click', SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n\n ControlSidebar._jQueryInterface.call($(this), 'toggle')\n})\n\n/**\n * jQuery API\n * ====================================================\n */\n\n$.fn[NAME] = ControlSidebar._jQueryInterface\n$.fn[NAME].Constructor = ControlSidebar\n$.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return ControlSidebar._jQueryInterface\n}\n\nexport default ControlSidebar\n","/**\n * --------------------------------------------\n * AdminLTE DirectChat.js\n * License MIT\n * --------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * Constants\n * ====================================================\n */\n\nconst NAME = 'DirectChat'\nconst DATA_KEY = 'lte.directchat'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst EVENT_TOGGLED = `toggled${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-widget=\"chat-pane-toggle\"]'\nconst SELECTOR_DIRECT_CHAT = '.direct-chat'\n\nconst CLASS_NAME_DIRECT_CHAT_OPEN = 'direct-chat-contacts-open'\n\n/**\n * Class Definition\n * ====================================================\n */\n\nclass DirectChat {\n constructor(element) {\n this._element = element\n }\n\n toggle() {\n $(this._element).parents(SELECTOR_DIRECT_CHAT).first().toggleClass(CLASS_NAME_DIRECT_CHAT_OPEN)\n $(this._element).trigger($.Event(EVENT_TOGGLED))\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n\n if (!data) {\n data = new DirectChat($(this))\n $(this).data(DATA_KEY, data)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n *\n * Data Api implementation\n * ====================================================\n */\n\n$(document).on('click', SELECTOR_DATA_TOGGLE, function (event) {\n if (event) {\n event.preventDefault()\n }\n\n DirectChat._jQueryInterface.call($(this), 'toggle')\n})\n\n/**\n * jQuery API\n * ====================================================\n */\n\n$.fn[NAME] = DirectChat._jQueryInterface\n$.fn[NAME].Constructor = DirectChat\n$.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return DirectChat._jQueryInterface\n}\n\nexport default DirectChat\n","/**\n * --------------------------------------------\n * AdminLTE Dropdown.js\n * License MIT\n * --------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * Constants\n * ====================================================\n */\n\nconst NAME = 'Dropdown'\nconst DATA_KEY = 'lte.dropdown'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst SELECTOR_NAVBAR = '.navbar'\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu'\nconst SELECTOR_DROPDOWN_MENU_ACTIVE = '.dropdown-menu.show'\nconst SELECTOR_DROPDOWN_TOGGLE = '[data-toggle=\"dropdown\"]'\n\nconst CLASS_NAME_DROPDOWN_RIGHT = 'dropdown-menu-right'\nconst CLASS_NAME_DROPDOWN_SUBMENU = 'dropdown-submenu'\n\n// TODO: this is unused; should be removed along with the extend?\nconst Default = {\n}\n\n/**\n * Class Definition\n * ====================================================\n */\n\nclass Dropdown {\n constructor(element, config) {\n this._config = config\n this._element = element\n }\n\n // Public\n\n toggleSubmenu() {\n this._element.siblings().show().toggleClass('show')\n\n if (!this._element.next().hasClass('show')) {\n this._element.parents(SELECTOR_DROPDOWN_MENU).first().find('.show').removeClass('show').hide()\n }\n\n this._element.parents('li.nav-item.dropdown.show').on('hidden.bs.dropdown', () => {\n $('.dropdown-submenu .show').removeClass('show').hide()\n })\n }\n\n fixPosition() {\n const $element = $(SELECTOR_DROPDOWN_MENU_ACTIVE)\n\n if ($element.length === 0) {\n return\n }\n\n if ($element.hasClass(CLASS_NAME_DROPDOWN_RIGHT)) {\n $element.css({\n left: 'inherit',\n right: 0\n })\n } else {\n $element.css({\n left: 0,\n right: 'inherit'\n })\n }\n\n const offset = $element.offset()\n const width = $element.width()\n const visiblePart = $(window).width() - offset.left\n\n if (offset.left < 0) {\n $element.css({\n left: 'inherit',\n right: offset.left - 5\n })\n } else if (visiblePart < width) {\n $element.css({\n left: 'inherit',\n right: 0\n })\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = $.extend({}, Default, $(this).data())\n\n if (!data) {\n data = new Dropdown($(this), _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (config === 'toggleSubmenu' || config === 'fixPosition') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API\n * ====================================================\n */\n\n$(`${SELECTOR_DROPDOWN_MENU} ${SELECTOR_DROPDOWN_TOGGLE}`).on('click', function (event) {\n event.preventDefault()\n event.stopPropagation()\n\n Dropdown._jQueryInterface.call($(this), 'toggleSubmenu')\n})\n\n$(`${SELECTOR_NAVBAR} ${SELECTOR_DROPDOWN_TOGGLE}`).on('click', event => {\n event.preventDefault()\n\n if ($(event.target).parent().hasClass(CLASS_NAME_DROPDOWN_SUBMENU)) {\n return\n }\n\n setTimeout(function () {\n Dropdown._jQueryInterface.call($(this), 'fixPosition')\n }, 1)\n})\n\n/**\n * jQuery API\n * ====================================================\n */\n\n$.fn[NAME] = Dropdown._jQueryInterface\n$.fn[NAME].Constructor = Dropdown\n$.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Dropdown._jQueryInterface\n}\n\nexport default Dropdown\n","/**\n * --------------------------------------------\n * AdminLTE ExpandableTable.js\n * License MIT\n * --------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * Constants\n * ====================================================\n */\n\nconst NAME = 'ExpandableTable'\nconst DATA_KEY = 'lte.expandableTable'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst EVENT_EXPANDED = `expanded${EVENT_KEY}`\nconst EVENT_COLLAPSED = `collapsed${EVENT_KEY}`\n\nconst SELECTOR_TABLE = '.expandable-table'\nconst SELECTOR_DATA_TOGGLE = '[data-widget=\"expandable-table\"]'\nconst SELECTOR_ARIA_ATTR = 'aria-expanded'\n\n/**\n * Class Definition\n * ====================================================\n */\nclass ExpandableTable {\n constructor(element, options) {\n this._options = options\n this._element = element\n }\n\n // Public\n\n init() {\n $(SELECTOR_DATA_TOGGLE).each((_, $header) => {\n const $type = $($header).attr(SELECTOR_ARIA_ATTR)\n const $body = $($header).next().children().first().children()\n if ($type === 'true') {\n $body.show()\n } else if ($type === 'false') {\n $body.hide()\n $body.parent().parent().addClass('d-none')\n }\n })\n }\n\n toggleRow() {\n const $element = this._element\n const time = 500\n const $type = $element.attr(SELECTOR_ARIA_ATTR)\n const $body = $element.next().children().first().children()\n\n $body.stop()\n if ($type === 'true') {\n $body.slideUp(time, () => {\n $element.next().addClass('d-none')\n })\n $element.attr(SELECTOR_ARIA_ATTR, 'false')\n $element.trigger($.Event(EVENT_COLLAPSED))\n } else if ($type === 'false') {\n $element.next().removeClass('d-none')\n $body.slideDown(time)\n $element.attr(SELECTOR_ARIA_ATTR, 'true')\n $element.trigger($.Event(EVENT_EXPANDED))\n }\n }\n\n // Static\n\n static _jQueryInterface(operation) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n\n if (!data) {\n data = new ExpandableTable($(this))\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof operation === 'string' && operation.match(/init|toggleRow/)) {\n data[operation]()\n }\n })\n }\n}\n\n/**\n * Data API\n * ====================================================\n */\n$(SELECTOR_TABLE).ready(function () {\n ExpandableTable._jQueryInterface.call($(this), 'init')\n})\n\n$(document).on('click', SELECTOR_DATA_TOGGLE, function () {\n ExpandableTable._jQueryInterface.call($(this), 'toggleRow')\n})\n\n/**\n * jQuery API\n * ====================================================\n */\n\n$.fn[NAME] = ExpandableTable._jQueryInterface\n$.fn[NAME].Constructor = ExpandableTable\n$.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return ExpandableTable._jQueryInterface\n}\n\nexport default ExpandableTable\n","/**\n * --------------------------------------------\n * AdminLTE Fullscreen.js\n * License MIT\n * --------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * Constants\n * ====================================================\n */\n\nconst NAME = 'Fullscreen'\nconst DATA_KEY = 'lte.fullscreen'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst SELECTOR_DATA_WIDGET = '[data-widget=\"fullscreen\"]'\nconst SELECTOR_ICON = `${SELECTOR_DATA_WIDGET} i`\n\nconst Default = {\n minimizeIcon: 'fa-compress-arrows-alt',\n maximizeIcon: 'fa-expand-arrows-alt'\n}\n\n/**\n * Class Definition\n * ====================================================\n */\n\nclass Fullscreen {\n constructor(_element, _options) {\n this.element = _element\n this.options = $.extend({}, Default, _options)\n }\n\n // Public\n\n toggle() {\n if (document.fullscreenElement ||\n document.mozFullScreenElement ||\n document.webkitFullscreenElement ||\n document.msFullscreenElement) {\n this.windowed()\n } else {\n this.fullscreen()\n }\n }\n\n fullscreen() {\n if (document.documentElement.requestFullscreen) {\n document.documentElement.requestFullscreen()\n } else if (document.documentElement.webkitRequestFullscreen) {\n document.documentElement.webkitRequestFullscreen()\n } else if (document.documentElement.msRequestFullscreen) {\n document.documentElement.msRequestFullscreen()\n }\n\n $(SELECTOR_ICON).removeClass(this.options.maximizeIcon).addClass(this.options.minimizeIcon)\n }\n\n windowed() {\n if (document.exitFullscreen) {\n document.exitFullscreen()\n } else if (document.webkitExitFullscreen) {\n document.webkitExitFullscreen()\n } else if (document.msExitFullscreen) {\n document.msExitFullscreen()\n }\n\n $(SELECTOR_ICON).removeClass(this.options.minimizeIcon).addClass(this.options.maximizeIcon)\n }\n\n // Static\n\n static _jQueryInterface(config) {\n let data = $(this).data(DATA_KEY)\n\n if (!data) {\n data = $(this).data()\n }\n\n const _options = $.extend({}, Default, typeof config === 'object' ? config : data)\n const plugin = new Fullscreen($(this), _options)\n\n $(this).data(DATA_KEY, typeof config === 'object' ? config : data)\n\n if (typeof config === 'string' && config.match(/toggle|fullscreen|windowed/)) {\n plugin[config]()\n } else {\n plugin.init()\n }\n }\n}\n\n/**\n * Data API\n * ====================================================\n */\n$(document).on('click', SELECTOR_DATA_WIDGET, function () {\n Fullscreen._jQueryInterface.call($(this), 'toggle')\n})\n\n/**\n * jQuery API\n * ====================================================\n */\n\n$.fn[NAME] = Fullscreen._jQueryInterface\n$.fn[NAME].Constructor = Fullscreen\n$.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Fullscreen._jQueryInterface\n}\n\nexport default Fullscreen\n","/**\n * --------------------------------------------\n * AdminLTE IFrame.js\n * License MIT\n * --------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * Constants\n * ====================================================\n */\n\nconst NAME = 'IFrame'\nconst DATA_KEY = 'lte.iframe'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst SELECTOR_DATA_TOGGLE = '[data-widget=\"iframe\"]'\nconst SELECTOR_DATA_TOGGLE_CLOSE = '[data-widget=\"iframe-close\"]'\nconst SELECTOR_DATA_TOGGLE_SCROLL_LEFT = '[data-widget=\"iframe-scrollleft\"]'\nconst SELECTOR_DATA_TOGGLE_SCROLL_RIGHT = '[data-widget=\"iframe-scrollright\"]'\nconst SELECTOR_DATA_TOGGLE_FULLSCREEN = '[data-widget=\"iframe-fullscreen\"]'\nconst SELECTOR_CONTENT_WRAPPER = '.content-wrapper'\nconst SELECTOR_CONTENT_IFRAME = `${SELECTOR_CONTENT_WRAPPER} iframe`\nconst SELECTOR_TAB_NAV = `${SELECTOR_DATA_TOGGLE}.iframe-mode .nav`\nconst SELECTOR_TAB_NAVBAR_NAV = `${SELECTOR_DATA_TOGGLE}.iframe-mode .navbar-nav`\nconst SELECTOR_TAB_NAVBAR_NAV_ITEM = `${SELECTOR_TAB_NAVBAR_NAV} .nav-item`\nconst SELECTOR_TAB_CONTENT = `${SELECTOR_DATA_TOGGLE}.iframe-mode .tab-content`\nconst SELECTOR_TAB_EMPTY = `${SELECTOR_TAB_CONTENT} .tab-empty`\nconst SELECTOR_TAB_LOADING = `${SELECTOR_TAB_CONTENT} .tab-loading`\nconst SELECTOR_SIDEBAR_MENU_ITEM = '.main-sidebar .nav-item > a.nav-link'\nconst SELECTOR_HEADER_MENU_ITEM = '.main-header .nav-item a.nav-link'\nconst SELECTOR_HEADER_DROPDOWN_ITEM = '.main-header a.dropdown-item'\nconst CLASS_NAME_IFRAME_MODE = 'iframe-mode'\nconst CLASS_NAME_FULLSCREEN_MODE = 'iframe-mode-fullscreen'\n\nconst Default = {\n onTabClick(item) {\n return item\n },\n onTabChanged(item) {\n return item\n },\n onTabCreated(item) {\n return item\n },\n autoIframeMode: true,\n autoItemActive: true,\n autoShowNewTab: true,\n loadingScreen: true,\n useNavbarItems: true,\n scrollOffset: 40,\n scrollBehaviorSwap: false,\n iconMaximize: 'fa-expand',\n iconMinimize: 'fa-compress'\n}\n\n/**\n * Class Definition\n * ====================================================\n */\n\nclass IFrame {\n constructor(element, config) {\n this._config = config\n this._element = element\n\n this._init()\n }\n\n // Public\n\n onTabClick(item) {\n this._config.onTabClick(item)\n }\n\n onTabChanged(item) {\n this._config.onTabChanged(item)\n }\n\n onTabCreated(item) {\n this._config.onTabCreated(item)\n }\n\n createTab(title, link, uniqueName, autoOpen) {\n const tabId = `panel-${uniqueName}-${Math.floor(Math.random() * 1000)}`\n const navId = `tab-${uniqueName}-${Math.floor(Math.random() * 1000)}`\n\n const newNavItem = `