@moneko/react 0.0.4 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/env.d.ts +18 -14
  2. package/lib/entry.d.ts +9 -1
  3. package/lib/entry.js +1 -1
  4. package/lib/entry.js.map +1 -1
  5. package/lib/index.d.ts +3 -4
  6. package/lib/index.js +1 -1
  7. package/lib/index.js.map +1 -1
  8. package/lib/{react-router-dom/link.d.ts → link.d.ts} +4 -1
  9. package/lib/link.js.map +1 -0
  10. package/lib/merge.d.ts +8 -3
  11. package/lib/merge.js +1 -1
  12. package/lib/merge.js.map +1 -1
  13. package/lib/prefix-remote-react-refresh.js.map +1 -0
  14. package/lib/{react-router-dom/use-navgate.d.ts → use-navgate.d.ts} +3 -0
  15. package/lib/use-navgate.js.map +1 -0
  16. package/package.json +6 -12
  17. package/lib/app.d.ts +0 -7
  18. package/lib/app.js +0 -2
  19. package/lib/app.js.map +0 -1
  20. package/lib/components/app-router.d.ts +0 -6
  21. package/lib/components/app-router.js +0 -2
  22. package/lib/components/app-router.js.map +0 -1
  23. package/lib/components/fallback-comp.d.ts +0 -10
  24. package/lib/components/fallback-comp.js +0 -2
  25. package/lib/components/fallback-comp.js.map +0 -1
  26. package/lib/components/iconfont.d.ts +0 -14
  27. package/lib/components/iconfont.js +0 -2
  28. package/lib/components/iconfont.js.map +0 -1
  29. package/lib/components/layout-menu.d.ts +0 -7
  30. package/lib/components/layout-menu.js +0 -2
  31. package/lib/components/layout-menu.js.map +0 -1
  32. package/lib/menu.d.ts +0 -60
  33. package/lib/menu.js +0 -2
  34. package/lib/menu.js.map +0 -1
  35. package/lib/packages/back-stage/app.d.ts +0 -5
  36. package/lib/packages/back-stage/app.js +0 -2
  37. package/lib/packages/back-stage/app.js.map +0 -1
  38. package/lib/packages/back-stage/layut.d.ts +0 -5
  39. package/lib/packages/back-stage/layut.js +0 -105
  40. package/lib/packages/back-stage/layut.js.map +0 -1
  41. package/lib/persistentKey.d.ts +0 -18
  42. package/lib/persistentKey.js +0 -2
  43. package/lib/persistentKey.js.map +0 -1
  44. package/lib/prefix/prefix-remote-react-refresh.js.map +0 -1
  45. package/lib/prefix/react-reouter-dom.d.ts +0 -4
  46. package/lib/prefix/react-reouter-dom.js +0 -2
  47. package/lib/prefix/react-reouter-dom.js.map +0 -1
  48. package/lib/prefix/react-router-dom.d.ts +0 -1
  49. package/lib/react-router-dom/link.js.map +0 -1
  50. package/lib/react-router-dom/use-navgate.js.map +0 -1
  51. package/lib/suspense-comp.d.ts +0 -7
  52. package/lib/suspense-comp.js +0 -2
  53. package/lib/suspense-comp.js.map +0 -1
  54. /package/lib/{react-router-dom/link.js → link.js} +0 -0
  55. /package/lib/{prefix/prefix-remote-react-refresh.d.ts → prefix-remote-react-refresh.d.ts} +0 -0
  56. /package/lib/{prefix/prefix-remote-react-refresh.js → prefix-remote-react-refresh.js} +0 -0
  57. /package/lib/{react-router-dom/use-navgate.js → use-navgate.js} +0 -0
package/env.d.ts CHANGED
@@ -26,10 +26,8 @@ declare module '*?raw' {
26
26
  export default string;
27
27
  }
28
28
  declare module '@app/docs' {
29
- import { ReactNode, ReactNode } from 'react';
30
-
31
29
  interface ApiEntry {
32
- [key: string]: (() => ReactNode)[];
30
+ [key: string]: (() => React.ReactNode)[];
33
31
  }
34
32
  const entry: ApiEntry;
35
33
 
@@ -92,7 +90,7 @@ declare module '@app/routes' {
92
90
  icon?: string;
93
91
  dynamicTitle?: string;
94
92
  /** 菜单名 */
95
- label?: ReactNode | null;
93
+ label?: React.ReactNode | null;
96
94
  hideMenu?: boolean;
97
95
  hideTab?: boolean;
98
96
  onlyLogin?: boolean;
@@ -162,7 +160,7 @@ declare module '@app/coverage' {
162
160
  export default coverage;
163
161
  }
164
162
  declare module '@app/locales' {
165
- import type { SetStoreFunction } from 'solid-js/store';
163
+ import type { SSO } from 'shared-store-object';
166
164
  export type LocaleConfig = {
167
165
  /** 语言名称 (未设置时使用文件名)*/
168
166
  language?: string;
@@ -182,7 +180,8 @@ declare module '@app/locales' {
182
180
  }
183
181
  /** 获取当前项目的语言列表 */
184
182
  export const locales: Pick<Locale, 'language' | 'icon' | 'title'>[] = [];
185
- export const resources: Partial<LocaleConfigMap> = {};
183
+ const resources: Partial<LocaleConfigMap> = {};
184
+
186
185
  /**
187
186
  * 插值字符串; 替换字符串中的占位符 `${}` 为对应的值
188
187
  * @param {string} str 包含占位符的字符串
@@ -202,21 +201,26 @@ declare module '@app/locales' {
202
201
  * ```
203
202
  */
204
203
  export function setLang(localeName: string): void;
205
- /** 使用的语言 */
206
- export const lang: Omit<Locale, 'translation'>;
207
- /** 映射 */
208
- export const t: Record<string, string>;
209
204
  /** 设置 */
210
- export const setLocalizable: SetStoreFunction<{
205
+ const localizable: SSO<{
211
206
  lang: Omit<Locale, 'translation'>;
212
207
  t: Record<string, string>;
213
208
  }>;
209
+
210
+ export default localizable;
214
211
  }
215
212
  declare module '@app/fallback' {
216
213
  const Fallback: null | (() => ReactElement);
217
214
 
218
215
  export default Fallback;
219
216
  }
217
+ declare module '@app/suspense' {
218
+ export default function SuspenseComp(props: {
219
+ comp: () => Promise<{
220
+ default: ComponentType;
221
+ }>;
222
+ }): React.JSX.Element;
223
+ }
220
224
 
221
225
  declare let __webpack_public_path__: string | undefined;
222
226
 
@@ -224,9 +228,9 @@ interface Window {
224
228
  areaPaddingTop?: number;
225
229
  areaPaddingBottom?: number;
226
230
  __POWERED_BY_QIANKUN__?: boolean;
227
- mainApp: {
228
- container: HTMLElement;
229
- currentTarget: Record<string, unknown>;
231
+ mainApp?: {
232
+ container?: HTMLElement;
233
+ currentTarget?: Record<string, unknown>;
230
234
  [key: string]: unknown;
231
235
  };
232
236
  H5RemoteRuntime: {
package/lib/entry.d.ts CHANGED
@@ -1 +1,9 @@
1
- export * from '@/entry';
1
+ import React from 'react';
2
+ type RenderAppProps = {
3
+ container?: HTMLElement;
4
+ basename?: string;
5
+ fallback?: React.ReactElement;
6
+ language?: string;
7
+ };
8
+ declare function renderApp(props?: RenderAppProps): () => void;
9
+ export default renderApp;
package/lib/entry.js CHANGED
@@ -1,2 +1,2 @@
1
- export*from"@/entry";
1
+ import{jsx as r}from"react/jsx-runtime";import{useEffect as o}from"react";import e from"@app";import t from"@app/fallback";import m,{setLang as a}from"@app/locales";import n from"@app/routes";import{createRoot as p}from"react-dom/client";import{RouterProvider as i,createBrowserRouter as l,createHashRouter as u}from"react-router-dom";export default function(c={}){let{container:f,basename:d=e.base,language:s,...w}=c,g="hash"===e.routerMode?u:l,b=f?.querySelector("#root")||document.getElementById("root"),x=p(b);return"micro"===e.type&&(window.mainApp={...w,container:b}),x.render(r(()=>{let{lang:e}=m;return o(()=>{s&&s!==e.language&&a(s)},[s,e.language]),r(i,{router:g(n,{basename:d,window:window}),fallbackElement:t&&r(t,{})})},{})),x.unmount};
2
2
  //# sourceMappingURL=entry.js.map
package/lib/entry.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/entry.tsx"],"sourcesContent":["// import React from 'react';\n// import app from '@app';\n// import { createRoot } from 'react-dom/client';\n// import App from './app.js';\n\n// type RenderAppProps = {\n// container?: HTMLElement;\n// basename?: string;\n// fallback?: React.ReactElement;\n// language?: string;\n// };\n\n// function 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\n// export default renderApp;\n\nexport * from '@/entry';\n"],"names":[],"mappings":"AA6BA,WAAc,SAAU"}
1
+ {"version":3,"sources":["../src/entry.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport app from '@app';\nimport Fallback from '@app/fallback';\nimport localizable, { setLang } from '@app/locales';\nimport routes from '@app/routes';\nimport { createRoot } from 'react-dom/client';\nimport { RouterProvider, createBrowserRouter, createHashRouter } from 'react-router-dom';\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, language, ...args } = props;\n const createRouter = app.routerMode === 'hash' ? createHashRouter : createBrowserRouter;\n const _container = container?.querySelector('#root') || document.getElementById('root');\n const instance = createRoot(_container as HTMLElement);\n\n if (app.type === 'micro') {\n window.mainApp = {\n ...args,\n container: _container as HTMLElement,\n };\n }\n const App = () => {\n const { lang } = localizable;\n\n useEffect(() => {\n if (language && language !== lang.language) {\n setLang(language);\n }\n }, [language, lang.language]);\n return (\n <RouterProvider\n router={createRouter(routes, {\n basename: basename,\n window: window,\n })}\n fallbackElement={Fallback && <Fallback />}\n />\n );\n };\n\n instance.render(<App />);\n return instance.unmount;\n}\n\nexport default renderApp;\n"],"names":["useEffect","app","Fallback","localizable","setLang","routes","createRoot","RouterProvider","createBrowserRouter","createHashRouter","props","container","basename","base","language","args","createRouter","routerMode","_container","querySelector","document","getElementById","instance","type","window","mainApp","render","lang","router","fallbackElement","unmount"],"mappings":"uCAAA,QAAgBA,aAAAA,CAAS,KAAQ,OAAQ,AACzC,QAAOC,MAAS,MAAO,AACvB,QAAOC,MAAc,eAAgB,AACrC,QAAOC,GAAeC,WAAAA,CAAO,KAAQ,cAAe,AACpD,QAAOC,MAAY,aAAc,AACjC,QAASC,cAAAA,CAAU,KAAQ,kBAAmB,AAC9C,QAASC,kBAAAA,CAAc,CAAEC,uBAAAA,CAAmB,CAAEC,oBAAAA,CAAgB,KAAQ,kBAAmB,AA4CzF,gBAnCA,SAAmBC,EAAwB,CAAC,CAAC,EAC3C,GAAM,CAAEC,UAAAA,CAAS,CAAEC,SAAAA,EAAWX,EAAIY,IAAI,CAAEC,SAAAA,CAAQ,CAAE,GAAGC,EAAM,CAAGL,EACxDM,EAAef,AAAmB,SAAnBA,EAAIgB,WAAwBR,EAAmBD,EAC9DU,EAAaP,GAAWQ,cAAc,UAAYC,SAASC,eAAe,QAC1EC,EAAWhB,EAAWY,SAEX,UAAbjB,EAAIsB,MACNC,CAAAA,OAAOC,QAAU,CACf,GAAGV,CAAI,CACPJ,UAAWO,CACb,CAAA,EAqBFI,EAASI,OAAO,EAnBJ,KACV,GAAM,CAAEC,KAAAA,CAAI,CAAE,CAAGxB,EAOjB,OALAH,EAAU,KACJc,GAAYA,IAAaa,EAAKb,UAChCV,EAAQU,EAEZ,EAAG,CAACA,EAAUa,EAAKb,SAAS,EAE1B,EAACP,GACCqB,OAAQZ,EAAaX,EAAQ,CAC3BO,SAAUA,EACVY,OAAQA,MACV,GACAK,gBAAiB3B,GAAY,EAACA,OAGpC,OAGOoB,EAASQ,OAClB,CAEyB"}
package/lib/index.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- export * from './prefix/react-router-dom.js';
2
- export { default as sso, type SSOConfig, type PrivateSSOConfig } from 'shared-store-object';
3
- export { default as persistentKey } from './persistentKey.js';
4
- export * from './prefix/react-reouter-dom.js';
1
+ export * from 'react-router-dom';
2
+ export { default as LinkWithMenuId } from './link.js';
3
+ export { default as useNavigateWithMenuId } from './use-navgate.js';
package/lib/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export*from"./prefix/react-router-dom.js";export{default as sso}from"shared-store-object";export{default as persistentKey}from"./persistentKey.js";export*from"./prefix/react-reouter-dom.js";
1
+ export*from"react-router-dom";export{default as LinkWithMenuId}from"./link.js";export{default as useNavigateWithMenuId}from"./use-navgate.js";
2
2
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +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\nexport { default as persistentKey } from './persistentKey.js';\nexport * from './prefix/react-reouter-dom.js';\n"],"names":["default","sso","persistentKey"],"mappings":"AAAA,WAAc,8BAA+B,AAC7C,QAASA,WAAWC,GAAG,KAA+C,qBAAsB,AAE5F,QAASD,WAAWE,aAAa,KAAQ,oBAAqB,AAC9D,YAAc,+BAAgC"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from 'react-router-dom';\nexport { default as LinkWithMenuId } from './link.js';\nexport { default as useNavigateWithMenuId } from './use-navgate.js';\n"],"names":["default","LinkWithMenuId","useNavigateWithMenuId"],"mappings":"AAAA,WAAc,kBAAmB,AACjC,QAASA,WAAWC,cAAc,KAAQ,WAAY,AACtD,QAASD,WAAWE,qBAAqB,KAAQ,kBAAmB"}
@@ -1,9 +1,12 @@
1
1
  import { type FC } from 'react';
2
2
  import { type LinkProps as ReactRouterLinkProps, type To } from 'react-router-dom';
3
3
  export interface LinkProps extends Omit<ReactRouterLinkProps, 'to'> {
4
- /** search保留字 */
4
+ /** 保留字 */
5
5
  reserved?: string | string[];
6
6
  to: To | -1;
7
7
  }
8
+ /** 跳转时继承部分query参数
9
+ * @default {string[]} ['menuId', 'dynamicTitle']
10
+ */
8
11
  declare const Link: FC<LinkProps>;
9
12
  export default Link;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/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 /** 保留字 */\n reserved?: string | string[];\n to: To | -1;\n}\n\n/** 跳转时继承部分query参数\n * @default {string[]} ['menuId', 'dynamicTitle'] \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,AAsD1B,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"}
package/lib/merge.d.ts CHANGED
@@ -1,5 +1,10 @@
1
- declare function merge<T extends object & {
2
- children?: T[];
1
+ type Prefix = {
2
+ children?: Prefix[];
3
3
  meta?: object;
4
- }>(route: T[], key: keyof T): T[] | undefined;
4
+ element?: any;
5
+ path: string;
6
+ };
7
+ declare function merge<T extends Prefix>(route: T[], key: keyof T): ({
8
+ key: string;
9
+ } & T)[] | undefined;
5
10
  export default merge;
package/lib/merge.js CHANGED
@@ -1,2 +1,2 @@
1
- export default function e(n,r){if(!n.length)return;let t=[];return n.forEach(n=>{let i=t.findIndex(e=>e[r]==n[r]);if(i>-1){let l=[...t[i].children||[],...n.children||[]];t[i]=Object.assign(n,t[i],t[i].meta&&{meta:{...t[i].meta,...n.meta}}),l.length&&(t[i].children=e(l,r))}else t.push(Object.assign(n,Array.isArray(n.children)&&{children:e(n.children,r)}))}),t};
1
+ import{createElement as e,isValidElement as r}from"react";export default function t(n,l){if(!n.length)return;let i=[];return n.forEach(e=>{let r=i.findIndex(r=>r[l]==e[l]);if(r>-1){let n=[...i[r].children||[],...e.children||[]];i[r]=Object.assign(e,i[r],i[r].meta&&{meta:{...i[r].meta,...e.meta}}),n.length&&(i[r].children=t(n,l))}else i.push(Object.assign(e,Array.isArray(e.children)&&{children:t(e.children,l)}))}),function t(n){return n.map(n=>{let l=Object.assign({key:n.path},n);return l.element&&!r(l.element)&&(l.element=e(l.element,l.meta)),Array.isArray(l.children)&&(l.children=t(l.children)),l})}(i)};
2
2
  //# sourceMappingURL=merge.js.map
package/lib/merge.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/merge.ts"],"sourcesContent":["function merge<T extends object & { children?: T[]; meta?: object }>(route: T[], key: keyof T) {\n if (!route.length) return void 0;\n const arr: T[] = [];\n\n route.forEach((e) => {\n const idx = arr.findIndex((i) => i[key] == e[key]);\n\n if (idx > -1) {\n const ctree = [...(arr[idx].children || []), ...(e.children || [])];\n\n arr[idx] = Object.assign(\n e,\n arr[idx],\n arr[idx].meta && {\n meta: {\n ...arr[idx].meta,\n ...e.meta,\n },\n },\n );\n if (ctree.length) {\n arr[idx].children = merge(ctree, key);\n }\n } else {\n arr.push(\n Object.assign(\n e,\n Array.isArray(e.children) && {\n children: merge(e.children, key),\n },\n ),\n );\n }\n });\n\n return arr;\n}\n\nexport default merge;\n"],"names":["merge","route","key","length","arr","forEach","e","idx","findIndex","i","ctree","children","Object","assign","meta","push","Array","isArray"],"mappings":"AAsCA,eAtCA,SAASA,EAA4DC,CAAU,CAAEC,CAAY,EAC3F,GAAI,CAACD,EAAME,OAAQ,OACnB,IAAMC,EAAW,EAAE,CAiCnB,OA/BAH,EAAMI,QAAQ,AAACC,IACb,IAAMC,EAAMH,EAAII,UAAU,AAACC,GAAMA,CAAC,CAACP,EAAI,EAAII,CAAC,CAACJ,EAAI,EAEjD,GAAIK,EAAM,GAAI,CACZ,IAAMG,EAAQ,IAAKN,CAAG,CAACG,EAAI,CAACI,UAAY,EAAE,IAAOL,EAAEK,UAAY,EAAE,CAAE,AAEnEP,CAAAA,CAAG,CAACG,EAAI,CAAGK,OAAOC,OAChBP,EACAF,CAAG,CAACG,EAAI,CACRH,CAAG,CAACG,EAAI,CAACO,MAAQ,CACfA,KAAM,CACJ,GAAGV,CAAG,CAACG,EAAI,CAACO,IAAI,CAChB,GAAGR,EAAEQ,IAAI,AACX,CACF,GAEEJ,EAAMP,QACRC,CAAAA,CAAG,CAACG,EAAI,CAACI,SAAWX,EAAMU,EAAOR,EAAG,CAExC,MACEE,EAAIW,KACFH,OAAOC,OACLP,EACAU,MAAMC,QAAQX,EAAEK,WAAa,CAC3BA,SAAUX,EAAMM,EAAEK,SAAUT,EAC9B,GAIR,GAEOE,CACT,CAEqB"}
1
+ {"version":3,"sources":["../src/merge.ts"],"sourcesContent":["import { createElement, isValidElement } from 'react';\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Prefix = { children?: Prefix[]; meta?: object; element?: any; path: string };\n\nfunction prefix<T extends Prefix>(list: T[]) {\n return list.map((r) => {\n const _ = Object.assign({ key: r.path }, r);\n\n if (_.element && !isValidElement(_.element)) {\n _.element = createElement(_.element, _.meta);\n }\n if (Array.isArray(_.children)) {\n _.children = prefix(_.children);\n }\n return _;\n });\n}\nfunction merge<T extends Prefix>(route: T[], key: keyof T) {\n if (!route.length) return void 0;\n const arr: T[] = [];\n\n route.forEach((e) => {\n const idx = arr.findIndex((i) => i[key] == e[key]);\n\n if (idx > -1) {\n const ctree: T[] = [...(arr[idx].children || []), ...(e.children || [])] as T[];\n\n arr[idx] = Object.assign(\n e,\n arr[idx],\n arr[idx].meta && {\n meta: {\n ...arr[idx].meta,\n ...e.meta,\n },\n },\n );\n if (ctree.length) {\n arr[idx].children = merge(ctree, key);\n }\n } else {\n arr.push(\n Object.assign(\n e,\n Array.isArray(e.children) && {\n children: merge(e.children as T[], key),\n },\n ),\n );\n }\n });\n\n return prefix(arr);\n}\n\nexport default merge;\n"],"names":["createElement","isValidElement","merge","route","key","length","arr","forEach","e","idx","findIndex","i","ctree","children","Object","assign","meta","push","Array","isArray","prefix","list","map","r","_","path","element"],"mappings":"AAAA,OAASA,iBAAAA,CAAa,CAAEC,kBAAAA,CAAc,KAAQ,OAAQ,AAuDtD,gBAtCA,SAASC,EAAwBC,CAAU,CAAEC,CAAY,EACvD,GAAI,CAACD,EAAME,OAAQ,OACnB,IAAMC,EAAW,EAAE,CAiCnB,OA/BAH,EAAMI,QAAQ,AAACC,IACb,IAAMC,EAAMH,EAAII,UAAU,AAACC,GAAMA,CAAC,CAACP,EAAI,EAAII,CAAC,CAACJ,EAAI,EAEjD,GAAIK,EAAM,GAAI,CACZ,IAAMG,EAAa,IAAKN,CAAG,CAACG,EAAI,CAACI,UAAY,EAAE,IAAOL,EAAEK,UAAY,EAAE,CAAE,AAExEP,CAAAA,CAAG,CAACG,EAAI,CAAGK,OAAOC,OAChBP,EACAF,CAAG,CAACG,EAAI,CACRH,CAAG,CAACG,EAAI,CAACO,MAAQ,CACfA,KAAM,CACJ,GAAGV,CAAG,CAACG,EAAI,CAACO,IAAI,CAChB,GAAGR,EAAEQ,IAAI,AACX,CACF,GAEEJ,EAAMP,QACRC,CAAAA,CAAG,CAACG,EAAI,CAACI,SAAWX,EAAMU,EAAOR,EAAG,CAExC,MACEE,EAAIW,KACFH,OAAOC,OACLP,EACAU,MAAMC,QAAQX,EAAEK,WAAa,CAC3BA,SAAUX,EAAMM,EAAEK,SAAiBT,EACrC,GAIR,GAEOgB,AAhDT,SAASA,EAAyBC,CAAS,EACzC,OAAOA,EAAKC,IAAI,AAACC,IACf,IAAMC,EAAIV,OAAOC,OAAO,CAAEX,IAAKmB,EAAEE,IAAK,EAAGF,GAQzC,OANIC,EAAEE,SAAW,CAACzB,EAAeuB,EAAEE,UACjCF,CAAAA,EAAEE,QAAU1B,EAAcwB,EAAEE,QAASF,EAAER,KAAI,EAEzCE,MAAMC,QAAQK,EAAEX,WAClBW,CAAAA,EAAEX,SAAWO,EAAOI,EAAEX,SAAQ,EAEzBW,CACT,EACF,EAoCgBlB,EAChB,CAEqB"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/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"}
@@ -1,3 +1,6 @@
1
1
  import { type NavigateOptions, type To } from 'react-router-dom';
2
+ /** 跳转时继承部分query参数
3
+ * @default {string[]} ['menuId', 'dynamicTitle']
4
+ */
2
5
  declare const useNavigate: (reserved?: string | string[]) => (to: To | -1, options?: NavigateOptions) => void;
3
6
  export default useNavigate;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/use-navgate.ts"],"sourcesContent":["import {\n type NavigateOptions,\n type To,\n useNavigate as useNavigateReactRouter,\n useSearchParams,\n} from 'react-router-dom';\n\n/** 跳转时继承部分query参数\n * @default {string[]} ['menuId', 'dynamicTitle'] \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,AA8C1B,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 CHANGED
@@ -1,37 +1,31 @@
1
1
  {
2
2
  "name": "@moneko/react",
3
- "version": "0.0.4",
3
+ "version": "0.0.7",
4
4
  "description": "react",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
7
7
  "prebuild": "rm -rf ./lib",
8
- "build": "swc src -d lib -D && tsc",
9
- "postbuild": "node ./copy.js ./prefix ./lib"
8
+ "build": "swc src -d lib -D && tsc"
10
9
  },
11
10
  "author": "moneko",
12
11
  "type": "module",
13
12
  "license": "MIT",
14
13
  "dependencies": {
15
- "@moneko/common": "1.2.0",
16
- "@moneko/css": "1.0.5",
17
14
  "@pmmmwh/react-refresh-webpack-plugin": "0.5.11",
18
- "react-activation": "0.12.4",
15
+ "@types/react-router-dom": "^5.3.3",
19
16
  "react-refresh": "0.14.0",
20
17
  "react-refresh-typescript": "2.0.9",
21
18
  "react-router": "6.15.0",
22
19
  "react-router-dom": "6.15.0",
23
- "shared-store-object": "^1.0.8",
24
- "eslint-plugin-react-hooks": "^4.6.0",
25
- "eslint-plugin-react": "7.33.2"
20
+ "shared-store-object": "^1.0.8"
26
21
  },
27
22
  "devDependencies": {
28
23
  "@swc/cli": "0.1.62",
29
24
  "@swc/core": "1.3.62",
30
- "@types/react": "^18.2.16",
31
- "@types/react-dom": "^18.2.7",
32
- "@types/react-router-dom": "^5.3.3",
33
25
  "@types/shelljs": "^0.8.12",
34
26
  "@types/webpack-env": "1.18.1",
27
+ "@types/react": "^18.2.16",
28
+ "@types/react-dom": "^18.2.7",
35
29
  "antd": "5.7.3",
36
30
  "eslint-config-neko": "^1.1.1",
37
31
  "react": "^18.2.0",
package/lib/app.d.ts DELETED
@@ -1,7 +0,0 @@
1
- import { type FC, type ReactElement } from 'react';
2
- declare const App: FC<{
3
- basename?: string;
4
- fallback?: ReactElement;
5
- language?: string;
6
- }>;
7
- export default App;
package/lib/app.js DELETED
@@ -1,2 +0,0 @@
1
- import{jsx as r}from"react/jsx-runtime";import{useEffect as o}from"react";import{RouterProvider as a}from"react-router-dom";import{createRouter as m,routerData as e}from"./components/app-router.js";import t from"@app/fallback";import{lang as p,setLang as f}from"@app/locales";import i from"@app";export default(({basename:l=i.base,fallback:n=t&&r(t,{}),language:s})=>(o(()=>{s&&s!==p.language&&f(s)},[s,p.language]),r(a,{router:m(e,{basename:l,window:window}),fallbackElement:n})));
2
- //# sourceMappingURL=app.js.map
package/lib/app.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/app.tsx"],"sourcesContent":["import React, { type FC, type ReactElement, useEffect } from 'react';\nimport { RouterProvider } from 'react-router-dom';\nimport { 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 useEffect(() => {\n if (language && language !== lang.language) {\n setLang(language);\n }\n }, [language, lang.language]);\n return (\n <RouterProvider\n router={createRouter(routerData, {\n basename: basename,\n window: window,\n })}\n fallbackElement={fallback}\n />\n );\n};\n\nexport default App;\n"],"names":["useEffect","RouterProvider","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,gBAAAA,CAAY,CAAEC,cAAAA,CAAU,KAAQ,4BAA6B,AACtE,QAAOC,MAAc,eAAgB,AACrC,QAASC,QAAAA,CAAI,CAAEC,WAAAA,CAAO,KAAQ,cAAe,AAC7C,QAAOC,MAAS,MAAO,AAuBvB,eArBmF,CAAA,CAAC,CAClFC,SAAAA,EAAWD,EAAIE,IAAI,CACnBC,SAAAA,EAAWN,GAAY,EAACA,KAAW,CACnCO,SAAAA,CAAQ,CACT,IACCX,EAAU,KACJW,GAAYA,IAAaN,EAAKM,UAChCL,EAAQK,EAEZ,EAAG,CAACA,EAAUN,EAAKM,SAAS,EAE1B,EAACV,GACCW,OAAQV,EAAaC,EAAY,CAC/BK,SAAUA,EACVK,OAAQA,MACV,GACAC,gBAAiBJ,IAGvB,CAEmB"}
@@ -1,6 +0,0 @@
1
- import { type ReactElement } from 'react';
2
- import { createHashRouter } from 'react-router-dom';
3
- import { type RouteConfig } from '@app/routes';
4
- export declare const createRouter: typeof createHashRouter;
5
- export declare function prefixRouter(list: RouteConfig[], fallback: ReactElement | null): RouteConfig[];
6
- export declare const routerData: RouteConfig[];
@@ -1,2 +0,0 @@
1
- import{jsx as e}from"react/jsx-runtime";import{Suspense as r,cloneElement as t,createElement as o,isValidElement as a}from"react";import{createBrowserRouter as p,createHashRouter as m}from"react-router-dom";import i from"@app/fallback";import l from"@app/routes";import n from"@app";export const createRouter="hash"===n.routerMode?m:p;export function prefixRouter(p,m){return p.map(p=>{let i=Object.assign({},p);if(i.element){let l=Object.assign({path:i.key},i.props),n=a(i.element)?t(i.element,l):o(i.element,l);i.element=e(r,{fallback:p.fallback||m,children:n})}return Array.isArray(i.children)&&(i.children=prefixRouter(i.children,m)),i})}export const routerData=prefixRouter(l,i?e(i,{}):null);
2
- //# sourceMappingURL=app-router.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/components/app-router.tsx"],"sourcesContent":["import React, {\n type ReactElement,\n Suspense,\n cloneElement,\n createElement,\n isValidElement,\n} from 'react';\nimport { createBrowserRouter, createHashRouter } from 'react-router-dom';\nimport Fallback from '@app/fallback';\nimport routes, { type RouteConfig } from '@app/routes';\nimport app from '@app';\n\nexport const createRouter =\n app.routerMode === 'hash' ? createHashRouter : createBrowserRouter;\n\nexport function prefixRouter(list: RouteConfig[], fallback: ReactElement | null) {\n return list.map((r) => {\n const _ = Object.assign({}, r);\n\n if (_.element) {\n const props = Object.assign({ path: _.key }, _.props);\n const ele = isValidElement(_.element) ? cloneElement(_.element, props) : createElement(_.element, props);\n\n _.element = <Suspense fallback={r.fallback || fallback}>{ele}</Suspense>;\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":["Suspense","cloneElement","createElement","isValidElement","createBrowserRouter","createHashRouter","Fallback","routes","app","createRouter","routerMode","prefixRouter","list","fallback","map","r","_","Object","assign","element","props","path","key","ele","Array","isArray","children","routerData"],"mappings":"uCAAA,QAEEA,YAAAA,CAAQ,CACRC,gBAAAA,CAAY,CACZC,iBAAAA,CAAa,CACbC,kBAAAA,CAAc,KACT,OAAQ,AACf,QAASC,uBAAAA,CAAmB,CAAEC,oBAAAA,CAAgB,KAAQ,kBAAmB,AACzE,QAAOC,MAAc,eAAgB,AACrC,QAAOC,MAAkC,aAAc,AACvD,QAAOC,MAAS,MAAO,AAEvB,QAAO,MAAMC,aACXD,AAAmB,SAAnBA,EAAIE,WAAwBL,EAAmBD,CAAoB,AAErE,QAAO,SAASO,aAAaC,CAAmB,CAAEC,CAA6B,EAC7E,OAAOD,EAAKE,IAAI,AAACC,IACf,IAAMC,EAAIC,OAAOC,OAAO,CAAC,EAAGH,GAE5B,GAAIC,EAAEG,QAAS,CACb,IAAMC,EAAQH,OAAOC,OAAO,CAAEG,KAAML,EAAEM,GAAI,EAAGN,EAAEI,OACzCG,EAAMpB,EAAea,EAAEG,SAAWlB,EAAae,EAAEG,QAASC,GAASlB,EAAcc,EAAEG,QAASC,EAElGJ,CAAAA,EAAEG,QAAU,EAACnB,GAASa,SAAUE,EAAEF,UAAYA,WAAWU,GAC3D,CAKA,OAHIC,MAAMC,QAAQT,EAAEU,WAClBV,CAAAA,EAAEU,SAAWf,aAAaK,EAAEU,SAAUb,EAAQ,EAEzCG,CACT,EACF,CAEA,OAAO,MAAMW,WAAahB,aAAaJ,EAAQD,EAAW,EAACA,MAAc,KAAM"}
@@ -1,10 +0,0 @@
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;
@@ -1,2 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,14 +0,0 @@
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;
@@ -1,2 +0,0 @@
1
- import"react";import{createFromIconfontCN as o}from"@ant-design/icons";export default o(process.env.iconfont||{});
2
- //# sourceMappingURL=iconfont.js.map
@@ -1 +0,0 @@
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"}
@@ -1,7 +0,0 @@
1
- import React from 'react';
2
- import { type MenuProps } from 'antd';
3
- export interface LayoutMenuProps extends MenuProps {
4
- collapsed?: boolean;
5
- }
6
- declare const _default: React.NamedExoticComponent<LayoutMenuProps>;
7
- export default _default;
@@ -1,2 +0,0 @@
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
@@ -1 +0,0 @@
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/menu.d.ts DELETED
@@ -1,60 +0,0 @@
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 DELETED
@@ -1,2 +0,0 @@
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 DELETED
@@ -1 +0,0 @@
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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"}
@@ -1,5 +0,0 @@
1
- import { type FC } from 'react';
2
- import 'dayjs/locale/en.js';
3
- import 'dayjs/locale/zh.js';
4
- declare const App: FC;
5
- export default App;
@@ -1,2 +0,0 @@
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{createRouter as p,prefixRouter as s,routerData as f}from"../../components/app-router";import n from"@app/fallback";import{t as c,lang as d}from"@app/locales";import{global as h}from"@/store";import j from"@app";let u=[],x={zh_CN:a,en_US:t};l.extend(m),o.config({prefixCls:j.prefixCls,iconPrefixCls:j.iconPrefixCls,theme:j.theme});export default(()=>{let{isLogin:t}=h,{language:l}=d,m=r(()=>({validateMessages:{required:`${c["ph:please-fill"]}\${label}!`,types:{email:`\${label}${c["wrong-format"]}`},pattern:{mismatch:`${c["ph:fill-correct"]}\${label}!`}},locale:x[l]||a}),[l,c]);return e(o,{...m,children:e(i,{router:p(t?f:s(u,n&&e(n,{})),{basename:j.base,window:window}),fallbackElement:n&&e(n,{})})})});
2
- //# sourceMappingURL=app.js.map
@@ -1 +0,0 @@
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 { createRouter, prefixRouter, routerData } 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 <ConfigProvider {...antdProviderConfig}>\n <RouterProvider\n router={createRouter(\n isLogin ? routerData : prefixRouter(onlyLoginRouter, Fallback && <Fallback />),\n {\n basename: app.base,\n window: window,\n },\n )}\n fallbackElement={Fallback && <Fallback />}\n />\n </ConfigProvider>\n );\n};\n\nexport default App;\n"],"names":["useMemo","ConfigProvider","en_US","zh_CN","dayjs","relativeTime","RouterProvider","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,QAASC,gBAAAA,CAAY,CAAEC,gBAAAA,CAAY,CAAEC,cAAAA,CAAU,KAAQ,6BAA8B,AACrF,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,CACxDb,MAAAA,EACAD,MAAAA,CACF,EAEAE,EAAMa,OAAOZ,GACbJ,EAAeiB,OAAO,CACpBC,UAAWL,EAAIK,UACfC,cAAeN,EAAIM,cACnBC,MAAOP,EAAIO,KACb,EAoCA,eAlCgB,CAAA,KACd,GAAM,CAAEC,QAAAA,CAAO,CAAE,CAAGT,EACd,CAAEU,SAAAA,CAAQ,CAAE,CAAGX,EACfY,EAAqBxB,EAAQ,IAC1B,CAAA,CACLyB,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,EAAIpB,CACxC,CAAA,EACC,CAACoB,EAAUZ,EAAE,EAEhB,OACE,EAACV,GAAgB,GAAGuB,CAAkB,UACpC,EAAClB,GACC0B,OAAQzB,EACNe,EAAUb,EAAaD,EAAaO,EAAiBL,GAAY,EAACA,OAClE,CACEuB,SAAUnB,EAAIoB,KACdC,OAAQA,MACV,GAEFC,gBAAiB1B,GAAY,EAACA,SAItC,CAAA,CAEmB"}
@@ -1,5 +0,0 @@
1
- import { type FC, type ReactNode } from 'react';
2
- declare const DashboardLayout: FC<{
3
- children?: ReactNode;
4
- }>;
5
- export default DashboardLayout;
@@ -1,105 +0,0 @@
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
@@ -1 +0,0 @@
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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"}
@@ -1,18 +0,0 @@
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;
@@ -1,2 +0,0 @@
1
- export default{menuActiveKey:"menu.activeKey",menuExpandKey:"menu.expandKey",menuMenus:"menu.menus",menuKv:"menu.kv",menuTabs:"menu.tabs",language:"localizable.language"};
2
- //# sourceMappingURL=persistentKey.js.map
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
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"}
@@ -1,4 +0,0 @@
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';
@@ -1,2 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
1
- export * from 'react-router-dom';
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
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"}
@@ -1,7 +0,0 @@
1
- import React, { ComponentType } from 'react';
2
- declare function SuspenseComp(props: {
3
- comp: () => Promise<{
4
- default: ComponentType;
5
- }>;
6
- }): React.JSX.Element;
7
- export default SuspenseComp;
@@ -1,2 +0,0 @@
1
- import{jsx as r}from"react/jsx-runtime";import o,{Suspense as p}from"react";import t from"@app";import m from"@app/fallback";import a from"@app/mdx-scope";export default function(e){let c=o.lazy(e.comp),f="library"===t.type?{components:a}:{};return r(p,{fallback:m&&r(m,{}),children:r(c,{...f})})};
2
- //# sourceMappingURL=suspense-comp.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/suspense-comp.tsx"],"sourcesContent":["import React, { ComponentType, LazyExoticComponent, Suspense } from 'react';\nimport app from '@app';\nimport Fallback from '@app/fallback';\nimport scope from '@app/mdx-scope';\n\nfunction SuspenseComp(props: { comp: () => Promise<{ default: ComponentType }> }) {\n const Lazy: LazyExoticComponent<ComponentType<object>> = React.lazy(props.comp);\n const prop = app.type === 'library' ? { components: scope } : {};\n\n return (\n <Suspense fallback={Fallback && <Fallback />}>\n <Lazy {...prop} />\n </Suspense>\n );\n}\n\nexport default SuspenseComp;\n"],"names":["React","Suspense","app","Fallback","scope","props","Lazy","lazy","comp","prop","type","components","fallback"],"mappings":"uCAAA,QAAOA,GAA6CC,YAAAA,CAAQ,KAAQ,OAAQ,AAC5E,QAAOC,MAAS,MAAO,AACvB,QAAOC,MAAc,eAAgB,AACrC,QAAOC,MAAW,gBAAiB,AAanC,gBAXA,SAAsBC,CAA0D,EAC9E,IAAMC,EAAmDN,EAAMO,KAAKF,EAAMG,MACpEC,EAAOP,AAAa,YAAbA,EAAIQ,KAAqB,CAAEC,WAAYP,CAAM,EAAI,CAAC,EAE/D,OACE,EAACH,GAASW,SAAUT,GAAY,EAACA,eAC/B,EAACG,GAAM,GAAGG,CAAI,IAGpB,CAE4B"}
File without changes