@abtnode/webapp 1.8.19 → 1.8.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/blocklet.js +1 -1
- package/blocklet.yml +1 -1
- package/build/asset-manifest.json +7 -7
- package/build/index.html +1 -1
- package/build/static/js/3713.20302cb7.chunk.js +2 -0
- package/build/static/js/3713.20302cb7.chunk.js.map +1 -0
- package/build/static/js/7419.12de55a6.chunk.js +2 -0
- package/build/static/js/7419.12de55a6.chunk.js.map +1 -0
- package/build/static/js/main.4e54d533.js +3 -0
- package/build/static/js/{main.5fadc937.js.LICENSE.txt → main.4e54d533.js.LICENSE.txt} +0 -0
- package/build/static/js/{main.5fadc937.js.map → main.4e54d533.js.map} +1 -1
- package/package.json +1 -1
- package/build/static/js/3713.23832a67.chunk.js +0 -2
- package/build/static/js/3713.23832a67.chunk.js.map +0 -1
- package/build/static/js/7419.7f27e098.chunk.js +0 -2
- package/build/static/js/7419.7f27e098.chunk.js.map +0 -1
- package/build/static/js/main.5fadc937.js +0 -3
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"static/js/7419.7f27e098.chunk.js","mappings":"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","sources":["components/launch-blocklet/button.js","components/launch-blocklet/agreement-app.js","components/launch-blocklet/step-agreement.js","components/logs/clock.js","components/logs/log-terminal.js","components/blocklet/disk-info.js","components/blocklet/runtime-info.js","components/blocklet/blocklet-source.js","components/blocklet/overview.js","components/table.js","components/table-icons.js","components/blocklet/service.js","components/blocklet/configuration.js","components/blocklet/router/domain-actions.js","components/blocklet/router/rule-actions.js","components/blocklet/router/rule-list.js","components/blocklet/access.js","components/blocklet/select-store.js","components/blocklet/add-component.js","components/blocklet/delete-component.js","components/blocklet/component-configuration.js","components/blocklet/components.js","components/blocklet/log.js","components/blocklet/export-blocklet.js","pages/blocklets/detail.js","../../ux/lib/schema-form/color-input.js","../../ux/lib/schema-form/common-prop-types.js","../../ux/lib/schema-form/index.js","../../ux/lib/schema-form/passport-input.js","../../ux/lib/schema-form/required.js","../../ux/lib/schema-form/text-input.js","../../ux/lib/who-can-access/config.js"],"sourcesContent":["import { forwardRef } from 'react';\nimport Button from '@arcblock/ux/lib/Button';\nimport PropTypes from 'prop-types';\n\nfunction WrappedButton({ children, ...props }) {\n return (\n <Button variant=\"contained\" color=\"primary\" {...props}>\n {children}\n </Button>\n );\n}\n\nWrappedButton.propTypes = {\n children: PropTypes.any.isRequired,\n};\n\nexport default forwardRef((props, ref) => <WrappedButton {...props} forwardedRef={ref} />);\n","export default function AgreementApp({ ...props }) {\n return (\n <div {...props} style={{ width: '100%' }}>\n <h3>End User License Agreement for Application</h3>\n <p>Blocklet Server License Agreement ArcBlock, Inc. version 2020-08-28</p>\n <p>BLOCKLET SERVER LICENSE AGREEMENT</p>\n <p>暂无</p>\n </div>\n );\n}\n","import { useEffect, useState, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { useNavigate, Link } from 'react-router-dom';\nimport styled from '@emotion/styled';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport { getDisplayName } from '@blocklet/meta/lib/util';\nimport ResultMessage from '@blocklet/launcher-layout/lib/launch-result-message';\nimport ServerEula from '@blocklet/launcher-layout/lib/wizard/server-eula';\nimport WizardDesc from '@blocklet/launcher-layout/lib/wizard/wizard-desc';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Alert from '@arcblock/ux/lib/Alert';\nimport isEmpty from 'lodash/isEmpty';\nimport Center from '@arcblock/ux/lib/Center';\n\nimport PageHeader from '@blocklet/launcher-layout/lib/page-header';\nimport { useNodeContext } from '../../contexts/node';\nimport AgreementApp from './agreement-app';\nimport { getAccessibleUrl } from '../../libs/util';\nimport Button from './button';\n\n// TODO: 加载 Blocklet 定义的 Agreement\nexport default function Agreement({ blocklet, onClickNext, handleDescEle, showPageHeader }) {\n const navigate = useNavigate();\n const [accessUrl, setAccessUrl] = useState(null);\n const [error, setError] = useState(null);\n const [accessUrlLoading, setAccessUrlLoading] = useState(false);\n const { t, locale } = useLocaleContext();\n const { info, api } = useNodeContext();\n const { isRunning } = blocklet;\n const loading = useMemo(() => isEmpty(blocklet) || accessUrlLoading, [blocklet, accessUrlLoading]);\n\n const clickNext =\n onClickNext ||\n (() => {\n navigate(`/launch-blocklet/install${window.location.search}`);\n });\n\n useEffect(() => {\n const onMount = async () => {\n try {\n setAccessUrlLoading(true);\n const { blocklet: b } = await api.getBlocklet({ input: { did: blocklet.meta.did } });\n const urls = b.interfaces.map(x => x.url);\n const accessUrlTmp = await getAccessibleUrl(urls);\n if (!accessUrlTmp && isEmpty(accessUrlTmp)) {\n setAccessUrl(null);\n return;\n }\n setAccessUrl(new URL(accessUrlTmp).href);\n } catch (err) {\n setError(err.message);\n } finally {\n setAccessUrlLoading(false);\n }\n };\n if (isRunning) {\n onMount();\n }\n // eslint-disable-next-line\n }, [blocklet]);\n\n if (error) {\n return (\n <Center relative=\"parent\">\n <div>\n <Alert style={{ wordBreak: 'break-all' }} variant=\"icon\" type=\"error\">\n {error}\n </Alert>\n </div>\n </Center>\n );\n }\n\n if (loading) {\n return (\n <Center relative=\"parent\">\n <Spinner />\n </Center>\n );\n }\n\n const data = blocklet.meta;\n const blockletMeta = { data };\n\n if (!data) {\n return (\n <Center relative=\"parent\">\n <Spinner />\n </Center>\n );\n }\n\n if (blocklet.isInstalled) {\n const already = accessUrl ? 'alreadyRunning' : 'alreadyInstalled';\n return (\n <ResultMessage\n variant=\"info\"\n title={t('common.reminder')}\n subTitle={t(`launchBlocklet.${already}`, { name: getDisplayName(blocklet, true) })}\n footer={\n <ButtonWrap>\n <Button\n data-cy=\"view-blocklet\"\n component={Link}\n to={`/blocklets/${blocklet.meta.did}/overview`}\n variant={accessUrl ? 'outlined' : 'contained'}\n color=\"primary\">\n {t('launchBlocklet.viewApplication')}\n </Button>\n {accessUrl && (\n <Button className=\"last-button\" href={accessUrl} data-cy=\"open-blocklet\">\n {t('common.open')}\n </Button>\n )}\n </ButtonWrap>\n }\n />\n );\n }\n\n if (!info) {\n return (\n <Center relative=\"parent\">\n <Spinner />\n </Center>\n );\n }\n\n return (\n <Container>\n {showPageHeader && <PageHeader title={t('launchBlocklet.introduction')} subTitle={t('launchBlocklet.welcome')} />}\n <div className=\"app-content\">\n <div className=\"agreement\">\n <div className=\"agreement-content\">\n <WizardDesc blockletMeta={blockletMeta} locale={locale} handleDescEle={handleDescEle} />\n </div>\n </div>\n </div>\n <div className=\"button-container\" data-cy=\"agree-all\">\n <ServerEula\n onContinue={clickNext}\n description={<AgreementApp />}\n texts={{\n listenName: t('launchBlocklet.license'),\n buttonNext: t('launchBlocklet.next'),\n }}\n />\n </div>\n </Container>\n );\n}\n\nAgreement.propTypes = {\n blocklet: PropTypes.object.isRequired,\n onClickNext: PropTypes.func,\n handleDescEle: PropTypes.node,\n showPageHeader: PropTypes.bool,\n};\n\nAgreement.defaultProps = {\n onClickNext: null,\n handleDescEle: '',\n showPageHeader: true,\n};\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n height: 100%;\n\n .app-content {\n padding: 2px 24px 24px;\n ${props => props.theme.breakpoints.down('md')} {\n padding-top: 10px;\n }\n width: 100%;\n flex: 1;\n letter-spacing: normal;\n }\n .agreement {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n border: 1px solid ${props => props.theme.palette.grey['100']};\n border-radius: 12px;\n\n ${props => props.theme.breakpoints.up('md')} {\n margin-top: 24px;\n }\n\n ${props => props.theme.breakpoints.down('md')} {\n margin-top: 16px;\n }\n\n .agreement-content {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n font-size: 14px;\n overflow-y: auto;\n\n ${props => props.theme.breakpoints.up('md')} {\n padding: 0 24px;\n }\n\n ${props => props.theme.breakpoints.down('md')} {\n padding: 0 16px;\n }\n\n &:after {\n display: block;\n content: '';\n height: 24px;\n }\n }\n }\n .button-container {\n padding-top: 24px;\n padding-bottom: 34px;\n ${props => props.theme.breakpoints.up('md')} {\n padding-right: 24px;\n margin-left: auto;\n }\n ${props => props.theme.breakpoints.down('md')} {\n padding-top: 0;\n padding-bottom: 16px;\n }\n }\n`;\n\nconst ButtonWrap = styled.div`\n .MuiButton-root {\n ${props => props.theme.breakpoints.up('md')} {\n min-width: 200px;\n }\n }\n .last-button {\n margin-left: ${props => props.theme.spacing(2)};\n }\n`;\n","import { useState } from 'react';\nimport useInterval from 'react-use/lib/useInterval';\nimport { formatTime } from '../../libs/util';\n\nfunction Clock() {\n const [currentTime, setCurrentTime] = useState(+new Date());\n\n useInterval(() => {\n setCurrentTime(+new Date());\n }, 1000);\n\n return formatTime(currentTime, 'MMMM Do YYYY, h:mm:ss a');\n}\n\nexport default Clock;\n","import { useRef, useState, useEffect, forwardRef } from 'react';\nimport styled from '@emotion/styled';\nimport PropTypes from 'prop-types';\nimport Button from '@mui/material/Button';\nimport ButtonGroup from '@mui/material/ButtonGroup';\nimport useMediaQuery from '@mui/material/useMediaQuery';\nimport Terminal from '@arcblock/terminal/lib/Terminal';\nimport { useSubscription } from '../../libs/ws';\nimport Clock from './clock';\n\n/**\n * 按 level/destination 分类的一组 terminal\n */\nexport function LogTerminalGroup({ name, logId, types, initialData, prepend, ...rest }) {\n const logTypeLabels = {\n info: 'Info',\n error: 'Error',\n access: 'Access',\n stdout: 'stdout',\n stderr: 'stderr',\n };\n const isMobile = useMediaQuery(theme => theme.breakpoints.down('md'));\n const [currentType, setCurrentType] = useState(types[0]);\n const [logFiles, setLogFiles] = useState();\n const terminalRefs = useRef({});\n\n // 组件挂载时, 写入初始数据\n useEffect(() => {\n types.forEach(type => {\n const terminal = terminalRefs.current[type];\n if (terminal) {\n terminal.write(`Collecting ${type} logs for ${name}...`);\n terminal.write('\\r\\n\\r\\n');\n initialData.forEach(item => terminal.write(item));\n }\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // 监听 log 数据, 写入 terminal\n useSubscription(\n `log.${logId}`,\n log => {\n if (!logFiles) {\n setLogFiles(log.logFiles || {});\n }\n const terminal = terminalRefs.current[log.level];\n if (terminal) {\n terminal.write(log.data.replace(/.\\n/g, p => (p === '\\r\\n' ? p : `${p[0]}\\r\\n\\r\\n`)));\n terminal.write('\\r\\n\\r\\n');\n }\n },\n []\n );\n\n return (\n <LogTerminalGroupRoot {...rest}>\n <div className=\"log-terminal-group-head\">\n {prepend}\n <ButtonGroup variant=\"outlined\" size={isMobile ? 'small' : 'medium'}>\n {types.map(type => {\n const props =\n type === currentType\n ? {\n variant: 'contained',\n }\n : {};\n return (\n <Button key={type} {...props} onClick={() => setCurrentType(type)}>\n {logTypeLabels[type]}\n </Button>\n );\n })}\n </ButtonGroup>\n </div>\n <div className=\"log-terminal-group-terminals\">\n {types.map(type => {\n return (\n <LogTerminal\n key={type}\n ref={ref => {\n terminalRefs.current[type] = ref;\n }}\n logFile={logFiles?.[type]}\n style={{ visibility: type === currentType ? 'visible' : 'hidden' }}\n />\n );\n })}\n </div>\n </LogTerminalGroupRoot>\n );\n}\n\nLogTerminalGroup.propTypes = {\n // log name, 比如: blocklet display name\n name: PropTypes.string.isRequired,\n // 比如: abtnode | blocklet-services | blocklet-<did>\n logId: PropTypes.string.isRequired,\n // 日志类型, info/error 或 stdin/stdout/access\n types: PropTypes.arrayOf(PropTypes.string),\n // 写入 terminal 的初始数据\n initialData: PropTypes.arrayOf(PropTypes.string),\n prepend: PropTypes.node,\n};\n\nLogTerminalGroup.defaultProps = {\n types: ['error', 'info', 'access', 'stdout', 'stderr'],\n initialData: [],\n prepend: null,\n};\n\nconst LogTerminalGroupRoot = styled.div`\n display: flex;\n flex-direction: column;\n height: 100%;\n .log-terminal-group-head {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n gap: 16px;\n padding-bottom: 16px;\n\n ${props => props.theme.breakpoints.down('md')} {\n flex-direction: column;\n align-items: start;\n }\n }\n .log-terminal-group-terminals {\n flex: 1;\n position: relative;\n overflow: hidden;\n > * {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n }\n }\n`;\n\nexport const LogTerminal = forwardRef(({ logFile, ...rest }, ref) => {\n const terminalStyle = {\n width: '100%',\n boxSizing: 'border-box',\n height: '100%',\n };\n const terminalOptions = {\n theme: { background: '#2C313C', foreground: '#EEEEEE' },\n };\n return (\n <LogTerminalRoot {...rest}>\n <div className=\"log-terminal-top\">\n <Clock />\n {logFile && <span>{logFile}</span>}\n </div>\n <div className=\"log-terminal-container\" style={{ position: 'relative' }}>\n <Terminal ref={ref} style={terminalStyle} options={terminalOptions} />\n </div>\n </LogTerminalRoot>\n );\n});\n\nLogTerminal.propTypes = {\n logFile: PropTypes.string,\n};\n\nLogTerminal.defaultProps = {\n logFile: '',\n};\n\nconst LogTerminalRoot = styled.div`\n height: 100%;\n display: flex;\n flex-direction: column;\n .log-terminal-top {\n flex: 0 0 auto;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n padding: 8px;\n font-size: 14px;\n color: aquamarine;\n background: darkgray;\n word-break: break-word;\n }\n .log-terminal-container {\n flex: 1;\n height: 100%;\n padding: 8px;\n overflow: hidden;\n background: #2c313c;\n }\n\n .xterm-viewport::-webkit-scrollbar {\n width: 10px;\n }\n .xterm-viewport::-webkit-scrollbar-track {\n opacity: 0;\n }\n .xterm-viewport::-webkit-scrollbar-thumb {\n min-height: 20px;\n background-color: #ffffff20;\n }\n`;\n","/* eslint-disable react/jsx-one-expression-per-line */\nimport { useContext } from 'react';\nimport styled from '@emotion/styled';\nimport PropTypes from 'prop-types';\nimport filesize from 'filesize';\nimport { useNavigate } from 'react-router-dom';\n\nimport Typography from '@mui/material/Typography';\nimport Link from '@mui/material/Link';\nimport InfoRow from '@arcblock/ux/lib/InfoRow';\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nexport default function BlockletDiskInfo({ blocklet, ...rest }) {\n const navigate = useNavigate();\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} underline=\"hover\">\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 navigate(`/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};\n\nBlockletDiskInfo.defaultProps = {};\n\nconst Div = styled(Typography)``;\n","/* eslint-disable react/jsx-one-expression-per-line */\nimport { useContext } from 'react';\nimport styled from '@emotion/styled';\nimport PropTypes from 'prop-types';\nimport filesize from 'filesize';\nimport prettyMs from 'pretty-ms-i18n';\nimport isEmpty from 'lodash/isEmpty';\n\nimport Typography from '@mui/material/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, 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(+new Date() - blocklet.runtimeInfo.startAt || 0), { 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 noRunningMessage: PropTypes.string,\n};\n\nBlockletRuntimeInfo.defaultProps = {\n noRunningMessage: '',\n};\n\nconst Div = styled(Typography)``;\n","import { useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport joinUrl from 'url-join';\nimport toUpper from 'lodash/toUpper';\n\nimport Tag from '@arcblock/ux/lib/Tag';\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nimport ExternalLink from '@mui/material/Link';\nimport Box from '@mui/material/Box';\n\nexport default function BlockletSource({ sourceInfo, blocklet }) {\n const { t } = useContext(LocaleContext);\n return (\n <Box display=\"flex\" alignItems=\"center\">\n <Tag key=\"source\" type=\"success\">\n {toUpper(sourceInfo.source)}\n </Tag>\n {sourceInfo.source === 'registry' && (\n <ExternalLink\n href={joinUrl(sourceInfo.deployedFrom, 'blocklets', blocklet?.meta?.bundleDid || '')}\n target=\"_blank\"\n className=\"page-link\"\n underline=\"hover\"\n style={{\n display: 'flex',\n alignItems: 'center',\n marginLeft: 8,\n }}>\n {t('blocklet.overview.viewInStore')}\n </ExternalLink>\n )}\n </Box>\n );\n}\n\nBlockletSource.propTypes = {\n sourceInfo: PropTypes.shape({\n source: PropTypes.string,\n deployedFrom: PropTypes.string,\n }),\n blocklet: PropTypes.object,\n};\n\nBlockletSource.defaultProps = {\n sourceInfo: {},\n blocklet: {},\n};\n","import { useContext } from 'react';\nimport styled from '@emotion/styled';\nimport PropTypes from 'prop-types';\n\nimport Typography from '@mui/material/Typography';\nimport Tag from '@arcblock/ux/lib/Tag';\nimport InfoRow from '@arcblock/ux/lib/InfoRow';\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport { getDisplayName, getWhoCanAccess } from '@blocklet/meta/lib/util';\n\nimport DidAddress from '../did-address';\nimport BlockletStatus from './status';\nimport { formatToDatetime, formatPerson } from '../../libs/util';\nimport BlockletVersion from './version';\nimport DiskInfo from './disk-info';\nimport RuntimeInfo from './runtime-info';\nimport BlockletSource from './blocklet-source';\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, onChangeConfig, ...rest }) {\n const { t } = useContext(LocaleContext);\n\n const { value: appDid } = (blocklet.environments || []).find(x => x.key === 'BLOCKLET_APP_ID') || {};\n\n const infoRows = [\n appDid ? { name: t('blocklet.appId'), value: <DidAddress did={appDid} /> } : null,\n { name: t('common.name'), value: getDisplayName(blocklet, true) },\n { name: t('common.status'), value: <BlockletStatus status={blocklet.status} source={blocklet.source} /> },\n {\n name: t('common.version'),\n value: <BlockletVersion blocklet={blocklet} />,\n },\n {\n name: t('common.group'),\n value: <Tag type=\"success\">{blocklet.meta.group}</Tag>,\n },\n { name: t('common.author'), value: formatPerson(blocklet.meta.author) },\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 <BlockletSource\n sourceInfo={{\n source: blocklet.source,\n deployedFrom: blocklet.deployedFrom,\n }}\n blocklet={blocklet}\n />\n ),\n },\n { name: t('blocklet.overview.deployedFrom'), value: blocklet.deployedFrom || '-' },\n { name: t('blocklet.overview.accessControl'), value: t(`team.whoCanAccess.${getWhoCanAccess(blocklet)}.title`) },\n { name: t('common.did'), value: <DidAddress did={blocklet.meta.did} /> },\n {\n name: t('common.owner'),\n value: blocklet.settings?.owner ? <DidAddress did={blocklet.settings.owner.did} /> : '--',\n },\n ].filter(Boolean);\n\n const engineRows = getEngineRows(blocklet.engine, t);\n const renderRows = rows =>\n rows.map(row => {\n if (row.name === t('common.did') || row.name === t('blocklet.appId')) {\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 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 <>\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 <div className=\"title\">{t('common.dataStorage')}</div>\n <DiskInfo blocklet={blocklet} />\n </Div>\n );\n}\n\nBlockletOverview.propTypes = {\n blocklet: PropTypes.object.isRequired,\n onChangeConfig: PropTypes.func.isRequired,\n};\n\nconst Div = styled(Typography)`\n .title {\n font-size: 1.2rem;\n font-weight: bold;\n margin-top: ${props => props.theme.spacing(5)};\n margin-bottom: ${props => props.theme.spacing(3)};\n }\n`;\n","import styled from '@emotion/styled';\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 &.show-pagination {\n .MuiTablePagination-toolbar {\n display: flex;\n }\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 /* @material-table/core@next 兼容 mui v5, 但 pagination 样式似乎有些问题, 暂地定制下面的样式修复, 后面考虑弃用 material-table */\n .MuiTablePagination-selectLabel,\n .MuiTablePagination-displayedRows {\n display: none;\n }\n .MuiTypography-caption {\n display: inline-block;\n }\n .MuiTablePagination-selectLabel + .MuiInputBase-root {\n margin-right: 8px;\n }\n`;\n\nexport default TableStyle;\n","import Add from '@mui/icons-material/Add';\nimport Check from '@mui/icons-material/Check';\nimport Delete from '@mui/icons-material/Delete';\nimport Clear from '@mui/icons-material/Clear';\nimport Export from '@mui/icons-material/SaveAlt';\nimport Edit from '@mui/icons-material/Edit';\nimport Filter from '@mui/icons-material/Filter';\nimport FirstPage from '@mui/icons-material/FirstPage';\nimport LastPage from '@mui/icons-material/LastPage';\nimport NextPage from '@mui/icons-material/ChevronRight';\nimport PreviousPage from '@mui/icons-material/ChevronLeft';\nimport Search from '@mui/icons-material/Search';\nimport SortArrow from '@mui/icons-material/ArrowDropDown';\nimport ThirdStateCheck from '@mui/icons-material/Remove';\nimport ViewColumn from '@mui/icons-material/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","/* eslint-disable react/jsx-one-expression-per-line */\nimport { useContext } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport MaterialTable from '@material-table/core';\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/no-unstable-nested-components */\n/* eslint-disable react/prop-types */\n/* eslint-disable react/destructuring-assignment */\n/* eslint-disable react/jsx-one-expression-per-line */\nimport { useState, useContext } from 'react';\nimport styled from '@emotion/styled';\nimport PropTypes from 'prop-types';\nimport get from 'lodash/get';\nimport omit from 'lodash/omit';\n\nimport TextField from '@mui/material/TextField';\nimport Box from '@mui/material/Box';\nimport MenuItem from '@mui/material/MenuItem';\nimport useTheme from '@mui/material/styles/useTheme';\nimport Switch from '@mui/material/Switch';\nimport Divider from '@mui/material/Divider';\n\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Toast from '@abtnode/ux/lib/toast';\nimport SchemaForm from '@abtnode/ux/lib/schema-form';\nimport AccessConfig from '@abtnode/ux/lib/who-can-access/config';\nimport { BLOCKLET_CONFIGURABLE_KEY } from '@blocklet/meta/lib/constants';\nimport { getWhoCanAccess } from '@blocklet/meta/lib/util';\n\nimport { useNodeContext } from '../../contexts/node';\nimport { isInstalling, isValidClusterSize } from '../../libs/util';\nimport { useSubscription } from '../../libs/ws';\nimport { withPermission } from '../permission';\n\nfunction BlockletEnvironment({ blocklet, onChangeConfig, onUpdate, hasPermission, ...rest }) {\n const node = useNodeContext();\n const { t, locale } = useContext(LocaleContext);\n const [cpuCores, setCpuCores] = useState('');\n const [loading, setLoading] = useState('');\n const whoCanAccess = getWhoCanAccess(blocklet);\n const publicToStore = blocklet?.settings?.publicToStore;\n const theme = useTheme();\n const [editingItem, setEditingItem] = useState(null);\n const disabled = loading || !hasPermission;\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 if (isInstalling(blocklet.status)) {\n return null;\n }\n\n const WalletTypes = [\n {\n label: 'DID',\n value: 'default',\n },\n {\n label: 'ETH',\n value: 'eth',\n },\n ];\n\n // configurable blocklet environment\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 deletable = !customDelete || customDelete.value === 'yes';\n const customColor = blocklet.environments.find(x => x.key === 'BLOCKLET_PASSPORT_COLOR');\n const customUrl = blocklet.environments.find(x => x.key === 'BLOCKLET_APP_URL');\n const configurableEnvs = [\n {\n key: BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_NAME,\n description: t('blocklet.config.name'),\n value: blocklet.environments.find(x => x.key === 'BLOCKLET_APP_NAME').value,\n },\n {\n key: BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_DESCRIPTION,\n description: t('blocklet.config.description'),\n value: blocklet.environments.find(x => x.key === 'BLOCKLET_APP_DESCRIPTION').value,\n },\n {\n key: BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_PASSPORT_COLOR,\n description: t('blocklet.config.passportColor'),\n value: customColor ? customColor.value : 'auto',\n componentType: 'passport',\n componentProps: {\n blocklet,\n },\n },\n {\n key: BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_URL,\n description: t('blocklet.config.appUrl'),\n value: customUrl ? customUrl.value : '',\n },\n ];\n if (clusterMode) {\n const exist = blocklet.configs.find(x => x.key === BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_CLUSTER_SIZE);\n const value = exist ? exist.value : cpuCores;\n configurableEnvs.push({\n key: BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_CLUSTER_SIZE,\n description: t('blocklet.config.clusterSize'),\n value,\n cpuCores,\n });\n }\n\n const defaultValue = {};\n\n const schemaList = configurableEnvs.map(item => {\n const { value, ...props } = item;\n defaultValue[item.key] = value;\n return {\n ...props,\n };\n });\n\n const onWhoCanAccessChange = async e => {\n if (loading) {\n return;\n }\n\n setLoading(true);\n try {\n const { value } = e.target;\n const { blocklet: data } = await node.api.updateWhoCanAccess({\n input: { did: blocklet.meta.did, whoCanAccess: value },\n });\n onUpdate(data);\n } catch (err) {\n Toast.error(err.message);\n } finally {\n setLoading(false);\n }\n };\n\n const onPublicToStoreChange = async e => {\n if (loading) {\n return;\n }\n\n setLoading(true);\n try {\n const { checked } = e.target;\n const { blocklet: data } = await node.api.configPublicToStore({\n input: { did: blocklet.meta.did, publicToStore: checked },\n });\n onUpdate(data);\n } catch (err) {\n Toast.error(err.message);\n } finally {\n setLoading(false);\n }\n };\n\n const iconStyle = {\n marginRight: 4,\n fontSize: 18,\n verticalAlign: 'text-bottom',\n color: theme.palette.text.secondary,\n };\n\n const onSubmitConfig = async value => {\n if (value.key === BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_CLUSTER_SIZE) {\n const errMessage = isValidClusterSize(value);\n if (errMessage) {\n Toast.error(errMessage);\n return;\n }\n }\n\n const params = [\n {\n // omit the backend unused configs\n ...omit(editingItem, ['childDid', 'componentType', 'componentProps']),\n value,\n custom: true,\n },\n ];\n\n try {\n setLoading(true);\n const { blocklet: data } = await node.api.configBlocklet({\n input: {\n did: blocklet.meta.did,\n configs: params,\n },\n });\n onUpdate(data);\n } catch (err) {\n Toast.error(err.message);\n } finally {\n setLoading(false);\n }\n };\n\n const onDeletableChange = async e => {\n if (loading) {\n return;\n }\n\n setLoading(true);\n try {\n const { checked } = e.target;\n const { blocklet: data } = await node.api.configBlocklet({\n input: {\n did: blocklet.meta.did,\n configs: [\n {\n key: BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_DELETABLE,\n value: checked ? 'no' : 'yes',\n custom: true,\n },\n ],\n },\n });\n\n onUpdate(data);\n } catch (err) {\n Toast.error(err.message);\n } finally {\n setLoading(false);\n }\n };\n\n const onWalletTypeChange = async e => {\n if (loading) {\n return;\n }\n\n setLoading(true);\n try {\n const { value } = e.target;\n const { blocklet: data } = await node.api.configBlocklet({\n input: {\n did: blocklet.meta.did,\n configs: [\n {\n key: BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_WALLET_TYPE,\n value,\n custom: true,\n },\n ],\n },\n });\n\n onUpdate(data);\n } catch (err) {\n Toast.error(err.message);\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <Div {...rest}>\n <SchemaForm\n disabled={disabled}\n style={{ marginTop: -24 }}\n loading={loading}\n schema={schemaList}\n defaultValue={defaultValue}\n onChange={(changeValue, { action, currentItem }) => {\n if (action === 'edit') {\n setEditingItem(currentItem);\n } else if (['cancel', 'confirm'].includes(action)) {\n setEditingItem(null);\n }\n if (action === 'confirm') {\n onSubmitConfig(changeValue[currentItem.key]);\n }\n }}\n />\n\n {/* who can access */}\n <Box className=\"config-form\">\n <Box className=\"config-item\">\n <Box className=\"config-label\">\n {t('blocklet.config.access.title')}\n <Box className=\"config-desc\">{t('blocklet.config.access.description')}</Box>\n </Box>\n <TextField\n disabled={disabled}\n select\n size=\"small\"\n value={whoCanAccess}\n onChange={onWhoCanAccessChange}\n SelectProps={{\n renderValue: selected => {\n const d = AccessConfig.find(x => x.value === selected);\n return d ? (\n <Box>\n <d.icon style={iconStyle} />\n {d.title[locale]}\n </Box>\n ) : null;\n },\n }}>\n {AccessConfig.map(d => {\n return (\n <StyledMenuItem value={d.value} sx={{ display: 'block' }}>\n <Box display=\"flex\" alignItems=\"center\">\n <d.icon style={iconStyle} />\n <Box>{d.title[locale]}</Box>\n </Box>\n <Box>\n <Box className=\"tip\">{d.description[locale]}</Box>\n </Box>\n </StyledMenuItem>\n );\n })}\n </TextField>\n </Box>\n\n {whoCanAccess === 'all' && blocklet.source === 'registry' && (\n <Box className=\"config-item\">\n <Box className=\"config-label\">\n {t('blocklet.config.access.publicToStore')}\n <Box className=\"config-desc\">{t('blocklet.config.access.publicInstanceTip')}</Box>\n </Box>\n <Switch disabled={disabled} checked={publicToStore} defaultChecked onChange={onPublicToStoreChange} />\n </Box>\n )}\n\n {/* deletable */}\n <Box className=\"config-item\">\n <Box className=\"config-label\">\n {t('blocklet.config.deletable.name')}\n <Box className=\"config-desc\">\n {deletable ? t('blocklet.config.deletable.disable') : t('blocklet.config.deletable.enable')}\n </Box>\n </Box>\n <Switch disabled={disabled} checked={!deletable} defaultChecked onChange={onDeletableChange} />\n </Box>\n </Box>\n\n <Box className=\"config-form\" component={Divider} my={3} />\n\n {/* wallet */}\n <Box className=\"config-form\">\n <Box className=\"config-item\">\n <Box className=\"config-label\">\n {t('blocklet.config.walletType.name')}\n <Box className=\"config-desc\">{t('blocklet.config.walletType.description')}</Box>\n </Box>\n <TextField\n disabled={disabled}\n select\n size=\"small\"\n value={customType?.value || 'default'}\n onChange={onWalletTypeChange}>\n {WalletTypes.map(type => {\n return (\n <StyledMenuItem value={type.value} sx={{ display: 'block' }}>\n <Box display=\"flex\" alignItems=\"center\">\n <Box>{type.label}</Box>\n </Box>\n </StyledMenuItem>\n );\n })}\n </TextField>\n </Box>\n </Box>\n\n <SchemaForm\n disabled={disabled}\n style={{ marginTop: 0 }}\n loading={loading}\n schema={[\n {\n key: BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_SK,\n description: t('blocklet.config.sk'),\n value: blocklet.environments.find(x => x.key === 'BLOCKLET_APP_SK').value,\n custom: true,\n secure: true,\n },\n ]}\n defaultValue={{\n [BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_SK]: blocklet.environments.find(x => x.key === 'BLOCKLET_APP_SK')\n .value,\n }}\n onChange={(changeValue, { action, currentItem }) => {\n if (action === 'edit') {\n setEditingItem(currentItem);\n } else if (['cancel', 'confirm'].includes(action)) {\n setEditingItem(null);\n }\n if (action === 'confirm') {\n onSubmitConfig(changeValue[currentItem.key]);\n }\n }}\n />\n </Div>\n );\n}\n\nexport default withPermission(BlockletEnvironment, 'mutate_blocklet');\n\nBlockletEnvironment.propTypes = {\n blocklet: PropTypes.object.isRequired,\n onChangeConfig: PropTypes.func,\n onUpdate: PropTypes.func,\n hasPermission: PropTypes.bool,\n};\n\nBlockletEnvironment.defaultProps = {\n onChangeConfig: () => {},\n onUpdate: () => {},\n hasPermission: false,\n};\n\nconst Div = styled.div`\n .config-form {\n width: 80%;\n flex-grow: 1;\n overflow-y: auto;\n ${props => props.theme.breakpoints.down('md')} {\n width: 100%;\n flex-shrink: 0;\n padding: 0 24px;\n transform: translate(0, 0);\n max-height: 60vh;\n }\n }\n\n .config-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin: 16px 0;\n }\n\n .config-label {\n font-weight: bold;\n }\n\n .config-desc {\n font-weight: normal;\n font-size: 12px;\n color: #666;\n }\n`;\n\nconst StyledMenuItem = styled(MenuItem)`\n .tip {\n font-size: 12px;\n color: ${props => props.theme.palette.text.secondary};\n }\n`;\n","import PropTypes from 'prop-types';\n\nimport MenuItem from '@mui/material/MenuItem';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemText from '@mui/material/ListItemText';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport DeleteIcon from '@mui/icons-material/Delete';\n\nimport Actions from '../../actions';\nimport DeleteDomainAlias from '../../router/rule/action/delete-domain-alias';\n\nexport default function DomainActions({ site, domain, blocklet }) {\n const { t } = useLocaleContext();\n\n return (\n <Actions\n data-cy=\"domain-actions\"\n actions={[\n // eslint-disable-next-line react/no-unstable-nested-components\n ({ close }) => (\n <DeleteDomainAlias id={site.id} domain={domain.value} teamDid={blocklet?.meta?.did}>\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\nDomainActions.propTypes = {\n site: PropTypes.object.isRequired,\n domain: PropTypes.object.isRequired,\n blocklet: PropTypes.object.isRequired,\n};\n\nDomainActions.defaultProps = {};\n","/* eslint-disable react/no-unstable-nested-components */\nimport PropTypes from 'prop-types';\n\nimport MenuItem from '@mui/material/MenuItem';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemText from '@mui/material/ListItemText';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport EditIcon from '@mui/icons-material/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 PropTypes from 'prop-types';\nimport { Link } from 'react-router-dom';\nimport isUrl from 'is-url';\nimport classnames from 'classnames';\nimport useTheme from '@mui/material/styles/useTheme';\n\nimport Tooltip from '@mui/material/Tooltip';\nimport Box from '@mui/material/Box';\nimport ArrowForwardIcon from '@mui/icons-material/ArrowForward';\nimport ExternalLink from '@mui/material/Link';\nimport IconButton from '@mui/material/IconButton';\nimport LockIcon from '@arcblock/icons/lib/LockIcon';\nimport { ROUTING_RULE_TYPES } from '@abtnode/constant';\nimport { findComponentById, getDisplayName } from '@blocklet/meta/lib/util';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport MaterialTable from '@material-table/core';\nimport { getAccessUrl } from '@abtnode/ux/src/util';\nimport TableStyle from '../../table';\nimport tableIcons from '../../table-icons';\n\nimport { useDomainStatusContext } from '../../../contexts/domain-status';\nimport { getBlockletUrlParams } from '../../../libs/util';\n\nimport Dot from '../../dot';\nimport Permission from '../../permission';\nimport BlockletAvatar from '../avatar';\nimport RuleActions from './rule-actions';\n\nfunction 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 }} underline=\"hover\">\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\nexport default function RuleList({ rules, blocklets, selectableBlocklets, parent, blockletDid }) {\n const { t, locale } = useLocaleContext();\n const theme = useTheme();\n const { recommendedDomainStatus } = useDomainStatusContext();\n const domainStatus = recommendedDomainStatus || {};\n const { domain = '' } = domainStatus;\n\n const blockletsKeyByDid = blocklets.reduce((acc, cur) => Object.assign(acc, { [cur.meta.did]: cur }), {});\n const data = rules.map(rule => {\n const indexDid = rule.to.type === 'blocklet' ? rule.to.did : blockletDid;\n const blocklet = blockletsKeyByDid[indexDid] || { meta: {} };\n\n const isHealthy = blocklet && blocklet.status === 'running' && domainStatus.accessible;\n const _rule = {\n id: '',\n to: {},\n title: '',\n items: [],\n depth: 0,\n expand: true,\n isProtected: false,\n pathPrefix: '',\n domainAliases: [],\n };\n Object.keys(rule).forEach(key => {\n if (Object.prototype.hasOwnProperty.call(rule, key)) {\n _rule[key] = rule[key];\n }\n });\n return {\n ..._rule,\n isHealthy,\n blocklet,\n };\n });\n\n const columns = [\n {\n width: 20,\n render: rowData => {\n const healthyTip = rowData.isHealthy ? t('router.healthy.ok') : t('router.healthy.error');\n return (\n <Tooltip title={healthyTip}>\n <Dot color={rowData.isHealthy ? 'success' : 'error'} />\n </Tooltip>\n );\n },\n },\n {\n render: rowData => {\n const { name, blocklet } = rowData;\n const renderRuleText = () => {\n const content = name.replace(/\\/$/, '') || '/';\n return (\n <Box\n maxWidth={400}\n px={2}\n overflow=\"hidden\"\n whiteSpace=\"nowrap\"\n textOverflow=\"ellipsis\"\n style={{ color: '#222', fontSize: 18 }}\n title={content}>\n {content}\n </Box>\n );\n };\n return (\n <>\n {!domainStatus.accessible && renderRuleText()}\n {domainStatus.accessible && (\n <a\n target=\"_blank\"\n href={getAccessUrl(domain, name, getBlockletUrlParams(blocklet, locale))}\n rel=\"noopener noreferrer\">\n {renderRuleText()}\n </a>\n )}\n </>\n );\n },\n },\n {\n width: 32,\n render: () => <ArrowForwardIcon style={{ color: '#999' }} />,\n },\n {\n render: rowData => {\n const { name, title, to, blocklet } = rowData;\n\n if (to.type === ROUTING_RULE_TYPES.BLOCKLET && !blocklet) {\n return null;\n }\n\n const internalLink = `/blocklets/${to.did}/access`;\n const { component, ancestors } =\n findComponentById(blocklet || {}, to.componentId, { returnAncestors: true }) || {};\n\n if (to.type === ROUTING_RULE_TYPES.BLOCKLET && !component) {\n return null;\n }\n\n let childName = '';\n if (to.type === ROUTING_RULE_TYPES.BLOCKLET && to.componentId && to.did !== to.componentId) {\n childName = ancestors\n .concat(component)\n .map(x => getDisplayName(x, true))\n .join(' / ');\n }\n\n return (\n <>\n {to.type === ROUTING_RULE_TYPES.BLOCKLET && (\n <Link to={internalLink} className=\"arrow-name-right\">\n <Box display=\"flex\" alignItems=\"center\">\n <BlockletAvatar blocklet={component} style={{ marginRight: 8 }} ancestors={ancestors} />\n <div style={{ color: '#222', fontSize: 18, minWidth: 150 }}>\n {childName || getDisplayName(blocklet, true) || title}\n </div>\n </Box>\n </Link>\n )}\n {to.type === ROUTING_RULE_TYPES.REDIRECT && (\n <RedirectRule domain={parent.name} toUrl={to.url} isHttps={domainStatus.isHttps} />\n )}\n {to.type === ROUTING_RULE_TYPES.NONE && (\n <ExternalLink\n href={getAccessUrl(domain, name, getBlockletUrlParams(blocklet, locale))}\n target=\"_blank\"\n style={{ fontSize: 18 }}\n underline=\"hover\">\n {t('common.page404')}\n </ExternalLink>\n )}\n </>\n );\n },\n },\n {\n render: rowData => {\n const { isProtected, to } = rowData;\n let action = (\n <Tooltip title={t('blocklet.router.urlLockTooltip')} placement=\"top\">\n <IconButton\n disabled\n size=\"large\"\n style={{\n pointerEvents: 'auto',\n // padding replace to margin, fix the tooltip position\n paddingTop: 0,\n paddingBottom: 0,\n margin: '12px 0',\n }}>\n <LockIcon style={{ fill: theme.palette.text.disabled }} />\n </IconButton>\n </Tooltip>\n );\n\n if (!isProtected) {\n action = (\n <RuleActions\n {...{ ...rowData, parent, blockletDid, blocklets: selectableBlocklets }}\n did={to.did}\n teamDid={blockletDid}\n />\n );\n }\n return (\n <Permission permission=\"mutate_router\">\n <div style={{ textAlign: 'right' }}>{action}</div>\n </Permission>\n );\n },\n },\n ];\n\n const pageSize = 20;\n\n return (\n <TableStyle className={classnames('blocklet-list', { 'show-pagination': data.length > pageSize })}>\n <MaterialTable\n data={data}\n icons={{ ...tableIcons }}\n columns={columns}\n options={{\n pageSize,\n header: false,\n emptyRowsWhenPaging: false,\n }}\n />\n </TableStyle>\n );\n}\n\nRuleList.propTypes = {\n rules: PropTypes.array,\n blocklets: PropTypes.array,\n selectableBlocklets: PropTypes.array,\n parent: PropTypes.object,\n blockletDid: PropTypes.string.isRequired,\n};\n\nRuleList.defaultProps = {\n rules: [],\n blocklets: [],\n selectableBlocklets: [],\n parent: {},\n};\n","import { useContext } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport styled from '@emotion/styled';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport useTheme from '@mui/material/styles/useTheme';\n\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Alert from '@mui/material/Alert';\nimport Box from '@mui/material/Box';\nimport AddIcon from '@mui/icons-material/Add';\nimport SecurityIcon from '@mui/icons-material/Security';\nimport Tooltip from '@mui/material/Tooltip';\nimport IconButton from '@mui/material/IconButton';\nimport LockIcon from '@arcblock/icons/lib/LockIcon';\nimport Button from '@arcblock/ux/lib/Button';\nimport Empty from '@arcblock/ux/lib/Empty';\nimport SplitButton from '@arcblock/ux/lib/SplitButton';\nimport { getDisplayName } from '@blocklet/meta/lib/util';\n\nimport { WELLKNOWN_PATH_PREFIX } from '@abtnode/constant';\n\nimport { useBlockletContext } from '../../contexts/blocklets';\nimport { useRoutingContext } from '../../contexts/routing';\nimport { isInProgress, getBlockletUrlParams } 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 AddCert from '../router/rule/action/add-cert';\nimport Permission from '../permission';\n\nimport DomainActions from './router/domain-actions';\nimport RuleList from './router/rule-list';\nimport { useDomainStatusContext } from '../../contexts/domain-status';\n\nfunction DomainLink({ domain, href, children }) {\n const { t } = useContext(LocaleContext);\n const { status } = useDomainStatusContext();\n\n const domainStatus = status[domain];\n\n if (!domainStatus || domainStatus.loading) {\n return (\n <LinkDiv>\n {children}\n <Tooltip title={t('blocklet.router.checkUrlAccessible')} placement=\"top-end\">\n <span className=\"status\">\n <Spinner size={12} />\n </span>\n </Tooltip>\n </LinkDiv>\n );\n }\n\n if (!domainStatus.accessible) {\n return (\n <LinkDiv>\n <Tooltip title={t('blocklet.router.urlInaccessible')} placement=\"top-end\">\n <span>{children}</span>\n </Tooltip>\n </LinkDiv>\n );\n }\n\n return (\n <LinkDiv>\n <a href={href} target=\"_blank\" rel=\"noopener noreferrer\">\n {children}\n </a>\n </LinkDiv>\n );\n}\n\nDomainLink.propTypes = {\n domain: PropTypes.string.isRequired,\n href: PropTypes.string.isRequired,\n children: PropTypes.any.isRequired,\n};\n\nconst LinkDiv = styled.span`\n &,\n & > * {\n color: #222;\n font-size: 18px;\n }\n\n .status {\n margin-left: 8px;\n }\n`;\n\nexport default function Access({ blocklet }) {\n const { t, locale } = useContext(LocaleContext);\n const { siteMap, getBlockletUrl } = useRoutingContext();\n const { data: rawBlocklets } = useBlockletContext();\n const navigate = useNavigate();\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 bundleDid: x.meta.bundleDid,\n name: getDisplayName(x),\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 const urlMap = {};\n domainAliases.forEach(domain => {\n urlMap[domain.value] = getBlockletUrl({ did, domain, siteMap, params: getBlockletUrlParams(blocklet, locale) });\n });\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 <UpdateDomainSecurity {...site} teamDid={did}>\n {({ open }) => (\n <SplitButton\n variant=\"outlined\"\n disabled={isInProgress(blocklet.status)}\n menuButtonProps={{ 'data-cy': 'trusted-issuers-more' }}\n menu={\n <SplitButton.Item\n data-cy=\"config-show-issue-passport\"\n onClick={() => navigate(`/settings/cert?did=${blocklet.meta.did}`)}>\n <Box display=\"flex\" alignItems=\"center\">\n <Box>{t('router.certSetting')}</Box>\n </Box>\n </SplitButton.Item>\n }>\n {() => (\n <Button onClick={open} data-cy=\"update-domain-security\">\n <SecurityIcon style={{ height: '1em', marginRight: 4 }} />\n {t('blocklet.router.securitySetting')}\n </Button>\n )}\n </SplitButton>\n )}\n </UpdateDomainSecurity>\n <AddDomainAlias id={site.id} title={t('router.domain.add.title')} teamDid={did}>\n {({ open }) => (\n <Button\n style={{ marginLeft: 16 }}\n variant=\"contained\"\n color=\"primary\"\n data-cy=\"add-domain-alias\"\n onClick={open}\n disabled={isInProgress(blocklet.status)}>\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 key={domain.value} 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={urlMap[domain.value]} domain={domain.value} target=\"_blank\">\n {domain.value}\n </DomainLink>\n </Box>\n <DomainStatus key={`${domain.value}-http`} type=\"domain\" name={domain.value} filters={['http']} />\n <span style={{ marginLeft: 12 }} />\n <AddCert domain={domain.value}>\n {({ open }) => (\n <Button size=\"small\" onClick={e => open(e)}>\n {t('router.cert.genLetsEncryptCert.title')}\n </Button>\n )}\n </AddCert>\n </Box>\n <Permission permission=\"mutate_router\">\n {!domain.isProtected ? (\n <DomainActions site={site} domain={domain} blocklet={blocklet} />\n ) : (\n <Tooltip title={t('blocklet.router.domainLockTooltip')} placement=\"top\">\n <IconButton\n disabled\n size=\"large\"\n style={{\n pointerEvents: 'auto',\n // padding replace to margin, fix the tooltip position\n paddingTop: 0,\n paddingBottom: 0,\n margin: '12px 0',\n }}>\n <LockIcon style={{ fill: theme.palette.text.disabled }} />\n </IconButton>\n </Tooltip>\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 <Box display=\"flex\" alignItems=\"center\">\n <Permission permission=\"mutate_blocklet\">\n <AddRule id={site.id} blocklets={selectableBlocklets} teamDid={did}>\n {({ open }) => (\n <Button\n style={{ marginLeft: 16 }}\n variant=\"contained\"\n color=\"primary\"\n data-cy=\"add-rule\"\n onClick={open}\n disabled={isInProgress(blocklet.status)}>\n <AddIcon style={{ fontSize: '1.3em', marginRight: 4 }} />\n {t('common.add')}\n </Button>\n )}\n </AddRule>\n </Permission>\n </Box>\n </Box>\n {!!rules.length && (\n <RuleList\n rules={rules}\n blocklets={blocklets}\n selectableBlocklets={selectableBlocklets}\n parent={site}\n blockletDid={blocklet.meta.did}\n />\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: bold;\n color: #222222;\n }\n`;\n","import { useState, useRef } from 'react';\nimport PropTypes from 'prop-types';\n\nimport styled from '@emotion/styled';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport TextField from '@mui/material/TextField';\nimport MenuItem from '@mui/material/MenuItem';\nimport Button from '@arcblock/ux/lib/Button';\nimport ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';\nimport Typography from '@mui/material/Typography';\n\nimport { BlockletRegistryRenderItem } from '../registry/switch';\nimport AddBlockletRegistry from '../registry/add';\nimport { useNodeContext } from '../../contexts/node';\n\nexport default function SelectStore({ defaultValue, onChange, loading, children, extra }) {\n const { t } = useLocaleContext();\n const { info } = useNodeContext();\n const [open, setOpen] = useState(false);\n const storeSelectRef = useRef(null);\n\n const [currentRegistry, setCurrentRegistryRegistry] = useState(defaultValue);\n\n return (\n <>\n <SelectStoreTitle>\n <Button\n ref={storeSelectRef}\n color=\"secondary\"\n data-cy=\"add-component-select-store\"\n endIcon={<ArrowDropDownIcon color=\"secondary\" />}\n onClick={() => {\n setOpen(true);\n }}\n style={{\n padding: '0 2px',\n }}>\n <Typography color=\"secondary\">{currentRegistry.name}</Typography>\n </Button>\n {/* {t('blocklet.component.selectRegistry')} */}\n <Typography color=\"secondary\">{extra}</Typography>\n </SelectStoreTitle>\n <TextField\n id=\"mui-registry-select\"\n select\n autoComplete=\"off\"\n variant=\"outlined\"\n name=\"did\"\n helperText={t('blocklet.component.selectRegistryTip')}\n data-cy=\"component-registry-select\"\n fullWidth\n value={currentRegistry}\n autoFocus\n onChange={e => {\n const newRegistry = e.target.value;\n setCurrentRegistryRegistry(newRegistry);\n onChange(newRegistry);\n }}\n SelectProps={{\n open,\n MenuProps: {\n anchorEl: storeSelectRef.current,\n },\n renderValue: item => {\n return item?.name;\n },\n onClose: () => {\n setOpen(false);\n },\n }}\n style={{ display: 'none' }}\n margin=\"normal\">\n {info?.blockletRegistryList?.map(x => {\n return (\n <MenuItem key={x.url} value={x} data-cy={x.url}>\n <BlockletRegistryRenderItem\n {...x}\n reloadPage={false}\n onDelete={() => {\n if (localStorage.getItem('blocklet-add-component-registry') === x.url) {\n localStorage.removeItem('blocklet-add-component-registry');\n setCurrentRegistryRegistry(info?.blockletRegistryList?.[0]);\n }\n }}\n />\n </MenuItem>\n );\n })}\n <AddBlockletRegistry disabled={loading} reloadPage={false} />\n </TextField>\n {children({ currentRegistry })}\n </>\n );\n}\n\nSelectStore.propTypes = {\n defaultValue: PropTypes.any,\n onChange: PropTypes.func,\n loading: PropTypes.bool,\n children: PropTypes.any.isRequired,\n extra: PropTypes.node,\n};\n\nSelectStore.defaultProps = {\n defaultValue: {},\n onChange: () => {},\n loading: false,\n extra: '',\n};\n\nconst SelectStoreTitle = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n\n span {\n font-size: 16px;\n color: ${props => props.theme.palette.common.black};\n // font-weight: bold;\n }\n`;\n","/* eslint-disable react/no-unstable-nested-components */\nimport { useState, useRef, useImperativeHandle, forwardRef, useEffect } from 'react';\nimport PropTypes from 'prop-types';\n\nimport uniqBy from 'lodash/uniqBy';\nimport flatten from 'lodash/flatten';\nimport isEmpty from 'lodash/isEmpty';\nimport isNil from 'lodash/isNil';\n\nimport PageHeader from '@blocklet/launcher-layout/lib/page-header';\nimport Dialog from '@arcblock/ux/lib/Dialog';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport Typography from '@mui/material/Typography';\nimport TextField from '@mui/material/TextField';\nimport MenuItem from '@mui/material/MenuItem';\nimport AddIcon from '@mui/icons-material/Link';\nimport CheckIcon from '@mui/icons-material/Check';\nimport useMediaQuery from '@mui/material/useMediaQuery';\nimport styled from '@emotion/styled';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport { BLOCKLET_CONFIGURABLE_KEY, BlockletStatus, BlockletEvents } from '@blocklet/meta/lib/constants';\n\nimport Layout from '@blocklet/launcher-layout';\nimport { StepProvider, useStepContext } from '@blocklet/launcher-layout/lib/context/step';\n\nimport Button from '@arcblock/ux/lib/Button';\nimport Alert from '@arcblock/ux/lib/Alert';\nimport Tag from '@arcblock/ux/lib/Tag';\nimport SchemaForm from '@abtnode/ux/lib/schema-form';\nimport Required from '@abtnode/ux/lib/schema-form/required';\nimport AnimationWaiter from '@arcblock/ux/lib/AnimationWaiter';\nimport ResultMessage from '@blocklet/launcher-layout/lib/launch-result-message';\n\nimport {\n getDisplayName,\n isComponentBlocklet,\n isFreeBlocklet,\n urlFriendly,\n getSharedConfigObj,\n} from '@blocklet/meta/lib/util';\nimport Toast from '@abtnode/ux/lib/toast';\nimport { useSubscription } from '../../libs/ws';\n\nimport Agreement from '../launch-blocklet/step-agreement';\nimport InstallFromUrl from './install-from-url';\n\nimport BlockletList from './list';\nimport SelectStore from './select-store';\nimport { useNodeContext } from '../../contexts/node';\n\nimport { validatePathPrefix } from '../router/rule/action/utils';\nimport { ComponentPurchaseSelect } from './purchase';\n\n// import { formatError, formatPerson } from '../../libs/util';\nimport { formatToDatetime, getBlockletLogoUrl, getBlockletMetaUrl, isNewRegistryUrl } from '../../libs/util';\n\nconst requirePurchase = meta => meta.inStore && isFreeBlocklet(meta) === false;\nconst hasRequiredEnvironments = meta => (meta.environments || []).some(x => x.required);\nconst hasMissRequiredConfigs = (configsList, sharedValueMap) => {\n return configsList?.some(item => {\n return item.required && !sharedValueMap[item.key];\n });\n};\nconst getParamsName = (params = {}) => {\n return params.title || params.name;\n};\n\nconst StepContent = forwardRef(({ meta, isMobile, onStepChange }, ref) => {\n const { steps, activeStep, setActiveStepByKey, setActiveStepByIndex } = useStepContext();\n const { t, locale } = useLocaleContext();\n\n const step = steps[activeStep];\n\n useEffect(() => {\n onStepChange(activeStep);\n }, [onStepChange, activeStep]);\n\n // expose the func and activeStep\n useImperativeHandle(ref, () => ({\n setActiveStepByKey,\n setActiveStepByIndex,\n }));\n\n return (\n <DialogContentWrapper component=\"div\" className={isMobile ? 'mobileStyle' : ''}>\n <Layout\n locale={locale}\n blockletMeta={{ title: ' ', ...meta }}\n pcWidth=\"100%\"\n pcHeight=\"100%\"\n logoUrl={\n meta && meta.logo && meta.registryUrl\n ? getBlockletLogoUrl({\n did: meta.did,\n baseUrl: meta.registryUrl,\n logoPath: meta.logo,\n })\n : null\n }\n stepTip={t('blocklet.component.add')}>\n <RightContent>{step?.body && typeof step.body === 'function' ? step.body() : step.body}</RightContent>\n </Layout>\n </DialogContentWrapper>\n );\n});\n\nStepContent.propTypes = {\n meta: PropTypes.any,\n onStepChange: PropTypes.func.isRequired,\n isMobile: PropTypes.bool.isRequired,\n};\n\nStepContent.defaultProps = {\n meta: null,\n};\nexport default function AddComponent({ blocklet, children }) {\n const { t, locale } = useLocaleContext();\n const [loading, setLoading] = useState(false);\n const [editingItem, setEditingItem] = useState(null);\n const [error, setError] = useState('');\n const [showDialog, setShowDialog] = useState('');\n const [configs, setConfigs] = useState([]);\n const { api, info } = useNodeContext();\n const [purchaseData, setPurchaseData] = useState(null);\n const [isWaitingPurchase, setIsWaitingPurchase] = useState(false);\n const initParams = {\n bundleDid: '',\n componentDid: '',\n componentName: '',\n pathPrefix: '',\n name: '',\n title: '',\n configsList: [],\n configsValue: {},\n hasMissRequiredConfigs: false,\n hasEnvironmentsStep: false,\n hasRequiredEnvironments: false,\n requirePurchase: false,\n installResultProps: {},\n purchaseResultProps: {},\n showFromUrlDialog: false,\n };\n const [params, setParams] = useState(initParams);\n const [activeStep, setActiveStep] = useState(0);\n const component = useRef({});\n const stepRef = useRef({});\n const purchaseRef = useRef({});\n const isMobile = useMediaQuery(theme => theme.breakpoints.down('md'));\n\n const { meta } = component.current;\n // eslint-disable-next-line no-unused-vars\n const { setActiveStepByIndex } = stepRef.current || {};\n\n const updateParams = obj => setParams(x => ({ ...x, ...obj }));\n\n useEffect(() => {\n if (params.pathPrefix) {\n const { errMsg } = validateInput({ ...params, pathPrefix: params.pathPrefix, locale });\n setError(errMsg);\n }\n }, [params.pathPrefix]); // eslint-disable-line\n\n useEffect(() => {\n if (activeStep === 0) {\n // reset params, when step change to select component\n setParams(initParams);\n }\n }, [activeStep]); // eslint-disable-line\n\n const getComponentName = () => {\n if (component?.current?.meta) {\n return getDisplayName(component.current);\n }\n return '';\n };\n\n const setInstallErrorResult = errorMessage => {\n updateParams({\n installResultProps: {\n variant: 'error',\n title: getComponentName(),\n subTitle: errorMessage,\n footer: (\n <Button\n className=\"bottom-button\"\n data-cy=\"retry-install-component\"\n onClick={() => {\n updateParams({\n installResultProps: {},\n });\n onInstall(component.current.installInput);\n }}>\n {t('common.retry')}\n </Button>\n ),\n },\n });\n };\n\n const createBlockletEventHandler = handler => {\n return b => {\n if ((b?.meta?.did || b?.meta) === blocklet?.meta?.did) {\n handler(b);\n }\n };\n };\n\n useSubscription(\n BlockletEvents.statusChange,\n createBlockletEventHandler(e => {\n switch (e.status) {\n case BlockletStatus.upgrading:\n updateParams({\n installResultProps: {\n variant: 'success',\n title: getComponentName(),\n subTitle: t('blocklet.component.installSuccessTip'),\n },\n });\n break;\n default:\n }\n })\n );\n\n useSubscription(\n BlockletEvents.downloadFailed,\n createBlockletEventHandler(() => {\n setInstallErrorResult(t('blocklet.component.installComponentError'));\n })\n );\n\n useSubscription(\n BlockletEvents.installFailed,\n createBlockletEventHandler(() => {\n setInstallErrorResult(t('blocklet.component.installComponentError'));\n })\n );\n\n const onClose = () => {\n setLoading(false);\n setShowDialog(false);\n setParams({});\n component.current = {};\n };\n\n const onInstall = async payload => {\n const { pathPrefix: mountPoint, bundleDid, title, componentName = '', componentDid = '' } = params;\n // eslint-disable-next-line no-shadow\n const { configs = [], registryUrl, inStore, inputUrl } = component.current?.meta || {};\n const downloadTokenList = component.current?.downloadTokenList;\n const url = inStore ? getBlockletMetaUrl(registryUrl, bundleDid) : inputUrl;\n\n setLoading(true);\n\n const installInput = {\n rootDid: blocklet.meta.did,\n url,\n mountPoint,\n title,\n name: componentName,\n did: componentDid,\n // if blocklet has config, provide the configs\n ...(params.hasEnvironmentsStep && configs.length > 0\n ? {\n configs: configs.map(item => {\n return {\n ...item,\n value: params.configsValue[item.key] || '',\n };\n }),\n }\n : {}),\n ...(downloadTokenList ? { downloadTokenList } : {}),\n ...payload,\n };\n\n try {\n await api.installComponent({\n input: installInput,\n });\n if (registryUrl) {\n const { isNew, decoded } = isNewRegistryUrl(registryUrl, info.blockletRegistryList);\n if (isNew) {\n await api.addBlockletStore({ input: { url: decoded } });\n }\n }\n } catch (err) {\n Toast.error(err.message);\n console.error('installComponent error: ', err);\n setInstallErrorResult(err.message);\n } finally {\n setLoading(false);\n component.current.installInput = installInput;\n }\n };\n\n const validateInput = input => {\n const errMsg = validatePathPrefix({\n params: { ...input, did: input.bundleDid },\n blocklets: component.current?.blocklets?.map(x => ({ meta: x })) || [],\n blocklet,\n locale,\n });\n\n return { errMsg };\n };\n\n const onNext = payload => {\n const { errMsg } = validateInput({ ...params, locale });\n setError(errMsg);\n\n // the step can complete, install component\n if (activeStep === steps.length - 2) {\n updateParams({\n installResultProps: {},\n });\n onInstall(payload);\n }\n setActiveStepByIndex(x => x + 1);\n };\n\n const onCancel = () => {\n setActiveStepByIndex(x => x - 1);\n };\n\n const onGeneratePurchaseData = async () => {\n const { pathPrefix: mountPoint, bundleDid, title, componentName = '', componentDid = '' } = params;\n\n // eslint-disable-next-line no-shadow\n const { meta = {} } = component.current || {};\n const { registryUrl, inStore, inputUrl } = meta;\n const url = inStore ? getBlockletMetaUrl(registryUrl, bundleDid) : inputUrl;\n\n setPurchaseData({\n meta,\n installOpts: {\n type: 'component',\n rootDid: blocklet.meta.did,\n mountPoint,\n url,\n title,\n name: componentName,\n did: componentDid,\n },\n });\n };\n\n const onCancelPurchase = errorMessage => {\n setIsWaitingPurchase(false);\n updateParams({\n purchaseResultProps: {\n variant: 'error',\n title: getComponentName(),\n subTitle: errorMessage,\n style: {\n paddingTop: 120,\n },\n footer: (\n <Button\n className=\"bottom-button\"\n data-cy=\"retry-purchase-component\"\n onClick={() => {\n updateParams({\n purchaseResultProps: {},\n });\n }}>\n {t('common.retry')}\n </Button>\n ),\n },\n });\n };\n\n const onSuccessPurchase = ({ downloadTokenList }) => {\n component.current.downloadTokenList = downloadTokenList;\n setIsWaitingPurchase(false);\n onNext();\n };\n\n const setConfigValue = ({ chooseParams = component.current, componentDid: componentDidValue, isInit = false }) => {\n // eslint-disable-next-line no-shadow\n const { meta, registryUrl, inStore, inputUrl } = chooseParams;\n const { did: bundleDid, title, name } = meta;\n\n // deleted history list\n const list = (blocklet.settings?.children || [])\n .filter(x => x.status === 'deleted' && x.meta.bundleDid === bundleDid)\n .sort((a, b) => (new Date(a.deletedAt) > new Date(b.deletedAt) ? -1 : 1));\n setConfigs(list);\n\n const componentDid = componentDidValue || list[0]?.meta?.did || '';\n\n const newConfigs = meta.environments?.map(item => {\n const { name: key, validation, ...rest } = item;\n const formatItem = {\n // if the blocklet has validation, provide the validation (fix not inStore)\n validation: isNil(validation) ? '' : validation,\n custom: false,\n };\n\n return {\n ...rest,\n key,\n ...formatItem,\n };\n });\n\n component.current = {\n ...chooseParams,\n meta: {\n ...meta,\n // init configs from environments\n configs: newConfigs,\n registryUrl,\n inStore,\n inputUrl,\n },\n };\n\n let doc = {};\n\n // if is init, should update configs\n if (isInit) {\n const ancestors = [blocklet];\n\n // component config\n const componentSelfConfigs = newConfigs || [];\n\n // TODO: meta not include children environments/configs before install, waiting for next sprint to design\n const componentChildrenConfigs = [];\n\n // eslint-disable-next-line\n // chooseBlocklet?.children?.map(childBlocklet => {\n // // eslint-disable-next-line no-shadow\n // forEachChildSync(childBlocklet, (b, { ancestors }) => {\n // const ancestorDids = ancestors.slice(1).map(x => x.meta.did);\n\n // componentChildrenConfigs.push(\n // (b.configs || []).map(x => ({ ...x, childDid: ancestorDids.concat(b.meta.did) }))\n // );\n // });\n\n // return false;\n // });\n\n const componentAllConfigs = uniqBy(flatten([...componentSelfConfigs, ...componentChildrenConfigs]), 'key')\n .filter(x => !!x.key)\n .sort((a, b) => {\n if (a.required && !b.required) {\n return -1;\n }\n\n if (b.required && !a.required) {\n return 1;\n }\n\n return 0;\n });\n\n const sharedConfigObj = getSharedConfigObj(\n {\n configs: componentAllConfigs,\n },\n ancestors\n );\n\n const configsValue = {};\n\n const configsList = componentAllConfigs.map(item => {\n const { default: defaultValue, key, ...rest } = item;\n configsValue[key] = sharedConfigObj[key] || defaultValue;\n return {\n ...rest,\n key,\n hidden: !!BLOCKLET_CONFIGURABLE_KEY[key],\n };\n });\n\n doc = {\n ...doc,\n configsList,\n configsValue,\n hasMissRequiredConfigs: hasMissRequiredConfigs(configsList, configsValue),\n };\n }\n\n // use deleted history\n if (componentDid && componentDid !== '_empty_') {\n const config = list.find(x => x.meta.did === componentDid);\n doc = {\n ...doc,\n pathPrefix: config?.mountPoint,\n title: config?.meta.title,\n componentName: config?.meta.name,\n // use history's environments\n hasEnvironmentsStep: false,\n };\n } else {\n doc = {\n ...doc,\n pathPrefix: `/${urlFriendly(name)}`,\n title: title || '',\n componentName: '',\n hasEnvironmentsStep: component.current.meta?.environments?.length > 0,\n };\n }\n\n // eslint-disable-next-line no-shadow\n const componentRequirePurchase = requirePurchase(component.current.meta);\n\n updateParams({\n bundleDid,\n componentDid,\n ...doc,\n hasRequiredEnvironments: hasRequiredEnvironments(component.current.meta),\n requirePurchase: componentRequirePurchase,\n });\n\n if (isInit && componentRequirePurchase) {\n onGeneratePurchaseData();\n }\n };\n\n const steps = [\n {\n key: 'selectComponent',\n name: t('blocklet.component.selectComponent'),\n body: (\n <TypographyWrapper component=\"div\">\n {params.showFromUrlDialog && (\n <InstallFromUrl\n // if not set defaultUrl, the dialog will always show step 1 when the dialog is opened\n // defaultUrl={meta?.inputUrl}\n mode=\"component\"\n onCancel={() => {\n updateParams({\n showFromUrlDialog: false,\n });\n }}\n // eslint-disable-next-line no-shadow\n onSuccess={({ meta, inputUrl, inStore, registryUrl }) => {\n setConfigValue({\n chooseParams: {\n meta,\n inputUrl,\n inStore,\n registryUrl,\n },\n isInit: true,\n });\n updateParams({\n showFromUrlDialog: false,\n });\n onNext();\n }}\n handleText={{\n title: t('blocklet.component.addComponentTip.fromUrl'),\n confirm: t('blocklet.component.choose'),\n }}\n />\n )}\n <SelectStore\n extra={\n <Button\n variant=\"text\"\n color=\"primary\"\n data-cy=\"add-component-from-url\"\n onClick={() => {\n updateParams({\n showFromUrlDialog: true,\n });\n }}\n style={{ padding: '0 2px' }}>\n <AddIcon style={{ fontSize: 20, marginRight: 4 }} /> {t('blocklet.component.addComponentTip.fromUrl')}{' '}\n {/* {meta?.inputUrl ? `: ${meta.inputUrl}` : ''} */}\n </Button>\n }\n loading={loading}\n defaultValue={\n // if localStorage has registryUrl, use it\n (localStorage.getItem('blocklet-add-component-registry') &&\n info.blockletRegistryList.find(\n x => localStorage.getItem('blocklet-add-component-registry') === x.url\n )) ||\n info.blockletRegistryList.find(x => x.selected)\n }\n onChange={newRegistry => {\n setParams({});\n component.current = {};\n localStorage.setItem('blocklet-add-component-registry', newRegistry.url);\n }}>\n {({ currentRegistry }) => {\n return (\n <BlockletList\n style={\n isMobile\n ? {\n // should remove other dom height/margin\n height: 'calc(100vh - 56px - 80px - 32px - 40px )',\n }\n : {\n height: 'calc(100% - 40px)',\n }\n }\n handleBlockletRegistry={currentRegistry.url}\n // eslint-disable-next-line no-shadow\n handleButtonText={({ meta, state }) => {\n const installed = !!state?.status;\n if (requirePurchase(meta) && !installed) {\n return t('common.purchase');\n }\n return t('blocklet.component.choose');\n }}\n handleButtonClick={chooseParams => {\n setConfigValue({\n chooseParams: {\n ...chooseParams,\n inStore: true, // choose from store, must be inStore\n },\n isInit: true,\n });\n }}\n handleBlockletRender={({ blocklet: blockletItem, defaultRender }) => {\n const isChosen = params?.bundleDid && params?.bundleDid === blockletItem?.did;\n return (\n <StoreBlockletItemWrapper>\n {isChosen && (\n <div className=\"check-container\">\n <CheckIcon className=\"check-icon\" />\n </div>\n )}\n <div\n className={isChosen ? 'choose-blocklet' : ''}\n style={{\n marginLeft: 16,\n }}>\n {defaultRender}\n </div>\n </StoreBlockletItemWrapper>\n );\n }}\n extraFilter={allBlocklets => {\n // only use blocklets that are component\n return allBlocklets?.filter(x => !!isComponentBlocklet(x));\n }}\n />\n );\n }}\n </SelectStore>\n </TypographyWrapper>\n ),\n cancel: t('common.cancel'),\n confirm: getParamsName(params)\n ? t('blocklet.component.addNext', { name: getParamsName(params) })\n : t('common.next'),\n onCancel: onClose,\n onConfirm: () => {\n onNext();\n },\n },\n {\n key: 'agreement',\n name: t('launchBlocklet.introduction'),\n body: (\n <TypographyWrapper component=\"div\" className=\"agreement-wrapper\">\n <PageHeader\n title={t('launchBlocklet.introduction')}\n subTitle={t('blocklet.component.addComponentTip.introduction')}\n />\n <Agreement\n showPageHeader={false}\n blocklet={meta ? { meta } : {}}\n loading={false}\n onClickNext={onNext}\n handleDescEle={\n <>\n <p>\n <div\n // eslint-disable-next-line\n dangerouslySetInnerHTML={{\n __html: t(\n `blocklet.component.addComponentTip.${params.requirePurchase ? 'isPurchase' : 'isFree'}`,\n {\n name: getComponentName(),\n }\n ),\n }}\n />\n </p>\n <p>{t('blocklet.component.addComponentTip.belowInformation')}</p>\n </>\n }\n />\n </TypographyWrapper>\n ),\n cancel: t('common.pre'),\n confirm: t('launchBlocklet.next'),\n onCancel,\n onConfirm: () => {\n setIsWaitingPurchase(false);\n onNext();\n },\n },\n meta &&\n params.requirePurchase && {\n key: 'purchase',\n name: (\n <>\n {t('common.verifyNFT')}\n <Required />\n </>\n ),\n body: (\n <TypographyWrapper\n component=\"div\"\n className=\"flex-align-center\"\n style={{\n flexDirection: 'column',\n }}>\n {!(purchaseRef.current?.getCurrentStep?.() === 2 || isWaitingPurchase) && (\n <PageHeaderWrapper\n title={t('common.verifyNFT')}\n subTitle={t('blocklet.component.addComponentTip.verifyNFT')}\n />\n )}\n {!isEmpty(params.purchaseResultProps) ? (\n <div className=\"flex-align-center flex-justify-center\">\n <ResultMessage {...params.purchaseResultProps} />\n </div>\n ) : (\n purchaseData && (\n <ComponentPurchaseSelect\n ref={purchaseRef}\n meta={purchaseData.meta}\n // if select deleted history, use verify mode\n mode={params.componentDid ? 'verify' : 'both'}\n onCancel={onCancelPurchase}\n installOpts={purchaseData.installOpts}\n handlePaySuccess={onSuccessPurchase}\n />\n )\n )}\n </TypographyWrapper>\n ),\n disabled: purchaseRef.current?.getCurrentStep?.() === 2 || isWaitingPurchase,\n cancel: t('common.pre'),\n confirm: t('common.next'),\n onConfirm: () => {\n if (typeof purchaseRef.current.onNext === 'function') {\n purchaseRef.current.onNext();\n setIsWaitingPurchase(true);\n }\n },\n onCancel: () => {\n onCancel();\n },\n },\n {\n key: 'config',\n name: t('common.config'),\n error,\n body: (\n <TypographyWrapper component=\"div\">\n <PageHeaderWrapper title={t('common.config')} subTitle={t('blocklet.component.addComponentTip.config')} />\n {/* history */}\n {!!params.bundleDid && !!configs.length && (\n <TextField\n select\n label={t('blocklet.component.selectInstance')}\n autoComplete=\"off\"\n variant=\"outlined\"\n name=\"did\"\n helperText={t('blocklet.component.selectInstanceTip')}\n data-cy=\"component-instance-select\"\n fullWidth\n value={params.componentDid || '_empty_'}\n onChange={e => {\n setConfigValue({\n componentDid: e.target.value,\n });\n }}\n style={{ marginBottom: 32 }}\n margin=\"normal\">\n <MenuItem key=\"_empty_\" value=\"_empty_\">\n {t('blocklet.component.newInstance')}\n </MenuItem>\n {configs.map(x => {\n return (\n <MenuItem key={x.meta.did} value={x.meta.did} data-cy={x.meta.did}>\n {x.meta.title}\n <Tag style={{ marginLeft: 8 }}>{formatToDatetime(x.deletedAt)}</Tag>\n </MenuItem>\n );\n })}\n </TextField>\n )}\n\n <TextField\n label={t('blocklet.component.mountPoint')}\n autoComplete=\"off\"\n variant=\"outlined\"\n name=\"pathPrefix\"\n inputProps={{\n 'data-cy': 'mount-point-input',\n }}\n fullWidth\n helperText={t('blocklet.component.mountPointTip')}\n style={{ marginBottom: 32 }}\n margin=\"normal\"\n value={params.pathPrefix}\n onChange={e => {\n const pathPrefix = e.target.value;\n updateParams({ pathPrefix });\n }}\n />\n <TextField\n label={t('common.title')}\n autoComplete=\"off\"\n variant=\"outlined\"\n fullWidth\n style={{ marginBottom: 32 }}\n margin=\"normal\"\n value={params.title}\n helperText={t('blocklet.component.titleTip')}\n onChange={e => {\n const title = e.target.value;\n setParams({ ...params, title });\n }}\n />\n {!!error && (\n <Alert type=\"error\" style={{ width: '100%', marginTop: 8 }}>\n {error}\n </Alert>\n )}\n </TypographyWrapper>\n ),\n cancel: t('common.pre'),\n confirm: t('common.next'),\n onCancel,\n onConfirm: () => {\n onNext();\n },\n },\n meta &&\n params?.hasEnvironmentsStep && {\n key: 'environment',\n name: (\n <>\n {t('common.environment')} {params.hasRequiredEnvironments && <Required />}\n </>\n ),\n disabled: !!editingItem || params?.hasMissRequiredConfigs,\n body: () => {\n return (\n <TypographyWrapper component=\"div\">\n <PageHeaderWrapper\n title={t('common.environment')}\n subTitle={t('blocklet.component.addComponentTip.environment')}\n />\n <SchemaForm\n style={{\n marginTop: -12,\n width: '100%',\n }}\n schema={params.configsList}\n defaultValue={params.configsValue}\n // eslint-disable-next-line\n onChange={(changeValue, { action, currentItem, allValues }) => {\n if (action === 'confirm') {\n updateParams({\n hasMissRequiredConfigs: hasMissRequiredConfigs(params.configsList, allValues),\n configsValue: allValues,\n });\n }\n if (action === 'edit') {\n setEditingItem(currentItem);\n } else if (['cancel', 'confirm'].includes(action)) {\n setEditingItem(null);\n }\n }}\n />\n </TypographyWrapper>\n );\n },\n cancel: t('common.pre'),\n confirm: t('common.next'),\n onCancel,\n onConfirm: onNext,\n },\n\n {\n key: 'install',\n name: t('common.install'),\n disabled: false,\n loading: false,\n body: (\n <TypographyWrapper\n component=\"div\"\n className=\"flex-justify-center flex-align-center\"\n style={{\n flexDirection: 'column',\n }}>\n {isEmpty(params.installResultProps) ? (\n <AnimationWaiter\n message={\n <MessageDiv>\n {/* <span className=\"msg-before\"></span> */}\n {t('blocklet.component.installingCanCloseWindowTip')}\n </MessageDiv>\n }\n increaseSpeed={0.3}\n messageLoop={false}\n />\n ) : (\n <div\n style={{\n marginTop: 120,\n }}>\n <ResultMessage {...params.installResultProps} />\n </div>\n )}\n </TypographyWrapper>\n ),\n confirm: t('common.complete'),\n // onCancel: onClose,\n onConfirm: () => {\n onClose();\n // scroll to bottom\n setTimeout(() => {\n const scrollDom = document.getElementsByClassName('dashboard-main')[0];\n if (scrollDom) {\n scrollDom.scrollTop = scrollDom.scrollHeight;\n }\n }, 200);\n },\n },\n ].filter(item => item);\n\n const step = steps[activeStep] || {};\n\n const onMenuItemClick = e => {\n e.stopPropagation();\n // eslint-disable-next-line no-unused-expressions\n setShowDialog(true);\n };\n\n const isDisabled = () => {\n if (loading || step.error || !params.bundleDid) {\n return true;\n }\n\n if (activeStep > 0) {\n return !params.pathPrefix;\n }\n\n return false;\n };\n\n // show close button when step is not the last one\n const showCloseButton = activeStep < steps.length - 1;\n\n return (\n <>\n {typeof children === 'function' ? (\n children({ loading, open: onMenuItemClick })\n ) : (\n <MenuItem onClick={onMenuItemClick} className=\"component-action\" data-cy=\"action-add-component\">\n {loading ? <Spinner size={[16, 10]} /> : <AddIcon style={{ fontSize: 18, marginRight: 5 }} />}\n {t('blocklet.component.add')}\n </MenuItem>\n )}\n\n {showDialog && (\n <DialogWrapper\n title={t('blocklet.component.addWithName', {\n name: getDisplayName(blocklet),\n })}\n maxWidth={false}\n fullWidth={false}\n PaperProps={{\n style: isMobile\n ? {\n width: '100%',\n height: window.innerHeight,\n }\n : {\n maxWidth: 1350,\n minWidth: 930,\n width: '80%',\n },\n }}\n // eslint-disable-next-line no-unused-vars\n onClose={(event, reason) => {\n // disable backdropClick\n if (reason === 'backdropClick') {\n return;\n }\n steps[0]?.onCancel?.();\n }}\n showCloseButton={showCloseButton}\n disableEscapeKeyDown\n open\n actions={\n <>\n {step.cancel && (\n <Button\n onClick={e => {\n e.stopPropagation();\n step.onCancel();\n }}\n color=\"inherit\">\n {step.cancel || t('common.cancel')}\n </Button>\n )}\n {step.confirm && (\n <Button\n onClick={e => {\n e.stopPropagation();\n step.onConfirm();\n }}\n color=\"primary\"\n data-cy=\"submit-confirm-next\"\n disabled={typeof step.disabled === 'boolean' ? step.disabled : isDisabled()}\n variant=\"contained\"\n autoFocus\n title={step.confirm}\n style={{\n marginLeft: 8,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n maxWidth: '200px',\n display: 'inline-block',\n }}>\n {(typeof step.loading === 'boolean' ? step.loading : loading) && <Spinner size={[16, 10]} />}\n {step.confirm}\n </Button>\n )}\n </>\n }>\n <StepProvider steps={steps} mode=\"memory\">\n <StepContent\n ref={stepRef}\n meta={meta}\n isMobile={isMobile}\n onStepChange={newStep => {\n setActiveStep(newStep);\n }}\n />\n </StepProvider>\n </DialogWrapper>\n )}\n </>\n );\n}\n\nAddComponent.propTypes = {\n children: PropTypes.any,\n blocklet: PropTypes.object.isRequired,\n};\n\nAddComponent.defaultProps = {\n children: null,\n};\n\nconst DialogWrapper = styled(Dialog)`\n .MuiDialogContent-root {\n padding-left: 0;\n padding-right: 0;\n padding-bottom: 0;\n }\n .MuiDialogActions-root {\n padding: 16px 24px;\n }\n`;\n\nconst TypographyWrapper = styled(Typography)`\n width: 100%;\n height: 100%;\n`;\n\nconst RightContent = styled.div`\n padding: 34px 24px 24px;\n width: 100%;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: flex-start;\n\n .bottom-button {\n min-width: 200px;\n }\n\n // blocklet-select-side\n aside {\n width: 140px;\n }\n`;\n\nconst isMobileDialogContent = props => {\n if (props.isMobile) {\n return `\n height: calc(100vh - 56px - 64px - 48px);\n `;\n }\n return '';\n};\n\nconst DialogContentWrapper = styled(DialogContentText)`\n ${({ className }) => {\n // mobile extra style\n if (className === 'mobileStyle') {\n return `\n & > div{\n height: 100%;\n }\n .root-header {\n .app-name-content {\n display: none;\n }\n }\n\n // content-panel\n .root-header + div{\n padding-top: 0;\n position: relative;\n & > div {\n padding-top: 0;\n }\n }\n\n `;\n }\n return `\n height: 72vh;\n position: relative;\n .root-header {\n z-index: auto !important;\n position: fixed !important;\n }\n & > div {\n height: 100%;\n width: 100%;\n max-width: 100%;\n & > div {\n max-height: unset !important;\n max-width: 100%;\n & > div {\n // left-panel\n &:first-child {\n padding-top: 0;\n // padding-left: 0;\n width: 25%;\n min-width: 240px;\n & > div:first-child {\n display: none;\n }\n // step\n & > div:last-child {\n // margin-top: 32px;\n margin-top: 0;\n }\n }\n // right-panel\n &:last-child {\n padding-top: 0;\n padding-right: 24px;\n overflow-y: auto;\n .app-content {\n padding: 0 0 24px 0;\n }\n .button-container {\n padding-right: 0;\n }\n }\n }\n }\n }\n\n `;\n }}\n\n & .flex-justify-center {\n display: flex;\n justify-content: center;\n }\n\n & .flex-align-center {\n display: flex;\n height: 100%;\n align-items: center;\n ${props => isMobileDialogContent(props)}\n }\n\n & .agreement-wrapper {\n ${props => isMobileDialogContent(props)}\n max-height: 60vh;\n .eula-trigger {\n padding-right: 0;\n }\n .next-button {\n display: none;\n }\n }\n\n & .connect {\n background: white;\n }\n`;\n\nconst PageHeaderWrapper = styled(PageHeader)`\n margin-bottom: 24px;\n`;\n\nconst StoreBlockletItemWrapper = styled.div`\n position: relative;\n\n .choose-blocklet {\n background-color: rgb(236, 251, 253);\n border-color: rgb(236, 251, 253);\n border-radius: 8px;\n }\n\n .check-container {\n position: absolute;\n right: 0;\n bottom: 0;\n display: flex;\n justify-content: flex-end;\n align-items: flex-end;\n width: 30px;\n height: 30px;\n border-radius: 0 0 8px 0;\n color: ${props => props.theme.palette.common.white};\n overflow: hidden;\n transition: all ease 0.3s;\n &:after {\n position: absolute;\n z-index: 0;\n display: block;\n width: 0;\n height: 0;\n border-top: transparent solid 15px;\n border-left: transparent solid 15px;\n border-bottom: ${props => props.theme.palette.primary.main} solid 15px;\n border-right: ${props => props.theme.palette.primary.main} solid 15px;\n transition: all ease 0.1s;\n content: '';\n }\n\n .check-icon {\n position: relative;\n z-index: 2;\n margin: 0 1px 1px 0;\n font-size: 16px;\n transition: all ease 0.2s;\n }\n }\n`;\n\nconst MessageDiv = styled.div`\n color: ${props => props.theme.palette.primary.main};\n .msg-before {\n display: inline-block;\n color: #aaa;\n font-size: 14px;\n margin-right: 6px;\n }\n`;\n","import { useState, useContext } from 'react';\nimport styled from '@emotion/styled';\nimport PropTypes from 'prop-types';\n\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport IconButton from '@mui/material/IconButton';\nimport Tooltip from '@mui/material/Tooltip';\nimport Typography from '@mui/material/Typography';\nimport Radio from '@mui/material/Radio';\nimport RadioGroup from '@mui/material/RadioGroup';\nimport FormControlLabel from '@mui/material/FormControlLabel';\n\nimport Confirm from '../confirm';\n\nexport default function DeleteComponent({ component, remove, disabled, tip }) {\n const { t } = useContext(LocaleContext);\n const [loading, setLoading] = useState(false);\n const [deleteSetting, setDeleteSetting] = useState(null);\n\n const deleteComponent = async param => {\n setLoading(true);\n await remove(param.component, param.removeType);\n setLoading(false);\n setDeleteSetting(null);\n };\n\n const componentDisabled = disabled || loading;\n\n const btn = (\n <StyledButton\n disabled={componentDisabled}\n onClick={() =>\n setDeleteSetting({\n title: t('blocklet.component.delete'),\n // eslint-disable-next-line react/no-unstable-nested-components\n description: (params, setParams) => (\n <Typography component=\"div\">\n <Typography gutterBottom>{t('blocklet.action.removeComponentDescription')}</Typography>\n <RadioGroup\n name=\"removeType\"\n value={params.removeType}\n onChange={e => setParams({ ...params, removeType: e.target.value })}>\n <FormControlLabel\n value=\"keepData\"\n control={<Radio />}\n label={t('blocklet.action.removeComponentKeepData')}\n />\n <FormControlLabel\n value=\"complete\"\n control={<Radio />}\n label={t('blocklet.action.removeComponentComplete')}\n />\n </RadioGroup>\n </Typography>\n ),\n confirm: t('common.confirm'),\n cancel: t('common.cancel'),\n params: { component, removeType: 'keepData' },\n onConfirm: deleteComponent,\n onCancel: () => setDeleteSetting(null),\n })\n }\n data-cy=\"delete-component-btn\">\n <DeleteIcon disabled={componentDisabled} />\n </StyledButton>\n );\n\n const btnWithToolTip = (\n <Tooltip title={tip || t('common.delete')}>\n <span>{btn}</span>\n </Tooltip>\n );\n\n return (\n <>\n {btnWithToolTip}\n {deleteSetting && (\n <Confirm\n title={deleteSetting.title}\n description={deleteSetting.description}\n confirm={deleteSetting.confirm}\n cancel={deleteSetting.cancel}\n params={deleteSetting.params}\n onConfirm={deleteSetting.onConfirm}\n onCancel={deleteSetting.onCancel}\n />\n )}\n </>\n );\n}\n\nDeleteComponent.propTypes = {\n component: PropTypes.object.isRequired,\n remove: PropTypes.func,\n disabled: PropTypes.bool,\n tip: PropTypes.string,\n};\n\nDeleteComponent.defaultProps = {\n remove: async () => {},\n disabled: false,\n tip: '',\n};\n\nconst StyledButton = styled(IconButton)`\n &.Mui-disabled {\n opacity: 0.5;\n }\n`;\n","/* eslint-disable react/no-unstable-nested-components */\n/* eslint-disable react/prop-types */\n/* eslint-disable react/destructuring-assignment */\n/* eslint-disable react/jsx-one-expression-per-line */\nimport { useState, useContext, useMemo } from 'react';\nimport styled from '@emotion/styled';\nimport PropTypes from 'prop-types';\n\nimport MaterialTable from '@material-table/core';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\nimport Alert from '@mui/material/Alert';\nimport IconButton from '@mui/material/IconButton';\nimport EditIcon from '@mui/icons-material/Edit';\nimport { BLOCKLET_MODES, BLOCKLET_CONFIGURABLE_KEY } from '@blocklet/meta/lib/constants';\nimport { getComponentMissingConfigs, getDisplayName, getSharedConfigObj } from '@blocklet/meta/lib/util';\n\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Dialog from '@arcblock/ux/lib/Dialog';\nimport Toast from '@abtnode/ux/lib/toast';\n\nimport { useNodeContext } from '../../contexts/node';\nimport ClickToCopy from '../click-to-copy';\nimport tableIcons from '../table-icons';\nimport TableStyle from '../table';\nimport blockletIcons from './icons';\nimport Permission from '../permission';\nimport { formatError, isInstalling, isValidClusterSize } from '../../libs/util';\n\nexport default function ComponentConfiguration({ blocklet, ancestors, onChangeConfig, children, ...rest }) {\n const [showDialog, setShowDialog] = useState('');\n const node = useNodeContext();\n const { t } = useContext(LocaleContext);\n const dids = [...ancestors.map(x => x.meta.did), blocklet.meta.did];\n\n const onConfigChanged = newBlocklet => {\n Toast.success(t('blocklet.config.changedTip'));\n onChangeConfig(newBlocklet);\n };\n const isDev = useMemo(() => blocklet.mode === BLOCKLET_MODES.DEVELOPMENT, [blocklet.mode]);\n const isConfigEditable = x => x.custom;\n\n const name = ancestors\n .concat(blocklet)\n .map(x => getDisplayName(x, true))\n .join(' / ');\n\n if (isInstalling(blocklet.status)) {\n return null;\n }\n\n if (blocklet.status === 'unknown' && isInstalling(blocklet.status)) {\n return null;\n }\n\n const onClose = () => {\n setShowDialog(false);\n };\n\n const onOpen = e => {\n e.stopPropagation();\n // eslint-disable-next-line no-unused-expressions\n setShowDialog(true);\n };\n\n const onAddConfig = async data => {\n if (!data.key.trim() || !data.value.trim()) {\n Toast.error(t('blocklet.config.environment.keyValueRequired'));\n return;\n }\n\n if (data.key.startsWith('BLOCKLET_')) {\n Toast.error(t('blocklet.config.environment.invalidKey'));\n return;\n }\n\n data.custom = true;\n\n const result = await node.api.configBlocklet({ input: { did: dids, configs: [data] } });\n if (result.code === 'ok') {\n onConfigChanged(result.blocklet);\n }\n };\n\n const onEditConfig = async (newData, oldData) => {\n // only required field can't be empty\n if (newData.required && (!newData.key.trim() || !newData.value.trim())) {\n Toast.error(t('blocklet.config.environment.keyValueRequired'));\n return;\n }\n\n if (newData.key.startsWith('BLOCKLET_') && !BLOCKLET_CONFIGURABLE_KEY[newData.key]) {\n Toast.error(t('blocklet.config.environment.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: dids, 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 => {\n if (data.required) {\n Toast.error(t('blocklet.config.environment.deleteForbidden'));\n return;\n }\n\n const result = await node.api.configBlocklet({\n input: { did: dids, configs: [{ key: data.key }] },\n });\n if (result.code === 'ok') {\n onConfigChanged(result.blocklet);\n }\n };\n\n // configs\n const componentConfigs = (blocklet.configs || []).filter(x => !BLOCKLET_CONFIGURABLE_KEY[x.key]);\n const sharedConfigObj = getSharedConfigObj(blocklet, ancestors);\n const missingRequiredConfigs = getComponentMissingConfigs(blocklet, ancestors);\n const configs = componentConfigs.map(x => ({\n ...x,\n value: sharedConfigObj[x.key] || x.value,\n }));\n\n const hasBWAConfig = configs.some(x => x.key && x.key.startsWith('BWA_'));\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 onColumns = () => [\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 }}>\n {d.key}\n </ClickToCopy>\n ),\n editComponent: props => {\n const { value, rowData, onChange } = props;\n return (\n <EditDiv>\n <TextField\n fullWidth\n size=\"small\"\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.environment.key')}\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 <ClickToCopy value={d.value}>{d.value}</ClickToCopy>;\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 size=\"small\"\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.environment.value')}\n margin=\"dense\"\n autoFocus\n />\n {rowData.description && <div style={{ marginLeft: 12 }}>{rowData.description}</div>}\n </EditDiv>\n );\n },\n },\n ];\n\n return [\n typeof children === 'function' ? (\n children({ open: onOpen })\n ) : (\n <IconButton onClick={onOpen} data-cy=\"action-config-component\">\n <EditIcon />\n </IconButton>\n ),\n showDialog && (\n <StyledDialog\n open\n fullWidth\n maxWidth=\"md\"\n title={t('common.configuration')}\n onClose={onClose}\n PaperProps={{ style: { minHeight: 'auto' } }}>\n <Div component=\"div\" {...rest}>\n {!!missingRequiredConfigs.length && (\n <Alert severity=\"error\" style={{ marginTop: 24 }}>\n {t('blocklet.config.missingRequired')}\n </Alert>\n )}\n {hasBWAConfig && <Alert severity=\"info\">{t('blocklet.config.environment.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={<h4>{name}</h4>}\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 </Div>\n </StyledDialog>\n ),\n ];\n}\n\nComponentConfiguration.propTypes = {\n blocklet: PropTypes.object.isRequired,\n ancestors: PropTypes.array,\n onChangeConfig: PropTypes.func,\n children: PropTypes.any,\n};\n\nComponentConfiguration.defaultProps = {\n onChangeConfig: () => {},\n ancestors: [],\n children: null,\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\nconst StyledDialog = styled(Dialog)`\n .MuiDialogContent-root {\n padding-top: 0;\n margin-top: -32px;\n }\n .MuiToolbar-root {\n padding-right: 12px;\n }\n .ux-dialog_right {\n padding-right: 20px;\n }\n`;\n","import { useState, useContext, useEffect } from 'react';\nimport styled from '@emotion/styled';\nimport PropTypes from 'prop-types';\nimport semver from 'semver';\n\nimport Dialog from '@mui/material/Dialog';\nimport Box from '@mui/material/Box';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogActions from '@mui/material/DialogActions';\nimport UpdateIcon from '@mui/icons-material/Update';\nimport IconButton from '@mui/material/IconButton';\nimport Badge from '@mui/material/Badge';\nimport SettingsOutlinedIcon from '@mui/icons-material/SettingsOutlined';\nimport InfoOutlinedIcon from '@mui/icons-material/InfoOutlined';\nimport LaunchIcon from '@mui/icons-material/Launch';\nimport Grid from '@mui/material/Grid';\nimport Collapse from '@mui/material/Collapse';\nimport Tooltip from '@mui/material/Tooltip';\nimport ArrowForwardIcon from '@mui/icons-material/ArrowForward';\nimport AddIcon from '@mui/icons-material/Add';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\nimport Alert from '@mui/material/Alert';\n\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport InfoRow from '@arcblock/ux/lib/InfoRow';\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\nimport Empty from '@arcblock/ux/lib/Empty';\nimport {\n getAppMissingConfigs,\n getComponentMissingConfigs,\n getDisplayName,\n forEachChildSync,\n} from '@blocklet/meta/lib/util';\nimport Toast from '@abtnode/ux/lib/toast';\n\nimport Tag from '../tag';\nimport DidAddress from '../did-address';\nimport { useNodeContext } from '../../contexts/node';\nimport { useRoutingContext } from '../../contexts/routing';\nimport { useDeletingBlockletContext } from '../../contexts/deleting-blocklets';\nimport { useDomainStatusContext } from '../../contexts/domain-status';\nimport { formatPerson, isInProgress, formatError, sleep, getBlockletUrlParams } from '../../libs/util';\nimport BlockletAvatar from './avatar';\nimport AddComponent from './add-component';\nimport DeleteComponent from './delete-component';\nimport BlockletVersion from './version';\nimport BlockletStatus from './status';\nimport RuntimeInfo from './runtime-info';\nimport Permission from '../permission';\nimport BlockletMode from './mode';\nimport ComponentConfiguration from './component-configuration';\nimport BlockletSource from './blocklet-source';\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\nconst getSourceInfo = blocklet => {\n const { source, deployedFrom, bundleSource } = blocklet;\n\n if (source) {\n return { source, deployedFrom };\n }\n\n if (!bundleSource) {\n return { source: 'upload', deployedFrom };\n }\n\n if (bundleSource.url) {\n return {\n source: 'url',\n deployedFrom: deployedFrom || Array.isArray(bundleSource.url) ? bundleSource.url[0] : bundleSource.url,\n };\n }\n\n if (bundleSource.store) {\n return {\n source: 'registry',\n deployedFrom: deployedFrom || Array.isArray(bundleSource.store) ? bundleSource.store[0] : bundleSource.store,\n };\n }\n\n return {};\n};\n\nfunction ComponentItem({ blocklet, ancestors, depth, onRemove }) {\n const { t, locale } = useContext(LocaleContext);\n const { siteMap, getBlockletUrl } = useRoutingContext();\n const [expand, setExpand] = useState(true);\n const [componentInfo, setComponentInfo] = useState();\n\n const { recommendedDomainStatus } = useDomainStatusContext();\n const domainStatus = recommendedDomainStatus || {};\n const { domain = '' } = domainStatus;\n\n const { deletingBlocklets: deletingComponents } = useDeletingBlockletContext();\n\n let { status } = blocklet;\n if (depth <= 1 && deletingComponents.includes(blocklet.meta.did)) {\n status = 'deleting';\n }\n\n const mountPoint = `/${ancestors.map(x => x.mountPoint || '/').join('/')}/${blocklet.mountPoint || '/'}`.replace(\n /\\/+/g,\n '/'\n );\n\n // hide root's status and only display specific status\n const showStatus = !!ancestors.length && ['downloading', 'deleting', 'starting'].includes(status);\n\n const canExpand = depth > 0 && blocklet.children.length > 0;\n const expandIcon = (\n <IconButton size=\"small\">\n {expand ? <ExpandMoreIcon fontSize=\"inherit\" /> : <ChevronRightIcon fontSize=\"inherit\" />}\n </IconButton>\n );\n\n const root = ancestors[0] || blocklet;\n\n const href = getBlockletUrl({\n did: root.meta.did,\n domain: { value: domain },\n mountPoint,\n siteMap,\n params: getBlockletUrlParams(root, locale),\n });\n\n const renderRows = rows =>\n rows.map(row => {\n if (row.name === t('common.did') || row.name === t('blocklet.appId')) {\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 sourceInfo = componentInfo ? getSourceInfo(componentInfo) : {};\n\n const componentRows = componentInfo\n ? [\n { name: t('common.name'), value: getDisplayName(componentInfo, true) },\n {\n name: t('common.version'),\n value: <BlockletVersion blocklet={componentInfo} checkUpgrade={false} />,\n },\n {\n name: t('common.status'),\n value: <BlockletStatus status={status} source={componentInfo.source} />,\n },\n {\n name: t('common.mountPoint'),\n value: mountPoint,\n },\n {\n name: t('common.group'),\n value: <Tag type=\"success\">{componentInfo.meta.group}</Tag>,\n },\n {\n name: t('blocklet.overview.source'),\n value: <BlockletSource sourceInfo={sourceInfo} blocklet={blocklet} />,\n },\n { name: t('blocklet.overview.deployedFrom'), value: sourceInfo.deployedFrom || '-' },\n { name: t('common.did'), value: <DidAddress did={componentInfo.meta.did} /> },\n { name: t('common.author'), value: formatPerson(componentInfo.meta.author) },\n { name: t('common.runtimeInfo'), value: <RuntimeInfo blocklet={componentInfo} noRunningMessage={t('--')} /> },\n {\n name: t('common.engine'),\n value: getEngineRows(componentInfo.engine, t).map(({ name, value }) => (\n <InfoRow style={{ marginBottom: 4 }} key={name} nameWidth={120} name={name}>\n {value}\n </InfoRow>\n )),\n },\n ].filter(Boolean)\n : [];\n\n let deleteDisabledTip = '';\n if (depth !== 1 || !blocklet.dynamic) {\n deleteDisabledTip = t('blocklet.component.tip.notDynamic');\n } else if (isInProgress(root.status) || (depth === 1 && deletingComponents.includes(blocklet.meta.did))) {\n deleteDisabledTip = t('blocklet.component.tip.stopBlocklet');\n }\n\n return [\n (depth > 0 || blocklet.meta.group !== 'gateway') && (\n <Box\n display=\"flex\"\n key=\"group-not-gateway-box\"\n py={2}\n className=\"component-item\"\n justifyContent=\"space-between\"\n alignItems=\"center\">\n <Box\n pl={Math.max((depth - 1) * 2, 0)}\n width={{ xs: 300, md: 400 }}\n display=\"flex\"\n key={blocklet}\n alignItems=\"center\"\n style={{ cursor: canExpand ? 'pointer' : 'cursor' }}\n onClick={() => canExpand && setExpand(!expand)}>\n {canExpand ? expandIcon : <Box width={28} />}\n <BlockletAvatar blocklet={blocklet} ancestors={ancestors} />\n <Box ml=\"16px\">\n <Box style={{ color: '#222', fontSize: 18 }}>{getDisplayName(blocklet, true)}</Box>\n <Box display=\"flex\" alignItems=\"center\">\n <BlockletVersion blocklet={blocklet} checkUpgrade={false} />\n <BlockletMode style={{ marginLeft: 4 }} mode={blocklet.mode || ''} />\n {showStatus && <BlockletStatus style={{ marginLeft: 4 }} status={status} source={blocklet.source} />}\n {/* <BlockletStatus style={{ marginLeft: 4 }} status={status} source={blocklet.source} /> */}\n </Box>\n </Box>\n </Box>\n\n <Box key={mountPoint} sx={{ display: { xs: 'none', md: 'flex' } }} alignItems=\"center\" flexGrow=\"1\">\n <a target=\"_blank\" href={href} rel=\"noopener noreferrer\" title={href}>\n <Box\n maxWidth={400}\n sx={{ color: 'secondary.main', fontSize: 18, px: 2 }}\n overflow=\"hidden\"\n whiteSpace=\"nowrap\"\n textOverflow=\"ellipsis\">\n {mountPoint}\n </Box>\n </a>\n </Box>\n\n <Box key=\"actions\">\n <Tooltip title={t('common.visit')}>\n <a target=\"_blank\" href={href} rel=\"noopener noreferrer\" title={href}>\n <IconButton>{domainStatus.loading ? <Spinner size={12} /> : <LaunchIcon />}</IconButton>\n </a>\n </Tooltip>\n <Tooltip title={t('common.overview')}>\n <IconButton onClick={() => setComponentInfo(blocklet)}>\n <InfoOutlinedIcon />\n </IconButton>\n </Tooltip>\n <ComponentConfiguration blocklet={blocklet} ancestors={ancestors}>\n {({ open }) => (\n <Tooltip key=\"config\" title={t('common.config')}>\n <StyledBadge\n color=\"error\"\n badgeContent=\"\"\n variant=\"dot\"\n invisible={!getComponentMissingConfigs(blocklet, ancestors).length}>\n <IconButton onClick={open}>\n <SettingsOutlinedIcon />\n </IconButton>\n </StyledBadge>\n </Tooltip>\n )}\n </ComponentConfiguration>\n <DeleteComponent\n blocklet={root}\n component={blocklet}\n remove={onRemove}\n disabled={!!deleteDisabledTip}\n tip={deleteDisabledTip}\n />\n </Box>\n </Box>\n ),\n <Box\n ml={Math.max((depth - 1) * 2, 0)}\n key=\"group-collapse-box\"\n sx={{ borderBottom: 1, borderColor: 'rgba(0,0,0,0.12)' }}\n />,\n blocklet.children?.length ? (\n <Collapse key=\"blocklet-collapse\" in={expand}>\n {blocklet.children.map(x => (\n <ComponentItem\n key={`${depth + 1}-${x.meta.did}`}\n blocklet={x}\n ancestors={[...ancestors, blocklet]}\n depth={depth + 1}\n onRemove={onRemove}\n />\n ))}\n </Collapse>\n ) : null,\n !!componentInfo && (\n <Dialog\n open\n key=\"base-info-dialog\"\n fullWidth\n maxWidth=\"md\"\n onClose={() => {\n setComponentInfo(null);\n }}>\n <Box key=\"dialog-wrapper\" paddingY={1.5}>\n <DialogTitle>{t('common.componentBasicInfo')}</DialogTitle>\n <DialogContent>{renderRows(componentRows)}</DialogContent>\n </Box>\n </Dialog>\n ),\n ];\n}\n\nComponentItem.propTypes = {\n blocklet: PropTypes.object.isRequired,\n ancestors: PropTypes.array,\n depth: PropTypes.number,\n onRemove: PropTypes.func,\n};\n\nComponentItem.defaultProps = {\n ancestors: [],\n depth: 0,\n onRemove: () => {},\n};\n\nconst StyledBadge = styled(Badge)`\n .BaseBadge-badge {\n top: ${props => props.top * 8 || 6}px;\n right: ${props => props.right * 8 || 6}px;\n }\n`;\n\nexport default function BlockletComponent({ blocklet, onChangeConfig, onUpdate, ...rest }) {\n const { t } = useContext(LocaleContext);\n const { api } = useNodeContext();\n const { addDeletingDid, removeDeletingDid, matchDeletingDid } = useDeletingBlockletContext();\n const [loading, setLoading] = useState(false);\n const [updateConfirm, setUpdateConfirm] = useState(null);\n const [showUpdateDot, setShowUpdateDot] = useState(false);\n\n const components = [...blocklet.children] || [];\n if (blocklet.meta.group !== 'gateway') {\n // add root blocklet to table list\n components.unshift(blocklet);\n }\n\n matchDeletingDid(components.map(e => e.meta.did));\n\n useEffect(() => {\n if (blocklet && !isInProgress(blocklet.status)) {\n api\n .getLatestBlockletVersion({ input: { did: blocklet.meta.did, version: blocklet.meta.version } })\n .then(res => {\n const { version } = res.data || {};\n\n if (version && semver.gt(version, blocklet.meta.version)) {\n setShowUpdateDot(true);\n }\n })\n .catch(err => {\n console.error(err.message);\n });\n }\n }, [blocklet?.meta?.did]); // eslint-disable-line\n\n const checkForUpdates = async () => {\n if (loading) {\n return;\n }\n\n setLoading(true);\n\n try {\n // check app version\n const { version, registryUrl } =\n (\n await api.getLatestBlockletVersion({\n input: { did: blocklet.meta.did, version: blocklet.meta.version },\n })\n ).data || {};\n\n if (version && semver.gt(version, blocklet.meta.version)) {\n setUpdateConfirm({\n type: 'app',\n params: {\n version,\n registryUrl,\n },\n list: [{ name: getDisplayName(blocklet), version: blocklet.meta.version, newVersion: version }],\n });\n setLoading(false);\n return;\n }\n\n // check child component version\n const { updateId, updateList } =\n (await api.checkChildBlockletsForUpdates({ input: { did: blocklet.meta.did } })).preUpdateInfo || {};\n\n setLoading(false);\n\n if (!updateId) {\n Toast.info(t('blocklet.component.noUpdate'));\n return;\n }\n\n const list = [];\n forEachChildSync(blocklet, (b, { id, ancestors }) => {\n const updateItem = updateList.find(x => x.id === id);\n if (updateItem) {\n const name = ancestors\n .slice(1)\n .concat(b)\n .map(x => x.meta.title || x.meta.name)\n .join(' / ');\n list.push({\n name,\n version: b.meta.version,\n newVersion: updateItem.meta.version,\n });\n }\n });\n\n setUpdateConfirm({\n type: 'child',\n params: {\n updateId,\n },\n list,\n });\n } catch (err) {\n setLoading(false);\n Toast.error(formatError(err));\n }\n };\n\n const onConfirmUpdate = async () => {\n if (loading) {\n return;\n }\n\n let fn;\n let input;\n if (updateConfirm.type === 'app') {\n fn = api.upgradeBlocklet.bind(api);\n input = {\n did: blocklet.meta.did,\n version: updateConfirm.params.version,\n registryUrl: updateConfirm.params.registryUrl || '',\n };\n } else {\n fn = api.updateChildBlocklets.bind(api);\n input = { updateId: updateConfirm.params.updateId, rootDid: blocklet.meta.did };\n }\n\n try {\n setLoading(true);\n await fn({ input });\n setLoading(false);\n setUpdateConfirm(null);\n setShowUpdateDot(null);\n } catch (error) {\n setLoading(false);\n Toast.error(formatError(error));\n }\n };\n\n const removeComponent = async (d, type) => {\n addDeletingDid(d.meta.did);\n try {\n await api.deleteComponent({\n input: { did: d.meta.did, keepData: type === 'keepData', rootDid: blocklet.meta.did },\n });\n await sleep(800);\n Toast.success(t('common.deleteSuccess'));\n } catch (err) {\n Toast.error(formatError(err));\n\n removeDeletingDid(d.meta.did);\n }\n };\n\n const missingRequiredConfigs = getAppMissingConfigs(blocklet);\n\n return (\n <Div component=\"div\" {...rest}>\n {!!missingRequiredConfigs.length && (\n <Alert style={{ margin: '12px 0' }} severity=\"error\">\n {t('blocklet.config.missingRequired')}\n </Alert>\n )}\n <Box display=\"flex\" justifyContent=\"space-between\" alignItems=\"center\">\n <div className=\"title\">\n {t('common.components')}\n <Permission permission=\"mutate_blocklet\">\n <StyledBadge top={1.2} right={0.4} color=\"error\" badgeContent=\"\" variant=\"dot\" invisible={!showUpdateDot}>\n <Button\n disabled={loading || isInProgress(blocklet.status)}\n color=\"secondary\"\n onClick={() => {\n checkForUpdates();\n }}\n data-cy=\"check-for-updates\">\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 </StyledBadge>\n </Permission>\n </div>\n <Permission permission=\"mutate_blocklet\">\n <AddComponent blocklet={blocklet}>\n {({ open }) => (\n <Button\n disabled={loading || isInProgress(blocklet.status)}\n variant=\"text\"\n color=\"primary\"\n data-cy=\"add-component\"\n onClick={open}>\n <AddIcon style={{ fontSize: '1.3em', marginRight: 4 }} />\n {t('blocklet.component.add')}\n </Button>\n )}\n </AddComponent>\n </Permission>\n </Box>\n {components && components.length ? (\n [\n <Box key={`top-blocklet-${blocklet.meta.did}`} mt={2} ml={{ xs: '-16px', md: '-28px' }}>\n <ComponentItem key={`0-${blocklet.meta.did}`} blocklet={blocklet} onRemove={removeComponent} />\n </Box>,\n ]\n ) : (\n <Box mt={8}>\n <Empty>{t('blocklet.component.noComponent')}</Empty>\n </Box>\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 mt={3} key={`${x.name}-${x.newVersion}`}>\n <Box item xs={5}>\n {x.name}\n </Box>\n <Grid fontSize=\"h6.fontSize\" container spacing={3} alignItems=\"center\">\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 </Grid>\n </Box>\n ))}\n </Box>\n <DialogActions style={{ padding: '8px 24px 24px' }}>\n <Button\n onClick={() => {\n setUpdateConfirm(null);\n }}>\n {t('common.cancel')}\n </Button>\n <Button\n onClick={e => {\n e.stopPropagation();\n onConfirmUpdate();\n }}\n color=\"primary\"\n disabled={loading}\n variant=\"contained\"\n autoFocus>\n {loading && <Spinner size={[16, 10]} />}\n {t('common.update')}\n </Button>\n </DialogActions>\n </Box>\n </Dialog>\n )}\n </Div>\n );\n}\n\nBlockletComponent.propTypes = {\n blocklet: PropTypes.object.isRequired,\n onChangeConfig: PropTypes.func,\n onUpdate: PropTypes.func,\n};\n\nBlockletComponent.defaultProps = {\n onChangeConfig: () => {},\n onUpdate: () => {},\n};\n\nconst Div = styled.div`\n .title {\n font-size: 1.2rem;\n font-weight: bold;\n margin-bottom: ${props => props.theme.spacing(1)};\n }\n\n @keyframes showDelay {\n 0% {\n opacity: 0;\n }\n\n 100% {\n opacity: 1;\n }\n }\n\n .component-item {\n animation: showDelay 0.75s ease 1;\n }\n`;\n","import PropTypes from 'prop-types';\nimport Box from '@mui/material/Box';\nimport { getDisplayName } from '@blocklet/meta/lib/util';\nimport { LogTerminalGroup } from '../logs/log-terminal';\n\n/**\n * - heights:\n * - header: 64\n * - footer:\n * - xs: 57 + 64\n * - sm: 109 + 64\n * - main content top:\n * - xs: 211 + 32 + 16\n * - md: 160 + 32 + 16\n * - content height:\n * - xs (Mobile) = 100vh - 444\n * - sm (Mobile) = 100vh - 508\n * - md (PC) = 100vh - 445\n */\nexport default function BlockletLog({ blocklet, ...rest }) {\n const initialData = [\n 'Tip: this tab will only show runtime logs. Please go to \"Blocklet Server\" to view other lifecycle logs of the blocklet (install/start/stop...)',\n '\\r\\n\\r\\n',\n ];\n return (\n <Box height={{ xs: 'calc(100vh - 444px)', sm: 'calc(100vh - 508px)', md: 'calc(100vh - 445px)' }} {...rest}>\n <LogTerminalGroup\n name={getDisplayName(blocklet)}\n logId={`blocklet-${blocklet.meta.did}`}\n initialData={initialData}\n />\n </Box>\n );\n}\nBlockletLog.propTypes = {\n blocklet: PropTypes.object.isRequired,\n};\n","import { useState } from 'react';\nimport styled from '@emotion/styled';\nimport PropTypes from 'prop-types';\n\nimport Dialog from '@arcblock/ux/lib/Dialog';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Typography from '@mui/material/Typography';\nimport TextField from '@mui/material/TextField';\nimport Stepper from '@mui/material/Stepper';\nimport Step from '@mui/material/Step';\nimport StepLabel from '@mui/material/StepLabel';\nimport Box from '@mui/material/Box';\nimport Link from '@mui/material/Link';\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 { useSessionContext } from '../../contexts/session';\nimport { formatError } from '../../libs/util';\nimport { genExportedMeta, downloadExportedSource, getNameByTitle } from './util';\n\n// eslint-disable-next-line no-unused-vars\nexport default function ExportBlocklet({ blocklet, children }) {\n const { session } = useSessionContext();\n const [show, setShow] = useState(false);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState('');\n const { t } = useLocaleContext();\n const [stepIndex, setStepIndex] = useState(0);\n const [name, setName] = useState(getNameByTitle(blocklet.meta.title));\n\n const uploadedComponents = blocklet.children.filter(x => !x.bundleSource);\n\n const onCancel = () => {\n setShow(false);\n setName('');\n setStepIndex(0);\n };\n\n const onExport = async () => {\n setLoading(true);\n try {\n const meta = genExportedMeta(name, blocklet);\n\n await downloadExportedSource(meta, { holder: session.user.fullName });\n\n setStepIndex(1);\n } catch (err) {\n const errMsg = `Blocklet Install failed: ${formatError(err)}`;\n setError(errMsg);\n } finally {\n setLoading(false);\n }\n };\n\n const steps = [\n {\n label: t('blocklet.export.exportSource'),\n content: (\n <>\n <Typography component=\"div\">\n <TextField\n style={{ marginBottom: 24 }}\n label={t('blocklet.export.name')}\n autoComplete=\"off\"\n variant=\"outlined\"\n fullWidth\n autoFocus\n margin=\"dense\"\n value={name}\n onChange={e => {\n setError(null);\n setName(e.target.value);\n }}\n disabled={loading}\n helperText={t('blocklet.export.nameTip')}\n />\n </Typography>\n {!!uploadedComponents.length && (\n <Alert type=\"warning\" style={{ width: '100%', marginTop: 8 }}>\n {t('blocklet.export.uploadedComponentTip')} {uploadedComponents.map(x => x.meta.title).join(', ')}\n </Alert>\n )}\n {!!error && (\n <Alert type=\"error\" style={{ width: '100%', marginTop: 8 }}>\n {error}\n </Alert>\n )}\n </>\n ),\n btn: t('common.export'),\n handler: onExport,\n },\n {\n label: t('blocklet.export.result'),\n content: (\n <Box>\n <Typography variant=\"h6\" gutterBottom>\n <Box color=\"success.main\">{t('blocklet.export.success')}</Box>\n </Typography>\n <Box display=\"flex\" flexWrap=\"wrap\" alignItems=\"center\" fontSize=\"16px\" my={3}>\n <Box>{t('blocklet.export.resultTipStart')}</Box>\n <Box padding=\"2px\" margin=\"0 2px\" color=\"error.main\" bgcolor=\"grey.100\">\n @blocklet/cli\n </Box>\n <Box>{t('blocklet.export.resultTipEnd')}</Box>\n </Box>\n <Box>\n <Typography variant=\"body2\" gutterBottom>\n Learn more:\n </Typography>\n <Link href=\"https://docs.arcblock.io/abtnode/en/developer\" underline=\"hover\">\n https://docs.arcblock.io/abtnode/en/developer\n </Link>\n </Box>\n </Box>\n ),\n btn: t('common.confirm'),\n handler: onCancel,\n },\n ];\n\n return (\n <>\n {children({ loading, open: () => setShow(true) })}\n {show && (\n <Dialog\n title={t('blocklet.export.title')}\n fullWidth\n maxWidth=\"sm\"\n onClose={onCancel}\n showCloseButton\n open\n actions={\n <>\n <Button\n onClick={e => {\n e.stopPropagation();\n onCancel();\n }}\n color=\"inherit\">\n {t('common.cancel')}\n </Button>\n <Button\n onClick={e => {\n e.stopPropagation();\n steps[stepIndex].handler();\n }}\n color=\"primary\"\n data-cy=\"install-blocklet-next-step\"\n variant=\"contained\"\n disabled={loading || error || !name}\n style={{ marginLeft: 8 }}>\n {loading && <Spinner size={[16, 10]} />}\n {steps[stepIndex].btn}\n </Button>\n </>\n }>\n <Div>\n <Stepper activeStep={stepIndex} alternativeLabel>\n {steps.map(({ label }) => (\n <Step key={label}>\n <StepLabel>{label}</StepLabel>\n </Step>\n ))}\n </Stepper>\n {steps[stepIndex].content}\n </Div>\n </Dialog>\n )}\n </>\n );\n}\n\nExportBlocklet.propTypes = {\n blocklet: PropTypes.object.isRequired,\n children: PropTypes.func.isRequired,\n};\n\nExportBlocklet.defaultProps = {};\n\nconst Div = styled.div`\n .MuiStepper-root {\n padding-top: 0;\n margin-top: -16px;\n }\n`;\n","/* eslint-disable react/jsx-one-expression-per-line */\nimport { useState, useEffect, useCallback, isValidElement } from 'react';\nimport styled from '@emotion/styled';\nimport { useParams, useNavigate, Link, NavLink } from 'react-router-dom';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nimport Typography from '@mui/material/Typography';\nimport Breadcrumbs from '@mui/material/Breadcrumbs';\nimport Box from '@mui/material/Box';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport ExternalLink from '@mui/material/Link';\nimport ArchiveOutlinedIcon from '@mui/icons-material/ArchiveOutlined';\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 { getDisplayName } 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 Components from '../../components/blocklet/components';\nimport BlockletLog from '../../components/blocklet/log';\nimport BlockletActions from '../../components/blocklet/actions';\nimport BlockletAvatar from '../../components/blocklet/avatar';\nimport BlockletStatus from '../../components/blocklet/status';\nimport AuditLogs from '../../components/audit-logs';\nimport { useNodeContext } from '../../contexts/node';\nimport { TeamProvider } from '../../contexts/team';\nimport { DeletingBlockletProvider } from '../../contexts/deleting-blocklets';\nimport { useRoutingContext } from '../../contexts/routing';\nimport { DomainStatusProvider } from '../../contexts/domain-status';\nimport { formatError, getBlockletServices, isInstalling } from '../../libs/util';\nimport { useSubscription } from '../../libs/ws';\nimport fixBlocklet from '../../libs/fix-blocklet';\nimport Permission from '../../components/permission';\nimport Members from '../../components/team/members';\nimport Passports from '../../components/team/passports';\nimport ExportBlocklet from '../../components/blocklet/export-blocklet';\n\nconst Empty = ({ children }) => children;\n\nexport default function BlockletDetail() {\n const navigate = useNavigate();\n const { did, tab: currentTab = 'overview' } = useParams();\n const [currentState, setCurrentState] = useState(null);\n const [error, setError] = useState(null);\n const { api, 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 await fixBlocklet(blocklet);\n setCurrentState(blocklet);\n } else {\n setError(new Error(t('blocklet.notFound')));\n }\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 const renderAuditLogs = useCallback(() => <AuditLogs scope={did} />, [did]);\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 useSubscription(BlockletEvents.updated, onBlockletChange);\n\n const onTabChange = newTab => {\n navigate(`/blocklets/${did}/${newTab}`);\n };\n\n // eslint-disable-next-line no-unused-vars\n const onUpdate = async blocklet => {\n if (blocklet) {\n setCurrentState(blocklet);\n }\n\n getBlocklet();\n };\n\n let content = null;\n const tabs = [\n { label: t('common.overview'), value: 'overview' },\n { label: t('router.routerSetting'), value: 'access' },\n { label: t('common.components'), value: 'components' },\n ];\n\n const onConfigChange = newBlocklet => {\n setCurrentState(blocklet => ({\n ...blocklet,\n settings: newBlocklet.settings,\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 type=\"blocklet\" />,\n passports: Passports,\n components: Components,\n 'audit-logs': renderAuditLogs,\n logs: BlockletLog,\n };\n\n if (currentTab === 'configuration' && isInstalling(currentState.status)) {\n onTabChange('overview');\n }\n\n if (!isInstalling(currentState.status)) {\n tabs.push({ label: t('common.members'), value: 'members' });\n tabs.push({ label: t('common.passport'), value: 'passports' });\n tabs.push({ label: t('common.configuration'), value: 'configuration' });\n }\n\n tabs.push({ label: t('common.auditLogs'), value: 'audit-logs' });\n tabs.push({ label: t('common.logs'), value: 'logs' });\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 <DeletingBlockletProvider type=\"components\">\n <Tabs tabs={tabs} current={currentTab} onChange={onTabChange} scrollButtons=\"auto\" />\n <div className=\"page-content\">\n {isValidElement(TabComponent) ? (\n TabComponent\n ) : (\n <TabComponent blocklet={currentState} onChangeConfig={onConfigChange} onUpdate={onUpdate} />\n )}\n </div>\n </DeletingBlockletProvider>\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 navigate('/blocklets');\n } else {\n getBlocklet();\n }\n };\n const currentTabDesc = tabs.find(x => x.value === currentTab);\n\n const ProxyTeamProvider = currentState ? TeamProvider : Empty;\n\n return (\n <DomainStatusProvider domains={domains}>\n <ProxyTeamProvider teamDid={did}>\n <Main>\n <Breadcrumbs separator=\"›\" aria-label=\"breadcrumb\" className=\"page-breadcrumb\">\n <Link color=\"textSecondary\" to=\"/blocklets\">\n {t('common.blocklets')}\n </Link>\n <NavLink to={`/blocklets/${did}/overview`} style={active => (active ? { color: 'inherit' } : {})}>\n {t('common.detail')}\n </NavLink>\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: 16 }} /> : null}\n {currentState ? (\n <Box display=\"flex\" alignItems=\"center\">\n <Box>{getDisplayName(currentState)}</Box>\n {!!currentState && (\n <BlockletStatus\n size=\"12px\"\n style={{ marginLeft: 8 }}\n status={currentState.status}\n source={currentState.source}\n />\n )}\n </Box>\n ) : (\n `${t('common.blocklet')} ${t('common.detail')}`\n )}\n\n {currentState && currentState.source === 'custom' && (\n <ExportBlocklet blocklet={currentState}>\n {({ open }) => (\n <ExternalLink\n className=\"page-link\"\n onClick={() => open()}\n style={{ cursor: 'pointer' }}\n underline=\"hover\">\n <ArchiveOutlinedIcon />\n </ExternalLink>\n )}\n </ExportBlocklet>\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 </ProxyTeamProvider>\n </DomainStatusProvider>\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","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = ColorInput;\n\nvar _react = require(\"react\");\n\nvar _Box = _interopRequireDefault(require(\"@mui/material/Box\"));\n\nvar _Popover = _interopRequireDefault(require(\"@mui/material/Popover\"));\n\nvar _reactColor = require(\"react-color\");\n\nvar _commonPropTypes = _interopRequireDefault(require(\"./common-prop-types\"));\n\nvar _jsxRuntime = require(\"react/jsx-runtime\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction ColorInput(_ref) {\n let {\n editing,\n value,\n onChange\n } = _ref;\n const [open, setOpen] = (0, _react.useState)(false);\n const colorElm = (0, _react.useRef)();\n const colorValue = (0, _react.useRef)(value); // auto open color picker when editing, should wait the useRef to be ready\n\n (0, _react.useEffect)(() => {\n let timer = null;\n\n if (editing) {\n timer = setTimeout(() => {\n setOpen(true);\n }, 50);\n }\n\n return () => {\n clearTimeout(timer);\n };\n }, [editing]);\n\n const onColorChange = color => {\n colorValue.current = color;\n onChange(color);\n };\n\n const handleEnterKeyDown = () => {\n setOpen(false);\n onChange(colorValue.current);\n };\n\n const ReadView = /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {\n className: \"form-item-input slot\",\n px: 1,\n children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {\n display: \"flex\",\n alignItems: \"center\",\n children: [value, value !== 'auto' && /*#__PURE__*/(0, _jsxRuntime.jsx)(\"div\", {\n style: {\n marginLeft: 4,\n backgroundColor: value,\n width: '1em',\n height: '1em',\n borderRadius: '0.2em'\n }\n })]\n })\n });\n const EditView = /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {\n display: \"flex\",\n flexGrow: 1,\n alignItems: \"center\",\n height: \"40px\",\n onKeyDown: handleEnterKeyDown,\n children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {\n display: \"flex\",\n alignItems: \"center\",\n onClick: () => setOpen(true),\n children: /*#__PURE__*/(0, _jsxRuntime.jsx)(\"div\", {\n ref: colorElm,\n style: {\n flexShrink: 0,\n marginLeft: '8px',\n backgroundColor: value,\n width: '32px',\n height: '32px',\n boxSizing: 'border-box',\n borderRadius: '8px',\n border: '1px solid #eee',\n cursor: value === 'auto' ? 'default' : 'pointer'\n }\n })\n }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Popover.default, {\n open: open,\n anchorEl: colorElm.current,\n onClose: () => setOpen(false),\n anchorOrigin: {\n vertical: 'bottom',\n horizontal: 'center'\n },\n transformOrigin: {\n vertical: 'top',\n horizontal: 'center'\n },\n children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactColor.ChromePicker, {\n color: value,\n onChange: c => onColorChange(c.hex)\n })\n })]\n });\n return editing ? EditView : ReadView;\n}\n\nColorInput.propTypes = _commonPropTypes.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _default = {\n description: _propTypes.default.string,\n editing: _propTypes.default.bool,\n onChange: _propTypes.default.func,\n required: _propTypes.default.bool,\n // eslint-disable-next-line react/no-unused-prop-types\n value: _propTypes.default.any,\n // eslint-disable-next-line react/no-unused-prop-types\n componentProps: _propTypes.default.object,\n render: _propTypes.default.func,\n renderFormItem: _propTypes.default.func\n};\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = SchemaForm;\n\nvar _react = require(\"react\");\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _styled = _interopRequireDefault(require(\"@emotion/styled\"));\n\nvar _Box = _interopRequireDefault(require(\"@mui/material/Box\"));\n\nvar _EditIcon = _interopRequireDefault(require(\"@arcblock/icons/lib/EditIcon\"));\n\nvar _Close = _interopRequireDefault(require(\"@mui/icons-material/Close\"));\n\nvar _Done = _interopRequireDefault(require(\"@mui/icons-material/Done\"));\n\nvar _IconButton = _interopRequireDefault(require(\"@mui/material/IconButton\"));\n\nvar _CircularProgress = _interopRequireDefault(require(\"@mui/material/CircularProgress\"));\n\nvar _colorInput = _interopRequireDefault(require(\"./color-input\"));\n\nvar _textInput = _interopRequireDefault(require(\"./text-input\"));\n\nvar _passportInput = _interopRequireDefault(require(\"./passport-input\"));\n\nvar _required = _interopRequireDefault(require(\"./required\"));\n\nvar _jsxRuntime = require(\"react/jsx-runtime\");\n\nvar _templateObject;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction getComponent(item, _ref) {\n let {\n editing = false\n } = _ref;\n const {\n componentType = 'input',\n render,\n renderFormItem\n } = item; // if provided renderItem and editing is true, use it\n\n if (editing && renderFormItem) {\n return renderFormItem;\n } // if provided render and editing is false, use it\n\n\n if (!editing && render) {\n return render;\n }\n\n const componentMap = {\n input: _textInput.default,\n color: _colorInput.default,\n passport: _passportInput.default\n };\n return componentMap[componentType === null || componentType === void 0 ? void 0 : componentType.toLowerCase()];\n}\n\nfunction SchemaForm(_ref2) {\n let {\n schema,\n loading,\n value,\n defaultValue,\n onChange,\n style,\n disabled\n } = _ref2;\n const isControlled = Object.prototype.toString.call(value) === '[object Object]';\n const [editingItem, setEditingItem] = (0, _react.useState)(null);\n const [formValues, setFormValues] = (0, _react.useState)(isControlled ? value : defaultValue);\n const editingItemInitialValue = (0, _react.useRef)();\n\n function onFormItemChange(item, changeValue, action) {\n const {\n key,\n secure\n } = item;\n const oldValue = formValues[key];\n const isChanged = oldValue !== changeValue;\n\n const newValues = _objectSpread(_objectSpread({}, formValues), {}, {\n [key]: changeValue\n });\n\n if (isChanged) {\n setFormValues(newValues);\n }\n\n onChange({\n [key]: changeValue\n }, {\n allValues: newValues,\n action,\n currentItem: item\n }); // hide secure text after confirm\n\n if (action === 'confirm' && secure) {\n setFormValues(_objectSpread(_objectSpread({}, formValues), {}, {\n [key]: '__encrypted__'\n }));\n }\n }\n\n function onItemEditingStatusChange(item) {\n if (item) {\n editingItemInitialValue.current = formValues[item.key];\n setEditingItem(item);\n return;\n }\n\n editingItemInitialValue.current = null;\n setEditingItem(null);\n }\n\n function getValue(item, _ref3) {\n let {\n editing = false\n } = _ref3;\n const {\n key\n } = item;\n const currentValue = isControlled ? value[key] : formValues[key];\n\n if (currentValue === '__encrypted__') {\n if (!editing) {\n return '******';\n }\n\n return '';\n }\n\n return currentValue;\n }\n\n return /*#__PURE__*/(0, _jsxRuntime.jsx)(FormWrapper, {\n className: \"form\",\n style: style,\n children: schema === null || schema === void 0 ? void 0 : schema.map(x => {\n const {\n key,\n description,\n required,\n hidden = false,\n componentProps = {}\n } = x;\n\n if (hidden) {\n return null;\n }\n\n const editing = !!(editingItem && key === editingItem.key);\n const currentValue = getValue(x, {\n editing\n }); // get component by componentType\n\n const CurrentComponent = getComponent(x, {\n editing\n });\n const renderComponentProps = {\n inputProps: {\n 'data-cy': 'schema-form-item-component'\n },\n key,\n description,\n editing,\n value: currentValue,\n onChange: changeValue => onFormItemChange(x, changeValue, 'change'),\n componentProps\n };\n return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {\n className: \"form-item\",\n children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {\n className: \"form-item-label\",\n style: {\n color: required && !currentValue ? '#ff0000' : '#333'\n },\n children: [description, required && /*#__PURE__*/(0, _jsxRuntime.jsx)(_required.default, {})]\n }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {\n className: \"form-item-body\",\n children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {\n className: \"form-item-input\",\n children: /*#__PURE__*/(0, _jsxRuntime.jsx)(CurrentComponent, _objectSpread({}, renderComponentProps))\n }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {\n className: \"form-item-action\",\n children: editing ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {\n children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.default, {\n \"data-cy\": \"schema-form-item-confirm\",\n onClick: () => {\n onFormItemChange(x, currentValue, 'confirm');\n onItemEditingStatusChange(null);\n },\n disabled: disabled || loading,\n size: \"large\",\n children: loading ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_CircularProgress.default, {\n size: 24\n }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_Done.default, {})\n }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.default, {\n \"data-cy\": \"schema-form-item-cancel\",\n onClick: () => {\n onFormItemChange(x, editingItemInitialValue.current, 'cancel');\n onItemEditingStatusChange(null);\n },\n disabled: disabled || loading,\n size: \"large\",\n children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Close.default, {})\n })]\n }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.default, {\n \"data-cy\": \"schema-form-item-edit\",\n onClick: () => {\n onFormItemChange(x, formValues[key], 'edit');\n onItemEditingStatusChange(x);\n },\n disabled: disabled || editingItem,\n size: \"large\",\n children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_EditIcon.default, {})\n })\n })]\n })]\n }, key);\n })\n });\n}\n\nSchemaForm.propTypes = {\n schema: _propTypes.default.array.isRequired,\n loading: _propTypes.default.bool,\n onChange: _propTypes.default.func.isRequired,\n value: _propTypes.default.object,\n defaultValue: _propTypes.default.object,\n style: _propTypes.default.object,\n disabled: _propTypes.default.bool\n};\nSchemaForm.defaultProps = {\n loading: false,\n value: undefined,\n defaultValue: {},\n style: {},\n disabled: false\n};\nconst FormWrapper = (0, _styled.default)(_Box.default)(_templateObject || (_templateObject = _taggedTemplateLiteral([\"\\n width: 80%;\\n flex-grow: 1;\\n overflow-y: auto;\\n \", \" {\\n width: 100%;\\n flex-shrink: 0;\\n padding: 0 24px;\\n transform: translate(0, 0);\\n /* max-height: 60vh; */\\n }\\n\\n .form-item {\\n width: 100%;\\n margin-bottom: 24px;\\n position: relative;\\n \", \" {\\n flex-wrap: wrap;\\n justify-content: space-between;\\n width: 100%;\\n flex-shrink: 0;\\n }\\n }\\n\\n .form-item-body {\\n display: flex;\\n align-items: center;\\n width: 100%;\\n margin-top: 4px;\\n }\\n\\n .form-item-label {\\n line-height: 1.2;\\n font-size: 14px;\\n color: #888;\\n font-weight: bold;\\n\\n \", \" {\\n text-align: left;\\n width: auto;\\n flex-grow: 1;\\n }\\n }\\n\\n .form-item-input {\\n flex-grow: 1;\\n overflow: hidden;\\n white-space: nowrap;\\n text-overflow: ellipsis;\\n\\n &.slot {\\n height: 40px;\\n line-height: 40px;\\n background: #f8f8f8;\\n font-size: 16px;\\n }\\n }\\n\\n .form-item-action {\\n // width: 100px;\\n text-align: left;\\n margin-left: 12px;\\n flex-shrink: 0;\\n \", \" {\\n width: auto;\\n margin-left: 0px;\\n }\\n .MuiIconButton-root {\\n padding: 8px;\\n svg {\\n fill: #888;\\n }\\n &.Mui-disabled {\\n opacity: 0.4;\\n }\\n }\\n }\\n\"])), props => props.theme.breakpoints.down('md'), props => props.theme.breakpoints.down('md'), props => props.theme.breakpoints.down('md'), props => props.theme.breakpoints.down('md'));","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = PassportInput;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _Box = _interopRequireDefault(require(\"@mui/material/Box\"));\n\nvar _createPassportSvg = _interopRequireDefault(require(\"@abtnode/auth/lib/util/create-passport-svg\"));\n\nvar _passportColor = require(\"@abtnode/auth/lib/util/passport-color\");\n\nvar _util = require(\"@blocklet/meta/lib/util\");\n\nvar _colorInput = _interopRequireDefault(require(\"./color-input\"));\n\nvar _commonPropTypes = _interopRequireDefault(require(\"./common-prop-types\"));\n\nvar _jsxRuntime = require(\"react/jsx-runtime\");\n\nconst _excluded = [\"editing\", \"value\", \"onChange\", \"componentProps\"];\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return 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\nfunction PassportInput(_ref) {\n let {\n editing,\n value,\n onChange,\n componentProps\n } = _ref,\n rest = _objectWithoutProperties(_ref, _excluded);\n\n const {\n blocklet\n } = componentProps;\n const color = value === 'auto' ? (0, _passportColor.getPassportColorFromDid)(blocklet.appDid) : value;\n return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {\n display: \"flex\",\n alignItems: \"center\",\n children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(\"img\", {\n style: {\n width: 96,\n marginRight: 12\n },\n alt: \"\",\n src: (0, _createPassportSvg.default)({\n title: 'Owner',\n issuer: (0, _util.getDisplayName)(blocklet),\n issuerDid: blocklet.appDid,\n ownerName: 'Your Name',\n isDataUrl: true,\n preferredColor: value || 'auto'\n })\n }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_colorInput.default, _objectSpread(_objectSpread({}, rest), {}, {\n editing: editing,\n value: editing ? color : value,\n onChange: onChange,\n componentProps: componentProps\n }))]\n });\n}\n\nPassportInput.propTypes = _objectSpread(_objectSpread({}, _commonPropTypes.default), {}, {\n componentProps: _propTypes.default.shape({\n blocklet: _propTypes.default.object.isRequired\n }).isRequired\n});\nPassportInput.defaultProps = {};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _styled = _interopRequireDefault(require(\"@emotion/styled\"));\n\nvar _templateObject;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\nconst Required = _styled.default.span(_templateObject || (_templateObject = _taggedTemplateLiteral([\"\\n color: \", \";\\n &::before {\\n content: '*';\\n }\\n\"])), props => props.theme.palette.error.main);\n\nvar _default = Required;\nexports.default = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = TextInput;\n\nvar _react = require(\"react\");\n\nvar _Box = _interopRequireDefault(require(\"@mui/material/Box\"));\n\nvar _TextField = _interopRequireDefault(require(\"@mui/material/TextField\"));\n\nvar _commonPropTypes = _interopRequireDefault(require(\"./common-prop-types\"));\n\nvar _jsxRuntime = require(\"react/jsx-runtime\");\n\nconst _excluded = [\"editing\", \"description\", \"value\", \"onChange\", \"componentProps\"];\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return 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\nfunction TextInput(_ref) {\n let {\n editing,\n description,\n value,\n onChange,\n componentProps\n } = _ref,\n rest = _objectWithoutProperties(_ref, _excluded);\n\n const {\n placeholder\n } = componentProps;\n const inputValue = (0, _react.useRef)(value); // enter keydown\n\n const handleKeydown = e => {\n if (e.key === 'Enter') {\n onChange(inputValue.current);\n }\n };\n\n const onInputChange = changeValue => {\n inputValue.current = changeValue;\n onChange(changeValue);\n };\n\n if (editing) {\n return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TextField.default, _objectSpread({\n style: {\n flex: 1\n },\n fullWidth: true,\n value: value,\n onChange: e => {\n e.persist();\n onInputChange(e.target.value);\n },\n autoFocus: true,\n size: \"small\",\n variant: \"outlined\",\n placeholder: description || placeholder,\n onKeyDown: handleKeydown\n }, rest));\n }\n\n return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {\n px: 1,\n className: \"form-item-input slot\",\n children: value\n });\n}\n\nTextInput.propTypes = _commonPropTypes.default;\nTextInput.defaultProps = {\n componentProps: {}\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _Lock = _interopRequireDefault(require(\"@mui/icons-material/Lock\"));\n\nvar _ContactMail = _interopRequireDefault(require(\"@mui/icons-material/ContactMail\"));\n\nvar _Group = _interopRequireDefault(require(\"@mui/icons-material/Group\"));\n\nvar _constant = require(\"@abtnode/constant\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _default = [{\n value: _constant.WHO_CAN_ACCESS.OWNER,\n icon: _Lock.default,\n title: {\n zh: '只有我自己可访问',\n en: 'Only me can access'\n },\n description: {\n zh: '必须提供所有者通行证才能访问应用',\n en: 'You must provide owner passport to access this application'\n }\n}, {\n value: _constant.WHO_CAN_ACCESS.INVITED,\n icon: _ContactMail.default,\n title: {\n zh: '只有被邀请的人可以访问',\n en: 'Only invited people can access'\n },\n description: {\n zh: '稍后您可以在管理页面中邀请成员',\n en: 'You can invite members later in the admin page'\n }\n}, {\n value: _constant.WHO_CAN_ACCESS.ALL,\n icon: _Group.default,\n title: {\n zh: '所有人可访问',\n en: 'Accessible to all'\n },\n description: {\n zh: '向所有人开放,无需通行证即可访问应用',\n en: 'Open to the world anyone can access without passport'\n }\n}];\nexports.default = _default;"],"names":["WrappedButton","children","props","variant","color","forwardRef","ref","forwardedRef","AgreementApp","style","width","Agreement","blocklet","onClickNext","handleDescEle","showPageHeader","navigate","useNavigate","useState","accessUrl","setAccessUrl","error","setError","accessUrlLoading","setAccessUrlLoading","useLocaleContext","t","locale","useNodeContext","info","api","isRunning","loading","useMemo","isEmpty","clickNext","window","location","search","useEffect","onMount","getBlocklet","input","did","meta","b","urls","interfaces","map","x","url","getAccessibleUrl","accessUrlTmp","URL","href","message","Center","relative","Alert","wordBreak","type","Spinner","data","blockletMeta","isInstalled","already","title","subTitle","name","getDisplayName","footer","ButtonWrap","component","Link","to","className","Container","onContinue","description","texts","listenName","buttonNext","defaultProps","styled","theme","breakpoints","down","palette","grey","up","spacing","Date","currentTime","setCurrentTime","useInterval","formatTime","LogTerminalGroup","logId","types","initialData","prepend","rest","logTypeLabels","access","stdout","stderr","isMobile","useMediaQuery","currentType","setCurrentType","logFiles","setLogFiles","terminalRefs","useRef","forEach","terminal","current","write","item","useSubscription","log","level","replace","p","LogTerminalGroupRoot","ButtonGroup","size","Button","onClick","LogTerminal","logFile","visibility","LogTerminalRoot","position","Terminal","boxSizing","height","options","background","foreground","BlockletDiskInfo","useContext","LocaleContext","diskInfo","Typography","renderDiskInfo","dir","handler","cursor","underline","filesize","env","environments","reduce","acc","key","value","rows","BLOCKLET_APP_DIR","app","BLOCKLET_DATA_DIR","BLOCKLET_LOG_DIR","BLOCKLET_CACHE_DIR","cache","Div","row","InfoRow","valueComponent","nameWidth","BlockletRuntimeInfo","noRunningMessage","status","runtimeInfo","memoryUsage","cpuUsage","prettyMs","Number","startAt","formatLocale","pid","BlockletSource","sourceInfo","Box","display","alignItems","Tag","toUpper","source","joinUrl","deployedFrom","bundleDid","target","marginLeft","BlockletOverview","onChangeConfig","appDid","find","infoRows","group","formatPerson","author","formatToDatetime","installedAt","startedAt","stoppedAt","getWhoCanAccess","settings","owner","filter","Boolean","engineRows","engine","displayName","version","getEngineRows","nameFormatter","Add","Check","Delete","Edit","Clear","DetailPanel","NextPage","Filter","FirstPage","LastPage","PreviousPage","Search","ResetSearch","SortArrow","Export","ThirdStateCheck","ViewColumn","BlockletService","services","getBlockletServices","length","columns","field","icons","tableIcons","sorting","emptyRowsWhenPaging","actionsColumnIndex","tableLayout","maxBodyHeight","pageSize","pageSizeOptions","localization","body","emptyDataSourceMessage","BlockletEnvironment","onUpdate","hasPermission","node","cpuCores","setCpuCores","setLoading","whoCanAccess","publicToStore","useTheme","editingItem","setEditingItem","disabled","clusterMode","get","res","isInstalling","customType","customDelete","deletable","customColor","customUrl","configurableEnvs","BLOCKLET_CONFIGURABLE_KEY","componentType","componentProps","exist","configs","push","defaultValue","schemaList","onWhoCanAccessChange","e","updateWhoCanAccess","Toast","onPublicToStoreChange","checked","configPublicToStore","iconStyle","marginRight","fontSize","verticalAlign","text","secondary","onSubmitConfig","errMessage","isValidClusterSize","params","omit","custom","configBlocklet","onDeletableChange","onWalletTypeChange","marginTop","schema","onChange","changeValue","action","currentItem","includes","TextField","select","SelectProps","renderValue","selected","d","AccessConfig","icon","StyledMenuItem","sx","Switch","defaultChecked","Divider","my","label","secure","withPermission","MenuItem","DomainActions","site","domain","actions","close","id","teamDid","open","isProtected","dense","ListItemIcon","minWidth","ListItemText","primary","RuleActions","o","RedirectRule","isHttps","toUrl","scheme","tmpToUrl","isUrl","RuleList","rules","blocklets","selectableBlocklets","parent","blockletDid","domainStatus","useDomainStatusContext","recommendedDomainStatus","blockletsKeyByDid","cur","Object","assign","rule","indexDid","isHealthy","accessible","_rule","items","depth","expand","pathPrefix","domainAliases","keys","prototype","hasOwnProperty","call","render","rowData","healthyTip","Tooltip","renderRuleText","content","maxWidth","px","overflow","whiteSpace","textOverflow","getAccessUrl","getBlockletUrlParams","rel","ArrowForward","ROUTING_RULE_TYPES","internalLink","findComponentById","componentId","returnAncestors","ancestors","childName","concat","join","placement","IconButton","pointerEvents","paddingTop","paddingBottom","margin","LockIcon","fill","permission","textAlign","classnames","header","DomainLink","LinkDiv","Access","useRoutingContext","siteMap","getBlockletUrl","rawBlocklets","useBlockletContext","logo","port","ports","urlMap","WELLKNOWN_PATH_PREFIX","sort","a","some","justifyContent","SplitButton","isInProgress","menuButtonProps","menu","Security","severity","mt","filters","ml","mr","Empty","SelectStore","extra","setOpen","storeSelectRef","currentRegistry","setCurrentRegistryRegistry","SelectStoreTitle","endIcon","ArrowDropDown","padding","autoComplete","helperText","fullWidth","autoFocus","newRegistry","MenuProps","anchorEl","onClose","blockletRegistryList","reloadPage","onDelete","localStorage","getItem","removeItem","common","black","requirePurchase","inStore","isFreeBlocklet","hasRequiredEnvironments","required","hasMissRequiredConfigs","configsList","sharedValueMap","getParamsName","StepContent","onStepChange","useStepContext","steps","activeStep","setActiveStepByKey","setActiveStepByIndex","step","useImperativeHandle","DialogContentWrapper","pcWidth","pcHeight","logoUrl","registryUrl","getBlockletLogoUrl","baseUrl","logoPath","stepTip","RightContent","AddComponent","showDialog","setShowDialog","setConfigs","purchaseData","setPurchaseData","isWaitingPurchase","setIsWaitingPurchase","initParams","componentDid","componentName","configsValue","hasEnvironmentsStep","installResultProps","purchaseResultProps","showFromUrlDialog","setParams","setActiveStep","stepRef","purchaseRef","updateParams","obj","errMsg","validateInput","getComponentName","setInstallErrorResult","errorMessage","onInstall","installInput","createBlockletEventHandler","BlockletEvents","BlockletStatus","payload","mountPoint","inputUrl","downloadTokenList","getBlockletMetaUrl","rootDid","installComponent","isNewRegistryUrl","isNew","decoded","addBlockletStore","console","validatePathPrefix","onNext","onCancel","onGeneratePurchaseData","installOpts","setConfigValue","chooseParams","componentDidValue","isInit","list","deletedAt","newConfigs","validation","formatItem","isNil","doc","componentSelfConfigs","componentAllConfigs","uniqBy","flatten","sharedConfigObj","getSharedConfigObj","default","hidden","config","urlFriendly","componentRequirePurchase","TypographyWrapper","mode","onSuccess","handleText","confirm","setItem","handleBlockletRegistry","handleButtonText","state","installed","handleButtonClick","handleBlockletRender","blockletItem","defaultRender","isChosen","StoreBlockletItemWrapper","extraFilter","allBlocklets","isComponentBlocklet","cancel","onConfirm","dangerouslySetInnerHTML","__html","flexDirection","getCurrentStep","PageHeaderWrapper","handlePaySuccess","marginBottom","inputProps","allValues","AnimationWaiter","MessageDiv","increaseSpeed","messageLoop","setTimeout","scrollDom","document","getElementsByClassName","scrollTop","scrollHeight","onMenuItemClick","stopPropagation","showCloseButton","DialogWrapper","PaperProps","innerHeight","event","reason","disableEscapeKeyDown","StepProvider","newStep","Dialog","isMobileDialogContent","DialogContentText","PageHeader","white","main","DeleteComponent","remove","tip","deleteSetting","setDeleteSetting","deleteComponent","param","removeType","componentDisabled","btn","StyledButton","gutterBottom","RadioGroup","FormControlLabel","control","Radio","btnWithToolTip","ComponentConfiguration","dids","onConfigChanged","newBlocklet","isDev","BLOCKLET_MODES","isConfigEditable","onOpen","onAddConfig","trim","startsWith","result","code","onEditConfig","newData","oldData","formatError","onDeleteConfig","componentConfigs","missingRequiredConfigs","getComponentMissingConfigs","hasBWAConfig","onRowAdd","onRowUpdate","onRowDelete","isDeletable","StyledDialog","minHeight","initialEditValue","fontWeight","editComponent","EditDiv","placeholder","blockletIcons","paging","editable","values","sm","ComponentItem","onRemove","setExpand","componentInfo","setComponentInfo","deletingComponents","useDeletingBlockletContext","deletingBlocklets","showStatus","canExpand","expandIcon","ExpandMore","ChevronRight","root","bundleSource","Array","isArray","store","getSourceInfo","componentRows","checkUpgrade","deleteDisabledTip","dynamic","py","pl","Math","max","xs","md","flexGrow","Launch","InfoOutlined","StyledBadge","badgeContent","invisible","SettingsOutlined","borderBottom","borderColor","Collapse","in","paddingY","DialogTitle","DialogContent","Badge","top","right","BlockletComponent","addDeletingDid","removeDeletingDid","matchDeletingDid","updateConfirm","setUpdateConfirm","showUpdateDot","setShowUpdateDot","components","unshift","getLatestBlockletVersion","then","semver","catch","err","checkForUpdates","newVersion","checkChildBlockletsForUpdates","preUpdateInfo","updateId","updateList","forEachChildSync","updateItem","slice","onConfirmUpdate","fn","upgradeBlocklet","bind","updateChildBlocklets","removeComponent","keepData","sleep","getAppMissingConfigs","Update","Grid","container","DialogActions","BlockletLog","ExportBlocklet","session","useSessionContext","show","setShow","stepIndex","setStepIndex","getNameByTitle","setName","uploadedComponents","onExport","genExportedMeta","downloadExportedSource","holder","user","fullName","flexWrap","bgcolor","Stepper","alternativeLabel","Step","StepLabel","BlockletDetail","useParams","tab","currentTab","currentState","setCurrentState","refresh","domains","fixBlocklet","Error","onBlockletChange","renderAuditLogs","useCallback","scope","onTabChange","newTab","tabs","renders","overview","configuration","BlockletConfiguration","members","passports","Passports","Components","logs","splice","TabComponent","Tabs","scrollButtons","isValidElement","child","newChild","onActionComplete","currentTabDesc","ProxyTeamProvider","TeamProvider","Main","Breadcrumbs","separator","NavLink","active","ArchiveOutlined","onStart","onComplete","defineProperty","exports","ColorInput","_react","require","_Box","_interopRequireDefault","_Popover","_reactColor","_commonPropTypes","_jsxRuntime","__esModule","_ref","editing","colorElm","colorValue","timer","clearTimeout","onColorChange","ReadView","jsx","jsxs","backgroundColor","borderRadius","EditView","onKeyDown","flexShrink","border","anchorOrigin","vertical","horizontal","transformOrigin","ChromePicker","c","hex","propTypes","_propTypes","_default","string","bool","func","any","object","renderFormItem","SchemaForm","_templateObject","_styled","_EditIcon","_Close","_Done","_IconButton","_CircularProgress","_colorInput","_textInput","_passportInput","_required","ownKeys","enumerableOnly","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","enumerable","apply","_objectSpread","i","arguments","_defineProperty","getOwnPropertyDescriptors","defineProperties","configurable","writable","_ref2","isControlled","toString","formValues","setFormValues","editingItemInitialValue","onFormItemChange","isChanged","newValues","onItemEditingStatusChange","FormWrapper","currentValue","_ref3","getValue","CurrentComponent","passport","toLowerCase","getComponent","renderComponentProps","Fragment","array","isRequired","undefined","strings","raw","freeze","PassportInput","_createPassportSvg","_passportColor","_util","_excluded","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","getPassportColorFromDid","alt","src","issuer","issuerDid","ownerName","isDataUrl","preferredColor","shape","span","TextInput","_TextField","inputValue","onInputChange","flex","persist","_Lock","_ContactMail","_Group","_constant","WHO_CAN_ACCESS","OWNER","zh","en","INVITED","ALL"],"sourceRoot":""}
|