@lumal/core 0.0.1-beta
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.
- package/LICENSE +21 -0
- package/README.md +16 -0
- package/dist/LumalThemeSettingsPanel-BFkZzwEW.js +685 -0
- package/dist/LumalThemeSettingsPanel-C6aPhgUX.cjs +1 -0
- package/dist/_plugin-vue_export-helper-B3ysoDQm.js +8 -0
- package/dist/_plugin-vue_export-helper-BTmtiIyf.cjs +1 -0
- package/dist/auth.cjs +1 -0
- package/dist/auth.js +127 -0
- package/dist/components-DJiHYQQB.cjs +2 -0
- package/dist/components-DYmKh-eF.js +2206 -0
- package/dist/components.cjs +1 -0
- package/dist/components.js +3 -0
- package/dist/composables-C4twj5Ov.cjs +1 -0
- package/dist/composables-C9EuCUjj.js +130 -0
- package/dist/composables.cjs +1 -0
- package/dist/composables.js +148 -0
- package/dist/core.css +2 -0
- package/dist/dictionary-B7tsaVqB.js +19 -0
- package/dist/dictionary-ClEWtQCU.cjs +1 -0
- package/dist/dictionary.cjs +1 -0
- package/dist/dictionary.js +3 -0
- package/dist/directive-D-fB5qbY.js +16 -0
- package/dist/directive-DSVr7QvO.cjs +1 -0
- package/dist/directives.cjs +1 -0
- package/dist/directives.js +11 -0
- package/dist/index.cjs +1 -0
- package/dist/index.js +88 -0
- package/dist/layout-C8H9wuQa.js +2075 -0
- package/dist/layout-ZnyG9X3N.cjs +1 -0
- package/dist/layout.cjs +1 -0
- package/dist/layout.js +2 -0
- package/dist/permission-6sXtjGMS.cjs +1 -0
- package/dist/permission-CCkqvnWg.js +104 -0
- package/dist/permission.cjs +1 -0
- package/dist/permission.js +3 -0
- package/dist/request.cjs +1 -0
- package/dist/request.js +277 -0
- package/dist/router.cjs +1 -0
- package/dist/router.js +510 -0
- package/dist/src/app/createLumalAdmin.d.ts +4 -0
- package/dist/src/app/createLumalAdmin.d.ts.map +1 -0
- package/dist/src/app/default-components.d.ts +4 -0
- package/dist/src/app/default-components.d.ts.map +1 -0
- package/dist/src/app/index.d.ts +3 -0
- package/dist/src/app/index.d.ts.map +1 -0
- package/dist/src/app/types.d.ts +41 -0
- package/dist/src/app/types.d.ts.map +1 -0
- package/dist/src/auth/adapter.d.ts +3 -0
- package/dist/src/auth/adapter.d.ts.map +1 -0
- package/dist/src/auth/createAuthSession.d.ts +8 -0
- package/dist/src/auth/createAuthSession.d.ts.map +1 -0
- package/dist/src/auth/index.d.ts +8 -0
- package/dist/src/auth/index.d.ts.map +1 -0
- package/dist/src/auth/redirect.d.ts +8 -0
- package/dist/src/auth/redirect.d.ts.map +1 -0
- package/dist/src/auth/session-expired.d.ts +5 -0
- package/dist/src/auth/session-expired.d.ts.map +1 -0
- package/dist/src/auth/session.d.ts +10 -0
- package/dist/src/auth/session.d.ts.map +1 -0
- package/dist/src/auth/storage.d.ts +7 -0
- package/dist/src/auth/storage.d.ts.map +1 -0
- package/dist/src/auth/types.d.ts +68 -0
- package/dist/src/auth/types.d.ts.map +1 -0
- package/dist/src/components/crud-table/LumalCrudEditor.vue.d.ts +41 -0
- package/dist/src/components/crud-table/LumalCrudEditor.vue.d.ts.map +1 -0
- package/dist/src/components/crud-table/LumalCrudTable.vue.d.ts +151 -0
- package/dist/src/components/crud-table/LumalCrudTable.vue.d.ts.map +1 -0
- package/dist/src/components/crud-table/index.d.ts +4 -0
- package/dist/src/components/crud-table/index.d.ts.map +1 -0
- package/dist/src/components/crud-table/schema.d.ts +4 -0
- package/dist/src/components/crud-table/schema.d.ts.map +1 -0
- package/dist/src/components/crud-table/types.d.ts +165 -0
- package/dist/src/components/crud-table/types.d.ts.map +1 -0
- package/dist/src/components/crud-table/useCrudData.d.ts +20 -0
- package/dist/src/components/crud-table/useCrudData.d.ts.map +1 -0
- package/dist/src/components/crud-table/useCrudDialog.d.ts +19 -0
- package/dist/src/components/crud-table/useCrudDialog.d.ts.map +1 -0
- package/dist/src/components/crud-table/useCrudQuery.d.ts +18 -0
- package/dist/src/components/crud-table/useCrudQuery.d.ts.map +1 -0
- package/dist/src/components/crud-table/useCrudSelection.d.ts +9 -0
- package/dist/src/components/crud-table/useCrudSelection.d.ts.map +1 -0
- package/dist/src/components/info-table/LumalInfoTable.vue.d.ts +12 -0
- package/dist/src/components/info-table/LumalInfoTable.vue.d.ts.map +1 -0
- package/dist/src/components/info-table/index.d.ts +3 -0
- package/dist/src/components/info-table/index.d.ts.map +1 -0
- package/dist/src/components/info-table/types.d.ts +15 -0
- package/dist/src/components/info-table/types.d.ts.map +1 -0
- package/dist/src/components/page/LumalPage.vue.d.ts +36 -0
- package/dist/src/components/page/LumalPage.vue.d.ts.map +1 -0
- package/dist/src/components/page/index.d.ts +2 -0
- package/dist/src/components/page/index.d.ts.map +1 -0
- package/dist/src/components/page-layout/LumalPageLayout.vue.d.ts +38 -0
- package/dist/src/components/page-layout/LumalPageLayout.vue.d.ts.map +1 -0
- package/dist/src/components/page-layout/index.d.ts +3 -0
- package/dist/src/components/page-layout/index.d.ts.map +1 -0
- package/dist/src/components/page-layout/types.d.ts +9 -0
- package/dist/src/components/page-layout/types.d.ts.map +1 -0
- package/dist/src/components/pagination/LumalPagination.vue.d.ts +31 -0
- package/dist/src/components/pagination/LumalPagination.vue.d.ts.map +1 -0
- package/dist/src/components/pagination/index.d.ts +3 -0
- package/dist/src/components/pagination/index.d.ts.map +1 -0
- package/dist/src/components/pagination/types.d.ts +5 -0
- package/dist/src/components/pagination/types.d.ts.map +1 -0
- package/dist/src/components/schema-form/LumalSchemaForm.vue.d.ts +78 -0
- package/dist/src/components/schema-form/LumalSchemaForm.vue.d.ts.map +1 -0
- package/dist/src/components/schema-form/index.d.ts +4 -0
- package/dist/src/components/schema-form/index.d.ts.map +1 -0
- package/dist/src/components/schema-form/normalize.d.ts +11 -0
- package/dist/src/components/schema-form/normalize.d.ts.map +1 -0
- package/dist/src/components/schema-form/types.d.ts +103 -0
- package/dist/src/components/schema-form/types.d.ts.map +1 -0
- package/dist/src/components/schema-form/types.type-test.d.ts +2 -0
- package/dist/src/components/schema-form/types.type-test.d.ts.map +1 -0
- package/dist/src/components/schema-table/LumalSchemaTable.vue.d.ts +108 -0
- package/dist/src/components/schema-table/LumalSchemaTable.vue.d.ts.map +1 -0
- package/dist/src/components/schema-table/LumalSchemaTableCell.vue.d.ts +8 -0
- package/dist/src/components/schema-table/LumalSchemaTableCell.vue.d.ts.map +1 -0
- package/dist/src/components/schema-table/cell.d.ts +13 -0
- package/dist/src/components/schema-table/cell.d.ts.map +1 -0
- package/dist/src/components/schema-table/index.d.ts +6 -0
- package/dist/src/components/schema-table/index.d.ts.map +1 -0
- package/dist/src/components/schema-table/normalize.d.ts +8 -0
- package/dist/src/components/schema-table/normalize.d.ts.map +1 -0
- package/dist/src/components/schema-table/types.d.ts +66 -0
- package/dist/src/components/schema-table/types.d.ts.map +1 -0
- package/dist/src/components/schema-table/types.type-test.d.ts +2 -0
- package/dist/src/components/schema-table/types.type-test.d.ts.map +1 -0
- package/dist/src/composables/index.d.ts +11 -0
- package/dist/src/composables/index.d.ts.map +1 -0
- package/dist/src/composables/useConfirmAction.d.ts +21 -0
- package/dist/src/composables/useConfirmAction.d.ts.map +1 -0
- package/dist/src/composables/useFullscreen.d.ts +14 -0
- package/dist/src/composables/useFullscreen.d.ts.map +1 -0
- package/dist/src/composables/usePagination.d.ts +36 -0
- package/dist/src/composables/usePagination.d.ts.map +1 -0
- package/dist/src/composables/usePersistentState.d.ts +9 -0
- package/dist/src/composables/usePersistentState.d.ts.map +1 -0
- package/dist/src/composables/useSelection.d.ts +20 -0
- package/dist/src/composables/useSelection.d.ts.map +1 -0
- package/dist/src/dictionary/composables.d.ts +15 -0
- package/dist/src/dictionary/composables.d.ts.map +1 -0
- package/dist/src/dictionary/context.d.ts +10 -0
- package/dist/src/dictionary/context.d.ts.map +1 -0
- package/dist/src/dictionary/fetcher.d.ts +4 -0
- package/dist/src/dictionary/fetcher.d.ts.map +1 -0
- package/dist/src/dictionary/index.d.ts +8 -0
- package/dist/src/dictionary/index.d.ts.map +1 -0
- package/dist/src/dictionary/normalize.d.ts +5 -0
- package/dist/src/dictionary/normalize.d.ts.map +1 -0
- package/dist/src/dictionary/store.d.ts +4 -0
- package/dist/src/dictionary/store.d.ts.map +1 -0
- package/dist/src/dictionary/types.d.ts +53 -0
- package/dist/src/dictionary/types.d.ts.map +1 -0
- package/dist/src/directives/index.d.ts +16 -0
- package/dist/src/directives/index.d.ts.map +1 -0
- package/dist/src/exports/components.d.ts +16 -0
- package/dist/src/exports/components.d.ts.map +1 -0
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/layout/LumalBreadcrumb.vue.d.ts +28 -0
- package/dist/src/layout/LumalBreadcrumb.vue.d.ts.map +1 -0
- package/dist/src/layout/LumalContent.vue.d.ts +18 -0
- package/dist/src/layout/LumalContent.vue.d.ts.map +1 -0
- package/dist/src/layout/LumalGlobalSearch.vue.d.ts +25 -0
- package/dist/src/layout/LumalGlobalSearch.vue.d.ts.map +1 -0
- package/dist/src/layout/LumalHeader.vue.d.ts +43 -0
- package/dist/src/layout/LumalHeader.vue.d.ts.map +1 -0
- package/dist/src/layout/LumalLayout.vue.d.ts +98 -0
- package/dist/src/layout/LumalLayout.vue.d.ts.map +1 -0
- package/dist/src/layout/LumalMenuBadge.vue.d.ts +16 -0
- package/dist/src/layout/LumalMenuBadge.vue.d.ts.map +1 -0
- package/dist/src/layout/LumalRouterView.vue.d.ts +24 -0
- package/dist/src/layout/LumalRouterView.vue.d.ts.map +1 -0
- package/dist/src/layout/LumalSidebar.vue.d.ts +29 -0
- package/dist/src/layout/LumalSidebar.vue.d.ts.map +1 -0
- package/dist/src/layout/LumalSidebarMenuItem.vue.d.ts +16 -0
- package/dist/src/layout/LumalSidebarMenuItem.vue.d.ts.map +1 -0
- package/dist/src/layout/LumalTabs.vue.d.ts +76 -0
- package/dist/src/layout/LumalTabs.vue.d.ts.map +1 -0
- package/dist/src/layout/LumalTopNav.vue.d.ts +27 -0
- package/dist/src/layout/LumalTopNav.vue.d.ts.map +1 -0
- package/dist/src/layout/LumalTopNavMenuItem.vue.d.ts +15 -0
- package/dist/src/layout/LumalTopNavMenuItem.vue.d.ts.map +1 -0
- package/dist/src/layout/index.d.ts +18 -0
- package/dist/src/layout/index.d.ts.map +1 -0
- package/dist/src/layout/state/menu-layout.d.ts +35 -0
- package/dist/src/layout/state/menu-layout.d.ts.map +1 -0
- package/dist/src/layout/state/tab-storage.d.ts +51 -0
- package/dist/src/layout/state/tab-storage.d.ts.map +1 -0
- package/dist/src/layout/state/tab-strategy.d.ts +73 -0
- package/dist/src/layout/state/tab-strategy.d.ts.map +1 -0
- package/dist/src/layout/types.d.ts +29 -0
- package/dist/src/layout/types.d.ts.map +1 -0
- package/dist/src/permission/LumalAccessControl.vue.d.ts +26 -0
- package/dist/src/permission/LumalAccessControl.vue.d.ts.map +1 -0
- package/dist/src/permission/context.d.ts +6 -0
- package/dist/src/permission/context.d.ts.map +1 -0
- package/dist/src/permission/directive.d.ts +3 -0
- package/dist/src/permission/directive.d.ts.map +1 -0
- package/dist/src/permission/guard.d.ts +4 -0
- package/dist/src/permission/guard.d.ts.map +1 -0
- package/dist/src/permission/helpers.d.ts +4 -0
- package/dist/src/permission/helpers.d.ts.map +1 -0
- package/dist/src/permission/index.d.ts +8 -0
- package/dist/src/permission/index.d.ts.map +1 -0
- package/dist/src/permission/store.d.ts +4 -0
- package/dist/src/permission/store.d.ts.map +1 -0
- package/dist/src/permission/types.d.ts +67 -0
- package/dist/src/permission/types.d.ts.map +1 -0
- package/dist/src/request/cache.d.ts +8 -0
- package/dist/src/request/cache.d.ts.map +1 -0
- package/dist/src/request/client.d.ts +4 -0
- package/dist/src/request/client.d.ts.map +1 -0
- package/dist/src/request/error.d.ts +19 -0
- package/dist/src/request/error.d.ts.map +1 -0
- package/dist/src/request/index.d.ts +8 -0
- package/dist/src/request/index.d.ts.map +1 -0
- package/dist/src/request/standard.d.ts +61 -0
- package/dist/src/request/standard.d.ts.map +1 -0
- package/dist/src/request/types.d.ts +102 -0
- package/dist/src/request/types.d.ts.map +1 -0
- package/dist/src/router/index.d.ts +36 -0
- package/dist/src/router/index.d.ts.map +1 -0
- package/dist/src/router/types.d.ts +231 -0
- package/dist/src/router/types.d.ts.map +1 -0
- package/dist/src/theme/LumalThemeSettingsPanel.vue.d.ts +33 -0
- package/dist/src/theme/LumalThemeSettingsPanel.vue.d.ts.map +1 -0
- package/dist/src/theme/dom.d.ts +6 -0
- package/dist/src/theme/dom.d.ts.map +1 -0
- package/dist/src/theme/index.d.ts +11 -0
- package/dist/src/theme/index.d.ts.map +1 -0
- package/dist/src/theme/preferences-store.d.ts +4 -0
- package/dist/src/theme/preferences-store.d.ts.map +1 -0
- package/dist/src/theme/preferences.d.ts +18 -0
- package/dist/src/theme/preferences.d.ts.map +1 -0
- package/dist/src/theme/store.d.ts +3 -0
- package/dist/src/theme/store.d.ts.map +1 -0
- package/dist/src/theme/theme-color-presets.d.ts +13 -0
- package/dist/src/theme/theme-color-presets.d.ts.map +1 -0
- package/dist/src/theme/tokens.d.ts +5 -0
- package/dist/src/theme/tokens.d.ts.map +1 -0
- package/dist/src/theme/types.d.ts +103 -0
- package/dist/src/theme/types.d.ts.map +1 -0
- package/dist/src/utils/clone.d.ts +12 -0
- package/dist/src/utils/clone.d.ts.map +1 -0
- package/dist/src/utils/color.d.ts +6 -0
- package/dist/src/utils/color.d.ts.map +1 -0
- package/dist/src/utils/display.d.ts +10 -0
- package/dist/src/utils/display.d.ts.map +1 -0
- package/dist/src/utils/download.d.ts +10 -0
- package/dist/src/utils/download.d.ts.map +1 -0
- package/dist/src/utils/index.d.ts +12 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/object.d.ts +6 -0
- package/dist/src/utils/object.d.ts.map +1 -0
- package/dist/src/utils/path.d.ts +6 -0
- package/dist/src/utils/path.d.ts.map +1 -0
- package/dist/src/utils/query.d.ts +9 -0
- package/dist/src/utils/query.d.ts.map +1 -0
- package/dist/src/utils/storage.d.ts +7 -0
- package/dist/src/utils/storage.d.ts.map +1 -0
- package/dist/src/utils/types.d.ts +13 -0
- package/dist/src/utils/types.d.ts.map +1 -0
- package/dist/src/utils/with-install.d.ts +11 -0
- package/dist/src/utils/with-install.d.ts.map +1 -0
- package/dist/theme.cjs +1 -0
- package/dist/theme.js +187 -0
- package/dist/utils.cjs +1 -0
- package/dist/utils.js +130 -0
- package/package.json +124 -0
- package/theme-chalk/index.scss +70 -0
|
@@ -0,0 +1 @@
|
|
|
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));const c=require("./_plugin-vue_export-helper-BTmtiIyf.cjs");let l=require("vue"),u=require("@lumal/icons-vue"),d=require("element-plus"),f=require("vue-router"),p=require("sortablejs");p=s(p,1);function m(e,t){return e.hidden?!1:e.path===t?!0:e.children?.some(e=>m(e,t))??!1}function h(e,t){for(let n of e){if(n.hidden)continue;if(n.path===t)return n;let e=h(n.children??[],t);if(e)return e}}function g(e,t){for(let n of e){if(n.hidden)continue;if(n.path===t)return[n];let e=g(n.children??[],t);if(e.length>0)return[n,...e]}return[]}function _(e){if(!e)return``;if(e.redirect)return e.redirect;let t=e.children?.filter(e=>!e.hidden)??[];return t.length===0?e.path:_(t[0])}function v(e,t){return e.find(e=>m(e,t))?.path??``}function y(e){let{activeTopMenuPath:t=``,layout:n}=e,r=e.menus.filter(e=>!e.hidden);return n===`sidebar-nav`?{sidebarMenus:r,topMenus:[]}:n===`top-nav`?{sidebarMenus:[],topMenus:r}:{sidebarMenus:(r.find(e=>e.path===t)??r.find(e=>m(e,t)))?.children?.filter(e=>!e.hidden)??[],topMenus:r}}var b={key:0,class:`lumal-breadcrumb`,"aria-label":`面包屑`},x={class:`lumal-breadcrumb__list`},S={key:1,class:`lumal-breadcrumb__current`,"aria-current":`page`},C=[`onClick`],w=(0,l.defineComponent)({__name:`LumalBreadcrumb`,props:{activeMenuPath:{default:``},activePath:{default:``},hideOnlyOne:{type:Boolean,default:!1},homePath:{default:``},homeTitle:{default:`首页`},menus:{default:()=>[]},showHome:{type:Boolean,default:!0},showIcon:{type:Boolean,default:!0}},emits:[`select`],setup(e,{emit:t}){let n=e,r=t,i=(0,l.inject)(f.routeLocationKey,void 0);function a(e){return{icon:e.icon,path:e.path,title:e.title}}let o=(0,l.computed)(()=>{let e=i?.matched??[];return e.flatMap((t,n)=>{let r=typeof t.meta.title==`string`?t.meta.title.trim():``;if(!r||t.meta.hideInBreadcrumb===!0)return[];let a=n===e.length-1;return[{icon:typeof t.meta.icon==`string`?t.meta.icon:void 0,path:a?i?.path??t.path:t.path,title:r}]})}),s=(0,l.computed)(()=>{let e=g(n.menus,n.activePath),t=(e.length>0?e:g(n.menus,n.activeMenuPath)).map(a),r=typeof i?.meta.title==`string`?i.meta.title:``,o=typeof i?.meta.icon==`string`?i.meta.icon:void 0,s=i?.meta.hideInBreadcrumb===!0;return s&&t.at(-1)?.path===n.activePath&&t.pop(),r&&!s&&n.activePath&&n.activePath===i?.path&&!t.some(e=>e.path===n.activePath)&&t.push({icon:o,path:n.activePath,title:r}),t}),c=(0,l.computed)(()=>o.value.length>0?o.value:s.value),d=(0,l.computed)(()=>{let e=n.homePath?g(n.menus,n.homePath).at(-1):void 0,t=n.menus.find(e=>!e.hidden),r=n.homePath||_(t);if(r)return{icon:e?.icon??t?.icon,path:r,title:e?.title??n.homeTitle}}),p=(0,l.computed)(()=>{let e=[...c.value],t=d.value;return n.showHome&&t&&!e.some(e=>e.path===t.path)&&e.unshift(t),e}),m=(0,l.computed)(()=>p.value.length>0&&!(n.hideOnlyOne&&c.value.length<=1));return(t,n)=>m.value?((0,l.openBlock)(),(0,l.createElementBlock)(`nav`,b,[(0,l.createElementVNode)(`ol`,x,[((0,l.openBlock)(!0),(0,l.createElementBlock)(l.Fragment,null,(0,l.renderList)(p.value,(t,n)=>((0,l.openBlock)(),(0,l.createElementBlock)(`li`,{key:`${t.path}:${n}`,class:`lumal-breadcrumb__item`},[n>0?((0,l.openBlock)(),(0,l.createBlock)((0,l.unref)(u.LumalIcon),{key:0,class:`lumal-breadcrumb__separator`,name:`lumal:chevron-right`,size:14})):(0,l.createCommentVNode)(``,!0),n===p.value.length-1?((0,l.openBlock)(),(0,l.createElementBlock)(`span`,S,[e.showIcon&&t.icon?((0,l.openBlock)(),(0,l.createBlock)((0,l.unref)(u.LumalIcon),{key:0,name:t.icon,size:15},null,8,[`name`])):(0,l.createCommentVNode)(``,!0),(0,l.createElementVNode)(`span`,null,(0,l.toDisplayString)(t.title),1)])):((0,l.openBlock)(),(0,l.createElementBlock)(`button`,{key:2,class:`lumal-breadcrumb__link`,type:`button`,onClick:e=>r(`select`,t.path)},[e.showIcon&&t.icon?((0,l.openBlock)(),(0,l.createBlock)((0,l.unref)(u.LumalIcon),{key:0,name:t.icon,size:15},null,8,[`name`])):(0,l.createCommentVNode)(``,!0),(0,l.createElementVNode)(`span`,null,(0,l.toDisplayString)(t.title),1)],8,C))]))),128))])])):(0,l.createCommentVNode)(``,!0)}}),T=c.t(w,[[`__scopeId`,`data-v-53a036d9`]]),ee=(0,l.defineComponent)({__name:`LumalContent`,setup(e,{expose:t}){let n=(0,l.useTemplateRef)(`contentRef`);return t({getContentElement:()=>n.value?.$el,getContentInstance:()=>n.value}),(e,t)=>((0,l.openBlock)(),(0,l.createBlock)((0,l.unref)(d.ElMain),{ref_key:`contentRef`,ref:n,class:`lumal-content`},{default:(0,l.withCtx)(()=>[(0,l.renderSlot)(e.$slots,`default`,{},void 0,!0)]),_:3},512))}}),E=c.t(ee,[[`__scopeId`,`data-v-50b337c5`]]),te={class:`lumal-global-search`},D={key:0},O=[`aria-labelledby`],ne={class:`lumal-global-search__header`},re=[`id`],k={class:`lumal-global-search__input-wrap`},A=[`aria-activedescendant`,`aria-controls`,`placeholder`],j=[`id`],M=[`id`,`aria-selected`],N=[`onMouseenter`,`onClick`],P={key:0,class:`lumal-global-search__empty`,role:`status`},F=`<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="11" cy="11" r="7" stroke="currentColor" stroke-width="1.8"/><path d="m16.2 16.2 4 4" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/></svg>`,ie=(0,l.defineComponent)({__name:`LumalGlobalSearch`,props:{maxResults:{default:12},menus:{default:()=>[]},placeholder:{default:`搜索菜单`},shortcut:{type:Boolean,default:!0}},emits:[`select`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=`lumal-global-search-${(0,l.useId)()}`,o=(0,l.useTemplateRef)(`inputRef`),s=(0,l.useTemplateRef)(`triggerRef`),c=(0,l.ref)(!1),d=(0,l.ref)(``),f=(0,l.ref)(0);function p(e,t=[]){return e.flatMap(e=>{if(e.hidden)return[];let n=[...t,e.title];return[{item:e,trail:n},...p(e.children??[],n)]})}let m=(0,l.computed)(()=>p(r.menus)),h=(0,l.computed)(()=>{let e=d.value.trim().toLocaleLowerCase();return(e?m.value.filter(({item:t,trail:n})=>`${n.join(` `)} ${t.path}`.toLocaleLowerCase().includes(e)):m.value).slice(0,Math.max(1,r.maxResults))}),g=(0,l.computed)(()=>h.value[f.value]?`${a}-option-${f.value}`:void 0);function _(){c.value=!0,d.value=``,f.value=0,(0,l.nextTick)(()=>o.value?.focus())}function v(e=!0){c.value=!1,e&&(0,l.nextTick)(()=>s.value?.focus())}function y(e){e&&(i(`select`,e.item.path,e.item),v())}function b(e){if(e.key===`Escape`){e.preventDefault(),v();return}if(h.value.length!==0){if(e.key===`ArrowDown`||e.key===`ArrowUp`){e.preventDefault();let t=e.key===`ArrowDown`?1:-1;f.value=(f.value+t+h.value.length)%h.value.length;return}e.key===`Enter`&&(e.preventDefault(),y(h.value[f.value]))}}function x(e){!r.shortcut||e.altKey||e.shiftKey||e.key.toLocaleLowerCase()!==`k`||!e.ctrlKey&&!e.metaKey||(e.preventDefault(),c.value?v(!1):_())}return(0,l.watch)(h,()=>{f.value=0}),(0,l.onMounted)(()=>{window.addEventListener(`keydown`,x)}),(0,l.onBeforeUnmount)(()=>{window.removeEventListener(`keydown`,x)}),t({close:v,open:_}),(t,n)=>((0,l.openBlock)(),(0,l.createElementBlock)(`div`,te,[(0,l.createElementVNode)(`button`,{ref_key:`triggerRef`,ref:s,class:`lumal-global-search__trigger`,type:`button`,"aria-label":`打开全局搜索`,title:`全局搜索`,onClick:_},[(0,l.createVNode)((0,l.unref)(u.LumalIcon),{icon:F,size:17}),n[3]||=(0,l.createElementVNode)(`span`,{class:`lumal-global-search__trigger-label`},`搜索`,-1),e.shortcut?((0,l.openBlock)(),(0,l.createElementBlock)(`kbd`,D,`Ctrl K`)):(0,l.createCommentVNode)(``,!0)],512),((0,l.openBlock)(),(0,l.createBlock)(l.Teleport,{to:`body`},[c.value?((0,l.openBlock)(),(0,l.createElementBlock)(`div`,{key:0,class:`lumal-global-search__backdrop`,onMousedown:n[2]||=(0,l.withModifiers)(e=>v(),[`self`])},[(0,l.createElementVNode)(`section`,{class:`lumal-global-search__dialog`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`${a}-title`},[(0,l.createElementVNode)(`header`,ne,[(0,l.createElementVNode)(`h2`,{id:`${a}-title`},` 全局搜索 `,8,re),(0,l.createElementVNode)(`button`,{type:`button`,"aria-label":`关闭全局搜索`,title:`关闭`,onClick:n[0]||=e=>v()},[(0,l.createVNode)((0,l.unref)(u.LumalIcon),{name:`lumal:close`,size:17})])]),(0,l.createElementVNode)(`label`,k,[n[4]||=(0,l.createElementVNode)(`span`,{class:`lumal-global-search__sr-only`},`搜索菜单`,-1),(0,l.createVNode)((0,l.unref)(u.LumalIcon),{icon:F,size:18}),(0,l.withDirectives)((0,l.createElementVNode)(`input`,{ref_key:`inputRef`,ref:o,"onUpdate:modelValue":n[1]||=e=>d.value=e,role:`combobox`,autocomplete:`off`,"aria-activedescendant":g.value,"aria-autocomplete":`list`,"aria-controls":`${a}-results`,"aria-expanded":`true`,placeholder:e.placeholder,onKeydown:b},null,40,A),[[l.vModelText,d.value]])]),(0,l.createElementVNode)(`ul`,{id:`${a}-results`,class:`lumal-global-search__results`,role:`listbox`},[((0,l.openBlock)(!0),(0,l.createElementBlock)(l.Fragment,null,(0,l.renderList)(h.value,(e,t)=>((0,l.openBlock)(),(0,l.createElementBlock)(`li`,{id:`${a}-option-${t}`,key:e.item.path,role:`option`,"aria-selected":t===f.value},[(0,l.createElementVNode)(`button`,{type:`button`,class:(0,l.normalizeClass)({"is-active":t===f.value}),onMouseenter:e=>f.value=t,onClick:t=>y(e)},[e.item.icon?((0,l.openBlock)(),(0,l.createBlock)((0,l.unref)(u.LumalIcon),{key:0,name:e.item.icon,size:18},null,8,[`name`])):(0,l.createCommentVNode)(``,!0),(0,l.createElementVNode)(`span`,null,[(0,l.createElementVNode)(`strong`,null,(0,l.toDisplayString)(e.item.title),1),(0,l.createElementVNode)(`small`,null,(0,l.toDisplayString)(e.trail.join(` / `)),1)]),(0,l.createElementVNode)(`code`,null,(0,l.toDisplayString)(e.item.path),1)],42,N)],8,M))),128))],8,j),h.value.length===0?((0,l.openBlock)(),(0,l.createElementBlock)(`p`,P,` 未找到匹配菜单,请尝试其他关键词 `)):(0,l.createCommentVNode)(``,!0)],8,O)],32)):(0,l.createCommentVNode)(``,!0)]))]))}}),ae=c.t(ie,[[`__scopeId`,`data-v-a433539f`]]),I={class:`lumal-header__left`},L={key:0,class:`lumal-header__title`},R={key:0,class:`lumal-header__breadcrumb`},z={key:1,class:`lumal-header__navigation`,"aria-label":`主导航`},B={key:2,class:`lumal-header__actions`},V=(0,l.defineComponent)({__name:`LumalHeader`,props:{title:{},collapsed:{type:Boolean,default:!1},height:{default:`50px`},mobileOnlyToggle:{type:Boolean,default:!1},sidebarEnabled:{type:Boolean,default:!0},toggleAfterTitle:{type:Boolean,default:!1}},emits:[`toggleCollapse`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=(0,l.useTemplateRef)(`headerRef`),o=(0,l.computed)(()=>r.collapsed?`展开侧边栏`:`收起侧边栏`);function s(){i(`toggleCollapse`)}return t({getHeaderElement:()=>a.value?.$el,getHeaderInstance:()=>a.value}),(t,n)=>((0,l.openBlock)(),(0,l.createBlock)((0,l.unref)(d.ElHeader),{ref_key:`headerRef`,ref:a,class:`lumal-header`,height:e.height},{default:(0,l.withCtx)(()=>[(0,l.createElementVNode)(`div`,I,[(0,l.renderSlot)(t.$slots,`logo`,{},()=>[e.title?((0,l.openBlock)(),(0,l.createElementBlock)(`span`,L,(0,l.toDisplayString)(e.title),1)):(0,l.createCommentVNode)(``,!0)],!0),e.sidebarEnabled?((0,l.openBlock)(),(0,l.createBlock)((0,l.unref)(d.ElButton),{key:0,class:(0,l.normalizeClass)([`lumal-header__toggle`,{"is-after-title":e.toggleAfterTitle,"is-mobile-only":e.mobileOnlyToggle}]),text:``,"aria-label":o.value,"data-action":`toggle-sidebar`,onClick:s},{default:(0,l.withCtx)(()=>[...n[0]||=[(0,l.createElementVNode)(`svg`,{"aria-hidden":`true`,viewBox:`0 0 24 24`},[(0,l.createElementVNode)(`path`,{d:`M4 7h16M4 12h16M4 17h16`})],-1)]]),_:1},8,[`class`,`aria-label`])):(0,l.createCommentVNode)(``,!0)]),t.$slots.breadcrumb?((0,l.openBlock)(),(0,l.createElementBlock)(`div`,R,[(0,l.renderSlot)(t.$slots,`breadcrumb`,{},void 0,!0)])):(0,l.createCommentVNode)(``,!0),t.$slots.navigation?((0,l.openBlock)(),(0,l.createElementBlock)(`nav`,z,[(0,l.renderSlot)(t.$slots,`navigation`,{},void 0,!0)])):(0,l.createCommentVNode)(``,!0),t.$slots.actions?((0,l.openBlock)(),(0,l.createElementBlock)(`div`,B,[(0,l.renderSlot)(t.$slots,`actions`,{},void 0,!0)])):(0,l.createCommentVNode)(``,!0)]),_:3},8,[`height`]))}}),oe=c.t(V,[[`__scopeId`,`data-v-e9574860`]]),H=[`aria-label`],U={key:0,"aria-hidden":`true`},W=(0,l.defineComponent)({__name:`LumalMenuBadge`,props:{badge:{default:``},label:{default:`菜单`},tone:{default:`primary`},type:{default:`text`}},setup(e){let t=e,n=(0,l.computed)(()=>t.type===`dot`||t.badge===0||!!t.badge),r=(0,l.computed)(()=>t.type===`dot`?`${t.label}有新内容`:`${t.label}:${t.badge}`);return(t,i)=>n.value?((0,l.openBlock)(),(0,l.createElementBlock)(`span`,{key:0,class:(0,l.normalizeClass)([`lumal-menu-badge`,[`is-${e.tone}`,{"is-dot":e.type===`dot`}]]),role:`status`,"aria-label":r.value},[e.type===`text`?((0,l.openBlock)(),(0,l.createElementBlock)(`span`,U,(0,l.toDisplayString)(e.badge),1)):(0,l.createCommentVNode)(``,!0)],10,H)):(0,l.createCommentVNode)(``,!0)}}),G=c.t(W,[[`__scopeId`,`data-v-0ca73e4b`]]),K={key:0,class:`lumal-sidebar-menu-item__icon`,"aria-hidden":`true`},q={class:`lumal-sidebar-menu-item__label`},J={class:`lumal-sidebar-menu-item__title`},Y={key:1,class:`lumal-sidebar-menu-item__external`,"aria-hidden":`true`},X=[`title`],se={key:0,class:`lumal-sidebar-menu-item__icon`,"aria-hidden":`true`},ce={class:`lumal-sidebar-menu-item__label`},le={class:`lumal-sidebar-menu-item__title`},Z={key:0,class:`lumal-sidebar-menu-item__icon`,"aria-hidden":`true`},Q={class:`lumal-sidebar-menu-item__label`},ue={class:`lumal-sidebar-menu-item__title`},de={key:1,class:`lumal-sidebar-menu-item__external`,"aria-hidden":`true`},fe=(0,l.defineComponent)({__name:`LumalSidebarMenuItem`,props:{activePath:{},collapsed:{type:Boolean},depth:{},item:{}},emits:[`select`],setup(e,{emit:t}){let n=e,r=t,i=(0,l.computed)(()=>n.item.children?.filter(e=>!e.hidden)??[]),a=(0,l.computed)(()=>i.value.length>0),o=(0,l.computed)(()=>!!n.item.externalLink&&n.item.externalTarget!==`_self`);function s(e){r(`select`,e)}return(t,n)=>{let r=(0,l.resolveComponent)(`LumalSidebarMenuItem`,!0);return a.value?((0,l.openBlock)(),(0,l.createBlock)((0,l.unref)(d.ElSubMenu),{key:0,class:`lumal-sidebar-menu-item`,index:e.item.path,title:e.collapsed?e.item.title:void 0},{title:(0,l.withCtx)(()=>[e.item.icon?((0,l.openBlock)(),(0,l.createElementBlock)(`i`,K,[(0,l.createVNode)((0,l.unref)(u.LumalIcon),{name:e.item.icon,size:16},null,8,[`name`])])):(0,l.createCommentVNode)(``,!0),(0,l.createElementVNode)(`span`,q,[(0,l.createElementVNode)(`span`,J,(0,l.toDisplayString)(e.item.title),1),(0,l.createVNode)(G,{badge:e.item.badge,label:e.item.title,tone:e.item.badgeTone,type:e.item.badgeType},null,8,[`badge`,`label`,`tone`,`type`])]),e.item.externalLink?((0,l.openBlock)(),(0,l.createElementBlock)(`span`,Y,`↗`)):(0,l.createCommentVNode)(``,!0)]),default:(0,l.withCtx)(()=>[((0,l.openBlock)(!0),(0,l.createElementBlock)(l.Fragment,null,(0,l.renderList)(i.value,t=>((0,l.openBlock)(),(0,l.createBlock)(r,{key:t.path,item:t,"active-path":e.activePath,collapsed:e.collapsed,depth:(e.depth??0)+1,onSelect:s},null,8,[`item`,`active-path`,`collapsed`,`depth`]))),128))]),_:1},8,[`index`,`title`])):o.value?((0,l.openBlock)(),(0,l.createElementBlock)(`li`,{key:1,class:`el-menu-item lumal-sidebar-menu-item lumal-sidebar-menu-item--external`,role:`menuitem`,tabindex:`-1`,title:e.collapsed?e.item.title:void 0,onClick:n[0]||=t=>s(e.item.path)},[e.item.icon?((0,l.openBlock)(),(0,l.createElementBlock)(`i`,se,[(0,l.createVNode)((0,l.unref)(u.LumalIcon),{name:e.item.icon,size:16},null,8,[`name`])])):(0,l.createCommentVNode)(``,!0),(0,l.createElementVNode)(`span`,ce,[(0,l.createElementVNode)(`span`,le,(0,l.toDisplayString)(e.item.title),1),(0,l.createVNode)(G,{badge:e.item.badge,label:e.item.title,tone:e.item.badgeTone,type:e.item.badgeType},null,8,[`badge`,`label`,`tone`,`type`])]),n[2]||=(0,l.createElementVNode)(`span`,{class:`lumal-sidebar-menu-item__external`,"aria-hidden":`true`},`↗`,-1)],8,X)):((0,l.openBlock)(),(0,l.createBlock)((0,l.unref)(d.ElMenuItem),{key:2,class:`lumal-sidebar-menu-item`,index:e.item.path,title:e.collapsed?e.item.title:void 0,onClick:n[1]||=t=>s(e.item.path)},{default:(0,l.withCtx)(()=>[e.item.icon?((0,l.openBlock)(),(0,l.createElementBlock)(`i`,Z,[(0,l.createVNode)((0,l.unref)(u.LumalIcon),{name:e.item.icon,size:16},null,8,[`name`])])):(0,l.createCommentVNode)(``,!0),(0,l.createElementVNode)(`span`,Q,[(0,l.createElementVNode)(`span`,ue,(0,l.toDisplayString)(e.item.title),1),(0,l.createVNode)(G,{badge:e.item.badge,label:e.item.title,tone:e.item.badgeTone,type:e.item.badgeType},null,8,[`badge`,`label`,`tone`,`type`])]),e.item.externalLink?((0,l.openBlock)(),(0,l.createElementBlock)(`span`,de,`↗`)):(0,l.createCommentVNode)(``,!0)]),_:1},8,[`index`,`title`]))}}}),pe=c.t(fe,[[`__scopeId`,`data-v-a5f8c946`]]),$=(0,l.defineComponent)({__name:`LumalSidebar`,props:{menus:{default:()=>[]},activePath:{default:``},ariaLabel:{default:`侧边导航`},collapsed:{type:Boolean,default:!1},width:{default:`280px`},collapsedWidth:{default:`64px`}},emits:[`select`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=(0,l.useTemplateRef)(`asideRef`),o=(0,l.computed)(()=>r.collapsed?r.collapsedWidth:r.width);function s(e){i(`select`,e)}return t({getAsideElement:()=>a.value?.$el,getAsideInstance:()=>a.value}),(t,n)=>((0,l.openBlock)(),(0,l.createBlock)((0,l.unref)(d.ElAside),{ref_key:`asideRef`,ref:a,class:`lumal-sidebar`,width:o.value,"aria-label":e.ariaLabel},{default:(0,l.withCtx)(()=>[(0,l.createVNode)((0,l.unref)(d.ElScrollbar),{class:`lumal-sidebar__scrollbar`},{default:(0,l.withCtx)(()=>[(0,l.createVNode)((0,l.unref)(d.ElMenu),{class:`lumal-sidebar__menu`,collapse:e.collapsed,"default-active":e.activePath},{default:(0,l.withCtx)(()=>[((0,l.openBlock)(!0),(0,l.createElementBlock)(l.Fragment,null,(0,l.renderList)(e.menus.filter(e=>!e.hidden),t=>((0,l.openBlock)(),(0,l.createBlock)(pe,{key:t.path,item:t,"active-path":e.activePath,collapsed:e.collapsed,depth:0,onSelect:s},null,8,[`item`,`active-path`,`collapsed`]))),128))]),_:1},8,[`collapse`,`default-active`])]),_:1})]),_:1},8,[`width`,`aria-label`]))}}),me=c.t($,[[`__scopeId`,`data-v-59a9bda5`]]),he=[`disabled`],ge=[`onContextmenu`],_e=[`aria-selected`,`tabindex`,`onClick`,`onKeydown`,`onMousedown`],ve=[`title`],ye=[`aria-label`,`onClick`],be=[`disabled`],xe=[`disabled`],Se=[`aria-expanded`],Ce=[`aria-label`],we=[`disabled`],Te=[`disabled`],Ee=[`disabled`],De=[`disabled`],Oe=[`disabled`],ke=[`disabled`],Ae=[`disabled`],je=[`disabled`],Me=[`disabled`],Ne=192,Pe=220,Fe=(0,l.defineComponent)({__name:`LumalTabs`,props:(0,l.mergeModels)({activePath:{default:``},draggable:{type:Boolean,default:!0},fullscreenTarget:{default:`[data-layout-fullscreen-target]`},middleClickToClose:{type:Boolean,default:!0},showIcon:{type:Boolean,default:!0},showMaximize:{type:Boolean,default:!0},showMore:{type:Boolean,default:!0},showRefresh:{type:Boolean,default:!0},styleType:{default:`chrome`},tabs:{default:()=>[]},visible:{type:Boolean,default:!0},wheelable:{type:Boolean,default:!0},standaloneMaximize:{type:Boolean,default:!1}},{activePath:{default:``},activePathModifiers:{}}),emits:(0,l.mergeModels)([`change`,`closeAll`,`closeLeft`,`closeOthers`,`closeRight`,`maximize`,`newWindow`,`pin`,`refresh`,`remove`,`reorder`],[`update:activePath`]),setup(e,{expose:t,emit:n}){let r=e,i=n,a=(0,l.useModel)(e,`activePath`),o=(0,l.useTemplateRef)(`tabsViewportRef`),s=(0,l.shallowRef)({path:``,style:{},visible:!1}),c=(0,l.shallowRef)({path:``,style:{},visible:!1}),d=(0,l.shallowRef)(!1),f=(0,l.shallowRef)(!1),m=(0,l.shallowRef)(!0),h=(0,l.shallowRef)(!1),g,_,v=null,y=(0,l.computed)(()=>s.value.visible?s.value:c.value),b=(0,l.computed)(()=>y.value.path),x=(0,l.computed)(()=>typeof window>`u`||typeof window.matchMedia!=`function`||!window.matchMedia(`(max-width: 768px)`).matches),S=(0,l.computed)(()=>r.draggable&&x.value),C=(0,l.computed)(()=>r.tabs.some(e=>e.closable!==!1&&e.pinned!==!0));function w(e){return r.tabs.length>1&&r.tabs.some(t=>t.path===e&&t.closable!==!1&&t.pinned!==!0)}function T(e,t){let n=r.tabs.findIndex(t=>t.path===e);return(t===`left`?r.tabs.slice(0,n):r.tabs.slice(n+1)).some(e=>e.closable!==!1&&e.pinned!==!0)}function ee(e){return r.tabs.some(t=>t.path!==e&&t.closable!==!1&&t.pinned!==!0)}function E(e){return e===a.value}function te(e){let t=r.tabs.find(t=>t.path===e);return!!t&&t.pinned!==!0&&t.closable!==!1}function D(e){let t=r.tabs.find(t=>t.path===e);return!!t&&t.pinned===!0&&t.closable!==!1}function O(e){let t=b.value;return e===`close`?!w(t):e===`close-left`||e===`close-right`?!t||!E(t)||!T(t,e===`close-left`?`left`:`right`):e===`close-others`?!t||!E(t)||!ee(t):e===`close-all`?!C.value:e===`refresh`?!t||!E(t):e===`pin`?!te(t)&&!D(t):e===`new-window`&&!t}function ne(e){return D(e)?`取消固定`:`固定`}function re(){return d.value?`还原`:`内容最大化`}function k(e){e!==a.value&&(a.value=e,i(`change`,e))}function A(e){w(e)&&i(`remove`,e)}function j(e){e&&E(e)&&i(`refresh`,e)}function M(e,t){e.button!==1||!r.middleClickToClose||!w(t.path)||(e.preventDefault(),i(`remove`,t.path))}function N(e,t){if(![`ArrowLeft`,`ArrowRight`,`End`,`Home`].includes(e.key)||r.tabs.length===0)return;e.preventDefault();let n=e.key===`Home`?0:e.key===`End`?r.tabs.length-1:e.key===`ArrowLeft`?(t-1+r.tabs.length)%r.tabs.length:(t+1)%r.tabs.length,i=r.tabs[n];i&&(k(i.path),(0,l.nextTick)(()=>{o.value?.querySelectorAll(`[role="tab"]`).item(n).focus()}))}function P(e,t){return{left:`${Math.max(8,Math.min(e,window.innerWidth-Ne-8))}px`,top:`${Math.max(8,Math.min(t,window.innerHeight-Pe-8))}px`}}function F(){s.value={...s.value,visible:!1},c.value={...c.value,visible:!1}}function ie(e,t){e.preventDefault(),e.stopPropagation(),v=e.currentTarget,s.value={path:t,style:P(e.clientX,e.clientY),visible:!0},c.value={...c.value,visible:!1}}function ae(e){e.preventDefault(),e.stopPropagation();let t=a.value||r.tabs[0]?.path||``;v=e.currentTarget,c.value={path:t,style:P(e.clientX,e.clientY),visible:!0},s.value={...s.value,visible:!1}}function I(){v&&document.body.contains(v)&&(v.focus(),v=null)}function L(e){if(O(e))return;let t=b.value;F(),e===`close`?i(`remove`,t):e===`close-left`?i(`closeLeft`,t):e===`close-right`?i(`closeRight`,t):e===`close-others`?i(`closeOthers`,t):e===`close-all`?i(`closeAll`):e===`refresh`?i(`refresh`,t):e===`pin`?i(`pin`,t,!D(t)):e===`new-window`?i(`newWindow`,t):e===`maximize`&&G(),(0,l.nextTick)(I)}function R(e){if(e.key===`Escape`){e.preventDefault(),F(),(0,l.nextTick)(I);return}let t=Array.from(document.querySelectorAll(`[data-menu-active="true"] [role="menuitem"]:not(:disabled)`));if(t.length!==0&&(e.key===`ArrowDown`||e.key===`ArrowUp`||e.key===`Home`||e.key===`End`)){e.preventDefault();let n=t.findIndex(e=>e===document.activeElement),r;r=e.key===`ArrowDown`?n===-1?0:(n+1)%t.length:e.key===`ArrowUp`?n===-1?t.length-1:(n-1+t.length)%t.length:e.key===`Home`?0:t.length-1,t[r]?.focus()}}function z(){let e=o.value;e&&(f.value=e.scrollWidth>e.clientWidth+1,m.value=e.scrollLeft<=1,h.value=e.scrollLeft+e.clientWidth>=e.scrollWidth-1)}function B(){return window.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches?`auto`:`smooth`}function V(e){let t=o.value;t&&t.scrollBy({behavior:B(),left:(e===`left`?-1:1)*Math.max(160,t.clientWidth-120)})}function oe(e){if(!r.wheelable)return;let t=o.value;!t||!f.value||(e.preventDefault(),t.scrollBy({left:Math.abs(e.deltaY)>Math.abs(e.deltaX)?e.deltaY:e.deltaX}))}async function H(){await(0,l.nextTick)(),(o.value?.querySelector(`[role="tab"][aria-selected="true"]`))?.scrollIntoView({behavior:B(),block:`nearest`,inline:`nearest`}),z()}function U(){let e=o.value?.querySelector(`.lumal-tabs__list`);if(!e||!S.value){W();return}_&&_.el===e||(W(),_=p.default.create(e,{animation:160,draggable:`.lumal-tabs__item`,filter:`.is-not-draggable`,ghostClass:`lumal-tabs__item--ghost`,chosenClass:`lumal-tabs__item--chosen`,onEnd:e=>{if(e.oldIndex===void 0||e.newIndex===void 0||e.oldIndex===e.newIndex)return;let t=r.tabs[e.oldIndex]?.path,n=r.tabs[e.newIndex]?.path;!t||!n||i(`reorder`,t,n)}}))}function W(){_?.destroy(),_=void 0}(0,l.watch)(S,e=>{e?(0,l.nextTick)(U):W()});function G(){if(r.standaloneMaximize){K();return}d.value=!d.value,i(`maximize`,d.value)}async function K(){let e=document.querySelector(r.fullscreenTarget);e instanceof HTMLElement&&(document.fullscreenElement?await document.exitFullscreen?.():await e.requestFullscreen?.())}function q(){d.value=!!document.fullscreenElement&&r.standaloneMaximize,r.standaloneMaximize&&i(`maximize`,d.value)}function J(e){r.standaloneMaximize||(d.value=e)}t({getTabsElement:()=>o.value,refreshCurrent:()=>j(a.value),scrollTabs:V,toggleFullscreen:G,setMaximized:J}),(0,l.watch)(()=>[r.activePath,r.tabs.length],()=>void H(),{flush:`post`}),(0,l.watch)(()=>r.tabs,()=>void(0,l.nextTick)(z),{flush:`post`});function Y(e){let t=e.target;t&&(t.closest?.(`.lumal-tabs-context-menu`)||t.closest?.(`[data-tab-menu-trigger]`)||F())}function X(e){e.key===`Escape`&&y.value.visible&&(e.preventDefault(),F(),(0,l.nextTick)(I))}return(0,l.onMounted)(()=>{document.addEventListener(`click`,Y),document.addEventListener(`fullscreenchange`,q),document.addEventListener(`keydown`,X),z(),typeof ResizeObserver<`u`&&o.value&&(g=new ResizeObserver(z),g.observe(o.value)),S.value&&(0,l.nextTick)(U)}),(0,l.onBeforeUnmount)(()=>{document.removeEventListener(`click`,Y),document.removeEventListener(`fullscreenchange`,q),document.removeEventListener(`keydown`,X),g?.disconnect(),W()}),(t,n)=>e.visible&&e.tabs.length?((0,l.openBlock)(),(0,l.createElementBlock)(`div`,{key:0,class:(0,l.normalizeClass)([`lumal-tabs`,[`is-style-${e.styleType}`]])},[(0,l.withDirectives)((0,l.createElementVNode)(`button`,{class:`lumal-tabs__tool`,type:`button`,"aria-label":`向左滚动标签`,disabled:m.value,onClick:n[0]||=e=>V(`left`)},[(0,l.createVNode)((0,l.unref)(u.LumalIcon),{name:`lumal:chevron-left`,size:16})],8,he),[[l.vShow,f.value]]),(0,l.createElementVNode)(`div`,{ref_key:`tabsViewportRef`,ref:o,class:`lumal-tabs__viewport`,onScroll:z,onWheel:oe},[(0,l.createVNode)(l.TransitionGroup,{name:`lumal-tab`,tag:`div`,class:`lumal-tabs__list`,role:`tablist`,"aria-label":`页面标签`},{default:(0,l.withCtx)(()=>[((0,l.openBlock)(!0),(0,l.createElementBlock)(l.Fragment,null,(0,l.renderList)(e.tabs,(t,n)=>((0,l.openBlock)(),(0,l.createElementBlock)(`div`,{key:t.path,class:(0,l.normalizeClass)([`lumal-tabs__item`,{"is-active":t.path===a.value,"is-pinned":t.pinned===!0,"is-not-draggable":t.pinned===!0||!S.value}]),onContextmenu:e=>ie(e,t.path)},[(0,l.createElementVNode)(`button`,{class:`lumal-tabs__tab`,type:`button`,role:`tab`,"aria-selected":t.path===a.value,tabindex:t.path===a.value?0:-1,onClick:e=>k(t.path),onKeydown:e=>N(e,n),onMousedown:e=>M(e,t)},[t.pinned===!0?((0,l.openBlock)(),(0,l.createBlock)((0,l.unref)(u.LumalIcon),{key:0,class:`lumal-tabs__pin`,name:`lumal:pin`,size:14})):e.showIcon&&t.icon?((0,l.openBlock)(),(0,l.createBlock)((0,l.unref)(u.LumalIcon),{key:1,name:t.icon,size:14},null,8,[`name`])):(0,l.createCommentVNode)(``,!0),(0,l.createElementVNode)(`span`,{class:`lumal-tabs__label`,title:t.title},(0,l.toDisplayString)(t.title),9,ve)],40,_e),w(t.path)?((0,l.openBlock)(),(0,l.createElementBlock)(`button`,{key:0,class:`lumal-tabs__close`,type:`button`,"aria-label":`关闭${t.title}`,onClick:e=>A(t.path)},[(0,l.createVNode)((0,l.unref)(u.LumalIcon),{name:`lumal:close`,size:14})],8,ye)):(0,l.createCommentVNode)(``,!0)],42,ge))),128))]),_:1})],544),(0,l.withDirectives)((0,l.createElementVNode)(`button`,{class:`lumal-tabs__tool`,type:`button`,"aria-label":`向右滚动标签`,disabled:h.value,onClick:n[1]||=e=>V(`right`)},[(0,l.createVNode)((0,l.unref)(u.LumalIcon),{name:`lumal:chevron-right`,size:16})],8,be),[[l.vShow,f.value]]),e.showRefresh?((0,l.openBlock)(),(0,l.createElementBlock)(`button`,{key:0,class:`lumal-tabs__tool lumal-tabs__tool--refresh`,type:`button`,"aria-label":`刷新当前页面`,"data-action":`refresh-current-tab`,disabled:!a.value,onClick:n[2]||=e=>j(a.value)},[(0,l.createVNode)((0,l.unref)(u.LumalIcon),{name:`lumal:refresh`,size:16})],8,xe)):(0,l.createCommentVNode)(``,!0),e.showMore?((0,l.openBlock)(),(0,l.createElementBlock)(`button`,{key:1,class:`lumal-tabs__tool`,type:`button`,"aria-label":`更多操作`,"aria-haspopup":`menu`,"aria-expanded":c.value.visible,"data-tab-menu-trigger":``,onClick:n[3]||=e=>ae(e)},[(0,l.createVNode)((0,l.unref)(u.LumalIcon),{name:`lumal:more`,size:16})],8,Se)):(0,l.createCommentVNode)(``,!0),e.showMaximize?((0,l.openBlock)(),(0,l.createElementBlock)(`button`,{key:2,class:`lumal-tabs__tool lumal-tabs__tool--maximize`,type:`button`,"aria-label":d.value?`退出内容最大化`:`内容最大化`,"data-action":`maximize-content`,onClick:G},[(0,l.createVNode)((0,l.unref)(u.LumalIcon),{name:d.value?`lumal:restore`:`lumal:maximize`,size:16},null,8,[`name`])],8,Ce)):(0,l.createCommentVNode)(``,!0),((0,l.openBlock)(),(0,l.createBlock)(l.Teleport,{to:`body`},[s.value.visible||c.value.visible?((0,l.openBlock)(),(0,l.createElementBlock)(`div`,{key:0,class:`lumal-tabs-context-menu`,role:`menu`,"data-menu-active":!0,style:(0,l.normalizeStyle)(y.value.style),onClick:n[13]||=(0,l.withModifiers)(()=>{},[`stop`]),onKeydown:R},[(0,l.createElementVNode)(`button`,{type:`button`,role:`menuitem`,disabled:O(`refresh`),onClick:n[4]||=e=>L(`refresh`)},[(0,l.createVNode)((0,l.unref)(u.LumalIcon),{name:`lumal:refresh`,size:14}),n[14]||=(0,l.createElementVNode)(`span`,null,`重新加载`,-1)],8,we),(0,l.createElementVNode)(`button`,{type:`button`,role:`menuitem`,disabled:O(`pin`),onClick:n[5]||=e=>L(`pin`)},[(0,l.createVNode)((0,l.unref)(u.LumalIcon),{name:D(b.value)?`lumal:pin-off`:`lumal:pin`,size:14},null,8,[`name`]),(0,l.createElementVNode)(`span`,null,(0,l.toDisplayString)(ne(b.value)),1)],8,Te),(0,l.createElementVNode)(`button`,{type:`button`,role:`menuitem`,disabled:O(`maximize`),onClick:n[6]||=e=>L(`maximize`)},[(0,l.createVNode)((0,l.unref)(u.LumalIcon),{name:d.value?`lumal:restore`:`lumal:maximize`,size:14},null,8,[`name`]),(0,l.createElementVNode)(`span`,null,(0,l.toDisplayString)(re()),1)],8,Ee),(0,l.createElementVNode)(`button`,{type:`button`,role:`menuitem`,disabled:O(`new-window`),onClick:n[7]||=e=>L(`new-window`)},[(0,l.createVNode)((0,l.unref)(u.LumalIcon),{name:`lumal:external-link`,size:14}),n[15]||=(0,l.createElementVNode)(`span`,null,`在新窗口打开`,-1)],8,De),n[21]||=(0,l.createElementVNode)(`span`,{class:`lumal-tabs-context-menu__divider`},null,-1),(0,l.createElementVNode)(`button`,{type:`button`,role:`menuitem`,disabled:O(`close`),onClick:n[8]||=e=>L(`close`)},[(0,l.createVNode)((0,l.unref)(u.LumalIcon),{name:`lumal:close`,size:14}),n[16]||=(0,l.createElementVNode)(`span`,null,`关闭`,-1)],8,Oe),(0,l.createElementVNode)(`button`,{type:`button`,role:`menuitem`,disabled:O(`close-left`),onClick:n[9]||=e=>L(`close-left`)},[(0,l.createVNode)((0,l.unref)(u.LumalIcon),{name:`lumal:chevron-left`,size:14}),n[17]||=(0,l.createElementVNode)(`span`,null,`关闭左侧`,-1)],8,ke),(0,l.createElementVNode)(`button`,{type:`button`,role:`menuitem`,disabled:O(`close-right`),onClick:n[10]||=e=>L(`close-right`)},[(0,l.createVNode)((0,l.unref)(u.LumalIcon),{name:`lumal:chevron-right`,size:14}),n[18]||=(0,l.createElementVNode)(`span`,null,`关闭右侧`,-1)],8,Ae),(0,l.createElementVNode)(`button`,{type:`button`,role:`menuitem`,disabled:O(`close-others`),onClick:n[11]||=e=>L(`close-others`)},[(0,l.createVNode)((0,l.unref)(u.LumalIcon),{name:`lumal:close`,size:14}),n[19]||=(0,l.createElementVNode)(`span`,null,`关闭其他`,-1)],8,je),(0,l.createElementVNode)(`button`,{type:`button`,role:`menuitem`,disabled:O(`close-all`),onClick:n[12]||=e=>L(`close-all`)},[(0,l.createVNode)((0,l.unref)(u.LumalIcon),{name:`lumal:close`,size:14}),n[20]||=(0,l.createElementVNode)(`span`,null,`关闭全部`,-1)],8,Me)],36)):(0,l.createCommentVNode)(``,!0)]))],2)):(0,l.createCommentVNode)(``,!0)}}),Ie=c.t(Fe,[[`__scopeId`,`data-v-e1921025`]]),Le={class:`lumal-top-nav-menu-item__label`},Re={key:1,class:`lumal-top-nav-menu-item__external`,"aria-hidden":`true`},ze={class:`lumal-top-nav-menu-item__label`},Be={class:`lumal-top-nav-menu-item__label`},Ve={key:1,class:`lumal-top-nav-menu-item__external`,"aria-hidden":`true`},He=(0,l.defineComponent)({__name:`LumalTopNavMenuItem`,props:{activePath:{default:``},item:{}},emits:[`select`],setup(e,{emit:t}){let n=e,r=t,i=(0,l.computed)(()=>n.item.children?.filter(e=>!e.hidden)??[]),a=(0,l.computed)(()=>!!n.item.externalLink&&n.item.externalTarget!==`_self`),o=(0,l.computed)(()=>!!n.activePath&&m(n.item,n.activePath));function s(e){r(`select`,e)}return(t,n)=>{let r=(0,l.resolveComponent)(`LumalTopNavMenuItem`,!0);return i.value.length?((0,l.openBlock)(),(0,l.createBlock)((0,l.unref)(d.ElSubMenu),{key:0,index:e.item.path,class:(0,l.normalizeClass)({"is-active":o.value})},{title:(0,l.withCtx)(()=>[e.item.icon?((0,l.openBlock)(),(0,l.createBlock)((0,l.unref)(u.LumalIcon),{key:0,name:e.item.icon,size:16},null,8,[`name`])):(0,l.createCommentVNode)(``,!0),(0,l.createElementVNode)(`span`,Le,[(0,l.createElementVNode)(`span`,null,(0,l.toDisplayString)(e.item.title),1),(0,l.createVNode)(G,{badge:e.item.badge,label:e.item.title,tone:e.item.badgeTone,type:e.item.badgeType},null,8,[`badge`,`label`,`tone`,`type`])]),e.item.externalLink?((0,l.openBlock)(),(0,l.createElementBlock)(`span`,Re,`↗`)):(0,l.createCommentVNode)(``,!0)]),default:(0,l.withCtx)(()=>[((0,l.openBlock)(!0),(0,l.createElementBlock)(l.Fragment,null,(0,l.renderList)(i.value,t=>((0,l.openBlock)(),(0,l.createBlock)(r,{key:t.path,item:t,"active-path":e.activePath,onSelect:s},null,8,[`item`,`active-path`]))),128))]),_:1},8,[`index`,`class`])):a.value?((0,l.openBlock)(),(0,l.createElementBlock)(`li`,{key:1,class:(0,l.normalizeClass)([`el-menu-item lumal-top-nav-menu-item--external`,{"is-active":o.value}]),role:`menuitem`,tabindex:`-1`,onClick:n[0]||=t=>s(e.item.path)},[e.item.icon?((0,l.openBlock)(),(0,l.createBlock)((0,l.unref)(u.LumalIcon),{key:0,name:e.item.icon,size:16},null,8,[`name`])):(0,l.createCommentVNode)(``,!0),(0,l.createElementVNode)(`span`,ze,[(0,l.createElementVNode)(`span`,null,(0,l.toDisplayString)(e.item.title),1),(0,l.createVNode)(G,{badge:e.item.badge,label:e.item.title,tone:e.item.badgeTone,type:e.item.badgeType},null,8,[`badge`,`label`,`tone`,`type`])]),n[2]||=(0,l.createElementVNode)(`span`,{class:`lumal-top-nav-menu-item__external`,"aria-hidden":`true`},`↗`,-1)],2)):((0,l.openBlock)(),(0,l.createBlock)((0,l.unref)(d.ElMenuItem),{key:2,index:e.item.path,class:(0,l.normalizeClass)({"is-active":o.value}),onClick:n[1]||=t=>s(e.item.path)},{default:(0,l.withCtx)(()=>[e.item.icon?((0,l.openBlock)(),(0,l.createBlock)((0,l.unref)(u.LumalIcon),{key:0,name:e.item.icon,size:16},null,8,[`name`])):(0,l.createCommentVNode)(``,!0),(0,l.createElementVNode)(`span`,Be,[(0,l.createElementVNode)(`span`,null,(0,l.toDisplayString)(e.item.title),1),(0,l.createVNode)(G,{badge:e.item.badge,label:e.item.title,tone:e.item.badgeTone,type:e.item.badgeType},null,8,[`badge`,`label`,`tone`,`type`])]),e.item.externalLink?((0,l.openBlock)(),(0,l.createElementBlock)(`span`,Ve,`↗`)):(0,l.createCommentVNode)(``,!0)]),_:1},8,[`index`,`class`]))}}}),Ue=c.t(He,[[`__scopeId`,`data-v-f78b5b43`]]),We={class:`lumal-top-nav__label`},Ge={key:1,class:`lumal-top-nav__external`,"aria-hidden":`true`},Ke=(0,l.defineComponent)({__name:`LumalTopNav`,props:{activePath:{default:``},align:{default:`left`},maxWidth:{default:`100%`},menus:{default:()=>[]},mode:{default:`tree`}},emits:[`select`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=(0,l.useTemplateRef)(`menuRef`),o=(0,l.computed)(()=>r.menus.filter(e=>!e.hidden));function s(e){return!!e.externalLink&&e.externalTarget!==`_self`}function c(e){return r.activePath?r.mode===`flat`?e.path===r.activePath:m(e,r.activePath):!1}function f(e){let t=c(e);return s(e)?{class:[`el-menu-item`,`lumal-top-nav__external-item`,{"is-active":t}],role:`menuitem`,tabindex:-1}:{class:{"is-active":t},index:e.path}}let p=(0,l.computed)(()=>({"--lumal-top-nav-max-width":typeof r.maxWidth==`number`?`${r.maxWidth}px`:r.maxWidth}));function h(e){i(`select`,e)}return t({getMenuElement:()=>a.value?.$el,getMenuInstance:()=>a.value}),(t,n)=>((0,l.openBlock)(),(0,l.createBlock)((0,l.unref)(d.ElMenu),{key:`top-nav:${e.mode}:${e.activePath}`,ref_key:`menuRef`,ref:a,class:(0,l.normalizeClass)([`lumal-top-nav`,`is-align-${e.align}`]),mode:`horizontal`,"default-active":e.activePath,ellipsis:!0,style:(0,l.normalizeStyle)(p.value)},{default:(0,l.withCtx)(()=>[((0,l.openBlock)(!0),(0,l.createElementBlock)(l.Fragment,null,(0,l.renderList)(e.mode===`tree`?o.value:[],t=>((0,l.openBlock)(),(0,l.createBlock)(Ue,{key:`tree:${t.path}`,item:t,"active-path":e.activePath,onSelect:h},null,8,[`item`,`active-path`]))),128)),((0,l.openBlock)(!0),(0,l.createElementBlock)(l.Fragment,null,(0,l.renderList)(e.mode===`flat`?o.value:[],e=>((0,l.openBlock)(),(0,l.createBlock)((0,l.resolveDynamicComponent)(s(e)?`li`:(0,l.unref)(d.ElMenuItem)),(0,l.mergeProps)({key:`flat:${e.path}`},{ref_for:!0},f(e),{onClick:t=>h(e.path)}),{default:(0,l.withCtx)(()=>[e.icon?((0,l.openBlock)(),(0,l.createBlock)((0,l.unref)(u.LumalIcon),{key:0,name:e.icon,size:16},null,8,[`name`])):(0,l.createCommentVNode)(``,!0),(0,l.createElementVNode)(`span`,We,[(0,l.createElementVNode)(`span`,null,(0,l.toDisplayString)(e.title),1),(0,l.createVNode)(G,{badge:e.badge,label:e.title,tone:e.badgeTone,type:e.badgeType},null,8,[`badge`,`label`,`tone`,`type`])]),e.externalLink?((0,l.openBlock)(),(0,l.createElementBlock)(`span`,Ge,`↗`)):(0,l.createCommentVNode)(``,!0)]),_:2},1040,[`onClick`]))),128))]),_:1},8,[`class`,`default-active`,`style`]))}}),qe=c.t(Ke,[[`__scopeId`,`data-v-1c664f72`]]),Je=1,Ye=50;function Xe(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Ze(e){return Xe(e)?typeof e.path==`string`&&typeof e.title==`string`:!1}function Qe(e){let t=Math.max(1,e.maxHistory??50),n=e.history.slice(0,t);return{v:1,tabs:e.tabs.map(e=>({closable:e.closable,icon:e.icon,path:e.path,pinned:e.pinned===!0,title:e.title})),history:n}}function $e(e){if(!e)return;let t;try{t=JSON.parse(e)}catch{return}return!Xe(t)||t.v!==1||!Array.isArray(t.tabs)||!Array.isArray(t.history)||!t.history.every(e=>typeof e==`string`)?void 0:{v:1,tabs:t.tabs.filter(Ze),history:t.history}}function et(e,t,n){try{return e.setItem(t,JSON.stringify(n)),!0}catch{return!1}}function tt(e,t){let n=null;try{n=e.getItem(t)}catch{return}let r=$e(n);if(n){if(!r){try{e.removeItem(t)}catch{}return}return r}}function nt(e,t){try{e.removeItem(t)}catch{}}function rt(e,t){let n=t.fixedTabs.map(e=>({...e,pinned:!0,closable:!1})),r=new Set(n.map(e=>e.path)),i=t.isValidPath??(()=>!0),a=[];if(e)for(let n of e.tabs){if(!n.path||!i(n.path)||r.has(n.path))continue;let e=t.resolveTab?.(n.path)??{};a.push({closable:n.closable!==!1,icon:n.icon,path:n.path,pinned:n.pinned===!0,title:n.title,...e})}let o=[...n,...a];if(t.currentPath){let e=t.resolveTab?.(t.currentPath)??{},n={closable:!0,icon:e.icon,path:t.currentPath,pinned:!1,title:e.title??t.currentTab?.title??t.currentPath,...t.currentTab??{},...e};r.has(t.currentPath)||o.some(e=>e.path===t.currentPath)||(o=[...o,n])}o=[...o].sort((e,t)=>{let n=+(e.pinned===!0);return+(t.pinned===!0)-n});let s=e?.history??[];return{tabs:o,history:s}}function it(e){return[...e].sort((e,t)=>{let n=+(e.pinned===!0);return+(t.pinned===!0)-n})}function at(e,t,n={}){let r=e.some(e=>e.path===t.path)?[...e]:[...e,t],i=n.maxCount??0;if(i<=0||r.length<=i)return r;let a=[...r];for(;a.length>i;){let e=a.findIndex(e=>e.closable!==!1&&e.pinned!==!0&&e.path!==t.path);if(e===-1)break;a.splice(e,1)}return a}function ot(e,t,n){if(t<=0||e.length<=t)return[...e];let r=[...e];for(;r.length>t;){let e=r.findIndex(e=>e.closable!==!1&&e.pinned!==!0&&e.path!==n);if(e===-1)break;r.splice(e,1)}return r}function st(e,t){return e.filter(e=>!(e.path===t&&e.closable!==!1&&e.pinned!==!0))}function ct(e,t){let n=e.findIndex(e=>e.path===t);return n<=0?[...e]:e.filter((e,t)=>t>=n||e.closable===!1||e.pinned===!0)}function lt(e,t){let n=e.findIndex(e=>e.path===t);return n===-1||n>=e.length-1?[...e]:e.filter((e,t)=>t<=n||e.closable===!1||e.pinned===!0)}function ut(e,t){return e.filter(e=>e.path===t||e.closable===!1||e.pinned===!0)}function dt(e){let t=e.filter(e=>e.closable===!1||e.pinned===!0);return t.length>0?t:e.length>0?[e[0]]:[]}function ft(e,t){let n=!1,r=e.map(e=>e.path===t?(n=!0,{...e,pinned:!0}):e);return n?it(r):r}function pt(e,t){return e.map(e=>e.path===t&&e.closable!==!1?{...e,pinned:!1}:e)}function mt(e){return e.closable===!1}function ht(e){return e.pinned===!0&&e.closable!==!1}function gt(e){return e.pinned!==!0&&e.closable!==!1}var _t=50;function vt(e,t,n={}){if(!t)return[...e];let r=n.maxCount??_t;return[t,...e.filter(e=>e!==t)].slice(0,Math.max(1,r))}function yt(e,t,n=[],r={}){if(e.length===0)return``;if(r.useHistory&&n.length>0){let r=new Set(e.map(e=>e.path));for(let e of n)if(e!==t&&r.has(e))return e}let i=r.priorClosedIndex??-1;if(i>=0){let t=e[i];if(t)return t.path;let n=e[i-1];if(n)return n.path}return e[0]?.path??``}function bt(e,t,n){let r=e.findIndex(e=>e.path===t),i=e.findIndex(e=>e.path===n);if(r===-1||i===-1||r===i||e[r].pinned===!0!=(e[i].pinned===!0))return[...e];let a=[...e],[o]=a.splice(r,1);return o&&a.splice(i,0,o),a}function xt(e,t={}){return t.enable===!1?[]:e.map(e=>e.path)}var St=(0,l.defineComponent)({__name:`LumalLayout`,props:(0,l.mergeModels)({title:{},menus:{default:()=>[]},preferences:{},tabs:{default:()=>[]},activeMenuPath:{default:``},activeTabPath:{default:``},routeDriven:{type:Boolean,default:!1},routeTabFilter:{},routeTabResolver:{},tabFallbackPath:{default:``},tabMaxCount:{},fixedTabs:{default:()=>[]},headerHeight:{default:`50px`},showHeader:{type:Boolean,default:!0},tabStorageKey:{default:``},isValidTabPath:{},resolveTabUrl:{}},{activeTabPath:{},activeTabPathModifiers:{}}),emits:(0,l.mergeModels)([`menuSelect`,`topMenuSelect`,`toggleSidebar`,`tabChange`,`tabCloseAll`,`tabCloseLeft`,`tabCloseOthers`,`tabCloseRight`,`tabRefresh`,`tabRemove`,`tabPin`,`tabReorder`,`tabMaximize`,`tabNewWindow`],[`update:activeTabPath`]),setup(e,{expose:t,emit:n}){let r=e,i=n,a=(0,l.useModel)(e,`activeTabPath`),o=(0,l.inject)(f.routeLocationKey,void 0),s=(0,l.inject)(f.routerKey,void 0),c=(0,l.useTemplateRef)(`layoutRef`),u=(0,l.useTemplateRef)(`tabsRef`),p=(0,l.shallowRef)(!1),m=(0,l.shallowRef)(!1),g=(0,l.shallowRef)(!1),b=(0,l.shallowRef)([]),x=(0,l.shallowRef)(``),S=(0,l.shallowRef)([]),C=(0,l.computed)(()=>r.tabMaxCount??r.preferences.tabbar.maxCount),w;function ee(e){return e.meta.layout!==`public`&&e.meta.hideInTab!==!0&&!!e.meta.title}function te(e){let t=typeof e.meta.title==`string`?e.meta.title:void 0;if(t)return{closable:e.meta.affixTab!==!0,icon:typeof e.meta.icon==`string`?e.meta.icon:void 0,path:e.path,title:t}}function D(){return r.fixedTabs.map(e=>({...e,closable:!1,pinned:!0}))}function O(e){return{closable:e.closable!==!1,icon:e.icon,path:e.path,pinned:e.pinned===!0,title:e.title}}function ne(){if(r.isValidTabPath)return r.isValidTabPath;if(!(!s||!r.routeDriven))return e=>{try{let t=s.resolve(e)?.matched??[],n=t[t.length-1];return n?n.meta?.layout!==`public`&&n.meta?.hideInTab!==!0:!1}catch{return!1}}}function re(e){if(!(!s||!r.routeDriven))try{let t=s.resolve(e)?.matched??[],n=t[t.length-1],r=typeof n?.meta?.title==`string`?n.meta.title:void 0,i=typeof n?.meta?.icon==`string`?n.meta.icon:void 0;return!r&&!i?void 0:{icon:i,title:r}}catch{return}}function k(e){if(!r.routeDriven||!(r.routeTabFilter??ee)(e))return;let t=(r.routeTabResolver??te)(e);if(!t)return;let n=D(),i=new Set(n.map(e=>e.path)),a=b.value.filter(e=>!i.has(e.path)),o=at([...n,...a],t,{maxCount:C.value});b.value=o,r.preferences.tabbar.visitHistory&&(S.value=vt(S.value,e.path)),Q()}function A(e){r.routeDriven&&s&&e&&e!==o?.path&&s.push(e)}function j(e){return r.tabFallbackPath?r.tabFallbackPath:e[0]?.path??``}let M=(0,l.computed)({get:()=>r.routeDriven?o?.path??r.activeTabPath:a.value??r.activeTabPath,set:e=>{r.routeDriven?A(e):a.value=e}}),N=(0,l.computed)(()=>r.routeDriven?b.value:r.tabs),P=(0,l.computed)(()=>N.value.length>0),F=(0,l.computed)(()=>r.preferences.sidebar.collapsed),ie=(0,l.computed)(()=>typeof o?.meta.activeMenu==`string`?o.meta.activeMenu:``),I=(0,l.computed)(()=>{let e=o?.path||M.value,t=ie.value;return t&&h(r.menus,t)?t:e&&h(r.menus,e)?e:r.activeMenuPath&&h(r.menus,r.activeMenuPath)?r.activeMenuPath:r.activeMenuPath||e}),L=(0,l.computed)(()=>o?.path||M.value||I.value),R=(0,l.computed)(()=>({enable:r.preferences.breadcrumb?.enable??!0,hideOnlyOne:r.preferences.breadcrumb?.hideOnlyOne??!1,showHome:r.preferences.breadcrumb?.showHome??!0,showIcon:r.preferences.breadcrumb?.showIcon??!0})),z=(0,l.computed)(()=>r.preferences.header.globalSearch??!0),B=(0,l.computed)(()=>r.preferences.shortcutKeys?.globalSearch??!0),V=(0,l.computed)(()=>v(r.menus,I.value)),H=(0,l.computed)(()=>r.preferences.app.layout===`mixed-nav`&&r.preferences.sidebar.enable),U=(0,l.computed)(()=>H.value?r.menus.find(e=>!e.hidden&&e.path===x.value)?.path??V.value:V.value),W=(0,l.computed)(()=>{let e=y({activeTopMenuPath:U.value,layout:r.preferences.app.layout,menus:r.menus});return{...e,sidebarMenus:r.preferences.sidebar.enable?e.sidebarMenus:[]}}),G=(0,l.computed)(()=>W.value.sidebarMenus),K=(0,l.computed)(()=>W.value.topMenus),q=(0,l.computed)(()=>G.value.length>0),J=(0,l.computed)(()=>K.value.length>0),Y=(0,l.computed)(()=>R.value.enable&&q.value&&!J.value),X=(0,l.computed)(()=>H.value?`flat`:`tree`),se=(0,l.computed)(()=>X.value===`tree`?I.value:U.value),ce=(0,l.computed)(()=>J.value?K.value:G.value),le=(0,l.computed)(()=>ce.value.some(e=>!e.hidden));(0,l.watch)(()=>[o?.fullPath,I.value,r.menus,r.preferences.app.layout,r.preferences.sidebar.enable],()=>{x.value=V.value},{immediate:!0}),(0,l.watch)(()=>[r.preferences.app.dynamicTitle??!0,o?.meta.title,r.title],([e,t,n])=>{if(typeof document>`u`)return;let r=typeof t==`string`?t.trim():``,i=n?.trim()??``;if(!e){document.title=i;return}!r&&!i||(document.title=r&&i&&r!==i?`${r} - ${i}`:r||i)},{immediate:!0});function Z(){if(!(!r.tabStorageKey||!r.preferences.tabbar.persist)&&!(typeof sessionStorage>`u`))return{getItem:sessionStorage.getItem.bind(sessionStorage),removeItem:sessionStorage.removeItem.bind(sessionStorage),setItem:sessionStorage.setItem.bind(sessionStorage)}}function Q(){let e=Z();if(!e||!r.tabStorageKey||!r.routeDriven)return;let t=Qe({tabs:b.value.map(O),history:S.value});et(e,r.tabStorageKey,t)}function ue(){let e=Z();!e||!r.tabStorageKey||nt(e,r.tabStorageKey)}function de(){if(!r.routeDriven)return;let e=Z();if(!e||!r.tabStorageKey)return;let t=tt(e,r.tabStorageKey),n=o?.path??``,i=rt(t,{currentPath:n,currentTab:o?(r.routeTabResolver??te)(o):void 0,fixedTabs:D(),isValidPath:ne(),resolveTab:re});b.value=i.tabs,r.preferences.tabbar.visitHistory?(n&&i.history.unshift(n),S.value=vt(i.history,n||``)):S.value=[]}function fe(e){p.value=e?.matches??w?.matches??!1,p.value&&(m.value=!1)}(0,l.onMounted)(()=>{typeof window>`u`||typeof window.matchMedia!=`function`||(w=window.matchMedia(`(max-width: 768px)`),fe(),w.addEventListener?.(`change`,fe))}),(0,l.onBeforeUnmount)(()=>{w?.removeEventListener?.(`change`,fe)}),(0,l.watch)(()=>[r.routeDriven,C.value,r.fixedTabs],()=>{if(!r.routeDriven){b.value=[];return}let e=D(),t=new Set(e.map(e=>e.path)),n=[...e];for(let e of b.value.filter(e=>!t.has(e.path)))n=at(n,e,{maxCount:C.value});b.value=ot(it(n),C.value,M.value),Q()},{deep:!0,immediate:!0}),(0,l.watch)(()=>o?.fullPath,()=>{o&&k(o)},{immediate:!0}),(0,l.watch)(()=>[r.routeDriven,r.tabStorageKey,r.preferences.tabbar.persist],(e,t)=>{let n=e[0],r=e[2],i=t?.[1]&&t?.[2];n&&r&&!i&&de(),!r&&i&&ue()},{immediate:!1}),(0,l.onBeforeUnmount)(()=>{Q()});function pe(){if(p.value){m.value=!m.value;return}i(`toggleSidebar`)}function $(e){m.value=!1,i(`menuSelect`,e)}function he(e){let t=h(r.menus,e),n=t?.children?.filter(e=>!e.hidden)??[],a=!!t?.externalLink&&t?.externalTarget!==`_self`;H.value&&t&&(n.length>0||!a)&&(x.value=t.path),i(`topMenuSelect`,e),!(H.value&&n.length>0&&!r.preferences.sidebar.autoActivateChild)&&$(_(t)||e)}function ge(e){$(_(h(r.menus,e))||e)}function _e(e){i(`tabChange`,e)}function ve(e){if(r.routeDriven){let t=b.value.findIndex(t=>t.path===e),n=st(b.value,e);if(b.value=n,M.value===e){let i=r.preferences.tabbar.visitHistory;A(yt(n,e,S.value,{useHistory:i,priorClosedIndex:t})||j(n))}Q()}i(`tabRemove`,e)}function ye(e){r.routeDriven&&(b.value=ct(b.value,e),A(e),Q()),i(`tabCloseLeft`,e)}function be(e){r.routeDriven&&(b.value=lt(b.value,e),A(e),Q()),i(`tabCloseRight`,e)}function xe(e){r.routeDriven&&(b.value=ut(b.value,e),A(e),Q()),i(`tabCloseOthers`,e)}function Se(){r.routeDriven&&(b.value=dt(b.value),A(j(b.value)),Q()),i(`tabCloseAll`)}function Ce(e,t){r.routeDriven&&(b.value=t?ft(b.value,e):pt(b.value,e),Q()),i(`tabPin`,e,t)}function we(e,t){r.routeDriven&&(b.value=bt(b.value,e,t),Q()),i(`tabReorder`,e,t)}function Te(e){let t=r.resolveTabUrl?r.resolveTabUrl(e):(()=>{if(s)try{return s.resolve(e)?.fullPath??e}catch{return e}return e})();window.open(t,`_blank`,`noopener,noreferrer`),i(`tabNewWindow`,e)}function Ee(e){g.value=e,i(`tabMaximize`,e)}function De(e){e.key===`Escape`&&g.value&&(e.preventDefault(),u.value?.setMaximized(!1),i(`tabMaximize`,!1))}return(0,l.watch)(g,e=>{typeof document>`u`||(e?document.addEventListener(`keydown`,De):document.removeEventListener(`keydown`,De))}),(0,l.onBeforeUnmount)(()=>{typeof document<`u`&&document.removeEventListener(`keydown`,De)}),t({getLayoutElement:()=>c.value?.$el,getLayoutInstance:()=>c.value,getTabs:()=>[...N.value],getVisitHistory:()=>[...S.value],resetTabs:()=>{b.value=dt(b.value),S.value=[],A(j(b.value)),Q()},resetTabSnapshot:()=>{ue()}}),(t,n)=>((0,l.openBlock)(),(0,l.createBlock)((0,l.unref)(d.ElContainer),{ref_key:`layoutRef`,ref:c,class:(0,l.normalizeClass)([`lumal-layout`,{"is-sidebar-collapsed":F.value,"is-sidebar-hidden":!q.value,"is-mobile-menu-hidden":!m.value,"is-content-maximized":g.value}]),"data-layout":e.preferences.app.layout,direction:`vertical`},{default:(0,l.withCtx)(()=>[e.showHeader?(0,l.withDirectives)(((0,l.openBlock)(),(0,l.createBlock)(oe,{key:0,title:e.title,collapsed:p.value?!m.value:F.value,height:e.headerHeight,"mobile-only-toggle":!q.value&&J.value,"sidebar-enabled":q.value||J.value,"toggle-after-title":q.value&&!p.value,onToggleCollapse:pe},(0,l.createSlots)({_:2},[t.$slots.logo?{name:`logo`,fn:(0,l.withCtx)(()=>[(0,l.renderSlot)(t.$slots,`logo`,{},void 0,!0)]),key:`0`}:void 0,J.value?{name:`navigation`,fn:(0,l.withCtx)(()=>[(0,l.createVNode)(qe,{menus:K.value,"active-path":se.value,align:e.preferences.header.menuAlign,"max-width":e.preferences.header.menuMaxWidth,mode:X.value,onSelect:he},null,8,[`menus`,`active-path`,`align`,`max-width`,`mode`])]),key:`1`}:void 0,Y.value?{name:`breadcrumb`,fn:(0,l.withCtx)(()=>[(0,l.createVNode)(T,{class:`lumal-layout__header-breadcrumb`,"active-menu-path":I.value,"active-path":L.value,"hide-only-one":R.value.hideOnlyOne,menus:e.menus,"show-home":R.value.showHome,"show-icon":R.value.showIcon,onSelect:ge},null,8,[`active-menu-path`,`active-path`,`hide-only-one`,`menus`,`show-home`,`show-icon`])]),key:`2`}:void 0,z.value||t.$slots.headerActions?{name:`actions`,fn:(0,l.withCtx)(()=>[z.value?((0,l.openBlock)(),(0,l.createBlock)(ae,{key:0,menus:e.menus,shortcut:B.value,onSelect:ge},null,8,[`menus`,`shortcut`])):(0,l.createCommentVNode)(``,!0),(0,l.renderSlot)(t.$slots,`headerActions`,{},void 0,!0)]),key:`3`}:void 0]),1032,[`title`,`collapsed`,`height`,`mobile-only-toggle`,`sidebar-enabled`,`toggle-after-title`])),[[l.vShow,!g.value]]):(0,l.createCommentVNode)(``,!0),(0,l.createVNode)((0,l.unref)(d.ElContainer),{class:`lumal-layout__body`},{default:(0,l.withCtx)(()=>[le.value&&!g.value?((0,l.openBlock)(),(0,l.createElementBlock)(`button`,{key:0,class:`lumal-layout__sidebar-scrim`,type:`button`,"aria-label":`关闭侧边栏`,onClick:n[0]||=e=>m.value=!1})):(0,l.createCommentVNode)(``,!0),g.value?(0,l.createCommentVNode)(``,!0):((0,l.openBlock)(),(0,l.createBlock)(l.Transition,{key:1,name:`lumal-layout-sidebar`,appear:``},{default:(0,l.withCtx)(()=>[q.value?((0,l.openBlock)(),(0,l.createBlock)(me,{key:0,class:`lumal-layout__desktop-sidebar`,"aria-label":`主菜单`,menus:G.value,"active-path":I.value,collapsed:F.value,width:`${e.preferences.sidebar.width}px`,"collapsed-width":`64px`,onSelect:$},null,8,[`menus`,`active-path`,`collapsed`,`width`])):(0,l.createCommentVNode)(``,!0)]),_:1})),le.value&&!g.value?((0,l.openBlock)(),(0,l.createBlock)(me,{key:2,class:`lumal-layout__mobile-sidebar`,"aria-label":`移动菜单`,"aria-hidden":!m.value,inert:!m.value||void 0,menus:ce.value,"active-path":I.value,collapsed:!1,width:`${e.preferences.sidebar.width}px`,"collapsed-width":`64px`,onSelect:$},null,8,[`aria-hidden`,`inert`,`menus`,`active-path`,`width`])):(0,l.createCommentVNode)(``,!0),(0,l.createVNode)((0,l.unref)(d.ElContainer),{class:`lumal-layout__main`,direction:`vertical`,"data-layout-fullscreen-target":``},{default:(0,l.withCtx)(()=>[R.value.enable&&!Y.value&&!g.value?((0,l.openBlock)(),(0,l.createBlock)(T,{key:0,"active-menu-path":I.value,"active-path":L.value,"hide-only-one":R.value.hideOnlyOne,menus:e.menus,"show-home":R.value.showHome,"show-icon":R.value.showIcon,onSelect:ge},null,8,[`active-menu-path`,`active-path`,`hide-only-one`,`menus`,`show-home`,`show-icon`])):(0,l.createCommentVNode)(``,!0),P.value&&e.preferences.tabbar.enable?((0,l.openBlock)(),(0,l.createBlock)(Ie,{key:1,ref_key:`tabsRef`,ref:u,"active-path":M.value,"onUpdate:activePath":n[1]||=e=>M.value=e,tabs:N.value,"show-icon":e.preferences.tabbar.showIcon,"show-maximize":e.preferences.tabbar.showMaximize,"show-more":e.preferences.tabbar.showMore,"show-refresh":e.preferences.tabbar.showRefresh,draggable:e.preferences.tabbar.draggable,wheelable:e.preferences.tabbar.wheelable,"middle-click-to-close":e.preferences.tabbar.middleClickToClose,"style-type":e.preferences.tabbar.styleType,onChange:_e,onCloseAll:Se,onCloseLeft:ye,onCloseOthers:xe,onCloseRight:be,onMaximize:Ee,onNewWindow:Te,onPin:Ce,onRefresh:n[2]||=e=>i(`tabRefresh`,e),onRemove:ve,onReorder:we},null,8,[`active-path`,`tabs`,`show-icon`,`show-maximize`,`show-more`,`show-refresh`,`draggable`,`wheelable`,`middle-click-to-close`,`style-type`])):(0,l.createCommentVNode)(``,!0),(0,l.createVNode)(E,null,{default:(0,l.withCtx)(()=>[(0,l.renderSlot)(t.$slots,`default`,{},void 0,!0)]),_:3})]),_:3})]),_:3})]),_:3},8,[`data-layout`,`class`]))}}),Ct=c.t(St,[[`__scopeId`,`data-v-c4a60970`]]),wt={key:0,class:`lumal-router-view__progress`,"aria-hidden":`true`},Tt={key:1,class:`lumal-router-view__loading`,"aria-hidden":`true`},Et=(0,l.defineComponent)({__name:`LumalRouterView`,props:{viewKey:{default:`default`},transition:{type:Boolean,default:!1},transitionName:{default:`fade-side`},progress:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},cache:{type:Boolean,default:!1},cacheMax:{default:0}},setup(e,{expose:t}){let n=e,r=(0,l.useTemplateRef)(`routerViewRef`),i=(0,l.shallowRef)(!1),a=(0,l.shallowRef)(!1),o=new Set([n.viewKey]),s=(0,l.computed)(()=>n.cacheMax>0?n.cacheMax:void 0),c=(0,l.computed)(()=>n.transition?n.transitionName:void 0),u;function d(){u&&=(clearTimeout(u),void 0)}function p(e){return n.cache&&o.has(e)}function m(e){i.value=!1,a.value=!1,o.add(e),u=void 0}function h(e){if(d(),i.value=n.progress&&!p(e),a.value=n.loading&&!p(e),!i.value&&!a.value){o.add(e);return}u=setTimeout(m,520,e)}return(0,l.watch)(()=>n.viewKey,(e,t)=>{t!==void 0&&h(e)}),(0,l.onBeforeUnmount)(()=>{d()}),t({getRouterViewElement:()=>r.value}),(t,n)=>((0,l.openBlock)(),(0,l.createElementBlock)(`div`,{ref_key:`routerViewRef`,ref:r,class:`lumal-router-view`},[i.value?((0,l.openBlock)(),(0,l.createElementBlock)(`div`,wt,[...n[0]||=[(0,l.createElementVNode)(`span`,{class:`lumal-router-view__progress-bar`},null,-1)]])):(0,l.createCommentVNode)(``,!0),(0,l.createVNode)((0,l.unref)(f.RouterView),null,{default:(0,l.withCtx)(({Component:t})=>[c.value?((0,l.openBlock)(),(0,l.createBlock)(l.Transition,{key:0,appear:``,mode:`out-in`,name:c.value},{default:(0,l.withCtx)(()=>[e.cache?((0,l.openBlock)(),(0,l.createBlock)(l.KeepAlive,{key:0,max:s.value},[((0,l.openBlock)(),(0,l.createBlock)((0,l.resolveDynamicComponent)(t),{key:e.viewKey}))],1032,[`max`])):((0,l.openBlock)(),(0,l.createBlock)((0,l.resolveDynamicComponent)(t),{key:e.viewKey}))]),_:2},1032,[`name`])):e.cache?((0,l.openBlock)(),(0,l.createBlock)(l.KeepAlive,{key:1,max:s.value},[((0,l.openBlock)(),(0,l.createBlock)((0,l.resolveDynamicComponent)(t),{key:e.viewKey}))],1032,[`max`])):((0,l.openBlock)(),(0,l.createBlock)((0,l.resolveDynamicComponent)(t),{key:e.viewKey}))]),_:1}),a.value?((0,l.openBlock)(),(0,l.createElementBlock)(`div`,Tt,[...n[1]||=[(0,l.createElementVNode)(`span`,{class:`lumal-router-view__loading-dot`},null,-1)]])):(0,l.createCommentVNode)(``,!0)],512))}}),Dt=c.t(Et,[[`__scopeId`,`data-v-3ad5cc30`]]);Object.defineProperty(exports,"A",{enumerable:!0,get:function(){return me}}),Object.defineProperty(exports,"B",{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,"C",{enumerable:!0,get:function(){return $e}}),Object.defineProperty(exports,"D",{enumerable:!0,get:function(){return et}}),Object.defineProperty(exports,"E",{enumerable:!0,get:function(){return Qe}}),Object.defineProperty(exports,"F",{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,"I",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"L",{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,"M",{enumerable:!0,get:function(){return ae}}),Object.defineProperty(exports,"N",{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,"O",{enumerable:!0,get:function(){return qe}}),Object.defineProperty(exports,"P",{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,"R",{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,"S",{enumerable:!0,get:function(){return nt}}),Object.defineProperty(exports,"T",{enumerable:!0,get:function(){return rt}}),Object.defineProperty(exports,"_",{enumerable:!0,get:function(){return yt}}),Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return ht}}),Object.defineProperty(exports,"b",{enumerable:!0,get:function(){return Ye}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return ut}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return lt}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return mt}}),Object.defineProperty(exports,"g",{enumerable:!0,get:function(){return xt}}),Object.defineProperty(exports,"h",{enumerable:!0,get:function(){return bt}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return gt}}),Object.defineProperty(exports,"j",{enumerable:!0,get:function(){return oe}}),Object.defineProperty(exports,"k",{enumerable:!0,get:function(){return Ie}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return st}}),Object.defineProperty(exports,"m",{enumerable:!0,get:function(){return vt}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return Ct}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return ot}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return ft}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return at}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return dt}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return Dt}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return ct}}),Object.defineProperty(exports,"v",{enumerable:!0,get:function(){return it}}),Object.defineProperty(exports,"w",{enumerable:!0,get:function(){return tt}}),Object.defineProperty(exports,"x",{enumerable:!0,get:function(){return Je}}),Object.defineProperty(exports,"y",{enumerable:!0,get:function(){return pt}}),Object.defineProperty(exports,"z",{enumerable:!0,get:function(){return _}});
|
package/dist/layout.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./layout-ZnyG9X3N.cjs");exports.DEFAULT_MAX_VISIT_HISTORY=e.b,exports.LumalBreadcrumb=e.P,exports.LumalContent=e.N,exports.LumalGlobalSearch=e.M,exports.LumalHeader=e.j,exports.LumalLayout=e.n,exports.LumalRouterView=e.t,exports.LumalSidebar=e.A,exports.LumalTabs=e.k,exports.LumalTopNav=e.O,exports.TAB_SNAPSHOT_VERSION=e.x,exports.appendTab=e.r,exports.canPinTab=e.i,exports.canUnpinTab=e.a,exports.clampTabCount=e.o,exports.clearTabSnapshot=e.S,exports.closeAllTabs=e.s,exports.closeOtherTabs=e.c,exports.closeTab=e.l,exports.closeTabsLeft=e.u,exports.closeTabsRight=e.d,exports.deserializeTabSnapshot=e.C,exports.findMenuItemByPath=e.F,exports.findMenuTrailByPath=e.I,exports.includesMenuPath=e.L,exports.isPermanentlyPinned=e.f,exports.pinTab=e.p,exports.pushVisitHistory=e.m,exports.readTabSnapshot=e.w,exports.reorderTab=e.h,exports.resolveActiveTopMenuPath=e.R,exports.resolveCachedTabPaths=e.g,exports.resolveNavigationTarget=e.z,exports.resolveNextActivePath=e._,exports.restoreTabsFromSnapshot=e.T,exports.serializeTabSnapshot=e.E,exports.sortTabsByPinned=e.v,exports.splitMenusByLayout=e.B,exports.unpinTab=e.y,exports.writeTabSnapshot=e.D;
|
package/dist/layout.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { A as e, B as t, C as n, D as r, E as i, F as a, I as o, L as s, M as c, N as l, O as u, P as d, R as f, S as p, T as m, _ as h, a as g, b as _, c as v, d as y, f as b, g as x, h as S, i as C, j as w, k as T, l as E, m as D, n as O, o as k, p as A, r as j, s as M, t as N, u as P, v as F, w as I, x as L, y as R, z } from "./layout-C8H9wuQa.js";
|
|
2
|
+
export { _ as DEFAULT_MAX_VISIT_HISTORY, d as LumalBreadcrumb, l as LumalContent, c as LumalGlobalSearch, w as LumalHeader, O as LumalLayout, N as LumalRouterView, e as LumalSidebar, T as LumalTabs, u as LumalTopNav, L as TAB_SNAPSHOT_VERSION, j as appendTab, C as canPinTab, g as canUnpinTab, k as clampTabCount, p as clearTabSnapshot, M as closeAllTabs, v as closeOtherTabs, E as closeTab, P as closeTabsLeft, y as closeTabsRight, n as deserializeTabSnapshot, a as findMenuItemByPath, o as findMenuTrailByPath, s as includesMenuPath, b as isPermanentlyPinned, A as pinTab, D as pushVisitHistory, I as readTabSnapshot, S as reorderTab, f as resolveActiveTopMenuPath, x as resolveCachedTabPaths, z as resolveNavigationTarget, h as resolveNextActivePath, m as restoreTabsFromSnapshot, i as serializeTabSnapshot, F as sortTabsByPinned, t as splitMenusByLayout, R as unpinTab, r as writeTabSnapshot };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
let e=require("vue");var t=Symbol(`lumal-permission-store`);function n(n){return(0,e.provide)(t,n),n}function r(){let n=(0,e.inject)(t,void 0);if(!n)throw Error(`[Lumal] PermissionStore 未注入,请先调用 providePermissionStore 或传入 createLumalAdmin.permissionStore。`);return n}function i(e,t,n){return(e.matched?.length?e.matched:[e]).every(e=>{let r=e.meta??{},i=r.permissions??r.permission,a=r.roles??r.role;return t.hasPermission(i,n.mode)&&t.hasRole(a,n.roleMode)})}function a(e,t){let n=e.meta?.requireLogin;return n===!1?!1:n===!0||t}function o(e,t,n){let r=e.fullPath??e.path;return{path:t,query:r?{[n]:r}:void 0}}function s(e,t,n={}){let r=new Set(n.whiteList??[]),s=n.loginPath??`/login`,c=n.redirectQueryKey??`redirect`,l=n.requireLoginByDefault??!1;e.beforeEach(e=>e.path===s||e.path&&r.has(e.path)?!0:n.isAuthenticated&&a(e,l)&&!n.isAuthenticated()?o(e,s,c):i(e,t,n)?!0:n.noAccessRedirect??!1)}function c(e){return e?Array.isArray(e)?e:[e]:[]}function l(e,t,n=`some`){let r=c(t);if(r.length===0)return!0;let i=new Set(e),a=e=>i.has(e);return n===`every`?r.every(a):r.some(a)}function u(e,t,n=`some`){return l(e,t,n)}function d(e,t,n=`some`){return l(e,t,n)}var f=(0,e.defineComponent)({__name:`LumalAccessControl`,props:{mode:{},permission:{},permissions:{},role:{},roleMode:{},roles:{},store:{}},setup(n){let r=n,i=(0,e.inject)(t,void 0),a=(0,e.computed)(()=>r.store??i),o=(0,e.computed)(()=>{let e=a.value;if(!e)return!1;let t=r.permission??r.permissions,n=r.role??r.roles;return e.hasPermission(t,r.mode)&&e.hasRole(n,r.roleMode)});return(t,n)=>o.value?(0,e.renderSlot)(t.$slots,`default`,{key:0}):(0,e.renderSlot)(t.$slots,`fallback`,{key:1})}});function p(t={}){let n=(0,e.shallowRef)([...t.permissions??[]]),r=(0,e.shallowRef)([...t.roles??[]]);return{get permissions(){return[...n.value]},get roles(){return[...r.value]},clear(){n.value=[],r.value=[]},hasPermission(e,t){return u(n.value,e,t)},hasRole(e,t){return d(r.value,e,t)},setPermissions(e){n.value=[...e]},setRoles(e){r.value=[...e]}}}Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return p}});
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { computed as e, defineComponent as t, inject as n, provide as r, renderSlot as i, shallowRef as a } from "vue";
|
|
2
|
+
//#region src/permission/context.ts
|
|
3
|
+
var o = Symbol("lumal-permission-store");
|
|
4
|
+
function s(e) {
|
|
5
|
+
return r(o, e), e;
|
|
6
|
+
}
|
|
7
|
+
function c() {
|
|
8
|
+
let e = n(o, void 0);
|
|
9
|
+
if (!e) throw Error("[Lumal] PermissionStore 未注入,请先调用 providePermissionStore 或传入 createLumalAdmin.permissionStore。");
|
|
10
|
+
return e;
|
|
11
|
+
}
|
|
12
|
+
//#endregion
|
|
13
|
+
//#region src/permission/guard.ts
|
|
14
|
+
function l(e, t, n) {
|
|
15
|
+
return (e.matched?.length ? e.matched : [e]).every((e) => {
|
|
16
|
+
let r = e.meta ?? {}, i = r.permissions ?? r.permission, a = r.roles ?? r.role;
|
|
17
|
+
return t.hasPermission(i, n.mode) && t.hasRole(a, n.roleMode);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
function u(e, t) {
|
|
21
|
+
let n = e.meta?.requireLogin;
|
|
22
|
+
return n === !1 ? !1 : n === !0 || t;
|
|
23
|
+
}
|
|
24
|
+
function d(e, t, n) {
|
|
25
|
+
let r = e.fullPath ?? e.path;
|
|
26
|
+
return {
|
|
27
|
+
path: t,
|
|
28
|
+
query: r ? { [n]: r } : void 0
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function f(e, t, n = {}) {
|
|
32
|
+
let r = new Set(n.whiteList ?? []), i = n.loginPath ?? "/login", a = n.redirectQueryKey ?? "redirect", o = n.requireLoginByDefault ?? !1;
|
|
33
|
+
e.beforeEach((e) => e.path === i || e.path && r.has(e.path) ? !0 : n.isAuthenticated && u(e, o) && !n.isAuthenticated() ? d(e, i, a) : l(e, t, n) ? !0 : n.noAccessRedirect ?? !1);
|
|
34
|
+
}
|
|
35
|
+
//#endregion
|
|
36
|
+
//#region src/permission/helpers.ts
|
|
37
|
+
function p(e) {
|
|
38
|
+
return e ? Array.isArray(e) ? e : [e] : [];
|
|
39
|
+
}
|
|
40
|
+
function m(e, t, n = "some") {
|
|
41
|
+
let r = p(t);
|
|
42
|
+
if (r.length === 0) return !0;
|
|
43
|
+
let i = new Set(e), a = (e) => i.has(e);
|
|
44
|
+
return n === "every" ? r.every(a) : r.some(a);
|
|
45
|
+
}
|
|
46
|
+
function h(e, t, n = "some") {
|
|
47
|
+
return m(e, t, n);
|
|
48
|
+
}
|
|
49
|
+
function g(e, t, n = "some") {
|
|
50
|
+
return m(e, t, n);
|
|
51
|
+
}
|
|
52
|
+
//#endregion
|
|
53
|
+
//#region src/permission/LumalAccessControl.vue
|
|
54
|
+
var _ = /* @__PURE__ */ t({
|
|
55
|
+
__name: "LumalAccessControl",
|
|
56
|
+
props: {
|
|
57
|
+
mode: {},
|
|
58
|
+
permission: {},
|
|
59
|
+
permissions: {},
|
|
60
|
+
role: {},
|
|
61
|
+
roleMode: {},
|
|
62
|
+
roles: {},
|
|
63
|
+
store: {}
|
|
64
|
+
},
|
|
65
|
+
setup(t) {
|
|
66
|
+
let r = t, a = n(o, void 0), s = e(() => r.store ?? a), c = e(() => {
|
|
67
|
+
let e = s.value;
|
|
68
|
+
if (!e) return !1;
|
|
69
|
+
let t = r.permission ?? r.permissions, n = r.role ?? r.roles;
|
|
70
|
+
return e.hasPermission(t, r.mode) && e.hasRole(n, r.roleMode);
|
|
71
|
+
});
|
|
72
|
+
return (e, t) => c.value ? i(e.$slots, "default", { key: 0 }) : i(e.$slots, "fallback", { key: 1 });
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
//#endregion
|
|
76
|
+
//#region src/permission/store.ts
|
|
77
|
+
function v(e = {}) {
|
|
78
|
+
let t = a([...e.permissions ?? []]), n = a([...e.roles ?? []]);
|
|
79
|
+
return {
|
|
80
|
+
get permissions() {
|
|
81
|
+
return [...t.value];
|
|
82
|
+
},
|
|
83
|
+
get roles() {
|
|
84
|
+
return [...n.value];
|
|
85
|
+
},
|
|
86
|
+
clear() {
|
|
87
|
+
t.value = [], n.value = [];
|
|
88
|
+
},
|
|
89
|
+
hasPermission(e, n) {
|
|
90
|
+
return h(t.value, e, n);
|
|
91
|
+
},
|
|
92
|
+
hasRole(e, t) {
|
|
93
|
+
return g(n.value, e, t);
|
|
94
|
+
},
|
|
95
|
+
setPermissions(e) {
|
|
96
|
+
t.value = [...e];
|
|
97
|
+
},
|
|
98
|
+
setRoles(e) {
|
|
99
|
+
n.value = [...e];
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
//#endregion
|
|
104
|
+
export { f as a, c, g as i, _ as n, o, h as r, s, v as t };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./permission-6sXtjGMS.cjs"),t=require("./directive-DSVr7QvO.cjs");exports.LumalAccessControl=e.n,exports.createPermissionDirective=t.t,exports.createPermissionStore=e.t,exports.hasPermission=e.r,exports.hasRole=e.i,exports.permissionStoreKey=e.o,exports.providePermissionStore=e.s,exports.setupPermissionGuard=e.a,exports.usePermissionStore=e.c;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { a as e, c as t, i as n, n as r, o as i, r as a, s as o, t as s } from "./permission-CCkqvnWg.js";
|
|
2
|
+
import { t as c } from "./directive-D-fB5qbY.js";
|
|
3
|
+
export { r as LumalAccessControl, c as createPermissionDirective, s as createPermissionStore, a as hasPermission, n as hasRole, i as permissionStoreKey, o as providePermissionStore, e as setupPermissionGuard, t as usePermissionStore };
|
package/dist/request.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});function e(){let e=new Map;return{get:t=>e.get(t),set:(t,n)=>{e.set(t,n)},has:t=>e.has(t),delete:t=>{e.delete(t)},clear:()=>{e.clear()}}}var t=class extends Error{code;data;kind;originalError;response;status;constructor(e,t={}){super(e),this.name=`RequestError`,this.code=t.code,this.data=t.data,this.kind=t.kind??`business`,this.originalError=t.originalError,this.response=t.response,this.status=t.status}};function n(e){return/^https?:\/\//i.test(e)}function r(e,t){return!e||n(t)?t:`${e.replace(/\/+$/,``)}/${t.replace(/^\/+/,``)}`}function i(e,t){if(!t)return e;let r=new URL(e,n(e)?void 0:`http://lumal.local`);return Object.entries(t).forEach(([e,t])=>{(Array.isArray(t)?t:[t]).forEach(t=>{t!=null&&r.searchParams.append(e,String(t))})}),n(e)?r.toString():`${r.pathname}${r.search}${r.hash}`}function a(e){return e==null?!1:Array.isArray(e)?!0:!(typeof e!=`object`||typeof FormData<`u`&&e instanceof FormData||typeof URLSearchParams<`u`&&e instanceof URLSearchParams||typeof Blob<`u`&&e instanceof Blob||typeof ArrayBuffer<`u`&&e instanceof ArrayBuffer)}function o(e,t,n){if(!(e===`GET`||t===void 0))return a(t)?(n.has(`content-type`)||n.set(`content-type`,`application/json`),JSON.stringify(t)):t}async function s(e){if(e.status!==204)return(e.headers.get(`content-type`)??``).includes(`application/json`)?e.json():e.text()}async function c(e,t){if(e.has(`Authorization`)||!t.getToken)return;let n=await t.getToken();return n&&e.set(`Authorization`,`${t.tokenPrefix??`Bearer`} ${n}`),n}function l(e){return typeof ReadableStream>`u`||!(e instanceof ReadableStream)}function u(e,t){return!new Headers(t.headers).has(`Authorization`)&&(e===`GET`||t.retryOnAuthRefresh===!0)&&l(t.body)}function d(e,n){if(e instanceof t)return e;let r=n?.aborted===!0||typeof DOMException<`u`&&e instanceof DOMException&&e.name===`AbortError`;return new t(r?`请求已取消`:`网络连接失败`,{kind:r?`cancelled`:`network`,originalError:e})}var f=0;function p(e){if(e.requestId)return typeof e.requestId==`function`?e.requestId():(f+=1,`lumal-${f.toString(36)}-${f}`)}function m(n={}){let a=n.fetch??globalThis.fetch,l=new Set,f=n.cache??e(),m,h=!1;async function g(e,g={}){let _=g.method??`GET`,v=i(r(n.baseURL,e),g.query),y=p(n),b=g.cache,x=b?.enabled===!0,S=b?.cache??f,C=b?.key??`${_}:${v}`;if(x&&S.has(C))return S.get(C);let w=new Headers(g.headers),T=o(_,g.body,w),E=`${_}:${v}:${typeof T==`string`?T:``}`;if(n.duplicateSubmit&&l.has(E))throw new t(`Duplicate request`,{code:`DUPLICATE_REQUEST`,kind:`duplicate`});l.add(E);try{return await D(0)}finally{l.delete(E)}async function D(e){let r=new Headers(g.headers),i=await c(r,n);y&&r.set(n.requestIdHeader??`X-Request-Id`,y);let l={body:o(_,g.body,r),headers:r,method:_,signal:g.signal};await n.onRequest?.({init:l,requestId:y,url:v});let u;try{u=await a(v,l)}catch(e){let t=d(e,g.signal);throw await n.onRequestError?.({error:t,init:l,requestId:y,url:v}),t}let f;try{f=await s(u)}catch(e){let n=new t(`响应数据解析失败`,{kind:`http`,originalError:e,response:u,status:u.status});throw await k(n,l,u),n}let p={attempt:e,data:f,init:l,requestId:y,response:u,url:v};if(u.status===401)return O(new t(u.statusText||`会话已过期`,{data:f,kind:`session`,response:u,status:u.status}),p,i,e);if(!u.ok){let e=new t(u.statusText||`HTTP ${u.status}`,{data:f,kind:`http`,response:u,status:u.status});throw await k(e,l,u),e}try{let e=n.onResponse?await n.onResponse(p):f;return h=!1,x&&S.set(C,e),e}catch(n){if(n instanceof t&&n.kind===`session`)return O(n,p,i,e);let r=n instanceof t?n:new t(n instanceof Error?n.message:`业务响应处理失败`,{data:f,kind:`business`,originalError:n,response:u,status:u.status});throw await k(r,l,u),r}}async function O(e,r,i,a){if(a===0&&u(_,g)&&n.authRefresh){let o=await n.getToken?.();if(i&&o&&o!==i)return D(a+1);try{return m||=n.authRefresh.refresh(r).finally(()=>{m=void 0}),await m,h=!1,D(a+1)}catch(n){e=new t(e.message,{code:e.code,data:e.data,kind:`session`,originalError:n,response:e.response,status:e.status})}}throw h||(h=!0,await n.onSessionExpired?.(r)),await k(e,r.init,r.response),e}async function k(e,t,r){await n.onResponseError?.({error:e,init:t,requestId:y,response:r,url:v})}}function _(e,t,n={}){let{data:r,fileField:i=`file`,...a}=n,o=new FormData;return(Array.isArray(t)?t:[t]).forEach(e=>{o.append(i,e)}),r&&Object.entries(r).forEach(([e,t])=>{t!=null&&o.append(e,String(t))}),g(e,{...a,body:o,method:`POST`})}return{delete:(e,t)=>g(e,{...t,method:`DELETE`}),get:(e,t)=>g(e,{...t,method:`GET`}),patch:(e,t)=>g(e,{...t,method:`PATCH`}),post:(e,t)=>g(e,{...t,method:`POST`}),put:(e,t)=>g(e,{...t,method:`PUT`}),request:g,upload:_}}function h(e,n={}){let r=n.fieldNames?.code??`code`,i=n.fieldNames?.data??`data`,a=n.fieldNames?.message??`message`,o=n.successCodes??[0,200],s=n.sessionExpiredCodes??[],c=e[r];if(c===void 0)return e;if(!o.includes(c)){let r=String(e[a]??`请求失败`);if(n.onError)return n.onError(r,e);throw new t(r,{code:typeof c==`number`||typeof c==`string`?c:void 0,data:e,kind:s.includes(c)?`session`:`business`})}let l=e[i];return n.transform?n.transform(l,e):l}function g(e={}){return t=>h(t.data,e)}function _(e,n={}){let r=n.parseResponse?n.parseResponse(e):e;if(!r||typeof r!=`object`||Array.isArray(r))throw new t(`分页响应格式不正确`,{data:e,kind:`business`});let i=r,a=i[n.fieldNames?.items??`items`],o=i[n.fieldNames?.total??`total`],s=typeof o==`number`?o:Number(o);if(!Array.isArray(a)||!Number.isFinite(s))throw new t(`分页响应缺少有效的 items 或 total`,{data:e,kind:`business`});return{items:n.transform?a.map(n.transform):a,total:s}}exports.RequestError=t,exports.createRequestCache=e,exports.createRequestClient=m,exports.createStandardResponseParser=g,exports.parsePageResult=_,exports.parseStandardResponse=h;
|
package/dist/request.js
ADDED
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
//#region src/request/cache.ts
|
|
2
|
+
function e() {
|
|
3
|
+
let e = /* @__PURE__ */ new Map();
|
|
4
|
+
return {
|
|
5
|
+
get: (t) => e.get(t),
|
|
6
|
+
set: (t, n) => {
|
|
7
|
+
e.set(t, n);
|
|
8
|
+
},
|
|
9
|
+
has: (t) => e.has(t),
|
|
10
|
+
delete: (t) => {
|
|
11
|
+
e.delete(t);
|
|
12
|
+
},
|
|
13
|
+
clear: () => {
|
|
14
|
+
e.clear();
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
//#region src/request/error.ts
|
|
20
|
+
var t = class extends Error {
|
|
21
|
+
code;
|
|
22
|
+
data;
|
|
23
|
+
kind;
|
|
24
|
+
originalError;
|
|
25
|
+
response;
|
|
26
|
+
status;
|
|
27
|
+
constructor(e, t = {}) {
|
|
28
|
+
super(e), this.name = "RequestError", this.code = t.code, this.data = t.data, this.kind = t.kind ?? "business", this.originalError = t.originalError, this.response = t.response, this.status = t.status;
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
//#endregion
|
|
32
|
+
//#region src/request/client.ts
|
|
33
|
+
function n(e) {
|
|
34
|
+
return /^https?:\/\//i.test(e);
|
|
35
|
+
}
|
|
36
|
+
function r(e, t) {
|
|
37
|
+
return !e || n(t) ? t : `${e.replace(/\/+$/, "")}/${t.replace(/^\/+/, "")}`;
|
|
38
|
+
}
|
|
39
|
+
function i(e, t) {
|
|
40
|
+
if (!t) return e;
|
|
41
|
+
let r = new URL(e, n(e) ? void 0 : "http://lumal.local");
|
|
42
|
+
return Object.entries(t).forEach(([e, t]) => {
|
|
43
|
+
(Array.isArray(t) ? t : [t]).forEach((t) => {
|
|
44
|
+
t != null && r.searchParams.append(e, String(t));
|
|
45
|
+
});
|
|
46
|
+
}), n(e) ? r.toString() : `${r.pathname}${r.search}${r.hash}`;
|
|
47
|
+
}
|
|
48
|
+
function a(e) {
|
|
49
|
+
return e == null ? !1 : Array.isArray(e) ? !0 : !(typeof e != "object" || typeof FormData < "u" && e instanceof FormData || typeof URLSearchParams < "u" && e instanceof URLSearchParams || typeof Blob < "u" && e instanceof Blob || typeof ArrayBuffer < "u" && e instanceof ArrayBuffer);
|
|
50
|
+
}
|
|
51
|
+
function o(e, t, n) {
|
|
52
|
+
if (!(e === "GET" || t === void 0)) return a(t) ? (n.has("content-type") || n.set("content-type", "application/json"), JSON.stringify(t)) : t;
|
|
53
|
+
}
|
|
54
|
+
async function s(e) {
|
|
55
|
+
if (e.status !== 204) return (e.headers.get("content-type") ?? "").includes("application/json") ? e.json() : e.text();
|
|
56
|
+
}
|
|
57
|
+
async function c(e, t) {
|
|
58
|
+
if (e.has("Authorization") || !t.getToken) return;
|
|
59
|
+
let n = await t.getToken();
|
|
60
|
+
return n && e.set("Authorization", `${t.tokenPrefix ?? "Bearer"} ${n}`), n;
|
|
61
|
+
}
|
|
62
|
+
function l(e) {
|
|
63
|
+
return typeof ReadableStream > "u" || !(e instanceof ReadableStream);
|
|
64
|
+
}
|
|
65
|
+
function u(e, t) {
|
|
66
|
+
return !new Headers(t.headers).has("Authorization") && (e === "GET" || t.retryOnAuthRefresh === !0) && l(t.body);
|
|
67
|
+
}
|
|
68
|
+
function d(e, n) {
|
|
69
|
+
if (e instanceof t) return e;
|
|
70
|
+
let r = n?.aborted === !0 || typeof DOMException < "u" && e instanceof DOMException && e.name === "AbortError";
|
|
71
|
+
return new t(r ? "请求已取消" : "网络连接失败", {
|
|
72
|
+
kind: r ? "cancelled" : "network",
|
|
73
|
+
originalError: e
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
var f = 0;
|
|
77
|
+
function p(e) {
|
|
78
|
+
if (e.requestId) return typeof e.requestId == "function" ? e.requestId() : (f += 1, `lumal-${f.toString(36)}-${f}`);
|
|
79
|
+
}
|
|
80
|
+
function m(n = {}) {
|
|
81
|
+
let a = n.fetch ?? globalThis.fetch, l = /* @__PURE__ */ new Set(), f = n.cache ?? e(), m, h = !1;
|
|
82
|
+
async function g(e, g = {}) {
|
|
83
|
+
let _ = g.method ?? "GET", v = i(r(n.baseURL, e), g.query), y = p(n), b = g.cache, x = b?.enabled === !0, S = b?.cache ?? f, C = b?.key ?? `${_}:${v}`;
|
|
84
|
+
if (x && S.has(C)) return S.get(C);
|
|
85
|
+
let w = new Headers(g.headers), T = o(_, g.body, w), E = `${_}:${v}:${typeof T == "string" ? T : ""}`;
|
|
86
|
+
if (n.duplicateSubmit && l.has(E)) throw new t("Duplicate request", {
|
|
87
|
+
code: "DUPLICATE_REQUEST",
|
|
88
|
+
kind: "duplicate"
|
|
89
|
+
});
|
|
90
|
+
l.add(E);
|
|
91
|
+
try {
|
|
92
|
+
return await D(0);
|
|
93
|
+
} finally {
|
|
94
|
+
l.delete(E);
|
|
95
|
+
}
|
|
96
|
+
async function D(e) {
|
|
97
|
+
let r = new Headers(g.headers), i = await c(r, n);
|
|
98
|
+
y && r.set(n.requestIdHeader ?? "X-Request-Id", y);
|
|
99
|
+
let l = {
|
|
100
|
+
body: o(_, g.body, r),
|
|
101
|
+
headers: r,
|
|
102
|
+
method: _,
|
|
103
|
+
signal: g.signal
|
|
104
|
+
};
|
|
105
|
+
await n.onRequest?.({
|
|
106
|
+
init: l,
|
|
107
|
+
requestId: y,
|
|
108
|
+
url: v
|
|
109
|
+
});
|
|
110
|
+
let u;
|
|
111
|
+
try {
|
|
112
|
+
u = await a(v, l);
|
|
113
|
+
} catch (e) {
|
|
114
|
+
let t = d(e, g.signal);
|
|
115
|
+
throw await n.onRequestError?.({
|
|
116
|
+
error: t,
|
|
117
|
+
init: l,
|
|
118
|
+
requestId: y,
|
|
119
|
+
url: v
|
|
120
|
+
}), t;
|
|
121
|
+
}
|
|
122
|
+
let f;
|
|
123
|
+
try {
|
|
124
|
+
f = await s(u);
|
|
125
|
+
} catch (e) {
|
|
126
|
+
let n = new t("响应数据解析失败", {
|
|
127
|
+
kind: "http",
|
|
128
|
+
originalError: e,
|
|
129
|
+
response: u,
|
|
130
|
+
status: u.status
|
|
131
|
+
});
|
|
132
|
+
throw await k(n, l, u), n;
|
|
133
|
+
}
|
|
134
|
+
let p = {
|
|
135
|
+
attempt: e,
|
|
136
|
+
data: f,
|
|
137
|
+
init: l,
|
|
138
|
+
requestId: y,
|
|
139
|
+
response: u,
|
|
140
|
+
url: v
|
|
141
|
+
};
|
|
142
|
+
if (u.status === 401) return O(new t(u.statusText || "会话已过期", {
|
|
143
|
+
data: f,
|
|
144
|
+
kind: "session",
|
|
145
|
+
response: u,
|
|
146
|
+
status: u.status
|
|
147
|
+
}), p, i, e);
|
|
148
|
+
if (!u.ok) {
|
|
149
|
+
let e = new t(u.statusText || `HTTP ${u.status}`, {
|
|
150
|
+
data: f,
|
|
151
|
+
kind: "http",
|
|
152
|
+
response: u,
|
|
153
|
+
status: u.status
|
|
154
|
+
});
|
|
155
|
+
throw await k(e, l, u), e;
|
|
156
|
+
}
|
|
157
|
+
try {
|
|
158
|
+
let e = n.onResponse ? await n.onResponse(p) : f;
|
|
159
|
+
return h = !1, x && S.set(C, e), e;
|
|
160
|
+
} catch (n) {
|
|
161
|
+
if (n instanceof t && n.kind === "session") return O(n, p, i, e);
|
|
162
|
+
let r = n instanceof t ? n : new t(n instanceof Error ? n.message : "业务响应处理失败", {
|
|
163
|
+
data: f,
|
|
164
|
+
kind: "business",
|
|
165
|
+
originalError: n,
|
|
166
|
+
response: u,
|
|
167
|
+
status: u.status
|
|
168
|
+
});
|
|
169
|
+
throw await k(r, l, u), r;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
async function O(e, r, i, a) {
|
|
173
|
+
if (a === 0 && u(_, g) && n.authRefresh) {
|
|
174
|
+
let o = await n.getToken?.();
|
|
175
|
+
if (i && o && o !== i) return D(a + 1);
|
|
176
|
+
try {
|
|
177
|
+
return m ||= n.authRefresh.refresh(r).finally(() => {
|
|
178
|
+
m = void 0;
|
|
179
|
+
}), await m, h = !1, D(a + 1);
|
|
180
|
+
} catch (n) {
|
|
181
|
+
e = new t(e.message, {
|
|
182
|
+
code: e.code,
|
|
183
|
+
data: e.data,
|
|
184
|
+
kind: "session",
|
|
185
|
+
originalError: n,
|
|
186
|
+
response: e.response,
|
|
187
|
+
status: e.status
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
throw h || (h = !0, await n.onSessionExpired?.(r)), await k(e, r.init, r.response), e;
|
|
192
|
+
}
|
|
193
|
+
async function k(e, t, r) {
|
|
194
|
+
await n.onResponseError?.({
|
|
195
|
+
error: e,
|
|
196
|
+
init: t,
|
|
197
|
+
requestId: y,
|
|
198
|
+
response: r,
|
|
199
|
+
url: v
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
function _(e, t, n = {}) {
|
|
204
|
+
let { data: r, fileField: i = "file", ...a } = n, o = new FormData();
|
|
205
|
+
return (Array.isArray(t) ? t : [t]).forEach((e) => {
|
|
206
|
+
o.append(i, e);
|
|
207
|
+
}), r && Object.entries(r).forEach(([e, t]) => {
|
|
208
|
+
t != null && o.append(e, String(t));
|
|
209
|
+
}), g(e, {
|
|
210
|
+
...a,
|
|
211
|
+
body: o,
|
|
212
|
+
method: "POST"
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
return {
|
|
216
|
+
delete: (e, t) => g(e, {
|
|
217
|
+
...t,
|
|
218
|
+
method: "DELETE"
|
|
219
|
+
}),
|
|
220
|
+
get: (e, t) => g(e, {
|
|
221
|
+
...t,
|
|
222
|
+
method: "GET"
|
|
223
|
+
}),
|
|
224
|
+
patch: (e, t) => g(e, {
|
|
225
|
+
...t,
|
|
226
|
+
method: "PATCH"
|
|
227
|
+
}),
|
|
228
|
+
post: (e, t) => g(e, {
|
|
229
|
+
...t,
|
|
230
|
+
method: "POST"
|
|
231
|
+
}),
|
|
232
|
+
put: (e, t) => g(e, {
|
|
233
|
+
...t,
|
|
234
|
+
method: "PUT"
|
|
235
|
+
}),
|
|
236
|
+
request: g,
|
|
237
|
+
upload: _
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
//#endregion
|
|
241
|
+
//#region src/request/standard.ts
|
|
242
|
+
function h(e, n = {}) {
|
|
243
|
+
let r = n.fieldNames?.code ?? "code", i = n.fieldNames?.data ?? "data", a = n.fieldNames?.message ?? "message", o = n.successCodes ?? [0, 200], s = n.sessionExpiredCodes ?? [], c = e[r];
|
|
244
|
+
if (c === void 0) return e;
|
|
245
|
+
if (!o.includes(c)) {
|
|
246
|
+
let r = String(e[a] ?? "请求失败");
|
|
247
|
+
if (n.onError) return n.onError(r, e);
|
|
248
|
+
throw new t(r, {
|
|
249
|
+
code: typeof c == "number" || typeof c == "string" ? c : void 0,
|
|
250
|
+
data: e,
|
|
251
|
+
kind: s.includes(c) ? "session" : "business"
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
let l = e[i];
|
|
255
|
+
return n.transform ? n.transform(l, e) : l;
|
|
256
|
+
}
|
|
257
|
+
function g(e = {}) {
|
|
258
|
+
return (t) => h(t.data, e);
|
|
259
|
+
}
|
|
260
|
+
function _(e, n = {}) {
|
|
261
|
+
let r = n.parseResponse ? n.parseResponse(e) : e;
|
|
262
|
+
if (!r || typeof r != "object" || Array.isArray(r)) throw new t("分页响应格式不正确", {
|
|
263
|
+
data: e,
|
|
264
|
+
kind: "business"
|
|
265
|
+
});
|
|
266
|
+
let i = r, a = i[n.fieldNames?.items ?? "items"], o = i[n.fieldNames?.total ?? "total"], s = typeof o == "number" ? o : Number(o);
|
|
267
|
+
if (!Array.isArray(a) || !Number.isFinite(s)) throw new t("分页响应缺少有效的 items 或 total", {
|
|
268
|
+
data: e,
|
|
269
|
+
kind: "business"
|
|
270
|
+
});
|
|
271
|
+
return {
|
|
272
|
+
items: n.transform ? a.map(n.transform) : a,
|
|
273
|
+
total: s
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
//#endregion
|
|
277
|
+
export { t as RequestError, e as createRequestCache, m as createRequestClient, g as createStandardResponseParser, _ as parsePageResult, h as parseStandardResponse };
|
package/dist/router.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});function e(e,n={}){let{fieldNames:i}=n;return o((i?e.map(e=>t(e,i)):e).map(e=>r(e)))}function t(e,r){let i=(t,n)=>{let i=r[t];return i&&i in e?e[i]:n},a=e.meta??{},o={...a};n(o,`activeMenu`,i(`activeMenu`,a.activeMenu)),n(o,`badge`,i(`badge`,a.badge)),n(o,`badgeType`,i(`badgeType`,a.badgeType)),n(o,`badgeTone`,i(`badgeTone`,a.badgeTone)),n(o,`title`,i(`title`,a.title)),n(o,`icon`,i(`icon`,a.icon)),n(o,`order`,i(`order`,a.order)),n(o,`authority`,i(`authority`,a.authority)),n(o,`roles`,i(`roles`,a.roles)),n(o,`hideInMenu`,i(`hideInMenu`,a.hideInMenu)),n(o,`hideInBreadcrumb`,i(`hideInBreadcrumb`,a.hideInBreadcrumb)),n(o,`keepAlive`,i(`keepAlive`,a.keepAlive));let s={meta:o,path:i(`path`,e.path)??``},c=i(`name`,e.name);c!==void 0&&(s.name=c);let l=i(`component`,e.component);l!==void 0&&(s.component=l);let u=i(`redirect`,e.redirect);u!==void 0&&(s.redirect=u);let d=i(`externalLink`,e.externalLink);d!==void 0&&(s.externalLink=d);let f=i(`children`,e.children);return Array.isArray(f)&&(s.children=f.map(e=>t(e,r))),s}function n(e,t,n){n!==void 0&&(e[t]=n)}function r(e){let t=e.meta??{},n=i(e,t),o=e.name??x(e.path),s=typeof e.component==`string`&&e.component.trim()===``?void 0:e.component,c=e.externalLink??(typeof t.externalLink==`string`?t.externalLink:void 0),l=t.badgeType===`dot`||t.badgeType===`text`?t.badgeType:void 0,u=[`primary`,`success`,`warning`,`danger`,`info`].includes(String(t.badgeTone))?t.badgeTone:void 0;return{activeMenu:typeof t.activeMenu==`string`?t.activeMenu:void 0,badge:typeof t.badge==`string`||typeof t.badge==`number`?t.badge:void 0,badgeTone:u,badgeType:l,children:e.children?.map(e=>r(e)),component:s,externalLink:c,hideInBreadcrumb:t.hideInBreadcrumb===!0,icon:typeof t.icon==`string`?t.icon:void 0,id:o||e.path,keepAlive:t.keepAlive===!0,meta:t,name:o,order:typeof t.order==`number`?t.order:void 0,path:e.path,permissions:a(t.authority),redirect:e.redirect,roles:a(t.roles),title:n,visible:t.hideInMenu!==!0}}function i(e,t){return typeof t.title==`string`&&t.title?t.title:e.name??e.path}function a(e){return Array.isArray(e)?e.filter(Boolean):e?[e]:[]}function o(e){let t=s(e),n=new Map(t.map(e=>[e.id,e])),r=[];for(let e of t){let t=e.parentId?n.get(e.parentId):void 0;if(t){t.children.push(e);continue}r.push(e)}return l(r).map(e=>c(e))}function s(e){let t=[],n=0;function r(e,i){for(let a of e){let e={...a,children:[],parentId:a.parentId??i,sourceIndex:n};n+=1,t.push(e),a.children?.length&&r(a.children,a.id)}}return r(e),t}function c(e,t=``){let n=y(e.path,t),r=l(e.children).map(e=>c(e,n)),i=e.authority??e.permissions??[];return{activeMenu:e.activeMenu,authority:i,badge:e.badge,badgeTone:e.badgeTone,badgeType:e.badgeType,children:r,component:e.component,externalLink:e.externalLink,hideInBreadcrumb:e.hideInBreadcrumb===!0,icon:e.icon,id:e.id,meta:e.meta??{},name:e.name??x(e.id),order:e.order,path:n,redirect:e.redirect,permissions:e.permissions??[],roles:e.roles??[],keepAlive:e.keepAlive,title:e.title,visible:e.visible!==!1}}function l(e){return[...e].sort((e,t)=>{let n=(e.order??2**53-1)-(t.order??2**53-1);return n===0?e.sourceIndex-t.sourceIndex:n})}function u(e,t={}){return e.map(e=>d(e,t))}function d(e,t){let n={meta:{...e.meta,permissions:e.permissions,roles:e.roles,title:e.title},name:e.name,path:e.path};if((e.authority?.length??0)>0&&(n.meta.authority=e.authority),e.activeMenu&&(n.meta.activeMenu=e.activeMenu),e.badge!==void 0&&(n.meta.badge=e.badge),e.badgeType&&(n.meta.badgeType=e.badgeType),e.badgeTone&&(n.meta.badgeTone=e.badgeTone),e.hideInBreadcrumb&&(n.meta.hideInBreadcrumb=!0),e.externalLink&&(n.meta.externalLink=e.externalLink),e.redirect&&(n.redirect=e.redirect),e.component){let r=typeof e.component==`string`?t.componentResolver?.(e.component):e.component;r&&(n.component=r)}return e.children.length&&(n.children=u(e.children,t)),n}function f(e,t={}){return e.filter(e=>e.visible).flatMap(e=>{let n=f(e.children,t);return!h(e,t)||e.children.length>0&&n.length===0?[]:{...e.badge===void 0?{}:{badge:e.badge},...e.badgeTone?{badgeTone:e.badgeTone}:{},...e.badgeType?{badgeType:e.badgeType}:{},children:n,...e.externalLink?{externalLink:e.externalLink,externalTarget:e.meta.externalTarget===`_self`?`_self`:`_blank`}:{},icon:e.icon,path:e.path,...e.redirect?{redirect:e.redirect}:{},title:e.title}})}function p(e,t={}){let n=f(e,t),r=new Set(e.filter(e=>e.meta?.topMenu===!0).map(e=>e.path)),i=n.filter(e=>r.has(e.path));return i.length>0?i:n}function m(e,t={}){for(let n of e){if(!n.visible||!h(n,t))continue;let e=m(n.children,t);if(e)return e;if(n.children.length===0)return n}}function h(e,t){let n=e.permissions.length===0||t.hasPermission?.(e.permissions)!==!1,r=e.roles.length===0||t.hasRole?.(e.roles)!==!1;return n&&r}function g(e){let t=[],n=[];function r(e){return[e.name,...e.children?.flatMap(r)??[]]}function i(i){for(let a of i){if(a.name&&e.hasRoute(a.name))continue;let i=e.addRoute(a),o=a.name;n.push(typeof i==`function`?i:()=>{o&&e.hasRoute(o)&&e.removeRoute(o)});for(let e of r(a))t.includes(e)||t.push(e)}}function a(){for(;n.length;)n.pop()?.();t.length=0}return{register:i,reset:a,get names(){return[...t]}}}function _(e){let{fallback:t,modules:n,viewsPrefix:r=`../views`}=e,i=new Map,a=r.replace(/\/+$/,``);return e=>{let r=v(e),o=[`${a}/${r}.vue`,`${a}/${r}/index.vue`];for(let e of o){let t=n[e];if(t)return i.get(e)||(i.set(e,t),t)}return t}}function v(e){return e.replace(/\\/g,`/`).replace(/^\.?\//,``).replace(/\/+/g,`/`).replace(/\.vue$/i,``).replace(/^\/+|\/+$/g,``)}function y(e,t=``){return e.startsWith(`/`)?b(e):b(`${t===`/`?``:t}/${e}`)}function b(e){let t=e.replace(/\/+/g,`/`);return t.startsWith(`/`)?t:`/${t}`}function x(e){return e.split(/[^a-z0-9]+/i).filter(Boolean).map(e=>`${e.charAt(0).toUpperCase()}${e.slice(1)}`).join(``)}var S=class extends Error{firstSource;kind;secondSource;value;constructor(e,t,n,r){super(`菜单路由 ${e} 冲突:${t}(${n} / ${r})`),this.name=`MenuRouteConflictError`,this.kind=e,this.value=t,this.firstSource=n,this.secondSource=r}};function C(e,t,n){try{e.onError?.(t,n)}catch{}}function w(e,t,n){return Error(`${n}:${e.name} (${e.path}, ${t})`)}function T(e,t,n){return async()=>{try{return await e()}catch(r){return E(r,t,n,e!==t.fallbackComponent)}}}async function E(e,t,n,r){if(C(t,e,{...n,phase:`load-component`}),!t.fallbackComponent||!r)throw e;try{return await t.fallbackComponent()}catch(e){throw C(t,e,{...n,component:void 0,phase:`load-component`}),e}}function D(e){return typeof e==`object`&&!!e&&`then`in e}function O(e,t,n){return!t.fallbackComponent&&!t.onError?e:Object.assign((...r)=>{try{let i=e(...r);return D(i)?Promise.resolve(i).catch(e=>E(e,t,n,!0)):i}catch(e){return E(e,t,n,!0)}},e)}function k(e,t,n){let r=new Map;function i(e){let a=e.component,o={component:typeof a==`string`?a:void 0,phase:`resolve-component`,routeName:e.name,routePath:e.path,source:t};if(t===`remote`&&a!==void 0&&typeof a!=`string`){let r=w(e,t,`远程菜单组件必须是字符串`);throw C(n,r,o),r}if(a!==void 0&&typeof a!=`string`&&typeof a!=`function`&&typeof a!=`object`){let r=w(e,t,`静态菜单组件类型无效`);throw C(n,r,o),r}if(typeof a==`string`&&!r.has(a)){let i;try{i=n.componentResolver?.(a)}catch(e){throw C(n,e,o),e}if(i)r.set(a,typeof i==`function`?T(i,n,o):i);else{let i=w(e,t,`无法解析组件 "${a}"`);if(C(n,i,o),!n.fallbackComponent)throw i;r.set(a,T(n.fallbackComponent,n,o))}}let s=!!(e.redirect||e.externalLink||e.children.length>0);if(a==null&&!s){let r=w(e,t,`叶子菜单缺少路由组件`);throw C(n,r,o),r}e.children.forEach(i)}return e.forEach(i),r}function A(e,t,n){let r=k(e,t,n),i=u(e,{componentResolver:e=>r.get(e)});return t===`static`&&j(e,i,n),{menus:e,routes:i}}function j(e,t,n){e.forEach((e,r)=>{let i=t[r];i&&(typeof e.component==`function`&&(i.component=O(e.component,n,{phase:`load-component`,routeName:e.name,routePath:e.path,source:`static`})),e.children.length&&i.children?.length&&j(e.children,i.children,n))})}function M(e,t){return e.map((e,t)=>({index:t,item:e})).sort((e,n)=>{let r=(typeof t(e.item)==`number`?t(e.item):2**53-1)-(typeof t(n.item)==`number`?t(n.item):2**53-1);return r===0?e.index-n.index:r}).map(e=>e.item)}function N(e,t){return{menus:M([...e.menus,...t.menus],e=>e.order),routes:M([...e.routes,...t.routes],e=>e.meta.order)}}function P(e,t){return e.flatMap(e=>[{node:e,source:t},...P(e.children,t)])}function F(e,t,n,r){let i=[...P(e,`static`),...P(t,`remote`)],a=new Map,o=new Map,s=new Map;function c(e,t,n,r){let i=r.get(t);if(i)throw new S(e,t,i.source,n.source);r.set(t,n)}for(let e of i){let{node:t}=e;if(!t.id||typeof t.name!=`string`||!t.name.trim()||!t.path)throw w(t,e.source,`菜单路由 id、name 和 path 不能为空`);c(`name`,t.name,e,o),c(`path`,t.path,e,s),c(`id`,t.id,e,a)}for(let[e,t]of o)if(n.hasRoute(e)&&!r.has(e))throw new S(`name`,e,`existing`,t.source);let l=n.getRoutes().filter(e=>typeof e.name!=`string`||!r.has(e.name)),u=new Set(l.map(e=>e.path));for(let[e,t]of s)if(u.has(e))throw new S(`path`,e,`existing`,t.source)}function I(e){return[...e]}function L(e,t,n){let r=t?.fieldNames?.path??`path`,i=t?.fieldNames?.name??`name`,a=t?.fieldNames?.children??`children`;for(let o of e){let e=o,s=r in e?e[r]:e.path;if(typeof s!=`string`||!s.trim()){let t=i in e?e[i]:e.name;throw Error(`菜单路由 path 不能为空:${String(t??`unknown`)} (${n})`)}let c=i in e?e[i]:e.name;if(c!==void 0&&(typeof c!=`string`||!c.trim()))throw Error(`菜单路由 name 必须是非空字符串:${String(c)} (${n})`);let l=a in e?e[a]:e.children;Array.isArray(l)&&L(l,t,n)}}function R(t){if(typeof t.router.getRoutes!=`function`)throw TypeError(`菜单路由运行时要求 router.getRoutes() 用于检测既有 path 冲突`);let n=g(t.router),r=g(t.router),i=()=>({menus:[],routes:[]}),a=t.staticMenus??[];L(a,void 0,`static`);let o=A(e(a),`static`,t),s=i(),c=!1,l=!1,u=0,d;try{F(o.menus,[],t.router,new Set),n.register(o.routes)}catch(e){throw n.reset(),C(t,e,{phase:`register-routes`,source:`static`}),e}function h(){return N(o,s)}function _(){return new Set([...n.names,...r.names])}function v(e){let n=s;r.reset();try{r.register(e.routes)}catch(e){throw r.reset(),r.register(n.routes),C(t,e,{phase:`register-routes`,source:`remote`}),e}s=e,c=!0}function y(n){if(l)return Promise.reject(Error(`菜单路由运行时已释放`));if(d)return d;if(c&&!n)return Promise.resolve(I(s.menus));if(!t.loadRemoteMenus)return c=!0,Promise.resolve([]);let r=u,i=(async()=>{let n;try{n=await t.loadRemoteMenus()}catch(e){throw C(t,e,{phase:`load-remote-menus`,source:`remote`}),e}if(l||r!==u)return I(s.menus);L(n,t.remoteNormalizeOptions,`remote`);let i=A(e(n,t.remoteNormalizeOptions),`remote`,t);return F(o.menus,i.menus,t.router,_()),l||r!==u||v(i),I(s.menus)})().finally(()=>{d===i&&(d=void 0)});return d=i,i}function b(){u+=1,d=void 0,r.reset(),s=i(),c=!1}function x(){l||(l=!0,b(),n.reset(),o=i())}return{get firstAccessibleMenu(){return m(h().menus,{hasPermission:t.hasPermission,hasRole:t.hasRole})},get firstAccessiblePath(){return this.firstAccessibleMenu?.path??``},get menus(){return I(h().menus)},get remoteLoaded(){return c},get remoteMenus(){return I(s.menus)},get routeNames(){return[...n.names,...r.names]},get routes(){return I(h().routes)},get sidebarMenus(){return f(h().menus,{hasPermission:t.hasPermission,hasRole:t.hasRole})},get staticMenus(){return I(o.menus)},get topMenus(){return p(h().menus,{hasPermission:t.hasPermission,hasRole:t.hasRole})},loadRemote:()=>y(!1),reload:()=>y(!0),resetRemote:b,dispose:x}}exports.MenuRouteConflictError=S,exports.createGlobComponentResolver=_,exports.createMenuRouteRuntime=R,exports.createRouteRecords=u,exports.createRouteRegistry=g,exports.createSidebarMenus=f,exports.createTopMenus=p,exports.findFirstAccessibleMenu=m,exports.normalizeMenuNodes=o,exports.normalizeMenuRecords=e;
|