react-toolkits 2.22.11 → 2.22.12
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/CHANGELOG.md +6 -0
- package/lib/chunk-3N7LFLKJ.js +2 -0
- package/lib/chunk-3N7LFLKJ.js.map +1 -0
- package/lib/chunk-BRZIJDNT.js +2 -0
- package/lib/chunk-BRZIJDNT.js.map +1 -0
- package/lib/chunk-JQHQKJFH.js +2 -0
- package/lib/chunk-JQHQKJFH.js.map +1 -0
- package/lib/chunk-N67BWR5M.js +3 -0
- package/lib/chunk-N67BWR5M.js.map +1 -0
- package/lib/chunk-OLVGFJFN.js +2 -0
- package/lib/chunk-OLVGFJFN.js.map +1 -0
- package/lib/chunk-PB74M2DE.js +2 -0
- package/lib/chunk-PB74M2DE.js.map +1 -0
- package/lib/chunk-PMXRIKKI.js +2 -0
- package/lib/chunk-PMXRIKKI.js.map +1 -0
- package/lib/chunk-S6NRRFWG.js +2 -0
- package/lib/chunk-S6NRRFWG.js.map +1 -0
- package/lib/chunk-ZRGA4NV7.js +2 -0
- package/lib/chunk-ZRGA4NV7.js.map +1 -0
- package/lib/createMenuItem-WS2MRQJF.js +2 -0
- package/lib/createMenuItem-WS2MRQJF.js.map +1 -0
- package/lib/index.css +0 -3
- package/lib/index.d.ts +792 -21
- package/lib/index.js +3 -2
- package/lib/index.js.map +1 -0
- package/lib/menuItemList-CVNXJ7CP.js +2 -0
- package/lib/menuItemList-CVNXJ7CP.js.map +1 -0
- package/lib/roleDetail-WPKPZSX2.js +2 -0
- package/lib/roleDetail-WPKPZSX2.js.map +1 -0
- package/lib/roleList-RY6ZEVB4.js +2 -0
- package/lib/roleList-RY6ZEVB4.js.map +1 -0
- package/lib/updateMenuItem-AJRUUJ6K.js +2 -0
- package/lib/updateMenuItem-AJRUUJ6K.js.map +1 -0
- package/lib/userDetail-QQDMP7HT.js +2 -0
- package/lib/userDetail-QQDMP7HT.js.map +1 -0
- package/lib/userList-Q4RULNHM.js +2 -0
- package/lib/userList-Q4RULNHM.js.map +1 -0
- package/locale/context.js +2 -1
- package/locale/context.js.map +1 -0
- package/locale/en_GB.js +2 -1
- package/locale/en_GB.js.map +1 -0
- package/locale/hooks.js +2 -1
- package/locale/hooks.js.map +1 -0
- package/locale/index.js +2 -1
- package/locale/index.js.map +1 -0
- package/locale/ja_JP.js +2 -1
- package/locale/ja_JP.js.map +1 -0
- package/locale/ko_KR.js +2 -1
- package/locale/ko_KR.js.map +1 -0
- package/locale/zh_CN.js +2 -1
- package/locale/zh_CN.js.map +1 -0
- package/package.json +6 -36
- package/lib/components.d.ts +0 -429
- package/lib/components.js +0 -1
- package/lib/constants.d.ts +0 -11
- package/lib/constants.js +0 -2
- package/lib/hooks.d.ts +0 -108
- package/lib/hooks.js +0 -1
- package/lib/logo-L6MFCL6M.png +0 -0
- package/lib/modules.d.ts +0 -7
- package/lib/modules.js +0 -1
- package/lib/pages.d.ts +0 -20
- package/lib/pages.js +0 -2
- package/lib/services.d.ts +0 -196
- package/lib/services.js +0 -1
- package/lib/types-DVKf5poe.d.ts +0 -19
- package/lib/types.d.ts +0 -23
- package/lib/types.js +0 -0
- package/lib/utils.d.ts +0 -6
- package/lib/utils.js +0 -1
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/dynamicTags/DynamicTags.tsx","../src/components/expandableParagraph/ExpandableParagraph.tsx","../src/components/infiniteList/stores.ts","../src/components/infiniteList/InfiniteList.tsx","../src/components/navMenu/stores.ts","../src/components/navMenu/utils.tsx","../src/components/navMenu/NavMenu.tsx","../src/components/requireGame/RequireGame.tsx","../src/components/userWidget/UserWidget.tsx","../src/components/layout/GameSelect.tsx","../src/components/logo/Logo.tsx","../src/components/layout/LayoutHeader.tsx","../src/components/layout/Layout.tsx","../src/components/requirePermission/RequirePermission.tsx","../src/hooks/drawer/stores.ts","../src/hooks/drawer/drawer.tsx","../src/hooks/drawer/formDrawer.tsx","../src/modules/menu/index.tsx","../src/modules/permission/index.tsx","../src/pages/notFound/index.tsx","../src/pages/operationLogList/index.tsx","../src/pages/signIn/hooks.ts","../src/pages/signIn/index.tsx"],"names":["DynamicTags","props","initialTags","addable","removable","addCallback","removeCallback","t","useTranslation","token","theme","tags","setTags","useState","inputVisible","setInputVisible","inputValue","setInputValue","editInputIndex","setEditInputIndex","editInputValue","setEditInputValue","inputRef","useRef","editInputRef","useEffect","handleClose","removedTag","newTags","tag","showInput","handleInputChange","e","handleInputConfirm","handleEditInputChange","handleEditInputConfirm","tagInputStyle","tagPlusStyle","jsxs","Space","jsx","index","Input","Tag","PlusOutlined","DynamicTags_default","ExpandableParagraph","children","restProps","expanded","setExpanded","Typography","_","info","ExpandableParagraph_default","DEFAULT_PAYLOAD","createStore","create","devtools","subscribeWithSelector","set","get","id","url","queryKey","refetch","fetchNextPage","state","existingInstance","updatedInstance","newInstances","instance","payload","newPayload","isEqual","payloadChanged","currentPayload","error","store","useInfiniteListStore","DEFAULT_CACHE_TIME","DEFAULT_STALE_TIME","SPIN_STYLE","identifierCounter","generateUniqueIdentifier","InternalInfiniteList","ref","internalProps","data","page","lastPage","allPages","_pageParam","pageData","identifier","code","buttonsAlign","showReset","refreshInterval","request","tableExtra","renderForm","afterSuccess","afterError","dataAdapter","initialPageParam","footer","form","tableProps","_form","Form","isValid","setIsValid","shouldPoll","action","ky","useKy","accessible","isChecking","usePermission","finalIdentifier","useMemo","subscribedPayload","s","formInstance","method","body","params","headers","cacheTime","staleTime","requestHeaders","hasNextPage","isFetchingNextPage","isFetching","useInfiniteQuery","pageParam","requestParams","requestBody","kyOptions","response","err","errorObj","failureCount","retryError","attemptIndex","dataSource","isLoadingMore","isReachingEnd","isEmpty","onConfirm","values","loadMore","onReset","useImperativeHandle","Spin","Result","renderFooter","renderTableExtra","formRenderer","FilterFormWrapper_default","cloneElement","Fragment","Table","Button","InfiniteList","forwardRef","InfiniteList_default","useNavStore","persist","keys","current","key","createJSONStorage","MemoizedLink","memo","to","Link","transformItems","items","result","i","rest","route","label","labelNode","flatItems","keypath","item","NavMenu","loading","location","useLocation","previousItemsRef","previousLocationRef","flattenItems","internalItems","openKeys","selectedKeys","setOpenKeys","setSelectedKeys","onOpenChange","useCallback","expandedKey","match","fullPath","k","Menu","NavMenu_default","Antd","RequireGame","permissionVersion","gameId","isGlobal","useToolkitsStore","isLoading","useGames","Empty","RequireGame_default","UserWidget","navigate","useNavigate","clearToken","getUser","signInPath","user","handleSignOut","handleKeyDown","handleDropdownKeyDown","LogoutOutlined","Dropdown","UserOutlined","UserWidget_default","Text","GameSelect","filter","options","gameApiV2","setGameId","queryClient","useQueryClient","filteredData","_options","onChange","value","clearCache","query","firstId","Select","GameSelect_default","Logo","logo_default","Logo_default","LayoutHeader","title","subtitle","mainPagePath","collapsed","LayoutHeader_default","Header","Sider","Content","Layout","collapsible","isMenuLoading","headerExtra","navWidth","gameSelectOptions","colorBgContainer","colorBorder","globalNavWidth","globalCollapsible","setContext","internalCollapsed","setInternalCollapsed","onCollapse","internalCollapsible","Divider","MenuUnfoldOutlined","MenuFoldOutlined","extra","Suspense","Layout_default","RequirePermission","config","RequirePermission_default","useDrawerStore","uuid","usedIds","open","newOpen","newUsedIds","useDrawer","content","afterOpen","afterClose","confirmText","cancelText","confirmButtonProps","cancelButtonProps","drawerProps","_id","generateId","show","hide","isOpen","cleanup","confirmLoading","setConfirmLoading","isRenderFunction","_show","_hide","onClose","handleConfirm","drawerFooter","internalDrawer","Drawer","useFormDrawer","formProps","onSuccess","internalExtraValues","setInternalExtraValues","internalForm","drawer","operation","showForm","initialValues","extraValues","MenuItemList","lazy","CreateMenuItem","UpdateMenuItem","menu_default","Routes","Route","UserList","UserDetail","RoleList","RoleDetail","permission_default","Navigate","NotFound","redirectUrl","notFound_default","Option","OperationLogList","columns","dayjs","Card","QueryList_default","operationLogList_default","withContext","useTicketLogin","setToken","ticket","unregisteredFromUrl","queryParams","isUnregistered","setIsUnregistered","useQuery","dismissUnregistered","SignIn","hashMode","path","background_default","Alert","SSO_URL","signIn_default"],"mappings":"i/CAkBA,IAAMA,EAAoCC,CAAAA,GAAAA,EAAS,CACjD,GAAM,CAAE,WAAAC,CAAAA,CAAAA,CAAa,QAAAC,CAAS,CAAA,SAAA,CAAAC,CAAW,CAAA,WAAA,CAAAC,EAAa,cAAAC,CAAAA,CAAe,CAAIL,CAAAA,GAAAA,CACnE,CAAE,CAAAM,CAAAA,CAAE,CAAIC,CAAAA,CAAAA,GACR,CAAE,KAAA,CAAAC,CAAM,CAAA,CAAIC,MAAM,QAAS,EAAA,CAC3B,CAACC,CAAAA,CAAMC,CAAO,CAAIC,CAAAA,QAAAA,CAAmB,EAAE,EACvC,CAACC,CAAAA,CAAcC,CAAe,CAAA,CAAIF,SAAS,CAAK,CAAA,CAAA,CAChD,CAACG,CAAAA,CAAYC,CAAa,CAAIJ,CAAAA,QAAAA,CAAS,EAAE,CAAA,CACzC,CAACK,CAAgBC,CAAAA,CAAiB,CAAIN,CAAAA,QAAAA,CAAS,EAAE,CACjD,CAAA,CAACO,CAAgBC,CAAAA,CAAiB,EAAIR,QAAiB,CAAA,EAAE,CACzDS,CAAAA,CAAAA,CAAWC,OAAiB,IAAI,CAAA,CAChCC,CAAeD,CAAAA,MAAAA,CAAiB,IAAI,CAE1CE,CAAAA,SAAAA,CAAU,IAAM,CACdb,EAAQV,CAAe,EAAA,EAAE,EAC3B,EAAG,CAACA,CAAW,CAAC,CAAA,CAEhBuB,UAAU,IAAM,CACVX,CACFQ,EAAAA,CAAAA,CAAS,SAAS,KAAM,GAE5B,CAAG,CAAA,CAACR,CAAY,CAAC,CAAA,CAEjBW,SAAU,CAAA,IAAM,CACdD,CAAa,CAAA,OAAA,EAAS,KAAM,GAC9B,EAAG,CAACR,CAAU,CAAC,CAAA,CAEf,IAAMU,CAAc,CAAA,MAAOC,CAAuB,EAAA,CAGhD,GAFgB,MAAMrB,CAAAA,GAAiBqB,CAAU,CAAA,CAEpC,CACX,IAAMC,CAAAA,CAAUjB,CAAK,CAAA,MAAA,CAAOkB,GAAOA,CAAQF,GAAAA,CAAU,CACrDf,CAAAA,CAAAA,CAAQgB,CAAO,EACjB,CACF,CAEME,CAAAA,CAAAA,CAAY,IAAM,CACtBf,CAAAA,CAAgB,CAAI,CAAA,EACtB,EAEMgB,CAAqBC,CAAAA,CAAAA,EAAqC,CAC9Df,CAAAA,CAAce,EAAE,MAAO,CAAA,KAAK,EAC9B,CAAA,CAEMC,EAAqB,SAAY,CACjCjB,CAAcL,EAAAA,CAAAA,CAAK,QAAQK,CAAU,CAAA,GAAM,CAC7B,CAAA,EAAA,MAAMX,IAAcW,CAAU,CAAA,EAG5CJ,CAAQ,CAAA,CAAC,GAAGD,CAAMK,CAAAA,CAAU,CAAC,CAAA,CAIjCD,EAAgB,CAAK,CAAA,CAAA,CACrBE,CAAc,CAAA,EAAE,EAClB,CAEMiB,CAAAA,CAAAA,CAAyBF,CAAqC,EAAA,CAClEX,EAAkBW,CAAE,CAAA,MAAA,CAAO,KAAK,EAClC,EAEMG,CAAyB,CAAA,IAAM,CACnC,IAAMP,EAAU,CAAC,GAAGjB,CAAI,CAAA,CACxBiB,EAAQV,CAAc,CAAA,CAAIE,CAC1BR,CAAAA,CAAAA,CAAQgB,CAAO,CACfT,CAAAA,CAAAA,CAAkB,CAAE,CAAA,CAAA,CACpBF,EAAc,EAAE,EAClB,CAEMmB,CAAAA,CAAAA,CAA+B,CACnC,KAAO,CAAA,EAAA,CACP,aAAe,CAAA,KACjB,EAEMC,EAA8B,CAAA,CAClC,UAAY5B,CAAAA,CAAAA,CAAM,iBAClB,WAAa,CAAA,QACf,CAEA,CAAA,OACE6B,KAACC,KAAA,CAAA,CAAM,IAAI,CAAA,CAAA,CAAA,CAAC,KAAM,CAAC,CAAA,CAAG,CAAC,CAAA,CACrB,UAAAC,GAACD,CAAAA,KAAAA,CAAA,CAAM,IAAA,CAAI,GAAC,IAAM,CAAA,CAAC,CAAG,CAAA,CAAC,EACpB,QAAA5B,CAAAA,CAAAA,CAAK,GAAI,CAAA,CAACkB,EAAKY,CACVvB,GAAAA,CAAAA,GAAmBuB,CAEnBD,CAAAA,GAAAA,CAACE,MAAA,CACC,GAAA,CAAKlB,CAEL,CAAA,IAAA,CAAK,QACL,KAAOY,CAAAA,CAAAA,CACP,KAAOhB,CAAAA,CAAAA,CACP,SAAUc,CACV,CAAA,MAAA,CAAQC,CACR,CAAA,YAAA,CAAcA,GANTN,CAOP,CAAA,CAKFW,GAACG,CAAAA,GAAAA,CAAA,CAEC,QAAUvC,CAAAA,CAAAA,CACV,KAAO,CAAA,CAAE,WAAY,MAAO,CAAA,CAC5B,OAAS,CAAA,MAAM4B,GAAK,CAClBA,CAAAA,CAAE,cAAe,EAAA,CACjB,MAAMN,CAAAA,CAAYG,CAAG,EACvB,EAEA,QAAAW,CAAAA,GAAAA,CAAC,MACC,CAAA,CAAA,aAAA,CAAeR,GAAK,CACdS,CAAAA,GAAU,CACZtB,GAAAA,CAAAA,CAAkBsB,CAAK,CACvBpB,CAAAA,CAAAA,CAAkBQ,CAAG,CAAA,CACrBG,EAAE,cAAe,EAAA,EAErB,CAEC,CAAA,QAAA,CAAAH,EACH,CAlBKA,CAAAA,CAAAA,CAmBP,CAEH,CAAA,CACH,EACC1B,CACEW,GAAAA,CAAAA,CACC0B,GAACE,CAAAA,KAAAA,CAAA,CACC,GAAKpB,CAAAA,CAAAA,CACL,IAAK,CAAA,MAAA,CACL,KAAK,OACL,CAAA,KAAA,CAAOc,CACP,CAAA,KAAA,CAAOpB,EACP,QAAUe,CAAAA,CAAAA,CACV,MAAQE,CAAAA,CAAAA,CACR,aAAcA,CAChB,CAAA,CAAA,CAEAK,IAACK,CAAAA,GAAAA,CAAA,CAAI,KAAON,CAAAA,EAAAA,CAAc,OAASP,CAAAA,CAAAA,CACjC,UAAAU,GAACI,CAAAA,YAAAA,CAAA,EAAa,CAAA,CAAE,OACTrC,CAAE,CAAA,YAAY,CACvB,CAAA,CAAA,CAAA,CAAA,CAAA,CAEN,CAEJ,CAEOsC,CAAAA,EAAAA,CAAQ7C,OC3JT8C,EAAoD7C,CAAAA,CAAAA,EAAS,CACjE,GAAM,CAAE,QAAA8C,CAAAA,CAAAA,CAAU,GAAGC,CAAU,EAAI/C,CAC7B,CAAA,CAACgD,CAAUC,CAAAA,CAAW,EAAIrC,QAAS,CAAA,CAAA,CAAK,CAE9C,CAAA,OACE2B,IAACW,UAAW,CAAA,SAAA,CAAX,CACE,GAAGH,EACJ,SAAU,CAAA,MAAA,CACV,QAAU,CAAA,CACR,KAAM,CACN,CAAA,UAAA,CAAY,aACZ,CAAA,QAAA,CAAAC,EACA,QAAU,CAAA,CAACG,CAAGC,CAAAA,CAAAA,GAAS,CACrBH,CAAYG,CAAAA,CAAAA,CAAK,QAAQ,EAC3B,CACF,CAEC,CAAA,QAAA,CAAAN,CACH,CAAA,CAEJ,EAEOO,EAAQR,CAAAA,GCgBf,IAAMS,GAAuC,MAAO,CAAA,MAAA,CAAO,CACzD,IAAA,CAAM,EAEN,OAAS,CAAA,MAAA,CAAO,MAAO,CAAA,EAAE,CAC3B,CAAC,CAGKC,CAAAA,EAAAA,CAAc,IAClBC,MAA0B,EAAA,CACxBC,QACEC,CAAAA,qBAAAA,CAAsB,CAACC,CAAKC,CAAAA,CAAAA,IAAS,CACnC,SAAA,CAAW,IAAI,GAEf,CAAA,gBAAA,CAAiBC,CAAIC,CAAAA,CAAAA,CAAKC,EAAUC,CAASC,CAAAA,CAAAA,CAAe,CAC1DN,CAAAA,CAAIO,GAAS,CACX,IAAMC,CAAmBD,CAAAA,CAAAA,CAAM,UAAU,GAAIL,CAAAA,CAAE,CAG/C,CAAA,GAAIM,EAAkB,CAEpB,GAAIA,CAAiB,CAAA,OAAA,GAAYH,GAAWG,CAAiB,CAAA,aAAA,GAAkBF,CAAe,CAAA,CAC5F,IAAMG,CAAkB,CAAA,CACtB,GAAGD,CAAAA,CACH,QAAAH,CACA,CAAA,aAAA,CAAAC,CACF,CAAA,CACMI,EAAe,IAAI,GAAA,CAAIH,CAAM,CAAA,SAAS,EAC5C,OAAAG,CAAAA,CAAa,GAAIR,CAAAA,CAAAA,CAAIO,CAAe,CAC7B,CAAA,CAAE,SAAWC,CAAAA,CAAa,CACnC,CACA,OAAOH,CACT,CAGA,IAAMI,CAAiC,CAAA,CACrC,EAAAT,CAAAA,CAAAA,CACA,IAAAC,CACA,CAAA,QAAA,CAAAC,CACA,CAAA,OAAA,CAAST,GACT,OAAAU,CAAAA,CAAAA,CACA,aAAAC,CAAAA,CACF,EAEMI,CAAe,CAAA,IAAI,GAAIH,CAAAA,CAAAA,CAAM,SAAS,CAC5C,CAAA,OAAAG,CAAa,CAAA,GAAA,CAAIR,EAAIS,CAAQ,CAAA,CAEtB,CAAE,SAAA,CAAWD,CAAa,CACnC,CAAC,EACH,CAAA,CAEA,mBAAmBR,CAAI,CAAA,CACrBF,CAAIO,CAAAA,CAAAA,EAAS,CACX,IAAMG,CAAAA,CAAe,IAAI,GAAA,CAAIH,EAAM,SAAS,CAAA,CAG5C,OAFgBG,CAAAA,CAAa,MAAOR,CAAAA,CAAE,CAG7B,CAAA,CAAE,UAAWQ,CAAa,CAAA,CAE5BH,CACT,CAAC,EACH,CAEA,CAAA,aAAA,CAAcL,CAAIU,CAAAA,CAAAA,CAAS,CACzBZ,CAAIO,CAAAA,CAAAA,EAAS,CACX,IAAMI,EAAWJ,CAAM,CAAA,SAAA,CAAU,GAAIL,CAAAA,CAAE,EACvC,GAAI,CAACS,CAAU,CAAA,OAAOJ,EAEtB,IAAMM,CAAAA,CAAa,CAAE,GAAGF,EAAS,OAAS,CAAA,GAAGC,CAAQ,CAAA,CAGrD,GAAI,CAACE,OAAAA,CAAQH,CAAS,CAAA,OAAA,CAASE,CAAU,CAAG,CAAA,CAC1C,IAAMJ,CAAAA,CAAkB,CACtB,GAAGE,CAAAA,CACH,OAASE,CAAAA,CACX,EAEMH,CAAe,CAAA,IAAI,GAAIH,CAAAA,CAAAA,CAAM,SAAS,CAC5C,CAAA,OAAAG,CAAa,CAAA,GAAA,CAAIR,EAAIO,CAAe,CAAA,CAE7B,CAAE,SAAA,CAAWC,CAAa,CACnC,CAEA,OAAOH,CACT,CAAC,EACH,CAAA,CAEA,UAAWL,CAAAA,CAAAA,CAAI,CAEb,OADiBD,CAAAA,EAAM,CAAA,SAAA,CAAU,IAAIC,CAAE,CAAA,EACtB,OAAWP,EAAAA,EAC9B,EAEA,MAAM,OAAA,CAAQO,CAAIU,CAAAA,CAAAA,CAAS,CACzB,IAAMD,CAAAA,CAAWV,CAAI,EAAA,CAAE,UAAU,GAAIC,CAAAA,CAAE,CACvC,CAAA,GAAI,CAACS,CAEH,CAAA,OAGF,IAAII,CAAAA,CAAiB,GAGrB,GAAIH,CAAAA,CAAS,CACX,IAAMI,EAAiBL,CAAS,CAAA,OAAA,CAC1BE,CAAa,CAAA,CAAE,GAAGG,CAAgB,CAAA,GAAGJ,CAAQ,CAAA,CAG9CE,QAAQE,CAAgBH,CAAAA,CAAU,CACrCZ,GAAAA,CAAAA,GAAM,aAAcC,CAAAA,CAAAA,CAAIU,CAAO,CAAA,CAC/BG,EAAiB,CAErB,CAAA,EAAA,CAGA,GAAI,CAAAA,EAKJ,GAAI,CACF,MAAMJ,CAAAA,CAAS,UACjB,CAAA,MAASM,CAAO,CAAA,CAEd,MAAMA,CACR,CACF,CAEA,CAAA,MAAM,cAAcf,CAAI,CAAA,CACtB,IAAMS,CAAAA,CAAWV,GAAM,CAAA,SAAA,CAAU,GAAIC,CAAAA,CAAE,EACvC,GAAKS,CAAAA,CAML,GAAI,CACF,MAAMA,CAAS,CAAA,aAAA,GACjB,CAAA,MAASM,EAAO,CAEd,MAAMA,CACR,CACF,EAEA,WAAYf,CAAAA,CAAAA,CAAI,CACd,OAAOD,GAAM,CAAA,SAAA,CAAU,GAAIC,CAAAA,CAAE,CAC/B,CAEA,CAAA,eAAA,EAAkB,CAChB,OAAO,MAAM,IAAKD,CAAAA,CAAAA,EAAM,CAAA,SAAA,CAAU,QAAQ,CAC5C,CACF,CAAA,CAAE,EACF,CACE,IAAA,CAAM,qBACR,CACF,CACF,CAGIiB,CAAAA,EAAAA,CAAQtB,EAAY,EAAA,CAEbuB,EAAuBD,OC5H9BE,EAAqB,CAAA,CAAA,CAAI,EAAK,CAAA,GAAA,CAC9BC,GAAqB,EAAK,CAAA,GAAA,CAE1BC,EAAkC,CAAA,CACtC,QAAS,MACT,CAAA,cAAA,CAAgB,QAChB,CAAA,UAAA,CAAY,SACZ,MAAQ,CAAA,GACV,CAGIC,CAAAA,EAAAA,CAAoB,EAClBC,EAA2B,CAAA,IAAc,CAAgB,aAAA,EAAA,IAAA,CAAK,KAAK,CAAA,CAAA,EAAI,EAAED,EAAiB,GAE1FE,EAAuB,CAAA,CAC3BpF,GACAqF,CAAAA,CAAAA,GACG,CAqBH,IAAMC,CAAAA,CAGF,CACF,eAAA,CAAiB,EACjB,gBAAkB,CAAA,CAAA,CAClB,GAAGtF,GAAAA,CACH,YAAa,CACX,GA5BoE,CACtE,KAAA,CAAQuF,GACDA,CACEA,CAAAA,CAAAA,CAAK,OAASC,CAAAA,CAAAA,EAAcA,GAAM,IAAQA,EAAAA,CAAAA,EAAQ,EAAE,EADzC,EAAC,CAGrB,OAAUC,CAAAA,CAAAA,EAAwC,CAChD,GAAI,CAACA,CAAU,CAAA,OAAO,GACtB,IAAMD,CAAAA,CAAOC,CACb,CAAA,OAAOD,GAAM,OAAWA,EAAAA,CAAAA,EAAM,QAAY,EAAA,CAAA,CAC5C,EACA,aAAe,CAAA,CAACC,CAA4BC,CAAAA,CAAAA,CAAkBC,KAC3CH,CAAoC,EAAA,CACnD,GAAI,CAACA,EAAM,OAAO,CAAA,CAAA,CAClB,IAAMI,CAAAA,CAAWJ,CACjB,CAAA,OAAOI,CAAU,EAAA,OAAA,EAAWA,GAAU,QAAY,EAAA,CAAA,CACpD,CACeH,EAAAA,CAAQ,EAAIC,CAAS,CAAA,MAAA,CAAS,KAEjD,CAAA,CAAA,CAWI,GAAG1F,GAAM,CAAA,WACX,CACF,CAAA,CAEM,CACJ,UAAA6F,CAAAA,CAAAA,CACA,IAAAC,CAAAA,CAAAA,CACA,aAAAC,CACA,CAAA,SAAA,CAAAC,CACA,CAAA,eAAA,CAAAC,EACA,OAAAC,CAAAA,CAAAA,CACA,UAAAC,CAAAA,CAAAA,CACA,WAAAC,CACA,CAAA,YAAA,CAAAC,CACA,CAAA,UAAA,CAAAC,EACA,WAAAC,CAAAA,CAAAA,CACA,gBAAAC,CAAAA,CAAAA,CACA,OAAAC,CACA,CAAA,IAAA,CAAAC,CACA,CAAA,GAAGC,CACL,CAAIrB,CAAAA,CAAAA,CACE,CAAE,CAAA,CAAAhF,CAAE,CAAIC,CAAAA,CAAAA,EACR,CAAA,CAACqG,CAAK,CAAIC,CAAAA,IAAAA,CAAK,OAAgBH,CAAAA,CAAI,EACnC,CAACI,CAAAA,CAASC,GAAU,CAAA,CAAInG,SAAS,CAAK,CAAA,CAAA,CACtCoG,CAAa1F,CAAAA,MAAAA,CAAO,EAAK,CACzB2F,CAAAA,CAAAA,CAAS3F,MAAO,CAAA,CAAuB,EACvC4F,CAAKC,CAAAA,CAAAA,EAEL,CAAA,CAAE,KAAMC,CAAY,CAAA,SAAA,CAAWC,EAAW,CAAA,CAAIC,IAAcxB,CAAI,CAAA,CAGhEyB,CAAkBC,CAAAA,OAAAA,CAAQ,IAAM3B,CAAcV,EAAAA,EAAAA,EAA4B,CAAA,CAACU,CAAU,CAAC,CAAA,CAGtF4B,CAAoB3C,CAAAA,CAAAA,CAAqB4C,GAAKA,CAAE,CAAA,UAAA,CAAWH,CAAe,CAAC,EAG3EI,CAAeH,CAAAA,OAAAA,CAAQ,IAAMZ,CAAAA,CAAO,CAACA,CAAK,CAAC,CAG3C,CAAA,CACJ,IAAA9C,CACA,CAAA,MAAA,CAAA8D,EAAS,CAAA,KAAA,CACT,KAAAC,EACA,CAAA,MAAA,CAAAC,EACA,CAAA,OAAA,CAAAC,GACA,SAAAC,CAAAA,EAAAA,CAAYjD,EACZ,CAAA,SAAA,CAAAkD,GAAYjD,EACd,CAAA,CAAIkB,CACEgC,CAAAA,EAAAA,CAAiBV,QACrB,IAAO,OAAOO,EAAY,EAAA,UAAA,CAAaA,GAAQJ,CAAY,CAAA,CAAII,EAC/D,CAAA,CAACA,GAASJ,CAAY,CACxB,CAIM5D,CAAAA,EAAAA,CAAWyD,QAAQ,IAChB,CAAC,cAAgB1D,CAAAA,CAAAA,CAAKyD,EAAiBH,CAAYN,CAAAA,CAAAA,CAASW,CAAmBS,CAAAA,EAAc,EACnG,CAACpE,CAAAA,CAAKyD,CAAiBH,CAAAA,CAAAA,CAAYN,EAASW,CAAmBS,CAAAA,EAAc,CAAC,CAAA,CAE3E,CAAE,IAAA3C,CAAAA,EAAAA,CAAM,aAAAtB,CAAAA,EAAAA,CAAe,YAAAkE,EAAa,CAAA,kBAAA,CAAAC,EAAoB,CAAA,OAAA,CAAApE,GAAS,UAAAqE,CAAAA,EAAW,CAAIC,CAAAA,gBAAAA,CAAiB,CACrG,QAAAvE,CAAAA,EAAAA,CACA,OAAS,CAAA,MAAO,CAAE,SAAAwE,CAAAA,CAAAA,CAAY/B,CAAiB,CAAA,GAAM,CACnD,GAAI,CACF,IAAMjC,CAAAA,CAAUkD,EAGVe,CAAgB,CAAA,OAAOV,EAAW,EAAA,UAAA,CAAaA,GAAOvD,CAASgE,CAAAA,CAAS,CAAIT,CAAAA,EAAAA,CAC5EW,EAAc,OAAOZ,EAAAA,EAAS,UAAaA,CAAAA,EAAAA,CAAKtD,EAASgE,CAAS,CAAA,CAAIV,EAEtEa,CAAAA,CAAAA,CAAuB,CAC3B,MAAQd,CAAAA,EAAAA,CACR,YAAcY,CAAAA,CAAAA,CACd,QAASN,EACX,CAAA,CAEIO,CACEA,GAAAA,CAAAA,YAAuB,SACzBC,CAAU,CAAA,IAAA,CAAOD,CAEjBC,CAAAA,CAAAA,CAAU,KAAOD,CAIrB,CAAA,CAAA,IAAME,CAAW,CAAA,MAAMzB,EAAG,OAAc,CAAA,CAAE,GAAApD,CAAAA,CAAAA,CAAK,GAAG4E,CAAU,CAAC,CAC7D,CAAA,OAAA1B,EAAW,OAAU,CAAA,CAAA,CAAA,CACrBX,CAAeY,GAAAA,CAAAA,CAAO,QAASU,CAAc,CAAA,CAACgB,CAAQ,CAAC,EAChDA,CACT,CAAA,MAASC,CAAK,CAAA,CACZ,IAAMC,CAAWD,CAAAA,CAAAA,YAAe,KAAQA,CAAAA,CAAAA,CAAM,IAAI,KAAM,CAAA,MAAA,CAAOA,CAAG,CAAC,EACnE,MAAAtC,CAAAA,GAAauC,CAAU5B,CAAAA,CAAAA,CAAO,QAASU,CAAY,CAAA,CAC7CkB,CACR,CACF,EACA,gBAAArC,CAAAA,CAAAA,CACA,gBAAkB,CAAA,CAACf,EAAgBC,CAC1Ba,GAAAA,CAAAA,EAAa,aAAgBd,GAAAA,CAAAA,CAAUC,EAAUc,CAAgB,CAAA,CAE1E,OAASY,CAAAA,CAAAA,EAAcN,EACvB,KAAO,CAAA,CAACgC,CAAcC,CAAAA,CAAAA,GAChB,EAAAD,CAAgB,EAAA,CAAA,EAChBC,CAAY,EAAA,OAAA,EAAS,SAAS,KAAK,CAAA,CAAA,CAGzC,UAAYC,CAAAA,CAAAA,EAAgB,IAAK,CAAA,GAAA,CAAI,GAAO,CAAA,CAAA,EAAKA,EAAc,GAAK,CAAA,CACpE,oBAAsB,CAAA,CAAA,CAAA,CACtB,gBAAiBhC,CAAW,CAAA,OAAA,CAAUf,CAAkB,CAAA,CAAA,CACxD,OAAQ+B,EACR,CAAA,SAAA,CAAAC,EACF,CAAC,EAGDzG,SAAU,CAAA,KACRsD,CAAqB,CAAA,QAAA,GAAW,gBAAiByC,CAAAA,CAAAA,CAAiBzD,CAAKC,CAAAA,EAAAA,CAAUC,GAASC,EAAa,CAAA,CAChG,IAAM,CACXa,EAAqB,QAAS,EAAA,CAAE,kBAAmByC,CAAAA,CAAe,EACpE,CACC,CAAA,CAAA,CAACA,CAAiBzD,CAAAA,CAAAA,CAAKC,GAAUC,EAASC,CAAAA,EAAa,CAAC,CAAA,CAE3D,IAAMgF,EAAa1C,CAAAA,CAAAA,EAAa,KAAQhB,GAAAA,EAAAA,EAAM,MAAOoC,CAAY,CAAA,CAC3DuB,EAAgBd,CAAAA,EAAAA,CAChBe,GAAgB,CAAChB,EAAAA,CACjBiB,EAAU,CAAA,CAACH,IAAcA,EAAW,CAAA,MAAA,GAAW,CAE/CI,CAAAA,EAAAA,CAAY,SAAY,CAC5BpC,CAAAA,CAAO,OAAU,CAAA,CAAA,CACjB,IAAMqC,CAAS,CAAA,MAAM1C,CAAM,CAAA,cAAA,GAE3B,GAAI,CACF,MAAMA,CAAAA,CAAM,gBACZG,CAAAA,GAAAA,CAAW,CAAI,CAAA,CAAA,CAGfjC,EAAqB,QAAS,EAAA,CAAE,OAAQyC,CAAAA,CAAAA,CAAiB,CAAE,IAAM,CAAA,CAAA,CAAG,OAAS+B,CAAAA,CAAO,CAAC,EACvF,CAAA,KAAQ,CACNvC,GAAAA,CAAW,EAAK,EAClB,CACF,CAEMwC,CAAAA,EAAAA,CAAW,IAAM,CACrBtC,CAAAA,CAAO,OAAU,CAAA,CAAA,CACjBhD,KACF,CAAA,CAEMuF,EAAU,CAAA,SAAY,CAC1BvC,CAAO,CAAA,OAAA,CAAU,CACjB,CAAA,GAAI,CACFL,CAAM,CAAA,WAAA,EACN,CAAA,IAAM0C,EAAS,MAAM1C,CAAAA,CAAM,cAAe,EAAA,CAG1C9B,EAAqB,QAAS,EAAA,CAAE,aAAcyC,CAAAA,CAAAA,CAAiB,CAAE,IAAM,CAAA,CAAA,CAAG,OAAS+B,CAAAA,CAAO,CAAC,CAE3F,CAAA,MAAM1C,CAAM,CAAA,cAAA,CAAe,CAAE,YAAc,CAAA,CAAA,CAAK,CAAC,CAAA,CACjD9B,EAAqB,QAAS,EAAA,CAAE,OAAQyC,CAAAA,CAAe,EACzD,CAAQ,KAAA,EAGV,CAAA,CA8BA,GA5BA/F,SAAU,CAAA,IAAM,CACd,UAAA,CAAW,IAAM,CACX4F,CAAAA,EACFR,CACG,CAAA,cAAA,CAAe,CAAE,YAAc,CAAA,CAAA,CAAK,CAAC,CAAA,CACrC,KAAK0C,CAAU,EAAA,CACdvC,GAAW,CAAA,CAAA,CAAI,EAGfjC,CAAqB,CAAA,QAAA,EAAW,CAAA,aAAA,CAAcyC,EAAiB,CAAE,IAAA,CAAM,CAAG,CAAA,OAAA,CAAS+B,CAAO,CAAC,EAC7F,CAAC,CAAA,CACA,MAAM,IAAM,CACXvC,GAAW,CAAA,CAAA,CAAK,EAClB,CAAC,EAEP,CAAG,CAAA,GAAG,EACR,CAAG,CAAA,CAACK,CAAYR,CAAAA,CAAAA,CAAOW,CAAe,CAAC,CAAA,CAEvCkC,mBAAoBpE,CAAAA,CAAAA,CAAK,KAAO,CAC9B,IAAA,CAAME,EAAM,EAAA,KAAA,CACZ,WAAA0D,EACA,CAAA,IAAA,CAAMrC,CACN,CAAA,OAAA,CAAS,IAAM9B,CAAqB,CAAA,QAAA,EAAW,CAAA,OAAA,CAAQyC,CAAe,CACtE,CAAA,aAAA,CAAe,IAAMzC,CAAAA,CAAqB,UAAW,CAAA,aAAA,CAAcyC,CAAe,CAAA,CAClF,YAAa,CAAC,CAACY,EACf,CAAA,kBAAA,CAAAC,EACF,CAAE,CAAA,CAAA,CAEEf,EACF,CAAA,OAAO9E,IAACmH,IAAA,CAAA,CAAK,KAAOzE,CAAAA,EAAAA,CAAY,EAGlC,GAAI,CAACmC,CACH,CAAA,OAAO7E,IAACoH,MAAA,CAAA,CAAO,MAAQ,CAAA,GAAA,CAAK,SAAUrJ,CAAE,CAAA,sBAAsB,CAAG,CAAA,CAAA,CAGnE,IAAMsJ,EAAenD,CAAAA,CAAAA,GAAW,IAAMA,CAAAA,CAAOlB,IAAM,KAAK,CAAA,CAAA,CAElDsE,EAAmB,CAAA,IACnB,OAAO1D,CAAe,EAAA,UAAA,CACjBA,CAAWwB,CAAAA,CAAAA,CAAcpC,IAAM,KAAK,CAAA,CAEtCY,CAGH2D,CAAAA,EAAAA,CACJ,OAAO1D,CAAe,EAAA,UAAA,CACpB7D,GAACwH,CAAAA,GAAAA,CAAA,CACC,SAAW/D,CAAAA,CAAAA,CACX,YAAcD,CAAAA,CAAAA,CACd,aAAcsC,EACd,CAAA,OAAA,CAASmB,EACT,CAAA,SAAA,CAAWH,GAEV,QAAAW,CAAAA,YAAAA,CAAa5D,CAAWQ,CAAAA,CAAK,EAAG,CAC/B,OAAA,CAAU7E,CAAqB,EAAA,CACzBA,CAAE,CAAA,GAAA,GAAQ,OACZsH,EAAAA,EAAAA,GAEJ,CACF,CAAC,CACH,CAAA,CAAA,CAGA9G,IAACsE,IAAA,CAAA,CAAK,IAAMD,CAAAA,CAAAA,CAAO,EAGvB,OACEvE,IAAAA,CAAA4H,QAAA,CAAA,CACG,UAAAH,EACAD,CAAAA,EAAAA,EACDtH,CAAAA,GAAAA,CAAC,OAAI,KAAO,CAAA,CAAE,SAAW,CAAA,OAAQ,EAC/B,QAAAA,CAAAA,GAAAA,CAAC2H,KAAA,CAAA,CAAO,GAAGvD,CAAY,CAAA,UAAA,CAAYsC,EAAY,CAAA,OAAA,CAASZ,GAAY,UAAY,CAAA,CAAA,CAAA,CAAO,MAAQuB,CAAAA,EAAAA,CAAc,EAC/G,CACC,CAAA,CAACR,EACA7G,EAAAA,GAAAA,CAAC4H,OAAA,CACC,KAAA,CAAK,CACL,CAAA,CAAA,OAAA,CAASjB,GACT,IAAK,CAAA,MAAA,CACL,QAAS,CAAA,QAAA,CACT,SAAUA,EAAiBC,EAAAA,EAAAA,CAC3B,OAASI,CAAAA,EAAAA,CAER,SACGjJ,CADH4I,CAAAA,EAAAA,CACK,0BACFC,CAAAA,EAAAA,CACI,4BACA,2BAHwB,CAAA,CAIlC,CAEJ,CAAA,CAAA,CAEJ,EAEMiB,EAAeC,CAAAA,UAAAA,CAAWjF,EAAoB,CAAA,CAQ7CkF,GAAQF,GC3XR,IAAMG,EAAc/G,CAAAA,MAAAA,GACzBgH,OACE,CAAA,CAAC7G,CAAKC,CAAAA,CAAAA,IAAS,CACb,QAAU,CAAA,EACV,CAAA,WAAA,CAAa6G,GAAQ,CACnB,IAAMC,CAAU9G,CAAAA,CAAAA,IAEZ8G,CAAQ,CAAA,QAAA,CAAS,MAAWD,GAAAA,CAAAA,CAAK,QAAU,CAACC,CAAAA,CAAQ,QAAS,CAAA,KAAA,CAAM,CAACC,CAAKnI,CAAAA,CAAAA,GAAUmI,CAAQF,GAAAA,CAAAA,CAAKjI,CAAK,CAAC,CAAA,GACxGmB,CAAI,CAAA,CAAE,SAAU8G,CAAK,CAAC,EAE1B,CAAA,CACA,aAAc,EAAC,CACf,eAAiBA,CAAAA,CAAAA,EAAQ,CACvB,IAAMC,CAAAA,CAAU9G,CAAI,EAAA,CAAA,CAGlB8G,EAAQ,YAAa,CAAA,MAAA,GAAWD,CAAK,CAAA,MAAA,EACrC,CAACC,CAAQ,CAAA,YAAA,CAAa,KAAM,CAAA,CAACC,EAAKnI,CAAUmI,GAAAA,CAAAA,GAAQF,CAAKjI,CAAAA,CAAK,CAAC,CAE/DmB,GAAAA,CAAAA,CAAI,CAAE,YAAA,CAAc8G,CAAK,CAAC,EAE9B,CACF,CAAA,CAAA,CACA,CACE,IAAM,CAAA,KAAA,CACN,OAASG,CAAAA,iBAAAA,CAAkB,IAAM,YAAY,CAAA,CAC7C,UAAY1G,CAAAA,CAAAA,GAAU,CACpB,QAAUA,CAAAA,CAAAA,CAAM,QAChB,CAAA,YAAA,CAAcA,EAAM,YACtB,CAAA,CAAA,CAEA,aAAe,CAAA,CAAA,CAAA,CACf,QAAS,CACX,CACF,CACF,CAAA,CCrCA,IAAM2G,EAAAA,CAAeC,IAAK,CAAA,CAAC,CAAE,EAAAC,CAAAA,CAAAA,CAAI,QAAAjI,CAAAA,CAAS,IACxCP,GAACyI,CAAAA,IAAAA,CAAA,CAAK,EAAA,CAAID,EAAK,QAAAjI,CAAAA,CAAAA,CAAS,CACzB,CAAA,CAED+H,GAAa,WAAc,CAAA,cAAA,CAGpB,SAASI,EAAAA,CAAeC,EAAuB,CACpD,IAAMC,CAAqB,CAAA,GAE3B,GAAID,CAAAA,CACF,IAASE,IAAAA,CAAAA,CAAI,EAAGA,CAAIF,CAAAA,CAAAA,CAAM,MAAQE,CAAAA,CAAAA,EAAAA,CAChC,GAAIF,CAAME,CAAAA,CAAC,CAAM,GAAA,IAAA,EAASF,EAAME,CAAC,CAAA,CAAsB,IAAS,GAAA,SAAA,CAC9DD,EAAOC,CAAC,CAAA,CAAIF,CAAME,CAAAA,CAAC,UACTF,CAAME,CAAAA,CAAC,CAAwC,CAAA,QAAA,CAAU,CACnE,GAAM,CAAE,QAAAtI,CAAAA,CAAAA,CAAU,GAAGuI,CAAK,CAAA,CAAIH,CAAME,CAAAA,CAAC,CACrCD,CAAAA,CAAAA,CAAOC,CAAC,CAAA,CAAI,CACV,GAAGC,CAAAA,CACH,QAAUJ,CAAAA,EAAAA,CAAenI,CAAQ,CACnC,EACF,CAAO,KAAA,CACL,GAAM,CAAE,KAAA,CAAAwI,CAAO,CAAA,KAAA,CAAAC,EAAO,GAAGF,CAAK,CAAIH,CAAAA,CAAAA,CAAME,CAAC,CACnCI,CAAAA,CAAAA,CAAYF,CAAQ/I,CAAAA,GAAAA,CAACsI,GAAA,CAAa,EAAA,CAAIS,CAAQ,CAAA,QAAA,CAAAC,EAAM,CAAkBA,CAAAA,CAAAA,CAE5EJ,CAAOC,CAAAA,CAAC,EAAI,CACV,GAAGC,CACH,CAAA,KAAA,CAAOG,CACT,EACF,CAIJ,OAAOL,CACT,CAGO,SAASM,EAAAA,CACdP,CACAC,CAAAA,CAAAA,CAAyD,EACzDO,CAAAA,CAAAA,CAAoB,EAAC,CACrB,CACA,IAAWC,IAAAA,CAAAA,IAAQT,CAAO,CAAA,CACxB,IAAMpI,CAAY6I,CAAAA,CAAAA,EAA4C,QAE9D,CAAA,GAAI,MAAM,OAAQ7I,CAAAA,CAAQ,CAAG,CAAA,CAC3B,IAAM2H,CACHkB,CAAAA,CAAAA,CAA4B,IAAS,GAAA,OAAA,EAAWA,EAAM,GAAM,CAAA,CAAC,GAAGD,CAAAA,CAASC,EAAM,GAAa,CAAA,CAAID,CACnGD,CAAAA,EAAAA,CAAU3I,EAAUqI,CAAQV,CAAAA,CAAI,EAClC,CAAA,KAAWkB,GACTR,CAAO,CAAA,IAAA,CAAK,MAAO,CAAA,MAAA,CAAOQ,EAAuB,CAAE,OAAA,CAAAD,CAAQ,CAAC,CAAC,EAEjE,CAEA,OAAOP,CACT,CC/CA,IAAMS,GAAUd,IAAK,CAAA,SAAiB9K,CAAqB,CAAA,CACzD,GAAM,CAAE,KAAA,CAAAkL,CAAQ,CAAA,GAAI,KAAAzK,CAAAA,CAAAA,CAAO,OAAAoL,CAAAA,CAAQ,EAAI7L,CACjC8L,CAAAA,CAAAA,CAAWC,WAAY,EAAA,CACvBC,EAAmB1K,MAAsB,EAAA,CACzC2K,CAAsB3K,CAAAA,MAAAA,GAEtB4K,CAAe1E,CAAAA,OAAAA,CAAQ,IACvBwE,CAAAA,CAAiB,UAAYd,CACxBc,CAAAA,CAAAA,CAAiB,OAAUP,CAAAA,EAAAA,CAAUO,EAAiB,OAAO,CAAA,CAAI,EAAC,EAE3EA,EAAiB,OAAUd,CAAAA,CAAAA,CACpBO,EAAUP,CAAAA,CAAK,GACrB,CAACA,CAAK,CAAC,CAAA,CAEJiB,EAAgB3E,OAAQ,CAAA,IACxBwE,CAAiB,CAAA,OAAA,GAAYd,EACxBc,CAAiB,CAAA,OAAA,CAAUf,EAAee,CAAAA,CAAAA,CAAiB,OAAO,CAAI,CAAA,EAExEf,CAAAA,EAAAA,CAAeC,CAAK,CAC1B,CAAA,CAACA,CAAK,CAAC,EAEJ,CAAE,QAAA,CAAAkB,CAAU,CAAA,YAAA,CAAAC,EAAc,WAAAC,CAAAA,CAAAA,CAAa,eAAAC,CAAAA,CAAgB,EAAIhC,EAAY,EAAA,CAEvEiC,CAAeC,CAAAA,WAAAA,CAClBhC,GAAmB,CAElB,IAAMiC,CAAcjC,CAAAA,CAAAA,CAAK,KAAKE,CAAO,EAAA,CAACyB,CAAS,CAAA,QAAA,CAASzB,CAAG,CAAC,CAAA,CAE5D,GAAI+B,CAAAA,CAAa,CAEf,IAAMC,CAAAA,CAAQT,CAAa,CAAA,IAAA,CAAKP,GAAQA,CAAK,CAAA,GAAA,GAAQe,CAAW,CAAA,CAC1DE,EAAWD,CAAO,EAAA,OAAA,CAAU,CAAC,GAAGA,EAAM,OAASD,CAAAA,CAAW,CAAI,CAAA,CAACA,CAAW,CAChFJ,CAAAA,CAAAA,CAAYM,CAAQ,EACtB,MAEEN,CAAY7B,CAAAA,CAAI,EAEpB,CAAA,CACA,CAACyB,CAAcE,CAAAA,CAAAA,CAAUE,CAAW,CACtC,EAuBA,OArBA9K,SAAAA,CAAU,IAAM,CAEd,GAAIyK,CAAoB,CAAA,OAAA,GAAYH,CAAS,CAAA,QAAA,CAC3C,OAEFG,CAAoB,CAAA,OAAA,CAAUH,CAAS,CAAA,QAAA,CAEvC,IAAMa,CAAQT,CAAAA,CAAAA,CAAa,IAAKP,CAAAA,CAAAA,EAAQG,EAAS,QAAaH,GAAAA,CAAAA,CAAK,KAAK,CAAA,CAExE,GAAIgB,CAAO,CAAA,CACT,IAAMhC,CAAAA,CAAMgC,EAAM,GACZjB,CAAAA,CAAAA,CAAUiB,CAAM,CAAA,OAAA,CAAA,CAGlBN,EAAa,CAAC,CAAA,GAAM1B,CAAO,EAAA,CAACyB,EAAS,KAAM,CAAA,CAACS,CAAGzB,CAAAA,CAAAA,GAAMyB,IAAMnB,CAAQN,CAAAA,CAAC,CAAC,CAAA,IACvEmB,EAAgB,CAAC5B,CAAG,CAAC,CAAA,CACrB2B,EAAYZ,CAAO,CAAA,EAEvB,CACF,CAAA,CAAG,CAACQ,CAAcJ,CAAAA,CAAAA,CAAS,QAAUO,CAAAA,CAAAA,CAAcD,EAAUG,CAAiBD,CAAAA,CAAW,CAAC,CAAA,CAEtFT,CAEAtJ,CAAAA,GAAAA,CAAC,KAAI,CAAA,CAAA,SAAA,CAAU,mCAAmC,KAAO,CAAA,CAAE,MAAQ,CAAA,oBAAqB,EACtF,QAAAA,CAAAA,GAAAA,CAACmH,IAAA,CAAA,EAAK,EACR,CAKFnH,CAAAA,GAAAA,CAACuK,IAAA,CAAA,CACC,MAAOrM,CACP,CAAA,KAAA,CAAO,CAAE,WAAA,CAAa,MAAO,CAC7B,CAAA,KAAA,CAAO0L,CACP,CAAA,IAAA,CAAK,SACL,QAAUC,CAAAA,CAAAA,CACV,YAAcC,CAAAA,CAAAA,CACd,aAAcG,CAChB,CAAA,CAEJ,CAAC,CAAA,CAMMO,GAAQnB,GC5FT,IAAA,CAAE,IAAAlC,CAAAA,EAAK,EAAIsD,CAEXC,CAAAA,EAAAA,CAAqC,CAAC,CAAE,SAAAnK,GAAS,CAAA,GAAM,CAC3D,GAAM,CAAE,iBAAAoK,CAAAA,CAAAA,CAAmB,MAAAC,CAAAA,CAAAA,CAAQ,SAAAC,CAAS,CAAA,CAAIC,CAAiB3F,CAAAA,CAAAA,EAAKA,CAAC,CACjE,CAAA,CAAE,SAAA4F,CAAAA,CAAU,EAAIC,CAAS,EAAA,CACzB,CAAE,CAAA,CAAAjN,CAAE,CAAIC,CAAAA,CAAAA,EAEd,CAAA,OAAI+M,EAEA/K,GAAC,CAAA,KAAA,CAAA,CACC,KAAO,CAAA,CACL,QAAS,MACT,CAAA,cAAA,CAAgB,QAChB,CAAA,UAAA,CAAY,SACZ,MAAQ,CAAA,GACV,CAEA,CAAA,QAAA,CAAAA,IAACmH,EAAA,CAAA,EAAK,CACR,CAAA,CAAA,CAIAwD,IAAsB,IAAwBE,EAAAA,CAAAA,CACzCtK,GAGJqK,CAAAA,CAAAA,CAIE5K,IAAC0H,UAAA,CAAA,CAAuB,QAAAnH,CAAAA,GAAAA,CAAAA,CAATqK,CAAkB,CAH/B5K,CAAAA,GAAAA,CAACiL,KAAA,CAAA,CAAM,MAAOA,KAAM,CAAA,sBAAA,CAAwB,WAAalN,CAAAA,CAAAA,CAAE,yBAAyB,CAAG,CAAA,CAIlG,CAEOmN,CAAAA,EAAAA,CAAQR,GCjCf,IAAMS,EAAiB,CAAA,IAAM,CAC3B,GAAM,CAAE,CAAApN,CAAAA,GAAE,EAAIC,CAAe,EAAA,CACvBoN,CAAWC,CAAAA,WAAAA,GACX,CAAE,UAAA,CAAAC,CAAY,CAAA,OAAA,CAAAC,EAAS,UAAAC,CAAAA,CAAW,CAAIV,CAAAA,CAAAA,CAAiB3F,GAAKA,CAAC,CAAA,CAC7DsG,CAAOF,CAAAA,CAAAA,GAEPG,CAAgB,CAAA,IAAM,CAC1BJ,CAAAA,GACAF,CAASI,CAAAA,CAAU,EACrB,CAAA,CAEMG,EAAiBnM,CAAqB,EAAA,CAAA,CACtCA,CAAE,CAAA,GAAA,GAAQ,SAAWA,CAAE,CAAA,GAAA,GAAQ,GACjCA,IAAAA,CAAAA,CAAE,gBACFkM,CAAAA,CAAAA,EAEJ,EAAA,CAAA,CAEME,EAAyBpM,CAAqB,EAAA,CAAA,CAC9CA,CAAE,CAAA,GAAA,GAAQ,SAAWA,CAAE,CAAA,GAAA,GAAQ,GACjCA,GAAAA,CAAAA,CAAE,iBAEN,CAAA,CAEMmJ,CAA4B,CAAA,CAChC,CACE,GAAK,CAAA,GAAA,CACL,IAAM3I,CAAAA,GAAAA,CAAC6L,eAAA,EAAe,CAAA,CACtB,KACE7L,CAAAA,GAAAA,CAAC,KAAE,IAAK,CAAA,QAAA,CAAS,QAAU,CAAA,CAAA,CAAG,QAAS0L,CAAe,CAAA,SAAA,CAAWC,CAC9D,CAAA,QAAA,CAAA5N,IAAE,wBAAwB,CAAA,CAC7B,CAEJ,CACF,EAEA,OACEiC,GAAAA,CAAC,KACC,CAAA,CAAA,QAAA,CAAAA,IAAC8L,QAAA,CAAA,CACC,IAAM,CAAA,CACJ,WAAY,CACZ,CAAA,CAAA,KAAA,CAAAnD,CACF,CAAA,CACA,UAAU,aAEV,CAAA,QAAA,CAAA3I,GAAC,CAAA,GAAA,CAAA,CACC,KAAK,QACL,CAAA,QAAA,CAAU,CACV,CAAA,OAAA,CAASR,GAAK,CACZA,CAAAA,CAAE,cAAe,GACnB,EACA,SAAWoM,CAAAA,CAAAA,CAEX,QAAA9L,CAAAA,IAAAA,CAACC,MAAA,CAAM,KAAA,CAAM,QACX,CAAA,QAAA,CAAA,CAAAC,IAAC,MAAM,CAAA,CAAA,QAAA,CAAAyL,CAAM,EAAA,WAAA,CAAY,EACzBzL,GAAC+L,CAAAA,YAAAA,CAAA,CAAa,KAAA,CAAO,CAAE,QAAU,CAAA,MAAO,CAAG,CAAA,CAAA,CAAA,CAC7C,EACF,CACF,CAAA,CAAA,CACF,CAEJ,CAAA,CAEOC,GAAQb,GC7Df,GAAM,CAAE,IAAA,CAAAc,EAAK,CAAA,CAAItL,WAOXuL,EAAkCzO,CAAAA,GAAAA,EAAS,CAC/C,GAAM,CAAE,MAAA0O,CAAAA,CAAAA,CAAQ,OAAAC,CAAAA,CAAQ,EAAI3O,GACtB,CAAA,CAAE,CAAE,CAAA,CAAIO,GACR,CAAA,CAAE,SAAAqO,CAAAA,CAAAA,CAAW,OAAAzB,CAAQ,CAAA,SAAA,CAAA0B,GAAU,CAAA,CAAIxB,EAAiB3F,CAAKA,EAAAA,CAAC,CAC1D,CAAA,CAAE,KAAAnC,CAAM,CAAA,SAAA,CAAA+H,CAAU,CAAA,CAAIC,GACtBuB,CAAAA,CAAAA,CAAcC,cAAe,EAAA,CAE7BC,EAAezJ,CAAM,EAAA,MAAA,CAAOoG,CAAQ+C,EAAAA,CAAAA,GAAS/C,CAAI,CAAK,EAAA,CAAA,CAAI,CAE1DsD,CAAAA,CAAAA,CACJ,OAAON,CAAY,EAAA,UAAA,CACfA,CAAQK,CAAAA,CAAY,EACpBA,CAAc,EAAA,GAAA,CAAIrD,CAAS,GAAA,CACzB,MAAOA,CAAK,CAAA,IAAA,CACZ,KAAOiD,CAAAA,CAAAA,CAAYjD,EAAK,OAAUA,CAAAA,CAAAA,CAAK,EACzC,CAAA,CAAE,EAGFuD,CAAYC,CAAAA,CAAAA,EAA2B,CAC3CC,CAAAA,GACAP,GAAUM,CAAAA,CAAK,EACjB,CAAA,CAEMC,EAAa,IAAM,CAEvBN,CAAY,CAAA,aAAA,CAAc,CACxB,SAAWO,CAAAA,CAAAA,EAAS,CAClB,IAAMtL,EAAWsL,CAAM,CAAA,QAAA,CACvB,OAAO,CAACtL,EAAS,QAAS,CAAA,gBAAgB,CAAK,EAAA,CAACA,EAAS,QAAS,CAAA,uBAAuB,CAC3F,CACF,CAAC,EACH,CAAA,CAEA,OAAAvC,SAAAA,CAAU,IAAM,CACd,GAAI+D,CAAQA,EAAAA,CAAAA,CAAK,OAAS,CAAG,CAAA,CAC3B,IAAM+J,CAAAA,CAAUV,EAAYrJ,CAAK,CAAA,CAAC,CAAE,CAAA,OAAA,CAAUA,EAAK,CAAC,CAAA,CAAE,EAClDA,CAAAA,CAAAA,CAAK,MAAMoG,CAAQ,EAAA,MAAA,CAAOA,CAAK,CAAA,OAAA,EAAWA,EAAK,EAAE,CAAA,GAAM,MAAOwB,CAAAA,CAAM,CAAC,CAEvE0B,EAAAA,GAAAA,CAAUS,CAAO,EAErB,CACF,CAAG,CAAA,CAAC/J,CAAI,CAAC,EAGPlD,IAACC,CAAAA,KAAAA,CAAA,CACC,QAAA,CAAA,CAAAC,IAACiM,EAAA,CAAA,CAAM,QAAE,CAAA,CAAA,CAAA,kBAAkB,EAAE,CAC7BjM,CAAAA,GAAAA,CAACgN,MAAA,CAAA,CACC,WAAU,CACV,CAAA,CAAA,gBAAA,CAAiB,OACjB,CAAA,KAAA,CAAOpC,EACP,WAAa,CAAA,CAAA,CAAE,wBAAwB,CAAA,CACvC,QAASG,CACT,CAAA,KAAA,CAAO,CAAE,KAAA,CAAO,OAAQ,CACxB,CAAA,OAAA,CAAS2B,CACT,CAAA,QAAA,CAAUC,EACZ,CACF,CAAA,CAAA,CAEJ,CAEOM,CAAAA,EAAAA,CAAQf,GCxEN,IAAA,EAAA,CAAA,wrZAAA,CADT,IAAMgB,EAAsBzP,CAAAA,CAAAA,EACnBuC,IAAC,KAAI,CAAA,CAAA,GAAA,CAAKmN,EAAS,CAAA,GAAA,CAAI,OAAQ,GAAG1P,CAAAA,CAAO,CAG3C2P,CAAAA,CAAAA,CAAQF,GCEf,IAAMG,EAAe9E,CAAAA,IAAAA,CAAwB,CAAC,CAAE,KAAA,CAAA+E,CAAO,CAAA,QAAA,CAAAC,EAAU,YAAAC,CAAAA,CAAAA,CAAc,SAAAC,CAAAA,CAAU,IACvF3N,IAAC,CAAA,KAAA,CAAA,CACC,SAAU,CAAA,wEAAA,CACV,MAAO,CACL,MAAA,CAAQ,MACR,CAAA,OAAA,CAAS,OACT,aAAe,CAAA,QAAA,CACf,cAAgB,CAAA,QAAA,CAChB,eAAgB,WAChB,CAAA,oBAAA,CAAsB,WACxB,CAAA,CAEA,UAAAA,IAAC,CAAA,KAAA,CAAA,CAAI,SAAW,CAAA,CAAA,yBAAA,EAA4B2N,EAAY,gBAAmB,CAAA,EAAE,CAC3E,CAAA,CAAA,QAAA,CAAA,CAAAzN,IAACyI,IAAA,CAAA,CACC,EAAI+E,CAAAA,CAAAA,CACJ,UAAU,8GACV,CAAA,KAAA,CAAO,CACL,UAAA,CAAY,gDACZ,OAASC,CAAAA,CAAAA,CAAY,EAAM,CAAA,CAAA,CAC3B,UAAuB,eACzB,CAAA,CAEA,QAAAzN,CAAAA,GAAAA,CAACoN,EAAA,CACC,KAAA,CAAO,EACP,CAAA,KAAA,CAAO,CACL,SAAW,CAAA,SAAA,CACX,OAAS,CAAA,OAAA,CACT,MAAQ,CAAA,4CAAA,CACR,UAAY,CAAA,+CACd,EACF,CACF,CAAA,CAAA,CACCE,CACCtN,EAAAA,GAAAA,CAAC,OACC,SAAU,CAAA,8BAAA,CACV,KAAO,CAAA,CACL,WAAY,+CACZ,CAAA,OAAA,CAASyN,CAAY,CAAA,CAAA,CAAI,EACzB,KAAOA,CAAAA,CAAAA,CAAY,KAAQ,CAAA,MAAA,CAC3B,WAAYA,CAAY,CAAA,KAAA,CAAQ,MAChC,CAAA,SAAA,CAAWA,EAAY,kBAAqB,CAAA,eAC9C,CAEA,CAAA,QAAA,CAAAzN,IAACyI,IAAA,CAAA,CACC,EAAI+E,CAAAA,CAAAA,CACJ,UAAU,sPACV,CAAA,KAAA,CAAOF,CACP,CAAA,KAAA,CAAO,CACL,aAAe,CAAA,QAAA,CACf,UAAY,CAAA,+BACd,EAEC,QAAAA,CAAAA,CAAAA,CACH,CACF,CAAA,CAAA,CAAA,CAEJ,EACAtN,GAAC,CAAA,KAAA,CAAA,CACC,SAAU,CAAA,6BAAA,CACV,MAAO,CACL,MAAA,CAAQuN,CAAY,EAAA,CAACE,EAAY,MAAS,CAAA,KAAA,CAC1C,UAAY,CAAA,kDACd,EAEA,QAAA3N,CAAAA,IAAAA,CAAC,KAAI,CAAA,CAAA,SAAA,CAAU,iDACb,QAAAE,CAAAA,CAAAA,GAAAA,CAAC,KACC,CAAA,CAAA,SAAA,CAAU,2CACV,KAAO,CAAA,CACL,OAAS,CAAA,CAACuN,GAAYE,CAAY,CAAA,CAAA,CAAI,CACtC,CAAA,UAAA,CAAY,mDACd,CACF,CAAA,CAAA,CACCF,CACCzN,EAAAA,IAAAA,CAAC,OACC,SAAU,CAAA,kCAAA,CACV,KAAO,CAAA,CACL,QAAS2N,CAAY,CAAA,CAAA,CAAI,CACzB,CAAA,SAAA,CAAWA,EAAY,kBAAqB,CAAA,eAAA,CAC5C,UAAY,CAAA,+CACd,EAEA,QAAAzN,CAAAA,CAAAA,GAAAA,CAAC,KAAI,CAAA,CAAA,SAAA,CAAU,kCAAkC,CACjDA,CAAAA,GAAAA,CAAC,MAAK,CAAA,CAAA,SAAA,CAAU,mDAAmD,KAAOuN,CAAAA,CAAAA,CACvE,QAAAA,CAAAA,CAAAA,CACH,EACAvN,GAAC,CAAA,KAAA,CAAA,CAAI,SAAU,CAAA,iCAAA,CAAkC,GACnD,CAEJ,CAAA,CAAA,CAAA,CACF,CACF,CAAA,CAAA,CACD,EAEDqN,EAAa,CAAA,WAAA,CAAc,cAE3B,CAAA,IAAOK,GAAQL,EClCT,CAxDA,IAAA,CAAE,KAAAlG,EAAM,CAAA,KAAA,CAAAjJ,EAAM,CAAA,CAAIuM,EAClB,CAAE,MAAA,CAAAkD,EAAQ,CAAA,KAAA,CAAAC,GAAO,OAAAC,CAAAA,EAAQ,CAAS,CAAA,CAAA,CAAA,MAAA,CAkBlCC,GAA6CrQ,CAAS,EAAA,CAC1D,GAAM,CACJ,YAAAsQ,CACA,CAAA,aAAA,CAAAC,CACA,CAAA,KAAA,CAAArF,EACA,WAAAsF,CAAAA,CAAAA,CACA,QAAA1N,CAAAA,CAAAA,CACA,SAAA2N,CACA,CAAA,MAAA,CAAA/B,CACA,CAAA,iBAAA,CAAAgC,EACA,KAAAb,CAAAA,CAAAA,CACA,QAAAC,CAAAA,CACF,EAAI9P,CACE,CAAA,CACJ,KAAO,CAAA,CAAE,iBAAA2Q,CAAkB,CAAA,WAAA,CAAAC,CAAY,CACzC,EAAInQ,EAAM,CAAA,QAAA,EACJ,CAAA,CACJ,kBAAAyM,CACA,CAAA,QAAA,CAAU2D,CACV,CAAA,WAAA,CAAaC,EACb,YAAAf,CAAAA,CAAAA,CACA,SAAAC,CAAAA,CAAAA,CACA,WAAAe,CACA,CAAA,QAAA,CAAA3D,CACF,CAAA,CAAIC,GAEE,CAAA,CAAC2D,CAAmBC,CAAAA,CAAoB,EAAIrQ,QAASoP,CAAAA,CAAS,CAE9DkB,CAAAA,CAAAA,CAAa,SAAY,CAC7BD,CAAAA,CAAqB,CAACD,CAAiB,EACvCD,CAAW,CAAA,CAAE,SAAW,CAAA,CAACC,CAAkB,CAAC,EAC9C,CAEMG,CAAAA,CAAAA,CAAsBb,GAAeQ,CAAqB,EAAA,CAAA,CAAA,CAEhE,OACEzO,IAAAA,CAAM,SAAL,CACC,QAAA,CAAA,CAAAA,IAAC8N,CAAAA,EAAAA,CAAA,CACC,WAAagB,CAAAA,CAAAA,CACb,KAAM,CAAA,OAAA,CACN,QAAS,IACT,CAAA,SAAA,CAAWH,CACX,CAAA,KAAA,CAAOP,GAAYI,CACnB,CAAA,KAAA,CAAO,CACL,MAAA,CAAQ,QACR,SAAW,CAAA,QAAA,CACX,SAAW,CAAA,MAAA,CACX,iBAAkB,CAClB,CAAA,gBAAA,CAAkB,OAClB,CAAA,gBAAA,CAAkBD,EAClB,UAAY,CAAA,+CACd,CAEA,CAAA,QAAA,CAAA,CAAArO,IAAC0N,EAAA,CAAA,CACC,KAAOJ,CAAAA,CAAAA,CACP,SAAUC,CACV,CAAA,YAAA,CAAcC,CACd,CAAA,SAAA,CAAWiB,GAAqB,CAClC,CAAA,CAAA,CAAA,CACAzO,GAACwK,CAAAA,EAAAA,CAAA,CAAQ,KAAO7B,CAAAA,CAAAA,CAAO,OAASqF,CAAAA,CAAAA,CAAe,GACjD,CACAlO,CAAAA,IAAAA,CAAM,CAAL,CAAA,MAAA,CAAA,CACC,UAAAE,GAAC2N,CAAAA,EAAAA,CAAA,CACC,KAAA,CAAO,CACL,OAAS,CAAA,QAAA,CACT,UAAYS,CAAAA,CACd,CAEA,CAAA,QAAA,CAAAtO,IAAC,CAAA,KAAA,CAAA,CAAI,UAAU,0CACb,CAAA,QAAA,CAAA,CAAAA,IAACC,CAAAA,KAAAA,CAAA,CAAM,IAAK,CAAA,OAAA,CAAQ,KAAOC,CAAAA,GAAAA,CAAC6O,QAAA,CAAQ,IAAA,CAAK,UAAW,CAAA,CAAA,CAAI,UAAU,MAC/D,CAAA,QAAA,CAAA,CAAAD,CACC5O,EAAAA,GAAAA,CAAC4H,OAAA,CACC,IAAA,CAAK,MACL,CAAA,IAAA,CAAM6G,EAAoBzO,GAAC8O,CAAAA,kBAAAA,CAAA,EAAmB,CAAA,CAAK9O,IAAC+O,gBAAA,CAAA,EAAiB,CACrE,CAAA,KAAA,CAAO,CAAE,QAAU,CAAA,MAAO,CAC1B,CAAA,OAAA,CAASJ,EACX,CAEDhE,CAAAA,CAAAA,GAAsB,IAAwB,EAAA,CAACE,GAC9C7K,GAACiN,CAAAA,EAAAA,CAAA,CAAW,MAAA,CAAQd,EAAQ,OAASgC,CAAAA,CAAAA,CAAmB,CAEzDF,CAAAA,CAAAA,EAAa,MAAM,GAAIe,CAAAA,CAAAA,EAAShP,GAAC,CAAA,MAAA,CAAA,CAAsB,SAAAgP,CAAM,CAAA,QAAA,CAAA,CAAlBA,CAAM,CAAA,GAAqB,CAAO,CAChF,CAAA,CAAA,CAAA,CACAlP,IAACC,CAAAA,KAAAA,CAAA,CAAM,IAAK,CAAA,OAAA,CAAQ,KAAOC,CAAAA,GAAAA,CAAC6O,QAAA,CAAQ,IAAA,CAAK,UAAW,CAAA,CAAA,CACjD,UAAAZ,CAAa,EAAA,KAAA,EAAO,GAAIe,CAAAA,CAAAA,EAAShP,IAAC,MAAsB,CAAA,CAAA,QAAA,CAAAgP,CAAM,CAAA,QAAA,CAAA,CAAlBA,EAAM,GAAqB,CAAO,CAC/EhP,CAAAA,GAAAA,CAACgM,GAAA,EAAW,CAAA,CAAA,CACd,CACF,CAAA,CAAA,CAAA,CACF,EACAhM,GAAC6N,CAAAA,EAAAA,CAAA,CACC,KAAA,CAAO,CACL,QAAU,CAAA,MAAA,CACV,OAAS,CAAA,WAAA,CACT,UAAW,oBACX,CAAA,UAAA,CAAY,uDACd,CAAA,CAEA,SAAA7N,GAACiP,CAAAA,QAAAA,CAAA,CACC,QAAA,CACEjP,IAACmH,EAAA,CAAA,CACC,KAAO,CAAA,CACL,QAAS,MACT,CAAA,cAAA,CAAgB,QAChB,CAAA,UAAA,CAAY,SACZ,MAAQ,CAAA,OACV,CACF,CAAA,CAAA,CAGF,SAAAnH,GAACkL,CAAAA,EAAAA,CAAA,CAAa,QAAA,CAAA3K,EAAS,CACzB,CAAA,CAAA,CACF,CACF,CAAA,CAAA,CAAA,CAAA,CACF,CAEJ,CAEO2O,CAAAA,EAAAA,CAAQpB,GC7ITqB,IAAAA,EAAAA,CAAmE1R,GAAS,EAAA,CAChF,GAAM,CAAE,IAAA,CAAA8F,CAAM,CAAA,MAAA,CAAA6L,EAAQ,QAAA7O,CAAAA,CAAS,CAAI9C,CAAAA,GAAAA,CAC7B,CAAE,IAAMoH,CAAAA,CAAAA,CAAY,SAAAkG,CAAAA,CAAU,EAAIhG,GAAcxB,CAAAA,CAAAA,CAAM6L,CAAM,CAAA,CAC5D,CAAE,CAAArR,CAAAA,CAAE,CAAIC,CAAAA,CAAAA,GAEd,OAAI+M,CAAAA,CAEA/K,GAACmH,CAAAA,IAAAA,CAAA,CACC,KAAO,CAAA,CACL,OAAS,CAAA,MAAA,CACT,eAAgB,QAChB,CAAA,UAAA,CAAY,QACZ,CAAA,MAAA,CAAQ,GACV,CACF,CAAA,CAAA,CAICtC,CAIE7E,CAAAA,GAAAA,CAAA0H,SAAA,CAAG,QAAA,CAAAnH,CAAS,CAAA,CAAA,CAHVP,IAACoH,MAAA,CAAA,CAAO,MAAO,CAAA,KAAA,CAAM,SAAUrJ,CAAE,CAAA,sBAAsB,CAAG,CAAA,CAIrE,EAEOsR,EAAQF,CAAAA,GCvBFG,IAAAA,EAAAA,CAAiBrO,OAAoB,CAACG,CAAAA,CAAKC,CAAS,IAAA,CAC/D,KAAM,IAAI,GAAA,CACV,OAAS,CAAA,IAAI,IACb,MAAQkO,CAAAA,CAAAA,EAAQlO,CAAI,EAAA,CAAE,KAAK,GAAIkO,CAAAA,CAAI,CAAK,EAAA,CAAA,CAAA,CACxC,KAAKA,CAAM,CAAA,CACTnO,CAAI,CAAA,CACF,KAAM,IAAI,GAAA,CAAIC,CAAI,EAAA,CAAE,IAAI,CAAE,CAAA,GAAA,CAAIkO,CAAM,CAAA,CAAA,CAAI,CAC1C,CAAC,EACH,CACA,CAAA,IAAA,CAAKA,EAAM,CACTnO,CAAAA,CAAI,CAAE,IAAA,CAAM,IAAI,GAAIC,CAAAA,CAAAA,EAAM,CAAA,IAAI,EAAE,GAAIkO,CAAAA,CAAAA,CAAM,CAAK,CAAA,CAAE,CAAC,EACpD,CAAA,CACA,OAAU,EAAA,CACRnO,EAAI,CAAE,IAAA,CAAM,IAAI,GAAM,CAAC,EACzB,CACA,CAAA,eAAA,CAAgBmO,EAAM,CACpB,GAAM,CAAE,OAAA,CAAAC,CAAQ,CAAInO,CAAAA,CAAAA,EACpB,CAAA,OAAO,CAACmO,CAAQ,CAAA,GAAA,CAAID,CAAI,CAC1B,EACA,WAAYA,CAAAA,CAAAA,CAAM,CAChB,GAAM,CAAE,OAAAC,CAAAA,CAAQ,CAAInO,CAAAA,CAAAA,GACpB,OAAImO,CAAAA,CAAQ,GAAID,CAAAA,CAAI,EACX,CAETnO,CAAAA,EAAAA,CAAAA,CAAI,CAAE,OAAA,CAAS,IAAI,GAAIoO,CAAAA,CAAO,CAAE,CAAA,GAAA,CAAID,CAAI,CAAE,CAAC,CACpC,CAAA,CAAA,CAAA,CACT,EACA,OAAQA,CAAAA,CAAAA,CAAM,CACZ,GAAM,CAAE,IAAAE,CAAAA,CAAAA,CAAM,OAAAD,CAAAA,CAAQ,EAAInO,CAAI,EAAA,CACxBqO,CAAU,CAAA,IAAI,IAAID,CAAI,CAAA,CACtBE,CAAa,CAAA,IAAI,IAAIH,CAAO,CAAA,CAClCE,CAAQ,CAAA,MAAA,CAAOH,CAAI,CACnBI,CAAAA,CAAAA,CAAW,MAAOJ,CAAAA,CAAI,EACtBnO,CAAI,CAAA,CAAE,IAAMsO,CAAAA,CAAAA,CAAS,QAASC,CAAW,CAAC,EAC5C,CACF,EAAE,ECxBK,SAASC,EAAAA,CAAUnS,EAAuB,CAC/C,GAAM,CACJ,OAAA,CAAAoS,EACA,SAAA/I,CAAAA,CAAAA,CACA,SAAAgJ,CAAAA,CAAAA,CACA,WAAAC,CACA,CAAA,MAAA,CAAA7L,CACA,CAAA,WAAA,CAAA8L,EAAc,cACd,CAAA,UAAA,CAAAC,CAAa,CAAA,cAAA,CACb,mBAAAC,CACA,CAAA,iBAAA,CAAAC,CACA,CAAA,GAAGC,CACL,CAAI3S,CAAAA,CAAAA,CAEE4S,CAAMpL,CAAAA,OAAAA,CAAQ,IAAMqL,CAAW,EAAA,CAAG,EAAE,EACpC,CAAE,IAAA,CAAAC,CAAM,CAAA,IAAA,CAAAC,EAAM,MAAAC,CAAAA,CAAAA,CAAQ,OAAAC,CAAAA,CAAQ,EAAIpB,EAAe,EAAA,CAGvDrQ,SAAU,CAAA,IACD,IAAM,CACXyR,CAAAA,CAAQL,CAAG,EACb,EACC,CAACA,CAAAA,CAAKK,CAAO,CAAC,EAEjB,IAAMjB,CAAAA,CAAOgB,CAAOJ,CAAAA,CAAG,EACjB,CAACM,CAAAA,CAAgBC,CAAiB,CAAA,CAAIvS,SAAS,CAAK,CAAA,CAAA,CACpDwS,CAAmB,CAAA,OAAOhB,GAAY,UAEtCiB,CAAAA,CAAAA,CAAQ5G,WAAY,CAAA,SAAY,CACpCqG,CAAKF,CAAAA,CAAG,CACR,CAAA,MAAMP,MACR,CAAA,CAAG,CAACO,CAAAA,CAAKE,EAAMT,CAAS,CAAC,CAEnBiB,CAAAA,CAAAA,CAAQ7G,YAAY,IAAM,CAC9BsG,CAAKH,CAAAA,CAAG,EACV,CAAG,CAAA,CAACA,CAAKG,CAAAA,CAAI,CAAC,CAERQ,CAAAA,CAAAA,CAAkC9G,WAAY,CAAA,SAAY,CAC9D6G,CAAM,EAAA,CACN,MAAMhB,CAAAA,KACR,CAAG,CAAA,CAACgB,CAAOhB,CAAAA,CAAU,CAAC,CAEhBkB,CAAAA,CAAAA,CAAgB/G,WAAY,CAAA,SAAY,CAC5C,GAAI,CACF0G,CAAkB,CAAA,CAAA,CAAI,EACtB,MAAM9J,CAAAA,KACR,CAAA,MAASzE,EAAO,CAEd,MAAMA,CACR,CAAA,OAAE,CACAuO,CAAkB,CAAA,CAAA,CAAK,EACzB,CACF,EAAG,CAAC9J,CAAS,CAAC,CAAA,CAERoK,EACJhN,CAAW,GAAA,KAAA,CAAA,CACTA,CAEApE,CAAAA,IAAAA,CAAC,OAAI,SAAU,CAAA,iBAAA,CACb,QAAAE,CAAAA,CAAAA,GAAAA,CAAC4H,OAAA,CAAO,IAAA,CAAK,SAAU,CAAA,OAAA,CAAS+I,EAAiB,GAAGT,CAAAA,CAAoB,OAASe,CAAAA,CAAAA,CAC9E,SAAAjB,CACH,CAAA,CAAA,CACAhQ,GAAC4H,CAAAA,MAAAA,CAAA,CAAQ,GAAGuI,CAAAA,CAAmB,OAASa,CAAAA,CAAAA,CACrC,SAAAf,CACH,CAAA,CAAA,CAAA,CACF,CAGEkB,CAAAA,CAAAA,CACJnR,IAACoR,MAAA,CAAA,CAAQ,GAAGhB,CAAAA,CAAa,KAAMX,CAAM,CAAA,MAAA,CAAQyB,CAAc,CAAA,OAAA,CAASF,EACjE,QAAAH,CAAAA,CAAAA,CAAmBhB,CAAQ,CAAA,CAAE,KAAMkB,CAAM,CAAC,CAAIlB,CAAAA,CAAAA,CACjD,EAGF,OAAO,CACL,EAAIQ,CAAAA,CAAAA,CACJ,KAAMS,CACN,CAAA,IAAA,CAAMC,CACN,CAAA,cAAA,CAAAJ,EACA,MAAQQ,CAAAA,CACV,CACF,CCrFO,SAASE,GACd5T,CACA,CAAA,CACA,GAAM,CAAE,QAAAoS,CAAS,CAAA,IAAA,CAAA1L,CAAM,CAAA,SAAA,CAAAmN,EAAW,SAAAxK,CAAAA,CAAAA,CAAW,SAAAyK,CAAAA,CAAAA,CAAW,WAAAxB,CAAY,CAAA,GAAGK,CAAY,CAAA,CAAI3S,EACjF,CAAC+T,CAAAA,CAAqBC,CAAsB,CAAA,CAAIpT,SAAsB,EAAiB,CACzF,CAAA,CAACqT,CAAY,CAAIpN,CAAAA,IAAAA,CAAK,OAAgB,EAAA,CAC1CoN,EAAevN,CAAQuN,EAAAA,CAAAA,CAEvB,IAAMb,CAAAA,CAAmB,OAAOhB,CAAY,EAAA,UAAA,CAEtC,CAAE,EAAA,CAAAvO,EAAI,IAAAiP,CAAAA,CAAAA,CAAM,IAAAC,CAAAA,CAAAA,CAAM,OAAAmB,CAAO,CAAA,CAAI/B,EAAU,CAAA,CAC3C,GAAGQ,CACH,CAAA,OAAA,CAASwB,CACP5R,EAAAA,GAAAA,CAACsE,KAAA,CAAM,GAAGgN,CAAW,CAAA,IAAA,CAAMI,EACxB,QAAAb,CAAAA,CAAAA,CAAmBhB,CAAQ2B,CAAAA,CAAAA,CAAqBI,CAAS,CAAI/B,CAAAA,CAAAA,CAChE,CAEF,CAAA,SAAA,CAAW,SAAY,CACrB,GAAI,CACF,IAAM9I,EAAS,MAAM2K,CAAAA,CAAa,cAAe,EAAA,CACjD,MAAM5K,CAAYC,GAAAA,CAAAA,CAAQyK,CAAmB,CAAA,CAC7CD,KACAf,CAAAA,CAAAA,GACF,CAAA,MAASnO,EAAO,CAEd,MAAMA,CACR,CACF,EACA,UAAY,CAAA,IAAM,CAChB0N,CAAAA,GAAa2B,CAAY,EAC3B,CACF,CAAC,CAAA,CAEKG,EAAW3H,WACdkC,CAAAA,CAAAA,EAAsF,CACrF,GAAM,CAAE,aAAA0F,CAAAA,CAAAA,CAAe,WAAAC,CAAAA,CAAY,EAAI3F,CAAW,EAAA,EAE9C2F,CAAAA,CAAAA,EACFN,EAAuBM,CAAW,CAAA,CAGhCD,CACFJ,EAAAA,CAAAA,CAAa,eAAeI,CAAa,CAAA,CAG3CvB,CAAK,GACP,EACA,CAACmB,CAAAA,CAAcnB,CAAI,CACrB,EAEA,OAAO,CACL,EAAAjP,CAAAA,CAAAA,CACA,KAAMuQ,CACN,CAAA,IAAA,CAAArB,CACA,CAAA,MAAA,CAAAmB,CACF,CACF,CC1EA,IAAMK,GAAeC,IAAK,CAAA,IAAM,OAAO,4BAAsB,CAAC,CACxDC,CAAAA,EAAAA,CAAiBD,IAAK,CAAA,IAAM,OAAO,8BAAwB,CAAC,CAC5DE,CAAAA,EAAAA,CAAiBF,KAAK,IAAM,OAAO,8BAAwB,CAAC,EAE3DG,EACLtS,CAAAA,IAAAA,CAACuS,MAAA,CAAA,CACC,UAAArS,GAACsS,CAAAA,KAAAA,CAAA,CAAM,KAAA,CAAK,GAAC,OAAStS,CAAAA,GAAAA,CAACgS,EAAA,CAAA,EAAa,EAAI,CACxChS,CAAAA,GAAAA,CAACsS,KAAA,CAAA,CAAM,KAAK,QAAS,CAAA,OAAA,CAAStS,GAACkS,CAAAA,EAAAA,CAAA,EAAe,CAAI,CAAA,CAAA,CAClDlS,GAACsS,CAAAA,KAAAA,CAAA,CAAM,IAAK,CAAA,YAAA,CAAa,OAAStS,CAAAA,GAAAA,CAACmS,GAAA,EAAe,CAAA,CAAI,CACxD,CAAA,CAAA,ECTII,IAAAA,EAAAA,CAAWN,KAAK,IAAM,OAAO,wBAAkB,CAAC,EAChDO,EAAaP,CAAAA,IAAAA,CAAK,IAAM,OAAO,0BAAoB,CAAC,CAAA,CACpDQ,EAAWR,CAAAA,IAAAA,CAAK,IAAM,OAAO,wBAAkB,CAAC,CAAA,CAChDS,GAAaT,IAAK,CAAA,IAAM,OAAO,0BAAoB,CAAC,CAEnDU,CAAAA,EAAAA,CACL7S,IAACuS,CAAAA,MAAAA,CAAA,CACC,QAAArS,CAAAA,CAAAA,GAAAA,CAACsS,KAAA,CAAA,CAAM,MAAK,CAAC,CAAA,CAAA,OAAA,CAAStS,GAAC4S,CAAAA,QAAAA,CAAA,CAAS,EAAG,CAAA,MAAA,CAAO,CAAI,CAAA,CAAA,CAC9C5S,IAACsS,KAAA,CAAA,CAAM,IAAK,CAAA,MAAA,CAAO,QAAStS,GAACuS,CAAAA,EAAAA,CAAA,EAAS,CAAA,CAAI,CAC1CvS,CAAAA,GAAAA,CAACsS,KAAA,CAAA,CAAM,KAAK,UAAW,CAAA,OAAA,CAAStS,GAACwS,CAAAA,EAAAA,CAAA,EAAW,CAAI,CAAA,CAAA,CAChDxS,GAACsS,CAAAA,KAAAA,CAAA,CAAM,IAAK,CAAA,MAAA,CAAO,OAAStS,CAAAA,GAAAA,CAACyS,GAAA,EAAS,CAAA,CAAI,CAC1CzS,CAAAA,GAAAA,CAACsS,MAAA,CAAM,IAAA,CAAK,YAAa,CAAA,OAAA,CAAStS,IAAC0S,EAAA,CAAA,EAAW,CAAI,CAAA,CAAA,CAAA,CACpD,ECLF,IAAMG,GAA8BpV,GAAS,EAAA,CAC3C,GAAM,CAAE,YAAAqV,CAAY,CAAA,CAAIrV,GAClB2N,CAAAA,CAAAA,CAAWC,aACX,CAAA,CAAE,CAAE,CAAA,CAAIrN,GAEd,CAAA,OACEgC,GAAC,CAAA,KAAA,CAAA,CAAI,UAAU,aACb,CAAA,QAAA,CAAAA,GAACoH,CAAAA,MAAAA,CAAA,CACC,MAAO,CAAA,KAAA,CACP,KAAM,CAAA,KAAA,CACN,SAAU,CAAE,CAAA,mBAAmB,CAC/B,CAAA,KAAA,CACE0L,GACE9S,GAAC4H,CAAAA,MAAAA,CAAA,CACC,IAAA,CAAK,UACL,OAAS,CAAA,IAAM,CACbwD,CAAAA,CAAS0H,CAAW,EACtB,CAAA,CAEC,QAAE,CAAA,CAAA,CAAA,qBAAqB,EAC1B,CAGN,CAAA,CAAA,CACF,CAEJ,CAAA,CAEOC,GAAQF,OC1BT,CAAE,MAAA,CAAAG,EAAO,CAAA,CAAIhG,OAEbiG,EAAuB,CAAA,IAAM,CACjC,GAAM,CAAE,CAAAlV,CAAAA,GAAE,CAAIC,CAAAA,CAAAA,GAERkV,CAA6C,CAAA,CACjD,CACE,GAAA,CAAK,WACL,KAAOnV,CAAAA,GAAAA,CAAE,iBAAiB,CAAA,CAC1B,UAAW,OACX,CAAA,KAAA,CAAO,GACT,CAAA,CACA,CACE,GAAK,CAAA,OAAA,CACL,KAAOA,CAAAA,GAAAA,CAAE,cAAc,CACvB,CAAA,SAAA,CAAW,OACX,CAAA,KAAA,CAAO,GACT,CACA,CAAA,CACE,GAAK,CAAA,QAAA,CACL,MAAOA,GAAE,CAAA,eAAe,CACxB,CAAA,SAAA,CAAW,SACX,KAAO,CAAA,GACT,CACA,CAAA,CACE,IAAK,OACL,CAAA,KAAA,CAAOA,GAAE,CAAA,cAAc,EACvB,SAAW,CAAA,OAAA,CACX,KAAO,CAAA,GACT,EACA,CACE,GAAA,CAAK,SACL,CAAA,KAAA,CAAOA,IAAE,gBAAgB,CAAA,CACzB,SAAW,CAAA,SAAA,CACX,OAAO6O,CAAe,CAAA,CACpB,OAAO5M,GAAAA,CAACc,GAAA,CAAqB,QAAA,CAAA8L,CAAM,CAAA,CACrC,CACF,CACA,CAAA,CACE,GAAK,CAAA,UAAA,CACL,MAAO7O,GAAE,CAAA,iBAAiB,CAC1B,CAAA,SAAA,CAAW,WACX,MAAO6O,CAAAA,CAAAA,CAAe,CACpB,OAAO5M,IAACc,EAAA,CAAA,CAAqB,QAAA8L,CAAAA,CAAAA,CAAM,CACrC,CACF,CAAA,CACA,CACE,GAAA,CAAK,gBACL,KAAO7O,CAAAA,GAAAA,CAAE,qBAAqB,CAAA,CAC9B,UAAW,OACX,CAAA,KAAA,CAAO,GACP,CAAA,MAAA,CAAO6O,EAAe,CACpB,OAAOuG,EAAMvG,CAAAA,CAAK,EAAE,MAAO,CAAA,qBAAqB,CAClD,CACF,CACF,CAEA,CAAA,OACE5M,GAACoT,CAAAA,IAAAA,CAAA,CAAK,KAAM,CAAA,0BAAA,CACV,QAAApT,CAAAA,GAAAA,CAACqT,EAAA,CAUC,UAAA,CAAW,oBACX,CAAA,MAAA,CAAO,KACP,IAAK,CAAA,QAAA,CACL,OAASH,CAAAA,CAAAA,CACT,YAAY,OACZ,CAAA,OAAA,CAAS,CACP,GAAA,CAAK,wBACL,MAAQ,CAAA,KACV,CACA,CAAA,WAAA,CAAalQ,IAAS,CACpB,KAAA,CAAOA,CAAM,EAAA,KAAA,CACb,MAAOA,CAAM,EAAA,IACf,CACA,CAAA,CAAA,UAAA,CAAYmB,GACVrE,IAACwE,CAAAA,IAAAA,CAAA,CAAK,IAAA,CAAMH,EAAM,MAAO,CAAA,QAAA,CACvB,QAAAnE,CAAAA,CAAAA,GAAAA,CAACsE,KAAK,IAAL,CAAA,CAAU,KAAOvG,CAAAA,GAAAA,CAAE,iBAAiB,CAAG,CAAA,IAAA,CAAK,OAC3C,CAAA,QAAA,CAAAiC,IAACE,KAAA,CAAA,CAAM,UAAU,CAAA,CAAA,CAAA,CAAC,CACpB,CAAA,CAAA,CACAF,GAACsE,CAAAA,IAAAA,CAAK,KAAL,CAAU,KAAA,CAAOvG,GAAE,CAAA,cAAc,EAAG,IAAK,CAAA,OAAA,CACxC,QAAAiC,CAAAA,GAAAA,CAACE,MAAA,CAAM,UAAA,CAAU,CAAC,CAAA,CAAA,CAAA,CACpB,EACAF,GAACsE,CAAAA,IAAAA,CAAK,IAAL,CAAA,CAAU,MAAOvG,GAAE,CAAA,eAAe,CAAG,CAAA,IAAA,CAAK,SACzC,QAAA+B,CAAAA,IAAAA,CAACkN,MAAA,CAAA,CAAO,WAAU,CAAC,CAAA,CAAA,KAAA,CAAO,CAAE,KAAA,CAAO,OAAQ,CACzC,CAAA,QAAA,CAAA,CAAAhN,GAACgT,CAAAA,EAAAA,CAAA,CAAO,KAAM,CAAA,KAAA,CAAM,QAAG,CAAA,KAAA,CAAA,CAAA,CACvBhT,IAACgT,EAAA,CAAA,CAAO,KAAM,CAAA,MAAA,CAAO,gBAAI,CAC3B,CAAA,CAAA,CAAA,CACF,CACAhT,CAAAA,GAAAA,CAACsE,KAAK,IAAL,CAAA,CAAU,KAAOvG,CAAAA,GAAAA,CAAE,cAAc,CAAG,CAAA,IAAA,CAAK,OACxC,CAAA,QAAA,CAAAiC,IAACE,KAAA,CAAA,CAAM,UAAU,CAAA,CAAA,CAAA,CAAC,EACpB,CACF,CAAA,CAAA,CAAA,CAEJ,CACF,CAAA,CAEJ,EAEOoT,EAAQC,CAAAA,CAAAA,CAAYN,EAAkB,CAAA,CAAE,SAAU,CAAK,CAAA,CAAC,2/lDC7GxD,SAASO,EAAAA,EAAiB,CAC/B,IAAM7O,CAAAA,CAAKC,CAAM,EAAA,CACX,CAAE,QAAA6O,CAAAA,CAAS,CAAI3I,CAAAA,CAAAA,GAGf,CAAE,MAAA,CAAA4I,CAAQ,CAAA,mBAAA,CAAAC,CAAoB,CAAI1O,CAAAA,OAAAA,CAAQ,IAAM,CACpD,IAAM2O,CAAc,CAAA,IAAI,eAAgB,CAAA,MAAA,CAAO,SAAS,MAAM,CAAA,CAC9D,OAAO,CACL,OAAQA,CAAY,CAAA,GAAA,CAAI,QAAQ,CAAA,CAChC,oBAAqBA,CAAY,CAAA,GAAA,CAAI,cAAc,CAAA,GAAM,MAC3D,CACF,CAAA,CAAG,EAAE,EAGC,CAACC,CAAAA,CAAgBC,CAAiB,CAAA,CAAIzV,SAASsV,CAAmB,CAAA,CAGlE,CAAE,IAAA,CAAA3Q,EAAM,SAAA+H,CAAAA,CAAAA,CAAW,KAAA1I,CAAAA,CAAM,EAAI0R,QAAS,CAAA,CAC1C,QAAU,CAAA,CAAC,eAAgBL,CAAM,CAAA,CACjC,OAAS,CAAA,IAAM/O,EAAG,GAAuB,CAAA,CAAA,+BAAA,EAAkC+O,CAAM,CAAA,CAAE,EACnF,OAAS,CAAA,CAAC,CAACA,CAAAA,CACX,MAAO,CACP,CAAA,CAAA,oBAAA,CAAsB,CACtB,CAAA,CAAA,kBAAA,CAAoB,EACtB,CAAC,CAAA,CAGDzU,SAAU,CAAA,IAAM,CACV+D,CAAM,EAAA,KAAA,CACRyQ,CAASzQ,CAAAA,CAAAA,CAAK,KAAK,CACVX,CAAAA,CAAAA,EAAS,UAAcA,GAAAA,CAAAA,EAAUA,EAAM,QAAkC,EAAA,MAAA,GAAW,GAC7FyR,EAAAA,CAAAA,CAAkB,EAAI,EAE1B,CAAA,CAAG,CAAC9Q,CAAAA,CAAMX,EAAOoR,CAAQ,CAAC,CAG1B,CAAA,IAAMO,EAAsB/O,OAC1B,CAAA,IAAM,IAAM,CAGV,GAFA6O,CAAkB,CAAA,CAAA,CAAK,CAEnBH,CAAAA,CAAAA,CAAqB,CACvB,IAAMpS,CAAAA,CAAM,IAAI,GAAA,CAAI,OAAO,QAAS,CAAA,IAAI,CACxCA,CAAAA,CAAAA,CAAI,aAAa,MAAO,CAAA,cAAc,CACtC,CAAA,MAAA,CAAO,QAAQ,YAAa,CAAA,EAAI,CAAA,EAAA,CAAIA,EAAI,QAAS,EAAC,EACpD,CACF,EACA,CAACoS,CAAmB,CACtB,CAAA,CAEA,OAAO,CACL,SAAA,CAAW,CAAC,CAACD,EACb,SAAA3I,CAAAA,CAAAA,CACA,KAAA1I,CAAAA,CAAAA,CACA,eAAAwR,CACA,CAAA,mBAAA,CAAAG,CACF,CACF,CChDMC,IAAAA,EAAAA,CAA0B,CAAC,CAAE,MAAAjF,GAAO,CAAA,KAAA,CAAA1B,CAAM,CAAA,GAAM,CACpD,GAAM,CAAE,KAAArP,CAAAA,CAAAA,CAAO,aAAAuP,CAAa,CAAA,CAAI1C,CAAiB3F,CAAAA,CAAAA,EAAKA,CAAC,CACjD,CAAA,CAAE,CAAApH,CAAAA,CAAE,EAAIC,CAAe,EAAA,CACvB,CAAE,SAAA,CAAA+M,EAAW,cAAA8I,CAAAA,CAAAA,CAAgB,mBAAAG,CAAAA,CAAoB,EAAIR,EAAe,EAAA,CAE1E,GAAIzI,CAAAA,CACF,OACE/K,GAAC,CAAA,KAAA,CAAA,CAAI,SAAU,CAAA,oDAAA,CACb,SAAAA,GAACmH,CAAAA,IAAAA,CAAA,EAAK,CAAA,CACR,EAIJ,GAAIlJ,CAAAA,CAAO,CACT,IAAMiW,EAAW,CAAC,CAAC,MAAO,CAAA,QAAA,CAAS,KAC7BC,CAAO3G,CAAAA,CAAAA,CAEb,OAAK0G,CAAAA,EAKL,OAAO,QAAS,CAAA,IAAA,CAAO,CAAG,EAAA,MAAA,CAAO,SAAS,MAAM,CAAA,EAAG,MAAO,CAAA,QAAA,CAAS,QAAQ,CAAIC,CAAAA,EAAAA,CAAI,CAE5E,CAAA,CAAA,IAAA,EANEnU,IAAC4S,QAAA,CAAA,CAAS,OAAO,CAAA,CAAA,CAAA,CAAC,GAAIpF,CAAc,CAAA,CAO/C,CAEA,OACE1N,KAAC,KAAI,CAAA,CAAA,SAAA,CAAU,iDACb,CAAA,QAAA,CAAA,CAAAE,IAAC,KAAI,CAAA,CAAA,SAAA,CAAU,+BAAiC,CAAA,QAAA,CAAAgP,IAAM,CACtDhP,CAAAA,GAAAA,CAAC,KAAI,CAAA,CAAA,SAAA,CAAU,yBACb,QAAAF,CAAAA,IAAAA,CAACC,KAAA,CAAA,CAAM,MAAM,QACX,CAAA,QAAA,CAAA,CAAAC,GAACoN,CAAAA,CAAAA,CAAA,CAAK,KAAO,CAAA,EAAA,CAAI,CAChBE,CAAAA,CAAAA,EAAStN,IAAC,MAAK,CAAA,CAAA,SAAA,CAAU,oBAAsB,CAAA,QAAA,CAAAsN,EAAM,CACxD,CAAA,CAAA,CAAA,CACF,CACAtN,CAAAA,GAAAA,CAAC,OAAI,SAAU,CAAA,qDAAA,CACb,QAAAA,CAAAA,GAAAA,CAAC,OAAI,GAAKoU,CAAAA,EAAAA,CAAe,GAAI,CAAA,YAAA,CAAa,UAAU,SAAU,CAAA,CAAA,CAChE,CACApU,CAAAA,GAAAA,CAAC,OAAI,SAAU,CAAA,kDAAA,CACb,QAAAA,CAAAA,GAAAA,CAAC,OAAI,SAAU,CAAA,kDAAA,CACb,QAAAA,CAAAA,GAAAA,CAAC,OAAI,SAAU,CAAA,uBAAA,CACb,QAAAF,CAAAA,IAAAA,CAAC,OAAI,SAAU,CAAA,8BAAA,CACb,QAAAE,CAAAA,CAAAA,GAAAA,CAAC,OAAI,SAAU,CAAA,MAAA,CACZ,QAAA6T,CAAAA,CAAAA,EACC7T,IAACqU,KAAA,CAAA,CACC,MAAM,CAAA,CAAA,CAAA,CACN,SAAQ,CACR,CAAA,CAAA,OAAA,CAAStW,CAAE,CAAA,qBAAqB,EAChC,IAAK,CAAA,OAAA,CACL,OAASiW,CAAAA,CAAAA,CACX,EAEJ,CACAhU,CAAAA,GAAAA,CAACW,UAAW,CAAA,KAAA,CAAX,CAAiB,KAAO,CAAA,CAAA,CAAI,QAAA5C,CAAAA,CAAAA,CAAE,gBAAgB,CAAE,CAAA,CAAA,CACjDiC,GAAC,CAAA,KAAA,CAAA,CAAI,UAAU,MACb,CAAA,QAAA,CAAAF,IAACwE,CAAAA,IAAAA,CAAA,CAAK,MAAO,CAAA,UAAA,CAAW,YAAa,CAAA,KAAA,CACnC,UAAAtE,GAACsE,CAAAA,IAAAA,CAAK,IAAL,CAAA,CAAU,MAAOvG,CAAE,CAAA,iBAAiB,CAAG,CAAA,IAAA,CAAK,WAAW,KAAO,CAAA,CAAC,CAAE,QAAA,CAAU,EAAK,CAAC,CAAA,CAChF,QAAAiC,CAAAA,GAAAA,CAACE,MAAA,EAAM,CAAA,CACT,CACAF,CAAAA,GAAAA,CAACsE,KAAK,IAAL,CAAA,CAAU,KAAOvG,CAAAA,CAAAA,CAAE,iBAAiB,CAAG,CAAA,IAAA,CAAK,UAAW,CAAA,KAAA,CAAO,CAAC,CAAE,QAAA,CAAU,CAAK,CAAA,CAAC,EAChF,QAAAiC,CAAAA,GAAAA,CAACE,KAAM,CAAA,QAAA,CAAN,EAAe,CAClB,CAAA,CAAA,CACAF,GAACsE,CAAAA,IAAAA,CAAK,KAAL,CACC,QAAA,CAAAtE,GAAC4H,CAAAA,MAAAA,CAAA,CAAO,KAAK,CAAA,CAAA,CAAA,CAAC,IAAK,CAAA,SAAA,CAAU,MAAM,OAAQ,CAAA,QAAA,CAAS,QACjD,CAAA,QAAA,CAAA7J,EAAE,eAAe,CAAA,CACpB,CACF,CAAA,CAAA,CAAA,CACF,EACF,CACAiC,CAAAA,GAAAA,CAAC6O,OAAA,CAAA,CAAQ,MAAK,CAAC,CAAA,CAAA,MAAA,CAAM,CAClB,CAAA,CAAA,QAAA,CAAA9Q,EAAE,mBAAmB,CAAA,CACxB,CACAiC,CAAAA,GAAAA,CAAC,OAAI,SAAU,CAAA,kCAAA,CACb,QAAAF,CAAAA,IAAAA,CAAC8H,OAAA,CACC,KAAA,CAAK,CACL,CAAA,CAAA,KAAA,CAAM,QACN,IAAM,CAAA,CAAA,EAAG0M,GAAO,CAAA,gBAAA,EAAmBA,GAAO,CAAkB,eAAA,EAAA,MAAA,CAAO,QAAS,CAAA,IAAI,GAChF,MAAO,CAAA,OAAA,CAEP,QAAAtU,CAAAA,CAAAA,GAAAA,CAACoN,EAAA,CAAK,KAAA,CAAO,EAAI,CAAA,CAAA,CAChBrP,EAAE,wBAAwB,CAAA,CAAA,CAC7B,CACF,CAAA,CAAA,CAAA,CACF,EACF,CACF,CAAA,CAAA,CACF,CACF,CAAA,CAAA,CAEJ,EAEOwW,EAAQN,CAAAA","file":"index.js","sourcesContent":["import { PlusOutlined } from '@ant-design/icons'\nimport type { InputRef } from 'antd'\nimport { Input, Space, Tag, theme } from 'antd'\nimport type { ChangeEvent, CSSProperties, FC } from 'react'\nimport { useEffect, useRef, useState } from 'react'\n\nimport { useTranslation } from '@/locale'\n\nexport interface DynamicTagsProps {\n initialTags?: string[]\n addable?: boolean\n removable?: boolean\n // 返回 Promise。如果返回 Promise.resolve(true),则添加; 如果返回 Promise.resolve(false) 或 Promise.reject,则不添加\n addCallback?: (addedTag: string) => Promise<boolean>\n // 返回 Promise。如果返回 Promise.resolve(true),则删除; 如果返回 Promise.resolve(false) 或 Promise.reject,则不删除\n removeCallback?: (removedTag: string) => Promise<boolean>\n}\n\nconst DynamicTags: FC<DynamicTagsProps> = props => {\n const { initialTags, addable, removable, addCallback, removeCallback } = props\n const { t } = useTranslation()\n const { token } = theme.useToken()\n const [tags, setTags] = useState<string[]>([])\n const [inputVisible, setInputVisible] = useState(false)\n const [inputValue, setInputValue] = useState('')\n const [editInputIndex, setEditInputIndex] = useState(-1)\n const [editInputValue, setEditInputValue] = useState<string>('')\n const inputRef = useRef<InputRef>(null)\n const editInputRef = useRef<InputRef>(null)\n\n useEffect(() => {\n setTags(initialTags ?? [])\n }, [initialTags])\n\n useEffect(() => {\n if (inputVisible) {\n inputRef.current?.focus()\n }\n }, [inputVisible])\n\n useEffect(() => {\n editInputRef.current?.focus()\n }, [inputValue])\n\n const handleClose = async (removedTag: string) => {\n const success = await removeCallback?.(removedTag)\n\n if (success) {\n const newTags = tags.filter(tag => tag !== removedTag)\n setTags(newTags)\n }\n }\n\n const showInput = () => {\n setInputVisible(true)\n }\n\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value)\n }\n\n const handleInputConfirm = async () => {\n if (inputValue && tags.indexOf(inputValue) === -1) {\n const success = await addCallback?.(inputValue)\n\n if (success) {\n setTags([...tags, inputValue])\n }\n }\n\n setInputVisible(false)\n setInputValue('')\n }\n\n const handleEditInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n setEditInputValue(e.target.value)\n }\n\n const handleEditInputConfirm = () => {\n const newTags = [...tags]\n newTags[editInputIndex] = editInputValue\n setTags(newTags)\n setEditInputIndex(-1)\n setInputValue('')\n }\n\n const tagInputStyle: CSSProperties = {\n width: 78,\n verticalAlign: 'top',\n }\n\n const tagPlusStyle: CSSProperties = {\n background: token.colorBgContainer,\n borderStyle: 'dashed',\n }\n\n return (\n <Space wrap size={[0, 8]}>\n <Space wrap size={[0, 8]}>\n {tags.map((tag, index) => {\n if (editInputIndex === index) {\n return (\n <Input\n ref={editInputRef}\n key={tag}\n size=\"small\"\n style={tagInputStyle}\n value={editInputValue}\n onChange={handleEditInputChange}\n onBlur={handleEditInputConfirm}\n onPressEnter={handleEditInputConfirm}\n />\n )\n }\n\n return (\n <Tag\n key={tag}\n closable={removable}\n style={{ userSelect: 'none' }}\n onClose={async e => {\n e.preventDefault()\n await handleClose(tag)\n }}\n >\n <span\n onDoubleClick={e => {\n if (index !== 0) {\n setEditInputIndex(index)\n setEditInputValue(tag)\n e.preventDefault()\n }\n }}\n >\n {tag}\n </span>\n </Tag>\n )\n })}\n </Space>\n {addable &&\n (inputVisible ? (\n <Input\n ref={inputRef}\n type=\"text\"\n size=\"small\"\n style={tagInputStyle}\n value={inputValue}\n onChange={handleInputChange}\n onBlur={handleInputConfirm}\n onPressEnter={handleInputConfirm}\n />\n ) : (\n <Tag style={tagPlusStyle} onClick={showInput}>\n <PlusOutlined />\n {t('global.add')}\n </Tag>\n ))}\n </Space>\n )\n}\n\nexport default DynamicTags\n","import { Typography } from 'antd'\nimport type { ParagraphProps } from 'antd/es/typography/Paragraph'\nimport type { FC } from 'react'\nimport { useState } from 'react'\n\nexport type ExpandableParagraphProps = Omit<ParagraphProps, 'ellipsis' | 'className'>\n\nconst ExpandableParagraph: FC<ExpandableParagraphProps> = props => {\n const { children, ...restProps } = props\n const [expanded, setExpanded] = useState(false)\n\n return (\n <Typography.Paragraph\n {...restProps}\n className=\"mb-0\"\n ellipsis={{\n rows: 2,\n expandable: 'collapsible',\n expanded,\n onExpand: (_, info) => {\n setExpanded(info.expanded)\n },\n }}\n >\n {children}\n </Typography.Paragraph>\n )\n}\n\nexport default ExpandableParagraph\n","import { isEqual } from 'lodash-es'\nimport { create } from 'zustand'\nimport { devtools, subscribeWithSelector } from 'zustand/middleware'\n\nimport type { InfiniteListPayload } from './InfiniteList'\n\n// Infinite Query 更新函数类型\ntype InfiniteQueryRefetchFunction = () => void | Promise<unknown>\ntype InfiniteQueryFetchNextPageFunction = () => void | Promise<unknown>\n\n// InfiniteList 实例信息\ninterface InfiniteListInstance {\n id: string\n url: string\n queryKey: readonly unknown[]\n payload: InfiniteListPayload\n refetch: InfiniteQueryRefetchFunction\n fetchNextPage: InfiniteQueryFetchNextPageFunction\n}\n\n// 简化的状态接口\ninterface InfiniteListState {\n // 实例管理\n instances: Map<string, InfiniteListInstance>\n\n // 核心方法\n registerInstance(\n id: string,\n url: string,\n queryKey: readonly unknown[],\n refetch: InfiniteQueryRefetchFunction,\n fetchNextPage: InfiniteQueryFetchNextPageFunction,\n ): void\n unregisterInstance(id: string): void\n updatePayload(id: string, payload: InfiniteListPayload): void\n getPayload(id: string): InfiniteListPayload\n refetch(id: string, payload?: InfiniteListPayload): Promise<void>\n fetchNextPage(id: string): Promise<void>\n\n // 工具方法\n getInstance(id: string): InfiniteListInstance | undefined\n getAllInstances(): InfiniteListInstance[]\n}\n\n// 稳定的默认 payload 引用,避免未注册时每次返回新对象导致 getSnapshot 无限循环\nconst DEFAULT_PAYLOAD: InfiniteListPayload = Object.freeze({\n page: 0,\n // 这里使用冻结的空对象,确保引用稳定\n filters: Object.freeze({}) as Record<string, never>,\n})\n\n// 创建简化的 store\nconst createStore = () =>\n create<InfiniteListState>()(\n devtools(\n subscribeWithSelector((set, get) => ({\n instances: new Map(),\n\n registerInstance(id, url, queryKey, refetch, fetchNextPage) {\n set(state => {\n const existingInstance = state.instances.get(id)\n\n // 如果实例已存在,只更新函数\n if (existingInstance) {\n // 仅当引用发生变化时才更新,避免无意义 setState\n if (existingInstance.refetch !== refetch || existingInstance.fetchNextPage !== fetchNextPage) {\n const updatedInstance = {\n ...existingInstance,\n refetch,\n fetchNextPage,\n }\n const newInstances = new Map(state.instances)\n newInstances.set(id, updatedInstance)\n return { instances: newInstances }\n }\n return state\n }\n\n // 创建新实例\n const instance: InfiniteListInstance = {\n id,\n url,\n queryKey,\n payload: DEFAULT_PAYLOAD,\n refetch,\n fetchNextPage,\n }\n\n const newInstances = new Map(state.instances)\n newInstances.set(id, instance)\n\n return { instances: newInstances }\n })\n },\n\n unregisterInstance(id) {\n set(state => {\n const newInstances = new Map(state.instances)\n const existed = newInstances.delete(id)\n\n if (existed) {\n return { instances: newInstances }\n }\n return state\n })\n },\n\n updatePayload(id, payload) {\n set(state => {\n const instance = state.instances.get(id)\n if (!instance) return state\n\n const newPayload = { ...instance.payload, ...payload }\n\n // 只有当 payload 真正改变时才更新\n if (!isEqual(instance.payload, newPayload)) {\n const updatedInstance = {\n ...instance,\n payload: newPayload,\n }\n\n const newInstances = new Map(state.instances)\n newInstances.set(id, updatedInstance)\n\n return { instances: newInstances }\n }\n\n return state\n })\n },\n\n getPayload(id) {\n const instance = get().instances.get(id)\n return instance?.payload ?? DEFAULT_PAYLOAD\n },\n\n async refetch(id, payload) {\n const instance = get().instances.get(id)\n if (!instance) {\n console.warn(`InfiniteList instance with id \"${id}\" not found`)\n return\n }\n\n let payloadChanged = false\n\n // 更新 payload 如果提供且确实有变化\n if (payload) {\n const currentPayload = instance.payload\n const newPayload = { ...currentPayload, ...payload }\n\n // 只有当 payload 真正改变时才更新\n if (!isEqual(currentPayload, newPayload)) {\n get().updatePayload(id, payload)\n payloadChanged = true\n }\n }\n\n // 若 payload 发生变化,queryKey 会变化,React Query 会自动触发请求,此处不再手动 refetch,避免重复请求\n if (payloadChanged) {\n return\n }\n\n // 否则手动触发一次请求\n try {\n await instance.refetch()\n } catch (error) {\n console.error(`Failed to refetch InfiniteList instance \"${id}\":`, error)\n throw error\n }\n },\n\n async fetchNextPage(id) {\n const instance = get().instances.get(id)\n if (!instance) {\n console.warn(`InfiniteList instance with id \"${id}\" not found`)\n return\n }\n\n // 调用 fetchNextPage 函数\n try {\n await instance.fetchNextPage()\n } catch (error) {\n console.error(`Failed to fetch next page for InfiniteList instance \"${id}\":`, error)\n throw error\n }\n },\n\n getInstance(id) {\n return get().instances.get(id)\n },\n\n getAllInstances() {\n return Array.from(get().instances.values())\n },\n })),\n {\n name: 'infinite-list-store',\n },\n ),\n )\n\n// 创建 store 实例\nconst store = createStore()\n\nexport const useInfiniteListStore = store\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useInfiniteQuery } from '@tanstack/react-query'\nimport type { FormInstance } from 'antd'\nimport { Button, Form, Result, Spin, Table } from 'antd'\nimport type { AnyObject } from 'antd/es/_util/type'\nimport type { TableProps } from 'antd/es/table'\nimport type { Options as KyOptions } from 'ky'\nimport type { ReactElement, ReactNode, Ref } from 'react'\nimport { cloneElement, forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react'\n\nimport type { FilterFormWrapperProps } from '@/components/filterFormWrapper'\nimport { FilterFormWrapper } from '@/components/filterFormWrapper'\nimport { useKy } from '@/libs'\nimport { useTranslation } from '@/locale'\nimport { usePermission } from '@/services'\n\nimport { useInfiniteListStore } from './stores'\n\nexport interface InfiniteListPayload<Values = any> {\n page?: number\n filters?: Values\n}\n\nexport interface InfiniteListRequestConfig<Values = any> {\n url: string\n method?: 'GET' | 'POST'\n body?:\n | FormData\n | Record<string | number, any>\n | ((payload: InfiniteListPayload<Values>, pageParam: any) => FormData | Record<string | number, any>)\n params?:\n | Record<string | number, any>\n | ((payload: InfiniteListPayload<Values>, pageParam: any) => Record<string | number, any>)\n headers?: Record<string, string> | ((form: FormInstance<Values>) => Record<string, string>)\n // 缓存配置\n cacheTime?: number // 缓存时间(毫秒)\n staleTime?: number // 数据新鲜时间(毫秒)\n}\n\nexport enum InfiniteListAction {\n Confirm,\n Reset,\n LoadMore,\n Init,\n}\n\nexport interface InfiniteListDataAdapter<Item = any, Values = any, Data = any> {\n items?: (data: Data[] | undefined, form: FormInstance<Values>) => Item[] | undefined\n hasMore?: (lastPage: Data | undefined, allPages: Data[]) => boolean\n nextPageParam?: (lastPage: Data | undefined, allPages: Data[], pageParam: any) => any\n}\n\nexport interface InfiniteListRef<Item = any, Values = any, Data = any> {\n data: Data[] | undefined\n dataSource: Item[] | undefined\n form: FormInstance<Values>\n refetch: () => void\n fetchNextPage: () => void\n hasNextPage: boolean\n isFetchingNextPage: boolean\n}\n\nexport interface InfiniteListProps<Item, Values, Data>\n extends Omit<TableProps<Item>, 'pagination' | 'dataSource' | 'loading' | 'footer'>,\n Pick<FilterFormWrapperProps, 'buttonsAlign' | 'showReset'> {\n identifier?: string // 可选标识符,未提供时自动生成\n code?: string\n form?: FormInstance<Values>\n refreshInterval?: number\n request: InfiniteListRequestConfig<Values> // 必需的请求配置\n tableExtra?: ReactNode | ((form: FormInstance<Values>, data?: Data[]) => ReactNode)\n renderForm?: (form: FormInstance<Values>) => ReactElement\n afterSuccess?: (action: InfiniteListAction, form: FormInstance<Values>, data?: Data[]) => void\n afterError?: (error: Error, action: InfiniteListAction, form: FormInstance<Values>) => void\n dataAdapter?: InfiniteListDataAdapter<Item, Values, Data>\n initialPageParam?: any\n footer?: (data: Data[] | undefined) => ReactNode\n}\n\n// 常量定义(对齐 QueryList 行为)\nconst DEFAULT_CACHE_TIME = 5 * 60 * 1000\nconst DEFAULT_STALE_TIME = 30 * 1000\n\nconst SPIN_STYLE: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: 300,\n}\n\n// 生成唯一 identifier 的计数器\nlet identifierCounter = 0\nconst generateUniqueIdentifier = (): string => `infiniteList_${Date.now()}_${++identifierCounter}`\n\nconst InternalInfiniteList = <Item extends AnyObject, Values extends object | undefined = undefined, Data = any>(\n props: InfiniteListProps<Item, Values, Data>,\n ref: Ref<InfiniteListRef<Item, Values, Data>>,\n) => {\n const defaultDataAdapter: InfiniteListDataAdapter<Item, Values, Data> = {\n items: (data: Data[] | undefined) => {\n if (!data) return []\n return data.flatMap((page: any) => page?.list || page || [])\n },\n hasMore: (lastPage: Data | undefined): boolean => {\n if (!lastPage) return false\n const page = lastPage as any\n return page?.hasMore || page?.has_more || false\n },\n nextPageParam: (lastPage: Data | undefined, allPages: Data[], _pageParam: any): any => {\n const hasMore = (page: Data | undefined): boolean => {\n if (!page) return false\n const pageData = page as any\n return pageData?.hasMore || pageData?.has_more || false\n }\n return hasMore(lastPage) ? allPages.length : undefined\n },\n }\n\n const internalProps: InfiniteListProps<Item, Values, Data> & {\n refreshInterval: number\n initialPageParam: any\n } = {\n refreshInterval: 0,\n initialPageParam: 0,\n ...props,\n dataAdapter: {\n ...defaultDataAdapter,\n ...props.dataAdapter,\n },\n }\n\n const {\n identifier,\n code,\n buttonsAlign,\n showReset,\n refreshInterval,\n request,\n tableExtra,\n renderForm,\n afterSuccess,\n afterError,\n dataAdapter,\n initialPageParam,\n footer,\n form,\n ...tableProps\n } = internalProps\n const { t } = useTranslation()\n const [_form] = Form.useForm<Values>(form)\n const [isValid, setIsValid] = useState(false)\n const shouldPoll = useRef(false)\n const action = useRef(InfiniteListAction.Init)\n const ky = useKy()\n\n const { data: accessible, isLoading: isChecking } = usePermission(code)\n\n // 生成或使用提供的 identifier\n const finalIdentifier = useMemo(() => identifier || generateUniqueIdentifier(), [identifier])\n\n // 订阅当前 identifier 的 payload,驱动 queryKey 与渲染\n const subscribedPayload = useInfiniteListStore(s => s.getPayload(finalIdentifier))\n\n // 获取当前表单值\n const formInstance = useMemo(() => _form, [_form])\n\n // 构建请求参数\n const {\n url,\n method = 'GET',\n body,\n params,\n headers,\n cacheTime = DEFAULT_CACHE_TIME,\n staleTime = DEFAULT_STALE_TIME,\n } = request\n const requestHeaders = useMemo(\n () => (typeof headers === 'function' ? headers(formInstance) : headers),\n [headers, formInstance],\n )\n // 请求参数和 body 将在 queryFn 中动态构建,因为它们依赖于 pageParam\n\n // 构建查询键\n const queryKey = useMemo(() => {\n return ['infiniteList', url, finalIdentifier, accessible, isValid, subscribedPayload, requestHeaders]\n }, [url, finalIdentifier, accessible, isValid, subscribedPayload, requestHeaders])\n\n const { data, fetchNextPage, hasNextPage, isFetchingNextPage, refetch, isFetching } = useInfiniteQuery({\n queryKey,\n queryFn: async ({ pageParam = initialPageParam }) => {\n try {\n const payload = subscribedPayload\n\n // 动态构建请求参数,包含 pageParam\n const requestParams = typeof params === 'function' ? params(payload, pageParam) : params\n const requestBody = typeof body === 'function' ? body(payload, pageParam) : body\n\n const kyOptions: KyOptions = {\n method: method as any,\n searchParams: requestParams,\n headers: requestHeaders,\n }\n\n if (requestBody) {\n if (requestBody instanceof FormData) {\n kyOptions.body = requestBody\n } else {\n kyOptions.json = requestBody\n }\n }\n\n const response = await ky.request<Data>({ url, ...kyOptions })\n shouldPoll.current = true\n afterSuccess?.(action.current, formInstance, [response])\n return response\n } catch (err) {\n const errorObj = err instanceof Error ? err : new Error(String(err))\n afterError?.(errorObj, action.current, formInstance)\n throw errorObj\n }\n },\n initialPageParam,\n getNextPageParam: (lastPage: Data, allPages: Data[]) => {\n return dataAdapter?.nextPageParam?.(lastPage, allPages, initialPageParam)\n },\n enabled: accessible && isValid,\n retry: (failureCount, retryError) => {\n if (failureCount >= 3) return false\n if (retryError?.message?.includes('401')) return false\n return true\n },\n retryDelay: attemptIndex => Math.min(1000 * 2 ** attemptIndex, 30000),\n refetchOnWindowFocus: false,\n refetchInterval: shouldPoll.current ? refreshInterval : 0,\n gcTime: cacheTime,\n staleTime,\n })\n\n // 在组件挂载时注册实例\n useEffect(() => {\n useInfiniteListStore.getState().registerInstance(finalIdentifier, url, queryKey, refetch, fetchNextPage)\n return () => {\n useInfiniteListStore.getState().unregisterInstance(finalIdentifier)\n }\n }, [finalIdentifier, url, queryKey, refetch, fetchNextPage])\n\n const dataSource = dataAdapter?.items?.(data?.pages, formInstance)\n const isLoadingMore = isFetchingNextPage\n const isReachingEnd = !hasNextPage\n const isEmpty = !dataSource || dataSource.length === 0\n\n const onConfirm = async () => {\n action.current = InfiniteListAction.Confirm\n const values = await _form.getFieldsValue()\n\n try {\n await _form.validateFields()\n setIsValid(true)\n\n // 更新 store 中的 payload\n useInfiniteListStore.getState().refetch(finalIdentifier, { page: 0, filters: values })\n } catch {\n setIsValid(false)\n }\n }\n\n const loadMore = () => {\n action.current = InfiniteListAction.LoadMore\n fetchNextPage()\n }\n\n const onReset = async () => {\n action.current = InfiniteListAction.Reset\n try {\n _form.resetFields()\n const values = await _form.getFieldsValue()\n\n // 重置 store 中的 payload\n useInfiniteListStore.getState().updatePayload(finalIdentifier, { page: 0, filters: values })\n\n await _form.validateFields({ validateOnly: true })\n useInfiniteListStore.getState().refetch(finalIdentifier)\n } catch {\n // Handle validation error\n }\n }\n\n useEffect(() => {\n setTimeout(() => {\n if (accessible) {\n _form\n .validateFields({ validateOnly: true })\n .then(values => {\n setIsValid(true)\n\n // 初始化 store 中的 payload\n useInfiniteListStore.getState().updatePayload(finalIdentifier, { page: 0, filters: values })\n })\n .catch(() => {\n setIsValid(false)\n })\n }\n }, 300)\n }, [accessible, _form, finalIdentifier])\n\n useImperativeHandle(ref, () => ({\n data: data?.pages,\n dataSource,\n form: _form,\n refetch: () => useInfiniteListStore.getState().refetch(finalIdentifier),\n fetchNextPage: () => useInfiniteListStore.getState().fetchNextPage(finalIdentifier),\n hasNextPage: !!hasNextPage,\n isFetchingNextPage,\n }))\n\n if (isChecking) {\n return <Spin style={SPIN_STYLE} />\n }\n\n if (!accessible) {\n return <Result status={403} subTitle={t('global.noEntitlement')} />\n }\n\n const renderFooter = footer && (() => footer(data?.pages))\n\n const renderTableExtra = () => {\n if (typeof tableExtra === 'function') {\n return tableExtra(formInstance, data?.pages)\n }\n return tableExtra\n }\n\n const formRenderer =\n typeof renderForm === 'function' ? (\n <FilterFormWrapper\n showReset={showReset}\n buttonsAlign={buttonsAlign}\n isConfirming={isFetching}\n onReset={onReset}\n onConfirm={onConfirm}\n >\n {cloneElement(renderForm(_form), {\n onKeyUp: (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n onConfirm()\n }\n },\n })}\n </FilterFormWrapper>\n ) : (\n // 屏蔽 Form 组件的警告(Instance created by `useForm` is not connected to any Form element. Forget to pass `form` prop?)\n <Form form={_form} />\n )\n\n return (\n <>\n {formRenderer}\n {renderTableExtra()}\n <div style={{ minHeight: '400px' }}>\n <Table {...tableProps} dataSource={dataSource} loading={isFetching} pagination={false} footer={renderFooter} />\n </div>\n {!isEmpty && (\n <Button\n block\n loading={isLoadingMore}\n type=\"link\"\n htmlType=\"button\"\n disabled={isLoadingMore || isReachingEnd}\n onClick={loadMore}\n >\n {isLoadingMore\n ? t('InfiniteList.loadingText')\n : isReachingEnd\n ? t('InfiniteList.reachEndText')\n : t('InfiniteList.loadMoreText')}\n </Button>\n )}\n </>\n )\n}\n\nconst InfiniteList = forwardRef(InternalInfiniteList) as <\n Item extends AnyObject = AnyObject,\n Values extends object | undefined = undefined,\n Data = any,\n>(\n props: InfiniteListProps<Item, Values, Data> & { ref?: Ref<InfiniteListRef<Item, Values, Data>> },\n) => ReactElement\n\nexport default InfiniteList\n","import { create } from 'zustand'\nimport { createJSONStorage, persist } from 'zustand/middleware'\n\nexport interface NavState {\n openKeys: string[]\n selectedKeys: string[]\n setOpenKeys: (keys: string[]) => void\n setSelectedKeys: (keys: string[]) => void\n}\n\nexport const useNavStore = create<NavState>()(\n persist(\n (set, get) => ({\n openKeys: [],\n setOpenKeys: keys => {\n const current = get()\n // 避免不必要的状态更新 - 使用更高效的比较方式\n if (current.openKeys.length !== keys.length || !current.openKeys.every((key, index) => key === keys[index])) {\n set({ openKeys: keys })\n }\n },\n selectedKeys: [],\n setSelectedKeys: keys => {\n const current = get()\n // 避免不必要的状态更新 - 使用更高效的比较方式\n if (\n current.selectedKeys.length !== keys.length ||\n !current.selectedKeys.every((key, index) => key === keys[index])\n ) {\n set({ selectedKeys: keys })\n }\n },\n }),\n {\n name: 'nav',\n storage: createJSONStorage(() => localStorage),\n partialize: state => ({\n openKeys: state.openKeys,\n selectedKeys: state.selectedKeys,\n }),\n // 减少持久化频率,提升性能\n skipHydration: false,\n version: 1,\n },\n ),\n)\n","import type { ItemType, MenuDividerType } from 'antd/es/menu/interface'\nimport { memo } from 'react'\nimport { Link } from 'react-router-dom'\nimport type { Merge } from 'ts-essentials'\n\nimport type { MenuItemGroupType2, MenuItemType2, NavMenuItem, SubMenuType2 } from './types'\n\n// 优化 Link 组件,避免重复创建\nconst MemoizedLink = memo(({ to, children }: { to: string; children: React.ReactNode }) => (\n <Link to={to}>{children}</Link>\n))\n\nMemoizedLink.displayName = 'MemoizedLink'\n\n// 将自定义的菜单配置转换为 antd 的菜单配置,添加 react-router-dom Link 等。\nexport function transformItems(items?: NavMenuItem[]) {\n const result: ItemType[] = []\n\n if (items) {\n for (let i = 0; i < items.length; i++) {\n if (items[i] === null || (items[i] as MenuDividerType).type === 'divider') {\n result[i] = items[i] as null | MenuDividerType\n } else if ((items[i] as SubMenuType2 | MenuItemGroupType2).children) {\n const { children, ...rest } = items[i] as SubMenuType2 | MenuItemGroupType2\n result[i] = {\n ...rest,\n children: transformItems(children),\n }\n } else {\n const { route, label, ...rest } = items[i] as MenuItemType2\n const labelNode = route ? <MemoizedLink to={route}>{label}</MemoizedLink> : label\n\n result[i] = {\n ...rest,\n label: labelNode,\n }\n }\n }\n }\n\n return result\n}\n\n// 拍平导航配置,并且注入 keypath 字段\nexport function flatItems(\n items: NavMenuItem[],\n result: Merge<MenuItemType2, { keypath?: string[] }>[] = [],\n keypath: string[] = [],\n) {\n for (const item of items) {\n const children = (item as SubMenuType2 | MenuItemGroupType2)?.children as NavMenuItem[]\n\n if (Array.isArray(children)) {\n const keys =\n (item as MenuItemGroupType2).type !== 'group' && item!.key ? [...keypath, item!.key as string] : keypath\n flatItems(children, result, keys)\n } else if (item) {\n result.push(Object.assign(item as MenuItemType2, { keypath }))\n }\n }\n\n return result\n}\n","import type { MenuProps } from 'antd'\nimport { Menu, Spin } from 'antd'\nimport { memo, useCallback, useEffect, useMemo, useRef } from 'react'\nimport { useLocation } from 'react-router-dom'\n\nimport { useNavStore } from './stores'\nimport type { NavMenuItem } from './types'\nimport { flatItems, transformItems } from './utils'\n\nexport interface NavMenuProps {\n items?: NavMenuItem[]\n theme?: MenuProps['theme']\n loading?: boolean\n}\n\nconst NavMenu = memo(function NavMenu(props: NavMenuProps) {\n const { items = [], theme, loading } = props\n const location = useLocation()\n const previousItemsRef = useRef<NavMenuItem[]>()\n const previousLocationRef = useRef<string>()\n\n const flattenItems = useMemo(() => {\n if (previousItemsRef.current === items) {\n return previousItemsRef.current ? flatItems(previousItemsRef.current) : []\n }\n previousItemsRef.current = items\n return flatItems(items)\n }, [items])\n\n const internalItems = useMemo(() => {\n if (previousItemsRef.current === items) {\n return previousItemsRef.current ? transformItems(previousItemsRef.current) : []\n }\n return transformItems(items)\n }, [items])\n\n const { openKeys, selectedKeys, setOpenKeys, setSelectedKeys } = useNavStore()\n\n const onOpenChange = useCallback(\n (keys: string[]) => {\n // 找到新打开的菜单项\n const expandedKey = keys.find(key => !openKeys.includes(key))\n\n if (expandedKey) {\n // 展开操作:找到完整的层级路径\n const match = flattenItems.find(item => item.key === expandedKey)\n const fullPath = match?.keypath ? [...match.keypath, expandedKey] : [expandedKey]\n setOpenKeys(fullPath)\n } else {\n // 折叠操作:直接使用新的 keys\n setOpenKeys(keys)\n }\n },\n [flattenItems, openKeys, setOpenKeys],\n )\n\n useEffect(() => {\n // 避免不必要的重新计算\n if (previousLocationRef.current === location.pathname) {\n return\n }\n previousLocationRef.current = location.pathname\n\n const match = flattenItems.find(item => location.pathname === item.route)\n\n if (match) {\n const key = match.key as string\n const keypath = match.keypath as string[]\n\n // 批量更新状态以减少重新渲染\n if (selectedKeys[0] !== key || !openKeys.every((k, i) => k === keypath[i])) {\n setSelectedKeys([key])\n setOpenKeys(keypath)\n }\n }\n }, [flattenItems, location.pathname, selectedKeys, openKeys, setSelectedKeys, setOpenKeys])\n\n if (loading) {\n return (\n <div className=\"flex justify-center items-center\" style={{ height: 'calc(100vh - 64px)' }}>\n <Spin />\n </div>\n )\n }\n\n return (\n <Menu\n theme={theme}\n style={{ borderRight: 'none' }}\n items={internalItems}\n mode=\"inline\"\n openKeys={openKeys}\n selectedKeys={selectedKeys}\n onOpenChange={onOpenChange}\n />\n )\n})\n\nif (process.env.NODE_ENV === 'development') {\n NavMenu.displayName = 'NavMenu'\n}\n\nexport default NavMenu\n","import * as Antd from 'antd'\nimport { Empty } from 'antd'\nimport type { FC, PropsWithChildren } from 'react'\nimport { Fragment } from 'react'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { PermissionVersion } from '@/constants'\nimport { useTranslation } from '@/locale'\nimport { useGames } from '@/services'\n\nconst { Spin } = Antd\n\nconst RequireGame: FC<PropsWithChildren> = ({ children }) => {\n const { permissionVersion, gameId, isGlobal } = useToolkitsStore(s => s)\n const { isLoading } = useGames()\n const { t } = useTranslation()\n\n if (isLoading) {\n return (\n <div\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: 400,\n }}\n >\n <Spin />\n </div>\n )\n }\n\n if (permissionVersion === PermissionVersion.V1 || isGlobal) {\n return children\n }\n\n if (!gameId) {\n return <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description={t('RequireGame.description')} />\n }\n\n return <Fragment key={gameId}>{children}</Fragment>\n}\n\nexport default RequireGame\n","/* eslint-disable jsx-a11y/anchor-is-valid */\nimport { LogoutOutlined, UserOutlined } from '@ant-design/icons'\nimport type { MenuProps } from 'antd'\nimport { Dropdown, Space } from 'antd'\nimport type { FC, KeyboardEvent } from 'react'\nimport { useNavigate } from 'react-router-dom'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { useTranslation } from '@/locale'\n\nconst UserWidget: FC = () => {\n const { t } = useTranslation()\n const navigate = useNavigate()\n const { clearToken, getUser, signInPath } = useToolkitsStore(s => s)\n const user = getUser()\n\n const handleSignOut = () => {\n clearToken()\n navigate(signInPath)\n }\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleSignOut()\n }\n }\n\n const handleDropdownKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n }\n }\n\n const items: MenuProps['items'] = [\n {\n key: '1',\n icon: <LogoutOutlined />,\n label: (\n <a role=\"button\" tabIndex={0} onClick={handleSignOut} onKeyDown={handleKeyDown}>\n {t('UserWidget.signOutText')}\n </a>\n ),\n },\n ]\n\n return (\n <div>\n <Dropdown\n menu={{\n selectable: true,\n items,\n }}\n placement=\"bottomRight\"\n >\n <a\n role=\"button\"\n tabIndex={0}\n onClick={e => {\n e.preventDefault()\n }}\n onKeyDown={handleDropdownKeyDown}\n >\n <Space align=\"center\">\n <span>{user?.authorityId}</span>\n <UserOutlined style={{ fontSize: '16px' }} />\n </Space>\n </a>\n </Dropdown>\n </div>\n )\n}\n\nexport default UserWidget\n","import { useQueryClient } from '@tanstack/react-query'\nimport type { SelectProps } from 'antd'\nimport { Select, Space, Typography } from 'antd'\nimport type { FC } from 'react'\nimport { useEffect } from 'react'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { useTranslation } from '@/locale'\nimport { useGames } from '@/services'\n\nimport type { Game } from './types'\n\nconst { Text } = Typography\n\nexport interface GameSelectProps {\n filter?: (game: Game) => boolean\n options?: (data?: Game[]) => SelectProps['options']\n}\n\nconst GameSelect: FC<GameSelectProps> = props => {\n const { filter, options } = props\n const { t } = useTranslation()\n const { gameApiV2, gameId, setGameId } = useToolkitsStore(s => s)\n const { data, isLoading } = useGames()\n const queryClient = useQueryClient()\n\n const filteredData = data?.filter(item => filter?.(item) ?? true)\n\n const _options =\n typeof options === 'function'\n ? options(filteredData)\n : filteredData?.map(item => ({\n label: item.name,\n value: gameApiV2 ? item.game_id : item.id,\n }))\n\n // 切换游戏时清空 TanStack Query 缓存触发重新请求以更新视图。\n const onChange = (value: string | number) => {\n clearCache()\n setGameId(value)\n }\n\n const clearCache = () => {\n // 清除除游戏列表外的所有缓存\n queryClient.removeQueries({\n predicate: query => {\n const queryKey = query.queryKey\n return !queryKey.includes('/api/game/list') && !queryKey.includes('/api/usystem/game/all')\n },\n })\n }\n\n useEffect(() => {\n if (data && data.length > 0) {\n const firstId = gameApiV2 ? data[0].game_id : data[0].id\n if (data.every(item => String(item.game_id || item.id) !== String(gameId))) {\n // 如果当前游戏 ID 不在数据中,则设置为第一个游戏 ID\n setGameId(firstId)\n }\n }\n }, [data])\n\n return (\n <Space>\n <Text>{t('GameSelect.label')}</Text>\n <Select<string | number>\n showSearch\n optionFilterProp=\"label\"\n value={gameId}\n placeholder={t('GameSelect.placeholder')}\n loading={isLoading}\n style={{ width: '200px' }}\n options={_options}\n onChange={onChange}\n />\n </Space>\n )\n}\n\nexport default GameSelect\n","import type { DetailedHTMLProps, FC, ImgHTMLAttributes } from 'react'\n\nimport logoUrl from './logo.png'\n\nexport type LogoProps = Omit<DetailedHTMLProps<ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>, 'src' | 'alt'>\n\nconst Logo: FC<LogoProps> = props => {\n return <img src={logoUrl} alt=\"logo\" {...props} />\n}\n\nexport default Logo\n","import { memo } from 'react'\nimport { Link } from 'react-router-dom'\n\nimport { Logo } from '@/components/logo'\n\ninterface LayoutHeaderProps {\n title?: string\n subtitle?: string\n mainPagePath: string\n collapsed: boolean\n}\n\nconst LayoutHeader = memo<LayoutHeaderProps>(({ title, subtitle, mainPagePath, collapsed }) => (\n <div\n className=\"px-6 py-2 font-bold relative bg-gradient-to-r from-white to-gray-50/30\"\n style={{\n height: 'auto',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n backdropFilter: 'blur(4px)',\n WebkitBackdropFilter: 'blur(4px)',\n }}\n >\n <div className={`flex items-center w-full ${collapsed ? 'justify-center' : ''}`}>\n <Link\n to={mainPagePath}\n className=\"hover:opacity-80 transition-all duration-300 ease-out block rounded-lg p-1 hover:bg-white/50 hover:shadow-sm\"\n style={{\n transition: 'all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n opacity: collapsed ? 0.8 : 1,\n transform: collapsed ? 'translateX(0)' : 'translateX(0)',\n }}\n >\n <Logo\n width={36}\n style={{\n objectFit: 'contain',\n display: 'block',\n filter: 'drop-shadow(0 1px 1px rgba(0, 0, 0, 0.05))',\n transition: 'all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n }}\n />\n </Link>\n {title && (\n <div\n className=\"ml-4 overflow-hidden min-w-0\"\n style={{\n transition: 'all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n opacity: collapsed ? 0 : 1,\n width: collapsed ? '0px' : 'auto',\n marginLeft: collapsed ? '0px' : '16px',\n transform: collapsed ? 'translateX(-8px)' : 'translateX(0)',\n }}\n >\n <Link\n to={mainPagePath}\n className=\"text-xl leading-tight hover:text-blue-600 transition-all duration-300 font-bold text-ellipsis overflow-hidden whitespace-nowrap block bg-gradient-to-r from-gray-800 to-gray-600 bg-clip-text text-transparent hover:from-blue-600 hover:to-blue-500\"\n title={title}\n style={{\n letterSpacing: '0.02em',\n textShadow: '0 1px 2px rgba(0, 0, 0, 0.05)',\n }}\n >\n {title}\n </Link>\n </div>\n )}\n </div>\n <div\n className=\"w-full mt-2 overflow-hidden\"\n style={{\n height: subtitle && !collapsed ? '20px' : '1px',\n transition: 'height 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n }}\n >\n <div className=\"flex items-center justify-center h-full w-full\">\n <div\n className=\"w-full border-t border-gray-200 absolute\"\n style={{\n opacity: !subtitle || collapsed ? 1 : 0,\n transition: 'opacity 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n }}\n />\n {subtitle && (\n <div\n className=\"flex items-center w-full text-sm\"\n style={{\n opacity: collapsed ? 0 : 1,\n transform: collapsed ? 'translateY(-3px)' : 'translateY(0)',\n transition: 'all 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n }}\n >\n <div className=\"flex-1 border-t border-gray-200\"></div>\n <span className=\"px-3 text-gray-500 font-medium whitespace-nowrap\" title={subtitle}>\n {subtitle}\n </span>\n <div className=\"flex-1 border-t border-gray-200\"></div>\n </div>\n )}\n </div>\n </div>\n </div>\n))\n\nLayoutHeader.displayName = 'LayoutHeader'\n\nexport default LayoutHeader\n","import { MenuFoldOutlined, MenuUnfoldOutlined } from '@ant-design/icons'\nimport { Button, Divider, Space } from 'antd'\nimport * as Antd from 'antd'\nimport type { FC, Key, PropsWithChildren, ReactNode } from 'react'\nimport { Suspense, useState } from 'react'\n\nimport type { NavMenuItem } from '@/components/navMenu'\nimport { NavMenu } from '@/components/navMenu'\nimport { RequireGame } from '@/components/requireGame'\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { UserWidget } from '@/components/userWidget'\nimport { PermissionVersion } from '@/constants'\n\nimport type { GameSelectProps } from './GameSelect'\nimport GameSelect from './GameSelect'\nimport LayoutHeader from './LayoutHeader'\n\nconst { Spin, theme } = Antd\nconst { Header, Sider, Content } = Antd.Layout\n\ntype HeaderExtra = { key: Key; children: ReactNode }\n\nexport interface LayoutProps extends Pick<GameSelectProps, 'filter'> {\n collapsible?: boolean\n isMenuLoading?: boolean\n items?: NavMenuItem[]\n navWidth?: string | number\n gameSelectOptions?: GameSelectProps['options']\n headerExtra?: {\n left?: HeaderExtra[]\n right?: HeaderExtra[]\n }\n title?: string\n subtitle?: string\n}\n\nconst Layout: FC<PropsWithChildren<LayoutProps>> = props => {\n const {\n collapsible,\n isMenuLoading,\n items,\n headerExtra,\n children,\n navWidth,\n filter,\n gameSelectOptions,\n title,\n subtitle,\n } = props\n const {\n token: { colorBgContainer, colorBorder },\n } = theme.useToken()\n const {\n permissionVersion,\n navWidth: globalNavWidth,\n collapsible: globalCollapsible,\n mainPagePath,\n collapsed,\n setContext,\n isGlobal,\n } = useToolkitsStore()\n\n const [internalCollapsed, setInternalCollapsed] = useState(collapsed)\n\n const onCollapse = async () => {\n setInternalCollapsed(!internalCollapsed)\n setContext({ collapsed: !internalCollapsed })\n }\n\n const internalCollapsible = collapsible ?? globalCollapsible ?? false\n\n return (\n <Antd.Layout>\n <Sider\n collapsible={internalCollapsible}\n theme=\"light\"\n trigger={null}\n collapsed={internalCollapsed}\n width={navWidth ?? globalNavWidth}\n style={{\n height: '100vh',\n overflowX: 'hidden',\n overflowY: 'auto',\n borderRightWidth: 1,\n borderRightStyle: 'solid',\n borderRightColor: colorBorder,\n transition: 'all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1)',\n }}\n >\n <LayoutHeader\n title={title}\n subtitle={subtitle}\n mainPagePath={mainPagePath}\n collapsed={internalCollapsed || false}\n />\n <NavMenu items={items} loading={isMenuLoading} />\n </Sider>\n <Antd.Layout>\n <Header\n style={{\n padding: '0 24px',\n background: colorBgContainer,\n }}\n >\n <div className=\"flex justify-between items-center h-full\">\n <Space size=\"small\" split={<Divider type=\"vertical\" />} className=\"mr-6\">\n {internalCollapsible && (\n <Button\n type=\"text\"\n icon={internalCollapsed ? <MenuUnfoldOutlined /> : <MenuFoldOutlined />}\n style={{ fontSize: '16px' }}\n onClick={onCollapse}\n />\n )}\n {permissionVersion !== PermissionVersion.V1 && !isGlobal && (\n <GameSelect filter={filter} options={gameSelectOptions} />\n )}\n {headerExtra?.left?.map(extra => <span key={extra.key}>{extra.children}</span>)}\n </Space>\n <Space size=\"small\" split={<Divider type=\"vertical\" />}>\n {headerExtra?.right?.map(extra => <span key={extra.key}>{extra.children}</span>)}\n <UserWidget />\n </Space>\n </div>\n </Header>\n <Content\n style={{\n overflow: 'auto',\n padding: '24px 16px',\n maxHeight: 'calc(100vh - 64px)',\n transition: 'margin-left 0.2s cubic-bezier(0.645, 0.045, 0.355, 1)',\n }}\n >\n <Suspense\n fallback={\n <Spin\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: '200px',\n }}\n />\n }\n >\n <RequireGame>{children}</RequireGame>\n </Suspense>\n </Content>\n </Antd.Layout>\n </Antd.Layout>\n )\n}\n\nexport default Layout\n","import { Result, Spin } from 'antd'\nimport type { Options as KyOptions } from 'ky'\nimport type { FC, PropsWithChildren } from 'react'\n\nimport { useTranslation } from '@/locale'\nimport { usePermission } from '@/services'\n\nexport interface RequirePermissionProps {\n code: string\n config?: KyOptions\n}\n\nconst RequirePermission: FC<PropsWithChildren<RequirePermissionProps>> = props => {\n const { code, config, children } = props\n const { data: accessible, isLoading } = usePermission(code, config)\n const { t } = useTranslation()\n\n if (isLoading) {\n return (\n <Spin\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: 200,\n }}\n />\n )\n }\n\n if (!accessible) {\n return <Result status=\"403\" subTitle={t('global.noEntitlement')} />\n }\n\n return <>{children}</>\n}\n\nexport default RequirePermission\n","import { create } from 'zustand'\n\ninterface DrawerState {\n open: Map<number, boolean>\n usedIds: Set<number>\n isOpen: (uuid: number) => boolean\n show: (uuid: number) => void\n hide: (uuid: number) => void\n hideAll: () => void\n checkUniqueness: (uuid: number) => boolean\n registerIds: (uuid: number) => boolean\n cleanup: (uuid: number) => void\n}\n\nexport const useDrawerStore = create<DrawerState>((set, get) => ({\n open: new Map(),\n usedIds: new Set(),\n isOpen: uuid => get().open.get(uuid) ?? false,\n show(uuid) {\n set({\n open: new Map(get().open).set(uuid, true),\n })\n },\n hide(uuid) {\n set({ open: new Map(get().open).set(uuid, false) })\n },\n hideAll() {\n set({ open: new Map() })\n },\n checkUniqueness(uuid) {\n const { usedIds } = get()\n return !usedIds.has(uuid)\n },\n registerIds(uuid) {\n const { usedIds } = get()\n if (usedIds.has(uuid)) {\n return false // ID 已被使用\n }\n set({ usedIds: new Set(usedIds).add(uuid) })\n return true // 注册成功\n },\n cleanup(uuid) {\n const { open, usedIds } = get()\n const newOpen = new Map(open)\n const newUsedIds = new Set(usedIds)\n newOpen.delete(uuid)\n newUsedIds.delete(uuid)\n set({ open: newOpen, usedIds: newUsedIds })\n },\n}))\n","import type { DrawerProps } from 'antd'\nimport { Button, Drawer } from 'antd'\nimport type { ComponentProps, ReactNode } from 'react'\nimport { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport { generateId } from '@/utils'\n\nimport { useDrawerStore } from './stores'\n\nexport interface UseDrawerOperation {\n hide: () => void\n}\n\nexport interface UseDrawerProps extends Omit<DrawerProps, 'open' | 'confirmLoading' | 'onClose' | 'footer'> {\n content?: ReactNode | ((operation: UseDrawerOperation) => ReactNode)\n onConfirm?: () => void | Promise<void>\n afterOpen?: () => void | Promise<void>\n afterClose?: () => void | Promise<void>\n footer?: ReactNode | null\n confirmText?: string\n cancelText?: string\n confirmButtonProps?: ComponentProps<typeof Button>\n cancelButtonProps?: ComponentProps<typeof Button>\n}\n\nexport function useDrawer(props: UseDrawerProps) {\n const {\n content,\n onConfirm,\n afterOpen,\n afterClose,\n footer,\n confirmText = '确认',\n cancelText = '取消',\n confirmButtonProps,\n cancelButtonProps,\n ...drawerProps\n } = props\n\n const _id = useMemo(() => generateId(), [])\n const { show, hide, isOpen, cleanup } = useDrawerStore()\n\n // 组件销毁时清理 ID\n useEffect(() => {\n return () => {\n cleanup(_id)\n }\n }, [_id, cleanup])\n\n const open = isOpen(_id)\n const [confirmLoading, setConfirmLoading] = useState(false)\n const isRenderFunction = typeof content === 'function'\n\n const _show = useCallback(async () => {\n show(_id)\n await afterOpen?.()\n }, [_id, show, afterOpen])\n\n const _hide = useCallback(() => {\n hide(_id)\n }, [_id, hide])\n\n const onClose: DrawerProps['onClose'] = useCallback(async () => {\n _hide()\n await afterClose?.()\n }, [_hide, afterClose])\n\n const handleConfirm = useCallback(async () => {\n try {\n setConfirmLoading(true)\n await onConfirm?.()\n } catch (error) {\n console.error('Drawer confirm error:', error)\n throw error\n } finally {\n setConfirmLoading(false)\n }\n }, [onConfirm])\n\n const drawerFooter =\n footer !== undefined ? (\n footer\n ) : (\n <div className=\"flex gap-4 mx-4\">\n <Button type=\"primary\" loading={confirmLoading} {...confirmButtonProps} onClick={handleConfirm}>\n {confirmText}\n </Button>\n <Button {...cancelButtonProps} onClick={onClose}>\n {cancelText}\n </Button>\n </div>\n )\n\n const internalDrawer = (\n <Drawer {...drawerProps} open={open} footer={drawerFooter} onClose={onClose}>\n {isRenderFunction ? content({ hide: _hide }) : content}\n </Drawer>\n )\n\n return {\n id: _id,\n show: _show,\n hide: _hide,\n confirmLoading,\n drawer: internalDrawer,\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { FormInstance, FormProps } from 'antd'\nimport { Form } from 'antd'\nimport type { AnyObject } from 'antd/es/_util/type'\nimport type { ReactNode } from 'react'\nimport { useCallback, useState } from 'react'\n\nimport type { RecursivePartial } from '@/types'\n\nimport { useDrawer, type UseDrawerOperation, type UseDrawerProps } from './drawer'\n\nexport interface UseFormDrawerProps<Values extends AnyObject = AnyObject, ExtraValues = any>\n extends Omit<UseDrawerProps, 'onConfirm' | 'content' | 'onShow' | 'afterClose'> {\n formProps?: Omit<FormProps, 'form'>\n form?: FormInstance<Values>\n content?: ReactNode | ((extraValues: ExtraValues, operation: UseDrawerOperation) => ReactNode)\n onConfirm?: (values: Values, extraValues: ExtraValues) => void | Promise<void>\n onSuccess?: () => void\n afterClose?: (form: FormInstance<Values>) => void\n}\n\nexport function useFormDrawer<Values extends AnyObject = AnyObject, ExtraValues = any>(\n props: UseFormDrawerProps<Values, ExtraValues>,\n) {\n const { content, form, formProps, onConfirm, onSuccess, afterClose, ...drawerProps } = props\n const [internalExtraValues, setInternalExtraValues] = useState<ExtraValues>({} as ExtraValues)\n let [internalForm] = Form.useForm<Values>()\n internalForm = form || internalForm\n\n const isRenderFunction = typeof content === 'function'\n\n const { id, show, hide, drawer } = useDrawer({\n ...drawerProps,\n content: operation => (\n <Form {...formProps} form={internalForm}>\n {isRenderFunction ? content(internalExtraValues, operation) : content}\n </Form>\n ),\n onConfirm: async () => {\n try {\n const values = await internalForm.validateFields()\n await onConfirm?.(values, internalExtraValues)\n onSuccess?.()\n hide()\n } catch (error) {\n console.error('Form validation or submission error:', error)\n throw error\n }\n },\n afterClose: () => {\n afterClose?.(internalForm)\n },\n })\n\n const showForm = useCallback(\n (options?: { initialValues?: RecursivePartial<Values>; extraValues?: ExtraValues }) => {\n const { initialValues, extraValues } = options || {}\n\n if (extraValues) {\n setInternalExtraValues(extraValues)\n }\n\n if (initialValues) {\n internalForm.setFieldsValue(initialValues)\n }\n\n show()\n },\n [internalForm, show],\n )\n\n return {\n id,\n show: showForm,\n hide,\n drawer,\n }\n}\n","import { lazy } from 'react'\nimport { Route, Routes } from 'react-router-dom'\n\nconst MenuItemList = lazy(() => import('./pages/menuItemList'))\nconst CreateMenuItem = lazy(() => import('./pages/createMenuItem'))\nconst UpdateMenuItem = lazy(() => import('./pages/updateMenuItem'))\n\nexport default (\n <Routes>\n <Route index element={<MenuItemList />} />\n <Route path=\"create\" element={<CreateMenuItem />} />\n <Route path=\"update/:id\" element={<UpdateMenuItem />} />\n </Routes>\n)\n","import { lazy } from 'react'\nimport { Navigate, Route, Routes } from 'react-router-dom'\n\nconst UserList = lazy(() => import('./pages/userList'))\nconst UserDetail = lazy(() => import('./pages/userDetail'))\nconst RoleList = lazy(() => import('./pages/roleList'))\nconst RoleDetail = lazy(() => import('./pages/roleDetail'))\n\nexport default (\n <Routes>\n <Route index element={<Navigate to=\"user\" />} />\n <Route path=\"user\" element={<UserList />} />\n <Route path=\"user/:id\" element={<UserDetail />} />\n <Route path=\"role\" element={<RoleList />} />\n <Route path=\"role/:name\" element={<RoleDetail />} />\n </Routes>\n)\n","import { Button, Result } from 'antd'\nimport type { FC } from 'react'\nimport { useNavigate } from 'react-router-dom'\n\nimport { useTranslation } from '@/locale'\n\ninterface NotFoundProps {\n redirectUrl?: string\n}\n\nconst NotFound: FC<NotFoundProps> = props => {\n const { redirectUrl } = props\n const navigate = useNavigate()\n const { t } = useTranslation()\n\n return (\n <div className=\"text-center\">\n <Result\n status=\"404\"\n title=\"404\"\n subTitle={t('NotFound.subTitle')}\n extra={\n redirectUrl && (\n <Button\n type=\"primary\"\n onClick={() => {\n navigate(redirectUrl)\n }}\n >\n {t('NotFound.buttonText')}\n </Button>\n )\n }\n />\n </div>\n )\n}\n\nexport default NotFound\n","import { Card, Form, Input, Select } from 'antd'\nimport type { ColumnsType } from 'antd/es/table'\nimport dayjs from 'dayjs'\nimport type { FC } from 'react'\n\nimport { ExpandableParagraph } from '@/components/expandableParagraph'\nimport { QueryList } from '@/components/queryList'\nimport { withContext } from '@/components/toolkitsProvider'\nimport { useTranslation } from '@/locale'\n\nimport type { OperationLogListItem } from './types'\n\nconst { Option } = Select\n\nconst OperationLogList: FC = () => {\n const { t } = useTranslation()\n\n const columns: ColumnsType<OperationLogListItem> = [\n {\n key: 'username',\n title: t('global.username'),\n dataIndex: 'uname',\n width: 100,\n },\n {\n key: 'label',\n title: t('global.label'),\n dataIndex: 'label',\n width: 150,\n },\n {\n key: 'method',\n title: t('global.method'),\n dataIndex: 'method',\n width: 100,\n },\n {\n key: 'route',\n title: t('global.route'),\n dataIndex: 'route',\n width: 200,\n },\n {\n key: 'request',\n title: t('global.request'),\n dataIndex: 'request',\n render(value: string) {\n return <ExpandableParagraph>{value}</ExpandableParagraph>\n },\n },\n {\n key: 'response',\n title: t('global.response'),\n dataIndex: 'response',\n render(value: string) {\n return <ExpandableParagraph>{value}</ExpandableParagraph>\n },\n },\n {\n key: 'creation_time',\n title: t('global.creationTime'),\n dataIndex: 'ctime',\n width: 200,\n render(value: string) {\n return dayjs(value).format('YYYY-MM-DD HH:mm:ss')\n },\n },\n ]\n\n return (\n <Card title=\"操作日志\">\n <QueryList<\n OperationLogListItem,\n {\n uname?: string\n route?: string\n method?: 'get' | 'post'\n label?: string\n },\n { List: OperationLogListItem[]; Total: number }\n >\n identifier=\"operation-log-list\"\n rowKey=\"id\"\n code=\"300001\"\n columns={columns}\n tableLayout=\"fixed\"\n request={{\n url: '/api/usystem/log/list',\n method: 'GET',\n }}\n dataAdapter={data => ({\n total: data?.Total,\n items: data?.List,\n })}\n renderForm={form => (\n <Form form={form} layout=\"inline\">\n <Form.Item label={t('global.username')} name=\"uname\">\n <Input allowClear />\n </Form.Item>\n <Form.Item label={t('global.route')} name=\"route\">\n <Input allowClear />\n </Form.Item>\n <Form.Item label={t('global.method')} name=\"method\">\n <Select allowClear style={{ width: '100px' }}>\n <Option value=\"get\">GET</Option>\n <Option value=\"post\">POST</Option>\n </Select>\n </Form.Item>\n <Form.Item label={t('global.label')} name=\"label\">\n <Input allowClear />\n </Form.Item>\n </Form>\n )}\n />\n </Card>\n )\n}\n\nexport default withContext(OperationLogList, { isGlobal: true })\n","import { useQuery } from '@tanstack/react-query'\nimport { useEffect, useMemo, useState } from 'react'\n\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { useKy } from '@/libs'\n\n/**\n * 处理登录页面的票据逻辑和未注册用户提示\n */\nexport function useTicketLogin() {\n const ky = useKy()\n const { setToken } = useToolkitsStore()\n\n // 解析 URL 参数\n const { ticket, unregisteredFromUrl } = useMemo(() => {\n const queryParams = new URLSearchParams(window.location.search)\n return {\n ticket: queryParams.get('ticket'),\n unregisteredFromUrl: queryParams.get('unregistered') === 'true',\n }\n }, [])\n\n // 初始化未注册状态\n const [isUnregistered, setIsUnregistered] = useState(unregisteredFromUrl)\n\n // 使用票据登录\n const { data, isLoading, error } = useQuery({\n queryKey: ['ticket-login', ticket],\n queryFn: () => ky.get<{ token: string }>(`/api/usystem/user/login?ticket=${ticket}`),\n enabled: !!ticket,\n retry: false,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n })\n\n // 处理登录成功和错误\n useEffect(() => {\n if (data?.token) {\n setToken(data.token)\n } else if (error && 'response' in error && (error.response as { status?: number })?.status === 403) {\n setIsUnregistered(true)\n }\n }, [data, error, setToken])\n\n // 关闭未注册提示\n const dismissUnregistered = useMemo(\n () => () => {\n setIsUnregistered(false)\n // 清理 URL 参数\n if (unregisteredFromUrl) {\n const url = new URL(window.location.href)\n url.searchParams.delete('unregistered')\n window.history.replaceState({}, '', url.toString())\n }\n },\n [unregisteredFromUrl],\n )\n\n return {\n hasTicket: !!ticket,\n isLoading,\n error,\n isUnregistered,\n dismissUnregistered,\n }\n}\n","import { Alert, Button, Divider, Form, Input, Space, Spin, Typography } from 'antd'\nimport type { FC, ReactNode } from 'react'\nimport { Navigate } from 'react-router-dom'\n\nimport { Logo } from '@/components/logo'\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { SSO_URL } from '@/constants'\nimport { useTranslation } from '@/locale'\n\nimport backgroundUrl from './background.svg'\nimport { useTicketLogin } from './hooks'\n\ninterface SignInProps {\n extra?: ReactNode\n title?: string\n}\n\nconst SignIn: FC<SignInProps> = ({ extra, title }) => {\n const { token, mainPagePath } = useToolkitsStore(s => s)\n const { t } = useTranslation()\n const { isLoading, isUnregistered, dismissUnregistered } = useTicketLogin()\n\n if (isLoading) {\n return (\n <div className=\"w-screen h-screen flex justify-center items-center\">\n <Spin />\n </div>\n )\n }\n\n if (token) {\n const hashMode = !!window.location.hash\n const path = mainPagePath\n\n if (!hashMode) {\n return <Navigate replace to={mainPagePath} />\n }\n\n // 移除 ticket\n window.location.href = `${window.location.origin}${window.location.pathname}#${path}`\n\n return null\n }\n\n return (\n <div className=\"w-screen h-screen relative flex overflow-hidden\">\n <div className=\"absolute top-16 right-16 z-10\">{extra}</div>\n <div className=\"absolute left-14 top-6\">\n <Space align=\"center\">\n <Logo width={48} />\n {title && <span className=\"text-2xl font-bold\">{title}</span>}\n </Space>\n </div>\n <div className=\"flex-1 flex justify-center items-center bg-slate-50\">\n <img src={backgroundUrl} alt=\"background\" className=\"w-10/12\" />\n </div>\n <div className=\"w-[650px] relative top-0 left-0 right-0 bottom-0\">\n <div className=\"absolute top-1/2 -translate-y-1/2 left-0 right-0\">\n <div className=\"-translate-y-10 px-36\">\n <div className=\"flex flex-col justify-center\">\n <div className=\"h-10\">\n {isUnregistered && (\n <Alert\n banner\n closable\n message={t('SignIn.unregistered')}\n type=\"error\"\n onClose={dismissUnregistered}\n />\n )}\n </div>\n <Typography.Title level={2}>{t('SignIn.welcome')}</Typography.Title>\n <div className=\"mt-4\">\n <Form layout=\"vertical\" autoComplete=\"off\">\n <Form.Item label={t('global.username')} name=\"username\" rules={[{ required: true }]}>\n <Input />\n </Form.Item>\n <Form.Item label={t('global.password')} name=\"password\" rules={[{ required: true }]}>\n <Input.Password />\n </Form.Item>\n <Form.Item>\n <Button block type=\"primary\" shape=\"round\" htmlType=\"submit\">\n {t('global.signIn')}\n </Button>\n </Form.Item>\n </Form>\n </div>\n <Divider plain dashed>\n {t('SignIn.thirdParty')}\n </Divider>\n <div className=\"flex justify-center items-center\">\n <Button\n block\n shape=\"round\"\n href={`${SSO_URL}/logout?service=${SSO_URL}/login?service=${window.location.href}`}\n target=\"_self\"\n >\n <Logo width={18} />\n {t('SignIn.signInWithIDass')}\n </Button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n}\n\nexport default SignIn\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {c}from'./chunk-PB74M2DE.js';import {c as c$1,e,b as b$1}from'./chunk-OLVGFJFN.js';import {a}from'./chunk-S6NRRFWG.js';import {b}from'./chunk-PMXRIKKI.js';import {i}from'./chunk-N67BWR5M.js';import {App,Card,Button,Space,Popconfirm}from'antd';import {useNavigate}from'react-router-dom';import {jsx,Fragment,jsxs}from'react/jsx-runtime';var M=i(()=>{let{t:n}=a(),{message:y}=App.useApp(),f=c(),{refetch:g}=c$1(),{refetch:h}=b(),m=useNavigate();return jsx(Fragment,{children:jsx(Card,{title:"\u83DC\u5355\u7BA1\u7406",extra:jsx(Button,{type:"primary",onClick:()=>{m("./create");},children:"\u521B\u5EFA\u83DC\u5355\u9879"}),children:jsx(e,{identifier:"menu-item-list",onePage:!0,code:"9900001",rowKey:"id",columns:[{title:"\u83DC\u5355\u540D\u79F0",dataIndex:"category",key:"category"},{title:"\u524D\u7AEF\u8DEF\u7531",dataIndex:"front_route"},{title:"Order",dataIndex:"order"},{title:"Is Common",dataIndex:"is_common",key:"is_common",render:o=>o?"\u662F":"\u5426"},{title:"\u6A21\u677F\u540D\u79F0",dataIndex:"model_name",key:"model_name"},{title:"\u64CD\u4F5C",key:"action",width:150,align:"center",render(o,t){return t.is_model?jsxs(Space,{size:"small",children:[jsx(Button,{type:"link",onClick:()=>{m(`./update/${t.id}`);},children:n("global.update")}),jsx(Popconfirm,{title:"\u5220\u9664\u83DC\u5355",placement:"topRight",description:jsxs(b$1,{texts:[t.category],children:["\u786E\u5B9A\u8981\u5220\u9664\u83DC\u5355 ",t.category," \u5417\uFF1F"]}),onConfirm:async()=>{await f.mutate(t.id),g("menu-item-list"),h(),y.success("\u5220\u9664\u6210\u529F");},children:jsx(Button,{danger:!0,type:"link",size:"small",children:n("global.delete")})})]}):null}}],request:{url:"/api/usystem/menu/list",method:"GET"},dataAdapter:o=>({items:o})})})})},{isGlobal:!0}),G=M;export{G as default};//# sourceMappingURL=menuItemList-CVNXJ7CP.js.map
|
|
2
|
+
//# sourceMappingURL=menuItemList-CVNXJ7CP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/modules/menu/pages/menuItemList/index.tsx"],"names":["MenuItemList","withContext","t","useTranslation","message","App","remove","useRemoveMenu","refetch","useQueryListStore","refetchMenuList","useMenuList","navigate","useNavigate","jsx","Fragment","Card","Button","QueryList_default","value","_","record","jsxs","Space","Popconfirm","Highlight_default","data","menuItemList_default"],"mappings":"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","file":"menuItemList-CVNXJ7CP.js","sourcesContent":["import type { TableColumnsType } from 'antd'\nimport { App, Button, Card, Popconfirm, Space } from 'antd'\nimport { useNavigate } from 'react-router-dom'\n\nimport { Highlight } from '@/components/highlight'\nimport { QueryList, useQueryListStore } from '@/components/queryList'\nimport { withContext } from '@/components/toolkitsProvider'\nimport { useTranslation } from '@/locale'\nimport { useMenuList } from '@/services'\nimport type { MenuListItem } from '@/types'\n\nimport { useRemoveMenu } from '../../services'\n\nconst MenuItemList = withContext(\n () => {\n const { t } = useTranslation()\n const { message } = App.useApp()\n const remove = useRemoveMenu()\n const { refetch } = useQueryListStore()\n const { refetch: refetchMenuList } = useMenuList()\n const navigate = useNavigate()\n\n const columns: TableColumnsType<MenuListItem> = [\n {\n title: '菜单名称',\n dataIndex: 'category',\n key: 'category',\n },\n {\n title: '前端路由',\n dataIndex: 'front_route',\n },\n {\n title: 'Order',\n dataIndex: 'order',\n },\n {\n title: 'Is Common',\n dataIndex: 'is_common',\n key: 'is_common',\n render: value => (value ? '是' : '否'),\n },\n {\n title: '模板名称',\n dataIndex: 'model_name',\n key: 'model_name',\n },\n // {\n // title: '是否预设',\n // dataIndex: 'is_model',\n // key: 'is_model',\n // render: value => (value ? '否' : '是'),\n // },\n {\n title: '操作',\n key: 'action',\n width: 150,\n align: 'center',\n render(_, record) {\n if (record.is_model) {\n return (\n <Space size=\"small\">\n <Button\n type=\"link\"\n onClick={() => {\n navigate(`./update/${record.id}`)\n }}\n >\n {t('global.update')}\n </Button>\n <Popconfirm\n title=\"删除菜单\"\n placement=\"topRight\"\n description={<Highlight texts={[record.category]}>确定要删除菜单 {record.category} 吗?</Highlight>}\n onConfirm={async () => {\n await remove.mutate(record.id)\n // 触发所有相关实例的刷新\n refetch('menu-item-list')\n refetchMenuList()\n message.success('删除成功')\n }}\n >\n <Button danger type=\"link\" size=\"small\">\n {t('global.delete')}\n </Button>\n </Popconfirm>\n </Space>\n )\n }\n\n return null\n },\n },\n ]\n\n return (\n <>\n <Card\n title=\"菜单管理\"\n extra={\n <Button\n type=\"primary\"\n onClick={() => {\n navigate('./create')\n }}\n >\n 创建菜单项\n </Button>\n }\n >\n <QueryList<MenuListItem, undefined, MenuListItem[]>\n identifier=\"menu-item-list\"\n onePage={true}\n code=\"9900001\"\n rowKey=\"id\"\n columns={columns}\n request={{\n url: '/api/usystem/menu/list',\n method: 'GET',\n }}\n dataAdapter={data => ({\n items: data,\n })}\n />\n </Card>\n </>\n )\n },\n { isGlobal: true },\n)\n\nexport default MenuItemList\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {b as b$1,a as a$2}from'./chunk-ZRGA4NV7.js';import {b}from'./chunk-3N7LFLKJ.js';import {a as a$1}from'./chunk-JQHQKJFH.js';import {a}from'./chunk-S6NRRFWG.js';import'./chunk-PMXRIKKI.js';import {i}from'./chunk-N67BWR5M.js';import {Breadcrumb,Card,Skeleton,Descriptions,Divider}from'antd';import {useParams,Link}from'react-router-dom';import {jsxs,Fragment,jsx}from'react/jsx-runtime';var C=()=>{let p=useParams(),{t:o}=a(),{data:t,isLoading:d,refetch:u}=b(p.name),{show:f,modal:b$2}=b$1({mode:"update",onSuccess(){u();}}),D=async()=>{f({initialValues:{permissions:t?.permissions,name:t?.name.replace(/^role_/,"")},extraValues:{id:t.id}});};return jsxs(Fragment,{children:[jsx(Breadcrumb,{style:{marginBottom:"1.5rem"},items:[{key:"1",title:jsx(Link,{to:"..",relative:"path",children:o("global.role")})},{key:"2",title:o("RoleDetail.title")}]}),jsx(Card,{title:o("RoleDetail.title"),extra:jsx(a$1,{code:"200003",onClick:D,children:o("global.update")}),children:jsxs(Skeleton,{loading:d,children:[jsxs(Descriptions,{column:2,layout:"vertical",className:"mb-6",children:[jsx(Descriptions.Item,{label:o("global.name"),children:t?.name}),jsx(Descriptions.Item,{label:"ID",children:t?.id}),jsx(Descriptions.Item,{label:o("global.creationTime"),children:t?.ctime})]}),jsx(Divider,{}),jsx(a$2,{readonly:!0,value:t?.permissions})]})}),b$2]})},N=i(C,{isGlobal:!0});export{N as default};//# sourceMappingURL=roleDetail-WPKPZSX2.js.map
|
|
2
|
+
//# sourceMappingURL=roleDetail-WPKPZSX2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/modules/permission/pages/roleDetail/index.tsx"],"names":["RoleDetail","params","useParams","t","useTranslation","data","isLoading","refetch","useRole","show","modal","useRoleModal","handleUpdateBtnClick","jsxs","Fragment","jsx","Breadcrumb","Link","Card","PermissionButton_default","Skeleton","Descriptions","Divider","permissionList_default","roleDetail_default","withContext"],"mappings":"wYAWA,IAAMA,CAAa,CAAA,IAAM,CACvB,IAAMC,CAAAA,CAASC,SAAU,EAAA,CACnB,CAAE,CAAA,CAAAC,CAAE,CAAA,CAAIC,CAAe,EAAA,CACvB,CAAE,IAAA,CAAAC,CAAM,CAAA,SAAA,CAAAC,EAAW,OAAAC,CAAAA,CAAQ,CAAIC,CAAAA,CAAAA,CAAQP,CAAO,CAAA,IAAc,CAE5D,CAAA,CAAE,IAAAQ,CAAAA,CAAAA,CAAM,KAAAC,CAAAA,GAAM,CAAIC,CAAAA,GAAAA,CAAa,CACnC,IAAM,CAAA,QAAA,CACN,SAAY,EAAA,CACVJ,CAAQ,GACV,CACF,CAAC,CAAA,CAEKK,CAAuB,CAAA,SAAY,CACvCH,CAAAA,CAAK,CACH,aAAe,CAAA,CACb,WAAaJ,CAAAA,CAAAA,EAAM,WACnB,CAAA,IAAA,CAAMA,CAAM,EAAA,IAAA,CAAK,OAAQ,CAAA,QAAA,CAAU,EAAE,CACvC,CACA,CAAA,WAAA,CAAa,CACX,EAAIA,CAAAA,CAAAA,CAAM,EACZ,CACF,CAAC,EACH,CAEA,CAAA,OACEQ,IAAAC,CAAAA,QAAAA,CAAA,CACE,QAAA,CAAA,CAAAC,GAACC,CAAAA,UAAAA,CAAA,CACC,KAAO,CAAA,CAAE,YAAc,CAAA,QAAS,CAChC,CAAA,KAAA,CAAO,CACL,CACE,GAAK,CAAA,GAAA,CACL,KACED,CAAAA,GAAAA,CAACE,IAAA,CAAA,CAAK,GAAG,IAAK,CAAA,QAAA,CAAS,MACpB,CAAA,QAAA,CAAAd,CAAE,CAAA,aAAa,EAClB,CAEJ,CAAA,CACA,CACE,GAAA,CAAK,GACL,CAAA,KAAA,CAAOA,EAAE,kBAAkB,CAC7B,CACF,CAAA,CACF,CACAY,CAAAA,GAAAA,CAACG,IAAA,CAAA,CACC,KAAOf,CAAAA,CAAAA,CAAE,kBAAkB,CAAA,CAC3B,KACEY,CAAAA,GAAAA,CAACI,IAAA,CAAiB,IAAA,CAAK,QAAS,CAAA,OAAA,CAASP,CACtC,CAAA,QAAA,CAAAT,CAAE,CAAA,eAAe,CACpB,CAAA,CAAA,CAGF,QAAAU,CAAAA,IAAAA,CAACO,QAAA,CAAA,CAAS,QAASd,CACjB,CAAA,QAAA,CAAA,CAAAO,IAACQ,CAAAA,YAAAA,CAAA,CAAa,MAAA,CAAQ,CAAG,CAAA,MAAA,CAAO,UAAW,CAAA,SAAA,CAAU,MACnD,CAAA,QAAA,CAAA,CAAAN,GAACM,CAAAA,YAAAA,CAAa,KAAb,CAAkB,KAAA,CAAOlB,CAAE,CAAA,aAAa,CAAI,CAAA,QAAA,CAAAE,GAAM,IAAK,CAAA,CAAA,CACxDU,GAACM,CAAAA,YAAAA,CAAa,IAAb,CAAA,CAAkB,MAAM,IAAM,CAAA,QAAA,CAAAhB,CAAM,EAAA,EAAA,CAAG,CACxCU,CAAAA,GAAAA,CAACM,YAAa,CAAA,IAAA,CAAb,CAAkB,KAAA,CAAOlB,CAAE,CAAA,qBAAqB,CAAI,CAAA,QAAA,CAAAE,GAAM,KAAM,CAAA,CAAA,CAAA,CACnE,CACAU,CAAAA,GAAAA,CAACO,OAAA,CAAA,EAAQ,CACTP,CAAAA,GAAAA,CAACQ,GAAA,CAAA,CAAe,QAAQ,CAAA,CAAA,CAAA,CAAC,KAAOlB,CAAAA,CAAAA,EAAM,YAAa,CACrD,CAAA,CAAA,CAAA,CACF,CACCK,CAAAA,GAAAA,CAAAA,CACH,CAEJ,CAAA,CAEOc,CAAQC,CAAAA,CAAAA,CAAYzB,CAAY,CAAA,CAAE,QAAU,CAAA,CAAA,CAAK,CAAC","file":"roleDetail-WPKPZSX2.js","sourcesContent":["import { Breadcrumb, Card, Descriptions, Divider, Skeleton } from 'antd'\nimport { Link, useParams } from 'react-router-dom'\n\nimport { PermissionButton } from '@/components/permissionButton'\nimport { withContext } from '@/components/toolkitsProvider'\nimport { useTranslation } from '@/locale'\n\nimport { PermissionList } from '../../components'\nimport { useRoleModal } from '../../hooks'\nimport { useRole } from '../../services'\n\nconst RoleDetail = () => {\n const params = useParams()\n const { t } = useTranslation()\n const { data, isLoading, refetch } = useRole(params.name as string)\n\n const { show, modal } = useRoleModal({\n mode: 'update',\n onSuccess() {\n refetch()\n },\n })\n\n const handleUpdateBtnClick = async () => {\n show({\n initialValues: {\n permissions: data?.permissions,\n name: data?.name.replace(/^role_/, ''),\n },\n extraValues: {\n id: data!.id,\n },\n })\n }\n\n return (\n <>\n <Breadcrumb\n style={{ marginBottom: '1.5rem' }}\n items={[\n {\n key: '1',\n title: (\n <Link to=\"..\" relative=\"path\">\n {t('global.role')}\n </Link>\n ),\n },\n {\n key: '2',\n title: t('RoleDetail.title'),\n },\n ]}\n />\n <Card\n title={t('RoleDetail.title')}\n extra={\n <PermissionButton code=\"200003\" onClick={handleUpdateBtnClick}>\n {t('global.update')}\n </PermissionButton>\n }\n >\n <Skeleton loading={isLoading}>\n <Descriptions column={2} layout=\"vertical\" className=\"mb-6\">\n <Descriptions.Item label={t('global.name')}>{data?.name}</Descriptions.Item>\n <Descriptions.Item label=\"ID\">{data?.id}</Descriptions.Item>\n <Descriptions.Item label={t('global.creationTime')}>{data?.ctime}</Descriptions.Item>\n </Descriptions>\n <Divider />\n <PermissionList readonly value={data?.permissions} />\n </Skeleton>\n </Card>\n {modal}\n </>\n )\n}\n\nexport default withContext(RoleDetail, { isGlobal: true })\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {c,b as b$1,e as e$1}from'./chunk-OLVGFJFN.js';import {b}from'./chunk-ZRGA4NV7.js';import {e}from'./chunk-3N7LFLKJ.js';import {a as a$2}from'./chunk-JQHQKJFH.js';import {a as a$1}from'./chunk-S6NRRFWG.js';import {a}from'./chunk-PMXRIKKI.js';import {i,h,k}from'./chunk-N67BWR5M.js';import {UsergroupAddOutlined}from'@ant-design/icons';import {App,Space,Card}from'antd';import {Link}from'react-router-dom';import {jsx,Fragment,jsxs}from'react/jsx-runtime';var $=()=>{let{modal:h$1,message:k$1}=App.useApp(),{data:L}=a("200005"),{t}=a$1(),{permissionVersion:T}=h(e=>e),{refetch:s}=c(),b$2=k(),{show:C,modal:w}=b({mode:"create",onSuccess(){s("role-list",{page:1});}}),{show:V,modal:I}=b({mode:"update",onSuccess(){s("role-list");}}),S=e(),x=async e=>{let o=await b$2.get(`/api/usystem/role/info${T==="v2"?"V2":""}?name=${e.name}`);V({initialValues:{permissions:o.permissions,name:o.name.replace(/^role_/,"")},extraValues:{id:o?.id}});},P=[{title:t("global.name"),key:"name",render(e){return L?jsx(Link,{to:`${e.name}`,relative:"path",children:e.name}):jsx(Fragment,{children:e.name})}},{title:"ID",dataIndex:"id",key:"id"},{title:t("global.creationTime"),dataIndex:"ctime",key:"ctime"},{title:t("global.operation"),width:150,align:"center",render:(e,o)=>jsxs(Space,{size:"small",children:[jsx(a$2,{code:"200003",size:"small",type:"link",onClick:async()=>{x(o);},children:t("global.update")}),jsx(a$2,{danger:!0,code:"200004",size:"small",type:"link",onClick:()=>{h$1.confirm({title:t("Role.deleteTitle"),content:jsx(b$1,{texts:[o.name],children:t("Role.deleteContent",{role:o.name})}),async onOk(){await S.mutate({id:o.id,name:o.name}),s("role-list"),k$1.success(t("Role.deleteSuccessfully"));}});},children:t("global.delete")})]})}];return jsxs(Fragment,{children:[jsx(Card,{title:t("global.role"),extra:jsx(a$2,{type:"primary",code:"200002",icon:jsx(UsergroupAddOutlined,{}),onClick:()=>{C();},children:t("Role.createTitle")}),children:jsx(e$1,{identifier:"role-list",rowKey:"name",columns:P,code:"200001",request:{url:"/api/usystem/role/list",method:"GET"},dataAdapter:e=>({total:e?.Total,items:e?.List})})}),w,I]})},W=i($,{isGlobal:!0});export{W as default};//# sourceMappingURL=roleList-RY6ZEVB4.js.map
|
|
2
|
+
//# sourceMappingURL=roleList-RY6ZEVB4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/modules/permission/pages/roleList/index.tsx"],"names":["RoleList","modal","message","App","viewable","usePermission","useTranslation","permissionVersion","useToolkitsStore","s","refetch","useQueryListStore","ky","useKy","showCreateModal","createModal","useRoleModal","showUpdateModal","updateModal","remove","useRemoveRole","handleUpdateBtnClick","record","data","columns","value","jsx","Link","Fragment","_","jsxs","Space","PermissionButton_default","Highlight_default","Card","UsergroupAddOutlined","QueryList_default","roleList_default","withContext"],"mappings":"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","file":"roleList-RY6ZEVB4.js","sourcesContent":["import { UsergroupAddOutlined } from '@ant-design/icons'\nimport type { TableColumnsType } from 'antd'\nimport { App, Card, Space } from 'antd'\nimport { Link } from 'react-router-dom'\n\nimport { Highlight } from '@/components/highlight'\nimport { PermissionButton } from '@/components/permissionButton'\nimport { QueryList } from '@/components/queryList'\nimport { useQueryListStore } from '@/components/queryList/stores'\nimport { useToolkitsStore, withContext } from '@/components/toolkitsProvider'\nimport { PermissionVersion } from '@/constants'\nimport { useKy } from '@/libs'\nimport { useTranslation } from '@/locale'\nimport { usePermission } from '@/services'\n\nimport { useRoleModal } from '../../hooks'\nimport { useRemoveRole } from '../../services'\nimport type { RoleListItem, RoleV1, RoleV2 } from '../../types'\n\nconst RoleList = () => {\n const { modal, message } = App.useApp()\n const { data: viewable } = usePermission('200005')\n const { t } = useTranslation()\n const { permissionVersion } = useToolkitsStore(s => s)\n const { refetch } = useQueryListStore()\n const ky = useKy()\n\n const { show: showCreateModal, modal: createModal } = useRoleModal({\n mode: 'create',\n onSuccess() {\n refetch('role-list', { page: 1 })\n },\n })\n const { show: showUpdateModal, modal: updateModal } = useRoleModal({\n mode: 'update',\n onSuccess() {\n refetch('role-list')\n },\n })\n\n const remove = useRemoveRole()\n\n const handleUpdateBtnClick = async (record: RoleListItem) => {\n const data = await ky.get<RoleV1 | RoleV2>(\n `/api/usystem/role/info${permissionVersion === PermissionVersion.V2 ? 'V2' : ''}?name=${record.name}`,\n )\n\n showUpdateModal({\n initialValues: {\n permissions: data.permissions,\n name: data.name.replace(/^role_/, ''),\n },\n extraValues: {\n id: data?.id,\n },\n })\n }\n\n const columns: TableColumnsType<RoleListItem> = [\n {\n title: t('global.name'),\n key: 'name',\n render(value: RoleListItem) {\n if (viewable) {\n return (\n <Link to={`${value.name}`} relative=\"path\">\n {value.name}\n </Link>\n )\n } else {\n return <>{value.name}</>\n }\n },\n },\n {\n title: 'ID',\n dataIndex: 'id',\n key: 'id',\n },\n {\n title: t('global.creationTime'),\n dataIndex: 'ctime',\n key: 'ctime',\n },\n {\n title: t('global.operation'),\n width: 150,\n align: 'center',\n render: (_, record) => {\n return (\n <Space size=\"small\">\n <PermissionButton\n code=\"200003\"\n size=\"small\"\n type=\"link\"\n onClick={async () => {\n handleUpdateBtnClick(record)\n }}\n >\n {t('global.update')}\n </PermissionButton>\n <PermissionButton\n danger\n code=\"200004\"\n size=\"small\"\n type=\"link\"\n onClick={() => {\n modal.confirm({\n title: t('Role.deleteTitle'),\n content: (\n <Highlight texts={[record.name]}>{t('Role.deleteContent', { role: record.name })}</Highlight>\n ),\n async onOk() {\n await remove.mutate({\n id: record.id,\n name: record.name,\n })\n\n refetch('role-list')\n\n message.success(t('Role.deleteSuccessfully'))\n },\n })\n }}\n >\n {t('global.delete')}\n </PermissionButton>\n </Space>\n )\n },\n },\n ]\n\n return (\n <>\n <Card\n title={t('global.role')}\n extra={\n <PermissionButton\n type=\"primary\"\n code=\"200002\"\n icon={<UsergroupAddOutlined />}\n onClick={() => {\n showCreateModal()\n }}\n >\n {t('Role.createTitle')}\n </PermissionButton>\n }\n >\n <QueryList<RoleListItem, undefined, { List: RoleListItem[]; Total: number }>\n identifier=\"role-list\"\n rowKey=\"name\"\n columns={columns}\n code=\"200001\"\n request={{\n url: '/api/usystem/role/list',\n method: 'GET',\n }}\n dataAdapter={data => ({\n total: data?.Total,\n items: data?.List,\n })}\n />\n </Card>\n {createModal}\n {updateModal}\n </>\n )\n}\n\nexport default withContext(RoleList, {\n isGlobal: true,\n})\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {b}from'./chunk-PB74M2DE.js';import {b as b$1}from'./chunk-PMXRIKKI.js';import {i,k,l,e}from'./chunk-N67BWR5M.js';import {Editor}from'@monaco-editor/react';import {useQuery}from'@tanstack/react-query';import {App,Form,Card,Input,Switch,InputNumber,Button}from'antd';import {useEffect}from'react';import {useNavigate,useParams}from'react-router-dom';import {jsx,jsxs}from'react/jsx-runtime';var R=i(()=>{let{message:b$2}=App.useApp(),[i]=Form.useForm(),l$1=useNavigate(),{mutate:_}=b(),r=useParams(),{refetch:x}=b$1(),N=k(),{data:p,isLoading:v}=useQuery({queryKey:l.menus.detail(Number(r.id)),queryFn:()=>N.get(`/api/usystem/menu/info?id=${r.id}`),enabled:!!r.id}),q=async n=>{let{permissions:m,front_route:a,...u}=n;await _({...u,permissions:m?JSON.parse(m):void 0,front_route:e+a,id:+r.id}),x(),b$2.success("\u66F4\u65B0\u6210\u529F",.8,()=>l$1("../..",{relative:"route"}));};return useEffect(()=>{let{permissions:n,front_route:m,...a}=p??{},u=JSON.stringify(n||[],null,2),E=m?.replace(e,"");i.setFieldsValue({...a,permissions:u,front_route:E});},[p,i]),jsx(Card,{title:"\u66F4\u65B0\u83DC\u5355\u9879",loading:v,children:jsxs(Form,{scrollToFirstError:!0,form:i,labelCol:{flex:"120px"},initialValues:{is_common:!1,is_model:!1,order:0},onFinish:q,children:[jsx(Form.Item,{label:"\u83DC\u5355\u9879\u540D\u79F0",name:"category",rules:[{required:!0}],children:jsx(Input,{})}),jsx(Form.Item,{label:"\u524D\u7AEF\u8DEF\u7531",name:"front_route",rules:[{required:!0}],children:jsx(Input,{prefix:e})}),jsx(Form.Item,{label:"\u6A21\u677F\u540D\u79F0",name:"model_name",rules:[{required:!0}],children:jsx(Input,{})}),jsx(Form.Item,{label:"Is Common",name:"is_common",rules:[{required:!0}],valuePropName:"checked",children:jsx(Switch,{})}),jsx(Form.Item,{label:"Order",name:"order",children:jsx(InputNumber,{className:"w-full"})}),jsx(Form.Item,{label:"\u63A5\u53E3\u89C4\u5219",name:"permissions",children:jsx(Editor,{theme:"vs-dark",height:"300px",language:"json",options:{minimap:{enabled:!1}}})}),jsx(Form.Item,{label:"Schema",name:"scheme",rules:[{required:!0}],children:jsx(Editor,{theme:"vs-dark",height:"600px",language:"json",options:{minimap:{enabled:!1}}})}),jsx(Form.Item,{label:"Ext",name:"ext",children:jsx(Input.TextArea,{rows:5})}),jsx(Form.Item,{children:jsxs("div",{className:"flex justify-center gap-8",children:[jsx(Button,{type:"primary",htmlType:"submit",children:"\u63D0\u4EA4"}),jsx(Button,{onClick:()=>{l$1("../..",{relative:"path"});},children:"\u53D6\u6D88"})]})})]})})},{isGlobal:!0}),X=R;export{X as default};//# sourceMappingURL=updateMenuItem-AJRUUJ6K.js.map
|
|
2
|
+
//# sourceMappingURL=updateMenuItem-AJRUUJ6K.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/modules/menu/pages/updateMenuItem/index.tsx"],"names":["EditMenuItem","withContext","message","App","form","Form","navigate","useNavigate","mutate","useUpdateMenu","params","useParams","refetch","useMenuList","ky","useKy","data","isLoading","useQuery","queryKeys","onFinish","values","permissions","front_route","rest","FRONTEND_ROUTE_PREFIX","useEffect","permissionsString","frontRoute","jsx","Card","jsxs","Input","Switch","InputNumber","Editor","Button","updateMenuItem_default"],"mappings":"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","file":"updateMenuItem-AJRUUJ6K.js","sourcesContent":["import { Editor } from '@monaco-editor/react'\nimport { useQuery } from '@tanstack/react-query'\nimport { App, Button, Card, Form, Input, InputNumber, Switch } from 'antd'\nimport { useEffect } from 'react'\nimport { useNavigate, useParams } from 'react-router-dom'\n\nimport { withContext } from '@/components/toolkitsProvider'\nimport { FRONTEND_ROUTE_PREFIX } from '@/constants'\nimport { useKy } from '@/libs'\nimport { queryKeys } from '@/queryKeys'\nimport { useMenuList } from '@/services'\nimport type { MenuListItem } from '@/types'\n\nimport { useUpdateMenu } from '../../services'\n\ntype FormSchema = Omit<MenuListItem, 'id' | 'permissions'> & { permissions: string }\n\nconst EditMenuItem = withContext(\n () => {\n const { message } = App.useApp()\n const [form] = Form.useForm<FormSchema>()\n const navigate = useNavigate()\n const { mutate } = useUpdateMenu()\n const params = useParams<'id'>()\n const { refetch } = useMenuList()\n const ky = useKy()\n\n const { data, isLoading } = useQuery({\n queryKey: queryKeys.menus.detail(Number(params.id)),\n queryFn: () => ky.get<MenuListItem>(`/api/usystem/menu/info?id=${params.id}`),\n enabled: !!params.id,\n })\n\n const onFinish = async (values: FormSchema) => {\n const { permissions, front_route, ...rest } = values\n\n await mutate({\n ...rest,\n permissions: permissions ? JSON.parse(permissions) : undefined,\n front_route: FRONTEND_ROUTE_PREFIX + front_route,\n id: +params.id!,\n })\n refetch()\n message.success('更新成功', 0.8, () => navigate('../..', { relative: 'route' }))\n }\n\n useEffect(() => {\n const { permissions, front_route, ...rest } = data ?? {}\n const permissionsString = JSON.stringify(permissions || [], null, 2)\n const frontRoute = front_route?.replace(FRONTEND_ROUTE_PREFIX, '')\n form.setFieldsValue({\n ...rest,\n permissions: permissionsString,\n front_route: frontRoute,\n })\n }, [data, form])\n\n return (\n <Card title=\"更新菜单项\" loading={isLoading}>\n <Form\n scrollToFirstError\n form={form}\n labelCol={{ flex: '120px' }}\n initialValues={{ is_common: false, is_model: false, order: 0 }}\n onFinish={onFinish}\n >\n <Form.Item label=\"菜单项名称\" name=\"category\" rules={[{ required: true }]}>\n <Input />\n </Form.Item>\n <Form.Item label=\"前端路由\" name=\"front_route\" rules={[{ required: true }]}>\n <Input prefix={FRONTEND_ROUTE_PREFIX} />\n </Form.Item>\n <Form.Item label=\"模板名称\" name=\"model_name\" rules={[{ required: true }]}>\n <Input />\n </Form.Item>\n <Form.Item label=\"Is Common\" name=\"is_common\" rules={[{ required: true }]} valuePropName=\"checked\">\n <Switch />\n </Form.Item>\n <Form.Item label=\"Order\" name=\"order\">\n <InputNumber className=\"w-full\" />\n </Form.Item>\n <Form.Item label=\"接口规则\" name=\"permissions\">\n <Editor\n theme=\"vs-dark\"\n height=\"300px\"\n language=\"json\"\n options={{\n minimap: {\n enabled: false,\n },\n }}\n />\n </Form.Item>\n <Form.Item label=\"Schema\" name=\"scheme\" rules={[{ required: true }]}>\n <Editor\n theme=\"vs-dark\"\n height=\"600px\"\n language=\"json\"\n options={{\n minimap: {\n enabled: false,\n },\n }}\n />\n </Form.Item>\n <Form.Item label=\"Ext\" name=\"ext\">\n <Input.TextArea rows={5} />\n </Form.Item>\n <Form.Item>\n <div className=\"flex justify-center gap-8\">\n <Button type=\"primary\" htmlType=\"submit\">\n 提交\n </Button>\n <Button\n onClick={() => {\n navigate('../..', { relative: 'path' })\n }}\n >\n 取消\n </Button>\n </div>\n </Form.Item>\n </Form>\n </Card>\n )\n },\n { isGlobal: true },\n)\n\nexport default EditMenuItem\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {b}from'./chunk-BRZIJDNT.js';import'./chunk-3N7LFLKJ.js';import {a as a$2}from'./chunk-JQHQKJFH.js';import {a}from'./chunk-S6NRRFWG.js';import {c,a as a$1}from'./chunk-PMXRIKKI.js';import {h,k,l,g}from'./chunk-N67BWR5M.js';import {useQuery}from'@tanstack/react-query';import {Tag,Breadcrumb,Card,Descriptions,Table}from'antd';import {useParams,Link}from'react-router-dom';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var _=()=>{let a$3=useParams(),{t}=a(),{gameApiV2:D}=h(),L=k(),{data:s,isLoading:T,refetch:h$1}=useQuery({queryKey:l.users.detail(a$3.id||""),queryFn:()=>L.get(`/api/usystem/user/info?id=${a$3.id}`),enabled:!!a$3.id}),{data:x}=c(),{data:V}=a$1("200005"),{show:B,modal:C}=b({mode:"update",onSuccess(){h$1();}}),K=[{key:"group",title:t("global.projectGroup"),dataIndex:"game_group",render(o){return o.map(r=>jsx(Tag,{children:r===g?"\u901A\u7528":r},r))}},{key:"game",title:t("global.game"),dataIndex:"game_ids",render(o){return o.map(r=>{let P=x?.find(m=>String(D?m.game_id:m.id)===r);return jsx(Tag,{children:P?.name??(r===g?"\u901A\u7528":r)},r)})}},{key:"role",title:t("global.role"),dataIndex:"role",render(o){return V?jsx(Link,{to:`../../role/${o}`,relative:"path",children:o}):o}}];return jsxs(Fragment,{children:[jsx(Breadcrumb,{style:{marginBottom:"1.5rem"},items:[{key:"1",title:jsx(Link,{to:"..",relative:"path",children:t("global.user")})},{key:"2",title:"\u7528\u6237\u8BE6\u60C5"}]}),jsx(Card,{title:"\u7528\u6237\u8BE6\u60C5",loading:T,extra:jsx(a$2,{code:"100003",onClick:()=>{B({initialValues:{name:s?.name,permissions:s?.permissions},extraValues:{id:s.id}});},children:t("global.update")}),children:jsxs(Descriptions,{bordered:!0,column:1,children:[jsx(Descriptions.Item,{label:t("global.name"),children:s?.name}),jsx(Descriptions.Item,{label:"ID",children:s?.id}),jsx(Descriptions.Item,{label:t("global.role"),children:jsx(Table,{rowKey:"role",columns:K,dataSource:s?.permissions,pagination:!1})})]})}),C]})},J=_;export{J as default};//# sourceMappingURL=userDetail-QQDMP7HT.js.map
|
|
2
|
+
//# sourceMappingURL=userDetail-QQDMP7HT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/modules/permission/pages/userDetail/index.tsx"],"names":["UserDetail","params","useParams","useTranslation","gameApiV2","useToolkitsStore","ky","useKy","data","isLoading","refetch","useQuery","queryKeys","games","useGames","roleViewable","usePermission","show","modal","useUserModalV2","columns","value","item","jsx","Tag","WILDCARD","matchedGame","game","Link","jsxs","Fragment","Breadcrumb","Card","PermissionButton_default","Descriptions","Table","userDetail_default"],"mappings":"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","file":"userDetail-QQDMP7HT.js","sourcesContent":["import { useQuery } from '@tanstack/react-query'\nimport { Breadcrumb, Card, Descriptions, Table, Tag } from 'antd'\nimport { Link, useParams } from 'react-router-dom'\n\nimport { PermissionButton } from '@/components/permissionButton'\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport { WILDCARD } from '@/constants'\nimport { useKy } from '@/libs'\nimport { useTranslation } from '@/locale'\nimport { queryKeys } from '@/queryKeys'\nimport { useGames, usePermission } from '@/services'\n\nimport { useUserModalV2 } from '../../hooks'\nimport type { UserListItem } from '../../types'\n\nconst UserDetail = () => {\n const params = useParams<'id'>()\n const { t } = useTranslation()\n const { gameApiV2 } = useToolkitsStore()\n const ky = useKy()\n\n const { data, isLoading, refetch } = useQuery({\n queryKey: queryKeys.users.detail(params.id || ''),\n queryFn: () => ky.get<UserListItem>(`/api/usystem/user/info?id=${params.id}`),\n enabled: !!params.id,\n })\n const { data: games } = useGames()\n const { data: roleViewable } = usePermission('200005')\n\n const { show, modal } = useUserModalV2({\n mode: 'update',\n onSuccess() {\n refetch()\n },\n })\n\n const columns = [\n {\n key: 'group',\n title: t('global.projectGroup'),\n dataIndex: 'game_group',\n render(value: string[]) {\n return value.map(item => {\n return <Tag key={item}>{item === WILDCARD ? '通用' : item}</Tag>\n })\n },\n },\n {\n key: 'game',\n title: t('global.game'),\n dataIndex: 'game_ids',\n render(value: string[]) {\n return value.map(item => {\n const matchedGame = games?.find(game => String(gameApiV2 ? game.game_id : game.id) === item)\n return <Tag key={item}>{matchedGame?.name ?? (item === WILDCARD ? '通用' : item)}</Tag>\n })\n },\n },\n {\n key: 'role',\n title: t('global.role'),\n dataIndex: 'role',\n render(value: string) {\n return roleViewable ? (\n <Link to={`../../role/${value}`} relative=\"path\">\n {value}\n </Link>\n ) : (\n value\n )\n },\n },\n ]\n\n return (\n <>\n <Breadcrumb\n style={{ marginBottom: '1.5rem' }}\n items={[\n {\n key: '1',\n title: (\n <Link to=\"..\" relative=\"path\">\n {t('global.user')}\n </Link>\n ),\n },\n {\n key: '2',\n title: '用户详情',\n },\n ]}\n />\n <Card\n title=\"用户详情\"\n loading={isLoading}\n extra={\n <PermissionButton\n code=\"100003\"\n onClick={() => {\n show({\n initialValues: {\n name: data?.name,\n permissions: data?.permissions,\n },\n extraValues: {\n id: data!.id,\n },\n })\n }}\n >\n {t('global.update')}\n </PermissionButton>\n }\n >\n <Descriptions bordered column={1}>\n <Descriptions.Item label={t('global.name')}>{data?.name}</Descriptions.Item>\n <Descriptions.Item label=\"ID\">{data?.id}</Descriptions.Item>\n <Descriptions.Item label={t('global.role')}>\n <Table rowKey=\"role\" columns={columns} dataSource={data?.permissions} pagination={false} />\n </Descriptions.Item>\n </Descriptions>\n </Card>\n {modal}\n </>\n )\n}\n\nexport default UserDetail\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {a as a$1,b}from'./chunk-BRZIJDNT.js';import {c,b as b$1,e}from'./chunk-OLVGFJFN.js';import {h}from'./chunk-3N7LFLKJ.js';import {a as a$2}from'./chunk-JQHQKJFH.js';import {a}from'./chunk-S6NRRFWG.js';import'./chunk-PMXRIKKI.js';import {i,h as h$1}from'./chunk-N67BWR5M.js';import {UserAddOutlined}from'@ant-design/icons';import {App,Row,Col,Tag,Space,Card,Form,Input}from'antd';import {Link}from'react-router-dom';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var K=()=>{let{modal:V,message:b$2}=App.useApp(),{t:o}=a(),I=h(),{refetch:r}=c(),{permissionVersion:u}=h$1(t=>t),L=u==="v1",i=u==="v3",{show:M,modal:x}=a$1({mode:"create",onSuccess(){r("user-list",{page:1});}}),{show:S,modal:F}=a$1({mode:"update",onSuccess(){r("user-list");}}),{show:A,modal:B}=b({mode:"create",onSuccess(){r("user-list",{page:1});}}),{show:P,modal:R}=b({mode:"update",onSuccess(){r("user-list");}}),z=[{title:o("global.name"),dataIndex:"name",key:"name",render(t,s){return i?jsx(Link,{to:`./${s.id}`,children:t}):t}},{title:"ID",dataIndex:"id",key:"id"},(L||i)&&{title:o("global.role"),dataIndex:"roles",key:"roles",width:"40%",render(t){return jsx(Row,{gutter:[4,4],children:(t||[]).map(s=>jsx(Col,{children:s==="root"?jsx(Tag,{color:"#f50",children:s}):jsx(Tag,{color:"#ff5a00",children:jsx(Link,{to:`../role/${s}`,children:s})})},s))})}},{title:o("global.creationTime"),dataIndex:"Ctime",key:"ctime"},{title:o("global.operation"),width:150,align:"center",render:(t,s)=>{let{name:l,permissions:G,roles:H,id:n}=s;return jsxs(Space,{children:[jsx(a$2,{size:"small",type:"link",code:"100003",onClick:()=>{i?P({initialValues:{name:l,permissions:G},extraValues:{id:n}}):S({initialValues:{name:l,roles:H},extraValues:{id:n}});},children:o("global.update")}),jsx(a$2,{danger:!0,size:"small",code:"100004",type:"link",onClick:()=>{V.confirm({title:o("User.deleteTitle"),content:jsx(b$1,{texts:[l],children:o("User.deleteContent",{user:l})}),async onOk(){await I.mutateAsync({id:n,name:l}),r("user-list"),b$2.success(o("User.deleteSuccessfully"));}});},children:o("global.delete")})]})}}].filter(Boolean);return jsxs(Fragment,{children:[jsx(Card,{title:o("global.user"),extra:jsx(a$2,{type:"primary",icon:jsx(UserAddOutlined,{}),code:"100002",onClick:()=>{i?A():M();},children:o("User.createTitle")}),children:jsx(e,{identifier:"user-list",code:"100001",request:{url:"/api/usystem/user/list",method:"GET"},rowKey:"id",columns:z,dataAdapter:t=>({total:t?.Total,items:t?.List}),renderForm:i?t=>jsx(Form,{form:t,children:jsx(Form.Item,{label:"\u540D\u79F0",name:"name",children:jsx(Input,{})})}):void 0})}),x,F,B,R]})},se=i(K,{isGlobal:!0});export{se as default};//# sourceMappingURL=userList-Q4RULNHM.js.map
|
|
2
|
+
//# sourceMappingURL=userList-Q4RULNHM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/modules/permission/pages/userList/index.tsx"],"names":["UserList","modal","message","App","t","useTranslation","remove","useRemoveUser","refetch","useQueryListStore","permissionVersion","useToolkitsStore","s","isV1","isV3","showCreateModal","createModal","useUserModal","showUpdateModal","updateModal","showCreateModalV2","createModalV2","useUserModalV2","showUpdateModalV2","updateModalV2","columns","value","record","jsx","Link","Row","item","Col","Tag","_","name","permissions","roles","id","jsxs","Space","PermissionButton_default","Highlight_default","Fragment","Card","UserAddOutlined","QueryList_default","data","form","Form","Input","userList_default","withContext"],"mappings":"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","file":"userList-Q4RULNHM.js","sourcesContent":["import { UserAddOutlined } from '@ant-design/icons'\nimport type { TableColumnsType } from 'antd'\nimport { App, Card, Col, Form, Input, Row, Space, Tag } from 'antd'\nimport { type FC } from 'react'\nimport { Link } from 'react-router-dom'\n\nimport { Highlight } from '@/components/highlight'\nimport { PermissionButton } from '@/components/permissionButton'\nimport { QueryList, useQueryListStore } from '@/components/queryList'\nimport { useToolkitsStore, withContext } from '@/components/toolkitsProvider'\nimport { PermissionVersion } from '@/constants'\nimport { useTranslation } from '@/locale'\n\nimport { useUserModal, useUserModalV2 } from '../../hooks'\nimport { useRemoveUser } from '../../services'\nimport type { UserListItem } from '../../types'\n\nconst UserList: FC = () => {\n const { modal, message } = App.useApp()\n const { t } = useTranslation()\n const remove = useRemoveUser()\n const { refetch } = useQueryListStore()\n const { permissionVersion } = useToolkitsStore(s => s)\n const isV1 = permissionVersion === PermissionVersion.V1\n const isV3 = permissionVersion === PermissionVersion.V3\n\n const { show: showCreateModal, modal: createModal } = useUserModal({\n mode: 'create',\n onSuccess() {\n refetch('user-list', { page: 1 })\n },\n })\n\n const { show: showUpdateModal, modal: updateModal } = useUserModal({\n mode: 'update',\n onSuccess() {\n refetch('user-list')\n },\n })\n\n const { show: showCreateModalV2, modal: createModalV2 } = useUserModalV2({\n mode: 'create',\n onSuccess() {\n refetch('user-list', { page: 1 })\n },\n })\n\n const { show: showUpdateModalV2, modal: updateModalV2 } = useUserModalV2({\n mode: 'update',\n onSuccess() {\n refetch('user-list')\n },\n })\n\n const columns = (\n [\n {\n title: t('global.name'),\n dataIndex: 'name',\n key: 'name',\n render(value: string, record) {\n if (isV3) {\n return <Link to={`./${record.id}`}>{value}</Link>\n }\n return value\n },\n },\n {\n title: 'ID',\n dataIndex: 'id',\n key: 'id',\n },\n (isV1 || isV3) && {\n title: t('global.role'),\n dataIndex: 'roles',\n key: 'roles',\n width: '40%',\n render(value: string[]) {\n return (\n <Row gutter={[4, 4]}>\n {(value || []).map((item: string) => (\n <Col key={item}>\n {item === 'root' ? (\n <Tag color=\"#f50\">{item}</Tag>\n ) : (\n <Tag color=\"#ff5a00\">\n <Link to={`../role/${item}`}>{item}</Link>\n </Tag>\n )}\n </Col>\n ))}\n </Row>\n )\n },\n },\n {\n title: t('global.creationTime'),\n dataIndex: 'Ctime',\n key: 'ctime',\n },\n {\n title: t('global.operation'),\n width: 150,\n align: 'center',\n render: (_, record) => {\n const { name, permissions, roles, id } = record\n return (\n <Space>\n <PermissionButton\n size=\"small\"\n type=\"link\"\n code=\"100003\"\n onClick={() => {\n if (isV3) {\n showUpdateModalV2({\n initialValues: {\n name,\n permissions,\n },\n extraValues: {\n id,\n },\n })\n } else {\n showUpdateModal({\n initialValues: {\n name,\n roles,\n },\n extraValues: {\n id,\n },\n })\n }\n }}\n >\n {t('global.update')}\n </PermissionButton>\n <PermissionButton\n danger\n size=\"small\"\n code=\"100004\"\n type=\"link\"\n onClick={() => {\n modal.confirm({\n title: t('User.deleteTitle'),\n content: <Highlight texts={[name]}>{t('User.deleteContent', { user: name })}</Highlight>,\n async onOk() {\n await remove.mutateAsync({\n id,\n name,\n })\n refetch('user-list')\n message.success(t('User.deleteSuccessfully'))\n },\n })\n }}\n >\n {t('global.delete')}\n </PermissionButton>\n </Space>\n )\n },\n },\n ] as TableColumnsType<UserListItem>\n ).filter(Boolean)\n\n return (\n <>\n <Card\n title={t('global.user')}\n extra={\n <PermissionButton\n type=\"primary\"\n icon={<UserAddOutlined />}\n code=\"100002\"\n onClick={() => {\n if (isV3) {\n showCreateModalV2()\n } else {\n showCreateModal()\n }\n }}\n >\n {t('User.createTitle')}\n </PermissionButton>\n }\n >\n <QueryList<UserListItem, { name?: string }, { List: UserListItem[]; Total: number }>\n identifier=\"user-list\"\n code=\"100001\"\n request={{\n url: '/api/usystem/user/list',\n method: 'GET',\n }}\n rowKey=\"id\"\n columns={columns}\n dataAdapter={data => ({\n total: data?.Total,\n items: data?.List,\n })}\n renderForm={\n isV3\n ? form => (\n <Form form={form}>\n <Form.Item label=\"名称\" name=\"name\">\n <Input />\n </Form.Item>\n </Form>\n )\n : undefined\n }\n />\n </Card>\n {createModal}\n {updateModal}\n {createModalV2}\n {updateModalV2}\n </>\n )\n}\n\nexport default withContext(UserList, { isGlobal: true })\n"]}
|
package/locale/context.js
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
import {createContext}from'react';const o=createContext(void 0);var n=o;export{n as default}
|
|
1
|
+
import {createContext}from'react';const o=createContext(void 0);var n=o;export{n as default};//# sourceMappingURL=context.js.map
|
|
2
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/locale/context.ts"],"names":["LocaleContext","createContext","context_default"],"mappings":"kCAKA,MAAMA,EAAgBC,aAA8C,CAAA,KAAA,CAAS,CAE7E,CAAA,IAAOC,CAAQF,CAAAA","file":"context.js","sourcesContent":["import { createContext } from 'react'\nimport type { Locale } from '.'\n\nexport type LocaleContextProps = Locale\n\nconst LocaleContext = createContext<LocaleContextProps | undefined>(undefined)\n\nexport default LocaleContext\n"]}
|
package/locale/en_GB.js
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
const e={global:{noEntitlement:"No permission, please contact the administrator.",name:"Name",creationTime:"Creation Time",operation:"Operation",update:"Update",edit:"Edit",delete:"Delete",selectAll:"Select All",game:"Game",user:"User",role:"Role",username:"Username",password:"Password",label:"Label",method:"Method",route:"Route",request:"Request",response:"Response",add:"Add",signIn:"Sign In",projectGroup:"Project Group",view:"View"},SignIn:{title:"Sign In Method",thirdParty:"Third party sign in",signInWithIDass:"Sign in with IDass",unregistered:"You are not yet registered on the platform, please contact the administrator",welcome:"Welcome"},NotFound:{subTitle:"The page you visited does not exist",buttonText:"Return to homepage"},FilterFormWrapper:{confirmText:"Search",resetText:"Reset"},FormModal:{confirmText:"Confirm",cancelText:"Cancel"},GameSelect:{label:"Current Game",placeholder:"Please select a game"},RequireGame:{description:"Please select a game"},UserWidget:{signOutText:"Sign Out"},User:{createTitle:"Create User",createSuccessfully:"User created successfully",updateTitle:"Update User",updateSuccessfully:"User updated successfully",deleteTitle:"Delete User",deleteContent:"Are you sure you want to delete user <%= user %>?",deleteSuccessfully:"User deleted successfully"},Role:{createTitle:"Create Role",createSuccessfully:"Role created successfully",updateTitle:"Update Role",updateSuccessfully:"Role updated successfully",deleteTitle:"Delete Role",deleteContent:"Are you sure you want to delete role <%= role %>?",deleteSuccessfully:"Role deleted successfully"},PermissionList:{failedDescription:"Failed to get permission list",baseSectionTitle:"Platform Basic Permissions",gameSectionTitle:"Game Permissions",gameSectionDescription:"Please select a game first",gameSelectPlaceholder:"Please select a game first",removeText:"Remove",addText:"Add Game Permissions"},RoleDetail:{title:"Role Details"},InfiniteList:{loadingText:"Loading...",reachEndText:"You've reached the end",loadMoreText:"Load more"}};var t=e;export{t as default}
|
|
1
|
+
const e={global:{noEntitlement:"No permission, please contact the administrator.",name:"Name",creationTime:"Creation Time",operation:"Operation",update:"Update",edit:"Edit",delete:"Delete",selectAll:"Select All",game:"Game",user:"User",role:"Role",username:"Username",password:"Password",label:"Label",method:"Method",route:"Route",request:"Request",response:"Response",add:"Add",signIn:"Sign In",projectGroup:"Project Group",view:"View"},SignIn:{title:"Sign In Method",thirdParty:"Third party sign in",signInWithIDass:"Sign in with IDass",unregistered:"You are not yet registered on the platform, please contact the administrator",welcome:"Welcome"},NotFound:{subTitle:"The page you visited does not exist",buttonText:"Return to homepage"},FilterFormWrapper:{confirmText:"Search",resetText:"Reset"},FormModal:{confirmText:"Confirm",cancelText:"Cancel"},GameSelect:{label:"Current Game",placeholder:"Please select a game"},RequireGame:{description:"Please select a game"},UserWidget:{signOutText:"Sign Out"},User:{createTitle:"Create User",createSuccessfully:"User created successfully",updateTitle:"Update User",updateSuccessfully:"User updated successfully",deleteTitle:"Delete User",deleteContent:"Are you sure you want to delete user <%= user %>?",deleteSuccessfully:"User deleted successfully"},Role:{createTitle:"Create Role",createSuccessfully:"Role created successfully",updateTitle:"Update Role",updateSuccessfully:"Role updated successfully",deleteTitle:"Delete Role",deleteContent:"Are you sure you want to delete role <%= role %>?",deleteSuccessfully:"Role deleted successfully"},PermissionList:{failedDescription:"Failed to get permission list",baseSectionTitle:"Platform Basic Permissions",gameSectionTitle:"Game Permissions",gameSectionDescription:"Please select a game first",gameSelectPlaceholder:"Please select a game first",removeText:"Remove",addText:"Add Game Permissions"},RoleDetail:{title:"Role Details"},InfiniteList:{loadingText:"Loading...",reachEndText:"You've reached the end",loadMoreText:"Load more"}};var t=e;export{t as default};//# sourceMappingURL=en_GB.js.map
|
|
2
|
+
//# sourceMappingURL=en_GB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/locale/en_GB.ts"],"names":["locale","en_GB_default"],"mappings":"AAEA,MAAMA,EAAiB,CACrB,MAAA,CAAQ,CACN,aAAA,CAAe,mDACf,IAAM,CAAA,MAAA,CACN,YAAc,CAAA,eAAA,CACd,UAAW,WACX,CAAA,MAAA,CAAQ,SACR,IAAM,CAAA,MAAA,CACN,OAAQ,QACR,CAAA,SAAA,CAAW,YACX,CAAA,IAAA,CAAM,OACN,IAAM,CAAA,MAAA,CACN,IAAM,CAAA,MAAA,CACN,SAAU,UACV,CAAA,QAAA,CAAU,UACV,CAAA,KAAA,CAAO,QACP,MAAQ,CAAA,QAAA,CACR,MAAO,OACP,CAAA,OAAA,CAAS,UACT,QAAU,CAAA,UAAA,CACV,GAAK,CAAA,KAAA,CACL,OAAQ,SACR,CAAA,YAAA,CAAc,eACd,CAAA,IAAA,CAAM,MACR,CACA,CAAA,MAAA,CAAQ,CACN,KAAA,CAAO,iBACP,UAAY,CAAA,qBAAA,CACZ,gBAAiB,oBACjB,CAAA,YAAA,CAAc,+EACd,OAAS,CAAA,SACX,CACA,CAAA,QAAA,CAAU,CACR,QAAU,CAAA,qCAAA,CACV,WAAY,oBACd,CAAA,CACA,kBAAmB,CACjB,WAAA,CAAa,QACb,CAAA,SAAA,CAAW,OACb,CACA,CAAA,SAAA,CAAW,CACT,WAAa,CAAA,SAAA,CACb,WAAY,QACd,CAAA,CACA,UAAY,CAAA,CACV,MAAO,cACP,CAAA,WAAA,CAAa,sBACf,CAAA,CACA,YAAa,CACX,WAAA,CAAa,sBACf,CAAA,CACA,WAAY,CACV,WAAA,CAAa,UACf,CACA,CAAA,IAAA,CAAM,CACJ,WAAa,CAAA,aAAA,CACb,kBAAoB,CAAA,2BAAA,CACpB,YAAa,aACb,CAAA,kBAAA,CAAoB,4BACpB,WAAa,CAAA,aAAA,CACb,cAAe,mDACf,CAAA,kBAAA,CAAoB,2BACtB,CAAA,CACA,KAAM,CACJ,WAAA,CAAa,cACb,kBAAoB,CAAA,2BAAA,CACpB,YAAa,aACb,CAAA,kBAAA,CAAoB,2BACpB,CAAA,WAAA,CAAa,cACb,aAAe,CAAA,mDAAA,CACf,kBAAoB,CAAA,2BACtB,EACA,cAAgB,CAAA,CACd,iBAAmB,CAAA,+BAAA,CACnB,iBAAkB,4BAClB,CAAA,gBAAA,CAAkB,mBAClB,sBAAwB,CAAA,4BAAA,CACxB,sBAAuB,4BACvB,CAAA,UAAA,CAAY,QACZ,CAAA,OAAA,CAAS,sBACX,CACA,CAAA,UAAA,CAAY,CACV,KAAO,CAAA,cACT,EACA,YAAc,CAAA,CACZ,WAAa,CAAA,YAAA,CACb,aAAc,wBACd,CAAA,YAAA,CAAc,WAChB,CACF,CAAA,KAEOC,CAAQD,CAAAA","file":"en_GB.js","sourcesContent":["import type { Locale } from '.'\n\nconst locale: Locale = {\n global: {\n noEntitlement: 'No permission, please contact the administrator.',\n name: 'Name',\n creationTime: 'Creation Time',\n operation: 'Operation',\n update: 'Update',\n edit: 'Edit',\n delete: 'Delete',\n selectAll: 'Select All',\n game: 'Game',\n user: 'User',\n role: 'Role',\n username: 'Username',\n password: 'Password',\n label: 'Label',\n method: 'Method',\n route: 'Route',\n request: 'Request',\n response: 'Response',\n add: 'Add',\n signIn: 'Sign In',\n projectGroup: 'Project Group',\n view: 'View',\n },\n SignIn: {\n title: 'Sign In Method',\n thirdParty: 'Third party sign in',\n signInWithIDass: 'Sign in with IDass',\n unregistered: 'You are not yet registered on the platform, please contact the administrator',\n welcome: 'Welcome',\n },\n NotFound: {\n subTitle: 'The page you visited does not exist',\n buttonText: 'Return to homepage',\n },\n FilterFormWrapper: {\n confirmText: 'Search',\n resetText: 'Reset',\n },\n FormModal: {\n confirmText: 'Confirm',\n cancelText: 'Cancel',\n },\n GameSelect: {\n label: 'Current Game',\n placeholder: 'Please select a game',\n },\n RequireGame: {\n description: 'Please select a game',\n },\n UserWidget: {\n signOutText: 'Sign Out',\n },\n User: {\n createTitle: 'Create User',\n createSuccessfully: 'User created successfully',\n updateTitle: 'Update User',\n updateSuccessfully: 'User updated successfully',\n deleteTitle: 'Delete User',\n deleteContent: 'Are you sure you want to delete user <%= user %>?',\n deleteSuccessfully: 'User deleted successfully',\n },\n Role: {\n createTitle: 'Create Role',\n createSuccessfully: 'Role created successfully',\n updateTitle: 'Update Role',\n updateSuccessfully: 'Role updated successfully',\n deleteTitle: 'Delete Role',\n deleteContent: 'Are you sure you want to delete role <%= role %>?',\n deleteSuccessfully: 'Role deleted successfully',\n },\n PermissionList: {\n failedDescription: 'Failed to get permission list',\n baseSectionTitle: 'Platform Basic Permissions',\n gameSectionTitle: 'Game Permissions',\n gameSectionDescription: 'Please select a game first',\n gameSelectPlaceholder: 'Please select a game first',\n removeText: 'Remove',\n addText: 'Add Game Permissions',\n },\n RoleDetail: {\n title: 'Role Details',\n },\n InfiniteList: {\n loadingText: 'Loading...',\n reachEndText: \"You've reached the end\",\n loadMoreText: 'Load more',\n },\n}\n\nexport default locale\n"]}
|
package/locale/hooks.js
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
import {has,template,get}from'lodash-es';import {useMemo}from'react';import {useToolkitsStore}from'@/components/toolkitsProvider';function l(){const t=useToolkitsStore(e=>e.locale);return {t:useMemo(()=>(e,n)=>has(t,e)?template(get(t,e))(n):e,[t])}}export{l as useTranslation}
|
|
1
|
+
import {has,template,get}from'lodash-es';import {useMemo}from'react';import {useToolkitsStore}from'@/components/toolkitsProvider';function l(){const t=useToolkitsStore(e=>e.locale);return {t:useMemo(()=>(e,n)=>has(t,e)?template(get(t,e))(n):e,[t])}}export{l as useTranslation};//# sourceMappingURL=hooks.js.map
|
|
2
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/locale/hooks.ts"],"names":["useTranslation","locale","useToolkitsStore","state","useMemo","key","data","has","template","get"],"mappings":"kIAmBO,SAASA,CAAiB,EAAA,CAC/B,MAAMC,CAASC,CAAAA,gBAAAA,CAAiBC,CAASA,EAAAA,CAAAA,CAAM,MAAM,CAAA,CAQrD,OAAO,CAAE,CAAA,CANCC,QACR,IAAM,CAACC,EAAoBC,CACzBC,GAAAA,GAAAA,CAAIN,CAAQI,CAAAA,CAAG,CAAIG,CAAAA,QAAAA,CAASC,IAAIR,CAAQI,CAAAA,CAAa,CAAC,CAAA,CAAEC,CAAI,CAAA,CAAID,EAClE,CAACJ,CAAM,CACT,CAEW,CACb","file":"hooks.js","sourcesContent":["import { get, has, template } from 'lodash-es'\nimport { useMemo } from 'react'\nimport { useToolkitsStore } from '@/components/toolkitsProvider'\nimport type { Locale } from './index'\n\ntype Join<K, P> = K extends string | number\n ? P extends string | number\n ? `${K}${'' extends P ? '' : '.'}${P}`\n : never\n : never\n\ntype Paths<T, D extends number = 10> = [D] extends [never]\n ? never\n : T extends object\n ? {\n [K in keyof T]-?: K extends string | number ? `${K}` | Join<K, Paths<T[K]>> : never\n }[keyof T]\n : ''\n\nexport function useTranslation() {\n const locale = useToolkitsStore(state => state.locale)\n\n const t = useMemo(\n () => (key: Paths<Locale>, data?: Record<string, unknown>) =>\n has(locale, key) ? template(get(locale, key as string))(data) : key,\n [locale],\n )\n\n return { t }\n}\n"]}
|
package/locale/index.js
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export{useTranslation}from'./hooks'
|
|
1
|
+
export{useTranslation}from'./hooks';//# sourceMappingURL=index.js.map
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js","sourcesContent":[]}
|
package/locale/ja_JP.js
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
const e={global:{noEntitlement:"\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093\u3001\u7BA1\u7406\u8005\u306B\u9023\u7D61\u3057\u3066\u304F\u3060\u3055\u3044\u3002",name:"\u540D\u524D",creationTime:"\u4F5C\u6210\u6642\u9593",operation:"\u64CD\u4F5C",update:"\u66F4\u65B0",edit:"\u7DE8\u96C6",delete:"\u524A\u9664",selectAll:"\u5168\u3066\u9078\u629E",game:"\u30B2\u30FC\u30E0",user:"\u30E6\u30FC\u30B6\u30FC",role:"\u5F79\u5272",username:"\u30E6\u30FC\u30B6\u30FC\u540D",password:"\u30D1\u30B9\u30EF\u30FC\u30C9",label:"\u30E9\u30D9\u30EB",method:"\u65B9\u6CD5",route:"\u30EB\u30FC\u30C8",request:"\u30EA\u30AF\u30A8\u30B9\u30C8",response:"\u30EC\u30B9\u30DD\u30F3\u30B9",add:"\u3064\u3044\u304B",signIn:"\u30ED\u30B0\u30A4\u30F3",projectGroup:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30C1\u30FC\u30E0",view:"\u8ABF\u3079\u308B"},SignIn:{title:"\u30ED\u30B0\u30A4\u30F3\u65B9\u6CD5",thirdParty:"\u30B5\u30FC\u30C9\u30D1\u30FC\u30C6\u30A3\u30ED\u30B0\u30A4\u30F3",signInWithIDass:"IDass \u30ED\u30B0\u30A4\u30F3",unregistered:"\u3042\u306A\u305F\u306F\u307E\u3060\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u306B\u767B\u9332\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3001\u7BA1\u7406\u8005\u306B\u9023\u7D61\u3057\u3066\u304F\u3060\u3055\u3044",welcome:"\u30A6\u30A7\u30EB\u30AB\u30E0"},NotFound:{subTitle:"\u30A2\u30AF\u30BB\u30B9\u3057\u305F\u30DA\u30FC\u30B8\u306F\u5B58\u5728\u3057\u307E\u305B\u3093",buttonText:"\u30DA\u30FC\u30B8\u306B\u623B\u308B"},FilterFormWrapper:{confirmText:"\u691C\u7D22",resetText:"\u30EA\u30BB\u30C3\u30C8"},FormModal:{confirmText:"\u78BA\u8A8D",cancelText:"\u30AD\u30E3\u30F3\u30BB\u30EB"},GameSelect:{label:"\u73FE\u5728\u306E\u30B2\u30FC\u30E0",placeholder:"\u30B2\u30FC\u30E0\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044"},RequireGame:{description:"\u30B2\u30FC\u30E0\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044"},UserWidget:{signOutText:"\u30ED\u30B0\u30A2\u30A6\u30C8"},User:{createTitle:"\u30E6\u30FC\u30B6\u30FC\u3092\u4F5C\u6210",createSuccessfully:"\u30E6\u30FC\u30B6\u30FC\u304C\u6B63\u5E38\u306B\u4F5C\u6210\u3055\u308C\u307E\u3057\u305F",updateTitle:"\u30E6\u30FC\u30B6\u30FC\u3092\u66F4\u65B0",updateSuccessfully:"\u30E6\u30FC\u30B6\u30FC\u304C\u6B63\u5E38\u306B\u66F4\u65B0\u3055\u308C\u307E\u3057\u305F",deleteTitle:"\u30E6\u30FC\u30B6\u30FC\u3092\u524A\u9664",deleteContent:"\u30E6\u30FC\u30B6\u30FC<%= user %>\u3092\u524A\u9664\u3057\u3066\u3082\u3088\u308D\u3057\u3044\u3067\u3059\u304B\uFF1F",deleteSuccessfully:"\u30E6\u30FC\u30B6\u30FC\u304C\u6B63\u5E38\u306B\u524A\u9664\u3055\u308C\u307E\u3057\u305F"},Role:{createTitle:"\u5F79\u5272\u3092\u4F5C\u6210",createSuccessfully:"\u5F79\u5272\u304C\u6B63\u5E38\u306B\u4F5C\u6210\u3055\u308C\u307E\u3057\u305F",updateTitle:"\u5F79\u5272\u3092\u66F4\u65B0",updateSuccessfully:"\u5F79\u5272\u304C\u6B63\u5E38\u306B\u66F4\u65B0\u3055\u308C\u307E\u3057\u305F",deleteTitle:"\u5F79\u5272\u3092\u524A\u9664",deleteContent:"\u5F79\u5272<%= role %>\u3092\u524A\u9664\u3057\u3066\u3082\u3088\u308D\u3057\u3044\u3067\u3059\u304B\uFF1F",deleteSuccessfully:"\u5F79\u5272\u304C\u6B63\u5E38\u306B\u524A\u9664\u3055\u308C\u307E\u3057\u305F"},PermissionList:{failedDescription:"\u6A29\u9650\u30EA\u30B9\u30C8\u306E\u53D6\u5F97\u306B\u5931\u6557\u3057\u307E\u3057\u305F",baseSectionTitle:"\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u57FA\u672C\u6A29\u9650",gameSectionTitle:"\u30B2\u30FC\u30E0\u6A29\u9650",gameSectionDescription:"\u5148\u306B\u30B2\u30FC\u30E0\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044",gameSelectPlaceholder:"\u5148\u306B\u30B2\u30FC\u30E0\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044",removeText:"\u524A\u9664",addText:"\u30B2\u30FC\u30E0\u6A29\u9650\u3092\u8FFD\u52A0"},RoleDetail:{title:"\u5F79\u5272\u8A73\u7D30"},InfiniteList:{loadingText:"\u8AAD\u307F\u8FBC\u307F\u4E2D",reachEndText:"\u6700\u5F8C\u307E\u3067\u5230\u9054\u3057\u307E\u3057\u305F",loadMoreText:"\u3082\u3063\u3068\u8AAD\u307F\u8FBC\u3080"}};var t=e;export{t as default}
|
|
1
|
+
const e={global:{noEntitlement:"\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093\u3001\u7BA1\u7406\u8005\u306B\u9023\u7D61\u3057\u3066\u304F\u3060\u3055\u3044\u3002",name:"\u540D\u524D",creationTime:"\u4F5C\u6210\u6642\u9593",operation:"\u64CD\u4F5C",update:"\u66F4\u65B0",edit:"\u7DE8\u96C6",delete:"\u524A\u9664",selectAll:"\u5168\u3066\u9078\u629E",game:"\u30B2\u30FC\u30E0",user:"\u30E6\u30FC\u30B6\u30FC",role:"\u5F79\u5272",username:"\u30E6\u30FC\u30B6\u30FC\u540D",password:"\u30D1\u30B9\u30EF\u30FC\u30C9",label:"\u30E9\u30D9\u30EB",method:"\u65B9\u6CD5",route:"\u30EB\u30FC\u30C8",request:"\u30EA\u30AF\u30A8\u30B9\u30C8",response:"\u30EC\u30B9\u30DD\u30F3\u30B9",add:"\u3064\u3044\u304B",signIn:"\u30ED\u30B0\u30A4\u30F3",projectGroup:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30C1\u30FC\u30E0",view:"\u8ABF\u3079\u308B"},SignIn:{title:"\u30ED\u30B0\u30A4\u30F3\u65B9\u6CD5",thirdParty:"\u30B5\u30FC\u30C9\u30D1\u30FC\u30C6\u30A3\u30ED\u30B0\u30A4\u30F3",signInWithIDass:"IDass \u30ED\u30B0\u30A4\u30F3",unregistered:"\u3042\u306A\u305F\u306F\u307E\u3060\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u306B\u767B\u9332\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3001\u7BA1\u7406\u8005\u306B\u9023\u7D61\u3057\u3066\u304F\u3060\u3055\u3044",welcome:"\u30A6\u30A7\u30EB\u30AB\u30E0"},NotFound:{subTitle:"\u30A2\u30AF\u30BB\u30B9\u3057\u305F\u30DA\u30FC\u30B8\u306F\u5B58\u5728\u3057\u307E\u305B\u3093",buttonText:"\u30DA\u30FC\u30B8\u306B\u623B\u308B"},FilterFormWrapper:{confirmText:"\u691C\u7D22",resetText:"\u30EA\u30BB\u30C3\u30C8"},FormModal:{confirmText:"\u78BA\u8A8D",cancelText:"\u30AD\u30E3\u30F3\u30BB\u30EB"},GameSelect:{label:"\u73FE\u5728\u306E\u30B2\u30FC\u30E0",placeholder:"\u30B2\u30FC\u30E0\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044"},RequireGame:{description:"\u30B2\u30FC\u30E0\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044"},UserWidget:{signOutText:"\u30ED\u30B0\u30A2\u30A6\u30C8"},User:{createTitle:"\u30E6\u30FC\u30B6\u30FC\u3092\u4F5C\u6210",createSuccessfully:"\u30E6\u30FC\u30B6\u30FC\u304C\u6B63\u5E38\u306B\u4F5C\u6210\u3055\u308C\u307E\u3057\u305F",updateTitle:"\u30E6\u30FC\u30B6\u30FC\u3092\u66F4\u65B0",updateSuccessfully:"\u30E6\u30FC\u30B6\u30FC\u304C\u6B63\u5E38\u306B\u66F4\u65B0\u3055\u308C\u307E\u3057\u305F",deleteTitle:"\u30E6\u30FC\u30B6\u30FC\u3092\u524A\u9664",deleteContent:"\u30E6\u30FC\u30B6\u30FC<%= user %>\u3092\u524A\u9664\u3057\u3066\u3082\u3088\u308D\u3057\u3044\u3067\u3059\u304B\uFF1F",deleteSuccessfully:"\u30E6\u30FC\u30B6\u30FC\u304C\u6B63\u5E38\u306B\u524A\u9664\u3055\u308C\u307E\u3057\u305F"},Role:{createTitle:"\u5F79\u5272\u3092\u4F5C\u6210",createSuccessfully:"\u5F79\u5272\u304C\u6B63\u5E38\u306B\u4F5C\u6210\u3055\u308C\u307E\u3057\u305F",updateTitle:"\u5F79\u5272\u3092\u66F4\u65B0",updateSuccessfully:"\u5F79\u5272\u304C\u6B63\u5E38\u306B\u66F4\u65B0\u3055\u308C\u307E\u3057\u305F",deleteTitle:"\u5F79\u5272\u3092\u524A\u9664",deleteContent:"\u5F79\u5272<%= role %>\u3092\u524A\u9664\u3057\u3066\u3082\u3088\u308D\u3057\u3044\u3067\u3059\u304B\uFF1F",deleteSuccessfully:"\u5F79\u5272\u304C\u6B63\u5E38\u306B\u524A\u9664\u3055\u308C\u307E\u3057\u305F"},PermissionList:{failedDescription:"\u6A29\u9650\u30EA\u30B9\u30C8\u306E\u53D6\u5F97\u306B\u5931\u6557\u3057\u307E\u3057\u305F",baseSectionTitle:"\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u57FA\u672C\u6A29\u9650",gameSectionTitle:"\u30B2\u30FC\u30E0\u6A29\u9650",gameSectionDescription:"\u5148\u306B\u30B2\u30FC\u30E0\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044",gameSelectPlaceholder:"\u5148\u306B\u30B2\u30FC\u30E0\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044",removeText:"\u524A\u9664",addText:"\u30B2\u30FC\u30E0\u6A29\u9650\u3092\u8FFD\u52A0"},RoleDetail:{title:"\u5F79\u5272\u8A73\u7D30"},InfiniteList:{loadingText:"\u8AAD\u307F\u8FBC\u307F\u4E2D",reachEndText:"\u6700\u5F8C\u307E\u3067\u5230\u9054\u3057\u307E\u3057\u305F",loadMoreText:"\u3082\u3063\u3068\u8AAD\u307F\u8FBC\u3080"}};var t=e;export{t as default};//# sourceMappingURL=ja_JP.js.map
|
|
2
|
+
//# sourceMappingURL=ja_JP.js.map
|