@abtnode/ux 1.15.17 → 1.16.0-beta-b16cb035

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/lib/actions.js +111 -0
  2. package/lib/blocklet/access/config-access.js +303 -0
  3. package/lib/blocklet/access/index.js +221 -0
  4. package/lib/blocklet/actions.js +438 -0
  5. package/lib/blocklet/add-cert.js +191 -0
  6. package/lib/blocklet/agreement-app.js +30 -0
  7. package/lib/blocklet/agreement.js +72 -0
  8. package/lib/blocklet/app-avatar.js +74 -0
  9. package/lib/blocklet/audit-logs.js +197 -0
  10. package/lib/blocklet/blocklet-source.js +56 -0
  11. package/lib/blocklet/bundle-avatar.js +80 -0
  12. package/lib/blocklet/component/add.js +1063 -0
  13. package/lib/blocklet/component/configuration.js +124 -0
  14. package/lib/blocklet/component/delete.js +117 -0
  15. package/lib/blocklet/component/environment.js +289 -0
  16. package/lib/blocklet/component/expiration.js +53 -0
  17. package/lib/blocklet/component/index.js +804 -0
  18. package/lib/blocklet/component/line.js +28 -0
  19. package/lib/blocklet/component/navigation/locale-tabs.js +218 -0
  20. package/lib/blocklet/component/navigation/navigation-actions.js +120 -0
  21. package/lib/blocklet/component/navigation/navigation-dialog.js +620 -0
  22. package/lib/blocklet/component/navigation/navigation-preview.js +102 -0
  23. package/lib/blocklet/component/navigation/simple-select.js +131 -0
  24. package/lib/blocklet/component/select-store.js +153 -0
  25. package/lib/blocklet/component/setting.js +151 -0
  26. package/lib/blocklet/component/sortable-tree.js +138 -0
  27. package/lib/blocklet/component/space-gateway-selector.js +174 -0
  28. package/lib/blocklet/component/store-blocklet-list.js +205 -0
  29. package/lib/blocklet/config-navigation.js +344 -0
  30. package/lib/blocklet/configuration.js +574 -0
  31. package/lib/blocklet/disk-info.js +91 -0
  32. package/lib/blocklet/icons.js +26 -0
  33. package/lib/blocklet/install-from-url.js +347 -0
  34. package/lib/blocklet/log.js +62 -0
  35. package/lib/blocklet/migration.js +153 -0
  36. package/lib/blocklet/mode.js +35 -0
  37. package/lib/blocklet/monitor.js +186 -0
  38. package/lib/blocklet/overview.js +236 -0
  39. package/lib/blocklet/preferences/app-sk.js +131 -0
  40. package/lib/blocklet/preferences/index.js +238 -0
  41. package/lib/blocklet/preferences/wallet-type.js +107 -0
  42. package/lib/blocklet/purchase/common.js +103 -0
  43. package/lib/blocklet/purchase/component-purchase.js +253 -0
  44. package/lib/blocklet/purchase/index.js +13 -0
  45. package/lib/blocklet/router/action/add-domain-alias.js +173 -0
  46. package/lib/blocklet/router/action/add-rule.js +204 -0
  47. package/lib/blocklet/router/action/config-routing-rule.js +129 -0
  48. package/lib/blocklet/router/action/delete-domain-alias.js +107 -0
  49. package/lib/blocklet/router/action/delete-rule.js +114 -0
  50. package/lib/blocklet/router/action/update-rule.js +203 -0
  51. package/lib/blocklet/router/domain-actions.js +71 -0
  52. package/lib/blocklet/router/domain-status.js +96 -0
  53. package/lib/blocklet/router/rule-actions.js +77 -0
  54. package/lib/blocklet/router/rule-list.js +181 -0
  55. package/lib/blocklet/router/util.js +146 -0
  56. package/lib/blocklet/runtime-info.js +87 -0
  57. package/lib/blocklet/status.js +105 -0
  58. package/lib/blocklet/storage.js +322 -0
  59. package/lib/blocklet/types.js +25 -0
  60. package/lib/blocklet/util.js +213 -0
  61. package/lib/blocklet/version.js +156 -0
  62. package/lib/card-selector.js +109 -0
  63. package/lib/certificate.js +110 -0
  64. package/lib/click-to-copy.js +38 -0
  65. package/lib/confirm.js +149 -0
  66. package/lib/contexts/audit-log.js +141 -0
  67. package/lib/contexts/blocklet.js +19 -0
  68. package/lib/contexts/deleting-blocklets.js +78 -0
  69. package/lib/contexts/node.js +30 -0
  70. package/lib/contexts/session.js +20 -0
  71. package/lib/contexts/team.js +19 -0
  72. package/lib/delete-confirm.js +127 -0
  73. package/lib/did-address.js +77 -0
  74. package/lib/dot.js +18 -0
  75. package/lib/form/form-text-input.js +266 -0
  76. package/lib/form/form-wrapper.js +13 -0
  77. package/lib/form/required.js +13 -0
  78. package/lib/hooks/blocklet.js +231 -0
  79. package/lib/hooks/mobile-width.js +19 -0
  80. package/lib/hooks/url-evaluation.js +168 -0
  81. package/lib/hooks/use-app-logo.js +25 -0
  82. package/lib/hooks/use-bundle-logo.js +36 -0
  83. package/lib/hooks/use-navigation.js +355 -0
  84. package/lib/hooks/use-passport-id.js +21 -0
  85. package/lib/hooks/use-subscription.js +28 -0
  86. package/lib/icons/long-arrow.svg +5 -0
  87. package/lib/index.js +0 -3
  88. package/lib/invitation/invitation-app.js +51 -0
  89. package/lib/invitation/invitation-login.js +47 -0
  90. package/lib/invitation/invitation-passport.js +130 -0
  91. package/lib/invitation/invitation-receive.js +108 -0
  92. package/lib/invitation/invitation-success.js +82 -0
  93. package/lib/invitation/invitation-user.js +79 -0
  94. package/lib/invitation/invitation.js +80 -0
  95. package/lib/issue-passport.js +84 -84
  96. package/lib/launch-blocklet/content-layout.js +33 -0
  97. package/lib/launch-blocklet/page-header.js +38 -0
  98. package/lib/layout/addon.js +100 -0
  99. package/lib/layout/feedback.js +55 -0
  100. package/lib/locales/en.js +1221 -10
  101. package/lib/locales/index.js +3 -4
  102. package/lib/locales/zh.js +1232 -15
  103. package/lib/logs/clock.js +19 -0
  104. package/lib/logs/download.js +139 -0
  105. package/lib/logs/log-terminal.js +183 -0
  106. package/lib/lost-passport.js +191 -195
  107. package/lib/monitor/card.js +73 -0
  108. package/lib/monitor/cpu.js +109 -0
  109. package/lib/monitor/disk.js +122 -0
  110. package/lib/monitor/memory.js +144 -0
  111. package/lib/nav-logo.js +120 -0
  112. package/lib/passport-tag.js +43 -0
  113. package/lib/permission.js +70 -0
  114. package/lib/relative-time.js +61 -0
  115. package/lib/schema-form/color-input.js +105 -0
  116. package/lib/schema-form/common-prop-types.js +21 -0
  117. package/lib/schema-form/index.js +229 -0
  118. package/lib/schema-form/passport-input.js +66 -0
  119. package/lib/schema-form/text-input.js +72 -0
  120. package/lib/store/add.js +185 -0
  121. package/lib/store/delete.js +102 -0
  122. package/lib/store/item.js +84 -0
  123. package/lib/table-icons.js +42 -0
  124. package/lib/table.js +13 -0
  125. package/lib/tag.js +37 -0
  126. package/lib/team/members/actions.js +99 -0
  127. package/lib/team/members/index.js +503 -0
  128. package/lib/team/members/invitations.js +196 -0
  129. package/lib/team/members/invite-member.js +212 -0
  130. package/lib/team/members/issue-passport.js +155 -0
  131. package/lib/team/members/member.js +300 -0
  132. package/lib/team/members/passport-issuances.js +154 -0
  133. package/lib/team/members/passports.js +336 -0
  134. package/lib/team/members/toggle-user-approval.js +128 -0
  135. package/lib/team/members/transfer-node.js +262 -0
  136. package/lib/team/members/util.js +20 -0
  137. package/lib/team/passports/color.js +132 -0
  138. package/lib/team/passports/detail.js +271 -0
  139. package/lib/team/passports/index.js +233 -0
  140. package/lib/team/passports/mutate-role.js +204 -0
  141. package/lib/team/passports/trusted-issuer.js +297 -0
  142. package/lib/team/passports/trusted-issuers.js +240 -0
  143. package/lib/team/search-input.js +38 -0
  144. package/lib/team/styles/dialog.js +13 -0
  145. package/lib/team/styles/list-header.js +13 -0
  146. package/lib/toast.js +86 -0
  147. package/lib/util/api.js +21 -0
  148. package/lib/util/constants.js +10 -0
  149. package/lib/util/index.js +703 -0
  150. package/lib/util/locales.js +28 -0
  151. package/lib/util/mode.js +11 -0
  152. package/lib/who-can-access/config.js +46 -0
  153. package/lib/wrap-locale.js +12 -13
  154. package/package.json +69 -17
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = require("react");
8
+ var _useInterval = _interopRequireDefault(require("react-use/lib/useInterval"));
9
+ var _util = require("../util");
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+ function Clock() {
12
+ const [currentTime, setCurrentTime] = (0, _react.useState)(+new Date());
13
+ (0, _useInterval.default)(() => {
14
+ setCurrentTime(+new Date());
15
+ }, 1000);
16
+ return (0, _util.formatTime)(currentTime, 'MMMM Do YYYY, h:mm:ss a');
17
+ }
18
+ var _default = Clock;
19
+ exports.default = _default;
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = DownloadLog;
7
+ var _react = require("react");
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _dayjs = _interopRequireDefault(require("dayjs"));
10
+ var _Box = _interopRequireDefault(require("@mui/material/Box"));
11
+ var _Download = _interopRequireDefault(require("@mui/icons-material/Download"));
12
+ var _FormControl = _interopRequireDefault(require("@mui/material/FormControl"));
13
+ var _Select = _interopRequireDefault(require("@mui/material/Select"));
14
+ var _MenuItem = _interopRequireDefault(require("@mui/material/MenuItem"));
15
+ var _CircularProgress = _interopRequireDefault(require("@mui/material/CircularProgress"));
16
+ var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
17
+ var _context = require("@arcblock/ux/lib/Locale/context");
18
+ var _Dialog = _interopRequireDefault(require("@arcblock/ux/lib/Dialog"));
19
+ var _formatName = _interopRequireDefault(require("@abtnode/util/lib/format-name"));
20
+ var _node = require("../contexts/node");
21
+ var _toast = _interopRequireDefault(require("../toast"));
22
+ var _jsxRuntime = require("react/jsx-runtime");
23
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
24
+ const DAYS = [1, 7];
25
+ function DownloadLog(_ref) {
26
+ let {
27
+ id,
28
+ name
29
+ } = _ref;
30
+ const {
31
+ t
32
+ } = (0, _context.useLocaleContext)();
33
+ const {
34
+ restApi,
35
+ inService
36
+ } = (0, _node.useNodeContext)();
37
+ const [showDialog, setShowDialog] = (0, _react.useState)(false);
38
+ const [isDownloading, setIsDownloading] = (0, _react.useState)(false);
39
+ const [days, setDays] = (0, _react.useState)(1);
40
+ const onDownload = async () => {
41
+ if (isDownloading) {
42
+ return;
43
+ }
44
+ try {
45
+ setIsDownloading(true);
46
+ const logId = inService ? '' : "/".concat(id);
47
+ const res = await restApi.get("/download/log".concat(logId, "?days=").concat(days), {
48
+ responseType: 'blob'
49
+ });
50
+ const href = URL.createObjectURL(res.data);
51
+ const link = document.createElement('a');
52
+ link.href = href;
53
+ link.setAttribute('download', "".concat((0, _formatName.default)(name || id), ".").concat((0, _dayjs.default)().format('YYYYMMDDHHmmss'), ".log.zip"));
54
+ document.body.appendChild(link);
55
+ link.click();
56
+ document.body.removeChild(link);
57
+ URL.revokeObjectURL(href);
58
+ setIsDownloading(false);
59
+ } catch (error) {
60
+ setIsDownloading(false);
61
+ _toast.default.error(error.message);
62
+ }
63
+ };
64
+ const onDaysChange = e => {
65
+ setDays(e.target.value);
66
+ };
67
+ return [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
68
+ display: "flex",
69
+ alignItems: "center",
70
+ style: {
71
+ gap: 16
72
+ },
73
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
74
+ "data-cy": "download-logs",
75
+ variant: "outlined",
76
+ onClick: () => setShowDialog(true),
77
+ disabled: isDownloading,
78
+ children: [isDownloading ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_CircularProgress.default, {
79
+ size: 16
80
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_Download.default, {
81
+ fontSize: "small",
82
+ style: {
83
+ transform: 'translateY(2px)'
84
+ }
85
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
86
+ ml: 0.5,
87
+ children: t('common.download')
88
+ })]
89
+ })
90
+ }), showDialog && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dialog.default, {
91
+ open: true,
92
+ onClose: () => {
93
+ setShowDialog(false);
94
+ },
95
+ disableEscapeKeyDown: true,
96
+ title: t('common.download'),
97
+ PaperProps: {
98
+ style: {
99
+ minHeight: 'auto'
100
+ }
101
+ },
102
+ actions: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
103
+ "data-cy": "download-logs",
104
+ variant: "outlined",
105
+ onClick: () => onDownload(),
106
+ disabled: isDownloading,
107
+ children: [isDownloading && /*#__PURE__*/(0, _jsxRuntime.jsx)(_CircularProgress.default, {
108
+ size: 16
109
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
110
+ ml: 0.5,
111
+ children: t('common.confirm')
112
+ })]
113
+ }),
114
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
115
+ mb: 2,
116
+ display: "flex",
117
+ justifyContent: "center",
118
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_FormControl.default, {
119
+ size: "small",
120
+ fullWidth: true,
121
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Select.default, {
122
+ value: days,
123
+ onChange: onDaysChange,
124
+ children: DAYS.map(x => /*#__PURE__*/(0, _jsxRuntime.jsx)(_MenuItem.default, {
125
+ value: x,
126
+ children: t("log.lastDays.".concat(x))
127
+ }, x))
128
+ })
129
+ })
130
+ })
131
+ })];
132
+ }
133
+ DownloadLog.propTypes = {
134
+ id: _propTypes.default.string.isRequired,
135
+ name: _propTypes.default.string
136
+ };
137
+ DownloadLog.defaultProps = {
138
+ name: ''
139
+ };
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.LogTerminal = void 0;
7
+ exports.LogTerminalGroup = LogTerminalGroup;
8
+ var _react = require("react");
9
+ var _styled = _interopRequireDefault(require("@emotion/styled"));
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+ var _Button = _interopRequireDefault(require("@mui/material/Button"));
12
+ var _ButtonGroup = _interopRequireDefault(require("@mui/material/ButtonGroup"));
13
+ var _useMediaQuery = _interopRequireDefault(require("@mui/material/useMediaQuery"));
14
+ var _Terminal = _interopRequireDefault(require("@arcblock/terminal/lib/Terminal"));
15
+ var _clock = _interopRequireDefault(require("./clock"));
16
+ var _node = require("../contexts/node");
17
+ var _jsxRuntime = require("react/jsx-runtime");
18
+ var _templateObject, _templateObject2;
19
+ const _excluded = ["name", "logId", "types", "initialData", "prepend", "postpend"],
20
+ _excluded2 = ["logFile"];
21
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
23
+ function 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; }
24
+ function _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; }
25
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
26
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
27
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
28
+ function _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; }
29
+ function _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; }
30
+ /**
31
+ * 按 level/destination 分类的一组 terminal
32
+ */
33
+ function LogTerminalGroup(_ref) {
34
+ let {
35
+ name,
36
+ logId,
37
+ types,
38
+ initialData,
39
+ prepend,
40
+ postpend
41
+ } = _ref,
42
+ rest = _objectWithoutProperties(_ref, _excluded);
43
+ const {
44
+ ws: {
45
+ useSubscription
46
+ }
47
+ } = (0, _node.useNodeContext)();
48
+ const logTypeLabels = {
49
+ info: 'Info',
50
+ error: 'Error',
51
+ access: 'Access',
52
+ stdout: 'stdout',
53
+ stderr: 'stderr'
54
+ };
55
+ const isMobile = (0, _useMediaQuery.default)(theme => theme.breakpoints.down('md'));
56
+ const [currentType, setCurrentType] = (0, _react.useState)(types[0]);
57
+ const [logFiles, setLogFiles] = (0, _react.useState)();
58
+ const terminalRefs = (0, _react.useRef)({});
59
+
60
+ // 组件挂载时, 写入初始数据
61
+ (0, _react.useEffect)(() => {
62
+ types.forEach(type => {
63
+ const terminal = terminalRefs.current[type];
64
+ if (terminal) {
65
+ terminal.write("Collecting ".concat(type, " logs for ").concat(name, "..."));
66
+ terminal.write('\r\n\r\n');
67
+ initialData.forEach(item => terminal.write(item));
68
+ }
69
+ });
70
+ // eslint-disable-next-line react-hooks/exhaustive-deps
71
+ }, []);
72
+
73
+ // 监听 log 数据, 写入 terminal
74
+ useSubscription("log.".concat(logId), log => {
75
+ if (!logFiles) {
76
+ setLogFiles(log.logFiles || {});
77
+ }
78
+ const terminal = terminalRefs.current[log.level];
79
+ if (terminal) {
80
+ terminal.write(log.data.replace(/.\n/g, p => p === '\r\n' ? p : "".concat(p[0], "\r\n\r\n")));
81
+ terminal.write('\r\n\r\n');
82
+ }
83
+ }, []);
84
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(LogTerminalGroupRoot, _objectSpread(_objectSpread({}, rest), {}, {
85
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
86
+ className: "log-terminal-group-head",
87
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
88
+ className: "log-terminal-group-head-start",
89
+ children: [prepend, /*#__PURE__*/(0, _jsxRuntime.jsx)(_ButtonGroup.default, {
90
+ variant: "outlined",
91
+ size: isMobile ? 'small' : 'medium',
92
+ children: types.map(type => {
93
+ const props = type === currentType ? {
94
+ variant: 'contained'
95
+ } : {};
96
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, _objectSpread(_objectSpread({}, props), {}, {
97
+ onClick: () => setCurrentType(type),
98
+ children: logTypeLabels[type]
99
+ }), type);
100
+ })
101
+ })]
102
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
103
+ className: "log-terminal-group-head-end",
104
+ children: postpend
105
+ })]
106
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
107
+ className: "log-terminal-group-terminals",
108
+ children: types.map(type => {
109
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(LogTerminal, {
110
+ ref: _ref2 => {
111
+ terminalRefs.current[type] = _ref2;
112
+ },
113
+ logFile: logFiles === null || logFiles === void 0 ? void 0 : logFiles[type],
114
+ style: {
115
+ visibility: type === currentType ? 'visible' : 'hidden'
116
+ }
117
+ }, type);
118
+ })
119
+ })]
120
+ }));
121
+ }
122
+ LogTerminalGroup.propTypes = {
123
+ // log name, 比如: blocklet display name
124
+ name: _propTypes.default.string.isRequired,
125
+ // 比如: abtnode | blocklet-services | blocklet-<did>
126
+ logId: _propTypes.default.string.isRequired,
127
+ // 日志类型, info/error 或 stdin/stdout/access
128
+ types: _propTypes.default.arrayOf(_propTypes.default.string),
129
+ // 写入 terminal 的初始数据
130
+ initialData: _propTypes.default.arrayOf(_propTypes.default.string),
131
+ prepend: _propTypes.default.node,
132
+ postpend: _propTypes.default.node
133
+ };
134
+ LogTerminalGroup.defaultProps = {
135
+ types: ['error', 'info', 'access', 'stdout', 'stderr'],
136
+ initialData: [],
137
+ prepend: null,
138
+ postpend: null
139
+ };
140
+ const LogTerminalGroupRoot = _styled.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n height: 100%;\n .log-terminal-group-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding-bottom: 16px;\n }\n\n .log-terminal-group-head-start {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n gap: 16px;\n ", " {\n flex-direction: column;\n align-items: start;\n }\n }\n\n .log-terminal-group-head-end {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n gap: 16px;\n ", " {\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"])), props => props.theme.breakpoints.down('md'), props => props.theme.breakpoints.down('md'));
141
+ const LogTerminal = /*#__PURE__*/(0, _react.forwardRef)((_ref3, ref) => {
142
+ let {
143
+ logFile
144
+ } = _ref3,
145
+ rest = _objectWithoutProperties(_ref3, _excluded2);
146
+ const terminalStyle = {
147
+ width: '100%',
148
+ boxSizing: 'border-box',
149
+ height: '100%'
150
+ };
151
+ const terminalOptions = {
152
+ theme: {
153
+ background: '#2C313C',
154
+ foreground: '#EEEEEE'
155
+ }
156
+ };
157
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(LogTerminalRoot, _objectSpread(_objectSpread({}, rest), {}, {
158
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
159
+ className: "log-terminal-top",
160
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_clock.default, {}), logFile && /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
161
+ children: logFile
162
+ })]
163
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
164
+ className: "log-terminal-container",
165
+ style: {
166
+ position: 'relative'
167
+ },
168
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Terminal.default, {
169
+ ref: ref,
170
+ style: terminalStyle,
171
+ options: terminalOptions
172
+ })
173
+ })]
174
+ }));
175
+ });
176
+ exports.LogTerminal = LogTerminal;
177
+ LogTerminal.propTypes = {
178
+ logFile: _propTypes.default.string
179
+ };
180
+ LogTerminal.defaultProps = {
181
+ logFile: ''
182
+ };
183
+ const LogTerminalRoot = _styled.default.div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\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"])));