@abtnode/webapp 1.6.13 → 1.6.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/blocklet.js +14 -14
  2. package/blocklet.yml +1 -1
  3. package/build/asset-manifest.json +18 -18
  4. package/build/index.html +1 -1
  5. package/build/{precache-manifest.3f2f324f896d80671d77a0418c17d1c4.js → precache-manifest.8160f7a6905012f6d2b9083c688c5273.js} +16 -16
  6. package/build/service-worker.js +1 -1
  7. package/build/static/js/{15.da775437.chunk.js → 15.403af260.chunk.js} +1 -1
  8. package/build/static/js/{15.da775437.chunk.js.map → 15.403af260.chunk.js.map} +1 -1
  9. package/build/static/js/{19.fc33fa61.chunk.js → 19.41a7de9e.chunk.js} +1 -1
  10. package/build/static/js/{19.fc33fa61.chunk.js.map → 19.41a7de9e.chunk.js.map} +1 -1
  11. package/build/static/js/6.0f4641da.chunk.js +3 -0
  12. package/build/static/js/{6.573ea107.chunk.js.LICENSE.txt → 6.0f4641da.chunk.js.LICENSE.txt} +0 -0
  13. package/build/static/js/6.0f4641da.chunk.js.map +1 -0
  14. package/build/static/js/{8.27e60ccf.chunk.js → 8.b76851ef.chunk.js} +3 -3
  15. package/build/static/js/{8.27e60ccf.chunk.js.LICENSE.txt → 8.b76851ef.chunk.js.LICENSE.txt} +0 -0
  16. package/build/static/js/8.b76851ef.chunk.js.map +1 -0
  17. package/build/static/js/{main.9098ab8e.chunk.js → main.3a4f2117.chunk.js} +2 -2
  18. package/build/static/js/main.3a4f2117.chunk.js.map +1 -0
  19. package/build/static/js/{runtime-main.a7211655.js → runtime-main.75ac0b98.js} +2 -2
  20. package/build/static/js/{runtime-main.a7211655.js.map → runtime-main.75ac0b98.js.map} +1 -1
  21. package/package.json +1 -1
  22. package/build/static/js/6.573ea107.chunk.js +0 -3
  23. package/build/static/js/6.573ea107.chunk.js.map +0 -1
  24. package/build/static/js/8.27e60ccf.chunk.js.map +0 -1
  25. package/build/static/js/main.9098ab8e.chunk.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../node_modules/lodash/keysIn.js","../../../node_modules/lodash/_cloneArrayBuffer.js","../../../node_modules/@arcblock/icons/lib/DeleteIcon.js","../../mocks/lib/jspdf.js","components/router/rule/action/config-routing-rule.js","../../../node_modules/pretty-ms-i18n/index.js","../../../node_modules/pretty-ms-i18n/lang/en.js","../../../node_modules/pretty-ms-i18n/lang/zh.js","../../../node_modules/pretty-ms-i18n/lib/parse_ms.js","../../../node_modules/parse-ms/index.js","../../../node_modules/@material-ui/icons/PlayArrow.js","../../../node_modules/@material-ui/icons/Stop.js","../../../node_modules/@material-ui/icons/Replay.js","../../../node_modules/@material-ui/icons/Autorenew.js","../../../node_modules/@material-ui/icons/Settings.js","../../../node_modules/@material-ui/icons/Receipt.js","../../../node_modules/@material-ui/icons/Group.js","../../../node_modules/@material-ui/icons/MoreVert.js","../../../node_modules/@arcblock/icons/lib/LockIcon.js","components/actions.js","../../../node_modules/@arcblock/icons/lib/ForbidLoginIcon.js","../../../node_modules/@arcblock/icons/lib/AllowLoginIcon.js","components/passport-tag.js","../../../node_modules/lodash/_assignValue.js","../../../node_modules/lodash/_baseAssignValue.js","../../../node_modules/lodash/_getSymbolsIn.js","../../../node_modules/lodash/_getPrototype.js","../../../node_modules/charenc/charenc.js","../../../node_modules/@material-ui/icons/ArrowForward.js","../../../node_modules/@material-ui/icons/Link.js","components/button-group-with-actions.js","components/blocklet/actions.js","components/blocklet/version.js","../../../node_modules/@material-ui/icons/ArrowUpward.js","../../../node_modules/@material-ui/icons/ExpandMore.js","components/router/rule/domain-status.js","../../../node_modules/@material-ui/icons/Https.js","components/router/rule/action/add-domain-alias.js","../../../node_modules/@material-ui/icons/CallMerge.js","components/router/rule/action/add-rule.js","components/router/rule/action/update-domain-security.js","../../../node_modules/@material-ui/icons/MoreHoriz.js","components/router/rule/action/delete-domain-alias.js","components/router/rule/action/update-rule.js","components/router/rule/action/delete-rule.js","../../../node_modules/@arcblock/icons/lib/PersonIcon.js","../../../node_modules/@arcblock/icons/lib/RevokeIcon.js","../../../node_modules/@material-ui/icons/ErrorOutline.js","../../../node_modules/lodash/_baseClone.js","../../../node_modules/lodash/_arrayEach.js","../../../node_modules/lodash/_baseAssign.js","../../../node_modules/lodash/_baseAssignIn.js","../../../node_modules/lodash/_baseKeysIn.js","../../../node_modules/lodash/_nativeKeysIn.js","../../../node_modules/lodash/_cloneBuffer.js","../../../node_modules/lodash/_copyArray.js","../../../node_modules/lodash/_copySymbols.js","../../../node_modules/lodash/_copySymbolsIn.js","../../../node_modules/lodash/_getAllKeysIn.js","../../../node_modules/lodash/_initCloneArray.js","../../../node_modules/lodash/_initCloneByTag.js","../../../node_modules/lodash/_cloneDataView.js","../../../node_modules/lodash/_cloneRegExp.js","../../../node_modules/lodash/_cloneSymbol.js","../../../node_modules/lodash/_cloneTypedArray.js","../../../node_modules/lodash/_initCloneObject.js","../../../node_modules/lodash/_baseCreate.js","../../../node_modules/lodash/isMap.js","../../../node_modules/lodash/_baseIsMap.js","../../../node_modules/lodash/isSet.js","../../../node_modules/lodash/_baseIsSet.js","../../../node_modules/md5/md5.js","../../../node_modules/crypt/crypt.js","../../../node_modules/is-buffer/index.js","../../../node_modules/@material-ui/icons/ArrowBack.js","components/pagination-list.js","components/team/members/invite-member.js","components/team/members/passport-issuances.js","components/team/members/issue-passport.js","components/team/members/passports.js","components/team/members/toggle-user-approval.js","components/team/members/member.js","components/team/members/invitations.js","components/team/members/actions.js","components/team/members/index.js","components/team/passports/mutate-role.js","components/team/passports/detail.js","icons/long-arrow.svg","components/team/passports/trusted-issuer.js","components/team/passports/trusted-issuers.js","components/team/passports/index.js","../../../node_modules/@material-ui/lab/esm/internal/svg-icons/FirstPage.js","../../../node_modules/@material-ui/lab/esm/internal/svg-icons/LastPage.js","../../../node_modules/@material-ui/lab/esm/internal/svg-icons/NavigateBefore.js","../../../node_modules/@material-ui/lab/esm/internal/svg-icons/NavigateNext.js","../../../node_modules/@material-ui/lab/esm/PaginationItem/PaginationItem.js","../../../node_modules/@material-ui/lab/esm/Pagination/Pagination.js","../../../node_modules/@material-ui/lab/esm/Pagination/usePagination.js","../../../node_modules/lodash/toUpper.js","../../../node_modules/lodash/isEmpty.js","../../../node_modules/@material-ui/icons/Update.js","../../../node_modules/@material-ui/icons/Security.js","../../../node_modules/@material-ui/icons/OpenInNew.js","components/blocklet/disk-info.js","components/blocklet/runtime-info.js","components/blocklet/overview.js","components/blocklet/service.js","components/blocklet/configuration.js","components/router/rule/action/add-cert.js","components/blocklet/router/domain-actions.js","components/blocklet/router/rule-actions.js","components/blocklet/router/rule.js","components/blocklet/access.js","pages/blocklets/detail.js","../../../node_modules/@material-ui/core/esm/ButtonGroup/index.js","hooks/mobile-width.js","components/confirm.js","contexts/team.js","components/click-to-copy.js","components/table-icons.js","components/table.js","../../../node_modules/@arcblock/ux/lib/Empty/index.js","../../../blocklet/meta/lib/util.js","components/blocklet/status.js","components/dot.js","../../../node_modules/@arcblock/ux/lib/ButtonGroup/index.js","../../../node_modules/@arcblock/ux/lib/ClickToCopy/index.js","components/router/rule/action/utils/index.js","components/team/styles/list-header.js","components/team/search-input.js","../../../node_modules/lodash/_copyObject.js","../../../node_modules/pretty-ms-i18n/lib/register_lang.js","components/tag.js","components/blocklet/avatar.js","components/delete-confirm.js","components/blocklet/icons.js","hooks/persistent-sort.js","contexts/domain-status.js","../../../node_modules/@arcblock/icons/lib/ExternalIssuerIcon.js","../../../node_modules/@arcblock/icons/lib/EditIcon.js","../../../node_modules/lodash/cloneDeep.js"],"names":["arrayLikeKeys","require","baseKeysIn","isArrayLike","module","exports","object","Uint8Array","arrayBuffer","result","constructor","byteLength","set","Object","defineProperty","value","default","obj","_react","__esModule","Component","props","createElement","d","defaultProps","width","height","viewBox","xmlns","displayName","_default","ConfigRoutingRule","params","blocklets","setParams","setError","serviceTypes","t","useLocaleContext","redirectCodesMap","302","301","sortedBlocklets","sortBy","x","meta","name","getParamsOnBlockletChange","did","blocklet","find","webInterface","get","type","BLOCKLET_INTERFACE_TYPE_WEB","getWebInterface","selected","port","ports","internal","pathPrefix","prefix","BLOCKLET_DYNAMIC_PATH_PREFIX","getParamsFromInterface","interfaceName","useEffect","ROUTING_RULE_TYPES","BLOCKLET","__disableConfirm","select","label","autoComplete","variant","data-cy","fullWidth","onChange","e","target","style","marginBottom","SelectProps","map","key","version","marginLeft","status","length","REDIRECT","redirectCode","keys","code","autoFocus","url","helperText","trim","NONE","en_US","zh_CN","registerLang","prettyMilliseconds","year","long","short","day","hour","minute","second","millisecond","microsecond","nanosecond","parseMilliseconds","getLocale","getLang","pluralize","word","count","milliseconds","options","Number","isFinite","TypeError","colonNotation","compact","formatSubMilliseconds","separateMilliseconds","verbose","secondsDecimalDigits","millisecondsDecimalDigits","locale","floorDecimals","decimalDigits","flooredInterimValue","Math","floor","round","toFixed","add","unit","valueToString","suffix","valueString","toString","wholeDigits","includes","split","minLength","repeat","max","values","parsed","filter","days","hours","minutes","push","trunc","seconds","microseconds","nanoseconds","millisecondsAndBelow","roundedMiliseconds","ceil","millisecondsString","parseFloat","secondsFixed","secondsString","keepDecimalsOnWholeSeconds","replace","longUnit","shortUnit","unitCount","separator","slice","join","roundTowardsZero","_interopRequireDefault","_interopRequireWildcard","React","Actions","actions","useState","anchorEl","setAnchorEl","open","Boolean","onClose","stopPropagation","preventDefault","Div","aria-label","aria-controls","aria-haspopup","onClick","currentTarget","id","keepMounted","PaperProps","action","close","icon","text","disabled","opts","dense","minWidth","marginRight","primary","styled","div","fillRule","clipRule","y","rx","transform","PassportTag","passport","onDelete","rest","Tag","title","className","span","baseAssignValue","eq","hasOwnProperty","prototype","objValue","call","undefined","arrayPush","getPrototype","getSymbols","stubArray","getSymbolsIn","getOwnPropertySymbols","overArg","getPrototypeOf","charenc","utf8","stringToBytes","str","bin","unescape","encodeURIComponent","bytesToString","bytes","decodeURIComponent","escape","i","charCodeAt","String","fromCharCode","ButtonWithActions","children","anchorRef","useRef","unfold","setUnfold","color","rounded","size","aria-expanded","ref","pre","current","role","placement","disablePortal","onClickAway","contains","BlockletActions","onStart","onComplete","history","useHistory","node","useNodeContext","currentAction","setCurrentAction","loading","setLoading","confirmSetting","setConfirmSetting","useContext","LocaleContext","createHandler","fn","requireUserConfirm","a","onConfirm","input","keepData","removeType","sleep","Toast","success","errMsg","formatError","error","Error","onCancel","confirmSettings","stop","description","confirm","cancel","restart","remove","component","gutterBottom","control","cancelDownload","onOpen","onAction","handler","console","removeAction","isDeletableBlocklet","Icons","Remove","api","deleteBlocklet","cancelDownloadAction","cancelDownloadBlocklet","missingRequiredConfigs","getRequiredMissingConfigs","Start","startBlocklet","isDownloading","mode","BLOCKLET_MODES","DEVELOPMENT","Stop","stopBlocklet","Restart","restartBlocklet","Reload","reloadBlocklet","onlyInMenu","Config","isAuthServiceEnabled","Group","Log","inProgress","isInProgress","permission","hasPermission","actions-blocklet-did","maxWidth","severity","to","fontSize","theme","breakpoints","sm","BlockletVersion","checkUpgrade","info","newVersionBlocklet","setNewVersionBlocklet","enqueueSnackbar","useSnackbar","getLatestBlockletVersion","then","data","registryUrl","semver","gt","catch","err","source","deployedFrom","blockletRegistry","upgradeBlocklet","autoHideDuration","setting","message","withPermission","Certificate","certificate","handlePopoverClose","aria-owns","onMouseEnter","event","onMouseLeave","cursor","pointerEvents","anchorOrigin","vertical","horizontal","transformOrigin","disableRestoreFocus","display","src","alt","maxHeight","fontWeight","domain","formatToDate","validFrom","validTo","DomainStatus","filters","useDomainStatusContext","shouldCheckDomainStatus","window","location","hostname","domainIcon","httpsIcon","isHttps","matchedCert","checkIsWildcardDomain","dns","resolved","ip","items","propTypes","PropTypes","string","isRequired","array","AddDomainAlias","onActivate","useRoutingContext","DOMAIN_FOR_DEFAULT_SITE","addDomainAlias","onEnter","inputProps","validateDomain","onKeyPress","onMenuItemClick","AddRule","onRuleAdded","validateRule","rule","from","addRule","disable","validateResult","validatePathPrefix","getInitialBlockletDid","UpdateDomainSecurity","corsAllowedOrigins","isSpecialDomain","endsWith","BLOCKLET_SITE_GROUP_SUFFIX","updateSite","Array","isArray","DeleteDomainAlias","domainAlias","deleteDomainAlias","edge","UpdateRule","parent","updateRule","DeleteRule","siteId","deleteRule","keyName","confirmPlaceholder","clipPath","Stack","arrayEach","assignValue","baseAssign","baseAssignIn","cloneBuffer","copyArray","copySymbols","copySymbolsIn","getAllKeys","getAllKeysIn","getTag","initCloneArray","initCloneByTag","initCloneObject","isBuffer","isMap","isObject","isSet","keysIn","cloneableTags","baseClone","bitmask","customizer","stack","isDeep","isFlat","isFull","isArr","tag","isFunc","stacked","forEach","subValue","iteratee","index","copyObject","isPrototype","nativeKeysIn","isProto","root","freeExports","nodeType","freeModule","Buffer","allocUnsafe","buffer","copy","baseGetAllKeys","cloneArrayBuffer","cloneDataView","cloneRegExp","cloneSymbol","cloneTypedArray","Ctor","dataView","byteOffset","reFlags","regexp","exec","lastIndex","Symbol","symbolProto","symbolValueOf","valueOf","symbol","typedArray","baseCreate","objectCreate","create","proto","baseIsMap","baseUnary","nodeUtil","nodeIsMap","isObjectLike","baseIsSet","nodeIsSet","crypt","md5","encoding","m","bytesToWords","l","b","c","FF","_ff","GG","_gg","HH","_hh","II","_ii","aa","bb","cc","dd","endian","s","n","_blocksize","_digestsize","digestbytes","wordsToBytes","asBytes","asString","bytesToHex","base64map","rotl","rotr","randomBytes","random","words","hex","hexToBytes","parseInt","substr","bytesToBase64","base64","triplet","j","charAt","base64ToBytes","imod4","indexOf","pow","readFloatLE","isSlowBuffer","_isBuffer","PaginationList","list","rowsPerPage","empty","page","setPage","offset","emptyElement","Box","mt","justifyContent","Pagination","InviteMember","teamDid","roles","onSuccess","onError","authInfo","activeStep","setActiveStep","inviteInfo","setInviteInfo","setRole","remark","setRemark","onCreate","trimRemark","createInvitation","step","body","Typography","FormControl","InputLabel","Select","r","MenuItem","marginTop","TextField","link","getInviteLink","inviteId","endpoint","Bold","expireDate","formatToDatetime","showCloseButton","DialogContentText","PassportIssuances","issuances","onRefresh","client","findInterfaceWithAuthService","useBlockletContext","delConfirm","setDelConfirm","deleteIssuance","deletePassportIssuance","sessionId","getLink","column","getIssuePassportLink","Issuance","can","IssuePassport","ownerDid","createPassportIssuance","disableBackdropClick","disableEscapeKeyDown","minHeight","ConfirmDescription","useTeamContext","Passports","user","session","useSessionContext","teamIssuerDid","refreshTeam","refresh","enablePassportIssuance","trustedPassports","toggleConfirm","setToggleConfirm","showIssueDialog","setShowIssueDialog","search","setSearch","passports","revoked","PASSPORT_STATUS","REVOKED","togglePassportStatus","method","userDid","passportId","revokeInfo","revokable","issuer","filteredPassports","placeholder","approved","alignItems","createPassportSvg","issuerDid","upperFirst","some","Tooltip","ErrorOutlineIcon","mr","item","ToggleUserApproval","sessionUser","nodeInfo","show","setShow","updateUserApproval","approveConfirm","nodeOwner","isNodeOwner","Member","initTab","setIssuances","setUser","tab","setTab","getData","doBatchQuery","getUser","getPassportIssuances","res","useSubscription","tabConfigs","fullName","email","updatedAt","createdAt","row","valueComponent","nameWidth","nameFormatter","tabs","tabConfig","BlockButton","Center","avatar","backgroundColor","mx","newTab","scrollButtons","Invitations","invitations","usePersistentSort","sortDirections","onSortChange","deleteInvitation","invitedUserOnly","textAlign","margin","columns","field","defaultSort","render","sorting","align","icons","tableIcons","onOrderChange","emptyRowsWhenPaging","actionsColumnIndex","tableLayout","maxBodyHeight","pageSize","pageSizeOptions","localization","toolbar","searchPlaceholder","emptyDataSourceMessage","MemberActions","onIssuePassport","setEnablePassportIssuance","o","ListItemIcon","ListItemText","hasRole","z","MemberList","users","showInviteMember","setShowInviteMember","showInviting","setShowInviting","memberDialog","setMemberDialog","roleTab","setRoleTab","usersBySearch","toLowerCase","sideList","num","unshift","isInvitationEnabled","sortedUsers","sort","Date","lastLoginAt","isFromExternal","paginateUsers","main","ml","SimpleInfo","copyable","moment","fromNow","md","MutateRole","setTitle","setDescription","_title","desc","createRole","updateRole","paddingTop","multiline","rows","PassportDetail","roleName","permissions","isNodeTeam","binds","setBinds","updateForm","setUpdateForm","cloneDeep","isProtected","isProtectedRole","deletePassport","deleteRole","team","getPermissionsByRole","permissionList","bindList","bind","onBind","grantNames","updatePermissionsForRole","readPermissionsOnly","IconButton","fill","FormControlLabel","Checkbox","checked","state","_path","_excluded","_extends","assign","arguments","apply","this","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","_ref","svgRef","ForwardRef","forwardRef","canSave","mappings","TrustedIssuer","setIssuerDid","setMappings","editIndex","findIndex","configTrustedPassports","trustedList","prepend","ROLES","GUEST","my","flexGrow","flexBasis","flexShrink","splice","TrustedIssuers","trustedIssuer","setTrustedIssuer","deleteTrustedIssuer","filteredIssuers","ListHeader","PassportList","teamName","showCreate","setShowCreate","showTrustedIssuers","setShowTrustedIssuers","toggleShowIssue","configPassportIssuance","enable","filteredRoles","borderRight","createSvgIcon","PaginationItem","classes","_props$color","_props$disabled","_props$selected","_props$shape","shape","_props$size","_props$type","_props$variant","other","Icon","useTheme","direction","previous","NavigateNextIcon","next","NavigateBeforeIcon","last","FirstPageIcon","first","LastPageIcon","clsx","ellipsis","concat","capitalize","ButtonBase","focusVisibleClassName","focusVisible","withStyles","typography","body2","borderRadius","boxSizing","padding","palette","transition","transitions","duration","hover","focus","alpha","selectedOpacity","hoverOpacity","opacity","disabledOpacity","sizeSmall","pxToRem","sizeLarge","textPrimary","contrastText","dark","textSecondary","secondary","outlined","border","disabledBackground","outlinedPrimary","activatedOpacity","outlinedSecondary","defaultGetAriaLabel","boundaryCount","_props$getItemAriaLab","defaultPage","getItemAriaLabel","_props$renderItem","hideNextButton","hidePrevButton","renderItem","showFirstButton","showLastButton","siblingCount","_props$boundaryCount","_props$componentName","componentName","_props$count","_props$defaultPage","_props$hideNextButton","_props$hidePrevButton","handleChange","pageProp","_props$showFirstButto","_props$showLastButton","_props$siblingCount","_useControlled","useControlled","controlled","_useControlled2","_slicedToArray","setPageState","handleClick","range","start","end","_","startPages","min","endPages","siblingsStart","siblingsEnd","itemList","_toConsumableArray","buttonPage","usePagination","ul","flexWrap","listStyle","toUpperCase","baseKeys","isArguments","isTypedArray","BlockletDiskInfo","onChangeBlocklet","diskInfo","renderDiskInfo","dir","Link","filesize","env","environments","reduce","acc","BLOCKLET_APP_DIR","app","BLOCKLET_DATA_DIR","BLOCKLET_LOG_DIR","log","BLOCKLET_CACHE_DIR","cache","BlockletRuntimeInfo","noRunningMessage","isEmpty","runtimeInfo","memoryUsage","cpuUsage","prettyMs","uptime","formatLocale","pid","tagBorderStyle","getEngineRows","engine","BlockletOverview","componentInfo","setComponentInfo","updateConfirm","setUpdateConfirm","appDid","infoRows","group","formatPerson","author","repository","href","parseRegistryUrl","installedAt","startedAt","stoppedAt","toUpper","engineRows","components","renderRows","componentRows","checkChildBlockletsForUpdates","preUpdateInfo","updateId","updateList","newVersion","Dialog","paddingY","DialogTitle","DialogContent","py","Grid","container","spacing","xs","DialogActions","updateChildBlocklets","BlockletService","services","getBlockletServices","BlockletEnvironment","onChangeConfig","cpuCores","setCpuCores","clusterMode","onConfigChanged","newBlocklet","isDev","useMemo","isConfigEditable","custom","BLOCKLET_CONFIGURABLE_KEY","isInstalling","onAddConfig","childDid","startsWith","configBlocklet","configs","onEditConfig","newData","oldData","required","BLOCKLET_CLUSTER_SIZE","errMessage","isValidClusterSize","onDeleteConfig","reserved","customType","customDelete","configurableEnvs","BLOCKLET_APP_NAME","BLOCKLET_APP_DESCRIPTION","BLOCKLET_APP_SK","secure","BLOCKLET_WALLET_TYPE","BLOCKLET_DELETABLE","hasBWAConfig","every","v","child","config","onRowAdd","onRowUpdate","onRowDelete","isDeletable","appAction","onColumns","editable","initialEditValue","textDecoration","editComponent","rowData","EditDiv","data-disabled-text","blockletIcons","paging","header","mb","Accordion","defaultExpanded","AccordionSummary","expandIcon","AccordionDetails","showTitle","isEditable","onAdd","issueLetsEncryptCert","DomainActions","site","RuleActions","RedirectRule","toUrl","scheme","tmpToUrl","isUrl","path","DEFAULT_IP_DNS_DOMAIN_SUFFIX","RuleItem","domainsStatus","interfaces","selectableBlocklets","domainStatus","internalLink","isHealthy","healthyTip","childName","realDid","rel","wordBreak","depth","expand","domainAliases","protocol","browserPort","rules","WELLKNOWN_PATH_PREFIX","findPathPrefix","Access","siteMap","rawBlocklets","logo","DomainLink","appendParams","BlockletDetail","useParams","currentTab","currentState","setCurrentState","domains","getBlocklet","ensureBlockletInterface","onBlockletChange","BlockletEvents","started","statusChange","startFailed","installed","upgraded","downgraded","onTabChange","content","renders","overview","configuration","BlockletConfiguration","access","members","Members","TabComponent","newChild","onActionComplete","currentTabDesc","Main","Breadcrumbs","useMobileWidth","useMediaQuery","down","ConfirmDialog","showCancel","initialParams","setOpen","changeLocale","onCallback","cb","isBreakpointsDownSm","StyledDialog","fullScreen","Alert","TeamContext","createContext","Provider","Consumer","TeamProvider","setUsers","setInvitations","setRoles","setPermissions","getTeamName","getTrustedPassports","getTeamIssuerDid","getEnablePassportIssuance","getRoles","getPermissions","getUsers","getInvitations","RBAC_CONFIG","ci","onUserEvent","ClickToCopy","tip","copiedTip","Add","Check","Delete","Edit","Clear","DetailPanel","NextPage","Filter","FirstPage","LastPage","PreviousPage","Search","ResetSearch","SortArrow","Export","ThirdStateCheck","ViewColumn","TableStyle","_propTypes","_styledComponents","_Icon","Wrapper","withConfig","componentId","Empty","number","any","forEachBlocklet","parallel","sync","tasks","Promise","all","isFreeBlocklet","payment","price","missingConfigs","wipeSensitiveData","configObj","environmentObj","colors","BlockletStatus","colorMap","added","waiting","downloading","downloaded","installing","starting","running","stopping","stopped","upgrading","restarting","corrupted","statusTxt","Dot","_ButtonGroup","_wrap","sizes","small","medium","large","getBorderRadius","StyledButtonGroup","nodeInterop","_getRequireWildcardCache","has","newObj","hasPropertyDescriptor","getOwnPropertyDescriptor","_copyToClipboard","_useWindowSize","_Tooltip","_Typography","_Toast","_Util","WeakMap","cacheBabelInterop","cacheNodeInterop","newProps","mergeProps","tipPlacement","copied","setCopied","childrenRef","createRef","timer","setTimeout","clearTimeout","disableFocusListener","Container","textContent","validateRuleByServiceType","localeContext","validateSite","fromDid","URL","searchParams","SearchInput","InputProps","startAdornment","isNew","newValue","langs","Map","BlockletAvatar","logoUrl","joinURL","formatRegistryLogoPath","apiPrefix","ev","CancelConfirm","dangerouslySetInnerHTML","__html","inputVal","initialDirections","useLocalStorage","setSortDirections","columnIndex","directionValue","newSortDirections","DomainStatusContext","DomainStatusProvider","getClient","setStatus","getDomainStatus","checkDomains","silent","JSON","stringify","CLONE_DEEP_FLAG"],"mappings":"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","file":"static/js/8.27e60ccf.chunk.js","sourcesContent":["var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeysIn = require('./_baseKeysIn'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar Component = function Component(props) {\n return /*#__PURE__*/_react.default.createElement(\"svg\", props, /*#__PURE__*/_react.default.createElement(\"path\", {\n d: \"M8.438 4.313H8.25a.188.188 0 0 0 .188-.188v.188h7.124v-.188c0 .103.085.188.188.188h-.188V6h1.688V4.125c0-.827-.673-1.5-1.5-1.5h-7.5c-.827 0-1.5.673-1.5 1.5V6h1.688V4.312zM20.25 6H3.75a.75.75 0 0 0-.75.75v.75c0 .103.084.188.188.188h1.415l.579 12.257c.038.8.698 1.43 1.498 1.43h10.64c.802 0 1.46-.628 1.498-1.43l.579-12.258h1.416A.188.188 0 0 0 21 7.5v-.75a.75.75 0 0 0-.75-.75zm-3.11 13.688H6.86l-.567-12h11.414l-.567 12z\"\n }));\n};\n\nComponent.defaultProps = {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nComponent.displayName = \"delete\";\nvar _default = Component;\nexports.default = _default;","module.exports = {};\n","/* eslint-disable react/jsx-wrap-multilines */\nimport React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport sortBy from 'lodash/sortBy';\nimport get from 'lodash/get';\n\nimport TextField from '@material-ui/core/TextField';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport { ROUTING_RULE_TYPES } from '@abtnode/constant';\n\nimport { BLOCKLET_DYNAMIC_PATH_PREFIX, BLOCKLET_INTERFACE_TYPE_WEB } from '@blocklet/meta/lib/constants';\n\nimport BlockletStatus from '../../../blocklet/status';\n\nconst getWebInterface = blocklet => {\n const list = get(blocklet, 'meta.interfaces') || [];\n return list.find(x => x.type === BLOCKLET_INTERFACE_TYPE_WEB);\n};\n\nexport default function ConfigRoutingRule({ params, blocklets, setParams, setError, serviceTypes }) {\n const { t } = useLocaleContext();\n\n const redirectCodesMap = {\n 302: t('common.redirectTemporary'),\n 301: t('common.redirectPermanently'),\n };\n\n const sortedBlocklets = sortBy(blocklets, x => x.meta.name);\n\n const getParamsFromInterface = (blocklet, selected) => {\n if (!selected) {\n return {};\n }\n\n let { port } = blocklet;\n if (selected && blocklet.ports && selected.port) {\n if (blocklet.ports[selected.port]) {\n port = blocklet.ports[selected.port];\n }\n if (blocklet.ports[selected.port.internal]) {\n port = blocklet.ports[selected.port.internal];\n }\n }\n\n // When the blocklet interface can only be mounted at a fixed path\n let { pathPrefix } = params;\n if (selected && selected.prefix !== BLOCKLET_DYNAMIC_PATH_PREFIX) {\n pathPrefix = selected.prefix;\n }\n\n return { port, pathPrefix };\n };\n\n const getParamsOnBlockletChange = did => {\n const blocklet = sortedBlocklets.find(x => x.meta.did === did);\n const webInterface = getWebInterface(blocklet);\n\n return { ...getParamsFromInterface(blocklet, webInterface), interfaceName: webInterface ? webInterface.name : '' };\n };\n\n useEffect(() => {\n if (!params.interfaceName && params.type === ROUTING_RULE_TYPES.BLOCKLET) {\n setParams({ ...params, ...getParamsOnBlockletChange(params.did), __disableConfirm: false });\n }\n }, []); // eslint-disable-line\n\n return (\n <>\n <TextField\n select\n label={t('router.domain.add.type')}\n autoComplete=\"off\"\n variant=\"outlined\"\n name=\"type\"\n data-cy=\"domain-add-type\"\n fullWidth\n value={params.type}\n onChange={e => {\n setError('');\n setParams({ ...params, type: e.target.value, __disableConfirm: false });\n }}\n style={{ marginBottom: 32 }}\n SelectProps={{}}>\n {serviceTypes.map(({ name, value }) => (\n <MenuItem key={value} value={value}>\n {name}\n </MenuItem>\n ))}\n </TextField>\n {params.type === ROUTING_RULE_TYPES.BLOCKLET && (\n <>\n <TextField\n select\n label={t('router.domain.add.blocklet')}\n autoComplete=\"off\"\n variant=\"outlined\"\n name=\"did\"\n data-cy=\"domain-blocklet-select\"\n fullWidth\n value={params.did}\n onChange={e => {\n setParams({\n ...params,\n ...getParamsOnBlockletChange(e.target.value),\n did: e.target.value,\n __disableConfirm: false,\n });\n }}\n style={{ marginBottom: 32 }}>\n {sortedBlocklets.map(x => (\n <MenuItem key={x.meta.did} value={x.meta.did}>\n {`${x.meta.name} v${x.meta.version}`}\n <span style={{ marginLeft: 8 }}>\n <BlockletStatus status={x.status} />\n </span>\n </MenuItem>\n ))}\n {blocklets.length === 0 && (\n <MenuItem key=\"empty\" value=\"\">\n {t('common.empty')}\n </MenuItem>\n )}\n </TextField>\n </>\n )}\n {params.type === ROUTING_RULE_TYPES.REDIRECT && [\n <TextField\n select\n label={t('router.domain.add.redirect')}\n autoComplete=\"off\"\n variant=\"outlined\"\n name=\"type\"\n fullWidth\n value={params.redirectCode}\n onChange={e => setParams({ ...params, redirectCode: e.target.value })}\n style={{ marginBottom: 32 }}\n SelectProps={{}}>\n {Object.keys(redirectCodesMap).map(code => (\n <MenuItem key={code} value={code}>\n {`${redirectCodesMap[code]} - ${code}`}\n </MenuItem>\n ))}\n </TextField>,\n <TextField\n label={t('common.redirectUrl')}\n autoComplete=\"off\"\n variant=\"outlined\"\n name=\"url\"\n data-cy=\"redirect-url-input\"\n fullWidth\n autoFocus\n value={params.url}\n helperText={t('router.urlHelperText')}\n style={{ marginBottom: 32 }}\n onChange={e => {\n setParams({ ...params, url: e.target.value, __disableConfirm: !e.target.value.trim() });\n if (!e.target.value.trim()) {\n setError(t('router.validation.redirectUrlRequired'));\n } else {\n setError('');\n }\n }}\n />,\n ]}\n </>\n );\n}\n\nConfigRoutingRule.propTypes = {\n params: PropTypes.object,\n blocklets: PropTypes.array,\n serviceTypes: PropTypes.array,\n setParams: PropTypes.func,\n setError: PropTypes.func,\n};\n\nConfigRoutingRule.defaultProps = {\n params: {},\n blocklets: [],\n serviceTypes: [\n { name: 'Blocklet', value: ROUTING_RULE_TYPES.BLOCKLET },\n { name: 'Redirect', value: ROUTING_RULE_TYPES.REDIRECT },\n { name: 'Default - User will see the 404 page', value: ROUTING_RULE_TYPES.NONE },\n ],\n setParams: () => {},\n setError: () => {},\n};\n","const en_US = require('./lang/en');\nconst zh_CN = require('./lang/zh');\n\nconst { registerLang } = require('./lib/register_lang');\nconst prettyMilliseconds = require('./lib/parse_ms');\n\nregisterLang('en_US', en_US);\nregisterLang('zh_CN', zh_CN);\n\nprettyMilliseconds.registerLang = registerLang;\n\nmodule.exports = prettyMilliseconds;\n","module.exports = {\n year: {\n long: 'year',\n short: 'y',\n },\n day: {\n long: 'day',\n short: 'd',\n },\n hour: {\n long: 'hour',\n short: 'h',\n },\n minute: {\n long: 'minute',\n short: 'm',\n },\n second: {\n long: 'second',\n short: 's',\n },\n millisecond: {\n long: 'millisecond',\n short: 'ms',\n },\n microsecond: {\n long: 'microsecond',\n short: 'µs',\n },\n nanosecond: {\n long: 'nanosecond',\n short: 'ns',\n },\n};\n","module.exports = {\n year: {\n long: '年',\n short: '年',\n },\n day: {\n long: '天',\n short: '天',\n },\n hour: {\n long: '小时',\n short: '小时',\n },\n minute: {\n long: '分钟',\n short: '分',\n },\n second: {\n long: '秒钟',\n short: '秒',\n },\n millisecond: {\n long: '毫秒',\n short: '毫秒',\n },\n microsecond: {\n long: '微秒',\n short: '微秒',\n },\n nanosecond: {\n long: '纳秒',\n short: '纳秒',\n },\n};\n","const parseMilliseconds = require('parse-ms');\nconst { getLang: getLocale } = require('./register_lang');\n\nconst pluralize = (word, count) => (count === 1 ? word : `${word}s`);\n\nconst SECOND_ROUNDING_EPSILON = 0.0000001;\n\nmodule.exports = (milliseconds, options = {}) => {\n if (!Number.isFinite(milliseconds)) {\n throw new TypeError('Expected a finite number');\n }\n\n if (options.colonNotation) {\n options.compact = false;\n options.formatSubMilliseconds = false;\n options.separateMilliseconds = false;\n options.verbose = false;\n }\n\n if (options.compact) {\n options.secondsDecimalDigits = 0;\n options.millisecondsDecimalDigits = 0;\n }\n\n const locale = getLocale(options.locale);\n const result = [];\n\n const floorDecimals = (value, decimalDigits) => {\n const flooredInterimValue = Math.floor(value * 10 ** decimalDigits + SECOND_ROUNDING_EPSILON);\n const flooredValue = Math.round(flooredInterimValue) / 10 ** decimalDigits;\n return flooredValue.toFixed(decimalDigits);\n };\n\n const add = (value, unit, valueToString) => {\n if (\n (result.length === 0 || !options.colonNotation) &&\n value === 0 &&\n !(options.colonNotation && unit === 'minute')\n ) {\n return;\n }\n\n const { long } = locale[unit] || getLocale('en_US')[unit];\n const { short } = locale[unit] || getLocale('en_US')[unit];\n\n let valueString = (valueToString || value || '0').toString();\n let prefix;\n let suffix;\n if (options.colonNotation) {\n prefix = result.length > 0 ? ':' : '';\n suffix = '';\n const wholeDigits = valueString.includes('.') ? valueString.split('.')[0].length : valueString.length;\n const minLength = result.length > 0 ? 2 : 1;\n valueString = '0'.repeat(Math.max(0, minLength - wholeDigits)) + valueString;\n } else {\n prefix = '';\n if (options.locale === 'zh_CN') {\n if (Object.values(parsed).filter((x) => x > 0).length > 1) {\n if (!parsed.days && !parsed.hours && parsed.minutes && options.compact) {\n suffix = long;\n } else {\n suffix = short;\n }\n } else if (parsed.minutes) {\n suffix = long;\n } else {\n suffix = short;\n }\n } else {\n suffix = options.verbose ? ` ${pluralize(long, value)}` : short;\n }\n }\n\n result.push(prefix + valueString + suffix);\n };\n\n const parsed = parseMilliseconds(milliseconds);\n\n add(Math.trunc(parsed.days / 365), 'year');\n add(parsed.days % 365, 'day');\n add(parsed.hours, 'hour');\n add(parsed.minutes, 'minute');\n\n if (\n options.separateMilliseconds ||\n options.formatSubMilliseconds ||\n (!options.colonNotation && milliseconds < 1000)\n ) {\n add(parsed.seconds, 'second');\n if (options.formatSubMilliseconds) {\n add(parsed.milliseconds, 'millisecond');\n add(parsed.microseconds, 'microsecond');\n add(parsed.nanoseconds, 'nanosecond');\n } else {\n const millisecondsAndBelow = parsed.milliseconds + parsed.microseconds / 1000 + parsed.nanoseconds / 1e6;\n\n const millisecondsDecimalDigits =\n typeof options.millisecondsDecimalDigits === 'number' ? options.millisecondsDecimalDigits : 0;\n\n const roundedMiliseconds =\n millisecondsAndBelow >= 1 ? Math.round(millisecondsAndBelow) : Math.ceil(millisecondsAndBelow);\n\n const millisecondsString = millisecondsDecimalDigits\n ? millisecondsAndBelow.toFixed(millisecondsDecimalDigits)\n : roundedMiliseconds;\n\n add(Number.parseFloat(millisecondsString, 10), 'millisecond', millisecondsString);\n }\n } else {\n const seconds = (milliseconds / 1000) % 60;\n const secondsDecimalDigits = typeof options.secondsDecimalDigits === 'number' ? options.secondsDecimalDigits : 1;\n const secondsFixed = floorDecimals(seconds, secondsDecimalDigits);\n const secondsString = options.keepDecimalsOnWholeSeconds ? secondsFixed : secondsFixed.replace(/\\.0+$/, '');\n add(Number.parseFloat(secondsString, 10), 'second', secondsString);\n }\n\n if (result.length === 0) {\n const longUnit = (locale.millisecond || getLocale('en_US').millisecond).long;\n const shortUnit = (locale.millisecond || getLocale('en_US').millisecond).short;\n\n if (options.locale === 'zh_CN') {\n return `0${options.verbose ? `${longUnit}` : shortUnit}`;\n }\n\n return `0${options.verbose ? ` ${longUnit}s` : shortUnit}`;\n }\n\n if (options.compact) {\n return result[0];\n }\n\n if (typeof options.unitCount === 'number') {\n const separator = options.colonNotation ? '' : ' ';\n return result.slice(0, Math.max(options.unitCount, 1)).join(separator);\n }\n\n return options.colonNotation ? result.join('') : result.join(' ');\n};\n","'use strict';\nmodule.exports = milliseconds => {\n\tif (typeof milliseconds !== 'number') {\n\t\tthrow new TypeError('Expected a number');\n\t}\n\n\tconst roundTowardsZero = milliseconds > 0 ? Math.floor : Math.ceil;\n\n\treturn {\n\t\tdays: roundTowardsZero(milliseconds / 86400000),\n\t\thours: roundTowardsZero(milliseconds / 3600000) % 24,\n\t\tminutes: roundTowardsZero(milliseconds / 60000) % 60,\n\t\tseconds: roundTowardsZero(milliseconds / 1000) % 60,\n\t\tmilliseconds: roundTowardsZero(milliseconds) % 1000,\n\t\tmicroseconds: roundTowardsZero(milliseconds * 1000) % 1000,\n\t\tnanoseconds: roundTowardsZero(milliseconds * 1e6) % 1000\n\t};\n};\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8 5v14l11-7z\"\n}), 'PlayArrow');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6 6h12v12H6z\"\n}), 'Stop');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 5V1L7 6l5 5V7c3.31 0 6 2.69 6 6s-2.69 6-6 6-6-2.69-6-6H4c0 4.42 3.58 8 8 8s8-3.58 8-8-3.58-8-8-8z\"\n}), 'Replay');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 6v3l4-4-4-4v3c-4.42 0-8 3.58-8 8 0 1.57.46 3.03 1.24 4.26L6.7 14.8c-.45-.83-.7-1.79-.7-2.8 0-3.31 2.69-6 6-6zm6.76 1.74L17.3 9.2c.44.84.7 1.79.7 2.8 0 3.31-2.69 6-6 6v-3l-4 4 4 4v-3c4.42 0 8-3.58 8-8 0-1.57-.46-3.03-1.24-4.26z\"\n}), 'Autorenew');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z\"\n}), 'Settings');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18 17H6v-2h12v2zm0-4H6v-2h12v2zm0-4H6V7h12v2zM3 22l1.5-1.5L6 22l1.5-1.5L9 22l1.5-1.5L12 22l1.5-1.5L15 22l1.5-1.5L18 22l1.5-1.5L21 22V2l-1.5 1.5L18 2l-1.5 1.5L15 2l-1.5 1.5L12 2l-1.5 1.5L9 2 7.5 3.5 6 2 4.5 3.5 3 2v20z\"\n}), 'Receipt');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z\"\n}), 'Group');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"\n}), 'MoreVert');\n\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar Component = function Component(props) {\n return /*#__PURE__*/_react.default.createElement(\"svg\", props, /*#__PURE__*/_react.default.createElement(\"path\", {\n d: \"M11.78 2.25c-2.767 0-5.019 2.271-5.019 5.063v3.037H5.758a2.018 2.018 0 0 0-2.008 2.025v8.1c0 1.117.9 2.025 2.008 2.025h12.045a2.018 2.018 0 0 0 2.007-2.025v-8.1c0-1.117-.9-2.025-2.007-2.025h-1.004V7.313c0-2.792-2.251-5.063-5.019-5.063zm6.023 10.125l.002 8.1H5.758v-8.1h12.045zM8.769 10.35V7.313c0-1.675 1.35-3.038 3.011-3.038 1.66 0 3.011 1.363 3.011 3.037v3.038H8.77z\"\n }));\n};\n\nComponent.defaultProps = {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nComponent.displayName = \"lock\";\nvar _default = Component;\nexports.default = _default;","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nimport IconButton from '@material-ui/core/IconButton';\nimport Menu from '@material-ui/core/Menu';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport MoreHorizIcon from '@material-ui/icons/MoreHoriz';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\n\nexport default function Actions({ actions, ...props }) {\n const [anchorEl, setAnchorEl] = useState(null);\n\n const open = Boolean(anchorEl);\n\n const onOpen = e => {\n try {\n e.stopPropagation();\n e.preventDefault();\n // eslint-disable-next-line no-empty\n } catch {}\n setAnchorEl(e.currentTarget);\n };\n\n const onClose = e => {\n try {\n e.stopPropagation();\n e.preventDefault();\n // eslint-disable-next-line no-empty\n } catch {}\n setAnchorEl(null);\n };\n\n return (\n <Div {...props}>\n <IconButton\n aria-label=\"more\"\n aria-controls=\"actions-menu\"\n aria-haspopup=\"true\"\n data-cy=\"actions-menu-icon\"\n onClick={onOpen}>\n <MoreHorizIcon />\n </IconButton>\n\n <Menu\n id=\"actions-menu\"\n data-cy=\"actions-menu\"\n anchorEl={anchorEl}\n keepMounted\n open={open}\n onClose={onClose}\n PaperProps={{}}>\n {actions.map(action => {\n if (typeof action === 'function') {\n return action({ close: onClose });\n }\n const { icon, text, onClick, disabled = false, ...opts } = action;\n return (\n <MenuItem\n {...opts}\n disabled={disabled}\n dense\n onClick={e => {\n onClose();\n onClick(e);\n }}>\n <ListItemIcon style={{ minWidth: 24, marginRight: 8 }}>{icon}</ListItemIcon>\n <ListItemText primary={text} />\n </MenuItem>\n );\n })}\n </Menu>\n </Div>\n );\n}\n\nActions.propTypes = {\n actions: PropTypes.array,\n};\n\nActions.defaultProps = {\n actions: [],\n};\n\nconst Div = styled.div``;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar Component = function Component(props) {\n return /*#__PURE__*/_react.default.createElement(\"svg\", props, /*#__PURE__*/_react.default.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M5.886 1.875a4.207 4.207 0 1 0 0 8.414 4.207 4.207 0 0 0 0-8.414zM4.112 4.308A2.51 2.51 0 1 1 7.66 7.857a2.51 2.51 0 0 1-3.55-3.55zm.095 6.522A4.207 4.207 0 0 0 0 15.037v2.799c0 .16.13.289.29.289h1.119c.16 0 .289-.13.289-.29v-2.798a2.51 2.51 0 0 1 2.51-2.509h3.357a2.51 2.51 0 0 1 2.51 2.51v2.798c0 .16.13.289.289.289h1.12c.159 0 .288-.13.288-.29v-2.798a4.208 4.208 0 0 0-4.207-4.207H4.207z\"\n }), /*#__PURE__*/_react.default.createElement(\"rect\", {\n x: \"12.5\",\n y: \"9.375\",\n width: \"7.5\",\n height: \"1.875\",\n rx: \".938\"\n }));\n};\n\nComponent.defaultProps = {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nComponent.displayName = \"forbid-login\";\nvar _default = Component;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar Component = function Component(props) {\n return /*#__PURE__*/_react.default.createElement(\"svg\", props, /*#__PURE__*/_react.default.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M5.886 1.875a4.207 4.207 0 1 0 0 8.414 4.207 4.207 0 0 0 0-8.414zM4.112 4.308A2.51 2.51 0 1 1 7.66 7.857a2.51 2.51 0 0 1-3.55-3.55zm.095 6.522A4.207 4.207 0 0 0 0 15.037v2.799c0 .16.13.289.29.289h1.119c.16 0 .289-.13.289-.29v-2.798a2.51 2.51 0 0 1 2.51-2.509h3.357a2.51 2.51 0 0 1 2.51 2.51v2.798c0 .16.13.289.289.289h1.12c.159 0 .288-.13.288-.29v-2.798a4.208 4.208 0 0 0-4.207-4.207H4.207z\"\n }), /*#__PURE__*/_react.default.createElement(\"rect\", {\n x: \"12.5\",\n y: \"9.375\",\n width: \"7.5\",\n height: \"1.875\",\n rx: \".938\"\n }), /*#__PURE__*/_react.default.createElement(\"rect\", {\n x: \"15.313\",\n y: \"14.063\",\n width: \"7.5\",\n height: \"1.875\",\n rx: \".938\",\n transform: \"rotate(-90 15.313 14.063)\"\n }));\n};\n\nComponent.defaultProps = {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nComponent.displayName = \"allow-login\";\nvar _default = Component;\nexports.default = _default;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nimport CloseIcon from '@material-ui/icons/Close';\n\nexport default function PassportTag(props) {\n const { passport, onDelete, ...rest } = props;\n return (\n <Tag {...rest}>\n {passport.title || passport.name}{' '}\n {!!onDelete && <CloseIcon data-cy=\"delete-issuance\" className=\"delete\" onClick={onDelete} />}\n </Tag>\n );\n}\n\nPassportTag.propTypes = {\n passport: PropTypes.object.isRequired,\n onDelete: PropTypes.func,\n};\n\nPassportTag.defaultProps = {\n onDelete: null,\n};\n\nconst Tag = styled.span`\n display: inline-flex;\n padding: 2px 8px;\n background: #4f6af6;\n border-radius: 4px;\n font-weight: 500;\n font-size: 16px;\n line-height: 22px;\n color: #fff;\n align-items: center;\n .delete {\n font-size: 1em;\n margin-left: 6px;\n cursor: pointer;\n }\n`;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","var arrayPush = require('./_arrayPush'),\n getPrototype = require('./_getPrototype'),\n getSymbols = require('./_getSymbols'),\n stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nmodule.exports = getSymbolsIn;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","var charenc = {\n // UTF-8 encoding\n utf8: {\n // Convert a string to a byte array\n stringToBytes: function(str) {\n return charenc.bin.stringToBytes(unescape(encodeURIComponent(str)));\n },\n\n // Convert a byte array to a string\n bytesToString: function(bytes) {\n return decodeURIComponent(escape(charenc.bin.bytesToString(bytes)));\n }\n },\n\n // Binary encoding\n bin: {\n // Convert a string to a byte array\n stringToBytes: function(str) {\n for (var bytes = [], i = 0; i < str.length; i++)\n bytes.push(str.charCodeAt(i) & 0xFF);\n return bytes;\n },\n\n // Convert a byte array to a string\n bytesToString: function(bytes) {\n for (var str = [], i = 0; i < bytes.length; i++)\n str.push(String.fromCharCode(bytes[i]));\n return str.join('');\n }\n }\n};\n\nmodule.exports = charenc;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z\"\n}), 'ArrowForward');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z\"\n}), 'Link');\n\nexports.default = _default;","import React, { useState, useRef } from 'react';\nimport PropTypes from 'prop-types';\n\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\nimport Popper from '@material-ui/core/Popper';\nimport Paper from '@material-ui/core/Paper';\nimport ClickAwayListener from '@material-ui/core/ClickAwayListener';\nimport MenuList from '@material-ui/core/MenuList';\nimport ButtonGroup from '@arcblock/ux/lib/ButtonGroup';\nimport Button from '@arcblock/ux/lib/Button';\n\nexport default function ButtonWithActions({ actions, children }) {\n const anchorRef = useRef(null);\n const [unfold, setUnfold] = useState(false);\n\n const onToggle = () => {\n setUnfold(pre => !pre);\n };\n\n const onClose = e => {\n if (anchorRef.current && anchorRef.current.contains(e.target)) {\n return;\n }\n\n setUnfold(false);\n };\n\n return (\n <ButtonGroup variant=\"contained\" color=\"primary\" aria-label=\"split button\" rounded>\n {children}\n <Button\n variant=\"outlined\"\n color=\"primary\"\n size=\"small\"\n aria-controls={unfold ? 'split-button-menu' : undefined}\n aria-expanded={unfold ? 'true' : undefined}\n ref={anchorRef}\n data-cy=\"trusted-issuers-more\"\n onClick={onToggle}>\n <ArrowDropDownIcon />\n </Button>\n <Popper\n open={unfold}\n anchorEl={anchorRef.current}\n role={undefined}\n placement=\"bottom-end\"\n disablePortal={false}\n className=\"popper\">\n <Paper>\n <ClickAwayListener onClickAway={onClose}>\n <MenuList id=\"split-button-menu\">{actions.map(action => action)}</MenuList>\n </ClickAwayListener>\n </Paper>\n </Popper>\n </ButtonGroup>\n );\n}\n\nButtonWithActions.propTypes = {\n actions: PropTypes.array,\n children: PropTypes.any,\n};\n\nButtonWithActions.defaultProps = {\n actions: [],\n children: null,\n};\n","/* eslint-disable operator-linebreak */\nimport React, { useState, useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport { useHistory, Link } from 'react-router-dom';\n\nimport IconButton from '@material-ui/core/IconButton';\nimport Menu from '@material-ui/core/Menu';\nimport Divider from '@material-ui/core/Divider';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport MoreVertIcon from '@material-ui/icons/MoreVert';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Typography from '@material-ui/core/Typography';\nimport Radio from '@material-ui/core/Radio';\nimport RadioGroup from '@material-ui/core/RadioGroup';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport Alert from '@material-ui/lab/Alert';\n\nimport Button from '@arcblock/ux/lib/Button';\nimport ButtonGroup from '@arcblock/ux/lib/ButtonGroup';\nimport { getRequiredMissingConfigs, isAuthServiceEnabled, isDeletableBlocklet } from '@blocklet/meta/lib/util';\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nimport { BLOCKLET_MODES } from '@blocklet/meta/lib/constants';\n\nimport Toast from '../toast';\nimport { sleep, formatError, isInProgress, isDownloading } from '../../libs/util';\nimport { useNodeContext } from '../../contexts/node';\nimport Confirm from '../confirm';\nimport Icons from './icons';\nimport Permission from '../permission';\n\nexport default function BlockletActions({ blocklet, onStart, onComplete, variant, ...rest }) {\n const history = useHistory();\n const node = useNodeContext();\n const [anchorEl, setAnchorEl] = useState(null);\n const [currentAction, setCurrentAction] = useState(null);\n const [loading, setLoading] = useState(false);\n const [confirmSetting, setConfirmSetting] = useState(null);\n const { t } = useContext(LocaleContext);\n\n const createHandler =\n (action, fn, requireUserConfirm = false) =>\n async () => {\n const onConfirm = async params => {\n onStart({ action, blocklet });\n setLoading(true);\n setCurrentAction(action);\n setConfirmSetting(null);\n try {\n const input = { did: blocklet.meta.did };\n if (action === 'remove') {\n input.keepData = params.removeType === 'keepData';\n }\n await fn({ input });\n if (action !== 'remove') {\n await sleep(1000); // just avoid user feeling so fast\n }\n\n if (action === 'reload') {\n Toast.success(t('blocklet.reloadSuccess'));\n }\n\n onComplete({ action, blocklet });\n } catch (err) {\n const errMsg = `Blocklet ${action} failed: ${formatError(err)}`;\n onComplete({ action, blocklet, error: new Error(errMsg) });\n } finally {\n setLoading(false);\n }\n };\n\n const onCancel = () => {\n setLoading(false);\n setConfirmSetting(null);\n };\n\n const confirmSettings = {\n stop: {\n title: `${t('common.stop')} ${blocklet.meta.title || blocklet.meta.name}`,\n description: t('blocklet.index.stopDescription'),\n confirm: t('blocklet.index.confirmStop'),\n cancel: t('common.cancel'),\n onConfirm,\n onCancel,\n },\n restart: {\n title: `${t('common.restart')} ${blocklet.meta.title || blocklet.meta.name}`,\n description: t('blocklet.index.restartDescription'),\n confirm: t('blocklet.index.confirmRestart'),\n cancel: t('common.cancel'),\n onConfirm,\n onCancel,\n },\n remove: {\n title: `${t('common.remove')} ${blocklet.meta.title || blocklet.meta.name}`,\n description: (params, setParams) => (\n <Typography component=\"div\">\n <Typography gutterBottom>{t('blocklet.index.removeDescription')}</Typography>\n <Typography gutterBottom>\n <b>{t('blocklet.index.deleteRoutingRuleDescription')}</b>\n </Typography>\n <RadioGroup\n name=\"removeType\"\n value={params.removeType}\n onChange={e => setParams({ ...params, removeType: e.target.value })}>\n <FormControlLabel value=\"keepData\" control={<Radio />} label={t('blocklet.index.removeKeepData')} />\n <FormControlLabel value=\"complete\" control={<Radio />} label={t('blocklet.index.removeComplete')} />\n </RadioGroup>\n </Typography>\n ),\n confirm: t('blocklet.index.confirmRemove'),\n cancel: t('common.cancel'),\n onConfirm,\n onCancel,\n params: { removeType: 'keepData' },\n },\n cancelDownload: {\n title: `${t('common.cancel')}`,\n description: t('blocklet.index.cancelDownloadDescription', {\n name: blocklet.meta.title || blocklet.meta.name,\n }),\n confirm: t('common.confirm'),\n cancel: t('common.cancel'),\n onConfirm,\n onCancel,\n },\n };\n\n if (requireUserConfirm) {\n setConfirmSetting(confirmSettings[action]);\n } else {\n await onConfirm();\n }\n };\n\n const open = Boolean(anchorEl);\n\n const onOpen = e => {\n try {\n e.stopPropagation();\n e.preventDefault();\n // eslint-disable-next-line no-empty\n } catch {}\n setAnchorEl(e.currentTarget);\n };\n\n const onClose = e => {\n try {\n e.stopPropagation();\n e.preventDefault();\n // eslint-disable-next-line no-empty\n } catch {}\n setAnchorEl(null);\n };\n\n const onAction = async (action, e) => {\n try {\n e.stopPropagation();\n e.preventDefault();\n // eslint-disable-next-line no-empty\n } catch {}\n setAnchorEl(null);\n if (typeof action.handler === 'function') {\n try {\n setLoading(true);\n setCurrentAction(action.action);\n await action.handler();\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error(`Blocklet ${action.name} failed: `, err);\n } finally {\n setLoading(false);\n }\n }\n };\n\n const removeAction = isDeletableBlocklet(blocklet)\n ? {\n action: 'remove',\n icon: Icons.Remove,\n name: t('common.remove'),\n handler: createHandler('remove', node.api.deleteBlocklet, true),\n disabled: blocklet.status === 'running',\n }\n : null;\n\n const cancelDownloadAction = {\n action: 'remove',\n icon: Icons.Remove,\n name: t('common.cancel'),\n handler: createHandler('cancelDownload', node.api.cancelDownloadBlocklet, true),\n };\n\n const missingRequiredConfigs = getRequiredMissingConfigs(blocklet);\n\n const actions = [\n {\n action: 'start',\n icon: Icons.Start,\n name: t('common.start'),\n handler: createHandler('start', node.api.startBlocklet),\n disabled:\n blocklet.status === 'running' ||\n blocklet.status === 'corrupted' ||\n missingRequiredConfigs.length > 0 ||\n isDownloading(blocklet.status) ||\n blocklet.mode === BLOCKLET_MODES.DEVELOPMENT,\n },\n {\n action: 'stop',\n icon: Icons.Stop,\n name: t('common.stop'),\n handler: createHandler('stop', node.api.stopBlocklet, true),\n disabled: blocklet.status !== 'running' || blocklet.mode === BLOCKLET_MODES.DEVELOPMENT,\n },\n {\n action: 'restart',\n icon: Icons.Restart,\n name: t('common.restart'),\n handler: createHandler('restart', node.api.restartBlocklet, true),\n disabled: blocklet.status !== 'running' || blocklet.mode === BLOCKLET_MODES.DEVELOPMENT,\n },\n {\n action: 'reload',\n icon: Icons.Reload,\n name: t('common.reload'),\n handler: createHandler('reload', node.api.reloadBlocklet),\n disabled: blocklet.status !== 'running' || blocklet.mode === BLOCKLET_MODES.DEVELOPMENT,\n },\n\n isDownloading(blocklet.status) ? cancelDownloadAction : removeAction,\n\n {\n separator: true,\n },\n {\n onlyInMenu: true,\n action: 'config',\n icon: Icons.Config,\n name: t('common.config'),\n handler: () => {\n history.push(`/blocklets/${blocklet.meta.did}/configuration`);\n },\n disabled: isDownloading(blocklet.status),\n },\n isAuthServiceEnabled(blocklet)\n ? {\n onlyInMenu: true,\n action: 'team',\n icon: Icons.Group,\n name: t('common.manageTeam'),\n handler: () => {\n history.push(`/blocklets/${blocklet.meta.did}/members`);\n },\n disabled: isDownloading(blocklet.status),\n }\n : null,\n {\n onlyInMenu: true,\n action: 'log',\n icon: Icons.Log,\n name: t('common.log'),\n handler: () => {\n history.push(`/logs/blocklet-${blocklet.meta.did}`);\n },\n disabled: isDownloading(blocklet.status),\n },\n ].filter(Boolean);\n\n const inProgress = loading || isInProgress(blocklet.status);\n\n if (variant === 'menu') {\n return (\n <Div data-cy=\"blocklet-actions\">\n <Permission permission=\"mutate_blocklet\">\n {hasPermission => (\n <IconButton\n aria-label=\"more\"\n aria-controls=\"actions-menu\"\n aria-haspopup=\"true\"\n data-cy=\"trigger-blocklet-actions\"\n actions-blocklet-did={blocklet.meta.did}\n onClick={onOpen}\n size=\"small\"\n disabled={!hasPermission || (!isDownloading(blocklet.status) && Boolean(inProgress))}>\n <MoreVertIcon />\n </IconButton>\n )}\n </Permission>\n\n <Menu id=\"actions-menu\" anchorEl={anchorEl} keepMounted open={open} onClose={onClose} PaperProps={{}}>\n {missingRequiredConfigs.length > 0 && (\n <Alert style={{ maxWidth: '400px' }} severity=\"error\">\n {t('blocklet.config.user.missingRequired')}\n <br />\n <Link to={`/blocklets/${blocklet.meta.did}/configuration`}>{t('blocklet.config.user.gotoFix')}</Link>\n </Alert>\n )}\n {actions.map((action, i) => {\n if (action.separator) {\n // eslint-disable-next-line react/no-array-index-key\n return <Divider key={`separator-${i}`} />;\n }\n return (\n <MenuItem\n dense\n key={action.name}\n onClick={e => onAction(action, e)}\n disabled={action.disabled}\n data-cy={`${action.action}-blocklet`}>\n <ListItemIcon style={{ minWidth: 24 }}>\n <action.icon fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText primary={action.name} />\n </MenuItem>\n );\n })}\n </Menu>\n {confirmSetting && (\n <Confirm\n title={confirmSetting.title}\n description={confirmSetting.description}\n confirm={confirmSetting.confirm}\n cancel={confirmSetting.cancel}\n params={confirmSetting.params}\n onConfirm={confirmSetting.onConfirm}\n onCancel={confirmSetting.onCancel}\n />\n )}\n </Div>\n );\n }\n\n return (\n <Div data-cy=\"blocklet-actions\" {...rest}>\n <ButtonGroup>\n {actions\n .filter(x => !x.separator && !x.onlyInMenu)\n .map(action => (\n <Button\n title={action.name}\n key={action.name}\n data-cy={`${action.action}-blocklet`}\n onClick={() => onAction(action)}\n disabled={Boolean(action.disabled) || Boolean(inProgress)}>\n {currentAction === action.action && Boolean(inProgress) ? <Spinner size={[16, 10]} /> : <action.icon />}\n <span className=\"blocklet-action-text\">{action.name}</span>\n </Button>\n ))}\n </ButtonGroup>\n {confirmSetting && (\n <Confirm\n title={confirmSetting.title}\n description={confirmSetting.description}\n confirm={confirmSetting.confirm}\n cancel={confirmSetting.cancel}\n params={confirmSetting.params}\n onConfirm={confirmSetting.onConfirm}\n onCancel={confirmSetting.onCancel}\n />\n )}\n </Div>\n );\n}\n\nBlockletActions.propTypes = {\n blocklet: PropTypes.object.isRequired,\n onStart: PropTypes.func.isRequired,\n onComplete: PropTypes.func.isRequired,\n variant: PropTypes.oneOf(['menu', 'group']),\n};\n\nBlockletActions.defaultProps = {\n variant: 'menu',\n};\n\nconst Div = styled.div`\n display: flex;\n align-items: center;\n\n @media (max-width: ${props => props.theme.breakpoints.values.sm}px) {\n .MuiButton-root {\n padding: 4px;\n font-size: 10px;\n }\n }\n`;\n","import React, { useContext, useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport semver from 'semver';\n\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Button from '@material-ui/core/IconButton';\nimport UpgradeIcon from '@material-ui/icons/ArrowUpward';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Tag from '@arcblock/ux/lib/Tag';\nimport Toast from '@arcblock/ux/lib/Toast';\nimport { useSnackbar } from 'notistack';\n\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nimport Confirm from '../confirm';\nimport { withPermission } from '../permission';\n\nimport { useNodeContext } from '../../contexts/node';\nimport { sleep, formatError, isInProgress } from '../../libs/util';\n\nconst BlockletVersion = ({ blocklet, checkUpgrade, hasPermission, ...rest }) => {\n const { info, api } = useNodeContext();\n const { t } = useContext(LocaleContext);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState('');\n const [newVersionBlocklet, setNewVersionBlocklet] = useState(null);\n const [confirmSetting, setConfirmSetting] = useState(null);\n const { enqueueSnackbar } = useSnackbar();\n\n useEffect(() => {\n setNewVersionBlocklet(null);\n if (checkUpgrade) {\n api\n .getLatestBlockletVersion({ input: { did: blocklet.meta.did, version: blocklet.meta.version } })\n .then(({ data }) => {\n if (data) {\n const { version, registryUrl } = data;\n if (version && semver.gt(version, blocklet.meta.version)) {\n setNewVersionBlocklet({ version, registryUrl });\n }\n }\n })\n // eslint-disable-next-line max-len\n .catch(err => console.error(`Failed to fetch latest version: ${blocklet.meta.name}, error: ${formatError(err)}`)); // prettier-ignore\n }\n }, [blocklet.meta.version, blocklet.source, blocklet.deployedFrom, info.blockletRegistry, checkUpgrade]); // eslint-disable-line\n\n const onCancel = () => {\n setLoading(false);\n setConfirmSetting(null);\n };\n\n const onConfirm = async () => {\n setLoading(true);\n\n try {\n const input = {\n did: blocklet.meta.did,\n version: newVersionBlocklet.version,\n registryUrl: newVersionBlocklet.registryUrl,\n };\n await sleep(2000);\n await api.upgradeBlocklet({ input });\n } catch (err) {\n enqueueSnackbar(`Blocklet upgrade failed: ${formatError(err)}`, { autoHideDuration: 5000, variant: 'error' });\n } finally {\n setLoading(false);\n setConfirmSetting(null);\n }\n };\n\n const setting = {\n title: `${t('common.upgrade')} ${t('common.blocklet')} ${blocklet.meta.title || blocklet.meta.name}`,\n description: t('blocklet.index.upgradeDescription'),\n confirm: t('blocklet.index.confirmUpgrade'),\n cancel: t('common.cancel'),\n onConfirm,\n onCancel,\n };\n\n if (hasPermission && newVersionBlocklet && !isInProgress(blocklet.status)) {\n return (\n <>\n <Tag {...rest}>{blocklet.meta.version}</Tag>\n <Tooltip title={t('common.updateAvailable', { version: newVersionBlocklet.version })}>\n <Button size=\"small\" style={{ marginLeft: 8 }} disabled={loading} onClick={() => setConfirmSetting(setting)}>\n {loading ? <Spinner size={[16, 10]} /> : <UpgradeIcon style={{ fontSize: 16, color: 'red' }} />}\n </Button>\n </Tooltip>\n {!!error && <Toast variant=\"error\" message={error} onClose={() => setError('')} />}\n {confirmSetting && (\n <Confirm\n title={confirmSetting.title}\n description={confirmSetting.description}\n confirm={confirmSetting.confirm}\n cancel={confirmSetting.cancel}\n params={confirmSetting.params}\n onConfirm={confirmSetting.onConfirm}\n onCancel={confirmSetting.onCancel}\n />\n )}\n </>\n );\n }\n\n return <Tag {...rest}>{blocklet.meta.version}</Tag>;\n};\n\nBlockletVersion.propTypes = {\n blocklet: PropTypes.object.isRequired,\n checkUpgrade: PropTypes.bool,\n hasPermission: PropTypes.bool,\n};\n\nBlockletVersion.defaultProps = {\n checkUpgrade: true,\n hasPermission: false,\n};\n\nexport default withPermission(BlockletVersion, 'mutate_blocklet');\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z\"\n}), 'ArrowUpward');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z\"\n}), 'ExpandMore');\n\nexports.default = _default;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport get from 'lodash/get';\n\nimport HttpsIcon from '@material-ui/icons/Https';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Popover from '@material-ui/core/Popover';\nimport Card from '@material-ui/core/Card';\nimport CardContent from '@material-ui/core/CardContent';\nimport Typography from '@material-ui/core/Typography';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport VerifiedDot from '../../dot';\nimport { useNodeContext } from '../../../contexts/node';\nimport { useDomainStatusContext } from '../../../contexts/domain-status';\nimport { formatToDate, shouldCheckDomainStatus, checkIsWildcardDomain } from '../../../libs/util';\n\nfunction Certificate({ certificate }) {\n const [anchorEl, setAnchorEl] = React.useState(null);\n const node = useNodeContext();\n const { t } = useLocaleContext();\n\n const handlePopoverOpen = event => {\n setAnchorEl(event.currentTarget);\n };\n\n const handlePopoverClose = () => {\n setAnchorEl(null);\n };\n\n const open = Boolean(anchorEl);\n\n return (\n <>\n <HttpsIcon\n aria-owns={open ? 'mouse-over-popover' : undefined}\n onMouseEnter={handlePopoverOpen}\n onMouseLeave={handlePopoverClose}\n style={{ color: '#44cdc6', fontSize: 20, marginLeft: 8, cursor: 'pointer' }}\n />\n <Popover\n id=\"mouse-over-popover\"\n style={{ pointerEvents: 'none' }}\n open={open}\n anchorEl={anchorEl}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'left',\n }}\n onClose={handlePopoverClose}\n disableRestoreFocus>\n <Card>\n <CardContent style={{ display: 'flex' }}>\n <div>\n <img\n src={`${node.prefix}/https-certificate-icon.png`}\n alt=\"certificate icon\"\n style={{ maxHeight: '100%', maxWidth: '100%' }}\n />\n </div>\n <Typography component=\"div\" style={{ marginLeft: '16px' }}>\n <Typography component=\"div\" style={{ fontWeight: 'bolder' }}>\n {certificate.domain}\n </Typography>\n <Typography component=\"div\">\n {`${t('common.issuer')}: ${get(certificate, 'issuer.commonName', '')}`}\n </Typography>\n <Typography component=\"div\">\n {`${t('router.cert.issuedOn')}: ${formatToDate(certificate.validFrom)}`}\n </Typography>\n <Typography component=\"div\">\n {`${t('router.cert.expiryOn')}: ${formatToDate(certificate.validTo)}`}\n </Typography>\n </Typography>\n </CardContent>\n </Card>\n </Popover>\n </>\n );\n}\n\nCertificate.propTypes = {\n certificate: PropTypes.object,\n};\n\nCertificate.defaultProps = {\n certificate: {},\n};\n\nexport default function DomainStatus(props) {\n const { name, type, filters } = props;\n const { t } = useLocaleContext();\n const { status } = useDomainStatusContext();\n\n if (type !== 'domain') {\n return null;\n }\n\n if (!shouldCheckDomainStatus(name)) {\n return null;\n }\n\n if (name === window.location.hostname) {\n return null;\n }\n\n let domainIcon = null;\n let httpsIcon = null;\n\n const { isHttps, matchedCert } = status[name] || {};\n\n if (!checkIsWildcardDomain(name)) {\n const { dns: { resolved, ip } = {} } = status[name] || {};\n if (resolved || ip === '127.0.0.1') {\n domainIcon = (\n <Tooltip title={t('router.domain.verify.ok')}>\n <VerifiedDot color=\"success\" />\n </Tooltip>\n );\n } else {\n domainIcon = (\n <Tooltip title={t('router.domain.verify.notResolved')}>\n <VerifiedDot color=\"error\" />\n </Tooltip>\n );\n }\n }\n\n if (isHttps) {\n httpsIcon = <Certificate certificate={matchedCert} />;\n } else {\n httpsIcon = (\n <Tooltip title={t('router.domain.https.bad')}>\n <HttpsIcon style={{ color: '#D0021B', fontSize: 20, marginLeft: 8, cursor: 'pointer' }} />\n </Tooltip>\n );\n }\n\n const items = filters.map(x => {\n if (x === 'domain') {\n return domainIcon;\n }\n if (x === 'http') {\n return httpsIcon;\n }\n return null;\n });\n\n return <>{items}</>;\n}\n\nDomainStatus.propTypes = {\n type: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n filters: PropTypes.array,\n};\n\nDomainStatus.defaultProps = {\n filters: ['domain', 'http'],\n};\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z\"\n}), 'Https');\n\nexports.default = _default;","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport AddIcon from '@material-ui/icons/CallMerge';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Typography from '@material-ui/core/Typography';\nimport TextField from '@material-ui/core/TextField';\nimport MenuItem from '@material-ui/core/MenuItem';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport { useRoutingContext, DOMAIN_FOR_DEFAULT_SITE } from '../../../../contexts/routing';\n\nimport Confirm from '../../../confirm';\nimport { formatError } from '../../../../libs/util';\nimport { validateDomain } from './utils';\n\nexport default function AddDomainAlias({ id, name, onActivate, children, title }) {\n const { t } = useLocaleContext();\n const { actions } = useRoutingContext();\n const [loading, setLoading] = useState(false);\n const [confirmSetting, setConfirmSetting] = useState(null);\n\n // 不允许给默认站点添加 Additional domain\n if (DOMAIN_FOR_DEFAULT_SITE === name) {\n return null;\n }\n\n const onCancel = () => {\n setLoading(false);\n setConfirmSetting(null);\n };\n\n const onConfirm = async params => {\n setLoading(true);\n await actions.addDomainAlias(id, params.domain.trim());\n setLoading(false);\n setConfirmSetting(null);\n };\n\n const onEnter = async (params, confirm, setError) => {\n try {\n await confirm(params);\n } catch (err) {\n setError(formatError(err));\n } finally {\n setLoading(false);\n }\n };\n\n const setting = {\n title: title || t('router.domainAlias.add.title'),\n description: (params, setParams, setError) => (\n <Typography component=\"div\">\n <TextField\n label={t('router.domainAlias.add.domainDescription')}\n autoComplete=\"off\"\n variant=\"outlined\"\n name=\"domain\"\n data-cy=\"add-domain\"\n fullWidth\n autoFocus\n inputProps={{ 'data-cy': 'domain-name-input' }}\n value={params.domain}\n style={{ marginBottom: 32 }}\n onChange={e => {\n const domain = e.target.value.trim();\n const errMsg = validateDomain(domain, t);\n setParams({ ...params, domain, __disableConfirm: !!errMsg });\n if (errMsg) {\n setError(errMsg);\n } else {\n setError('');\n }\n }}\n onKeyPress={e => {\n if (e.key === 'Enter') {\n e.preventDefault();\n const domain = e.target.value.trim();\n const errMsg = validateDomain(domain, t);\n if (errMsg) {\n setError(errMsg);\n } else {\n onEnter(params, onConfirm, setError);\n }\n }\n }}\n />\n </Typography>\n ),\n confirm: t('common.confirm'),\n cancel: t('common.cancel'),\n params: {\n domain: '',\n __disableConfirm: true,\n },\n onConfirm,\n onCancel,\n };\n\n const onMenuItemClick = e => {\n e.stopPropagation();\n // eslint-disable-next-line no-unused-expressions\n setConfirmSetting(setting) || onActivate();\n };\n\n return (\n <>\n {typeof children === 'function' ? (\n children({ loading, open: onMenuItemClick })\n ) : (\n <MenuItem onClick={onMenuItemClick} className=\"rule-action\" data-cy=\"action-add-domain-alias\">\n {loading ? <Spinner size={[16, 10]} /> : <AddIcon style={{ fontSize: 18, marginRight: 5 }} />}\n {t('router.domainAlias.add.title')}\n </MenuItem>\n )}\n {confirmSetting && (\n <Confirm\n title={confirmSetting.title}\n description={confirmSetting.description}\n confirm={confirmSetting.confirm}\n cancel={confirmSetting.cancel}\n params={confirmSetting.params}\n onConfirm={confirmSetting.onConfirm}\n onCancel={confirmSetting.onCancel}\n color=\"primary\"\n />\n )}\n </>\n );\n}\n\nAddDomainAlias.propTypes = {\n id: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n children: PropTypes.any,\n onActivate: PropTypes.func,\n title: PropTypes.string,\n};\n\nAddDomainAlias.defaultProps = {\n onActivate: () => {},\n children: null,\n title: '',\n};\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M17 20.41L18.41 19 15 15.59 13.59 17 17 20.41zM7.5 8H11v5.59L5.59 19 7 20.41l6-6V8h3.5L12 3.5 7.5 8z\"\n}), 'CallMerge');\n\nexports.default = _default;","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport AddIcon from '@material-ui/icons/Link';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Typography from '@material-ui/core/Typography';\nimport TextField from '@material-ui/core/TextField';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport { ROUTING_RULE_TYPES } from '@abtnode/constant';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport { useRoutingContext } from '../../../../contexts/routing';\n\nimport Confirm from '../../../confirm';\nimport { validateRule, validatePathPrefix, getInitialBlockletDid } from './utils';\nimport ConfigRoutingRule from './config-routing-rule';\n\nexport default function AddRule({ id, blocklets, onActivate = () => {}, onRuleAdded = () => {}, children }) {\n const { t } = useLocaleContext();\n const { actions } = useRoutingContext();\n const [loading, setLoading] = useState(false);\n const [confirmSetting, setConfirmSetting] = useState(null);\n\n const onCancel = () => {\n setLoading(false);\n setConfirmSetting(null);\n };\n\n const onConfirm = async params => {\n const err = await validateRule(params, t);\n if (err) {\n throw err;\n }\n setLoading(true);\n\n const rule = {\n from: {\n pathPrefix: params.pathPrefix.trim(),\n },\n to: {\n type: params.type,\n },\n };\n\n if (params.type === ROUTING_RULE_TYPES.BLOCKLET) {\n rule.to.port = params.port;\n rule.to.did = params.did;\n rule.to.interfaceName = params.interfaceName;\n } else if (params.type === ROUTING_RULE_TYPES.REDIRECT) {\n rule.to.url = params.url.trim();\n rule.to.redirectCode = params.redirectCode;\n }\n\n await actions.addRule(id, rule);\n setConfirmSetting(null);\n setLoading(false);\n onRuleAdded();\n };\n\n const setting = {\n title: t('router.rule.add.title'),\n description: (params, setParams, setError) => {\n const setValue = value => {\n const validateResult = validateRule(value, t);\n if (validateResult) {\n setParams({ ...value, __disableConfirm: true });\n return;\n }\n\n setParams({ ...value });\n };\n\n return (\n <Typography component=\"div\">\n <TextField\n label={t('router.rule.add.pathPrefix')}\n autoComplete=\"off\"\n variant=\"outlined\"\n name=\"pathPrefix\"\n data-cy=\"path-prefix-input\"\n fullWidth\n autoFocus\n helperText={t('router.rule.add.pathPrefixTip')}\n style={{ marginBottom: 32 }}\n value={params.pathPrefix}\n onChange={e => {\n let disable = false;\n const validateResult = validatePathPrefix({\n params: { ...params, pathPrefix: e.target.value },\n blocklets,\n });\n\n setError(validateResult);\n if (params.type === ROUTING_RULE_TYPES.BLOCKLET && validateResult) {\n disable = true;\n }\n\n if (params.type === ROUTING_RULE_TYPES.REDIRECT && !params.url) {\n disable = true;\n }\n\n if (!e.target.value.trim()) {\n disable = true;\n setError(t('router.validation.pathPrefixRequired'));\n }\n if (!disable) {\n setError('');\n }\n setParams({ ...params, pathPrefix: e.target.value, __disableConfirm: disable });\n }}\n />\n <ConfigRoutingRule blocklets={blocklets} params={params} setParams={setValue} setError={setError} />\n </Typography>\n );\n },\n confirm: t('router.rule.add.confirm'),\n cancel: t('common.cancel'),\n params: {\n pathPrefix: '',\n type: ROUTING_RULE_TYPES.BLOCKLET,\n did: getInitialBlockletDid(blocklets),\n port: '',\n interfaceName: '',\n redirectCode: 302,\n __disableConfirm: true,\n },\n onConfirm,\n onCancel,\n };\n\n const onMenuItemClick = e => {\n e.stopPropagation();\n // eslint-disable-next-line no-unused-expressions\n setConfirmSetting(setting) || onActivate();\n };\n\n return (\n <>\n {typeof children === 'function' ? (\n children({ loading, open: onMenuItemClick })\n ) : (\n <MenuItem onClick={onMenuItemClick} className=\"rule-action\" data-cy=\"action-add-rule\">\n {loading ? <Spinner size={[16, 10]} /> : <AddIcon style={{ fontSize: 18, marginRight: 5 }} />}\n {t('router.rule.add.title')}\n </MenuItem>\n )}\n {confirmSetting && (\n <Confirm\n title={confirmSetting.title}\n description={confirmSetting.description}\n confirm={confirmSetting.confirm}\n cancel={confirmSetting.cancel}\n params={confirmSetting.params}\n onConfirm={confirmSetting.onConfirm}\n onCancel={confirmSetting.onCancel}\n color=\"primary\"\n />\n )}\n </>\n );\n}\n\nAddRule.propTypes = {\n id: PropTypes.string.isRequired,\n blocklets: PropTypes.array,\n children: PropTypes.any,\n onActivate: PropTypes.func,\n onRuleAdded: PropTypes.func,\n};\n\nAddRule.defaultProps = {\n onActivate: () => {},\n onRuleAdded: () => {},\n children: null,\n blocklets: [],\n};\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport AddIcon from '@material-ui/icons/Add';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Typography from '@material-ui/core/Typography';\nimport TextField from '@material-ui/core/TextField';\nimport MenuItem from '@material-ui/core/MenuItem';\n\nimport { BLOCKLET_SITE_GROUP_SUFFIX } from '@abtnode/constant';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport { useRoutingContext, isSpecialDomain } from '../../../../contexts/routing';\n\nimport Confirm from '../../../confirm';\n\nexport default function UpdateDomainSecurity({ id, name, corsAllowedOrigins, onActivate, children }) {\n const { t } = useLocaleContext();\n const { actions } = useRoutingContext();\n const [loading, setLoading] = useState(false);\n const [confirmSetting, setConfirmSetting] = useState(null);\n\n if (isSpecialDomain(name)) {\n return null;\n }\n\n let text = name;\n if (name.endsWith(BLOCKLET_SITE_GROUP_SUFFIX)) {\n text = `${t('common.the')} Blocklet`;\n }\n\n const onCancel = () => {\n setLoading(false);\n setConfirmSetting(null);\n };\n\n const onConfirm = async params => {\n setLoading(true);\n await actions.updateSite(id, { corsAllowedOrigins: params.corsAllowedOrigins.split(',').map(x => x.trim()) });\n setLoading(false);\n setConfirmSetting(null);\n };\n\n const setting = {\n title: t('router.domainSecurity.title'),\n description: (params, setParams, setError) => (\n <Typography component=\"div\">\n <TextField\n label={t('router.domainSecurity.cors.title', { name: text })}\n autoComplete=\"off\"\n variant=\"outlined\"\n name=\"corsAllowedOrigins\"\n fullWidth\n autoFocus\n value={params.corsAllowedOrigins}\n style={{ marginBottom: 32 }}\n helperText={t('router.domainSecurity.cors.description', { name: text })}\n onChange={e => {\n setParams({ ...params, corsAllowedOrigins: e.target.value, __disableConfirm: !e.target.value.trim() });\n if (!e.target.value.trim()) {\n setError(t('router.domainSecurity.cors.domainInvalid'));\n } else {\n setError('');\n }\n }}\n />\n </Typography>\n ),\n confirm: t('common.confirm'),\n cancel: t('common.cancel'),\n params: {\n corsAllowedOrigins: Array.isArray(corsAllowedOrigins) ? corsAllowedOrigins.join(', ') : name,\n __disableConfirm: true,\n },\n onConfirm,\n onCancel,\n };\n\n const onMenuItemClick = e => {\n e.stopPropagation();\n // eslint-disable-next-line no-unused-expressions\n setConfirmSetting(setting) || onActivate();\n };\n\n return (\n <>\n {typeof children === 'function' ? (\n children({ loading, open: onMenuItemClick })\n ) : (\n <MenuItem onClick={onMenuItemClick} className=\"rule-action\" data-cy=\"action-update-domain\">\n {loading ? <Spinner size={[16, 10]} /> : <AddIcon style={{ fontSize: 18, marginRight: 5 }} />}\n {t('router.domainSecurity.title')}\n </MenuItem>\n )}\n {confirmSetting && (\n <Confirm\n title={confirmSetting.title}\n description={confirmSetting.description}\n confirm={confirmSetting.confirm}\n cancel={confirmSetting.cancel}\n params={confirmSetting.params}\n onConfirm={confirmSetting.onConfirm}\n onCancel={confirmSetting.onCancel}\n color=\"primary\"\n />\n )}\n </>\n );\n}\n\nUpdateDomainSecurity.propTypes = {\n id: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n children: PropTypes.any,\n onActivate: PropTypes.func,\n corsAllowedOrigins: PropTypes.string,\n};\n\nUpdateDomainSecurity.defaultProps = {\n onActivate: () => {},\n children: null,\n corsAllowedOrigins: '',\n};\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"\n}), 'MoreHoriz');\n\nexports.default = _default;","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport ActionIcon from '@material-ui/icons/Delete';\nimport Spinner from '@arcblock/ux/lib/Spinner';\n\nimport Button from '@arcblock/ux/lib/Button';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nimport Confirm from '../../../confirm';\nimport { useRoutingContext } from '../../../../contexts/routing';\n\nexport default function DeleteDomainAlias(props) {\n const { t } = useLocaleContext();\n const [loading, setLoading] = useState(false);\n const [confirmSetting, setConfirmSetting] = useState(null);\n const { id, domainAlias, onDelete, children } = props;\n const { actions } = useRoutingContext();\n\n const onCancel = () => {\n setLoading(false);\n setConfirmSetting(null);\n };\n\n const onConfirm = async () => {\n setLoading(true);\n try {\n await actions.deleteDomainAlias(id, domainAlias);\n onDelete();\n } catch (error) {\n console.error(error);\n } finally {\n setLoading(false);\n setConfirmSetting(null);\n }\n };\n\n const setting = {\n title: t('router.domainAlias.delete.title'),\n description: t('router.domainAlias.delete.description'),\n confirm: t('common.confirm'),\n onConfirm,\n onCancel,\n };\n\n const onClick = e => {\n e.stopPropagation();\n setConfirmSetting(setting);\n };\n\n return (\n <>\n {typeof children === 'function' ? (\n children({ loading, open: onClick })\n ) : (\n <Button\n rounded\n edge=\"end\"\n onClick={onClick}\n size=\"small\"\n className=\"rule-action\"\n color=\"danger\"\n data-cy=\"action-delete-domain-alias\">\n {loading ? <Spinner size={[16, 10]} /> : <ActionIcon style={{ fontSize: 16 }} />}\n {t('router.domainAlias.delete.title')}\n </Button>\n )}\n {confirmSetting && (\n <Confirm\n title={confirmSetting.title}\n description={confirmSetting.description}\n confirm={confirmSetting.confirm}\n params={confirmSetting.params}\n onConfirm={confirmSetting.onConfirm}\n onCancel={confirmSetting.onCancel}\n />\n )}\n </>\n );\n}\n\nDeleteDomainAlias.propTypes = {\n id: PropTypes.string.isRequired,\n domainAlias: PropTypes.string.isRequired,\n onDelete: PropTypes.func,\n children: PropTypes.any,\n};\n\nDeleteDomainAlias.defaultProps = {\n onDelete: () => {},\n children: null,\n};\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport EditIcon from '@material-ui/icons/Edit';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Typography from '@material-ui/core/Typography';\nimport TextField from '@material-ui/core/TextField';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport { ROUTING_RULE_TYPES } from '@abtnode/constant';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport { useRoutingContext } from '../../../../contexts/routing';\n\nimport Confirm from '../../../confirm';\nimport { validateRule, validatePathPrefix, getInitialBlockletDid } from './utils';\nimport ConfigRoutingRule from './config-routing-rule';\n\nexport default function UpdateRule(props) {\n const { id, name, did, parent, blocklets, to, children, onActivate } = props;\n\n const { t } = useLocaleContext();\n const { actions } = useRoutingContext();\n const [loading, setLoading] = useState(false);\n const [confirmSetting, setConfirmSetting] = useState(null);\n\n const onCancel = () => {\n setLoading(false);\n setConfirmSetting(null);\n };\n\n const onConfirm = async params => {\n const err = await validateRule(params, t);\n if (err) {\n throw err;\n }\n setLoading(true);\n\n const rule = {\n id,\n from: {\n pathPrefix: params.pathPrefix.trim(),\n },\n to: {\n type: params.type,\n },\n };\n\n if (params.type === ROUTING_RULE_TYPES.BLOCKLET) {\n rule.to.port = params.port;\n rule.to.did = params.did;\n rule.to.interfaceName = params.interfaceName;\n } else if (params.type === ROUTING_RULE_TYPES.REDIRECT) {\n rule.to.url = params.url;\n rule.to.redirectCode = params.redirectCode;\n }\n\n await actions.updateRule(parent.id, rule);\n setConfirmSetting(null);\n setLoading(false);\n };\n\n const setting = {\n title: t('router.rule.update.title'),\n description: (params, setParams, setError) => {\n const setValue = value => {\n const validateResult = validateRule(value, t);\n if (validateResult) {\n setParams({ ...value, __disableConfirm: true });\n return;\n }\n setParams({ ...value });\n };\n\n return (\n <Typography component=\"div\">\n <TextField\n label={t('router.rule.add.pathPrefix')}\n autoComplete=\"off\"\n variant=\"outlined\"\n name=\"pathPrefix\"\n data-cy=\"path-prefix-input\"\n fullWidth\n autoFocus\n helperText={t('router.rule.add.pathPrefixTip')}\n style={{ marginBottom: 32 }}\n value={params.pathPrefix}\n onChange={e => {\n let disable = false;\n const validateResult = validatePathPrefix({\n params: { ...params, pathPrefix: e.target.value },\n blocklets,\n });\n if (params.type === ROUTING_RULE_TYPES.BLOCKLET && validateResult) {\n disable = true;\n setError(validateResult);\n }\n if (params.type === ROUTING_RULE_TYPES.REDIRECT && !params.url) {\n disable = true;\n }\n if (!e.target.value.trim()) {\n disable = true;\n setError(t('router.validation.pathPrefixRequired'));\n }\n if (!disable) {\n setError('');\n }\n\n setParams({ ...params, pathPrefix: e.target.value, __disableConfirm: disable });\n }}\n />\n <ConfigRoutingRule blocklets={blocklets} params={params} setParams={setValue} setError={setError} />\n </Typography>\n );\n },\n confirm: t('router.rule.update.confirm'),\n cancel: t('router.rule.update.cancel'),\n color: 'primary',\n params: {\n pathPrefix: name === '/' ? name : name.replace(/^\\/+/, '').replace(/\\/+$/, ''),\n type: to.type || ROUTING_RULE_TYPES.BLOCKLET,\n did: did || getInitialBlockletDid(blocklets),\n port: to.port || '',\n interfaceName: to.interfaceName || '',\n redirectCode: to.redirectCode || 302,\n url: to.url || '',\n __disableConfirm: false,\n },\n onConfirm,\n onCancel,\n };\n\n const onMenuItemClick = e => {\n e.stopPropagation();\n // eslint-disable-next-line no-unused-expressions\n setConfirmSetting(setting) || onActivate();\n };\n\n return (\n <>\n {typeof children === 'function' ? (\n children({ loading, open: onMenuItemClick })\n ) : (\n <MenuItem onClick={onMenuItemClick} className=\"rule-action\" data-cy=\"action-update-rule\">\n {loading ? <Spinner size={[16, 10]} /> : <EditIcon style={{ fontSize: 18, marginRight: 5 }} />}\n {t('router.rule.update.title')}\n </MenuItem>\n )}\n {confirmSetting && (\n <Confirm\n title={confirmSetting.title}\n description={confirmSetting.description}\n confirm={confirmSetting.confirm}\n color={confirmSetting.color}\n cancel={confirmSetting.cancel}\n params={confirmSetting.params}\n onConfirm={confirmSetting.onConfirm}\n onCancel={confirmSetting.onCancel}\n />\n )}\n </>\n );\n}\n\nUpdateRule.propTypes = {\n id: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n did: PropTypes.string,\n parent: PropTypes.object.isRequired,\n blocklets: PropTypes.array,\n to: PropTypes.object.isRequired,\n children: PropTypes.any,\n onActivate: PropTypes.func,\n};\n\nUpdateRule.defaultProps = {\n onActivate: () => {},\n children: null,\n did: '',\n blocklets: [],\n};\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport ActionIcon from '@material-ui/icons/Delete';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport MenuItem from '@material-ui/core/MenuItem';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport { useRoutingContext } from '../../../../contexts/routing';\n\nimport DelConfirm from '../../../delete-confirm';\n\nexport default function DeleteRule(props) {\n const { t } = useLocaleContext();\n const { actions } = useRoutingContext();\n const [loading, setLoading] = useState(false);\n const [confirmSetting, setConfirmSetting] = useState(null);\n const {\n id,\n parent: { id: siteId },\n name,\n children,\n onActivate,\n } = props;\n\n const onCancel = () => {\n setLoading(false);\n setConfirmSetting(null);\n };\n\n const onConfirm = async () => {\n setLoading(true);\n await actions.deleteRule(siteId, id);\n setLoading(false);\n setConfirmSetting(null);\n };\n\n const setting = {\n keyName: name,\n title: t('router.rule.delete.title'),\n description: t('router.rule.delete.description', { name: `<b>${name}</b>` }),\n confirmPlaceholder: t('router.rule.delete.confirm_desc', { name }),\n confirm: t('common.delConfirm'),\n cancel: t('router.rule.delete.cancel'),\n onConfirm,\n onCancel,\n };\n\n const onMenuItemClick = e => {\n e.stopPropagation();\n // eslint-disable-next-line no-unused-expressions\n setConfirmSetting(setting) || onActivate();\n };\n\n return (\n <>\n {typeof children === 'function' ? (\n children({ loading, open: onMenuItemClick })\n ) : (\n <MenuItem onClick={onMenuItemClick} className=\"rule-action\" data-cy=\"action-delete-rule\">\n {loading ? <Spinner size={[16, 10]} /> : <ActionIcon style={{ fontSize: 18, marginRight: 5 }} />}\n {t('router.rule.delete.title')}\n </MenuItem>\n )}\n {confirmSetting && (\n <DelConfirm\n keyName={confirmSetting.keyName}\n title={confirmSetting.title}\n description={confirmSetting.description}\n confirmPlaceholder={confirmSetting.confirmPlaceholder}\n confirm={confirmSetting.confirm}\n cancel={confirmSetting.cancel}\n params={confirmSetting.params}\n onConfirm={confirmSetting.onConfirm}\n onCancel={confirmSetting.onCancel}\n />\n )}\n </>\n );\n}\n\nDeleteRule.propTypes = {\n id: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n parent: PropTypes.object.isRequired,\n children: PropTypes.any,\n onActivate: PropTypes.func,\n};\n\nDeleteRule.defaultProps = {\n onActivate: () => {},\n children: null,\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar Component = function Component(props) {\n return /*#__PURE__*/_react.default.createElement(\"svg\", props, /*#__PURE__*/_react.default.createElement(\"g\", {\n clipPath: \"url(#a)\"\n }, /*#__PURE__*/_react.default.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M9 1.598A4.092 4.092 0 1 0 9 9.78a4.092 4.092 0 0 0 0-8.183zM7.274 3.964a2.44 2.44 0 1 1 3.452 3.451 2.44 2.44 0 0 1-3.452-3.451zm.093 6.343A4.091 4.091 0 0 0 3.275 14.4v2.722c0 .155.126.281.281.281h1.09a.281.281 0 0 0 .28-.281v-2.722a2.44 2.44 0 0 1 2.44-2.44h3.267a2.442 2.442 0 0 1 2.44 2.44v2.722c0 .155.127.281.282.281h1.088a.281.281 0 0 0 .282-.281v-2.722a4.091 4.091 0 0 0-4.092-4.091H7.367z\"\n })), /*#__PURE__*/_react.default.createElement(\"defs\", null, /*#__PURE__*/_react.default.createElement(\"clipPath\", {\n id: \"a\"\n }, /*#__PURE__*/_react.default.createElement(\"path\", {\n transform: \"translate(0 .5)\",\n d: \"M0 0h18v18H0z\"\n }))));\n};\n\nComponent.defaultProps = {\n width: \"18\",\n height: \"19\",\n viewBox: \"0 0 18 19\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nComponent.displayName = \"person\";\nvar _default = Component;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar Component = function Component(props) {\n return /*#__PURE__*/_react.default.createElement(\"svg\", props, /*#__PURE__*/_react.default.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M3.25 10a6.75 6.75 0 1 1 13.5 0 6.75 6.75 0 0 1-13.5 0zM10 1.75a8.25 8.25 0 1 0 0 16.5 8.25 8.25 0 0 0 0-16.5zM8.03 6.97a.75.75 0 0 0-1.06 1.06l5 5a.75.75 0 1 0 1.06-1.06l-5-5z\"\n }));\n};\n\nComponent.defaultProps = {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nComponent.displayName = \"revoke\";\nvar _default = Component;\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11 15h2v2h-2zm0-8h2v6h-2zm.99-5C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\"\n}), 'ErrorOutline');\n\nexports.default = _default;","var Stack = require('./_Stack'),\n arrayEach = require('./_arrayEach'),\n assignValue = require('./_assignValue'),\n baseAssign = require('./_baseAssign'),\n baseAssignIn = require('./_baseAssignIn'),\n cloneBuffer = require('./_cloneBuffer'),\n copyArray = require('./_copyArray'),\n copySymbols = require('./_copySymbols'),\n copySymbolsIn = require('./_copySymbolsIn'),\n getAllKeys = require('./_getAllKeys'),\n getAllKeysIn = require('./_getAllKeysIn'),\n getTag = require('./_getTag'),\n initCloneArray = require('./_initCloneArray'),\n initCloneByTag = require('./_initCloneByTag'),\n initCloneObject = require('./_initCloneObject'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isMap = require('./isMap'),\n isObject = require('./isObject'),\n isSet = require('./isSet'),\n keys = require('./keys'),\n keysIn = require('./keysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nmodule.exports = baseClone;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n","var copyObject = require('./_copyObject'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n","var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n","var isObject = require('./isObject'),\n isPrototype = require('./_isPrototype'),\n nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeysIn;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = nativeKeysIn;\n","var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nmodule.exports = cloneBuffer;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nmodule.exports = copyArray;\n","var copyObject = require('./_copyObject'),\n getSymbols = require('./_getSymbols');\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n","var copyObject = require('./_copyObject'),\n getSymbolsIn = require('./_getSymbolsIn');\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbolsIn = require('./_getSymbolsIn'),\n keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nmodule.exports = initCloneArray;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n cloneDataView = require('./_cloneDataView'),\n cloneRegExp = require('./_cloneRegExp'),\n cloneSymbol = require('./_cloneSymbol'),\n cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nmodule.exports = initCloneByTag;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nmodule.exports = cloneRegExp;\n","var Symbol = require('./_Symbol');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n","var baseCreate = require('./_baseCreate'),\n getPrototype = require('./_getPrototype'),\n isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nmodule.exports = initCloneObject;\n","var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nmodule.exports = baseCreate;\n","var baseIsMap = require('./_baseIsMap'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\n","var baseIsSet = require('./_baseIsSet'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nmodule.exports = isSet;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n","(function(){\r\n var crypt = require('crypt'),\r\n utf8 = require('charenc').utf8,\r\n isBuffer = require('is-buffer'),\r\n bin = require('charenc').bin,\r\n\r\n // The core\r\n md5 = function (message, options) {\r\n // Convert to byte array\r\n if (message.constructor == String)\r\n if (options && options.encoding === 'binary')\r\n message = bin.stringToBytes(message);\r\n else\r\n message = utf8.stringToBytes(message);\r\n else if (isBuffer(message))\r\n message = Array.prototype.slice.call(message, 0);\r\n else if (!Array.isArray(message) && message.constructor !== Uint8Array)\r\n message = message.toString();\r\n // else, assume byte array already\r\n\r\n var m = crypt.bytesToWords(message),\r\n l = message.length * 8,\r\n a = 1732584193,\r\n b = -271733879,\r\n c = -1732584194,\r\n d = 271733878;\r\n\r\n // Swap endian\r\n for (var i = 0; i < m.length; i++) {\r\n m[i] = ((m[i] << 8) | (m[i] >>> 24)) & 0x00FF00FF |\r\n ((m[i] << 24) | (m[i] >>> 8)) & 0xFF00FF00;\r\n }\r\n\r\n // Padding\r\n m[l >>> 5] |= 0x80 << (l % 32);\r\n m[(((l + 64) >>> 9) << 4) + 14] = l;\r\n\r\n // Method shortcuts\r\n var FF = md5._ff,\r\n GG = md5._gg,\r\n HH = md5._hh,\r\n II = md5._ii;\r\n\r\n for (var i = 0; i < m.length; i += 16) {\r\n\r\n var aa = a,\r\n bb = b,\r\n cc = c,\r\n dd = d;\r\n\r\n a = FF(a, b, c, d, m[i+ 0], 7, -680876936);\r\n d = FF(d, a, b, c, m[i+ 1], 12, -389564586);\r\n c = FF(c, d, a, b, m[i+ 2], 17, 606105819);\r\n b = FF(b, c, d, a, m[i+ 3], 22, -1044525330);\r\n a = FF(a, b, c, d, m[i+ 4], 7, -176418897);\r\n d = FF(d, a, b, c, m[i+ 5], 12, 1200080426);\r\n c = FF(c, d, a, b, m[i+ 6], 17, -1473231341);\r\n b = FF(b, c, d, a, m[i+ 7], 22, -45705983);\r\n a = FF(a, b, c, d, m[i+ 8], 7, 1770035416);\r\n d = FF(d, a, b, c, m[i+ 9], 12, -1958414417);\r\n c = FF(c, d, a, b, m[i+10], 17, -42063);\r\n b = FF(b, c, d, a, m[i+11], 22, -1990404162);\r\n a = FF(a, b, c, d, m[i+12], 7, 1804603682);\r\n d = FF(d, a, b, c, m[i+13], 12, -40341101);\r\n c = FF(c, d, a, b, m[i+14], 17, -1502002290);\r\n b = FF(b, c, d, a, m[i+15], 22, 1236535329);\r\n\r\n a = GG(a, b, c, d, m[i+ 1], 5, -165796510);\r\n d = GG(d, a, b, c, m[i+ 6], 9, -1069501632);\r\n c = GG(c, d, a, b, m[i+11], 14, 643717713);\r\n b = GG(b, c, d, a, m[i+ 0], 20, -373897302);\r\n a = GG(a, b, c, d, m[i+ 5], 5, -701558691);\r\n d = GG(d, a, b, c, m[i+10], 9, 38016083);\r\n c = GG(c, d, a, b, m[i+15], 14, -660478335);\r\n b = GG(b, c, d, a, m[i+ 4], 20, -405537848);\r\n a = GG(a, b, c, d, m[i+ 9], 5, 568446438);\r\n d = GG(d, a, b, c, m[i+14], 9, -1019803690);\r\n c = GG(c, d, a, b, m[i+ 3], 14, -187363961);\r\n b = GG(b, c, d, a, m[i+ 8], 20, 1163531501);\r\n a = GG(a, b, c, d, m[i+13], 5, -1444681467);\r\n d = GG(d, a, b, c, m[i+ 2], 9, -51403784);\r\n c = GG(c, d, a, b, m[i+ 7], 14, 1735328473);\r\n b = GG(b, c, d, a, m[i+12], 20, -1926607734);\r\n\r\n a = HH(a, b, c, d, m[i+ 5], 4, -378558);\r\n d = HH(d, a, b, c, m[i+ 8], 11, -2022574463);\r\n c = HH(c, d, a, b, m[i+11], 16, 1839030562);\r\n b = HH(b, c, d, a, m[i+14], 23, -35309556);\r\n a = HH(a, b, c, d, m[i+ 1], 4, -1530992060);\r\n d = HH(d, a, b, c, m[i+ 4], 11, 1272893353);\r\n c = HH(c, d, a, b, m[i+ 7], 16, -155497632);\r\n b = HH(b, c, d, a, m[i+10], 23, -1094730640);\r\n a = HH(a, b, c, d, m[i+13], 4, 681279174);\r\n d = HH(d, a, b, c, m[i+ 0], 11, -358537222);\r\n c = HH(c, d, a, b, m[i+ 3], 16, -722521979);\r\n b = HH(b, c, d, a, m[i+ 6], 23, 76029189);\r\n a = HH(a, b, c, d, m[i+ 9], 4, -640364487);\r\n d = HH(d, a, b, c, m[i+12], 11, -421815835);\r\n c = HH(c, d, a, b, m[i+15], 16, 530742520);\r\n b = HH(b, c, d, a, m[i+ 2], 23, -995338651);\r\n\r\n a = II(a, b, c, d, m[i+ 0], 6, -198630844);\r\n d = II(d, a, b, c, m[i+ 7], 10, 1126891415);\r\n c = II(c, d, a, b, m[i+14], 15, -1416354905);\r\n b = II(b, c, d, a, m[i+ 5], 21, -57434055);\r\n a = II(a, b, c, d, m[i+12], 6, 1700485571);\r\n d = II(d, a, b, c, m[i+ 3], 10, -1894986606);\r\n c = II(c, d, a, b, m[i+10], 15, -1051523);\r\n b = II(b, c, d, a, m[i+ 1], 21, -2054922799);\r\n a = II(a, b, c, d, m[i+ 8], 6, 1873313359);\r\n d = II(d, a, b, c, m[i+15], 10, -30611744);\r\n c = II(c, d, a, b, m[i+ 6], 15, -1560198380);\r\n b = II(b, c, d, a, m[i+13], 21, 1309151649);\r\n a = II(a, b, c, d, m[i+ 4], 6, -145523070);\r\n d = II(d, a, b, c, m[i+11], 10, -1120210379);\r\n c = II(c, d, a, b, m[i+ 2], 15, 718787259);\r\n b = II(b, c, d, a, m[i+ 9], 21, -343485551);\r\n\r\n a = (a + aa) >>> 0;\r\n b = (b + bb) >>> 0;\r\n c = (c + cc) >>> 0;\r\n d = (d + dd) >>> 0;\r\n }\r\n\r\n return crypt.endian([a, b, c, d]);\r\n };\r\n\r\n // Auxiliary functions\r\n md5._ff = function (a, b, c, d, x, s, t) {\r\n var n = a + (b & c | ~b & d) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n md5._gg = function (a, b, c, d, x, s, t) {\r\n var n = a + (b & d | c & ~d) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n md5._hh = function (a, b, c, d, x, s, t) {\r\n var n = a + (b ^ c ^ d) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n md5._ii = function (a, b, c, d, x, s, t) {\r\n var n = a + (c ^ (b | ~d)) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n\r\n // Package private blocksize\r\n md5._blocksize = 16;\r\n md5._digestsize = 16;\r\n\r\n module.exports = function (message, options) {\r\n if (message === undefined || message === null)\r\n throw new Error('Illegal argument ' + message);\r\n\r\n var digestbytes = crypt.wordsToBytes(md5(message, options));\r\n return options && options.asBytes ? digestbytes :\r\n options && options.asString ? bin.bytesToString(digestbytes) :\r\n crypt.bytesToHex(digestbytes);\r\n };\r\n\r\n})();\r\n","(function() {\n var base64map\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n\n crypt = {\n // Bit-wise rotation left\n rotl: function(n, b) {\n return (n << b) | (n >>> (32 - b));\n },\n\n // Bit-wise rotation right\n rotr: function(n, b) {\n return (n << (32 - b)) | (n >>> b);\n },\n\n // Swap big-endian to little-endian and vice versa\n endian: function(n) {\n // If number given, swap endian\n if (n.constructor == Number) {\n return crypt.rotl(n, 8) & 0x00FF00FF | crypt.rotl(n, 24) & 0xFF00FF00;\n }\n\n // Else, assume array and swap all items\n for (var i = 0; i < n.length; i++)\n n[i] = crypt.endian(n[i]);\n return n;\n },\n\n // Generate an array of any length of random bytes\n randomBytes: function(n) {\n for (var bytes = []; n > 0; n--)\n bytes.push(Math.floor(Math.random() * 256));\n return bytes;\n },\n\n // Convert a byte array to big-endian 32-bit words\n bytesToWords: function(bytes) {\n for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8)\n words[b >>> 5] |= bytes[i] << (24 - b % 32);\n return words;\n },\n\n // Convert big-endian 32-bit words to a byte array\n wordsToBytes: function(words) {\n for (var bytes = [], b = 0; b < words.length * 32; b += 8)\n bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF);\n return bytes;\n },\n\n // Convert a byte array to a hex string\n bytesToHex: function(bytes) {\n for (var hex = [], i = 0; i < bytes.length; i++) {\n hex.push((bytes[i] >>> 4).toString(16));\n hex.push((bytes[i] & 0xF).toString(16));\n }\n return hex.join('');\n },\n\n // Convert a hex string to a byte array\n hexToBytes: function(hex) {\n for (var bytes = [], c = 0; c < hex.length; c += 2)\n bytes.push(parseInt(hex.substr(c, 2), 16));\n return bytes;\n },\n\n // Convert a byte array to a base-64 string\n bytesToBase64: function(bytes) {\n for (var base64 = [], i = 0; i < bytes.length; i += 3) {\n var triplet = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];\n for (var j = 0; j < 4; j++)\n if (i * 8 + j * 6 <= bytes.length * 8)\n base64.push(base64map.charAt((triplet >>> 6 * (3 - j)) & 0x3F));\n else\n base64.push('=');\n }\n return base64.join('');\n },\n\n // Convert a base-64 string to a byte array\n base64ToBytes: function(base64) {\n // Remove non-base-64 characters\n base64 = base64.replace(/[^A-Z0-9+\\/]/ig, '');\n\n for (var bytes = [], i = 0, imod4 = 0; i < base64.length;\n imod4 = ++i % 4) {\n if (imod4 == 0) continue;\n bytes.push(((base64map.indexOf(base64.charAt(i - 1))\n & (Math.pow(2, -2 * imod4 + 8) - 1)) << (imod4 * 2))\n | (base64map.indexOf(base64.charAt(i)) >>> (6 - imod4 * 2)));\n }\n return bytes;\n }\n };\n\n module.exports = crypt;\n})();\n","/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nmodule.exports = function (obj) {\n return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n}\n\nfunction isBuffer (obj) {\n return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n}\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z\"\n}), 'ArrowBack');\n\nexports.default = _default;","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport Box from '@material-ui/core/Box';\nimport Pagination from '@material-ui/lab/Pagination';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Empty from '@arcblock/ux/lib/Empty';\n\nexport default function PaginationList({ list, rowsPerPage, children, empty }) {\n const { t } = useLocaleContext();\n const [page, setPage] = useState(1);\n\n useEffect(() => {\n setPage(1);\n }, [list.length]);\n\n const count = Math.ceil(list.length / rowsPerPage);\n const offset = (page - 1) * rowsPerPage;\n const data = list.slice(offset, offset + rowsPerPage);\n\n const emptyElement = empty !== undefined ? empty : <Empty>{t('common.empty')}</Empty>;\n\n return (\n <>\n {children(data)}\n {!list.length && emptyElement}\n {!!list.length && count > 1 && (\n <Box mt={2} display=\"flex\" justifyContent=\"flex-end\">\n <Pagination\n count={count}\n page={page}\n onChange={(e, value) => {\n setPage(value);\n }}\n />\n </Box>\n )}\n </>\n );\n}\n\nPaginationList.propTypes = {\n list: PropTypes.array,\n rowsPerPage: PropTypes.number,\n children: PropTypes.func,\n empty: PropTypes.element,\n};\n\nPaginationList.defaultProps = {\n list: [],\n rowsPerPage: 10,\n children: () => null,\n empty: undefined,\n};\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nimport Dialog from '@arcblock/ux/lib/Dialog';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport Typography from '@material-ui/core/Typography';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Select from '@material-ui/core/Select';\nimport TextField from '@material-ui/core/TextField';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport FormControl from '@material-ui/core/FormControl';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\nimport Alert from '@arcblock/ux/lib/Alert';\n\nimport ClickToCopy from '../../click-to-copy';\nimport { useNodeContext } from '../../../contexts/node';\nimport { formatError, getInviteLink, formatToDatetime } from '../../../libs/util';\n\nexport default function InviteMember({ teamDid, roles, onCancel, onSuccess, onError, authInfo }) {\n const { api } = useNodeContext();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState('');\n const { t } = useLocaleContext();\n\n const [activeStep, setActiveStep] = useState(0);\n\n const [inviteInfo, setInviteInfo] = useState('');\n const [role, setRole] = useState('');\n const [remark, setRemark] = useState('');\n\n const onCreate = async () => {\n if (!role) {\n setError(t('team.member.error.passportEmpty'));\n return;\n }\n\n const trimRemark = remark.trim();\n\n setError(null);\n setLoading(true);\n\n try {\n const { inviteInfo: info } = await api.createInvitation({\n input: { teamDid, role, remark: trimRemark },\n });\n setInviteInfo(info);\n setActiveStep(1);\n } catch (err) {\n const errMsg = formatError(err);\n setError(errMsg);\n onError(err);\n } finally {\n setLoading(false);\n }\n };\n\n const steps = [\n {\n body: (\n <Typography component=\"div\">\n <FormControl style={{ width: '100%' }} variant=\"outlined\">\n <InputLabel>{t('common.passport')}</InputLabel>\n <Select\n data-cy=\"invite-member-select-role\"\n value={role}\n onChange={e => {\n setError(null);\n setRole(e.target.value);\n }}\n fullWidth\n label={t('common.passport')}\n disabled={loading}\n onKeyPress={e => {\n if (e.key === 'Enter') {\n e.preventDefault();\n onCreate();\n }\n }}>\n {roles\n .filter(d => d.name !== 'owner')\n .map(r => (\n <MenuItem key={r.name} value={r.name} data-cy={`invite-member-select-option-${r.name}`}>\n <span>{r.title || r.name}</span>\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <div style={{ marginTop: 20, marginBottom: 10 }} />\n <TextField\n label={t('common.remark')}\n autoComplete=\"off\"\n variant=\"outlined\"\n fullWidth\n style={{ marginBottom: 8 }}\n value={remark}\n onChange={e => {\n setError(null);\n setRemark(e.target.value);\n }}\n disabled={loading}\n data-cy=\"invite-member-input-remark\"\n />\n <div style={{ marginTop: 20, marginBottom: 10 }} />\n </Typography>\n ),\n cancel: t('common.cancel'),\n confirm: t('team.member.inviteDialog.createInviteLink'),\n onCancel,\n onConfirm: onCreate,\n },\n {\n body: () => {\n const link = getInviteLink({\n inviteId: inviteInfo.inviteId,\n endpoint: authInfo.endpoint,\n });\n return (\n <div>\n <Bold>\n {t('team.member.inviteDialog.createSuccessTip', { expireDate: formatToDatetime(inviteInfo.expireDate) })}\n </Bold>\n <div style={{ marginTop: '40px' }} />\n <ClickToCopy>{link}</ClickToCopy>\n </div>\n );\n },\n confirm: t('common.confirm'),\n onConfirm: onSuccess,\n },\n ];\n const step = steps[activeStep];\n\n return (\n <Dialog\n title={t('common.invite')}\n fullWidth\n open\n showCloseButton={false}\n actions={\n <>\n {step.cancel && (\n <Button onClick={step.onCancel} color=\"default\" rounded size=\"small\">\n {step.cancel}\n </Button>\n )}\n <Button\n onClick={step.onConfirm}\n color=\"primary\"\n size=\"small\"\n disabled={loading || !role}\n variant=\"contained\"\n autoFocus\n rounded>\n {loading && <Spinner size={[16, 10]} />}\n {step.confirm}\n </Button>\n </>\n }>\n <DialogContentText component=\"div\">{typeof step.body === 'function' ? step.body() : step.body}</DialogContentText>\n {!!error && (\n <Alert type=\"error\" variant=\"icon\">\n {error}\n </Alert>\n )}\n </Dialog>\n );\n}\n\nInviteMember.propTypes = {\n teamDid: PropTypes.string.isRequired,\n onCancel: PropTypes.func.isRequired,\n onSuccess: PropTypes.func.isRequired,\n onError: PropTypes.func,\n roles: PropTypes.array,\n authInfo: PropTypes.object,\n};\n\nInviteMember.defaultProps = {\n onError: () => {},\n roles: [],\n authInfo: {},\n};\n\nconst Bold = styled.div`\n font-size: 16px;\n font-weight: bold;\n`;\n","/* eslint-disable react/prop-types */\nimport React, { useContext, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nimport { useSnackbar } from 'notistack';\nimport Box from '@material-ui/core/Box';\n\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nimport { useNodeContext } from '../../../contexts/node';\nimport { useBlockletContext } from '../../../contexts/blocklets';\nimport Confirm from '../../confirm';\nimport Permission from '../../permission';\nimport ClickToCopy from '../../click-to-copy';\nimport PassportTag from '../../passport-tag';\nimport { getIssuePassportLink, formatToDatetime } from '../../../libs/util';\n\nexport default function PassportIssuances({ issuances, teamDid, onRefresh }) {\n const { api: client } = useNodeContext();\n const { t } = useContext(LocaleContext);\n const { findInterfaceWithAuthService } = useBlockletContext();\n const [delConfirm, setDelConfirm] = useState(null);\n const [loading, setLoading] = useState(false);\n const { enqueueSnackbar } = useSnackbar();\n\n const deleteIssuance = async ({ id }) => {\n if (loading) {\n return;\n }\n setLoading(true);\n try {\n await client.deletePassportIssuance({ input: { teamDid, sessionId: id } });\n onRefresh();\n } catch (error) {\n enqueueSnackbar(error.message, { autoHideDuration: 5000, variant: 'error' });\n } finally {\n setLoading(false);\n setDelConfirm(null);\n }\n };\n\n const onCancel = () => {\n setLoading(false);\n setDelConfirm(null);\n };\n\n const authInfo = findInterfaceWithAuthService(teamDid);\n\n const getLink = column => (authInfo ? getIssuePassportLink({ id: column.id, endpoint: authInfo.endpoint }) : '');\n\n // eslint-disable-next-line react/prop-types\n const Issuance = ({ data: d }) => (\n <div className=\"issuance\">\n <Box display=\"flex\" justifyContent=\"space-between\">\n <Permission permission=\"mutate_team\">\n {can =>\n can ? (\n <PassportTag\n passport={{ title: d.title, name: d.name }}\n onDelete={() =>\n setDelConfirm({\n title: t('team.passport.issuance.delete.title'),\n description: t('team.passport.issuance.delete.description', { link: getLink(d) }),\n confirm: t('common.delConfirm'),\n cancel: t('common.cancel'),\n onConfirm: () => {\n deleteIssuance(d);\n },\n onCancel,\n })\n }\n />\n ) : (\n <PassportTag passport={{ title: d.title, name: d.name }} />\n )\n }\n </Permission>\n <div style={{ color: '#999' }}>\n {t('common.expires')}\n :&nbsp;\n {formatToDatetime(d.expireDate)}\n </div>\n </Box>\n <Box mt={2}>\n <ClickToCopy>{getLink(d)}</ClickToCopy>\n </Box>\n </div>\n );\n\n return (\n <Div>\n {issuances.map(x => (\n <Issuance data={x} />\n ))}\n {delConfirm && (\n <Confirm\n title={delConfirm.title}\n description={delConfirm.description}\n confirm={delConfirm.confirm}\n cancel={delConfirm.cancel}\n params={delConfirm.params}\n onConfirm={delConfirm.onConfirm}\n onCancel={delConfirm.onCancel}\n />\n )}\n </Div>\n );\n}\n\nconst Div = styled.div`\n .MuiTableHead-root {\n display: none;\n }\n .issuance {\n padding: 16px 0;\n border-bottom: 1px solid #f0f0f0;\n .MuiTypography-root {\n display: inline-block;\n width: 100%;\n background: #f3f3f3;\n border-radius: 4px;\n padding-top: 6px;\n padding-bottom: 6px;\n }\n }\n`;\n\nPassportIssuances.propTypes = {\n teamDid: PropTypes.string.isRequired,\n issuances: PropTypes.array,\n onRefresh: PropTypes.func,\n};\n\nPassportIssuances.defaultProps = {\n issuances: [],\n onRefresh: () => {},\n};\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport Dialog from '@arcblock/ux/lib/Dialog';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport Typography from '@material-ui/core/Typography';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Select from '@material-ui/core/Select';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport FormControl from '@material-ui/core/FormControl';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\nimport Alert from '@arcblock/ux/lib/Alert';\n\nimport { useNodeContext } from '../../../contexts/node';\nimport { formatError } from '../../../libs/util';\n\nexport default function IssuePassport({ teamDid, ownerDid, roles, onCancel, onSuccess, onError }) {\n const { api } = useNodeContext();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState('');\n const { t } = useLocaleContext();\n\n const [role, setRole] = useState('');\n\n const onCreate = async () => {\n if (!role) {\n setError(t('team.member.error.passportEmpty'));\n return;\n }\n\n setError(null);\n setLoading(true);\n\n try {\n await api.createPassportIssuance({ input: { teamDid, name: role, ownerDid } });\n onSuccess();\n } catch (err) {\n const errMsg = formatError(err);\n setError(errMsg);\n onError(err);\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <Dialog\n title={t('team.passport.issue')}\n fullWidth\n open\n onClick={e => e.stopPropagation()}\n onClose={onCancel}\n disableBackdropClick\n disableEscapeKeyDown\n PaperProps={{ style: { minHeight: 'auto' } }}\n actions={\n <>\n <Button onClick={onCancel} color=\"default\" rounded size=\"small\">\n {t('common.cancel')}\n </Button>\n <Button\n onClick={onCreate}\n color=\"primary\"\n size=\"small\"\n disabled={loading || !role}\n variant=\"contained\"\n autoFocus\n data-cy=\"issue-passport-create-btn\"\n rounded>\n {loading && <Spinner size={[16, 10]} />}\n {t('team.passport.issuance.create.title')}\n </Button>\n </>\n }>\n <DialogContentText component=\"div\">\n <Typography component=\"div\">\n <FormControl style={{ width: '100%' }} variant=\"outlined\">\n <InputLabel>{t('common.passport')}</InputLabel>\n <Select\n data-cy=\"issue-passport-select-passport\"\n value={role}\n onChange={e => {\n setError(null);\n setRole(e.target.value);\n }}\n fullWidth\n label={t('common.passport')}\n disabled={loading}\n onKeyPress={e => {\n if (e.key === 'Enter') {\n e.preventDefault();\n onCreate();\n }\n }}>\n {roles\n .filter(d => d.name !== 'owner')\n .map(r => (\n <MenuItem key={r.name} value={r.name} data-cy={`issue-passport-select-option-${r.name}`}>\n <span>{r.title || r.name}</span>\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </Typography>\n </DialogContentText>\n {!!error && (\n <Alert type=\"error\" variant=\"icon\">\n {error}\n </Alert>\n )}\n </Dialog>\n );\n}\n\nIssuePassport.propTypes = {\n teamDid: PropTypes.string.isRequired,\n ownerDid: PropTypes.string.isRequired,\n onCancel: PropTypes.func.isRequired,\n onSuccess: PropTypes.func.isRequired,\n onError: PropTypes.func,\n roles: PropTypes.array,\n};\n\nIssuePassport.defaultProps = {\n onError: () => {},\n roles: [],\n};\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport { useSnackbar } from 'notistack';\nimport get from 'lodash/get';\nimport upperFirst from 'lodash/upperFirst';\n\nimport AddIcon from '@material-ui/icons/Add';\nimport Box from '@material-ui/core/Box';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport ErrorOutlineIcon from '@material-ui/icons/ErrorOutline';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\nimport RevokeIcon from '@arcblock/icons/lib/RevokeIcon';\nimport ExternalIssuerIcon from '@arcblock/icons/lib/ExternalIssuerIcon';\nimport Empty from '@arcblock/ux/lib/Empty';\n\nimport { PASSPORT_STATUS } from '@abtnode/constant';\n\nimport { useNodeContext } from '../../../contexts/node';\nimport { useSessionContext } from '../../../contexts/session';\nimport { useTeamContext } from '../../../contexts/team';\nimport { formatError, createPassportSvg } from '../../../libs/util';\nimport Confirm from '../../confirm';\nimport Permission from '../../permission';\nimport SearchInput from '../search-input';\nimport ListHeader from '../styles/list-header';\nimport IssuePassport from './issue-passport';\n\nconst ConfirmDescription = ({ action, passport }) => {\n const { t } = useLocaleContext();\n const { roles } = useTeamContext();\n const role = roles.find(x => x.name === passport.role);\n return (\n <div>\n <div>\n {action === 'enable' ? t('team.member.enablePassportDescription') : t('team.member.revokePassportDescription')}\n </div>\n {role && (\n <Box mt={3} fontWeight=\"bold\">\n {t('team.member.passportPermissionTitle')}\n </Box>\n )}\n {role && <Box mt={1}>{role.description}</Box>}\n </div>\n );\n};\nConfirmDescription.propTypes = {\n action: PropTypes.string.isRequired,\n passport: PropTypes.object.isRequired,\n};\nConfirmDescription.defaultProps = {};\n\nexport default function Passports({ user, onCreate }) {\n const { t } = useLocaleContext();\n const { session } = useSessionContext();\n const {\n roles,\n teamDid,\n teamIssuerDid,\n refresh: refreshTeam,\n enablePassportIssuance,\n trustedPassports,\n } = useTeamContext();\n const { api } = useNodeContext();\n const { enqueueSnackbar } = useSnackbar();\n const [loading, setLoading] = useState(false);\n const [toggleConfirm, setToggleConfirm] = useState(null);\n const [showIssueDialog, setShowIssueDialog] = useState(false);\n const [search, setSearch] = useState('');\n\n const passports = (get(user, 'passports') || []).map(x => ({ ...x, revoked: x.status === PASSPORT_STATUS.REVOKED }));\n\n const togglePassportStatus = async passport => {\n if (loading) {\n return;\n }\n setLoading(true);\n try {\n const method = passport.status === PASSPORT_STATUS.REVOKED ? 'enableUserPassport' : 'revokeUserPassport';\n await api[method]({ input: { teamDid, userDid: user.did, passportId: passport.id } });\n refreshTeam();\n } catch (err) {\n enqueueSnackbar(formatError(err), { autoHideDuration: 5000, variant: 'error' });\n } finally {\n setLoading(false);\n setToggleConfirm(null);\n }\n };\n\n const confirmToggle = item =>\n item.status === PASSPORT_STATUS.REVOKED\n ? setToggleConfirm({\n title: t('team.member.enablePassport'),\n description: <ConfirmDescription action=\"enable\" passport={item} />,\n confirm: t('common.enable'),\n cancel: t('common.cancel'),\n onConfirm: () => {\n togglePassportStatus(item);\n },\n onCancel: () => {\n setLoading(false);\n setToggleConfirm(null);\n },\n color: 'primary',\n })\n : setToggleConfirm({\n title: t('team.member.revokePassport'),\n description: <ConfirmDescription action=\"revoke\" passport={item} />,\n confirm: t('common.revoke'),\n cancel: t('common.cancel'),\n onConfirm: () => {\n togglePassportStatus(item);\n },\n onCancel: () => {\n setLoading(false);\n setToggleConfirm(null);\n },\n });\n\n const revokeInfo = (hasPermission, passport) => {\n if (user.did === session.user.did && session.user.passportId && session.user.passportId === passport.id) {\n return {\n revokable: false,\n message: t('team.passport.shouldNotDeleteCurrent'),\n };\n }\n\n if (!hasPermission) {\n return {\n revokable: false,\n message: t('team.passport.noPermission'),\n };\n }\n\n if (teamDid === passport.issuer.id && passport.name === 'owner') {\n return {\n revokable: false,\n message: t('team.passport.noPermission'),\n };\n }\n\n return {\n revokable: true,\n };\n };\n\n const filteredPassports = passports.filter(x => !search || x.title.includes(search) || x.name.includes(search));\n\n return (\n <Div>\n <ListHeader>\n <div className=\"left\">\n <SearchInput\n placeholder={t('team.passport.search')}\n value={search}\n onChange={e => setSearch(e.target.value)}\n />\n </div>\n <div className=\"right\">\n {enablePassportIssuance && !!user.approved && (\n <Permission permission=\"mutate_team\">\n <Button\n variant=\"contained\"\n rounded\n color=\"primary\"\n data-cy=\"issue-passport\"\n onClick={() => setShowIssueDialog(true)}>\n <AddIcon style={{ fontSize: 16, marginRight: 4 }} />\n {t('team.passport.issue')}\n </Button>\n </Permission>\n )}\n </div>\n </ListHeader>\n\n <Box>\n {filteredPassports.map(x => (\n <Permission permission=\"mutate_team\">\n {can => (\n <Box className=\"passport-item\" display=\"flex\" justifyContent=\"space-between\" alignItems=\"center\" mt={3}>\n <Box display=\"flex\" alignItems=\"center\">\n <div>\n <img\n style={{ width: 120 }}\n src={createPassportSvg({\n issuer: x.issuer && x.issuer.name,\n issuerDid: x.issuer && x.issuer.id,\n title: x.title || x.name,\n })}\n alt={x.title}\n />\n </div>\n <div className=\"body\">\n <Box className=\"title\" display=\"flex\" alignItems=\"center\">\n {upperFirst(x.title)}\n <div className=\"status-icons\">\n {!!teamIssuerDid && x.issuer.id !== teamIssuerDid && <ExternalIssuerIcon />}\n {x.revoked && <RevokeIcon />}\n </div>\n </Box>\n {!!teamIssuerDid && x.issuer.id !== teamIssuerDid && (\n <div className=\"tip\">\n {x.issuer.id !== teamIssuerDid && !trustedPassports.some(y => y.issuerDid === x.issuer.id) && (\n <Tooltip title={t('team.passport.notTrustedIssuerTip')}>\n <Box\n component={ErrorOutlineIcon}\n style={{ fontSize: '1.3em' }}\n color=\"error.main\"\n mr={0.5}\n />\n </Tooltip>\n )}\n <span>{t('team.passport.issueBy', { name: x.issuer.name })}</span>\n </div>\n )}\n </div>\n </Box>\n <Box>\n {revokeInfo(can, x).revokable ? (\n <Button\n variant=\"outlined\"\n rounded\n color={x.revoked ? 'primary' : 'secondary'}\n onClick={() => confirmToggle(x)}>\n {x.revoked ? (\n <AddIcon style={{ fontSize: 16, marginRight: 4 }} />\n ) : (\n <RevokeIcon style={{ height: 16, marginRight: 4 }} />\n )}\n {x.revoked ? t('common.enable') : t('common.revoke')}\n </Button>\n ) : (\n <Tooltip title={revokeInfo(can, x).message}>\n <ErrorOutlineIcon style={{ color: '#ddd' }} />\n </Tooltip>\n )}\n </Box>\n </Box>\n )}\n </Permission>\n ))}\n {!filteredPassports.length && <Empty>{t('common.empty')}</Empty>}\n </Box>\n\n {showIssueDialog && (\n <IssuePassport\n teamDid={teamDid}\n ownerDid={user.did}\n roles={roles}\n onCancel={() => setShowIssueDialog(false)}\n onSuccess={() => {\n onCreate();\n setShowIssueDialog(false);\n }}\n />\n )}\n\n {toggleConfirm && (\n <Confirm\n title={toggleConfirm.title}\n description={toggleConfirm.description}\n confirm={toggleConfirm.confirm}\n cancel={toggleConfirm.cancel}\n params={toggleConfirm.params}\n onConfirm={toggleConfirm.onConfirm}\n onCancel={toggleConfirm.onCancel}\n color={toggleConfirm.color}\n />\n )}\n </Div>\n );\n}\n\nPassports.propTypes = {\n user: PropTypes.object.isRequired,\n onCreate: PropTypes.func,\n};\n\nPassports.defaultProps = {\n onCreate: () => {},\n};\n\nconst Div = styled.div`\n .passport-item {\n .body {\n padding: 0;\n margin-left: 24px;\n margin-top: 0;\n }\n .title {\n font-weight: 500;\n font-size: 16px;\n line-height: 19px;\n color: #222222;\n }\n .tip {\n display: flex;\n align-items: center;\n font-size: 14px;\n margin-top: 6px;\n color: #bbb;\n }\n .status-icons {\n svg {\n fill: #bfbfbf;\n height: 1.2em;\n margin-left: 0.4em;\n }\n }\n .MuiButton-outlinedSecondary {\n color: #f16e6e;\n fill: #f16e6e;\n background: #fcf3f3;\n border: 0;\n &:hover {\n border: 0;\n }\n }\n }\n`;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nimport Confirm from '../../confirm';\nimport Toast from '../../toast';\nimport { useNodeContext } from '../../../contexts/node';\nimport { useTeamContext } from '../../../contexts/team';\nimport { useSessionContext } from '../../../contexts/session';\nimport { formatError } from '../../../libs/util';\n\nconst isNodeOwner = (nodeInfo, userDid) => nodeInfo.nodeOwner.did === userDid;\nconst isSelf = (sessionUser, userDid) => sessionUser && sessionUser.did === userDid;\n\nexport default function ToggleUserApproval({ user, onCancel, onSuccess, onError, children }) {\n const { api, info: nodeInfo } = useNodeContext();\n const { session } = useSessionContext();\n const { teamDid, refresh } = useTeamContext();\n const { t } = useLocaleContext();\n const [loading, setLoading] = useState(false);\n const [show, setShow] = useState(false);\n\n const open = () => setShow(true);\n\n const updateUserApproval = async d => {\n const { did, approved } = d;\n if (loading) {\n return;\n }\n setLoading(true);\n try {\n await api.updateUserApproval({\n input: {\n teamDid,\n user: {\n did,\n approved: !approved,\n },\n },\n });\n setShow(false);\n onSuccess();\n refresh();\n } catch (error) {\n Toast.error(formatError(error));\n onError();\n } finally {\n setLoading(false);\n }\n };\n\n const approveConfirm = {\n title: user.approved ? t('team.member.forbidLogin') : t('team.member.allowLogin'),\n description: user.approved ? t('team.member.forbidLoginDescription') : t('team.member.allowLoginDescription'),\n confirm: t('common.confirm'),\n cancel: t('common.cancel'),\n onConfirm: () => {\n updateUserApproval(user);\n },\n onCancel: () => {\n setLoading(false);\n setShow(false);\n onCancel();\n },\n color: user.approved ? 'danger' : 'primary',\n };\n\n const can = nodeInfo.nodeOwner && !isNodeOwner(nodeInfo, user.did) && !isSelf(session.user, user.did);\n\n if (!can) {\n return null;\n }\n\n return (\n <>\n {typeof children === 'function' ? children({ can, open }) : children}\n\n {show ? (\n <Confirm\n title={approveConfirm.title}\n description={approveConfirm.description}\n confirm={approveConfirm.confirm}\n cancel={approveConfirm.cancel}\n params={approveConfirm.params}\n onConfirm={approveConfirm.onConfirm}\n onCancel={approveConfirm.onCancel}\n color={approveConfirm.color}\n />\n ) : null}\n </>\n );\n}\n\nToggleUserApproval.propTypes = {\n user: PropTypes.object,\n onSuccess: PropTypes.func,\n onCancel: PropTypes.func,\n onError: PropTypes.func,\n children: PropTypes.object,\n};\n\nToggleUserApproval.defaultProps = {\n user: {},\n onSuccess: () => {},\n onCancel: () => {},\n onError: () => {},\n children: null,\n};\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport { useSnackbar } from 'notistack';\n\nimport Dialog from '@arcblock/ux/lib/Dialog';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Box from '@material-ui/core/Box';\nimport Avatar from '@material-ui/core/Avatar';\n\nimport Tabs from '@arcblock/ux/lib/Tabs';\nimport InfoRow from '@arcblock/ux/lib/InfoRow';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport DidAddress from '@arcblock/did-connect/lib/Address';\nimport ForbidLoginIcon from '@arcblock/icons/lib/ForbidLoginIcon';\nimport AllowLoginIcon from '@arcblock/icons/lib/AllowLoginIcon';\n\nimport Permission from '../../permission';\nimport { useNodeContext } from '../../../contexts/node';\nimport { useTeamContext } from '../../../contexts/team';\nimport { formatError, formatToDatetime } from '../../../libs/util';\nimport { useSubscription } from '../../../libs/ws';\nimport PassportIssuances from './passport-issuances';\nimport Passports from './passports';\nimport ToggleUserApproval from './toggle-user-approval';\n\nexport default function Member({ userDid, onCancel, initTab }) {\n const { api } = useNodeContext();\n const { roles, teamDid, enablePassportIssuance } = useTeamContext();\n const { t } = useLocaleContext();\n const [issuances, setIssuances] = useState(null);\n const [user, setUser] = useState(null);\n const { enqueueSnackbar } = useSnackbar();\n const [tab, setTab] = useState(initTab || 'info');\n\n const getData = async () => {\n try {\n const res = await api.doBatchQuery({\n getUser: { input: { teamDid, user: { did: userDid } } },\n getPassportIssuances: { input: { teamDid, ownerDid: userDid } },\n });\n setUser(res.getUser.user || {});\n setIssuances(res.getPassportIssuances.list || []);\n } catch (err) {\n enqueueSnackbar(formatError(err), { autoHideDuration: 5000, variant: 'error' });\n }\n };\n\n useEffect(() => {\n if (teamDid) {\n getData();\n }\n }, [userDid, teamDid]); // eslint-disable-line\n\n const onUserEvent = data => {\n if (data.teamDid === teamDid && data.user && data.user.did === userDid) {\n getData();\n }\n };\n\n useSubscription('user.updated', onUserEvent, [userDid, teamDid]);\n\n useEffect(() => {\n if (issuances && !issuances.length && tab === 'issuances') {\n setTab('info');\n }\n }, [issuances]); // eslint-disable-line\n\n // tab\n const Info = () => {\n const rows = user\n ? [\n { name: t('team.member.name'), value: user.fullName },\n { name: t('common.email'), value: user.email },\n { name: t('team.member.allowLogin'), value: user.approved ? t('common.yes') : t('common.no') },\n { name: t('team.member.lastLogin'), value: formatToDatetime(user.updatedAt) },\n { name: t('common.createdAt'), value: formatToDatetime(user.createdAt) },\n { name: t('common.remark'), value: user.remark || '--' },\n ].filter(Boolean)\n : [];\n\n return rows.map(row => {\n if (row.name === t('common.did')) {\n return (\n <InfoRow\n valueComponent=\"div\"\n key={row.name}\n nameWidth={120}\n name={row.name}\n nameFormatter={() => t('common.did')}>\n {row.value}\n </InfoRow>\n );\n }\n\n return (\n <InfoRow\n style={{ alignItems: 'flex-start' }}\n valueComponent=\"div\"\n key={row.name}\n nameWidth={120}\n name={row.name}>\n {row.value}\n </InfoRow>\n );\n });\n };\n\n const tabConfigs = {\n info: {\n label: t('common.basicInfo'),\n value: 'info',\n component: Info,\n },\n passports: {\n label: t('common.passport'),\n value: 'passports',\n component: () => (\n <Passports\n user={user}\n teamDid={teamDid}\n roles={roles}\n onCreate={() => {\n getData(teamDid);\n setTab('issuances');\n }}\n onRefresh={() => {\n getData(teamDid);\n }}\n />\n ),\n },\n issuances: {\n label: t('team.passport.issuance.pending'),\n value: 'issuances',\n component: () => (\n <PassportIssuances issuances={issuances || []} teamDid={teamDid} onRefresh={() => getData(teamDid)} />\n ),\n },\n };\n\n const tabs = Object.values(tabConfigs)\n .map(({ label, value }) => ({ label, value }))\n .filter(x => {\n if (x.value === 'issuances') {\n return enablePassportIssuance && issuances && !!issuances.length;\n }\n\n return true;\n });\n const tabConfig = tabConfigs[tab] || tabConfigs.info;\n const onTabChange = newTab => {\n setTab(newTab);\n };\n\n return (\n <Dialog\n title={t('common.member')}\n onClose={onCancel}\n open\n PaperProps={{ style: { maxWidth: 632, minHeight: '80vh' } }}\n fullWidth\n actions={\n user && (\n <Permission permission=\"mutate_team\">\n <ToggleUserApproval user={user}>\n {({ open }) => (\n <BlockButton onClick={open}>\n {user.approved ? (\n <ForbidLoginIcon style={{ fontSize: '1.2em', marginRight: '0.4em' }} />\n ) : (\n <AllowLoginIcon style={{ fontSize: '1.2em', marginRight: '0.4em' }} />\n )}\n {user.approved ? t('team.member.forbidLogin') : t('team.member.allowLogin')}\n </BlockButton>\n )}\n </ToggleUserApproval>\n </Permission>\n )\n }>\n <Div>\n {!user && (\n <Center>\n <Spinner />\n </Center>\n )}\n\n {user && (\n <div>\n {/* info */}\n <Box display=\"flex\" alignItems=\"center\" className=\"info\">\n <Avatar\n src={user.avatar}\n style={{ width: 48, height: 48, backgroundColor: 'transparent', marginRight: 16 }}\n />\n <Box>\n <Box className=\"name\">{user.fullName}</Box>\n <Box className=\"did\" mt={1}>\n <DidAddress>{user.did}</DidAddress>\n </Box>\n </Box>\n </Box>\n\n {/* tabs */}\n <Box mx={3} className=\"tabs\">\n <Tabs tabs={tabs} current={tab} onChange={onTabChange} scrollButtons=\"auto\" />\n </Box>\n\n {/* body */}\n <div className=\"body\">\n <tabConfig.component />\n </div>\n </div>\n )}\n </Div>\n </Dialog>\n );\n}\n\nMember.propTypes = {\n userDid: PropTypes.string.isRequired,\n onCancel: PropTypes.func.isRequired,\n initTab: PropTypes.string,\n};\n\nMember.defaultProps = {\n initTab: 'info',\n};\n\nconst Div = styled.div`\n .info {\n .name {\n font-weight: 500;\n font-size: 18px;\n line-height: 25px;\n color: #222222;\n }\n }\n\n .tabs {\n margin-top: 24px;\n margin-left: 0;\n margin-right: 0;\n }\n\n .body {\n margin-top: 24px;\n }\n`;\n\nconst Center = styled.div`\n flex: 1;\n display: flex;\n justify-content: center;\n align-items: center;\n height: 200px;\n`;\n\nconst BlockButton = styled.div`\n flex-shrink: 0;\n width: 100%;\n height: 64px;\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n color: #999;\n fill: #999;\n font-size: 16px;\n border-top: 1px solid #f0f0f0;\n position: sticky;\n bottom: 0;\n background: #fff;\n z-index: 10;\n`;\n","import React, { useContext, useState } from 'react';\nimport styled from 'styled-components';\n\nimport MaterialTable from 'material-table';\nimport DeleteIcon from '@material-ui/icons/Delete';\n\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\nimport Empty from '@arcblock/ux/lib/Empty';\n\nimport { useNodeContext } from '../../../contexts/node';\nimport { useTeamContext } from '../../../contexts/team';\nimport { useBlockletContext } from '../../../contexts/blocklets';\nimport Confirm from '../../confirm';\nimport tableIcons from '../../table-icons';\nimport TableStyle from '../../table';\nimport usePersistentSort from '../../../hooks/persistent-sort';\nimport Permission from '../../permission';\nimport ClickToCopy from '../../click-to-copy';\nimport { sleep, getInviteLink, formatToDatetime } from '../../../libs/util';\n\nexport default function Invitations() {\n const { api: client } = useNodeContext();\n const { t } = useContext(LocaleContext);\n const { findInterfaceWithAuthService } = useBlockletContext();\n const { teamDid, invitations, refresh } = useTeamContext();\n const [delConfirm, setDelConfirm] = useState(null);\n const [loading, setLoading] = useState(false);\n\n const { sortDirections, onSortChange } = usePersistentSort('invitations', ['', '', '', '', '', '']);\n\n const deleteInvitation = async ({ inviteId }) => {\n if (loading) {\n return;\n }\n setLoading(true);\n try {\n await client.deleteInvitation({ input: { teamDid, inviteId } });\n refresh();\n await sleep(800);\n } catch (error) {\n console.error(error);\n } finally {\n setLoading(false);\n setDelConfirm(null);\n }\n };\n\n const onCancel = () => {\n setLoading(false);\n setDelConfirm(null);\n };\n\n const authInfo = findInterfaceWithAuthService(teamDid);\n\n const isInvitationEnabled = authInfo && authInfo.invitedUserOnly;\n if (!isInvitationEnabled) {\n return <h2 style={{ textAlign: 'center', margin: '100px 0', color: '#bbb' }}>{t('team.inviting.disabledTip')}</h2>;\n }\n\n const getLink = column => {\n if (!authInfo) {\n return '';\n }\n return getInviteLink({ inviteId: column.inviteId, endpoint: authInfo.endpoint });\n };\n\n const columns = [\n {\n title: t('team.inviting.link'),\n field: 'inviteId',\n defaultSort: sortDirections[0],\n render: d => {\n if (!authInfo) {\n return null;\n }\n return <ClickToCopy>{getLink(d)}</ClickToCopy>;\n },\n },\n {\n title: t('common.remark'),\n field: 'remark',\n defaultSort: sortDirections[1],\n render: d => d.remark || '--',\n },\n {\n title: t('team.inviting.inviter'),\n field: 'inviter.fullName',\n defaultSort: sortDirections[2],\n },\n {\n title: t('common.expires'),\n field: 'inviter.expireDate',\n defaultSort: sortDirections[3],\n render: d => formatToDatetime(d.expireDate),\n },\n {\n title: t('common.actions'),\n sorting: false,\n align: 'center',\n render: item => (\n <Permission permission=\"mutate_team\">\n <Button\n rounded\n onClick={() =>\n setDelConfirm({\n title: t('team.inviting.delete.title'),\n description: t('team.inviting.delete.description', { link: getLink(item) }),\n confirm: t('common.delConfirm'),\n cancel: t('common.cancel'),\n onConfirm: () => deleteInvitation(item),\n onCancel,\n })\n }\n size=\"small\"\n color=\"danger\"\n variant=\"text\">\n <DeleteIcon style={{ fontSize: '1.2em' }} />\n {t('common.delete')}\n </Button>\n </Permission>\n ),\n },\n ];\n\n return (\n <Div>\n <TableStyle>\n {invitations.length ? (\n <MaterialTable\n columns={columns}\n icons={{ ...tableIcons }}\n onOrderChange={onSortChange}\n options={{\n emptyRowsWhenPaging: false,\n actionsColumnIndex: -1,\n tableLayout: 'auto',\n maxBodyHeight: '100%',\n search: false,\n pageSize: 20,\n pageSizeOptions: [20, 50, 100],\n }}\n localization={{\n toolbar: { searchPlaceholder: t('common.search') },\n body: {\n emptyDataSourceMessage: t('common.noData'),\n },\n }}\n data={invitations}\n />\n ) : (\n <Empty>{t('common.empty')}</Empty>\n )}\n </TableStyle>\n {delConfirm && (\n <Confirm\n title={delConfirm.title}\n description={delConfirm.description}\n confirm={delConfirm.confirm}\n cancel={delConfirm.cancel}\n params={delConfirm.params}\n onConfirm={delConfirm.onConfirm}\n onCancel={delConfirm.onCancel}\n />\n )}\n </Div>\n );\n}\n\nconst Div = styled.div`\n .table-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-top: 20px;\n font-size: 14px;\n }\n`;\n\nInvitations.propTypes = {};\n\nInvitations.defaultProps = {};\n","import React, { useState, useContext } from 'react';\nimport PropTypes from 'prop-types';\n\nimport MenuItem from '@material-ui/core/MenuItem';\nimport AddIcon from '@material-ui/icons/Add';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport ForbidLoginIcon from '@arcblock/icons/lib/ForbidLoginIcon';\nimport AllowLoginIcon from '@arcblock/icons/lib/AllowLoginIcon';\n\nimport { useTeamContext } from '../../../contexts/team';\nimport Actions from '../../actions';\nimport IssuePassport from './issue-passport';\nimport ToggleUserApproval from './toggle-user-approval';\n\nexport default function MemberActions({ user, onIssuePassport }) {\n const { teamDid, roles } = useTeamContext();\n const { t } = useContext(LocaleContext);\n const [enablePassportIssuance, setEnablePassportIssuance] = useState(false);\n\n return (\n <>\n <Actions\n data-cy=\"member-actions\"\n actions={[\n {\n icon: <AddIcon fontSize=\"small\" />,\n text: t('team.passport.issue'),\n 'data-cy': 'action-issue-passport',\n onClick: e => {\n e.stopPropagation();\n setEnablePassportIssuance(true);\n },\n },\n ({ close }) => (\n <ToggleUserApproval user={user}>\n {({ open: o }) => (\n <MenuItem\n dense\n key=\"toggle-approval\"\n onClick={e => {\n e.stopPropagation();\n close();\n o(e);\n }}\n data-cy=\"action-toggle-block\">\n <ListItemIcon style={{ minWidth: 24, marginRight: 8 }}>\n {user.approved ? <ForbidLoginIcon /> : <AllowLoginIcon />}\n </ListItemIcon>\n <ListItemText primary={user.approved ? t('team.member.forbidLogin') : t('team.member.allowLogin')} />\n </MenuItem>\n )}\n </ToggleUserApproval>\n ),\n ]}\n />\n {enablePassportIssuance && (\n <IssuePassport\n teamDid={teamDid}\n ownerDid={user.did}\n roles={roles}\n onCancel={() => setEnablePassportIssuance(false)}\n onSuccess={() => {\n onIssuePassport();\n setEnablePassportIssuance(false);\n }}\n />\n )}\n </>\n );\n}\n\nMemberActions.propTypes = {\n user: PropTypes.object.isRequired,\n onIssuePassport: PropTypes.func,\n};\n\nMemberActions.defaultProps = {\n onIssuePassport: () => {},\n};\n","import React, { useContext, useState, useEffect } from 'react';\nimport styled from 'styled-components';\nimport moment from 'moment';\n\nimport Dialog from '@arcblock/ux/lib/Dialog';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Box from '@material-ui/core/Box';\nimport AddIcon from '@material-ui/icons/Add';\nimport Address from '@arcblock/did-connect/lib/Address';\nimport Avatar from '@arcblock/did-connect/lib/Avatar';\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\nimport PersonIcon from '@arcblock/icons/lib/PersonIcon';\nimport ExternalIssuerIcon from '@arcblock/icons/lib/ExternalIssuerIcon';\n\nimport { useBlockletContext } from '../../../contexts/blocklets';\nimport { useTeamContext } from '../../../contexts/team';\nimport PaginationList from '../../pagination-list';\nimport Permission from '../../permission';\nimport ListHeader from '../styles/list-header';\nimport SearchInput from '../search-input';\nimport InviteMember from './invite-member';\nimport Member from './member';\nimport Invitations from './invitations';\nimport Actions from './actions';\n\nconst ROLE_NONE = '__none__';\n\nconst hasRole = (user, role) => {\n if (role === ROLE_NONE) {\n return !user.passports || !user.passports.length;\n }\n\n return (user.passports || []).some(z => z.role === role);\n};\n\nconst isFromExternal = (user, teamIssuerDid) => {\n const list = user.passports || [];\n if (!list.length) {\n return false;\n }\n\n return !list.some(z => z.issuer.id === teamIssuerDid);\n};\n\nexport default function MemberList() {\n const { teamDid, teamIssuerDid, users, invitations, roles, refresh, enablePassportIssuance } = useTeamContext();\n const { findInterfaceWithAuthService } = useBlockletContext();\n const { t } = useContext(LocaleContext);\n const [showInviteMember, setShowInviteMember] = useState(false);\n const [showInviting, setShowInviting] = useState(false);\n const [memberDialog, setMemberDialog] = useState(false); // member, inviting\n const [roleTab, setRoleTab] = useState('all');\n const [search, setSearch] = useState('');\n\n const usersBySearch = users.filter(\n x => !search || x.did.includes(search) || x.fullName.toLowerCase().includes(search.toLowerCase())\n );\n\n const sideList = (roles || []).map(x => ({\n name: x.name,\n title: x.title,\n num: (usersBySearch || []).filter(y => hasRole(y, x.name)).length || 0,\n }));\n sideList.unshift({\n name: 'all',\n title: 'All Members',\n num: (usersBySearch || []).length,\n });\n sideList.push({\n name: ROLE_NONE,\n title: 'Other',\n num: (usersBySearch || []).filter(x => hasRole(x, ROLE_NONE)).length || 0,\n });\n\n useEffect(() => {\n setRoleTab('all');\n }, [search]);\n\n const SimpleInfo = d => {\n const main = (\n <div className=\"info\">\n <div className=\"avatar\">\n <div className=\"icon\">\n <Avatar size={46} did={d.did} />\n </div>\n {!d.approved && <did className=\"badge-block\" />}\n </div>\n <Box className=\"title\" display=\"flex\" alignItems=\"center\">\n <div className=\"text\">{d.fullName}</div>\n {d.isFromExternal && (\n <Tooltip title={t('team.passport.externalPassport')}>\n <Box ml={1} className=\"icon\">\n <ExternalIssuerIcon />\n </Box>\n </Tooltip>\n )}\n </Box>\n </div>\n );\n return d.approved ? (\n main\n ) : (\n <Box display=\"flex\" alignItems=\"center\">\n <Tooltip title={t('team.member.forbidLoginDescription')}>{main}</Tooltip>\n </Box>\n );\n };\n\n const authInfo = findInterfaceWithAuthService(teamDid);\n const isInvitationEnabled = authInfo && authInfo.invitedUserOnly && enablePassportIssuance;\n\n const filteredUsers = usersBySearch.filter(x => roleTab === 'all' || hasRole(x, roleTab));\n const sortedUsers = filteredUsers.sort((a, b) => (new Date(a.lastLoginAt) > new Date(b.lastLoginAt) ? -1 : 1));\n sortedUsers.forEach(x => {\n x.isFromExternal = isFromExternal(x, teamIssuerDid);\n });\n\n return (\n <Div>\n {/* header */}\n <ListHeader>\n <div className=\"left\">\n <SearchInput placeholder={t('team.member.search')} value={search} onChange={e => setSearch(e.target.value)} />\n </div>\n <div className=\"right\">\n {isInvitationEnabled && (\n <>\n <Button\n variant=\"outlined\"\n color=\"primary\"\n rounded\n onClick={() => {\n setShowInviting(true);\n }}>\n <PersonIcon style={{ height: '1em', marginRight: 4 }} />\n {t('common.inviting')}\n {invitations.length ? ` (${invitations.length})` : ''}\n </Button>\n <Permission permission=\"mutate_team\">\n <Button\n style={{ marginLeft: 16 }}\n variant=\"contained\"\n rounded\n edge=\"end\"\n color=\"primary\"\n data-cy=\"invite-member\"\n onClick={() => setShowInviteMember(true)}>\n <AddIcon style={{ fontSize: '1.3em', marginRight: 4 }} />\n {t('team.invite')}\n </Button>\n </Permission>\n </>\n )}\n {showInviteMember && (\n <InviteMember\n teamDid={teamDid}\n authInfo={authInfo}\n roles={roles}\n onCancel={() => setShowInviteMember(false)}\n onSuccess={() => {\n refresh();\n setShowInviteMember(false);\n }}\n />\n )}\n </div>\n </ListHeader>\n\n <Box mt={3} className=\"main\" display=\"flex\">\n <div className=\"left\">\n <div className=\"tabs\">\n {sideList.map(x => (\n <div className={`tab ${roleTab === x.name ? 'active' : ''}`} onClick={() => setRoleTab(x.name)}>\n <span className=\"text\">{x.title}</span>\n <span className=\"badge\">{x.num}</span>\n </div>\n ))}\n </div>\n </div>\n <div className=\"right\">\n <PaginationList list={sortedUsers}>\n {paginateUsers => (\n <Box className=\"list\">\n {paginateUsers.map(x => (\n <Box\n className=\"item\"\n display=\"flex\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n data-cy={`member-name-${x.fullName}`}\n onClick={() => setMemberDialog(x)}>\n <Box display=\"flex\" alignItems=\"center\">\n {SimpleInfo(x)}\n <Box ml={5} className=\"address\">\n <Address copyable={false}>{x.did}</Address>\n </Box>\n </Box>\n <Box display=\"flex\" alignItems=\"center\">\n <Box mr={5} style={{ color: '#999', fontSize: 14 }}>\n {x.lastLoginAt ? moment(x.lastLoginAt).fromNow() : '--'}\n </Box>\n <Permission permission=\"mutate_team\">\n <Actions user={x} onIssuePassport={() => setMemberDialog({ ...x, initTab: 'issuances' })} />\n </Permission>\n </Box>\n </Box>\n ))}\n </Box>\n )}\n </PaginationList>\n </div>\n </Box>\n\n {/* table */}\n <Dialog\n title={t('common.inviting')}\n onClose={() => setShowInviting(false)}\n open={showInviting}\n maxWidth=\"lg\"\n fullWidth>\n <Invitations />\n </Dialog>\n\n {memberDialog && (\n <Member onCancel={() => setMemberDialog(null)} userDid={memberDialog.did} initTab={memberDialog.initTab} />\n )}\n </Div>\n );\n}\n\nconst Div = styled.div`\n .main {\n .left {\n width: 168px;\n flex-shrink: 0;\n margin-right: 65px;\n .tabs {\n padding-top: 16px;\n .tab {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 16px;\n transition: background 0.4s;\n\n width: 168px;\n height: 36px;\n border-radius: 8px;\n\n cursor: pointer;\n user-select: none;\n\n &:nth-child(n + 2) {\n margin-top: 24px;\n }\n\n &.active {\n background: #f2f2f2;\n }\n\n &:hover {\n background: #f2f2f2;\n }\n\n .text {\n font-weight: 500;\n font-size: 16px;\n line-height: 19px;\n\n color: #222222;\n }\n\n .badge {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 20px;\n height: 20px;\n border-radius: 100%;\n color: #fff;\n background: #666666;\n font-size: 10px;\n font-weight: 500;\n }\n }\n }\n @media (max-width: ${props => props.theme.breakpoints.values.md}px) {\n display: none;\n }\n }\n .right {\n flex-grow: 1;\n }\n }\n\n .list {\n margin-top: 4px;\n margin-left: 40px;\n @media (max-width: ${props => props.theme.breakpoints.values.md}px) {\n margin-left: 0;\n }\n .item {\n padding: 12px;\n margin: 0 -12px;\n cursor: pointer;\n transition: box-shadow 0.4s;\n &:hover {\n box-shadow: 0 0 10px 4px rgba(0, 0, 0, 0.1);\n }\n @media (max-width: ${props => props.theme.breakpoints.values.md}px) {\n .address {\n display: none;\n }\n }\n .info {\n display: flex;\n align-items: center;\n .avatar {\n position: relative;\n box-sizing: border-box;\n width: 48px;\n height: 48px;\n .icon {\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n border: 1px solid #eee;\n border-radius: 100%;\n background: #eee;\n overflow: hidden;\n }\n .badge-block {\n width: 20px;\n height: 20px;\n position: absolute;\n right: -4px;\n bottom: -4px;\n background: #ff5757;\n border-radius: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n &::after {\n content: '';\n width: 11px;\n height: 2px;\n background: #fefefe;\n }\n }\n }\n .title {\n width: 100px;\n margin-left: 24px;\n .text {\n color: #666;\n font-size: 16px;\n }\n .icon {\n font-size: 14px;\n line-height: 1;\n fill: #bfbfbf;\n }\n }\n }\n }\n }\n`;\n\nMemberList.propTypes = {};\n\nMemberList.defaultProps = {};\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport md5 from 'md5';\n\nimport Dialog from '@arcblock/ux/lib/Dialog';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport Typography from '@material-ui/core/Typography';\nimport TextField from '@material-ui/core/TextField';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\nimport Alert from '@arcblock/ux/lib/Alert';\n\nimport { useNodeContext } from '../../../contexts/node';\nimport { formatError } from '../../../libs/util';\n\nexport default function MutateRole({ teamDid, onCancel, onSuccess, onError, mode, item }) {\n const { api } = useNodeContext();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState('');\n const { t } = useLocaleContext();\n\n const [title, setTitle] = useState(item.title || '');\n const [description, setDescription] = useState(item.description || '');\n\n const onCreate = async () => {\n const _title = title.trim();\n if (!_title) {\n setError(t('team.passport.error.titleEmpty'));\n return;\n }\n\n if (_title.length > 64) {\n setError(t('team.passport.error.titleTooLong', { length: 64 }));\n return;\n }\n\n const desc = description.replace(/\\n/g, ' ');\n if (!desc) {\n setError(t('team.passport.error.descriptionEmpty'));\n return;\n }\n\n const name = mode === 'create' ? md5(_title) : item.name;\n\n setError(null);\n setLoading(true);\n\n try {\n if (mode === 'create') {\n await api.createRole({ input: { teamDid, name, title: _title, description: desc } });\n } else {\n await api.updateRole({ input: { teamDid, role: { name, title: _title, description: desc } } });\n }\n onSuccess();\n } catch (err) {\n const errMsg = formatError(err);\n setError(errMsg);\n onError(err);\n } finally {\n setLoading(false);\n }\n };\n\n const body = (\n <div>\n {mode === 'update' && (\n <Typography component=\"div\" style={{ paddingTop: 24 }}>\n <TextField\n label=\"ID\"\n autoComplete=\"off\"\n variant=\"outlined\"\n name=\"url\"\n data-cy=\"mutate-role-input-name\"\n fullWidth\n autoFocus\n value={item.name}\n disabled\n />\n </Typography>\n )}\n\n <Typography component=\"div\" style={{ marginTop: 24 }}>\n <TextField\n label={t('common.title')}\n autoComplete=\"off\"\n variant=\"outlined\"\n name=\"title\"\n data-cy=\"mutate-role-input-title\"\n fullWidth\n autoFocus\n value={title}\n onChange={e => {\n setError(null);\n setTitle(e.target.value);\n }}\n disabled={mode === 'update' || loading}\n helperText={t('team.passport.create.titleTip')}\n />\n </Typography>\n\n <Typography component=\"div\" style={{ marginTop: 24, marginBottom: 24 }}>\n <TextField\n label={t('common.description')}\n autoComplete=\"off\"\n variant=\"outlined\"\n name=\"description\"\n data-cy=\"mutate-role-input-description\"\n fullWidth\n autoFocus\n value={description}\n onChange={e => {\n setError(null);\n setDescription(e.target.value);\n }}\n disabled={loading}\n multiline\n rows={3}\n />\n </Typography>\n </div>\n );\n\n return (\n <Dialog\n title={mode === 'create' ? t('team.passport.create.title') : ''}\n fullWidth\n open\n onClose={onCancel}\n showCloseButton={false}\n actions={\n <>\n <Button onClick={onCancel} color=\"default\" rounded size=\"small\">\n {t('common.cancel')}\n </Button>\n <Button\n data-cy=\"mutate-role-confirm\"\n onClick={onCreate}\n color=\"primary\"\n size=\"small\"\n disabled={loading}\n variant=\"contained\"\n autoFocus\n rounded>\n {loading && <Spinner size={[16, 10]} />}\n {mode === 'create' ? t('common.create') : t('common.update')}\n </Button>\n </>\n }>\n <DialogContentText component=\"div\">{body}</DialogContentText>\n {!!error && (\n <Alert type=\"error\" variant=\"icon\" style={{ width: '100%', margin: 0 }}>\n {error}\n </Alert>\n )}\n </Dialog>\n );\n}\n\nMutateRole.propTypes = {\n teamDid: PropTypes.string.isRequired,\n onCancel: PropTypes.func.isRequired,\n onSuccess: PropTypes.func.isRequired,\n onError: PropTypes.func,\n mode: PropTypes.oneOf(['create', 'update']),\n item: PropTypes.object,\n};\n\nMutateRole.defaultProps = {\n onError: () => {},\n mode: 'create',\n item: {},\n};\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport cloneDeep from 'lodash/cloneDeep';\n\nimport Dialog from '@arcblock/ux/lib/Dialog';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport IconButton from '@material-ui/core/IconButton';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport Checkbox from '@material-ui/core/Checkbox';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\nimport EditIcon from '@arcblock/icons/lib/EditIcon';\nimport DeleteIcon from '@arcblock/icons/lib/DeleteIcon';\n\nimport { useNodeContext } from '../../../contexts/node';\nimport { useTeamContext } from '../../../contexts/team';\nimport { formatError, isProtectedRole } from '../../../libs/util';\nimport { withPermission } from '../../permission';\nimport Confirm from '../../confirm';\nimport Toast from '../../toast';\nimport MutateRole from './mutate-role';\n\nfunction PassportDetail({ onCancel, onSuccess, onDelete, roleName, hasPermission }) {\n const { api } = useNodeContext();\n const { roles, permissions, teamDid, refresh: refreshTeam, isNodeTeam } = useTeamContext();\n const { t } = useLocaleContext();\n const [binds, setBinds] = useState([]);\n const [updateForm, setUpdateForm] = useState(false);\n const [delConfirm, setDelConfirm] = useState(null);\n const [loading, setLoading] = useState(false);\n\n const role = cloneDeep(roles.find(x => x.name === roleName));\n\n const isProtected = isProtectedRole(roleName);\n\n const deletePassport = async name => {\n if (loading) return;\n try {\n setLoading(true);\n await api.deleteRole({ input: { teamDid, name } });\n onDelete();\n } catch (err) {\n Toast.error(err.message);\n } finally {\n setLoading(false);\n setDelConfirm(null);\n }\n };\n\n const getData = async (team, name) => {\n const res = await api.getPermissionsByRole({ input: { teamDid: team, role: { name } } });\n const permissionList = res.permissions || [];\n const bindList = permissions.map(x => ({\n ...x,\n bind: permissionList.some(y => y.name === x.name),\n }));\n setBinds(bindList);\n };\n\n const onBind = async () => {\n setLoading(true);\n\n const grantNames = binds.filter(x => x.bind).map(x => x.name);\n\n try {\n await api.updatePermissionsForRole({ input: { teamDid, roleName: role.name, grantNames } });\n Toast.success(t('common.saveSuccess'));\n onSuccess();\n } catch (err) {\n Toast.error(formatError(err));\n } finally {\n setLoading(false);\n }\n };\n\n useEffect(() => {\n if (teamDid && roleName) {\n getData(teamDid, roleName);\n }\n }, [teamDid, roleName]); // eslint-disable-line\n\n const readPermissionsOnly = isNodeTeam || !hasPermission;\n\n return (\n <Dialog\n title={t('common.passport')}\n onClose={onCancel}\n open\n fullWidth\n toolbar={\n hasPermission &&\n !isProtected && (\n <>\n <IconButton onClick={() => setUpdateForm(role)} data-cy={`edit-passport-${role.name}`}>\n <EditIcon fill=\"#bfbfbf\" />\n </IconButton>\n <IconButton\n onClick={() =>\n setDelConfirm({\n title: t('team.passport.delete.title'),\n description: t('team.passport.delete.description', { name: role.title }),\n confirm: t('common.delConfirm'),\n cancel: t('common.cancel'),\n onConfirm: () => {\n deletePassport(role.name);\n },\n onCancel: () => {\n setLoading(false);\n setDelConfirm(null);\n },\n })\n }\n data-cy={`delete-passport-${role.name}`}>\n <DeleteIcon fill=\"#bfbfbf\" />\n </IconButton>\n </>\n )\n }\n actions={\n !readPermissionsOnly && (\n <>\n <Button onClick={onCancel} color=\"default\" rounded>\n {t('common.cancel')}\n </Button>\n <Button\n onClick={onBind}\n color=\"primary\"\n disabled={loading || !role}\n variant=\"contained\"\n autoFocus\n data-cy=\"bind-permission-btn-confirm\"\n rounded>\n {loading && <Spinner size={[16, 10]} />}\n {t('common.save')}\n </Button>\n </>\n )\n }>\n <Div>\n {!role && (\n <Center>\n <Spinner />\n </Center>\n )}\n\n {/* content */}\n {role && (\n <div className=\"dialog-content\">\n <div className=\"header\">\n <div className=\"title\">{role.title}</div>\n <div className=\"description\">{role.description}</div>\n </div>\n\n {/* bind permission */}\n <div className=\"bind\">\n <div className=\"title\">{t('common.permission')}</div>\n <div className=\"list\">\n {binds\n // if readonly, show obtained permissions only\n .filter(x => (readPermissionsOnly ? x.bind : true))\n .map(x => (\n <div className=\"item\">\n <FormControlLabel\n control={\n <Checkbox\n disabled={readPermissionsOnly}\n checked={x.bind}\n onChange={() => {\n setBinds(state =>\n state.map(y => {\n if (y.name === x.name) {\n y.bind = !y.bind;\n }\n return y;\n })\n );\n }}\n name={x.name}\n />\n }\n label={x.description}\n />\n </div>\n ))}\n </div>\n </div>\n </div>\n )}\n </Div>\n\n {updateForm && (\n <MutateRole\n teamDid={teamDid}\n onCancel={() => setUpdateForm(null)}\n onSuccess={() => {\n setUpdateForm(null);\n refreshTeam();\n }}\n mode=\"update\"\n roleName={updateForm.name}\n item={updateForm}\n />\n )}\n\n {delConfirm && (\n <Confirm\n title={delConfirm.title}\n description={delConfirm.description}\n confirm={delConfirm.confirm}\n cancel={delConfirm.cancel}\n params={delConfirm.params}\n onConfirm={delConfirm.onConfirm}\n onCancel={delConfirm.onCancel}\n />\n )}\n </Dialog>\n );\n}\n\nexport default withPermission(PassportDetail, 'mutate_team');\n\nPassportDetail.propTypes = {\n roleName: PropTypes.string.isRequired,\n onCancel: PropTypes.func.isRequired,\n onSuccess: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n hasPermission: PropTypes.bool,\n};\n\nPassportDetail.defaultProps = {\n hasPermission: false,\n};\n\nconst Div = styled.div`\n .header {\n .title {\n font-weight: 500;\n font-size: 24px;\n line-height: 28px;\n color: #222222;\n }\n\n .description {\n margin-top: 16px;\n font-weight: 500;\n font-size: 16px;\n line-height: 19px;\n color: #999999;\n }\n }\n\n .bind {\n margin-top: 24px;\n .title {\n font-weight: 500;\n font-size: 16px;\n line-height: 19px;\n color: #666666;\n margin-bottom: 24px;\n }\n .item {\n margin-top: 24px;\n }\n\n .MuiFormControlLabel-label {\n font-weight: 500;\n font-size: 16px;\n line-height: 19px;\n color: #666;\n }\n\n .PrivateSwitchBase-root-45 {\n padding: 0;\n padding-right: 12px;\n }\n }\n`;\n\nconst Center = styled.div`\n flex: 1;\n display: flex;\n justify-content: center;\n align-items: center;\n height: 200px;\n`;\n","var _path;\n\nvar _excluded = [\"svgRef\", \"title\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar SvgLongArrow = function SvgLongArrow(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 65,\n height: 16,\n viewBox: \"0 0 65 16\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M64.7071 8.70711C65.0976 8.31658 65.0976 7.68342 64.7071 7.29289L58.3431 0.928932C57.9526 0.538408 57.3195 0.538408 56.9289 0.928932C56.5384 1.31946 56.5384 1.95262 56.9289 2.34315L62.5858 8L56.9289 13.6569C56.5384 14.0474 56.5384 14.6805 56.9289 15.0711C57.3195 15.4616 57.9526 15.4616 58.3431 15.0711L64.7071 8.70711ZM0 9H64V7H0V9Z\",\n fill: \"#666666\"\n })));\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgLongArrow, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/long-arrow.4be14920.svg\";\nexport { ForwardRef as ReactComponent };","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport cloneDeep from 'lodash/cloneDeep';\n\nimport Dialog from '@arcblock/ux/lib/Dialog';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Box from '@material-ui/core/Box';\nimport ArrowBackIcon from '@material-ui/icons/ArrowBack';\nimport IconButton from '@material-ui/core/IconButton';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport TextField from '@material-ui/core/TextField';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\nimport DeleteIcon from '@arcblock/icons/lib/DeleteIcon';\nimport Empty from '@arcblock/ux/lib/Empty';\n\nimport { ROLES } from '@abtnode/constant';\n\nimport { useNodeContext } from '../../../contexts/node';\nimport { useTeamContext } from '../../../contexts/team';\nimport { sleep } from '../../../libs/util';\nimport { ReactComponent as LongArrow } from '../../../icons/long-arrow.svg';\nimport Toast from '../../toast';\n\nconst canSave = (issuerDid, mappings) => {\n if (!issuerDid) {\n return false;\n }\n\n if (mappings.some(x => !x.from.passport || !x.to.role)) {\n return false;\n }\n\n return true;\n};\n\nexport default function TrustedIssuer({ onCancel, onSuccess, data, trustedPassports }) {\n const { api } = useNodeContext();\n const { roles, teamDid } = useTeamContext();\n const { t } = useLocaleContext();\n const [loading, setLoading] = useState(false);\n const [issuerDid, setIssuerDid] = useState(data.issuerDid || '');\n const [mappings, setMappings] = useState(cloneDeep(data.mappings) || []);\n\n const editIndex = trustedPassports.findIndex(x => x.issuerDid === data.issuerDid);\n\n const configTrustedPassports = async () => {\n if (loading) {\n return;\n }\n\n const trustedList = [...trustedPassports];\n\n if (editIndex === -1) {\n trustedList.unshift({\n issuerDid,\n mappings,\n });\n } else {\n trustedList[editIndex] = {\n issuerDid,\n mappings,\n };\n }\n\n try {\n setLoading(true);\n await api.configTrustedPassports({ input: { teamDid, trustedPassports: trustedList } });\n await sleep(800);\n setLoading(false);\n Toast.success(t('common.saveSuccess'));\n onSuccess();\n } catch (err) {\n setLoading(false);\n Toast.error(err.message);\n }\n };\n\n return (\n <Dialog\n title={t('team.passport.trustedIssuers')}\n open\n showCloseButton={false}\n PaperProps={{ style: { minHeight: '80vh' } }}\n fullWidth\n prepend={\n <IconButton onClick={onCancel} data-cy=\"trusted-issuer-close\">\n <ArrowBackIcon />\n </IconButton>\n }\n actions={\n <>\n <Button onClick={onCancel} color=\"default\" rounded>\n {t('common.cancel')}\n </Button>\n <Button\n onClick={() => configTrustedPassports()}\n color=\"primary\"\n disabled={!canSave(issuerDid, mappings) || loading}\n variant=\"contained\"\n autoFocus\n data-cy=\"save-mapping\"\n rounded>\n {loading && <Spinner size={[16, 10]} />}\n {t('common.save')}\n </Button>\n </>\n }>\n <Div>\n <div className=\"dialog-content\">\n <TextField\n fullWidth\n data-cy=\"input-issuer-did\"\n placeholder={t('team.passport.issuerDid')}\n value={issuerDid}\n onChange={event => {\n setIssuerDid(event.target.value);\n }}\n />\n\n <Box mt=\"30px\" display=\"flex\" justifyContent=\"space-between\" alignItems=\"center\">\n <Box className=\"dialog-h1\">{t('team.passport.mappingRule')}</Box>\n <Box>\n <Button\n variant=\"outlined\"\n rounded\n color=\"primary\"\n data-cy=\"add-mapping\"\n onClick={() => {\n setMappings(d => {\n const res = [...d];\n res.unshift({ from: { passport: '' }, to: { role: ROLES.GUEST } });\n return res;\n });\n }}>\n {t('team.add')}\n </Button>\n </Box>\n </Box>\n\n <Box className=\"list\" mt={-0.5}>\n {mappings.map((item, index) => (\n <Box display=\"flex\" alignItems=\"center\" justifyContent=\"space-between\" my={3}>\n <Box display=\"flex\" alignItems=\"center\" flexGrow={1}>\n <Box flexGrow={1} flexBasis={1}>\n <TextField\n fullWidth\n size=\"small\"\n data-cy={`input-${index}-from`}\n placeholder=\"Issuer’s Passport Name/ID\"\n value={item.from.passport}\n onChange={event => {\n const { value } = event.target;\n setMappings(d => {\n const res = [...d];\n res[index].from.passport = value;\n return res;\n });\n }}\n />\n </Box>\n\n <Box flexShrink={0} mx={4}>\n <LongArrow />\n </Box>\n\n {/* role */}\n <Box flexGrow={1} flexBasis={1}>\n <TextField\n fullWidth\n size=\"small\"\n select\n value={item.to.role}\n onChange={e => {\n setMappings(d => {\n const res = [...d];\n res[index].to.role = e.target.value;\n return res;\n });\n }}\n variant=\"outlined\">\n {roles\n .filter(d => d.name !== 'owner')\n .map(r => (\n <MenuItem key={r.name} value={r.name} data-cy={`passport-mapping-select-option-${r.name}`}>\n <span>{r.title || r.name}</span>\n </MenuItem>\n ))}\n </TextField>\n </Box>\n </Box>\n\n {/* delete */}\n <Box flexShrink={0} ml={4}>\n <IconButton\n onClick={() => {\n setMappings(d => {\n const res = [...d];\n res.splice(index, 1);\n return res;\n });\n }}>\n <DeleteIcon />\n </IconButton>\n </Box>\n </Box>\n ))}\n\n {!mappings.length && (\n <Box my={2} color=\"text.secondary\" fontSize=\"16px\">\n <Empty>{t('common.empty')}</Empty>\n </Box>\n )}\n </Box>\n </div>\n </Div>\n </Dialog>\n );\n}\n\nTrustedIssuer.propTypes = {\n onCancel: PropTypes.func.isRequired,\n onSuccess: PropTypes.func.isRequired,\n trustedPassports: PropTypes.array,\n data: PropTypes.object,\n};\n\nTrustedIssuer.defaultProps = {\n data: {},\n trustedPassports: [],\n};\n\nconst Div = styled.div`\n .dialog-h1 {\n font-size: 18px;\n }\n\n .MuiOutlinedInput-root {\n border-radius: 36px;\n .MuiSelect-root.MuiOutlinedInput-input {\n padding-top: 8.5px;\n padding-bottom: 8.5px;\n }\n }\n\n .list {\n .MuiIconButton-root {\n svg {\n fill: #bfbfbf;\n }\n }\n }\n`;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport cloneDeep from 'lodash/cloneDeep';\n\nimport Dialog from '@arcblock/ux/lib/Dialog';\nimport Box from '@material-ui/core/Box';\nimport AddIcon from '@material-ui/icons/Add';\nimport IconButton from '@material-ui/core/IconButton';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\nimport Empty from '@arcblock/ux/lib/Empty';\nimport DidAddress from '@arcblock/did-connect/lib/Address';\nimport EditIcon from '@arcblock/icons/lib/EditIcon';\nimport DeleteIcon from '@arcblock/icons/lib/DeleteIcon';\n\nimport { withPermission } from '../../permission';\nimport { useNodeContext } from '../../../contexts/node';\nimport { useTeamContext } from '../../../contexts/team';\nimport { sleep } from '../../../libs/util';\nimport Toast from '../../toast';\nimport Confirm from '../../confirm';\nimport ListHeader from '../styles/list-header';\nimport SearchInput from '../search-input';\nimport TrustedIssuer from './trusted-issuer';\n\nfunction TrustedIssuers({ onCancel, hasPermission }) {\n const { api } = useNodeContext();\n const { teamDid, trustedPassports } = useTeamContext();\n const { t } = useLocaleContext();\n const [delConfirm, setDelConfirm] = useState(null);\n const [loading, setLoading] = useState(false);\n const [trustedIssuer, setTrustedIssuer] = useState(false);\n const [search, setSearch] = useState('');\n\n const deleteTrustedIssuer = async did => {\n if (loading) {\n return;\n }\n\n const index = trustedPassports.findIndex(x => x.issuerDid === did);\n\n if (index === -1) {\n // should not be here\n Toast.error('Cannot find passports');\n }\n\n const trustedList = [...trustedPassports];\n trustedList.splice(index, 1);\n\n try {\n setLoading(true);\n await api.configTrustedPassports({ input: { teamDid, trustedPassports: trustedList } });\n await sleep(800);\n setLoading(false);\n Toast.success(t('common.saveSuccess'));\n setDelConfirm(false);\n } catch (err) {\n setLoading(false);\n Toast.error(err.message);\n }\n };\n\n const filteredIssuers = trustedPassports.filter(\n x => !search || x.issuerDid.toLowerCase().includes(search.toLowerCase())\n );\n\n return (\n <Dialog\n title={t('team.passport.trustedIssuers')}\n open\n onClose={onCancel}\n fullWidth\n PaperProps={{ style: { minHeight: '80vh' } }}>\n <Div>\n <div className=\"dialog-content\">\n <div className=\"dialog-h1\">{t('team.passport.trustedPassportIssuers')}</div>\n\n <Box component={ListHeader} mt={3}>\n <div className=\"left\">\n <SearchInput\n placeholder={t('team.passport.searchIssuerDid')}\n value={search}\n onChange={e => setSearch(e.target.value)}\n />\n </div>\n <div className=\"right\">\n {hasPermission && (\n <Button\n variant=\"contained\"\n rounded\n color=\"primary\"\n data-cy=\"add-trusted-issuer\"\n onClick={() => setTrustedIssuer({ mode: 'add' })}>\n <AddIcon style={{ fontSize: 16, marginRight: 4 }} />\n {t('team.add')}\n </Button>\n )}\n </div>\n </Box>\n\n <div className=\"list\">\n {filteredIssuers.map(x => (\n <Box display=\"flex\" alignItems=\"center\" justifyContent=\"space-between\" mt=\"20px\">\n <Box flexShrink={0}>\n <DidAddress copyable={false}>\n <span style={{ fontSize: 16 }}>{x.issuerDid}</span>\n </DidAddress>\n </Box>\n <Box color=\"gray\" ml=\"28px\" flexGrow={1}>\n {x.mappings && x.mappings.length\n ? `${x.mappings.length} ${t('team.passport.mappingRule')}`\n : t('team.passport.defaultRule')}\n </Box>\n <Box flexShrink={0} display=\"flex\" alignItems=\"center\">\n <IconButton\n onClick={() => setTrustedIssuer({ mode: 'update', data: cloneDeep(x) })}\n data-cy=\"edit-mapping-rule\">\n <EditIcon />\n </IconButton>\n <IconButton\n data-cy=\"delete-mapping-rule\"\n onClick={() =>\n setDelConfirm({\n title: t('common.delete'),\n description: t('common.delConfirmDescription'),\n confirm: t('common.delConfirm'),\n cancel: t('common.cancel'),\n onConfirm: () => deleteTrustedIssuer(x.issuerDid),\n onCancel: () => {\n setLoading(false);\n setDelConfirm(null);\n },\n })\n }>\n <DeleteIcon />\n </IconButton>\n </Box>\n </Box>\n ))}\n {!trustedPassports.length && <Empty>{t('common.empty')}</Empty>}\n </div>\n </div>\n </Div>\n\n {trustedIssuer && (\n <TrustedIssuer\n mode={trustedIssuer.mode}\n data={trustedIssuer.data}\n trustedPassports={cloneDeep(trustedPassports)}\n onCancel={() => setTrustedIssuer(null)}\n onSuccess={() => {\n setTrustedIssuer(null);\n }}\n />\n )}\n\n {delConfirm && (\n <Confirm\n title={delConfirm.title}\n description={delConfirm.description}\n confirm={delConfirm.confirm}\n cancel={delConfirm.cancel}\n params={delConfirm.params}\n onConfirm={delConfirm.onConfirm}\n onCancel={delConfirm.onCancel}\n />\n )}\n </Dialog>\n );\n}\n\nTrustedIssuers.propTypes = {\n onCancel: PropTypes.func.isRequired,\n hasPermission: PropTypes.bool,\n};\n\nTrustedIssuers.defaultProps = {\n hasPermission: false,\n};\n\nexport default withPermission(TrustedIssuers, 'mutate_team');\n\nconst Div = styled.div`\n .list {\n .MuiIconButton-root {\n svg {\n fill: #bfbfbf;\n }\n }\n }\n`;\n","import React, { useContext, useState } from 'react';\nimport styled from 'styled-components';\n\nimport AddIcon from '@material-ui/icons/Add';\nimport Box from '@material-ui/core/Box';\nimport MenuItem from '@material-ui/core/MenuItem';\n\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport EditIcon from '@arcblock/icons/lib/EditIcon';\nimport LockIcon from '@arcblock/icons/lib/LockIcon';\nimport ExternalIssuerIcon from '@arcblock/icons/lib/ExternalIssuerIcon';\n\nimport { useNodeContext } from '../../../contexts/node';\nimport { useTeamContext } from '../../../contexts/team';\nimport { sleep, createPassportSvg, isProtectedRole } from '../../../libs/util';\nimport Permission from '../../permission';\nimport Toast from '../../toast';\nimport ButtonGroupWithActions from '../../button-group-with-actions';\nimport SearchInput from '../search-input';\nimport ListHeader from '../styles/list-header';\nimport Detail from './detail';\nimport MutateRole from './mutate-role';\nimport TrustedIssuers from './trusted-issuers';\n\nexport default function PassportList() {\n const { t } = useContext(LocaleContext);\n const { api, info: nodeInfo } = useNodeContext();\n const { roles, teamDid, teamName, refresh: refreshTeam, enablePassportIssuance } = useTeamContext();\n\n const [showCreate, setShowCreate] = useState(false);\n const [updateForm, setUpdateForm] = useState(false);\n const [showTrustedIssuers, setShowTrustedIssuers] = useState(null);\n const [search, setSearch] = useState('');\n const [loading, setLoading] = useState(false);\n\n const toggleShowIssue = async () => {\n if (loading) {\n return;\n }\n setLoading(true);\n try {\n await api.configPassportIssuance({ input: { teamDid, enable: !enablePassportIssuance } });\n refreshTeam();\n await sleep(800);\n Toast.success(t('common.configSuccess'));\n setLoading(false);\n } catch (error) {\n Toast.error(error.message);\n setLoading(false);\n }\n };\n\n const filteredRoles = roles.filter(x => !search || x.title.includes(search) || x.name.includes(search));\n\n return (\n <Div>\n <ListHeader>\n <div className=\"left\">\n <SearchInput\n placeholder={t('team.passport.search')}\n value={search}\n onChange={e => setSearch(e.target.value)}\n />\n </div>\n <div className=\"right\">\n <Permission permission=\"mutate_team\">\n <ButtonGroupWithActions\n actions={[\n <MenuItem\n data-cy=\"config-show-issue-passport\"\n onClick={() => {\n toggleShowIssue();\n }}>\n <Box display=\"flex\" alignItems=\"center\">\n {loading && <Spinner size={[16, 10]} style={{ marginRight: 8 }} />}\n <Box>\n {enablePassportIssuance ? t('team.passport.disableIssuance') : t('team.passport.enableIssuance')}\n <Box fontSize={12} color=\"#888\">\n {enablePassportIssuance\n ? t('team.passport.disableIssuanceTip')\n : t('team.passport.enableIssuanceTip')}\n </Box>\n </Box>\n </Box>\n </MenuItem>,\n ]}>\n <Button\n style={{ borderRight: 0 }}\n variant=\"outlined\"\n color=\"primary\"\n data-cy=\"config-trusted-issuers\"\n onClick={() => {\n setShowTrustedIssuers(true);\n }}>\n <ExternalIssuerIcon style={{ fontSize: 16, marginRight: 4 }} />\n {t('team.passport.trustedPassportIssuers')}\n </Button>\n </ButtonGroupWithActions>\n\n {nodeInfo.did !== teamDid && (\n <Button\n style={{ marginLeft: 16 }}\n variant=\"contained\"\n rounded\n edge=\"end\"\n color=\"primary\"\n data-cy=\"create-role\"\n onClick={() => setShowCreate(true)}>\n <AddIcon style={{ fontSize: 16, marginRight: 4 }} />\n {t('team.add')}\n </Button>\n )}\n </Permission>\n </div>\n </ListHeader>\n\n <Box mt={3} />\n\n <Box className=\"list\">\n {filteredRoles.map(role => (\n <Box\n data-cy={`passport-${role.name}`}\n className=\"item\"\n display=\"flex\"\n alignItems=\"center\"\n onClick={() => setUpdateForm(role)}>\n <Box display=\"flex\" alignItems=\"center\">\n <img\n style={{ width: 120 }}\n alt=\"\"\n src={createPassportSvg({\n issuer: teamName,\n title: role.title,\n })}\n />\n <Box ml={3} className=\"title\">\n {role.title}\n </Box>\n </Box>\n\n <Box className=\"description\">{role.description}</Box>\n\n <Permission permission=\"mutate_team\">\n <div className=\"action\">{isProtectedRole(role.name) ? <LockIcon /> : <EditIcon />}</div>\n </Permission>\n </Box>\n ))}\n </Box>\n\n {showCreate && (\n <MutateRole\n teamDid={teamDid}\n onCancel={() => setShowCreate(false)}\n onSuccess={() => {\n setShowCreate(false);\n refreshTeam();\n }}\n />\n )}\n\n {updateForm && (\n <Detail\n onCancel={() => setUpdateForm(null)}\n onSuccess={() => {\n setUpdateForm(null);\n refreshTeam();\n }}\n onDelete={() => {\n setUpdateForm(null);\n refreshTeam();\n }}\n mode=\"update\"\n roleName={updateForm.name}\n item={updateForm}\n />\n )}\n\n {/* showTrustedIssuers */}\n {showTrustedIssuers && <TrustedIssuers onCancel={() => setShowTrustedIssuers(false)} />}\n </Div>\n );\n}\n\nconst Div = styled.div`\n .list {\n .item {\n padding: 12px;\n margin: 12px -12px;\n cursor: pointer;\n transition: box-shadow 0.4s;\n &:hover {\n box-shadow: 0 0 10px 4px rgba(0, 0, 0, 0.1);\n }\n }\n\n .title {\n font-weight: 500;\n font-size: 18px;\n width: 80px;\n line-height: 21px;\n color: #222222;\n }\n\n .description {\n flex: 1;\n margin-left: 64px;\n color: #999999;\n }\n\n .action {\n color: #bfbfbf;\n fill: #bfbfbf;\n }\n }\n`;\n\nPassportList.propTypes = {};\n\nPassportList.defaultProps = {};\n","import * as React from 'react';\nimport { createSvgIcon } from '@material-ui/core/utils';\n/**\r\n * @ignore - internal component.\r\n */\n\nexport default createSvgIcon( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z\"\n}), 'FirstPage');","import * as React from 'react';\nimport { createSvgIcon } from '@material-ui/core/utils';\n/**\r\n * @ignore - internal component.\r\n */\n\nexport default createSvgIcon( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.59 7.41L10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z\"\n}), 'LastPage');","import * as React from 'react';\nimport { createSvgIcon } from '@material-ui/core/utils';\n/**\r\n * @ignore - internal component.\r\n */\n\nexport default createSvgIcon( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"\n}), 'NavigateBefore');","import * as React from 'react';\nimport { createSvgIcon } from '@material-ui/core/utils';\n/**\r\n * @ignore - internal component.\r\n */\n\nexport default createSvgIcon( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"\n}), 'NavigateNext');","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { alpha, useTheme, withStyles } from '@material-ui/core/styles';\nimport ButtonBase from '@material-ui/core/ButtonBase';\nimport FirstPageIcon from '../internal/svg-icons/FirstPage';\nimport LastPageIcon from '../internal/svg-icons/LastPage';\nimport NavigateBeforeIcon from '../internal/svg-icons/NavigateBefore';\nimport NavigateNextIcon from '../internal/svg-icons/NavigateNext';\nimport { capitalize } from '@material-ui/core/utils';\nexport var styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: _extends({}, theme.typography.body2, {\n borderRadius: 32 / 2,\n textAlign: 'center',\n boxSizing: 'border-box',\n minWidth: 32,\n height: 32,\n padding: '0 6px',\n margin: '0 3px',\n color: theme.palette.text.primary\n }),\n\n /* Styles applied to the root element if `type=\"page\"`. */\n page: {\n transition: theme.transitions.create(['color', 'background-color'], {\n duration: theme.transitions.duration.short\n }),\n '&:hover': {\n backgroundColor: theme.palette.action.hover,\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n },\n '&$focusVisible': {\n backgroundColor: theme.palette.action.focus\n },\n '&$selected': {\n backgroundColor: theme.palette.action.selected,\n '&:hover, &$focusVisible': {\n backgroundColor: alpha(theme.palette.action.selected, theme.palette.action.selectedOpacity + theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: theme.palette.action.selected\n }\n },\n '&$disabled': {\n opacity: 1,\n color: theme.palette.action.disabled,\n backgroundColor: theme.palette.action.selected\n }\n },\n '&$disabled': {\n opacity: theme.palette.action.disabledOpacity\n }\n },\n\n /* Styles applied applied to the root element if `size=\"small\"`. */\n sizeSmall: {\n minWidth: 26,\n height: 26,\n borderRadius: 26 / 2,\n margin: '0 1px',\n padding: '0 4px',\n '& $icon': {\n fontSize: theme.typography.pxToRem(18)\n }\n },\n\n /* Styles applied applied to the root element if `size=\"large\"`. */\n sizeLarge: {\n minWidth: 40,\n height: 40,\n borderRadius: 40 / 2,\n padding: '0 10px',\n fontSize: theme.typography.pxToRem(15),\n '& $icon': {\n fontSize: theme.typography.pxToRem(22)\n }\n },\n\n /* Styles applied to the root element if `variant=\"text\"` and `color=\"primary\"`. */\n textPrimary: {\n '&$selected': {\n color: theme.palette.primary.contrastText,\n backgroundColor: theme.palette.primary.main,\n '&:hover, &$focusVisible': {\n backgroundColor: theme.palette.primary.dark,\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: theme.palette.primary.main\n }\n },\n '&$disabled': {\n color: theme.palette.action.disabled\n }\n }\n },\n\n /* Styles applied to the root element if `variant=\"text\"` and `color=\"secondary\"`. */\n textSecondary: {\n '&$selected': {\n color: theme.palette.secondary.contrastText,\n backgroundColor: theme.palette.secondary.main,\n '&:hover, &$focusVisible': {\n backgroundColor: theme.palette.secondary.dark,\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: theme.palette.secondary.main\n }\n },\n '&$disabled': {\n color: theme.palette.action.disabled\n }\n }\n },\n\n /* Styles applied to the root element if `outlined=\"true\"`. */\n outlined: {\n border: \"1px solid \".concat(theme.palette.type === 'light' ? 'rgba(0, 0, 0, 0.23)' : 'rgba(255, 255, 255, 0.23)'),\n '&$selected': {\n '&$disabled': {\n border: \"1px solid \".concat(theme.palette.action.disabledBackground)\n }\n }\n },\n\n /* Styles applied to the root element if `variant=\"outlined\"` and `color=\"primary\"`. */\n outlinedPrimary: {\n '&$selected': {\n color: theme.palette.primary.main,\n border: \"1px solid \".concat(alpha(theme.palette.primary.main, 0.5)),\n backgroundColor: alpha(theme.palette.primary.main, theme.palette.action.activatedOpacity),\n '&:hover, &$focusVisible': {\n backgroundColor: alpha(theme.palette.primary.main, theme.palette.action.activatedOpacity + theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n },\n '&$disabled': {\n color: theme.palette.action.disabled\n }\n }\n },\n\n /* Styles applied to the root element if `variant=\"outlined\"` and `color=\"secondary\"`. */\n outlinedSecondary: {\n '&$selected': {\n color: theme.palette.secondary.main,\n border: \"1px solid \".concat(alpha(theme.palette.secondary.main, 0.5)),\n backgroundColor: alpha(theme.palette.secondary.main, theme.palette.action.activatedOpacity),\n '&:hover, &$focusVisible': {\n backgroundColor: alpha(theme.palette.secondary.main, theme.palette.action.activatedOpacity + theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n },\n '&$disabled': {\n color: theme.palette.action.disabled\n }\n }\n },\n\n /* Styles applied to the root element if `rounded=\"true\"`. */\n rounded: {\n borderRadius: theme.shape.borderRadius\n },\n\n /* Styles applied to the root element if `type=\"start-ellipsis\"` or `type=\"end-ellipsis\"`. */\n ellipsis: {\n height: 'auto',\n '&$disabled': {\n opacity: theme.palette.action.disabledOpacity\n }\n },\n\n /* Pseudo-class applied to the root element if keyboard focused. */\n focusVisible: {},\n\n /* Pseudo-class applied to the root element if `disabled={true}`. */\n disabled: {},\n\n /* Pseudo-class applied to the root element if `selected={true}`. */\n selected: {},\n\n /* Styles applied to the icon element. */\n icon: {\n fontSize: theme.typography.pxToRem(20),\n margin: '0 -8px'\n }\n };\n};\nvar PaginationItem = /*#__PURE__*/React.forwardRef(function PaginationItem(props, ref) {\n var classes = props.classes,\n className = props.className,\n _props$color = props.color,\n color = _props$color === void 0 ? 'standard' : _props$color,\n component = props.component,\n _props$disabled = props.disabled,\n disabled = _props$disabled === void 0 ? false : _props$disabled,\n page = props.page,\n _props$selected = props.selected,\n selected = _props$selected === void 0 ? false : _props$selected,\n _props$shape = props.shape,\n shape = _props$shape === void 0 ? 'round' : _props$shape,\n _props$size = props.size,\n size = _props$size === void 0 ? 'medium' : _props$size,\n _props$type = props.type,\n type = _props$type === void 0 ? 'page' : _props$type,\n _props$variant = props.variant,\n variant = _props$variant === void 0 ? 'text' : _props$variant,\n other = _objectWithoutProperties(props, [\"classes\", \"className\", \"color\", \"component\", \"disabled\", \"page\", \"selected\", \"shape\", \"size\", \"type\", \"variant\"]);\n\n var theme = useTheme();\n var normalizedIcons = theme.direction === 'rtl' ? {\n previous: NavigateNextIcon,\n next: NavigateBeforeIcon,\n last: FirstPageIcon,\n first: LastPageIcon\n } : {\n previous: NavigateBeforeIcon,\n next: NavigateNextIcon,\n first: FirstPageIcon,\n last: LastPageIcon\n };\n var Icon = normalizedIcons[type];\n return type === 'start-ellipsis' || type === 'end-ellipsis' ? /*#__PURE__*/React.createElement(\"div\", {\n ref: ref,\n className: clsx(classes.root, classes.ellipsis, disabled && classes.disabled, size !== 'medium' && classes[\"size\".concat(capitalize(size))])\n }, \"\\u2026\") : /*#__PURE__*/React.createElement(ButtonBase, _extends({\n ref: ref,\n component: component,\n disabled: disabled,\n focusVisibleClassName: classes.focusVisible,\n className: clsx(classes.root, classes.page, classes[variant], classes[shape], className, color !== 'standard' && classes[\"\".concat(variant).concat(capitalize(color))], disabled && classes.disabled, selected && classes.selected, size !== 'medium' && classes[\"size\".concat(capitalize(size))])\n }, other), type === 'page' && page, Icon ? /*#__PURE__*/React.createElement(Icon, {\n className: classes.icon\n }) : null);\n});\nprocess.env.NODE_ENV !== \"production\" ? PaginationItem.propTypes = {\n /**\r\n * @ignore\r\n */\n classes: PropTypes.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: PropTypes.string,\n\n /**\r\n * The active color.\r\n */\n color: PropTypes.oneOf(['standard', 'primary', 'secondary']),\n\n /**\r\n * The component used for the root node.\r\n * Either a string to use a HTML element or a component.\r\n */\n component: PropTypes\n /* @typescript-to-proptypes-ignore */\n .elementType,\n\n /**\r\n * If `true`, the item will be disabled.\r\n */\n disabled: PropTypes.bool,\n\n /**\r\n * The current page number.\r\n */\n page: PropTypes.number,\n\n /**\r\n * If `true` the pagination item is selected.\r\n */\n selected: PropTypes.bool,\n\n /**\r\n * The shape of the pagination item.\r\n */\n shape: PropTypes.oneOf(['round', 'rounded']),\n\n /**\r\n * The size of the pagination item.\r\n */\n size: PropTypes.oneOf(['small', 'medium', 'large']),\n\n /**\r\n * The type of pagination item.\r\n */\n type: PropTypes.oneOf(['page', 'first', 'last', 'next', 'previous', 'start-ellipsis', 'end-ellipsis']),\n\n /**\r\n * The pagination item variant.\r\n */\n variant: PropTypes.oneOf(['text', 'outlined'])\n} : void 0;\nexport default withStyles(styles, {\n name: 'MuiPaginationItem'\n})(PaginationItem);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { withStyles } from '@material-ui/core/styles';\nimport usePagination from './usePagination';\nimport PaginationItem from '../PaginationItem';\nexport var styles = {\n /* Styles applied to the root element. */\n root: {},\n\n /* Styles applied to the ul element. */\n ul: {\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n padding: 0,\n margin: 0,\n listStyle: 'none'\n }\n};\n\nfunction defaultGetAriaLabel(type, page, selected) {\n if (type === 'page') {\n return \"\".concat(selected ? '' : 'Go to ', \"page \").concat(page);\n }\n\n return \"Go to \".concat(type, \" page\");\n}\n\nvar Pagination = /*#__PURE__*/React.forwardRef(function Pagination(props, ref) {\n var boundaryCount = props.boundaryCount,\n classes = props.classes,\n className = props.className,\n _props$color = props.color,\n color = _props$color === void 0 ? 'standard' : _props$color,\n count = props.count,\n defaultPage = props.defaultPage,\n disabled = props.disabled,\n _props$getItemAriaLab = props.getItemAriaLabel,\n getItemAriaLabel = _props$getItemAriaLab === void 0 ? defaultGetAriaLabel : _props$getItemAriaLab,\n hideNextButton = props.hideNextButton,\n hidePrevButton = props.hidePrevButton,\n onChange = props.onChange,\n page = props.page,\n _props$renderItem = props.renderItem,\n renderItem = _props$renderItem === void 0 ? function (item) {\n return /*#__PURE__*/React.createElement(PaginationItem, item);\n } : _props$renderItem,\n _props$shape = props.shape,\n shape = _props$shape === void 0 ? 'round' : _props$shape,\n showFirstButton = props.showFirstButton,\n showLastButton = props.showLastButton,\n siblingCount = props.siblingCount,\n _props$size = props.size,\n size = _props$size === void 0 ? 'medium' : _props$size,\n _props$variant = props.variant,\n variant = _props$variant === void 0 ? 'text' : _props$variant,\n other = _objectWithoutProperties(props, [\"boundaryCount\", \"classes\", \"className\", \"color\", \"count\", \"defaultPage\", \"disabled\", \"getItemAriaLabel\", \"hideNextButton\", \"hidePrevButton\", \"onChange\", \"page\", \"renderItem\", \"shape\", \"showFirstButton\", \"showLastButton\", \"siblingCount\", \"size\", \"variant\"]);\n\n var _usePagination = usePagination(_extends({}, props, {\n componentName: 'Pagination'\n })),\n items = _usePagination.items;\n\n return /*#__PURE__*/React.createElement(\"nav\", _extends({\n \"aria-label\": \"pagination navigation\",\n className: clsx(classes.root, className),\n ref: ref\n }, other), /*#__PURE__*/React.createElement(\"ul\", {\n className: classes.ul\n }, items.map(function (item, index) {\n return /*#__PURE__*/React.createElement(\"li\", {\n key: index\n }, renderItem(_extends({}, item, {\n color: color,\n 'aria-label': getItemAriaLabel(item.type, item.page, item.selected),\n shape: shape,\n size: size,\n variant: variant\n })));\n })));\n}); // @default tags synced with default values from usePagination\n\nprocess.env.NODE_ENV !== \"production\" ? Pagination.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n\n /**\r\n * Number of always visible pages at the beginning and end.\r\n * @default 1\r\n */\n boundaryCount: PropTypes.number,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css) below for more details.\r\n */\n classes: PropTypes.object,\n\n /**\r\n * @ignore\r\n */\n className: PropTypes.string,\n\n /**\r\n * The active color.\r\n */\n color: PropTypes.oneOf(['primary', 'secondary', 'standard']),\n\n /**\r\n * The total number of pages.\r\n * @default 1\r\n */\n count: PropTypes.number,\n\n /**\r\n * The page selected by default when the component is uncontrolled.\r\n * @default 1\r\n */\n defaultPage: PropTypes.number,\n\n /**\r\n * If `true`, the pagination component will be disabled.\r\n * @default false\r\n */\n disabled: PropTypes.bool,\n\n /**\r\n * Accepts a function which returns a string value that provides a user-friendly name for the current page.\r\n *\r\n * For localization purposes, you can use the provided [translations](/guides/localization/).\r\n *\r\n * @param {string} type The link or button type to format ('page' | 'first' | 'last' | 'next' | 'previous'). Defaults to 'page'.\r\n * @param {number} page The page number to format.\r\n * @param {bool} selected If true, the current page is selected.\r\n * @returns {string}\r\n */\n getItemAriaLabel: PropTypes.func,\n\n /**\r\n * If `true`, hide the next-page button.\r\n * @default false\r\n */\n hideNextButton: PropTypes.bool,\n\n /**\r\n * If `true`, hide the previous-page button.\r\n * @default false\r\n */\n hidePrevButton: PropTypes.bool,\n\n /**\r\n * Callback fired when the page is changed.\r\n *\r\n * @param {object} event The event source of the callback.\r\n * @param {number} page The page selected.\r\n */\n onChange: PropTypes.func,\n\n /**\r\n * The current page.\r\n */\n page: PropTypes.number,\n\n /**\r\n * Render the item.\r\n *\r\n * @param {PaginationRenderItemParams} params The props to spread on a PaginationItem.\r\n * @returns {ReactNode}\r\n */\n renderItem: PropTypes.func,\n\n /**\r\n * The shape of the pagination items.\r\n */\n shape: PropTypes.oneOf(['round', 'rounded']),\n\n /**\r\n * If `true`, show the first-page button.\r\n * @default false\r\n */\n showFirstButton: PropTypes.bool,\n\n /**\r\n * If `true`, show the last-page button.\r\n * @default false\r\n */\n showLastButton: PropTypes.bool,\n\n /**\r\n * Number of always visible pages before and after the current page.\r\n * @default 1\r\n */\n siblingCount: PropTypes.number,\n\n /**\r\n * The size of the pagination component.\r\n */\n size: PropTypes.oneOf(['large', 'medium', 'small']),\n\n /**\r\n * The variant to use.\r\n */\n variant: PropTypes.oneOf(['outlined', 'text'])\n} : void 0;\nexport default withStyles(styles, {\n name: 'MuiPagination'\n})(Pagination);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport { useControlled } from '@material-ui/core/utils';\nexport default function usePagination() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n // keep default values in sync with @default tags in Pagination.propTypes\n var _props$boundaryCount = props.boundaryCount,\n boundaryCount = _props$boundaryCount === void 0 ? 1 : _props$boundaryCount,\n _props$componentName = props.componentName,\n componentName = _props$componentName === void 0 ? 'usePagination' : _props$componentName,\n _props$count = props.count,\n count = _props$count === void 0 ? 1 : _props$count,\n _props$defaultPage = props.defaultPage,\n defaultPage = _props$defaultPage === void 0 ? 1 : _props$defaultPage,\n _props$disabled = props.disabled,\n disabled = _props$disabled === void 0 ? false : _props$disabled,\n _props$hideNextButton = props.hideNextButton,\n hideNextButton = _props$hideNextButton === void 0 ? false : _props$hideNextButton,\n _props$hidePrevButton = props.hidePrevButton,\n hidePrevButton = _props$hidePrevButton === void 0 ? false : _props$hidePrevButton,\n handleChange = props.onChange,\n pageProp = props.page,\n _props$showFirstButto = props.showFirstButton,\n showFirstButton = _props$showFirstButto === void 0 ? false : _props$showFirstButto,\n _props$showLastButton = props.showLastButton,\n showLastButton = _props$showLastButton === void 0 ? false : _props$showLastButton,\n _props$siblingCount = props.siblingCount,\n siblingCount = _props$siblingCount === void 0 ? 1 : _props$siblingCount,\n other = _objectWithoutProperties(props, [\"boundaryCount\", \"componentName\", \"count\", \"defaultPage\", \"disabled\", \"hideNextButton\", \"hidePrevButton\", \"onChange\", \"page\", \"showFirstButton\", \"showLastButton\", \"siblingCount\"]);\n\n var _useControlled = useControlled({\n controlled: pageProp,\n default: defaultPage,\n name: componentName,\n state: 'page'\n }),\n _useControlled2 = _slicedToArray(_useControlled, 2),\n page = _useControlled2[0],\n setPageState = _useControlled2[1];\n\n var handleClick = function handleClick(event, value) {\n if (!pageProp) {\n setPageState(value);\n }\n\n if (handleChange) {\n handleChange(event, value);\n }\n }; // https://dev.to/namirsab/comment/2050\n\n\n var range = function range(start, end) {\n var length = end - start + 1;\n return Array.from({\n length: length\n }, function (_, i) {\n return start + i;\n });\n };\n\n var startPages = range(1, Math.min(boundaryCount, count));\n var endPages = range(Math.max(count - boundaryCount + 1, boundaryCount + 1), count);\n var siblingsStart = Math.max(Math.min( // Natural start\n page - siblingCount, // Lower boundary when page is high\n count - boundaryCount - siblingCount * 2 - 1), // Greater than startPages\n boundaryCount + 2);\n var siblingsEnd = Math.min(Math.max( // Natural end\n page + siblingCount, // Upper boundary when page is low\n boundaryCount + siblingCount * 2 + 2), // Less than endPages\n endPages[0] - 2); // Basic list of items to render\n // e.g. itemList = ['first', 'previous', 1, 'ellipsis', 4, 5, 6, 'ellipsis', 10, 'next', 'last']\n\n var itemList = [].concat(_toConsumableArray(showFirstButton ? ['first'] : []), _toConsumableArray(hidePrevButton ? [] : ['previous']), _toConsumableArray(startPages), _toConsumableArray(siblingsStart > boundaryCount + 2 ? ['start-ellipsis'] : boundaryCount + 1 < count - boundaryCount ? [boundaryCount + 1] : []), _toConsumableArray(range(siblingsStart, siblingsEnd)), _toConsumableArray(siblingsEnd < count - boundaryCount - 1 ? ['end-ellipsis'] : count - boundaryCount > boundaryCount ? [count - boundaryCount] : []), _toConsumableArray(endPages), _toConsumableArray(hideNextButton ? [] : ['next']), _toConsumableArray(showLastButton ? ['last'] : [])); // Map the button type to its page number\n\n var buttonPage = function buttonPage(type) {\n switch (type) {\n case 'first':\n return 1;\n\n case 'previous':\n return page - 1;\n\n case 'next':\n return page + 1;\n\n case 'last':\n return count;\n\n default:\n return null;\n }\n }; // Convert the basic item list to PaginationItem props objects\n\n\n var items = itemList.map(function (item) {\n return typeof item === 'number' ? {\n onClick: function onClick(event) {\n handleClick(event, item);\n },\n type: 'page',\n page: item,\n selected: item === page,\n disabled: disabled,\n 'aria-current': item === page ? 'true' : undefined\n } : {\n onClick: function onClick(event) {\n handleClick(event, buttonPage(item));\n },\n type: item,\n page: buttonPage(item),\n selected: false,\n disabled: disabled || item.indexOf('ellipsis') === -1 && (item === 'next' || item === 'last' ? page >= count : page <= 1)\n };\n });\n return _extends({\n items: items\n }, other);\n}","var toString = require('./toString');\n\n/**\n * Converts `string`, as a whole, to upper case just like\n * [String#toUpperCase](https://mdn.io/toUpperCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.toUpper('--foo-bar--');\n * // => '--FOO-BAR--'\n *\n * _.toUpper('fooBar');\n * // => 'FOOBAR'\n *\n * _.toUpper('__foo_bar__');\n * // => '__FOO_BAR__'\n */\nfunction toUpper(value) {\n return toString(value).toUpperCase();\n}\n\nmodule.exports = toUpper;\n","var baseKeys = require('./_baseKeys'),\n getTag = require('./_getTag'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isArrayLike = require('./isArrayLike'),\n isBuffer = require('./isBuffer'),\n isPrototype = require('./_isPrototype'),\n isTypedArray = require('./isTypedArray');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\nmodule.exports = isEmpty;\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21 10.12h-6.78l2.74-2.82c-2.73-2.7-7.15-2.8-9.88-.1-2.73 2.71-2.73 7.08 0 9.79s7.15 2.71 9.88 0C18.32 15.65 19 14.08 19 12.1h2c0 1.98-.88 4.55-2.64 6.29-3.51 3.48-9.21 3.48-12.72 0-3.5-3.47-3.53-9.11-.02-12.58s9.14-3.47 12.65 0L21 3v7.12zM12.5 8v4.25l3.5 2.08-.72 1.21L11 13V8h1.5z\"\n}), 'Update');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 10.99h7c-.53 4.12-3.28 7.79-7 8.94V12H5V6.3l7-3.11v8.8z\"\n}), 'Security');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z\"\n}), 'OpenInNew');\n\nexports.default = _default;","/* eslint-disable react/jsx-one-expression-per-line */\nimport React, { useContext } from 'react';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\nimport filesize from 'filesize';\nimport { useHistory } from 'react-router-dom';\n\nimport Typography from '@material-ui/core/Typography';\nimport Link from '@material-ui/core/Link';\nimport InfoRow from '@arcblock/ux/lib/InfoRow';\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nexport default function BlockletDiskInfo({ blocklet, onChangeBlocklet, ...rest }) {\n const history = useHistory();\n const { t } = useContext(LocaleContext);\n\n if (!blocklet.diskInfo) {\n return <Typography>{t('blocklet.diskInfo.empty')}</Typography>;\n }\n\n const renderDiskInfo = (dir, size, handler) => (\n <Typography>\n {handler ? (\n /* eslint-disable-next-line no-script-url, jsx-a11y/anchor-is-valid */\n <Link style={{ cursor: 'pointer' }} onClick={handler}>\n {dir}\n </Link>\n ) : (\n dir\n )}{' '}\n <strong>{size ? filesize(size) : 'empty'}</strong>\n </Typography>\n );\n\n const env = blocklet.environments.reduce((acc, x) => {\n acc[x.key] = x.value;\n return acc;\n }, {});\n\n const rows = [\n { name: t('blocklet.diskInfo.appDir'), value: renderDiskInfo(env.BLOCKLET_APP_DIR, blocklet.diskInfo.app) },\n { name: t('blocklet.diskInfo.dataDir'), value: renderDiskInfo(env.BLOCKLET_DATA_DIR, blocklet.diskInfo.data) },\n {\n name: t('blocklet.diskInfo.logDir'),\n value: renderDiskInfo(env.BLOCKLET_LOG_DIR, blocklet.diskInfo.log, () => {\n history.push(`/logs/blocklet-${blocklet.meta.did}`);\n }),\n },\n { name: t('blocklet.diskInfo.cacheDir'), value: renderDiskInfo(env.BLOCKLET_CACHE_DIR, blocklet.diskInfo.cache) },\n ];\n\n return (\n <Div component=\"div\" {...rest}>\n {rows.map(row => (\n <InfoRow valueComponent=\"div\" key={row.name} nameWidth={120} name={row.name}>\n {row.value}\n </InfoRow>\n ))}\n </Div>\n );\n}\n\nBlockletDiskInfo.propTypes = {\n blocklet: PropTypes.object.isRequired,\n onChangeBlocklet: PropTypes.func,\n};\n\nBlockletDiskInfo.defaultProps = {\n onChangeBlocklet: () => {},\n};\n\nconst Div = styled(Typography)``;\n","/* eslint-disable react/jsx-one-expression-per-line */\nimport React, { useContext } from 'react';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\nimport filesize from 'filesize';\nimport prettyMs from 'pretty-ms-i18n';\nimport isEmpty from 'lodash/isEmpty';\n\nimport Typography from '@material-ui/core/Typography';\nimport InfoRow from '@arcblock/ux/lib/InfoRow';\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport { formatLocale } from '../../libs/util';\n\nexport default function BlockletRuntimeInfo({ blocklet, onChangeBlocklet, noRunningMessage, ...rest }) {\n const { t, locale } = useContext(LocaleContext);\n\n if (blocklet.status !== 'running') {\n return <Typography>{noRunningMessage || t('blocklet.runtimeInfo.noRunning')}</Typography>;\n }\n\n if (isEmpty(blocklet.runtimeInfo)) {\n return <Typography>{t('common.empty')}</Typography>;\n }\n\n const rows = [\n { name: t('blocklet.runtimeInfo.memoryUsage'), value: filesize(blocklet.runtimeInfo.memoryUsage) },\n { name: t('blocklet.runtimeInfo.cpuUsage'), value: `${blocklet.runtimeInfo.cpuUsage * 100}%` },\n {\n name: t('blocklet.runtimeInfo.uptime'),\n value: prettyMs(Number(blocklet.runtimeInfo.uptime), { locale: formatLocale(locale) }),\n },\n { name: t('blocklet.runtimeInfo.processId'), value: blocklet.runtimeInfo.pid },\n ];\n\n return (\n <Div component=\"div\" {...rest}>\n {rows.map(({ name, value }) => (\n <InfoRow key={name} nameWidth={120} name={name}>\n {value}\n </InfoRow>\n ))}\n </Div>\n );\n}\n\nBlockletRuntimeInfo.propTypes = {\n blocklet: PropTypes.object.isRequired,\n onChangeBlocklet: PropTypes.func,\n noRunningMessage: PropTypes.string,\n};\n\nBlockletRuntimeInfo.defaultProps = {\n onChangeBlocklet: () => {},\n noRunningMessage: '',\n};\n\nconst Div = styled(Typography)``;\n","import React, { useState, useContext } from 'react';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\nimport toUpper from 'lodash/toUpper';\nimport { useSnackbar } from 'notistack';\n\nimport Typography from '@material-ui/core/Typography';\nimport Link from '@material-ui/core/Link';\nimport Dialog from '@material-ui/core/Dialog';\nimport Box from '@material-ui/core/Box';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport ArrowForwardIcon from '@material-ui/icons/ArrowForward';\nimport UpdateIcon from '@material-ui/icons/Update';\nimport Grid from '@material-ui/core/Grid';\nimport MaterialTable from 'material-table';\nimport Tag from '@arcblock/ux/lib/Tag';\nimport InfoRow from '@arcblock/ux/lib/InfoRow';\nimport DidAddress from '@arcblock/did-connect/lib/Address';\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\n\nimport { useNodeContext } from '../../contexts/node';\nimport BlockletStatus from './status';\nimport { formatToDatetime, formatPerson, parseRegistryUrl, isInProgress, formatError } from '../../libs/util';\nimport BlockletVersion from './version';\nimport DiskInfo from './disk-info';\nimport RuntimeInfo from './runtime-info';\nimport TableStyle from '../table';\nimport tableIcons from '../table-icons';\nimport Permission from '../permission';\n\nconst tagBorderStyle = { borderRadius: 5, border: '1px solid #ccc' };\n\nconst getEngineRows = (engine, t) => {\n if (!engine) {\n return [];\n }\n return [\n {\n name: t('common.name'),\n value: engine.displayName,\n },\n {\n name: t('common.description'),\n value: engine.description,\n },\n {\n name: t('common.version'),\n value: <Tag>{engine.version}</Tag>,\n },\n ];\n};\n\nexport default function BlockletOverview({ blocklet, onChangeBlocklet, ...rest }) {\n const { enqueueSnackbar } = useSnackbar();\n const { t } = useContext(LocaleContext);\n const { api } = useNodeContext();\n const [componentInfo, setComponentInfo] = useState();\n const [loading, setLoading] = useState(false);\n const [updateConfirm, setUpdateConfirm] = useState(null);\n\n const { value: appDid } = (blocklet.environments || []).find(x => x.key === 'BLOCKLET_APP_ID') || {};\n\n const infoRows = [\n { name: t('blocklet.appDid'), value: <DidAddress>{appDid}</DidAddress> },\n { name: t('common.name'), value: blocklet.meta.title || blocklet.meta.name },\n { name: t('common.status'), value: <BlockletStatus status={blocklet.status} /> },\n {\n name: t('common.version'),\n value: <BlockletVersion blocklet={blocklet} />,\n },\n {\n name: t('common.group'),\n value: (\n <Tag type=\"success\" style={tagBorderStyle}>\n {blocklet.meta.group}\n </Tag>\n ),\n },\n { name: t('common.author'), value: formatPerson(blocklet.meta.author) },\n blocklet.meta.repository && blocklet.meta.repository.url\n ? {\n name: t('common.repository'),\n value: (\n <Link style={{ cursor: 'pointer' }} href={parseRegistryUrl(blocklet.meta.repository.url)} target=\"_blank\">\n {parseRegistryUrl(blocklet.meta.repository.url)}\n </Link>\n ),\n }\n : null,\n { name: t('blocklet.installedAt'), value: formatToDatetime(blocklet.installedAt) },\n blocklet.status === 'running'\n ? { name: t('blocklet.startedAt'), value: formatToDatetime(blocklet.startedAt) }\n : null,\n blocklet.status !== 'running'\n ? { name: t('blocklet.stoppedAt'), value: formatToDatetime(blocklet.stoppedAt) }\n : null,\n {\n name: t('blocklet.overview.source'),\n value: (\n <Tag type=\"success\" style={tagBorderStyle}>\n {toUpper(blocklet.source)}\n </Tag>\n ),\n },\n { name: t('blocklet.overview.deployedFrom'), value: blocklet.deployedFrom || '-' },\n { name: t('common.did'), value: <DidAddress>{blocklet.meta.did}</DidAddress> },\n ].filter(Boolean);\n\n const engineRows = getEngineRows(blocklet.engine, t);\n\n const components = [...blocklet.children] || [];\n if (components.length && blocklet.meta.group !== 'gateway') {\n // add root blocklet to table list\n components.unshift(blocklet);\n }\n\n const renderRows = rows =>\n rows.map(row => {\n if (row.name === t('common.did') || row.name === t('blocklet.appDid')) {\n return (\n <InfoRow valueComponent=\"div\" key={row.name} nameWidth={120} name={row.name} nameFormatter={() => row.name}>\n {row.value}\n </InfoRow>\n );\n }\n\n return (\n <InfoRow valueComponent=\"div\" key={row.name} nameWidth={120} name={row.name}>\n {row.value}\n </InfoRow>\n );\n });\n\n const componentRows = componentInfo\n ? [\n { name: t('common.name'), value: componentInfo.meta.title || componentInfo.meta.name },\n {\n name: t('common.version'),\n value: <BlockletVersion blocklet={componentInfo} checkUpgrade={false} />,\n },\n {\n name: t('common.group'),\n value: (\n <Tag type=\"success\" style={tagBorderStyle}>\n {componentInfo.meta.group}\n </Tag>\n ),\n },\n { name: t('common.did'), value: <DidAddress>{componentInfo.meta.did}</DidAddress> },\n { name: t('common.author'), value: formatPerson(componentInfo.meta.author) },\n componentInfo.meta.repository && componentInfo.meta.repository.url\n ? {\n name: t('common.repository'),\n value: (\n <Link\n style={{ cursor: 'pointer' }}\n href={parseRegistryUrl(componentInfo.meta.repository.url)}\n target=\"_blank\">\n {parseRegistryUrl(componentInfo.meta.repository.url)}\n </Link>\n ),\n }\n : null,\n ].filter(Boolean)\n : [];\n\n const checkForUpdates = () => {\n if (loading) {\n return;\n }\n setLoading(true);\n api\n .checkChildBlockletsForUpdates({ input: { did: blocklet.meta.did } })\n .then(res => {\n setLoading(false);\n const { updateId, updateList } = res.preUpdateInfo;\n if (!res.preUpdateInfo.updateId) {\n enqueueSnackbar(t('blocklet.component.noUpdate'), {\n autoHideDuration: 2000,\n });\n return;\n }\n const list = updateList.map(({ title, name, version: newVersion }) => ({\n name: title || name,\n version: (blocklet.children || []).find(x => x.meta.name === name).meta.version,\n newVersion,\n }));\n\n setUpdateConfirm({\n updateId,\n list,\n });\n })\n .catch(err => {\n setLoading(false);\n enqueueSnackbar(formatError(err), {\n autoHideDuration: 4000,\n variant: 'error',\n });\n });\n };\n\n const onConfirmUpdate = () => {\n if (loading) {\n return;\n }\n setLoading(true);\n api\n .updateChildBlocklets({ input: { updateId: updateConfirm.updateId } })\n .then(() => {\n setLoading(false);\n setUpdateConfirm(null);\n })\n .catch(err => {\n setLoading(false);\n enqueueSnackbar(formatError(err), {\n autoHideDuration: 4000,\n variant: 'error',\n });\n });\n };\n\n return (\n <Div component=\"div\" {...rest}>\n <div className=\"title\">\n <span>{t('common.basicInfo')}</span>\n </div>\n <div className=\"basicInfo\">{renderRows(infoRows)}</div>\n {!components.length && (\n <>\n <div className=\"title\">{t('common.runtimeInfo')}</div>\n <RuntimeInfo blocklet={blocklet} />\n\n <div className=\"title\">{t('common.engine')}</div>\n {engineRows.map(({ name, value }) => (\n <InfoRow key={name} nameWidth={120} name={name}>\n {value}\n </InfoRow>\n ))}\n </>\n )}\n <div className=\"title\">{t('common.dataStorage')}</div>\n <DiskInfo blocklet={blocklet} />\n {!!components.length && (\n <>\n <div className=\"title\">\n {t('common.components')}\n <Permission permission=\"mutate_blocklet\">\n <Button\n disabled={loading || isInProgress(blocklet.status)}\n color=\"secondary\"\n onClick={() => {\n checkForUpdates();\n }}>\n <Box mr={0.5} display=\"flex\">\n {loading ? <Spinner size={[16, 10]} /> : <UpdateIcon style={{ fontSize: '1em' }} />}\n </Box>\n {t('blocklet.component.checkUpdateTitle')}\n </Button>\n </Permission>\n </div>\n <TableStyle className=\"blocklet-list\">\n <MaterialTable\n title={t('blocklet.index.tableTitle')}\n data={components}\n icons={{ ...tableIcons }}\n columns={[\n {\n title: `Blocklet ${t('common.name')}`,\n field: 'meta.title',\n width: 200,\n render: d => (\n <Button color=\"secondary\" variant=\"text\" onClick={() => setComponentInfo(d)}>\n {d.meta.title || d.meta.name}\n </Button>\n ),\n },\n {\n title: t('common.version'),\n field: 'meta.version',\n width: 120,\n render: d => <BlockletVersion blocklet={d} checkUpgrade={false} />,\n },\n {\n title: t('common.runtimeInfo'),\n field: 'runtimeInfo.pid',\n sorting: false,\n render: d => <RuntimeInfo blocklet={d} noRunningMessage={t('--')} />,\n },\n {\n title: t('common.engine'),\n render: d =>\n getEngineRows(d.engine, t).map(({ name, value }) => (\n <InfoRow style={{ marginBottom: 4 }} key={name} nameWidth={120} name={name}>\n {value}\n </InfoRow>\n )),\n },\n ]}\n />\n </TableStyle>\n </>\n )}\n {!!componentInfo && (\n <Dialog\n open\n onClose={() => {\n setComponentInfo(null);\n }}>\n <Box paddingY={1.5}>\n <DialogTitle>{t('common.componentBasicInfo')}</DialogTitle>\n <DialogContent>{renderRows(componentRows)}</DialogContent>\n </Box>\n </Dialog>\n )}\n {!!updateConfirm && (\n <Dialog open fullWidth>\n <Box paddingY={1.5}>\n <DialogTitle>{t('blocklet.component.updateTitle')}</DialogTitle>\n <Box component={DialogContent} py={4} ml={4}>\n {updateConfirm.list.map(x => (\n <Box fontSize=\"h6.fontSize\" component={Grid} container spacing={3}>\n <Grid item xs={5}>\n {x.name}\n </Grid>\n <Grid item xs={2}>\n {x.version}\n </Grid>\n <Grid item xs={1}>\n <ArrowForwardIcon style={{ fontSize: '0.9em' }} />\n </Grid>\n <Grid item xs={2}>\n <Box color=\"secondary.main\">{x.newVersion}</Box>\n </Grid>\n </Box>\n ))}\n </Box>\n <DialogActions style={{ padding: '8px 24px 24px' }}>\n <Button\n onClick={() => {\n setUpdateConfirm(null);\n }}\n rounded\n size=\"small\">\n {t('common.cancel')}\n </Button>\n <Button\n onClick={e => {\n e.stopPropagation();\n onConfirmUpdate();\n }}\n color=\"primary\"\n size=\"small\"\n disabled={loading}\n variant=\"contained\"\n autoFocus\n rounded>\n {loading && <Spinner size={[16, 10]} />}\n {t('common.update')}\n </Button>\n </DialogActions>\n </Box>\n </Dialog>\n )}\n </Div>\n );\n}\n\nBlockletOverview.propTypes = {\n blocklet: PropTypes.object.isRequired,\n onChangeBlocklet: PropTypes.func.isRequired,\n};\n\nconst Div = styled(Typography)`\n .title {\n font-size: 1.2rem;\n font-weight: bolder;\n margin-top: ${props => props.theme.spacing(5)}px;\n margin-bottom: ${props => props.theme.spacing(3)}px;\n }\n`;\n","/* eslint-disable react/jsx-one-expression-per-line */\nimport React, { useContext } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport MaterialTable from 'material-table';\n\nimport TableStyle from '../table';\nimport tableIcons from '../table-icons';\nimport { getBlockletServices } from '../../libs/util';\n\nexport default function BlockletService({ blocklet, ...rest }) {\n const { t } = useContext(LocaleContext);\n const services = getBlockletServices(blocklet);\n\n if (services.length === 0) {\n return <div>{t('blocklet.noService')}</div>;\n }\n\n const columns = [\n {\n title: t('common.name'),\n field: 'name',\n },\n {\n title: t('common.protocol'),\n field: 'protocol',\n },\n {\n title: t('common.port'),\n field: 'port',\n },\n {\n title: t('blocklet.upstreamPort'),\n field: 'upstreamPort',\n },\n ];\n\n return (\n <TableStyle {...rest}>\n <MaterialTable\n columns={columns}\n icons={{ ...tableIcons }}\n options={{\n sorting: false,\n emptyRowsWhenPaging: false,\n actionsColumnIndex: -1,\n tableLayout: 'auto',\n maxBodyHeight: '100%',\n search: false,\n pageSize: 1000,\n pageSizeOptions: [1000],\n }}\n localization={{\n body: {\n emptyDataSourceMessage: t('blocklet.noService'),\n },\n }}\n data={services}\n />\n </TableStyle>\n );\n}\n\nBlockletService.propTypes = {\n blocklet: PropTypes.object.isRequired,\n};\n","/* eslint-disable react/prop-types */\n/* eslint-disable react/destructuring-assignment */\n/* eslint-disable react/jsx-one-expression-per-line */\nimport React, { useState, useContext, useMemo } from 'react';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\nimport { get } from 'lodash';\n\nimport MaterialTable from 'material-table';\nimport TextField from '@material-ui/core/TextField';\nimport Typography from '@material-ui/core/Typography';\nimport Alert from '@material-ui/lab/Alert';\nimport Box from '@material-ui/core/Box';\nimport Accordion from '@material-ui/core/Accordion';\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport { BLOCKLET_MODES, BLOCKLET_CONFIGURABLE_KEY } from '@blocklet/meta/lib/constants';\nimport { getRequiredMissingConfigs } from '@blocklet/meta/lib/util';\n\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport ClickToCopy from '../click-to-copy';\n\nimport { useNodeContext } from '../../contexts/node';\nimport tableIcons from '../table-icons';\nimport TableStyle from '../table';\nimport blockletIcons from './icons';\nimport Permission from '../permission';\nimport Toast from '../toast';\nimport { formatError, isInstalling, isValidClusterSize } from '../../libs/util';\nimport { useSubscription } from '../../libs/ws';\n\nexport default function BlockletEnvironment({ blocklet, onChangeConfig, onChangeBlocklet, ...rest }) {\n const node = useNodeContext();\n const { t } = useContext(LocaleContext);\n const [cpuCores, setCpuCores] = useState('');\n\n const clusterMode = get(blocklet.meta, 'capabilities.clusterMode', false);\n useSubscription('system.info', res => {\n if (clusterMode) {\n setCpuCores(get(res, 'cpu.cores', ''));\n }\n });\n\n const onConfigChanged = newBlocklet => onChangeConfig(newBlocklet);\n const isDev = useMemo(() => blocklet.mode === BLOCKLET_MODES.DEVELOPMENT, [blocklet.mode]);\n const isConfigEditable = x => x.custom && !BLOCKLET_CONFIGURABLE_KEY[x.key];\n\n if (isInstalling(blocklet.status)) {\n return null;\n }\n\n const onAddConfig = async (data, childDid = '') => {\n if (!data.key.trim() || !data.value.trim()) {\n Toast.error(t('blocklet.config.user.keyValueRequired'));\n return;\n }\n\n if (data.key.startsWith('BLOCKLET_')) {\n Toast.error(t('blocklet.config.user.invalidKey'));\n return;\n }\n\n data.custom = true;\n\n const result = await node.api.configBlocklet({ input: { did: blocklet.meta.did, childDid, configs: [data] } });\n if (result.code === 'ok') {\n onConfigChanged(result.blocklet);\n }\n };\n\n const onEditConfig = async (newData, oldData, childDid = '') => {\n // only required field can't be empty\n if (newData.required && (!newData.key.trim() || !newData.value.trim())) {\n Toast.error(t('blocklet.config.user.keyValueRequired'));\n return;\n }\n\n if (newData.key.startsWith('BLOCKLET_') && !BLOCKLET_CONFIGURABLE_KEY[newData.key]) {\n Toast.error(t('blocklet.config.user.invalidKey'));\n return;\n }\n\n if (newData.key === BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_CLUSTER_SIZE) {\n const errMessage = isValidClusterSize(newData);\n if (errMessage) {\n Toast.error(errMessage);\n return;\n }\n }\n\n const configs = [newData];\n if (newData.key !== oldData.key) {\n configs.push({ key: oldData.key });\n }\n\n try {\n const result = await node.api.configBlocklet({\n input: { did: blocklet.meta.did, childDid, configs },\n });\n if (result.code === 'ok') {\n onConfigChanged(result.blocklet);\n }\n } catch (err) {\n Toast.error(formatError(err));\n }\n };\n\n const onDeleteConfig = async (data, childDid = '') => {\n if (data.required) {\n Toast.error(t('blocklet.config.user.deleteForbidden'));\n return;\n }\n\n const result = await node.api.configBlocklet({\n input: { did: blocklet.meta.did, childDid, configs: [{ key: data.key }] },\n });\n if (result.code === 'ok') {\n onConfigChanged(result.blocklet);\n }\n };\n\n // configs\n const reserved = {};\n const configs = (blocklet.configs || []).filter(x => {\n if (!BLOCKLET_CONFIGURABLE_KEY[x.key]) {\n return true;\n }\n reserved[x.key] = x.value;\n return false;\n });\n\n // configurableEnvs\n const customType = blocklet.environments.find(x => x.key === 'BLOCKLET_WALLET_TYPE');\n const customDelete = blocklet.environments.find(x => x.key === 'BLOCKLET_DELETABLE');\n const configurableEnvs = [\n {\n key: BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_NAME,\n description: t('blocklet.config.blocklet.name'),\n value: blocklet.environments.find(x => x.key === 'BLOCKLET_APP_NAME').value,\n custom: true,\n },\n {\n key: BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_DESCRIPTION,\n description: t('blocklet.config.blocklet.description'),\n value: blocklet.environments.find(x => x.key === 'BLOCKLET_APP_DESCRIPTION').value,\n custom: true,\n },\n {\n key: BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_SK,\n description: t('blocklet.config.blocklet.sk'),\n value: blocklet.environments.find(x => x.key === 'BLOCKLET_APP_SK').value,\n custom: true,\n secure: true,\n },\n {\n key: BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_WALLET_TYPE,\n description: t('blocklet.config.blocklet.walletType'),\n value: customType ? customType.value : 'default',\n custom: true,\n },\n {\n key: BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_DELETABLE,\n description: t('blocklet.config.blocklet.deletable'),\n value: customDelete ? customDelete.value : 'yes',\n custom: true,\n },\n ];\n if (clusterMode) {\n configurableEnvs.push({\n key: BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_CLUSTER_SIZE,\n description: t('blocklet.config.blocklet.clusterSize'),\n value: reserved.BLOCKLET_CLUSTER_SIZE || cpuCores,\n cpuCores,\n custom: true,\n });\n }\n\n const hasBWAConfig = configs.some(x => x.key && x.key.startsWith('BWA_'));\n\n // environments\n const environments = blocklet.environments.filter(x => {\n const isNodeEnv = x.key.startsWith('ABT_NODE_');\n const isUserEnv = !!blocklet.configs.find(c => c.key === x.key);\n const isConfigurableEnv = !!configurableEnvs.find(c => c.key === x.key);\n return [isNodeEnv, isUserEnv, isConfigurableEnv].every(v => v === false);\n });\n\n // components\n const children = blocklet.children.map(child => ({\n meta: child.meta,\n configs: child.configs || [],\n environments: (child.environments || []).filter(x => {\n const isNodeEnv = x.key.startsWith('ABT_NODE_');\n const isUserEnv = !!child.configs.find(config => config.key === x.key);\n return [isNodeEnv, isUserEnv].every(c => c === false);\n }),\n }));\n\n const action = {\n onRowAdd: onAddConfig,\n onRowUpdate: onEditConfig,\n onRowDelete: onDeleteConfig,\n // environment declare in blocklet.yml can't be deleted, only custom env can be deleted\n isDeletable: isConfigEditable,\n };\n\n const genAction = did => ({\n onRowAdd: data => onAddConfig(data, did),\n onRowUpdate: (newData, oldData) => onEditConfig(newData, oldData, did),\n onRowDelete: data => onDeleteConfig(data, did),\n isEditable: data => !configs.some(x => x.key === data.key),\n isDeletable: isConfigEditable,\n });\n\n const appAction = {\n onRowUpdate: onEditConfig,\n };\n\n const onColumns = editable => [\n {\n title: t('common.key'),\n field: 'key',\n initialEditValue: 'Key',\n width: '30%',\n render: d => (\n <ClickToCopy\n value={d.value}\n style={{\n color: d.required && !d.value ? '#ff4436' : '#222222',\n fontWeight: d.required ? 'bold' : 'normal',\n textDecoration: editable && configs.some(x => x.key === d.key) ? 'line-through' : '',\n }}>\n {d.key}\n </ClickToCopy>\n ),\n editComponent: props => {\n const { value, rowData, onChange } = props;\n return (\n <EditDiv>\n <TextField\n fullWidth\n disabled={isConfigEditable(rowData) === false}\n value={value}\n onChange={e => onChange(e.target.value)}\n variant=\"outlined\"\n label=\"Key\"\n placeholder={t('blocklet.config.user.configurationKey')}\n margin=\"dense\"\n autoFocus\n />\n </EditDiv>\n );\n },\n },\n {\n title: t('common.value'),\n field: 'value',\n initialEditValue: 'Value',\n width: 'calc((100% - (96px + 30%)) / 1)',\n render: d => {\n if (d.secure) {\n return '******';\n }\n\n if (!d.value) {\n return null;\n }\n\n return (\n <ClickToCopy\n style={{\n textDecoration: editable && configs.some(x => x.key === d.key) ? 'line-through' : '',\n }}\n value={d.value}>\n {d.value}\n </ClickToCopy>\n );\n },\n // eslint-disable-next-line no-shadow\n editComponent: props => {\n const { value, rowData, onChange } = props;\n\n return (\n <EditDiv>\n <TextField\n fullWidth\n value={value === '__encrypted__' ? '' : value}\n onChange={e => onChange(e.target.value)}\n variant=\"outlined\"\n label={t('common.value')}\n placeholder={t('blocklet.config.user.configurationValue')}\n margin=\"dense\"\n autoFocus\n />\n {rowData.description && <div style={{ marginLeft: 12 }}>{rowData.description}</div>}\n </EditDiv>\n );\n },\n },\n ];\n\n const missingRequiredConfigs = getRequiredMissingConfigs(blocklet);\n\n return (\n <Div component=\"div\" {...rest}>\n {!!missingRequiredConfigs.length && <Alert severity=\"error\">{t('blocklet.config.user.missingRequired')}</Alert>}\n {hasBWAConfig && <Alert severity=\"info\">{t('blocklet.config.user.tip')}</Alert>}\n <Permission permission=\"mutate_blocklet\">\n {hasPermission => (\n <TableStyle\n className={isDev ? 'readonly-block config-table' : 'config-table'}\n data-disabled-text={t('blocklet.config.disabledText')}>\n <MaterialTable\n title={t('blocklet.config.user.title')}\n columns={onColumns()}\n icons={{ ...blockletIcons, ...tableIcons }}\n options={{\n emptyRowsWhenPaging: false,\n actionsColumnIndex: -1,\n tableLayout: 'auto',\n maxBodyHeight: '100%',\n paging: false,\n search: false,\n }}\n localization={{\n header: {\n actions: t('common.actions'),\n },\n body: {\n emptyDataSourceMessage: t('common.noData'),\n },\n }}\n data={configs}\n editable={hasPermission ? action : {}}\n />\n </TableStyle>\n )}\n </Permission>\n\n {!!children.length && (\n <Box mb={3} className={isDev ? 'readonly-block' : ''} data-disabled-text={t('blocklet.config.disabledText')}>\n <Box mb={2}>\n <Typography variant=\"h6\" style={{ color: '#404040' }}>\n {t('blocklet.config.component.title')}\n </Typography>\n <Typography variant=\"subtitle1\" color=\"textSecondary\">\n {t('blocklet.config.component.description')}\n </Typography>\n </Box>\n {children.map(child => (\n <Permission permission=\"mutate_blocklet\">\n {hasPermission => (\n <Accordion\n className=\"accordion\"\n defaultExpanded={isDev || missingRequiredConfigs.some(x => x.did === child.meta.did)}>\n <AccordionSummary expandIcon={<ExpandMoreIcon />} aria-controls=\"panel1a-content\" id=\"panel1a-header\">\n <Typography className=\"accordion-title\">{child.meta.title || child.meta.name}</Typography>\n </AccordionSummary>\n <AccordionDetails>\n <TableStyle className=\"config-table\" style={{ width: '100%' }}>\n <MaterialTable\n columns={onColumns(true)}\n icons={{ ...blockletIcons, ...tableIcons }}\n options={{\n emptyRowsWhenPaging: false,\n actionsColumnIndex: -1,\n tableLayout: 'auto',\n maxBodyHeight: '100%',\n paging: false,\n search: false,\n showTitle: false,\n }}\n localization={{\n header: {\n actions: t('common.actions'),\n },\n body: {\n emptyDataSourceMessage: t('common.noData'),\n },\n }}\n data={child.configs}\n editable={hasPermission ? genAction(child.meta.did) : {}}\n />\n </TableStyle>\n </AccordionDetails>\n </Accordion>\n )}\n </Permission>\n ))}\n </Box>\n )}\n\n <Box mb={2}>\n <Typography variant=\"h6\" style={{ color: '#404040' }}>\n {t('blocklet.config.blocklet.title')}\n </Typography>\n </Box>\n {!!configurableEnvs.length && (\n <Permission permission=\"mutate_blocklet\">\n {hasPermission => (\n <TableStyle className=\"config-table hide-header\" style={{ marginBottom: 0 }}>\n <MaterialTable\n columns={onColumns()}\n data={configurableEnvs}\n icons={{ ...blockletIcons, ...tableIcons }}\n options={{\n emptyRowsWhenPaging: false,\n actionsColumnIndex: -1,\n tableLayout: 'auto',\n maxBodyHeight: '100%',\n paging: false,\n search: false,\n showTitle: false,\n }}\n localization={{\n header: {\n actions: t('common.actions'),\n },\n body: {\n emptyDataSourceMessage: t('common.noData'),\n },\n }}\n editable={hasPermission ? appAction : {}}\n />\n </TableStyle>\n )}\n </Permission>\n )}\n <TableStyle className=\"config-table hide-header\">\n <MaterialTable\n columns={onColumns()}\n data={environments}\n icons={{ ...blockletIcons, ...tableIcons }}\n localization={{\n body: {\n emptyDataSourceMessage: t('common.noData'),\n },\n }}\n options={{\n emptyRowsWhenPaging: false,\n actionsColumnIndex: -1,\n paging: false,\n search: false,\n tableLayout: 'auto',\n maxBodyHeight: '100%',\n showTitle: false,\n }}\n />\n </TableStyle>\n <TableStyle className=\"config-table\">\n <MaterialTable\n title={t('blocklet.config.system.title')}\n columns={onColumns()}\n data={node.info.environments}\n icons={{ ...blockletIcons, ...tableIcons }}\n localization={{\n body: {\n emptyDataSourceMessage: t('common.noData'),\n },\n }}\n options={{\n emptyRowsWhenPaging: false,\n actionsColumnIndex: -1,\n paging: false,\n search: false,\n tableLayout: 'auto',\n maxBodyHeight: '100%',\n }}\n />\n </TableStyle>\n </Div>\n );\n}\n\nBlockletEnvironment.propTypes = {\n blocklet: PropTypes.object.isRequired,\n onChangeConfig: PropTypes.func,\n onChangeBlocklet: PropTypes.func,\n};\n\nBlockletEnvironment.defaultProps = {\n onChangeConfig: () => {},\n onChangeBlocklet: () => {},\n};\n\nconst Div = styled(Typography)`\n .readonly-block {\n position: relative;\n &::after {\n content: attr(data-disabled-text);\n position: absolute;\n display: flex;\n align-items: center;\n justify-content: center;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: rgba(230, 230, 230, 0.7);\n font-size: 24px;\n letter-spacing: 2px;\n color: #e33371;\n padding: 20px;\n word-break: break-all;\n word-wrap: break-word;\n z-index: 10;\n }\n }\n .config-table {\n margin-bottom: 24px;\n position: relative;\n .hide-control {\n position: absolute;\n top: 10px;\n left: 200px;\n @media (max-width: ${props => props.theme.breakpoints.values.sm}px) {\n left: 160px;\n }\n }\n\n .MuiToolbar-root {\n display: flex;\n }\n\n .MuiTableRow-head {\n display: none;\n }\n\n &.hide-header {\n .MuiToolbar-root {\n display: none;\n }\n }\n }\n\n .accordion {\n margin-bottom: 16px;\n &:last-of-type {\n margin-bottom: 0;\n }\n padding: 8px 0 8px 0px;\n &.MuiAccordion-root {\n background: transparent;\n box-shadow: none;\n border: 1px solid #ddd;\n border-radius: 4px;\n &::before,\n &::after {\n height: 0;\n }\n .MuiAccordionSummary-root {\n padding-left: 0;\n }\n .accordion-title {\n font-weight: bold;\n padding-left: 16px;\n }\n }\n }\n`;\n\nconst EditDiv = styled.div`\n height: 60px;\n`;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport Alert from '@arcblock/ux/lib/Alert';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nimport Confirm from '../../../confirm';\nimport { useNodeContext } from '../../../../contexts/node';\n\nexport default function DeleteDomainAlias(props) {\n const { t } = useLocaleContext();\n const [loading, setLoading] = useState(false);\n const [confirmSetting, setConfirmSetting] = useState(null);\n const { domainAlias, onAdd, children } = props;\n const { api } = useNodeContext();\n\n const onCancel = () => {\n setLoading(false);\n setConfirmSetting(null);\n };\n\n const onConfirm = async () => {\n setLoading(true);\n try {\n await api.issueLetsEncryptCert({ input: { domain: domainAlias } });\n onAdd();\n } catch (error) {\n console.error(error);\n } finally {\n setLoading(false);\n setConfirmSetting(null);\n }\n };\n\n const setting = {\n title: t('router.domainAlias.genLetsEncryptCert.title'),\n description: (\n <div>\n <Alert type=\"success\">{t('router.domainAlias.genLetsEncryptCert.dnsTip')}</Alert>\n {t('router.domainAlias.genLetsEncryptCert.description')}\n </div>\n ),\n confirm: t('common.confirm'),\n onConfirm,\n onCancel,\n };\n\n const onClick = e => {\n e.stopPropagation();\n setConfirmSetting(setting);\n };\n\n return (\n <>\n {children({ loading, open: onClick })}\n {confirmSetting && (\n <Confirm\n color=\"primary\"\n title={confirmSetting.title}\n description={confirmSetting.description}\n confirm={confirmSetting.confirm}\n params={confirmSetting.params}\n onConfirm={confirmSetting.onConfirm}\n onCancel={confirmSetting.onCancel}\n />\n )}\n </>\n );\n}\n\nDeleteDomainAlias.propTypes = {\n domainAlias: PropTypes.string.isRequired,\n onAdd: PropTypes.func,\n children: PropTypes.any,\n};\n\nDeleteDomainAlias.defaultProps = {\n onAdd: () => {},\n children: null,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport MenuItem from '@material-ui/core/MenuItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport AddIcon from '@material-ui/icons/Add';\n\nimport Actions from '../../actions';\nimport DeleteDomainAlias from '../../router/rule/action/delete-domain-alias';\nimport AddCert from '../../router/rule/action/add-cert';\n\nexport default function DomainActions({ site, domain }) {\n const { t } = useLocaleContext();\n\n return (\n <Actions\n data-cy=\"domain-actions\"\n actions={[\n ({ close }) => (\n <>\n <AddCert domainAlias={domain.value}>\n {({ open }) => (\n <MenuItem\n dense\n key=\"add-cert\"\n onClick={e => {\n close();\n open(e);\n }}\n data-cy=\"action-toggle-block\">\n <ListItemIcon style={{ minWidth: 24, marginRight: 8 }}>\n <AddIcon />\n </ListItemIcon>\n <ListItemText primary={t('router.domainAlias.genLetsEncryptCert.title')} />\n </MenuItem>\n )}\n </AddCert>\n <DeleteDomainAlias id={site.id} domainAlias={domain.value}>\n {({ open }) => (\n <MenuItem\n disabled={domain.isProtected}\n dense\n key=\"remove\"\n onClick={e => {\n close();\n open(e);\n }}\n data-cy=\"action-toggle-block\">\n <ListItemIcon style={{ minWidth: 24, marginRight: 8 }}>\n <DeleteIcon />\n </ListItemIcon>\n <ListItemText primary={t('common.delete')} />\n </MenuItem>\n )}\n </DeleteDomainAlias>\n </>\n ),\n ]}\n />\n );\n}\n\nDomainActions.propTypes = {\n site: PropTypes.object.isRequired,\n domain: PropTypes.object.isRequired,\n};\n\nDomainActions.defaultProps = {};\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport MenuItem from '@material-ui/core/MenuItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport EditIcon from '@material-ui/icons/Edit';\n\nimport Actions from '../../actions';\nimport UpdateRule from '../../router/rule/action/update-rule';\nimport DeleteRule from '../../router/rule/action/delete-rule';\n\nexport default function RuleActions(props) {\n const { t } = useLocaleContext();\n\n return (\n <Actions\n data-cy=\"rule-actions\"\n actions={[\n ({ close }) => (\n <UpdateRule {...props}>\n {({ open: o }) => (\n <MenuItem\n disabled={props.isProtected}\n dense\n key=\"toggle-approval\"\n onClick={e => {\n close();\n o(e);\n }}\n data-cy=\"action-update-rule\">\n <ListItemIcon style={{ minWidth: 24, marginRight: 8 }}>\n <EditIcon />\n </ListItemIcon>\n <ListItemText primary={t('common.update')} />\n </MenuItem>\n )}\n </UpdateRule>\n ),\n ({ close }) => (\n <DeleteRule {...props}>\n {({ open }) => (\n <MenuItem\n disabled={props.isProtected}\n dense\n key=\"toggle-approval\"\n onClick={e => {\n close();\n open(e);\n }}\n data-cy=\"action-toggle-block\">\n <ListItemIcon style={{ minWidth: 24, marginRight: 8 }}>\n <DeleteIcon />\n </ListItemIcon>\n <ListItemText primary={t('common.delete')} />\n </MenuItem>\n )}\n </DeleteRule>\n ),\n ]}\n />\n );\n}\n\nRuleActions.propTypes = {\n isProtected: PropTypes.bool,\n};\n\nRuleActions.defaultProps = {\n isProtected: false,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from 'react-router-dom';\nimport isUrl from 'is-url';\nimport get from 'lodash/get';\nimport { useTheme } from 'styled-components';\n\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Box from '@material-ui/core/Box';\nimport ArrowForwardIcon from '@material-ui/icons/ArrowForward';\nimport ExternalLink from '@material-ui/core/Link';\nimport IconButton from '@material-ui/core/IconButton';\nimport LockIcon from '@arcblock/icons/lib/LockIcon';\nimport { ROUTING_RULE_TYPES, DEFAULT_IP_DNS_DOMAIN_SUFFIX } from '@abtnode/constant';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nimport { useDomainStatusContext } from '../../../contexts/domain-status';\n\nimport Dot from '../../dot';\nimport Permission from '../../permission';\nimport BlockletAvatar from '../avatar';\nimport RuleActions from './rule-actions';\n\nconst RedirectRule = ({ domain, isHttps, toUrl }) => {\n const scheme = isHttps ? 'https' : 'http';\n let tmpToUrl = toUrl;\n if (!isUrl(tmpToUrl)) {\n tmpToUrl = `${scheme}://${domain}${toUrl}`;\n }\n\n return (\n <ExternalLink key={tmpToUrl} href={tmpToUrl} target=\"_blank\" style={{ fontSize: 18 }}>\n {toUrl}\n </ExternalLink>\n );\n};\n\nRedirectRule.propTypes = {\n domain: PropTypes.string.isRequired,\n toUrl: PropTypes.string.isRequired,\n isHttps: PropTypes.bool,\n};\n\nRedirectRule.defaultProps = {\n isHttps: false,\n};\n\nconst getLink = (domain, path) =>\n `${domain.endsWith(DEFAULT_IP_DNS_DOMAIN_SUFFIX) ? 'https' : 'http'}://${domain}${path}`;\n\nexport default function RuleItem(props) {\n const { t } = useLocaleContext();\n const theme = useTheme();\n const { status: domainsStatus } = useDomainStatusContext();\n\n const { name, title, to, interfaces = [], pathPrefix, parent, blocklets, selectableBlocklets } = props;\n\n const domain = get(parent, 'domainAliases[0].value', '');\n\n const domainStatus = domainsStatus[domain] || {};\n\n const internalLink = `/blocklets/${to.did}/access`;\n\n const blocklet = blocklets.find(x => x.meta.did === to.did);\n const isHealthy = blocklet && blocklet.status === 'running';\n const healthyTip = isHealthy ? t('router.healthy.ok') : t('router.healthy.error');\n\n let childName = '';\n const isChild = to.realDid && to.did !== to.realDid;\n if (isChild) {\n const child = (blocklet.children || []).find(x => x.meta.did === to.realDid);\n if (child) {\n childName = child.meta.title || child.meta.name;\n }\n }\n\n return (\n <Box display=\"flex\" mt={1} alignItems=\"center\" justifyContent=\"space-between\" key={name} data-cy=\"rule-item\">\n <Box display=\"flex\" alignItems=\"center\" flexGrow=\"1\">\n <Box>\n {to.type === ROUTING_RULE_TYPES.BLOCKLET ? (\n <Tooltip title={healthyTip}>\n <Dot color={isHealthy ? 'success' : 'error'} />\n </Tooltip>\n ) : (\n <Dot />\n )}\n </Box>\n <a target=\"_blank\" href={getLink(domain, name)} rel=\"noopener noreferrer\">\n <Box ml={2} style={{ color: '#222', fontSize: 18, wordBreak: 'break-all', width: 100 }}>\n {name.replace(/\\/$/, '') || '/'}\n </Box>\n </a>\n <Box mx={3} color=\"#999\">\n <ArrowForwardIcon />\n </Box>\n {to.type === ROUTING_RULE_TYPES.BLOCKLET && (\n <>\n <Link to={internalLink} className=\"arrow-name-right\">\n <Box display=\"flex\" alignItems=\"center\">\n <BlockletAvatar blocklet={blocklet} style={{ marginRight: 8 }} />\n <div style={{ color: '#222', fontSize: 18, minWidth: 150 }}>\n {blocklet ? blocklet.meta.name : title}\n {childName ? ' - ' : ''}\n {childName || ''}\n </div>\n </Box>\n </Link>\n </>\n )}\n {to.type === ROUTING_RULE_TYPES.REDIRECT && (\n <RedirectRule\n prefix={pathPrefix}\n domain={parent.name}\n toUrl={to.url}\n isHttps={domainStatus.isHttps}\n interfaces={interfaces}\n />\n )}\n </Box>\n <Permission permission=\"mutate_router\">\n {!props.isProtected ? (\n <RuleActions {...{ ...props, blocklets: selectableBlocklets }} did={to.did} />\n ) : (\n <IconButton disabled>\n <LockIcon style={{ fill: theme.palette.text.disabled }} />\n </IconButton>\n )}\n </Permission>\n </Box>\n );\n}\n\nRuleItem.propTypes = {\n type: PropTypes.string.isRequired,\n to: PropTypes.object,\n name: PropTypes.string.isRequired,\n title: PropTypes.string,\n id: PropTypes.string,\n items: PropTypes.array,\n parent: PropTypes.object,\n depth: PropTypes.number,\n interfaces: PropTypes.array,\n expand: PropTypes.bool,\n isProtected: PropTypes.bool,\n pathPrefix: PropTypes.string,\n domainAliases: PropTypes.array,\n blocklets: PropTypes.array,\n selectableBlocklets: PropTypes.array,\n};\n\nRuleItem.defaultProps = {\n id: '',\n to: {},\n title: '',\n items: [],\n depth: 0,\n parent: {},\n interfaces: [],\n expand: true,\n isProtected: false,\n pathPrefix: '',\n domainAliases: [],\n blocklets: [],\n selectableBlocklets: [],\n};\n","import React, { useContext } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport styled, { useTheme } from 'styled-components';\n\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Alert from '@material-ui/lab/Alert';\nimport Box from '@material-ui/core/Box';\nimport AddIcon from '@material-ui/icons/Add';\nimport SecurityIcon from '@material-ui/icons/Security';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport IconButton from '@material-ui/core/IconButton';\nimport LockIcon from '@arcblock/icons/lib/LockIcon';\nimport Button from '@arcblock/ux/lib/Button';\nimport Empty from '@arcblock/ux/lib/Empty';\n\nimport { WELLKNOWN_PATH_PREFIX, DEFAULT_IP_DNS_DOMAIN_SUFFIX } from '@abtnode/constant';\n\nimport { useBlockletContext } from '../../contexts/blocklets';\nimport { useRoutingContext } from '../../contexts/routing';\nimport { appendParams } from '../../libs/util';\n\nimport DomainStatus from '../router/rule/domain-status';\nimport AddDomainAlias from '../router/rule/action/add-domain-alias';\nimport AddRule from '../router/rule/action/add-rule';\nimport UpdateDomainSecurity from '../router/rule/action/update-domain-security';\nimport Permission from '../permission';\nimport ButtonGroupWithActions from '../button-group-with-actions';\n\nimport DomainActions from './router/domain-actions';\nimport Rule from './router/rule';\n\nconst findPathPrefix = (site, blocklet) => {\n const rule = site.rules\n .filter(x => !x.name.startsWith(WELLKNOWN_PATH_PREFIX))\n .find(x => x.to.did === blocklet.meta.did);\n\n if (rule) {\n return rule.name;\n }\n\n return '/';\n};\n\nconst getLink = (domain, site, blocklet) => {\n const protocol = (domain.value || '').endsWith(DEFAULT_IP_DNS_DOMAIN_SUFFIX) ? 'https' : 'http';\n const browserPort = Number(window.location.port);\n\n let port = '';\n if (process.env.NODE_ENV === 'production' && browserPort && ![80, 443].includes(browserPort)) {\n port = `:${browserPort}`;\n }\n\n const path = findPathPrefix(site, blocklet);\n return `${protocol}://${domain.value}${port}${path}`;\n};\n\nexport default function Access({ blocklet }) {\n const { t, locale } = useContext(LocaleContext);\n const { siteMap } = useRoutingContext();\n const { data: rawBlocklets } = useBlockletContext();\n const history = useHistory();\n const theme = useTheme();\n\n const { did } = blocklet.meta;\n\n const blocklets = rawBlocklets.map(x => ({\n meta: {\n did: x.meta.did,\n name: x.meta.title || x.meta.name,\n version: x.meta.version,\n interfaces: x.meta.interfaces,\n logo: x.meta.logo,\n },\n port: x.port,\n ports: x.ports,\n status: x.status,\n source: x.source,\n deployedFrom: x.deployedFrom,\n children: x.children,\n }));\n\n const site = siteMap[did];\n\n if (!site) {\n return null;\n }\n\n const { domainAliases } = site;\n\n const rules = site.rules\n .filter(x => !(x.name.includes(WELLKNOWN_PATH_PREFIX) && x.isProtected))\n .sort((a, b) => {\n if (a.to.did === did && b.to.did !== did) {\n return -1;\n }\n if (a.to.did !== did && b.to.did === did) {\n return 1;\n }\n return 0;\n });\n\n let selectableBlocklets = blocklets;\n if (rules.some(x => x.to.did === did)) {\n selectableBlocklets = blocklets.filter(x => x.meta.did !== did);\n }\n\n return (\n <Div>\n {/* address */}\n <Box display=\"flex\" justifyContent=\"space-between\" alignItems=\"center\">\n <div className=\"title\">{t('common.domain')}</div>\n <Box display=\"flex\" alignItems=\"center\">\n <ButtonGroupWithActions\n actions={[\n <MenuItem data-cy=\"config-show-issue-passport\" onClick={() => history.push('/settings/cert')}>\n <Box display=\"flex\" alignItems=\"center\">\n <Box>{t('router.certSetting')}</Box>\n </Box>\n </MenuItem>,\n ]}>\n <UpdateDomainSecurity {...site}>\n {({ open }) => (\n <Button variant=\"outlined\" color=\"primary\" onClick={open} data-cy=\"update-domain-security\">\n <SecurityIcon style={{ height: '1em', marginRight: 4 }} />\n {t('blocklet.router.securitySetting')}\n </Button>\n )}\n </UpdateDomainSecurity>\n </ButtonGroupWithActions>\n <AddDomainAlias id={site.id} title={t('router.domain.add.title')}>\n {({ open }) => (\n <Button\n style={{ marginLeft: 16 }}\n variant=\"contained\"\n rounded\n color=\"primary\"\n data-cy=\"add-domain-alias\"\n onClick={open}>\n <AddIcon style={{ fontSize: '1.3em', marginRight: 4 }} />\n {t('common.add')}\n </Button>\n )}\n </AddDomainAlias>\n </Box>\n </Box>\n {blocklet.status !== 'running' && (\n <Box my={1}>\n <Alert severity=\"warning\">{t('blocklet.router.noRunning')}</Alert>\n </Box>\n )}\n {domainAliases.map(domain => (\n <Box display=\"flex\" alignItems=\"center\" justifyContent=\"space-between\" mt={1}>\n <Box display=\"flex\" alignItems=\"center\" justifyContent=\"space-between\">\n <DomainStatus key={`${domain.value}-domain`} type=\"domain\" name={domain.value} filters={['domain']} />\n <Box ml={2} mr={0.5}>\n <DomainLink href={appendParams(getLink(domain, site, blocklet), { locale })} target=\"_blank\">\n {domain.value}\n </DomainLink>\n </Box>\n <DomainStatus key={`${domain.value}-http`} type=\"domain\" name={domain.value} filters={['http']} />\n </Box>\n <Permission permission=\"mutate_router\">\n {!domain.isProtected ? (\n <DomainActions site={site} domain={domain} />\n ) : (\n <IconButton disabled>\n <LockIcon style={{ fill: theme.palette.text.disabled }} />\n </IconButton>\n )}\n </Permission>\n </Box>\n ))}\n {!domainAliases.length && (\n <Box mt={4}>\n <Empty>{t('common.empty')}</Empty>\n </Box>\n )}\n {/* rule */}\n <Box display=\"flex\" justifyContent=\"space-between\" alignItems=\"center\" mt={3}>\n <div className=\"title\">{t('blocklet.router.urlPath')}</div>\n <div>\n <AddRule id={site.id} blocklets={selectableBlocklets}>\n {({ open }) => (\n <Button\n style={{ marginLeft: 16 }}\n variant=\"contained\"\n rounded\n color=\"primary\"\n data-cy=\"add-rule\"\n onClick={open}>\n <AddIcon style={{ fontSize: '1.3em', marginRight: 4 }} />\n {t('common.add')}\n </Button>\n )}\n </AddRule>\n </div>\n </Box>\n {rules.map(x => (\n <Box>\n <Rule {...x} blocklets={blocklets} selectableBlocklets={selectableBlocklets} parent={site} />\n </Box>\n ))}\n {!rules.length && (\n <Box mt={4}>\n <Empty>{t('common.empty')}</Empty>\n </Box>\n )}\n </Div>\n );\n}\n\nAccess.propTypes = {\n blocklet: PropTypes.object.isRequired,\n};\n\nconst Div = styled.div`\n .title {\n font-size: 1.2rem;\n font-weight: bolder;\n color: #222222;\n margin-top: ${props => props.theme.spacing(2)}px;\n }\n`;\n\nconst DomainLink = styled.a`\n color: #222;\n font-size: 18px;\n`;\n","/* eslint-disable react/jsx-one-expression-per-line */\nimport React, { useState, useEffect } from 'react';\nimport styled from 'styled-components';\nimport { useParams, useHistory, Link } from 'react-router-dom';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nimport Typography from '@material-ui/core/Typography';\nimport Breadcrumbs from '@material-ui/core/Breadcrumbs';\nimport Box from '@material-ui/core/Box';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport ExternalLink from '@material-ui/core/Link';\nimport OpenIcon from '@material-ui/icons/OpenInNew';\n\nimport Tabs from '@arcblock/ux/lib/Tabs';\nimport Alert from '@arcblock/ux/lib/Alert';\nimport Button from '@arcblock/ux/lib/Button';\n\nimport { BlockletEvents } from '@blocklet/meta/lib/constants';\nimport { isAuthServiceEnabled } from '@blocklet/meta/lib/util';\n\nimport BlockletOverview from '../../components/blocklet/overview';\nimport BlockletService from '../../components/blocklet/service';\nimport BlockletConfiguration from '../../components/blocklet/configuration';\nimport Access from '../../components/blocklet/access';\nimport BlockletActions from '../../components/blocklet/actions';\nimport BlockletAvatar from '../../components/blocklet/avatar';\nimport BlockletStatus from '../../components/blocklet/status';\nimport { useNodeContext } from '../../contexts/node';\nimport { TeamProvider } from '../../contexts/team';\nimport { useRoutingContext } from '../../contexts/routing';\nimport { DomainStatusProvider } from '../../contexts/domain-status';\nimport { formatError, getBlockletServices, isInstalling } from '../../libs/util';\nimport { useSubscription } from '../../libs/ws';\nimport ensureBlockletInterface from '../../libs/ensure-blocklet-interface';\nimport Permission from '../../components/permission';\nimport Members from '../../components/team/members';\nimport Passports from '../../components/team/passports';\n\nexport default function BlockletDetail() {\n const history = useHistory();\n const { did, tab: currentTab = 'overview' } = useParams();\n const [currentState, setCurrentState] = useState(null);\n const [error, setError] = useState(null);\n const { api, info, refresh } = useNodeContext();\n const { t } = useLocaleContext();\n const { siteMap } = useRoutingContext();\n\n const domains = (siteMap[currentState?.meta?.did]?.domainAliases || []).map(x => x.value).filter(Boolean);\n\n const getBlocklet = async () => {\n try {\n const { blocklet } = await api.getBlocklet({ input: { did } });\n if (blocklet) {\n blocklet.interfaces = await ensureBlockletInterface(blocklet.interfaces);\n }\n setCurrentState(blocklet);\n } catch (err) {\n setError(err);\n }\n };\n\n const onBlockletChange = ({ meta = {} } = {}) => {\n if (meta.did === did) {\n getBlocklet();\n }\n };\n\n useEffect(() => {\n getBlocklet();\n }, [did]); // eslint-disable-line\n\n useSubscription(BlockletEvents.started, onBlockletChange);\n useSubscription(BlockletEvents.statusChange, onBlockletChange);\n useSubscription(BlockletEvents.startFailed, onBlockletChange);\n useSubscription(BlockletEvents.installed, onBlockletChange);\n useSubscription(BlockletEvents.upgraded, onBlockletChange);\n useSubscription(BlockletEvents.downgraded, onBlockletChange);\n\n const onTabChange = newTab => {\n history.push(`/blocklets/${did}/${newTab}`);\n };\n\n // eslint-disable-next-line no-unused-vars\n const onChangeBlocklet = async ({ action, version, blocklet }) => {\n try {\n await api.upgradeBlocklet({ input: { did: blocklet.did, version } });\n } catch (err) {\n console.error('Blocklet update failed', err);\n }\n };\n\n let content = null;\n const tabs = [\n { label: t('common.overview'), value: 'overview' },\n { label: t('router.routerSetting'), value: 'access' },\n ];\n\n const onConfigChange = newBlocklet => {\n setCurrentState(blocklet => ({\n ...blocklet,\n environments: newBlocklet.environments,\n configs: newBlocklet.configs || blocklet.configs,\n children: blocklet.children.map(child => {\n const newChild = newBlocklet.children.find(x => x.meta.did === child.meta.did);\n child.configs = newChild.configs || child.configs;\n return child;\n }),\n }));\n };\n\n if (error) {\n content = (\n <>\n <Alert type=\"error\" variant=\"icon\">\n {formatError(error)}\n </Alert>\n <Button component={Link} color=\"primary\" variant=\"contained\" to=\"/blocklets\">\n {t('common.blocklets')}\n </Button>\n </>\n );\n } else if (currentState) {\n const renders = {\n overview: BlockletOverview,\n configuration: BlockletConfiguration,\n access: Access,\n services: BlockletService,\n members: Members,\n passports: Passports,\n };\n\n if (currentTab === 'configuration' && isInstalling(currentState.status)) {\n onTabChange('overview');\n }\n\n if (!isInstalling(currentState.status)) {\n if (isAuthServiceEnabled(currentState)) {\n tabs.push({ label: t('common.members'), value: 'members' });\n tabs.push({ label: t('common.passport'), value: 'passports' });\n }\n tabs.push({ label: t('common.configuration'), value: 'configuration' });\n }\n\n const services = getBlockletServices(currentState);\n if (services.length) {\n tabs.splice(2, 0, { label: t('blocklet.services'), value: 'services' });\n }\n\n const TabComponent = renders[currentTab] || renders.overview;\n\n content = (\n <>\n <Tabs tabs={tabs} current={currentTab} onChange={onTabChange} scrollButtons=\"auto\" />\n <div className=\"page-content\">\n <TabComponent blocklet={currentState} onChangeConfig={onConfigChange} onChangeBlocklet={onChangeBlocklet} />\n </div>\n </>\n );\n } else {\n content = <Spinner />;\n }\n\n const onActionStart = () => {};\n const onActionComplete = async ({ action, err }) => {\n if (err) {\n return;\n }\n\n if (action === 'remove') {\n refresh();\n history.push('/blocklets');\n } else {\n getBlocklet();\n }\n };\n const currentTabDesc = tabs.find(x => x.value === currentTab);\n\n return (\n <TeamProvider teamDid={did}>\n <DomainStatusProvider domains={domains}>\n <Main>\n <Breadcrumbs separator=\"›\" aria-label=\"breadcrumb\" className=\"page-breadcrumb\">\n <Link color=\"textSecondary\" to=\"/blocklets\">\n {t('common.blocklets')}\n </Link>\n <Link color=\"textSecondary\" to={`/blocklets/${did}/overview`}>\n {t('common.detail')}\n </Link>\n <Typography color=\"textSecondary\">{currentTabDesc ? currentTabDesc.label : ''}</Typography>\n </Breadcrumbs>\n\n <Typography component=\"div\" className=\"page-header\">\n <Typography component=\"h2\" variant=\"h4\" className=\"page-title\" color=\"textPrimary\">\n {currentState ? <BlockletAvatar blocklet={currentState} style={{ marginRight: 24 }} /> : null}\n {currentState ? (\n <Box display=\"flex\" alignItems=\"center\">\n {!!currentState && (\n <BlockletStatus size=\"12px\" variant=\"dot\" style={{ marginRight: 8 }} status={currentState.status} />\n )}\n <Box>{currentState.meta.title || currentState.meta.name}</Box>\n </Box>\n ) : (\n `${t('common.blocklet')} ${t('common.detail')}`\n )}\n {currentState && currentState.meta.path && (\n <ExternalLink\n href={`${info.blockletRegistry}/blocklet/${currentState.meta.did}`}\n target=\"_blank\"\n className=\"page-link\">\n <OpenIcon />\n </ExternalLink>\n )}\n </Typography>\n <Permission permission=\"mutate_blocklet\">\n {currentState ? (\n <BlockletActions\n className=\"page-actions\"\n blocklet={currentState}\n onStart={onActionStart}\n onComplete={onActionComplete}\n variant=\"group\"\n />\n ) : null}\n </Permission>\n </Typography>\n {content}\n </Main>\n </DomainStatusProvider>\n </TeamProvider>\n );\n}\n\nconst Main = styled.main`\n .page-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n .page-title {\n display: flex;\n align-items: center;\n\n .page-link {\n font-size: 15px;\n margin-top: 8px;\n margin-left: 8px;\n }\n }\n\n .page-content {\n margin-top: 32px;\n }\n\n @media (max-width: ${props => props.theme.breakpoints.values.md}px) {\n .page-header {\n flex-direction: column;\n align-items: flex-start;\n .page-actions,\n .MuiButtonGroup-root {\n width: 100%;\n }\n .MuiButtonGroup-root {\n .MuiButtonBase-root {\n flex: 1;\n }\n .blocklet-action-text {\n display: none;\n }\n }\n }\n\n .page-title {\n margin-bottom: 15px;\n }\n }\n`;\n","export { default } from './ButtonGroup';","import { useTheme } from '@material-ui/core/styles';\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\n\nfunction useMobileWidth() {\n const theme = useTheme();\n const isBreakpointsDownSm = useMediaQuery(theme.breakpoints.down('sm'));\n const minWidth = isBreakpointsDownSm ? 300 : theme.breakpoints.values.sm;\n return { minWidth };\n}\n\nexport default useMobileWidth;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nimport Dialog from '@material-ui/core/Dialog';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport Alert from '@material-ui/lab/Alert';\nimport useTheme from '@material-ui/core/styles/useTheme';\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\n\nimport { formatError } from '../libs/util';\nimport useMobileWidth from '../hooks/mobile-width';\n\nexport default function ConfirmDialog({\n title,\n description,\n showCancel,\n cancel,\n confirm,\n color,\n params: initialParams,\n onCancel,\n onConfirm,\n}) {\n const [params, setParams] = useState(initialParams);\n const [open, setOpen] = useState(true);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState('');\n const { t: changeLocale } = useLocaleContext();\n const theme = useTheme();\n\n const onCallback = async cb => {\n if (typeof cb === 'function') {\n setLoading(true);\n try {\n await cb(params);\n setOpen(false);\n } catch (err) {\n setError(formatError(err));\n console.error(err);\n } finally {\n setLoading(false);\n }\n } else {\n setOpen(false);\n }\n };\n\n const t = typeof title === 'function' ? title() : title;\n const d = typeof description === 'function' ? description(params, setParams, setError) : description;\n\n const isBreakpointsDownSm = useMediaQuery(theme.breakpoints.down('sm'));\n\n const handleClick = e => {\n e.stopPropagation();\n };\n const { minWidth } = useMobileWidth();\n\n return (\n <StyledDialog onClick={handleClick} fullScreen={isBreakpointsDownSm} open={open} style={{ minWidth }}>\n <DialogTitle>{t}</DialogTitle>\n <DialogContent style={{ minWidth }}>\n <DialogContentText component=\"div\">{d}</DialogContentText>\n {!!error && (\n <Alert severity=\"error\" style={{ width: '100%', marginTop: 8 }}>\n {error}\n </Alert>\n )}\n </DialogContent>\n <DialogActions className=\"delete-actions\" style={{ padding: '8px 24px 24px' }}>\n {showCancel && (\n <Button\n onClick={e => {\n e.stopPropagation();\n onCallback(onCancel);\n }}\n color=\"default\"\n data-cy=\"cancel-confirm-dialog\"\n rounded\n size=\"small\">\n {cancel || changeLocale('common.cancel')}\n </Button>\n )}\n <Button\n onClick={e => {\n e.stopPropagation();\n onCallback(onConfirm);\n }}\n color={color}\n size=\"small\"\n // eslint-disable-next-line no-underscore-dangle\n disabled={params.__disableConfirm || loading}\n variant=\"contained\"\n data-cy=\"submit-confirm-dialog\"\n autoFocus\n rounded>\n {loading && <Spinner size={[16, 10]} />}\n {confirm}\n </Button>\n </DialogActions>\n </StyledDialog>\n );\n}\n\nConfirmDialog.propTypes = {\n title: PropTypes.any.isRequired,\n description: PropTypes.any.isRequired, // can be a function that renders different content based on params\n showCancel: PropTypes.bool,\n cancel: PropTypes.string,\n color: PropTypes.string,\n confirm: PropTypes.string,\n params: PropTypes.object, // This object holds states managed in the dialog\n onCancel: PropTypes.func,\n onConfirm: PropTypes.func.isRequired,\n};\n\nConfirmDialog.defaultProps = {\n onCancel: () => {},\n showCancel: true,\n cancel: '',\n confirm: 'Confirm',\n color: 'danger',\n params: {},\n};\n\nconst StyledDialog = styled(Dialog)`\n .delete-actions .Mui-disabled {\n color: rgba(0, 0, 0, 0.26) !important;\n box-shadow: none;\n background-color: rgba(0, 0, 0, 0.12) !important;\n }\n`;\n","import React, { useState, useContext, useEffect } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { RBAC_CONFIG } from '@abtnode/constant';\n\nimport { useNodeContext } from './node';\nimport { useBlockletContext } from './blocklets';\n\nimport { useSubscription } from '../libs/ws';\n\nconst TeamContext = React.createContext({});\nconst { Provider, Consumer } = TeamContext;\n\nconst getTeamName = (teamDid, nodeInfo, blocklet) => {\n if (teamDid === nodeInfo.did) {\n return nodeInfo.name;\n }\n\n if (blocklet) {\n return blocklet.meta.title || blocklet.meta.name;\n }\n\n return '';\n};\n\nconst getTrustedPassports = (teamDid, nodeInfo, blocklet) => {\n if (teamDid === nodeInfo.did) {\n return nodeInfo.trustedPassports || [];\n }\n\n if (blocklet) {\n return blocklet.trustedPassports || [];\n }\n\n return [];\n};\n\nconst getTeamIssuerDid = (teamDid, nodeInfo, blocklet) => {\n if (teamDid === nodeInfo.did) {\n return teamDid;\n }\n\n if (blocklet) {\n const item = (blocklet.environments || []).find(x => x.key === 'BLOCKLET_APP_ID') || {};\n return item.value || '';\n }\n\n return '';\n};\n\nconst getEnablePassportIssuance = (teamDid, nodeInfo, blocklet) => {\n if (teamDid === nodeInfo.did) {\n return nodeInfo.enablePassportIssuance !== false;\n }\n\n if (blocklet) {\n return blocklet.enablePassportIssuance !== false;\n }\n\n return true;\n};\n\nfunction TeamProvider({ teamDid, children }) {\n const { api, nodeInfo } = useNodeContext();\n const { data: blocklets } = useBlockletContext();\n\n const [users, setUsers] = useState([]);\n const [invitations, setInvitations] = useState([]);\n const [roles, setRoles] = useState([]);\n const [permissions, setPermissions] = useState([]);\n\n const blocklet = blocklets.find(x => x.meta.did === teamDid);\n const teamName = getTeamName(teamDid, nodeInfo, blocklet);\n const trustedPassports = getTrustedPassports(teamDid, nodeInfo, blocklet);\n const teamIssuerDid = getTeamIssuerDid(teamDid, nodeInfo, blocklet);\n const enablePassportIssuance = getEnablePassportIssuance(teamDid, nodeInfo, blocklet);\n\n const getData = async did => {\n try {\n const res = await api.doBatchQuery({\n getRoles: { input: { teamDid: did } },\n getPermissions: { input: { teamDid: did } },\n getUsers: { input: { teamDid: did } },\n getInvitations: { input: { teamDid: did } },\n });\n\n setRoles(\n (res.getRoles.roles || [])\n // exclude some roles: not passport or only for ci\n .filter(x => !RBAC_CONFIG.roles.some(y => y.name === x.name && (!y.passport || y.ci)))\n // backwards compatibility\n .map(x => {\n x.description = x.description || `Use this passport to connect ${teamName} as ${x.title}`;\n return x;\n })\n );\n setPermissions(res.getPermissions.permissions || []);\n // FIXME: performance optimization\n setUsers(res.getUsers.users || []);\n setInvitations(res.getInvitations.invitations || []);\n } catch {\n // do nothing\n }\n };\n\n const refresh = () => getData(teamDid);\n\n useEffect(() => {\n getData(teamDid);\n }, [teamDid]); // eslint-disable-line\n\n const onUserEvent = data => {\n if (data.teamDid === teamDid) {\n getData();\n }\n };\n\n useSubscription('user.added', onUserEvent, [teamDid]);\n useSubscription('user.removed', onUserEvent, [teamDid]);\n useSubscription('user.updated', onUserEvent, [teamDid]);\n\n const data = {\n teamDid,\n teamIssuerDid,\n teamName,\n users,\n invitations,\n roles,\n permissions,\n trustedPassports,\n isNodeTeam: teamDid === nodeInfo.did,\n enablePassportIssuance,\n refresh,\n };\n\n return <Provider value={data}>{children}</Provider>;\n}\n\nTeamProvider.propTypes = {\n teamDid: PropTypes.string.isRequired,\n children: PropTypes.object.isRequired,\n};\n\nTeamProvider.defaultProps = {};\n\nfunction useTeamContext() {\n return useContext(TeamContext);\n}\n\nexport { TeamContext, TeamProvider, Consumer as TeamConsumer, useTeamContext };\n","import React, { useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport Copy from '@arcblock/ux/lib/ClickToCopy';\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nexport default function ClickToCopy({ children, ...rest }) {\n const { t } = useContext(LocaleContext);\n return (\n <Copy tip={t('common.copyTip')} copiedTip={t('common.copiedTip')} {...rest}>\n {children}\n </Copy>\n );\n}\n\nClickToCopy.propTypes = {\n children: PropTypes.any.isRequired,\n};\n","import Add from '@material-ui/icons/Add';\nimport Check from '@material-ui/icons/Check';\nimport Delete from '@material-ui/icons/Delete';\nimport Clear from '@material-ui/icons/Clear';\nimport Export from '@material-ui/icons/SaveAlt';\nimport Edit from '@material-ui/icons/Edit';\nimport Filter from '@material-ui/icons/Filter';\nimport FirstPage from '@material-ui/icons/FirstPage';\nimport LastPage from '@material-ui/icons/LastPage';\nimport NextPage from '@material-ui/icons/ChevronRight';\nimport PreviousPage from '@material-ui/icons/ChevronLeft';\nimport Search from '@material-ui/icons/Search';\nimport SortArrow from '@material-ui/icons/ArrowDropDown';\nimport ThirdStateCheck from '@material-ui/icons/Remove';\nimport ViewColumn from '@material-ui/icons/ViewColumn';\n\nexport default {\n Add,\n Check,\n Delete,\n Edit,\n Clear,\n DetailPanel: NextPage,\n Filter,\n FirstPage,\n LastPage,\n NextPage,\n PreviousPage,\n Search,\n ResetSearch: Clear,\n SortArrow,\n Export,\n ThirdStateCheck,\n ViewColumn,\n};\n","import styled from 'styled-components';\n\nconst TableStyle = styled.div`\n .MuiPaper-root {\n box-shadow: none !important;\n border: none !important;\n border-radius: 0 !important;\n background: transparent;\n }\n .MuiToolbar-root {\n background: transparent;\n padding-left: 0;\n display: none;\n }\n\n .MuiTableHead-root th {\n min-width: 100px;\n background: transparent;\n }\n\n .MuiTable-root {\n overflow-y: hidden;\n }\n .MuiTableRow-root {\n border: none !important;\n }\n\n .MuiTableCell-root {\n padding-right: 16px;\n &:last-of-type {\n padding-right: 0;\n }\n }\n`;\n\nexport default TableStyle;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _styledComponents = _interopRequireDefault(require(\"styled-components\"));\n\nvar _Icon = _interopRequireDefault(require(\"../Icon\"));\n\nconst _excluded = [\"name\", \"color\", \"size\", \"children\"];\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nconst Wrapper = _styledComponents.default.div.withConfig({\n displayName: \"Empty__Wrapper\",\n componentId: \"sc-g0b1j7-0\"\n})([\"display:flex;justify-content:center;align-items:center;flex-direction:column;height:100%;min-height:100px;color:#999;.empty-icon{margin:10px 0;}\"]);\n\nfunction Empty(_ref) {\n let {\n name,\n color,\n size,\n children\n } = _ref,\n rest = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/_react.default.createElement(Wrapper, rest, /*#__PURE__*/_react.default.createElement(_Icon.default, {\n name: name,\n size: size,\n className: \"empty-icon\",\n color: color\n }), /*#__PURE__*/_react.default.createElement(\"div\", {\n className: \"empty-content\"\n }, children));\n}\n\nEmpty.propTypes = {\n color: _propTypes.default.string,\n name: _propTypes.default.string,\n size: _propTypes.default.number,\n children: _propTypes.default.any\n};\nEmpty.defaultProps = {\n color: 'inherit',\n name: 'inbox',\n size: 36,\n children: null\n};\nvar _default = Empty;\nexports.default = _default;","/* eslint-disable no-await-in-loop */\nconst get = require('lodash/get');\n\nconst forEachBlocklet = (blocklet, cb, { parallel = false, sync } = {}) => {\n // sync\n if (sync) {\n cb(blocklet);\n if (blocklet.children) {\n for (const child of blocklet.children) {\n cb(child);\n }\n }\n return null;\n }\n\n // serial\n if (!parallel) {\n return (async () => {\n await cb(blocklet);\n if (blocklet.children) {\n for (const child of blocklet.children) {\n await cb(child);\n }\n }\n return null;\n })();\n }\n\n // parallel\n const tasks = [];\n tasks.push(cb(blocklet));\n if (blocklet.children) {\n for (const child of blocklet.children) {\n tasks.push(cb(child));\n }\n }\n return Promise.all(tasks);\n};\n\nconst isAuthServiceEnabled = (blocklet) => {\n const interfaces = get(blocklet, 'meta.interfaces') || [];\n const isRootEnabled = interfaces.some((x) => {\n const services = get(x, 'services') || [];\n return services.some((s) => s.name === '@abtnode/auth-service');\n });\n\n if (isRootEnabled) {\n return true;\n }\n\n const children = get(blocklet, 'children') || [];\n for (const child of children) {\n if (isAuthServiceEnabled(child)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst getRequiredMissingConfigs = (blocklet) => {\n const missingConfigs = [];\n const configs = blocklet.configs || [];\n configs.forEach((item) => {\n if (item.required && !item.value) {\n missingConfigs.push({ did: blocklet.meta.did, key: item.key });\n }\n });\n\n // eslint-disable-next-line no-restricted-syntax\n for (const child of blocklet.children || []) {\n const childConfigs = child.configs || [];\n // configProp does not exist in root blocklet config\n // or value of configProp in root blocklet config is empty.\n childConfigs.forEach((x) => {\n if (x.required && !x.value && !configs.some((y) => y.key === x.key && y.value)) {\n missingConfigs.push({ did: child.meta.did, key: x.key });\n }\n });\n }\n\n return missingConfigs;\n};\n\nconst isFreeBlocklet = (meta) => {\n if (!meta.payment) {\n return true;\n }\n\n const priceList = (meta.payment.price || []).map((x) => x.value || 0);\n return priceList.every((x) => x === 0);\n};\n\nconst wipeSensitiveData = (blocklet) => {\n if (!blocklet) {\n return blocklet;\n }\n\n forEachBlocklet(\n blocklet,\n (d) => {\n (d.configs || []).forEach((x) => {\n if (x.secure) {\n x.value = x.value ? '__encrypted__' : '';\n }\n });\n (d.environments || []).forEach((x) => {\n if (['BLOCKLET_APP_SK'].includes(x.key)) {\n x.value = '__encrypted__';\n }\n });\n\n delete blocklet.configObj;\n delete blocklet.environmentObj;\n },\n { sync: true }\n );\n\n return blocklet;\n};\n\nconst isDeletableBlocklet = (blocklet) => {\n if (!blocklet) {\n return false;\n }\n\n const config = blocklet.environments.find((x) => x.key === 'BLOCKLET_DELETABLE');\n if (!config) {\n return true;\n }\n\n return config.value === 'yes';\n};\n\nmodule.exports = {\n isFreeBlocklet,\n isDeletableBlocklet,\n forEachBlocklet,\n isAuthServiceEnabled,\n getRequiredMissingConfigs,\n wipeSensitiveData,\n};\n","import React, { useContext } from 'react';\nimport PropTypes from 'prop-types';\n\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Tooltip from '@material-ui/core/Tooltip';\n\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nimport Dot from '../dot';\nimport Tag from '../tag';\nimport { isInProgress } from '../../libs/util';\n\nconst colors = {\n yellow: '#FFCF71',\n grey: '#888888',\n};\n\nexport default function BlockletStatus({ status, variant, ...rest }) {\n const { t } = useContext(LocaleContext);\n\n const map = {\n added: 'primary',\n waiting: 'warning',\n downloading: 'warning',\n downloaded: 'primary',\n installing: 'warning',\n installed: 'primary',\n starting: 'warning',\n running: 'success',\n stopping: 'warning',\n stopped: 'reverse',\n error: 'error',\n upgrading: 'warning',\n restarting: 'warning',\n corrupted: 'error',\n };\n\n const colorMap = {\n added: colors.grey,\n waiting: colors.yellow,\n downloading: colors.yellow,\n downloaded: colors.grey,\n installing: colors.yellow,\n installed: colors.grey,\n starting: colors.yellow,\n running: 'success',\n stopping: colors.yellow,\n stopped: colors.grey,\n error: 'error',\n upgrading: colors.yellow,\n restarting: colors.yellow,\n corrupted: 'error',\n };\n\n const inProgress = isInProgress(status);\n\n const statusTxt = t(`blocklet.status.${status}`);\n\n if (variant === 'dot') {\n return (\n <Tooltip title={t('blocklet.statusTip', { status: t(`blocklet.status.${status}`) })}>\n <Dot color={colorMap[status]} {...rest} />\n </Tooltip>\n );\n }\n\n return (\n <Tag type={map[status]} style={{ borderRadius: 5, border: '1px solid #ccc' }} {...rest}>\n {inProgress && <Spinner size={[12, 6]} color=\"inherit\" style={{ marginRight: 5 }} />}\n {statusTxt}\n </Tag>\n );\n}\n\nBlockletStatus.propTypes = {\n status: PropTypes.string.isRequired,\n variant: PropTypes.oneOf(['dot', 'tag']),\n};\n\nBlockletStatus.defaultProps = {\n variant: 'tag',\n};\n","import styled from 'styled-components';\n\nconst color = {\n success: '#3ab39d',\n error: '#D0021B',\n};\n\nconst defaultSize = '10px';\n\nconst Dot = styled.div`\n display: inline-block;\n width: ${props => props.size || defaultSize};\n height: ${props => props.size || defaultSize};\n background: ${props => color[props.color] || props.color || color.success};\n border-radius: 100%;\n`;\n\nexport default Dot;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _styledComponents = _interopRequireDefault(require(\"styled-components\"));\n\nvar _ButtonGroup = _interopRequireDefault(require(\"@material-ui/core/ButtonGroup\"));\n\nvar _wrap = _interopRequireDefault(require(\"../Button/wrap\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst sizes = {\n small: 16,\n medium: 18,\n large: 20\n};\n\nconst getBorderRadius = size => sizes[size || 'medium'];\n\nconst StyledButtonGroup = (0, _styledComponents.default)(_ButtonGroup.default).withConfig({\n displayName: \"ButtonGroup__StyledButtonGroup\",\n componentId: \"sc-1popzk9-0\"\n})([\".MuiButton-root:first-of-type{border-radius:\", \"px 0 0 \", \"px;}.MuiButton-root:last-of-type{border-radius:0 \", \"px \", \"px 0;}\"], props => getBorderRadius(props.size), props => getBorderRadius(props.size), props => getBorderRadius(props.size), props => getBorderRadius(props.size));\n\nvar _default = (0, _wrap.default)(StyledButtonGroup);\n\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = ClickToCopy;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _copyToClipboard = _interopRequireDefault(require(\"copy-to-clipboard\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _useWindowSize = _interopRequireDefault(require(\"react-use/lib/useWindowSize\"));\n\nvar _Tooltip = _interopRequireDefault(require(\"@material-ui/core/Tooltip\"));\n\nvar _Typography = _interopRequireDefault(require(\"@material-ui/core/Typography\"));\n\nvar _styledComponents = _interopRequireDefault(require(\"styled-components\"));\n\nvar _Toast = _interopRequireDefault(require(\"../Toast\"));\n\nvar _Util = require(\"../Util\");\n\nconst _excluded = [\"children\", \"content\", \"tip\", \"copiedTip\", \"tipPlacement\", \"style\"];\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction ClickToCopy(props) {\n const newProps = (0, _Util.mergeProps)(props, ClickToCopy, ['style']);\n\n const {\n children,\n content,\n tip,\n copiedTip,\n tipPlacement,\n style\n } = newProps,\n rest = _objectWithoutProperties(newProps, _excluded);\n\n const [copied, setCopied] = (0, _react.useState)(false);\n\n const childrenRef = /*#__PURE__*/_react.default.createRef();\n\n const {\n width\n } = (0, _useWindowSize.default)();\n\n const onCopy = e => {\n (0, _copyToClipboard.default)(content || e.current.textContent);\n setCopied(true);\n };\n\n (0, _react.useEffect)(() => {\n let timer = null;\n\n if (copied) {\n timer = setTimeout(() => {\n setCopied(false);\n }, 2000);\n }\n\n return () => {\n if (timer) {\n clearTimeout(timer);\n }\n };\n });\n return /*#__PURE__*/_react.default.createElement(_Tooltip.default, Object.assign({\n title: copied ? copiedTip : tip\n }, rest, {\n placement: tipPlacement,\n disableFocusListener: true\n }), /*#__PURE__*/_react.default.createElement(Container, {\n ref: childrenRef,\n component: \"span\",\n style: Object.assign({\n fontSize: 'inherit',\n color: 'inherit',\n fontWeight: 'inherit'\n }, style),\n onClick: () => onCopy(childrenRef)\n }, children || content, copied && width < 600 && /*#__PURE__*/_react.default.createElement(_Toast.default, {\n variant: \"success\",\n message: copiedTip\n })));\n}\n\nClickToCopy.propTypes = {\n children: _propTypes.default.any.isRequired,\n content: _propTypes.default.string,\n tip: _propTypes.default.string,\n tipPlacement: _propTypes.default.string,\n copiedTip: _propTypes.default.string,\n style: _propTypes.default.object\n};\nClickToCopy.defaultProps = {\n content: '',\n tip: 'Click To Copy',\n copiedTip: 'Copied',\n tipPlacement: 'right',\n style: {}\n};\nconst Container = (0, _styledComponents.default)(_Typography.default).withConfig({\n displayName: \"ClickToCopy__Container\",\n componentId: \"sc-1vo2vcj-0\"\n})([\"display:inline;white-space:pre-wrap;word-wrap:break-word;overflow-wrap:break-word;align-items:center;justify-content:start;border-radius:15px;padding:1px 12px;background-color:rgba(0,0,0,0.08);cursor:pointer;\"]);","/* eslint-disable import/prefer-default-export */\nimport { ROUTING_RULE_TYPES, DEFAULT_IP_DNS_DOMAIN_SUFFIX } from '@abtnode/constant';\nimport { BLOCKLET_DYNAMIC_PATH_PREFIX } from '@blocklet/meta/lib/constants';\n\nconst validateRuleByServiceType = (params, localeContext) => {\n if (params.type === ROUTING_RULE_TYPES.REDIRECT) {\n if (!params.url) {\n return new Error(`${localeContext('router.validation.redirectUrlRequired')}`);\n }\n\n if (!params.redirectCode) {\n return new Error(`redirect ${localeContext('router.validation.redirectCodeRequired')}`);\n }\n } else if (params.type === ROUTING_RULE_TYPES.BLOCKLET) {\n if (!params.did) {\n return new Error(localeContext('router.validation.didRequired'));\n }\n }\n\n return null;\n};\n\nexport const validateDomain = (domain, localeContext) => {\n if (!domain) {\n return localeContext('router.domain.validate.emptyTip');\n }\n\n if (domain.endsWith(DEFAULT_IP_DNS_DOMAIN_SUFFIX)) {\n return localeContext('router.domain.validate.suffixTip', { suffix: DEFAULT_IP_DNS_DOMAIN_SUFFIX });\n }\n\n return null;\n};\n\n/**\n * form validator of add site(add domain)\n * @param {Object} params form params\n * @param {Function} localeContext error message\n */\nexport const validateSite = (params, localeContext) => {\n const validateResult = validateRuleByServiceType(params, localeContext);\n if (validateResult) {\n return validateResult;\n }\n\n const errMsg = validateDomain(params.domain, localeContext);\n if (errMsg) {\n return new Error(errMsg);\n }\n\n return null;\n};\n\n/**\n * form validator of add_rule and update_rule\n * @param {Object} params form params\n * @param {Function} localeContext error message\n */\nexport const validateRule = (params, localeContext) => {\n const validateResult = validateRuleByServiceType(params, localeContext);\n if (validateResult) {\n return validateResult;\n }\n\n if (!params.pathPrefix.length) {\n return new Error(localeContext('router.validation.pathPrefixCannotBeEmpty'));\n }\n\n if (params.pathPrefix.length > 150) {\n return new Error(localeContext('router.validation.pathPrefixTooLong', { length: 150 }));\n }\n\n return null;\n};\n\nexport const validatePathPrefix = ({ params, blocklets }) => {\n const blocklet = blocklets.find(item => item.meta.did === params.did);\n if (!blocklet) {\n return '';\n }\n\n const selected = blocklet.meta.interfaces.find(x => x.name === params.interfaceName);\n if (!selected) {\n return '';\n }\n\n if (selected.prefix !== BLOCKLET_DYNAMIC_PATH_PREFIX && params.pathPrefix !== selected.prefix) {\n return `This blocklet can only be mounted on path prefix ${selected.prefix}`;\n }\n\n return '';\n};\n\n/**\n * get initial blocklet did when add rule / update rule / add domain\n * @param {array} blocklets\n */\nexport const getInitialBlockletDid = blocklets => {\n if (blocklets.length === 0) {\n return '';\n }\n const { searchParams } = new URL(window.location.href);\n const fromDid = searchParams.get('fromDid');\n if (fromDid) {\n const blocklet = blocklets.find(x => x.meta.did === fromDid);\n if (blocklet) {\n return blocklet.meta.did;\n }\n }\n return blocklets[0].meta.did;\n};\n","import styled from 'styled-components';\n\nconst ListHeader = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 14px;\n .left,\n .right {\n }\n .right {\n display: flex;\n align-items: center;\n }\n .tabs {\n .MuiButton-root {\n border: none;\n color: #999;\n &.active {\n color: #222;\n }\n }\n }\n`;\n\nexport default ListHeader;\n","import React from 'react';\nimport styled from 'styled-components';\nimport TextField from '@material-ui/core/TextField';\nimport SearchIcon from '@material-ui/icons/Search';\n\nconst SearchInput = styled(({ children, ...props }) => (\n <TextField\n {...props}\n id=\"outlined-basic\"\n variant=\"outlined\"\n InputProps={{\n startAdornment: <SearchIcon />,\n }}\n size=\"small\">\n {children}\n </TextField>\n))`\n .MuiOutlinedInput-root {\n color: #999;\n &.MuiInputBase-adornedStart .MuiSvgIcon-root {\n color: #bfbfbf;\n }\n opacity: 1;\n border-radius: 36px;\n background: #f8f8f8;\n padding-left: 16px;\n input {\n padding-left: 8px;\n font-weight: bold;\n &::placeholder {\n opacity: 1;\n color: #bfbfbf;\n }\n padding-top: 8.5px;\n padding-bottom: 8.5px;\n }\n }\n\n .MuiOutlinedInput-notchedOutline,\n .MuiOutlinedInput-root:hover .MuiOutlinedInput-notchedOutline,\n .Mui-focused .MuiOutlinedInput-notchedOutline {\n border-color: #eee;\n border-width: 1px;\n }\n`;\n\nexport default SearchInput;\n","var assignValue = require('./_assignValue'),\n baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nmodule.exports = copyObject;\n","const langs = new Map();\n\nconst registerLang = (locale, obj) => {\n langs.set(locale, obj);\n};\n\nconst getLang = (locale = 'en_US') => langs.get(locale) || langs.get('en_US');\n\nmodule.exports = {\n registerLang,\n getLang,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport OriTag from '@arcblock/ux/lib/Tag';\n\nexport default function Tag({ children, ...rest }) {\n return (\n <OriTag style={{ borderRadius: 5, border: '1px solid #ccc' }} {...rest}>\n {children}\n </OriTag>\n );\n}\n\nTag.propTypes = {\n children: PropTypes.any.isRequired,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport joinURL from 'url-join';\n\nimport Avatar from '@material-ui/core/Avatar';\n\nimport { useNodeContext } from '../../contexts/node';\nimport { formatRegistryLogoPath } from '../../libs/util';\n\nexport default function BlockletAvatar({ blocklet, style, size, ...rest }) {\n const node = useNodeContext();\n let logoUrl = joinURL(node.prefix, 'blocklet.png');\n\n if (!blocklet.deployedFrom) {\n blocklet.deployedFrom = node.info.blockletRegistry;\n }\n\n if (blocklet.source === 'registry' && blocklet.meta.logo) {\n logoUrl = joinURL(blocklet.deployedFrom, formatRegistryLogoPath(blocklet.meta.did, blocklet.meta.logo));\n } else {\n const prefix = window.env.apiPrefix || '/';\n logoUrl = joinURL(prefix, `/blocklet/logo/${blocklet.meta.did}`);\n }\n\n const setFallBackUrl = ev => {\n ev.target.src = `${node.prefix}/blocklet.png`;\n };\n\n return (\n <Avatar\n style={Object.assign(\n { backgroundColor: 'transparent', border: '2px solid #ddd', width: size, height: size },\n style\n )}\n {...rest}>\n <img\n src={logoUrl}\n onError={setFallBackUrl}\n alt={blocklet.meta.name}\n style={{ width: size, backgroundColor: '#fff' }}\n />\n </Avatar>\n );\n}\n\nBlockletAvatar.propTypes = {\n blocklet: PropTypes.object.isRequired,\n style: PropTypes.object,\n size: PropTypes.number,\n};\n\nBlockletAvatar.defaultProps = {\n style: {},\n size: 40,\n};\n","/* eslint-disable react/no-danger */\n/* eslint-disable react/prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Typography from '@material-ui/core/Typography';\nimport TextField from '@material-ui/core/TextField';\n\nimport Alert from '@material-ui/lab/Alert';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport ClickToCopy from './click-to-copy';\n\nimport Confirm from './confirm';\n\nexport default function CancelConfirm({\n title,\n description,\n confirmPlaceholder,\n cancel,\n confirm,\n params: initialParams,\n onCancel,\n onConfirm,\n keyName,\n}) {\n const { t } = useLocaleContext();\n\n const confirmSetting = {\n title: () => (\n <div>\n {title}\n {` (${keyName})`}\n </div>\n ),\n description: (params, setParams) => {\n const setValue = value => {\n // eslint-disable-next-line no-underscore-dangle\n setParams({ ...value, __disableConfirm: value.__disableConfirm });\n };\n\n return (\n <div>\n <Alert severity=\"warning\" style={{ width: '100%' }}>\n {t('common.notice')}\n </Alert>\n <div style={{ marginTop: 24, marginBottom: 24 }} dangerouslySetInnerHTML={{ __html: description }} />\n <div style={{ marginBottom: 24 }}>\n {t('common.click')}\n {':'}\n <ClickToCopy data-cy=\"click-copy\">{keyName}</ClickToCopy>\n </div>\n <Typography component=\"div\">\n <TextField\n label={confirmPlaceholder}\n autoComplete=\"off\"\n data-cy=\"delete-confirm-input\"\n variant=\"outlined\"\n fullWidth\n autoFocus\n value={params.inputVal}\n onChange={e => {\n setValue({ ...params, inputVal: e.target.value, __disableConfirm: keyName !== e.target.value });\n }}\n />\n </Typography>\n </div>\n );\n },\n confirm,\n cancel,\n onConfirm,\n onCancel,\n params: {\n inputVal: '',\n __disableConfirm: true,\n ...initialParams,\n },\n };\n\n return (\n <Confirm\n title={confirmSetting.title}\n description={confirmSetting.description}\n confirm={confirmSetting.confirm}\n cancel={confirmSetting.cancel}\n params={confirmSetting.params}\n onConfirm={confirmSetting.onConfirm}\n onCancel={confirmSetting.onCancel}\n />\n );\n}\n\nCancelConfirm.propTypes = {\n title: PropTypes.any.isRequired,\n keyName: PropTypes.any.isRequired,\n description: PropTypes.any.isRequired, // can be a function that renders different content based on params\n confirmPlaceholder: PropTypes.any.isRequired,\n cancel: PropTypes.string,\n confirm: PropTypes.string,\n params: PropTypes.object, // This object holds states managed in the dialog\n onCancel: PropTypes.func,\n onConfirm: PropTypes.func.isRequired,\n};\n\nCancelConfirm.defaultProps = {\n onCancel: () => {},\n cancel: '',\n confirm: 'Confirm',\n params: {},\n};\n","import Remove from '@material-ui/icons/Delete';\nimport Start from '@material-ui/icons/PlayArrow';\nimport Stop from '@material-ui/icons/Stop';\nimport Restart from '@material-ui/icons/Replay';\nimport Reload from '@material-ui/icons/Autorenew';\nimport Config from '@material-ui/icons/Settings';\nimport Log from '@material-ui/icons/Receipt';\nimport Group from '@material-ui/icons/Group';\n\nexport default {\n Start,\n Stop,\n Restart,\n Reload,\n Remove,\n Config,\n Log,\n Group,\n};\n","/* eslint-disable no-use-before-define */\nimport useLocalStorage from 'react-use/lib/useLocalStorage';\n\nexport default function usePersistentSort(name, initialDirections) {\n const [sortDirections, setSortDirections] = useLocalStorage(`ps_${name}`, initialDirections);\n\n const onSortChange = (columnIndex, directionValue) => {\n const newSortDirections = directionValue ? new Array(initialDirections.length).fill('') : [...initialDirections];\n\n if (columnIndex > -1) {\n newSortDirections[columnIndex] = directionValue;\n }\n\n setSortDirections(newSortDirections);\n };\n\n return {\n sortDirections, // 当前的排序\n onSortChange, // 给外部的回调,可以更新内部的 sort\n };\n}\n","import React, { useContext, useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\n\nimport getClient from '../libs/node';\nimport { useSubscription } from '../libs/ws';\nimport { shouldCheckDomainStatus } from '../libs/util';\n\nconst DomainStatusContext = React.createContext({});\nconst { Provider, Consumer } = DomainStatusContext;\n\nfunction DomainStatusProvider({ children, domains }) {\n const client = getClient();\n const [status, setStatus] = useState({});\n\n useSubscription('domain.status', data => {\n if (data) {\n setStatus(pre => ({ ...pre, [data.domain]: data }));\n }\n });\n\n const getDomainStatus = async () => {\n if (!Array.isArray(domains)) {\n return;\n }\n\n const tempDomains = domains.filter(domain => shouldCheckDomainStatus(domain));\n if (tempDomains.length > 0) {\n client.checkDomains({\n input: { domains },\n });\n }\n };\n\n useEffect(() => {\n getDomainStatus({ silent: true });\n }, [JSON.stringify(domains)]); // eslint-disable-line\n\n const value = {\n refresh: getDomainStatus,\n api: client,\n };\n\n value.status = status;\n\n return <Provider value={{ status: value }}>{children}</Provider>;\n}\n\nDomainStatusProvider.propTypes = {\n children: PropTypes.object.isRequired,\n domains: PropTypes.array.isRequired,\n};\n\nfunction useDomainStatusContext() {\n const { status } = useContext(DomainStatusContext);\n return status;\n}\n\nexport { DomainStatusContext, DomainStatusProvider, Consumer as DomainStatusConsumer, useDomainStatusContext };\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar Component = function Component(props) {\n return /*#__PURE__*/_react.default.createElement(\"svg\", props, /*#__PURE__*/_react.default.createElement(\"path\", {\n d: \"M1.25 2.709c0-.46.373-.834.834-.834h12.255c.46 0 .834.373.834.834v6.607a.834.834 0 1 1-1.668 0V3.542H2.917v13.214h6.407a.834.834 0 1 1 0 1.668h-7.24a.834.834 0 0 1-.834-.834V2.71z\"\n }), /*#__PURE__*/_react.default.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M8.211 7.92a.917.917 0 1 0 0 1.833.917.917 0 0 0 0-1.834zm-2.584.916a2.584 2.584 0 1 1 5.169 0 2.584 2.584 0 0 1-5.17 0zM5.627 13.213c0-.46.373-.833.834-.833h3.501a.834.834 0 0 1 0 1.667H6.461a.834.834 0 0 1-.834-.834zM15.64 11.313c.215 0 .41.121.505.313l1.033 2.092 2.31.338a.563.563 0 0 1 .31.96l-1.67 1.627.394 2.3a.563.563 0 0 1-.816.592l-2.065-1.086-2.066 1.086a.562.562 0 0 1-.816-.593l.394-2.299-1.67-1.627a.563.563 0 0 1 .31-.96l2.31-.338 1.033-2.092a.562.562 0 0 1 .505-.313zm0 1.833l-.659 1.335a.563.563 0 0 1-.423.308l-1.474.215 1.066 1.04c.133.129.194.315.162.498l-.251 1.467 1.318-.694a.563.563 0 0 1 .524 0l1.318.694-.252-1.467a.563.563 0 0 1 .162-.498l1.067-1.04-1.475-.215a.563.563 0 0 1-.423-.308l-.66-1.335z\"\n }));\n};\n\nComponent.defaultProps = {\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nComponent.displayName = \"external-issuer\";\nvar _default = Component;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar Component = function Component(props) {\n return /*#__PURE__*/_react.default.createElement(\"svg\", props, /*#__PURE__*/_react.default.createElement(\"path\", {\n d: \"M6.04 17.625a.953.953 0 0 0 .14-.012l3.943-.691a.23.23 0 0 0 .124-.066l9.935-9.935a.233.233 0 0 0 0-.33l-3.895-3.898a.232.232 0 0 0-.167-.068.232.232 0 0 0-.166.068l-9.935 9.935a.238.238 0 0 0-.066.124l-.691 3.943a.785.785 0 0 0 .22.698c.155.15.35.232.558.232zm1.58-4.088l8.5-8.498 1.718 1.718-8.5 8.498-2.084.368.366-2.085zm13.005 6.057H3.375a.75.75 0 0 0-.75.75v.843c0 .104.084.188.188.188h18.375a.188.188 0 0 0 .187-.188v-.843a.75.75 0 0 0-.75-.75z\"\n }));\n};\n\nComponent.defaultProps = {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\"\n};\nComponent.displayName = \"edit\";\nvar _default = Component;\nexports.default = _default;","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = cloneDeep;\n"],"sourceRoot":""}