@pisell/materials 2.2.32 → 2.2.34

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 (61) hide show
  1. package/build/lowcode/assets-daily.json +11 -11
  2. package/build/lowcode/assets-dev.json +2 -2
  3. package/build/lowcode/assets-prod.json +11 -11
  4. package/build/lowcode/index.js +1 -1
  5. package/build/lowcode/meta.js +1 -1
  6. package/build/lowcode/preview.js +7 -7
  7. package/build/lowcode/render/default/view.css +1 -1
  8. package/build/lowcode/render/default/view.js +5 -5
  9. package/build/lowcode/view.css +1 -1
  10. package/build/lowcode/view.js +17 -17
  11. package/es/components/iconfont/index.js +1 -1
  12. package/es/components/pisellInformationEntry/Input/index.js +9 -3
  13. package/es/components/pisellInformationEntry/constants.d.ts +10 -0
  14. package/es/components/pisellInformationEntry/constants.js +10 -0
  15. package/es/components/pisellInformationEntry/hooks/useTerminalPeripherals.d.ts +8 -0
  16. package/es/components/pisellInformationEntry/hooks/useTerminalPeripherals.js +54 -0
  17. package/es/components/pisellInformationEntry/index.js +21 -4
  18. package/es/components/pisellInformationEntry/index.less +1 -1
  19. package/es/components/pisellLoading/index.d.ts +2 -0
  20. package/es/components/pisellLoading/index.js +3 -1
  21. package/es/components/pisellStatisticList/index.less +2 -1
  22. package/es/components/pisellWalletPassCard/index.d.ts +2 -0
  23. package/es/components/pisellWalletPassCard/index.js +16 -4
  24. package/es/components/pisellWalletPassCard/index.less +4 -0
  25. package/es/components/select-time/RightPanel/index.d.ts +2 -2
  26. package/es/components/select-time/RightPanel/index.js +7 -7
  27. package/es/components/virtual-keyboard/Keyboard/index.d.ts +1 -0
  28. package/es/components/virtual-keyboard/Keyboard/index.js +10 -2
  29. package/es/locales/en-US.d.ts +2 -0
  30. package/es/locales/en-US.js +3 -1
  31. package/es/locales/zh-CN.d.ts +2 -0
  32. package/es/locales/zh-CN.js +3 -1
  33. package/es/locales/zh-TW.d.ts +2 -0
  34. package/es/locales/zh-TW.js +3 -1
  35. package/lib/components/iconfont/index.js +1 -1
  36. package/lib/components/pisellInformationEntry/Input/index.js +9 -1
  37. package/lib/components/pisellInformationEntry/constants.d.ts +10 -0
  38. package/lib/components/pisellInformationEntry/constants.js +12 -0
  39. package/lib/components/pisellInformationEntry/hooks/useTerminalPeripherals.d.ts +8 -0
  40. package/lib/components/pisellInformationEntry/hooks/useTerminalPeripherals.js +83 -0
  41. package/lib/components/pisellInformationEntry/index.js +18 -2
  42. package/lib/components/pisellInformationEntry/index.less +1 -1
  43. package/lib/components/pisellLoading/index.d.ts +2 -0
  44. package/lib/components/pisellLoading/index.js +2 -1
  45. package/lib/components/pisellStatisticList/index.less +2 -1
  46. package/lib/components/pisellWalletPassCard/index.d.ts +2 -0
  47. package/lib/components/pisellWalletPassCard/index.js +8 -4
  48. package/lib/components/pisellWalletPassCard/index.less +4 -0
  49. package/lib/components/select-time/RightPanel/index.d.ts +2 -2
  50. package/lib/components/virtual-keyboard/Keyboard/index.d.ts +1 -0
  51. package/lib/components/virtual-keyboard/Keyboard/index.js +15 -2
  52. package/lib/locales/en-US.d.ts +2 -0
  53. package/lib/locales/en-US.js +3 -1
  54. package/lib/locales/zh-CN.d.ts +2 -0
  55. package/lib/locales/zh-CN.js +3 -1
  56. package/lib/locales/zh-TW.d.ts +2 -0
  57. package/lib/locales/zh-TW.js +3 -1
  58. package/lowcode/pisell-card-list/meta.ts +60 -24
  59. package/lowcode/pisell-information-entry/meta.ts +22 -7
  60. package/lowcode/pisell-loading/meta.ts +8 -0
  61. package/package.json +1 -1
@@ -2,7 +2,7 @@ function _extends() { _extends = Object.assign ? Object.assign.bind() : function
2
2
  import { createFromIconfontCN } from '@ant-design/icons';
3
3
  import React from 'react';
4
4
  var MyIcon = createFromIconfontCN({
5
- scriptUrl: 'https://unpkg.com/@pisell/materials@3.0.37/iconfont/iconfont.js' // 在 iconfont.cn 上生成
5
+ scriptUrl: 'https://static.pisellcdn.com/pisell2iconfont.js' // 在 iconfont.cn 上生成
6
6
  });
7
7
 
8
8
  var IconFont = function IconFont(props) {
@@ -11,7 +11,7 @@ import Iconfont from "../../iconfont";
11
11
  import "./index.less";
12
12
  import { getText } from "../../../locales";
13
13
  var PisellEntryInput = function PisellEntryInput(props) {
14
- var onChange = props.onChange,
14
+ var _onChange = props.onChange,
15
15
  searchDescribe = props.searchDescribe;
16
16
  var _useState = useState(''),
17
17
  _useState2 = _slicedToArray(_useState, 2),
@@ -25,7 +25,13 @@ var PisellEntryInput = function PisellEntryInput(props) {
25
25
  autoFocus: true,
26
26
  value: value,
27
27
  onChange: function onChange(e) {
28
- return setValue(e.target.value);
28
+ setValue(e.target.value);
29
+ if (!e.target.value) {
30
+ _onChange(e.target.value);
31
+ }
32
+ },
33
+ onPressEnter: function onPressEnter(e) {
34
+ _onChange(value);
29
35
  },
30
36
  style: {
31
37
  flex: 1
@@ -40,7 +46,7 @@ var PisellEntryInput = function PisellEntryInput(props) {
40
46
  }), /*#__PURE__*/React.createElement(Button, {
41
47
  size: "large",
42
48
  onClick: function onClick() {
43
- return onChange(value);
49
+ return _onChange(value);
44
50
  },
45
51
  disabled: !value
46
52
  }, getText('pisell-information-entry-input-search'))), /*#__PURE__*/React.createElement("div", {
@@ -1,3 +1,13 @@
1
1
  import { EntryModeType } from './index';
2
2
  export declare const entryModeTextIcon: Record<EntryModeType['type'], any>;
3
+ export declare const entryModeErrorTextIcon: {
4
+ scanner: {
5
+ icon: string;
6
+ text: string;
7
+ };
8
+ nfc: {
9
+ icon: string;
10
+ text: string;
11
+ };
12
+ };
3
13
  export declare const passiveModeType: string[];
@@ -16,6 +16,16 @@ export var entryModeTextIcon = {
16
16
  text: 'NFC ready'
17
17
  }
18
18
  };
19
+ export var entryModeErrorTextIcon = {
20
+ scanner: {
21
+ icon: 'pisell2-a-Scanner11',
22
+ text: 'Scanner'
23
+ },
24
+ nfc: {
25
+ icon: 'pisell2-a-NFC1',
26
+ text: 'NFC'
27
+ }
28
+ };
19
29
 
20
30
  // 没有操作界面的输入模式
21
31
  export var passiveModeType = ['scanner', 'nfc'];
@@ -0,0 +1,8 @@
1
+ declare type Peripherals = {
2
+ scanner: 'none' | 'connected' | 'disconnect';
3
+ nfc: 'none' | 'connected' | 'disconnect';
4
+ };
5
+ declare const useTerminalPeripherals: (onChange?: ((val: string) => void) | undefined) => {
6
+ peripheralsStatus: Peripherals;
7
+ };
8
+ export default useTerminalPeripherals;
@@ -0,0 +1,54 @@
1
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
5
+ function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
6
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
7
+ import { useEffect, useState } from 'react';
8
+ import useEngineContext from "../../../hooks/useEngineContext";
9
+ var useTerminalPeripherals = function useTerminalPeripherals(onChange) {
10
+ var _context$appHelper;
11
+ var context = useEngineContext();
12
+ var _ref = ((_context$appHelper = context.appHelper) === null || _context$appHelper === void 0 ? void 0 : _context$appHelper.utils) || {},
13
+ interaction = _ref.interaction;
14
+ var _useState = useState({
15
+ scanner: 'none',
16
+ nfc: 'none'
17
+ }),
18
+ _useState2 = _slicedToArray(_useState, 2),
19
+ peripheralsStatus = _useState2[0],
20
+ setPeripheralsStatus = _useState2[1];
21
+ useEffect(function () {
22
+ var _interaction$utils, _interaction$utils$mo, _interaction$utils2, _interaction$utils2$p, _interaction$utils3, _interaction$utils3$m;
23
+ // 获取外部设备扫描结果
24
+ interaction === null || interaction === void 0 ? void 0 : (_interaction$utils = interaction.utils) === null || _interaction$utils === void 0 ? void 0 : (_interaction$utils$mo = _interaction$utils.mountFunction) === null || _interaction$utils$mo === void 0 ? void 0 : _interaction$utils$mo.call(_interaction$utils, 'global', 'peripheralsResult', function (strVal) {
25
+ try {
26
+ var _val = JSON.parse(strVal);
27
+ onChange === null || onChange === void 0 ? void 0 : onChange(_val.value);
28
+ } catch (err) {
29
+ console.error(err);
30
+ }
31
+ });
32
+
33
+ // 主动获取设备连接状态
34
+ interaction === null || interaction === void 0 ? void 0 : (_interaction$utils2 = interaction.utils) === null || _interaction$utils2 === void 0 ? void 0 : (_interaction$utils2$p = _interaction$utils2.postMessageToApp) === null || _interaction$utils2$p === void 0 ? void 0 : _interaction$utils2$p.call(_interaction$utils2, {
35
+ module: 'global',
36
+ key: 'get_peripherals_status',
37
+ data: {}
38
+ });
39
+
40
+ // 设备当前连接状态返回
41
+ interaction === null || interaction === void 0 ? void 0 : (_interaction$utils3 = interaction.utils) === null || _interaction$utils3 === void 0 ? void 0 : (_interaction$utils3$m = _interaction$utils3.mountFunction) === null || _interaction$utils3$m === void 0 ? void 0 : _interaction$utils3$m.call(_interaction$utils3, 'global', 'peripheralsStatus', function (strPeripherals) {
42
+ try {
43
+ var peripherals = JSON.parse(strPeripherals);
44
+ setPeripheralsStatus(peripherals);
45
+ } catch (err) {
46
+ console.error(err);
47
+ }
48
+ });
49
+ }, []);
50
+ return {
51
+ peripheralsStatus: peripheralsStatus
52
+ };
53
+ };
54
+ export default useTerminalPeripherals;
@@ -19,11 +19,12 @@ import classNames from 'classnames';
19
19
  import usePisellConfig from "../pisell-config-provider/hooks/usePisellConfig";
20
20
  import PisellCard from "../pisellCard";
21
21
  import Iconfont from "../iconfont";
22
- import { entryModeTextIcon, passiveModeType } from "./constants";
22
+ import { entryModeErrorTextIcon, entryModeTextIcon, passiveModeType } from "./constants";
23
23
  import Scan from "./Scan";
24
24
  import Button from "../button";
25
25
  import Input from "./Input";
26
26
  import { hasCamera } from "./utils";
27
+ import useTerminalPeripherals from "./hooks/useTerminalPeripherals";
27
28
  import "./index.less";
28
29
  var CardButton = function CardButton(props) {
29
30
  var icon = props.icon,
@@ -44,6 +45,8 @@ var PisellInformationEntry = function PisellInformationEntry(props) {
44
45
  _useState2 = _slicedToArray(_useState, 2),
45
46
  currentType = _useState2[0],
46
47
  setCurrentType = _useState2[1];
48
+ var _useTerminalPeriphera = useTerminalPeripherals(onChange),
49
+ peripheralsStatus = _useTerminalPeriphera.peripheralsStatus;
47
50
 
48
51
  // 可用录入模式
49
52
  var _useState3 = useState(entryModes),
@@ -72,11 +75,20 @@ var PisellInformationEntry = function PisellInformationEntry(props) {
72
75
  return item.type !== 'scanCode';
73
76
  });
74
77
  case 5:
78
+ available = available.filter(function (item) {
79
+ if (item.type === 'scanner') {
80
+ return peripheralsStatus.scanner !== 'none';
81
+ }
82
+ if (item.type === 'nfc') {
83
+ return peripheralsStatus.nfc !== 'none';
84
+ }
85
+ return true;
86
+ });
75
87
  if (available.length === 1) {
76
88
  setCurrentType(available[0].type);
77
89
  }
78
90
  setAvailableEntryModes(available);
79
- case 7:
91
+ case 8:
80
92
  case "end":
81
93
  return _context.stop();
82
94
  }
@@ -87,7 +99,7 @@ var PisellInformationEntry = function PisellInformationEntry(props) {
87
99
  };
88
100
  }();
89
101
  getEntryModes();
90
- }, [entryModes]);
102
+ }, [entryModes, peripheralsStatus]);
91
103
  var handleChange = function handleChange(val) {
92
104
  onChange === null || onChange === void 0 ? void 0 : onChange(val);
93
105
  };
@@ -164,10 +176,15 @@ var PisellInformationEntry = function PisellInformationEntry(props) {
164
176
  className: "pisell-information-entry-modes"
165
177
  }, availableEntryModes.map(function (item) {
166
178
  var detail = entryModeTextIcon[item.type];
179
+ var icon = detail.icon;
180
+ if (['scanner', 'nfc'].includes(item.type)) {
181
+ var disconnect = entryModeErrorTextIcon[item.type];
182
+ icon = peripheralsStatus[item.type] === 'connected' ? detail.icon : disconnect.icon;
183
+ }
167
184
  return /*#__PURE__*/React.createElement(CardButton, {
168
185
  bordered: !passiveModeType.includes(item.type),
169
186
  icon: /*#__PURE__*/React.createElement(Iconfont, {
170
- type: detail.icon,
187
+ type: icon,
171
188
  className: "pisell-card-button-icon"
172
189
  }),
173
190
  className: classNames('pisell-information-entry-item', _defineProperty({}, 'pisell-entry-ready', passiveModeType.includes(item.type))),
@@ -23,7 +23,7 @@
23
23
  flex: 1;
24
24
  text-align: center;
25
25
  cursor: pointer;
26
- min-width: 165px;
26
+ min-width: 140px;
27
27
  .pisell-card-button-icon {
28
28
  height: 48px;
29
29
  font-size: 36px;
@@ -13,6 +13,8 @@ export interface PisellLoadingProps extends SpinProps {
13
13
  mask?: boolean | MaskType;
14
14
  /** 是否全屏 */
15
15
  fullscreen?: boolean;
16
+ /** 延迟显示加载效果的时间(防止闪烁) */
17
+ delay?: number;
16
18
  }
17
19
  declare const PisellLoading: (props: PisellLoadingProps) => React.JSX.Element;
18
20
  export default PisellLoading;
@@ -8,7 +8,8 @@ var PisellLoading = function PisellLoading(props) {
8
8
  var children = props.children,
9
9
  fullscreen = props.fullscreen,
10
10
  mask = props.mask,
11
- loading = props.loading;
11
+ loading = props.loading,
12
+ delay = props.delay;
12
13
  var ref = useRef(null);
13
14
  var _ref = mask || {},
14
15
  _ref$backgroundColor = _ref.backgroundColor,
@@ -32,6 +33,7 @@ var PisellLoading = function PisellLoading(props) {
32
33
  className: 'pisell-loading-wrapper'
33
34
  }, /*#__PURE__*/React.createElement(Spin, {
34
35
  fullscreen: fullscreen,
36
+ delay: delay,
35
37
  spinning: loading,
36
38
  indicator: /*#__PURE__*/React.createElement(IconFont, {
37
39
  type: 'pisell2-loader2',
@@ -31,10 +31,11 @@
31
31
  }
32
32
  .pisell-lowcode-statistic-list-item-children-label {
33
33
  color: var(--Base-White, #fff);
34
- font-size: 12px;
34
+ font-size: 14px;
35
35
  font-weight: 400;
36
36
  line-height: 18px; /* 150% */
37
37
  margin-right: 4px;
38
+ opacity: 0.7;
38
39
  }
39
40
  .pisell-lowcode-statistic-list-item-children-value {
40
41
  color: var(--Base-White, #fff);
@@ -20,6 +20,8 @@ export interface PisellWalletPassCardProps {
20
20
  disabled?: boolean;
21
21
  /** 禁用原因 */
22
22
  disabledReason?: string;
23
+ /** 是否展示禁用原因 */
24
+ showDisabledReason?: string;
23
25
  /** 封面图 */
24
26
  cover?: string;
25
27
  /** 余额标题文案 */
@@ -42,10 +42,16 @@ var PisellWalletPassCard = function PisellWalletPassCard(props) {
42
42
  _props$showQrCode = props.showQrCode,
43
43
  showQrCode = _props$showQrCode === void 0 ? true : _props$showQrCode,
44
44
  _props$showBalanceSym = props.showBalanceSymbol,
45
- showBalanceSymbol = _props$showBalanceSym === void 0 ? true : _props$showBalanceSym;
45
+ showBalanceSymbol = _props$showBalanceSym === void 0 ? true : _props$showBalanceSym,
46
+ _props$showDisabledRe = props.showDisabledReason,
47
+ showDisabledReason = _props$showDisabledRe === void 0 ? true : _props$showDisabledRe,
48
+ _props$showDiscount = props.showDiscount,
49
+ showDiscount = _props$showDiscount === void 0 ? false : _props$showDiscount,
50
+ discount = props.discount;
46
51
  return /*#__PURE__*/React.createElement("div", {
47
52
  className: classNames('pisell-wallet-pass-card', {
48
- 'pisell-card-disabled': disabled
53
+ 'pisell-card-disabled': disabled,
54
+ 'pisell-card-disabled-hide-disabled-reason': disabled && !showDisabledReason
49
55
  }),
50
56
  style: showCover ? {
51
57
  backgroundImage: "url('".concat(cover || 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gHYSUNDX1BST0ZJTEUAAQEAAAHIAAAAAAQwAABtbnRyUkdCIFhZWiAAAAAAAAAAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAACRyWFlaAAABFAAAABRnWFlaAAABKAAAABRiWFlaAAABPAAAABR3dHB0AAABUAAAABRyVFJDAAABZAAAAChnVFJDAAABZAAAAChiVFJDAAABZAAAAChjcHJ0AAABjAAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAAgAAAAcAHMAUgBHAEJYWVogAAAAAAAAb6IAADj1AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9YWVogAAAAAAAA9tYAAQAAAADTLXBhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAACAAAAAcAEcAbwBvAGcAbABlACAASQBuAGMALgAgADIAMAAxADb/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgr/wAARCAF8A+gDASIAAhEBAxEB/8QAGQABAQEBAQEAAAAAAAAAAAAAAAQDAgEJ/8QAQhABAAIBAgMEBgYIBgICAwEAAAECAwQRBSExEhNBUSIyYXGBkRQjJEJSwTNTYqGxstHhBhVDY3KiJYJkczQ1klT/xAAWAQEBAQAAAAAAAAAAAAAAAAAAAQP/xAAZEQEBAAMBAAAAAAAAAAAAAAAAARExQSH/2gAMAwEAAhEDEQA/APvQA0ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA87Ub7PQAAAAAAAAAAAAAAAAAAAAAAA7URymdveAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMxHOXnamfVgHrybRHTmdnf1p3exERygHnpT7Dsx483oAAAAAAAAAAAAAAAAAAAAAAAAA87MeHJ6A89KPaRaJ68npMRPKQB52dvVnY7Ux60A9CJiecAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOJyTbljjf2+CyZHczEc5ebzPqx8ZeRj59q87y6S4HkVjrPN6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPJrHWOR2pj1o+L0AiYnnA5nHz7VJ2n2EZOzyyRt7fBR0AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPLXivLrPlDzt2vyx9PGXtaVr7/OQedi1+eSeX4YdREVjaI2AAAAAAAAAAJmI6zt73M5a9KxM+4HQ53y26REHdb+teZB7N6R1tDzvaz6sTPuh7GOkdKw9Bz28k9Mfzk2yz4xHudAOexeeuSfkd1v1vb5ugHPdV8ZmfidzT2ugHPdY/wAP7zuae10A57qvhMx8Tutul7fN0A57F46ZJ+RtljxiXQDntZI649/dJ3tY9aJj3w6AeRek9LQ9eTSk9avO629W8wDoczOWvhFiMtelomPeDoImJ6TuAAAAAAAExExtIA5mlqc8c7/sva3i3LpPlL15akW9k+Eg9HPbtTlk6eEugAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc3yRT0Yje3hEA9vetI3tLiIyZZ3vExG/Kvi9pjnft5J3t/B2oRERyiOQCAAAAAAAOL5q1nsx6U+UHYy5Od7dmPKqj2+WlOUzz8oeRbNfpWKx4TLqmOlI9Gr1BzGKs87TMuoiI6RsAAAAAAAAAAAAAAAAAAAAABMRPWN/eAOZxR1rM1n2PO1mpPOsWjzjq7Ac0y0vyieflLp5fHS8elVz2MuPnS3ajysDscVzVmezaJrPlLsAAAAAACYieUxycTF8fOkbx41dgPKXreN6zyeuL4537eOdp/dL2mSLejPK3jCjoBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxfJM27rFznxnwgC+Se13eON5nr7HuPHFN5md5nrJjxxjjaOcz1nzdAAAAAAADy1q0ibWnaPa4i+TN6kTWvnPWQdXy1py6z4RDnsZMnO87R5Q7pjrT1Y5z4z1eg8rStI2rXZ6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPLVreNrRu47GTHH1dt4j7stAHNMtbztG8T5S6c2x1vHpRz8Jjq5m98Men6VY8fGAaDyt63rFq233egAAAAOcmOL7TE7THSXQDimSe12MkbW8PKXbnJjjJG08pjpPk5pkmtu6y8p8J8waAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzy5LTbusXreM+QGTJa1u6xdfGfJ3jx1x17NfjPm8x464q9mvxnzdKACAAAAA4yZorPYpHat+GHNsl809jBO0R1v/AEd48VMUbVjn4zPio5phm1u8z27Vo6R4Q0BM5AAAAAAACZiI3mdvOZAGc6im+2OJtPlWD7Tk6RFI9+8rgaOLajDXreN/KObz6NW3PLkm3vl3XHSnqUiPdB4OO/mfUw2n3xsdrVW6UrX3y0AZ93qJ654j3VPo9p657z57S0EyM/o2OfWtaffY+i4fGs/NoLmjP6Lg/V/vk+i4fCs/NoGaM/o2OPVtaPdY+j2jpnvHlvLQTNGfd6iPVzxPsmp2tVXrStvdLQXIz+kTX9JhtHtiN3tdRhtyjJG/lLt5bHS/r0iffB4PRn9GrHPHe1fdPI+04/w3j5SDQZ11NN+zkiaz5WhpExMbxO8exAAAAAAAABnfDNZnJgnafGPCXuPNFrdi8TW3jWXbnJiplja0c/CfJR0MoyXw27Gad4npePzapfAAAAAeZMdctezaPdPk9AZ48lq27rNPP7tvNo5yY65a9m3wnyc48lot3WX1vCfNRoAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4zZYw07UxvM8oiPGQMuWazFMcb3npHk9xYq4q7RHPxnzc4MVqb5Mk73t1ny9jQAAAAAHOTJTFXt3nlAPbWrSO1adojxZbX1M7zMxTflHjYrjvqLRkzxtXf0aT+bYxgeVrFY7NY2iOkPQAAAAAB5fJTHHavaIj2g9eXyUxxve0Qy73Pn/Q17FZ+/b8odY9NjpPbtve34rKPO9y5P0OPaPxWexp4tO+a829/RoIPK1rWNqxEe56AAAAAAAAAAAAAAAAAAAPJrFo2tET7HE6eKz2sN5pP7mgDPvs2Plmx7x+KrvHkpljfHaJes8mnpee1WZraPGoNBj3ufB+mrFq/jr+cNaZKZK9rHaJgHoAAAAAPLVi0TW0bxPWGe19Nzje1PGPGrUB5W1bxFqzvHhL1jfHfTz3mCJmu/pU/OGmPJTLSL0neJMDoAAABxlxRlrtvtMc6zHg7AcYss23x5I2tHX2+12zz4pvtfHO169J/J7hy1zU36THK0T4So7AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeWtWlZtadoiGWGtst/pOSNvwRPhBbfU5exG3YpPP2z5NlABAAAB5e9cdZvedogHmXJXFSb3nlDPFivlv3+eP+NPIx0tntGfLG0R6lZ8Pa2UAEAAAAAc5MtMVe1edoZxXNqeeSJpT8O/OfeD2+om9u701e1P4vCHtNNHa7zNbt29sco90O60pSvZx1iI8Ih6oAIAAAAAAAAAAAAAAAAAAAAAAAAAADK+mjtd5ht2LeyOUtQGVdRNLRj1NOzM9LR0lq8tWt47N6xMT1iYZdjLpuePe1PGnjHuXwbDnHlplr2qW383SAAAAAxyY74bznwRv+Onm2AeY8lMtO3Sd4l6xyUtgtOfDG8ffr5+1rjvXJSL0nlKj0BAAAZZqWxX+k4o35enXzhqE8HlbVvWLVneJjk9YR9ly9npjvPo+yW4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADLU5bRtgxevfpPlHjLTJkripOS88ohlpcdp7Woyx6V+nsjyUaYsdcVIpXwdAgAAAAWmKx2rTtEQwx9rVX768TGOPUrPj7Xl5nWZJxVn6uk+nMfenyURERG0RtEdIXQAIAAAADLPqYxz3dK9rJPSsPMue85Po+nje3jbwq6waemCvKd7T61p8VHmLT27Xe57Ra89PKPc1BAAAAAAABlfWYa27FN728qRuYyNS0xWJm07bdZlh9tzfhxR85exosUz2ss2yT+3Kj2+t09Z7MWm0+VY3efSNRf9FpLbed52a1pSkbUpEe6HoMezrrdcmOvujd7Gnyz6+qvPujZqIMvodJ9bLknz3sfQ9P+GZ/9pagMvoWm/Vf9pPoWn8KzHutLUBl9DpHq5Lx7rPJ0+WPU1d/jG7YBj2ddX1cmO3vjZ59I1FP0mkmY86Tu3FyMa63T2na1+zPlaNm1Zi0RNZ336TDy1KXja9In3xuytosW/axWtjn9mTwbDH7bh/Dlj2cpe01mG09i+9LeV+RgagIAAAAAAM8uC0273Bbs39vSfe8w6iMkzjyV7N461lqzz6eueN99rR6to6wDQY4s963+j6jlbblbws2AAAAAYZO1pb99SN8c+vXbpPm3JiJjaY3iesA8rat6xas7xPSXrCkzo8sY7T9XafQmfuz5NygAAADnJjrlxzS3SXGmy2mZwZp9Onj5x5tWOqx2jbU4o9On748lno2HmPJXLSMlJ5THJ6gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAz1ObucU2rG9pnasecg4v8AatRGKPUxzvb2z5N3GnwxgxRTfeetp85dlAAAABjqb3taNLhn0rR6U+UO8+auDHN5jeela+cvNNhnHWbZOd7c7Suh3jx1xUjHSOURyeggAAAAMM2a+W/0fTTzj1r/AIXufLfJf6Np7bW+/b8MO8OGmCnYpHL+IGHDTBSKUj3zPWXYAAAAAAzzanHhns87WnpWvUGjG+ribTTT0nJb2dI+LyMGbUc9Vbs18MdfzbUpTHXsUrERHhEKMfo2XPtOqyzMfgryhrjx48VezjpEeyIdCZAAAAAAAAAAAAAAAABzfHjyx2b0ifZPg6AYfRsuHnpcvL8F+cOq6usW7vUVnHbw36T8Wry9KXrNb1iY8pXY9GHcZtPz0tu1Xxx2n+DvFqceaex0vHWk9UGgAAAAAOM2Gmek0vHumOsM8Oa+K/0fUzzn1b/ibuM2GmenYvHL+CjsYYMt8d/o2one33LfihugAAAA5yY6ZaTjvG8Sz02S9LTpc3rVj0Z84bM9VhnLWLY52vXnWVGg40+aM+PtxG0xytHlLtAAAABhT7LqO66UyTvT2T5N2eow99imkTzjnWfKTTZpzY97R6UTtaJ8yjQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPj+06ucvWmLlT2z4y71mW2LDtT1rz2aR7ZdYMVcGGuKvhHzkHYAAABMxEbzO0R1kYau9slq6PHPO/O0x4VJM0eYd9XnnU2j0KTtjjz9qh5SlcdIpSOURyelAAAABjqc962jT6fnktH/APMebrU54wY94je0ztSvnLzTYJxVm+Sd7253n8lHWDBTT4+xXr960+MuwQAAAACZisbzMREdZlzky48NJvkttEeMsIpl109vNE0xeFPG3tkHts+bU2nHpOVY9bJP5NMGmx4I3rG9p9a89Zd1rWsdmsbRHSIegAAAAAAAAAAAAAAAAAAAAAAAAM8+lx6iPSja0dLRPOGgCeuoy6a0Y9XzrPKuWI/j5KImJjeJ38ph5atbx2bViYnwlPNMuhnt4azbFM86eNfcbFI5x5aZqRkx23ifF0AAAADPUYMeop3d94nrWY6xLnTZ7zM6fUbRkr4/ijzbMtVp5zVi+OdslOdJ/IGoz02eM9N5ja1Z2tXyloAAAACfPE6XP9Kr6l9oyR5e1RExMbxO/k8vSuSk0vETExtMSx0l7Y7W0eSedPUmfGqjcBAAAT5PsuqrljlTL6N48p8JUOM+GufDbFbxjlPlJB2MtHmtlw7ZPXpPZv72oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM9Xn+j6e2Tx22r7zozp9o1s5J51xcq+/xUM9Jh7jBXHPrdbT5z4tFoAIAAPMmSuKk5LTtERvLHRY7TE6nLHpZJ390eEOdRP0nU10cT6NfSy/lCldQAEAAB5e9cdZveYiIjeXqbNM6zU/Rq/o8c75JjxnyB1pqWz5fpmWPDbHXyjzbkRERtEbeQAAAAA5z5seDH3mSf7vM+bHp8U5ck8o8PNjgwZc+T6Xq459ceOelY/qo9xYcmotGo1UdJ3pj8vf7VAIAAAAAAAzz6rBp+WS/OelY6yz7zX6n9HjjDWfvXjefkDe16UjtXtER5zLG2vwb9nFFsk+VKlNBi37ea1stvO8/k2rWtY7NaxER4RC+DHvdfk9TT0pHhN7f0O41l4+s1nZ9lKfm3DIwnQRaPT1OW3vuf5dpfGtp99pbhmjD/LdF+p/7T/U/wAu0vhW0e68twzRhGgrX1NTlj3XO41lPU1m/svRuGRh3uvx+vp6Xjxmlv6leIYd+zmrbHP7cN3lq1tHZtWJifCYArat43paJjziXrC+gxTPawWtit50nb9znvNfpp+tpGakdbU5W+SCkZ4NXg1HLHfnHWs9YaAAAAAAAny4Mmnt3+kjx3vj8/d7W2DNjz4+8xz/AGdJtRhy4Mn0vSxz/wBTH+KP6qKRxhzY9RijLjnlPh5O0AAAAGGprbBkjWYq9I2yVjxjzbUvXJWL0neJ5w9TYd9HqPo1v0eSZnHPlPjCikBAAAYa3HaKxqcUenj57eceMNw0OceSuWkZKTvFo3dJtNP0bU30k+rb0sX5wpKAAAAJ7x9H1kZfu5fRt/y8FDPV4e/09scddt6z5SaTN9I09ck9dtre+OoNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE+b7RraYOtccdu/v8ABRa0VrNrTtEc5lPw+s2pbVXjnltM/DwUUAIAADnLkrhxWy36Vjd0m1f2jPTRR037WT3QDrQY7VxTmyevlntW/KG4AAAAAx1mecGLbHG97csce11pdPGnwxjid562nzllp/tepnVzzpX0cXt85UgAAAAPL3rjrN7zEREbzL1Lb/yGfu4n6nHPpftW8gMFMmsyxq80TFK/oqT/ABlURERG0Rt5C25ABAAABjqNZGO3c4azfLPSseHvBplzY8FO8y3isR5sO81es5YY7rHP37R6U+6PB1h0czfv9XfvL+EeFfdDdRlg0eHT+lSu9p63tzmWoIAAAAAAAAAAAAAAMs+kwajneu1o6XrO0wz7zV6P9NE5sf46x6Ue+PFSLkc4s2PPTvMV4tE+TpPl0Uxec+kt3d/GPC3vh1p9ZGW3c5qTjyx1pPj7vNBsAAAAACbPS+jyzq8MTNLfpaR/GFFL1yVi9JiYmN4l6lr/AOPz93/o5J9H9ifIFQAAADPVaeupwzjnlPWsx4S0AZaTPOfF9ZG16T2bx7WqbUfZNTGsifRvtXL+UqVoAIAAMNfitbHGfHHp4p7Vfb5w1xZa58dctJ5Wjd0m0f2fPk0czyj0sfuleCkBAAATYfs+uvg22rkjt19/ipT8QrNaV1VI9LFaJ98eKwUDytotWLVneJjeHqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfiV7Rp4w09bLaKR8W9KVx0jHWOVY2hNb6/ila/dw03/8Aaf7KlABAAAmYiJmfBNoPrpvrZjnkt6O/4Ye8TyXjTdzj9bLaKV29vVvix1w464qdK1iIB6AAAAw1+W0Urpsc+nlnsx7I8ZbpdJtqtXk1s861nsYvd4ysFGLHXDjripHKsbQ6BAAABznzU0+K2bJPKsbgx1ma02jRYJ2vkjnMfdjzbYcVMGOMWOPRiGOgw3is6vPH1mXnPsjwhQoAIAAAJs+ovqcs6PSW22/S5Y+7HlHtAzarLmzTpNHztEfWZJ6V/u10+mx6au1N5mfWvPWZe4MGLT4+6xUiIjr7fe7AAAAAAAAAAAAAAAAAAAAAZ6jTY9TXs333j1bR1iWgCbDqsmHLXSazrPqZI6W/upcZ8GLUY5xZaRMT09nuYYM+TTZo0ervvv8Aosk/e9k+1dioBAAAc5cVM+OcWSOVo5ugE+izXra2jzz6ePpP4q+ahPr8N5iuqwR9ZineI848YbYM1NRirmxzytG6joBAABzlx1zY7YrxytG0sdBltaltNln08U9m2/jHhKhLq/surprY5Vt6GX3eEqKgEAABNxD6nsa2In6u3pRH4Z6qXOTHXLjtiv0tExKzY6iYmN4mJjblsJ+G5LW0/dZJ9LFaaW+ChL4AADy9K5KTjtHK0TEvQE/DbzOCcNp9LFaaT8FCav1HFJr0rnpvHvj+ylaACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATMRG8ztEdZGHEcvc6LJeOsxtHvnkDnhkdumTVTvvlyTMb+UcoUuNNi7jT0w8vRrET73ZQAAB5a0VrNrTtERvIJ5+0cTiPu4KeX3p/spTcLibYbam0c8t5tz8vBStABAABhxHNbBppjH695itIjzlpp8NdPgrhr0rG27C32nicU61wV3n/lPT9ypQAQAAEub7ZrY03+ni2tf228IbarUV0untnt92OUT5+DnQ6ecGCJyevf0sk+2VGwCAAADLWaqNLi7W295nalfOQcavUZJvGj0s7Zbc5tt6kebXT6fFpcUYsVeUdZnrPtcaLTTp6TfLPayX55Le1soAIAAAEzERvM7RHWZAeWtWkdq9oiI6zKe2vtmvOHQYoyTHW8z6Mf1K8O7ye812actvCvSsfBdBbieG1pppsd81v2K8vm834rm8MeGPb6Ux+Smta0rFaViIjpEQ9Mib6Bmv8Ap+IZZ9lPRI4TpPv9u3/K8qRMib/KOH//AOfn/wA5/qTwnSfc7df+N5Ui5om+gZqfoOIZY/5+lBvxXD4Ys0b/APGf6KQyJq8TxVtFNTjvitv9+vKfiopat4i1LRMT0mOZalL1mt6RMT1iYT24d3dpyaHNOK0/djnWfgeCkTU19sN4xa/H3dpn0ckerPx8FMTExvE7xPSUxQAAAAcajT4tVinFlrynpMdY9rsBPo9RkjJOi1U/WVjlb8ceahjrNNOopF8duzkpO+O3te6PUxq8Xa22tWdr18pWjUBAAASYfsWtnTzyx5fSx+UW8YVsddp51GnmKevSe1jn2wsGwz0morqtPXNHjHOPKWiAAA41GGuowXw2+9G2/lLsBhw/NbNpojJ69J7N/fDdLWfo3E5pO0Vz13j/AJQqWgAgAAm//H4n+znp/wBo/spTcUi1cFdTWOeK8W+HioraLVi1Z3iY3hR6AgAAm4nvjpj1URzxZImfdPKVLjU4u/098X4qzEOOHZe+0WO+/Ps7T8OS8GwCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAk4j9bm0+l/Hl7Ux7I5q0sfW8YmfDFh2+Mz/AEWCoBAAATcVyzj0V619a+1Kx7/7bqUms+u4hptP4Vmclvh0WCnDjjDirirHKtYh0CAAA8veuOk5LTtFY3mXqbi17RpO5pPpZbxSvxIPOE0tOntqbx6Wa83n3eCp5SlcdIx1jaKxtEPS+gAADy9646Te07RWN5kEuo+1cRx6WPVwx28nv8IVpeFUtbDbV5I9LPabe6PCFS0AEAACZiI3mdojrMo9JE67UzxC8T3dZmuCJ/fLriV75Jrw/DO1svrTH3a+MqceOmKkY8ddq1jaIXUHoCAAADPU6nHpcU5cs+6I6zPkD3UajDpcc5c9+zX+PsTRh1HEpi+q3x4Z51xRPO3vdafSZM+SNZr4jt/6ePwp/dUuhzjx48VIx46RWI6REOgQAAAAAAAAAAeXx0y0nHkrE1mOcSkth1PDZm+kicmH72KZ3mvuWC5HGn1OHVY4y4b9qPH2S7S6jSZMGSdZoIjtz6+Pwv8A3babU49Vi73HPvrPWJ8pKNAEAABHq4nQ6mOIUj0LejniP3Ssc5MdMtJx5KxMWjaYnyWDqJiYiYmJ3jwEvDb3wzfh+a29sXqTPjXwVJQAAABJp/snEMml+5ljvMfv8YVpeK0tXDXV0je2C8W+HjCml65KRes7xaN4Wj0BAABLxalo08anH62G8Xj3eKml65KRes7xaN4L0rkpOO0crRtKfhN7Tpe4vPpYbTSfgvBSAgAA5zY65sVsV+lqzEsOFZJyaKlbetj3pMeWylJo57rX6jT+FpjJX49V4KwEAABLw6O6zajS/hy9qvunmqST9VxiJ8MuHb4xP9FFYCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAl4d9Zn1Oo/Fm7MT7IjZTe0UrN56RG8puDRP8Al9L263mbT8ZOCoAAABLp/reKZ8s9Mda0j+MqknCJnJhyaif9XNa3w6KKwEAABJn+v4rhw+GKk3t755QrSaCZy63VaiekXilfhHNRWAgAAJeLXtOnjTUn0s14pHu8VSS0/SOMVp1rgxbz/wAp/ssFVKVx0ilY2isbQ9BAAAJmIiZmYiNue4l4tkvGnjTYp2vntFK+zzkno84dE6jJk4heP0k7Y/ZWFbnFjrhx1xY+UViIh0tABAABzlyUw47Zcltq1jeZlNpMV9ZmjiOpjaI/Q4/CI8/e5yz/AJjrfotZ3w4Z3y/tW8IWrqAAgAAAAAAAAAAAAAAJNXivo808R01ZmJ/T036x5+9WGcDnFkpmxxlx2ia2jeJh0iwzPDdb9GtP1Oad8X7NvGFpgAAAAScRrOnvj4jSOeOdr+2sq4mJjeJiY25bOctK5cdsV43raNphPwnNedPOlyz6eG00nf2dJXgqAQAAeXpXJSaWjeLRtKbhN7Rp50159LDeaT7vBUkr9n4xNekZ8W//ALR/ZYKwEAABJg+p4rmxdIy0i8e+OUq0mv3xa3TamOk3mlvjHIFYAAACXUfVcUwZY/1KWpP8YVJOLz3eHHqI/wBPNW0z7N1grAQAAEvEfq8+m1H4cvZmfZKpLxmJnh97160mLR8JggqHlLVvWL16WjeHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeJXjHoM1p/VzHz5PdDTu9Hip5Y4/gx43M/5bekdbWrEfOFURFYiseELwegIAAONVk7rTZMu/OtJn9zLhWPuuHYa+dN/nzc8ZvNOG5ZjrMRHzmIUYqRixVxx0rWIXg6AQAAeXtFKTe3SI3lNwWkxw+uS3XJabW+MuuKZO64fmv+xMfPk00mPutLix/hxxH7l4NAEAABJwr622o1c/6maYif2Y5Q31WXudNky7+rSZj5M+FYu54dirttvXefjzXgoAQAAEcfaeMTPWunx/8Aa39lkzFYmZnaIjnKTg0TfT31do55strc/LfaFFYCAAAw4jqp0ulm9I3vb0ccR42no3Rz9s4tFetNNXef+U/2WDbQ6WNJpoxb72nne0+Np6y2BAAAAAAAAAAAAAAAAAABlrtLGs01sO+1utLeUx0lzw7VTqtNF7xtes9nJHlaG6OPsfFtulNTXf8A9oUWAIAACSdtNxiJ6V1GPb/2r/ZWk4xvTT11dY3nBkrb4eKwVhExMbxPWBAAAR8V+qtp9X07vNET7p6rE/FcXe8Oy18qdqPhz/JZsUDjS5O/02PLvvNqRM/J2gAAJeM1mdBbJWN5x2i1fhKpnq8fe6XLj29akxG/uWbHdLRekXr0mN4esOGZO94fhv8AsRHy5N0AABPxXH3vDs1f2Jn5c/yUPMtO8x2xz96sxJBzpb97pceTfftY4nf4O03Br9vhuKZ6xEx8p2UlAABlrqd5o8tPPHO3yavJiLRNZ6T1Blw7J3ugw3/24/dybJOCWmeHUrPWkzX96svgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAj4xO+PBj/HqaRt81iPinPU6Sn+/vt7oWLwAEAAEfGZidPjxfrM9K7fFYj4r6WfSU/wDkxPyWLwAEAAEnG530UYv1mWtf3q0fF/SyaXF56ms/LdYvAAQAAS8bvNOG5IjraYrHxmFNKxSkUjpEbQk4x6UafF+LVU39yxeAAgAAw4nm7jh+bJ+xMR8eX5u9Hi7jS48W23ZpET70/G976amD9bnpX9+/5LF4ACAADzJeuLHbLedorEzPuS8GpadJ9JyRtfNab2+PQ41ktTh2StPWvtSvxlTixxixVxV6VrER8Dg6AAAAAAAAAAAAAAAAAAAAScZpb6H9JpHp4LRePh1VucuOMuK2K3S1Zifis2PceSuXHXJSd4tETE+x6l4Lktfh2Ot+tN6zHunZUl8AABlrMUZ9JkxfipMNQ6MOGZu/4fhyfsbT8OTdHwT0NNk0/wCqz2rEfH+6xbsAEB5esXpNLdJjaXoCXgl5vw6kT1pM1n4TKpHwf0Y1GKfuaq+0exYt2ACAACTgk7aLuv1eS1f3q0fCfRyarH5am0x8Vi3YAIAAI+DTtp8mL9XqL1/esR8K9HPq6f8AyJn5wsW7ABAABJwiYimfHH3NTeFaPhno6rV03/19/nCxaACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACPiE78S0cft3n9yxFrp/wDL6Gvn3n8q1QAQAAR8Q2niOjrP47T8oWI9dt/m2irP+5/KsUAEAAEfEOfENHT/AHLT8oWItdP/AJbRV85yfyrVABAABHxHnrtHT/dmflCxHrtv820VZj9Z/KsUAEAAEfE/S1ejx+ebtfKFiLXTvxbQ1nfnOSflVaoAIAAI+K+nl0uH8WoiZj3LEevnfiuip5zkn5VWLwAEAAAAAAAAAAAAAAAAAAAAEfCfQy6rBH3dRMxHslYi0E7cU1tPCJxz86rVoAIAAI+Gehq9Zj8O+i3zhYi0M/8AltdXynHPzqtWgAgAAj4dHZ12sp/uxPzhYi0O3+ba2seHd/yrVoAIAAI+H8uIayn+5WfnCxFoZ/8ALa2seHd/yytWgAgAAj4ftHEdZWPx1n5wsR6Lb/NtbEeHd/yysWgAgAAj0HLiWtr+3Sf3LEWh/wD2+urHh3f8srVoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAItdy4xoZ/wDt/lWouI8uJ6G37d4+cLVABAABFruXGNDM/wC7/KtRcR5cT0Nv27x+5aoAIAAItfy4voZnzyfyrUXEuXEdFf8A3LR84WqACAACLX8uL6Gfbk/lhai4n6Ov0WTyy2j5wtUAEAAEWvnbi+hn25I/6rUPFN66zRZd+UZ+z84XKACAACLX+jxbQ28N8kb++q1DxjamXSZ56V1MRPulcoAIAAAAAAAAAAAAAAAAAAAAItB6XFddbznHHyqtQ8H9PLq8/hbUzET7IXLQAQAARaDnxbXWjzxx/wBVqLhfpazWZf8Af7PyhatABAABFoefF9db244/6rUXDOev1t48csR8oWrQAQAARaHnxfXT4b44/wCq1Fw30uJa2/nkrHyhatABAABFoZ34vrp/+r+Vai4dz4lrbft0j5QtWgAgAAi0PPi+un/6v5VqLh3Pieut+3SP3LVoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIuKxtqtHk8tRt84WoeOT2cenyx9zV0mVy8ABAABFxb0dRo8nlqYj5wtQ8ensabFm/V6mlv3rl4ACAACLjHo5NJl8tVWPnutRf4gmacP7+P8ASy0t+/8AutXgAIAAIuNT2K6bN+DVUmfdzWo/8QVtPCstqxzpMWj4TCvHeMmOuSvS1YmF4PQEAAEXHd6aXHqN9u61FLzPx2/Nan4vh7/hmfHEc+7mY98c/wAnegzRqNFizx97HEz79l4NQEAAEnHcdsnDMlqR6WPa9fZtP9N1OHJXNirmr0tWJj4vcmOuXHbFeN62iYn3Sj4FltbRTpsnr6fJbHb4dDgtAAAAAAAAAAAAAAAAAAAAc5slcOK2a3SlZmfg6Rcey2jRRpcc+nnyRjp8ZJ6PeBYrY+GY7X9bJve0+e8/02WOceOuLHXFSNorWIiPY6L6AAAMdfn+jaLLn39THMx79jow4FvfS5NTMfpc97xPx2/Jan4Ri7jhmDHMc+7iZ988/wA1BdgAADzJeMdLZLdKxMyCPgu141Ob8Wrvt7uS1F/h+tq8KxWv1vvafjMrVuwAQAARcH9LJq8nnqrR8tlqH/D89vh/f/rct7fv2/Jct2ACAACLhHpZ9Zk89TMfJah4DPb0uXN+s1N7b/FctABAABDwn0tVrL//ACJj5QuQ8Cnt49Rm227ervMSuWgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh/wARRP8AlWS9etLVtHwmF1Zi1YtE8pjkm4zWLcK1ET+qmWmitNtFhtPWcVZn5LwagIAAI+P45ycIzxXrWsW+UxKrDkjLirlj71Ynkz4hWL6DPW3ScVv4S54TabcMwTb9VEfuXgoAQAATcZxd9wvPSP1cz8uf5NNDl7/RYc2+/axVn9zTJWt8dqWjlMTEo/8AD1ptwbBNp8Jj/tK8FoCAADPWYfpGky4Ijft47RHv2Y8Ezd/wrBfyx9mfhy/JUg4D6OLUYa+rj1d61jyheC8BAAAmItExMbxMc4QcBmcelyaG0+lp81qfDfeJ/evQaee7/wAQajHTlGTBW9o9sTsvBeAgAAILT9A43Fp5Y9XXaZ8IvH9YXov8QUi3C75d5i2KYvS0eExKwWjjTZLZtNjy262pEzt7naAAAAAAAAAAAAAAAAAAAgrP0/jk233x6Om0e29v7LNTkth02TLXrWkzG/uS8Ax1pwymXnNsszfJaeszMqLQEAABDx+05NNj0NZ56jNWnw33mVyDUfWf4gwUvzjHgtese2Z2WC+IiI2iIiNuWwCAAAl41mjBwrPffrSaxt5zy/NUh4/zw6fFPq5NXSto845/0WbFWjw/R9JiwbbdjHWJ98Q0BAAAZa7L3OizZd9uzjtMfJqi/wAQ2tTg+eaz4RHzmIWbGnBsXc8LwU8e7ifnzUvMdYpjrSvSIiIep0AAHObJGLFbJP3azO7pPxa004ZqLVnn3Nv4EGfAKTj4RhiZ6xMz8ZmVjHh9YpoMFaxyjFX+ENigAA8tMVrNp6RHN6y10zXRZrRPOMVtvkCb/DsT/lOO9ut5taf/AOpXJeDRFeFaeI/VwqW7ABAAAAAAAAAAAAAAAAAAB//Z', "')")
@@ -73,7 +79,13 @@ var PisellWalletPassCard = function PisellWalletPassCard(props) {
73
79
  useThousandsSeparator: true,
74
80
  value: balance,
75
81
  showCurrencySymbol: showBalanceSymbol
76
- }))), /*#__PURE__*/React.createElement("div", {
82
+ })), showDiscount && /*#__PURE__*/React.createElement("div", {
83
+ className: "pisell-card-amount-item"
84
+ }, /*#__PURE__*/React.createElement("div", {
85
+ className: "pisell-card-amount-item-label"
86
+ }, getText('pisell-discount-card-title')), /*#__PURE__*/React.createElement("div", {
87
+ className: "pisell-card-amount-item-value"
88
+ }, discount, "% ", getText('pisell-discount-card-unit')))), /*#__PURE__*/React.createElement("div", {
77
89
  className: "pisell-card-code-wrap"
78
90
  }, /*#__PURE__*/React.createElement("div", {
79
91
  className: "pisell-card-code"
@@ -83,7 +95,7 @@ var PisellWalletPassCard = function PisellWalletPassCard(props) {
83
95
  value: qrCode,
84
96
  preview: true,
85
97
  size: 60
86
- }))), (disabled || disabledReason) && /*#__PURE__*/React.createElement("div", {
98
+ }))), (disabled || disabledReason) && showDisabledReason && /*#__PURE__*/React.createElement("div", {
87
99
  className: "pisell-card-warn-message"
88
100
  }, /*#__PURE__*/React.createElement(Iconfont, {
89
101
  className: "pisell-card-icon",
@@ -8,6 +8,7 @@
8
8
  border-radius: 12px;
9
9
  background-size: cover;
10
10
  height: 190px;
11
+ background-position: center center;
11
12
  .pisell-card-name-wrap {
12
13
  display: flex;
13
14
  justify-content: space-between;
@@ -97,4 +98,7 @@
97
98
  }
98
99
  }
99
100
  }
101
+ }
102
+ .pisell-card-disabled-hide-disabled-reason {
103
+ height: 165px !important;
100
104
  }
@@ -1,5 +1,5 @@
1
- import React from "react";
2
- import "./index.less";
1
+ import React from 'react';
2
+ import './index.less';
3
3
  interface RightPanelProps {
4
4
  value: string;
5
5
  onChange: (value: string) => void;
@@ -1,7 +1,7 @@
1
- import React, { useMemo, useEffect } from "react";
1
+ import React, { useMemo, useEffect } from 'react';
2
2
  import "./index.less";
3
3
  import { sliceDayIntoFiveMinutes, findNextSlice } from "../utils";
4
- import classNames from "classnames";
4
+ import classNames from 'classnames';
5
5
  var RightPanel = function RightPanel(props) {
6
6
  var value = props.value,
7
7
  onChange = props.onChange,
@@ -19,8 +19,8 @@ var RightPanel = function RightPanel(props) {
19
19
  timeSlices: list,
20
20
  date: value
21
21
  });
22
- var scrollDom = document.querySelector(".select-time-right-panel-list");
23
- var timeDom = document.querySelector("#time".concat(nextTime.replace(":", "")));
22
+ var scrollDom = document.querySelector('.select-time-right-panel-list');
23
+ var timeDom = document.querySelector("#time".concat(nextTime.replace(':', '')));
24
24
  if (scrollDom && timeDom) {
25
25
  scrollDom.scrollTop = timeDom.offsetTop;
26
26
  }
@@ -31,11 +31,11 @@ var RightPanel = function RightPanel(props) {
31
31
  className: "select-time-right-panel-list"
32
32
  }, list.map(function (d) {
33
33
  return /*#__PURE__*/React.createElement("div", {
34
- className: classNames("select-time-right-panel-item", {
35
- "select-time-right-panel-item-active": d.value === value
34
+ className: classNames('select-time-right-panel-item', {
35
+ 'select-time-right-panel-item-active': d.value === value
36
36
  }),
37
37
  key: d.value,
38
- id: "time" + d.value.replace(":", ""),
38
+ id: 'time' + d.value.replace(':', ''),
39
39
  onClick: function onClick() {
40
40
  onChange(d.value);
41
41
  }
@@ -15,6 +15,7 @@ export interface KeyboardProps {
15
15
  onChange?: (value?: ItemValue) => void;
16
16
  items?: Item[];
17
17
  rightItems?: Item[];
18
+ keydown?: boolean;
18
19
  }
19
20
  declare const _default: React.MemoExoticComponent<(props: KeyboardProps) => React.JSX.Element>;
20
21
  export default _default;
@@ -9,7 +9,7 @@ import { Button } from 'antd';
9
9
  import "./index.less";
10
10
  import classNames from 'classnames';
11
11
  import { useEventListener, useMemoizedFn, useSize } from 'ahooks';
12
- var list = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'ok'];
12
+ var list = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '+', 'ok'];
13
13
  var defaultArr = [];
14
14
  var Keyboard = function Keyboard(props) {
15
15
  var _props$items = props.items,
@@ -17,15 +17,23 @@ var Keyboard = function Keyboard(props) {
17
17
  className = props.className,
18
18
  style = props.style,
19
19
  onChange = props.onChange,
20
- rightItems = props.rightItems;
20
+ rightItems = props.rightItems,
21
+ _props$keydown = props.keydown,
22
+ keydown = _props$keydown === void 0 ? true : _props$keydown;
21
23
  var contentRef = useRef(null);
22
24
  var size = useSize(contentRef);
23
25
  useEventListener('keydown', function (ev) {
24
26
  console.log('ev', ev);
27
+ if (!keydown) {
28
+ return;
29
+ }
25
30
  var key = ev.key;
26
31
  if (key === 'Enter') {
27
32
  key = 'ok';
28
33
  }
34
+ if (key === 'keydown') {
35
+ key = '+';
36
+ }
29
37
  if (list.includes(key)) {
30
38
  // let dom = document.querySelector(`#virtual-keyboard-${ev.key}`);
31
39
  // if (dom) {
@@ -112,5 +112,7 @@ declare const _default: {
112
112
  'pisell-adjust-price-discount-percentage': string;
113
113
  'pisell-adjust-price-total-after-discount': string;
114
114
  'pisell-adjust-price-discount-can-be-maximum': string;
115
+ 'pisell-discount-card-title': string;
116
+ 'pisell-discount-card-unit': string;
115
117
  };
116
118
  export default _default;
@@ -137,5 +137,7 @@ export default {
137
137
  'pisell-adjust-price-discount-amount': "Amount",
138
138
  'pisell-adjust-price-discount-percentage': "Percentage",
139
139
  'pisell-adjust-price-total-after-discount': "Total after discount: ",
140
- 'pisell-adjust-price-discount-can-be-maximum': "Discount can be maximum"
140
+ 'pisell-adjust-price-discount-can-be-maximum': "Discount can be maximum",
141
+ 'pisell-discount-card-title': 'Discount',
142
+ 'pisell-discount-card-unit': 'off'
141
143
  };
@@ -112,5 +112,7 @@ declare const _default: {
112
112
  'pisell-adjust-price-discount-percentage': string;
113
113
  'pisell-adjust-price-total-after-discount': string;
114
114
  'pisell-adjust-price-discount-can-be-maximum': string;
115
+ 'pisell-discount-card-title': string;
116
+ 'pisell-discount-card-unit': string;
115
117
  };
116
118
  export default _default;
@@ -137,5 +137,7 @@ export default {
137
137
  'pisell-adjust-price-discount-amount': "金额",
138
138
  'pisell-adjust-price-discount-percentage': "百分比",
139
139
  'pisell-adjust-price-total-after-discount': "打折后总价",
140
- 'pisell-adjust-price-discount-can-be-maximum': "折扣最高可达"
140
+ 'pisell-adjust-price-discount-can-be-maximum': "折扣最高可达",
141
+ 'pisell-discount-card-title': '折扣',
142
+ 'pisell-discount-card-unit': '折扣'
141
143
  };
@@ -112,5 +112,7 @@ declare const _default: {
112
112
  'pisell-adjust-price-discount-percentage': string;
113
113
  'pisell-adjust-price-total-after-discount': string;
114
114
  'pisell-adjust-price-discount-can-be-maximum': string;
115
+ 'pisell-discount-card-title': string;
116
+ 'pisell-discount-card-unit': string;
115
117
  };
116
118
  export default _default;
@@ -137,5 +137,7 @@ export default {
137
137
  'pisell-adjust-price-discount-amount': "金額",
138
138
  'pisell-adjust-price-discount-percentage': "百分比",
139
139
  'pisell-adjust-price-total-after-discount': "打折后總價",
140
- 'pisell-adjust-price-discount-can-be-maximum': "折扣最高可達"
140
+ 'pisell-adjust-price-discount-can-be-maximum': "折扣最高可達",
141
+ 'pisell-discount-card-title': '折扣',
142
+ 'pisell-discount-card-unit': '折扣'
141
143
  };
@@ -35,7 +35,7 @@ module.exports = __toCommonJS(iconfont_exports);
35
35
  var import_icons = require("@ant-design/icons");
36
36
  var import_react = __toESM(require("react"));
37
37
  var MyIcon = (0, import_icons.createFromIconfontCN)({
38
- scriptUrl: "https://unpkg.com/@pisell/materials@3.0.37/iconfont/iconfont.js"
38
+ scriptUrl: "https://static.pisellcdn.com/pisell2iconfont.js"
39
39
  // 在 iconfont.cn 上生成
40
40
  });
41
41
  var IconFont = (props) => {
@@ -46,7 +46,15 @@ var PisellEntryInput = (props) => {
46
46
  {
47
47
  autoFocus: true,
48
48
  value,
49
- onChange: (e) => setValue(e.target.value),
49
+ onChange: (e) => {
50
+ setValue(e.target.value);
51
+ if (!e.target.value) {
52
+ onChange(e.target.value);
53
+ }
54
+ },
55
+ onPressEnter: (e) => {
56
+ onChange(value);
57
+ },
50
58
  style: { flex: 1 },
51
59
  prefix: /* @__PURE__ */ import_react.default.createElement(import_iconfont.default, { style: { color: "#667085" }, type: "pisell2-search-lg" }),
52
60
  allowClear: true
@@ -1,3 +1,13 @@
1
1
  import { EntryModeType } from './index';
2
2
  export declare const entryModeTextIcon: Record<EntryModeType['type'], any>;
3
+ export declare const entryModeErrorTextIcon: {
4
+ scanner: {
5
+ icon: string;
6
+ text: string;
7
+ };
8
+ nfc: {
9
+ icon: string;
10
+ text: string;
11
+ };
12
+ };
3
13
  export declare const passiveModeType: string[];
@@ -19,6 +19,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
19
19
  // src/components/pisellInformationEntry/constants.ts
20
20
  var constants_exports = {};
21
21
  __export(constants_exports, {
22
+ entryModeErrorTextIcon: () => entryModeErrorTextIcon,
22
23
  entryModeTextIcon: () => entryModeTextIcon,
23
24
  passiveModeType: () => passiveModeType
24
25
  });
@@ -41,9 +42,20 @@ var entryModeTextIcon = {
41
42
  text: "NFC ready"
42
43
  }
43
44
  };
45
+ var entryModeErrorTextIcon = {
46
+ scanner: {
47
+ icon: "pisell2-a-Scanner11",
48
+ text: "Scanner"
49
+ },
50
+ nfc: {
51
+ icon: "pisell2-a-NFC1",
52
+ text: "NFC"
53
+ }
54
+ };
44
55
  var passiveModeType = ["scanner", "nfc"];
45
56
  // Annotate the CommonJS export names for ESM import in node:
46
57
  0 && (module.exports = {
58
+ entryModeErrorTextIcon,
47
59
  entryModeTextIcon,
48
60
  passiveModeType
49
61
  });
@@ -0,0 +1,8 @@
1
+ declare type Peripherals = {
2
+ scanner: 'none' | 'connected' | 'disconnect';
3
+ nfc: 'none' | 'connected' | 'disconnect';
4
+ };
5
+ declare const useTerminalPeripherals: (onChange?: ((val: string) => void) | undefined) => {
6
+ peripheralsStatus: Peripherals;
7
+ };
8
+ export default useTerminalPeripherals;