ydb-components-material 0.1.98 → 0.1.99

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 (51) hide show
  1. package/build/docs/404.html +3 -3
  2. package/build/docs/_demos/:uuid +3 -3
  3. package/build/docs/colorful-button.html +3 -3
  4. package/build/docs/colorful-input.html +3 -3
  5. package/build/docs/index.html +3 -3
  6. package/build/docs/{umi.6979d68b.css → umi.475dd297.css} +1 -1
  7. package/build/docs/umi.4b7bc7e0.js +1 -0
  8. package/build/docs/~demos/:uuid.html +3 -3
  9. package/build/docs/~demos/colorful-button-demo.html +3 -3
  10. package/build/docs/~demos/colorful-input-demo.html +3 -3
  11. package/build/lowcode/3.js +2 -2
  12. package/build/lowcode/4.js +1 -1
  13. package/build/lowcode/5.js +1 -1
  14. package/build/lowcode/assets-daily.json +11 -11
  15. package/build/lowcode/assets-dev.json +2 -2
  16. package/build/lowcode/assets-prod.json +11 -11
  17. package/build/lowcode/index.js +1 -1
  18. package/build/lowcode/meta.js +1 -1
  19. package/build/lowcode/preview.js +9 -9
  20. package/build/lowcode/render/default/1.js +2 -2
  21. package/build/lowcode/render/default/2.js +1 -1
  22. package/build/lowcode/render/default/3.js +1 -1
  23. package/build/lowcode/render/default/view.css +1 -1
  24. package/build/lowcode/render/default/view.js +21 -21
  25. package/build/lowcode/view.css +1 -1
  26. package/build/lowcode/view.js +21 -21
  27. package/dist/1.js +2 -2
  28. package/dist/2.js +1 -1
  29. package/dist/3.js +1 -1
  30. package/dist/BizComps.css +1 -1
  31. package/dist/BizComps.js +26 -26
  32. package/dist/BizComps.js.map +1 -1
  33. package/es/components/message/index.d.ts +4 -5
  34. package/es/components/message/index.js +13 -35
  35. package/es/components/message/index.scss +22 -19
  36. package/es/components/scene-tree/index.js +105 -16
  37. package/es/components/scene-tree/index.scss +7 -0
  38. package/es/style.js +1 -1
  39. package/lib/components/message/index.d.ts +4 -5
  40. package/lib/components/message/index.js +13 -36
  41. package/lib/components/message/index.scss +22 -19
  42. package/lib/components/scene-tree/index.js +105 -16
  43. package/lib/components/scene-tree/index.scss +7 -0
  44. package/lib/style.js +1 -1
  45. package/lowcode/message/meta.ts +30 -0
  46. package/lowcode_es/message/meta.js +28 -0
  47. package/lowcode_es/meta.js +1 -1
  48. package/lowcode_lib/message/meta.js +28 -0
  49. package/lowcode_lib/meta.js +1 -1
  50. package/package.json +3 -3
  51. package/build/docs/umi.19ae92a3.js +0 -1
@@ -4,13 +4,12 @@ export interface MessageProps {
4
4
  /**
5
5
  * 类型
6
6
  */
7
- type?: "error" | "warning" | "success";
8
7
  title: string;
9
8
  text: string;
10
- goBack?: () => void;
11
- retry?: () => void;
12
- skip?: () => void;
13
- close: () => void;
9
+ cancelText: string;
10
+ okText: string;
11
+ cancel?: () => void;
12
+ ok?: () => void;
14
13
  }
15
14
  declare const Message: React.FC<MessageProps>;
16
15
  export default Message;
@@ -1,51 +1,29 @@
1
1
  import * as React from 'react';
2
- import ErrorIcon from "./icons/icon_error.svg";
3
- import WarningIcon from "./icons/icon_warning.svg";
4
2
  import "./index.scss";
5
3
  var Message = function Message(_ref) {
6
- var _ref$type = _ref.type,
7
- type = _ref$type === void 0 ? 'error' : _ref$type,
8
- title = _ref.title,
4
+ var title = _ref.title,
9
5
  text = _ref.text,
10
- goBack = _ref.goBack,
11
- retry = _ref.retry,
12
- skip = _ref.skip,
13
- close = _ref.close;
14
- console.log('goBack', goBack, type);
15
- var icon = type === 'error' ? ErrorIcon : WarningIcon;
6
+ cancelText = _ref.cancelText,
7
+ okText = _ref.okText,
8
+ cancel = _ref.cancel,
9
+ ok = _ref.ok;
16
10
  return /*#__PURE__*/React.createElement("div", {
17
11
  className: "message"
18
12
  }, /*#__PURE__*/React.createElement("div", {
19
13
  className: "content"
20
- }, /*#__PURE__*/React.createElement("img", {
21
- className: "icon",
22
- src: icon,
23
- alt: "",
24
- onClick: function onClick() {
25
- return goBack();
26
- }
27
- }), /*#__PURE__*/React.createElement("div", {
14
+ }, /*#__PURE__*/React.createElement("div", {
28
15
  className: "title"
29
16
  }, title), /*#__PURE__*/React.createElement("div", {
30
17
  className: "text"
31
18
  }, text), /*#__PURE__*/React.createElement("div", {
32
19
  className: "btns"
33
- }, goBack && /*#__PURE__*/React.createElement("div", {
34
- className: "blue_btn btn",
35
- onClick: goBack
36
- }, "\u8FD4\u56DE\u4FEE\u6539"), retry && skip && /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
37
- className: "black_btn",
38
- onClick: retry
39
- }, "\u518D\u8BD5\u4E00\u6B21"), /*#__PURE__*/React.createElement("div", {
40
- className: "blue_btn",
41
- onClick: skip
42
- }, "\u4EBA\u5DE5\u5BA1\u6838")), skip && close && /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
43
- className: "black_btn btn",
44
- onClick: skip
45
- }, "\u5FFD\u7565\uFF0C\u7EE7\u7EED\u63D0\u4EA4"), /*#__PURE__*/React.createElement("div", {
46
- className: "blue_btn btn",
47
- onClick: close
48
- }, "\u6211\u518D\u60F3\u60F3")))));
20
+ }, /*#__PURE__*/React.createElement("div", {
21
+ className: "left_btn btn",
22
+ onClick: cancel
23
+ }, cancelText), /*#__PURE__*/React.createElement("div", {
24
+ className: "right_btn btn",
25
+ onClick: ok
26
+ }, okText))));
49
27
  };
50
28
  Message.displayName = 'Message';
51
29
  export default Message;
@@ -19,47 +19,50 @@
19
19
  justify-content: center;
20
20
  align-items: center;
21
21
 
22
- .icon {
23
- width: 32px;
24
- height: 32px;
25
- margin-bottom: 8px;
26
- margin-top: 32px;
27
- }
28
-
29
22
  .title {
23
+ margin-top: 12px;
30
24
  font-size: 16px;
31
- color: #FF6237;
32
- margin-bottom: 16px;
25
+ width: 90%;
26
+ color: #333333;
27
+ margin-bottom: 12px;
28
+ font-weight: 400;
33
29
  }
34
30
 
35
31
  .text {
36
32
  font-size: 14px;
37
- color: #333333;
33
+ color: #666666;
38
34
  margin: 0 29px 17px;
39
35
  text-align: center;
40
36
  }
41
37
 
42
38
  .btns {
43
- border-top: 1px solid rgba(0, 0, 0, 0.102);
44
39
  width: 100%;
45
40
  display: flex;
46
41
  flex: 1;
47
42
  height: 56px;
43
+ gap: 20px;
44
+ justify-content: center;
45
+ margin-bottom: 12px;
46
+
48
47
 
49
48
  .btn {
50
- font-size: 16px;
51
- width: 100%;
52
- height: 56px;
53
- line-height: 56px;
49
+ font-size: 12px;
50
+ padding: 0px 12px;
51
+ height: 28px;
52
+ line-height: 28px;
54
53
  text-align: center;
54
+ border-radius: 3px;
55
55
  }
56
56
 
57
- .blue_btn {
58
- color: #1678FF;
57
+ .left_btn {
58
+ color: #ffffff;
59
+ background-color: #3e71f7;
60
+
59
61
  }
60
62
 
61
- .left_btn {
62
- border-right: 1px solid rgba(0, 0, 0, 0.102);
63
+ .right_btn {
64
+ border: 1px solid #3e71f7;
65
+ color: #3e71f7;
63
66
  }
64
67
  }
65
68
 
@@ -1,4 +1,6 @@
1
1
  import _Checkbox from "@alifd/next/es/checkbox";
2
+ import _Balloon from "@alifd/next/es/balloon";
3
+ import _Icon from "@alifd/next/es/icon";
2
4
  import _extends from "@babel/runtime/helpers/extends";
3
5
  import _Radio from "@alifd/next/es/radio";
4
6
  function _createForOfIteratorHelperLoose(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -64,16 +66,40 @@ var SceneTree = function SceneTree(_ref) {
64
66
  var targetNodeOfCurTree = _findNodeById(curTree, targetId, targetPId);
65
67
  // 删除当前题目的子题目先 可能还留有上次带出来的题目
66
68
  targetNodeOfCurTree.children = [];
69
+ // 如果不是初始化的时候就禁用了 重置一下禁用状态和
70
+ targetNodeOfOriginTree.options.forEach(function (option) {
71
+ if (option.preDisabled !== true) {
72
+ option.disabled = false;
73
+ option.showMutuallyExclusivePrompt = false;
74
+ }
75
+ });
67
76
  console.log('targetNodeOfCurTree----', targetNodeOfCurTree);
68
77
  // 可能是个多选题 val会是个数组
69
78
  if (Array.isArray(val)) {
70
79
  if (val.length) {
71
80
  var optionNameList = [];
72
81
  val.forEach(function (item) {
82
+ // 找到当前选项在当前树中
83
+ var curOption = targetNodeOfCurTree.options.find(function (option) {
84
+ return option.id === item;
85
+ });
86
+ curOption.showMutuallyExclusivePrompt = true;
73
87
  // 找到对应的选项在源数据中
74
88
  var targetOption = targetNodeOfOriginTree.options.find(function (option) {
75
89
  return option.id === item;
76
90
  });
91
+ // 如果当前选项有互斥选项,找出来禁用掉
92
+ if (Array.isArray(targetOption.mutuallyExclusiveOptions) && targetOption.mutuallyExclusiveOptions.length) {
93
+ targetOption.mutuallyExclusiveOptions.forEach(function (mutuallyExclusiveOption) {
94
+ var targetMutuallyExclusiveOption = targetNodeOfCurTree.options.find(function (option) {
95
+ return option.id === mutuallyExclusiveOption;
96
+ });
97
+ console.log('targetMutuallyExclusiveOption--', targetMutuallyExclusiveOption);
98
+ if (targetMutuallyExclusiveOption) {
99
+ targetMutuallyExclusiveOption.disabled = true;
100
+ }
101
+ });
102
+ }
77
103
  optionNameList.push(targetOption.name);
78
104
  // 拿到这个选中的选项会带出来的子题目 虽然是个数组。但是只有一项 只会带出来一个题目
79
105
  var targetNodeChildList = (targetOption.children || []).filter(Boolean).map(function (n) {
@@ -142,6 +168,13 @@ var SceneTree = function SceneTree(_ref) {
142
168
  setCurTree(_extends({}, curTree));
143
169
  valChange(curTree);
144
170
  };
171
+ var trigger = function trigger(style) {
172
+ return /*#__PURE__*/React.createElement(_Icon, {
173
+ type: "help",
174
+ size: "xs",
175
+ style: style
176
+ });
177
+ };
145
178
  var _TreeNode = function TreeNode(_ref2) {
146
179
  var node = _ref2.node,
147
180
  otherStyle = _ref2.style;
@@ -161,7 +194,19 @@ var SceneTree = function SceneTree(_ref) {
161
194
  className: !isPC ? 'title' : 'title_pc'
162
195
  }, /*#__PURE__*/React.createElement("span", {
163
196
  className: "required"
164
- }, "*"), node.title, !!+node.isMultipleChoice && '(多选)'), !+node.isMultipleChoice ? /*#__PURE__*/React.createElement(RadioGroup, {
197
+ }, "*"), node.title, !!+node.isMultipleChoice && '(多选)', node.description && /*#__PURE__*/React.createElement(_Balloon, {
198
+ v2: true,
199
+ trigger: trigger({
200
+ color: '#666',
201
+ marginTop: '-4px',
202
+ marginLeft: '5px'
203
+ }),
204
+ triggerType: "click",
205
+ align: "t",
206
+ arrowPointToCenter: true,
207
+ title: "",
208
+ delay: 20
209
+ }, node.description)), !+node.isMultipleChoice ? /*#__PURE__*/React.createElement(RadioGroup, {
165
210
  className: isPC && 'options_pc',
166
211
  value: node.value,
167
212
  onChange: onValChange,
@@ -169,32 +214,76 @@ var SceneTree = function SceneTree(_ref) {
169
214
  }, node.options.map(function (option, index) {
170
215
  console.log('optionsVal', option.value);
171
216
  var isOverFlow = option.name.length > 4;
172
- return /*#__PURE__*/React.createElement(_Radio, {
217
+ return /*#__PURE__*/React.createElement("div", {
218
+ key: index,
219
+ style: {
220
+ display: 'flex',
221
+ alignItems: 'center',
222
+ width: '100%',
223
+ marginTop: index > 0 ? '10px' : '',
224
+ flexWrap: 'wrap'
225
+ }
226
+ }, /*#__PURE__*/React.createElement(_Radio, {
173
227
  id: option.pid + "+" + node.pid,
174
228
  key: option.id + node.pid + option.value + index,
175
229
  value: option.id,
176
- disabled: node.disabled,
177
- style: isOverFlow && index > 0 ? {
178
- width: '100%',
179
- marginTop: '10px'
180
- } : undefined
181
- }, option.name);
230
+ disabled: option.disabled
231
+ }, option.name), option.description && /*#__PURE__*/React.createElement(_Balloon, {
232
+ v2: true,
233
+ trigger: trigger({
234
+ color: '#666',
235
+ left: '-10px',
236
+ position: 'relative',
237
+ top: '1px'
238
+ }),
239
+ triggerType: "click",
240
+ align: "t",
241
+ arrowPointToCenter: true,
242
+ title: "",
243
+ delay: 20
244
+ }, option.description));
182
245
  })) : /*#__PURE__*/React.createElement(_Checkbox.Group, {
183
246
  value: node.value,
184
247
  onChange: onValChange,
185
248
  className: isPC && 'options_pc'
186
249
  }, node.options.map(function (option, index) {
187
- var isOverFlow = option.name.length > 4;
188
- return /*#__PURE__*/React.createElement(_Checkbox, {
250
+ var showMutualExclusionPrompt = option.mutualExclusionPrompt;
251
+ return /*#__PURE__*/React.createElement("div", {
252
+ style: {
253
+ display: 'flex',
254
+ alignItems: 'center',
255
+ width: '100%',
256
+ marginTop: index > 0 ? '10px' : '',
257
+ flexWrap: 'wrap'
258
+ }
259
+ }, /*#__PURE__*/React.createElement(_Checkbox, {
189
260
  id: option.pid + "+" + node.pid,
190
261
  key: option.id + node.pid + option.value + index,
191
262
  value: option.id,
192
- disabled: node.disabled,
193
- style: isOverFlow && index > 0 ? {
194
- width: '100%',
195
- marginTop: '10px'
196
- } : undefined
197
- }, option.name);
263
+ disabled: option.disabled
264
+ }, option.name), option.description && /*#__PURE__*/React.createElement(_Balloon, {
265
+ v2: true,
266
+ trigger: trigger({
267
+ color: '#666',
268
+ left: '-10px',
269
+ position: 'relative',
270
+ top: '1px'
271
+ }),
272
+ triggerType: "click",
273
+ align: "t",
274
+ arrowPointToCenter: true,
275
+ title: "",
276
+ delay: 20
277
+ }, node.description), option.showMutuallyExclusivePrompt && option.mutualExclusionPrompt && /*#__PURE__*/React.createElement("div", {
278
+ className: "mutualExclusionPrompt"
279
+ }, /*#__PURE__*/React.createElement(_Icon, {
280
+ type: "prompt",
281
+ size: "xs",
282
+ style: {
283
+ color: '#FF6237',
284
+ marginRight: '4px'
285
+ }
286
+ }), option.mutualExclusionPrompt));
198
287
  }))), node.children && (node.children || []).map(function (item, index) {
199
288
  var _node$children, _node$children2, _node$children3, _node$children4;
200
289
  console.log('----', ((_node$children = node.children) === null || _node$children === void 0 ? void 0 : _node$children.length) > 1 && index !== ((_node$children2 = node.children) === null || _node$children2 === void 0 ? void 0 : _node$children2.length) - 1);
@@ -12,6 +12,13 @@
12
12
  margin-bottom: 16px;
13
13
  }
14
14
 
15
+ .mutualExclusionPrompt {
16
+ color: #FF6237;
17
+ font-size: 12px;
18
+ margin-top: 3px;
19
+ width: 100%;
20
+ }
21
+
15
22
  .title_pc {
16
23
  .required {
17
24
  color: #FF3D3D;
package/es/style.js CHANGED
@@ -2,6 +2,6 @@ import '@alifd/next/es/icon/style';
2
2
  import '@alifd/next/es/message/style';
3
3
  import '@alifd/next/es/radio/style';
4
4
  import '@alifd/next/es/checkbox/style';
5
- import 'antd/es/cascader/style';
6
5
  import '@alifd/next/es/balloon/style';
6
+ import 'antd/es/cascader/style';
7
7
  import './index.scss';
@@ -4,13 +4,12 @@ export interface MessageProps {
4
4
  /**
5
5
  * 类型
6
6
  */
7
- type?: "error" | "warning" | "success";
8
7
  title: string;
9
8
  text: string;
10
- goBack?: () => void;
11
- retry?: () => void;
12
- skip?: () => void;
13
- close: () => void;
9
+ cancelText: string;
10
+ okText: string;
11
+ cancel?: () => void;
12
+ ok?: () => void;
14
13
  }
15
14
  declare const Message: React.FC<MessageProps>;
16
15
  export default Message;
@@ -1,57 +1,34 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
3
  exports.__esModule = true;
5
4
  exports["default"] = void 0;
6
5
  var React = _interopRequireWildcard(require("react"));
7
- var _icon_error = _interopRequireDefault(require("./icons/icon_error.svg"));
8
- var _icon_warning = _interopRequireDefault(require("./icons/icon_warning.svg"));
9
6
  require("./index.scss");
10
7
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
11
8
  var Message = function Message(_ref) {
12
- var _ref$type = _ref.type,
13
- type = _ref$type === void 0 ? 'error' : _ref$type,
14
- title = _ref.title,
9
+ var title = _ref.title,
15
10
  text = _ref.text,
16
- goBack = _ref.goBack,
17
- retry = _ref.retry,
18
- skip = _ref.skip,
19
- close = _ref.close;
20
- console.log('goBack', goBack, type);
21
- var icon = type === 'error' ? _icon_error["default"] : _icon_warning["default"];
11
+ cancelText = _ref.cancelText,
12
+ okText = _ref.okText,
13
+ cancel = _ref.cancel,
14
+ ok = _ref.ok;
22
15
  return /*#__PURE__*/React.createElement("div", {
23
16
  className: "message"
24
17
  }, /*#__PURE__*/React.createElement("div", {
25
18
  className: "content"
26
- }, /*#__PURE__*/React.createElement("img", {
27
- className: "icon",
28
- src: icon,
29
- alt: "",
30
- onClick: function onClick() {
31
- return goBack();
32
- }
33
- }), /*#__PURE__*/React.createElement("div", {
19
+ }, /*#__PURE__*/React.createElement("div", {
34
20
  className: "title"
35
21
  }, title), /*#__PURE__*/React.createElement("div", {
36
22
  className: "text"
37
23
  }, text), /*#__PURE__*/React.createElement("div", {
38
24
  className: "btns"
39
- }, goBack && /*#__PURE__*/React.createElement("div", {
40
- className: "blue_btn btn",
41
- onClick: goBack
42
- }, "\u8FD4\u56DE\u4FEE\u6539"), retry && skip && /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
43
- className: "black_btn",
44
- onClick: retry
45
- }, "\u518D\u8BD5\u4E00\u6B21"), /*#__PURE__*/React.createElement("div", {
46
- className: "blue_btn",
47
- onClick: skip
48
- }, "\u4EBA\u5DE5\u5BA1\u6838")), skip && close && /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
49
- className: "black_btn btn",
50
- onClick: skip
51
- }, "\u5FFD\u7565\uFF0C\u7EE7\u7EED\u63D0\u4EA4"), /*#__PURE__*/React.createElement("div", {
52
- className: "blue_btn btn",
53
- onClick: close
54
- }, "\u6211\u518D\u60F3\u60F3")))));
25
+ }, /*#__PURE__*/React.createElement("div", {
26
+ className: "left_btn btn",
27
+ onClick: cancel
28
+ }, cancelText), /*#__PURE__*/React.createElement("div", {
29
+ className: "right_btn btn",
30
+ onClick: ok
31
+ }, okText))));
55
32
  };
56
33
  Message.displayName = 'Message';
57
34
  var _default = exports["default"] = Message;
@@ -19,47 +19,50 @@
19
19
  justify-content: center;
20
20
  align-items: center;
21
21
 
22
- .icon {
23
- width: 32px;
24
- height: 32px;
25
- margin-bottom: 8px;
26
- margin-top: 32px;
27
- }
28
-
29
22
  .title {
23
+ margin-top: 12px;
30
24
  font-size: 16px;
31
- color: #FF6237;
32
- margin-bottom: 16px;
25
+ width: 90%;
26
+ color: #333333;
27
+ margin-bottom: 12px;
28
+ font-weight: 400;
33
29
  }
34
30
 
35
31
  .text {
36
32
  font-size: 14px;
37
- color: #333333;
33
+ color: #666666;
38
34
  margin: 0 29px 17px;
39
35
  text-align: center;
40
36
  }
41
37
 
42
38
  .btns {
43
- border-top: 1px solid rgba(0, 0, 0, 0.102);
44
39
  width: 100%;
45
40
  display: flex;
46
41
  flex: 1;
47
42
  height: 56px;
43
+ gap: 20px;
44
+ justify-content: center;
45
+ margin-bottom: 12px;
46
+
48
47
 
49
48
  .btn {
50
- font-size: 16px;
51
- width: 100%;
52
- height: 56px;
53
- line-height: 56px;
49
+ font-size: 12px;
50
+ padding: 0px 12px;
51
+ height: 28px;
52
+ line-height: 28px;
54
53
  text-align: center;
54
+ border-radius: 3px;
55
55
  }
56
56
 
57
- .blue_btn {
58
- color: #1678FF;
57
+ .left_btn {
58
+ color: #ffffff;
59
+ background-color: #3e71f7;
60
+
59
61
  }
60
62
 
61
- .left_btn {
62
- border-right: 1px solid rgba(0, 0, 0, 0.102);
63
+ .right_btn {
64
+ border: 1px solid #3e71f7;
65
+ color: #3e71f7;
63
66
  }
64
67
  }
65
68