@moneko/react 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +2 -0
- package/lib/app.d.ts +7 -0
- package/lib/app.js +2 -0
- package/lib/app.js.map +1 -0
- package/lib/components/app-router.d.ts +8 -0
- package/lib/components/app-router.js +2 -0
- package/lib/components/app-router.js.map +1 -0
- package/lib/components/fallback-comp.d.ts +10 -0
- package/lib/components/fallback-comp.js +2 -0
- package/lib/components/fallback-comp.js.map +1 -0
- package/lib/components/iconfont.d.ts +14 -0
- package/lib/components/iconfont.js +2 -0
- package/lib/components/iconfont.js.map +1 -0
- package/lib/components/layout-menu.d.ts +7 -0
- package/lib/components/layout-menu.js +2 -0
- package/lib/components/layout-menu.js.map +1 -0
- package/lib/entry.d.ts +9 -0
- package/lib/entry.js +2 -0
- package/lib/entry.js.map +1 -0
- package/lib/index.d.ts +20 -0
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -0
- package/lib/menu.d.ts +60 -0
- package/lib/menu.js +2 -0
- package/lib/menu.js.map +1 -0
- package/lib/normalize.css +208 -0
- package/lib/packages/back-stage/app.d.ts +5 -0
- package/lib/packages/back-stage/app.js +2 -0
- package/lib/packages/back-stage/app.js.map +1 -0
- package/lib/packages/back-stage/layut.d.ts +5 -0
- package/lib/packages/back-stage/layut.js +105 -0
- package/lib/packages/back-stage/layut.js.map +1 -0
- package/lib/persistentKey.d.ts +18 -0
- package/lib/persistentKey.js +2 -0
- package/lib/persistentKey.js.map +1 -0
- package/lib/prefix/prefix-remote-react-refresh.d.ts +1 -0
- package/lib/prefix/prefix-remote-react-refresh.js +2 -0
- package/lib/prefix/prefix-remote-react-refresh.js.map +1 -0
- package/lib/prefix/react-reouter-dom.d.ts +4 -0
- package/lib/prefix/react-reouter-dom.js +2 -0
- package/lib/prefix/react-reouter-dom.js.map +1 -0
- package/lib/prefix/react-router-dom.d.ts +1 -0
- package/lib/react-router-dom/link.d.ts +9 -0
- package/lib/react-router-dom/link.js +2 -0
- package/lib/react-router-dom/link.js.map +1 -0
- package/lib/react-router-dom/use-navgate.d.ts +3 -0
- package/lib/react-router-dom/use-navgate.js +2 -0
- package/lib/react-router-dom/use-navgate.js.map +1 -0
- package/package.json +46 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2023 Moneko
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
package/lib/app.d.ts
ADDED
package/lib/app.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as r}from"react/jsx-runtime";import{useEffect as o}from"react";import{RouterProvider as a}from"react-router-dom";import{RouterFragment as e,createRouter as m,routerData as t}from"./components/app-router.js";import p from"@app/fallback";import{lang as i,setLang as l}from"@app/locales";import f from"@app";export default(({basename:n=f.base,fallback:c=p&&r(p,{}),language:s})=>(o(()=>{s&&s!==i.language&&l(s)},[s,i.language]),r(e,{children:r(a,{router:m(t,{basename:n,window:window}),fallbackElement:c})})));
|
|
2
|
+
//# sourceMappingURL=app.js.map
|
package/lib/app.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/app.tsx"],"sourcesContent":["import React, { type FC, type ReactElement, useEffect } from 'react';\nimport { RouterProvider } from 'react-router-dom';\nimport { RouterFragment, createRouter, routerData } from './components/app-router.js';\nimport Fallback from '@app/fallback';\nimport { lang, setLang } from '@app/locales';\nimport app from '@app';\n\nconst App: FC<{ basename?: string; fallback?: ReactElement; language?: string }> = ({\n basename = app.base,\n fallback = Fallback && <Fallback />,\n language,\n}) => {\n\n useEffect(() => {\n if (language && language !== lang.language) {\n setLang(language);\n }\n }, [language, lang.language]);\n return (\n <RouterFragment>\n <RouterProvider\n router={createRouter(routerData, {\n basename: basename,\n window: window,\n })}\n fallbackElement={fallback}\n />\n </RouterFragment>\n );\n};\n\nexport default App;\n"],"names":["useEffect","RouterProvider","RouterFragment","createRouter","routerData","Fallback","lang","setLang","app","basename","base","fallback","language","router","window","fallbackElement"],"mappings":"uCAAA,QAA4CA,aAAAA,CAAS,KAAQ,OAAQ,AACrE,QAASC,kBAAAA,CAAc,KAAQ,kBAAmB,AAClD,QAASC,kBAAAA,CAAc,CAAEC,gBAAAA,CAAY,CAAEC,cAAAA,CAAU,KAAQ,4BAA6B,AACtF,QAAOC,MAAc,eAAgB,AACrC,QAASC,QAAAA,CAAI,CAAEC,WAAAA,CAAO,KAAQ,cAAe,AAC7C,QAAOC,MAAS,MAAO,AA0BvB,eAxBmF,CAAA,CAAC,CAClFC,SAAAA,EAAWD,EAAIE,IAAI,CACnBC,SAAAA,EAAWN,GAAY,EAACA,KAAW,CACnCO,SAAAA,CAAQ,CACT,IAECZ,EAAU,KACJY,GAAYA,IAAaN,EAAKM,UAChCL,EAAQK,EAEZ,EAAG,CAACA,EAAUN,EAAKM,SAAS,EAE1B,EAACV,YACC,EAACD,GACCY,OAAQV,EAAaC,EAAY,CAC/BK,SAAUA,EACVK,OAAQA,MACV,GACAC,gBAAiBJ,MAIzB,CAEmB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type ReactElement, Fragment as ReactFragment } from 'react';
|
|
2
|
+
import { AliveScope } from 'react-activation';
|
|
3
|
+
import { createHashRouter } from 'react-router-dom';
|
|
4
|
+
import { RouteConfig } from '@app/routes';
|
|
5
|
+
export declare const createRouter: typeof createHashRouter;
|
|
6
|
+
export declare let RouterFragment: typeof ReactFragment | typeof AliveScope;
|
|
7
|
+
export declare function prefixRouter(list: RouteConfig[], fallback: ReactElement | null): RouteConfig[];
|
|
8
|
+
export declare const routerData: RouteConfig[];
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as e}from"react/jsx-runtime";import{Fragment as r,Suspense as t,cloneElement as o,createElement as a,isValidElement as n,useEffect as i}from"react";import l from"@moneko/common/lib/isObject";import{AliveScope as m,KeepAlive as p,useAliveController as c}from"react-activation";import{createBrowserRouter as s,createHashRouter as f}from"react-router-dom";import u from"@app/fallback";import d from"@app/routes";import h from"@app";let w=({children:r,name:t,...a})=>{let{drop:n,dropScope:l,clear:m,getCachingNodes:s}=c(),f=window.location.pathname+window.location.hash;return i(()=>{window.__POWERED_BY_QIANKUN__&&window.mainApp&&Object.assign(window.mainApp.currentTarget,{aliveController:{drop:n,dropScope:l,clear:m,getCachingNodes:s}})},[m,n,l,s]),e(p,{id:f,name:f,...a,children:o(r,{path:t,selfUrl:f})})},b=!1;export const createRouter="hash"===h.routerMode?f:s;export let RouterFragment=r;export function prefixRouter(r,i){return r.map(r=>{let p=Object.assign({},r);if(p.alive&&!b&&(b=!0,RouterFragment=m),p.element){let m=Object.assign({path:p.key},p.props),c=n(p.element)?o(p.element,m):a(p.element,m);if(p.alive){let e={name:p.key,cacheKey:p.key};l(p.alive)&&Object.assign(e,p.alive),p.element=a(w,e,c)}else p.element=e(t,{fallback:r.fallback||i,children:c})}return Array.isArray(p.children)&&(p.children=prefixRouter(p.children,i)),p})}export const routerData=prefixRouter(d,u?e(u,{}):null);
|
|
2
|
+
//# sourceMappingURL=app-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/app-router.tsx"],"sourcesContent":["import React, {\n type ReactElement,\n Fragment as ReactFragment,\n Suspense,\n cloneElement as clone,\n createElement as create,\n isValidElement,\n useEffect,\n} from 'react';\nimport { isObject } from '@moneko/common';\nimport { AliveScope, KeepAlive, type KeepAliveProps, useAliveController } from 'react-activation';\nimport { createBrowserRouter, createHashRouter } from 'react-router-dom';\nimport Fallback from '@app/fallback';\nimport routes, { RouteConfig } from '@app/routes';\nimport app from '@app';\n\nconst PrefixKeepAlive: React.FC<Partial<KeepAliveProps>> = ({ children, name, ...args }) => {\n const { drop, dropScope, clear, getCachingNodes } = useAliveController();\n const id = window.location.pathname + window.location.hash;\n\n useEffect(() => {\n if (window.__POWERED_BY_QIANKUN__ && window.mainApp) {\n Object.assign(window.mainApp.currentTarget, {\n aliveController: { drop, dropScope, clear, getCachingNodes },\n });\n }\n }, [clear, drop, dropScope, getCachingNodes]);\n return (\n <KeepAlive id={id} name={id} {...args}>\n {clone(children as ReactElement, {\n path: name,\n selfUrl: id,\n })}\n </KeepAlive>\n );\n};\n\nlet existKeepAlive = false;\n\nexport const createRouter =\n app.routerMode === 'hash' ? createHashRouter : createBrowserRouter;\nexport let RouterFragment: typeof ReactFragment | typeof AliveScope = ReactFragment;\n\nexport function prefixRouter(list: RouteConfig[], fallback: ReactElement | null) {\n return list.map((r) => {\n const _ = Object.assign({}, r);\n\n if (!!_.alive && !existKeepAlive) {\n existKeepAlive = true;\n RouterFragment = AliveScope;\n }\n if (_.element) {\n const props = Object.assign({ path: _.key }, _.props);\n const ele = isValidElement(_.element) ? clone(_.element, props) : create(_.element, props);\n\n if (_.alive) {\n const aliveProps: Partial<KeepAliveProps> = {\n name: _.key,\n cacheKey: _.key,\n };\n\n if (isObject(_.alive)) {\n Object.assign(aliveProps, _.alive);\n }\n _.element = create(PrefixKeepAlive, aliveProps, ele);\n } else {\n _.element = <Suspense fallback={r.fallback || fallback}>{ele}</Suspense>;\n }\n }\n\n if (Array.isArray(_.children)) {\n _.children = prefixRouter(_.children, fallback);\n }\n return _;\n });\n}\n\nexport const routerData = prefixRouter(routes, Fallback ? <Fallback /> : null);\n"],"names":["Fragment","ReactFragment","Suspense","cloneElement","clone","createElement","create","isValidElement","useEffect","isObject","AliveScope","KeepAlive","useAliveController","createBrowserRouter","createHashRouter","Fallback","routes","app","PrefixKeepAlive","children","name","args","drop","dropScope","clear","getCachingNodes","id","window","location","pathname","hash","__POWERED_BY_QIANKUN__","mainApp","Object","assign","currentTarget","aliveController","path","selfUrl","existKeepAlive","createRouter","routerMode","RouterFragment","prefixRouter","list","fallback","map","r","_","alive","element","props","key","ele","aliveProps","cacheKey","Array","isArray","routerData"],"mappings":"uCAAA,QAEEA,YAAYC,CAAa,CACzBC,YAAAA,CAAQ,CACRC,gBAAgBC,CAAK,CACrBC,iBAAiBC,CAAM,CACvBC,kBAAAA,CAAc,CACdC,aAAAA,CAAS,KACJ,OAAQ,AACf,QAASC,MAAgB,6BAAiB,AAC1C,QAASC,cAAAA,CAAU,CAAEC,aAAAA,CAAS,CAAuBC,sBAAAA,CAAkB,KAAQ,kBAAmB,AAClG,QAASC,uBAAAA,CAAmB,CAAEC,oBAAAA,CAAgB,KAAQ,kBAAmB,AACzE,QAAOC,MAAc,eAAgB,AACrC,QAAOC,MAA6B,aAAc,AAClD,QAAOC,MAAS,MAAO,CAEvB,IAAMC,EAAqD,CAAC,CAAEC,SAAAA,CAAQ,CAAEC,KAAAA,CAAI,CAAE,GAAGC,EAAM,IACrF,GAAM,CAAEC,KAAAA,CAAI,CAAEC,UAAAA,CAAS,CAAEC,MAAAA,CAAK,CAAEC,gBAAAA,CAAe,CAAE,CAAGb,IAC9Cc,EAAKC,OAAOC,SAASC,SAAWF,OAAOC,SAASE,KAStD,OAPAtB,EAAU,KACJmB,OAAOI,wBAA0BJ,OAAOK,SAC1CC,OAAOC,OAAOP,OAAOK,QAAQG,cAAe,CAC1CC,gBAAiB,CAAEd,KAAAA,EAAMC,UAAAA,EAAWC,MAAAA,EAAOC,gBAAAA,CAAgB,CAC7D,EAEJ,EAAG,CAACD,EAAOF,EAAMC,EAAWE,EAAgB,EAE1C,EAACd,GAAUe,GAAIA,EAAIN,KAAMM,EAAK,GAAGL,CAAI,UAClCjB,EAAMe,EAA0B,CAC/BkB,KAAMjB,EACNkB,QAASZ,CACX,IAGN,EAEIa,EAAiB,CAAA,CAErB,QAAO,MAAMC,aACXvB,AAAmB,SAAnBA,EAAIwB,WAAwB3B,EAAmBD,CAAoB,AACrE,QAAO,IAAI6B,eAA2DzC,CAAc,AAEpF,QAAO,SAAS0C,aAAaC,CAAmB,CAAEC,CAA6B,EAC7E,OAAOD,EAAKE,IAAI,AAACC,IACf,IAAMC,EAAIf,OAAOC,OAAO,CAAC,EAAGa,GAM5B,GAJMC,EAAEC,OAAS,CAACV,IAChBA,EAAiB,CAAA,EACjBG,eAAiBhC,GAEfsC,EAAEE,QAAS,CACb,IAAMC,EAAQlB,OAAOC,OAAO,CAAEG,KAAMW,EAAEI,GAAI,EAAGJ,EAAEG,OACzCE,EAAM9C,EAAeyC,EAAEE,SAAW9C,EAAM4C,EAAEE,QAASC,GAAS7C,EAAO0C,EAAEE,QAASC,GAEpF,GAAIH,EAAEC,MAAO,CACX,IAAMK,EAAsC,CAC1ClC,KAAM4B,EAAEI,IACRG,SAAUP,EAAEI,GACd,EAEI3C,EAASuC,EAAEC,QACbhB,OAAOC,OAAOoB,EAAYN,EAAEC,OAE9BD,EAAEE,QAAU5C,EAAOY,EAAiBoC,EAAYD,EAClD,MACEL,EAAEE,QAAU,EAAChD,GAAS2C,SAAUE,EAAEF,UAAYA,WAAWQ,GAE7D,CAKA,OAHIG,MAAMC,QAAQT,EAAE7B,WAClB6B,CAAAA,EAAE7B,SAAWwB,aAAaK,EAAE7B,SAAU0B,EAAQ,EAEzCG,CACT,EACF,CAEA,OAAO,MAAMU,WAAaf,aAAa3B,EAAQD,EAAW,EAACA,MAAc,KAAM"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export interface FallbackCompProps {
|
|
3
|
+
/** 组件所在父级目录(默认:components) */
|
|
4
|
+
directory?: string;
|
|
5
|
+
/** 组件所在位置(不包含父级目录) */
|
|
6
|
+
compName: string;
|
|
7
|
+
[key: string]: any;
|
|
8
|
+
}
|
|
9
|
+
declare const _default: React.NamedExoticComponent<FallbackCompProps>;
|
|
10
|
+
export default _default;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as e}from"react/jsx-runtime";import*as t from"react";export default t.memo(r=>{let{directory:o="components",compName:m,...n}=r,a=t.Fragment;try{a=require(`@/${o}/${m}`).default}catch(e){console.info(`${m} 组件不存在, 请在 @/${o}/${m} 目录下新建 index.tsx, 并导出默认组件`)}return t.isValidElement(a)?null:e(a,{...n})});
|
|
2
|
+
//# sourceMappingURL=fallback-comp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/fallback-comp.tsx"],"sourcesContent":["import * as React from 'react';\n\nexport interface FallbackCompProps {\n /** 组件所在父级目录(默认:components) */\n directory?: string;\n /** 组件所在位置(不包含父级目录) */\n compName: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n}\nconst FallbackComp: React.FC<FallbackCompProps> = (props: FallbackCompProps) => {\n const { directory = 'components', compName, ...prop } = props;\n\n let Comp = React.Fragment;\n\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n Comp = require(`@/${directory}/${compName}`).default;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.info(\n `${compName} 组件不存在, 请在 @/${directory}/${compName} 目录下新建 index.tsx, 并导出默认组件`,\n );\n }\n\n return React.isValidElement(Comp) ? null : <Comp {...prop} />;\n};\n\nexport default React.memo(FallbackComp);\n"],"names":["React","memo","props","directory","compName","prop","Comp","Fragment","require","default","error","console","info","isValidElement"],"mappings":"uCAAA,WAAYA,MAAW,OAAQ,AA4B/B,gBAAeA,EAAMC,KAlB6B,AAACC,IACjD,GAAM,CAAEC,UAAAA,EAAY,YAAY,CAAEC,SAAAA,CAAQ,CAAE,GAAGC,EAAM,CAAGH,EAEpDI,EAAON,EAAMO,SAEjB,GAAI,CAEFD,EAAOE,QAAQ,CAAC,EAAE,EAAEL,EAAU,CAAC,EAAEC,EAAS,CAAC,EAAEK,OAC/C,CAAE,MAAOC,EAAO,CAEdC,QAAQC,KACN,CAAC,EAAER,EAAS,aAAa,EAAED,EAAU,CAAC,EAAEC,EAAS,yBAAyB,CAAC,CAE/E,CAEA,OAAOJ,EAAMa,eAAeP,GAAQ,KAAO,EAACA,GAAM,GAAGD,CAAI,EAC3D,EAEwC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface IconFontOption {
|
|
3
|
+
scriptUrl?: string | string[];
|
|
4
|
+
extraCommonProps?: Record<string, any>;
|
|
5
|
+
}
|
|
6
|
+
interface IconBaseProps extends React.HTMLProps<HTMLSpanElement> {
|
|
7
|
+
spin?: boolean;
|
|
8
|
+
rotate?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface IconFontProps<T extends string = string> extends IconBaseProps {
|
|
11
|
+
type: T;
|
|
12
|
+
}
|
|
13
|
+
declare const _default: React.FC<import("@ant-design/icons/lib/components/IconFont").IconFontProps<string>>;
|
|
14
|
+
export default _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/iconfont.tsx"],"sourcesContent":["import React from 'react';\nimport { createFromIconfontCN } from '@ant-design/icons';\n\nexport interface IconFontOption {\n scriptUrl?: string | string[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n extraCommonProps?: Record<string, any>;\n}\ninterface IconBaseProps extends React.HTMLProps<HTMLSpanElement> {\n spin?: boolean;\n rotate?: number;\n}\nexport interface IconFontProps<T extends string = string> extends IconBaseProps {\n type: T;\n}\n\nexport default createFromIconfontCN((process.env.iconfont as IconFontOption) || {});\n"],"names":["createFromIconfontCN","process","env","iconfont"],"mappings":"AAAA,MAAkB,OAAQ,AAC1B,QAASA,wBAAAA,CAAoB,KAAQ,mBAAoB,AAezD,gBAAeA,EAAqB,AAACC,QAAQC,IAAIC,UAA+B,CAAC,EAAG"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as e}from"react/jsx-runtime";import t,{isValidElement as r,useCallback as n,useEffect as o,useMemo as l}from"react";import{cx as m}from"@moneko/css";import{Menu as i}from"antd";import{Link as a,useSearchParams as s}from"react-router-dom";import p from"./iconfont";import{t as u}from"@app/locales";import c,{expandMenu as d}from"../menu";export default t.memo(t=>{let{collapsed:f,...y}=t,{menus:h,kv:g,activeKey:K,expandKey:I}=c,[x]=s(),b=n(t=>t.map(t=>{let{icon:n,itemIcon:o,disabled:l,type:m,key:i,path:s,label:c,children:d}=t,f=u[c],y=Array.isArray(d)?b(d):d;return Object.assign({path:s,type:m,disabled:l,key:i,itemIcon:r(o)?o:o?e(p,{type:o}):null,icon:r(n)?n:n?e(p,{type:n}):null,label:s&&!y?.length?e(a,{preventScrollReset:!0,to:`${i}?menuId=${i}`,children:f}):f},y?.length&&{children:y})}),[u]),j=l(()=>x.get("menuId"),[x]),v=l(()=>b(h.filter(e=>!e.hideMenu)),[b,h]),A=l(()=>K?[K]:[],[K]);return o(()=>{let e=j&&g[j];if(e&&!f&&c.expandKey){let t=[...c.expandKey];t.includes(j)||t.push(j),e.parentId&&!t.includes(e.parentId)&&t.push(e.parentId),d(t)}},[f,j,g]),o(()=>{j!==K&&j&&(c.activeKey=j)},[K,j]),e(i,{defaultSelectedKeys:A,selectedKeys:A,defaultOpenKeys:I,openKeys:f?void 0:I,onOpenChange:d,mode:"inline",subMenuCloseDelay:0,triggerSubMenuAction:"click",items:v,...y,className:m("layout-menu",y.className)})});
|
|
2
|
+
//# sourceMappingURL=layout-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/layout-menu.tsx"],"sourcesContent":["import React, { isValidElement, useCallback, useEffect, useMemo } from 'react';\nimport { cx } from '@moneko/css';\nimport { Menu, type MenuProps } from 'antd';\nimport { Link, useSearchParams } from 'react-router-dom';\nimport IconFont from './iconfont';\nimport { t } from '@app/locales';\nimport menu, { type MenuItem, expandMenu } from '../menu';\n\nexport interface LayoutMenuProps extends MenuProps {\n collapsed?: boolean;\n}\n\nconst LayoutMenu: React.FC<LayoutMenuProps> = (prop) => {\n const { collapsed, ...menuProps } = prop;\n const { menus, kv, activeKey, expandKey } = menu;\n const [search] = useSearchParams();\n const filterMenu = useCallback(\n (list: MenuItem[]): MenuProps['items'] => {\n return list.map((item) => {\n const { icon, itemIcon, disabled, type, key, path, label, children } = item;\n const text = t[label as string];\n const childrens = Array.isArray(children) ? filterMenu(children) : children;\n\n return Object.assign(\n {\n path,\n type,\n disabled,\n key,\n itemIcon: isValidElement(itemIcon) ? (\n itemIcon\n ) : itemIcon ? (\n <IconFont type={itemIcon} />\n ) : null,\n icon: isValidElement(icon) ? icon : icon ? <IconFont type={icon} /> : null,\n label:\n path && !childrens?.length ? (\n <Link preventScrollReset to={`${key}?menuId=${key}`}>\n {text}\n </Link>\n ) : (\n text\n ),\n },\n childrens?.length && {\n children: childrens,\n },\n );\n });\n },\n [t],\n );\n\n const menuId = useMemo(() => search.get('menuId'), [search]);\n const items = useMemo<MenuProps['items']>(\n () => filterMenu(menus.filter((m) => !m.hideMenu)),\n [filterMenu, menus],\n );\n const selectedKeys = useMemo(() => (activeKey ? [activeKey] : []), [activeKey]);\n\n useEffect(() => {\n const current = menuId && kv[menuId];\n\n if (current && !collapsed && menu.expandKey) {\n const opk = [...menu.expandKey];\n\n if (!opk.includes(menuId as string)) opk.push(menuId as string);\n if (current.parentId && !opk.includes(current.parentId)) opk.push(current.parentId);\n expandMenu(opk);\n }\n }, [collapsed, menuId, kv]);\n useEffect(() => {\n if (menuId !== activeKey && menuId) {\n menu.activeKey = menuId;\n }\n }, [activeKey, menuId]);\n\n return (\n <Menu\n defaultSelectedKeys={selectedKeys}\n selectedKeys={selectedKeys}\n defaultOpenKeys={expandKey}\n openKeys={collapsed ? void 0 : expandKey}\n onOpenChange={expandMenu}\n mode=\"inline\"\n subMenuCloseDelay={0}\n triggerSubMenuAction=\"click\"\n items={items}\n {...menuProps}\n className={cx('layout-menu', menuProps.className)}\n />\n );\n};\n\nexport default React.memo(LayoutMenu);\n"],"names":["React","isValidElement","useCallback","useEffect","useMemo","cx","Menu","Link","useSearchParams","IconFont","t","menu","expandMenu","memo","prop","collapsed","menuProps","menus","kv","activeKey","expandKey","search","filterMenu","list","map","item","icon","itemIcon","disabled","type","key","path","label","children","text","childrens","Array","isArray","Object","assign","length","preventScrollReset","to","menuId","get","items","filter","m","hideMenu","selectedKeys","current","opk","includes","push","parentId","defaultSelectedKeys","defaultOpenKeys","openKeys","onOpenChange","mode","subMenuCloseDelay","triggerSubMenuAction","className"],"mappings":"uCAAA,QAAOA,GAASC,kBAAAA,CAAc,CAAEC,eAAAA,CAAW,CAAEC,aAAAA,CAAS,CAAEC,WAAAA,CAAO,KAAQ,OAAQ,AAC/E,QAASC,MAAAA,CAAE,KAAQ,aAAc,AACjC,QAASC,QAAAA,CAAI,KAAwB,MAAO,AAC5C,QAASC,QAAAA,CAAI,CAAEC,mBAAAA,CAAe,KAAQ,kBAAmB,AACzD,QAAOC,MAAc,YAAa,AAClC,QAASC,KAAAA,CAAC,KAAQ,cAAe,AACjC,QAAOC,GAAuBC,cAAAA,CAAU,KAAQ,SAAU,AAwF1D,gBAAeZ,EAAMa,KAlFyB,AAACC,IAC7C,GAAM,CAAEC,UAAAA,CAAS,CAAE,GAAGC,EAAW,CAAGF,EAC9B,CAAEG,MAAAA,CAAK,CAAEC,GAAAA,CAAE,CAAEC,UAAAA,CAAS,CAAEC,UAAAA,CAAS,CAAE,CAAGT,EACtC,CAACU,EAAO,CAAGb,IACXc,EAAapB,EACjB,AAACqB,GACQA,EAAKC,IAAI,AAACC,IACf,GAAM,CAAEC,KAAAA,CAAI,CAAEC,SAAAA,CAAQ,CAAEC,SAAAA,CAAQ,CAAEC,KAAAA,CAAI,CAAEC,IAAAA,CAAG,CAAEC,KAAAA,CAAI,CAAEC,MAAAA,CAAK,CAAEC,SAAAA,CAAQ,CAAE,CAAGR,EACjES,EAAOxB,CAAC,CAACsB,EAAgB,CACzBG,EAAYC,MAAMC,QAAQJ,GAAYX,EAAWW,GAAYA,EAEnE,OAAOK,OAAOC,OACZ,CACER,KAAAA,EACAF,KAAAA,EACAD,SAAAA,EACAE,IAAAA,EACAH,SAAU1B,EAAe0B,GACvBA,EACEA,EACF,EAAClB,GAASoB,KAAMF,IACd,KACJD,KAAMzB,EAAeyB,GAAQA,EAAOA,EAAO,EAACjB,GAASoB,KAAMH,IAAW,KACtEM,MACED,GAAQ,CAACI,GAAWK,OAClB,EAACjC,GAAKkC,kBAAkB,IAACC,GAAI,CAAC,EAAEZ,EAAI,QAAQ,EAAEA,EAAI,CAAC,UAChDI,IAGHA,CAEN,EACAC,GAAWK,QAAU,CACnBP,SAAUE,CACZ,EAEJ,GAEF,CAACzB,EAAE,EAGCiC,EAASvC,EAAQ,IAAMiB,EAAOuB,IAAI,UAAW,CAACvB,EAAO,EACrDwB,EAAQzC,EACZ,IAAMkB,EAAWL,EAAM6B,OAAO,AAACC,GAAM,CAACA,EAAEC,WACxC,CAAC1B,EAAYL,EAAM,EAEfgC,EAAe7C,EAAQ,IAAOe,EAAY,CAACA,EAAU,CAAG,EAAE,CAAG,CAACA,EAAU,EAmB9E,OAjBAhB,EAAU,KACR,IAAM+C,EAAUP,GAAUzB,CAAE,CAACyB,EAAO,CAEpC,GAAIO,GAAW,CAACnC,GAAaJ,EAAKS,UAAW,CAC3C,IAAM+B,EAAM,IAAIxC,EAAKS,UAAU,CAE1B+B,EAAIC,SAAST,IAAmBQ,EAAIE,KAAKV,GAC1CO,EAAQI,UAAY,CAACH,EAAIC,SAASF,EAAQI,WAAWH,EAAIE,KAAKH,EAAQI,UAC1E1C,EAAWuC,EACb,CACF,EAAG,CAACpC,EAAW4B,EAAQzB,EAAG,EAC1Bf,EAAU,KACJwC,IAAWxB,GAAawB,GAC1BhC,CAAAA,EAAKQ,UAAYwB,CAAK,CAE1B,EAAG,CAACxB,EAAWwB,EAAO,EAGpB,EAACrC,GACCiD,oBAAqBN,EACrBA,aAAcA,EACdO,gBAAiBpC,EACjBqC,SAAU1C,EAAY,KAAK,EAAIK,EAC/BsC,aAAc9C,EACd+C,KAAK,SACLC,kBAAmB,EACnBC,qBAAqB,QACrBhB,MAAOA,EACN,GAAG7B,CAAS,CACb8C,UAAWzD,EAAG,cAAeW,EAAU8C,YAG7C,EAEsC"}
|
package/lib/entry.d.ts
ADDED
package/lib/entry.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as e}from"react/jsx-runtime";import"react";import r from"@app";import{createRoot as t}from"react-dom/client";import o from"./app.js";export default function(n={}){let{container:a,basename:m=r.base,fallback:i,language:p,...c}=n,u=a?.querySelector("#root")||document.getElementById("root");window.mainApp={currentTarget:{},...c,container:u};let l=t(window.mainApp.container);return l.render(e(o,{basename:m,fallback:i,language:p})),l.unmount};
|
|
2
|
+
//# sourceMappingURL=entry.js.map
|
package/lib/entry.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/entry.tsx"],"sourcesContent":["import React from 'react';\nimport app from '@app';\nimport { createRoot } from 'react-dom/client';\nimport App from './app.js';\n\ntype RenderAppProps = {\n container?: HTMLElement;\n basename?: string;\n fallback?: React.ReactElement;\n language?: string;\n};\n\nfunction renderApp(props: RenderAppProps = {}) {\n const { container, basename = app.base, fallback, language, ...args } = props;\n const _container = container?.querySelector('#root') || document.getElementById('root');\n\n window.mainApp = {\n currentTarget: {},\n ...args,\n container: _container as HTMLElement,\n };\n const rootInstance = createRoot(window.mainApp.container);\n\n rootInstance.render(<App basename={basename} fallback={fallback} language={language} />);\n return rootInstance.unmount;\n}\n\nexport default renderApp;\n"],"names":["app","createRoot","App","props","container","basename","base","fallback","language","args","_container","querySelector","document","getElementById","window","mainApp","currentTarget","rootInstance","render","unmount"],"mappings":"uCAAA,OAAkB,OAAQ,AAC1B,QAAOA,MAAS,MAAO,AACvB,QAASC,cAAAA,CAAU,KAAQ,kBAAmB,AAC9C,QAAOC,MAAS,UAAW,AAwB3B,gBAfA,SAAmBC,EAAwB,CAAC,CAAC,EAC3C,GAAM,CAAEC,UAAAA,CAAS,CAAEC,SAAAA,EAAWL,EAAIM,IAAI,CAAEC,SAAAA,CAAQ,CAAEC,SAAAA,CAAQ,CAAE,GAAGC,EAAM,CAAGN,EAClEO,EAAaN,GAAWO,cAAc,UAAYC,SAASC,eAAe,OAEhFC,CAAAA,OAAOC,QAAU,CACfC,cAAe,CAAC,EAChB,GAAGP,CAAI,CACPL,UAAWM,CACb,EACA,IAAMO,EAAehB,EAAWa,OAAOC,QAAQX,WAG/C,OADAa,EAAaC,OAAO,EAAChB,GAAIG,SAAUA,EAAUE,SAAUA,EAAUC,SAAUA,KACpES,EAAaE,OACtB,CAEyB"}
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export * from './prefix/react-router-dom.js';
|
|
2
|
+
export { default as sso, type SSOConfig, type PrivateSSOConfig } from 'shared-store-object';
|
|
3
|
+
type Persistent = {
|
|
4
|
+
/** 当前菜单 */
|
|
5
|
+
menuActiveKey: 'menu.activeKey';
|
|
6
|
+
/** 展开菜单 */
|
|
7
|
+
menuExpandKey: 'menu.expandKey';
|
|
8
|
+
/** 当前用户可访问的菜单列表 */
|
|
9
|
+
menuMenus: 'menu.menus';
|
|
10
|
+
/** 菜单列表的kv数据 */
|
|
11
|
+
menuKv: 'menu.kv';
|
|
12
|
+
/** 选项卡数据 */
|
|
13
|
+
menuTabs: 'menu.tabs';
|
|
14
|
+
/** 使用的语言 */
|
|
15
|
+
language: 'localizable.language';
|
|
16
|
+
[key: string]: string;
|
|
17
|
+
};
|
|
18
|
+
/** 数据持久化key字典 */
|
|
19
|
+
declare const persistentKey: Persistent;
|
|
20
|
+
export default persistentKey;
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export*from"./prefix/react-router-dom.js";export{default as sso}from"shared-store-object";export default{menuActiveKey:"menu.activeKey",menuExpandKey:"menu.expandKey",menuMenus:"menu.menus",menuKv:"menu.kv",menuTabs:"menu.tabs",language:"localizable.language"};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from './prefix/react-router-dom.js';\nexport { default as sso, type SSOConfig, type PrivateSSOConfig } from 'shared-store-object';\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\n// export const IconFont = hasAntd ? require('./components/iconfont.js').default : null;\n// // eslint-disable-next-line @typescript-eslint/no-var-requires\n// export const LayoutMenu = hasAntd ? require('./components/layout-menu.js').default : null;\n// // eslint-disable-next-line @typescript-eslint/no-var-requires\n// export const DashboardLayout = hasAntd ? require('./packages/back-stage/layout.js').default : null;\n\n// export { default as menu, addTab, closeTab, openTab, setMenu, expandMenu } from './menu.js';\n// export type { TabItem, MenuItem, CloseTab } from './menu.js';\n// export type { LayoutMenuProps } from './components/layout-menu.js';\n// export { createRouter, prefixRouter, routerData, RouterFragment } from './components/app-router.js';\ntype Persistent = {\n /** 当前菜单 */\n menuActiveKey: 'menu.activeKey';\n /** 展开菜单 */\n menuExpandKey: 'menu.expandKey';\n /** 当前用户可访问的菜单列表 */\n menuMenus: 'menu.menus';\n /** 菜单列表的kv数据 */\n menuKv: 'menu.kv';\n /** 选项卡数据 */\n menuTabs: 'menu.tabs';\n /** 使用的语言 */\n language: 'localizable.language';\n [key: string]: string;\n};\n/** 数据持久化key字典 */\nconst persistentKey: Persistent = {\n menuActiveKey: 'menu.activeKey',\n menuExpandKey: 'menu.expandKey',\n menuMenus: 'menu.menus',\n menuKv: 'menu.kv',\n menuTabs: 'menu.tabs',\n language: 'localizable.language',\n};\n\nexport default persistentKey;\n"],"names":["default","sso","menuActiveKey","menuExpandKey","menuMenus","menuKv","menuTabs","language"],"mappings":"AAAA,WAAc,8BAA+B,AAC7C,QAASA,WAAWC,GAAG,KAA+C,qBAAsB,AAsC5F,eATkC,CAChCC,cAAe,iBACfC,cAAe,iBACfC,UAAW,aACXC,OAAQ,UACRC,SAAU,YACVC,SAAU,sBACZ,CAE6B"}
|
package/lib/menu.d.ts
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { RouteConfig } from '@app/routes';
|
|
3
|
+
export type CloseTab = 'left' | 'right' | 'other' | 'self';
|
|
4
|
+
export interface TabItem extends RouteConfig {
|
|
5
|
+
key: string;
|
|
6
|
+
url?: string;
|
|
7
|
+
path: string;
|
|
8
|
+
closable?: boolean;
|
|
9
|
+
label?: ReactNode;
|
|
10
|
+
dynamicTitle?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface MenuItem extends RouteConfig {
|
|
13
|
+
key: string;
|
|
14
|
+
type?: string;
|
|
15
|
+
label?: ReactNode;
|
|
16
|
+
children?: MenuItem[];
|
|
17
|
+
[key: string]: any;
|
|
18
|
+
}
|
|
19
|
+
type ClosedCallback = (closes?: TabItem[], next?: TabItem) => void;
|
|
20
|
+
/** Menu Store */
|
|
21
|
+
declare const menu: import("shared-store-object").SSO<{
|
|
22
|
+
/** 当前菜单 */
|
|
23
|
+
activeKey: string;
|
|
24
|
+
/** 展开菜单的key[] */
|
|
25
|
+
expandKey: string[];
|
|
26
|
+
/** 当前用户可访问的菜单列表 */
|
|
27
|
+
menus: MenuItem[];
|
|
28
|
+
/** 菜单列表的kv数据, 根据menus自动生成 */
|
|
29
|
+
kv: Record<string, MenuItem>;
|
|
30
|
+
/** 选项卡数据 */
|
|
31
|
+
tabs: TabItem[];
|
|
32
|
+
}, {}>;
|
|
33
|
+
/** 设置菜单列表
|
|
34
|
+
* @param {MenuItem[]} data 菜单数据
|
|
35
|
+
* @constructor
|
|
36
|
+
*/
|
|
37
|
+
export declare function setMenu(data: MenuItem[]): void;
|
|
38
|
+
/** 添加工作台选项卡
|
|
39
|
+
* @param {TabItem} tab 选项卡
|
|
40
|
+
* @constructor
|
|
41
|
+
*/
|
|
42
|
+
export declare function addTab(tab: TabItem): void;
|
|
43
|
+
/** 打开工作台选项卡
|
|
44
|
+
* @param {TabItem} tab 选项卡
|
|
45
|
+
* @constructor
|
|
46
|
+
*/
|
|
47
|
+
export declare function openTab(tab: TabItem): void;
|
|
48
|
+
/** 关闭工作台选项卡
|
|
49
|
+
* @param {string} key 选项卡key
|
|
50
|
+
* @param {CloseTab} type 操作类型,如何关闭
|
|
51
|
+
* @param {ClosedCallback} callback 回调函数
|
|
52
|
+
* @constructor
|
|
53
|
+
*/
|
|
54
|
+
export declare function closeTab(key: string, type: CloseTab | undefined, callback: ClosedCallback): void;
|
|
55
|
+
/** 展开菜单
|
|
56
|
+
* @param {string} keys 展开菜单的key[]
|
|
57
|
+
* @returns {void}
|
|
58
|
+
*/
|
|
59
|
+
export declare function expandMenu(keys: string[]): void;
|
|
60
|
+
export default menu;
|
package/lib/menu.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import e from"@moneko/common/lib/isEqual";import t from"@moneko/common/lib/isFunction";import n from"@moneko/common/lib/persistence";import o from"shared-store-object";import l from"./persistentKey.js";let i=n.load,r=o({activeKey:i(l.menuActiveKey,"home"),expandKey:i(l.menuExpandKey,[]),menus:i(l.menuMenus,[]),kv:i(l.menuKv,{}),tabs:i(l.menuTabs,[])}),s=(e,t=[])=>{if(0===e.length)return t;let{children:n=[],i18n:o,label:l,hideMenu:i,...r}=e[0],a=Object.create(null);return Object.assign(a,r,{label:o||l,props:void 0,element:void 0}),n.length&&(a.children=s(n)),i||t.push(a),s(e.slice(1),t)},a=(e,t)=>{for(let n of e){let{children:e,...o}=n;t[n.key]=o,e?.length&&a(e,t)}};export function setMenu(e){let t=s(e),n={};a(t,n),r.menus=t,r.kv=n}export function addTab(t){let n=r.kv[t.key];if(n&&!r.tabs.find(e=>e.key===t.key)){let o=[...r.tabs,{...n,...t}];e(o,r.tabs)||(r.tabs=o)}}export function openTab(e){r.activeKey=e.key,addTab(e)}export function closeTab(e,n="self",o){let l;if(!e)return;let{tabs:i,activeKey:s}=r,a=s,m=[],f=[],u="self"===n,p=i.findIndex(t=>t.key===e),c=(t,o)=>!1===t.closable||({left:o>=p,right:o<=p,other:o===p,self:e!==t.key})[n];for(let t=0,n=i.length;t<n;t++){let n=i[t],o=c(n,t);if(u){if(!o&&e===a){let e=t?t-1:t+1;i[e]&&(a=i[e].key,l=i[e])}}else o&&n.key===e&&a!==e&&(a=e,l=n);o||m.push(n),o&&f.push(n)}if(r.tabs=f,r.activeKey=a,t(o)){o(m,l);return}}export function expandMenu(t){e(t,r.expandKey)||(r.expandKey=t)}export default r;
|
|
2
|
+
//# sourceMappingURL=menu.js.map
|
package/lib/menu.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/menu.ts"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { isEqual, isFunction, persistence } from '@moneko/common';\nimport sso from 'shared-store-object';\nimport persistentKey from './persistentKey.js';\nimport type { RouteConfig } from '@app/routes';\n\nexport type CloseTab = 'left' | 'right' | 'other' | 'self';\nexport interface TabItem extends RouteConfig {\n key: string;\n url?: string;\n path: string;\n closable?: boolean;\n label?: ReactNode;\n dynamicTitle?: string;\n}\nexport interface MenuItem extends RouteConfig {\n key: string;\n type?: string;\n label?: ReactNode;\n children?: MenuItem[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n}\n// eslint-disable-next-line no-unused-vars\ntype ClosedCallback = (closes?: TabItem[], next?: TabItem) => void;\n\nconst load = persistence.load;\n\n/** Menu Store */\nconst menu = sso({\n /** 当前菜单 */\n activeKey: load(persistentKey.menuActiveKey, 'home'),\n /** 展开菜单的key[] */\n expandKey: load(persistentKey.menuExpandKey, [] as string[]),\n /** 当前用户可访问的菜单列表 */\n menus: load(persistentKey.menuMenus, [] as MenuItem[]),\n /** 菜单列表的kv数据, 根据menus自动生成 */\n kv: load(persistentKey.menuKv, {} as Record<string, MenuItem>),\n /** 选项卡数据 */\n tabs: load(persistentKey.menuTabs, [] as TabItem[]),\n});\n\nconst getItems = (arr: MenuItem[], result: MenuItem[] = []): MenuItem[] => {\n if (arr.length === 0) {\n return result;\n }\n const { children = [], i18n, label, hideMenu, ...args } = arr[0];\n const item: MenuItem = Object.create(null);\n\n // eslint-disable-next-line no-undefined\n Object.assign(item, args, { label: i18n || label, props: undefined, element: undefined });\n if (children.length) {\n item.children = getItems(children);\n }\n if (!hideMenu) {\n result.push(item);\n }\n return getItems(arr.slice(1), result);\n};\nconst getMenuKV = (arr: MenuItem[], obj: Record<string, MenuItem>): void => {\n for (const item of arr) {\n const { children, ...args } = item;\n\n obj[item.key] = args;\n if (children?.length) {\n getMenuKV(children, obj);\n }\n }\n};\n\n/** 设置菜单列表\n * @param {MenuItem[]} data 菜单数据\n * @constructor\n */\nexport function setMenu(data: MenuItem[]) {\n const items = getItems(data),\n kv: Record<string, MenuItem> = {};\n\n getMenuKV(items, kv);\n menu.menus = items;\n menu.kv = kv;\n}\n/** 添加工作台选项卡\n * @param {TabItem} tab 选项卡\n * @constructor\n */\nexport function addTab(tab: TabItem) {\n const current = menu.kv[tab.key];\n\n if (current && !menu.tabs.find((item) => item.key === tab.key)) {\n const ntabs: TabItem[] = [\n ...menu.tabs,\n {\n ...current,\n // i18n: current.i18n || `route-${current.key}`,\n ...tab,\n },\n ];\n\n if (!isEqual(ntabs, menu.tabs)) {\n menu.tabs = ntabs;\n }\n }\n}\n/** 打开工作台选项卡\n * @param {TabItem} tab 选项卡\n * @constructor\n */\nexport function openTab(tab: TabItem) {\n menu.activeKey = tab.key;\n addTab(tab);\n}\n/** 关闭工作台选项卡\n * @param {string} key 选项卡key\n * @param {CloseTab} type 操作类型,如何关闭\n * @param {ClosedCallback} callback 回调函数\n * @constructor\n */\nexport function closeTab(key: string, type: CloseTab = 'self', callback: ClosedCallback) {\n if (!key) return;\n const { tabs, activeKey } = menu;\n let nActiveKey = activeKey;\n const closeTabs: TabItem[] = [];\n const nTabs: TabItem[] = [];\n let nextTab: TabItem | undefined;\n // 关闭当前tab\n const isCloseSelf = type === 'self';\n const idx = tabs.findIndex((t) => t.key === key);\n const isNotClose = (item: TabItem, i: number) => {\n return (\n item.closable === false ||\n {\n left: i >= idx,\n right: i <= idx,\n other: i === idx,\n self: key !== item.key,\n }[type]\n );\n };\n\n for (let i = 0, len = tabs.length; i < len; i++) {\n const item = tabs[i];\n const notClose = isNotClose(item, i);\n\n if (isCloseSelf) {\n if (!notClose) {\n if (key === nActiveKey) {\n const adx: number | null = i ? i - 1 : i + 1;\n\n if (tabs[adx]) {\n nActiveKey = tabs[adx].key;\n nextTab = tabs[adx];\n }\n }\n }\n } else if (notClose && item.key === key && nActiveKey !== key) {\n nActiveKey = key;\n nextTab = item;\n }\n if (!notClose) {\n closeTabs.push(item);\n }\n if (notClose) {\n nTabs.push(item);\n }\n }\n\n menu.tabs = nTabs;\n menu.activeKey = nActiveKey;\n if (isFunction(callback)) {\n callback(closeTabs, nextTab);\n return;\n }\n}\n/** 展开菜单\n * @param {string} keys 展开菜单的key[]\n * @returns {void}\n */\nexport function expandMenu(keys: string[]): void {\n if (!isEqual(keys, menu.expandKey)) {\n menu.expandKey = keys;\n }\n}\nexport default menu;\n"],"names":["isEqual","isFunction","persistence","sso","persistentKey","load","menu","activeKey","menuActiveKey","expandKey","menuExpandKey","menus","menuMenus","kv","menuKv","tabs","menuTabs","getItems","arr","result","length","children","i18n","label","hideMenu","args","item","Object","create","assign","props","undefined","element","push","slice","getMenuKV","obj","key","setMenu","data","items","addTab","tab","current","find","ntabs","openTab","closeTab","type","callback","nextTab","nActiveKey","closeTabs","nTabs","isCloseSelf","idx","findIndex","t","isNotClose","i","closable","left","right","other","self","len","notClose","adx","expandMenu","keys"],"mappings":"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"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
html,
|
|
2
|
+
body {
|
|
3
|
+
margin: 0;
|
|
4
|
+
padding: 0;
|
|
5
|
+
line-height: 1.8;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
input,
|
|
9
|
+
textarea {
|
|
10
|
+
caret-color: inherit;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
h1 {
|
|
14
|
+
margin: 0.67em 0;
|
|
15
|
+
font-size: 2em;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
hr {
|
|
19
|
+
overflow: visible;
|
|
20
|
+
block-size: 0;
|
|
21
|
+
box-sizing: content-box;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
pre {
|
|
25
|
+
font-size: 1em;
|
|
26
|
+
font-family: monospace;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
a {
|
|
30
|
+
text-decoration: none;
|
|
31
|
+
background-color: transparent;
|
|
32
|
+
cursor: pointer;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
abbr[title] {
|
|
36
|
+
border-block-end: none;
|
|
37
|
+
text-decoration: underline;
|
|
38
|
+
text-decoration: underline dotted;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
b,
|
|
42
|
+
strong {
|
|
43
|
+
font-weight: bolder;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
code,
|
|
47
|
+
kbd,
|
|
48
|
+
samp {
|
|
49
|
+
font-size: 1em;
|
|
50
|
+
font-family: monospace;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
small {
|
|
54
|
+
font-size: 80%;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
sub,
|
|
58
|
+
sup {
|
|
59
|
+
position: relative;
|
|
60
|
+
font-size: 75%;
|
|
61
|
+
line-height: 0;
|
|
62
|
+
vertical-align: baseline;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
sub {
|
|
66
|
+
inset-block-end: -0.25em;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
sup {
|
|
70
|
+
inset-block-start: -0.5em;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
img {
|
|
74
|
+
border-style: none;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
img,
|
|
78
|
+
button {
|
|
79
|
+
outline: 1px solid transparent;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
button,
|
|
83
|
+
input,
|
|
84
|
+
optgroup,
|
|
85
|
+
select,
|
|
86
|
+
textarea {
|
|
87
|
+
margin: 0;
|
|
88
|
+
font-size: 100%;
|
|
89
|
+
font-family: inherit;
|
|
90
|
+
line-height: 1.15;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
button,
|
|
94
|
+
input {
|
|
95
|
+
overflow: visible;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
button,
|
|
99
|
+
select {
|
|
100
|
+
text-transform: none;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
button,
|
|
104
|
+
[type='button'],
|
|
105
|
+
[type='reset'],
|
|
106
|
+
[type='submit'] {
|
|
107
|
+
appearance: button;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
button::-moz-focus-inner,
|
|
111
|
+
[type='button']::-moz-focus-inner,
|
|
112
|
+
[type='reset']::-moz-focus-inner,
|
|
113
|
+
[type='submit']::-moz-focus-inner {
|
|
114
|
+
border-style: none;
|
|
115
|
+
padding: 0;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
button:-moz-focusring,
|
|
119
|
+
[type='button']:-moz-focusring,
|
|
120
|
+
[type='reset']:-moz-focusring,
|
|
121
|
+
[type='submit']:-moz-focusring {
|
|
122
|
+
outline: 1px dotted var(--primary-outline);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
fieldset {
|
|
126
|
+
padding: 0.35em 0.75em 0.625em;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
legend {
|
|
130
|
+
display: table;
|
|
131
|
+
padding: 0;
|
|
132
|
+
max-inline-size: 100%;
|
|
133
|
+
white-space: normal;
|
|
134
|
+
color: inherit;
|
|
135
|
+
box-sizing: border-box;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
progress {
|
|
139
|
+
vertical-align: baseline;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
textarea {
|
|
143
|
+
overflow: auto;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
details {
|
|
147
|
+
display: block;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
summary {
|
|
151
|
+
display: list-item;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
template,
|
|
155
|
+
[hidden] {
|
|
156
|
+
display: none;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
[type='checkbox'],
|
|
160
|
+
[type='radio'] {
|
|
161
|
+
box-sizing: border-box;
|
|
162
|
+
padding: 0;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
[type='number']::-webkit-inner-spin-button,
|
|
166
|
+
[type='number']::-webkit-outer-spin-button {
|
|
167
|
+
block-size: auto;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
[type='search'] {
|
|
171
|
+
appearance: textfield;
|
|
172
|
+
outline-offset: -2px;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
[type='search']::-webkit-search-decoration {
|
|
176
|
+
appearance: none;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
::-webkit-file-upload-button {
|
|
180
|
+
appearance: button;
|
|
181
|
+
font: inherit;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
::-webkit-scrollbar {
|
|
185
|
+
inline-size: 5px;
|
|
186
|
+
block-size: 5px;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
::-webkit-scrollbar-track,
|
|
190
|
+
::-webkit-scrollbar-thumb {
|
|
191
|
+
background-color: transparent;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
:hover::-webkit-scrollbar-thumb {
|
|
195
|
+
background-color: var(--primary-selection);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
::-webkit-scrollbar-thumb:hover {
|
|
199
|
+
background-color: var(--primary-hover);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
::-webkit-scrollbar-thumb:active {
|
|
203
|
+
background-color: var(--primary-active);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
::-webkit-scrollbar-button {
|
|
207
|
+
display: none;
|
|
208
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as e}from"react/jsx-runtime";import{useMemo as r}from"react";import{ConfigProvider as o}from"antd";import t from"antd/es/locale/en_US";import a from"antd/es/locale/zh_CN";import l from"dayjs";import"dayjs/locale/en.js";import"dayjs/locale/zh.js";import m from"dayjs/plugin/relativeTime";import{RouterProvider as i}from"react-router-dom";import{RouterFragment as p,createRouter as s,prefixRouter as f,routerData as n}from"../../components/app-router";import c from"@app/fallback";import{t as d,lang as h}from"@app/locales";import{global as j}from"@/store";import u from"@app";let x=[],b={zh_CN:a,en_US:t};l.extend(m),o.config({prefixCls:u.prefixCls,iconPrefixCls:u.iconPrefixCls,theme:u.theme});export default(()=>{let{isLogin:t}=j,{language:l}=h,m=r(()=>({validateMessages:{required:`${d["ph:please-fill"]}\${label}!`,types:{email:`\${label}${d["wrong-format"]}`},pattern:{mismatch:`${d["ph:fill-correct"]}\${label}!`}},locale:b[l]||a}),[l,d]);return e(p,{children:e(o,{...m,children:e(i,{router:s(t?n:f(x,c&&e(c,{})),{basename:u.base,window:window}),fallbackElement:c&&e(c,{})})})})});
|
|
2
|
+
//# sourceMappingURL=app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/packages/back-stage/app.tsx"],"sourcesContent":["import React, { type FC, useMemo } from 'react';\nimport { ConfigProvider } from 'antd';\nimport en_US from 'antd/es/locale/en_US';\nimport zh_CN from 'antd/es/locale/zh_CN';\nimport dayjs from 'dayjs';\nimport 'dayjs/locale/en.js';\nimport 'dayjs/locale/zh.js';\nimport relativeTime from 'dayjs/plugin/relativeTime';\nimport { RouterProvider } from 'react-router-dom';\nimport {\n RouterFragment,\n createRouter,\n prefixRouter,\n routerData,\n} from '../../components/app-router';\nimport Fallback from '@app/fallback';\nimport { t, lang } from '@app/locales';\nimport type { Locale } from 'antd/es/locale';\nimport { global } from '@/store';\nimport app from '@app';\nimport { RouteConfig } from '@app/routes';\n\nconst onlyLoginRouter: RouteConfig[] = [];\nconst localeDictionary: Partial<Record<string, Locale>> = {\n zh_CN,\n en_US,\n};\n\ndayjs.extend(relativeTime);\nConfigProvider.config({\n prefixCls: app.prefixCls,\n iconPrefixCls: app.iconPrefixCls,\n theme: app.theme,\n});\n\nconst App: FC = () => {\n const { isLogin } = global;\n const { language } = lang;\n const antdProviderConfig = useMemo(() => {\n return {\n validateMessages: {\n required: `${t['ph:please-fill']}\\${label}!`,\n types: {\n email: `\\${label}${t['wrong-format']}`,\n },\n pattern: {\n mismatch: `${t['ph:fill-correct']}\\${label}!`,\n },\n },\n locale: localeDictionary[language] || zh_CN,\n };\n }, [language, t]);\n\n return (\n <RouterFragment>\n <ConfigProvider {...antdProviderConfig}>\n <RouterProvider\n router={createRouter(isLogin ? routerData : prefixRouter(onlyLoginRouter, Fallback && <Fallback />), {\n basename: app.base,\n window: window,\n })}\n fallbackElement={Fallback && <Fallback />}\n />\n </ConfigProvider>\n </RouterFragment>\n );\n};\n\nexport default App;\n"],"names":["useMemo","ConfigProvider","en_US","zh_CN","dayjs","relativeTime","RouterProvider","RouterFragment","createRouter","prefixRouter","routerData","Fallback","t","lang","global","app","onlyLoginRouter","localeDictionary","extend","config","prefixCls","iconPrefixCls","theme","isLogin","language","antdProviderConfig","validateMessages","required","types","email","pattern","mismatch","locale","router","basename","base","window","fallbackElement"],"mappings":"uCAAA,QAAyBA,WAAAA,CAAO,KAAQ,OAAQ,AAChD,QAASC,kBAAAA,CAAc,KAAQ,MAAO,AACtC,QAAOC,MAAW,sBAAuB,AACzC,QAAOC,MAAW,sBAAuB,AACzC,QAAOC,MAAW,OAAQ,AAC1B,OAAO,oBAAqB,AAC5B,OAAO,oBAAqB,AAC5B,QAAOC,MAAkB,2BAA4B,AACrD,QAASC,kBAAAA,CAAc,KAAQ,kBAAmB,AAClD,QACEC,kBAAAA,CAAc,CACdC,gBAAAA,CAAY,CACZC,gBAAAA,CAAY,CACZC,cAAAA,CAAU,KACL,6BAA8B,AACrC,QAAOC,MAAc,eAAgB,AACrC,QAASC,KAAAA,CAAC,CAAEC,QAAAA,CAAI,KAAQ,cAAe,AAEvC,QAASC,UAAAA,CAAM,KAAQ,SAAU,AACjC,QAAOC,MAAS,MAAO,CAGvB,IAAMC,EAAiC,EAAE,CACnCC,EAAoD,CACxDd,MAAAA,EACAD,MAAAA,CACF,EAEAE,EAAMc,OAAOb,GACbJ,EAAekB,OAAO,CACpBC,UAAWL,EAAIK,UACfC,cAAeN,EAAIM,cACnBC,MAAOP,EAAIO,KACb,EAmCA,eAjCgB,CAAA,KACd,GAAM,CAAEC,QAAAA,CAAO,CAAE,CAAGT,EACd,CAAEU,SAAAA,CAAQ,CAAE,CAAGX,EACfY,EAAqBzB,EAAQ,IAC1B,CAAA,CACL0B,iBAAkB,CAChBC,SAAU,CAAC,EAAEf,CAAC,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAC5CgB,MAAO,CACLC,MAAO,CAAC,SAAS,EAAEjB,CAAC,CAAC,eAAe,CAAC,CAAC,AACxC,EACAkB,QAAS,CACPC,SAAU,CAAC,EAAEnB,CAAC,CAAC,kBAAkB,CAAC,UAAU,CAAC,AAC/C,CACF,EACAoB,OAAQf,CAAgB,CAACO,EAAS,EAAIrB,CACxC,CAAA,EACC,CAACqB,EAAUZ,EAAE,EAEhB,OACE,EAACL,YACC,EAACN,GAAgB,GAAGwB,CAAkB,UACpC,EAACnB,GACC2B,OAAQzB,EAAae,EAAUb,EAAaD,EAAaO,EAAiBL,GAAY,EAACA,OAAc,CACnGuB,SAAUnB,EAAIoB,KACdC,OAAQA,MACV,GACAC,gBAAiB1B,GAAY,EAACA,WAKxC,CAAA,CAEmB"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import{jsx as o,jsxs as e}from"react/jsx-runtime";import{isValidElement as t,useCallback as r,useEffect as i,useMemo as a,useState as n}from"react";import{CloseOutlined as l,DeleteRowOutlined as c,ReloadOutlined as s}from"@ant-design/icons";import{css as d,injectGlobal as m}from"@moneko/css";import{Dropdown as p,Layout as u,Tabs as b}from"antd";import{useAliveController as f}from"react-activation";import{useNavigate as h,useOutlet as g,useSearchParams as y}from"react-router-dom";import v from"../../components/fallback-comp";import x from"../../components/iconfont";import k from"../../components/layout-menu";import{t as $}from"@app/locales";import w,{closeTab as N,openTab as C}from"../../menu";import T from"@app";let z=T.prefixCls,j=o=>`${T.prefixCls}-dashboard-${o}`,I={tabs:j("tabs"),layout:j("layout"),sider:j("sider"),header:j("header"),logo:j("logo"),section:j("section"),content:j("content"),view:j("view")},S=d`
|
|
2
|
+
.${I.header}, .${I.tabs} {
|
|
3
|
+
z-index: 2;
|
|
4
|
+
}
|
|
5
|
+
.${I.tabs} {
|
|
6
|
+
position: sticky;
|
|
7
|
+
top: 64px;
|
|
8
|
+
overflow: initial !important;
|
|
9
|
+
margin: 16px 16px 0 !important;
|
|
10
|
+
|
|
11
|
+
> .${z}-tabs-nav {
|
|
12
|
+
.${z}-tabs-tab {
|
|
13
|
+
border-color: var(--border-color, rgb(5 5 5 / 6%)) !important;
|
|
14
|
+
border-bottom-color: var(--border-color, rgb(5 5 5 / 6%)) !important;
|
|
15
|
+
border-radius: var(--border-radius, 8px) !important;
|
|
16
|
+
backdrop-filter: blur(16px);
|
|
17
|
+
background-color: rgba(255, 255, 255, 0.8);
|
|
18
|
+
&.${z}-tabs-tab-active {
|
|
19
|
+
background-color: rgba(255, 255, 255, 0.9);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
&::before {
|
|
24
|
+
content: none;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
.${I.layout} {
|
|
29
|
+
width: 100% !important;
|
|
30
|
+
min-height: 100vh !important;
|
|
31
|
+
}
|
|
32
|
+
.${I.sider}, .${I.section} {
|
|
33
|
+
overflow-y: auto;
|
|
34
|
+
max-height: 100vh;
|
|
35
|
+
}
|
|
36
|
+
.${I.section} {
|
|
37
|
+
overflow-y: auto;
|
|
38
|
+
}
|
|
39
|
+
.${I.sider} {
|
|
40
|
+
overflow-y: auto;
|
|
41
|
+
}
|
|
42
|
+
.${I.content} {
|
|
43
|
+
display: flex;
|
|
44
|
+
margin: 0 16px;
|
|
45
|
+
flex-direction: column;
|
|
46
|
+
z-index: 1;
|
|
47
|
+
}
|
|
48
|
+
.${I.view} {
|
|
49
|
+
border-radius: var(--border-radius, 8px);
|
|
50
|
+
padding: 24px;
|
|
51
|
+
background: var(--component-card-bg, #fff);
|
|
52
|
+
box-shadow: var(--box-shadow-lite);
|
|
53
|
+
flex: 1;
|
|
54
|
+
transition-property: background-color, box-shadow;
|
|
55
|
+
}
|
|
56
|
+
.${I.view}, .${I.logo}, .${I.logo} > svg {
|
|
57
|
+
transition-duration: var(--transition-duration, 0.3s);
|
|
58
|
+
transition-timing-function: var(
|
|
59
|
+
--transition-timing-function,
|
|
60
|
+
cubic-bezier(0.94, -0.1, 0.1, 1.2)
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
.${I.logo} {
|
|
64
|
+
position: sticky;
|
|
65
|
+
top: 0;
|
|
66
|
+
z-index: 1;
|
|
67
|
+
display: flex;
|
|
68
|
+
gap: 10px;
|
|
69
|
+
justify-content: center;
|
|
70
|
+
align-items: center;
|
|
71
|
+
overflow: hidden;
|
|
72
|
+
padding: 14px;
|
|
73
|
+
height: 68px;
|
|
74
|
+
text-align: center;
|
|
75
|
+
color: #de4553;
|
|
76
|
+
transition-property: background-color, border-color;
|
|
77
|
+
cursor: pointer;
|
|
78
|
+
user-select: none;
|
|
79
|
+
|
|
80
|
+
> svg,
|
|
81
|
+
&::before {
|
|
82
|
+
transition-property: opacity;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
> svg {
|
|
86
|
+
height: 32px;
|
|
87
|
+
opacity: 0;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
&::before {
|
|
91
|
+
display: block;
|
|
92
|
+
width: 22px;
|
|
93
|
+
height: 32px;
|
|
94
|
+
background: url(${require(favicon)}) no-repeat center center / contain;
|
|
95
|
+
opacity: 1;
|
|
96
|
+
content: '';
|
|
97
|
+
transition-duration: var(--transition-duration, 0.3s);
|
|
98
|
+
transition-timing-function: var(
|
|
99
|
+
--transition-timing-function,
|
|
100
|
+
cubic-bezier(0.94, -0.1, 0.1, 1.2)
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
`;m([S]);let E=[{label:"关闭左侧标签",icon:o(c,{style:{transform:"scaleX(-1)"}}),key:"left"},{label:"关闭右侧标签",icon:o(c,{}),key:"right"},{label:"关闭其他标签",icon:o(l,{}),key:"other"},{label:"刷新标签页",icon:o(s,{}),key:"refresh"}];export default(({children:l})=>{let{activeKey:c,tabs:s,kv:d}=w,m=g(),z=h(),{dropScope:j}=f(),[S]=y(),[P,q]=n(!1),A=r(o=>{if(o){let e=window.setTimeout(()=>{q(o),window.clearTimeout(e),e=null},0)}else{q(o);let e=window.setTimeout(()=>{window.clearTimeout(e),e=null},30)}},[]),B=r((o,e)=>{if("refresh"===e){z("/refresh");return}o&&N(o,e,function(o,e){o?.forEach(o=>{o.path&&j&&j(o.path)}),e&&z(`${e.path}?menuId=${e.key}`)})},[j,z]),{menuId:H,dynamicLabel:K}=a(()=>({menuId:S.get("menuId"),dynamicLabel:S.get("dynamicTitle")||""}),[S]);i(()=>{H&&d[H]&&C({path:d[H].path,key:H,dynamicTitle:K})},[K,d,H]);let L=r(o=>o===c?E:E.filter(o=>o?.key!=="refresh"),[c]),M=r((o,e)=>{"remove"===e&&"string"==typeof o&&B(o)},[B]),O=r(o=>{z(`${d[o].key}?menuId=${d[o].key}`)},[d,z]),X=a(()=>s.map(({key:r,icon:i,label:a,dynamicTitle:n,closable:l})=>({key:r,label:o(p,{menu:{items:L(r),onClick:o=>{o.domEvent.stopPropagation(),B(r,o.key)}},trigger:["contextMenu"],destroyPopupOnHide:!0,children:e("div",{children:[t(i)?i:i?o(x,{type:i}):null,$[a||`route-${r}`]+(n||"")]})}),closable:l})),[B,L,$,s]);return e(u,{className:I.layout,children:[layoutSider?e(u.Sider,{className:I.sider,trigger:null,collapsible:!0,collapsed:P,onBreakpoint:o=>A(o),onCollapse:o=>A(o),theme:"light",breakpoint:"md",...layoutSider,children:[o("div",{className:I.logo,"data-title":T.name,children:o(v,{compName:"logo",show:!P})}),o(k,{collapsed:P,theme:layoutSider.theme})]}):null,e(u,{className:I.section,children:[o(v,{compName:"layout-header",className:I.header,collapsed:P,onCollapsed:()=>A(!P)}),o(b,{className:I.tabs,hideAdd:!0,onTabClick:O,activeKey:c,type:"editable-card",onEdit:M,items:X,animated:!0}),e(u.Content,{className:I.content,children:[o("div",{className:I.view,children:l||m}),o(v,{compName:"layout-footer"})]})]})]})});
|
|
105
|
+
//# sourceMappingURL=layut.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/packages/back-stage/layut.tsx"],"sourcesContent":["import React, {\n type FC,\n type ReactNode,\n isValidElement,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport { CloseOutlined, DeleteRowOutlined, ReloadOutlined } from '@ant-design/icons';\nimport { css, injectGlobal } from '@moneko/css';\nimport { Dropdown, Layout, Tabs } from 'antd';\nimport { useAliveController } from 'react-activation';\nimport { useNavigate, useOutlet, useSearchParams } from 'react-router-dom';\nimport FallbackComp from '../../components/fallback-comp';\nimport IconFont from '../../components/iconfont';\nimport LayoutMenu from '../../components/layout-menu';\nimport { t } from '@app/locales';\nimport menu, { type CloseTab, type TabItem, closeTab, openTab } from '../../menu';\nimport type { MenuItemType } from 'antd/es/menu/hooks/useItems';\nimport app from '@app';\n\ndeclare const favicon: string;\nconst prefixCls = app.prefixCls;\nconst c = (s: string) => `${app.prefixCls}-dashboard-${s}`;\nconst cls = {\n tabs: c('tabs'),\n layout: c('layout'),\n sider: c('sider'),\n header: c('header'),\n logo: c('logo'),\n section: c('section'),\n content: c('content'),\n view: c('view'),\n};\nconst layoutCss = css`\n .${cls.header}, .${cls.tabs} {\n z-index: 2;\n }\n .${cls.tabs} {\n position: sticky;\n top: 64px;\n overflow: initial !important;\n margin: 16px 16px 0 !important;\n\n > .${prefixCls}-tabs-nav {\n .${prefixCls}-tabs-tab {\n border-color: var(--border-color, rgb(5 5 5 / 6%)) !important;\n border-bottom-color: var(--border-color, rgb(5 5 5 / 6%)) !important;\n border-radius: var(--border-radius, 8px) !important;\n backdrop-filter: blur(16px);\n background-color: rgba(255, 255, 255, 0.8);\n &.${prefixCls}-tabs-tab-active {\n background-color: rgba(255, 255, 255, 0.9);\n }\n }\n\n &::before {\n content: none;\n }\n }\n }\n .${cls.layout} {\n width: 100% !important;\n min-height: 100vh !important;\n }\n .${cls.sider}, .${cls.section} {\n overflow-y: auto;\n max-height: 100vh;\n }\n .${cls.section} {\n overflow-y: auto;\n }\n .${cls.sider} {\n overflow-y: auto;\n }\n .${cls.content} {\n display: flex;\n margin: 0 16px;\n flex-direction: column;\n z-index: 1;\n }\n .${cls.view} {\n border-radius: var(--border-radius, 8px);\n padding: 24px;\n background: var(--component-card-bg, #fff);\n box-shadow: var(--box-shadow-lite);\n flex: 1;\n transition-property: background-color, box-shadow;\n }\n .${cls.view}, .${cls.logo}, .${cls.logo} > svg {\n transition-duration: var(--transition-duration, 0.3s);\n transition-timing-function: var(\n --transition-timing-function,\n cubic-bezier(0.94, -0.1, 0.1, 1.2)\n );\n }\n .${cls.logo} {\n position: sticky;\n top: 0;\n z-index: 1;\n display: flex;\n gap: 10px;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n padding: 14px;\n height: 68px;\n text-align: center;\n color: #de4553;\n transition-property: background-color, border-color;\n cursor: pointer;\n user-select: none;\n\n > svg,\n &::before {\n transition-property: opacity;\n }\n\n > svg {\n height: 32px;\n opacity: 0;\n }\n\n &::before {\n display: block;\n width: 22px;\n height: 32px;\n background: url(${require(favicon)}) no-repeat center center / contain;\n opacity: 1;\n content: '';\n transition-duration: var(--transition-duration, 0.3s);\n transition-timing-function: var(\n --transition-timing-function,\n cubic-bezier(0.94, -0.1, 0.1, 1.2)\n );\n }\n }\n`;\n\ninjectGlobal([layoutCss]);\n\nconst closeTabs: ({ key: CloseTab | 'refresh' } & Omit<MenuItemType, 'key'>)[] = [\n {\n label: '关闭左侧标签',\n icon: <DeleteRowOutlined style={{ transform: 'scaleX(-1)' }} />,\n key: 'left',\n },\n {\n label: '关闭右侧标签',\n icon: <DeleteRowOutlined />,\n key: 'right',\n },\n {\n label: '关闭其他标签',\n icon: <CloseOutlined />,\n key: 'other',\n },\n {\n label: '刷新标签页',\n icon: <ReloadOutlined />,\n key: 'refresh',\n },\n];\nconst DashboardLayout: FC<{ children?: ReactNode }> = ({ children }) => {\n const { activeKey, tabs, kv } = menu;\n const outlet = useOutlet();\n const navigate = useNavigate();\n const { dropScope } = useAliveController();\n const [search] = useSearchParams();\n const [collapsed, setCollapsed] = useState<boolean>(false);\n const handleCollapsed = useCallback((value: boolean) => {\n if (value) {\n let _timer: number | null = window.setTimeout(() => {\n setCollapsed(value);\n window.clearTimeout(_timer as number);\n _timer = null;\n }, 0);\n } else {\n setCollapsed(value);\n let _timer: number | null = window.setTimeout(() => {\n window.clearTimeout(_timer as number);\n _timer = null;\n }, 30);\n }\n }, []);\n const closedTab = useCallback(\n (tabKey?: string, type?: CloseTab | 'refresh') => {\n if (type === 'refresh') {\n navigate('/refresh');\n return;\n }\n if (tabKey) {\n closeTab(tabKey, type, function (closes?: TabItem[], next?: TabItem) {\n closes?.forEach((item) => {\n if (item.path && dropScope) {\n dropScope(item.path);\n }\n });\n if (next) {\n navigate(`${next.path}?menuId=${next.key}`);\n }\n });\n }\n },\n [dropScope, navigate],\n );\n\n const { menuId, dynamicLabel } = useMemo(\n () => ({\n menuId: search.get('menuId'),\n dynamicLabel: search.get('dynamicTitle') || '',\n }),\n [search],\n );\n\n useEffect(() => {\n if (menuId && kv[menuId]) {\n openTab({\n path: kv[menuId].path,\n key: menuId,\n dynamicTitle: dynamicLabel,\n });\n }\n }, [dynamicLabel, kv, menuId]);\n\n const getItems = useCallback(\n (key: string) =>\n key === activeKey ? closeTabs : closeTabs.filter((i) => i?.key !== 'refresh'),\n [activeKey],\n );\n const handleTabEdit = useCallback(\n (\n targetKey: string | React.MouseEvent<Element, MouseEvent> | React.KeyboardEvent<Element>,\n action: 'add' | 'remove',\n ) => {\n if (action === 'remove' && typeof targetKey === 'string') {\n closedTab(targetKey);\n }\n },\n [closedTab],\n );\n const handleClick = useCallback(\n (key: string) => {\n navigate(`${kv[key].key}?menuId=${kv[key].key}`);\n },\n [kv, navigate],\n );\n const tabPanel = useMemo(() => {\n return tabs.map(({ key, icon, label, dynamicTitle, closable }: TabItem) => {\n return {\n key,\n label: (\n <Dropdown\n menu={{\n items: getItems(key),\n onClick: (info) => {\n info.domEvent.stopPropagation();\n closedTab(key, info.key as CloseTab);\n },\n }}\n trigger={['contextMenu']}\n destroyPopupOnHide\n >\n <div>\n {isValidElement(icon) ? icon : icon ? <IconFont type={icon} /> : null}\n {t[(label as string) || `route-${key}`] + (dynamicTitle || '')}\n </div>\n </Dropdown>\n ),\n closable,\n };\n });\n }, [closedTab, getItems, t, tabs]);\n\n return (\n <Layout className={cls.layout}>\n {layoutSider ? (\n <Layout.Sider\n className={cls.sider}\n trigger={null}\n collapsible\n collapsed={collapsed}\n onBreakpoint={(broken: boolean) => handleCollapsed(broken)}\n onCollapse={(_collapsed: boolean) => handleCollapsed(_collapsed)}\n theme=\"light\"\n breakpoint=\"md\"\n {...layoutSider}\n >\n <div className={cls.logo} data-title={app.name}>\n <FallbackComp compName=\"logo\" show={!collapsed} />\n </div>\n <LayoutMenu collapsed={collapsed} theme={layoutSider.theme} />\n </Layout.Sider>\n ) : null}\n <Layout className={cls.section}>\n <FallbackComp\n compName=\"layout-header\"\n className={cls.header}\n collapsed={collapsed}\n onCollapsed={() => handleCollapsed(!collapsed)}\n />\n <Tabs\n className={cls.tabs}\n hideAdd\n onTabClick={handleClick}\n activeKey={activeKey}\n type=\"editable-card\"\n onEdit={handleTabEdit}\n items={tabPanel}\n animated\n />\n <Layout.Content className={cls.content}>\n <div className={cls.view}>{children || outlet}</div>\n <FallbackComp compName=\"layout-footer\" />\n </Layout.Content>\n </Layout>\n </Layout>\n );\n};\n\nexport default DashboardLayout;\n"],"names":["isValidElement","useCallback","useEffect","useMemo","useState","CloseOutlined","DeleteRowOutlined","ReloadOutlined","css","injectGlobal","Dropdown","Layout","Tabs","useAliveController","useNavigate","useOutlet","useSearchParams","FallbackComp","IconFont","LayoutMenu","t","menu","closeTab","openTab","app","prefixCls","c","s","cls","tabs","layout","sider","header","logo","section","content","view","layoutCss","require","favicon","closeTabs","label","icon","style","transform","key","children","activeKey","kv","outlet","navigate","dropScope","search","collapsed","setCollapsed","handleCollapsed","value","_timer","window","setTimeout","clearTimeout","closedTab","tabKey","type","closes","next","forEach","item","path","menuId","dynamicLabel","get","dynamicTitle","getItems","filter","i","handleTabEdit","targetKey","action","handleClick","tabPanel","map","closable","items","onClick","info","domEvent","stopPropagation","trigger","destroyPopupOnHide","div","className","layoutSider","Sider","collapsible","onBreakpoint","broken","onCollapse","_collapsed","theme","breakpoint","data-title","name","compName","show","onCollapsed","hideAdd","onTabClick","onEdit","animated","Content"],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
type Persistent = {
|
|
2
|
+
/** 当前菜单 */
|
|
3
|
+
menuActiveKey: 'menu.activeKey';
|
|
4
|
+
/** 展开菜单 */
|
|
5
|
+
menuExpandKey: 'menu.expandKey';
|
|
6
|
+
/** 当前用户可访问的菜单列表 */
|
|
7
|
+
menuMenus: 'menu.menus';
|
|
8
|
+
/** 菜单列表的kv数据 */
|
|
9
|
+
menuKv: 'menu.kv';
|
|
10
|
+
/** 选项卡数据 */
|
|
11
|
+
menuTabs: 'menu.tabs';
|
|
12
|
+
/** 使用的语言 */
|
|
13
|
+
language: 'localizable.language';
|
|
14
|
+
[key: string]: string;
|
|
15
|
+
};
|
|
16
|
+
/** 数据持久化key字典 */
|
|
17
|
+
declare const persistentKey: Persistent;
|
|
18
|
+
export default persistentKey;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/persistentKey.ts"],"sourcesContent":["type Persistent = {\n /** 当前菜单 */\n menuActiveKey: 'menu.activeKey';\n /** 展开菜单 */\n menuExpandKey: 'menu.expandKey';\n /** 当前用户可访问的菜单列表 */\n menuMenus: 'menu.menus';\n /** 菜单列表的kv数据 */\n menuKv: 'menu.kv';\n /** 选项卡数据 */\n menuTabs: 'menu.tabs';\n /** 使用的语言 */\n language: 'localizable.language';\n [key: string]: string;\n};\n/** 数据持久化key字典 */\nconst persistentKey: Persistent = {\n menuActiveKey: 'menu.activeKey',\n menuExpandKey: 'menu.expandKey',\n menuMenus: 'menu.menus',\n menuKv: 'menu.kv',\n menuTabs: 'menu.tabs',\n language: 'localizable.language',\n};\n\nexport default persistentKey;\n"],"names":["menuActiveKey","menuExpandKey","menuMenus","menuKv","menuTabs","language"],"mappings":"AAyBA,cATkC,CAChCA,cAAe,iBACfC,cAAe,iBACfC,UAAW,aACXC,OAAQ,UACRC,SAAU,YACVC,SAAU,sBACZ,CAE6B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const injectRemoteReactRefresh: () => void;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import e from"react-dom";import r from"react-refresh/cjs/react-refresh-runtime.development.js";let{injectIntoGlobalHook:t}=r;export const injectRemoteReactRefresh=()=>{t(window),window.__REACT_DEVTOOLS_GLOBAL_HOOK__.inject(e)};
|
|
2
|
+
//# sourceMappingURL=prefix-remote-react-refresh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/prefix/prefix-remote-react-refresh.ts"],"sourcesContent":["import ReactDOM from 'react-dom';\nimport refresh from 'react-refresh/cjs/react-refresh-runtime.development.js';\n\nconst { injectIntoGlobalHook } = refresh;\n\nexport const injectRemoteReactRefresh = () => {\n injectIntoGlobalHook(window);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n window.__REACT_DEVTOOLS_GLOBAL_HOOK__.inject(ReactDOM);\n};\n"],"names":["ReactDOM","refresh","injectIntoGlobalHook","injectRemoteReactRefresh","window","__REACT_DEVTOOLS_GLOBAL_HOOK__","inject"],"mappings":"AAAA,OAAOA,MAAc,WAAY,AACjC,QAAOC,MAAa,wDAAyD,CAE7E,GAAM,CAAEC,qBAAAA,CAAoB,CAAE,CAAGD,CAEjC,QAAO,MAAME,yBAA2B,KACtCD,EAAqBE,QAGrBA,OAAOC,+BAA+BC,OAAON,EAC/C,CAAE"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { default as Link } from '../react-router-dom/link';
|
|
2
|
+
export { default as useNavigate } from '../react-router-dom/use-navgate';
|
|
3
|
+
export { createMemoryRouter, AbortedDeferredError, Await, MemoryRouter, Navigate, NavigationType, Outlet, Route, Router, RouterProvider, Routes, createPath, createRoutesFromChildren, createRoutesFromChildren as createRoutesFromElements, defer, isRouteErrorResponse, generatePath, json, matchPath, matchRoutes, parsePath, redirect, renderMatches, resolvePath, useActionData, useAsyncError, useAsyncValue, unstable_useBlocker, useHref, useInRouterContext, useLoaderData, useLocation, useMatch, useMatches, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes, Link as LinkReactRouter, useNavigate as useNavigateReactRouter, } from 'react-router-dom';
|
|
4
|
+
export type { ActionFunction, ActionFunctionArgs, AwaitProps, unstable_Blocker, unstable_BlockerFunction, DataRouteMatch, DataRouteObject, Fetcher, Hash, IndexRouteObject, IndexRouteProps, JsonFunction, LazyRouteFunction, LayoutRouteProps, LoaderFunction, LoaderFunctionArgs, Location, MemoryRouterProps, NavigateFunction, NavigateOptions, NavigateProps, Navigation, Navigator, NonIndexRouteObject, OutletProps, Params, ParamParseKey, Path, PathMatch, Pathname, PathPattern, PathRouteProps, RedirectFunction, RelativeRoutingType, RouteMatch, RouteObject, RouteProps, RouterProps, RouterProviderProps, RoutesProps, Search, ShouldRevalidateFunction, To, } from 'react-router-dom';
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export{default as Link}from"../react-router-dom/link";export{default as useNavigate}from"../react-router-dom/use-navgate";export{createMemoryRouter,AbortedDeferredError,Await,MemoryRouter,Navigate,NavigationType,Outlet,Route,Router,RouterProvider,Routes,createPath,createRoutesFromChildren,createRoutesFromChildren as createRoutesFromElements,defer,isRouteErrorResponse,generatePath,json,matchPath,matchRoutes,parsePath,redirect,renderMatches,resolvePath,useActionData,useAsyncError,useAsyncValue,unstable_useBlocker,useHref,useInRouterContext,useLoaderData,useLocation,useMatch,useMatches,useNavigation,useNavigationType,useOutlet,useOutletContext,useParams,useResolvedPath,useRevalidator,useRouteError,useRouteLoaderData,useRoutes,Link as LinkReactRouter,useNavigate as useNavigateReactRouter}from"react-router-dom";
|
|
2
|
+
//# sourceMappingURL=react-reouter-dom.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/prefix/react-reouter-dom.ts"],"sourcesContent":["export { default as Link } from '../react-router-dom/link';\nexport { default as useNavigate } from '../react-router-dom/use-navgate';\nexport {\n createMemoryRouter,\n AbortedDeferredError,\n Await,\n MemoryRouter,\n Navigate,\n NavigationType,\n Outlet,\n Route,\n Router,\n RouterProvider,\n Routes,\n createPath,\n createRoutesFromChildren,\n createRoutesFromChildren as createRoutesFromElements,\n defer,\n isRouteErrorResponse,\n generatePath,\n json,\n matchPath,\n matchRoutes,\n parsePath,\n redirect,\n renderMatches,\n resolvePath,\n useActionData,\n useAsyncError,\n useAsyncValue,\n unstable_useBlocker,\n useHref,\n useInRouterContext,\n useLoaderData,\n useLocation,\n useMatch,\n useMatches,\n useNavigation,\n useNavigationType,\n useOutlet,\n useOutletContext,\n useParams,\n useResolvedPath,\n useRevalidator,\n useRouteError,\n useRouteLoaderData,\n useRoutes,\n Link as LinkReactRouter,\n useNavigate as useNavigateReactRouter,\n} from 'react-router-dom';\nexport type {\n ActionFunction,\n ActionFunctionArgs,\n AwaitProps,\n unstable_Blocker,\n unstable_BlockerFunction,\n DataRouteMatch,\n DataRouteObject,\n Fetcher,\n Hash,\n IndexRouteObject,\n IndexRouteProps,\n JsonFunction,\n LazyRouteFunction,\n LayoutRouteProps,\n LoaderFunction,\n LoaderFunctionArgs,\n Location,\n MemoryRouterProps,\n NavigateFunction,\n NavigateOptions,\n NavigateProps,\n Navigation,\n Navigator,\n NonIndexRouteObject,\n OutletProps,\n Params,\n ParamParseKey,\n Path,\n PathMatch,\n Pathname,\n PathPattern,\n PathRouteProps,\n RedirectFunction,\n RelativeRoutingType,\n RouteMatch,\n RouteObject,\n RouteProps,\n RouterProps,\n RouterProviderProps,\n RoutesProps,\n Search,\n ShouldRevalidateFunction,\n To,\n} from 'react-router-dom';\n"],"names":["default","Link","useNavigate","createMemoryRouter","AbortedDeferredError","Await","MemoryRouter","Navigate","NavigationType","Outlet","Route","Router","RouterProvider","Routes","createPath","createRoutesFromChildren","createRoutesFromElements","defer","isRouteErrorResponse","generatePath","json","matchPath","matchRoutes","parsePath","redirect","renderMatches","resolvePath","useActionData","useAsyncError","useAsyncValue","unstable_useBlocker","useHref","useInRouterContext","useLoaderData","useLocation","useMatch","useMatches","useNavigation","useNavigationType","useOutlet","useOutletContext","useParams","useResolvedPath","useRevalidator","useRouteError","useRouteLoaderData","useRoutes","LinkReactRouter","useNavigateReactRouter"],"mappings":"AAAA,OAASA,WAAWC,IAAI,KAAQ,0BAA2B,AAC3D,QAASD,WAAWE,WAAW,KAAQ,iCAAkC,AACzE,QACEC,kBAAkB,CAClBC,oBAAoB,CACpBC,KAAK,CACLC,YAAY,CACZC,QAAQ,CACRC,cAAc,CACdC,MAAM,CACNC,KAAK,CACLC,MAAM,CACNC,cAAc,CACdC,MAAM,CACNC,UAAU,CACVC,wBAAwB,CACxBA,4BAA4BC,wBAAwB,CACpDC,KAAK,CACLC,oBAAoB,CACpBC,YAAY,CACZC,IAAI,CACJC,SAAS,CACTC,WAAW,CACXC,SAAS,CACTC,QAAQ,CACRC,aAAa,CACbC,WAAW,CACXC,aAAa,CACbC,aAAa,CACbC,aAAa,CACbC,mBAAmB,CACnBC,OAAO,CACPC,kBAAkB,CAClBC,aAAa,CACbC,WAAW,CACXC,QAAQ,CACRC,UAAU,CACVC,aAAa,CACbC,iBAAiB,CACjBC,SAAS,CACTC,gBAAgB,CAChBC,SAAS,CACTC,eAAe,CACfC,cAAc,CACdC,aAAa,CACbC,kBAAkB,CAClBC,SAAS,CACT7C,QAAQ8C,eAAe,CACvB7C,eAAe8C,sBAAsB,KAChC,kBAAmB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from 'react-router-dom';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type FC } from 'react';
|
|
2
|
+
import { type LinkProps as ReactRouterLinkProps, type To } from 'react-router-dom';
|
|
3
|
+
export interface LinkProps extends Omit<ReactRouterLinkProps, 'to'> {
|
|
4
|
+
/** search保留字 */
|
|
5
|
+
reserved?: string | string[];
|
|
6
|
+
to: To | -1;
|
|
7
|
+
}
|
|
8
|
+
declare const Link: FC<LinkProps>;
|
|
9
|
+
export default Link;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as r}from"react/jsx-runtime";import{useMemo as e}from"react";import{Link as t,useSearchParams as i}from"react-router-dom";export default(({reserved:a,to:n,children:o,...l})=>{let m=e(()=>["menuId","dynamicTitle",...Array.isArray(a)?a:[a]].filter(Boolean),[a]),[c]=i(),s=e(()=>{if(-1===n)return -1;let r={};c.forEach((e,t)=>{m.includes(t)&&(r[t]=e)});let e=n,t=e.indexOf("?");if(-1!==t){let i=new URLSearchParams(e.slice(t));i.forEach((e,t)=>{r[t]=e}),e=e.substring(0,t)}let i=new URLSearchParams(r).toString();return i?.trim().length?[e,i].join("?"):e},[m,c,n]);return r(t,{...l,to:s,children:o})});
|
|
2
|
+
//# sourceMappingURL=link.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/react-router-dom/link.tsx"],"sourcesContent":["import React, { type FC, useMemo } from 'react';\nimport {\n Link as ReactRouterLink,\n type LinkProps as ReactRouterLinkProps,\n type To,\n useSearchParams,\n} from 'react-router-dom';\n\nexport interface LinkProps extends Omit<ReactRouterLinkProps, 'to'> {\n /** search保留字 */\n reserved?: string | string[];\n to: To | -1;\n}\n\nconst Link: FC<LinkProps> = ({ reserved, to, children, ...props }) => {\n const reservedWord = useMemo(() => {\n return ['menuId', 'dynamicTitle', ...(Array.isArray(reserved) ? reserved : [reserved])].filter(\n Boolean,\n );\n }, [reserved]);\n const [search] = useSearchParams();\n const toUrl = useMemo(() => {\n if (to === -1) {\n return -1;\n }\n /** 提取保留字属性 */\n const nextSearch: Record<string, string> = {};\n\n search.forEach((val, key) => {\n if (reservedWord.includes(key)) {\n nextSearch[key] = val;\n }\n });\n\n let entryUrl = to as string;\n const entrySearchIdx = entryUrl.indexOf('?');\n\n if (entrySearchIdx !== -1) {\n const searchByToUrl = new URLSearchParams(entryUrl.slice(entrySearchIdx));\n\n searchByToUrl.forEach((val, key) => {\n nextSearch[key] = val;\n });\n entryUrl = entryUrl.substring(0, entrySearchIdx);\n }\n const searchString = new URLSearchParams(nextSearch).toString();\n\n return searchString?.trim().length ? [entryUrl, searchString].join('?') : entryUrl;\n }, [reservedWord, search, to]);\n\n return (\n <ReactRouterLink {...props} to={toUrl as To}>\n {children}\n </ReactRouterLink>\n );\n};\n\nexport default Link;\n"],"names":["useMemo","Link","ReactRouterLink","useSearchParams","reserved","to","children","props","reservedWord","Array","isArray","filter","Boolean","search","toUrl","nextSearch","forEach","val","key","includes","entryUrl","entrySearchIdx","indexOf","searchByToUrl","URLSearchParams","slice","substring","searchString","toString","trim","length","join"],"mappings":"uCAAA,QAAyBA,WAAAA,CAAO,KAAQ,OAAQ,AAChD,QACEC,QAAQC,CAAe,CAGvBC,mBAAAA,CAAe,KACV,kBAAmB,AAmD1B,eA3C4B,CAAA,CAAC,CAAEC,SAAAA,CAAQ,CAAEC,GAAAA,CAAE,CAAEC,SAAAA,CAAQ,CAAE,GAAGC,EAAO,IAC/D,IAAMC,EAAeR,EAAQ,IACpB,CAAC,SAAU,kBAAoBS,MAAMC,QAAQN,GAAYA,EAAW,CAACA,EAAS,CAAE,CAACO,OACtFC,SAED,CAACR,EAAS,EACP,CAACS,EAAO,CAAGV,IACXW,EAAQd,EAAQ,KACpB,GAAIK,AAAO,KAAPA,EACF,OAAO,GAGT,IAAMU,EAAqC,CAAC,EAE5CF,EAAOG,QAAQ,CAACC,EAAKC,KACfV,EAAaW,SAASD,IACxBH,CAAAA,CAAU,CAACG,EAAI,CAAGD,CAAE,CAExB,GAEA,IAAIG,EAAWf,EACTgB,EAAiBD,EAASE,QAAQ,KAExC,GAAID,AAAmB,KAAnBA,EAAuB,CACzB,IAAME,EAAgB,IAAIC,gBAAgBJ,EAASK,MAAMJ,IAEzDE,EAAcP,QAAQ,CAACC,EAAKC,KAC1BH,CAAU,CAACG,EAAI,CAAGD,CACpB,GACAG,EAAWA,EAASM,UAAU,EAAGL,EACnC,CACA,IAAMM,EAAe,IAAIH,gBAAgBT,GAAYa,WAErD,OAAOD,GAAcE,OAAOC,OAAS,CAACV,EAAUO,EAAa,CAACI,KAAK,KAAOX,CAC5E,EAAG,CAACZ,EAAcK,EAAQR,EAAG,EAE7B,OACE,EAACH,GAAiB,GAAGK,CAAK,CAAEF,GAAIS,WAC7BR,GAGP,CAAA,CAEoB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{useNavigate as e,useSearchParams as r}from"react-router-dom";export default(t=>{let a=Array.from(new Set(["menuId","dynamicTitle",...t||[]])).filter(Boolean),o=e(),[l]=r();return(e,r)=>{if(-1===e){o(-1);return}let t={},n=e.split("?"),i=new URLSearchParams(n[1]||"");for(let[e,r]of l)a.includes(e)&&(t[e]=r);for(let[e,r]of i)a.includes(e)&&(t[e]=r);let f=new URLSearchParams(t),m=f.toString(),u=m?`${n[0]}?${m}`:n[0];o(u,r)}});
|
|
2
|
+
//# sourceMappingURL=use-navgate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/react-router-dom/use-navgate.ts"],"sourcesContent":["import {\n type NavigateOptions,\n type To,\n useNavigate as useNavigateReactRouter,\n useSearchParams,\n} from 'react-router-dom';\n\nconst useNavigate = (\n /** search保留字 */\n reserved?: string | string[],\n) => {\n const reservedWord = Array.from(new Set(['menuId', 'dynamicTitle', ...(reserved || [])])).filter(\n Boolean,\n );\n const navigate = useNavigateReactRouter();\n const [search] = useSearchParams();\n\n const navigateTo = (to: To | -1, options?: NavigateOptions) => {\n if (to === -1) {\n navigate(-1);\n return;\n }\n /** 提取保留字属性 */\n const nextSearch: Record<string, string> = {};\n const urlParts = (to as string).split('?');\n const searchByToUrl = new URLSearchParams(urlParts[1] || '');\n\n for (const [key, val] of search) {\n if (reservedWord.includes(key)) {\n nextSearch[key] = val;\n }\n }\n for (const [key, val] of searchByToUrl) {\n if (reservedWord.includes(key)) {\n nextSearch[key] = val;\n }\n }\n\n const searchObj = new URLSearchParams(nextSearch);\n const searchString = searchObj.toString();\n const toUrl = searchString ? `${urlParts[0]}?${searchString}` : urlParts[0];\n\n navigate(toUrl, options);\n };\n\n return navigateTo;\n};\n\nexport default useNavigate;\n"],"names":["useNavigate","useNavigateReactRouter","useSearchParams","reserved","reservedWord","Array","from","Set","filter","Boolean","navigate","search","to","options","nextSearch","urlParts","split","searchByToUrl","URLSearchParams","key","val","includes","searchObj","searchString","toString","toUrl"],"mappings":"AAAA,OAGEA,eAAeC,CAAsB,CACrCC,mBAAAA,CAAe,KACV,kBAAmB,AA2C1B,eAzCoB,CAAA,AAElBC,IAEA,IAAMC,EAAeC,MAAMC,KAAK,IAAIC,IAAI,CAAC,SAAU,kBAAoBJ,GAAY,EAAE,CAAE,GAAGK,OACxFC,SAEIC,EAAWT,IACX,CAACU,EAAO,CAAGT,IA8BjB,MA5BmB,CAACU,EAAaC,KAC/B,GAAID,AAAO,KAAPA,EAAW,CACbF,EAAS,IACT,MACF,CAEA,IAAMI,EAAqC,CAAC,EACtCC,EAAW,AAACH,EAAcI,MAAM,KAChCC,EAAgB,IAAIC,gBAAgBH,CAAQ,CAAC,EAAE,EAAI,IAEzD,IAAK,GAAM,CAACI,EAAKC,EAAI,GAAIT,EACnBP,EAAaiB,SAASF,IACxBL,CAAAA,CAAU,CAACK,EAAI,CAAGC,CAAE,EAGxB,IAAK,GAAM,CAACD,EAAKC,EAAI,GAAIH,EACnBb,EAAaiB,SAASF,IACxBL,CAAAA,CAAU,CAACK,EAAI,CAAGC,CAAE,EAIxB,IAAME,EAAY,IAAIJ,gBAAgBJ,GAChCS,EAAeD,EAAUE,WACzBC,EAAQF,EAAe,CAAC,EAAER,CAAQ,CAAC,EAAE,CAAC,CAAC,EAAEQ,EAAa,CAAC,CAAGR,CAAQ,CAAC,EAAE,CAE3EL,EAASe,EAAOZ,EAClB,CAGF,CAAA,CAE2B"}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@moneko/react",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "react",
|
|
5
|
+
"main": "lib/index.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"prebuild": "rm -rf ./lib",
|
|
8
|
+
"build": "swc src -d lib -D && tsc",
|
|
9
|
+
"postbuild": "node ./copy.js ./prefix ./lib"
|
|
10
|
+
},
|
|
11
|
+
"author": "moneko",
|
|
12
|
+
"type": "module",
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"@moneko/common": "1.2.0",
|
|
16
|
+
"@moneko/css": "1.0.5",
|
|
17
|
+
"@pmmmwh/react-refresh-webpack-plugin": "0.5.11",
|
|
18
|
+
"react-activation": "0.12.4",
|
|
19
|
+
"react-refresh": "0.14.0",
|
|
20
|
+
"react-refresh-typescript": "2.0.9",
|
|
21
|
+
"react-router": "6.15.0",
|
|
22
|
+
"react-router-dom": "6.15.0",
|
|
23
|
+
"shared-store-object": "^1.0.8"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@swc/cli": "0.1.62",
|
|
27
|
+
"@swc/core": "1.3.62",
|
|
28
|
+
"@types/react": "^18.2.16",
|
|
29
|
+
"@types/react-dom": "^18.2.7",
|
|
30
|
+
"@types/react-router-dom": "^5.3.3",
|
|
31
|
+
"@types/shelljs": "^0.8.12",
|
|
32
|
+
"@types/webpack-env": "1.18.1",
|
|
33
|
+
"antd": "5.7.3",
|
|
34
|
+
"eslint-config-neko": "^1.1.1",
|
|
35
|
+
"react": "^18.2.0",
|
|
36
|
+
"react-dom": "^18.2.0",
|
|
37
|
+
"shelljs": "^0.8.5",
|
|
38
|
+
"stylelint-config-moneko": "^1.0.17",
|
|
39
|
+
"swc-plugin-another-transform-imports": "0.2.4",
|
|
40
|
+
"typescript": "5.0.4"
|
|
41
|
+
},
|
|
42
|
+
"files": [
|
|
43
|
+
"lib",
|
|
44
|
+
"jest-preset.js"
|
|
45
|
+
]
|
|
46
|
+
}
|