@topthink/common 1.3.32 → 1.3.34

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/lib/index.js CHANGED
@@ -1,4 +1,12 @@
1
- import{jsx as c,jsxs as e,Fragment as t}from"react/jsx-runtime";import r,{SubMenu as n,MenuItem as i}from"rc-menu";import{UNSAFE_RouteContext as o,useRoutes as s,useLocation as l,Outlet as a,Link as d,useNavigate as h,useParams as g,Navigate as u,createBrowserRouter as m,RouterProvider as p}from"react-router-dom";export{Link,Navigate,Outlet,useLoaderData,useLocation,useMatches,useNavigate,useOutlet,useParams,useRevalidator,useRouteLoaderData,useRoutes}from"react-router-dom";import*as f from"react";import v,{useContext as x,useMemo as b,memo as w,useState as y,useEffect as _,useCallback as k,createContext as z}from"react";import{styled as N,css as L,Space as A,useAsync as E,isRequestError as I,Loader as $,Button as M,useRequest as R,isRecord as C,Card as S,Result as O,request as j,ToastProvider as q,Modal as U}from"@topthink/components";export*from"@topthink/components";import{Nav as B,Dropdown as P,Container as V,Row as D,Col as H}from"react-bootstrap";import T from"classnames";import{intersection as F}from"lodash";import K from"query-string";import*as W from"path";var G;function J(){return J=Object.assign?Object.assign.bind():function(c){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(c[r]=t[r])}return c},J.apply(this,arguments)}const Q=c=>f.createElement("svg",J({xmlns:"http://www.w3.org/2000/svg",width:16,height:16},c),G||(G=f.createElement("g",{fill:"#888"},f.createElement("path",{d:"m8 3 1.793 1.793L6 8.586 7.414 10l3.793-3.793L13 8V3z"}),f.createElement("path",{d:"M11 11H5V5h2V3H3v10h10V9h-2z"})))),X=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/";const r=[];for(const n of e){let{meta:e={},path:i="",children:o=[]}=n;if(e.hideInMenu)continue;const s=e.title;if(!s)continue;let l=!1;e.href?(l=!0,i=e.href):i=`${t}/${i}`.replace(/\/{2,}/g,"/").replace(/\/$/,"");const a={title:s,icon:"string"==typeof e.icon?c("i",{className:`bi bi-${e.icon}`}):e.icon,path:i,isExternal:l,children:[]};!e.hideChildrenInMenu&&!l&&o.length>0&&(a.children=X(o,i)),r.push(a)}return r};function Y(c){const{matches:e}=x(o),t=e[e.length-1],r=t.pathnameBase||"/",n=c||t.route.children||[],i=b((()=>function(c){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/";return X(c,e)}(n,r)),[n,r]);return[i,b((()=>e.reduceRight(((c,e)=>c||e.route.handle?.title),void 0)),[e])]}function Z(c,e){return c.map((c=>(c.children&&(c.children=Z(c.children,c.meta?.hideChildrenInMenu)),c.handle={title:c.meta?.title,hideInMenu:c.meta?.hideInMenu||e&&!c.index,...c.handle},c)))}const cc=t=>t.map((t=>{const r=e(gc,{children:[t.icon,t.title,t.isExternal&&c(Q,{})]});return t.children.length>0?c(n,{title:r,children:cc(t.children)},t.path):c(i,{children:t.isExternal?c("a",{href:t.path,target:"_blank",children:r}):c(d,{to:t.path,children:r})},t.path)})),ec=()=>({height:0}),tc=c=>({height:c.scrollHeight}),rc={motionName:"rc-menu-collapse",motionAppear:!0,onAppearStart:ec,onAppearActive:tc,onEnterStart:ec,onEnterActive:tc,onLeaveStart:tc,onLeaveActive:ec};function nc(t){let{className:r,title:n,header:i,headerAs:o,footer:s,footerAs:d,top:h=54,routes:g}=t;const[u,m]=Y(g),{pathname:p}=l(),f=b((()=>{const c=[];return p.split("/").reduce(((e,t)=>(e.length>1&&c.push(e.join("/")),[...e,t])),[]),c.push(p),c}),[p]),[v,x]=y([]);_((()=>{x(f.slice(0,-1))}),[f]);const w=k((c=>{const e=c[c.length-1];x(c.filter((c=>e.startsWith(c))))}),[v,x]);i||(i=c(sc,{children:n||m}));const z=d||ac;return e(mc,{$top:h,children:[e(oc,{className:r,children:[c(o||lc,{children:i}),c(uc,{mode:"inline",motion:rc,openKeys:v,onOpenChange:w,selectedKeys:f,children:cc(u)}),c(z,{children:s})]}),c(dc,{children:c(hc,{children:g?c(ic,{routes:g}):c(a,{})})})]})}const ic=w((function(c){let{routes:e}=c;return s(b((()=>Z(e)),[e]))})),oc=N.nav`
1
+ import{jsx as e,jsxs as c,Fragment as t}from"react/jsx-runtime";import i,{SubMenu as r,MenuItem as n}from"rc-menu";import{UNSAFE_RouteContext as o,useRoutes as s,useLocation as l,Outlet as a,Link as d,useNavigate as h,useParams as g,Navigate as u,createBrowserRouter as m,RouterProvider as p}from"react-router-dom";export{Link,Navigate,Outlet,useLoaderData,useLocation,useMatches,useNavigate,useOutlet,useParams,useRevalidator,useRouteLoaderData,useRoutes}from"react-router-dom";import*as f from"react";import v,{useContext as x,useMemo as w,createContext as b,memo as y,useState as _,useEffect as k,useCallback as z}from"react";import{styled as N,useWindowSize as L,Offcanvas as A,css as I,useAsync as M,isRequestError as E,Loader as R,Button as $,useRequest as S,isRecord as C,Card as j,Result as q,request as O,ToastProvider as U,Modal as P}from"@topthink/components";export*from"@topthink/components";import{Nav as T,Dropdown as B,Container as H,Row as V,Col as D}from"react-bootstrap";import W from"classnames";import{intersection as F}from"lodash";import K from"query-string";import*as G from"path";var J;function Q(){return Q=Object.assign?Object.assign.bind():function(e){for(var c=1;c<arguments.length;c++){var t=arguments[c];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])}return e},Q.apply(this,arguments)}const X=e=>f.createElement("svg",Q({xmlns:"http://www.w3.org/2000/svg",width:16,height:16},e),J||(J=f.createElement("g",{fill:"#888"},f.createElement("path",{d:"m8 3 1.793 1.793L6 8.586 7.414 10l3.793-3.793L13 8V3z"}),f.createElement("path",{d:"M11 11H5V5h2V3H3v10h10V9h-2z"})))),Y=function(c){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/";const i=[];for(const r of c){let{meta:c={},path:n="",children:o=[]}=r;if(c.hideInMenu)continue;const s=c.title;if(!s)continue;let l=!1;c.href?(l=!0,n=c.href):n=`${t}/${n}`.replace(/\/{2,}/g,"/").replace(/\/$/,"");const a={title:s,icon:"string"==typeof c.icon?e("i",{className:`bi bi-${c.icon}`}):c.icon,path:n,isExternal:l,children:[]};!c.hideChildrenInMenu&&!l&&o.length>0&&(a.children=Y(o,n)),i.push(a)}return i};function Z(e){const{matches:c}=x(o),t=c[c.length-1],i=t.pathnameBase||"/",r=e||t.route.children||[],n=w((()=>function(e){let c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/";return Y(e,c)}(r,i)),[r,i]);return[n,w((()=>c.reduceRight(((e,c)=>e||c.route.handle?.title),void 0)),[c])]}function ee(e,c){return e.map((e=>(e.children&&(e.children=ee(e.children,e.meta?.hideChildrenInMenu)),e.handle={title:e.meta?.title,hideInMenu:e.meta?.hideInMenu||c&&!e.index,...e.handle},e)))}const ce=b(void 0),te=()=>x(ce);function ie(){const c=te();return e(re,{onClick:()=>c?.setShow(!0),children:e("i",{className:"bi bi-list"})})}const re=N.div`
2
+ width: 40px;
3
+ height: 40px;
4
+ display: flex;
5
+ font-size: 2rem;
6
+ align-items: center;
7
+ justify-content: center;
8
+ cursor: pointer;
9
+ `,ne=t=>t.map((t=>{const i=c(ve,{children:[t.icon,t.title,t.isExternal&&e(X,{})]});return t.children.length>0?e(r,{title:i,children:ne(t.children)},t.path):e(n,{children:t.isExternal?e("a",{href:t.path,target:"_blank",children:i}):e(d,{to:t.path,children:i})},t.path)})),oe=()=>({height:0}),se=e=>({height:e.scrollHeight}),le={motionName:"rc-menu-collapse",motionAppear:!0,onAppearStart:oe,onAppearActive:se,onEnterStart:oe,onEnterActive:se,onLeaveStart:se,onLeaveActive:oe};function ae(t){let{className:i,title:r,header:n,headerAs:o,footer:s,footerAs:d,top:h=54,routes:g}=t;const{isMobile:u}=L(),[m,p]=Z(g),[f,v]=_(!1),{pathname:x,key:b}=l(),y=w((()=>{const e=[];return x.split("/").reduce(((c,t)=>(c.length>1&&e.push(c.join("/")),[...c,t])),[]),e.push(x),e}),[x]),[N,I]=_([]);k((()=>{v(!1)}),[b]),k((()=>{I(y.slice(0,-1))}),[y]);const M=z((e=>{const c=e[e.length-1];I(e.filter((e=>c.startsWith(e))))}),[N,I]);n||(n=e(ge,{children:r||p}));const E=d||me,R=c(he,{className:i,children:[e(o||ue,{children:n}),e(xe,{mode:"inline",motion:le,openKeys:N,onOpenChange:M,selectedKeys:y,children:ne(m)}),e(E,{children:s})]}),$=u?e(ie,{}):null;return e(ce.Provider,{value:{show:f,setShow:v,toggle:$,headless:0==h},children:c(we,{$top:h,children:[u?e(A,{show:f,onHide:()=>{v(!1)},placement:"start",style:{width:"230px"},children:R}):R,e(pe,{children:e(fe,{children:g?e(de,{routes:g}):e(a,{})})})]})})}const de=y((function(e){let{routes:c}=e;return s(w((()=>ee(c)),[c]))})),he=N.nav`
2
10
  position: fixed;
3
11
  top: 0;
4
12
  bottom: 0;
@@ -10,12 +18,12 @@ import{jsx as c,jsxs as e,Fragment as t}from"react/jsx-runtime";import r,{SubMen
10
18
  background-color: #f5f5f5;
11
19
  display: flex;
12
20
  flex-direction: column;
13
- `,sc=N.div`
21
+ `,ge=N.div`
14
22
  text-overflow: ellipsis;
15
23
  white-space: nowrap;
16
24
  overflow: hidden;
17
25
  font-size: 16px;
18
- `,lc=N.div`
26
+ `,ue=N.div`
19
27
  height: 64px;
20
28
  display: flex;
21
29
  align-items: center;
@@ -23,16 +31,18 @@ import{jsx as c,jsxs as e,Fragment as t}from"react/jsx-runtime";import r,{SubMen
23
31
  border-bottom: 1px solid #e3e3e3;
24
32
  flex-grow: 0;
25
33
  flex-shrink: 0;
26
- `,ac=N.div`
34
+ `,me=N.div`
27
35
  flex-grow: 0;
28
36
  flex-shrink: 0;
29
- `,dc=N.div`
30
- margin-left: 230px;
37
+ `,pe=N.div`
31
38
  flex: 1;
32
- `,hc=N.main`
39
+ @media (min-width: 992px) {
40
+ margin-left: 230px;
41
+ }
42
+ `,fe=N.main`
33
43
  min-height: calc(100vh - var(--bs-header-height));
34
44
  position: relative;
35
- `,gc=N.div`
45
+ `,ve=N.div`
36
46
  display: inline-flex;
37
47
  align-items: center;
38
48
  gap: 0.5rem;
@@ -43,7 +53,7 @@ import{jsx as c,jsxs as e,Fragment as t}from"react/jsx-runtime";import r,{SubMen
43
53
  min-width: 19px;
44
54
  text-align: center;
45
55
  }
46
- `,uc=N(r)`
56
+ `,xe=N(i)`
47
57
  border: none;
48
58
  box-shadow: none;
49
59
  padding: 10px 0;
@@ -182,32 +192,47 @@ import{jsx as c,jsxs as e,Fragment as t}from"react/jsx-runtime";import r,{SubMen
182
192
  }
183
193
  }
184
194
 
185
- `,mc=N.div`
186
- --bs-header-height: ${c=>c.$top}px;
195
+ `,we=N.div`
196
+ --bs-header-height: ${e=>e.$top}px;
187
197
  display: flex;
188
198
  flex-wrap: nowrap;
189
199
  width: 100%;
190
200
 
191
201
  &:has(&) {
192
- > ${oc} {
202
+ > ${he} {
193
203
  display: none;
194
204
  }
195
205
 
196
- > ${dc} {
206
+ > ${pe} {
197
207
  margin-left: 0;
198
208
  }
199
209
  }
200
- `;function pc(t){let{title:r,header:n,nav:i,children:s,extra:a,showBack:d,fixed:g}=t;const{matches:u}=x(o),m=b((()=>u.reduceRight(((c,e)=>c||e.route.index?c:e.route),void 0)),[u]),p=!0===m?.handle?.hideInMenu,f=m?.handle?.title,v=h(),w=l();return void 0===d&&(d=p),void 0===n&&(n=e(A,{children:[d&&("default"!==w.key||"string"==typeof d)&&c(fc,{onClick:()=>v("string"==typeof d?d:-1),children:c("i",{className:"bi bi-arrow-left-short"})}),c(wc,{children:r||f})]})),e(vc,{children:[c(xc,{$fixed:g,children:e("div",{className:"container",children:[n,i,c(yc,{children:a})]})}),c(bc,{className:"container",children:s})]})}const fc=N.div`
210
+ `;function be(t){let{title:i,header:r,nav:n,children:s,extra:a,showBack:d,fixed:g=!0}=t;const{matches:u}=x(o),m=w((()=>u.reduceRight(((e,c)=>e||c.route.index?e:c.route),void 0)),[u]),p=te(),f=!0===m?.handle?.hideInMenu,v=m?.handle?.title,b=h(),y=l();return void 0===d&&(d=f),void 0===r&&(r=e(Ne,{className:"fs-4 text-truncate",children:i||v})),c(_e,{children:[e(ke,{$fixed:g,children:c("div",{className:"container",children:[p?.headless&&p.toggle,d&&("default"!==y.key||"string"==typeof d)&&e(ye,{onClick:()=>b("string"==typeof d?d:-1),children:e("i",{className:"bi bi-arrow-left-short"})}),r,n,e(Le,{children:a})]})}),e(ze,{className:"container",children:s})]})}const ye=N.div`
201
211
  font-size: 32px;
202
212
  cursor: pointer;
203
- `,vc=N.div`
213
+ `,_e=N.div`
204
214
  width: 100%;
205
- `,xc=N.div`
215
+ container-type: inline-size;
216
+
217
+ .container {
218
+ @media (min-width: 992px) and (max-width: 1540px) {
219
+ max-width: calc(100vw - 236px - 6px);
220
+ }
221
+ @media (max-width: 991px) {
222
+ max-width: calc(100vw - 6px);
223
+ }
224
+ @container (max-width: 1310px) {
225
+ max-width: 100cqw;
226
+ }
227
+ }
228
+ `,ke=N.div`
206
229
  background-color: #fff;
207
230
  display: flex;
208
231
  border-bottom: 1px solid rgb(227, 227, 227);
209
-
210
- ${c=>c.$fixed&&L`
232
+ align-items: center;
233
+ height: 65px;
234
+
235
+ ${e=>e.$fixed&&I`
211
236
  position: sticky;
212
237
  top: 0;
213
238
  z-index: 1000;
@@ -217,47 +242,51 @@ import{jsx as c,jsxs as e,Fragment as t}from"react/jsx-runtime";import r,{SubMen
217
242
  padding: 0 12px;
218
243
  display: flex;
219
244
  align-items: center;
220
-
221
- .nav {
222
- margin-left: 1.5rem;
223
-
224
- .nav-link {
225
- position: relative;
226
-
227
- &.active {
228
- &:after {
229
- content: '';
230
- height: 2px;
231
- background: var(--bs-primary);
232
- display: block;
233
- position: absolute;
234
- left: 1rem;
235
- right: 1rem;
236
- bottom: -2px;
237
- }
238
- }
239
- }
240
- }
245
+ gap: .5rem;
241
246
  }
242
- `,bc=N.div`
247
+ `,ze=N.div`
243
248
  margin-top: 24px;
244
- `,wc=N.div`
245
- font-size: 22px;
246
- line-height: 64px;
247
- height: 64px;
248
- `,yc=N.div`
249
+
250
+ @media (max-width: 1540px) {
251
+ margin-top: 1rem;
252
+ }
253
+ `,Ne=N.div`
254
+ overflow: hidden;
255
+ text-overflow: ellipsis;
256
+ white-space: nowrap;
257
+ min-width: 50px;
258
+ flex-shrink: 0;
259
+ `,Le=N.div`
249
260
  margin-left: auto;
250
- `;function _c(t){let{title:r,header:n,showBack:i,extra:o}=t;const[s,d]=Y(),{pathname:h}=l(),g=c(B,{children:s.map((t=>c(B.Item,{children:e(kc,{className:T("nav-link",{active:h.startsWith(t.path)}),to:t.path,replace:!0,children:[t.icon,t.title]})},t.path)))});return c(pc,{title:r||d,header:n,nav:g,showBack:i,extra:o,children:c(a,{})})}const kc=N(d)`
251
- display: flex;
252
- align-items: center;
253
- gap: 0.5rem;
254
-
255
- .bi, svg {
256
- text-align: center;
257
- }
258
- `;const zc=v.createContext(null),Nc=function(e){let{userResolver:t}=e;const[r,n]=y(null),i=h(),{execute:o}=E((async()=>{if(t)return t()}),[],{async onError(c){if(I(c)&&401===c.response?.status){const c=window.location.pathname+window.location.search;i("/login",{state:{from:c}})}},onSuccess(c){c&&n(c)}});if(!r)return c($,{});const s=[r,n,o];return s.user=r,s.setUser=n,s.refresh=o,c(zc.Provider,{value:s,children:c(a,{})})};function Lc(){const c=x(zc);if(!c)throw new Error("please use `useUser` in UserContext");return c}const Ac=N.a`
261
+ `;function Ae(t){let{title:i,header:r,showBack:n,extra:o}=t;const[s,h]=Z(),{pathname:g}=l(),{isMobile:u}=L(),m=u?c(B,{className:"ms-2 d-flex align-items-center",children:[e(B.Toggle,{variant:"light",size:"sm"}),e(B.Menu,{children:s.map((e=>c(B.Item,{active:g.startsWith(e.path),as:d,to:e.path,replace:!0,children:[e.icon,e.title]},e.path)))})]}):e(Ie,{children:s.map((t=>e(T.Item,{children:c(Me,{className:W("nav-link",{active:g.startsWith(t.path)}),to:t.path,replace:!0,children:[t.icon,t.title]})},t.path)))});return e(be,{title:i||h,header:r,nav:m,showBack:n,extra:o,children:e(a,{})})}const Ie=N(T)`
262
+ flex-wrap: nowrap;
263
+ margin-left: 1.25rem;
264
+ `,Me=N(d)`
265
+ display: flex;
266
+ align-items: center;
267
+ gap: 0.5rem;
268
+ white-space: nowrap;
269
+ position: relative;
270
+
271
+ .bi, svg {
272
+ text-align: center;
273
+ }
274
+
275
+ &.active {
276
+ &:after {
277
+ content: '';
278
+ height: 2px;
279
+ background: var(--bs-primary);
280
+ display: block;
281
+ position: absolute;
282
+ left: 1rem;
283
+ right: 1rem;
284
+ bottom: -2px;
285
+ }
286
+ }
287
+ `;const Ee=v.createContext(null),Re=function(c){let{userResolver:t,onResolved:i}=c;const[r,n]=_(null),o=h(),{execute:s}=M((async()=>{if(t){const e=await t();return i(e),e}}),[],{async onError(e){if(E(e)&&401===e.response?.status){const e=window.location.pathname+window.location.search;o("/login",{state:{from:e}})}},onSuccess(e){e&&n(e)}});if(!r)return e(R,{});const l=[r,n,s];return l.user=r,l.setUser=n,l.refresh=s,e(Ee.Provider,{value:l,children:e(a,{})})};function $e(){const e=x(Ee);if(!e)throw new Error("please use `useUser` in UserContext");return e}const Se=N.a`
259
288
  cursor: pointer;
260
- `;function Ec(t){let{children:r,menus:n,className:i,logo:o=!0}=t;const[s]=Lc();return c(Ic,{className:T("navbar navbar-expand-lg navbar-light bg-white border-bottom sticky-top",i),children:e("div",{className:"container-fluid",children:[o&&c("a",{className:"navbar-brand",href:"https://www.topthink.com",children:c("img",{src:"data:image/svg+xml,%3csvg width='485' height='132' xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='enable-background:new 0 0 531.69 198.43%3b' version='1.1'%3e %3cstyle type='text/css'%3e.st0%7bfill:%233C60FF%3b%7d%3c/style%3e %3cg%3e %3ctitle%3ebackground%3c/title%3e %3crect fill='none' id='canvas_background' height='134' width='487' y='-1' x='-1'/%3e %3c/g%3e %3cg%3e %3ctitle%3eLayer 1%3c/title%3e %3cpath id='svg_1' d='m132.29%2c62.34c-1.19%2c-18.77 -10.34%2c-35.36 -24.11%2c-46.46c-11.15%2c-8.99 -25.34%2c-14.38 -40.79%2c-14.38c-0.55%2c0 -1.09%2c0.01 -1.63%2c0.02c-3.32%2c0.08 -6.57%2c0.41 -9.75%2c0.98c-30.49%2c5.38 -53.65%2c32 -53.65%2c64.04c0%2c1.87 0.08%2c3.73 0.24%2c5.57c2.5%2c29.51 24.7%2c53.4 53.41%2c58.47c2.38%2c0.42 4.8%2c0.72 7.26%2c0.86c0.83%2c0.05 1.66%2c0.09 2.5%2c0.11c0.54%2c0.01 1.08%2c0.02 1.63%2c0.02c34.04%2c0 61.97%2c-26.16 64.79%2c-59.46c0.16%2c-1.83 0.24%2c-3.69 0.24%2c-5.57c0%2c-1.42 -0.05%2c-2.82 -0.14%2c-4.2zm-76.27%2c32.5c-0.26%2c0.01 -0.53%2c0.01 -0.79%2c0.01c-14.56%2c0 -26.88%2c-9.57 -31.03%2c-22.76c-0.97%2c-3.08 -1.49%2c-6.35 -1.49%2c-9.75c0%2c-17.95 14.56%2c-32.52 32.51%2c-32.52c0.26%2c0 0.53%2c0 0.79%2c0.01c3.41%2c0.08 6.69%2c0.68 9.75%2c1.74c6.5%2c2.22 12.06%2c6.45 15.97%2c11.94c1.98%2c2.78 3.54%2c5.9 4.57%2c9.25c0.94%2c3.03 1.44%2c6.24 1.44%2c9.58l-9.75%2c0c0%2c-2.18 -0.31%2c-4.29 -0.88%2c-6.28c-0.92%2c-3.23 -2.55%2c-6.17 -4.69%2c-8.64c-1.86%2c-2.14 -4.12%2c-3.93 -6.65%2c-5.25c-2.93%2c-1.54 -6.24%2c-2.46 -9.75%2c-2.58c-0.26%2c-0.01 -0.52%2c-0.01 -0.79%2c-0.01c-12.57%2c0 -22.76%2c10.19 -22.76%2c22.76c0%2c3.49 0.79%2c6.8 2.19%2c9.75c3.65%2c7.69 11.49%2c13.01 20.57%2c13.01c0.27%2c0 0.53%2c-0.01 0.79%2c-0.01l0%2c9.75zm55.7%2c-17.92c-3.35%2c10.5 -13.18%2c18.09 -24.78%2c18.09c-3.13%2c0 -6.13%2c-0.55 -8.91%2c-1.57c-2.18%2c-0.8 -4.24%2c-1.88 -6.11%2c-3.21c-2.38%2c-1.68 -4.47%2c-3.76 -6.16%2c-6.13c-0.28%2c-0.39 -0.55%2c-0.79 -0.81%2c-1.2c-2.03%2c-3.2 -3.38%2c-6.87 -3.85%2c-10.82l9.87%2c0c0.33%2c1.71 0.92%2c3.32 1.74%2c4.8c1.61%2c2.91 4.09%2c5.26 7.09%2c6.72c0.57%2c0.28 1.15%2c0.53 1.76%2c0.73c1.68%2c0.6 3.49%2c0.92 5.37%2c0.92c7.92%2c0 14.52%2c-5.67 15.96%2c-13.17c0.2%2c-1 0.3%2c-2.04 0.3%2c-3.09c0%2c-2.37 -0.51%2c-4.63 -1.43%2c-6.67c-1.66%2c-3.71 -4.68%2c-6.68 -8.43%2c-8.28l3.54%2c-9.1c7.43%2c3.08 13.13%2c9.49 15.21%2c17.38c0.44%2c1.64 0.72%2c3.34 0.81%2c5.09c0.04%2c0.52 0.05%2c1.05 0.05%2c1.58c0%2c1.05 -0.07%2c2.07 -0.18%2c3.09c-0.18%2c1.68 -0.54%2c3.3 -1.04%2c4.84z' class='st0'/%3e %3cg id='svg_2'%3e %3cg id='svg_3'%3e %3crect id='svg_4' height='6.34' width='94.12' class='st0' y='20.46' x='163.29'/%3e %3c/g%3e %3cg id='svg_5'%3e %3cpath id='svg_6' d='m169.31%2c113.72l0%2c-6.34c6.49%2c0 11.77%2c-5.28 11.77%2c-11.77l0%2c-71.98l6.34%2c0l0%2c71.98c0%2c9.98 -8.12%2c18.11 -18.11%2c18.11z' class='st0'/%3e %3c/g%3e %3cg id='svg_7'%3e %3cpath id='svg_8' d='m255.49%2c91.27l-6.34%2c0l0%2c-38.2c0%2c-5.06 -4.12%2c-9.18 -9.18%2c-9.18l-19.37%2c0c-5.06%2c0 -9.18%2c4.12 -9.18%2c9.18l0%2c38.2l-6.34%2c0l0%2c-38.2c0%2c-8.55 6.96%2c-15.51 15.51%2c-15.51l19.38%2c0c8.55%2c0 15.51%2c6.96 15.51%2c15.51l0%2c38.2l0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_9'%3e %3crect id='svg_10' height='17.09' width='6.34' class='st0' y='23.63' x='227.12'/%3e %3c/g%3e %3cg id='svg_11'%3e %3cpath id='svg_12' d='m206.43%2c113.84l-3.34%2c0l0%2c-6.34l3.34%2c0c6.3%2c0 12.9%2c-3.56 15.35%2c-8.29c3.49%2c-6.71 5.33%2c-14.25 5.33%2c-21.81l0%2c-26.13l6.34%2c0l0%2c26.13c0%2c8.58 -2.09%2c17.13 -6.05%2c24.74c-3.98%2c7.68 -13.57%2c11.7 -20.97%2c11.7z' class='st0'/%3e %3c/g%3e %3cg id='svg_13'%3e %3cpath id='svg_14' d='m257.48%2c113.84l-3.34%2c0c-7.4%2c0 -16.98%2c-4.02 -20.98%2c-11.7c-3.96%2c-7.61 -6.05%2c-16.16 -6.05%2c-24.74l6.34%2c0c0%2c7.56 1.84%2c15.1 5.33%2c21.81c2.46%2c4.73 9.06%2c8.29 15.35%2c8.29l3.34%2c0l0%2c6.34l0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_15'%3e %3crect id='svg_16' height='6.34' width='42.87' class='st0' y='27.89' x='274.07'/%3e %3c/g%3e %3cg id='svg_17'%3e %3crect id='svg_18' height='61.38' width='6.34' class='st0' y='14.89' x='293.05'/%3e %3c/g%3e %3cg id='svg_19'%3e %3crect id='svg_20' height='6.34' width='33.26' class='st0' transform='matrix(0.11%2c-0.9939%2c0.9939%2c0.11%2c194.7608%2c392.0006) ' y='46.985071' x='325.728637'/%3e %3c/g%3e %3cg id='svg_21'%3e %3crect id='svg_22' height='33.26' width='6.34' class='st0' transform='matrix(0.9939%2c-0.11%2c0.11%2c0.9939%2c-7.5075%2c38.3801) ' y='37.060893' x='310.495485'/%3e %3c/g%3e %3cg id='svg_23'%3e %3cpath id='svg_24' d='m352.9%2c77.14l-15.15%2c0c-7.52%2c0 -13.64%2c-6.12 -13.64%2c-13.63l0%2c-29.61c0%2c-7.52 6.12%2c-13.64 13.64%2c-13.64l15.15%2c0c7.52%2c0 13.64%2c6.12 13.64%2c13.64l0%2c29.61c0%2c7.52 -6.12%2c13.63 -13.64%2c13.63zm-15.15%2c-50.54c-4.02%2c0 -7.3%2c3.27 -7.3%2c7.3l0%2c29.61c0%2c4.02 3.27%2c7.3 7.3%2c7.3l15.15%2c0c4.02%2c0 7.3%2c-3.27 7.3%2c-7.3l0%2c-29.61c0%2c-4.02 -3.27%2c-7.3 -7.3%2c-7.3l-15.15%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_25'%3e %3cg id='svg_26'%3e %3crect id='svg_27' height='6.34' width='17.8' class='st0' y='37.2' x='336.43'/%3e %3c/g%3e %3cg id='svg_28'%3e %3crect id='svg_29' height='6.34' width='17.8' class='st0' y='53.87' x='336.43'/%3e %3c/g%3e %3c/g%3e %3cg id='svg_30'%3e %3cpath id='svg_31' d='m352.7%2c113.84l-37.98%2c0c-8%2c0 -14.5%2c-6.51 -14.5%2c-14.5l0%2c-16.14l6.34%2c0l0%2c16.13c0%2c4.5 3.66%2c8.17 8.17%2c8.17l37.98%2c0l0%2c6.34l-0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_32'%3e %3crect id='svg_33' height='6.34' width='23.57' class='st0' transform='matrix(0.2529%2c-0.9675%2c0.9675%2c0.2529%2c114.4986%2c402.9877) ' y='83.698593' x='326.836101'/%3e %3c/g%3e %3cg id='svg_34'%3e %3crect id='svg_35' height='6.34' width='20.52' class='st0' y='86.2' x='321.58'/%3e %3c/g%3e %3cg id='svg_36'%3e %3crect id='svg_37' height='24.75' width='6.34' class='st0' transform='matrix(0.9556%2c-0.2946%2c0.2946%2c0.9556%2c-19.7967%2c122.424) ' y='75.874073' x='369.686666'/%3e %3c/g%3e %3cg id='svg_38'%3e %3crect id='svg_39' height='6.34' width='71.83' class='st0' y='20.46' x='395.51'/%3e %3c/g%3e %3cg id='svg_40'%3e %3crect id='svg_41' height='6.34' width='90.81' class='st0' y='57.44' x='386.02'/%3e %3c/g%3e %3cg id='svg_42'%3e %3cpath id='svg_43' d='m463.12%2c113.64l-56%2c0c-4.5%2c0 -8.59%2c-2.29 -10.94%2c-6.14c-2.35%2c-3.84 -2.52%2c-8.53 -0.46%2c-12.53l17.68%2c-35.81l5.64%2c2.89l-17.68%2c35.81c-1.04%2c2.02 -0.95%2c4.39 0.23%2c6.33c1.19%2c1.94 3.25%2c3.1 5.53%2c3.1l56%2c0c1.51%2c0 2.88%2c-0.71 3.74%2c-1.95c0.81%2c-1.16 1.03%2c-2.57 0.63%2c-3.91l-7.8%2c-12.34l5.36%2c-3.39l8.18%2c12.94l0.12%2c0.31c1.24%2c3.34 0.76%2c7.08 -1.28%2c10.01c-2.04%2c2.94 -5.39%2c4.68 -8.95%2c4.68z' class='st0'/%3e %3c/g%3e %3c/g%3e %3c/g%3e%3c/svg%3e",height:"30"})}),r,e(P,{navbar:!0,children:[c(P.Toggle,{as:Ac,className:"nav-link",children:c("img",{className:"rounded-circle",width:"25",height:"25",src:s.avatar})}),c(P.Menu,{className:"shadow",children:n})]})]})})}const Ic=N.header`
289
+ `;function Ce(t){let{children:i,menus:r,className:n,logo:o=!0}=t;const[s]=$e();return e(je,{className:W("navbar navbar-expand-lg navbar-light bg-white border-bottom sticky-top",n),children:c("div",{className:"container-fluid",children:[o&&e("a",{className:"navbar-brand",href:"https://www.topthink.com",children:e("img",{src:"data:image/svg+xml,%3csvg width='485' height='132' xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='enable-background:new 0 0 531.69 198.43%3b' version='1.1'%3e %3cstyle type='text/css'%3e.st0%7bfill:%233C60FF%3b%7d%3c/style%3e %3cg%3e %3ctitle%3ebackground%3c/title%3e %3crect fill='none' id='canvas_background' height='134' width='487' y='-1' x='-1'/%3e %3c/g%3e %3cg%3e %3ctitle%3eLayer 1%3c/title%3e %3cpath id='svg_1' d='m132.29%2c62.34c-1.19%2c-18.77 -10.34%2c-35.36 -24.11%2c-46.46c-11.15%2c-8.99 -25.34%2c-14.38 -40.79%2c-14.38c-0.55%2c0 -1.09%2c0.01 -1.63%2c0.02c-3.32%2c0.08 -6.57%2c0.41 -9.75%2c0.98c-30.49%2c5.38 -53.65%2c32 -53.65%2c64.04c0%2c1.87 0.08%2c3.73 0.24%2c5.57c2.5%2c29.51 24.7%2c53.4 53.41%2c58.47c2.38%2c0.42 4.8%2c0.72 7.26%2c0.86c0.83%2c0.05 1.66%2c0.09 2.5%2c0.11c0.54%2c0.01 1.08%2c0.02 1.63%2c0.02c34.04%2c0 61.97%2c-26.16 64.79%2c-59.46c0.16%2c-1.83 0.24%2c-3.69 0.24%2c-5.57c0%2c-1.42 -0.05%2c-2.82 -0.14%2c-4.2zm-76.27%2c32.5c-0.26%2c0.01 -0.53%2c0.01 -0.79%2c0.01c-14.56%2c0 -26.88%2c-9.57 -31.03%2c-22.76c-0.97%2c-3.08 -1.49%2c-6.35 -1.49%2c-9.75c0%2c-17.95 14.56%2c-32.52 32.51%2c-32.52c0.26%2c0 0.53%2c0 0.79%2c0.01c3.41%2c0.08 6.69%2c0.68 9.75%2c1.74c6.5%2c2.22 12.06%2c6.45 15.97%2c11.94c1.98%2c2.78 3.54%2c5.9 4.57%2c9.25c0.94%2c3.03 1.44%2c6.24 1.44%2c9.58l-9.75%2c0c0%2c-2.18 -0.31%2c-4.29 -0.88%2c-6.28c-0.92%2c-3.23 -2.55%2c-6.17 -4.69%2c-8.64c-1.86%2c-2.14 -4.12%2c-3.93 -6.65%2c-5.25c-2.93%2c-1.54 -6.24%2c-2.46 -9.75%2c-2.58c-0.26%2c-0.01 -0.52%2c-0.01 -0.79%2c-0.01c-12.57%2c0 -22.76%2c10.19 -22.76%2c22.76c0%2c3.49 0.79%2c6.8 2.19%2c9.75c3.65%2c7.69 11.49%2c13.01 20.57%2c13.01c0.27%2c0 0.53%2c-0.01 0.79%2c-0.01l0%2c9.75zm55.7%2c-17.92c-3.35%2c10.5 -13.18%2c18.09 -24.78%2c18.09c-3.13%2c0 -6.13%2c-0.55 -8.91%2c-1.57c-2.18%2c-0.8 -4.24%2c-1.88 -6.11%2c-3.21c-2.38%2c-1.68 -4.47%2c-3.76 -6.16%2c-6.13c-0.28%2c-0.39 -0.55%2c-0.79 -0.81%2c-1.2c-2.03%2c-3.2 -3.38%2c-6.87 -3.85%2c-10.82l9.87%2c0c0.33%2c1.71 0.92%2c3.32 1.74%2c4.8c1.61%2c2.91 4.09%2c5.26 7.09%2c6.72c0.57%2c0.28 1.15%2c0.53 1.76%2c0.73c1.68%2c0.6 3.49%2c0.92 5.37%2c0.92c7.92%2c0 14.52%2c-5.67 15.96%2c-13.17c0.2%2c-1 0.3%2c-2.04 0.3%2c-3.09c0%2c-2.37 -0.51%2c-4.63 -1.43%2c-6.67c-1.66%2c-3.71 -4.68%2c-6.68 -8.43%2c-8.28l3.54%2c-9.1c7.43%2c3.08 13.13%2c9.49 15.21%2c17.38c0.44%2c1.64 0.72%2c3.34 0.81%2c5.09c0.04%2c0.52 0.05%2c1.05 0.05%2c1.58c0%2c1.05 -0.07%2c2.07 -0.18%2c3.09c-0.18%2c1.68 -0.54%2c3.3 -1.04%2c4.84z' class='st0'/%3e %3cg id='svg_2'%3e %3cg id='svg_3'%3e %3crect id='svg_4' height='6.34' width='94.12' class='st0' y='20.46' x='163.29'/%3e %3c/g%3e %3cg id='svg_5'%3e %3cpath id='svg_6' d='m169.31%2c113.72l0%2c-6.34c6.49%2c0 11.77%2c-5.28 11.77%2c-11.77l0%2c-71.98l6.34%2c0l0%2c71.98c0%2c9.98 -8.12%2c18.11 -18.11%2c18.11z' class='st0'/%3e %3c/g%3e %3cg id='svg_7'%3e %3cpath id='svg_8' d='m255.49%2c91.27l-6.34%2c0l0%2c-38.2c0%2c-5.06 -4.12%2c-9.18 -9.18%2c-9.18l-19.37%2c0c-5.06%2c0 -9.18%2c4.12 -9.18%2c9.18l0%2c38.2l-6.34%2c0l0%2c-38.2c0%2c-8.55 6.96%2c-15.51 15.51%2c-15.51l19.38%2c0c8.55%2c0 15.51%2c6.96 15.51%2c15.51l0%2c38.2l0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_9'%3e %3crect id='svg_10' height='17.09' width='6.34' class='st0' y='23.63' x='227.12'/%3e %3c/g%3e %3cg id='svg_11'%3e %3cpath id='svg_12' d='m206.43%2c113.84l-3.34%2c0l0%2c-6.34l3.34%2c0c6.3%2c0 12.9%2c-3.56 15.35%2c-8.29c3.49%2c-6.71 5.33%2c-14.25 5.33%2c-21.81l0%2c-26.13l6.34%2c0l0%2c26.13c0%2c8.58 -2.09%2c17.13 -6.05%2c24.74c-3.98%2c7.68 -13.57%2c11.7 -20.97%2c11.7z' class='st0'/%3e %3c/g%3e %3cg id='svg_13'%3e %3cpath id='svg_14' d='m257.48%2c113.84l-3.34%2c0c-7.4%2c0 -16.98%2c-4.02 -20.98%2c-11.7c-3.96%2c-7.61 -6.05%2c-16.16 -6.05%2c-24.74l6.34%2c0c0%2c7.56 1.84%2c15.1 5.33%2c21.81c2.46%2c4.73 9.06%2c8.29 15.35%2c8.29l3.34%2c0l0%2c6.34l0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_15'%3e %3crect id='svg_16' height='6.34' width='42.87' class='st0' y='27.89' x='274.07'/%3e %3c/g%3e %3cg id='svg_17'%3e %3crect id='svg_18' height='61.38' width='6.34' class='st0' y='14.89' x='293.05'/%3e %3c/g%3e %3cg id='svg_19'%3e %3crect id='svg_20' height='6.34' width='33.26' class='st0' transform='matrix(0.11%2c-0.9939%2c0.9939%2c0.11%2c194.7608%2c392.0006) ' y='46.985071' x='325.728637'/%3e %3c/g%3e %3cg id='svg_21'%3e %3crect id='svg_22' height='33.26' width='6.34' class='st0' transform='matrix(0.9939%2c-0.11%2c0.11%2c0.9939%2c-7.5075%2c38.3801) ' y='37.060893' x='310.495485'/%3e %3c/g%3e %3cg id='svg_23'%3e %3cpath id='svg_24' d='m352.9%2c77.14l-15.15%2c0c-7.52%2c0 -13.64%2c-6.12 -13.64%2c-13.63l0%2c-29.61c0%2c-7.52 6.12%2c-13.64 13.64%2c-13.64l15.15%2c0c7.52%2c0 13.64%2c6.12 13.64%2c13.64l0%2c29.61c0%2c7.52 -6.12%2c13.63 -13.64%2c13.63zm-15.15%2c-50.54c-4.02%2c0 -7.3%2c3.27 -7.3%2c7.3l0%2c29.61c0%2c4.02 3.27%2c7.3 7.3%2c7.3l15.15%2c0c4.02%2c0 7.3%2c-3.27 7.3%2c-7.3l0%2c-29.61c0%2c-4.02 -3.27%2c-7.3 -7.3%2c-7.3l-15.15%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_25'%3e %3cg id='svg_26'%3e %3crect id='svg_27' height='6.34' width='17.8' class='st0' y='37.2' x='336.43'/%3e %3c/g%3e %3cg id='svg_28'%3e %3crect id='svg_29' height='6.34' width='17.8' class='st0' y='53.87' x='336.43'/%3e %3c/g%3e %3c/g%3e %3cg id='svg_30'%3e %3cpath id='svg_31' d='m352.7%2c113.84l-37.98%2c0c-8%2c0 -14.5%2c-6.51 -14.5%2c-14.5l0%2c-16.14l6.34%2c0l0%2c16.13c0%2c4.5 3.66%2c8.17 8.17%2c8.17l37.98%2c0l0%2c6.34l-0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_32'%3e %3crect id='svg_33' height='6.34' width='23.57' class='st0' transform='matrix(0.2529%2c-0.9675%2c0.9675%2c0.2529%2c114.4986%2c402.9877) ' y='83.698593' x='326.836101'/%3e %3c/g%3e %3cg id='svg_34'%3e %3crect id='svg_35' height='6.34' width='20.52' class='st0' y='86.2' x='321.58'/%3e %3c/g%3e %3cg id='svg_36'%3e %3crect id='svg_37' height='24.75' width='6.34' class='st0' transform='matrix(0.9556%2c-0.2946%2c0.2946%2c0.9556%2c-19.7967%2c122.424) ' y='75.874073' x='369.686666'/%3e %3c/g%3e %3cg id='svg_38'%3e %3crect id='svg_39' height='6.34' width='71.83' class='st0' y='20.46' x='395.51'/%3e %3c/g%3e %3cg id='svg_40'%3e %3crect id='svg_41' height='6.34' width='90.81' class='st0' y='57.44' x='386.02'/%3e %3c/g%3e %3cg id='svg_42'%3e %3cpath id='svg_43' d='m463.12%2c113.64l-56%2c0c-4.5%2c0 -8.59%2c-2.29 -10.94%2c-6.14c-2.35%2c-3.84 -2.52%2c-8.53 -0.46%2c-12.53l17.68%2c-35.81l5.64%2c2.89l-17.68%2c35.81c-1.04%2c2.02 -0.95%2c4.39 0.23%2c6.33c1.19%2c1.94 3.25%2c3.1 5.53%2c3.1l56%2c0c1.51%2c0 2.88%2c-0.71 3.74%2c-1.95c0.81%2c-1.16 1.03%2c-2.57 0.63%2c-3.91l-7.8%2c-12.34l5.36%2c-3.39l8.18%2c12.94l0.12%2c0.31c1.24%2c3.34 0.76%2c7.08 -1.28%2c10.01c-2.04%2c2.94 -5.39%2c4.68 -8.95%2c4.68z' class='st0'/%3e %3c/g%3e %3c/g%3e %3c/g%3e%3c/svg%3e",height:"30"})}),i,c(B,{navbar:!0,children:[e(B.Toggle,{as:Se,className:"nav-link",children:e("img",{className:"rounded-circle",width:"25",height:"25",src:s.avatar})}),e(B.Menu,{className:"shadow",children:r})]})]})})}const je=N.header`
261
290
  height: 54px;
262
- `;function $c(e){let{require:r,children:n,fallback:i}=e;const[o]=Lc();let s=!1;return"function"==typeof r?s=r(o):("string"==typeof r&&(r=[r]),s=F(o.roles,r).length>0),s||(n=i),c(t,{children:n})}function Mc(e){let{to:t,replace:r,...n}=e,i=h();return c(M,{...n,onClick:c=>{c.preventDefault(),i(t,{replace:r})}})}const Rc=z(void 0),Cc=function(e){let{request:t,children:r}=e;const{result:n}=R(t);return n?c(Rc.Provider,{value:n,children:r}):c($,{wrap:!0})};function Sc(e){let{request:t,children:r}=e;const n=g();return"string"==typeof t?t={url:t.replace(/:(\w+)/g,((c,e)=>n[e]||c))}:t.url&&(t.url=t.url.replace(/:(\w+)/g,((c,e)=>n[e]||c))),c(Cc,{request:t,children:r},t.url)}function Oc(){return x(Rc)}function jc(e){let{onLogined:t,onAuthorize:r}=e;const{result:n,error:i}=E((async()=>{let c;const e=K.parse(window.location.hash.substr(1));if(e.access_token&&(c=e.access_token),r)try{const e=await r(c);e&&(c=e)}catch(c){if(I(c)){const e=c.response?.data;if(C(e))throw new Error(e.message)}throw c}return t(c)}),[]);return i?c(V,{className:"mt-5",children:c(S,{children:c(O,{status:"error",title:i.message})})}):n?c(u,{to:n,replace:!0}):c($,{})}function qc(e){let{onLogout:t}=e;const r=h();return E((async()=>{await t(),r("/login",{state:{from:"logout"}})}),[]),c($,{})}function Uc(e){let{onLogin:t,onLogined:r,onAuthorize:n}=e;return c(V,{className:"vh-100 d-flex align-items-center",children:c(D,{className:"flex-fill",children:c(H,{md:{span:4,offset:4},children:c(S,{className:"p-5",children:t({onAuthorize:n,onLogined:r})})})})})}function Bc(t){const{basename:r="/",onAuthorize:n,onLogout:i,onLogin:o,authentication:s="token",baseURL:l,userResolver:a}=t;l&&(j.defaults.baseURL=l);const d=c=>{const{from:e}=window.history.state.usr||{};e&&"logout"!==e&&localStorage.setItem("redirect_uri",function(c,e){return"/"===e?c:c.slice(e.length)}(e,r));const t=window.location.origin+W.join(r,"/social");window.location.href=K.stringifyUrl({url:c,query:{redirect_uri:t}})},h=c=>{"token"===s&&c&&j.defaults.authTokenName&&localStorage.setItem(j.defaults.authTokenName,c);const e=localStorage.getItem("redirect_uri");return e&&localStorage.removeItem("redirect_uri"),e||"/"},g=async()=>{if(i)try{await i()}catch(c){}"token"===s&&localStorage.removeItem("authorization")};return function(t){let{routes:i}=t;const s=m([{path:"*",element:c(Nc,{userResolver:a}),children:Z(i)},{path:"social",element:c(jc,{onAuthorize:n,onLogined:h})},{path:"logout",element:c(qc,{onLogout:g})},{path:"login",element:c(Uc,{onLogin:o,onAuthorize:d,onLogined:h})}],{basename:r});return e(q,{children:[c(p,{router:s}),c(U.Message,{})]})}}export{$c as Access,pc as Content,Ec as Header,Mc as LinkButton,nc as SiderLayout,_c as TabLayout,Sc as WithRequest,Bc as createApplication,Oc as useRequestData,Lc as useUser};
291
+ `;function qe(c){let{require:i,children:r,fallback:n}=c;const[o]=$e();let s=!1;return"function"==typeof i?s=i(o):("string"==typeof i&&(i=[i]),s=F(o.roles,i).length>0),s||(r=n),e(t,{children:r})}function Oe(c){let{to:t,replace:i,...r}=c,n=h();return e($,{...r,onClick:e=>{e.preventDefault(),n(t,{replace:i})}})}const Ue=b(void 0),Pe=function(c){let{request:t,children:i}=c;const{result:r}=S(t);return r?e(Ue.Provider,{value:r,children:i}):e(R,{wrap:!0})};function Te(c){let{request:t,children:i}=c;const r=g();return"string"==typeof t?t={url:t.replace(/:(\w+)/g,((e,c)=>r[c]||e))}:t.url&&(t.url=t.url.replace(/:(\w+)/g,((e,c)=>r[c]||e))),e(Pe,{request:t,children:i},t.url)}function Be(){return x(Ue)}function He(c){let{onLogined:t,onAuthorize:i}=c;const{result:r,error:n}=M((async()=>{let e;const c=K.parse(window.location.hash.substr(1));if(c.access_token&&(e=c.access_token),i)try{const c=await i(e);c&&(e=c)}catch(e){if(E(e)){const c=e.response?.data;if(C(c))throw new Error(c.message)}throw e}return t(e)}),[]);return n?e(H,{className:"mt-5",children:e(j,{children:e(q,{status:"error",title:n.message})})}):r?e(u,{to:r,replace:!0}):e(R,{})}function Ve(c){let{onLogout:t}=c;const i=h();return M((async()=>{await t(),i("/login",{state:{from:"logout"}})}),[]),e(R,{})}function De(c){let{onLogin:t,onLogined:i,onAuthorize:r}=c;return e(H,{className:"vh-100 d-flex align-items-center",children:e(V,{className:"flex-fill",children:e(D,{md:{span:4,offset:4},children:e(j,{className:"p-5",children:t({onAuthorize:r,onLogined:i})})})})})}function We(t){const{basename:i="/",onAuthorize:r,onLogout:n,onLogin:o,authentication:s="token",baseURL:l,userResolver:a}=t;l&&(O.defaults.baseURL=l);const d=e=>{"token"===s&&O.defaults.authTokenName&&(e?localStorage.setItem(O.defaults.authTokenName,e):localStorage.removeItem(O.defaults.authTokenName))},h=e=>{e.token&&d(e.token)},g=e=>{const{from:c}=window.history.state.usr||{};c&&"logout"!==c&&localStorage.setItem("redirect_uri",function(e,c){return"/"===c?e:e.slice(c.length)}(c,i));const t=window.location.origin+G.join(i,"/social");window.location.href=K.stringifyUrl({url:e,query:{redirect_uri:t}})},u=e=>{d(e);const c=localStorage.getItem("redirect_uri");return c&&localStorage.removeItem("redirect_uri"),c||"/"},f=async()=>{if(n)try{await n()}catch(e){}d()};return function(t){let{routes:n}=t;const s=m([{path:"*",element:e(Re,{userResolver:a,onResolved:h}),children:ee(n)},{path:"social",element:e(He,{onAuthorize:r,onLogined:u})},{path:"logout",element:e(Ve,{onLogout:f})},{path:"login",element:e(De,{onLogin:o,onAuthorize:g,onLogined:u})}],{basename:i});return c(U,{children:[e(p,{router:s}),e(P.Message,{})]})}}export{qe as Access,be as Content,Ce as Header,Oe as LinkButton,ae as SiderLayout,Ae as TabLayout,Te as WithRequest,We as createApplication,Be as useRequestData,$e as useUser};
263
292
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/images/external.svg","../src/utils/get-menu-data.tsx","../src/layout/use-menu.tsx","../src/utils/transform-routes.ts","../src/layout/sider.tsx","../src/components/content.tsx","../src/layout/tab.tsx","../src/components/user-provider.tsx","../src/components/header.tsx","../src/images/logo.svg","../src/components/access.tsx","../src/components/link-button.tsx","../src/components/with-request.tsx","../src/pages/social.tsx","../src/pages/logout.tsx","../src/pages/login.tsx","../src/utils/create-application.tsx"],"sourcesContent":["var img = \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3e %3cg fill='%23888'%3e %3cpath d='M8 3l1.793 1.793L6 8.586 7.414 10l3.793-3.793L13 8V3z'/%3e %3cpath d='M11 11H5V5h2V3H3v10h10V9h-2z'/%3e %3c/g%3e%3c/svg%3e\";\n export default img;","import type { RouteObject } from 'react-router-dom';\r\nimport { ReactNode } from 'react';\r\n\r\nexport interface MenuData {\r\n path: string;\r\n title: string;\r\n icon?: ReactNode;\r\n isExternal?: boolean;\r\n children: MenuData[];\r\n}\r\n\r\nconst formatRelativePath = (\r\n routes: RouteObject[],\r\n parent: string = '/',\r\n): MenuData[] => {\r\n\r\n const menus: MenuData[] = [];\r\n\r\n for (const route of routes) {\r\n\r\n let { meta = {}, path = '', children = [] } = route;\r\n\r\n if (meta.hideInMenu) {\r\n continue;\r\n }\r\n\r\n const title = meta.title;\r\n\r\n if (!title) {\r\n continue;\r\n }\r\n\r\n let isExternal = false;\r\n\r\n if (meta.href) {\r\n isExternal = true;\r\n path = meta.href;\r\n } else {\r\n path = `${parent}/${path}`.replace(/\\/{2,}/g, '/').replace(/\\/$/, '');\r\n }\r\n\r\n const icon = typeof meta.icon === 'string' ?\r\n <i className={`bi bi-${meta.icon}`} /> : meta.icon;\r\n\r\n const menu: MenuData = {\r\n title,\r\n icon,\r\n path,\r\n isExternal,\r\n children: []\r\n };\r\n\r\n if (!meta.hideChildrenInMenu && !isExternal && children.length > 0) {\r\n menu.children = formatRelativePath(children, path);\r\n }\r\n\r\n menus.push(menu);\r\n }\r\n\r\n return menus;\r\n};\r\n\r\nexport default function getMenuData(routes: RouteObject[], base: string = '/'): MenuData[] {\r\n return formatRelativePath(routes, base);\r\n}\r\n","import { useContext, useMemo } from 'react';\r\nimport { RouteObject, UNSAFE_RouteContext } from 'react-router-dom';\r\nimport getMenuData, { MenuData } from '../utils/get-menu-data';\r\n\r\nexport default function useMenu(routes?: RouteObject[]): [MenuData[], string | undefined] {\r\n\r\n const { matches } = useContext(UNSAFE_RouteContext);\r\n\r\n const routeMatch = matches[matches.length - 1];\r\n const pathnameBase = routeMatch.pathnameBase || '/';\r\n\r\n const routesMatch = routes || routeMatch.route.children || [];\r\n\r\n const menu = useMemo(() => getMenuData(routesMatch, pathnameBase), [routesMatch, pathnameBase]);\r\n\r\n const title = useMemo(() => {\r\n return matches.reduceRight((title, match) => {\r\n if (title) return title;\r\n return match.route.handle?.title;\r\n }, undefined);\r\n }, [matches]);\r\n\r\n return [menu, title];\r\n}\r\n","import { RouteObject } from 'react-router-dom';\r\n\r\nexport default function transformRoutes(routes: RouteObject[], hideInMenu?: boolean) {\r\n return routes.map((route) => {\r\n if (route.children) {\r\n route.children = transformRoutes(route.children, route.meta?.hideChildrenInMenu);\r\n }\r\n\r\n route.handle = {\r\n title: route.meta?.title,\r\n hideInMenu: route.meta?.hideInMenu || (hideInMenu && !route.index),\r\n ...route.handle,\r\n };\r\n\r\n return route;\r\n });\r\n}\r\n","import RcMenu, { MenuItem, SubMenu } from 'rc-menu';\r\nimport { Link, Outlet, RouteObject, useLocation, useRoutes } from 'react-router-dom';\r\nimport { ElementType, memo, ReactNode, useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { MenuData } from '../utils/get-menu-data';\r\nimport type { CSSMotionProps } from 'rc-motion';\r\nimport { styled } from '@topthink/components';\r\nimport { ReactComponent as ExternalIcon } from '../images/external.svg';\r\nimport useMenu from './use-menu';\r\nimport transformRoutes from '../utils/transform-routes';\r\n\r\nconst renderMenuItems = (items: MenuData[]) => {\r\n return items.map((item) => {\r\n\r\n const title = <MenuTitle>\r\n {item.icon}\r\n {item.title}\r\n {item.isExternal && <ExternalIcon />}\r\n </MenuTitle>;\r\n\r\n if (item.children.length > 0) {\r\n return <SubMenu title={title} key={item.path}>\r\n {renderMenuItems(item.children)}\r\n </SubMenu>;\r\n } else {\r\n return <MenuItem key={item.path}>\r\n {item.isExternal ?\r\n <a href={item.path} target='_blank'>{title}</a> :\r\n <Link to={item.path}>{title}</Link>\r\n }\r\n </MenuItem>;\r\n }\r\n });\r\n};\r\n\r\nconst collapseNode = () => {\r\n return { height: 0 };\r\n};\r\nconst expandNode = (node: HTMLElement) => {\r\n return { height: node.scrollHeight };\r\n};\r\n\r\nconst motion: CSSMotionProps = {\r\n motionName: 'rc-menu-collapse',\r\n motionAppear: true,\r\n onAppearStart: collapseNode,\r\n onAppearActive: expandNode,\r\n onEnterStart: collapseNode,\r\n onEnterActive: expandNode,\r\n onLeaveStart: expandNode,\r\n onLeaveActive: collapseNode,\r\n};\r\n\r\ninterface Props<As extends ElementType = ElementType> {\r\n className?: string;\r\n title?: string;\r\n header?: ReactNode;\r\n headerAs?: As;\r\n footer?: ReactNode;\r\n footerAs?: As;\r\n routes?: RouteObject[];\r\n top?: number;\r\n}\r\n\r\nexport default function SiderLayout({ className, title, header, headerAs, footer, footerAs, top = 54, routes }: Props) {\r\n\r\n const [menu, defaultTitle] = useMenu(routes);\r\n\r\n const { pathname } = useLocation();\r\n\r\n const selectedKeys = useMemo(() => {\r\n const keys: string[] = [];\r\n const parts = pathname.split('/');\r\n parts.reduce<string[]>((pre, curr) => {\r\n if (pre.length > 1) {\r\n keys.push(pre.join('/'));\r\n }\r\n return [...pre, curr];\r\n }, []);\r\n keys.push(pathname);\r\n return keys;\r\n }, [pathname]);\r\n\r\n const [openKeys, setOpenKeys] = useState<string[]>([]);\r\n\r\n useEffect(() => {\r\n setOpenKeys(selectedKeys.slice(0, -1));\r\n }, [selectedKeys]);\r\n\r\n const onOpenChange = useCallback((openKeys: string[]) => {\r\n const currentKey = openKeys[openKeys.length - 1];\r\n setOpenKeys(openKeys.filter(key => currentKey.startsWith(key)));\r\n }, [openKeys, setOpenKeys]);\r\n\r\n if (!header) {\r\n header = <Title>{title || defaultTitle}</Title>;\r\n }\r\n\r\n const HeaderComp = headerAs || Header;\r\n\r\n const FooterComp = footerAs || Footer;\r\n\r\n return <Container $top={top}>\r\n <Sidebar className={className}>\r\n <HeaderComp>{header}</HeaderComp>\r\n <Menu\r\n mode='inline'\r\n motion={motion}\r\n openKeys={openKeys}\r\n onOpenChange={onOpenChange}\r\n selectedKeys={selectedKeys}\r\n >\r\n {renderMenuItems(menu)}\r\n </Menu>\r\n <FooterComp>{footer}</FooterComp>\r\n </Sidebar>\r\n <Content>\r\n <Main>\r\n {routes ? <Routes routes={routes} /> : <Outlet />}\r\n </Main>\r\n </Content>\r\n </Container>;\r\n}\r\n\r\nconst Routes = memo(function({ routes }: { routes: RouteObject[] }) {\r\n return useRoutes(useMemo(() => transformRoutes(routes), [routes]));\r\n});\r\n\r\nconst Sidebar = styled.nav`\r\n position: fixed;\r\n top: 0;\r\n bottom: 0;\r\n left: 0;\r\n z-index: 100;\r\n padding: var(--bs-header-height) 0 0;\r\n border-right: 1px solid #e3e3e3;\r\n width: 230px;\r\n background-color: #f5f5f5;\r\n display: flex;\r\n flex-direction: column;\r\n`;\r\n\r\nconst Title = styled.div`\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n font-size: 16px;\r\n`;\r\n\r\nconst Header = styled.div`\r\n height: 64px;\r\n display: flex;\r\n align-items: center;\r\n padding: 10px 8px 10px 24px;\r\n border-bottom: 1px solid #e3e3e3;\r\n flex-grow: 0;\r\n flex-shrink: 0;\r\n`;\r\n\r\nconst Footer = styled.div`\r\n flex-grow: 0;\r\n flex-shrink: 0;\r\n`;\r\nconst Content = styled.div`\r\n margin-left: 230px;\r\n flex: 1;\r\n`;\r\n\r\nconst Main = styled.main`\r\n min-height: calc(100vh - var(--bs-header-height));\r\n position: relative;\r\n`;\r\n\r\nconst MenuTitle = styled.div`\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 0.5rem;\r\n\r\n .bi {\r\n font-size: 16px;\r\n line-height: 18px;\r\n min-width: 19px;\r\n text-align: center;\r\n }\r\n`;\r\n\r\nconst Menu = styled(RcMenu)`\r\n border: none;\r\n box-shadow: none;\r\n padding: 10px 0;\r\n flex: 1;\r\n overflow: auto;\r\n\r\n .rc-menu-item {\r\n display: flex;\r\n\r\n &:hover {\r\n background-color: #f0f0f0;\r\n }\r\n\r\n a {\r\n flex: 1;\r\n text-decoration: none;\r\n color: dimgray;\r\n }\r\n }\r\n\r\n .rc-menu-sub {\r\n background-color: #eee;\r\n border-top: 1px solid #eee;\r\n border-bottom: 1px solid #eee;\r\n\r\n & > li {\r\n &:first-child {\r\n margin-top: 4px;\r\n }\r\n\r\n &:last-child {\r\n margin-bottom: 4px;\r\n }\r\n }\r\n\r\n .rc-menu-item-selected {\r\n background-color: #eee;\r\n color: var(--bs-primary);\r\n\r\n & > a {\r\n color: var(--bs-primary);\r\n }\r\n }\r\n\r\n .rc-menu-item {\r\n &:hover {\r\n background-color: #e7e7e7;\r\n }\r\n }\r\n }\r\n\r\n .rc-menu-submenu {\r\n & > .rc-menu-submenu-title {\r\n &:hover {\r\n background-color: #e7e7e7;\r\n }\r\n }\r\n }\r\n\r\n .rc-menu-item-active,\r\n .rc-menu-submenu-active > .rc-menu-submenu-title {\r\n background-color: #eee;\r\n }\r\n\r\n .rc-menu-item,\r\n .rc-menu-submenu > .rc-menu-submenu-title {\r\n padding: 0 8px 0 24px;\r\n font-size: 14px;\r\n line-height: 36px;\r\n cursor: pointer;\r\n }\r\n\r\n .rc-menu-sub > .rc-menu-item,\r\n .rc-menu-sub > .rc-menu-submenu > .rc-menu-submenu-title {\r\n padding-top: 0;\r\n padding-bottom: 0;\r\n padding-right: 0;\r\n }\r\n\r\n .rc-menu-submenu-arrow {\r\n line-height: 20px;\r\n }\r\n\r\n .rc-menu-item-selected {\r\n background-color: #f5f5f5;\r\n color: var(--bs-primary);\r\n\r\n & > a {\r\n color: var(--bs-primary);\r\n }\r\n }\r\n\r\n .rc-menu-submenu-selected {\r\n background-color: #eee;\r\n\r\n & > .rc-menu-submenu-title {\r\n color: var(--bs-primary);\r\n font-weight: 500;\r\n }\r\n }\r\n\r\n & > .rc-menu-item {\r\n line-height: 38px;\r\n }\r\n\r\n & > .rc-menu-submenu {\r\n &.rc-menu-submenu-selected {\r\n background-color: #f5f5f5;\r\n }\r\n\r\n & > .rc-menu-submenu-title {\r\n line-height: 38px;\r\n\r\n &:hover {\r\n background-color: #f0f0f0;\r\n }\r\n }\r\n\r\n &.rc-menu-submenu-active > .rc-menu-submenu-title {\r\n background-color: #f5f5f5;\r\n }\r\n\r\n & > .rc-menu-sub {\r\n border-top: 1px solid #e6e6e6;\r\n border-bottom: 1px solid #e6e6e6;\r\n\r\n & > li {\r\n &:first-child {\r\n margin-top: 9px;\r\n }\r\n\r\n &:last-child {\r\n margin-bottom: 9px;\r\n }\r\n }\r\n }\r\n }\r\n\r\n`;\r\n\r\nconst Container = styled.div<{ $top: number }>`\r\n --bs-header-height: ${(p) => p.$top}px;\r\n display: flex;\r\n flex-wrap: nowrap;\r\n width: 100%;\r\n\r\n &:has(&) {\r\n > ${Sidebar} {\r\n display: none;\r\n }\r\n\r\n > ${Content} {\r\n margin-left: 0;\r\n }\r\n }\r\n`;\r\n","import { css, Space, styled } from '@topthink/components';\r\nimport { PropsWithChildren, ReactNode, useContext, useMemo } from 'react';\r\nimport { RouteObject, UNSAFE_RouteContext, useLocation, useNavigate, } from 'react-router-dom';\r\n\r\ninterface ContentProps {\r\n title?: ReactNode;\r\n header?: ReactNode;\r\n nav?: ReactNode;\r\n extra?: ReactNode;\r\n showBack?: boolean | string;\r\n fixed?: boolean;\r\n}\r\n\r\nexport default function Content({\r\n title,\r\n header,\r\n nav,\r\n children,\r\n extra,\r\n showBack,\r\n fixed\r\n}: PropsWithChildren<ContentProps>) {\r\n const { matches } = useContext(UNSAFE_RouteContext);\r\n const route = useMemo(() => {\r\n return matches.reduceRight<RouteObject | undefined>((route, match) => {\r\n if (route || match.route.index) return route;\r\n return match.route;\r\n }, undefined);\r\n }, [matches]);\r\n\r\n const defaultShowBack = route?.handle?.hideInMenu === true;\r\n const defaultTitle = route?.handle?.title;\r\n\r\n const navigate = useNavigate();\r\n const location = useLocation();\r\n\r\n if (showBack === undefined) {\r\n showBack = defaultShowBack;\r\n }\r\n\r\n if (header === undefined) {\r\n header = <Space>\r\n {showBack && (location.key !== 'default' || typeof showBack === 'string') &&\r\n <Back onClick={() => typeof showBack === 'string' ? navigate(showBack) : navigate(-1)}><i className='bi bi-arrow-left-short' /></Back>}\r\n {<Title>{title || defaultTitle}</Title>}\r\n </Space>;\r\n }\r\n\r\n return <Container>\r\n <Header $fixed={fixed}>\r\n <div className='container'>\r\n {header}\r\n {nav}\r\n <Extra>{extra}</Extra>\r\n </div>\r\n </Header>\r\n <Body className='container'>\r\n {children}\r\n </Body>\r\n </Container>;\r\n};\r\n\r\nconst Back = styled.div`\r\n font-size: 32px;\r\n cursor: pointer;\r\n`;\r\n\r\nconst Container = styled.div`\r\n width: 100%;\r\n`;\r\n\r\nconst Header = styled.div<{ $fixed?: boolean }>`\r\n background-color: #fff;\r\n display: flex;\r\n border-bottom: 1px solid rgb(227, 227, 227);\r\n \r\n ${props => props.$fixed && css`\r\n position: sticky;\r\n top: 0;\r\n z-index: 1000;\r\n `};\r\n\r\n .container {\r\n padding: 0 12px;\r\n display: flex;\r\n align-items: center;\r\n\r\n .nav {\r\n margin-left: 1.5rem;\r\n\r\n .nav-link {\r\n position: relative;\r\n\r\n &.active {\r\n &:after {\r\n content: '';\r\n height: 2px;\r\n background: var(--bs-primary);\r\n display: block;\r\n position: absolute;\r\n left: 1rem;\r\n right: 1rem;\r\n bottom: -2px;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n\r\nconst Body = styled.div`\r\n margin-top: 24px;\r\n`;\r\n\r\nconst Title = styled.div`\r\n font-size: 22px;\r\n line-height: 64px;\r\n height: 64px;\r\n`;\r\n\r\nconst Extra = styled.div`\r\n margin-left: auto;\r\n`;\r\n","import { Nav } from 'react-bootstrap';\r\nimport Content from '../components/content';\r\nimport { Link, Outlet, useLocation } from 'react-router-dom';\r\nimport useMenu from './use-menu';\r\nimport { styled } from '@topthink/components';\r\nimport classNames from 'classnames';\r\nimport { ReactNode } from 'react';\r\n\r\ninterface Props {\r\n title?: ReactNode;\r\n header?: ReactNode;\r\n showBack?: boolean;\r\n extra?: ReactNode;\r\n}\r\n\r\nexport default function TabLayout({ title, header, showBack, extra }: Props) {\r\n\r\n const [menu, defaultTitle] = useMenu();\r\n const { pathname } = useLocation();\r\n\r\n const nav = <Nav>\r\n {menu.map((item) => {\r\n return <Nav.Item key={item.path}>\r\n <NavLink className={classNames('nav-link', { active: pathname.startsWith(item.path) })} to={item.path} replace>\r\n {item.icon}\r\n {item.title}\r\n </NavLink>\r\n </Nav.Item>;\r\n })}\r\n </Nav>;\r\n\r\n return <Content title={title || defaultTitle} header={header} nav={nav} showBack={showBack} extra={extra}>\r\n <Outlet />\r\n </Content>;\r\n}\r\n\r\nconst NavLink = styled(Link)`\r\n display: flex;\r\n align-items: center;\r\n gap: 0.5rem;\r\n\r\n .bi, svg {\r\n text-align: center;\r\n }\r\n`;\r\n","import React, { useContext, useState } from 'react';\r\nimport { User, UserResolver } from '../utils/types';\r\nimport { isRequestError, Loader, useAsync } from '@topthink/components';\r\nimport { Outlet, useNavigate } from 'react-router-dom';\r\n\r\ntype UserContextType = [User, ((user: User) => void), () => void] & {\r\n user: User,\r\n setUser: (user: User) => void,\r\n refresh: () => void\r\n};\r\n\r\nexport const UserContext = React.createContext<UserContextType | null>(null);\r\n\r\ninterface Props {\r\n userResolver: UserResolver;\r\n}\r\n\r\nconst UserProvider = function({ userResolver }: Props) {\r\n const [state, setState] = useState<User | null>(null);\r\n\r\n const navigate = useNavigate();\r\n\r\n const { execute } = useAsync(async () => {\r\n if (userResolver) {\r\n return userResolver();\r\n }\r\n }, [], {\r\n async onError(e) {\r\n if (isRequestError(e) && e.response?.status === 401) {\r\n const redirectUri = window.location.pathname + window.location.search;\r\n navigate(`/login`, { state: { from: redirectUri } });\r\n }\r\n },\r\n onSuccess(user) {\r\n if (user) {\r\n setState(user);\r\n }\r\n }\r\n });\r\n\r\n if (!state) {\r\n return <Loader />;\r\n }\r\n\r\n const value: any = [state, setState, execute];\r\n\r\n value.user = state;\r\n value.setUser = setState;\r\n value.refresh = execute;\r\n\r\n return <UserContext.Provider value={value}>\r\n <Outlet />\r\n </UserContext.Provider>;\r\n};\r\n\r\nexport function useUser() {\r\n const context = useContext(UserContext);\r\n if (!context) {\r\n throw new Error('please use `useUser` in UserContext');\r\n }\r\n\r\n return context;\r\n}\r\n\r\nexport default UserProvider;\r\n","import logoSrc from '../images/logo.svg';\r\nimport { Dropdown } from 'react-bootstrap';\r\nimport { PropsWithChildren, ReactNode } from 'react';\r\nimport { useUser } from './user-provider';\r\nimport classNames from 'classnames';\r\nimport { styled } from '@topthink/components';\r\n\r\nconst Avatar = styled.a`\r\n cursor: pointer;\r\n`;\r\n\r\ninterface Props {\r\n menus: ReactNode;\r\n className?: string;\r\n logo?: boolean;\r\n}\r\n\r\nexport default function Header({ children, menus, className, logo = true }: PropsWithChildren<Props>) {\r\n const [user] = useUser();\r\n\r\n return <Container\r\n className={classNames('navbar navbar-expand-lg navbar-light bg-white border-bottom sticky-top', className)}>\r\n <div className='container-fluid'>\r\n {logo && <a className='navbar-brand' href='https://www.topthink.com'>\r\n <img src={logoSrc} height='30' />\r\n </a>}\r\n {children}\r\n <Dropdown navbar>\r\n <Dropdown.Toggle as={Avatar} className='nav-link'>\r\n <img className='rounded-circle' width='25' height='25' src={user.avatar} />\r\n </Dropdown.Toggle>\r\n <Dropdown.Menu className={'shadow'}>\r\n {menus}\r\n </Dropdown.Menu>\r\n </Dropdown>\r\n </div>\r\n </Container>;\r\n}\r\n\r\nconst Container = styled.header`\r\n height: 54px;\r\n`;\r\n","var img = \"data:image/svg+xml,%3csvg width='485' height='132' xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='enable-background:new 0 0 531.69 198.43%3b' version='1.1'%3e %3cstyle type='text/css'%3e.st0%7bfill:%233C60FF%3b%7d%3c/style%3e %3cg%3e %3ctitle%3ebackground%3c/title%3e %3crect fill='none' id='canvas_background' height='134' width='487' y='-1' x='-1'/%3e %3c/g%3e %3cg%3e %3ctitle%3eLayer 1%3c/title%3e %3cpath id='svg_1' d='m132.29%2c62.34c-1.19%2c-18.77 -10.34%2c-35.36 -24.11%2c-46.46c-11.15%2c-8.99 -25.34%2c-14.38 -40.79%2c-14.38c-0.55%2c0 -1.09%2c0.01 -1.63%2c0.02c-3.32%2c0.08 -6.57%2c0.41 -9.75%2c0.98c-30.49%2c5.38 -53.65%2c32 -53.65%2c64.04c0%2c1.87 0.08%2c3.73 0.24%2c5.57c2.5%2c29.51 24.7%2c53.4 53.41%2c58.47c2.38%2c0.42 4.8%2c0.72 7.26%2c0.86c0.83%2c0.05 1.66%2c0.09 2.5%2c0.11c0.54%2c0.01 1.08%2c0.02 1.63%2c0.02c34.04%2c0 61.97%2c-26.16 64.79%2c-59.46c0.16%2c-1.83 0.24%2c-3.69 0.24%2c-5.57c0%2c-1.42 -0.05%2c-2.82 -0.14%2c-4.2zm-76.27%2c32.5c-0.26%2c0.01 -0.53%2c0.01 -0.79%2c0.01c-14.56%2c0 -26.88%2c-9.57 -31.03%2c-22.76c-0.97%2c-3.08 -1.49%2c-6.35 -1.49%2c-9.75c0%2c-17.95 14.56%2c-32.52 32.51%2c-32.52c0.26%2c0 0.53%2c0 0.79%2c0.01c3.41%2c0.08 6.69%2c0.68 9.75%2c1.74c6.5%2c2.22 12.06%2c6.45 15.97%2c11.94c1.98%2c2.78 3.54%2c5.9 4.57%2c9.25c0.94%2c3.03 1.44%2c6.24 1.44%2c9.58l-9.75%2c0c0%2c-2.18 -0.31%2c-4.29 -0.88%2c-6.28c-0.92%2c-3.23 -2.55%2c-6.17 -4.69%2c-8.64c-1.86%2c-2.14 -4.12%2c-3.93 -6.65%2c-5.25c-2.93%2c-1.54 -6.24%2c-2.46 -9.75%2c-2.58c-0.26%2c-0.01 -0.52%2c-0.01 -0.79%2c-0.01c-12.57%2c0 -22.76%2c10.19 -22.76%2c22.76c0%2c3.49 0.79%2c6.8 2.19%2c9.75c3.65%2c7.69 11.49%2c13.01 20.57%2c13.01c0.27%2c0 0.53%2c-0.01 0.79%2c-0.01l0%2c9.75zm55.7%2c-17.92c-3.35%2c10.5 -13.18%2c18.09 -24.78%2c18.09c-3.13%2c0 -6.13%2c-0.55 -8.91%2c-1.57c-2.18%2c-0.8 -4.24%2c-1.88 -6.11%2c-3.21c-2.38%2c-1.68 -4.47%2c-3.76 -6.16%2c-6.13c-0.28%2c-0.39 -0.55%2c-0.79 -0.81%2c-1.2c-2.03%2c-3.2 -3.38%2c-6.87 -3.85%2c-10.82l9.87%2c0c0.33%2c1.71 0.92%2c3.32 1.74%2c4.8c1.61%2c2.91 4.09%2c5.26 7.09%2c6.72c0.57%2c0.28 1.15%2c0.53 1.76%2c0.73c1.68%2c0.6 3.49%2c0.92 5.37%2c0.92c7.92%2c0 14.52%2c-5.67 15.96%2c-13.17c0.2%2c-1 0.3%2c-2.04 0.3%2c-3.09c0%2c-2.37 -0.51%2c-4.63 -1.43%2c-6.67c-1.66%2c-3.71 -4.68%2c-6.68 -8.43%2c-8.28l3.54%2c-9.1c7.43%2c3.08 13.13%2c9.49 15.21%2c17.38c0.44%2c1.64 0.72%2c3.34 0.81%2c5.09c0.04%2c0.52 0.05%2c1.05 0.05%2c1.58c0%2c1.05 -0.07%2c2.07 -0.18%2c3.09c-0.18%2c1.68 -0.54%2c3.3 -1.04%2c4.84z' class='st0'/%3e %3cg id='svg_2'%3e %3cg id='svg_3'%3e %3crect id='svg_4' height='6.34' width='94.12' class='st0' y='20.46' x='163.29'/%3e %3c/g%3e %3cg id='svg_5'%3e %3cpath id='svg_6' d='m169.31%2c113.72l0%2c-6.34c6.49%2c0 11.77%2c-5.28 11.77%2c-11.77l0%2c-71.98l6.34%2c0l0%2c71.98c0%2c9.98 -8.12%2c18.11 -18.11%2c18.11z' class='st0'/%3e %3c/g%3e %3cg id='svg_7'%3e %3cpath id='svg_8' d='m255.49%2c91.27l-6.34%2c0l0%2c-38.2c0%2c-5.06 -4.12%2c-9.18 -9.18%2c-9.18l-19.37%2c0c-5.06%2c0 -9.18%2c4.12 -9.18%2c9.18l0%2c38.2l-6.34%2c0l0%2c-38.2c0%2c-8.55 6.96%2c-15.51 15.51%2c-15.51l19.38%2c0c8.55%2c0 15.51%2c6.96 15.51%2c15.51l0%2c38.2l0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_9'%3e %3crect id='svg_10' height='17.09' width='6.34' class='st0' y='23.63' x='227.12'/%3e %3c/g%3e %3cg id='svg_11'%3e %3cpath id='svg_12' d='m206.43%2c113.84l-3.34%2c0l0%2c-6.34l3.34%2c0c6.3%2c0 12.9%2c-3.56 15.35%2c-8.29c3.49%2c-6.71 5.33%2c-14.25 5.33%2c-21.81l0%2c-26.13l6.34%2c0l0%2c26.13c0%2c8.58 -2.09%2c17.13 -6.05%2c24.74c-3.98%2c7.68 -13.57%2c11.7 -20.97%2c11.7z' class='st0'/%3e %3c/g%3e %3cg id='svg_13'%3e %3cpath id='svg_14' d='m257.48%2c113.84l-3.34%2c0c-7.4%2c0 -16.98%2c-4.02 -20.98%2c-11.7c-3.96%2c-7.61 -6.05%2c-16.16 -6.05%2c-24.74l6.34%2c0c0%2c7.56 1.84%2c15.1 5.33%2c21.81c2.46%2c4.73 9.06%2c8.29 15.35%2c8.29l3.34%2c0l0%2c6.34l0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_15'%3e %3crect id='svg_16' height='6.34' width='42.87' class='st0' y='27.89' x='274.07'/%3e %3c/g%3e %3cg id='svg_17'%3e %3crect id='svg_18' height='61.38' width='6.34' class='st0' y='14.89' x='293.05'/%3e %3c/g%3e %3cg id='svg_19'%3e %3crect id='svg_20' height='6.34' width='33.26' class='st0' transform='matrix(0.11%2c-0.9939%2c0.9939%2c0.11%2c194.7608%2c392.0006) ' y='46.985071' x='325.728637'/%3e %3c/g%3e %3cg id='svg_21'%3e %3crect id='svg_22' height='33.26' width='6.34' class='st0' transform='matrix(0.9939%2c-0.11%2c0.11%2c0.9939%2c-7.5075%2c38.3801) ' y='37.060893' x='310.495485'/%3e %3c/g%3e %3cg id='svg_23'%3e %3cpath id='svg_24' d='m352.9%2c77.14l-15.15%2c0c-7.52%2c0 -13.64%2c-6.12 -13.64%2c-13.63l0%2c-29.61c0%2c-7.52 6.12%2c-13.64 13.64%2c-13.64l15.15%2c0c7.52%2c0 13.64%2c6.12 13.64%2c13.64l0%2c29.61c0%2c7.52 -6.12%2c13.63 -13.64%2c13.63zm-15.15%2c-50.54c-4.02%2c0 -7.3%2c3.27 -7.3%2c7.3l0%2c29.61c0%2c4.02 3.27%2c7.3 7.3%2c7.3l15.15%2c0c4.02%2c0 7.3%2c-3.27 7.3%2c-7.3l0%2c-29.61c0%2c-4.02 -3.27%2c-7.3 -7.3%2c-7.3l-15.15%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_25'%3e %3cg id='svg_26'%3e %3crect id='svg_27' height='6.34' width='17.8' class='st0' y='37.2' x='336.43'/%3e %3c/g%3e %3cg id='svg_28'%3e %3crect id='svg_29' height='6.34' width='17.8' class='st0' y='53.87' x='336.43'/%3e %3c/g%3e %3c/g%3e %3cg id='svg_30'%3e %3cpath id='svg_31' d='m352.7%2c113.84l-37.98%2c0c-8%2c0 -14.5%2c-6.51 -14.5%2c-14.5l0%2c-16.14l6.34%2c0l0%2c16.13c0%2c4.5 3.66%2c8.17 8.17%2c8.17l37.98%2c0l0%2c6.34l-0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_32'%3e %3crect id='svg_33' height='6.34' width='23.57' class='st0' transform='matrix(0.2529%2c-0.9675%2c0.9675%2c0.2529%2c114.4986%2c402.9877) ' y='83.698593' x='326.836101'/%3e %3c/g%3e %3cg id='svg_34'%3e %3crect id='svg_35' height='6.34' width='20.52' class='st0' y='86.2' x='321.58'/%3e %3c/g%3e %3cg id='svg_36'%3e %3crect id='svg_37' height='24.75' width='6.34' class='st0' transform='matrix(0.9556%2c-0.2946%2c0.2946%2c0.9556%2c-19.7967%2c122.424) ' y='75.874073' x='369.686666'/%3e %3c/g%3e %3cg id='svg_38'%3e %3crect id='svg_39' height='6.34' width='71.83' class='st0' y='20.46' x='395.51'/%3e %3c/g%3e %3cg id='svg_40'%3e %3crect id='svg_41' height='6.34' width='90.81' class='st0' y='57.44' x='386.02'/%3e %3c/g%3e %3cg id='svg_42'%3e %3cpath id='svg_43' d='m463.12%2c113.64l-56%2c0c-4.5%2c0 -8.59%2c-2.29 -10.94%2c-6.14c-2.35%2c-3.84 -2.52%2c-8.53 -0.46%2c-12.53l17.68%2c-35.81l5.64%2c2.89l-17.68%2c35.81c-1.04%2c2.02 -0.95%2c4.39 0.23%2c6.33c1.19%2c1.94 3.25%2c3.1 5.53%2c3.1l56%2c0c1.51%2c0 2.88%2c-0.71 3.74%2c-1.95c0.81%2c-1.16 1.03%2c-2.57 0.63%2c-3.91l-7.8%2c-12.34l5.36%2c-3.39l8.18%2c12.94l0.12%2c0.31c1.24%2c3.34 0.76%2c7.08 -1.28%2c10.01c-2.04%2c2.94 -5.39%2c4.68 -8.95%2c4.68z' class='st0'/%3e %3c/g%3e %3c/g%3e %3c/g%3e%3c/svg%3e\";\n export default img;","import { ReactNode } from 'react';\r\nimport { intersection } from 'lodash';\r\nimport { useUser } from './user-provider';\r\nimport { User } from '../utils/types';\r\n\r\nexport interface AccessProps {\r\n require?: string | string[] | ((user: User) => boolean);\r\n fallback?: ReactNode;\r\n children: ReactNode;\r\n}\r\n\r\nexport default function Access({\r\n require,\r\n children,\r\n fallback\r\n}: AccessProps) {\r\n const [user,] = useUser();\r\n let passed = false;\r\n if (typeof require === 'function') {\r\n passed = require(user);\r\n } else {\r\n if (typeof require === 'string') {\r\n require = [require];\r\n }\r\n passed = intersection(user.roles, require).length > 0;\r\n }\r\n if (!passed) {\r\n children = fallback;\r\n }\r\n\r\n return <>{children}</>;\r\n}\r\n","import { LinkProps, useNavigate } from 'react-router-dom';\r\nimport { Button, ButtonProps } from '@topthink/components';\r\n\r\ninterface Props extends ButtonProps, Pick<LinkProps, 'to' | 'replace'> {\r\n\r\n}\r\n\r\nexport default function LinkButton({ to, replace, ...props }: Props) {\r\n let navigate = useNavigate();\r\n\r\n return <Button {...props} onClick={(e) => {\r\n e.preventDefault();\r\n navigate(to, { replace });\r\n }} />;\r\n}\r\n","import { Loader, RequestConfig, useRequest } from '@topthink/components';\r\nimport { createContext, ReactNode, useContext } from 'react';\r\nimport { useParams } from 'react-router-dom';\r\n\r\nconst Context = createContext<any>(undefined);\r\n\r\ninterface Props {\r\n request: RequestConfig;\r\n children: ReactNode;\r\n}\r\n\r\nconst Inner = function({ request, children }: Props) {\r\n const { result } = useRequest(request);\r\n\r\n if (!result) {\r\n return <Loader wrap />;\r\n }\r\n\r\n return <Context.Provider value={result}>\r\n {children}\r\n </Context.Provider>;\r\n};\r\n\r\nexport default function WithRequest({ request, children }: Props) {\r\n const params = useParams();\r\n\r\n if (typeof request === 'string') {\r\n request = {\r\n url: request.replace(/:(\\w+)/g, (all, name) => {\r\n return params[name] || all;\r\n })\r\n };\r\n } else if (request.url) {\r\n request.url = request.url.replace(/:(\\w+)/g, (all, name) => {\r\n return params[name] || all;\r\n });\r\n }\r\n\r\n return <Inner key={request.url} request={request}>{children}</Inner>;\r\n}\r\n\r\nexport function useRequestData<T = any>(): T {\r\n return useContext(Context);\r\n}\r\n","import { Card, isRecord, isRequestError, Loader, Result, useAsync } from '@topthink/components';\r\nimport { Navigate } from 'react-router-dom';\r\nimport { Container } from 'react-bootstrap';\r\nimport queryString from 'query-string';\r\nimport { Promisable } from '../utils/types';\r\n\r\ninterface LoginProps {\r\n onLogined: (token?: string) => string;\r\n onAuthorize?: (token?: string) => Promisable<void | string | undefined>;\r\n}\r\n\r\nexport default function Social({ onLogined, onAuthorize }: LoginProps) {\r\n const { result, error } = useAsync(async () => {\r\n let token: string | undefined;\r\n\r\n const parsed = queryString.parse(window.location.hash.substr(1));\r\n if (parsed.access_token) {\r\n token = parsed.access_token as string;\r\n }\r\n\r\n if (onAuthorize) {\r\n try {\r\n const newToken = await onAuthorize(token);\r\n if (newToken) {\r\n token = newToken;\r\n }\r\n } catch (e) {\r\n if (isRequestError(e)) {\r\n const data = e.response?.data;\r\n if (isRecord(data)) {\r\n throw new Error(data.message);\r\n }\r\n }\r\n throw e;\r\n }\r\n }\r\n\r\n return onLogined(token);\r\n }, []);\r\n\r\n if (error) {\r\n return <Container className={'mt-5'}>\r\n <Card>\r\n <Result status={'error'} title={error.message} />\r\n </Card>\r\n </Container>;\r\n }\r\n\r\n if (result) {\r\n return <Navigate to={result} replace />;\r\n }\r\n\r\n return <Loader />;\r\n}\r\n","import { Loader, useAsync } from '@topthink/components';\r\nimport { useNavigate } from 'react-router-dom';\r\n\r\ninterface LogoutProps {\r\n onLogout: () => void | Promise<void>;\r\n}\r\n\r\nexport default function Logout({ onLogout }: LogoutProps) {\r\n const navigate = useNavigate();\r\n\r\n useAsync(async () => {\r\n await onLogout();\r\n navigate('/login', { state: { from: 'logout' } });\r\n }, []);\r\n\r\n return <Loader />;\r\n}\r\n","import { Card } from '@topthink/components';\r\nimport { Col, Container, Row } from 'react-bootstrap';\r\nimport { ReactNode } from 'react';\r\n\r\nexport interface LoginProps {\r\n onAuthorize: (url: string) => void;\r\n onLogined: (token?: string) => string;\r\n}\r\n\r\ninterface Props extends LoginProps {\r\n onLogin: (props: LoginProps) => ReactNode;\r\n}\r\n\r\nexport default function Login({ onLogin, onLogined, onAuthorize }: Props) {\r\n return <Container className='vh-100 d-flex align-items-center'>\r\n <Row className='flex-fill'>\r\n <Col md={{ span: 4, offset: 4 }}>\r\n <Card className='p-5'>\r\n {onLogin({ onAuthorize, onLogined })}\r\n </Card>\r\n </Col>\r\n </Row>\r\n </Container>;\r\n}\r\n","import { createBrowserRouter, RouteObject, RouterProvider } from 'react-router-dom';\nimport Social from '../pages/social';\nimport Logout from '../pages/logout';\nimport queryString from 'query-string';\nimport * as path from 'path';\nimport { Modal, request, ToastProvider } from '@topthink/components';\nimport UserProvider from '../components/user-provider';\nimport transformRoutes from './transform-routes';\nimport Login, { LoginProps } from '../pages/login';\nimport { Promisable, UserResolver } from './types';\nimport { ReactNode } from 'react';\n\nfunction stripBasename(pathname: string, basename: string) {\n if (basename === '/') return pathname;\n\n return pathname.slice(basename.length);\n}\n\ninterface AppProps {\n routes: RouteObject[];\n}\n\ninterface Options {\n baseURL?: string;\n basename?: string;\n authentication?: 'cookie' | 'token';\n onLogout?: () => Promisable<void>;\n onAuthorize?: (token?: string) => Promisable<void | string | undefined>;\n onLogin: (props: LoginProps) => ReactNode;\n userResolver: UserResolver;\n}\n\nexport default function createApplication(options: Options) {\n const {\n basename = '/',\n onAuthorize,\n onLogout,\n onLogin,\n authentication = 'token',\n baseURL,\n userResolver,\n } = options;\n\n if (baseURL) {\n request.defaults.baseURL = baseURL;\n }\n\n const handleAuthorize = (url: string) => {\n const { from } = window.history.state.usr || {};\n\n if (from && from !== 'logout') {\n localStorage.setItem('redirect_uri', stripBasename(from, basename));\n }\n\n const redirectUri = window.location.origin + path.join(basename, '/social');\n\n window.location.href = queryString.stringifyUrl({\n url,\n query: { redirect_uri: redirectUri }\n });\n };\n\n const handleLogined = (token?: string) => {\n if (authentication === 'token' && token && request.defaults.authTokenName) {\n localStorage.setItem(request.defaults.authTokenName, token);\n }\n\n const redirectUri = localStorage.getItem('redirect_uri');\n\n if (redirectUri) {\n localStorage.removeItem('redirect_uri');\n }\n return redirectUri || '/';\n };\n\n const handleLogout = async () => {\n if (onLogout) {\n try {\n await onLogout();\n } catch (e) {\n\n }\n }\n\n if (authentication === 'token') {\n localStorage.removeItem('authorization');\n }\n };\n\n return function({ routes }: AppProps) {\n const router = createBrowserRouter(\n [\n {\n path: '*',\n element: <UserProvider userResolver={userResolver} />,\n children: transformRoutes(routes),\n },\n {\n path: 'social',\n element: <Social onAuthorize={onAuthorize} onLogined={handleLogined} />\n },\n {\n path: 'logout',\n element: <Logout onLogout={handleLogout} />\n },\n {\n path: 'login',\n element: <Login onLogin={onLogin} onAuthorize={handleAuthorize} onLogined={handleLogined} />\n }\n ],\n {\n basename\n }\n );\n\n return <ToastProvider>\n <RouterProvider router={router} />\n <Modal.Message />\n </ToastProvider>;\n };\n}\n"],"names":["_g","_extends","Object","assign","bind","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","SvgExternal","props","React","createElement","xmlns","width","height","fill","d","formatRelativePath","routes","parent","menus","route","meta","path","children","hideInMenu","title","isExternal","href","replace","menu","icon","_jsx","className","hideChildrenInMenu","push","useMenu","matches","useContext","UNSAFE_RouteContext","routeMatch","pathnameBase","routesMatch","useMemo","base","getMenuData","reduceRight","match","handle","undefined","transformRoutes","map","index","renderMenuItems","items","item","_jsxs","MenuTitle","ExternalIcon","SubMenu","MenuItem","Link","to","collapseNode","expandNode","node","scrollHeight","motion","motionName","motionAppear","onAppearStart","onAppearActive","onEnterStart","onEnterActive","onLeaveStart","onLeaveActive","SiderLayout","_ref","header","headerAs","footer","footerAs","top","defaultTitle","pathname","useLocation","selectedKeys","keys","split","reduce","pre","curr","join","openKeys","setOpenKeys","useState","useEffect","slice","onOpenChange","useCallback","currentKey","filter","startsWith","Title","FooterComp","Footer","Container","$top","Sidebar","Header","Menu","mode","Content","Main","Routes","Outlet","memo","_ref2","useRoutes","styled","nav","div","main","RcMenu","p","extra","showBack","fixed","defaultShowBack","navigate","useNavigate","location","Space","Back","onClick","$fixed","Extra","Body","css","TabLayout","Nav","Item","NavLink","classNames","active","UserContext","createContext","UserProvider","userResolver","state","setState","execute","useAsync","async","e","isRequestError","response","status","redirectUri","window","search","from","onSuccess","user","Loader","value","setUser","refresh","Provider","useUser","context","Error","Avatar","a","logo","src","Dropdown","navbar","Toggle","as","avatar","Access","require","fallback","passed","intersection","roles","_Fragment","LinkButton","Button","preventDefault","Context","Inner","request","result","useRequest","wrap","WithRequest","params","useParams","url","all","name","useRequestData","Social","onLogined","onAuthorize","error","token","parsed","queryString","parse","hash","substr","access_token","newToken","data","isRecord","message","Card","Result","Navigate","Logout","onLogout","Login","onLogin","Row","Col","md","span","offset","createApplication","options","basename","authentication","baseURL","defaults","handleAuthorize","history","usr","localStorage","setItem","stripBasename","origin","stringifyUrl","query","redirect_uri","handleLogined","authTokenName","getItem","removeItem","handleLogout","router","createBrowserRouter","element","ToastProvider","RouterProvider","Modal","Message"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/images/external.svg","../src/utils/get-menu-data.tsx","../src/layout/use-menu.tsx","../src/utils/transform-routes.ts","../src/layout/sider/context.tsx","../src/layout/sider/toggle.tsx","../src/layout/sider/index.tsx","../src/components/content.tsx","../src/layout/tab.tsx","../src/components/user-provider.tsx","../src/components/header.tsx","../src/images/logo.svg","../src/components/access.tsx","../src/components/link-button.tsx","../src/components/with-request.tsx","../src/pages/social.tsx","../src/pages/logout.tsx","../src/pages/login.tsx","../src/utils/create-application.tsx"],"sourcesContent":["var img = \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3e %3cg fill='%23888'%3e %3cpath d='M8 3l1.793 1.793L6 8.586 7.414 10l3.793-3.793L13 8V3z'/%3e %3cpath d='M11 11H5V5h2V3H3v10h10V9h-2z'/%3e %3c/g%3e%3c/svg%3e\";\n export default img;","import type { RouteObject } from 'react-router-dom';\r\nimport { ReactNode } from 'react';\r\n\r\nexport interface MenuData {\r\n path: string;\r\n title: string;\r\n icon?: ReactNode;\r\n isExternal?: boolean;\r\n children: MenuData[];\r\n}\r\n\r\nconst formatRelativePath = (\r\n routes: RouteObject[],\r\n parent: string = '/',\r\n): MenuData[] => {\r\n\r\n const menus: MenuData[] = [];\r\n\r\n for (const route of routes) {\r\n\r\n let { meta = {}, path = '', children = [] } = route;\r\n\r\n if (meta.hideInMenu) {\r\n continue;\r\n }\r\n\r\n const title = meta.title;\r\n\r\n if (!title) {\r\n continue;\r\n }\r\n\r\n let isExternal = false;\r\n\r\n if (meta.href) {\r\n isExternal = true;\r\n path = meta.href;\r\n } else {\r\n path = `${parent}/${path}`.replace(/\\/{2,}/g, '/').replace(/\\/$/, '');\r\n }\r\n\r\n const icon = typeof meta.icon === 'string' ?\r\n <i className={`bi bi-${meta.icon}`} /> : meta.icon;\r\n\r\n const menu: MenuData = {\r\n title,\r\n icon,\r\n path,\r\n isExternal,\r\n children: []\r\n };\r\n\r\n if (!meta.hideChildrenInMenu && !isExternal && children.length > 0) {\r\n menu.children = formatRelativePath(children, path);\r\n }\r\n\r\n menus.push(menu);\r\n }\r\n\r\n return menus;\r\n};\r\n\r\nexport default function getMenuData(routes: RouteObject[], base: string = '/'): MenuData[] {\r\n return formatRelativePath(routes, base);\r\n}\r\n","import { useContext, useMemo } from 'react';\r\nimport { RouteObject, UNSAFE_RouteContext } from 'react-router-dom';\r\nimport getMenuData, { MenuData } from '../utils/get-menu-data';\r\n\r\nexport default function useMenu(routes?: RouteObject[]): [MenuData[], string | undefined] {\r\n\r\n const { matches } = useContext(UNSAFE_RouteContext);\r\n\r\n const routeMatch = matches[matches.length - 1];\r\n const pathnameBase = routeMatch.pathnameBase || '/';\r\n\r\n const routesMatch = routes || routeMatch.route.children || [];\r\n\r\n const menu = useMemo(() => getMenuData(routesMatch, pathnameBase), [routesMatch, pathnameBase]);\r\n\r\n const title = useMemo(() => {\r\n return matches.reduceRight((title, match) => {\r\n if (title) return title;\r\n return match.route.handle?.title;\r\n }, undefined);\r\n }, [matches]);\r\n\r\n return [menu, title];\r\n}\r\n","import { RouteObject } from 'react-router-dom';\r\n\r\nexport default function transformRoutes(routes: RouteObject[], hideInMenu?: boolean) {\r\n return routes.map((route) => {\r\n if (route.children) {\r\n route.children = transformRoutes(route.children, route.meta?.hideChildrenInMenu);\r\n }\r\n\r\n route.handle = {\r\n title: route.meta?.title,\r\n hideInMenu: route.meta?.hideInMenu || (hideInMenu && !route.index),\r\n ...route.handle,\r\n };\r\n\r\n return route;\r\n });\r\n}\r\n","import { createContext, ReactNode, useContext } from 'react';\r\n\r\nexport const SiderContext = createContext<{\r\n toggle: ReactNode,\r\n show: boolean,\r\n setShow: (show: boolean) => void,\r\n headless: boolean\r\n} | undefined>(undefined);\r\n\r\nexport const useSider = () => {\r\n return useContext(SiderContext);\r\n};\r\n","import { styled } from '@topthink/components';\r\nimport { useSider } from './context';\r\n\r\nexport default function Toggle() {\r\n const sider = useSider();\r\n return <Trigger onClick={() => sider?.setShow(true)}><i className='bi bi-list' /></Trigger>;\r\n}\r\n\r\nconst Trigger = styled.div`\r\n width: 40px;\r\n height: 40px;\r\n display: flex;\r\n font-size: 2rem;\r\n align-items: center;\r\n justify-content: center;\r\n cursor: pointer;\r\n`;\r\n","import RcMenu, { MenuItem, SubMenu } from 'rc-menu';\r\nimport { Link, Outlet, RouteObject, useLocation, useRoutes } from 'react-router-dom';\r\nimport { ElementType, memo, ReactNode, useCallback, useEffect, useMemo, useState } from 'react';\r\nimport { MenuData } from '../../utils/get-menu-data';\r\nimport type { CSSMotionProps } from 'rc-motion';\r\nimport { Offcanvas, styled, useWindowSize } from '@topthink/components';\r\nimport { ReactComponent as ExternalIcon } from '../../images/external.svg';\r\nimport useMenu from '../use-menu';\r\nimport transformRoutes from '../../utils/transform-routes';\r\nimport Toggle from './toggle';\r\nimport { SiderContext } from './context';\r\n\r\nconst renderMenuItems = (items: MenuData[]) => {\r\n return items.map((item) => {\r\n\r\n const title = <MenuTitle>\r\n {item.icon}\r\n {item.title}\r\n {item.isExternal && <ExternalIcon />}\r\n </MenuTitle>;\r\n\r\n if (item.children.length > 0) {\r\n return <SubMenu title={title} key={item.path}>\r\n {renderMenuItems(item.children)}\r\n </SubMenu>;\r\n } else {\r\n return <MenuItem key={item.path}>\r\n {item.isExternal ?\r\n <a href={item.path} target='_blank'>{title}</a> :\r\n <Link to={item.path}>{title}</Link>\r\n }\r\n </MenuItem>;\r\n }\r\n });\r\n};\r\n\r\nconst collapseNode = () => {\r\n return { height: 0 };\r\n};\r\nconst expandNode = (node: HTMLElement) => {\r\n return { height: node.scrollHeight };\r\n};\r\n\r\nconst motion: CSSMotionProps = {\r\n motionName: 'rc-menu-collapse',\r\n motionAppear: true,\r\n onAppearStart: collapseNode,\r\n onAppearActive: expandNode,\r\n onEnterStart: collapseNode,\r\n onEnterActive: expandNode,\r\n onLeaveStart: expandNode,\r\n onLeaveActive: collapseNode,\r\n};\r\n\r\ninterface Props<As extends ElementType = ElementType> {\r\n className?: string;\r\n title?: string;\r\n header?: ReactNode;\r\n headerAs?: As;\r\n footer?: ReactNode;\r\n footerAs?: As;\r\n routes?: RouteObject[];\r\n top?: number;\r\n}\r\n\r\nexport default function SiderLayout({ className, title, header, headerAs, footer, footerAs, top = 54, routes }: Props) {\r\n const { isMobile } = useWindowSize();\r\n const [menu, defaultTitle] = useMenu(routes);\r\n const [showToggle, setShowToggle] = useState(false);\r\n const { pathname, key } = useLocation();\r\n\r\n const selectedKeys = useMemo(() => {\r\n const keys: string[] = [];\r\n const parts = pathname.split('/');\r\n parts.reduce<string[]>((pre, curr) => {\r\n if (pre.length > 1) {\r\n keys.push(pre.join('/'));\r\n }\r\n return [...pre, curr];\r\n }, []);\r\n keys.push(pathname);\r\n return keys;\r\n }, [pathname]);\r\n\r\n const [openKeys, setOpenKeys] = useState<string[]>([]);\r\n\r\n useEffect(() => {\r\n setShowToggle(false);\r\n }, [key]);\r\n\r\n useEffect(() => {\r\n setOpenKeys(selectedKeys.slice(0, -1));\r\n }, [selectedKeys]);\r\n\r\n const onOpenChange = useCallback((openKeys: string[]) => {\r\n const currentKey = openKeys[openKeys.length - 1];\r\n setOpenKeys(openKeys.filter(key => currentKey.startsWith(key)));\r\n }, [openKeys, setOpenKeys]);\r\n\r\n if (!header) {\r\n header = <Title>{title || defaultTitle}</Title>;\r\n }\r\n\r\n const HeaderComp = headerAs || Header;\r\n\r\n const FooterComp = footerAs || Footer;\r\n\r\n const sidebar = <Sidebar className={className}>\r\n <HeaderComp>{header}</HeaderComp>\r\n <Menu\r\n mode='inline'\r\n motion={motion}\r\n openKeys={openKeys}\r\n onOpenChange={onOpenChange}\r\n selectedKeys={selectedKeys}\r\n >\r\n {renderMenuItems(menu)}\r\n </Menu>\r\n <FooterComp>{footer}</FooterComp>\r\n </Sidebar>;\r\n\r\n const siderToggle = isMobile ? <Toggle /> : null;\r\n\r\n return <SiderContext.Provider value={{\r\n show: showToggle,\r\n setShow: setShowToggle,\r\n toggle: siderToggle,\r\n headless: top == 0\r\n }}>\r\n <Container $top={top}>\r\n {isMobile ? <Offcanvas\r\n show={showToggle}\r\n onHide={() => {\r\n setShowToggle(false);\r\n }}\r\n placement={'start'}\r\n style={{\r\n width: '230px',\r\n }}\r\n >\r\n {sidebar}\r\n </Offcanvas> : sidebar}\r\n <Content>\r\n <Main>\r\n {routes ? <Routes routes={routes} /> : <Outlet />}\r\n </Main>\r\n </Content>\r\n </Container>\r\n </SiderContext.Provider>;\r\n}\r\n\r\nconst Routes = memo(function({ routes }: { routes: RouteObject[] }) {\r\n return useRoutes(useMemo(() => transformRoutes(routes), [routes]));\r\n});\r\n\r\nconst Sidebar = styled.nav`\r\n position: fixed;\r\n top: 0;\r\n bottom: 0;\r\n left: 0;\r\n z-index: 100;\r\n padding: var(--bs-header-height) 0 0;\r\n border-right: 1px solid #e3e3e3;\r\n width: 230px;\r\n background-color: #f5f5f5;\r\n display: flex;\r\n flex-direction: column;\r\n`;\r\n\r\nconst Title = styled.div`\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n font-size: 16px;\r\n`;\r\n\r\nconst Header = styled.div`\r\n height: 64px;\r\n display: flex;\r\n align-items: center;\r\n padding: 10px 8px 10px 24px;\r\n border-bottom: 1px solid #e3e3e3;\r\n flex-grow: 0;\r\n flex-shrink: 0;\r\n`;\r\n\r\nconst Footer = styled.div`\r\n flex-grow: 0;\r\n flex-shrink: 0;\r\n`;\r\nconst Content = styled.div`\r\n flex: 1;\r\n @media (min-width: 992px) {\r\n margin-left: 230px;\r\n }\r\n`;\r\n\r\nconst Main = styled.main`\r\n min-height: calc(100vh - var(--bs-header-height));\r\n position: relative;\r\n`;\r\n\r\nconst MenuTitle = styled.div`\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 0.5rem;\r\n\r\n .bi {\r\n font-size: 16px;\r\n line-height: 18px;\r\n min-width: 19px;\r\n text-align: center;\r\n }\r\n`;\r\n\r\nconst Menu = styled(RcMenu)`\r\n border: none;\r\n box-shadow: none;\r\n padding: 10px 0;\r\n flex: 1;\r\n overflow: auto;\r\n\r\n .rc-menu-item {\r\n display: flex;\r\n\r\n &:hover {\r\n background-color: #f0f0f0;\r\n }\r\n\r\n a {\r\n flex: 1;\r\n text-decoration: none;\r\n color: dimgray;\r\n }\r\n }\r\n\r\n .rc-menu-sub {\r\n background-color: #eee;\r\n border-top: 1px solid #eee;\r\n border-bottom: 1px solid #eee;\r\n\r\n & > li {\r\n &:first-child {\r\n margin-top: 4px;\r\n }\r\n\r\n &:last-child {\r\n margin-bottom: 4px;\r\n }\r\n }\r\n\r\n .rc-menu-item-selected {\r\n background-color: #eee;\r\n color: var(--bs-primary);\r\n\r\n & > a {\r\n color: var(--bs-primary);\r\n }\r\n }\r\n\r\n .rc-menu-item {\r\n &:hover {\r\n background-color: #e7e7e7;\r\n }\r\n }\r\n }\r\n\r\n .rc-menu-submenu {\r\n & > .rc-menu-submenu-title {\r\n &:hover {\r\n background-color: #e7e7e7;\r\n }\r\n }\r\n }\r\n\r\n .rc-menu-item-active,\r\n .rc-menu-submenu-active > .rc-menu-submenu-title {\r\n background-color: #eee;\r\n }\r\n\r\n .rc-menu-item,\r\n .rc-menu-submenu > .rc-menu-submenu-title {\r\n padding: 0 8px 0 24px;\r\n font-size: 14px;\r\n line-height: 36px;\r\n cursor: pointer;\r\n }\r\n\r\n .rc-menu-sub > .rc-menu-item,\r\n .rc-menu-sub > .rc-menu-submenu > .rc-menu-submenu-title {\r\n padding-top: 0;\r\n padding-bottom: 0;\r\n padding-right: 0;\r\n }\r\n\r\n .rc-menu-submenu-arrow {\r\n line-height: 20px;\r\n }\r\n\r\n .rc-menu-item-selected {\r\n background-color: #f5f5f5;\r\n color: var(--bs-primary);\r\n\r\n & > a {\r\n color: var(--bs-primary);\r\n }\r\n }\r\n\r\n .rc-menu-submenu-selected {\r\n background-color: #eee;\r\n\r\n & > .rc-menu-submenu-title {\r\n color: var(--bs-primary);\r\n font-weight: 500;\r\n }\r\n }\r\n\r\n & > .rc-menu-item {\r\n line-height: 38px;\r\n }\r\n\r\n & > .rc-menu-submenu {\r\n &.rc-menu-submenu-selected {\r\n background-color: #f5f5f5;\r\n }\r\n\r\n & > .rc-menu-submenu-title {\r\n line-height: 38px;\r\n\r\n &:hover {\r\n background-color: #f0f0f0;\r\n }\r\n }\r\n\r\n &.rc-menu-submenu-active > .rc-menu-submenu-title {\r\n background-color: #f5f5f5;\r\n }\r\n\r\n & > .rc-menu-sub {\r\n border-top: 1px solid #e6e6e6;\r\n border-bottom: 1px solid #e6e6e6;\r\n\r\n & > li {\r\n &:first-child {\r\n margin-top: 9px;\r\n }\r\n\r\n &:last-child {\r\n margin-bottom: 9px;\r\n }\r\n }\r\n }\r\n }\r\n\r\n`;\r\n\r\nconst Container = styled.div<{ $top: number }>`\r\n --bs-header-height: ${(p) => p.$top}px;\r\n display: flex;\r\n flex-wrap: nowrap;\r\n width: 100%;\r\n\r\n &:has(&) {\r\n > ${Sidebar} {\r\n display: none;\r\n }\r\n\r\n > ${Content} {\r\n margin-left: 0;\r\n }\r\n }\r\n`;\r\n","import { css, styled } from '@topthink/components';\r\nimport { PropsWithChildren, ReactNode, useContext, useMemo } from 'react';\r\nimport { RouteObject, UNSAFE_RouteContext, useLocation, useNavigate, } from 'react-router-dom';\r\nimport { useSider } from '../layout/sider/context';\r\n\r\ninterface ContentProps {\r\n title?: ReactNode;\r\n header?: ReactNode;\r\n nav?: ReactNode;\r\n extra?: ReactNode;\r\n showBack?: boolean | string;\r\n fixed?: boolean;\r\n}\r\n\r\nexport default function Content({\r\n title,\r\n header,\r\n nav,\r\n children,\r\n extra,\r\n showBack,\r\n fixed = true\r\n}: PropsWithChildren<ContentProps>) {\r\n const { matches } = useContext(UNSAFE_RouteContext);\r\n const route = useMemo(() => {\r\n return matches.reduceRight<RouteObject | undefined>((route, match) => {\r\n if (route || match.route.index) return route;\r\n return match.route;\r\n }, undefined);\r\n }, [matches]);\r\n\r\n const sider = useSider();\r\n\r\n const defaultShowBack = route?.handle?.hideInMenu === true;\r\n const defaultTitle = route?.handle?.title;\r\n\r\n const navigate = useNavigate();\r\n const location = useLocation();\r\n\r\n if (showBack === undefined) {\r\n showBack = defaultShowBack;\r\n }\r\n\r\n if (header === undefined) {\r\n header = <Title className={'fs-4 text-truncate'}>{title || defaultTitle}</Title>;\r\n }\r\n\r\n return <Container>\r\n <Header $fixed={fixed}>\r\n <div className='container'>\r\n {sider?.headless && sider.toggle}\r\n {showBack && (location.key !== 'default' || typeof showBack === 'string') &&\r\n <Back onClick={() => typeof showBack === 'string' ? navigate(showBack) : navigate(-1)}><i className='bi bi-arrow-left-short' /></Back>}\r\n {header}\r\n {nav}\r\n <Extra>{extra}</Extra>\r\n </div>\r\n </Header>\r\n <Body className='container'>\r\n {children}\r\n </Body>\r\n </Container>;\r\n};\r\n\r\nconst Back = styled.div`\r\n font-size: 32px;\r\n cursor: pointer;\r\n`;\r\n\r\nconst Container = styled.div`\r\n width: 100%;\r\n container-type: inline-size;\r\n\r\n .container {\r\n @media (min-width: 992px) and (max-width: 1540px) {\r\n max-width: calc(100vw - 236px - 6px);\r\n }\r\n @media (max-width: 991px) {\r\n max-width: calc(100vw - 6px);\r\n }\r\n @container (max-width: 1310px) {\r\n max-width: 100cqw;\r\n }\r\n }\r\n`;\r\n\r\nconst Header = styled.div<{ $fixed?: boolean }>`\r\n background-color: #fff;\r\n display: flex;\r\n border-bottom: 1px solid rgb(227, 227, 227);\r\n align-items: center;\r\n height: 65px;\r\n\r\n ${props => props.$fixed && css`\r\n position: sticky;\r\n top: 0;\r\n z-index: 1000;\r\n `};\r\n\r\n .container {\r\n padding: 0 12px;\r\n display: flex;\r\n align-items: center;\r\n gap: .5rem;\r\n }\r\n`;\r\n\r\nconst Body = styled.div`\r\n margin-top: 24px;\r\n\r\n @media (max-width: 1540px) {\r\n margin-top: 1rem;\r\n }\r\n`;\r\n\r\nconst Title = styled.div`\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n min-width: 50px;\r\n flex-shrink: 0;\r\n`;\r\n\r\nconst Extra = styled.div`\r\n margin-left: auto;\r\n`;\r\n","import { Dropdown, Nav } from 'react-bootstrap';\r\nimport Content from '../components/content';\r\nimport { Link, Outlet, useLocation } from 'react-router-dom';\r\nimport useMenu from './use-menu';\r\nimport { styled, useWindowSize } from '@topthink/components';\r\nimport classNames from 'classnames';\r\nimport { ReactNode } from 'react';\r\n\r\ninterface Props {\r\n title?: ReactNode;\r\n header?: ReactNode;\r\n showBack?: boolean;\r\n extra?: ReactNode;\r\n}\r\n\r\nexport default function TabLayout({ title, header, showBack, extra }: Props) {\r\n\r\n const [menu, defaultTitle] = useMenu();\r\n const { pathname } = useLocation();\r\n const { isMobile } = useWindowSize();\r\n\r\n const nav = isMobile ? <Dropdown className='ms-2 d-flex align-items-center'>\r\n <Dropdown.Toggle variant='light' size={'sm'} />\r\n <Dropdown.Menu>\r\n {menu.map((item) => {\r\n return <Dropdown.Item active={pathname.startsWith(item.path)} as={Link} to={item.path} replace key={item.path}>\r\n {item.icon}\r\n {item.title}\r\n </Dropdown.Item>;\r\n })}\r\n </Dropdown.Menu>\r\n </Dropdown> : <StyledNav>\r\n {menu.map((item) => {\r\n return <Nav.Item key={item.path}>\r\n <NavLink className={classNames('nav-link', { active: pathname.startsWith(item.path) })} to={item.path} replace>\r\n {item.icon}\r\n {item.title}\r\n </NavLink>\r\n </Nav.Item>;\r\n })}\r\n </StyledNav>;\r\n\r\n return <Content title={title || defaultTitle} header={header} nav={nav} showBack={showBack} extra={extra}>\r\n <Outlet />\r\n </Content>;\r\n}\r\n\r\n\r\nconst StyledNav = styled(Nav)`\r\n flex-wrap: nowrap;\r\n margin-left: 1.25rem;\r\n`;\r\n\r\nconst NavLink = styled(Link)`\r\n display: flex;\r\n align-items: center;\r\n gap: 0.5rem;\r\n white-space: nowrap;\r\n position: relative;\r\n\r\n .bi, svg {\r\n text-align: center;\r\n }\r\n\r\n &.active {\r\n &:after {\r\n content: '';\r\n height: 2px;\r\n background: var(--bs-primary);\r\n display: block;\r\n position: absolute;\r\n left: 1rem;\r\n right: 1rem;\r\n bottom: -2px;\r\n }\r\n }\r\n`;\r\n","import React, { useContext, useState } from 'react';\r\nimport { User, UserResolver } from '../utils/types';\r\nimport { isRequestError, Loader, useAsync } from '@topthink/components';\r\nimport { Outlet, useNavigate } from 'react-router-dom';\r\n\r\ntype UserContextType = [User, ((user: User) => void), () => void] & {\r\n user: User,\r\n setUser: (user: User) => void,\r\n refresh: () => void\r\n};\r\n\r\nexport const UserContext = React.createContext<UserContextType | null>(null);\r\n\r\ninterface Props {\r\n userResolver: UserResolver;\r\n onResolved: (user: User) => void;\r\n}\r\n\r\nconst UserProvider = function({ userResolver, onResolved }: Props) {\r\n const [state, setState] = useState<User | null>(null);\r\n\r\n const navigate = useNavigate();\r\n\r\n const { execute } = useAsync(async () => {\r\n if (userResolver) {\r\n const user = await userResolver();\r\n onResolved(user);\r\n return user;\r\n }\r\n }, [], {\r\n async onError(e) {\r\n if (isRequestError(e) && e.response?.status === 401) {\r\n const redirectUri = window.location.pathname + window.location.search;\r\n navigate(`/login`, { state: { from: redirectUri } });\r\n }\r\n },\r\n onSuccess(user) {\r\n if (user) {\r\n setState(user);\r\n }\r\n }\r\n });\r\n\r\n if (!state) {\r\n return <Loader />;\r\n }\r\n\r\n const value: any = [state, setState, execute];\r\n\r\n value.user = state;\r\n value.setUser = setState;\r\n value.refresh = execute;\r\n\r\n return <UserContext.Provider value={value}>\r\n <Outlet />\r\n </UserContext.Provider>;\r\n};\r\n\r\nexport function useUser() {\r\n const context = useContext(UserContext);\r\n if (!context) {\r\n throw new Error('please use `useUser` in UserContext');\r\n }\r\n\r\n return context;\r\n}\r\n\r\nexport default UserProvider;\r\n","import logoSrc from '../images/logo.svg';\r\nimport { Dropdown } from 'react-bootstrap';\r\nimport { PropsWithChildren, ReactNode } from 'react';\r\nimport { useUser } from './user-provider';\r\nimport classNames from 'classnames';\r\nimport { styled } from '@topthink/components';\r\n\r\nconst Avatar = styled.a`\r\n cursor: pointer;\r\n`;\r\n\r\ninterface Props {\r\n menus: ReactNode;\r\n className?: string;\r\n logo?: boolean;\r\n}\r\n\r\nexport default function Header({ children, menus, className, logo = true }: PropsWithChildren<Props>) {\r\n const [user] = useUser();\r\n\r\n return <Container\r\n className={classNames('navbar navbar-expand-lg navbar-light bg-white border-bottom sticky-top', className)}>\r\n <div className='container-fluid'>\r\n {logo && <a className='navbar-brand' href='https://www.topthink.com'>\r\n <img src={logoSrc} height='30' />\r\n </a>}\r\n {children}\r\n <Dropdown navbar>\r\n <Dropdown.Toggle as={Avatar} className='nav-link'>\r\n <img className='rounded-circle' width='25' height='25' src={user.avatar} />\r\n </Dropdown.Toggle>\r\n <Dropdown.Menu className={'shadow'}>\r\n {menus}\r\n </Dropdown.Menu>\r\n </Dropdown>\r\n </div>\r\n </Container>;\r\n}\r\n\r\nconst Container = styled.header`\r\n height: 54px;\r\n`;\r\n","var img = \"data:image/svg+xml,%3csvg width='485' height='132' xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='enable-background:new 0 0 531.69 198.43%3b' version='1.1'%3e %3cstyle type='text/css'%3e.st0%7bfill:%233C60FF%3b%7d%3c/style%3e %3cg%3e %3ctitle%3ebackground%3c/title%3e %3crect fill='none' id='canvas_background' height='134' width='487' y='-1' x='-1'/%3e %3c/g%3e %3cg%3e %3ctitle%3eLayer 1%3c/title%3e %3cpath id='svg_1' d='m132.29%2c62.34c-1.19%2c-18.77 -10.34%2c-35.36 -24.11%2c-46.46c-11.15%2c-8.99 -25.34%2c-14.38 -40.79%2c-14.38c-0.55%2c0 -1.09%2c0.01 -1.63%2c0.02c-3.32%2c0.08 -6.57%2c0.41 -9.75%2c0.98c-30.49%2c5.38 -53.65%2c32 -53.65%2c64.04c0%2c1.87 0.08%2c3.73 0.24%2c5.57c2.5%2c29.51 24.7%2c53.4 53.41%2c58.47c2.38%2c0.42 4.8%2c0.72 7.26%2c0.86c0.83%2c0.05 1.66%2c0.09 2.5%2c0.11c0.54%2c0.01 1.08%2c0.02 1.63%2c0.02c34.04%2c0 61.97%2c-26.16 64.79%2c-59.46c0.16%2c-1.83 0.24%2c-3.69 0.24%2c-5.57c0%2c-1.42 -0.05%2c-2.82 -0.14%2c-4.2zm-76.27%2c32.5c-0.26%2c0.01 -0.53%2c0.01 -0.79%2c0.01c-14.56%2c0 -26.88%2c-9.57 -31.03%2c-22.76c-0.97%2c-3.08 -1.49%2c-6.35 -1.49%2c-9.75c0%2c-17.95 14.56%2c-32.52 32.51%2c-32.52c0.26%2c0 0.53%2c0 0.79%2c0.01c3.41%2c0.08 6.69%2c0.68 9.75%2c1.74c6.5%2c2.22 12.06%2c6.45 15.97%2c11.94c1.98%2c2.78 3.54%2c5.9 4.57%2c9.25c0.94%2c3.03 1.44%2c6.24 1.44%2c9.58l-9.75%2c0c0%2c-2.18 -0.31%2c-4.29 -0.88%2c-6.28c-0.92%2c-3.23 -2.55%2c-6.17 -4.69%2c-8.64c-1.86%2c-2.14 -4.12%2c-3.93 -6.65%2c-5.25c-2.93%2c-1.54 -6.24%2c-2.46 -9.75%2c-2.58c-0.26%2c-0.01 -0.52%2c-0.01 -0.79%2c-0.01c-12.57%2c0 -22.76%2c10.19 -22.76%2c22.76c0%2c3.49 0.79%2c6.8 2.19%2c9.75c3.65%2c7.69 11.49%2c13.01 20.57%2c13.01c0.27%2c0 0.53%2c-0.01 0.79%2c-0.01l0%2c9.75zm55.7%2c-17.92c-3.35%2c10.5 -13.18%2c18.09 -24.78%2c18.09c-3.13%2c0 -6.13%2c-0.55 -8.91%2c-1.57c-2.18%2c-0.8 -4.24%2c-1.88 -6.11%2c-3.21c-2.38%2c-1.68 -4.47%2c-3.76 -6.16%2c-6.13c-0.28%2c-0.39 -0.55%2c-0.79 -0.81%2c-1.2c-2.03%2c-3.2 -3.38%2c-6.87 -3.85%2c-10.82l9.87%2c0c0.33%2c1.71 0.92%2c3.32 1.74%2c4.8c1.61%2c2.91 4.09%2c5.26 7.09%2c6.72c0.57%2c0.28 1.15%2c0.53 1.76%2c0.73c1.68%2c0.6 3.49%2c0.92 5.37%2c0.92c7.92%2c0 14.52%2c-5.67 15.96%2c-13.17c0.2%2c-1 0.3%2c-2.04 0.3%2c-3.09c0%2c-2.37 -0.51%2c-4.63 -1.43%2c-6.67c-1.66%2c-3.71 -4.68%2c-6.68 -8.43%2c-8.28l3.54%2c-9.1c7.43%2c3.08 13.13%2c9.49 15.21%2c17.38c0.44%2c1.64 0.72%2c3.34 0.81%2c5.09c0.04%2c0.52 0.05%2c1.05 0.05%2c1.58c0%2c1.05 -0.07%2c2.07 -0.18%2c3.09c-0.18%2c1.68 -0.54%2c3.3 -1.04%2c4.84z' class='st0'/%3e %3cg id='svg_2'%3e %3cg id='svg_3'%3e %3crect id='svg_4' height='6.34' width='94.12' class='st0' y='20.46' x='163.29'/%3e %3c/g%3e %3cg id='svg_5'%3e %3cpath id='svg_6' d='m169.31%2c113.72l0%2c-6.34c6.49%2c0 11.77%2c-5.28 11.77%2c-11.77l0%2c-71.98l6.34%2c0l0%2c71.98c0%2c9.98 -8.12%2c18.11 -18.11%2c18.11z' class='st0'/%3e %3c/g%3e %3cg id='svg_7'%3e %3cpath id='svg_8' d='m255.49%2c91.27l-6.34%2c0l0%2c-38.2c0%2c-5.06 -4.12%2c-9.18 -9.18%2c-9.18l-19.37%2c0c-5.06%2c0 -9.18%2c4.12 -9.18%2c9.18l0%2c38.2l-6.34%2c0l0%2c-38.2c0%2c-8.55 6.96%2c-15.51 15.51%2c-15.51l19.38%2c0c8.55%2c0 15.51%2c6.96 15.51%2c15.51l0%2c38.2l0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_9'%3e %3crect id='svg_10' height='17.09' width='6.34' class='st0' y='23.63' x='227.12'/%3e %3c/g%3e %3cg id='svg_11'%3e %3cpath id='svg_12' d='m206.43%2c113.84l-3.34%2c0l0%2c-6.34l3.34%2c0c6.3%2c0 12.9%2c-3.56 15.35%2c-8.29c3.49%2c-6.71 5.33%2c-14.25 5.33%2c-21.81l0%2c-26.13l6.34%2c0l0%2c26.13c0%2c8.58 -2.09%2c17.13 -6.05%2c24.74c-3.98%2c7.68 -13.57%2c11.7 -20.97%2c11.7z' class='st0'/%3e %3c/g%3e %3cg id='svg_13'%3e %3cpath id='svg_14' d='m257.48%2c113.84l-3.34%2c0c-7.4%2c0 -16.98%2c-4.02 -20.98%2c-11.7c-3.96%2c-7.61 -6.05%2c-16.16 -6.05%2c-24.74l6.34%2c0c0%2c7.56 1.84%2c15.1 5.33%2c21.81c2.46%2c4.73 9.06%2c8.29 15.35%2c8.29l3.34%2c0l0%2c6.34l0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_15'%3e %3crect id='svg_16' height='6.34' width='42.87' class='st0' y='27.89' x='274.07'/%3e %3c/g%3e %3cg id='svg_17'%3e %3crect id='svg_18' height='61.38' width='6.34' class='st0' y='14.89' x='293.05'/%3e %3c/g%3e %3cg id='svg_19'%3e %3crect id='svg_20' height='6.34' width='33.26' class='st0' transform='matrix(0.11%2c-0.9939%2c0.9939%2c0.11%2c194.7608%2c392.0006) ' y='46.985071' x='325.728637'/%3e %3c/g%3e %3cg id='svg_21'%3e %3crect id='svg_22' height='33.26' width='6.34' class='st0' transform='matrix(0.9939%2c-0.11%2c0.11%2c0.9939%2c-7.5075%2c38.3801) ' y='37.060893' x='310.495485'/%3e %3c/g%3e %3cg id='svg_23'%3e %3cpath id='svg_24' d='m352.9%2c77.14l-15.15%2c0c-7.52%2c0 -13.64%2c-6.12 -13.64%2c-13.63l0%2c-29.61c0%2c-7.52 6.12%2c-13.64 13.64%2c-13.64l15.15%2c0c7.52%2c0 13.64%2c6.12 13.64%2c13.64l0%2c29.61c0%2c7.52 -6.12%2c13.63 -13.64%2c13.63zm-15.15%2c-50.54c-4.02%2c0 -7.3%2c3.27 -7.3%2c7.3l0%2c29.61c0%2c4.02 3.27%2c7.3 7.3%2c7.3l15.15%2c0c4.02%2c0 7.3%2c-3.27 7.3%2c-7.3l0%2c-29.61c0%2c-4.02 -3.27%2c-7.3 -7.3%2c-7.3l-15.15%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_25'%3e %3cg id='svg_26'%3e %3crect id='svg_27' height='6.34' width='17.8' class='st0' y='37.2' x='336.43'/%3e %3c/g%3e %3cg id='svg_28'%3e %3crect id='svg_29' height='6.34' width='17.8' class='st0' y='53.87' x='336.43'/%3e %3c/g%3e %3c/g%3e %3cg id='svg_30'%3e %3cpath id='svg_31' d='m352.7%2c113.84l-37.98%2c0c-8%2c0 -14.5%2c-6.51 -14.5%2c-14.5l0%2c-16.14l6.34%2c0l0%2c16.13c0%2c4.5 3.66%2c8.17 8.17%2c8.17l37.98%2c0l0%2c6.34l-0.01%2c0z' class='st0'/%3e %3c/g%3e %3cg id='svg_32'%3e %3crect id='svg_33' height='6.34' width='23.57' class='st0' transform='matrix(0.2529%2c-0.9675%2c0.9675%2c0.2529%2c114.4986%2c402.9877) ' y='83.698593' x='326.836101'/%3e %3c/g%3e %3cg id='svg_34'%3e %3crect id='svg_35' height='6.34' width='20.52' class='st0' y='86.2' x='321.58'/%3e %3c/g%3e %3cg id='svg_36'%3e %3crect id='svg_37' height='24.75' width='6.34' class='st0' transform='matrix(0.9556%2c-0.2946%2c0.2946%2c0.9556%2c-19.7967%2c122.424) ' y='75.874073' x='369.686666'/%3e %3c/g%3e %3cg id='svg_38'%3e %3crect id='svg_39' height='6.34' width='71.83' class='st0' y='20.46' x='395.51'/%3e %3c/g%3e %3cg id='svg_40'%3e %3crect id='svg_41' height='6.34' width='90.81' class='st0' y='57.44' x='386.02'/%3e %3c/g%3e %3cg id='svg_42'%3e %3cpath id='svg_43' d='m463.12%2c113.64l-56%2c0c-4.5%2c0 -8.59%2c-2.29 -10.94%2c-6.14c-2.35%2c-3.84 -2.52%2c-8.53 -0.46%2c-12.53l17.68%2c-35.81l5.64%2c2.89l-17.68%2c35.81c-1.04%2c2.02 -0.95%2c4.39 0.23%2c6.33c1.19%2c1.94 3.25%2c3.1 5.53%2c3.1l56%2c0c1.51%2c0 2.88%2c-0.71 3.74%2c-1.95c0.81%2c-1.16 1.03%2c-2.57 0.63%2c-3.91l-7.8%2c-12.34l5.36%2c-3.39l8.18%2c12.94l0.12%2c0.31c1.24%2c3.34 0.76%2c7.08 -1.28%2c10.01c-2.04%2c2.94 -5.39%2c4.68 -8.95%2c4.68z' class='st0'/%3e %3c/g%3e %3c/g%3e %3c/g%3e%3c/svg%3e\";\n export default img;","import { ReactNode } from 'react';\r\nimport { intersection } from 'lodash';\r\nimport { useUser } from './user-provider';\r\nimport { User } from '../utils/types';\r\n\r\nexport interface AccessProps {\r\n require?: string | string[] | ((user: User) => boolean);\r\n fallback?: ReactNode;\r\n children: ReactNode;\r\n}\r\n\r\nexport default function Access({\r\n require,\r\n children,\r\n fallback\r\n}: AccessProps) {\r\n const [user,] = useUser();\r\n let passed = false;\r\n if (typeof require === 'function') {\r\n passed = require(user);\r\n } else {\r\n if (typeof require === 'string') {\r\n require = [require];\r\n }\r\n passed = intersection(user.roles, require).length > 0;\r\n }\r\n if (!passed) {\r\n children = fallback;\r\n }\r\n\r\n return <>{children}</>;\r\n}\r\n","import { LinkProps, useNavigate } from 'react-router-dom';\r\nimport { Button, ButtonProps } from '@topthink/components';\r\n\r\ninterface Props extends ButtonProps, Pick<LinkProps, 'to' | 'replace'> {\r\n\r\n}\r\n\r\nexport default function LinkButton({ to, replace, ...props }: Props) {\r\n let navigate = useNavigate();\r\n\r\n return <Button {...props} onClick={(e) => {\r\n e.preventDefault();\r\n navigate(to, { replace });\r\n }} />;\r\n}\r\n","import { Loader, RequestConfig, useRequest } from '@topthink/components';\r\nimport { createContext, ReactNode, useContext } from 'react';\r\nimport { useParams } from 'react-router-dom';\r\n\r\nconst Context = createContext<any>(undefined);\r\n\r\ninterface Props {\r\n request: RequestConfig;\r\n children: ReactNode;\r\n}\r\n\r\nconst Inner = function({ request, children }: Props) {\r\n const { result } = useRequest(request);\r\n\r\n if (!result) {\r\n return <Loader wrap />;\r\n }\r\n\r\n return <Context.Provider value={result}>\r\n {children}\r\n </Context.Provider>;\r\n};\r\n\r\nexport default function WithRequest({ request, children }: Props) {\r\n const params = useParams();\r\n\r\n if (typeof request === 'string') {\r\n request = {\r\n url: request.replace(/:(\\w+)/g, (all, name) => {\r\n return params[name] || all;\r\n })\r\n };\r\n } else if (request.url) {\r\n request.url = request.url.replace(/:(\\w+)/g, (all, name) => {\r\n return params[name] || all;\r\n });\r\n }\r\n\r\n return <Inner key={request.url} request={request}>{children}</Inner>;\r\n}\r\n\r\nexport function useRequestData<T = any>(): T {\r\n return useContext(Context);\r\n}\r\n","import { Card, isRecord, isRequestError, Loader, Result, useAsync } from '@topthink/components';\r\nimport { Navigate } from 'react-router-dom';\r\nimport { Container } from 'react-bootstrap';\r\nimport queryString from 'query-string';\r\nimport { Promisable } from '../utils/types';\r\n\r\ninterface LoginProps {\r\n onLogined: (token?: string) => string;\r\n onAuthorize?: (token?: string) => Promisable<void | string | undefined>;\r\n}\r\n\r\nexport default function Social({ onLogined, onAuthorize }: LoginProps) {\r\n const { result, error } = useAsync(async () => {\r\n let token: string | undefined;\r\n\r\n const parsed = queryString.parse(window.location.hash.substr(1));\r\n if (parsed.access_token) {\r\n token = parsed.access_token as string;\r\n }\r\n\r\n if (onAuthorize) {\r\n try {\r\n const newToken = await onAuthorize(token);\r\n if (newToken) {\r\n token = newToken;\r\n }\r\n } catch (e) {\r\n if (isRequestError(e)) {\r\n const data = e.response?.data;\r\n if (isRecord(data)) {\r\n throw new Error(data.message);\r\n }\r\n }\r\n throw e;\r\n }\r\n }\r\n\r\n return onLogined(token);\r\n }, []);\r\n\r\n if (error) {\r\n return <Container className={'mt-5'}>\r\n <Card>\r\n <Result status={'error'} title={error.message} />\r\n </Card>\r\n </Container>;\r\n }\r\n\r\n if (result) {\r\n return <Navigate to={result} replace />;\r\n }\r\n\r\n return <Loader />;\r\n}\r\n","import { Loader, useAsync } from '@topthink/components';\r\nimport { useNavigate } from 'react-router-dom';\r\n\r\ninterface LogoutProps {\r\n onLogout: () => void | Promise<void>;\r\n}\r\n\r\nexport default function Logout({ onLogout }: LogoutProps) {\r\n const navigate = useNavigate();\r\n\r\n useAsync(async () => {\r\n await onLogout();\r\n navigate('/login', { state: { from: 'logout' } });\r\n }, []);\r\n\r\n return <Loader />;\r\n}\r\n","import { Card } from '@topthink/components';\r\nimport { Col, Container, Row } from 'react-bootstrap';\r\nimport { ReactNode } from 'react';\r\n\r\nexport interface LoginProps {\r\n onAuthorize: (url: string) => void;\r\n onLogined: (token?: string) => string;\r\n}\r\n\r\ninterface Props extends LoginProps {\r\n onLogin: (props: LoginProps) => ReactNode;\r\n}\r\n\r\nexport default function Login({ onLogin, onLogined, onAuthorize }: Props) {\r\n return <Container className='vh-100 d-flex align-items-center'>\r\n <Row className='flex-fill'>\r\n <Col md={{ span: 4, offset: 4 }}>\r\n <Card className='p-5'>\r\n {onLogin({ onAuthorize, onLogined })}\r\n </Card>\r\n </Col>\r\n </Row>\r\n </Container>;\r\n}\r\n","import { createBrowserRouter, RouteObject, RouterProvider } from 'react-router-dom';\nimport Social from '../pages/social';\nimport Logout from '../pages/logout';\nimport queryString from 'query-string';\nimport * as path from 'path';\nimport { Modal, request, ToastProvider } from '@topthink/components';\nimport UserProvider from '../components/user-provider';\nimport transformRoutes from './transform-routes';\nimport Login, { LoginProps } from '../pages/login';\nimport { Promisable, User, UserResolver } from './types';\nimport { ReactNode } from 'react';\n\nfunction stripBasename(pathname: string, basename: string) {\n if (basename === '/') return pathname;\n\n return pathname.slice(basename.length);\n}\n\ninterface AppProps {\n routes: RouteObject[];\n}\n\ninterface Options {\n baseURL?: string;\n basename?: string;\n authentication?: 'cookie' | 'token';\n onLogout?: () => Promisable<void>;\n onAuthorize?: (token?: string) => Promisable<void | string | undefined>;\n onLogin: (props: LoginProps) => ReactNode;\n userResolver: UserResolver;\n}\n\nexport default function createApplication(options: Options) {\n const {\n basename = '/',\n onAuthorize,\n onLogout,\n onLogin,\n authentication = 'token',\n baseURL,\n userResolver,\n } = options;\n\n if (baseURL) {\n request.defaults.baseURL = baseURL;\n }\n\n const updateToken = (token?: string) => {\n if (authentication === 'token' && request.defaults.authTokenName) {\n if (token) {\n localStorage.setItem(request.defaults.authTokenName, token);\n } else {\n localStorage.removeItem(request.defaults.authTokenName);\n }\n }\n };\n\n const handleResolved = (user: User) => {\n if (user.token) {\n updateToken(user.token);\n }\n };\n\n const handleAuthorize = (url: string) => {\n const { from } = window.history.state.usr || {};\n\n if (from && from !== 'logout') {\n localStorage.setItem('redirect_uri', stripBasename(from, basename));\n }\n\n const redirectUri = window.location.origin + path.join(basename, '/social');\n\n window.location.href = queryString.stringifyUrl({\n url,\n query: { redirect_uri: redirectUri }\n });\n };\n\n const handleLogined = (token?: string) => {\n updateToken(token);\n\n const redirectUri = localStorage.getItem('redirect_uri');\n\n if (redirectUri) {\n localStorage.removeItem('redirect_uri');\n }\n return redirectUri || '/';\n };\n\n const handleLogout = async () => {\n if (onLogout) {\n try {\n await onLogout();\n } catch (e) {\n\n }\n }\n\n updateToken();\n };\n\n return function({ routes }: AppProps) {\n const router = createBrowserRouter(\n [\n {\n path: '*',\n element: <UserProvider userResolver={userResolver} onResolved={handleResolved} />,\n children: transformRoutes(routes),\n },\n {\n path: 'social',\n element: <Social onAuthorize={onAuthorize} onLogined={handleLogined} />\n },\n {\n path: 'logout',\n element: <Logout onLogout={handleLogout} />\n },\n {\n path: 'login',\n element: <Login onLogin={onLogin} onAuthorize={handleAuthorize} onLogined={handleLogined} />\n }\n ],\n {\n basename\n }\n );\n\n return <ToastProvider>\n <RouterProvider router={router} />\n <Modal.Message />\n </ToastProvider>;\n };\n}\n"],"names":["_g","_extends","Object","assign","bind","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","SvgExternal","props","React","createElement","xmlns","width","height","fill","d","formatRelativePath","routes","parent","menus","route","meta","path","children","hideInMenu","title","isExternal","href","replace","menu","icon","_jsx","className","hideChildrenInMenu","push","useMenu","matches","useContext","UNSAFE_RouteContext","routeMatch","pathnameBase","routesMatch","useMemo","base","getMenuData","reduceRight","match","handle","undefined","transformRoutes","map","index","SiderContext","createContext","useSider","Toggle","sider","Trigger","onClick","setShow","styled","div","renderMenuItems","items","item","_jsxs","MenuTitle","ExternalIcon","SubMenu","MenuItem","Link","to","collapseNode","expandNode","node","scrollHeight","motion","motionName","motionAppear","onAppearStart","onAppearActive","onEnterStart","onEnterActive","onLeaveStart","onLeaveActive","SiderLayout","_ref","header","headerAs","footer","footerAs","top","isMobile","useWindowSize","defaultTitle","showToggle","setShowToggle","useState","pathname","useLocation","selectedKeys","keys","split","reduce","pre","curr","join","openKeys","setOpenKeys","useEffect","slice","onOpenChange","useCallback","currentKey","filter","startsWith","Title","FooterComp","Footer","sidebar","Sidebar","Header","Menu","mode","siderToggle","Provider","value","show","toggle","headless","Container","$top","Offcanvas","onHide","placement","style","Content","Main","Routes","Outlet","memo","_ref2","useRoutes","nav","main","RcMenu","p","extra","showBack","fixed","defaultShowBack","navigate","useNavigate","location","$fixed","Back","Extra","Body","css","TabLayout","Dropdown","variant","size","Item","active","as","StyledNav","Nav","NavLink","classNames","UserContext","UserProvider","userResolver","onResolved","state","setState","execute","useAsync","async","user","e","isRequestError","response","status","redirectUri","window","search","from","onSuccess","Loader","setUser","refresh","useUser","context","Error","Avatar","a","logo","src","navbar","avatar","Access","require","fallback","passed","intersection","roles","_Fragment","LinkButton","Button","preventDefault","Context","Inner","request","result","useRequest","wrap","WithRequest","params","useParams","url","all","name","useRequestData","Social","onLogined","onAuthorize","error","token","parsed","queryString","parse","hash","substr","access_token","newToken","data","isRecord","message","Card","Result","Navigate","Logout","onLogout","Login","onLogin","Row","Col","md","span","offset","createApplication","options","basename","authentication","baseURL","defaults","updateToken","authTokenName","localStorage","setItem","removeItem","handleResolved","handleAuthorize","history","usr","stripBasename","origin","stringifyUrl","query","redirect_uri","handleLogined","getItem","handleLogout","router","createBrowserRouter","element","ToastProvider","RouterProvider","Modal","Message"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@topthink/common",
3
- "version": "1.3.32",
3
+ "version": "1.3.34",
4
4
  "scripts": {
5
5
  "prebuild": "rimraf lib types",
6
6
  "build": "rollup -c --environment NODE_ENV:production",
@@ -16,7 +16,7 @@
16
16
  "scss"
17
17
  ],
18
18
  "dependencies": {
19
- "@topthink/components": "^1.0.93",
19
+ "@topthink/components": "^1.0.95",
20
20
  "classnames": "^2.3.1",
21
21
  "history": "^5.0.0",
22
22
  "query-string": "^8.1.0",
@@ -26,9 +26,9 @@
26
26
  },
27
27
  "peerDependencies": {
28
28
  "lodash": "*",
29
- "react": "^17",
29
+ "react": "^17||^18",
30
30
  "react-bootstrap": "^2.1.2",
31
- "react-dom": "^17"
31
+ "react-dom": "^17||^18"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@babel/core": "^7.13.8",
@@ -51,5 +51,5 @@
51
51
  },
52
52
  "author": "yunwuxin <tzzhangyajun@qq.com> (https://github.com/yunwuxin)",
53
53
  "license": "MIT",
54
- "gitHead": "cbab38428fb6fbf05357c229cf3b5d49f80cfd3d"
54
+ "gitHead": "aaf623df1adb75a488de2ae521744f66fa251914"
55
55
  }
@@ -8,7 +8,8 @@ type UserContextType = [User, ((user: User) => void), () => void] & {
8
8
  export declare const UserContext: React.Context<UserContextType | null>;
9
9
  interface Props {
10
10
  userResolver: UserResolver;
11
+ onResolved: (user: User) => void;
11
12
  }
12
- declare const UserProvider: ({ userResolver }: Props) => JSX.Element;
13
+ declare const UserProvider: ({ userResolver, onResolved }: Props) => JSX.Element;
13
14
  export declare function useUser(): UserContextType;
14
15
  export default UserProvider;
@@ -0,0 +1,13 @@
1
+ import { ReactNode } from 'react';
2
+ export declare const SiderContext: import("react").Context<{
3
+ toggle: ReactNode;
4
+ show: boolean;
5
+ setShow: (show: boolean) => void;
6
+ headless: boolean;
7
+ } | undefined>;
8
+ export declare const useSider: () => {
9
+ toggle: ReactNode;
10
+ show: boolean;
11
+ setShow: (show: boolean) => void;
12
+ headless: boolean;
13
+ } | undefined;
@@ -0,0 +1,2 @@
1
+ /// <reference types="react" />
2
+ export default function Toggle(): JSX.Element;
File without changes