@vef-framework-react/starter 2.3.0 → 2.4.1

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 (238) hide show
  1. package/LICENSE +201 -0
  2. package/dist/cjs/components/access-denied/access-denied-icon.cjs +1 -1
  3. package/dist/cjs/components/access-denied/index.cjs +1 -1
  4. package/dist/cjs/components/app/index.cjs +1 -1
  5. package/dist/cjs/components/base-layout/index.cjs +1 -1
  6. package/dist/cjs/components/base-layout/styles.cjs +1 -1
  7. package/dist/cjs/components/base-layout/use-base-layout.cjs +1 -1
  8. package/dist/cjs/components/error/error-icon.cjs +1 -1
  9. package/dist/cjs/components/error/index.cjs +1 -1
  10. package/dist/cjs/components/index.cjs +1 -1
  11. package/dist/cjs/components/layout/components/contour-pattern.cjs +1 -0
  12. package/dist/cjs/components/layout/components/footer.cjs +1 -1
  13. package/dist/cjs/components/layout/components/header/app-switcher.cjs +1 -0
  14. package/dist/cjs/components/layout/components/header/boy-icon.cjs +1 -1
  15. package/dist/cjs/components/layout/components/header/color-scheme.cjs +1 -1
  16. package/dist/cjs/components/layout/components/header/fullscreen.cjs +1 -1
  17. package/dist/cjs/components/layout/components/header/girl-icon.cjs +1 -1
  18. package/dist/cjs/components/layout/components/header/header-pattern.cjs +1 -0
  19. package/dist/cjs/components/layout/components/header/index.cjs +1 -1
  20. package/dist/cjs/components/layout/components/header/menu-burger.cjs +1 -1
  21. package/dist/cjs/components/layout/components/header/menu-fold-left-icon.cjs +1 -1
  22. package/dist/cjs/components/layout/components/header/menu-unfold-left-icon.cjs +1 -1
  23. package/dist/cjs/components/layout/components/header/mixed-menu.cjs +1 -0
  24. package/dist/cjs/components/layout/components/header/search.cjs +1 -1
  25. package/dist/cjs/components/layout/components/header/theme-config.cjs +1 -1
  26. package/dist/cjs/components/layout/components/header/user-avatar.cjs +1 -1
  27. package/dist/cjs/components/layout/components/index.cjs +1 -1
  28. package/dist/cjs/components/layout/components/logo.cjs +1 -1
  29. package/dist/cjs/components/layout/components/menu.cjs +1 -1
  30. package/dist/cjs/components/layout/components/search/index.cjs +1 -1
  31. package/dist/cjs/components/layout/components/search/keyboard-arrow-down-icon.cjs +1 -1
  32. package/dist/cjs/components/layout/components/search/keyboard-arrow-up-icon.cjs +1 -1
  33. package/dist/cjs/components/layout/components/search/keyboard-control-icon.cjs +1 -1
  34. package/dist/cjs/components/layout/components/search/keyboard-esc-icon.cjs +1 -1
  35. package/dist/cjs/components/layout/components/search/keyboard-help.cjs +1 -1
  36. package/dist/cjs/components/layout/components/search/keyboard-return-icon.cjs +1 -1
  37. package/dist/cjs/components/layout/components/search/keyboard-shift-icon.cjs +1 -1
  38. package/dist/cjs/components/layout/components/search/keyboard.cjs +1 -1
  39. package/dist/cjs/components/layout/components/search/letter-s-icon.cjs +1 -1
  40. package/dist/cjs/components/layout/components/search/search-result-item.cjs +1 -1
  41. package/dist/cjs/components/layout/components/search/search-result.cjs +1 -1
  42. package/dist/cjs/components/layout/components/sidebar.cjs +1 -1
  43. package/dist/cjs/components/layout/components/tabs/context-menu.cjs +1 -1
  44. package/dist/cjs/components/layout/components/tabs/index.cjs +1 -1
  45. package/dist/cjs/components/layout/components/tabs/main-content-maximum.cjs +1 -1
  46. package/dist/cjs/components/layout/components/tabs/reload.cjs +1 -1
  47. package/dist/cjs/components/layout/components/tabs/tab-item.cjs +1 -1
  48. package/dist/cjs/components/layout/components/tabs/tab-list.cjs +1 -1
  49. package/dist/cjs/components/layout/components/tabs/tabs-container.cjs +1 -1
  50. package/dist/cjs/components/layout/components/theme-config/color-scheme-switcher.cjs +1 -1
  51. package/dist/cjs/components/layout/components/theme-config/color-scheme.cjs +1 -1
  52. package/dist/cjs/components/layout/components/theme-config/config-item.cjs +1 -1
  53. package/dist/cjs/components/layout/components/theme-config/index.cjs +1 -1
  54. package/dist/cjs/components/layout/components/theme-config/menu-layout-card.cjs +1 -1
  55. package/dist/cjs/components/layout/components/theme-config/menu-layout.cjs +1 -1
  56. package/dist/cjs/components/layout/components/theme-config/operations.cjs +1 -1
  57. package/dist/cjs/components/layout/components/theme-config/theme-color-picker.cjs +1 -1
  58. package/dist/cjs/components/layout/components/theme-config/theme-colors.cjs +1 -1
  59. package/dist/cjs/components/layout/hooks/index.cjs +1 -1
  60. package/dist/cjs/components/layout/hooks/use-color-scheme-updater.cjs +1 -1
  61. package/dist/cjs/components/layout/hooks/use-menu-navigate.cjs +1 -1
  62. package/dist/cjs/components/layout/hooks/use-mixed-menu.cjs +1 -0
  63. package/dist/cjs/components/layout/hooks/use-tab-navigate.cjs +1 -1
  64. package/dist/cjs/components/layout/index.cjs +1 -1
  65. package/dist/cjs/components/layout/store.cjs +1 -1
  66. package/dist/cjs/components/layout/styles.cjs +1 -1
  67. package/dist/cjs/components/login/icon-login.cjs +1 -1
  68. package/dist/cjs/components/login/index.cjs +1 -1
  69. package/dist/cjs/components/login/styles.cjs +1 -1
  70. package/dist/cjs/components/n-progress/components/bar.cjs +1 -1
  71. package/dist/cjs/components/n-progress/components/container.cjs +1 -1
  72. package/dist/cjs/components/n-progress/components/index.cjs +1 -1
  73. package/dist/cjs/components/n-progress/event.cjs +1 -1
  74. package/dist/cjs/components/n-progress/index.cjs +1 -1
  75. package/dist/cjs/components/not-found/index.cjs +1 -1
  76. package/dist/cjs/components/not-found/not-found-icon.cjs +1 -1
  77. package/dist/cjs/components/router-provider/context.cjs +1 -1
  78. package/dist/cjs/components/router-provider/index.cjs +1 -1
  79. package/dist/cjs/components/theme-config-provider/global-style.cjs +1 -1
  80. package/dist/cjs/components/theme-config-provider/index.cjs +1 -1
  81. package/dist/cjs/components/theme-config-provider/use-color-mode-effect.cjs +1 -1
  82. package/dist/cjs/components/theme-config-provider/use-theme-config.cjs +1 -1
  83. package/dist/cjs/constants/index.cjs +1 -1
  84. package/dist/cjs/helpers/api.cjs +1 -1
  85. package/dist/cjs/helpers/app-version.cjs +1 -1
  86. package/dist/cjs/helpers/app.cjs +1 -1
  87. package/dist/cjs/helpers/auth.cjs +1 -1
  88. package/dist/cjs/helpers/event.cjs +1 -1
  89. package/dist/cjs/helpers/index.cjs +1 -1
  90. package/dist/cjs/helpers/query.cjs +1 -1
  91. package/dist/cjs/helpers/router.cjs +1 -1
  92. package/dist/cjs/hooks/index.cjs +1 -1
  93. package/dist/cjs/hooks/use-route-full-path.cjs +1 -1
  94. package/dist/cjs/index.cjs +1 -1
  95. package/dist/cjs/routes/access-denied.cjs +1 -1
  96. package/dist/cjs/routes/index.cjs +1 -1
  97. package/dist/cjs/routes/layout.cjs +1 -1
  98. package/dist/cjs/routes/login.cjs +1 -1
  99. package/dist/cjs/routes/root.cjs +1 -1
  100. package/dist/cjs/stores/app.cjs +1 -1
  101. package/dist/cjs/stores/index.cjs +1 -1
  102. package/dist/cjs/stores/tab.cjs +1 -1
  103. package/dist/cjs/stores/theme.cjs +1 -1
  104. package/dist/es/components/access-denied/access-denied-icon.js +1 -1
  105. package/dist/es/components/access-denied/index.js +1 -1
  106. package/dist/es/components/app/index.js +1 -1
  107. package/dist/es/components/base-layout/index.js +29 -29
  108. package/dist/es/components/base-layout/styles.js +15 -8
  109. package/dist/es/components/base-layout/use-base-layout.js +2 -1
  110. package/dist/es/components/error/error-icon.js +1 -1
  111. package/dist/es/components/error/index.js +1 -1
  112. package/dist/es/components/index.js +1 -1
  113. package/dist/es/components/layout/components/contour-pattern.js +111 -0
  114. package/dist/es/components/layout/components/footer.js +1 -1
  115. package/dist/es/components/layout/components/header/app-switcher.js +116 -0
  116. package/dist/es/components/layout/components/header/boy-icon.js +1 -1
  117. package/dist/es/components/layout/components/header/color-scheme.js +1 -1
  118. package/dist/es/components/layout/components/header/fullscreen.js +1 -1
  119. package/dist/es/components/layout/components/header/girl-icon.js +1 -1
  120. package/dist/es/components/layout/components/header/header-pattern.js +64 -0
  121. package/dist/es/components/layout/components/header/index.js +118 -53
  122. package/dist/es/components/layout/components/header/menu-burger.js +1 -1
  123. package/dist/es/components/layout/components/header/menu-fold-left-icon.js +1 -1
  124. package/dist/es/components/layout/components/header/menu-unfold-left-icon.js +1 -1
  125. package/dist/es/components/layout/components/header/mixed-menu.js +16 -0
  126. package/dist/es/components/layout/components/header/search.js +1 -1
  127. package/dist/es/components/layout/components/header/theme-config.js +1 -1
  128. package/dist/es/components/layout/components/header/user-avatar.js +2 -2
  129. package/dist/es/components/layout/components/index.js +1 -1
  130. package/dist/es/components/layout/components/logo.js +37 -15
  131. package/dist/es/components/layout/components/menu.js +40 -32
  132. package/dist/es/components/layout/components/search/index.js +15 -13
  133. package/dist/es/components/layout/components/search/keyboard-arrow-down-icon.js +1 -1
  134. package/dist/es/components/layout/components/search/keyboard-arrow-up-icon.js +1 -1
  135. package/dist/es/components/layout/components/search/keyboard-control-icon.js +1 -1
  136. package/dist/es/components/layout/components/search/keyboard-esc-icon.js +1 -1
  137. package/dist/es/components/layout/components/search/keyboard-help.js +3 -3
  138. package/dist/es/components/layout/components/search/keyboard-return-icon.js +1 -1
  139. package/dist/es/components/layout/components/search/keyboard-shift-icon.js +1 -1
  140. package/dist/es/components/layout/components/search/keyboard.js +3 -3
  141. package/dist/es/components/layout/components/search/letter-s-icon.js +1 -1
  142. package/dist/es/components/layout/components/search/search-result-item.js +4 -4
  143. package/dist/es/components/layout/components/search/search-result.js +2 -2
  144. package/dist/es/components/layout/components/sidebar.js +44 -28
  145. package/dist/es/components/layout/components/tabs/context-menu.js +1 -1
  146. package/dist/es/components/layout/components/tabs/index.js +5 -5
  147. package/dist/es/components/layout/components/tabs/main-content-maximum.js +1 -1
  148. package/dist/es/components/layout/components/tabs/reload.js +1 -1
  149. package/dist/es/components/layout/components/tabs/tab-item.js +19 -16
  150. package/dist/es/components/layout/components/tabs/tab-list.js +2 -2
  151. package/dist/es/components/layout/components/tabs/tabs-container.js +2 -2
  152. package/dist/es/components/layout/components/theme-config/color-scheme-switcher.js +2 -2
  153. package/dist/es/components/layout/components/theme-config/color-scheme.js +2 -2
  154. package/dist/es/components/layout/components/theme-config/config-item.js +2 -2
  155. package/dist/es/components/layout/components/theme-config/index.js +5 -5
  156. package/dist/es/components/layout/components/theme-config/menu-layout-card.js +28 -10
  157. package/dist/es/components/layout/components/theme-config/menu-layout.js +85 -28
  158. package/dist/es/components/layout/components/theme-config/operations.js +1 -1
  159. package/dist/es/components/layout/components/theme-config/theme-color-picker.js +1 -1
  160. package/dist/es/components/layout/components/theme-config/theme-colors.js +2 -2
  161. package/dist/es/components/layout/hooks/index.js +2 -1
  162. package/dist/es/components/layout/hooks/use-color-scheme-updater.js +1 -1
  163. package/dist/es/components/layout/hooks/use-menu-navigate.js +1 -1
  164. package/dist/es/components/layout/hooks/use-mixed-menu.js +42 -0
  165. package/dist/es/components/layout/hooks/use-tab-navigate.js +1 -1
  166. package/dist/es/components/layout/index.js +58 -41
  167. package/dist/es/components/layout/store.js +1 -1
  168. package/dist/es/components/layout/styles.js +33 -5
  169. package/dist/es/components/login/icon-login.js +1 -1
  170. package/dist/es/components/login/index.js +6 -6
  171. package/dist/es/components/login/styles.js +18 -18
  172. package/dist/es/components/login/welcome-messages.js +1 -1
  173. package/dist/es/components/n-progress/components/bar.js +3 -3
  174. package/dist/es/components/n-progress/components/container.js +1 -1
  175. package/dist/es/components/n-progress/components/index.js +1 -1
  176. package/dist/es/components/n-progress/event.js +1 -1
  177. package/dist/es/components/n-progress/index.js +1 -1
  178. package/dist/es/components/not-found/index.js +1 -1
  179. package/dist/es/components/not-found/not-found-icon.js +1 -1
  180. package/dist/es/components/router-provider/context.js +1 -1
  181. package/dist/es/components/router-provider/index.js +1 -1
  182. package/dist/es/components/theme-config-provider/global-style.js +1 -1
  183. package/dist/es/components/theme-config-provider/index.js +1 -1
  184. package/dist/es/components/theme-config-provider/use-color-mode-effect.js +1 -1
  185. package/dist/es/components/theme-config-provider/use-theme-config.js +1 -1
  186. package/dist/es/constants/event.js +1 -1
  187. package/dist/es/constants/index.js +1 -1
  188. package/dist/es/constants/router.js +1 -1
  189. package/dist/es/constants/storage.js +1 -1
  190. package/dist/es/helpers/api.js +1 -1
  191. package/dist/es/helpers/app-version.js +6 -6
  192. package/dist/es/helpers/app.js +1 -1
  193. package/dist/es/helpers/auth.js +1 -1
  194. package/dist/es/helpers/event.js +1 -1
  195. package/dist/es/helpers/index.js +1 -1
  196. package/dist/es/helpers/query.js +1 -1
  197. package/dist/es/helpers/router.js +3 -3
  198. package/dist/es/hooks/index.js +1 -1
  199. package/dist/es/hooks/use-route-full-path.js +1 -1
  200. package/dist/es/index.js +1 -1
  201. package/dist/es/routes/access-denied.js +1 -1
  202. package/dist/es/routes/index.js +1 -1
  203. package/dist/es/routes/layout.js +1 -1
  204. package/dist/es/routes/login.js +1 -1
  205. package/dist/es/routes/root.js +1 -1
  206. package/dist/es/stores/app.js +1 -1
  207. package/dist/es/stores/index.js +1 -1
  208. package/dist/es/stores/tab.js +1 -1
  209. package/dist/es/stores/theme.js +3 -1
  210. package/dist/types/components/base-layout/props.d.ts +6 -0
  211. package/dist/types/components/base-layout/styles.d.ts +1 -0
  212. package/dist/types/components/index.d.ts +1 -1
  213. package/dist/types/components/layout/components/contour-pattern.d.ts +5 -0
  214. package/dist/types/components/layout/components/header/app-switcher.d.ts +10 -0
  215. package/dist/types/components/layout/components/header/header-pattern.d.ts +1 -0
  216. package/dist/types/components/layout/components/header/index.d.ts +7 -2
  217. package/dist/types/components/layout/components/header/mixed-menu.d.ts +5 -0
  218. package/dist/types/components/layout/components/logo.d.ts +5 -1
  219. package/dist/types/components/layout/components/menu.d.ts +14 -2
  220. package/dist/types/components/layout/components/search/keyboard.d.ts +1 -1
  221. package/dist/types/components/layout/components/sidebar.d.ts +16 -1
  222. package/dist/types/components/layout/components/theme-config/menu-layout-card.d.ts +2 -2
  223. package/dist/types/components/layout/hooks/index.d.ts +1 -0
  224. package/dist/types/components/layout/hooks/use-mixed-menu.d.ts +31 -0
  225. package/dist/types/components/layout/index.d.ts +2 -2
  226. package/dist/types/components/layout/props.d.ts +48 -3
  227. package/dist/types/components/layout/styles.d.ts +1 -0
  228. package/dist/types/index.d.ts +2 -2
  229. package/dist/types/stores/index.d.ts +1 -1
  230. package/dist/types/stores/theme.d.ts +15 -1
  231. package/package.json +10 -10
  232. package/dist/cjs/_internal/_rolldown/runtime.cjs +0 -1
  233. package/dist/cjs/components/layout/components/header/breadcrumb-navigation.cjs +0 -1
  234. package/dist/cjs/components/layout/components/honeycomb-pattern.cjs +0 -1
  235. package/dist/es/components/layout/components/header/breadcrumb-navigation.js +0 -66
  236. package/dist/es/components/layout/components/honeycomb-pattern.js +0 -58
  237. package/dist/types/components/layout/components/header/breadcrumb-navigation.d.ts +0 -2
  238. package/dist/types/components/layout/components/honeycomb-pattern.d.ts +0 -1
package/dist/es/index.js CHANGED
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/starter v2.3.0 made by Venus | 2026-05-22T09:39:55.761Z */
1
+ /*! @vef-framework-react/starter v2.4.1 made by Venus | 2026-06-17T13:09:55.893Z */
2
2
  import { ACCESS_DENIED_ROUTE_ID as e, ACCESS_DENIED_ROUTE_PATH as t, INDEX_ROUTE_ID as n, INDEX_ROUTE_PATH as r, LOGIN_ROUTE_ID as i, LOGIN_ROUTE_PATH as a } from "./constants/router.js";
3
3
  import { useAppStore as o } from "./stores/app.js";
4
4
  import { useTabStore as s } from "./stores/tab.js";
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/starter v2.3.0 made by Venus | 2026-05-22T09:39:55.761Z */
1
+ /*! @vef-framework-react/starter v2.4.1 made by Venus | 2026-06-17T13:09:55.893Z */
2
2
  import "../constants/router.js";
3
3
  import { AccessDenied as e } from "../components/access-denied/index.js";
4
4
  //#region src/routes/access-denied.ts
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/starter v2.3.0 made by Venus | 2026-05-22T09:39:55.761Z */
1
+ /*! @vef-framework-react/starter v2.4.1 made by Venus | 2026-06-17T13:09:55.893Z */
2
2
  import "./access-denied.js";
3
3
  import "./layout.js";
4
4
  import "./login.js";
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/starter v2.3.0 made by Venus | 2026-05-22T09:39:55.761Z */
1
+ /*! @vef-framework-react/starter v2.4.1 made by Venus | 2026-06-17T13:09:55.893Z */
2
2
  import { ACCESS_DENIED_ROUTE_PATH as e, LOGIN_ROUTE_PATH as t } from "../constants/router.js";
3
3
  import { useAppStore as n } from "../stores/app.js";
4
4
  import { Error as r } from "../components/error/index.js";
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/starter v2.3.0 made by Venus | 2026-05-22T09:39:55.761Z */
1
+ /*! @vef-framework-react/starter v2.4.1 made by Venus | 2026-06-17T13:09:55.893Z */
2
2
  import "../constants/router.js";
3
3
  import { useAppStore as e } from "../stores/app.js";
4
4
  import { Login as t } from "../components/login/index.js";
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/starter v2.3.0 made by Venus | 2026-05-22T09:39:55.761Z */
1
+ /*! @vef-framework-react/starter v2.4.1 made by Venus | 2026-06-17T13:09:55.893Z */
2
2
  import { useAppStore as e } from "../stores/app.js";
3
3
  import { jsx as t } from "@emotion/react/jsx-runtime";
4
4
  import { Outlet as n, useLocation as r, useRouteContext as i } from "@tanstack/react-router";
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/starter v2.3.0 made by Venus | 2026-05-22T09:39:55.761Z */
1
+ /*! @vef-framework-react/starter v2.4.1 made by Venus | 2026-06-17T13:09:55.893Z */
2
2
  import { createPersistedStore as e } from "@vef-framework-react/core";
3
3
  //#region src/stores/app.ts
4
4
  var t = e(() => ({
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/starter v2.3.0 made by Venus | 2026-05-22T09:39:55.761Z */
1
+ /*! @vef-framework-react/starter v2.4.1 made by Venus | 2026-06-17T13:09:55.893Z */
2
2
  import "./app.js";
3
3
  import "./tab.js";
4
4
  import "./theme.js";
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/starter v2.3.0 made by Venus | 2026-05-22T09:39:55.761Z */
1
+ /*! @vef-framework-react/starter v2.4.1 made by Venus | 2026-06-17T13:09:55.893Z */
2
2
  import "../constants/router.js";
3
3
  import { createPersistedStore as e, originalState as t } from "@vef-framework-react/core";
4
4
  //#region src/stores/tab.ts
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/starter v2.3.0 made by Venus | 2026-05-22T09:39:55.761Z */
1
+ /*! @vef-framework-react/starter v2.4.1 made by Venus | 2026-06-17T13:09:55.893Z */
2
2
  import { createPersistedStore as e } from "@vef-framework-react/core";
3
3
  import { omit as t } from "@vef-framework-react/shared";
4
4
  //#region src/stores/theme.ts
@@ -15,6 +15,8 @@ var n = {
15
15
  isColorBlindMode: !1,
16
16
  isMenuAccordionMode: !0,
17
17
  menuLayout: "vertical",
18
+ isTabsVisible: !0,
19
+ isDarkSidebar: !0,
18
20
  isSidebarCollapsed: !1,
19
21
  isMainContentMaximum: !1
20
22
  }, r = e(() => ({
@@ -63,6 +63,12 @@ export interface BaseLayoutProps extends PropsWithChildren {
63
63
  * The class of the sidebar.
64
64
  */
65
65
  sidebarClassName?: string;
66
+ /**
67
+ * Whether the sidebar sits below the header (mixed layout) instead of
68
+ * spanning the full height. When enabled, the header stays full-width and the
69
+ * sidebar starts at the header's bottom edge.
70
+ */
71
+ isSidebarBelowHeader?: boolean;
66
72
  /**
67
73
  * The main content maximum state.
68
74
  */
@@ -3,6 +3,7 @@ export declare const layout: SerializedStyles;
3
3
  export declare const header: SerializedStyles;
4
4
  export declare const tabs: SerializedStyles;
5
5
  export declare const sidebar: SerializedStyles;
6
+ export declare const sidebarBelowHeader: SerializedStyles;
6
7
  export declare const sidebarGap: SerializedStyles;
7
8
  export declare const main: SerializedStyles;
8
9
  export declare const footer: SerializedStyles;
@@ -2,7 +2,7 @@ export { AccessDenied } from './access-denied';
2
2
  export { App, type AppProps } from './app';
3
3
  export { BaseLayout, type BaseLayoutProps } from './base-layout';
4
4
  export { Error } from './error';
5
- export { Layout, type LayoutProps } from './layout';
5
+ export { Layout, type AppItem, type LayoutProps, type UserMenuItem } from './layout';
6
6
  export { Login, type LoginChallenge, type LoginChallengeRenderer, type LoginChallengeRendererProps, type LoginChallengeRenderers, type LoginParams, type LoginProps, type LoginResult, type PasswordLoginParams, type ResolveChallengeParams } from './login';
7
7
  export { NProgress, nProgressEventEmitter } from './n-progress';
8
8
  export { NotFound } from './not-found';
@@ -0,0 +1,5 @@
1
+ interface ContourPatternProps {
2
+ isSidebarCollapsed?: boolean;
3
+ }
4
+ export declare function ContourPattern({ isSidebarCollapsed }: ContourPatternProps): React.JSX.Element;
5
+ export {};
@@ -0,0 +1,10 @@
1
+ import { Awaitable } from '@vef-framework-react/shared';
2
+ import { AppItem } from '../../props';
3
+ interface AppSwitcherProps {
4
+ apps: AppItem[];
5
+ currentAppId?: string;
6
+ onAppChange?: (appId: string) => Awaitable<void>;
7
+ className?: string;
8
+ }
9
+ export declare function AppSwitcher({ apps, currentAppId, onAppChange, className }: AppSwitcherProps): React.JSX.Element;
10
+ export {};
@@ -0,0 +1 @@
1
+ export declare function HeaderPattern(): React.JSX.Element;
@@ -1,5 +1,10 @@
1
1
  import { LayoutProps } from '../../props';
2
- interface HeaderProps extends Pick<LayoutProps, "title" | "logo" | "headerActions" | "userMenuItems" | "onUserMenuClick" | "onLogout"> {
2
+ interface HeaderProps extends Pick<LayoutProps, "title" | "logo" | "headerActions" | "userMenuItems" | "onUserMenuClick" | "onLogout" | "apps" | "currentAppId" | "onAppChange"> {
3
+ /**
4
+ * Whether to show the sidebar collapse toggle. True when a collapsible sidebar exists
5
+ * (vertical always; mixed only when the active section has a submenu).
6
+ */
7
+ showMenuBurger: boolean;
3
8
  }
4
- export declare function Header({ title, logo, headerActions, userMenuItems, onUserMenuClick, onLogout }: HeaderProps): import("@emotion/react/jsx-runtime").JSX.Element;
9
+ export declare function Header({ title, logo, headerActions, userMenuItems, onUserMenuClick, onLogout, apps, currentAppId, onAppChange, showMenuBurger }: HeaderProps): import("@emotion/react/jsx-runtime").JSX.Element;
5
10
  export {};
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Top header menu for the mixed layout: renders only the first-level entries
3
+ * and switches the active section (and thus the sidebar) on select.
4
+ */
5
+ export declare function MixedMenu(): React.JSX.Element;
@@ -3,6 +3,10 @@ import { Except } from '@vef-framework-react/shared';
3
3
  import { LayoutProps } from '../props';
4
4
  interface LogoProps extends Except<LinkComponentProps, "to" | "title">, Pick<LayoutProps, "title" | "logo"> {
5
5
  isTitleVisible?: boolean;
6
+ /**
7
+ * Render the logo in white, for placement on a colored (primary) surface.
8
+ */
9
+ inverted?: boolean;
6
10
  }
7
- export declare function Logo({ isTitleVisible, title, logo, ...props }: LogoProps): React.JSX.Element;
11
+ export declare function Logo({ isTitleVisible, inverted, title, logo, ...props }: LogoProps): React.JSX.Element;
8
12
  export {};
@@ -1,7 +1,19 @@
1
- import { Orientation } from '@vef-framework-react/components';
1
+ import { MenuItem, Orientation } from '@vef-framework-react/components';
2
2
  interface MenuProps {
3
3
  layout: Orientation;
4
4
  isSidebarCollapsed?: boolean;
5
+ /**
6
+ * Menu items to render. Defaults to the full tree from the app store.
7
+ */
8
+ items?: readonly MenuItem[];
9
+ /**
10
+ * Selected keys override. Defaults to the current route's full path.
11
+ */
12
+ selectedKeys?: string[];
13
+ /**
14
+ * Select handler override. Defaults to navigating to the picked menu.
15
+ */
16
+ onSelectMenu?: (key: string) => void;
5
17
  }
6
- export declare function Menu({ layout, isSidebarCollapsed }: MenuProps): import("@emotion/react/jsx-runtime").JSX.Element;
18
+ export declare function Menu({ layout, isSidebarCollapsed, items, selectedKeys, onSelectMenu }: MenuProps): import("@emotion/react/jsx-runtime").JSX.Element;
7
19
  export {};
@@ -1,4 +1,4 @@
1
- import { PropsWithChildren, ReactNode, default as React } from 'react';
1
+ import { PropsWithChildren, ReactNode } from 'react';
2
2
  interface KeyboardProps extends PropsWithChildren {
3
3
  icon: ReactNode;
4
4
  }
@@ -1,6 +1,21 @@
1
+ import { MenuItem } from '@vef-framework-react/components';
1
2
  import { LayoutProps } from '../props';
2
3
  interface SidebarProps extends Pick<LayoutProps, "logo" | "title"> {
4
+ /**
5
+ * Whether the sidebar renders on the dark brand surface (vertical layout
6
+ * only). Adds the contour artwork at the bottom; the surface itself is
7
+ * styled by the layout's `sidebarDark` class.
8
+ */
9
+ isDark?: boolean;
3
10
  isSidebarCollapsed?: boolean;
11
+ /**
12
+ * Menu items to render. Defaults to the full tree from the app store.
13
+ */
14
+ items?: readonly MenuItem[];
15
+ /**
16
+ * Whether to render the logo. Disabled in mixed layout (logo is in the header).
17
+ */
18
+ showLogo?: boolean;
4
19
  }
5
- export declare function Sidebar({ isSidebarCollapsed, logo, title }: SidebarProps): React.JSX.Element;
20
+ export declare function Sidebar({ isDark, isSidebarCollapsed, logo, title, items, showLogo }: SidebarProps): React.JSX.Element;
6
21
  export {};
@@ -1,7 +1,7 @@
1
- import { Orientation } from '@vef-framework-react/components';
2
1
  import { ComponentProps } from 'react';
2
+ import { MenuLayoutMode } from '../../../../stores';
3
3
  interface MenuLayoutCardProps extends ComponentProps<"div"> {
4
- mode: Orientation;
4
+ mode: MenuLayoutMode;
5
5
  }
6
6
  export declare function MenuLayoutCard({ mode, ...props }: MenuLayoutCardProps): React.JSX.Element;
7
7
  export {};
@@ -1,3 +1,4 @@
1
1
  export { useColorSchemeUpdater } from './use-color-scheme-updater';
2
2
  export { useMenuNavigate } from './use-menu-navigate';
3
+ export { useMixedMenu, type UseMixedMenuResult } from './use-mixed-menu';
3
4
  export { useTabNavigate } from './use-tab-navigate';
@@ -0,0 +1,31 @@
1
+ import { MenuItem } from '@vef-framework-react/components';
2
+ export interface UseMixedMenuResult {
3
+ /**
4
+ * First-level menu entries, flattened for the top header.
5
+ */
6
+ topLevelItems: MenuItem[];
7
+ /**
8
+ * Path of the first-level section the current route belongs to.
9
+ */
10
+ activeSectionKey?: string;
11
+ /**
12
+ * Children of the active section, rendered in the sidebar.
13
+ */
14
+ sectionItems?: MenuItem[];
15
+ /**
16
+ * Whether the active section has a sidebar to show.
17
+ */
18
+ hasSectionMenu: boolean;
19
+ /**
20
+ * Navigate into a top-level section's first reachable leaf.
21
+ */
22
+ selectTopSection: (key: string) => void;
23
+ }
24
+ /**
25
+ * Derive the data the mixed menu layout needs from the current route: the
26
+ * flattened first-level items for the header, the active first-level section,
27
+ * and that section's children for the sidebar.
28
+ *
29
+ * @returns The derived mixed-menu data
30
+ */
31
+ export declare function useMixedMenu(): UseMixedMenuResult;
@@ -1,3 +1,3 @@
1
1
  import { LayoutProps } from './props';
2
- export declare function Layout({ title, logo, headerActions, userMenuItems, onUserMenuClick, onLogout, children }: LayoutProps): import("@emotion/react/jsx-runtime").JSX.Element;
3
- export { type LayoutProps } from './props';
2
+ export declare function Layout({ title, logo, headerActions, userMenuItems, onUserMenuClick, onLogout, apps, currentAppId, onAppChange, children }: LayoutProps): import("@emotion/react/jsx-runtime").JSX.Element;
3
+ export { type AppItem, type LayoutProps, type UserMenuItem } from './props';
@@ -1,6 +1,36 @@
1
- import { DropdownMenuProps } from '@vef-framework-react/components';
2
- import { Awaitable } from '@vef-framework-react/shared';
1
+ import { DropdownMenuItem } from '@vef-framework-react/components';
2
+ import { Awaitable, DistributedOmit } from '@vef-framework-react/shared';
3
3
  import { PropsWithChildren, ReactNode } from 'react';
4
+ /**
5
+ * A {@link DropdownMenuItem} with `onClick` / `onTitleClick` stripped — clicks
6
+ * on user menu items are always routed through `LayoutProps.onUserMenuClick`
7
+ * by item key, so per-item handlers would be silently ignored.
8
+ */
9
+ export type UserMenuItem = DistributedOmit<DropdownMenuItem, "onClick" | "onTitleClick">;
10
+ /**
11
+ * A selectable sub-application shown in the Layout's app switcher. Shaped as a
12
+ * plain record so it can be hydrated straight from an API response (no JSX).
13
+ */
14
+ export interface AppItem {
15
+ /**
16
+ * Stable identifier, handed back to {@link LayoutProps.onAppChange}.
17
+ */
18
+ id: string;
19
+ /**
20
+ * Display name.
21
+ */
22
+ name: string;
23
+ /**
24
+ * Optional one-line description (e.g. shown as a tooltip).
25
+ */
26
+ description?: string;
27
+ /**
28
+ * Optional icon name, resolved through `DynamicIcon` (a kebab-case lucide
29
+ * name such as `"layout-dashboard"`). A string, not a node, so it survives a
30
+ * JSON round-trip from the backend.
31
+ */
32
+ icon?: string;
33
+ }
4
34
  /**
5
35
  * The props for the Layout component.
6
36
  */
@@ -21,7 +51,7 @@ export interface LayoutProps extends PropsWithChildren {
21
51
  * Extra items appended to the user dropdown menu. They render before the
22
52
  * built-in items (e.g. logout), with an automatic divider in between.
23
53
  */
24
- userMenuItems?: DropdownMenuProps["items"];
54
+ userMenuItems?: UserMenuItem[];
25
55
  /**
26
56
  * Handles clicks on user menu items. The built-in `logout` key is owned by
27
57
  * the framework and never forwarded; all other keys are delivered here.
@@ -31,4 +61,19 @@ export interface LayoutProps extends PropsWithChildren {
31
61
  * The logout api function.
32
62
  */
33
63
  onLogout?: () => Awaitable<void>;
64
+ /**
65
+ * Sub-applications the user can switch between. When non-empty, an app
66
+ * switcher appears next to the logo. Each system supplies its own apps —
67
+ * the framework only renders the control and reports the selection.
68
+ */
69
+ apps?: AppItem[];
70
+ /**
71
+ * The id of the currently active app, highlighted in the switcher.
72
+ */
73
+ currentAppId?: string;
74
+ /**
75
+ * Called when the user picks a different app. The project performs the
76
+ * actual switch (e.g. persist the choice, then reload or re-route the shell).
77
+ */
78
+ onAppChange?: (appId: string) => Awaitable<void>;
34
79
  }
@@ -1,2 +1,3 @@
1
1
  import { SerializedStyles } from '@emotion/serialize';
2
2
  export declare const sidebar: SerializedStyles;
3
+ export declare const sidebarDark: SerializedStyles;
@@ -1,6 +1,6 @@
1
- export { type LoginChallenge, type LoginChallengeRenderer, type LoginChallengeRendererProps, type LoginChallengeRenderers, type LoginParams, type LoginProps, type LoginResult, type PasswordLoginParams, type ResolveChallengeParams } from './components';
1
+ export { type AppItem, type LoginChallenge, type LoginChallengeRenderer, type LoginChallengeRendererProps, type LoginChallengeRenderers, type LoginParams, type LoginProps, type LoginResult, type PasswordLoginParams, type ResolveChallengeParams, type UserMenuItem } from './components';
2
2
  export { ACCESS_DENIED_ROUTE_ID, ACCESS_DENIED_ROUTE_PATH, INDEX_ROUTE_ID, INDEX_ROUTE_PATH, LOGIN_ROUTE_ID, LOGIN_ROUTE_PATH } from './constants';
3
3
  export { createApiClient, createApp, createRouter, dispatchCustomEvent, emitAccessDenied, emitUnauthenticated, extractQueryParams, handleClientLogout, noopMutationFn, setupAppVersionNotification, type ApiClientOptions, type AppChangelog, type AppVersionNotificationOptions, type RouterOptions } from './helpers';
4
4
  export { createAccessDeniedRouteOptions, createLayoutRouteOptions, createLoginRouteOptions, createRootRouteOptions, type LayoutBeforeLoadArgs, type LayoutLoaderArgs } from './routes';
5
- export { useAppStore, useTabStore, useThemeStore, type AppState, type ColorScheme, type Tab, type TabState, type ThemeColors, type ThemeState } from './stores';
5
+ export { useAppStore, useTabStore, useThemeStore, type AppState, type ColorScheme, type MenuLayoutMode, type Tab, type TabState, type ThemeColors, type ThemeState } from './stores';
6
6
  export type * from './types';
@@ -1,3 +1,3 @@
1
1
  export { useAppStore, type AppState } from './app';
2
2
  export { useTabStore, type Tab, type TabState } from './tab';
3
- export { useThemeStore, type ColorScheme, type ThemeColors, type ThemeState } from './theme';
3
+ export { useThemeStore, type ColorScheme, type MenuLayoutMode, type ThemeColors, type ThemeState } from './theme';
@@ -2,6 +2,14 @@ import { Orientation, SemanticColor } from '@vef-framework-react/components';
2
2
  import { UseBoundStoreWithPersist } from '@vef-framework-react/core';
3
3
  export type ColorScheme = "system" | "light" | "dark";
4
4
  export type ThemeColors = Record<SemanticColor, string>;
5
+ /**
6
+ * The menu layout mode.
7
+ *
8
+ * - `vertical`: menu lives in the left sidebar.
9
+ * - `horizontal`: menu lives in the top header.
10
+ * - `mixed`: first-level menu in the top header, its children in the left sidebar.
11
+ */
12
+ export type MenuLayoutMode = Orientation | "mixed";
5
13
  export interface ThemeState {
6
14
  isThemeConfigVisible: boolean;
7
15
  colorScheme: ColorScheme;
@@ -9,7 +17,13 @@ export interface ThemeState {
9
17
  isGrayscaleMode: boolean;
10
18
  isColorBlindMode: boolean;
11
19
  isMenuAccordionMode: boolean;
12
- menuLayout: Orientation;
20
+ menuLayout: MenuLayoutMode;
21
+ isTabsVisible: boolean;
22
+ /**
23
+ * Render the sidebar as a dark brand surface. Only takes effect in the
24
+ * `vertical` menu layout; other layouts keep the light sidebar.
25
+ */
26
+ isDarkSidebar: boolean;
13
27
  isSidebarCollapsed: boolean;
14
28
  isMainContentMaximum: boolean;
15
29
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vef-framework-react/starter",
3
3
  "type": "module",
4
- "version": "2.3.0",
4
+ "version": "2.4.1",
5
5
  "private": false,
6
6
  "description": "Starter for VEF framework",
7
7
  "author": {
@@ -54,20 +54,20 @@
54
54
  "react-dom": ">=19"
55
55
  },
56
56
  "dependencies": {
57
- "@ant-design/icons": "^6.2.2",
57
+ "@ant-design/icons": "^6.2.5",
58
58
  "@emotion/react": "^11.14.0",
59
59
  "@tanem/react-nprogress": "^6.0.3",
60
60
  "compare-versions": "^6.1.1",
61
- "lucide-react": "^1.16.0"
61
+ "lucide-react": "^1.17.0"
62
62
  },
63
63
  "devDependencies": {
64
- "@tanstack/react-router": "^1.170.1",
65
- "react": "^19.2.6",
66
- "react-dom": "^19.2.6",
67
- "@vef-framework-react/components": "2.3.0",
68
- "@vef-framework-react/core": "2.3.0",
69
- "@vef-framework-react/hooks": "2.3.0",
70
- "@vef-framework-react/shared": "2.3.0"
64
+ "@tanstack/react-router": "^1.170.15",
65
+ "react": "^19.2.7",
66
+ "react-dom": "^19.2.7",
67
+ "@vef-framework-react/components": "2.4.1",
68
+ "@vef-framework-react/core": "2.4.1",
69
+ "@vef-framework-react/hooks": "2.4.1",
70
+ "@vef-framework-react/shared": "2.4.1"
71
71
  },
72
72
  "scripts": {
73
73
  "clean": "rimraf dist",
@@ -1 +0,0 @@
1
- var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));exports.__toESM=s;
@@ -1 +0,0 @@
1
- require(`../../../../_internal/_rolldown/runtime.cjs`),require(`../../../../constants/router.cjs`);const e=require(`../../../../stores/app.cjs`),t=require(`../../../../hooks/use-route-full-path.cjs`),n=require(`../../hooks/use-menu-navigate.cjs`);let r=require(`@vef-framework-react/components`),i=require(`@vef-framework-react/shared`),a=require(`react`),o=require(`@emotion/react/jsx-runtime`),s=require(`lucide-react`);var c=(0,require(`@emotion/react`).css)({paddingInlineStart:r.globalCssVars.spacingMd,"& .vef-dropdown-trigger":{display:`flex`,alignItems:`center`},[`@media (max-width: ${r.breakpoints.md})`]:{display:`none`}},process.env.NODE_ENV===`production`?``:`/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJyZWFkY3J1bWItbmF2aWdhdGlvbi50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBYXdCIiwiZmlsZSI6ImJyZWFkY3J1bWItbmF2aWdhdGlvbi50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEJyZWFkY3J1bWJJdGVtLCBEeW5hbWljSWNvbk5hbWUgfSBmcm9tIFwiQHZlZi1mcmFtZXdvcmstcmVhY3QvY29tcG9uZW50c1wiO1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmltcG9ydCB7IEJyZWFkY3J1bWIsIGJyZWFrcG9pbnRzLCBEeW5hbWljSWNvbiwgZ2xvYmFsQ3NzVmFycywgR3JvdXAsIEljb24gfSBmcm9tIFwiQHZlZi1mcmFtZXdvcmstcmVhY3QvY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgYWx3YXlzVHJ1ZSB9IGZyb20gXCJAdmVmLWZyYW1ld29yay1yZWFjdC9zaGFyZWRcIjtcbmltcG9ydCB7IEhvbWVJY29uIH0gZnJvbSBcImx1Y2lkZS1yZWFjdFwiO1xuaW1wb3J0IHsgbWVtbywgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBJTkRFWF9ST1VURV9QQVRIIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgdXNlUm91dGVGdWxsUGF0aCB9IGZyb20gXCIuLi8uLi8uLi8uLi9ob29rc1wiO1xuaW1wb3J0IHsgdXNlQXBwU3RvcmUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vc3RvcmVzXCI7XG5pbXBvcnQgeyB1c2VNZW51TmF2aWdhdGUgfSBmcm9tIFwiLi4vLi4vaG9va3NcIjtcblxuY29uc3QgYnJlYWRjcnVtYlN0eWxlID0gY3NzKHtcbiAgcGFkZGluZ0lubGluZVN0YXJ0OiBnbG9iYWxDc3NWYXJzLnNwYWNpbmdNZCxcbiAgXCImIC52ZWYtZHJvcGRvd24tdHJpZ2dlclwiOiB7XG4gICAgZGlzcGxheTogXCJmbGV4XCIsXG4gICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIlxuICB9LFxuICBbYEBtZWRpYSAobWF4LXdpZHRoOiAke2JyZWFrcG9pbnRzLm1kfSlgXToge1xuICAgIGRpc3BsYXk6IFwibm9uZVwiXG4gIH1cbn0pO1xuXG5jb25zdCBpbmRleEJyZWFkY3J1bWJJdGVtOiBCcmVhZGNydW1iSXRlbSA9IHtcbiAga2V5OiBJTkRFWF9ST1VURV9QQVRILFxuICB0aXRsZTogPEljb24gY29tcG9uZW50PXtIb21lSWNvbn0gLz5cbn07XG5cbmV4cG9ydCBjb25zdCBCcmVhZGNydW1iTmF2aWdhdGlvbiA9IG1lbW8oXG4gICgpID0+IHtcbiAgICBjb25zdCBuYXZpZ2F0ZSA9IHVzZU1lbnVOYXZpZ2F0ZSgpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gdXNlUm91dGVGdWxsUGF0aCgpO1xuICAgIGNvbnN0IG1lbnVQYXRoTWFwID0gdXNlQXBwU3RvcmUoc3RhdGUgPT4gc3RhdGUubWVudVBhdGhNYXApO1xuICAgIGNvbnN0IHVzZXJNZW51TWFwID0gdXNlQXBwU3RvcmUoc3RhdGUgPT4gc3RhdGUudXNlck1lbnVNYXApO1xuICAgIGNvbnN0IGl0ZW1zID0gdXNlTWVtbzxCcmVhZGNydW1iSXRlbVtdPigoKSA9PiB7XG4gICAgICBjb25zdCBtZW51UGF0aCA9IG1lbnVQYXRoTWFwPy5nZXQoZnVsbFBhdGgpO1xuXG4gICAgICBpZiAoIW1lbnVQYXRoKSB7XG4gICAgICAgIHJldHVybiBbaW5kZXhCcmVhZGNydW1iSXRlbV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIGluZGV4QnJlYWRjcnVtYkl0ZW0sXG4gICAgICAgIC4uLm1lbnVQYXRoLm1hcChwYXRoID0+IHVzZXJNZW51TWFwPy5nZXQocGF0aCkpXG4gICAgICAgICAgLy8gLmZpbHRlcihtZW51ID0+IG1lbnUgJiYgbWVudS5wYXRoICE9PSBpbmRleEJyZWFkY3J1bWJJdGVtLmtleSlcbiAgICAgICAgICAubWFwKG1lbnUgPT4gbWVudSEpXG4gICAgICAgICAgLm1hcDxCcmVhZGNydW1iSXRlbT4obWVudSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAvLyBUT0RPOiBPcHRpbWl6YXRpb24gaXMgbmVlZGVkIGhlcmVcbiAgICAgICAgICAgICAga2V5OiBtZW51LnBhdGggPT09IGluZGV4QnJlYWRjcnVtYkl0ZW0ua2V5ID8gYC93b3JrYmVuY2hgIDogbWVudS5wYXRoLFxuICAgICAgICAgICAgICB0aXRsZTogbWVudS5pY29uXG4gICAgICAgICAgICAgICAgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxHcm91cCBnYXA9e2dsb2JhbENzc1ZhcnMuc3BhY2luZ1h4c30+XG4gICAgICAgICAgICAgICAgICAgICAgPER5bmFtaWNJY29uIG5hbWU9e21lbnUuaWNvbiBhcyBEeW5hbWljSWNvbk5hbWV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e21lbnUubmFtZX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvR3JvdXA+XG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBtZW51Lm5hbWUsXG4gICAgICAgICAgICAgIC4uLm1lbnUuY2hpbGRyZW5cbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgbWVudToge1xuICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBtZW51LmNoaWxkcmVuLm1hcChjaGlsZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNoaWxkLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBjaGlsZC5pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxHcm91cCBnYXA9XCJzbWFsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEeW5hbWljSWNvbiBuYW1lPXtjaGlsZC5pY29uIGFzIER5bmFtaWNJY29uTmFtZX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57Y2hpbGQubmFtZX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvR3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjaGlsZC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICh7IGtleSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZW51ID0gdXNlck1lbnVNYXA/LmdldChrZXkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVudSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0ZShtZW51KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHt9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pXG4gICAgICBdO1xuICAgIH0sIFtmdWxsUGF0aCwgbWVudVBhdGhNYXAsIG5hdmlnYXRlLCB1c2VyTWVudU1hcF0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxCcmVhZGNydW1iXG4gICAgICAgIGNzcz17YnJlYWRjcnVtYlN0eWxlfVxuICAgICAgICBpdGVtcz17aXRlbXN9XG4gICAgICAgIGl0ZW1SZW5kZXI9eyhpdGVtLCBfLCBpdGVtcykgPT4ge1xuICAgICAgICAgIGlmIChpdGVtLmtleSA9PT0gaXRlbXMuYXQoLTEpIS5rZXkpIHtcbiAgICAgICAgICAgIHJldHVybiA8c3Bhbj57aXRlbS50aXRsZX08L3NwYW4+O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICBvbkNsaWNrPXtcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBtZW51ID0gdXNlck1lbnVNYXA/LmdldChpdGVtLmtleSBhcyBzdHJpbmcpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAobWVudSkge1xuICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0ZShtZW51KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2l0ZW0udGl0bGV9XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgKTtcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfSxcbiAgYWx3YXlzVHJ1ZVxuKTtcbkJyZWFkY3J1bWJOYXZpZ2F0aW9uLmRpc3BsYXlOYW1lID0gXCJCcmVhZGNydW1iTmF2aWdhdGlvblwiO1xuIl19 */`),l={key:`/`,title:(0,o.jsx)(r.Icon,{component:s.HomeIcon})},u=(0,a.memo)(()=>{let i=n.useMenuNavigate(),s=t.useRouteFullPath(),u=e.useAppStore(e=>e.menuPathMap),d=e.useAppStore(e=>e.userMenuMap),f=(0,a.useMemo)(()=>{let e=u?.get(s);return e?[l,...e.map(e=>d?.get(e)).map(e=>e).map(e=>({key:e.path===l.key?`/workbench`:e.path,title:e.icon?(0,o.jsxs)(r.Group,{gap:r.globalCssVars.spacingXxs,children:[(0,o.jsx)(r.DynamicIcon,{name:e.icon}),(0,o.jsx)(`span`,{children:e.name})]}):e.name,...e.children?{menu:{items:e.children.map(e=>({key:e.path,label:e.icon?(0,o.jsxs)(r.Group,{gap:`small`,children:[(0,o.jsx)(r.DynamicIcon,{name:e.icon}),(0,o.jsx)(`span`,{children:e.name})]}):e.name})),onClick:({key:e})=>{let t=d?.get(e);t&&i(t)}}}:{}}))]:[l]},[s,u,i,d]);return(0,o.jsx)(r.Breadcrumb,{css:c,items:f,itemRender:(e,t,n)=>e.key===n.at(-1).key?(0,o.jsx)(`span`,{children:e.title}):(0,o.jsx)(`a`,{onClick:()=>{let t=d?.get(e.key);t&&i(t)},children:e.title})})},i.alwaysTrue);u.displayName=`BreadcrumbNavigation`,exports.BreadcrumbNavigation=u;
@@ -1 +0,0 @@
1
- require(`../../../_internal/_rolldown/runtime.cjs`);let e=require(`@vef-framework-react/components`),t=require(`@emotion/react/jsx-runtime`);require(`@emotion/react`);function n(){return"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."}var r=process.env.NODE_ENV===`production`?{name:`1u71080`,styles:`position:absolute;bottom:0;left:0;right:0;top:0;pointer-events:none;z-index:0;mask-image:linear-gradient(to top, rgba(0, 0, 0, 0.8) 0%, rgba(0, 0, 0, 0.3) 60%, transparent 100%)`}:{name:`1u71080`,styles:`position:absolute;bottom:0;left:0;right:0;top:0;pointer-events:none;z-index:0;mask-image:linear-gradient(to top, rgba(0, 0, 0, 0.8) 0%, rgba(0, 0, 0, 0.3) 60%, transparent 100%)/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImhvbmV5Y29tYi1wYXR0ZXJuLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHcUIiLCJmaWxlIjoiaG9uZXljb21iLXBhdHRlcm4udHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3NzIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5pbXBvcnQgeyBnbG9iYWxDc3NWYXJzIH0gZnJvbSBcIkB2ZWYtZnJhbWV3b3JrLXJlYWN0L2NvbXBvbmVudHNcIjtcblxuY29uc3QgcGF0dGVyblN0eWxlID0gY3NzKHtcbiAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgYm90dG9tOiAwLFxuICBsZWZ0OiAwLFxuICByaWdodDogMCxcbiAgdG9wOiAwLFxuICBwb2ludGVyRXZlbnRzOiBcIm5vbmVcIixcbiAgekluZGV4OiAwLFxuICBtYXNrSW1hZ2U6IFwibGluZWFyLWdyYWRpZW50KHRvIHRvcCwgcmdiYSgwLCAwLCAwLCAwLjgpIDAlLCByZ2JhKDAsIDAsIDAsIDAuMykgNjAlLCB0cmFuc3BhcmVudCAxMDAlKVwiXG59KTtcblxuY29uc3Qgc3ZnU3R5bGUgPSBjc3Moe1xuICB3aWR0aDogXCIxMDAlXCIsXG4gIGhlaWdodDogXCIxMDAlXCJcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gSG9uZXljb21iUGF0dGVybigpOiBSZWFjdC5KU1guRWxlbWVudCB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjc3M9e3BhdHRlcm5TdHlsZX0+XG4gICAgICA8c3ZnIGNzcz17c3ZnU3R5bGV9PlxuICAgICAgICA8ZGVmcz5cbiAgICAgICAgICA8cGF0dGVyblxuICAgICAgICAgICAgaGVpZ2h0PVwiMTAwXCJcbiAgICAgICAgICAgIGlkPVwiaG9uZXljb21iXCJcbiAgICAgICAgICAgIHBhdHRlcm5Vbml0cz1cInVzZXJTcGFjZU9uVXNlXCJcbiAgICAgICAgICAgIHdpZHRoPVwiNTZcIlxuICAgICAgICAgICAgeD1cIjBcIlxuICAgICAgICAgICAgeT1cIjBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNMjggNjZMMCA1MEwwIDE4TDI4IDJMNTYgMThMNTYgNTBMMjggNjZMMjggMzRcIlxuICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgIG9wYWNpdHk9XCIwLjNcIlxuICAgICAgICAgICAgICBzdHJva2U9e2dsb2JhbENzc1ZhcnMuY29sb3JCb3JkZXJTZWNvbmRhcnl9XG4gICAgICAgICAgICAgIHN0cm9rZVdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNMjggMzRMMCA1MEwwIDgyTDI4IDk4TDU2IDgyTDU2IDUwTDI4IDM0XCJcbiAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICBvcGFjaXR5PVwiMC4zXCJcbiAgICAgICAgICAgICAgc3Ryb2tlPXtnbG9iYWxDc3NWYXJzLmNvbG9yQm9yZGVyU2Vjb25kYXJ5fVxuICAgICAgICAgICAgICBzdHJva2VXaWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvcGF0dGVybj5cbiAgICAgICAgPC9kZWZzPlxuXG4gICAgICAgIDxyZWN0IGZpbGw9XCJ1cmwoI2hvbmV5Y29tYilcIiBoZWlnaHQ9XCIxMDAlXCIgd2lkdGg9XCIxMDAlXCIgLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuICApO1xufVxuIl19 */`,toString:n},i=process.env.NODE_ENV===`production`?{name:`w1atjl`,styles:`width:100%;height:100%`}:{name:`w1atjl`,styles:`width:100%;height:100%/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImhvbmV5Y29tYi1wYXR0ZXJuLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFjaUIiLCJmaWxlIjoiaG9uZXljb21iLXBhdHRlcm4udHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3NzIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5pbXBvcnQgeyBnbG9iYWxDc3NWYXJzIH0gZnJvbSBcIkB2ZWYtZnJhbWV3b3JrLXJlYWN0L2NvbXBvbmVudHNcIjtcblxuY29uc3QgcGF0dGVyblN0eWxlID0gY3NzKHtcbiAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgYm90dG9tOiAwLFxuICBsZWZ0OiAwLFxuICByaWdodDogMCxcbiAgdG9wOiAwLFxuICBwb2ludGVyRXZlbnRzOiBcIm5vbmVcIixcbiAgekluZGV4OiAwLFxuICBtYXNrSW1hZ2U6IFwibGluZWFyLWdyYWRpZW50KHRvIHRvcCwgcmdiYSgwLCAwLCAwLCAwLjgpIDAlLCByZ2JhKDAsIDAsIDAsIDAuMykgNjAlLCB0cmFuc3BhcmVudCAxMDAlKVwiXG59KTtcblxuY29uc3Qgc3ZnU3R5bGUgPSBjc3Moe1xuICB3aWR0aDogXCIxMDAlXCIsXG4gIGhlaWdodDogXCIxMDAlXCJcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gSG9uZXljb21iUGF0dGVybigpOiBSZWFjdC5KU1guRWxlbWVudCB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjc3M9e3BhdHRlcm5TdHlsZX0+XG4gICAgICA8c3ZnIGNzcz17c3ZnU3R5bGV9PlxuICAgICAgICA8ZGVmcz5cbiAgICAgICAgICA8cGF0dGVyblxuICAgICAgICAgICAgaGVpZ2h0PVwiMTAwXCJcbiAgICAgICAgICAgIGlkPVwiaG9uZXljb21iXCJcbiAgICAgICAgICAgIHBhdHRlcm5Vbml0cz1cInVzZXJTcGFjZU9uVXNlXCJcbiAgICAgICAgICAgIHdpZHRoPVwiNTZcIlxuICAgICAgICAgICAgeD1cIjBcIlxuICAgICAgICAgICAgeT1cIjBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNMjggNjZMMCA1MEwwIDE4TDI4IDJMNTYgMThMNTYgNTBMMjggNjZMMjggMzRcIlxuICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgIG9wYWNpdHk9XCIwLjNcIlxuICAgICAgICAgICAgICBzdHJva2U9e2dsb2JhbENzc1ZhcnMuY29sb3JCb3JkZXJTZWNvbmRhcnl9XG4gICAgICAgICAgICAgIHN0cm9rZVdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNMjggMzRMMCA1MEwwIDgyTDI4IDk4TDU2IDgyTDU2IDUwTDI4IDM0XCJcbiAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICBvcGFjaXR5PVwiMC4zXCJcbiAgICAgICAgICAgICAgc3Ryb2tlPXtnbG9iYWxDc3NWYXJzLmNvbG9yQm9yZGVyU2Vjb25kYXJ5fVxuICAgICAgICAgICAgICBzdHJva2VXaWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvcGF0dGVybj5cbiAgICAgICAgPC9kZWZzPlxuXG4gICAgICAgIDxyZWN0IGZpbGw9XCJ1cmwoI2hvbmV5Y29tYilcIiBoZWlnaHQ9XCIxMDAlXCIgd2lkdGg9XCIxMDAlXCIgLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuICApO1xufVxuIl19 */`,toString:n};function a(){return(0,t.jsx)(`div`,{css:r,children:(0,t.jsxs)(`svg`,{css:i,children:[(0,t.jsx)(`defs`,{children:(0,t.jsxs)(`pattern`,{height:`100`,id:`honeycomb`,patternUnits:`userSpaceOnUse`,width:`56`,x:`0`,y:`0`,children:[(0,t.jsx)(`path`,{d:`M28 66L0 50L0 18L28 2L56 18L56 50L28 66L28 34`,fill:`none`,opacity:`0.3`,stroke:e.globalCssVars.colorBorderSecondary,strokeWidth:`1.5`}),(0,t.jsx)(`path`,{d:`M28 34L0 50L0 82L28 98L56 82L56 50L28 34`,fill:`none`,opacity:`0.3`,stroke:e.globalCssVars.colorBorderSecondary,strokeWidth:`1.5`})]})}),(0,t.jsx)(`rect`,{fill:`url(#honeycomb)`,height:`100%`,width:`100%`})]})})}exports.HoneycombPattern=a;
@@ -1,66 +0,0 @@
1
- /*! @vef-framework-react/starter v2.3.0 made by Venus | 2026-05-22T09:39:55.761Z */
2
- import "../../../../constants/router.js";
3
- import { useAppStore as e } from "../../../../stores/app.js";
4
- import { useRouteFullPath as t } from "../../../../hooks/use-route-full-path.js";
5
- import { useMenuNavigate as n } from "../../hooks/use-menu-navigate.js";
6
- import { Breadcrumb as r, DynamicIcon as i, Group as a, Icon as o, breakpoints as s, globalCssVars as c } from "@vef-framework-react/components";
7
- import { alwaysTrue as l } from "@vef-framework-react/shared";
8
- import { memo as u, useMemo as d } from "react";
9
- import { jsx as f, jsxs as p } from "@emotion/react/jsx-runtime";
10
- import { HomeIcon as m } from "lucide-react";
11
- import { css as h } from "@emotion/react";
12
- //#region src/components/layout/components/header/breadcrumb-navigation.tsx
13
- var g = /* @__PURE__ */ h({
14
- paddingInlineStart: c.spacingMd,
15
- "& .vef-dropdown-trigger": {
16
- display: "flex",
17
- alignItems: "center"
18
- },
19
- [`@media (max-width: ${s.md})`]: { display: "none" }
20
- }, process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJyZWFkY3J1bWItbmF2aWdhdGlvbi50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBYXdCIiwiZmlsZSI6ImJyZWFkY3J1bWItbmF2aWdhdGlvbi50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEJyZWFkY3J1bWJJdGVtLCBEeW5hbWljSWNvbk5hbWUgfSBmcm9tIFwiQHZlZi1mcmFtZXdvcmstcmVhY3QvY29tcG9uZW50c1wiO1xuXG5pbXBvcnQgeyBjc3MgfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmltcG9ydCB7IEJyZWFkY3J1bWIsIGJyZWFrcG9pbnRzLCBEeW5hbWljSWNvbiwgZ2xvYmFsQ3NzVmFycywgR3JvdXAsIEljb24gfSBmcm9tIFwiQHZlZi1mcmFtZXdvcmstcmVhY3QvY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgYWx3YXlzVHJ1ZSB9IGZyb20gXCJAdmVmLWZyYW1ld29yay1yZWFjdC9zaGFyZWRcIjtcbmltcG9ydCB7IEhvbWVJY29uIH0gZnJvbSBcImx1Y2lkZS1yZWFjdFwiO1xuaW1wb3J0IHsgbWVtbywgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBJTkRFWF9ST1VURV9QQVRIIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgdXNlUm91dGVGdWxsUGF0aCB9IGZyb20gXCIuLi8uLi8uLi8uLi9ob29rc1wiO1xuaW1wb3J0IHsgdXNlQXBwU3RvcmUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vc3RvcmVzXCI7XG5pbXBvcnQgeyB1c2VNZW51TmF2aWdhdGUgfSBmcm9tIFwiLi4vLi4vaG9va3NcIjtcblxuY29uc3QgYnJlYWRjcnVtYlN0eWxlID0gY3NzKHtcbiAgcGFkZGluZ0lubGluZVN0YXJ0OiBnbG9iYWxDc3NWYXJzLnNwYWNpbmdNZCxcbiAgXCImIC52ZWYtZHJvcGRvd24tdHJpZ2dlclwiOiB7XG4gICAgZGlzcGxheTogXCJmbGV4XCIsXG4gICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIlxuICB9LFxuICBbYEBtZWRpYSAobWF4LXdpZHRoOiAke2JyZWFrcG9pbnRzLm1kfSlgXToge1xuICAgIGRpc3BsYXk6IFwibm9uZVwiXG4gIH1cbn0pO1xuXG5jb25zdCBpbmRleEJyZWFkY3J1bWJJdGVtOiBCcmVhZGNydW1iSXRlbSA9IHtcbiAga2V5OiBJTkRFWF9ST1VURV9QQVRILFxuICB0aXRsZTogPEljb24gY29tcG9uZW50PXtIb21lSWNvbn0gLz5cbn07XG5cbmV4cG9ydCBjb25zdCBCcmVhZGNydW1iTmF2aWdhdGlvbiA9IG1lbW8oXG4gICgpID0+IHtcbiAgICBjb25zdCBuYXZpZ2F0ZSA9IHVzZU1lbnVOYXZpZ2F0ZSgpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gdXNlUm91dGVGdWxsUGF0aCgpO1xuICAgIGNvbnN0IG1lbnVQYXRoTWFwID0gdXNlQXBwU3RvcmUoc3RhdGUgPT4gc3RhdGUubWVudVBhdGhNYXApO1xuICAgIGNvbnN0IHVzZXJNZW51TWFwID0gdXNlQXBwU3RvcmUoc3RhdGUgPT4gc3RhdGUudXNlck1lbnVNYXApO1xuICAgIGNvbnN0IGl0ZW1zID0gdXNlTWVtbzxCcmVhZGNydW1iSXRlbVtdPigoKSA9PiB7XG4gICAgICBjb25zdCBtZW51UGF0aCA9IG1lbnVQYXRoTWFwPy5nZXQoZnVsbFBhdGgpO1xuXG4gICAgICBpZiAoIW1lbnVQYXRoKSB7XG4gICAgICAgIHJldHVybiBbaW5kZXhCcmVhZGNydW1iSXRlbV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIGluZGV4QnJlYWRjcnVtYkl0ZW0sXG4gICAgICAgIC4uLm1lbnVQYXRoLm1hcChwYXRoID0+IHVzZXJNZW51TWFwPy5nZXQocGF0aCkpXG4gICAgICAgICAgLy8gLmZpbHRlcihtZW51ID0+IG1lbnUgJiYgbWVudS5wYXRoICE9PSBpbmRleEJyZWFkY3J1bWJJdGVtLmtleSlcbiAgICAgICAgICAubWFwKG1lbnUgPT4gbWVudSEpXG4gICAgICAgICAgLm1hcDxCcmVhZGNydW1iSXRlbT4obWVudSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAvLyBUT0RPOiBPcHRpbWl6YXRpb24gaXMgbmVlZGVkIGhlcmVcbiAgICAgICAgICAgICAga2V5OiBtZW51LnBhdGggPT09IGluZGV4QnJlYWRjcnVtYkl0ZW0ua2V5ID8gYC93b3JrYmVuY2hgIDogbWVudS5wYXRoLFxuICAgICAgICAgICAgICB0aXRsZTogbWVudS5pY29uXG4gICAgICAgICAgICAgICAgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxHcm91cCBnYXA9e2dsb2JhbENzc1ZhcnMuc3BhY2luZ1h4c30+XG4gICAgICAgICAgICAgICAgICAgICAgPER5bmFtaWNJY29uIG5hbWU9e21lbnUuaWNvbiBhcyBEeW5hbWljSWNvbk5hbWV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e21lbnUubmFtZX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvR3JvdXA+XG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBtZW51Lm5hbWUsXG4gICAgICAgICAgICAgIC4uLm1lbnUuY2hpbGRyZW5cbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgbWVudToge1xuICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBtZW51LmNoaWxkcmVuLm1hcChjaGlsZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNoaWxkLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBjaGlsZC5pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxHcm91cCBnYXA9XCJzbWFsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEeW5hbWljSWNvbiBuYW1lPXtjaGlsZC5pY29uIGFzIER5bmFtaWNJY29uTmFtZX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57Y2hpbGQubmFtZX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvR3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjaGlsZC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICh7IGtleSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZW51ID0gdXNlck1lbnVNYXA/LmdldChrZXkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVudSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0ZShtZW51KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHt9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pXG4gICAgICBdO1xuICAgIH0sIFtmdWxsUGF0aCwgbWVudVBhdGhNYXAsIG5hdmlnYXRlLCB1c2VyTWVudU1hcF0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxCcmVhZGNydW1iXG4gICAgICAgIGNzcz17YnJlYWRjcnVtYlN0eWxlfVxuICAgICAgICBpdGVtcz17aXRlbXN9XG4gICAgICAgIGl0ZW1SZW5kZXI9eyhpdGVtLCBfLCBpdGVtcykgPT4ge1xuICAgICAgICAgIGlmIChpdGVtLmtleSA9PT0gaXRlbXMuYXQoLTEpIS5rZXkpIHtcbiAgICAgICAgICAgIHJldHVybiA8c3Bhbj57aXRlbS50aXRsZX08L3NwYW4+O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICBvbkNsaWNrPXtcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBtZW51ID0gdXNlck1lbnVNYXA/LmdldChpdGVtLmtleSBhcyBzdHJpbmcpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAobWVudSkge1xuICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0ZShtZW51KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2l0ZW0udGl0bGV9XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgKTtcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfSxcbiAgYWx3YXlzVHJ1ZVxuKTtcbkJyZWFkY3J1bWJOYXZpZ2F0aW9uLmRpc3BsYXlOYW1lID0gXCJCcmVhZGNydW1iTmF2aWdhdGlvblwiO1xuIl19 */"), _ = {
21
- key: "/",
22
- title: /* @__PURE__ */ f(o, { component: m })
23
- }, v = u(() => {
24
- let o = n(), s = t(), l = e((e) => e.menuPathMap), u = e((e) => e.userMenuMap);
25
- return /* @__PURE__ */ f(r, {
26
- css: g,
27
- items: d(() => {
28
- let e = l?.get(s);
29
- return e ? [_, ...e.map((e) => u?.get(e)).map((e) => e).map((e) => ({
30
- key: e.path === _.key ? "/workbench" : e.path,
31
- title: e.icon ? /* @__PURE__ */ p(a, {
32
- gap: c.spacingXxs,
33
- children: [/* @__PURE__ */ f(i, { name: e.icon }), /* @__PURE__ */ f("span", { children: e.name })]
34
- }) : e.name,
35
- ...e.children ? { menu: {
36
- items: e.children.map((e) => ({
37
- key: e.path,
38
- label: e.icon ? /* @__PURE__ */ p(a, {
39
- gap: "small",
40
- children: [/* @__PURE__ */ f(i, { name: e.icon }), /* @__PURE__ */ f("span", { children: e.name })]
41
- }) : e.name
42
- })),
43
- onClick: ({ key: e }) => {
44
- let t = u?.get(e);
45
- t && o(t);
46
- }
47
- } } : {}
48
- }))] : [_];
49
- }, [
50
- s,
51
- l,
52
- o,
53
- u
54
- ]),
55
- itemRender: (e, t, n) => e.key === n.at(-1).key ? /* @__PURE__ */ f("span", { children: e.title }) : /* @__PURE__ */ f("a", {
56
- onClick: () => {
57
- let t = u?.get(e.key);
58
- t && o(t);
59
- },
60
- children: e.title
61
- })
62
- });
63
- }, l);
64
- v.displayName = "BreadcrumbNavigation";
65
- //#endregion
66
- export { v as BreadcrumbNavigation };