@vc-shell/framework 1.1.2 → 1.1.4

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 (271) hide show
  1. package/CHANGELOG.md +18 -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-BKF-A58l.js → index-BBYKbiRX.js} +79 -92
  39. package/dist/index-BDm0tcWn.js +145680 -0
  40. package/dist/{assets/index-CeeaNa4F.js → index-BDqUaIyQ.js} +136 -167
  41. package/dist/index-BdflTsg6.js +308 -0
  42. package/dist/{assets/index-CtmpJVwa.js → index-BpBTtmQ6.js} +270 -312
  43. package/dist/index-Br0y2YMn.js +58 -0
  44. package/dist/index-CIcET-ZI.js +71 -0
  45. package/dist/index-CYAMpxnu.js +341 -0
  46. package/dist/index-Cf2H7YZ1.js +98 -0
  47. package/dist/{assets/index-Bv_z_qRq.js → index-Ck055pN8.js} +121 -124
  48. package/dist/index-D-fPN3yf.js +75 -0
  49. package/dist/{assets/index-BT8o9-M5.js → index-DJOis7Nc.js} +267 -386
  50. package/dist/index-DKtQMsy4.js +538 -0
  51. package/dist/{assets/index-DMTL7O1s.js → index-DWTsz5bC.js} +570 -586
  52. package/dist/{assets/index-C7zlEJy8.js → index-DuY7BIGm.js} +229 -302
  53. package/dist/{assets/index-B1srGfDb.js → index-o6aSdNED.js} +119 -165
  54. package/dist/index-wfv8ehcx.js +249 -0
  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/tsconfig.tsbuildinfo +1 -1
  106. package/dist/ttcn-Bsa4sfRm.js +123 -0
  107. package/dist/ttcn-cfg-Bac_acMi.js +88 -0
  108. package/dist/turtle-xwJUxoPV.js +80 -0
  109. package/dist/ui/components/atoms/vc-widget/vc-widget.vue.d.ts.map +1 -1
  110. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/vc-blade-toolbar.vue.d.ts.map +1 -1
  111. package/dist/vb-c2kQGd6-.js +74 -0
  112. package/dist/vbscript-Dz1TtKsy.js +324 -0
  113. package/dist/velocity-DJd0pTTC.js +96 -0
  114. package/dist/verilog-C4VGD9n1.js +263 -0
  115. package/dist/vhdl-T9HkrbI2.js +106 -0
  116. package/dist/webidl-CjfDENEo.js +155 -0
  117. package/dist/xquery-BUQdORAS.js +422 -0
  118. package/dist/yacas-C0absKBh.js +73 -0
  119. package/dist/z80-C8rPtw-0.js +61 -0
  120. package/package.json +4 -4
  121. package/ui/components/atoms/vc-widget/vc-widget.vue +2 -0
  122. package/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/vc-blade-toolbar.vue +65 -32
  123. package/dist/assets/apl-NdZ6-T1z.js +0 -142
  124. package/dist/assets/asciiarmor-CmJEbAuq.js +0 -56
  125. package/dist/assets/asn1-Ctc8K72v.js +0 -192
  126. package/dist/assets/asterisk-D6r__RMF.js +0 -187
  127. package/dist/assets/brainfuck-COwWCBpq.js +0 -70
  128. package/dist/assets/clike-C-PtfL50.js +0 -1019
  129. package/dist/assets/clojure-C2XPrGCa.js +0 -274
  130. package/dist/assets/cmake-BGrEgXCL.js +0 -81
  131. package/dist/assets/cobol-DShPmpZe.js +0 -234
  132. package/dist/assets/coffeescript-BG8vTfSz.js +0 -329
  133. package/dist/assets/commonlisp-8oE2EpEe.js +0 -108
  134. package/dist/assets/core-api-BMLS9FrT.js +0 -8288
  135. package/dist/assets/core-composables-DYxpIWyY.js +0 -1799
  136. package/dist/assets/core-constants-DiKDBbnD.js +0 -83
  137. package/dist/assets/core-directives-QhJx9kWh.js +0 -41
  138. package/dist/assets/core-interceptors-CSjUvxQ0.js +0 -78
  139. package/dist/assets/core-plugins-wv2bDZ0l.js +0 -4919
  140. package/dist/assets/core-services-CAfJRsjs.js +0 -4
  141. package/dist/assets/core-utilities-BTktq_a-.js +0 -33
  142. package/dist/assets/crystal--rIRMl16.js +0 -419
  143. package/dist/assets/css/core-directives-FL4vIIkN.css +0 -73
  144. package/dist/assets/css/fonts-M1mtyV8L.css +0 -305
  145. package/dist/assets/css/icons-css-DbCVsovz.css +0 -41
  146. package/dist/assets/css/shared-components-bnLHdCtf.css +0 -429
  147. package/dist/assets/css/shared-modules-CNOICmYQ.css +0 -45
  148. package/dist/assets/css/styles-C62nDZwV.css +0 -4096
  149. package/dist/assets/css/ui-app-Bh9hmlIB.css +0 -1287
  150. package/dist/assets/css/ui-content-B29jsmK7.css +0 -1187
  151. package/dist/assets/css/ui-controls-CRtfFczw.css +0 -387
  152. package/dist/assets/css/ui-data-CYLxfdUa.css +0 -1555
  153. package/dist/assets/css/ui-form-C3WrWfVl.css +0 -71
  154. package/dist/assets/css/ui-form-fields-DOtHhDeM.css +0 -1360
  155. package/dist/assets/css/ui-helpers-bOoNv5dS.css +0 -37
  156. package/dist/assets/css/ui-indicators-CybQnCoU.css +0 -628
  157. package/dist/assets/css/ui-layout-DyGKgizy.css +0 -251
  158. package/dist/assets/css/ui-media-TWYep8js.css +0 -298
  159. package/dist/assets/css/ui-media-advanced-BGxy3VSB.css +0 -183
  160. package/dist/assets/css/ui-navigation-DcPRn8SB.css +0 -1693
  161. package/dist/assets/css-C_ZeEwz2.js +0 -847
  162. package/dist/assets/cypher-Bayei42D.js +0 -122
  163. package/dist/assets/d-B0hhz6be.js +0 -205
  164. package/dist/assets/diff-DQutOIXs.js +0 -30
  165. package/dist/assets/dtd-C1CeYVnM.js +0 -121
  166. package/dist/assets/dylan-Dm9-uD-A.js +0 -337
  167. package/dist/assets/ebnf-jWG_1Yly.js +0 -151
  168. package/dist/assets/ecl-CgJPA6z9.js +0 -190
  169. package/dist/assets/eiffel-lj7uLahq.js +0 -146
  170. package/dist/assets/elm-Cz7o1ijk.js +0 -230
  171. package/dist/assets/erlang-CyL5QOyR.js +0 -581
  172. package/dist/assets/factor-BVWHwYpu.js +0 -65
  173. package/dist/assets/fcl-DiozYjc8.js +0 -154
  174. package/dist/assets/forth-B7vn5ze0.js +0 -164
  175. package/dist/assets/fortran-D2XNEnBT.js +0 -172
  176. package/dist/assets/gas-B_Tj57Ve.js +0 -343
  177. package/dist/assets/gherkin-CJ6Qk4EZ.js +0 -147
  178. package/dist/assets/groovy-ioGz2WSV.js +0 -228
  179. package/dist/assets/haskell-BHnm1B83.js +0 -239
  180. package/dist/assets/haxe-Bn6Yo6N3.js +0 -490
  181. package/dist/assets/http-BOd5SYCT.js +0 -89
  182. package/dist/assets/idl-FSFk8_xX.js +0 -274
  183. package/dist/assets/index--5fKpGeN.js +0 -792
  184. package/dist/assets/index-0lME64YH.js +0 -342
  185. package/dist/assets/index-B6Ip0FgO.js +0 -437
  186. package/dist/assets/index-BmV05E5M.js +0 -479
  187. package/dist/assets/index-C6MavZDA.js +0 -131
  188. package/dist/assets/index-CwKpgcYl.js +0 -85
  189. package/dist/assets/index-DRUmDL0J.js +0 -59
  190. package/dist/assets/index-DgFC-M9G.js +0 -96
  191. package/dist/assets/javascript-DGrAs70C.js +0 -922
  192. package/dist/assets/jinja2-D9k5QrXv.js +0 -171
  193. package/dist/assets/julia-DM42tOPB.js +0 -369
  194. package/dist/assets/livescript-Dci8HnOi.js +0 -259
  195. package/dist/assets/lua-CByQu4v6.js +0 -137
  196. package/dist/assets/lucide-icons-af0BY3bi.js +0 -34555
  197. package/dist/assets/mathematica-Dkv0uCYF.js +0 -153
  198. package/dist/assets/mbox-CYTvs5kC.js +0 -114
  199. package/dist/assets/mirc-DpgP3GCo.js +0 -176
  200. package/dist/assets/mllike-C6tNn2Yt.js +0 -343
  201. package/dist/assets/modelica-CR6hTSce.js +0 -192
  202. package/dist/assets/mscgen-D0GXtzMS.js +0 -149
  203. package/dist/assets/mumps-Bf1EyDa6.js +0 -129
  204. package/dist/assets/nginx-By9Phklj.js +0 -163
  205. package/dist/assets/nsis-B5ggMLQ9.js +0 -80
  206. package/dist/assets/ntriples-C7VJ7pnm.js +0 -141
  207. package/dist/assets/octave-6yR_ix15.js +0 -112
  208. package/dist/assets/oz-CEUnktiQ.js +0 -235
  209. package/dist/assets/pascal-Dksf1EyF.js +0 -124
  210. package/dist/assets/perl-B99DUQQt.js +0 -819
  211. package/dist/assets/pig-DFeDRta6.js +0 -149
  212. package/dist/assets/powershell-DhwsNWMx.js +0 -381
  213. package/dist/assets/properties-o21uErwC.js +0 -62
  214. package/dist/assets/protobuf-YxlANsmD.js +0 -54
  215. package/dist/assets/pug-bUgjeODZ.js +0 -504
  216. package/dist/assets/puppet-B8WICGYE.js +0 -205
  217. package/dist/assets/python-D3FFx1Id.js +0 -389
  218. package/dist/assets/q-D2Hjhl2C.js +0 -123
  219. package/dist/assets/r-D73k5lac.js +0 -174
  220. package/dist/assets/rpm-Duv_WH0z.js +0 -89
  221. package/dist/assets/ruby-DGCVqZDt.js +0 -287
  222. package/dist/assets/sas-XjPv1Vy5.js +0 -268
  223. package/dist/assets/scheme-DeaA28vt.js +0 -263
  224. package/dist/assets/shared-components-CfAt2hC6.js +0 -1501
  225. package/dist/assets/shared-composables-v9NkNuAe.js +0 -35
  226. package/dist/assets/shared-modules-CDP-H5ZB.js +0 -3588
  227. package/dist/assets/shared-pages-BGRRA5WB.js +0 -20
  228. package/dist/assets/shell-Bx6QZTgx.js +0 -145
  229. package/dist/assets/sieve-CWCD62sW.js +0 -178
  230. package/dist/assets/simple-mode-BAO9cD7H.js +0 -136
  231. package/dist/assets/smalltalk-DSQbF4MF.js +0 -153
  232. package/dist/assets/solr-v_XRf31C.js +0 -80
  233. package/dist/assets/sparql-BrfDqf0-.js +0 -170
  234. package/dist/assets/spreadsheet-Csn84Pef.js +0 -98
  235. package/dist/assets/sql-D4utlq1l.js +0 -480
  236. package/dist/assets/stex-DBkktma-.js +0 -246
  237. package/dist/assets/stylus-ByG-Fd6f.js +0 -750
  238. package/dist/assets/swift-CHbTprt3.js +0 -202
  239. package/dist/assets/tcl-BRlMUELr.js +0 -125
  240. package/dist/assets/textile-CqfTUjd4.js +0 -441
  241. package/dist/assets/tiddlywiki-BrsoM8KB.js +0 -278
  242. package/dist/assets/tiki-D-ivWPkc.js +0 -289
  243. package/dist/assets/toml-t_IhJu83.js +0 -75
  244. package/dist/assets/troff-DckGF2AE.js +0 -64
  245. package/dist/assets/ttcn-B8TAFbRR.js +0 -253
  246. package/dist/assets/ttcn-cfg-NHh25oCM.js +0 -197
  247. package/dist/assets/turtle-D9Js0BlL.js +0 -141
  248. package/dist/assets/ui-app-D31Pr1WY.js +0 -1993
  249. package/dist/assets/ui-content-B7SxH8y9.js +0 -52887
  250. package/dist/assets/ui-controls-nmDJYLmC.js +0 -348
  251. package/dist/assets/ui-data-Ci3b1ye0.js +0 -22901
  252. package/dist/assets/ui-form-Cs5ooOo7.js +0 -159
  253. package/dist/assets/ui-form-fields-DFQi31jT.js +0 -40575
  254. package/dist/assets/ui-helpers-CF-EUlOg.js +0 -1736
  255. package/dist/assets/ui-indicators-mIQeEqha.js +0 -199
  256. package/dist/assets/ui-layout-v2XBQky3.js +0 -320
  257. package/dist/assets/ui-media-WWYrwmZw.js +0 -1259
  258. package/dist/assets/ui-media-advanced-T8ibi153.js +0 -492
  259. package/dist/assets/ui-modals-BdZXzI85.js +0 -2
  260. package/dist/assets/ui-navigation-BtHa6ovW.js +0 -24269
  261. package/dist/assets/utils-DZK5fu48.js +0 -17216
  262. package/dist/assets/vb-CbIGLrpY.js +0 -249
  263. package/dist/assets/vbscript-8ANWle9n.js +0 -320
  264. package/dist/assets/velocity-D6hz3Hzw.js +0 -186
  265. package/dist/assets/verilog-DIV442at.js +0 -565
  266. package/dist/assets/vhdl-BlTiZo_v.js +0 -174
  267. package/dist/assets/vueuse-CTQm4Zh0.js +0 -9308
  268. package/dist/assets/webidl-Cp3tcqdk.js +0 -179
  269. package/dist/assets/xquery-Dd4TBzXv.js +0 -411
  270. package/dist/assets/yacas-DQ1WucF0.js +0 -182
  271. 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 };