@vef-framework-react/starter 2.2.2 → 2.4.0

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 (341) hide show
  1. package/dist/cjs/components/access-denied/access-denied-icon.cjs +1 -1
  2. package/dist/cjs/components/access-denied/index.cjs +1 -1
  3. package/dist/cjs/components/app/index.cjs +1 -1
  4. package/dist/cjs/components/base-layout/index.cjs +1 -1
  5. package/dist/cjs/components/base-layout/styles.cjs +1 -1
  6. package/dist/cjs/components/base-layout/use-base-layout.cjs +1 -1
  7. package/dist/cjs/components/error/error-icon.cjs +1 -1
  8. package/dist/cjs/components/error/index.cjs +1 -1
  9. package/dist/cjs/components/index.cjs +1 -1
  10. package/dist/cjs/components/layout/components/contour-pattern.cjs +1 -0
  11. package/dist/cjs/components/layout/components/footer.cjs +1 -1
  12. package/dist/cjs/components/layout/components/header/app-switcher.cjs +1 -0
  13. package/dist/cjs/components/layout/components/header/boy-icon.cjs +1 -1
  14. package/dist/cjs/components/layout/components/header/color-scheme.cjs +1 -1
  15. package/dist/cjs/components/layout/components/header/fullscreen.cjs +1 -1
  16. package/dist/cjs/components/layout/components/header/girl-icon.cjs +1 -1
  17. package/dist/cjs/components/layout/components/header/header-pattern.cjs +1 -0
  18. package/dist/cjs/components/layout/components/header/index.cjs +1 -1
  19. package/dist/cjs/components/layout/components/header/menu-burger.cjs +1 -1
  20. package/dist/cjs/components/layout/components/header/menu-fold-left-icon.cjs +1 -1
  21. package/dist/cjs/components/layout/components/header/menu-unfold-left-icon.cjs +1 -1
  22. package/dist/cjs/components/layout/components/header/mixed-menu.cjs +1 -0
  23. package/dist/cjs/components/layout/components/header/search.cjs +1 -1
  24. package/dist/cjs/components/layout/components/header/theme-config.cjs +1 -1
  25. package/dist/cjs/components/layout/components/header/user-avatar.cjs +1 -1
  26. package/dist/cjs/components/layout/components/index.cjs +1 -1
  27. package/dist/cjs/components/layout/components/logo.cjs +1 -1
  28. package/dist/cjs/components/layout/components/menu.cjs +1 -1
  29. package/dist/cjs/components/layout/components/search/index.cjs +1 -1
  30. package/dist/cjs/components/layout/components/search/keyboard-arrow-down-icon.cjs +1 -1
  31. package/dist/cjs/components/layout/components/search/keyboard-arrow-up-icon.cjs +1 -1
  32. package/dist/cjs/components/layout/components/search/keyboard-control-icon.cjs +1 -1
  33. package/dist/cjs/components/layout/components/search/keyboard-esc-icon.cjs +1 -1
  34. package/dist/cjs/components/layout/components/search/keyboard-help.cjs +1 -1
  35. package/dist/cjs/components/layout/components/search/keyboard-return-icon.cjs +1 -1
  36. package/dist/cjs/components/layout/components/search/keyboard-shift-icon.cjs +1 -1
  37. package/dist/cjs/components/layout/components/search/keyboard.cjs +1 -1
  38. package/dist/cjs/components/layout/components/search/letter-s-icon.cjs +1 -1
  39. package/dist/cjs/components/layout/components/search/search-result-item.cjs +1 -1
  40. package/dist/cjs/components/layout/components/search/search-result.cjs +1 -1
  41. package/dist/cjs/components/layout/components/sidebar.cjs +1 -1
  42. package/dist/cjs/components/layout/components/tabs/context-menu.cjs +1 -1
  43. package/dist/cjs/components/layout/components/tabs/index.cjs +1 -1
  44. package/dist/cjs/components/layout/components/tabs/main-content-maximum.cjs +1 -1
  45. package/dist/cjs/components/layout/components/tabs/reload.cjs +1 -1
  46. package/dist/cjs/components/layout/components/tabs/tab-item.cjs +1 -1
  47. package/dist/cjs/components/layout/components/tabs/tab-list.cjs +1 -1
  48. package/dist/cjs/components/layout/components/tabs/tabs-container.cjs +1 -1
  49. package/dist/cjs/components/layout/components/theme-config/color-scheme-switcher.cjs +1 -1
  50. package/dist/cjs/components/layout/components/theme-config/color-scheme.cjs +1 -1
  51. package/dist/cjs/components/layout/components/theme-config/config-item.cjs +1 -1
  52. package/dist/cjs/components/layout/components/theme-config/index.cjs +1 -1
  53. package/dist/cjs/components/layout/components/theme-config/menu-layout-card.cjs +1 -1
  54. package/dist/cjs/components/layout/components/theme-config/menu-layout.cjs +1 -1
  55. package/dist/cjs/components/layout/components/theme-config/operations.cjs +1 -1
  56. package/dist/cjs/components/layout/components/theme-config/theme-color-picker.cjs +1 -1
  57. package/dist/cjs/components/layout/components/theme-config/theme-colors.cjs +1 -1
  58. package/dist/cjs/components/layout/hooks/index.cjs +1 -1
  59. package/dist/cjs/components/layout/hooks/use-color-scheme-updater.cjs +1 -1
  60. package/dist/cjs/components/layout/hooks/use-menu-navigate.cjs +1 -1
  61. package/dist/cjs/components/layout/hooks/use-mixed-menu.cjs +1 -0
  62. package/dist/cjs/components/layout/hooks/use-tab-navigate.cjs +1 -1
  63. package/dist/cjs/components/layout/index.cjs +1 -1
  64. package/dist/cjs/components/layout/store.cjs +1 -1
  65. package/dist/cjs/components/layout/styles.cjs +1 -1
  66. package/dist/cjs/components/login/icon-login.cjs +1 -1
  67. package/dist/cjs/components/login/index.cjs +1 -1
  68. package/dist/cjs/components/login/styles.cjs +1 -1
  69. package/dist/cjs/components/n-progress/components/bar.cjs +1 -1
  70. package/dist/cjs/components/n-progress/components/container.cjs +1 -1
  71. package/dist/cjs/components/n-progress/components/index.cjs +1 -1
  72. package/dist/cjs/components/n-progress/event.cjs +1 -1
  73. package/dist/cjs/components/n-progress/index.cjs +1 -1
  74. package/dist/cjs/components/not-found/index.cjs +1 -1
  75. package/dist/cjs/components/not-found/not-found-icon.cjs +1 -1
  76. package/dist/cjs/components/router-provider/context.cjs +1 -1
  77. package/dist/cjs/components/router-provider/index.cjs +1 -1
  78. package/dist/cjs/components/theme-config-provider/global-style.cjs +1 -1
  79. package/dist/cjs/components/theme-config-provider/index.cjs +1 -1
  80. package/dist/cjs/components/theme-config-provider/use-color-mode-effect.cjs +1 -1
  81. package/dist/cjs/components/theme-config-provider/use-theme-config.cjs +1 -1
  82. package/dist/cjs/constants/index.cjs +1 -1
  83. package/dist/cjs/helpers/api.cjs +1 -1
  84. package/dist/cjs/helpers/app-version.cjs +1 -1
  85. package/dist/cjs/helpers/app.cjs +1 -1
  86. package/dist/cjs/helpers/auth.cjs +1 -1
  87. package/dist/cjs/helpers/event.cjs +1 -1
  88. package/dist/cjs/helpers/index.cjs +1 -1
  89. package/dist/cjs/helpers/query.cjs +1 -1
  90. package/dist/cjs/helpers/router.cjs +1 -1
  91. package/dist/cjs/hooks/index.cjs +1 -1
  92. package/dist/cjs/hooks/use-route-full-path.cjs +1 -1
  93. package/dist/cjs/index.cjs +1 -1
  94. package/dist/cjs/routes/access-denied.cjs +1 -1
  95. package/dist/cjs/routes/index.cjs +1 -1
  96. package/dist/cjs/routes/layout.cjs +1 -1
  97. package/dist/cjs/routes/login.cjs +1 -1
  98. package/dist/cjs/routes/root.cjs +1 -1
  99. package/dist/cjs/stores/app.cjs +1 -1
  100. package/dist/cjs/stores/index.cjs +1 -1
  101. package/dist/cjs/stores/tab.cjs +1 -1
  102. package/dist/cjs/stores/theme.cjs +1 -1
  103. package/dist/es/components/access-denied/access-denied-icon.js +1 -1
  104. package/dist/es/components/access-denied/index.js +1 -1
  105. package/dist/es/components/app/index.js +1 -1
  106. package/dist/es/components/base-layout/index.js +29 -29
  107. package/dist/es/components/base-layout/styles.js +15 -8
  108. package/dist/es/components/base-layout/use-base-layout.js +2 -1
  109. package/dist/es/components/error/error-icon.js +1 -1
  110. package/dist/es/components/error/index.js +1 -1
  111. package/dist/es/components/index.js +1 -1
  112. package/dist/es/components/layout/components/contour-pattern.js +111 -0
  113. package/dist/es/components/layout/components/footer.js +1 -1
  114. package/dist/es/components/layout/components/header/app-switcher.js +116 -0
  115. package/dist/es/components/layout/components/header/boy-icon.js +1 -1
  116. package/dist/es/components/layout/components/header/color-scheme.js +1 -1
  117. package/dist/es/components/layout/components/header/fullscreen.js +1 -1
  118. package/dist/es/components/layout/components/header/girl-icon.js +1 -1
  119. package/dist/es/components/layout/components/header/header-pattern.js +64 -0
  120. package/dist/es/components/layout/components/header/index.js +118 -53
  121. package/dist/es/components/layout/components/header/menu-burger.js +1 -1
  122. package/dist/es/components/layout/components/header/menu-fold-left-icon.js +1 -1
  123. package/dist/es/components/layout/components/header/menu-unfold-left-icon.js +1 -1
  124. package/dist/es/components/layout/components/header/mixed-menu.js +16 -0
  125. package/dist/es/components/layout/components/header/search.js +1 -1
  126. package/dist/es/components/layout/components/header/theme-config.js +1 -1
  127. package/dist/es/components/layout/components/header/user-avatar.js +2 -2
  128. package/dist/es/components/layout/components/index.js +1 -1
  129. package/dist/es/components/layout/components/logo.js +37 -15
  130. package/dist/es/components/layout/components/menu.js +40 -32
  131. package/dist/es/components/layout/components/search/index.js +15 -13
  132. package/dist/es/components/layout/components/search/keyboard-arrow-down-icon.js +1 -1
  133. package/dist/es/components/layout/components/search/keyboard-arrow-up-icon.js +1 -1
  134. package/dist/es/components/layout/components/search/keyboard-control-icon.js +1 -1
  135. package/dist/es/components/layout/components/search/keyboard-esc-icon.js +1 -1
  136. package/dist/es/components/layout/components/search/keyboard-help.js +3 -3
  137. package/dist/es/components/layout/components/search/keyboard-return-icon.js +1 -1
  138. package/dist/es/components/layout/components/search/keyboard-shift-icon.js +1 -1
  139. package/dist/es/components/layout/components/search/keyboard.js +3 -3
  140. package/dist/es/components/layout/components/search/letter-s-icon.js +1 -1
  141. package/dist/es/components/layout/components/search/search-result-item.js +4 -4
  142. package/dist/es/components/layout/components/search/search-result.js +2 -2
  143. package/dist/es/components/layout/components/sidebar.js +44 -28
  144. package/dist/es/components/layout/components/tabs/context-menu.js +1 -1
  145. package/dist/es/components/layout/components/tabs/index.js +5 -5
  146. package/dist/es/components/layout/components/tabs/main-content-maximum.js +1 -1
  147. package/dist/es/components/layout/components/tabs/reload.js +1 -1
  148. package/dist/es/components/layout/components/tabs/tab-item.js +19 -16
  149. package/dist/es/components/layout/components/tabs/tab-list.js +2 -2
  150. package/dist/es/components/layout/components/tabs/tabs-container.js +2 -2
  151. package/dist/es/components/layout/components/theme-config/color-scheme-switcher.js +2 -2
  152. package/dist/es/components/layout/components/theme-config/color-scheme.js +2 -2
  153. package/dist/es/components/layout/components/theme-config/config-item.js +2 -2
  154. package/dist/es/components/layout/components/theme-config/index.js +5 -5
  155. package/dist/es/components/layout/components/theme-config/menu-layout-card.js +28 -10
  156. package/dist/es/components/layout/components/theme-config/menu-layout.js +85 -28
  157. package/dist/es/components/layout/components/theme-config/operations.js +1 -1
  158. package/dist/es/components/layout/components/theme-config/theme-color-picker.js +1 -1
  159. package/dist/es/components/layout/components/theme-config/theme-colors.js +2 -2
  160. package/dist/es/components/layout/hooks/index.js +2 -1
  161. package/dist/es/components/layout/hooks/use-color-scheme-updater.js +1 -1
  162. package/dist/es/components/layout/hooks/use-menu-navigate.js +1 -1
  163. package/dist/es/components/layout/hooks/use-mixed-menu.js +42 -0
  164. package/dist/es/components/layout/hooks/use-tab-navigate.js +1 -1
  165. package/dist/es/components/layout/index.js +58 -41
  166. package/dist/es/components/layout/store.js +1 -1
  167. package/dist/es/components/layout/styles.js +33 -5
  168. package/dist/es/components/login/icon-login.js +1 -1
  169. package/dist/es/components/login/index.js +6 -6
  170. package/dist/es/components/login/styles.js +18 -18
  171. package/dist/es/components/login/welcome-messages.js +1 -1
  172. package/dist/es/components/n-progress/components/bar.js +3 -3
  173. package/dist/es/components/n-progress/components/container.js +1 -1
  174. package/dist/es/components/n-progress/components/index.js +1 -1
  175. package/dist/es/components/n-progress/event.js +1 -1
  176. package/dist/es/components/n-progress/index.js +1 -1
  177. package/dist/es/components/not-found/index.js +1 -1
  178. package/dist/es/components/not-found/not-found-icon.js +1 -1
  179. package/dist/es/components/router-provider/context.js +1 -1
  180. package/dist/es/components/router-provider/index.js +1 -1
  181. package/dist/es/components/theme-config-provider/global-style.js +1 -1
  182. package/dist/es/components/theme-config-provider/index.js +1 -1
  183. package/dist/es/components/theme-config-provider/use-color-mode-effect.js +1 -1
  184. package/dist/es/components/theme-config-provider/use-theme-config.js +1 -1
  185. package/dist/es/constants/event.js +1 -1
  186. package/dist/es/constants/index.js +1 -1
  187. package/dist/es/constants/router.js +1 -1
  188. package/dist/es/constants/storage.js +1 -1
  189. package/dist/es/helpers/api.js +1 -1
  190. package/dist/es/helpers/app-version.js +6 -6
  191. package/dist/es/helpers/app.js +1 -1
  192. package/dist/es/helpers/auth.js +10 -2
  193. package/dist/es/helpers/event.js +1 -1
  194. package/dist/es/helpers/index.js +1 -1
  195. package/dist/es/helpers/query.js +1 -1
  196. package/dist/es/helpers/router.js +3 -3
  197. package/dist/es/hooks/index.js +1 -1
  198. package/dist/es/hooks/use-route-full-path.js +1 -1
  199. package/dist/es/index.js +1 -1
  200. package/dist/es/routes/access-denied.js +1 -1
  201. package/dist/es/routes/index.js +1 -1
  202. package/dist/es/routes/layout.js +20 -18
  203. package/dist/es/routes/login.js +1 -1
  204. package/dist/es/routes/root.js +1 -1
  205. package/dist/es/stores/app.js +8 -4
  206. package/dist/es/stores/index.js +1 -1
  207. package/dist/es/stores/tab.js +1 -1
  208. package/dist/es/stores/theme.js +3 -1
  209. package/dist/types/{components → src/components}/base-layout/props.d.ts +6 -0
  210. package/dist/types/{components → src/components}/base-layout/styles.d.ts +1 -0
  211. package/dist/types/{components → src/components}/index.d.ts +1 -1
  212. package/dist/types/src/components/layout/components/contour-pattern.d.ts +5 -0
  213. package/dist/types/src/components/layout/components/header/app-switcher.d.ts +10 -0
  214. package/dist/types/src/components/layout/components/header/header-pattern.d.ts +1 -0
  215. package/dist/types/src/components/layout/components/header/index.d.ts +10 -0
  216. package/dist/types/src/components/layout/components/header/mixed-menu.d.ts +5 -0
  217. package/dist/types/{components → src/components}/layout/components/logo.d.ts +5 -1
  218. package/dist/types/src/components/layout/components/menu.d.ts +19 -0
  219. package/dist/types/{components → src/components}/layout/components/search/keyboard.d.ts +1 -1
  220. package/dist/types/src/components/layout/components/sidebar.d.ts +21 -0
  221. package/dist/types/{components → src/components}/layout/components/theme-config/menu-layout-card.d.ts +2 -2
  222. package/dist/types/{components → src/components}/layout/hooks/index.d.ts +1 -0
  223. package/dist/types/src/components/layout/hooks/use-mixed-menu.d.ts +31 -0
  224. package/dist/types/src/components/layout/index.d.ts +3 -0
  225. package/dist/types/src/components/layout/props.d.ts +79 -0
  226. package/dist/types/{components → src/components}/layout/styles.d.ts +1 -0
  227. package/dist/types/{index.d.ts → src/index.d.ts} +3 -3
  228. package/dist/types/{routes → src/routes}/index.d.ts +1 -1
  229. package/dist/types/src/routes/layout.d.ts +25 -0
  230. package/dist/types/{stores → src/stores}/app.d.ts +4 -3
  231. package/dist/types/src/stores/index.d.ts +3 -0
  232. package/dist/types/{stores → src/stores}/theme.d.ts +15 -1
  233. package/dist/types/{types → src/types}/common.d.ts +8 -2
  234. package/package.json +10 -10
  235. package/dist/cjs/_internal/_rolldown/runtime.cjs +0 -1
  236. package/dist/cjs/components/layout/components/header/breadcrumb-navigation.cjs +0 -1
  237. package/dist/cjs/components/layout/components/honeycomb-pattern.cjs +0 -1
  238. package/dist/es/components/layout/components/header/breadcrumb-navigation.js +0 -66
  239. package/dist/es/components/layout/components/honeycomb-pattern.js +0 -58
  240. package/dist/types/components/layout/components/header/breadcrumb-navigation.d.ts +0 -2
  241. package/dist/types/components/layout/components/header/index.d.ts +0 -5
  242. package/dist/types/components/layout/components/honeycomb-pattern.d.ts +0 -1
  243. package/dist/types/components/layout/components/menu.d.ts +0 -7
  244. package/dist/types/components/layout/components/sidebar.d.ts +0 -6
  245. package/dist/types/components/layout/index.d.ts +0 -3
  246. package/dist/types/components/layout/props.d.ts +0 -34
  247. package/dist/types/routes/layout.d.ts +0 -22
  248. package/dist/types/stores/index.d.ts +0 -3
  249. /package/dist/types/{components → src/components}/access-denied/access-denied-icon.d.ts +0 -0
  250. /package/dist/types/{components → src/components}/access-denied/index.d.ts +0 -0
  251. /package/dist/types/{components → src/components}/app/index.d.ts +0 -0
  252. /package/dist/types/{components → src/components}/app/props.d.ts +0 -0
  253. /package/dist/types/{components → src/components}/base-layout/index.d.ts +0 -0
  254. /package/dist/types/{components → src/components}/base-layout/use-base-layout.d.ts +0 -0
  255. /package/dist/types/{components → src/components}/error/error-icon.d.ts +0 -0
  256. /package/dist/types/{components → src/components}/error/index.d.ts +0 -0
  257. /package/dist/types/{components → src/components}/error/props.d.ts +0 -0
  258. /package/dist/types/{components → src/components}/layout/components/footer.d.ts +0 -0
  259. /package/dist/types/{components → src/components}/layout/components/header/boy-icon.d.ts +0 -0
  260. /package/dist/types/{components → src/components}/layout/components/header/color-scheme.d.ts +0 -0
  261. /package/dist/types/{components → src/components}/layout/components/header/fullscreen.d.ts +0 -0
  262. /package/dist/types/{components → src/components}/layout/components/header/girl-icon.d.ts +0 -0
  263. /package/dist/types/{components → src/components}/layout/components/header/menu-burger.d.ts +0 -0
  264. /package/dist/types/{components → src/components}/layout/components/header/menu-fold-left-icon.d.ts +0 -0
  265. /package/dist/types/{components → src/components}/layout/components/header/menu-unfold-left-icon.d.ts +0 -0
  266. /package/dist/types/{components → src/components}/layout/components/header/search.d.ts +0 -0
  267. /package/dist/types/{components → src/components}/layout/components/header/theme-config.d.ts +0 -0
  268. /package/dist/types/{components → src/components}/layout/components/header/user-avatar.d.ts +0 -0
  269. /package/dist/types/{components → src/components}/layout/components/index.d.ts +0 -0
  270. /package/dist/types/{components → src/components}/layout/components/search/index.d.ts +0 -0
  271. /package/dist/types/{components → src/components}/layout/components/search/keyboard-arrow-down-icon.d.ts +0 -0
  272. /package/dist/types/{components → src/components}/layout/components/search/keyboard-arrow-up-icon.d.ts +0 -0
  273. /package/dist/types/{components → src/components}/layout/components/search/keyboard-control-icon.d.ts +0 -0
  274. /package/dist/types/{components → src/components}/layout/components/search/keyboard-esc-icon.d.ts +0 -0
  275. /package/dist/types/{components → src/components}/layout/components/search/keyboard-help.d.ts +0 -0
  276. /package/dist/types/{components → src/components}/layout/components/search/keyboard-return-icon.d.ts +0 -0
  277. /package/dist/types/{components → src/components}/layout/components/search/keyboard-shift-icon.d.ts +0 -0
  278. /package/dist/types/{components → src/components}/layout/components/search/letter-s-icon.d.ts +0 -0
  279. /package/dist/types/{components → src/components}/layout/components/search/search-result-item.d.ts +0 -0
  280. /package/dist/types/{components → src/components}/layout/components/search/search-result.d.ts +0 -0
  281. /package/dist/types/{components → src/components}/layout/components/tabs/context-menu.d.ts +0 -0
  282. /package/dist/types/{components → src/components}/layout/components/tabs/index.d.ts +0 -0
  283. /package/dist/types/{components → src/components}/layout/components/tabs/main-content-maximum.d.ts +0 -0
  284. /package/dist/types/{components → src/components}/layout/components/tabs/reload.d.ts +0 -0
  285. /package/dist/types/{components → src/components}/layout/components/tabs/tab-item.d.ts +0 -0
  286. /package/dist/types/{components → src/components}/layout/components/tabs/tab-list.d.ts +0 -0
  287. /package/dist/types/{components → src/components}/layout/components/tabs/tabs-container.d.ts +0 -0
  288. /package/dist/types/{components → src/components}/layout/components/theme-config/color-scheme-switcher.d.ts +0 -0
  289. /package/dist/types/{components → src/components}/layout/components/theme-config/color-scheme.d.ts +0 -0
  290. /package/dist/types/{components → src/components}/layout/components/theme-config/config-item.d.ts +0 -0
  291. /package/dist/types/{components → src/components}/layout/components/theme-config/index.d.ts +0 -0
  292. /package/dist/types/{components → src/components}/layout/components/theme-config/menu-layout.d.ts +0 -0
  293. /package/dist/types/{components → src/components}/layout/components/theme-config/operations.d.ts +0 -0
  294. /package/dist/types/{components → src/components}/layout/components/theme-config/theme-color-picker.d.ts +0 -0
  295. /package/dist/types/{components → src/components}/layout/components/theme-config/theme-colors.d.ts +0 -0
  296. /package/dist/types/{components → src/components}/layout/hooks/use-color-scheme-updater.d.ts +0 -0
  297. /package/dist/types/{components → src/components}/layout/hooks/use-menu-navigate.d.ts +0 -0
  298. /package/dist/types/{components → src/components}/layout/hooks/use-tab-navigate.d.ts +0 -0
  299. /package/dist/types/{components → src/components}/layout/store.d.ts +0 -0
  300. /package/dist/types/{components → src/components}/login/icon-login.d.ts +0 -0
  301. /package/dist/types/{components → src/components}/login/index.d.ts +0 -0
  302. /package/dist/types/{components → src/components}/login/payload.d.ts +0 -0
  303. /package/dist/types/{components → src/components}/login/props.d.ts +0 -0
  304. /package/dist/types/{components → src/components}/login/styles.d.ts +0 -0
  305. /package/dist/types/{components → src/components}/login/welcome-messages.d.ts +0 -0
  306. /package/dist/types/{components → src/components}/n-progress/components/bar.d.ts +0 -0
  307. /package/dist/types/{components → src/components}/n-progress/components/container.d.ts +0 -0
  308. /package/dist/types/{components → src/components}/n-progress/components/index.d.ts +0 -0
  309. /package/dist/types/{components → src/components}/n-progress/event.d.ts +0 -0
  310. /package/dist/types/{components → src/components}/n-progress/index.d.ts +0 -0
  311. /package/dist/types/{components → src/components}/not-found/index.d.ts +0 -0
  312. /package/dist/types/{components → src/components}/not-found/not-found-icon.d.ts +0 -0
  313. /package/dist/types/{components → src/components}/router-provider/context.d.ts +0 -0
  314. /package/dist/types/{components → src/components}/router-provider/index.d.ts +0 -0
  315. /package/dist/types/{components → src/components}/router-provider/props.d.ts +0 -0
  316. /package/dist/types/{components → src/components}/theme-config-provider/global-style.d.ts +0 -0
  317. /package/dist/types/{components → src/components}/theme-config-provider/index.d.ts +0 -0
  318. /package/dist/types/{components → src/components}/theme-config-provider/use-color-mode-effect.d.ts +0 -0
  319. /package/dist/types/{components → src/components}/theme-config-provider/use-theme-config.d.ts +0 -0
  320. /package/dist/types/{constants → src/constants}/event.d.ts +0 -0
  321. /package/dist/types/{constants → src/constants}/index.d.ts +0 -0
  322. /package/dist/types/{constants → src/constants}/router.d.ts +0 -0
  323. /package/dist/types/{constants → src/constants}/storage.d.ts +0 -0
  324. /package/dist/types/{helpers → src/helpers}/api.d.ts +0 -0
  325. /package/dist/types/{helpers → src/helpers}/app-version.d.ts +0 -0
  326. /package/dist/types/{helpers → src/helpers}/app.d.ts +0 -0
  327. /package/dist/types/{helpers → src/helpers}/auth.d.ts +0 -0
  328. /package/dist/types/{helpers → src/helpers}/event.d.ts +0 -0
  329. /package/dist/types/{helpers → src/helpers}/index.d.ts +0 -0
  330. /package/dist/types/{helpers → src/helpers}/query.d.ts +0 -0
  331. /package/dist/types/{helpers → src/helpers}/router.d.ts +0 -0
  332. /package/dist/types/{hooks → src/hooks}/index.d.ts +0 -0
  333. /package/dist/types/{hooks → src/hooks}/use-route-full-path.d.ts +0 -0
  334. /package/dist/types/{models → src/models}/index.d.ts +0 -0
  335. /package/dist/types/{routes → src/routes}/access-denied.d.ts +0 -0
  336. /package/dist/types/{routes → src/routes}/login.d.ts +0 -0
  337. /package/dist/types/{routes → src/routes}/root.d.ts +0 -0
  338. /package/dist/types/{stores → src/stores}/tab.d.ts +0 -0
  339. /package/dist/types/{types → src/types}/api.d.ts +0 -0
  340. /package/dist/types/{types → src/types}/index.d.ts +0 -0
  341. /package/dist/types/{types → src/types}/router.d.ts +0 -0
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/starter v2.2.2 made by Venus | 2026-05-18T12:44:01.943Z */
1
+ /*! @vef-framework-react/starter v2.4.0 made by Venus | 2026-06-15T15:10:34.000Z */
2
2
  import { useMemo as e } from "react";
3
3
  import { useLocation as t, useRouter as n } from "@tanstack/react-router";
4
4
  //#region src/hooks/use-route-full-path.ts
package/dist/es/index.js CHANGED
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/starter v2.2.2 made by Venus | 2026-05-18T12:44:01.943Z */
1
+ /*! @vef-framework-react/starter v2.4.0 made by Venus | 2026-06-15T15:10:34.000Z */
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.2.2 made by Venus | 2026-05-18T12:44:01.943Z */
1
+ /*! @vef-framework-react/starter v2.4.0 made by Venus | 2026-06-15T15:10:34.000Z */
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.2.2 made by Venus | 2026-05-18T12:44:01.943Z */
1
+ /*! @vef-framework-react/starter v2.4.0 made by Venus | 2026-06-15T15:10:34.000Z */
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.2.2 made by Venus | 2026-05-18T12:44:01.943Z */
1
+ /*! @vef-framework-react/starter v2.4.0 made by Venus | 2026-06-15T15:10:34.000Z */
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";
@@ -37,38 +37,40 @@ function p(e) {
37
37
  function m(e) {
38
38
  return e.filter((e) => e.type !== "view").map((e) => Object.freeze(p(e)));
39
39
  }
40
- function h({ fetchUserInfo: o, ...p }) {
41
- function h() {
40
+ function h({ fetchUserInfo: o, beforeLoad: p, loader: h, ...g }) {
41
+ function _() {
42
42
  return /* @__PURE__ */ c(i, {
43
- ...p,
43
+ ...g,
44
44
  children: /* @__PURE__ */ c(l, {})
45
45
  });
46
46
  }
47
47
  return {
48
- beforeLoad: ({ location: r }) => {
49
- let { isAuthenticated: i, userMenuMap: a } = n.getState();
50
- if (!i) throw u({
48
+ beforeLoad: async (r) => {
49
+ let { location: i } = r, { isAuthenticated: a, userMenuMap: o } = n.getState();
50
+ if (!a) throw u({
51
51
  to: t,
52
- search: { redirect: r.href }
52
+ search: { redirect: i.href }
53
53
  });
54
- if (a && !a.has(r.pathname)) throw u({
54
+ if (o && !o.has(i.pathname)) throw u({
55
55
  to: e,
56
56
  replace: !0
57
57
  });
58
+ return await p?.(r) ?? {};
58
59
  },
59
- loader: async ({ location: t }) => {
60
- let { permTokens: r, ...i } = await o(), { menus: a } = i, s = Object.freeze(d(a)), c = Object.freeze(f(a)), l = Object.freeze(m(a));
60
+ loader: async (t) => {
61
+ let { location: r } = t, { permissionTokens: i, ...a } = await o(), { menus: s } = a, c = Object.freeze(d(s)), l = Object.freeze(f(s)), p = Object.freeze(m(s));
61
62
  if (n.setState({
62
63
  ...n.getState(),
63
- userInfo: Object.freeze(i),
64
- userMenuMap: s,
65
- menuPathMap: c,
66
- menuItems: l,
67
- permTokens: Object.freeze(new Set(r))
68
- }), !s.has(t.pathname)) throw u({
64
+ userInfo: Object.freeze(a),
65
+ userMenuMap: c,
66
+ menuPathMap: l,
67
+ menuItems: p,
68
+ permissionTokens: Object.freeze(new Set(i))
69
+ }), !c.has(r.pathname)) throw u({
69
70
  to: e,
70
71
  replace: !0
71
72
  });
73
+ if (h) return await h(t);
72
74
  },
73
75
  pendingComponent: () => /* @__PURE__ */ c(s, {
74
76
  description: "页面玩命加载中, 请稍后...",
@@ -77,7 +79,7 @@ function h({ fetchUserInfo: o, ...p }) {
77
79
  }),
78
80
  errorComponent: r,
79
81
  notFoundComponent: a,
80
- component: h,
82
+ component: _,
81
83
  staleTime: Infinity,
82
84
  shouldReload: !1
83
85
  };
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/starter v2.2.2 made by Venus | 2026-05-18T12:44:01.943Z */
1
+ /*! @vef-framework-react/starter v2.4.0 made by Venus | 2026-06-15T15:10:34.000Z */
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.2.2 made by Venus | 2026-05-18T12:44:01.943Z */
1
+ /*! @vef-framework-react/starter v2.4.0 made by Venus | 2026-06-15T15:10:34.000Z */
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,12 +1,16 @@
1
- /*! @vef-framework-react/starter v2.2.2 made by Venus | 2026-05-18T12:44:01.943Z */
1
+ /*! @vef-framework-react/starter v2.4.0 made by Venus | 2026-06-15T15:10:34.000Z */
2
2
  import { createPersistedStore as e } from "@vef-framework-react/core";
3
3
  //#region src/stores/app.ts
4
- var t = e(() => ({ isAuthenticated: !1 }), {
4
+ var t = e(() => ({
5
+ isAuthenticated: !1,
6
+ custom: {}
7
+ }), {
5
8
  name: "app",
6
9
  storage: "local",
7
- selector: ({ isAuthenticated: e, authTokens: t }) => ({
10
+ selector: ({ isAuthenticated: e, custom: t, authTokens: n }) => ({
8
11
  isAuthenticated: e,
9
- authTokens: t
12
+ custom: t,
13
+ authTokens: n
10
14
  })
11
15
  });
12
16
  //#endregion
@@ -1,4 +1,4 @@
1
- /*! @vef-framework-react/starter v2.2.2 made by Venus | 2026-05-18T12:44:01.943Z */
1
+ /*! @vef-framework-react/starter v2.4.0 made by Venus | 2026-06-15T15:10:34.000Z */
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.2.2 made by Venus | 2026-05-18T12:44:01.943Z */
1
+ /*! @vef-framework-react/starter v2.4.0 made by Venus | 2026-06-15T15:10:34.000Z */
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.2.2 made by Venus | 2026-05-18T12:44:01.943Z */
1
+ /*! @vef-framework-react/starter v2.4.0 made by Venus | 2026-06-15T15:10:34.000Z */
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;
@@ -0,0 +1,10 @@
1
+ import { LayoutProps } from '../../props';
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;
8
+ }
9
+ export declare function Header({ title, logo, headerActions, userMenuItems, onUserMenuClick, onLogout, apps, currentAppId, onAppChange, showMenuBurger }: HeaderProps): import("@emotion/react/jsx-runtime").JSX.Element;
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 {};
@@ -0,0 +1,19 @@
1
+ import { MenuItem, Orientation } from '@vef-framework-react/components';
2
+ interface MenuProps {
3
+ layout: Orientation;
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;
17
+ }
18
+ export declare function Menu({ layout, isSidebarCollapsed, items, selectedKeys, onSelectMenu }: MenuProps): import("@emotion/react/jsx-runtime").JSX.Element;
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
  }
@@ -0,0 +1,21 @@
1
+ import { MenuItem } from '@vef-framework-react/components';
2
+ import { LayoutProps } from '../props';
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;
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;
19
+ }
20
+ export declare function Sidebar({ isDark, isSidebarCollapsed, logo, title, items, showLogo }: SidebarProps): React.JSX.Element;
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;
@@ -0,0 +1,3 @@
1
+ import { 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';
@@ -0,0 +1,79 @@
1
+ import { DropdownMenuItem } from '@vef-framework-react/components';
2
+ import { Awaitable, DistributedOmit } from '@vef-framework-react/shared';
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
+ }
34
+ /**
35
+ * The props for the Layout component.
36
+ */
37
+ export interface LayoutProps extends PropsWithChildren {
38
+ /**
39
+ * The title of the layout.
40
+ */
41
+ title?: ReactNode;
42
+ /**
43
+ * The logo of the layout.
44
+ */
45
+ logo?: ReactNode;
46
+ /**
47
+ * The actions of the header.
48
+ */
49
+ headerActions?: ReactNode;
50
+ /**
51
+ * Extra items appended to the user dropdown menu. They render before the
52
+ * built-in items (e.g. logout), with an automatic divider in between.
53
+ */
54
+ userMenuItems?: UserMenuItem[];
55
+ /**
56
+ * Handles clicks on user menu items. The built-in `logout` key is owned by
57
+ * the framework and never forwarded; all other keys are delivered here.
58
+ */
59
+ onUserMenuClick?: (key: string) => void;
60
+ /**
61
+ * The logout api function.
62
+ */
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>;
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
- export { createAccessDeniedRouteOptions, createLayoutRouteOptions, createLoginRouteOptions, createRootRouteOptions } from './routes';
5
- export { useAppStore, useTabStore, useThemeStore, type AppState, type ColorScheme, type Tab, type TabState, type ThemeColors, type ThemeState } from './stores';
4
+ export { createAccessDeniedRouteOptions, createLayoutRouteOptions, createLoginRouteOptions, createRootRouteOptions, type LayoutBeforeLoadArgs, type LayoutLoaderArgs } from './routes';
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,4 +1,4 @@
1
1
  export { createAccessDeniedRouteOptions } from './access-denied';
2
- export { createLayoutRouteOptions } from './layout';
2
+ export { createLayoutRouteOptions, type LayoutBeforeLoadArgs, type LayoutLoaderArgs } from './layout';
3
3
  export { createLoginRouteOptions } from './login';
4
4
  export { createRootRouteOptions } from './root';
@@ -0,0 +1,25 @@
1
+ import { RouteLoaderFn, RouteOptions } from '@tanstack/react-router';
2
+ import { AnyObject, Awaitable, EmptyObject, Except } from '@vef-framework-react/shared';
3
+ import { LayoutProps, Error, NotFound } from '../components';
4
+ import { UserInfo } from '../types';
5
+ export type LayoutBeforeLoadArgs = Parameters<NonNullable<RouteOptions<unknown, any, any>["beforeLoad"]>>[0];
6
+ type BaseLayoutLoaderArgs = Parameters<RouteLoaderFn<unknown, any, any>>[0];
7
+ export type LayoutLoaderArgs<TBeforeLoadContext extends AnyObject = EmptyObject> = Except<BaseLayoutLoaderArgs, "context"> & {
8
+ context: BaseLayoutLoaderArgs["context"] & TBeforeLoadContext;
9
+ };
10
+ interface LayoutRouteOptions<TBeforeLoadContext extends AnyObject = EmptyObject, TLoaderData = void> extends Except<LayoutProps, "children"> {
11
+ fetchUserInfo: () => Awaitable<UserInfo>;
12
+ beforeLoad?: (args: LayoutBeforeLoadArgs) => Awaitable<TBeforeLoadContext | void>;
13
+ loader?: (args: LayoutLoaderArgs<TBeforeLoadContext>) => Awaitable<TLoaderData>;
14
+ }
15
+ export declare function createLayoutRouteOptions<TBeforeLoadContext extends AnyObject = EmptyObject, TLoaderData = void>({ fetchUserInfo, beforeLoad, loader, ...layoutProps }: LayoutRouteOptions<TBeforeLoadContext, TLoaderData>): {
16
+ beforeLoad: (args: LayoutBeforeLoadArgs) => Promise<TBeforeLoadContext>;
17
+ loader: (args: LayoutLoaderArgs<TBeforeLoadContext>) => Promise<TLoaderData | undefined>;
18
+ pendingComponent: () => import("@emotion/react/jsx-runtime").JSX.Element;
19
+ errorComponent: typeof Error;
20
+ notFoundComponent: typeof NotFound;
21
+ component: () => import("@emotion/react/jsx-runtime").JSX.Element;
22
+ staleTime: number;
23
+ shouldReload: boolean;
24
+ };
25
+ export {};
@@ -1,14 +1,15 @@
1
1
  import { MenuItem } from '@vef-framework-react/components';
2
2
  import { AuthTokens, UseBoundStoreWithPersist } from '@vef-framework-react/core';
3
3
  import { Except } from '@vef-framework-react/shared';
4
- import { UserInfo, UserMenu } from '../types';
4
+ import { AppCustomState, UserInfo, UserMenu } from '../types';
5
5
  export interface AppState {
6
6
  isAuthenticated: boolean;
7
7
  authTokens?: Readonly<AuthTokens>;
8
- userInfo?: Readonly<Except<UserInfo, "permTokens">>;
8
+ userInfo?: Readonly<Except<UserInfo, "permissionTokens">>;
9
9
  userMenuMap?: Readonly<Map<string, Readonly<UserMenu>>>;
10
10
  menuPathMap?: Readonly<Map<string, readonly string[]>>;
11
11
  menuItems?: ReadonlyArray<Readonly<MenuItem>>;
12
- permTokens?: Readonly<Set<string>>;
12
+ permissionTokens?: Readonly<Set<string>>;
13
+ custom: AppCustomState;
13
14
  }
14
15
  export declare const useAppStore: UseBoundStoreWithPersist<AppState>;
@@ -0,0 +1,3 @@
1
+ export { useAppStore, type AppState } from './app';
2
+ export { useTabStore, type Tab, type TabState } from './tab';
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
  }
@@ -1,4 +1,4 @@
1
- import { LiteralUnion, MaybeNull } from '@vef-framework-react/shared';
1
+ import { AnyObject, LiteralUnion, MaybeNull } from '@vef-framework-react/shared';
2
2
  export type Gender = "male" | "female" | "unknown";
3
3
  export type UserMenuType = LiteralUnion<"directory" | "menu" | "view" | "report", string>;
4
4
  export interface UserMenu {
@@ -19,6 +19,9 @@ export interface UserMenu {
19
19
  * @example
20
20
  * declare module "@vef-framework-react/starter" {
21
21
  * interface Register {
22
+ * appCustomState: {
23
+ * appId?: string;
24
+ * };
22
25
  * userDetails: {
23
26
  * department: string;
24
27
  * organization: string;
@@ -35,6 +38,9 @@ export interface UserMenu {
35
38
  */
36
39
  export interface Register {
37
40
  }
41
+ export type AppCustomState = Register extends {
42
+ appCustomState: infer T extends AnyObject;
43
+ } ? T : AnyObject;
38
44
  /**
39
45
  * Default shape of `UserInfo['details']` before projects augment `Register`.
40
46
  */
@@ -63,7 +69,7 @@ export interface UserInfo {
63
69
  name: string;
64
70
  gender: Gender;
65
71
  avatar?: MaybeNull<string>;
66
- permTokens: string[];
72
+ permissionTokens: string[];
67
73
  menus: UserMenu[];
68
74
  details: ResolvedUserDetails;
69
75
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vef-framework-react/starter",
3
3
  "type": "module",
4
- "version": "2.2.2",
4
+ "version": "2.4.0",
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.2.2",
68
- "@vef-framework-react/core": "2.2.2",
69
- "@vef-framework-react/shared": "2.2.2",
70
- "@vef-framework-react/hooks": "2.2.2"
64
+ "@tanstack/react-router": "^1.170.15",
65
+ "react": "^19.2.7",
66
+ "react-dom": "^19.2.7",
67
+ "@vef-framework-react/core": "2.4.0",
68
+ "@vef-framework-react/hooks": "2.4.0",
69
+ "@vef-framework-react/shared": "2.4.0",
70
+ "@vef-framework-react/components": "2.4.0"
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;