@vc-shell/framework 1.1.2 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (266) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/apl-B2DGVGxc.js +76 -0
  3. package/dist/asciiarmor-2LVJmxlE.js +34 -0
  4. package/dist/asn1-jKiBa2Ya.js +95 -0
  5. package/dist/asterisk-DS281yxp.js +271 -0
  6. package/dist/brainfuck-C_p9pTT8.js +34 -0
  7. package/dist/clike-BUuHEmgZ.js +620 -0
  8. package/dist/clojure-CCKyeQKf.js +800 -0
  9. package/dist/cmake-CuaCgAKt.js +28 -0
  10. package/dist/cobol-BlTKFDRj.js +72 -0
  11. package/dist/coffeescript-BVCvwO8I.js +179 -0
  12. package/dist/commonlisp-D_kxz07b.js +75 -0
  13. package/dist/crystal-D309uH6_.js +217 -0
  14. package/dist/css-bIlmDBTK.js +1560 -0
  15. package/dist/cypher-BMq4Fwjl.js +68 -0
  16. package/dist/d-BZcgY6La.js +127 -0
  17. package/dist/diff-Cg9d_RX2.js +18 -0
  18. package/dist/{assets/dockerfile-D0MivFIF.js → dockerfile-DIy8NleC.js} +36 -41
  19. package/dist/dtd-CtLokQ-U.js +84 -0
  20. package/dist/dylan-QYeExnWK.js +234 -0
  21. package/dist/ebnf-DUPDuY4r.js +78 -0
  22. package/dist/ecl-CiXN-g_D.js +121 -0
  23. package/dist/eiffel-yQhjl4T1.js +110 -0
  24. package/dist/elm-CNT9vbN0.js +108 -0
  25. package/dist/erlang-CFOYdy9e.js +487 -0
  26. package/dist/factor-DDOC7X6P.js +65 -0
  27. package/dist/fcl-CPC2WYrI.js +103 -0
  28. package/dist/forth-BmxRyE9S.js +60 -0
  29. package/dist/fortran-9bvPyrOW.js +442 -0
  30. package/dist/framework.js +288 -29
  31. package/dist/gas-BdfkXJT_.js +183 -0
  32. package/dist/gherkin-CJuwpceU.js +34 -0
  33. package/dist/groovy-DZeT_VM-.js +146 -0
  34. package/dist/haskell-Bvt3Qq1t.js +375 -0
  35. package/dist/haxe-70NVW1pR.js +359 -0
  36. package/dist/http-D9LttvKF.js +44 -0
  37. package/dist/idl-B6TRFYjl.js +947 -0
  38. package/dist/{assets/index-C7zlEJy8.js → index-B83didIY.js} +229 -302
  39. package/dist/{assets/index-BT8o9-M5.js → index-BKR3ecN5.js} +267 -386
  40. package/dist/{assets/index-B1srGfDb.js → index-BN-_cebP.js} +119 -165
  41. package/dist/index-BUHouW8T.js +249 -0
  42. package/dist/index-BW3krAiY.js +341 -0
  43. package/dist/index-C6tcHNVl.js +75 -0
  44. package/dist/index-CGyGGihY.js +538 -0
  45. package/dist/{assets/index-DMTL7O1s.js → index-CnQ56kqq.js} +570 -586
  46. package/dist/index-Cv6c_1IG.js +71 -0
  47. package/dist/{assets/index-CeeaNa4F.js → index-CxMfHOup.js} +136 -167
  48. package/dist/index-DRL7VovM.js +308 -0
  49. package/dist/index-Dfcy8w9c.js +58 -0
  50. package/dist/{assets/index-CtmpJVwa.js → index-DyGIijU2.js} +270 -312
  51. package/dist/index-Ek7_XgGk.js +98 -0
  52. package/dist/{assets/index-Bv_z_qRq.js → index-TSGli7LX.js} +121 -124
  53. package/dist/index-UnPPbmRc.js +145659 -0
  54. package/dist/{assets/index-BKF-A58l.js → index-xFQltarK.js} +79 -92
  55. package/dist/index.css +9 -18
  56. package/dist/javascript-WMWNx-Vj.js +690 -0
  57. package/dist/jinja2-DnB6dQmV.js +154 -0
  58. package/dist/julia-DpvXAuO6.js +241 -0
  59. package/dist/livescript-CanGTf8u.js +272 -0
  60. package/dist/lua-XplVlWi_.js +217 -0
  61. package/dist/mathematica-jaRHnSxC.js +35 -0
  62. package/dist/mbox-BctzC1hL.js +76 -0
  63. package/dist/mirc-CFBPAOaF.js +72 -0
  64. package/dist/mllike-BSnXJBGA.js +272 -0
  65. package/dist/modelica-vUgVs--1.js +93 -0
  66. package/dist/mscgen-Cpl0NYLN.js +104 -0
  67. package/dist/mumps-CQoS1kWX.js +25 -0
  68. package/dist/nginx-zDPm3Z74.js +89 -0
  69. package/dist/nsis-fePjrhq7.js +62 -0
  70. package/dist/ntriples-CsNjv2QF.js +79 -0
  71. package/dist/octave-C8PmmSRH.js +143 -0
  72. package/dist/oz-Ce8aN8oE.js +151 -0
  73. package/dist/pascal-De0D6mP7.js +77 -0
  74. package/dist/perl-B4bSCe1C.js +915 -0
  75. package/dist/pig-D24Z8EXi.js +54 -0
  76. package/dist/powershell-DkYVfTzP.js +249 -0
  77. package/dist/properties-Dn9wna3M.js +26 -0
  78. package/dist/protobuf-BPIjwpzm.js +49 -0
  79. package/dist/pug-BqUR2bBq.js +248 -0
  80. package/dist/puppet-nyd4dhjf.js +45 -0
  81. package/dist/python-B5QdSKoL.js +313 -0
  82. package/dist/q-DXjKs-tC.js +83 -0
  83. package/dist/r-LKEuhEGI.js +104 -0
  84. package/dist/rpm-IznJm2Xc.js +57 -0
  85. package/dist/ruby-CcYfvIk6.js +228 -0
  86. package/dist/sas-7E8yHoCW.js +105 -0
  87. package/dist/scheme-DjibxsNh.js +124 -0
  88. package/dist/shell-C0C2sNA_.js +182 -0
  89. package/dist/sieve-Bwz7vjP5.js +72 -0
  90. package/dist/simple-mode-B0dvCdAA.js +89 -0
  91. package/dist/smalltalk-Bhddl2pB.js +48 -0
  92. package/dist/solr-BNlsLglM.js +41 -0
  93. package/dist/sparql-FarWu_Gb.js +197 -0
  94. package/dist/spreadsheet-C-cy4P5N.js +49 -0
  95. package/dist/sql-mMre1Bo3.js +282 -0
  96. package/dist/stex-92raWT1r.js +129 -0
  97. package/dist/stylus-CAdqWld3.js +250 -0
  98. package/dist/swift-DSxqR9R6.js +230 -0
  99. package/dist/tcl-xfoLljhY.js +81 -0
  100. package/dist/textile-D1AWE-pc.js +295 -0
  101. package/dist/tiddlywiki-5wqsXtSk.js +155 -0
  102. package/dist/tiki-__Kn3CeS.js +181 -0
  103. package/dist/toml-BHiuTcfn.js +49 -0
  104. package/dist/troff-D2UO-fKf.js +35 -0
  105. package/dist/ttcn-Bsa4sfRm.js +123 -0
  106. package/dist/ttcn-cfg-Bac_acMi.js +88 -0
  107. package/dist/turtle-xwJUxoPV.js +80 -0
  108. package/dist/vb-c2kQGd6-.js +74 -0
  109. package/dist/vbscript-Dz1TtKsy.js +324 -0
  110. package/dist/velocity-DJd0pTTC.js +96 -0
  111. package/dist/verilog-C4VGD9n1.js +263 -0
  112. package/dist/vhdl-T9HkrbI2.js +106 -0
  113. package/dist/webidl-CjfDENEo.js +155 -0
  114. package/dist/xquery-BUQdORAS.js +422 -0
  115. package/dist/yacas-C0absKBh.js +73 -0
  116. package/dist/z80-C8rPtw-0.js +61 -0
  117. package/package.json +4 -4
  118. package/dist/assets/apl-NdZ6-T1z.js +0 -142
  119. package/dist/assets/asciiarmor-CmJEbAuq.js +0 -56
  120. package/dist/assets/asn1-Ctc8K72v.js +0 -192
  121. package/dist/assets/asterisk-D6r__RMF.js +0 -187
  122. package/dist/assets/brainfuck-COwWCBpq.js +0 -70
  123. package/dist/assets/clike-C-PtfL50.js +0 -1019
  124. package/dist/assets/clojure-C2XPrGCa.js +0 -274
  125. package/dist/assets/cmake-BGrEgXCL.js +0 -81
  126. package/dist/assets/cobol-DShPmpZe.js +0 -234
  127. package/dist/assets/coffeescript-BG8vTfSz.js +0 -329
  128. package/dist/assets/commonlisp-8oE2EpEe.js +0 -108
  129. package/dist/assets/core-api-BMLS9FrT.js +0 -8288
  130. package/dist/assets/core-composables-DYxpIWyY.js +0 -1799
  131. package/dist/assets/core-constants-DiKDBbnD.js +0 -83
  132. package/dist/assets/core-directives-QhJx9kWh.js +0 -41
  133. package/dist/assets/core-interceptors-CSjUvxQ0.js +0 -78
  134. package/dist/assets/core-plugins-wv2bDZ0l.js +0 -4919
  135. package/dist/assets/core-services-CAfJRsjs.js +0 -4
  136. package/dist/assets/core-utilities-BTktq_a-.js +0 -33
  137. package/dist/assets/crystal--rIRMl16.js +0 -419
  138. package/dist/assets/css/core-directives-FL4vIIkN.css +0 -73
  139. package/dist/assets/css/fonts-M1mtyV8L.css +0 -305
  140. package/dist/assets/css/icons-css-DbCVsovz.css +0 -41
  141. package/dist/assets/css/shared-components-bnLHdCtf.css +0 -429
  142. package/dist/assets/css/shared-modules-CNOICmYQ.css +0 -45
  143. package/dist/assets/css/styles-C62nDZwV.css +0 -4096
  144. package/dist/assets/css/ui-app-Bh9hmlIB.css +0 -1287
  145. package/dist/assets/css/ui-content-B29jsmK7.css +0 -1187
  146. package/dist/assets/css/ui-controls-CRtfFczw.css +0 -387
  147. package/dist/assets/css/ui-data-CYLxfdUa.css +0 -1555
  148. package/dist/assets/css/ui-form-C3WrWfVl.css +0 -71
  149. package/dist/assets/css/ui-form-fields-DOtHhDeM.css +0 -1360
  150. package/dist/assets/css/ui-helpers-bOoNv5dS.css +0 -37
  151. package/dist/assets/css/ui-indicators-CybQnCoU.css +0 -628
  152. package/dist/assets/css/ui-layout-DyGKgizy.css +0 -251
  153. package/dist/assets/css/ui-media-TWYep8js.css +0 -298
  154. package/dist/assets/css/ui-media-advanced-BGxy3VSB.css +0 -183
  155. package/dist/assets/css/ui-navigation-DcPRn8SB.css +0 -1693
  156. package/dist/assets/css-C_ZeEwz2.js +0 -847
  157. package/dist/assets/cypher-Bayei42D.js +0 -122
  158. package/dist/assets/d-B0hhz6be.js +0 -205
  159. package/dist/assets/diff-DQutOIXs.js +0 -30
  160. package/dist/assets/dtd-C1CeYVnM.js +0 -121
  161. package/dist/assets/dylan-Dm9-uD-A.js +0 -337
  162. package/dist/assets/ebnf-jWG_1Yly.js +0 -151
  163. package/dist/assets/ecl-CgJPA6z9.js +0 -190
  164. package/dist/assets/eiffel-lj7uLahq.js +0 -146
  165. package/dist/assets/elm-Cz7o1ijk.js +0 -230
  166. package/dist/assets/erlang-CyL5QOyR.js +0 -581
  167. package/dist/assets/factor-BVWHwYpu.js +0 -65
  168. package/dist/assets/fcl-DiozYjc8.js +0 -154
  169. package/dist/assets/forth-B7vn5ze0.js +0 -164
  170. package/dist/assets/fortran-D2XNEnBT.js +0 -172
  171. package/dist/assets/gas-B_Tj57Ve.js +0 -343
  172. package/dist/assets/gherkin-CJ6Qk4EZ.js +0 -147
  173. package/dist/assets/groovy-ioGz2WSV.js +0 -228
  174. package/dist/assets/haskell-BHnm1B83.js +0 -239
  175. package/dist/assets/haxe-Bn6Yo6N3.js +0 -490
  176. package/dist/assets/http-BOd5SYCT.js +0 -89
  177. package/dist/assets/idl-FSFk8_xX.js +0 -274
  178. package/dist/assets/index--5fKpGeN.js +0 -792
  179. package/dist/assets/index-0lME64YH.js +0 -342
  180. package/dist/assets/index-B6Ip0FgO.js +0 -437
  181. package/dist/assets/index-BmV05E5M.js +0 -479
  182. package/dist/assets/index-C6MavZDA.js +0 -131
  183. package/dist/assets/index-CwKpgcYl.js +0 -85
  184. package/dist/assets/index-DRUmDL0J.js +0 -59
  185. package/dist/assets/index-DgFC-M9G.js +0 -96
  186. package/dist/assets/javascript-DGrAs70C.js +0 -922
  187. package/dist/assets/jinja2-D9k5QrXv.js +0 -171
  188. package/dist/assets/julia-DM42tOPB.js +0 -369
  189. package/dist/assets/livescript-Dci8HnOi.js +0 -259
  190. package/dist/assets/lua-CByQu4v6.js +0 -137
  191. package/dist/assets/lucide-icons-af0BY3bi.js +0 -34555
  192. package/dist/assets/mathematica-Dkv0uCYF.js +0 -153
  193. package/dist/assets/mbox-CYTvs5kC.js +0 -114
  194. package/dist/assets/mirc-DpgP3GCo.js +0 -176
  195. package/dist/assets/mllike-C6tNn2Yt.js +0 -343
  196. package/dist/assets/modelica-CR6hTSce.js +0 -192
  197. package/dist/assets/mscgen-D0GXtzMS.js +0 -149
  198. package/dist/assets/mumps-Bf1EyDa6.js +0 -129
  199. package/dist/assets/nginx-By9Phklj.js +0 -163
  200. package/dist/assets/nsis-B5ggMLQ9.js +0 -80
  201. package/dist/assets/ntriples-C7VJ7pnm.js +0 -141
  202. package/dist/assets/octave-6yR_ix15.js +0 -112
  203. package/dist/assets/oz-CEUnktiQ.js +0 -235
  204. package/dist/assets/pascal-Dksf1EyF.js +0 -124
  205. package/dist/assets/perl-B99DUQQt.js +0 -819
  206. package/dist/assets/pig-DFeDRta6.js +0 -149
  207. package/dist/assets/powershell-DhwsNWMx.js +0 -381
  208. package/dist/assets/properties-o21uErwC.js +0 -62
  209. package/dist/assets/protobuf-YxlANsmD.js +0 -54
  210. package/dist/assets/pug-bUgjeODZ.js +0 -504
  211. package/dist/assets/puppet-B8WICGYE.js +0 -205
  212. package/dist/assets/python-D3FFx1Id.js +0 -389
  213. package/dist/assets/q-D2Hjhl2C.js +0 -123
  214. package/dist/assets/r-D73k5lac.js +0 -174
  215. package/dist/assets/rpm-Duv_WH0z.js +0 -89
  216. package/dist/assets/ruby-DGCVqZDt.js +0 -287
  217. package/dist/assets/sas-XjPv1Vy5.js +0 -268
  218. package/dist/assets/scheme-DeaA28vt.js +0 -263
  219. package/dist/assets/shared-components-CfAt2hC6.js +0 -1501
  220. package/dist/assets/shared-composables-v9NkNuAe.js +0 -35
  221. package/dist/assets/shared-modules-CDP-H5ZB.js +0 -3588
  222. package/dist/assets/shared-pages-BGRRA5WB.js +0 -20
  223. package/dist/assets/shell-Bx6QZTgx.js +0 -145
  224. package/dist/assets/sieve-CWCD62sW.js +0 -178
  225. package/dist/assets/simple-mode-BAO9cD7H.js +0 -136
  226. package/dist/assets/smalltalk-DSQbF4MF.js +0 -153
  227. package/dist/assets/solr-v_XRf31C.js +0 -80
  228. package/dist/assets/sparql-BrfDqf0-.js +0 -170
  229. package/dist/assets/spreadsheet-Csn84Pef.js +0 -98
  230. package/dist/assets/sql-D4utlq1l.js +0 -480
  231. package/dist/assets/stex-DBkktma-.js +0 -246
  232. package/dist/assets/stylus-ByG-Fd6f.js +0 -750
  233. package/dist/assets/swift-CHbTprt3.js +0 -202
  234. package/dist/assets/tcl-BRlMUELr.js +0 -125
  235. package/dist/assets/textile-CqfTUjd4.js +0 -441
  236. package/dist/assets/tiddlywiki-BrsoM8KB.js +0 -278
  237. package/dist/assets/tiki-D-ivWPkc.js +0 -289
  238. package/dist/assets/toml-t_IhJu83.js +0 -75
  239. package/dist/assets/troff-DckGF2AE.js +0 -64
  240. package/dist/assets/ttcn-B8TAFbRR.js +0 -253
  241. package/dist/assets/ttcn-cfg-NHh25oCM.js +0 -197
  242. package/dist/assets/turtle-D9Js0BlL.js +0 -141
  243. package/dist/assets/ui-app-D31Pr1WY.js +0 -1993
  244. package/dist/assets/ui-content-B7SxH8y9.js +0 -52887
  245. package/dist/assets/ui-controls-nmDJYLmC.js +0 -348
  246. package/dist/assets/ui-data-Ci3b1ye0.js +0 -22901
  247. package/dist/assets/ui-form-Cs5ooOo7.js +0 -159
  248. package/dist/assets/ui-form-fields-DFQi31jT.js +0 -40575
  249. package/dist/assets/ui-helpers-CF-EUlOg.js +0 -1736
  250. package/dist/assets/ui-indicators-mIQeEqha.js +0 -199
  251. package/dist/assets/ui-layout-v2XBQky3.js +0 -320
  252. package/dist/assets/ui-media-WWYrwmZw.js +0 -1259
  253. package/dist/assets/ui-media-advanced-T8ibi153.js +0 -492
  254. package/dist/assets/ui-modals-BdZXzI85.js +0 -2
  255. package/dist/assets/ui-navigation-BtHa6ovW.js +0 -24269
  256. package/dist/assets/utils-DZK5fu48.js +0 -17216
  257. package/dist/assets/vb-CbIGLrpY.js +0 -249
  258. package/dist/assets/vbscript-8ANWle9n.js +0 -320
  259. package/dist/assets/velocity-D6hz3Hzw.js +0 -186
  260. package/dist/assets/verilog-DIV442at.js +0 -565
  261. package/dist/assets/vhdl-BlTiZo_v.js +0 -174
  262. package/dist/assets/vueuse-CTQm4Zh0.js +0 -9308
  263. package/dist/assets/webidl-Cp3tcqdk.js +0 -179
  264. package/dist/assets/xquery-Dd4TBzXv.js +0 -411
  265. package/dist/assets/yacas-DQ1WucF0.js +0 -182
  266. package/dist/assets/z80-P1j44jDI.js +0 -102
@@ -1,1993 +0,0 @@
1
- import { ref, computed, provide, inject, getCurrentInstance, watchEffect, reactive, readonly, defineComponent, createElementBlock, openBlock, normalizeClass, createElementVNode, renderSlot, withModifiers, createBlock, createCommentVNode, unref, toDisplayString, watch, withCtx, createVNode, h, Teleport, Fragment, resolveDynamicComponent, Transition, renderList, withDirectives, mergeProps, resolveComponent, onMounted, createSlots, createTextVNode, vShow, onUnmounted, normalizeStyle } from 'vue';
2
- import './ui-indicators-mIQeEqha.js';
3
- import { _ as _sfc_main$j, A as _sfc_main$k, j as _sfc_main$m, p as _sfc_main$n, f as _sfc_main$p, h as _sfc_main$q, e as _sfc_main$r, y as _sfc_main$s, o as _sfc_main$t, d as _sfc_main$u } from './ui-media-WWYrwmZw.js';
4
- import { b as _sfc_main$o } from './ui-controls-nmDJYLmC.js';
5
- import { a as VcContainer } from './ui-layout-v2XBQky3.js';
6
- import './ui-helpers-CF-EUlOg.js';
7
- import { i as i18n, c as usePermissions, n as notification, d as useBladeNavigation, b as usePopup, C as ChangePassword, e as useUser, f as useAppSwitcher, V as VcPopupContainer } from './ui-navigation-BtHa6ovW.js';
8
- import { o as useAppBarWidget, f as useLanguages, u as useNotifications, p as provideAppBarWidget } from './core-composables-DYxpIWyY.js';
9
- import 'vee-validate';
10
- import { i as _sfc_main$l } from './ui-content-B7SxH8y9.js';
11
- import './ui-form-Cs5ooOo7.js';
12
- import { C as omit, D as snakeCase, j as isEqual, u as useI18n, E as capitalize, v as vOnClickOutside } from './ui-form-fields-DFQi31jT.js';
13
- import { u as useMenuExpanded } from './shared-composables-v9NkNuAe.js';
14
- import './core-plugins-wv2bDZ0l.js';
15
- import { useRoute, useRouter } from 'vue-router';
16
- import { N as NotificationDropdown, U as UserDropdownButton } from './shared-components-CfAt2hC6.js';
17
- import './shared-modules-CDP-H5ZB.js';
18
- import { M as MenuServiceKey, l as DashboardServiceKey, S as SettingsMenuServiceKey, u as useAppBarMobileButtons, D as DynamicModulesKey, p as provideAppBarMobileButtonsService, o as provideGlobalSearch } from './ui-data-Ci3b1ye0.js';
19
- import './ui-media-advanced-T8ibi153.js';
20
- import { x as useArrayFind, y as createUnrefFn, z as useColorMode, A as useCycleList, B as watchOnce } from './vueuse-CTQm4Zh0.js';
21
-
22
- const preregisteredMenuItems = ref([]);
23
- function addMenuItem(item) {
24
- preregisteredMenuItems.value.push(item);
25
- }
26
- const DEFAULT_PRIORITY = Infinity;
27
- const DEFAULT_GROUP_PRIORITY = Infinity;
28
- const menuItems = ref([]);
29
- const rawMenu = ref([]);
30
- function createMenuService() {
31
- const { t } = i18n.global;
32
- function addMenuItem2(item) {
33
- rawMenu.value.push(item);
34
- constructMenu();
35
- }
36
- function removeMenuItem(item) {
37
- const index = menuItems.value.indexOf(item);
38
- if (index !== -1) {
39
- menuItems.value.splice(index, 1);
40
- }
41
- }
42
- const upsert = createUnrefFn(
43
- (array, element) => {
44
- const index = array.findIndex((_element) => isEqual(omit(_element, "title"), omit(element, "title")));
45
- if (index > -1) {
46
- array[index] = { ...element };
47
- } else {
48
- array.push({ ...element });
49
- }
50
- }
51
- );
52
- function sortByPriority(a, b) {
53
- const getPriority = (item) => item.priority ?? DEFAULT_PRIORITY;
54
- return getPriority(a) - getPriority(b);
55
- }
56
- function sortByGroupPriority(a, b) {
57
- const getGroupPriority = (item) => item.inGroupPriority ?? item.priority ?? DEFAULT_GROUP_PRIORITY;
58
- return getGroupPriority(a) - getGroupPriority(b);
59
- }
60
- function createItemId(title) {
61
- const titleValue = typeof title === "string" ? t(title) : title.value;
62
- return snakeCase(titleValue);
63
- }
64
- function createLocalizedTitle(title) {
65
- return computed(() => t(title));
66
- }
67
- function processGroupItem(item, constructedMenu) {
68
- if (!item.group && !item.groupConfig) return;
69
- let groupId;
70
- let groupTitle;
71
- let groupIcon;
72
- let groupPriority;
73
- let groupPermissions;
74
- if (item.groupConfig) {
75
- groupId = item.groupConfig.id;
76
- groupTitle = item.groupConfig.title || groupId;
77
- groupIcon = item.groupConfig.icon;
78
- groupPriority = item.groupConfig.priority;
79
- groupPermissions = item.groupConfig.permissions;
80
- } else {
81
- groupId = "group_" + createItemId(item.group);
82
- groupTitle = item.group;
83
- groupIcon = item.groupIcon;
84
- groupPriority = item.priority;
85
- }
86
- const existingGroup = useArrayFind(constructedMenu, (m) => m.groupId === groupId);
87
- const groupItem = {
88
- ...omit(item, ["group", "groupIcon", "groupPriority", "groupConfig"]),
89
- title: createLocalizedTitle(item.title)
90
- };
91
- if (existingGroup.value && existingGroup.value.children) {
92
- upsert(existingGroup.value.children, groupItem);
93
- if (item.groupConfig) {
94
- if (item.groupConfig.title) {
95
- existingGroup.value.title = createLocalizedTitle(item.groupConfig.title);
96
- }
97
- if (item.groupConfig.icon !== void 0) {
98
- existingGroup.value.groupIcon = item.groupConfig.icon;
99
- }
100
- if (item.groupConfig.priority !== void 0) {
101
- existingGroup.value.priority = item.groupConfig.priority;
102
- }
103
- if (item.groupConfig.permissions !== void 0) {
104
- existingGroup.value.permissions = item.groupConfig.permissions;
105
- }
106
- }
107
- } else {
108
- const group = {
109
- groupId,
110
- groupIcon: groupIcon ?? "",
111
- title: createLocalizedTitle(groupTitle),
112
- children: [groupItem],
113
- priority: groupPriority ?? item.priority ?? DEFAULT_PRIORITY,
114
- permissions: groupPermissions
115
- };
116
- upsert(constructedMenu.value, group);
117
- }
118
- }
119
- function processStandaloneItem(item, constructedMenu) {
120
- if (item.title) {
121
- const standaloneItem = {
122
- ...item,
123
- title: createLocalizedTitle(item.title)
124
- };
125
- upsert(constructedMenu.value, standaloneItem);
126
- }
127
- }
128
- function finalizeMenuItems(items) {
129
- return items.map(
130
- (item) => ({
131
- ...item,
132
- title: createLocalizedTitle(item.title),
133
- id: item.id || createItemId(item.title),
134
- children: item.children?.sort(sortByGroupPriority)
135
- })
136
- ).sort(sortByPriority);
137
- }
138
- function constructMenu() {
139
- const constructedMenu = ref([]);
140
- rawMenu.value.forEach((item) => {
141
- if (item.group || item.groupConfig) {
142
- processGroupItem(item, constructedMenu);
143
- } else {
144
- processStandaloneItem(item, constructedMenu);
145
- }
146
- });
147
- menuItems.value = finalizeMenuItems(constructedMenu.value);
148
- }
149
- preregisteredMenuItems.value.forEach((item) => {
150
- try {
151
- addMenuItem2(item);
152
- } catch (e) {
153
- console.warn(`Failed to register preregistered menu item ${item.id || item.title}:`, e);
154
- }
155
- });
156
- return {
157
- addMenuItem: addMenuItem2,
158
- menuItems,
159
- removeMenuItem
160
- };
161
- }
162
-
163
- function provideMenuService() {
164
- const service = createMenuService();
165
- provide(MenuServiceKey, service);
166
- return service;
167
- }
168
- function useMenuService() {
169
- const service = inject(MenuServiceKey);
170
- if (!service) {
171
- console.error("Menu service not found in current context. Injection chain:", getCurrentInstance());
172
- throw new Error("MenuService not provided");
173
- }
174
- return service;
175
- }
176
-
177
- const registeredThemes = ref([
178
- // "auto"
179
- ]);
180
- const useTheme = () => {
181
- function register(customNames) {
182
- (typeof customNames === "string" ? [customNames] : customNames).forEach((name) => {
183
- if (!registeredThemes.value.includes(name)) {
184
- registeredThemes.value.push(name);
185
- }
186
- });
187
- }
188
- function unregister(customNames) {
189
- (typeof customNames === "string" ? [customNames] : customNames).forEach((name) => {
190
- const index = registeredThemes.value.indexOf(name);
191
- if (index >= 0) {
192
- registeredThemes.value.splice(index, 1);
193
- }
194
- });
195
- }
196
- function setTheme(theme) {
197
- state.value = theme;
198
- }
199
- const mode = useColorMode({
200
- emitAuto: true,
201
- initialValue: "light",
202
- modes: {
203
- ...registeredThemes.value.reduce(
204
- (acc, name) => {
205
- acc[name] = name;
206
- return acc;
207
- },
208
- {}
209
- )
210
- }
211
- });
212
- const { state, next } = useCycleList(registeredThemes.value, { initialValue: mode });
213
- watchEffect(() => mode.value = state.value);
214
- return {
215
- themes: computed(() => registeredThemes.value),
216
- current: state,
217
- next,
218
- register,
219
- unregister,
220
- setTheme
221
- };
222
- };
223
-
224
- const preregisteredWidgets = [];
225
- function registerDashboardWidget(widget) {
226
- const existingWidget = preregisteredWidgets.find((w) => w.id === widget.id);
227
- if (!existingWidget) {
228
- preregisteredWidgets.push(widget);
229
- }
230
- }
231
- const createState = () => ({
232
- widgets: reactive(/* @__PURE__ */ new Map()),
233
- layout: reactive(/* @__PURE__ */ new Map())
234
- });
235
- function createDashboardService() {
236
- const state = createState();
237
- const { hasAccess } = usePermissions();
238
- const registerWidget = (widget) => {
239
- if (state.widgets.has(widget.id)) {
240
- throw new Error(`Widget with id ${widget.id} already registered`);
241
- }
242
- state.widgets.set(widget.id, widget);
243
- if (!widget.position) {
244
- const lastWidget = Array.from(state.layout.values()).reduce((max, pos) => {
245
- return pos.y > max ? pos.y : max;
246
- }, 0);
247
- state.layout.set(widget.id, {
248
- x: 0,
249
- y: lastWidget + 1
250
- });
251
- } else {
252
- state.layout.set(widget.id, widget.position);
253
- }
254
- };
255
- const getWidgets = () => {
256
- return Array.from(state.widgets.values()).filter((widget) => {
257
- if (!widget.permissions || widget.permissions.length === 0) {
258
- return true;
259
- }
260
- return hasAccess(widget.permissions);
261
- });
262
- };
263
- const updateWidgetPosition = (widgetId, position) => {
264
- if (!state.widgets.has(widgetId)) {
265
- throw new Error(`Widget with id ${widgetId} not found`);
266
- }
267
- state.layout.set(widgetId, position);
268
- };
269
- const getLayout = () => {
270
- return state.layout;
271
- };
272
- preregisteredWidgets.forEach((widget) => {
273
- try {
274
- registerWidget(widget);
275
- } catch (e) {
276
- console.warn(`Failed to register preregistered widget ${widget.id}:`, e);
277
- }
278
- });
279
- return {
280
- registerWidget,
281
- getWidgets,
282
- updateWidgetPosition,
283
- getLayout
284
- };
285
- }
286
-
287
- function provideDashboardService() {
288
- const service = createDashboardService();
289
- provide(DashboardServiceKey, service);
290
- return service;
291
- }
292
- function useDashboard() {
293
- const service = inject(DashboardServiceKey);
294
- if (!service) {
295
- throw new Error("DashboardService not provided");
296
- }
297
- return service;
298
- }
299
-
300
- const preregisteredSettingsMenuItems = [];
301
- const settingsMenuItems = ref(/* @__PURE__ */ new Map());
302
- function addSettingsMenuItem(item) {
303
- const id = item.id || crypto.randomUUID();
304
- preregisteredSettingsMenuItems.push({
305
- id,
306
- order: item.order ?? preregisteredSettingsMenuItems.length,
307
- component: item.component,
308
- props: item.props
309
- });
310
- }
311
- function createSettingsMenuService() {
312
- const register = (options) => {
313
- const id = options.id || crypto.randomUUID();
314
- settingsMenuItems.value.set(id, {
315
- id,
316
- order: options.order ?? settingsMenuItems.value.size,
317
- component: options.component,
318
- props: options.props
319
- });
320
- return id;
321
- };
322
- const unregister = (id) => {
323
- settingsMenuItems.value.delete(id);
324
- };
325
- const items = computed(() => {
326
- return Array.from(settingsMenuItems.value.values()).sort((a, b) => (a.order ?? 0) - (b.order ?? 0));
327
- });
328
- preregisteredSettingsMenuItems.forEach((item) => {
329
- try {
330
- register(item);
331
- } catch (e) {
332
- console.warn(`Failed to register pre-added settings menu item ${item.id}:`, e);
333
- }
334
- });
335
- return {
336
- register,
337
- unregister,
338
- items
339
- };
340
- }
341
-
342
- function provideSettingsMenu() {
343
- const settingsMenuService = createSettingsMenuService();
344
- provide(SettingsMenuServiceKey, settingsMenuService);
345
- return settingsMenuService;
346
- }
347
- function useSettingsMenu() {
348
- const settingsMenuService = inject(SettingsMenuServiceKey);
349
- if (!settingsMenuService) {
350
- throw new Error("Settings menu service not found");
351
- }
352
- return settingsMenuService;
353
- }
354
-
355
- const AppMenuStateKey = Symbol("AppMenuState");
356
- let _instance = null;
357
- const useAppMenuState = () => {
358
- if (_instance) {
359
- return _instance;
360
- }
361
- const injected = inject(AppMenuStateKey, null);
362
- if (injected) {
363
- return injected;
364
- }
365
- const { isExpanded, toggleExpanded, isHoverExpanded, toggleHoverExpanded: toggleHoverExpandedFn } = useMenuExpanded();
366
- const stateData = reactive({
367
- isSidebarExpanded: isExpanded,
368
- isMenuOpen: false,
369
- activeButtonId: null
370
- });
371
- const state = computed(() => readonly(stateData));
372
- const toggleSidebar = () => {
373
- toggleExpanded();
374
- stateData.isSidebarExpanded = isExpanded.value;
375
- };
376
- const toggleHoverExpanded = (shouldExpand) => {
377
- toggleHoverExpandedFn(shouldExpand);
378
- };
379
- const toggleMenu = () => {
380
- stateData.isMenuOpen = !stateData.isMenuOpen;
381
- if (!stateData.isMenuOpen) {
382
- stateData.activeButtonId = null;
383
- }
384
- };
385
- const setActiveButton = (buttonId) => {
386
- stateData.activeButtonId = buttonId;
387
- };
388
- const isButtonActive = computed(() => (buttonId) => stateData.activeButtonId === buttonId);
389
- const closeAll = () => {
390
- stateData.isMenuOpen = false;
391
- stateData.activeButtonId = null;
392
- };
393
- const instance = {
394
- state,
395
- isButtonActive,
396
- toggleSidebar,
397
- toggleMenu,
398
- setActiveButton,
399
- toggleHoverExpanded,
400
- isHoverExpanded,
401
- closeAll
402
- };
403
- _instance = instance;
404
- provide(AppMenuStateKey, instance);
405
- return instance;
406
- };
407
-
408
- function useToggleableContent(itemsGetter, activeIdRef) {
409
- const currentItem = computed(() => {
410
- if (!activeIdRef.value || !Array.isArray(itemsGetter.value)) {
411
- return null;
412
- }
413
- return itemsGetter.value.find((item) => item.id === activeIdRef.value) || null;
414
- });
415
- const isAnyItemVisible = computed(() => activeIdRef.value !== null);
416
- const toggleItem = (id) => {
417
- if (activeIdRef.value === id) {
418
- activeIdRef.value = null;
419
- } else {
420
- activeIdRef.value = id;
421
- }
422
- };
423
- const closeItem = () => {
424
- activeIdRef.value = null;
425
- };
426
- const showItem = (id) => {
427
- activeIdRef.value = id;
428
- };
429
- const hideAllItems = () => {
430
- activeIdRef.value = null;
431
- };
432
- return {
433
- showItem,
434
- hideAllItems,
435
- toggleItem,
436
- currentItem,
437
- isAnyItemVisible,
438
- closeItem
439
- };
440
- }
441
-
442
- const activeWidgetId = ref(null);
443
- function useAppBarWidgets() {
444
- const { items } = useAppBarWidget();
445
- const {
446
- showItem: showWidget,
447
- hideAllItems: hideAllWidgets,
448
- toggleItem: toggleWidget,
449
- currentItem: currentWidget,
450
- isAnyItemVisible: isAnyWidgetVisible
451
- } = useToggleableContent(items, activeWidgetId);
452
- return {
453
- showWidget,
454
- hideAllWidgets,
455
- toggleWidget,
456
- currentWidget,
457
- isAnyWidgetVisible
458
- };
459
- }
460
-
461
- const _hoisted_1$f = { class: "vc-menu-item__content" };
462
- const _hoisted_2$a = { class: "vc-menu-item__title" };
463
- const _sfc_main$i = /* @__PURE__ */ defineComponent({
464
- __name: "settings-menu-item",
465
- props: {
466
- title: {},
467
- icon: {},
468
- image: {},
469
- emptyIcon: {},
470
- isActive: { type: Boolean },
471
- disabled: { type: Boolean },
472
- isVisible: { type: Boolean, default: true },
473
- triggerAction: { default: "click" }
474
- },
475
- emits: ["trigger:click", "trigger:hover"],
476
- setup(__props, { emit: __emit }) {
477
- const props = __props;
478
- const emit = __emit;
479
- const handleTriggerClick = () => {
480
- if (props.disabled || props.triggerAction === "none") return;
481
- emit("trigger:click");
482
- };
483
- return (_ctx, _cache) => {
484
- return openBlock(), createElementBlock("div", {
485
- class: normalizeClass(["vc-menu-item", {
486
- "vc-menu-item--active": _ctx.isActive,
487
- "vc-menu-item--clickable": !_ctx.disabled,
488
- "vc-menu-item--invisible": !_ctx.isVisible
489
- }])
490
- }, [
491
- createElementVNode("div", {
492
- class: "vc-menu-item__trigger",
493
- onClick: withModifiers(handleTriggerClick, ["stop"])
494
- }, [
495
- renderSlot(_ctx.$slots, "trigger", {}, () => [
496
- createElementVNode("div", _hoisted_1$f, [
497
- renderSlot(_ctx.$slots, "icon", {}, () => [
498
- _ctx.icon ? (openBlock(), createBlock(unref(_sfc_main$j), {
499
- key: 0,
500
- icon: _ctx.icon,
501
- size: "l",
502
- class: "vc-menu-item__icon"
503
- }, null, 8, ["icon"])) : _ctx.image ? (openBlock(), createBlock(unref(_sfc_main$k), {
504
- key: 1,
505
- src: _ctx.image,
506
- class: "vc-menu-item__image",
507
- "empty-icon": _ctx.emptyIcon
508
- }, null, 8, ["src", "empty-icon"])) : createCommentVNode("", true)
509
- ]),
510
- renderSlot(_ctx.$slots, "title", {}, () => [
511
- createElementVNode("p", _hoisted_2$a, toDisplayString(_ctx.title), 1)
512
- ]),
513
- renderSlot(_ctx.$slots, "additional")
514
- ])
515
- ])
516
- ]),
517
- renderSlot(_ctx.$slots, "content")
518
- ], 2);
519
- };
520
- }
521
- });
522
-
523
- const _hoisted_1$e = { class: "vc-language-selector__trigger" };
524
- const _hoisted_2$9 = { class: "vc-language-selector__title" };
525
- const _hoisted_3$6 = ["onClick"];
526
- const _hoisted_4$6 = { class: "vc-language-selector__item-title" };
527
- const _sfc_main$h = /* @__PURE__ */ defineComponent({
528
- __name: "language-selector",
529
- setup(__props) {
530
- const { availableLocales, getLocaleMessage, locale } = useI18n({ useScope: "global" });
531
- const { setLocale, getFlag } = useLanguages();
532
- const opened = ref(false);
533
- const currLocaleFlag = ref();
534
- const languageItems = availableLocales.map((locale2) => ({
535
- lang: locale2,
536
- title: getLocaleMessage(locale2).language_name,
537
- clickHandler(lang) {
538
- setLocale(lang);
539
- },
540
- flag: ""
541
- })).filter((item) => item.title);
542
- const handleLanguageSelect = (lang) => {
543
- if (Object.prototype.hasOwnProperty.call(lang, "clickHandler")) {
544
- lang.clickHandler(lang.lang);
545
- }
546
- opened.value = false;
547
- };
548
- watch(
549
- [() => languageItems, () => locale.value],
550
- async ([newValLangItem]) => {
551
- for (const lang of newValLangItem) {
552
- lang.flag = await getFlag(lang.lang);
553
- if (lang.lang === locale.value) {
554
- currLocaleFlag.value = lang.flag;
555
- }
556
- }
557
- },
558
- { immediate: true }
559
- );
560
- return (_ctx, _cache) => {
561
- return openBlock(), createBlock(unref(_sfc_main$i), {
562
- "onTrigger:click": _cache[0] || (_cache[0] = ($event) => opened.value = !opened.value)
563
- }, {
564
- trigger: withCtx(() => [
565
- createElementVNode("div", _hoisted_1$e, [
566
- createVNode(unref(_sfc_main$k), {
567
- src: currLocaleFlag.value,
568
- "empty-icon": "material-language",
569
- class: "vc-language-selector__flag"
570
- }, null, 8, ["src"]),
571
- createElementVNode("span", _hoisted_2$9, toDisplayString(_ctx.$t("COMPONENTS.LANGUAGE_SELECTOR.TITLE")), 1)
572
- ])
573
- ]),
574
- content: withCtx(() => [
575
- createVNode(unref(_sfc_main$l), {
576
- opened: opened.value,
577
- items: unref(languageItems),
578
- "is-item-active": (lang) => lang.lang === _ctx.$i18n.locale,
579
- onItemClick: handleLanguageSelect
580
- }, {
581
- item: withCtx(({ item: lang, click }) => [
582
- createElementVNode("div", {
583
- class: normalizeClass(["vc-language-selector__item", { "vc-language-selector__item--active": lang.lang === _ctx.$i18n.locale }]),
584
- onClick: click
585
- }, [
586
- createVNode(unref(_sfc_main$k), {
587
- src: lang.flag,
588
- class: "vc-language-selector__flag"
589
- }, null, 8, ["src"]),
590
- createElementVNode("span", _hoisted_4$6, toDisplayString(lang.title), 1)
591
- ], 10, _hoisted_3$6)
592
- ]),
593
- _: 1
594
- }, 8, ["opened", "items", "is-item-active"])
595
- ]),
596
- _: 1
597
- });
598
- };
599
- }
600
- });
601
-
602
- const LanguageSelector = _sfc_main$h;
603
-
604
- const _hoisted_1$d = { class: "sidebar__content" };
605
- const _sfc_main$g = /* @__PURE__ */ defineComponent({
606
- ...{
607
- inheritAttrs: false
608
- },
609
- __name: "sidebar",
610
- props: {
611
- position: { default: "right" },
612
- render: { default: "always" },
613
- isExpanded: { type: Boolean },
614
- title: {},
615
- closeCross: { type: Boolean, default: true }
616
- },
617
- emits: ["close"],
618
- setup(__props, { emit: __emit }) {
619
- const emit = __emit;
620
- const props = __props;
621
- const header = h("div", { class: "sidebar__header" }, [
622
- props.title ? h("h3", { class: "sidebar__title" }, props.title) : null,
623
- props.closeCross ? h(_sfc_main$j, { icon: _sfc_main$m, size: "xs", onClick: () => emit("close"), class: "sidebar__close-icon" }) : null
624
- ]);
625
- return (_ctx, _cache) => {
626
- return openBlock(), createBlock(Teleport, {
627
- to: "body",
628
- disabled: _ctx.$isDesktop.value
629
- }, [
630
- _ctx.isExpanded ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
631
- _ctx.isExpanded ? (openBlock(), createElementBlock("div", {
632
- key: 0,
633
- class: "sidebar__overlay",
634
- onClick: _cache[0] || (_cache[0] = withModifiers(($event) => _ctx.$emit("close"), ["stop"]))
635
- })) : createCommentVNode("", true),
636
- _ctx.isExpanded ? (openBlock(), createElementBlock("div", {
637
- key: 1,
638
- class: normalizeClass([
639
- "sidebar__dropdown",
640
- {
641
- "sidebar__dropdown--mobile": _ctx.$isMobile.value && _ctx.render === "mobile",
642
- "sidebar__dropdown--desktop": _ctx.$isDesktop.value && _ctx.render === "desktop",
643
- "sidebar__dropdown--always": _ctx.render === "always",
644
- "sidebar__dropdown--left": _ctx.position === "left",
645
- "sidebar__dropdown--right": _ctx.position === "right",
646
- "sidebar__dropdown--title": _ctx.title
647
- }
648
- ])
649
- }, [
650
- renderSlot(_ctx.$slots, "header", { header: unref(header) }, () => [
651
- (openBlock(), createBlock(resolveDynamicComponent(unref(header))))
652
- ]),
653
- createElementVNode("div", _hoisted_1$d, [
654
- renderSlot(_ctx.$slots, "content")
655
- ])
656
- ], 2)) : createCommentVNode("", true)
657
- ], 64)) : renderSlot(_ctx.$slots, "content", { key: 1 })
658
- ], 8, ["disabled"]);
659
- };
660
- }
661
- });
662
-
663
- const _hoisted_1$c = { class: "vc-theme-selector__trigger" };
664
- const _hoisted_2$8 = { class: "vc-theme-selector__title" };
665
- const _hoisted_3$5 = ["onClick"];
666
- const _hoisted_4$5 = { class: "vc-theme-selector__item-title" };
667
- const _sfc_main$f = /* @__PURE__ */ defineComponent({
668
- __name: "theme-selector",
669
- setup(__props) {
670
- const { current, themes, setTheme } = useTheme();
671
- const opened = ref(false);
672
- const handleThemeSelect = (theme) => {
673
- setTheme(theme);
674
- opened.value = false;
675
- };
676
- watch(
677
- () => current.value,
678
- (newVal) => {
679
- notification(capitalize(newVal));
680
- },
681
- { deep: true }
682
- );
683
- return (_ctx, _cache) => {
684
- return openBlock(), createBlock(unref(_sfc_main$i), {
685
- "onTrigger:click": _cache[0] || (_cache[0] = ($event) => opened.value = !opened.value)
686
- }, {
687
- trigger: withCtx(() => [
688
- createElementVNode("div", _hoisted_1$c, [
689
- createVNode(unref(_sfc_main$j), {
690
- icon: "material-palette",
691
- class: "vc-theme-selector__icon"
692
- }),
693
- createElementVNode("span", _hoisted_2$8, toDisplayString(_ctx.$t("COMPONENTS.THEME_SELECTOR.THEME_SELECTOR")), 1)
694
- ])
695
- ]),
696
- content: withCtx(() => [
697
- createVNode(unref(_sfc_main$l), {
698
- opened: opened.value,
699
- items: unref(themes),
700
- "is-item-active": (theme) => theme === unref(current),
701
- onItemClick: handleThemeSelect
702
- }, {
703
- item: withCtx(({ item: theme, click }) => [
704
- createElementVNode("div", {
705
- class: normalizeClass(["vc-theme-selector__item", { "vc-theme-selector__item--active": theme === unref(current) }]),
706
- onClick: click
707
- }, [
708
- createElementVNode("span", _hoisted_4$5, toDisplayString(capitalize(theme)), 1)
709
- ], 10, _hoisted_3$5)
710
- ]),
711
- _: 1
712
- }, 8, ["opened", "items", "is-item-active"])
713
- ]),
714
- _: 1
715
- });
716
- };
717
- }
718
- });
719
-
720
- const _hoisted_1$b = { class: "app-bar-header__logo-container" };
721
- const _hoisted_2$7 = { class: "app-bar-header__logo" };
722
- const _hoisted_3$4 = ["src"];
723
- const _hoisted_4$4 = {
724
- key: 0,
725
- class: "app-bar-header__menu-button-accent"
726
- };
727
- const _hoisted_5$2 = {
728
- key: 0,
729
- class: "app-bar-header__blade-title"
730
- };
731
- const _hoisted_6$2 = {
732
- key: 0,
733
- class: "app-bar-header__actions"
734
- };
735
- const _hoisted_7$1 = { class: "app-bar-header__menu-button-wrap" };
736
- const _hoisted_8 = {
737
- key: 0,
738
- class: "app-bar-header__menu-button-accent"
739
- };
740
- const _sfc_main$e = /* @__PURE__ */ defineComponent({
741
- __name: "AppBarHeader",
742
- props: {
743
- logo: {},
744
- expanded: {}
745
- },
746
- emits: ["logo:click", "toggle-menu"],
747
- setup(__props) {
748
- const { notifications } = useNotifications();
749
- const { blades, currentBladeNavigationData } = useBladeNavigation();
750
- const viewTitle = ref("");
751
- const currentBladeId = ref(0);
752
- watchEffect(
753
- () => {
754
- const currentTitle = currentBladeNavigationData.value?.instance?.title;
755
- const lastBladeTitle = blades.value[blades.value.length - 1]?.props?.navigation?.instance?.title;
756
- currentBladeId.value = blades.value[blades.value.length - 1]?.props?.navigation?.idx || 0;
757
- viewTitle.value = currentTitle ?? lastBladeTitle ?? "";
758
- },
759
- { flush: "post" }
760
- );
761
- const hasUnread = computed(() => {
762
- return notifications.value.some((item) => item.isNew);
763
- });
764
- return (_ctx, _cache) => {
765
- return _ctx.$isMobile.value && unref(blades).length <= 1 || _ctx.$isDesktop.value ? (openBlock(), createElementBlock("div", {
766
- key: 0,
767
- class: normalizeClass(["app-bar-header", {
768
- "app-bar-header--collapsed": !_ctx.expanded && !_ctx.$isMobile.value,
769
- "app-bar-header--mobile": _ctx.$isMobile.value
770
- }])
771
- }, [
772
- createElementVNode("div", _hoisted_1$b, [
773
- createElementVNode("div", _hoisted_2$7, [
774
- createElementVNode("img", {
775
- class: normalizeClass(["app-bar-header__logo-image", { "app-bar-header__logo-image--mobile": _ctx.$isMobile.value }]),
776
- alt: "logo",
777
- src: _ctx.logo,
778
- onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$isMobile.value ? _ctx.$emit("toggle-menu") : _ctx.$emit("logo:click"))
779
- }, null, 10, _hoisted_3$4),
780
- hasUnread.value && !_ctx.expanded ? (openBlock(), createElementBlock("div", _hoisted_4$4)) : createCommentVNode("", true)
781
- ]),
782
- _ctx.$isMobile.value && unref(blades).length === 1 ? (openBlock(), createElementBlock("p", _hoisted_5$2, toDisplayString(viewTitle.value), 1)) : createCommentVNode("", true)
783
- ]),
784
- _ctx.$isMobile.value ? (openBlock(), createElementBlock("div", _hoisted_6$2, [
785
- _ctx.$isMobile.value ? renderSlot(_ctx.$slots, "actions", { key: 0 }) : createCommentVNode("", true)
786
- ])) : createCommentVNode("", true),
787
- createVNode(Transition, {
788
- name: "burger-fade",
789
- mode: "out-in"
790
- }, {
791
- default: withCtx(() => [
792
- _ctx.expanded && _ctx.$isDesktop.value ? (openBlock(), createElementBlock("button", {
793
- key: 0,
794
- ref: "menuButtonRef",
795
- class: "app-bar-header__menu-button",
796
- onClick: _cache[1] || (_cache[1] = ($event) => _ctx.$emit("toggle-menu"))
797
- }, [
798
- createElementVNode("div", _hoisted_7$1, [
799
- createVNode(unref(_sfc_main$j), {
800
- icon: unref(_sfc_main$n),
801
- size: "xs"
802
- }, null, 8, ["icon"]),
803
- hasUnread.value ? (openBlock(), createElementBlock("div", _hoisted_8)) : createCommentVNode("", true)
804
- ])
805
- ], 512)) : createCommentVNode("", true)
806
- ]),
807
- _: 1
808
- })
809
- ], 2)) : createCommentVNode("", true);
810
- };
811
- }
812
- });
813
-
814
- const _hoisted_1$a = { class: "app-bar-overlay__content app-bar-overlay__dropdowns" };
815
- const _sfc_main$d = /* @__PURE__ */ defineComponent({
816
- __name: "AppBarOverlay",
817
- props: {
818
- isSidebarMode: { type: Boolean },
819
- expanded: {}
820
- },
821
- emits: ["close"],
822
- setup(__props) {
823
- return (_ctx, _cache) => {
824
- return openBlock(), createBlock(Teleport, { to: "body" }, [
825
- createElementVNode("div", {
826
- class: normalizeClass(["app-bar-overlay", {
827
- "app-bar-overlay--mobile": _ctx.$isMobile.value,
828
- "app-bar-overlay--desktop": _ctx.$isDesktop.value,
829
- "app-bar-overlay--sidebar": _ctx.isSidebarMode,
830
- "app-bar-overlay--standalone-mobile": _ctx.$isMobile.value && !_ctx.isSidebarMode,
831
- "app-bar-overlay--collapsed": !_ctx.expanded && !_ctx.$isMobile.value
832
- }])
833
- }, [
834
- createElementVNode("div", _hoisted_1$a, [
835
- renderSlot(_ctx.$slots, "default")
836
- ])
837
- ], 2)
838
- ]);
839
- };
840
- }
841
- });
842
-
843
- const activeActionId = ref(null);
844
- function useAppBarMobileActions() {
845
- const { getButtons } = useAppBarMobileButtons();
846
- const {
847
- showItem: showAction,
848
- hideAllItems: hideAllActions,
849
- toggleItem: toggleAction,
850
- currentItem: currentAction,
851
- isAnyItemVisible: isAnyActionVisible,
852
- closeItem: closeAction
853
- } = useToggleableContent(getButtons, activeActionId);
854
- watch(
855
- () => getButtons.value,
856
- (newButtons) => {
857
- if (activeActionId.value) {
858
- const buttonStillExists = newButtons.some((button) => button.id === activeActionId.value);
859
- if (!buttonStillExists) {
860
- const activeButton = currentAction.value;
861
- if (activeButton?.onClose) {
862
- activeButton.onClose();
863
- }
864
- hideAllActions();
865
- }
866
- }
867
- },
868
- { deep: true }
869
- );
870
- return {
871
- showAction,
872
- hideAllActions,
873
- toggleAction,
874
- currentAction,
875
- isAnyActionVisible,
876
- closeAction
877
- };
878
- }
879
-
880
- const _hoisted_1$9 = {
881
- key: 0,
882
- class: "app-bar-mobile-actions"
883
- };
884
- const _sfc_main$c = /* @__PURE__ */ defineComponent({
885
- __name: "AppBarMobileActions",
886
- props: {
887
- isSidebarMode: { type: Boolean },
888
- expanded: {}
889
- },
890
- setup(__props) {
891
- const { getButtons } = useAppBarMobileButtons();
892
- const { currentAction, toggleAction, hideAllActions, isAnyActionVisible } = useAppBarMobileActions();
893
- const route = useRoute();
894
- const handleButtonClick = (button) => {
895
- if (currentAction.value?.id === button.id) {
896
- button.onClose?.();
897
- hideAllActions();
898
- return;
899
- }
900
- if (currentAction.value) {
901
- currentAction.value.onClose?.();
902
- }
903
- toggleAction(button.id);
904
- if (!button.component && button.onClick) {
905
- button.onClick();
906
- }
907
- };
908
- const handleClose = (button) => {
909
- button.onClose?.();
910
- hideAllActions();
911
- };
912
- watch(route, () => {
913
- hideAllActions();
914
- });
915
- return (_ctx, _cache) => {
916
- return _ctx.$isMobile.value ? (openBlock(), createElementBlock("div", _hoisted_1$9, [
917
- (openBlock(true), createElementBlock(Fragment, null, renderList(unref(getButtons), (button) => {
918
- return openBlock(), createElementBlock("div", {
919
- key: button.id
920
- }, [
921
- (button.isVisible !== void 0 ? button.isVisible : true) ? (openBlock(), createBlock(unref(_sfc_main$o), {
922
- key: 0,
923
- text: "",
924
- class: normalizeClass(["app-bar-mobile-actions__button", { "app-bar-mobile-actions__button--active": button.id === unref(currentAction)?.id }]),
925
- icon: button.icon,
926
- "icon-size": "l",
927
- onClick: ($event) => handleButtonClick(button)
928
- }, null, 8, ["class", "icon", "onClick"])) : createCommentVNode("", true)
929
- ]);
930
- }), 128)),
931
- createVNode(Transition, { name: "overlay" }, {
932
- default: withCtx(() => [
933
- unref(isAnyActionVisible) && unref(currentAction)?.component ? (openBlock(), createBlock(_sfc_main$d, {
934
- key: 0,
935
- "is-sidebar-mode": _ctx.isSidebarMode,
936
- expanded: _ctx.expanded
937
- }, {
938
- default: withCtx(() => [
939
- withDirectives((openBlock(), createBlock(resolveDynamicComponent(unref(currentAction)?.component), mergeProps(unref(currentAction)?.props || {}, { onClose: handleClose }), null, 16)), [
940
- [unref(vOnClickOutside), [handleClose, { ignore: [".app-bar-mobile-actions__button"] }]]
941
- ])
942
- ]),
943
- _: 1
944
- }, 8, ["is-sidebar-mode", "expanded"])) : createCommentVNode("", true)
945
- ]),
946
- _: 1
947
- })
948
- ])) : createCommentVNode("", true);
949
- };
950
- }
951
- });
952
-
953
- const _hoisted_1$8 = { class: "menu-sidebar__widgets" };
954
- const _hoisted_2$6 = {
955
- key: 0,
956
- class: "menu-sidebar__close-button"
957
- };
958
- const _hoisted_3$3 = { class: "menu-sidebar__content" };
959
- const _hoisted_4$3 = {
960
- key: 0,
961
- class: "menu-sidebar__content-main"
962
- };
963
- const _hoisted_5$1 = { class: "menu-sidebar__navmenu" };
964
- const _hoisted_6$1 = { class: "menu-sidebar__user" };
965
- const _sfc_main$b = /* @__PURE__ */ defineComponent({
966
- __name: "MenuSidebar",
967
- props: {
968
- isOpened: { type: Boolean },
969
- expanded: {}
970
- },
971
- emits: ["update:isOpened"],
972
- setup(__props) {
973
- return (_ctx, _cache) => {
974
- const _component_VcButton = resolveComponent("VcButton");
975
- return openBlock(), createBlock(unref(_sfc_main$g), {
976
- "is-expanded": _ctx.$isMobile.value ? _ctx.isOpened : false,
977
- position: "left",
978
- render: "mobile",
979
- onClose: _cache[1] || (_cache[1] = ($event) => _ctx.$emit("update:isOpened", false))
980
- }, {
981
- header: withCtx(() => _cache[2] || (_cache[2] = [
982
- createElementVNode("span", null, null, -1)
983
- ])),
984
- content: withCtx(() => [
985
- createElementVNode("div", {
986
- class: normalizeClass(["menu-sidebar__wrapper", {
987
- "menu-sidebar__wrapper--expanded": _ctx.$isDesktop.value && _ctx.expanded,
988
- "menu-sidebar__wrapper--collapsed": _ctx.$isDesktop.value && !_ctx.expanded
989
- }])
990
- }, [
991
- createElementVNode("div", {
992
- class: normalizeClass(["menu-sidebar__header", {
993
- "menu-sidebar__header--mobile": _ctx.$isMobile.value
994
- }])
995
- }, [
996
- createElementVNode("div", _hoisted_1$8, [
997
- renderSlot(_ctx.$slots, "widgets")
998
- ]),
999
- _cache[3] || (_cache[3] = createElementVNode("div", { class: "menu-sidebar__spacer" }, null, -1)),
1000
- _ctx.$isDesktop.value ? (openBlock(), createElementBlock("div", _hoisted_2$6, [
1001
- createVNode(_component_VcButton, {
1002
- "icon-class": "menu-sidebar__close-button-icon",
1003
- icon: unref(_sfc_main$m),
1004
- "icon-size": "xs",
1005
- text: "",
1006
- onClick: _cache[0] || (_cache[0] = withModifiers(($event) => _ctx.$emit("update:isOpened", false), ["stop"]))
1007
- }, null, 8, ["icon"])
1008
- ])) : createCommentVNode("", true)
1009
- ], 2),
1010
- createElementVNode("div", _hoisted_3$3, [
1011
- _ctx.$slots["widgets-active-content"] ? (openBlock(), createElementBlock("div", _hoisted_4$3, [
1012
- renderSlot(_ctx.$slots, "widgets-active-content")
1013
- ])) : createCommentVNode("", true),
1014
- _ctx.$isMobile.value ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [
1015
- createElementVNode("div", _hoisted_5$1, [
1016
- renderSlot(_ctx.$slots, "navmenu")
1017
- ]),
1018
- createElementVNode("div", _hoisted_6$1, [
1019
- renderSlot(_ctx.$slots, "user-dropdown")
1020
- ])
1021
- ], 64)) : renderSlot(_ctx.$slots, "app-switcher", { key: 2 })
1022
- ])
1023
- ], 2)
1024
- ]),
1025
- _: 3
1026
- }, 8, ["is-expanded"]);
1027
- };
1028
- }
1029
- });
1030
-
1031
- const _hoisted_1$7 = { class: "app-bar-content__main" };
1032
- const _hoisted_2$5 = { class: "app-bar-content__footer" };
1033
- const _sfc_main$a = /* @__PURE__ */ defineComponent({
1034
- __name: "AppBarContent",
1035
- props: {
1036
- expanded: {}
1037
- },
1038
- setup(__props) {
1039
- return (_ctx, _cache) => {
1040
- return openBlock(), createElementBlock("div", {
1041
- class: normalizeClass(["app-bar-content", { "app-bar-content--collapsed": !_ctx.expanded }])
1042
- }, [
1043
- createElementVNode("div", _hoisted_1$7, [
1044
- renderSlot(_ctx.$slots, "navmenu")
1045
- ]),
1046
- createElementVNode("div", _hoisted_2$5, [
1047
- renderSlot(_ctx.$slots, "user-dropdown")
1048
- ])
1049
- ], 2);
1050
- };
1051
- }
1052
- });
1053
-
1054
- const _hoisted_1$6 = {
1055
- class: /* @__PURE__ */ normalizeClass(["app-bar-button__button-container"])
1056
- };
1057
- const _hoisted_2$4 = { class: "app-bar-button__button-wrap" };
1058
- const _sfc_main$9 = /* @__PURE__ */ defineComponent({
1059
- __name: "AppBarWidgetItem",
1060
- props: {
1061
- title: {},
1062
- icon: {},
1063
- beforeOpen: { type: Function },
1064
- isOpened: { type: Boolean },
1065
- widgetId: {}
1066
- },
1067
- emits: ["toggle"],
1068
- setup(__props, { emit: __emit }) {
1069
- const props = __props;
1070
- const emit = __emit;
1071
- const { toggleWidget, currentWidget } = useAppBarWidgets();
1072
- const referenceButton = ref(null);
1073
- const isActive = computed(() => props.widgetId ? currentWidget.value?.id === props.widgetId : false);
1074
- function toggleContent() {
1075
- if (props.beforeOpen && typeof props.beforeOpen === "function" && props.beforeOpen() === false) {
1076
- return;
1077
- }
1078
- if (props.widgetId) {
1079
- toggleWidget(props.widgetId);
1080
- emit("toggle", isActive.value);
1081
- }
1082
- }
1083
- onMounted(() => {
1084
- if (props.isOpened && props.widgetId) {
1085
- toggleWidget(props.widgetId);
1086
- }
1087
- });
1088
- return (_ctx, _cache) => {
1089
- const _component_VcIcon = resolveComponent("VcIcon");
1090
- const _component_VcTooltip = resolveComponent("VcTooltip");
1091
- return openBlock(), createElementBlock("div", {
1092
- class: normalizeClass(["app-bar-button", { "app-bar-button--mobile": _ctx.$isMobile.value }])
1093
- }, [
1094
- createVNode(_component_VcTooltip, {
1095
- placement: "bottom",
1096
- offset: { crossAxis: 0, mainAxis: -10 },
1097
- delay: 1e3,
1098
- class: "tw-w-full"
1099
- }, createSlots({
1100
- default: withCtx(() => [
1101
- createElementVNode("button", {
1102
- ref_key: "referenceButton",
1103
- ref: referenceButton,
1104
- class: "app-bar-button__button",
1105
- onClick: withModifiers(toggleContent, ["stop"])
1106
- }, [
1107
- createElementVNode("div", _hoisted_1$6, [
1108
- renderSlot(_ctx.$slots, "trigger", {
1109
- isActive: isActive.value,
1110
- toggle: toggleContent
1111
- }, () => [
1112
- createElementVNode("div", _hoisted_2$4, [
1113
- createVNode(_component_VcIcon, {
1114
- icon: _ctx.icon,
1115
- size: "xl",
1116
- class: normalizeClass(["app-bar-button__icon", { "app-bar-button__icon--active": isActive.value }])
1117
- }, null, 8, ["icon", "class"])
1118
- ])
1119
- ])
1120
- ])
1121
- ], 512)
1122
- ]),
1123
- _: 2
1124
- }, [
1125
- !isActive.value && !!_ctx.title ? {
1126
- name: "tooltip",
1127
- fn: withCtx(() => [
1128
- createTextVNode(toDisplayString(_ctx.title), 1)
1129
- ]),
1130
- key: "0"
1131
- } : void 0
1132
- ]), 1024)
1133
- ], 2);
1134
- };
1135
- }
1136
- });
1137
-
1138
- const _hoisted_1$5 = { class: "vc-app-toolbar-menu" };
1139
- const _hoisted_2$3 = { class: "vc-app-toolbar-menu__button" };
1140
- const _hoisted_3$2 = {
1141
- key: 1,
1142
- class: "vc-app-toolbar-menu__accent"
1143
- };
1144
- const _hoisted_4$2 = {
1145
- key: 1,
1146
- class: "vc-app-toolbar-menu__accent"
1147
- };
1148
- const _sfc_main$8 = /* @__PURE__ */ defineComponent({
1149
- __name: "AppBarWidgetsMenu",
1150
- setup(__props) {
1151
- const { items } = useAppBarWidget();
1152
- function isBadgeActive(item) {
1153
- if (item.badge === void 0) {
1154
- return false;
1155
- }
1156
- if (typeof item.badge === "function") {
1157
- return item.badge();
1158
- }
1159
- return !!item.badge;
1160
- }
1161
- return (_ctx, _cache) => {
1162
- return openBlock(), createElementBlock("div", _hoisted_1$5, [
1163
- (openBlock(true), createElementBlock(Fragment, null, renderList(unref(items), (item) => {
1164
- return openBlock(), createElementBlock("div", {
1165
- key: item.id,
1166
- class: "vc-app-toolbar-menu__item"
1167
- }, [
1168
- item.component ? (openBlock(), createBlock(_sfc_main$9, {
1169
- key: 0,
1170
- "is-opened": isBadgeActive(item),
1171
- "widget-id": item.id,
1172
- onToggle: ($event) => item.onClick && item.onClick()
1173
- }, {
1174
- trigger: withCtx(({ isActive }) => [
1175
- createElementVNode("div", _hoisted_2$3, [
1176
- createElementVNode("div", {
1177
- class: normalizeClass(["vc-app-toolbar-menu__button-icon", {
1178
- "vc-app-toolbar-menu__button-icon--active": isActive
1179
- }])
1180
- }, [
1181
- item.icon ? (openBlock(), createBlock(unref(_sfc_main$j), {
1182
- key: 0,
1183
- icon: item.icon,
1184
- size: "l"
1185
- }, null, 8, ["icon"])) : createCommentVNode("", true),
1186
- isBadgeActive(item) ? (openBlock(), createElementBlock("div", _hoisted_3$2)) : createCommentVNode("", true)
1187
- ], 2)
1188
- ])
1189
- ]),
1190
- _: 2
1191
- }, 1032, ["is-opened", "widget-id", "onToggle"])) : item.onClick ? (openBlock(), createBlock(_sfc_main$9, {
1192
- key: 1,
1193
- onToggle: item.onClick
1194
- }, {
1195
- trigger: withCtx(({ isActive }) => [
1196
- createElementVNode("div", {
1197
- class: normalizeClass(["vc-app-toolbar-menu__button-icon", {
1198
- "vc-app-toolbar-menu__button-icon--active": isActive
1199
- }])
1200
- }, [
1201
- item.icon ? (openBlock(), createBlock(unref(_sfc_main$j), {
1202
- key: 0,
1203
- icon: item.icon,
1204
- size: "l"
1205
- }, null, 8, ["icon"])) : createCommentVNode("", true),
1206
- isBadgeActive(item) ? (openBlock(), createElementBlock("div", _hoisted_4$2)) : createCommentVNode("", true)
1207
- ], 2)
1208
- ]),
1209
- _: 2
1210
- }, 1032, ["onToggle"])) : createCommentVNode("", true)
1211
- ]);
1212
- }), 128))
1213
- ]);
1214
- };
1215
- }
1216
- });
1217
-
1218
- const _hoisted_1$4 = { class: "vc-app-bar__collapse-button-wrap" };
1219
- const _sfc_main$7 = /* @__PURE__ */ defineComponent({
1220
- __name: "vc-app-bar",
1221
- props: {
1222
- logo: {},
1223
- title: {},
1224
- disableMenu: { type: Boolean }
1225
- },
1226
- emits: ["logo:click", "backlink:click"],
1227
- setup(__props) {
1228
- const {
1229
- state,
1230
- toggleSidebar,
1231
- toggleMenu: toggleMenuState,
1232
- closeAll,
1233
- toggleHoverExpanded,
1234
- isHoverExpanded
1235
- } = useAppMenuState();
1236
- const { currentWidget, hideAllWidgets, isAnyWidgetVisible } = useAppBarWidgets();
1237
- const isMobile = inject("isMobile", ref(false));
1238
- const isDesktop = inject("isDesktop", ref(true));
1239
- const collapseButtonHover = ref(false);
1240
- provide("appMenuState", { closeAll });
1241
- const toggleMenu = () => {
1242
- toggleMenuState();
1243
- if (!state.value.isMenuOpen) {
1244
- hideAllWidgets();
1245
- }
1246
- };
1247
- const handleMenuClose = (value) => {
1248
- if (!value) {
1249
- closeAll();
1250
- hideAllWidgets();
1251
- }
1252
- };
1253
- const handleHoverExpand = (shouldExpand) => {
1254
- toggleHoverExpanded(shouldExpand);
1255
- };
1256
- const appBarClasses = computed(() => {
1257
- return {
1258
- "vc-app-bar--mobile": isMobile.value,
1259
- "vc-app-bar--desktop": isDesktop.value,
1260
- "vc-app-bar--collapsed": !state.value.isSidebarExpanded && isDesktop.value,
1261
- "vc-app-bar--hover-expanded": isDesktop.value && isHoverExpanded.value,
1262
- "vc-app-bar--hover-collapsed": isDesktop.value && !state.value.isSidebarExpanded && !isHoverExpanded.value
1263
- };
1264
- });
1265
- const wrapClasses = computed(() => {
1266
- return {
1267
- "vc-app-bar__wrap--mobile-expanded": isMobile.value && state.value.isSidebarExpanded,
1268
- "vc-app-bar__wrap--desktop-collapsed": isDesktop.value && !state.value.isSidebarExpanded,
1269
- "vc-app-bar__wrap--desktop-expanded": isDesktop.value && state.value.isSidebarExpanded,
1270
- "vc-app-bar__wrap--hover-expanded": isDesktop.value && isHoverExpanded.value && !state.value.isSidebarExpanded,
1271
- "vc-app-bar__wrap--hover-collapsed": isDesktop.value && !isHoverExpanded.value && !state.value.isSidebarExpanded
1272
- };
1273
- });
1274
- return (_ctx, _cache) => {
1275
- return openBlock(), createElementBlock(Fragment, null, [
1276
- _ctx.$isDesktop.value ? (openBlock(), createElementBlock("div", {
1277
- key: 0,
1278
- class: normalizeClass(["vc-app-bar--padding", {
1279
- "vc-app-bar--padding-expanded": unref(state).isSidebarExpanded
1280
- }])
1281
- }, null, 2)) : createCommentVNode("", true),
1282
- createElementVNode("div", {
1283
- class: normalizeClass(["vc-app-bar", appBarClasses.value]),
1284
- onMouseenter: _cache[4] || (_cache[4] = ($event) => _ctx.$isDesktop.value && !unref(state).isSidebarExpanded && handleHoverExpand(true)),
1285
- onMouseleave: _cache[5] || (_cache[5] = ($event) => _ctx.$isDesktop.value && !unref(state).isSidebarExpanded && handleHoverExpand(false))
1286
- }, [
1287
- createElementVNode("div", {
1288
- class: normalizeClass(["vc-app-bar__wrap", wrapClasses.value])
1289
- }, [
1290
- !_ctx.$isMobile.value ? (openBlock(), createElementBlock("div", {
1291
- key: 0,
1292
- class: "vc-app-bar__collapse-button",
1293
- onClick: _cache[0] || (_cache[0] = //@ts-ignore
1294
- (...args) => unref(toggleSidebar) && unref(toggleSidebar)(...args))
1295
- }, [
1296
- createElementVNode("div", _hoisted_1$4, [
1297
- createVNode(Transition, { name: "rotate" }, {
1298
- default: withCtx(() => [
1299
- withDirectives(createVNode(unref(_sfc_main$j), {
1300
- class: normalizeClass(["vc-app-bar__collapse-button-icon", { "rotate-180": !unref(state).isSidebarExpanded }]),
1301
- icon: unref(_sfc_main$p),
1302
- size: "xs"
1303
- }, null, 8, ["icon", "class"]), [
1304
- [vShow, true]
1305
- ])
1306
- ]),
1307
- _: 1
1308
- })
1309
- ])
1310
- ])) : createCommentVNode("", true),
1311
- createElementVNode("div", {
1312
- class: normalizeClass(["vc-app-bar__wrapper", {
1313
- "vc-app-bar__wrapper--mobile": _ctx.$isMobile.value,
1314
- "vc-app-bar__wrapper--hover-collapsed": _ctx.$isDesktop.value && !unref(isHoverExpanded) && !unref(state).isSidebarExpanded
1315
- }]),
1316
- onMouseenter: _cache[2] || (_cache[2] = ($event) => collapseButtonHover.value = true),
1317
- onMouseleave: _cache[3] || (_cache[3] = ($event) => collapseButtonHover.value = false)
1318
- }, [
1319
- createVNode(_sfc_main$e, {
1320
- logo: _ctx.logo,
1321
- expanded: unref(state).isSidebarExpanded || unref(isHoverExpanded),
1322
- class: normalizeClass(["vc-app-bar__header", {
1323
- "vc-app-bar__header--hover-expanded": _ctx.$isDesktop.value && unref(isHoverExpanded) && !unref(state).isSidebarExpanded,
1324
- "vc-app-bar__header--collapsed": _ctx.$isDesktop.value && !unref(state).isSidebarExpanded && !unref(isHoverExpanded)
1325
- }]),
1326
- "onLogo:click": _cache[1] || (_cache[1] = ($event) => _ctx.$emit("logo:click")),
1327
- onToggleMenu: toggleMenu
1328
- }, {
1329
- actions: withCtx(() => [
1330
- createVNode(_sfc_main$c, {
1331
- "is-sidebar-mode": unref(state).isMenuOpen,
1332
- expanded: unref(state).isSidebarExpanded
1333
- }, null, 8, ["is-sidebar-mode", "expanded"])
1334
- ]),
1335
- _: 1
1336
- }, 8, ["logo", "expanded", "class"]),
1337
- unref(state).isMenuOpen ? (openBlock(), createBlock(_sfc_main$b, {
1338
- key: 0,
1339
- "is-opened": unref(state).isMenuOpen,
1340
- expanded: unref(state).isSidebarExpanded,
1341
- "onUpdate:isOpened": handleMenuClose
1342
- }, {
1343
- navmenu: withCtx(() => [
1344
- renderSlot(_ctx.$slots, "navmenu")
1345
- ]),
1346
- "user-dropdown": withCtx(() => [
1347
- renderSlot(_ctx.$slots, "user-dropdown")
1348
- ]),
1349
- "app-switcher": withCtx(() => [
1350
- renderSlot(_ctx.$slots, "app-switcher")
1351
- ]),
1352
- widgets: withCtx(() => [
1353
- createVNode(_sfc_main$8)
1354
- ]),
1355
- "widgets-active-content": withCtx(() => [
1356
- unref(isAnyWidgetVisible) ? (openBlock(), createElementBlock("div", {
1357
- key: 0,
1358
- class: normalizeClass(["vc-app-bar__menu-dropdowns", { "vc-app-bar__menu-dropdowns--mobile": _ctx.$isMobile.value }])
1359
- }, [
1360
- (openBlock(), createBlock(resolveDynamicComponent(unref(currentWidget)?.component), mergeProps(unref(currentWidget)?.props || {}, { onClose: unref(hideAllWidgets) }), null, 16, ["onClose"]))
1361
- ], 2)) : createCommentVNode("", true)
1362
- ]),
1363
- _: 3
1364
- }, 8, ["is-opened", "expanded"])) : createCommentVNode("", true),
1365
- _ctx.$isDesktop.value ? (openBlock(), createBlock(_sfc_main$a, {
1366
- key: 1,
1367
- expanded: unref(state).isSidebarExpanded
1368
- }, {
1369
- navmenu: withCtx(() => [
1370
- renderSlot(_ctx.$slots, "navmenu")
1371
- ]),
1372
- "user-dropdown": withCtx(() => [
1373
- renderSlot(_ctx.$slots, "user-dropdown")
1374
- ]),
1375
- _: 3
1376
- }, 8, ["expanded"])) : createCommentVNode("", true)
1377
- ], 34)
1378
- ], 2)
1379
- ], 34)
1380
- ], 64);
1381
- };
1382
- }
1383
- });
1384
-
1385
- const _hoisted_1$3 = {
1386
- key: 0,
1387
- class: "vc-app-menu-link__icon"
1388
- };
1389
- const _hoisted_2$2 = {
1390
- key: 1,
1391
- class: "vc-app-menu-link__icon-letters"
1392
- };
1393
- const _hoisted_3$1 = { class: "vc-app-menu-link__title" };
1394
- const _hoisted_4$1 = { class: "vc-app-menu-link__title-truncate" };
1395
- const _hoisted_5 = {
1396
- key: 0,
1397
- class: "vc-app-menu-link__title-icon"
1398
- };
1399
- const _hoisted_6 = ["data-test-id", "onClick"];
1400
- const _hoisted_7 = {
1401
- key: 1,
1402
- class: "vc-app-menu-link__icon-letters"
1403
- };
1404
- const _sfc_main$6 = /* @__PURE__ */ defineComponent({
1405
- __name: "vc-app-menu-link",
1406
- props: {
1407
- children: {},
1408
- sticky: { type: Boolean, default: true },
1409
- icon: {},
1410
- title: {},
1411
- url: {},
1412
- expand: { type: Boolean },
1413
- id: {}
1414
- },
1415
- emits: ["onClick"],
1416
- setup(__props, { emit: __emit }) {
1417
- const props = __props;
1418
- const emit = __emit;
1419
- const isOpened = ref(false);
1420
- const route = useRoute();
1421
- const params = Object.fromEntries(Object.entries(route.params).filter(([key]) => key !== "pathMatch"));
1422
- const isMenuItemActive = computed(() => isActive(props.url ?? "") && !props.children?.length);
1423
- watch(
1424
- () => route.path,
1425
- () => {
1426
- if (props.children && props.children.length && props.children.find((x) => x?.url === route?.path)) {
1427
- isOpened.value = true;
1428
- }
1429
- },
1430
- { immediate: true }
1431
- );
1432
- function onMenuItemClick() {
1433
- if (!props.children?.length) {
1434
- emit("onClick");
1435
- } else {
1436
- isOpened.value = !isOpened.value;
1437
- }
1438
- }
1439
- const isActive = (url) => {
1440
- if (url) {
1441
- let path = route.path;
1442
- if (Object.values(params).length) {
1443
- path = path.replace(Object.values(params)[0], "");
1444
- }
1445
- const active = path.endsWith(url);
1446
- if (active && props.children?.length) {
1447
- isOpened.value = true;
1448
- }
1449
- return active;
1450
- } else {
1451
- return false;
1452
- }
1453
- };
1454
- const twoLettersTitle = (title) => {
1455
- return unref(title)?.split(" ").slice(0, 2).map((word) => word[0]).join("");
1456
- };
1457
- onMounted(() => {
1458
- const storedState = localStorage.getItem(`vc_menu_${props.id}_isOpened`);
1459
- if (storedState) {
1460
- isOpened.value = JSON.parse(storedState);
1461
- }
1462
- });
1463
- watch(isOpened, (newValue) => {
1464
- localStorage.setItem(`vc_menu_${props.id}_isOpened`, JSON.stringify(newValue));
1465
- });
1466
- return (_ctx, _cache) => {
1467
- const _component_VcTooltip = resolveComponent("VcTooltip");
1468
- const _component_router_link = resolveComponent("router-link");
1469
- return openBlock(), createElementBlock(Fragment, null, [
1470
- createElementVNode("div", {
1471
- class: "vc-app-menu-link",
1472
- onClick: onMenuItemClick
1473
- }, [
1474
- createVNode(_component_VcTooltip, null, createSlots({
1475
- default: withCtx(() => [
1476
- createElementVNode("div", {
1477
- class: normalizeClass(["vc-app-menu-link__item", [
1478
- {
1479
- "vc-app-menu-link__item_active": isMenuItemActive.value,
1480
- "vc-app-menu-link__item_no-hover": !_ctx.children?.length,
1481
- "vc-app-menu-link__item_child-opened": _ctx.expand && isOpened.value,
1482
- "vc-app-menu-link__item_collapsed": !_ctx.expand
1483
- }
1484
- ]])
1485
- }, [
1486
- _ctx.icon ? (openBlock(), createElementBlock("div", _hoisted_1$3, [
1487
- createVNode(unref(_sfc_main$j), {
1488
- class: "vc-app-menu-link__icon-content",
1489
- icon: _ctx.icon,
1490
- size: "m"
1491
- }, null, 8, ["icon"])
1492
- ])) : createCommentVNode("", true),
1493
- !_ctx.expand && !_ctx.icon ? (openBlock(), createElementBlock("div", _hoisted_2$2, toDisplayString(twoLettersTitle(_ctx.title)), 1)) : createCommentVNode("", true),
1494
- createVNode(Transition, { name: "opacity" }, {
1495
- default: withCtx(() => [
1496
- withDirectives(createElementVNode("div", _hoisted_3$1, [
1497
- createElementVNode("div", _hoisted_4$1, toDisplayString(_ctx.title), 1),
1498
- !!_ctx.children?.length && _ctx.expand || false ? (openBlock(), createElementBlock("div", _hoisted_5, [
1499
- createVNode(unref(_sfc_main$j), {
1500
- class: "vc-app-menu-item__title-icon",
1501
- icon: isOpened.value ? _sfc_main$q : _sfc_main$r,
1502
- size: "m"
1503
- }, null, 8, ["icon"])
1504
- ])) : createCommentVNode("", true)
1505
- ], 512), [
1506
- [vShow, _ctx.expand]
1507
- ])
1508
- ]),
1509
- _: 1
1510
- })
1511
- ], 2)
1512
- ]),
1513
- _: 2
1514
- }, [
1515
- !_ctx.expand ? {
1516
- name: "tooltip",
1517
- fn: withCtx(() => [
1518
- createTextVNode(toDisplayString(_ctx.title), 1)
1519
- ]),
1520
- key: "0"
1521
- } : void 0
1522
- ]), 1024)
1523
- ]),
1524
- withDirectives(createElementVNode("div", {
1525
- class: normalizeClass(["vc-app-menu-link__child", {
1526
- "vc-app-menu-link__child-collapsed": !_ctx.expand
1527
- }])
1528
- }, [
1529
- (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.children, (nested, i) => {
1530
- return openBlock(), createBlock(_component_VcTooltip, { key: i }, createSlots({
1531
- default: withCtx(() => [
1532
- _ctx.$hasAccess(nested.permissions) && nested.url ? (openBlock(), createBlock(_component_router_link, {
1533
- key: 0,
1534
- to: nested.url,
1535
- custom: ""
1536
- }, {
1537
- default: withCtx(() => [
1538
- createElementVNode("div", {
1539
- class: "vc-app-menu-link__child-item-link",
1540
- "data-test-id": nested.routeId,
1541
- onClick: ($event) => _ctx.$emit("onClick", nested)
1542
- }, [
1543
- (openBlock(), createElementBlock("div", {
1544
- key: i,
1545
- class: normalizeClass([
1546
- {
1547
- "vc-app-menu-link__child-item_active": isActive(nested.url ?? ""),
1548
- "vc-app-menu-link__child-item_collapsed": !_ctx.expand,
1549
- "vc-app-menu-link__child-item_expanded": _ctx.expand
1550
- },
1551
- "vc-app-menu-link__child-item"
1552
- ])
1553
- }, [
1554
- nested.icon ? (openBlock(), createElementBlock("div", {
1555
- key: 0,
1556
- class: normalizeClass(["vc-app-menu-link__icon vc-app-menu-link__icon--child", {
1557
- "vc-app-menu-link__icon-collapsed": !_ctx.expand
1558
- }])
1559
- }, [
1560
- createVNode(unref(_sfc_main$j), {
1561
- class: "vc-app-menu-link__icon-content",
1562
- icon: nested.icon,
1563
- size: "m"
1564
- }, null, 8, ["icon"])
1565
- ], 2)) : createCommentVNode("", true),
1566
- !_ctx.expand && !nested.icon ? (openBlock(), createElementBlock("div", _hoisted_7, toDisplayString(twoLettersTitle(nested.title)), 1)) : createCommentVNode("", true),
1567
- createVNode(Transition, { name: "opacity" }, {
1568
- default: withCtx(() => [
1569
- withDirectives(createElementVNode("p", {
1570
- class: normalizeClass(["vc-app-menu-link__child-item-title", {
1571
- "vc-app-menu-link__child-item-title--no-icon": !nested.icon
1572
- }])
1573
- }, toDisplayString(nested.title), 3), [
1574
- [vShow, _ctx.expand]
1575
- ])
1576
- ]),
1577
- _: 2
1578
- }, 1024)
1579
- ], 2))
1580
- ], 8, _hoisted_6)
1581
- ]),
1582
- _: 2
1583
- }, 1032, ["to"])) : createCommentVNode("", true)
1584
- ]),
1585
- _: 2
1586
- }, [
1587
- !_ctx.expand ? {
1588
- name: "tooltip",
1589
- fn: withCtx(() => [
1590
- createTextVNode(toDisplayString(nested.title), 1)
1591
- ]),
1592
- key: "0"
1593
- } : void 0
1594
- ]), 1024);
1595
- }), 128))
1596
- ], 2), [
1597
- [vShow, isOpened.value]
1598
- ])
1599
- ], 64);
1600
- };
1601
- }
1602
- });
1603
-
1604
- const _sfc_main$5 = /* @__PURE__ */ defineComponent({
1605
- __name: "vc-app-menu-item",
1606
- props: {
1607
- sticky: { type: Boolean, default: true },
1608
- isVisible: { type: Boolean },
1609
- url: {},
1610
- icon: {},
1611
- title: {},
1612
- children: { default: () => [] },
1613
- expand: { type: Boolean },
1614
- id: {}
1615
- },
1616
- emits: ["click"],
1617
- setup(__props) {
1618
- return (_ctx, _cache) => {
1619
- const _component_router_link = resolveComponent("router-link");
1620
- return openBlock(), createElementBlock("div", null, [
1621
- _ctx.url ? (openBlock(), createBlock(_component_router_link, {
1622
- key: 0,
1623
- to: _ctx.url,
1624
- custom: ""
1625
- }, {
1626
- default: withCtx(() => [
1627
- _ctx.isVisible ? (openBlock(), createBlock(_sfc_main$6, {
1628
- key: 0,
1629
- id: _ctx.id,
1630
- sticky: _ctx.sticky,
1631
- icon: _ctx.icon ?? "",
1632
- title: _ctx.title ?? "",
1633
- url: _ctx.url,
1634
- expand: _ctx.expand,
1635
- onOnClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("click"))
1636
- }, null, 8, ["id", "sticky", "icon", "title", "url", "expand"])) : createCommentVNode("", true)
1637
- ]),
1638
- _: 1
1639
- }, 8, ["to"])) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
1640
- _ctx.isVisible ? (openBlock(), createBlock(_sfc_main$6, {
1641
- key: 0,
1642
- id: _ctx.id,
1643
- children: _ctx.children,
1644
- sticky: _ctx.sticky,
1645
- icon: _ctx.icon ?? "",
1646
- title: _ctx.title ?? "",
1647
- expand: _ctx.expand,
1648
- onOnClick: _cache[1] || (_cache[1] = ($event) => _ctx.$emit("click", $event))
1649
- }, null, 8, ["id", "children", "sticky", "icon", "title", "expand"])) : createCommentVNode("", true)
1650
- ], 64))
1651
- ]);
1652
- };
1653
- }
1654
- });
1655
-
1656
- const _hoisted_1$2 = { class: "vc-app-menu__menu-items" };
1657
- const _sfc_main$4 = /* @__PURE__ */ defineComponent({
1658
- __name: "vc-app-menu",
1659
- props: {
1660
- version: { default: "" }
1661
- },
1662
- emits: ["item:click", "version:click"],
1663
- setup(__props, { emit: __emit }) {
1664
- const emit = __emit;
1665
- const isMobile = inject("isMobile");
1666
- const { menuItems } = useMenuService();
1667
- const { isExpanded, isHoverExpanded } = useMenuExpanded();
1668
- const { closeAll } = useAppMenuState();
1669
- const handleMenuItemClick = (item, nestedItem) => {
1670
- if (isMobile.value) {
1671
- closeAll();
1672
- }
1673
- emit("item:click", nestedItem ? nestedItem : item);
1674
- };
1675
- const isMenuVisible = computed(() => {
1676
- return !!menuItems.value.length;
1677
- });
1678
- return (_ctx, _cache) => {
1679
- return isMenuVisible.value ? (openBlock(), createElementBlock("div", {
1680
- key: 0,
1681
- class: normalizeClass(["vc-app-menu", {
1682
- "vc-app-menu--mobile": _ctx.$isMobile.value,
1683
- "vc-app-menu--collapsed": _ctx.$isDesktop.value && !unref(isExpanded),
1684
- "vc-app-menu--hover-expanded": unref(isHoverExpanded)
1685
- }])
1686
- }, [
1687
- createElementVNode("div", {
1688
- class: normalizeClass(["vc-app-menu__inner", {
1689
- "vc-app-menu__inner--desktop": _ctx.$isDesktop.value,
1690
- "vc-app-menu__inner--collapsed": _ctx.$isDesktop.value && !unref(isExpanded),
1691
- "vc-app-menu__inner--hover-expanded": unref(isHoverExpanded)
1692
- }])
1693
- }, [
1694
- createVNode(unref(VcContainer), {
1695
- "no-padding": true,
1696
- class: "vc-app-menu__container"
1697
- }, {
1698
- default: withCtx(() => [
1699
- createElementVNode("div", _hoisted_1$2, [
1700
- (openBlock(true), createElementBlock(Fragment, null, renderList(unref(menuItems), (item) => {
1701
- return openBlock(), createBlock(_sfc_main$5, {
1702
- id: item.id,
1703
- key: item?.id,
1704
- "data-test-id": item?.routeId,
1705
- "is-visible": _ctx.$hasAccess(item.permissions) && (item.children?.some((child) => _ctx.$hasAccess(child.permissions)) ?? true),
1706
- url: item.url,
1707
- icon: item.groupIcon || item.icon,
1708
- title: item.title,
1709
- children: item.children,
1710
- expand: _ctx.$isDesktop.value ? unref(isExpanded) || unref(isHoverExpanded) : true,
1711
- onClick: ($event) => handleMenuItemClick(item, $event)
1712
- }, null, 8, ["id", "data-test-id", "is-visible", "url", "icon", "title", "children", "expand", "onClick"]);
1713
- }), 128))
1714
- ])
1715
- ]),
1716
- _: 1
1717
- })
1718
- ], 2)
1719
- ], 2)) : createCommentVNode("", true);
1720
- };
1721
- }
1722
- });
1723
-
1724
- const _sfc_main$3 = /* @__PURE__ */ defineComponent({
1725
- __name: "change-password-button",
1726
- setup(__props) {
1727
- const { open } = usePopup({ component: ChangePassword });
1728
- const handleClick = () => {
1729
- open();
1730
- };
1731
- return (_ctx, _cache) => {
1732
- return openBlock(), createBlock(unref(_sfc_main$i), {
1733
- icon: unref(_sfc_main$s),
1734
- title: _ctx.$t("SHELL.ACCOUNT.CHANGE_PASSWORD"),
1735
- "onTrigger:click": handleClick
1736
- }, null, 8, ["icon", "title"]);
1737
- };
1738
- }
1739
- });
1740
-
1741
- const _sfc_main$2 = /* @__PURE__ */ defineComponent({
1742
- __name: "logout-button",
1743
- setup(__props) {
1744
- const { signOut } = useUser();
1745
- const router = useRouter();
1746
- const { closeBlade } = useBladeNavigation();
1747
- const handleLogout = async () => {
1748
- const isPrevented = await closeBlade(0);
1749
- if (!isPrevented) {
1750
- await signOut();
1751
- router.push({ name: "Login" });
1752
- }
1753
- };
1754
- return (_ctx, _cache) => {
1755
- return openBlock(), createBlock(unref(_sfc_main$i), {
1756
- icon: unref(_sfc_main$t),
1757
- title: _ctx.$t("SHELL.ACCOUNT.LOGOUT"),
1758
- "onTrigger:click": handleLogout
1759
- }, null, 8, ["icon", "title"]);
1760
- };
1761
- }
1762
- });
1763
-
1764
- const _hoisted_1$1 = { class: "vc-app__main-content" };
1765
- const _hoisted_2$1 = {
1766
- key: 0,
1767
- class: "vc-app__workspace"
1768
- };
1769
- const _sfc_main$1 = /* @__PURE__ */ defineComponent({
1770
- ...{
1771
- inheritAttrs: false
1772
- },
1773
- __name: "vc-app",
1774
- props: {
1775
- isReady: { type: Boolean },
1776
- logo: {},
1777
- version: {},
1778
- title: {},
1779
- avatar: {},
1780
- name: {},
1781
- disableMenu: { type: Boolean },
1782
- role: {}
1783
- },
1784
- emits: ["logo-click"],
1785
- setup(__props, { emit: __emit }) {
1786
- const props = __props;
1787
- console.debug("vc-app: Init vc-app");
1788
- const internalRoutes = inject("bladeRoutes");
1789
- const dynamicModules = inject(DynamicModulesKey, void 0);
1790
- const isAppReady = ref(props.isReady);
1791
- const router = useRouter();
1792
- const { openBlade, closeBlade, resolveBladeByName, blades, goToRoot } = useBladeNavigation();
1793
- const { appsList, switchApp, getApps } = useAppSwitcher();
1794
- const { loadFromHistory, notifications, markAllAsRead } = useNotifications();
1795
- const route = useRoute();
1796
- const { isAuthenticated } = useUser();
1797
- const routes = router.getRoutes();
1798
- const { register: registerMenuItem } = provideSettingsMenu();
1799
- const { register: registerAppBarWidget } = provideAppBarWidget();
1800
- const hasUnreadNotifications = computed(() => {
1801
- return notifications.value.some((item) => item.isNew);
1802
- });
1803
- const { t } = useI18n({ useScope: "global" });
1804
- const { register: registerMobileButton } = provideAppBarMobileButtonsService();
1805
- registerMenuItem({
1806
- id: "language-selector",
1807
- component: LanguageSelector,
1808
- order: 20
1809
- });
1810
- registerMenuItem({
1811
- id: "theme-selector",
1812
- component: _sfc_main$f,
1813
- order: 10
1814
- });
1815
- registerMenuItem({
1816
- id: "change-password",
1817
- component: _sfc_main$3,
1818
- order: 30
1819
- });
1820
- registerMenuItem({
1821
- id: "logout",
1822
- component: _sfc_main$2,
1823
- order: 100
1824
- });
1825
- registerAppBarWidget({
1826
- id: "notification-dropdown",
1827
- component: NotificationDropdown,
1828
- icon: _sfc_main$u,
1829
- order: 10,
1830
- badge: () => hasUnreadNotifications.value
1831
- });
1832
- registerMobileButton({
1833
- id: "notification-dropdown",
1834
- component: NotificationDropdown,
1835
- icon: _sfc_main$u,
1836
- order: 10
1837
- });
1838
- const onMenuItemClick = function(item) {
1839
- console.debug(`vc-app#onMenuItemClick() called.`);
1840
- if (item.routeId) {
1841
- openBlade(
1842
- {
1843
- blade: resolveBladeByName(item.routeId)
1844
- },
1845
- true
1846
- );
1847
- } else if (!item.routeId && item.url) {
1848
- const menuRoute = routes.find((r) => {
1849
- return "/" + r.path.split("/").filter((part) => part !== "")[1] === item.url || r.path === item.url;
1850
- });
1851
- if (typeof menuRoute === "undefined") {
1852
- openRoot();
1853
- } else {
1854
- router.push({ name: menuRoute?.name, params: route.params });
1855
- }
1856
- }
1857
- };
1858
- const openRoot = async () => {
1859
- const isPrevented = await closeBlade(1);
1860
- if (!isPrevented) {
1861
- router.push(goToRoot());
1862
- }
1863
- };
1864
- watchOnce(
1865
- () => props.isReady,
1866
- async (newVal) => {
1867
- isAppReady.value = newVal;
1868
- if (isAuthenticated.value && newVal) {
1869
- await loadFromHistory();
1870
- await getApps();
1871
- }
1872
- }
1873
- );
1874
- watch(isAuthenticated, (newVal) => {
1875
- isAppReady.value = newVal;
1876
- });
1877
- provide("internalRoutes", internalRoutes);
1878
- provide(DynamicModulesKey, dynamicModules);
1879
- provideDashboardService();
1880
- provideMenuService();
1881
- provideGlobalSearch();
1882
- onUnmounted(() => {
1883
- isAppReady.value = false;
1884
- });
1885
- return (_ctx, _cache) => {
1886
- const _component_VcLoading = resolveComponent("VcLoading");
1887
- const _component_VcAppSwitcher = resolveComponent("VcAppSwitcher");
1888
- const _component_VcBladeNavigation = resolveComponent("VcBladeNavigation");
1889
- return !isAppReady.value ? (openBlock(), createBlock(_component_VcLoading, {
1890
- key: 0,
1891
- active: "",
1892
- class: "vc-app__loader"
1893
- })) : (openBlock(), createElementBlock("div", {
1894
- key: 1,
1895
- class: normalizeClass(["vc-app", {
1896
- "vc-app_mobile": _ctx.$isMobile.value
1897
- }])
1898
- }, [
1899
- createElementVNode("div", _hoisted_1$1, [
1900
- createVNode(_sfc_main$7, {
1901
- class: "vc-app__app-bar",
1902
- logo: _ctx.logo,
1903
- title: _ctx.title,
1904
- "disable-menu": _ctx.disableMenu,
1905
- "onBacklink:click": _cache[1] || (_cache[1] = ($event) => unref(closeBlade)(unref(blades).length - 1)),
1906
- "onLogo:click": openRoot
1907
- }, {
1908
- "app-switcher": withCtx(() => [
1909
- renderSlot(_ctx.$slots, "app-switcher", {}, () => [
1910
- createVNode(_component_VcAppSwitcher, {
1911
- "apps-list": unref(appsList),
1912
- onOnClick: _cache[0] || (_cache[0] = ($event) => unref(switchApp)($event))
1913
- }, null, 8, ["apps-list"])
1914
- ])
1915
- ]),
1916
- navmenu: withCtx(() => [
1917
- !_ctx.disableMenu ? (openBlock(), createBlock(_sfc_main$4, {
1918
- key: 0,
1919
- ref: "menu",
1920
- class: "vc-app__app-menu",
1921
- version: _ctx.version,
1922
- "onItem:click": onMenuItemClick
1923
- }, null, 8, ["version"])) : createCommentVNode("", true)
1924
- ]),
1925
- "user-dropdown": withCtx(() => [
1926
- createVNode(unref(UserDropdownButton), {
1927
- "avatar-url": _ctx.avatar,
1928
- name: _ctx.name,
1929
- role: _ctx.role
1930
- }, null, 8, ["avatar-url", "name", "role"])
1931
- ]),
1932
- _: 3
1933
- }, 8, ["logo", "title", "disable-menu"]),
1934
- unref(isAuthenticated) ? (openBlock(), createElementBlock("div", _hoisted_2$1, [
1935
- createVNode(_component_VcBladeNavigation)
1936
- ])) : createCommentVNode("", true),
1937
- createVNode(unref(VcPopupContainer))
1938
- ])
1939
- ], 2));
1940
- };
1941
- }
1942
- });
1943
-
1944
- const _hoisted_1 = { class: "vc-login-form__box" };
1945
- const _hoisted_2 = { class: "vc-login-form__header" };
1946
- const _hoisted_3 = { class: "vc-login-form__content" };
1947
- const _hoisted_4 = { class: "vc-login-form__version" };
1948
- const _sfc_main = /* @__PURE__ */ defineComponent({
1949
- __name: "vc-login-form",
1950
- props: {
1951
- logo: {},
1952
- background: {},
1953
- title: { default: "Login" }
1954
- },
1955
- setup(__props) {
1956
- const props = __props;
1957
- const router = useRouter();
1958
- const backgroundImageHandler = computed(() => {
1959
- if (props.background) {
1960
- return `background: url(${CSS.escape(props.background)}) center / cover no-repeat`;
1961
- }
1962
- return void 0;
1963
- });
1964
- const logoImageHandler = computed(() => {
1965
- if (props.logo) {
1966
- return `background: url(${CSS.escape(props.logo)}) center / contain no-repeat`;
1967
- }
1968
- return void 0;
1969
- });
1970
- const version = router.currentRoute.value.meta?.appVersion;
1971
- console.debug("Init vc-login-form");
1972
- return (_ctx, _cache) => {
1973
- return openBlock(), createElementBlock("div", {
1974
- class: "vc-login-form__container",
1975
- style: normalizeStyle(backgroundImageHandler.value)
1976
- }, [
1977
- createElementVNode("div", {
1978
- class: "vc-login-form__logo",
1979
- style: normalizeStyle(logoImageHandler.value)
1980
- }, null, 4),
1981
- createElementVNode("div", _hoisted_1, [
1982
- createElementVNode("div", _hoisted_2, toDisplayString(_ctx.title), 1),
1983
- createElementVNode("div", _hoisted_3, [
1984
- renderSlot(_ctx.$slots, "default")
1985
- ])
1986
- ]),
1987
- createElementVNode("div", _hoisted_4, toDisplayString(unref(version)), 1)
1988
- ], 4);
1989
- };
1990
- }
1991
- });
1992
-
1993
- export { LanguageSelector as L, _sfc_main$1 as _, _sfc_main as a, _sfc_main$g as b, addMenuItem as c, _sfc_main$i as d, _sfc_main$f as e, createMenuService as f, createSettingsMenuService as g, useMenuService as h, provideDashboardService as i, useDashboard as j, provideSettingsMenu as k, useSettingsMenu as l, addSettingsMenuItem as m, provideMenuService as p, registerDashboardWidget as r, useTheme as u };