From b63b00f30cf3478e9d65c507943f7b74738ae1c6 Mon Sep 17 00:00:00 2001 From: jokob-sk Date: Sun, 22 Dec 2024 11:24:44 +1100 Subject: [PATCH] Revert DataTable upgrade, new default docker-compose, performance tip --- docker-compose.yml | 10 +- dockerfiles/README.md | 5 + docs/PERFORMANCE.md | 28 + front/appEventsCore.php | 2 + front/deviceDetails.php | 376 +- front/deviceDetailsEvents.php | 94 + front/deviceDetailsPresence.php | 244 + front/deviceDetailsSessions.php | 81 + front/devices.php | 2 + front/events.php | 2 + front/lib/AdminLTE/dist/css/LICENSE | 20 + front/lib/AdminLTE/dist/js/adminlte.js.map | 1 + .../lib/AdminLTE/dist/js/adminlte.min.js.map | 1 + front/lib/datatables.net-bs/.bower.json | 48 + front/lib/datatables.net-bs/License.txt | 20 + front/lib/datatables.net-bs/Readme.md | 50 + front/lib/datatables.net-bs/bower.json | 38 + .../css/dataTables.bootstrap.css | 184 + .../css/dataTables.bootstrap.min.css | 1 + .../js/dataTables.bootstrap.js | 182 + .../js/dataTables.bootstrap.min.js | 8 + front/lib/datatables.net/.bower.json | 46 + front/lib/datatables.net/License.txt | 20 + front/lib/datatables.net/Readme.md | 50 + front/lib/datatables.net/bower.json | 36 + .../css/select.dataTables.min.css | 1 + .../js/dataTables.select.min.js | 38 + .../datatables.net/js/jquery.dataTables.js | 15296 ++++++++++++++++ .../js/jquery.dataTables.min.js | 166 + front/lib/datatables/README_test.txt | 1 + front/maintenance.php | 4 + front/network.php | 3 + front/php/templates/header.php | 17 +- front/pluginsCore.php | 3 +- front/presence.php | 3 - front/settings.php | 3 +- front/systeminfo.php | 3 + front/userNotifications.php | 3 + front/workflows.php | 3 +- log/.gitignore | 0 log/plugins/.gitignore | 0 41 files changed, 16736 insertions(+), 357 deletions(-) create mode 100755 front/deviceDetailsEvents.php create mode 100755 front/deviceDetailsPresence.php create mode 100755 front/deviceDetailsSessions.php create mode 100755 front/lib/AdminLTE/dist/css/LICENSE create mode 100755 front/lib/AdminLTE/dist/js/adminlte.js.map create mode 100755 front/lib/AdminLTE/dist/js/adminlte.min.js.map create mode 100755 front/lib/datatables.net-bs/.bower.json create mode 100755 front/lib/datatables.net-bs/License.txt create mode 100755 front/lib/datatables.net-bs/Readme.md create mode 100755 front/lib/datatables.net-bs/bower.json create mode 100755 front/lib/datatables.net-bs/css/dataTables.bootstrap.css create mode 100755 front/lib/datatables.net-bs/css/dataTables.bootstrap.min.css create mode 100755 front/lib/datatables.net-bs/js/dataTables.bootstrap.js create mode 100755 front/lib/datatables.net-bs/js/dataTables.bootstrap.min.js create mode 100755 front/lib/datatables.net/.bower.json create mode 100755 front/lib/datatables.net/License.txt create mode 100755 front/lib/datatables.net/Readme.md create mode 100755 front/lib/datatables.net/bower.json create mode 100755 front/lib/datatables.net/css/select.dataTables.min.css create mode 100755 front/lib/datatables.net/js/dataTables.select.min.js create mode 100755 front/lib/datatables.net/js/jquery.dataTables.js create mode 100755 front/lib/datatables.net/js/jquery.dataTables.min.js create mode 100755 front/lib/datatables/README_test.txt mode change 100755 => 100644 log/.gitignore mode change 100755 => 100644 log/plugins/.gitignore diff --git a/docker-compose.yml b/docker-compose.yml index 351e9c7f..23a483a2 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,6 +17,11 @@ services: - ${APP_DATA_LOCATION}/netalertx/db:/app/db # (optional) useful for debugging if you have issues setting up the container - ${DEV_LOCATION}/log:/app/log + # (API: OPTION 1) use for performance + - type: tmpfs + target: /app/api + # (API: OPTION 2) use when debugging issues + # - ${DEV_LOCATION}/api:/app/api # --------------------------------------------------------------------------- # DELETE START anyone trying to use this file: comment out / delete BELOW lines, they are only for development purposes - ${APP_DATA_LOCATION}/netalertx/dhcp_samples/dhcp1.leases:/mnt/dhcp1.leases @@ -39,12 +44,15 @@ services: - ${DEV_LOCATION}/install/user-mapping.debian.sh:/app/install/user-mapping.debian.sh - ${DEV_LOCATION}/install/install.debian.sh:/app/install/install.debian.sh - ${DEV_LOCATION}/install/install_dependencies.debian.sh:/app/install/install_dependencies.debian.sh - - ${DEV_LOCATION}/api:/app/api + - ${DEV_LOCATION}/front/php:/app/front/php - ${DEV_LOCATION}/front/deviceDetails.php:/app/front/deviceDetails.php - ${DEV_LOCATION}/front/deviceDetailsEdit.php:/app/front/deviceDetailsEdit.php - ${DEV_LOCATION}/front/userNotifications.php:/app/front/userNotifications.php - ${DEV_LOCATION}/front/deviceDetailsTools.php:/app/front/deviceDetailsTools.php + - ${DEV_LOCATION}/front/deviceDetailsPresence.php:/app/front/deviceDetailsPresence.php + - ${DEV_LOCATION}/front/deviceDetailsSessions.php:/app/front/deviceDetailsSessions.php + - ${DEV_LOCATION}/front/deviceDetailsEvents.php:/app/front/deviceDetailsEvents.php - ${DEV_LOCATION}/front/devices.php:/app/front/devices.php - ${DEV_LOCATION}/front/events.php:/app/front/events.php - ${DEV_LOCATION}/front/plugins.php:/app/front/plugins.php diff --git a/dockerfiles/README.md b/dockerfiles/README.md index e9b878ff..fa6ffb07 100755 --- a/dockerfiles/README.md +++ b/dockerfiles/README.md @@ -130,6 +130,11 @@ services: - local/path/db:/app/db # (optional) useful for debugging if you have issues setting up the container - local/path/logs:/app/log + # (API: OPTION 1) use for performance + - type: tmpfs + target: /app/api + # (API: OPTION 2) use when debugging issues + # - local/path/api:/app/api environment: - TZ=Europe/Berlin - PORT=20211 diff --git a/docs/PERFORMANCE.md b/docs/PERFORMANCE.md index a3e749de..ffe43179 100755 --- a/docs/PERFORMANCE.md +++ b/docs/PERFORMANCE.md @@ -29,3 +29,31 @@ The more often you scan the networks the more resources, traffic and DB read/wri Also consider decreasing the scanned subnet, e.g. from `/16` to `/24` if need be. +# Store temporary files in memory + +You can also store temporary files in application memory (`/app/api` and `/app/log` folders). + +```yaml +version: "3" +services: + netalertx: + container_name: netalertx + # use the below line if you want to test the latest dev image + # image: "jokobsk/netalertx-dev:latest" + image: "jokobsk/netalertx:latest" + network_mode: "host" + restart: unless-stopped + volumes: + - local/path/config:/app/config + - local/path/db:/app/db + # (optional) useful for debugging if you have issues setting up the container + - local/path/logs:/app/log + # (API: OPTION 1) use for performance + - type: tmpfs + target: /app/api + # (API: OPTION 2) use when debugging issues + # - local/path/api:/app/api + environment: + - TZ=Europe/Berlin + - PORT=20211 +``` diff --git a/front/appEventsCore.php b/front/appEventsCore.php index 107c7fd8..1d3956c2 100755 --- a/front/appEventsCore.php +++ b/front/appEventsCore.php @@ -9,6 +9,8 @@ + + - - - - @@ -221,18 +192,10 @@ switch ($UI_THEME) { mac = getMac() // can also be rowID!! not only mac var devicesList = []; // this will contain a list the database row IDs of the devices ordered by the position displayed in the UI - var pos = -1; var parPeriod = 'Front_Details_Period'; - var parSessionsRows = 'Front_Details_Sessions_Rows'; - var parEventsRows = 'Front_Details_Events_Rows'; - var parEventsHide = 'Front_Details_Events_Hide'; - var period = '1 month'; + var tab = 'tabDetails' - var sessionsRows = 10; - var eventsRows = 10; - var eventsHide = true; - var skipRepeatedItems = ['0 h (notify all events)', '1 h', '8 h', '24 h', '168 h (one week)']; var selectedTab = 'tabDetails'; var emptyArr = ['undefined', "", undefined, null]; @@ -271,22 +234,15 @@ function main () { $('#chkHideConnectionEvents')[0].checked = eval(eventsHide == 'true'); // Initialize components with parameters - initializeTabs(); - initializeDatatables(); - initializeCalendar(); + - // query data - - getSessionsPresenceEvents(); - - // Force re-render calendar on tab change - // (bugfix for render error at left panel) - $(document).on('shown.bs.tab', 'a[data-toggle="tab"]', function (nav) { - if ($(nav.target).attr('href') == '#panPresence') { - $('#calendar').fullCalendar('rerenderEvents'); - } + // Init tabs once DOM ready + $( document ).ready(function() { + initializeTabs(); }); + + // Events tab toggle conenction events $('input').on('ifToggled', function(event){ @@ -307,205 +263,11 @@ function main () { } - -// ----------------------------------------------------------------------------- -function initializeDatatables () { - // Sessions datatable - $('#tableSessions').DataTable({ - 'paging' : true, - 'lengthChange': true, - 'lengthMenu' : [[10, 25, 50, 100, 500, -1], [10, 25, 50, 100, 500, 'All']], - 'searching' : true, - 'ordering' : true, - 'info' : true, - 'autoWidth' : false, - 'order' : [[0,'desc'], [1,'desc']], - - // Parameters - 'pageLength' : sessionsRows, - - 'columnDefs' : [ - {visible: false, targets: [0]}, - - // Replace HTML codes - {targets: [1,2,3,5], - 'createdCell': function (td, cellData, rowData, row, col) { - $(td).html (translateHTMLcodes (cellData)); - } } - ], - - // Processing - 'processing' : true, - 'language' : { - processing: ''+ - '
'+ - '
', - emptyTable: 'No data', - "lengthMenu": "", - "search": ": ", - "paginate": { - "next": "", - "previous": "" - }, - "info": "", - } - }); - - // Events datatable - $('#tableEvents').DataTable({ - 'paging' : true, - 'lengthChange': true, - 'lengthMenu' : [[10, 25, 50, 100, 500, -1], [10, 25, 50, 100, 500, 'All']], - 'searching' : true, - 'ordering' : true, - 'info' : true, - 'autoWidth' : false, - 'order' : [[0,'desc']], - - // Parameters - 'pageLength' : eventsRows, - - 'columnDefs' : [ - // Replace HTML codes - {targets: [0], - 'createdCell': function (td, cellData, rowData, row, col) { - $(td).html (translateHTMLcodes (cellData)); - } } - ], - - // Processing - 'processing' : true, - 'language' : { - processing: ''+ - '
'+ - '
', - emptyTable: 'No data', - "lengthMenu": "", - "search": ": ", - "paginate": { - "next": "", - "previous": "" - }, - "info": "", - } - }); -}; - - -// ----------------------------------------------------------------------------- -function initializeCalendar () { - $('#calendar').fullCalendar({ - editable : false, - droppable : false, - defaultView : 'agendaMonth', - - height : 'auto', - firstDay : 1, - allDaySlot : false, - slotDuration : '02:00:00', - slotLabelInterval : '04:00:00', - slotLabelFormat : 'H:mm', - timeFormat : 'H:mm', - locale : '', - header: { - left : 'prev,next today', - center : 'title', - right : 'agendaYear,agendaMonth,agendaWeek' - }, - - views: { - agendaYear: { - type : 'agenda', - duration : { year: 1 }, - buttonText : '', - columnHeaderFormat : '' - }, - - agendaMonth: { - type : 'agenda', - duration : { month: 1 }, - buttonText : '', - columnHeaderFormat : 'D' - }, - agendaWeek: { - buttonText : '', - }, - agendaDay: { - type : 'agenda', - duration : { day: 1 }, - buttonText : '', - slotLabelFormat : 'H', - slotDuration : '01:00:00' - } - }, - - viewRender: function(view) { - if (view.name === 'agendaYear') { - var listHeader = $('.fc-day-header')[0]; - var listContent = $('.fc-widget-content')[0]; - - for (i=0; i < listHeader.length-2 ; i++) { - listHeader[i].style.borderColor = 'transparent'; - listContent[i+2].style.borderColor = 'transparent'; - - if (listHeader[i].innerHTML != '') { - if (i==0) { - listHeader[i].style.borderLeftColor = '#808080'; - } else { - listHeader[i-1].style.borderRightColor = '#808080'; - listContent[i+1].style.borderRightColor = '#808080'; - } - listHeader[i].style.paddingLeft = '10px'; - } - }; - } - }, - - columnHeaderText: function(mom) { - switch ($('#calendar').fullCalendar('getView').name) { - case 'agendaYear': - if (mom.date() == 1) { - return mom.format('MMM'); - } else { - return ''; - } - break; - case 'agendaMonth': - return mom.date(); - break; - case 'agendaWeek': - return mom.format ('ddd D'); - break; - default: - return mom.date(); - } - }, - - eventRender: function (event, element) { - $(element).tooltip({container: 'body', placement: 'bottom', - title: event.tooltip}); - // element.attr ('title', event.tooltip); // Alternative tooltip - }, - - loading: function( isLoading, view ) { - if (isLoading) { - showSpinner() - } else { - // setTimeout(() => { - // updateIconPreview($('#txtIcon')) - // }, 500); - - hideSpinner() - } - } - - }) -} - - // ----------------------------------------------------------------------------- function periodChanged () { - getSessionsPresenceEvents(); + loadSessionsData(); + loadPresenceData(); + loadEventsData(); } @@ -555,33 +317,6 @@ function performSwitch(direction) } -// ----------------------------------------------------------------------------- -function getSessionsPresenceEvents () { - // Check MAC in url - var urlParams = new URLSearchParams(window.location.search); - mac = urlParams.get ('mac'); - // Define Sessions datasource and query dada - $('#tableSessions').DataTable().ajax.url('php/server/events.php?action=getDeviceSessions&mac=' + mac +'&period='+ period).load(); - - // Define Presence datasource and query data - $('#calendar').fullCalendar('removeEventSources'); - $('#calendar').fullCalendar('addEventSource', - { url: 'php/server/events.php?action=getDevicePresence&mac=' + mac}); - - // Query events - getDeviceEvents(); -} - - -// ----------------------------------------------------------------------------- -function getDeviceEvents () { - // Define Events datasource and query dada - hideConnections = $('#chkHideConnectionEvents')[0].checked; - $('#tableEvents').DataTable().ajax.url( - 'php/server/events.php?action=getDeviceEvents&mac=' + mac +'&period='+ period +'&hideConnections='+ hideConnections).load(); -} - - // ----------------------------------------------------------------------------- // Activate save & restore on any value change $(document).on('input', 'input:text', function() { @@ -601,7 +336,10 @@ function initializeTabs () { { selectedTab = getCache(key); } + $('.nav-tabs a[id='+ selectedTab +']').tab('show'); + // $('.nav-tabs a[id='+ selectedTab +']').parent().click(); + // $('.nav-tabs a[id="tabPlugins"]').tab('show'); // When changed save new current tab $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) { @@ -620,62 +358,10 @@ function initializeTabs () { } -//----------------------------------------------------------------------------------- - -function initTable(tableId, mac){ - - // clear table - $("#"+tableId+" tbody").remove(); - - // Events datatable - $('#'+tableId).DataTable({ - 'paging' : true, - 'lengthChange': true, - 'lengthMenu' : [[10, 25, 50, 100, 500, -1], [10, 25, 50, 100, 500, 'All']], - 'searching' : true, - 'ordering' : true, - 'info' : true, - 'autoWidth' : false, - 'order' : [[0,'desc']], - - // Parameters - 'pageLength' : 50, - - 'columnDefs' : [ - // Replace HTML codes - {targets: [0], - 'createdCell': function (td, cellData, rowData, row, col) { - $(td).html (translateHTMLcodes (cellData)); - } } - ], - - // Processing - 'processing' : true, - 'language' : { - processing: ''+ - '
'+ - '
', - emptyTable: 'No data', - "lengthMenu": "", - "search": ": ", - "paginate": { - "next": "", - "previous": "" - }, - "info": "", - } - }); - - $("#"+tableId).attr("data-mac", mac) - -} - - //------------------------------------------------------------------------------ // Render the small boxes on top async function renderSmallBoxes() { - - + try { // Show loading dialog showSpinner(); diff --git a/front/deviceDetailsEvents.php b/front/deviceDetailsEvents.php new file mode 100755 index 00000000..d96620c6 --- /dev/null +++ b/front/deviceDetailsEvents.php @@ -0,0 +1,94 @@ + + + + + +
+ +
+ + + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/front/deviceDetailsPresence.php b/front/deviceDetailsPresence.php new file mode 100755 index 00000000..ea9f66c4 --- /dev/null +++ b/front/deviceDetailsPresence.php @@ -0,0 +1,244 @@ + + + + + + + + + + + + + + + + +
+
+ + + \ No newline at end of file diff --git a/front/deviceDetailsSessions.php b/front/deviceDetailsSessions.php new file mode 100755 index 00000000..7bc76ebf --- /dev/null +++ b/front/deviceDetailsSessions.php @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/front/devices.php b/front/devices.php index 19f41b4d..88711217 100755 --- a/front/devices.php +++ b/front/devices.php @@ -22,6 +22,8 @@ checkPermissions([$dbPath, $confPath]); ?> + +
diff --git a/front/events.php b/front/events.php index cb0fff0a..eba002b6 100755 --- a/front/events.php +++ b/front/events.php @@ -16,6 +16,8 @@ require 'php/templates/header.php'; ?> + +
diff --git a/front/lib/AdminLTE/dist/css/LICENSE b/front/lib/AdminLTE/dist/css/LICENSE new file mode 100755 index 00000000..84931a39 --- /dev/null +++ b/front/lib/AdminLTE/dist/css/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2014-2023 ColorlibHQ + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/front/lib/AdminLTE/dist/js/adminlte.js.map b/front/lib/AdminLTE/dist/js/adminlte.js.map new file mode 100755 index 00000000..8d7866d0 --- /dev/null +++ b/front/lib/AdminLTE/dist/js/adminlte.js.map @@ -0,0 +1 @@ +{"version":3,"file":"adminlte.js","sources":["../../src/ts/util/index.ts","../../src/ts/layout.ts","../../src/ts/push-menu.ts","../../src/ts/treeview.ts","../../src/ts/direct-chat.ts","../../src/ts/card-widget.ts","../../src/ts/fullscreen.ts"],"sourcesContent":["const domContentLoadedCallbacks: Array<() => void> = []\n\nconst onDOMContentLoaded = (callback: () => void): void => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!domContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of domContentLoadedCallbacks) {\n callback()\n }\n })\n }\n\n domContentLoadedCallbacks.push(callback)\n } else {\n callback()\n }\n}\n\n/* SLIDE UP */\nconst slideUp = (target: HTMLElement, duration = 500) => {\n target.style.transitionProperty = 'height, margin, padding'\n target.style.transitionDuration = `${duration}ms`\n target.style.boxSizing = 'border-box'\n target.style.height = `${target.offsetHeight}px`\n target.style.overflow = 'hidden'\n\n window.setTimeout(() => {\n target.style.height = '0'\n target.style.paddingTop = '0'\n target.style.paddingBottom = '0'\n target.style.marginTop = '0'\n target.style.marginBottom = '0'\n }, 1)\n\n window.setTimeout(() => {\n target.style.display = 'none'\n target.style.removeProperty('height')\n target.style.removeProperty('padding-top')\n target.style.removeProperty('padding-bottom')\n target.style.removeProperty('margin-top')\n target.style.removeProperty('margin-bottom')\n target.style.removeProperty('overflow')\n target.style.removeProperty('transition-duration')\n target.style.removeProperty('transition-property')\n }, duration)\n}\n\n/* SLIDE DOWN */\nconst slideDown = (target: HTMLElement, duration = 500) => {\n target.style.removeProperty('display')\n let { display } = window.getComputedStyle(target)\n\n if (display === 'none') {\n display = 'block'\n }\n\n target.style.display = display\n const height = target.offsetHeight\n target.style.overflow = 'hidden'\n target.style.height = '0'\n target.style.paddingTop = '0'\n target.style.paddingBottom = '0'\n target.style.marginTop = '0'\n target.style.marginBottom = '0'\n\n window.setTimeout(() => {\n target.style.boxSizing = 'border-box'\n target.style.transitionProperty = 'height, margin, padding'\n target.style.transitionDuration = `${duration}ms`\n target.style.height = `${height}px`\n target.style.removeProperty('padding-top')\n target.style.removeProperty('padding-bottom')\n target.style.removeProperty('margin-top')\n target.style.removeProperty('margin-bottom')\n }, 1)\n\n window.setTimeout(() => {\n target.style.removeProperty('height')\n target.style.removeProperty('overflow')\n target.style.removeProperty('transition-duration')\n target.style.removeProperty('transition-property')\n }, duration)\n}\n\n/* TOGGLE */\nconst slideToggle = (target: HTMLElement, duration = 500) => {\n if (window.getComputedStyle(target).display === 'none') {\n slideDown(target, duration)\n return\n }\n\n slideUp(target, duration)\n}\n\nexport {\n onDOMContentLoaded,\n slideUp,\n slideDown,\n slideToggle\n}\n","/**\n * --------------------------------------------\n * @file AdminLTE layout.ts\n * @description Layout for AdminLTE.\n * @license MIT\n * --------------------------------------------\n */\n\nimport {\n onDOMContentLoaded\n} from './util/index'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst CLASS_NAME_HOLD_TRANSITIONS = 'hold-transition'\nconst CLASS_NAME_APP_LOADED = 'app-loaded'\n\n/**\n * Class Definition\n * ====================================================\n */\n\nclass Layout {\n _element: HTMLElement\n\n constructor(element: HTMLElement) {\n this._element = element\n }\n\n holdTransition(): void {\n let resizeTimer: ReturnType\n window.addEventListener('resize', () => {\n document.body.classList.add(CLASS_NAME_HOLD_TRANSITIONS)\n clearTimeout(resizeTimer)\n resizeTimer = setTimeout(() => {\n document.body.classList.remove(CLASS_NAME_HOLD_TRANSITIONS)\n }, 400)\n })\n }\n}\n\nonDOMContentLoaded(() => {\n const data = new Layout(document.body)\n data.holdTransition()\n setTimeout(() => {\n document.body.classList.add(CLASS_NAME_APP_LOADED)\n }, 400)\n})\n\nexport default Layout\n","/**\n * --------------------------------------------\n * @file AdminLTE push-menu.ts\n * @description Push menu for AdminLTE.\n * @license MIT\n * --------------------------------------------\n */\n\nimport {\n onDOMContentLoaded\n} from './util/index'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst DATA_KEY = 'lte.push-menu'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_OPEN = `open${EVENT_KEY}`\nconst EVENT_COLLAPSE = `collapse${EVENT_KEY}`\n\nconst CLASS_NAME_SIDEBAR_MINI = 'sidebar-mini'\nconst CLASS_NAME_SIDEBAR_COLLAPSE = 'sidebar-collapse'\nconst CLASS_NAME_SIDEBAR_OPEN = 'sidebar-open'\nconst CLASS_NAME_SIDEBAR_EXPAND = 'sidebar-expand'\nconst CLASS_NAME_SIDEBAR_OVERLAY = 'sidebar-overlay'\nconst CLASS_NAME_MENU_OPEN = 'menu-open'\n\nconst SELECTOR_APP_SIDEBAR = '.app-sidebar'\nconst SELECTOR_SIDEBAR_MENU = '.sidebar-menu'\nconst SELECTOR_NAV_ITEM = '.nav-item'\nconst SELECTOR_NAV_TREEVIEW = '.nav-treeview'\nconst SELECTOR_APP_WRAPPER = '.app-wrapper'\nconst SELECTOR_SIDEBAR_EXPAND = `[class*=\"${CLASS_NAME_SIDEBAR_EXPAND}\"]`\nconst SELECTOR_SIDEBAR_TOGGLE = '[data-lte-toggle=\"sidebar\"]'\n\ntype Config = {\n sidebarBreakpoint: number;\n}\n\nconst Defaults = {\n sidebarBreakpoint: 992\n}\n\n/**\n * Class Definition\n * ====================================================\n */\n\nclass PushMenu {\n _element: HTMLElement\n _config: Config\n\n constructor(element: HTMLElement, config: Config) {\n this._element = element\n this._config = { ...Defaults, ...config }\n }\n\n // TODO\n menusClose() {\n const navTreeview = document.querySelectorAll(SELECTOR_NAV_TREEVIEW)\n\n navTreeview.forEach(navTree => {\n navTree.style.removeProperty('display')\n navTree.style.removeProperty('height')\n })\n\n const navSidebar = document.querySelector(SELECTOR_SIDEBAR_MENU)\n const navItem = navSidebar?.querySelectorAll(SELECTOR_NAV_ITEM)\n\n if (navItem) {\n navItem.forEach(navI => {\n navI.classList.remove(CLASS_NAME_MENU_OPEN)\n })\n }\n }\n\n expand() {\n const event = new Event(EVENT_OPEN)\n\n document.body.classList.remove(CLASS_NAME_SIDEBAR_COLLAPSE)\n document.body.classList.add(CLASS_NAME_SIDEBAR_OPEN)\n\n this._element.dispatchEvent(event)\n }\n\n collapse() {\n const event = new Event(EVENT_COLLAPSE)\n\n document.body.classList.remove(CLASS_NAME_SIDEBAR_OPEN)\n document.body.classList.add(CLASS_NAME_SIDEBAR_COLLAPSE)\n\n this._element.dispatchEvent(event)\n }\n\n addSidebarBreakPoint() {\n const sidebarExpandList = document.querySelector(SELECTOR_SIDEBAR_EXPAND)?.classList ?? []\n const sidebarExpand = Array.from(sidebarExpandList).find(className => className.startsWith(CLASS_NAME_SIDEBAR_EXPAND)) ?? ''\n const sidebar = document.getElementsByClassName(sidebarExpand)[0]\n const sidebarContent = window.getComputedStyle(sidebar, '::before').getPropertyValue('content')\n this._config = { ...this._config, sidebarBreakpoint: Number(sidebarContent.replace(/[^\\d.-]/g, '')) }\n\n if (window.innerWidth <= this._config.sidebarBreakpoint) {\n this.collapse()\n } else {\n if (!document.body.classList.contains(CLASS_NAME_SIDEBAR_MINI)) {\n this.expand()\n }\n\n if (document.body.classList.contains(CLASS_NAME_SIDEBAR_MINI) && document.body.classList.contains(CLASS_NAME_SIDEBAR_COLLAPSE)) {\n this.collapse()\n }\n }\n }\n\n toggle() {\n if (document.body.classList.contains(CLASS_NAME_SIDEBAR_COLLAPSE)) {\n this.expand()\n } else {\n this.collapse()\n }\n }\n\n init() {\n this.addSidebarBreakPoint()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nonDOMContentLoaded(() => {\n const sidebar = document?.querySelector(SELECTOR_APP_SIDEBAR) as HTMLElement | undefined\n\n if (sidebar) {\n const data = new PushMenu(sidebar, Defaults)\n data.init()\n\n window.addEventListener('resize', () => {\n data.init()\n })\n }\n\n const sidebarOverlay = document.createElement('div')\n sidebarOverlay.className = CLASS_NAME_SIDEBAR_OVERLAY\n document.querySelector(SELECTOR_APP_WRAPPER)?.append(sidebarOverlay)\n\n sidebarOverlay.addEventListener('touchstart', event => {\n event.preventDefault()\n const target = event.currentTarget as HTMLElement\n const data = new PushMenu(target, Defaults)\n data.collapse()\n }, { passive: true })\n sidebarOverlay.addEventListener('click', event => {\n event.preventDefault()\n const target = event.currentTarget as HTMLElement\n const data = new PushMenu(target, Defaults)\n data.collapse()\n })\n\n const fullBtn = document.querySelectorAll(SELECTOR_SIDEBAR_TOGGLE)\n\n fullBtn.forEach(btn => {\n btn.addEventListener('click', event => {\n event.preventDefault()\n\n let button = event.currentTarget as HTMLElement | undefined\n\n if (button?.dataset.lteToggle !== 'sidebar') {\n button = button?.closest(SELECTOR_SIDEBAR_TOGGLE) as HTMLElement | undefined\n }\n\n if (button) {\n event?.preventDefault()\n const data = new PushMenu(button, Defaults)\n data.toggle()\n }\n })\n })\n})\n\nexport default PushMenu\n","/**\n * --------------------------------------------\n * @file AdminLTE treeview.ts\n * @description Treeview plugin for AdminLTE.\n * @license MIT\n * --------------------------------------------\n */\n\nimport {\n onDOMContentLoaded,\n slideDown,\n slideUp\n} from './util/index'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n// const NAME = 'Treeview'\nconst DATA_KEY = 'lte.treeview'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_EXPANDED = `expanded${EVENT_KEY}`\nconst EVENT_COLLAPSED = `collapsed${EVENT_KEY}`\n// const EVENT_LOAD_DATA_API = `load${EVENT_KEY}`\n\nconst CLASS_NAME_MENU_OPEN = 'menu-open'\nconst SELECTOR_NAV_ITEM = '.nav-item'\nconst SELECTOR_NAV_LINK = '.nav-link'\nconst SELECTOR_TREEVIEW_MENU = '.nav-treeview'\nconst SELECTOR_DATA_TOGGLE = '[data-lte-toggle=\"treeview\"]'\n\nconst Default = {\n animationSpeed: 300,\n accordion: true\n}\n\ntype Config = {\n animationSpeed: number;\n accordion: boolean;\n}\n\n/**\n * Class Definition\n * ====================================================\n */\n\nclass Treeview {\n _element: HTMLElement\n _config: Config\n\n constructor(element: HTMLElement, config: Config) {\n this._element = element\n this._config = { ...Default, ...config }\n }\n\n open(): void {\n const event = new Event(EVENT_EXPANDED)\n\n if (this._config.accordion) {\n const openMenuList = this._element.parentElement?.querySelectorAll(`${SELECTOR_NAV_ITEM}.${CLASS_NAME_MENU_OPEN}`)\n\n openMenuList?.forEach(openMenu => {\n if (openMenu !== this._element.parentElement) {\n openMenu.classList.remove(CLASS_NAME_MENU_OPEN)\n const childElement = openMenu?.querySelector(SELECTOR_TREEVIEW_MENU) as HTMLElement | undefined\n if (childElement) {\n slideUp(childElement, this._config.animationSpeed)\n }\n }\n })\n }\n\n this._element.classList.add(CLASS_NAME_MENU_OPEN)\n\n const childElement = this._element?.querySelector(SELECTOR_TREEVIEW_MENU) as HTMLElement | undefined\n if (childElement) {\n slideDown(childElement, this._config.animationSpeed)\n }\n\n this._element.dispatchEvent(event)\n }\n\n close(): void {\n const event = new Event(EVENT_COLLAPSED)\n\n this._element.classList.remove(CLASS_NAME_MENU_OPEN)\n\n const childElement = this._element?.querySelector(SELECTOR_TREEVIEW_MENU) as HTMLElement | undefined\n if (childElement) {\n slideUp(childElement, this._config.animationSpeed)\n }\n\n this._element.dispatchEvent(event)\n }\n\n toggle(): void {\n if (this._element.classList.contains(CLASS_NAME_MENU_OPEN)) {\n this.close()\n } else {\n this.open()\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nonDOMContentLoaded(() => {\n const button = document.querySelectorAll(SELECTOR_DATA_TOGGLE)\n\n button.forEach(btn => {\n btn.addEventListener('click', event => {\n const target = event.target as HTMLElement\n const targetItem = target.closest(SELECTOR_NAV_ITEM) as HTMLElement | undefined\n const targetLink = target.closest(SELECTOR_NAV_LINK) as HTMLAnchorElement | undefined\n\n if (target?.getAttribute('href') === '#' || targetLink?.getAttribute('href') === '#') {\n event.preventDefault()\n }\n\n if (targetItem) {\n const data = new Treeview(targetItem, Default)\n data.toggle()\n }\n })\n })\n})\n\nexport default Treeview\n","/**\n * --------------------------------------------\n * @file AdminLTE direct-chat.ts\n * @description Direct chat for AdminLTE.\n * @license MIT\n * --------------------------------------------\n */\n\nimport {\n onDOMContentLoaded\n} from './util/index'\n\n/**\n * Constants\n * ====================================================\n */\n\nconst DATA_KEY = 'lte.direct-chat'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_EXPANDED = `expanded${EVENT_KEY}`\nconst EVENT_COLLAPSED = `collapsed${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-lte-toggle=\"chat-pane\"]'\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 _element: HTMLElement\n constructor(element: HTMLElement) {\n this._element = element\n }\n\n toggle(): void {\n if (this._element.classList.contains(CLASS_NAME_DIRECT_CHAT_OPEN)) {\n const event = new Event(EVENT_COLLAPSED)\n\n this._element.classList.remove(CLASS_NAME_DIRECT_CHAT_OPEN)\n\n this._element.dispatchEvent(event)\n } else {\n const event = new Event(EVENT_EXPANDED)\n\n this._element.classList.add(CLASS_NAME_DIRECT_CHAT_OPEN)\n\n this._element.dispatchEvent(event)\n }\n }\n}\n\n/**\n *\n * Data Api implementation\n * ====================================================\n */\n\nonDOMContentLoaded(() => {\n const button = document.querySelectorAll(SELECTOR_DATA_TOGGLE)\n\n button.forEach(btn => {\n btn.addEventListener('click', event => {\n event.preventDefault()\n const target = event.target as HTMLElement\n const chatPane = target.closest(SELECTOR_DIRECT_CHAT) as HTMLElement | undefined\n\n if (chatPane) {\n const data = new DirectChat(chatPane)\n data.toggle()\n }\n })\n })\n})\n\nexport default DirectChat\n","/**\n * --------------------------------------------\n * @file AdminLTE card-widget.ts\n * @description Card widget for AdminLTE.\n * @license MIT\n * --------------------------------------------\n */\n\nimport {\n onDOMContentLoaded,\n slideUp,\n slideDown\n} from './util/index'\n\n/**\n * Constants\n * ====================================================\n */\n\nconst DATA_KEY = 'lte.card-widget'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_COLLAPSED = `collapsed${EVENT_KEY}`\nconst EVENT_EXPANDED = `expanded${EVENT_KEY}`\nconst EVENT_REMOVE = `remove${EVENT_KEY}`\nconst EVENT_MAXIMIZED = `maximized${EVENT_KEY}`\nconst EVENT_MINIMIZED = `minimized${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-lte-toggle=\"card-remove\"]'\nconst SELECTOR_DATA_COLLAPSE = '[data-lte-toggle=\"card-collapse\"]'\nconst SELECTOR_DATA_MAXIMIZE = '[data-lte-toggle=\"card-maximize\"]'\nconst SELECTOR_CARD = `.${CLASS_NAME_CARD}`\nconst SELECTOR_CARD_BODY = '.card-body'\nconst SELECTOR_CARD_FOOTER = '.card-footer'\n\ntype Config = {\n animationSpeed: number;\n collapseTrigger: string;\n removeTrigger: string;\n maximizeTrigger: string;\n}\n\nconst Default: Config = {\n animationSpeed: 500,\n collapseTrigger: SELECTOR_DATA_COLLAPSE,\n removeTrigger: SELECTOR_DATA_REMOVE,\n maximizeTrigger: SELECTOR_DATA_MAXIMIZE\n}\n\nclass CardWidget {\n _element: HTMLElement\n _parent: HTMLElement | undefined\n _clone: HTMLElement | undefined\n _config: Config\n\n constructor(element: HTMLElement, config: Config) {\n this._element = element\n this._parent = element.closest(SELECTOR_CARD) as HTMLElement | undefined\n\n if (element.classList.contains(CLASS_NAME_CARD)) {\n this._parent = element\n }\n\n this._config = { ...Default, ...config }\n }\n\n collapse() {\n const event = new Event(EVENT_COLLAPSED)\n\n if (this._parent) {\n this._parent.classList.add(CLASS_NAME_COLLAPSING)\n\n const elm = this._parent?.querySelectorAll(`${SELECTOR_CARD_BODY}, ${SELECTOR_CARD_FOOTER}`)\n\n elm.forEach(el => {\n if (el instanceof HTMLElement) {\n slideUp(el, this._config.animationSpeed)\n }\n })\n\n setTimeout(() => {\n if (this._parent) {\n this._parent.classList.add(CLASS_NAME_COLLAPSED)\n this._parent.classList.remove(CLASS_NAME_COLLAPSING)\n }\n }, this._config.animationSpeed)\n }\n\n this._element?.dispatchEvent(event)\n }\n\n expand() {\n const event = new Event(EVENT_EXPANDED)\n\n if (this._parent) {\n this._parent.classList.add(CLASS_NAME_EXPANDING)\n\n const elm = this._parent?.querySelectorAll(`${SELECTOR_CARD_BODY}, ${SELECTOR_CARD_FOOTER}`)\n\n elm.forEach(el => {\n if (el instanceof HTMLElement) {\n slideDown(el, this._config.animationSpeed)\n }\n })\n\n setTimeout(() => {\n if (this._parent) {\n this._parent.classList.remove(CLASS_NAME_COLLAPSED)\n this._parent.classList.remove(CLASS_NAME_EXPANDING)\n }\n }, this._config.animationSpeed)\n }\n\n this._element?.dispatchEvent(event)\n }\n\n remove() {\n const event = new Event(EVENT_REMOVE)\n\n if (this._parent) {\n slideUp(this._parent, this._config.animationSpeed)\n }\n\n this._element?.dispatchEvent(event)\n }\n\n toggle() {\n if (this._parent?.classList.contains(CLASS_NAME_COLLAPSED)) {\n this.expand()\n return\n }\n\n this.collapse()\n }\n\n maximize() {\n const event = new Event(EVENT_MAXIMIZED)\n\n if (this._parent) {\n this._parent.style.height = `${this._parent.offsetHeight}px`\n this._parent.style.width = `${this._parent.offsetWidth}px`\n this._parent.style.transition = 'all .15s'\n\n setTimeout(() => {\n const htmlTag = document.querySelector('html')\n\n if (htmlTag) {\n htmlTag.classList.add(CLASS_NAME_MAXIMIZED)\n }\n\n if (this._parent) {\n this._parent.classList.add(CLASS_NAME_MAXIMIZED)\n\n if (this._parent.classList.contains(CLASS_NAME_COLLAPSED)) {\n this._parent.classList.add(CLASS_NAME_WAS_COLLAPSED)\n }\n }\n }, 150)\n }\n\n this._element?.dispatchEvent(event)\n }\n\n minimize() {\n const event = new Event(EVENT_MINIMIZED)\n\n if (this._parent) {\n this._parent.style.height = 'auto'\n this._parent.style.width = 'auto'\n this._parent.style.transition = 'all .15s'\n\n setTimeout(() => {\n const htmlTag = document.querySelector('html')\n\n if (htmlTag) {\n htmlTag.classList.remove(CLASS_NAME_MAXIMIZED)\n }\n\n if (this._parent) {\n this._parent.classList.remove(CLASS_NAME_MAXIMIZED)\n\n if (this._parent?.classList.contains(CLASS_NAME_WAS_COLLAPSED)) {\n this._parent.classList.remove(CLASS_NAME_WAS_COLLAPSED)\n }\n }\n }, 10)\n }\n\n this._element?.dispatchEvent(event)\n }\n\n toggleMaximize() {\n if (this._parent?.classList.contains(CLASS_NAME_MAXIMIZED)) {\n this.minimize()\n return\n }\n\n this.maximize()\n }\n}\n\n/**\n *\n * Data Api implementation\n * ====================================================\n */\n\nonDOMContentLoaded(() => {\n const collapseBtn = document.querySelectorAll(SELECTOR_DATA_COLLAPSE)\n\n collapseBtn.forEach(btn => {\n btn.addEventListener('click', event => {\n event.preventDefault()\n const target = event.target as HTMLElement\n const data = new CardWidget(target, Default)\n data.toggle()\n })\n })\n\n const removeBtn = document.querySelectorAll(SELECTOR_DATA_REMOVE)\n\n removeBtn.forEach(btn => {\n btn.addEventListener('click', event => {\n event.preventDefault()\n const target = event.target as HTMLElement\n const data = new CardWidget(target, Default)\n data.remove()\n })\n })\n\n const maxBtn = document.querySelectorAll(SELECTOR_DATA_MAXIMIZE)\n\n maxBtn.forEach(btn => {\n btn.addEventListener('click', event => {\n event.preventDefault()\n const target = event.target as HTMLElement\n const data = new CardWidget(target, Default)\n data.toggleMaximize()\n })\n })\n})\n\nexport default CardWidget\n","/**\n * --------------------------------------------\n * @file AdminLTE fullscreen.ts\n * @description Fullscreen plugin for AdminLTE.\n * @license MIT\n * --------------------------------------------\n */\n\nimport {\n onDOMContentLoaded\n} from './util/index'\n\n/**\n * Constants\n * ============================================================================\n */\nconst DATA_KEY = 'lte.fullscreen'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_MAXIMIZED = `maximized${EVENT_KEY}`\nconst EVENT_MINIMIZED = `minimized${EVENT_KEY}`\n\nconst SELECTOR_FULLSCREEN_TOGGLE = '[data-lte-toggle=\"fullscreen\"]'\nconst SELECTOR_MAXIMIZE_ICON = '[data-lte-icon=\"maximize\"]'\nconst SELECTOR_MINIMIZE_ICON = '[data-lte-icon=\"minimize\"]'\n\n/**\n * Class Definition.\n * ============================================================================\n */\nclass FullScreen {\n _element: HTMLElement\n _config: undefined\n\n constructor(element: HTMLElement, config?: undefined) {\n this._element = element\n this._config = config\n }\n\n inFullScreen(): void {\n const event = new Event(EVENT_MAXIMIZED)\n\n const iconMaximize = document.querySelector(SELECTOR_MAXIMIZE_ICON)\n const iconMinimize = document.querySelector(SELECTOR_MINIMIZE_ICON)\n\n void document.documentElement.requestFullscreen()\n\n if (iconMaximize) {\n iconMaximize.style.display = 'none'\n }\n\n if (iconMinimize) {\n iconMinimize.style.display = 'block'\n }\n\n this._element.dispatchEvent(event)\n }\n\n outFullscreen(): void {\n const event = new Event(EVENT_MINIMIZED)\n\n const iconMaximize = document.querySelector(SELECTOR_MAXIMIZE_ICON)\n const iconMinimize = document.querySelector(SELECTOR_MINIMIZE_ICON)\n\n void document.exitFullscreen()\n\n if (iconMaximize) {\n iconMaximize.style.display = 'block'\n }\n\n if (iconMinimize) {\n iconMinimize.style.display = 'none'\n }\n\n this._element.dispatchEvent(event)\n }\n\n toggleFullScreen(): void {\n if (document.fullscreenEnabled) {\n if (document.fullscreenElement) {\n this.outFullscreen()\n } else {\n this.inFullScreen()\n }\n }\n }\n}\n\n/**\n * Data Api implementation\n * ============================================================================\n */\nonDOMContentLoaded(() => {\n const buttons = document.querySelectorAll(SELECTOR_FULLSCREEN_TOGGLE)\n\n buttons.forEach(btn => {\n btn.addEventListener('click', event => {\n event.preventDefault()\n\n const target = event.target as HTMLElement\n const button = target.closest(SELECTOR_FULLSCREEN_TOGGLE) as HTMLElement | undefined\n\n if (button) {\n const data = new FullScreen(button, undefined)\n data.toggleFullScreen()\n }\n })\n })\n})\n\nexport default FullScreen\n"],"names":["DATA_KEY","EVENT_KEY","CLASS_NAME_MENU_OPEN","SELECTOR_NAV_ITEM","EVENT_EXPANDED","EVENT_COLLAPSED","SELECTOR_DATA_TOGGLE","Default","EVENT_MAXIMIZED","EVENT_MINIMIZED"],"mappings":";;;;;;;;;;;IAAA,MAAM,yBAAyB,GAAsB,EAAE,CAAA;IAEvD,MAAM,kBAAkB,GAAG,CAAC,QAAoB,KAAU;IACxD,IAAA,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE;;IAErC,QAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,EAAE;IACrC,YAAA,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,MAAK;IACjD,gBAAA,KAAK,MAAM,QAAQ,IAAI,yBAAyB,EAAE;IAChD,oBAAA,QAAQ,EAAE,CAAA;qBACX;IACH,aAAC,CAAC,CAAA;aACH;IAED,QAAA,yBAAyB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;SACzC;aAAM;IACL,QAAA,QAAQ,EAAE,CAAA;SACX;IACH,CAAC,CAAA;IAED;IACA,MAAM,OAAO,GAAG,CAAC,MAAmB,EAAE,QAAQ,GAAG,GAAG,KAAI;IACtD,IAAA,MAAM,CAAC,KAAK,CAAC,kBAAkB,GAAG,yBAAyB,CAAA;QAC3D,MAAM,CAAC,KAAK,CAAC,kBAAkB,GAAG,CAAG,EAAA,QAAQ,IAAI,CAAA;IACjD,IAAA,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,YAAY,CAAA;QACrC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAA,EAAA,CAAI,CAAA;IAChD,IAAA,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAEhC,IAAA,MAAM,CAAC,UAAU,CAAC,MAAK;IACrB,QAAA,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAA;IACzB,QAAA,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAA;IAC7B,QAAA,MAAM,CAAC,KAAK,CAAC,aAAa,GAAG,GAAG,CAAA;IAChC,QAAA,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAA;IAC5B,QAAA,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG,CAAA;SAChC,EAAE,CAAC,CAAC,CAAA;IAEL,IAAA,MAAM,CAAC,UAAU,CAAC,MAAK;IACrB,QAAA,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAA;IAC7B,QAAA,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;IACrC,QAAA,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,CAAA;IAC1C,QAAA,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAA;IAC7C,QAAA,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;IACzC,QAAA,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,CAAA;IAC5C,QAAA,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAA;IACvC,QAAA,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAA;IAClD,QAAA,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAA;SACnD,EAAE,QAAQ,CAAC,CAAA;IACd,CAAC,CAAA;IAED;IACA,MAAM,SAAS,GAAG,CAAC,MAAmB,EAAE,QAAQ,GAAG,GAAG,KAAI;IACxD,IAAA,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;QACtC,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAEjD,IAAA,IAAI,OAAO,KAAK,MAAM,EAAE;YACtB,OAAO,GAAG,OAAO,CAAA;SAClB;IAED,IAAA,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAA;IAC9B,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAA;IAClC,IAAA,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAChC,IAAA,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAA;IACzB,IAAA,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAA;IAC7B,IAAA,MAAM,CAAC,KAAK,CAAC,aAAa,GAAG,GAAG,CAAA;IAChC,IAAA,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAA;IAC5B,IAAA,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG,CAAA;IAE/B,IAAA,MAAM,CAAC,UAAU,CAAC,MAAK;IACrB,QAAA,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,YAAY,CAAA;IACrC,QAAA,MAAM,CAAC,KAAK,CAAC,kBAAkB,GAAG,yBAAyB,CAAA;YAC3D,MAAM,CAAC,KAAK,CAAC,kBAAkB,GAAG,CAAG,EAAA,QAAQ,IAAI,CAAA;YACjD,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAG,EAAA,MAAM,IAAI,CAAA;IACnC,QAAA,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,CAAA;IAC1C,QAAA,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAA;IAC7C,QAAA,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;IACzC,QAAA,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,CAAA;SAC7C,EAAE,CAAC,CAAC,CAAA;IAEL,IAAA,MAAM,CAAC,UAAU,CAAC,MAAK;IACrB,QAAA,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;IACrC,QAAA,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAA;IACvC,QAAA,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAA;IAClD,QAAA,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAA;SACnD,EAAE,QAAQ,CAAC,CAAA;IACd,CAAC;;ICnFD;;;;;;IAMG;IAMH;;;;IAIG;IAEH,MAAM,2BAA2B,GAAG,iBAAiB,CAAA;IACrD,MAAM,qBAAqB,GAAG,YAAY,CAAA;IAE1C;;;IAGG;IAEH,MAAM,MAAM,CAAA;IAGV,IAAA,WAAA,CAAY,OAAoB,EAAA;IAC9B,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;SACxB;QAED,cAAc,GAAA;IACZ,QAAA,IAAI,WAA0C,CAAA;IAC9C,QAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAK;gBACrC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;gBACxD,YAAY,CAAC,WAAW,CAAC,CAAA;IACzB,YAAA,WAAW,GAAG,UAAU,CAAC,MAAK;oBAC5B,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAA;iBAC5D,EAAE,GAAG,CAAC,CAAA;IACT,SAAC,CAAC,CAAA;SACH;IACF,CAAA;IAED,kBAAkB,CAAC,MAAK;QACtB,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QACtC,IAAI,CAAC,cAAc,EAAE,CAAA;QACrB,UAAU,CAAC,MAAK;YACd,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;SACnD,EAAE,GAAG,CAAC,CAAA;IACT,CAAC,CAAC;;ICnDF;;;;;;IAMG;IAMH;;;;IAIG;IAEH,MAAMA,UAAQ,GAAG,eAAe,CAAA;IAChC,MAAMC,WAAS,GAAG,CAAI,CAAA,EAAAD,UAAQ,EAAE,CAAA;IAEhC,MAAM,UAAU,GAAG,CAAO,IAAA,EAAAC,WAAS,EAAE,CAAA;IACrC,MAAM,cAAc,GAAG,CAAW,QAAA,EAAAA,WAAS,EAAE,CAAA;IAE7C,MAAM,uBAAuB,GAAG,cAAc,CAAA;IAC9C,MAAM,2BAA2B,GAAG,kBAAkB,CAAA;IACtD,MAAM,uBAAuB,GAAG,cAAc,CAAA;IAC9C,MAAM,yBAAyB,GAAG,gBAAgB,CAAA;IAClD,MAAM,0BAA0B,GAAG,iBAAiB,CAAA;IACpD,MAAMC,sBAAoB,GAAG,WAAW,CAAA;IAExC,MAAM,oBAAoB,GAAG,cAAc,CAAA;IAC3C,MAAM,qBAAqB,GAAG,eAAe,CAAA;IAC7C,MAAMC,mBAAiB,GAAG,WAAW,CAAA;IACrC,MAAM,qBAAqB,GAAG,eAAe,CAAA;IAC7C,MAAM,oBAAoB,GAAG,cAAc,CAAA;IAC3C,MAAM,uBAAuB,GAAG,CAAY,SAAA,EAAA,yBAAyB,IAAI,CAAA;IACzE,MAAM,uBAAuB,GAAG,6BAA6B,CAAA;IAM7D,MAAM,QAAQ,GAAG;IACf,IAAA,iBAAiB,EAAE,GAAG;KACvB,CAAA;IAED;;;IAGG;IAEH,MAAM,QAAQ,CAAA;QAIZ,WAAY,CAAA,OAAoB,EAAE,MAAc,EAAA;IAC9C,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;IACvB,QAAA,IAAI,CAAC,OAAO,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,QAAQ,CAAK,EAAA,MAAM,CAAE,CAAA;SAC1C;;QAGD,UAAU,GAAA;YACR,MAAM,WAAW,GAAG,QAAQ,CAAC,gBAAgB,CAAc,qBAAqB,CAAC,CAAA;IAEjF,QAAA,WAAW,CAAC,OAAO,CAAC,OAAO,IAAG;IAC5B,YAAA,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;IACvC,YAAA,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;IACxC,SAAC,CAAC,CAAA;YAEF,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAA;IAChE,QAAA,MAAM,OAAO,GAAG,UAAU,KAAA,IAAA,IAAV,UAAU,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAV,UAAU,CAAE,gBAAgB,CAACA,mBAAiB,CAAC,CAAA;YAE/D,IAAI,OAAO,EAAE;IACX,YAAA,OAAO,CAAC,OAAO,CAAC,IAAI,IAAG;IACrB,gBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAACD,sBAAoB,CAAC,CAAA;IAC7C,aAAC,CAAC,CAAA;aACH;SACF;QAED,MAAM,GAAA;IACJ,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,UAAU,CAAC,CAAA;YAEnC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAA;YAC3D,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;IAEpD,QAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;SACnC;QAED,QAAQ,GAAA;IACN,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;YAEvC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAA;YACvD,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;IAExD,QAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;SACnC;QAED,oBAAoB,GAAA;;IAClB,QAAA,MAAM,iBAAiB,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,aAAa,CAAC,uBAAuB,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,CAAA;YAC1F,MAAM,aAAa,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,CAAA;YAC5H,MAAM,OAAO,GAAG,QAAQ,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;IACjE,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAA;YAC/F,IAAI,CAAC,OAAO,GAAQ,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,IAAI,CAAC,OAAO,CAAA,EAAA,EAAE,iBAAiB,EAAE,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,EAAA,CAAE,CAAA;YAErG,IAAI,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE;gBACvD,IAAI,CAAC,QAAQ,EAAE,CAAA;aAChB;iBAAM;IACL,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE;oBAC9D,IAAI,CAAC,MAAM,EAAE,CAAA;iBACd;gBAED,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,2BAA2B,CAAC,EAAE;oBAC9H,IAAI,CAAC,QAAQ,EAAE,CAAA;iBAChB;aACF;SACF;QAED,MAAM,GAAA;YACJ,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,2BAA2B,CAAC,EAAE;gBACjE,IAAI,CAAC,MAAM,EAAE,CAAA;aACd;iBAAM;gBACL,IAAI,CAAC,QAAQ,EAAE,CAAA;aAChB;SACF;QAED,IAAI,GAAA;YACF,IAAI,CAAC,oBAAoB,EAAE,CAAA;SAC5B;IACF,CAAA;IAED;;;;IAIG;IAEH,kBAAkB,CAAC,MAAK;;IACtB,IAAA,MAAM,OAAO,GAAG,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAR,QAAQ,CAAE,aAAa,CAAC,oBAAoB,CAA4B,CAAA;QAExF,IAAI,OAAO,EAAE;YACX,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;YAC5C,IAAI,CAAC,IAAI,EAAE,CAAA;IAEX,QAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAK;gBACrC,IAAI,CAAC,IAAI,EAAE,CAAA;IACb,SAAC,CAAC,CAAA;SACH;QAED,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IACpD,IAAA,cAAc,CAAC,SAAS,GAAG,0BAA0B,CAAA;QACrD,CAAA,EAAA,GAAA,QAAQ,CAAC,aAAa,CAAC,oBAAoB,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAC,cAAc,CAAC,CAAA;IAEpE,IAAA,cAAc,CAAC,gBAAgB,CAAC,YAAY,EAAE,KAAK,IAAG;YACpD,KAAK,CAAC,cAAc,EAAE,CAAA;IACtB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,aAA4B,CAAA;YACjD,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;YAC3C,IAAI,CAAC,QAAQ,EAAE,CAAA;IACjB,KAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;IACrB,IAAA,cAAc,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,IAAG;YAC/C,KAAK,CAAC,cAAc,EAAE,CAAA;IACtB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,aAA4B,CAAA;YACjD,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;YAC3C,IAAI,CAAC,QAAQ,EAAE,CAAA;IACjB,KAAC,CAAC,CAAA;QAEF,MAAM,OAAO,GAAG,QAAQ,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,CAAA;IAElE,IAAA,OAAO,CAAC,OAAO,CAAC,GAAG,IAAG;IACpB,QAAA,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,IAAG;gBACpC,KAAK,CAAC,cAAc,EAAE,CAAA;IAEtB,YAAA,IAAI,MAAM,GAAG,KAAK,CAAC,aAAwC,CAAA;IAE3D,YAAA,IAAI,CAAA,MAAM,KAAN,IAAA,IAAA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAM,CAAE,OAAO,CAAC,SAAS,MAAK,SAAS,EAAE;oBAC3C,MAAM,GAAG,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,OAAO,CAAC,uBAAuB,CAA4B,CAAA;iBAC7E;gBAED,IAAI,MAAM,EAAE;IACV,gBAAA,KAAK,aAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,cAAc,EAAE,CAAA;oBACvB,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;oBAC3C,IAAI,CAAC,MAAM,EAAE,CAAA;iBACd;IACH,SAAC,CAAC,CAAA;IACJ,KAAC,CAAC,CAAA;IACJ,CAAC,CAAC;;ICzLF;;;;;;IAMG;IAQH;;;;IAIG;IAEH;IACA,MAAMF,UAAQ,GAAG,cAAc,CAAA;IAC/B,MAAMC,WAAS,GAAG,CAAI,CAAA,EAAAD,UAAQ,EAAE,CAAA;IAEhC,MAAMI,gBAAc,GAAG,CAAW,QAAA,EAAAH,WAAS,EAAE,CAAA;IAC7C,MAAMI,iBAAe,GAAG,CAAY,SAAA,EAAAJ,WAAS,EAAE,CAAA;IAC/C;IAEA,MAAM,oBAAoB,GAAG,WAAW,CAAA;IACxC,MAAM,iBAAiB,GAAG,WAAW,CAAA;IACrC,MAAM,iBAAiB,GAAG,WAAW,CAAA;IACrC,MAAM,sBAAsB,GAAG,eAAe,CAAA;IAC9C,MAAMK,sBAAoB,GAAG,8BAA8B,CAAA;IAE3D,MAAMC,SAAO,GAAG;IACd,IAAA,cAAc,EAAE,GAAG;IACnB,IAAA,SAAS,EAAE,IAAI;KAChB,CAAA;IAOD;;;IAGG;IAEH,MAAM,QAAQ,CAAA;QAIZ,WAAY,CAAA,OAAoB,EAAE,MAAc,EAAA;IAC9C,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;IACvB,QAAA,IAAI,CAAC,OAAO,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQA,SAAO,CAAK,EAAA,MAAM,CAAE,CAAA;SACzC;QAED,IAAI,GAAA;;IACF,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAACH,gBAAc,CAAC,CAAA;IAEvC,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;IAC1B,YAAA,MAAM,YAAY,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,gBAAgB,CAAC,CAAG,EAAA,iBAAiB,IAAI,oBAAoB,CAAA,CAAE,CAAC,CAAA;gBAElH,YAAY,KAAA,IAAA,IAAZ,YAAY,KAAZ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,YAAY,CAAE,OAAO,CAAC,QAAQ,IAAG;oBAC/B,IAAI,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE;IAC5C,oBAAA,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAA;IAC/C,oBAAA,MAAM,YAAY,GAAG,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAR,QAAQ,CAAE,aAAa,CAAC,sBAAsB,CAA4B,CAAA;wBAC/F,IAAI,YAAY,EAAE;4BAChB,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;yBACnD;qBACF;IACH,aAAC,CAAC,CAAA;aACH;YAED,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;YAEjD,MAAM,YAAY,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC,sBAAsB,CAA4B,CAAA;YACpG,IAAI,YAAY,EAAE;gBAChB,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;aACrD;IAED,QAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;SACnC;QAED,KAAK,GAAA;;IACH,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAACC,iBAAe,CAAC,CAAA;YAExC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAA;YAEpD,MAAM,YAAY,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC,sBAAsB,CAA4B,CAAA;YACpG,IAAI,YAAY,EAAE;gBAChB,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;aACnD;IAED,QAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;SACnC;QAED,MAAM,GAAA;YACJ,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE;gBAC1D,IAAI,CAAC,KAAK,EAAE,CAAA;aACb;iBAAM;gBACL,IAAI,CAAC,IAAI,EAAE,CAAA;aACZ;SACF;IACF,CAAA;IAED;;;;IAIG;IAEH,kBAAkB,CAAC,MAAK;QACtB,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAACC,sBAAoB,CAAC,CAAA;IAE9D,IAAA,MAAM,CAAC,OAAO,CAAC,GAAG,IAAG;IACnB,QAAA,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,IAAG;IACpC,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAA;gBAC1C,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAA4B,CAAA;gBAC/E,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAkC,CAAA;IAErF,YAAA,IAAI,CAAA,MAAM,KAAN,IAAA,IAAA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAM,CAAE,YAAY,CAAC,MAAM,CAAC,MAAK,GAAG,IAAI,CAAA,UAAU,KAAV,IAAA,IAAA,UAAU,KAAV,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,UAAU,CAAE,YAAY,CAAC,MAAM,CAAC,MAAK,GAAG,EAAE;oBACpF,KAAK,CAAC,cAAc,EAAE,CAAA;iBACvB;gBAED,IAAI,UAAU,EAAE;oBACd,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,UAAU,EAAEC,SAAO,CAAC,CAAA;oBAC9C,IAAI,CAAC,MAAM,EAAE,CAAA;iBACd;IACH,SAAC,CAAC,CAAA;IACJ,KAAC,CAAC,CAAA;IACJ,CAAC,CAAC;;ICpIF;;;;;;IAMG;IAMH;;;IAGG;IAEH,MAAMP,UAAQ,GAAG,iBAAiB,CAAA;IAClC,MAAMC,WAAS,GAAG,CAAI,CAAA,EAAAD,UAAQ,EAAE,CAAA;IAChC,MAAMI,gBAAc,GAAG,CAAW,QAAA,EAAAH,WAAS,EAAE,CAAA;IAC7C,MAAMI,iBAAe,GAAG,CAAY,SAAA,EAAAJ,WAAS,EAAE,CAAA;IAE/C,MAAM,oBAAoB,GAAG,+BAA+B,CAAA;IAC5D,MAAM,oBAAoB,GAAG,cAAc,CAAA;IAE3C,MAAM,2BAA2B,GAAG,2BAA2B,CAAA;IAE/D;;;IAGG;IAEH,MAAM,UAAU,CAAA;IAEd,IAAA,WAAA,CAAY,OAAoB,EAAA;IAC9B,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;SACxB;QAED,MAAM,GAAA;YACJ,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,2BAA2B,CAAC,EAAE;IACjE,YAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAACI,iBAAe,CAAC,CAAA;gBAExC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAA;IAE3D,YAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;aACnC;iBAAM;IACL,YAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAACD,gBAAc,CAAC,CAAA;gBAEvC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;IAExD,YAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;aACnC;SACF;IACF,CAAA;IAED;;;;IAIG;IAEH,kBAAkB,CAAC,MAAK;QACtB,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAA;IAE9D,IAAA,MAAM,CAAC,OAAO,CAAC,GAAG,IAAG;IACnB,QAAA,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,IAAG;gBACpC,KAAK,CAAC,cAAc,EAAE,CAAA;IACtB,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAA;gBAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAA4B,CAAA;gBAEhF,IAAI,QAAQ,EAAE;IACZ,gBAAA,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAA;oBACrC,IAAI,CAAC,MAAM,EAAE,CAAA;iBACd;IACH,SAAC,CAAC,CAAA;IACJ,KAAC,CAAC,CAAA;IACJ,CAAC,CAAC;;IC5EF;;;;;;IAMG;IAQH;;;IAGG;IAEH,MAAMJ,UAAQ,GAAG,iBAAiB,CAAA;IAClC,MAAMC,WAAS,GAAG,CAAI,CAAA,EAAAD,UAAQ,EAAE,CAAA;IAChC,MAAM,eAAe,GAAG,CAAY,SAAA,EAAAC,WAAS,EAAE,CAAA;IAC/C,MAAM,cAAc,GAAG,CAAW,QAAA,EAAAA,WAAS,EAAE,CAAA;IAC7C,MAAM,YAAY,GAAG,CAAS,MAAA,EAAAA,WAAS,EAAE,CAAA;IACzC,MAAMO,iBAAe,GAAG,CAAY,SAAA,EAAAP,WAAS,EAAE,CAAA;IAC/C,MAAMQ,iBAAe,GAAG,CAAY,SAAA,EAAAR,WAAS,EAAE,CAAA;IAE/C,MAAM,eAAe,GAAG,MAAM,CAAA;IAC9B,MAAM,oBAAoB,GAAG,gBAAgB,CAAA;IAC7C,MAAM,qBAAqB,GAAG,iBAAiB,CAAA;IAC/C,MAAM,oBAAoB,GAAG,gBAAgB,CAAA;IAC7C,MAAM,wBAAwB,GAAG,eAAe,CAAA;IAChD,MAAM,oBAAoB,GAAG,gBAAgB,CAAA;IAE7C,MAAM,oBAAoB,GAAG,iCAAiC,CAAA;IAC9D,MAAM,sBAAsB,GAAG,mCAAmC,CAAA;IAClE,MAAM,sBAAsB,GAAG,mCAAmC,CAAA;IAClE,MAAM,aAAa,GAAG,CAAI,CAAA,EAAA,eAAe,EAAE,CAAA;IAC3C,MAAM,kBAAkB,GAAG,YAAY,CAAA;IACvC,MAAM,oBAAoB,GAAG,cAAc,CAAA;IAS3C,MAAM,OAAO,GAAW;IACtB,IAAA,cAAc,EAAE,GAAG;IACnB,IAAA,eAAe,EAAE,sBAAsB;IACvC,IAAA,aAAa,EAAE,oBAAoB;IACnC,IAAA,eAAe,EAAE,sBAAsB;KACxC,CAAA;IAED,MAAM,UAAU,CAAA;QAMd,WAAY,CAAA,OAAoB,EAAE,MAAc,EAAA;IAC9C,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;YACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAA4B,CAAA;YAExE,IAAI,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;IAC/C,YAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;aACvB;IAED,QAAA,IAAI,CAAC,OAAO,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,OAAO,CAAK,EAAA,MAAM,CAAE,CAAA;SACzC;QAED,QAAQ,GAAA;;IACN,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;IAExC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;IAEjD,YAAA,MAAM,GAAG,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,gBAAgB,CAAC,GAAG,kBAAkB,CAAA,EAAA,EAAK,oBAAoB,CAAA,CAAE,CAAC,CAAA;IAE5F,YAAA,GAAG,CAAC,OAAO,CAAC,EAAE,IAAG;IACf,gBAAA,IAAI,EAAE,YAAY,WAAW,EAAE;wBAC7B,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;qBACzC;IACH,aAAC,CAAC,CAAA;gBAEF,UAAU,CAAC,MAAK;IACd,gBAAA,IAAI,IAAI,CAAC,OAAO,EAAE;wBAChB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;wBAChD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAA;qBACrD;IACH,aAAC,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;aAChC;YAED,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC,KAAK,CAAC,CAAA;SACpC;QAED,MAAM,GAAA;;IACJ,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;IAEvC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;IAEhD,YAAA,MAAM,GAAG,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,gBAAgB,CAAC,GAAG,kBAAkB,CAAA,EAAA,EAAK,oBAAoB,CAAA,CAAE,CAAC,CAAA;IAE5F,YAAA,GAAG,CAAC,OAAO,CAAC,EAAE,IAAG;IACf,gBAAA,IAAI,EAAE,YAAY,WAAW,EAAE;wBAC7B,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;qBAC3C;IACH,aAAC,CAAC,CAAA;gBAEF,UAAU,CAAC,MAAK;IACd,gBAAA,IAAI,IAAI,CAAC,OAAO,EAAE;wBAChB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAA;wBACnD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAA;qBACpD;IACH,aAAC,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;aAChC;YAED,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC,KAAK,CAAC,CAAA;SACpC;QAED,MAAM,GAAA;;IACJ,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,CAAA;IAErC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;aACnD;YAED,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC,KAAK,CAAC,CAAA;SACpC;QAED,MAAM,GAAA;;IACJ,QAAA,IAAI,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE;gBAC1D,IAAI,CAAC,MAAM,EAAE,CAAA;gBACb,OAAM;aACP;YAED,IAAI,CAAC,QAAQ,EAAE,CAAA;SAChB;QAED,QAAQ,GAAA;;IACN,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAACO,iBAAe,CAAC,CAAA;IAExC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;IAChB,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAG,EAAA,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,CAAA;IAC5D,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAG,EAAA,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAA;gBAC1D,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAA;gBAE1C,UAAU,CAAC,MAAK;oBACd,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;oBAE9C,IAAI,OAAO,EAAE;IACX,oBAAA,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;qBAC5C;IAED,gBAAA,IAAI,IAAI,CAAC,OAAO,EAAE;wBAChB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;wBAEhD,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE;4BACzD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAA;yBACrD;qBACF;iBACF,EAAE,GAAG,CAAC,CAAA;aACR;YAED,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC,KAAK,CAAC,CAAA;SACpC;QAED,QAAQ,GAAA;;IACN,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAACC,iBAAe,CAAC,CAAA;IAExC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAA;gBAClC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAA;gBACjC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAA;gBAE1C,UAAU,CAAC,MAAK;;oBACd,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;oBAE9C,IAAI,OAAO,EAAE;IACX,oBAAA,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAA;qBAC/C;IAED,gBAAA,IAAI,IAAI,CAAC,OAAO,EAAE;wBAChB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAA;IAEnD,oBAAA,IAAI,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAS,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE;4BAC9D,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAA;yBACxD;qBACF;iBACF,EAAE,EAAE,CAAC,CAAA;aACP;YAED,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,CAAC,KAAK,CAAC,CAAA;SACpC;QAED,cAAc,GAAA;;IACZ,QAAA,IAAI,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE;gBAC1D,IAAI,CAAC,QAAQ,EAAE,CAAA;gBACf,OAAM;aACP;YAED,IAAI,CAAC,QAAQ,EAAE,CAAA;SAChB;IACF,CAAA;IAED;;;;IAIG;IAEH,kBAAkB,CAAC,MAAK;QACtB,MAAM,WAAW,GAAG,QAAQ,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAA;IAErE,IAAA,WAAW,CAAC,OAAO,CAAC,GAAG,IAAG;IACxB,QAAA,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,IAAG;gBACpC,KAAK,CAAC,cAAc,EAAE,CAAA;IACtB,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAA;gBAC1C,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;gBAC5C,IAAI,CAAC,MAAM,EAAE,CAAA;IACf,SAAC,CAAC,CAAA;IACJ,KAAC,CAAC,CAAA;QAEF,MAAM,SAAS,GAAG,QAAQ,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAA;IAEjE,IAAA,SAAS,CAAC,OAAO,CAAC,GAAG,IAAG;IACtB,QAAA,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,IAAG;gBACpC,KAAK,CAAC,cAAc,EAAE,CAAA;IACtB,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAA;gBAC1C,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;gBAC5C,IAAI,CAAC,MAAM,EAAE,CAAA;IACf,SAAC,CAAC,CAAA;IACJ,KAAC,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAA;IAEhE,IAAA,MAAM,CAAC,OAAO,CAAC,GAAG,IAAG;IACnB,QAAA,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,IAAG;gBACpC,KAAK,CAAC,cAAc,EAAE,CAAA;IACtB,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAA;gBAC1C,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;gBAC5C,IAAI,CAAC,cAAc,EAAE,CAAA;IACvB,SAAC,CAAC,CAAA;IACJ,KAAC,CAAC,CAAA;IACJ,CAAC,CAAC;;ICtPF;;;;;;IAMG;IAMH;;;IAGG;IACH,MAAM,QAAQ,GAAG,gBAAgB,CAAA;IACjC,MAAM,SAAS,GAAG,CAAI,CAAA,EAAA,QAAQ,EAAE,CAAA;IAChC,MAAM,eAAe,GAAG,CAAY,SAAA,EAAA,SAAS,EAAE,CAAA;IAC/C,MAAM,eAAe,GAAG,CAAY,SAAA,EAAA,SAAS,EAAE,CAAA;IAE/C,MAAM,0BAA0B,GAAG,gCAAgC,CAAA;IACnE,MAAM,sBAAsB,GAAG,4BAA4B,CAAA;IAC3D,MAAM,sBAAsB,GAAG,4BAA4B,CAAA;IAE3D;;;IAGG;IACH,MAAM,UAAU,CAAA;QAId,WAAY,CAAA,OAAoB,EAAE,MAAkB,EAAA;IAClD,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;IACvB,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;SACtB;QAED,YAAY,GAAA;IACV,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;YAExC,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAc,sBAAsB,CAAC,CAAA;YAChF,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAc,sBAAsB,CAAC,CAAA;IAEhF,QAAA,KAAK,QAAQ,CAAC,eAAe,CAAC,iBAAiB,EAAE,CAAA;YAEjD,IAAI,YAAY,EAAE;IAChB,YAAA,YAAY,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAA;aACpC;YAED,IAAI,YAAY,EAAE;IAChB,YAAA,YAAY,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAA;aACrC;IAED,QAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;SACnC;QAED,aAAa,GAAA;IACX,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;YAExC,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAc,sBAAsB,CAAC,CAAA;YAChF,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAc,sBAAsB,CAAC,CAAA;IAEhF,QAAA,KAAK,QAAQ,CAAC,cAAc,EAAE,CAAA;YAE9B,IAAI,YAAY,EAAE;IAChB,YAAA,YAAY,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAA;aACrC;YAED,IAAI,YAAY,EAAE;IAChB,YAAA,YAAY,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAA;aACpC;IAED,QAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;SACnC;QAED,gBAAgB,GAAA;IACd,QAAA,IAAI,QAAQ,CAAC,iBAAiB,EAAE;IAC9B,YAAA,IAAI,QAAQ,CAAC,iBAAiB,EAAE;oBAC9B,IAAI,CAAC,aAAa,EAAE,CAAA;iBACrB;qBAAM;oBACL,IAAI,CAAC,YAAY,EAAE,CAAA;iBACpB;aACF;SACF;IACF,CAAA;IAED;;;IAGG;IACH,kBAAkB,CAAC,MAAK;QACtB,MAAM,OAAO,GAAG,QAAQ,CAAC,gBAAgB,CAAC,0BAA0B,CAAC,CAAA;IAErE,IAAA,OAAO,CAAC,OAAO,CAAC,GAAG,IAAG;IACpB,QAAA,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,IAAG;gBACpC,KAAK,CAAC,cAAc,EAAE,CAAA;IAEtB,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAA;gBAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAA4B,CAAA;gBAEpF,IAAI,MAAM,EAAE;oBACV,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;oBAC9C,IAAI,CAAC,gBAAgB,EAAE,CAAA;iBACxB;IACH,SAAC,CAAC,CAAA;IACJ,KAAC,CAAC,CAAA;IACJ,CAAC,CAAC;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/front/lib/AdminLTE/dist/js/adminlte.min.js.map b/front/lib/AdminLTE/dist/js/adminlte.min.js.map new file mode 100755 index 00000000..dfa2c5dc --- /dev/null +++ b/front/lib/AdminLTE/dist/js/adminlte.min.js.map @@ -0,0 +1 @@ +{"version":3,"names":["domContentLoadedCallbacks","onDOMContentLoaded","callback","document","readyState","length","addEventListener","push","slideUp","target","duration","style","transitionProperty","transitionDuration","boxSizing","height","offsetHeight","overflow","window","setTimeout","paddingTop","paddingBottom","marginTop","marginBottom","display","removeProperty","slideDown","getComputedStyle","CLASS_NAME_HOLD_TRANSITIONS","Layout","constructor","element","this","_element","holdTransition","resizeTimer","body","classList","add","clearTimeout","remove","EVENT_KEY","EVENT_OPEN","EVENT_COLLAPSE","CLASS_NAME_SIDEBAR_MINI","CLASS_NAME_SIDEBAR_COLLAPSE","CLASS_NAME_SIDEBAR_OPEN","CLASS_NAME_SIDEBAR_EXPAND","SELECTOR_SIDEBAR_EXPAND","SELECTOR_SIDEBAR_TOGGLE","Defaults","sidebarBreakpoint","PushMenu","config","_config","Object","assign","menusClose","querySelectorAll","forEach","navTree","navSidebar","querySelector","navItem","navI","expand","event","Event","dispatchEvent","collapse","addSidebarBreakPoint","sidebarExpandList","_b","_a","sidebarExpand","_c","Array","from","find","className","startsWith","sidebar","getElementsByClassName","sidebarContent","getPropertyValue","Number","replace","innerWidth","contains","toggle","init","data","sidebarOverlay","createElement","append","preventDefault","currentTarget","passive","btn","button","dataset","lteToggle","closest","EVENT_EXPANDED","EVENT_COLLAPSED","CLASS_NAME_MENU_OPEN","SELECTOR_NAV_ITEM","SELECTOR_TREEVIEW_MENU","Default","animationSpeed","accordion","Treeview","open","openMenuList","parentElement","openMenu","childElement","close","targetItem","targetLink","getAttribute","CLASS_NAME_DIRECT_CHAT_OPEN","DirectChat","chatPane","EVENT_REMOVE","EVENT_MAXIMIZED","EVENT_MINIMIZED","CLASS_NAME_CARD","CLASS_NAME_COLLAPSED","CLASS_NAME_COLLAPSING","CLASS_NAME_EXPANDING","CLASS_NAME_WAS_COLLAPSED","CLASS_NAME_MAXIMIZED","SELECTOR_DATA_REMOVE","SELECTOR_DATA_COLLAPSE","SELECTOR_DATA_MAXIMIZE","SELECTOR_CARD","SELECTOR_CARD_BODY","SELECTOR_CARD_FOOTER","collapseTrigger","removeTrigger","maximizeTrigger","CardWidget","_parent","el","HTMLElement","maximize","width","offsetWidth","transition","htmlTag","minimize","toggleMaximize","SELECTOR_FULLSCREEN_TOGGLE","SELECTOR_MAXIMIZE_ICON","SELECTOR_MINIMIZE_ICON","FullScreen","inFullScreen","iconMaximize","iconMinimize","documentElement","requestFullscreen","outFullscreen","exitFullscreen","toggleFullScreen","fullscreenEnabled","fullscreenElement","undefined"],"sources":["../../src/ts/util/index.ts","../../src/ts/layout.ts","../../src/ts/push-menu.ts","../../src/ts/treeview.ts","../../src/ts/direct-chat.ts","../../src/ts/card-widget.ts","../../src/ts/fullscreen.ts"],"sourcesContent":["const domContentLoadedCallbacks: Array<() => void> = []\n\nconst onDOMContentLoaded = (callback: () => void): void => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!domContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of domContentLoadedCallbacks) {\n callback()\n }\n })\n }\n\n domContentLoadedCallbacks.push(callback)\n } else {\n callback()\n }\n}\n\n/* SLIDE UP */\nconst slideUp = (target: HTMLElement, duration = 500) => {\n target.style.transitionProperty = 'height, margin, padding'\n target.style.transitionDuration = `${duration}ms`\n target.style.boxSizing = 'border-box'\n target.style.height = `${target.offsetHeight}px`\n target.style.overflow = 'hidden'\n\n window.setTimeout(() => {\n target.style.height = '0'\n target.style.paddingTop = '0'\n target.style.paddingBottom = '0'\n target.style.marginTop = '0'\n target.style.marginBottom = '0'\n }, 1)\n\n window.setTimeout(() => {\n target.style.display = 'none'\n target.style.removeProperty('height')\n target.style.removeProperty('padding-top')\n target.style.removeProperty('padding-bottom')\n target.style.removeProperty('margin-top')\n target.style.removeProperty('margin-bottom')\n target.style.removeProperty('overflow')\n target.style.removeProperty('transition-duration')\n target.style.removeProperty('transition-property')\n }, duration)\n}\n\n/* SLIDE DOWN */\nconst slideDown = (target: HTMLElement, duration = 500) => {\n target.style.removeProperty('display')\n let { display } = window.getComputedStyle(target)\n\n if (display === 'none') {\n display = 'block'\n }\n\n target.style.display = display\n const height = target.offsetHeight\n target.style.overflow = 'hidden'\n target.style.height = '0'\n target.style.paddingTop = '0'\n target.style.paddingBottom = '0'\n target.style.marginTop = '0'\n target.style.marginBottom = '0'\n\n window.setTimeout(() => {\n target.style.boxSizing = 'border-box'\n target.style.transitionProperty = 'height, margin, padding'\n target.style.transitionDuration = `${duration}ms`\n target.style.height = `${height}px`\n target.style.removeProperty('padding-top')\n target.style.removeProperty('padding-bottom')\n target.style.removeProperty('margin-top')\n target.style.removeProperty('margin-bottom')\n }, 1)\n\n window.setTimeout(() => {\n target.style.removeProperty('height')\n target.style.removeProperty('overflow')\n target.style.removeProperty('transition-duration')\n target.style.removeProperty('transition-property')\n }, duration)\n}\n\n/* TOGGLE */\nconst slideToggle = (target: HTMLElement, duration = 500) => {\n if (window.getComputedStyle(target).display === 'none') {\n slideDown(target, duration)\n return\n }\n\n slideUp(target, duration)\n}\n\nexport {\n onDOMContentLoaded,\n slideUp,\n slideDown,\n slideToggle\n}\n","/**\n * --------------------------------------------\n * @file AdminLTE layout.ts\n * @description Layout for AdminLTE.\n * @license MIT\n * --------------------------------------------\n */\n\nimport {\n onDOMContentLoaded\n} from './util/index'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst CLASS_NAME_HOLD_TRANSITIONS = 'hold-transition'\nconst CLASS_NAME_APP_LOADED = 'app-loaded'\n\n/**\n * Class Definition\n * ====================================================\n */\n\nclass Layout {\n _element: HTMLElement\n\n constructor(element: HTMLElement) {\n this._element = element\n }\n\n holdTransition(): void {\n let resizeTimer: ReturnType\n window.addEventListener('resize', () => {\n document.body.classList.add(CLASS_NAME_HOLD_TRANSITIONS)\n clearTimeout(resizeTimer)\n resizeTimer = setTimeout(() => {\n document.body.classList.remove(CLASS_NAME_HOLD_TRANSITIONS)\n }, 400)\n })\n }\n}\n\nonDOMContentLoaded(() => {\n const data = new Layout(document.body)\n data.holdTransition()\n setTimeout(() => {\n document.body.classList.add(CLASS_NAME_APP_LOADED)\n }, 400)\n})\n\nexport default Layout\n","/**\n * --------------------------------------------\n * @file AdminLTE push-menu.ts\n * @description Push menu for AdminLTE.\n * @license MIT\n * --------------------------------------------\n */\n\nimport {\n onDOMContentLoaded\n} from './util/index'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst DATA_KEY = 'lte.push-menu'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_OPEN = `open${EVENT_KEY}`\nconst EVENT_COLLAPSE = `collapse${EVENT_KEY}`\n\nconst CLASS_NAME_SIDEBAR_MINI = 'sidebar-mini'\nconst CLASS_NAME_SIDEBAR_COLLAPSE = 'sidebar-collapse'\nconst CLASS_NAME_SIDEBAR_OPEN = 'sidebar-open'\nconst CLASS_NAME_SIDEBAR_EXPAND = 'sidebar-expand'\nconst CLASS_NAME_SIDEBAR_OVERLAY = 'sidebar-overlay'\nconst CLASS_NAME_MENU_OPEN = 'menu-open'\n\nconst SELECTOR_APP_SIDEBAR = '.app-sidebar'\nconst SELECTOR_SIDEBAR_MENU = '.sidebar-menu'\nconst SELECTOR_NAV_ITEM = '.nav-item'\nconst SELECTOR_NAV_TREEVIEW = '.nav-treeview'\nconst SELECTOR_APP_WRAPPER = '.app-wrapper'\nconst SELECTOR_SIDEBAR_EXPAND = `[class*=\"${CLASS_NAME_SIDEBAR_EXPAND}\"]`\nconst SELECTOR_SIDEBAR_TOGGLE = '[data-lte-toggle=\"sidebar\"]'\n\ntype Config = {\n sidebarBreakpoint: number;\n}\n\nconst Defaults = {\n sidebarBreakpoint: 992\n}\n\n/**\n * Class Definition\n * ====================================================\n */\n\nclass PushMenu {\n _element: HTMLElement\n _config: Config\n\n constructor(element: HTMLElement, config: Config) {\n this._element = element\n this._config = { ...Defaults, ...config }\n }\n\n // TODO\n menusClose() {\n const navTreeview = document.querySelectorAll(SELECTOR_NAV_TREEVIEW)\n\n navTreeview.forEach(navTree => {\n navTree.style.removeProperty('display')\n navTree.style.removeProperty('height')\n })\n\n const navSidebar = document.querySelector(SELECTOR_SIDEBAR_MENU)\n const navItem = navSidebar?.querySelectorAll(SELECTOR_NAV_ITEM)\n\n if (navItem) {\n navItem.forEach(navI => {\n navI.classList.remove(CLASS_NAME_MENU_OPEN)\n })\n }\n }\n\n expand() {\n const event = new Event(EVENT_OPEN)\n\n document.body.classList.remove(CLASS_NAME_SIDEBAR_COLLAPSE)\n document.body.classList.add(CLASS_NAME_SIDEBAR_OPEN)\n\n this._element.dispatchEvent(event)\n }\n\n collapse() {\n const event = new Event(EVENT_COLLAPSE)\n\n document.body.classList.remove(CLASS_NAME_SIDEBAR_OPEN)\n document.body.classList.add(CLASS_NAME_SIDEBAR_COLLAPSE)\n\n this._element.dispatchEvent(event)\n }\n\n addSidebarBreakPoint() {\n const sidebarExpandList = document.querySelector(SELECTOR_SIDEBAR_EXPAND)?.classList ?? []\n const sidebarExpand = Array.from(sidebarExpandList).find(className => className.startsWith(CLASS_NAME_SIDEBAR_EXPAND)) ?? ''\n const sidebar = document.getElementsByClassName(sidebarExpand)[0]\n const sidebarContent = window.getComputedStyle(sidebar, '::before').getPropertyValue('content')\n this._config = { ...this._config, sidebarBreakpoint: Number(sidebarContent.replace(/[^\\d.-]/g, '')) }\n\n if (window.innerWidth <= this._config.sidebarBreakpoint) {\n this.collapse()\n } else {\n if (!document.body.classList.contains(CLASS_NAME_SIDEBAR_MINI)) {\n this.expand()\n }\n\n if (document.body.classList.contains(CLASS_NAME_SIDEBAR_MINI) && document.body.classList.contains(CLASS_NAME_SIDEBAR_COLLAPSE)) {\n this.collapse()\n }\n }\n }\n\n toggle() {\n if (document.body.classList.contains(CLASS_NAME_SIDEBAR_COLLAPSE)) {\n this.expand()\n } else {\n this.collapse()\n }\n }\n\n init() {\n this.addSidebarBreakPoint()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nonDOMContentLoaded(() => {\n const sidebar = document?.querySelector(SELECTOR_APP_SIDEBAR) as HTMLElement | undefined\n\n if (sidebar) {\n const data = new PushMenu(sidebar, Defaults)\n data.init()\n\n window.addEventListener('resize', () => {\n data.init()\n })\n }\n\n const sidebarOverlay = document.createElement('div')\n sidebarOverlay.className = CLASS_NAME_SIDEBAR_OVERLAY\n document.querySelector(SELECTOR_APP_WRAPPER)?.append(sidebarOverlay)\n\n sidebarOverlay.addEventListener('touchstart', event => {\n event.preventDefault()\n const target = event.currentTarget as HTMLElement\n const data = new PushMenu(target, Defaults)\n data.collapse()\n }, { passive: true })\n sidebarOverlay.addEventListener('click', event => {\n event.preventDefault()\n const target = event.currentTarget as HTMLElement\n const data = new PushMenu(target, Defaults)\n data.collapse()\n })\n\n const fullBtn = document.querySelectorAll(SELECTOR_SIDEBAR_TOGGLE)\n\n fullBtn.forEach(btn => {\n btn.addEventListener('click', event => {\n event.preventDefault()\n\n let button = event.currentTarget as HTMLElement | undefined\n\n if (button?.dataset.lteToggle !== 'sidebar') {\n button = button?.closest(SELECTOR_SIDEBAR_TOGGLE) as HTMLElement | undefined\n }\n\n if (button) {\n event?.preventDefault()\n const data = new PushMenu(button, Defaults)\n data.toggle()\n }\n })\n })\n})\n\nexport default PushMenu\n","/**\n * --------------------------------------------\n * @file AdminLTE treeview.ts\n * @description Treeview plugin for AdminLTE.\n * @license MIT\n * --------------------------------------------\n */\n\nimport {\n onDOMContentLoaded,\n slideDown,\n slideUp\n} from './util/index'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n// const NAME = 'Treeview'\nconst DATA_KEY = 'lte.treeview'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_EXPANDED = `expanded${EVENT_KEY}`\nconst EVENT_COLLAPSED = `collapsed${EVENT_KEY}`\n// const EVENT_LOAD_DATA_API = `load${EVENT_KEY}`\n\nconst CLASS_NAME_MENU_OPEN = 'menu-open'\nconst SELECTOR_NAV_ITEM = '.nav-item'\nconst SELECTOR_NAV_LINK = '.nav-link'\nconst SELECTOR_TREEVIEW_MENU = '.nav-treeview'\nconst SELECTOR_DATA_TOGGLE = '[data-lte-toggle=\"treeview\"]'\n\nconst Default = {\n animationSpeed: 300,\n accordion: true\n}\n\ntype Config = {\n animationSpeed: number;\n accordion: boolean;\n}\n\n/**\n * Class Definition\n * ====================================================\n */\n\nclass Treeview {\n _element: HTMLElement\n _config: Config\n\n constructor(element: HTMLElement, config: Config) {\n this._element = element\n this._config = { ...Default, ...config }\n }\n\n open(): void {\n const event = new Event(EVENT_EXPANDED)\n\n if (this._config.accordion) {\n const openMenuList = this._element.parentElement?.querySelectorAll(`${SELECTOR_NAV_ITEM}.${CLASS_NAME_MENU_OPEN}`)\n\n openMenuList?.forEach(openMenu => {\n if (openMenu !== this._element.parentElement) {\n openMenu.classList.remove(CLASS_NAME_MENU_OPEN)\n const childElement = openMenu?.querySelector(SELECTOR_TREEVIEW_MENU) as HTMLElement | undefined\n if (childElement) {\n slideUp(childElement, this._config.animationSpeed)\n }\n }\n })\n }\n\n this._element.classList.add(CLASS_NAME_MENU_OPEN)\n\n const childElement = this._element?.querySelector(SELECTOR_TREEVIEW_MENU) as HTMLElement | undefined\n if (childElement) {\n slideDown(childElement, this._config.animationSpeed)\n }\n\n this._element.dispatchEvent(event)\n }\n\n close(): void {\n const event = new Event(EVENT_COLLAPSED)\n\n this._element.classList.remove(CLASS_NAME_MENU_OPEN)\n\n const childElement = this._element?.querySelector(SELECTOR_TREEVIEW_MENU) as HTMLElement | undefined\n if (childElement) {\n slideUp(childElement, this._config.animationSpeed)\n }\n\n this._element.dispatchEvent(event)\n }\n\n toggle(): void {\n if (this._element.classList.contains(CLASS_NAME_MENU_OPEN)) {\n this.close()\n } else {\n this.open()\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nonDOMContentLoaded(() => {\n const button = document.querySelectorAll(SELECTOR_DATA_TOGGLE)\n\n button.forEach(btn => {\n btn.addEventListener('click', event => {\n const target = event.target as HTMLElement\n const targetItem = target.closest(SELECTOR_NAV_ITEM) as HTMLElement | undefined\n const targetLink = target.closest(SELECTOR_NAV_LINK) as HTMLAnchorElement | undefined\n\n if (target?.getAttribute('href') === '#' || targetLink?.getAttribute('href') === '#') {\n event.preventDefault()\n }\n\n if (targetItem) {\n const data = new Treeview(targetItem, Default)\n data.toggle()\n }\n })\n })\n})\n\nexport default Treeview\n","/**\n * --------------------------------------------\n * @file AdminLTE direct-chat.ts\n * @description Direct chat for AdminLTE.\n * @license MIT\n * --------------------------------------------\n */\n\nimport {\n onDOMContentLoaded\n} from './util/index'\n\n/**\n * Constants\n * ====================================================\n */\n\nconst DATA_KEY = 'lte.direct-chat'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_EXPANDED = `expanded${EVENT_KEY}`\nconst EVENT_COLLAPSED = `collapsed${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-lte-toggle=\"chat-pane\"]'\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 _element: HTMLElement\n constructor(element: HTMLElement) {\n this._element = element\n }\n\n toggle(): void {\n if (this._element.classList.contains(CLASS_NAME_DIRECT_CHAT_OPEN)) {\n const event = new Event(EVENT_COLLAPSED)\n\n this._element.classList.remove(CLASS_NAME_DIRECT_CHAT_OPEN)\n\n this._element.dispatchEvent(event)\n } else {\n const event = new Event(EVENT_EXPANDED)\n\n this._element.classList.add(CLASS_NAME_DIRECT_CHAT_OPEN)\n\n this._element.dispatchEvent(event)\n }\n }\n}\n\n/**\n *\n * Data Api implementation\n * ====================================================\n */\n\nonDOMContentLoaded(() => {\n const button = document.querySelectorAll(SELECTOR_DATA_TOGGLE)\n\n button.forEach(btn => {\n btn.addEventListener('click', event => {\n event.preventDefault()\n const target = event.target as HTMLElement\n const chatPane = target.closest(SELECTOR_DIRECT_CHAT) as HTMLElement | undefined\n\n if (chatPane) {\n const data = new DirectChat(chatPane)\n data.toggle()\n }\n })\n })\n})\n\nexport default DirectChat\n","/**\n * --------------------------------------------\n * @file AdminLTE card-widget.ts\n * @description Card widget for AdminLTE.\n * @license MIT\n * --------------------------------------------\n */\n\nimport {\n onDOMContentLoaded,\n slideUp,\n slideDown\n} from './util/index'\n\n/**\n * Constants\n * ====================================================\n */\n\nconst DATA_KEY = 'lte.card-widget'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_COLLAPSED = `collapsed${EVENT_KEY}`\nconst EVENT_EXPANDED = `expanded${EVENT_KEY}`\nconst EVENT_REMOVE = `remove${EVENT_KEY}`\nconst EVENT_MAXIMIZED = `maximized${EVENT_KEY}`\nconst EVENT_MINIMIZED = `minimized${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-lte-toggle=\"card-remove\"]'\nconst SELECTOR_DATA_COLLAPSE = '[data-lte-toggle=\"card-collapse\"]'\nconst SELECTOR_DATA_MAXIMIZE = '[data-lte-toggle=\"card-maximize\"]'\nconst SELECTOR_CARD = `.${CLASS_NAME_CARD}`\nconst SELECTOR_CARD_BODY = '.card-body'\nconst SELECTOR_CARD_FOOTER = '.card-footer'\n\ntype Config = {\n animationSpeed: number;\n collapseTrigger: string;\n removeTrigger: string;\n maximizeTrigger: string;\n}\n\nconst Default: Config = {\n animationSpeed: 500,\n collapseTrigger: SELECTOR_DATA_COLLAPSE,\n removeTrigger: SELECTOR_DATA_REMOVE,\n maximizeTrigger: SELECTOR_DATA_MAXIMIZE\n}\n\nclass CardWidget {\n _element: HTMLElement\n _parent: HTMLElement | undefined\n _clone: HTMLElement | undefined\n _config: Config\n\n constructor(element: HTMLElement, config: Config) {\n this._element = element\n this._parent = element.closest(SELECTOR_CARD) as HTMLElement | undefined\n\n if (element.classList.contains(CLASS_NAME_CARD)) {\n this._parent = element\n }\n\n this._config = { ...Default, ...config }\n }\n\n collapse() {\n const event = new Event(EVENT_COLLAPSED)\n\n if (this._parent) {\n this._parent.classList.add(CLASS_NAME_COLLAPSING)\n\n const elm = this._parent?.querySelectorAll(`${SELECTOR_CARD_BODY}, ${SELECTOR_CARD_FOOTER}`)\n\n elm.forEach(el => {\n if (el instanceof HTMLElement) {\n slideUp(el, this._config.animationSpeed)\n }\n })\n\n setTimeout(() => {\n if (this._parent) {\n this._parent.classList.add(CLASS_NAME_COLLAPSED)\n this._parent.classList.remove(CLASS_NAME_COLLAPSING)\n }\n }, this._config.animationSpeed)\n }\n\n this._element?.dispatchEvent(event)\n }\n\n expand() {\n const event = new Event(EVENT_EXPANDED)\n\n if (this._parent) {\n this._parent.classList.add(CLASS_NAME_EXPANDING)\n\n const elm = this._parent?.querySelectorAll(`${SELECTOR_CARD_BODY}, ${SELECTOR_CARD_FOOTER}`)\n\n elm.forEach(el => {\n if (el instanceof HTMLElement) {\n slideDown(el, this._config.animationSpeed)\n }\n })\n\n setTimeout(() => {\n if (this._parent) {\n this._parent.classList.remove(CLASS_NAME_COLLAPSED)\n this._parent.classList.remove(CLASS_NAME_EXPANDING)\n }\n }, this._config.animationSpeed)\n }\n\n this._element?.dispatchEvent(event)\n }\n\n remove() {\n const event = new Event(EVENT_REMOVE)\n\n if (this._parent) {\n slideUp(this._parent, this._config.animationSpeed)\n }\n\n this._element?.dispatchEvent(event)\n }\n\n toggle() {\n if (this._parent?.classList.contains(CLASS_NAME_COLLAPSED)) {\n this.expand()\n return\n }\n\n this.collapse()\n }\n\n maximize() {\n const event = new Event(EVENT_MAXIMIZED)\n\n if (this._parent) {\n this._parent.style.height = `${this._parent.offsetHeight}px`\n this._parent.style.width = `${this._parent.offsetWidth}px`\n this._parent.style.transition = 'all .15s'\n\n setTimeout(() => {\n const htmlTag = document.querySelector('html')\n\n if (htmlTag) {\n htmlTag.classList.add(CLASS_NAME_MAXIMIZED)\n }\n\n if (this._parent) {\n this._parent.classList.add(CLASS_NAME_MAXIMIZED)\n\n if (this._parent.classList.contains(CLASS_NAME_COLLAPSED)) {\n this._parent.classList.add(CLASS_NAME_WAS_COLLAPSED)\n }\n }\n }, 150)\n }\n\n this._element?.dispatchEvent(event)\n }\n\n minimize() {\n const event = new Event(EVENT_MINIMIZED)\n\n if (this._parent) {\n this._parent.style.height = 'auto'\n this._parent.style.width = 'auto'\n this._parent.style.transition = 'all .15s'\n\n setTimeout(() => {\n const htmlTag = document.querySelector('html')\n\n if (htmlTag) {\n htmlTag.classList.remove(CLASS_NAME_MAXIMIZED)\n }\n\n if (this._parent) {\n this._parent.classList.remove(CLASS_NAME_MAXIMIZED)\n\n if (this._parent?.classList.contains(CLASS_NAME_WAS_COLLAPSED)) {\n this._parent.classList.remove(CLASS_NAME_WAS_COLLAPSED)\n }\n }\n }, 10)\n }\n\n this._element?.dispatchEvent(event)\n }\n\n toggleMaximize() {\n if (this._parent?.classList.contains(CLASS_NAME_MAXIMIZED)) {\n this.minimize()\n return\n }\n\n this.maximize()\n }\n}\n\n/**\n *\n * Data Api implementation\n * ====================================================\n */\n\nonDOMContentLoaded(() => {\n const collapseBtn = document.querySelectorAll(SELECTOR_DATA_COLLAPSE)\n\n collapseBtn.forEach(btn => {\n btn.addEventListener('click', event => {\n event.preventDefault()\n const target = event.target as HTMLElement\n const data = new CardWidget(target, Default)\n data.toggle()\n })\n })\n\n const removeBtn = document.querySelectorAll(SELECTOR_DATA_REMOVE)\n\n removeBtn.forEach(btn => {\n btn.addEventListener('click', event => {\n event.preventDefault()\n const target = event.target as HTMLElement\n const data = new CardWidget(target, Default)\n data.remove()\n })\n })\n\n const maxBtn = document.querySelectorAll(SELECTOR_DATA_MAXIMIZE)\n\n maxBtn.forEach(btn => {\n btn.addEventListener('click', event => {\n event.preventDefault()\n const target = event.target as HTMLElement\n const data = new CardWidget(target, Default)\n data.toggleMaximize()\n })\n })\n})\n\nexport default CardWidget\n","/**\n * --------------------------------------------\n * @file AdminLTE fullscreen.ts\n * @description Fullscreen plugin for AdminLTE.\n * @license MIT\n * --------------------------------------------\n */\n\nimport {\n onDOMContentLoaded\n} from './util/index'\n\n/**\n * Constants\n * ============================================================================\n */\nconst DATA_KEY = 'lte.fullscreen'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_MAXIMIZED = `maximized${EVENT_KEY}`\nconst EVENT_MINIMIZED = `minimized${EVENT_KEY}`\n\nconst SELECTOR_FULLSCREEN_TOGGLE = '[data-lte-toggle=\"fullscreen\"]'\nconst SELECTOR_MAXIMIZE_ICON = '[data-lte-icon=\"maximize\"]'\nconst SELECTOR_MINIMIZE_ICON = '[data-lte-icon=\"minimize\"]'\n\n/**\n * Class Definition.\n * ============================================================================\n */\nclass FullScreen {\n _element: HTMLElement\n _config: undefined\n\n constructor(element: HTMLElement, config?: undefined) {\n this._element = element\n this._config = config\n }\n\n inFullScreen(): void {\n const event = new Event(EVENT_MAXIMIZED)\n\n const iconMaximize = document.querySelector(SELECTOR_MAXIMIZE_ICON)\n const iconMinimize = document.querySelector(SELECTOR_MINIMIZE_ICON)\n\n void document.documentElement.requestFullscreen()\n\n if (iconMaximize) {\n iconMaximize.style.display = 'none'\n }\n\n if (iconMinimize) {\n iconMinimize.style.display = 'block'\n }\n\n this._element.dispatchEvent(event)\n }\n\n outFullscreen(): void {\n const event = new Event(EVENT_MINIMIZED)\n\n const iconMaximize = document.querySelector(SELECTOR_MAXIMIZE_ICON)\n const iconMinimize = document.querySelector(SELECTOR_MINIMIZE_ICON)\n\n void document.exitFullscreen()\n\n if (iconMaximize) {\n iconMaximize.style.display = 'block'\n }\n\n if (iconMinimize) {\n iconMinimize.style.display = 'none'\n }\n\n this._element.dispatchEvent(event)\n }\n\n toggleFullScreen(): void {\n if (document.fullscreenEnabled) {\n if (document.fullscreenElement) {\n this.outFullscreen()\n } else {\n this.inFullScreen()\n }\n }\n }\n}\n\n/**\n * Data Api implementation\n * ============================================================================\n */\nonDOMContentLoaded(() => {\n const buttons = document.querySelectorAll(SELECTOR_FULLSCREEN_TOGGLE)\n\n buttons.forEach(btn => {\n btn.addEventListener('click', event => {\n event.preventDefault()\n\n const target = event.target as HTMLElement\n const button = target.closest(SELECTOR_FULLSCREEN_TOGGLE) as HTMLElement | undefined\n\n if (button) {\n const data = new FullScreen(button, undefined)\n data.toggleFullScreen()\n }\n })\n })\n})\n\nexport default FullScreen\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/front/lib/datatables.net-bs/.bower.json b/front/lib/datatables.net-bs/.bower.json new file mode 100755 index 00000000..23e1b847 --- /dev/null +++ b/front/lib/datatables.net-bs/.bower.json @@ -0,0 +1,48 @@ +{ + "name": "datatables.net-bs", + "description": "DataTables for jQuery with styling for [Bootstrap](http://getbootstrap.com/)", + "main": [ + "js/dataTables.bootstrap.js", + "css/dataTables.bootstrap.css" + ], + "keywords": [ + "filter", + "sort", + "DataTables", + "jQuery", + "table", + "Bootstrap" + ], + "dependencies": { + "jquery": ">=1.7", + "datatables.net": ">=1.10.9" + }, + "moduleType": [ + "globals", + "amd", + "node" + ], + "ignore": [ + "composer.json", + "datatables.json", + "package.json" + ], + "authors": [ + { + "name": "SpryMedia Ltd", + "homepage": "https://datatables.net" + } + ], + "homepage": "https://datatables.net", + "license": "MIT", + "version": "2.1.1", + "_release": "2.1.1", + "_resolution": { + "type": "version", + "tag": "2.1.1", + "commit": "c9aedb3c531795574d69203688888a6c16e02265" + }, + "_source": "https://github.com/DataTables/Dist-DataTables-Bootstrap.git", + "_target": "^2.1.1", + "_originalSource": "datatables.net-bs" +} \ No newline at end of file diff --git a/front/lib/datatables.net-bs/License.txt b/front/lib/datatables.net-bs/License.txt new file mode 100755 index 00000000..379a7e7c --- /dev/null +++ b/front/lib/datatables.net-bs/License.txt @@ -0,0 +1,20 @@ +Copyright SpryMedia Limited and other contributors +http://datatables.net + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/front/lib/datatables.net-bs/Readme.md b/front/lib/datatables.net-bs/Readme.md new file mode 100755 index 00000000..54acee4e --- /dev/null +++ b/front/lib/datatables.net-bs/Readme.md @@ -0,0 +1,50 @@ +# DataTables for jQuery with styling for [Bootstrap](http://getbootstrap.com/) + +This package contains distribution files required to style [DataTables library](https://datatables.net) for [jQuery](http://jquery.com/) with styling for [Bootstrap](http://getbootstrap.com/). + +DataTables is a table enhancing library which adds features such as paging, ordering, search, scrolling and many more to a static HTML page. A comprehensive API is also available that can be used to manipulate the table. Please refer to the [DataTables web-site](//datatables.net) for a full range of documentation and examples. + + +## Installation + +### Browser + +For inclusion of this library using a standard ` + + + + + + + + + + + - - + @@ -59,10 +69,7 @@ - - - - + + diff --git a/front/presence.php b/front/presence.php index 8b6908c4..340df7d3 100755 --- a/front/presence.php +++ b/front/presence.php @@ -189,9 +189,6 @@ - - - - + + diff --git a/front/systeminfo.php b/front/systeminfo.php index 07ae0738..2bd96be5 100755 --- a/front/systeminfo.php +++ b/front/systeminfo.php @@ -13,6 +13,9 @@ require 'php/templates/header.php'; ?> + + +
diff --git a/front/userNotifications.php b/front/userNotifications.php index de6874da..3cef875c 100755 --- a/front/userNotifications.php +++ b/front/userNotifications.php @@ -7,6 +7,9 @@ require 'php/templates/header.php'; + + +
diff --git a/front/workflows.php b/front/workflows.php index ad376e94..f771c58f 100755 --- a/front/workflows.php +++ b/front/workflows.php @@ -3,7 +3,8 @@ require 'php/templates/header.php'; require 'php/templates/notification.php'; ?> - + +
diff --git a/log/.gitignore b/log/.gitignore old mode 100755 new mode 100644 diff --git a/log/plugins/.gitignore b/log/plugins/.gitignore old mode 100755 new mode 100644