@pisell/materials 2.2.41 → 2.2.43
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/es/components/TimeResourceSelector/index.d.ts +21 -0
- package/es/components/TimeResourceSelector/index.js +115 -0
- package/es/components/TimeResourceSelector/index.less +59 -0
- package/es/components/pisellAnchor/index.d.ts +15 -0
- package/es/components/pisellAnchor/index.js +126 -0
- package/es/components/pisellAnchor/index.less +177 -0
- package/es/components/pisellAvatar/index.d.ts +19 -0
- package/es/components/pisellAvatar/index.js +90 -0
- package/es/components/pisellAvatar/index.less +26 -0
- package/es/components/pisellCard/index.d.ts +8 -0
- package/es/components/pisellCard/index.js +34 -5
- package/es/components/pisellCard/index.less +31 -4
- package/es/components/pisellCustomCheckboxGroup/index.d.ts +16 -0
- package/es/components/pisellCustomCheckboxGroup/index.js +72 -0
- package/es/components/pisellCustomCheckboxGroup/index.less +0 -0
- package/es/components/pisellDropdown/index.d.ts +20 -0
- package/es/components/pisellDropdown/index.js +51 -0
- package/es/components/pisellDropdown/index.less +44 -0
- package/es/components/pisellEmpty/index.d.ts +2 -1
- package/es/components/pisellHeaderProgressBar/index.d.ts +29 -0
- package/es/components/pisellHeaderProgressBar/index.js +76 -0
- package/es/components/pisellHeaderProgressBar/index.less +18 -0
- package/es/components/pisellImageCarousels/index.d.ts +18 -0
- package/es/components/pisellImageCarousels/index.js +108 -0
- package/es/components/pisellImageCarousels/index.less +92 -0
- package/es/components/pisellList01/index.d.ts +17 -0
- package/es/components/pisellList01/index.js +105 -0
- package/es/components/pisellList01/index.less +53 -0
- package/es/components/pisellSectionHeaders/index.d.ts +21 -0
- package/es/components/pisellSectionHeaders/index.js +35 -0
- package/es/components/pisellSectionHeaders/index.less +46 -0
- package/es/components/pisellViewGrid/index.d.ts +16 -0
- package/es/components/pisellViewGrid/index.js +66 -0
- package/es/components/pisellViewGrid/index.less +31 -0
- package/es/components/productCard/components/Header/index.js +3 -2
- package/es/components/productCard/hooks/useOpenNote.js +3 -2
- package/es/components/productCard/index.js +7 -3
- package/es/components/productCard/index.less +6 -2
- package/es/components/productCard/status.js +3 -1
- package/es/components/productCard/types.d.ts +2 -0
- package/es/components/productCard/utils.js +17 -1
- package/es/components/section-footers/index.d.ts +9 -0
- package/es/components/section-footers/index.js +17 -0
- package/es/components/section-footers/index.less +5 -0
- package/es/components/table/Actions/component/ExportImport/utils/index.d.ts +9 -0
- package/es/components/table/Actions/component/ExportImport/utils/index.js +11 -0
- package/es/index.d.ts +10 -0
- package/es/index.js +11 -1
- package/lib/components/TimeResourceSelector/index.d.ts +21 -0
- package/lib/components/TimeResourceSelector/index.js +109 -0
- package/lib/components/TimeResourceSelector/index.less +59 -0
- package/lib/components/pisellAnchor/index.d.ts +15 -0
- package/lib/components/pisellAnchor/index.js +120 -0
- package/lib/components/pisellAnchor/index.less +177 -0
- package/lib/components/pisellAvatar/index.d.ts +19 -0
- package/lib/components/pisellAvatar/index.js +108 -0
- package/lib/components/pisellAvatar/index.less +26 -0
- package/lib/components/pisellCard/index.d.ts +8 -0
- package/lib/components/pisellCard/index.js +30 -7
- package/lib/components/pisellCard/index.less +31 -4
- package/lib/components/pisellCustomCheckboxGroup/index.d.ts +16 -0
- package/lib/components/pisellCustomCheckboxGroup/index.js +71 -0
- package/lib/components/pisellCustomCheckboxGroup/index.less +0 -0
- package/lib/components/pisellDropdown/index.d.ts +20 -0
- package/lib/components/pisellDropdown/index.js +72 -0
- package/lib/components/pisellDropdown/index.less +44 -0
- package/lib/components/pisellEmpty/index.d.ts +2 -1
- package/lib/components/pisellHeaderProgressBar/index.d.ts +29 -0
- package/lib/components/pisellHeaderProgressBar/index.js +88 -0
- package/lib/components/pisellHeaderProgressBar/index.less +18 -0
- package/lib/components/pisellImageCarousels/index.d.ts +18 -0
- package/lib/components/pisellImageCarousels/index.js +108 -0
- package/lib/components/pisellImageCarousels/index.less +92 -0
- package/lib/components/pisellList01/index.d.ts +17 -0
- package/lib/components/pisellList01/index.js +113 -0
- package/lib/components/pisellList01/index.less +53 -0
- package/lib/components/pisellSectionHeaders/index.d.ts +21 -0
- package/lib/components/pisellSectionHeaders/index.js +52 -0
- package/lib/components/pisellSectionHeaders/index.less +46 -0
- package/lib/components/pisellViewGrid/index.d.ts +16 -0
- package/lib/components/pisellViewGrid/index.js +98 -0
- package/lib/components/pisellViewGrid/index.less +31 -0
- package/lib/components/productCard/components/Header/index.js +3 -2
- package/lib/components/productCard/hooks/useOpenNote.js +2 -1
- package/lib/components/productCard/index.js +9 -4
- package/lib/components/productCard/index.less +6 -2
- package/lib/components/productCard/status.js +3 -1
- package/lib/components/productCard/types.d.ts +2 -0
- package/lib/components/productCard/utils.js +15 -4
- package/lib/components/section-footers/index.d.ts +9 -0
- package/lib/components/section-footers/index.js +44 -0
- package/lib/components/section-footers/index.less +5 -0
- package/lib/components/table/Actions/component/ExportImport/utils/index.d.ts +9 -0
- package/lib/components/table/Actions/component/ExportImport/utils/index.js +31 -0
- package/lib/index.d.ts +10 -0
- package/lib/index.js +30 -0
- package/lowcode/pisell-anchor/meta.ts +118 -0
- package/lowcode/pisell-anchor/snippets.ts +26 -0
- package/lowcode/pisell-avatar/__screenshots__/avatar-1.jpg +0 -0
- package/lowcode/pisell-avatar/meta.ts +111 -0
- package/lowcode/pisell-avatar/snippets.ts +14 -0
- package/lowcode/pisell-card/meta.ts +62 -27
- package/lowcode/pisell-card/snippets.ts +6 -0
- package/lowcode/pisell-custom-checkbox-group/__screenshots__/card-1.png +0 -0
- package/lowcode/pisell-custom-checkbox-group/meta.ts +204 -0
- package/lowcode/pisell-custom-checkbox-group/snippets.ts +56 -0
- package/lowcode/pisell-dropdown/__screenshots__/dropdown-1.png +0 -0
- package/lowcode/pisell-dropdown/meta.ts +180 -0
- package/lowcode/pisell-dropdown/snippets.ts +69 -0
- package/lowcode/pisell-header-progress-bar/meta.ts +116 -0
- package/lowcode/pisell-header-progress-bar/snippets.ts +24 -0
- package/lowcode/pisell-image-carousels/meta.ts +143 -0
- package/lowcode/pisell-image-carousels/snippets.ts +20 -0
- package/lowcode/pisell-list01/meta.ts +74 -0
- package/lowcode/pisell-list01/snippets.ts +35 -0
- package/lowcode/pisell-section-headers/meta.ts +91 -0
- package/lowcode/pisell-section-headers/snippets.ts +22 -0
- package/lowcode/pisell-view-grid/__screenshots__/card-1.png +0 -0
- package/lowcode/pisell-view-grid/meta.ts +167 -0
- package/lowcode/pisell-view-grid/snippets.ts +54 -0
- package/lowcode/section-footers/meta.ts +66 -0
- package/lowcode/section-footers/snippe.ts +21 -0
- package/package.json +4 -3
- package/build/lowcode/assets-daily.json +0 -93
- package/build/lowcode/assets-dev.json +0 -93
- package/build/lowcode/assets-prod.json +0 -93
- package/build/lowcode/designer.html +0 -303
- package/build/lowcode/index.html +0 -305
- package/build/lowcode/index.js +0 -1
- package/build/lowcode/meta.js +0 -9
- package/build/lowcode/preview.css +0 -1
- package/build/lowcode/preview.html +0 -35
- package/build/lowcode/preview.js +0 -304
- package/build/lowcode/render/default/view.css +0 -1
- package/build/lowcode/render/default/view.js +0 -232
- package/build/lowcode/view.css +0 -1
- package/build/lowcode/view.js +0 -232
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import './index.less';
|
|
3
|
+
export interface TimeSlot {
|
|
4
|
+
value: string;
|
|
5
|
+
label: string;
|
|
6
|
+
time: string;
|
|
7
|
+
remainingCount: number;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface TimeResourceSelectorProps {
|
|
11
|
+
timeSlots?: TimeSlot[];
|
|
12
|
+
multiple?: boolean;
|
|
13
|
+
showUnavailable?: boolean;
|
|
14
|
+
defaultExpanded?: boolean;
|
|
15
|
+
defaultSelectFirst?: boolean;
|
|
16
|
+
onChange?: (values: string | string[]) => void;
|
|
17
|
+
className?: string;
|
|
18
|
+
style?: React.CSSProperties;
|
|
19
|
+
}
|
|
20
|
+
declare const TimeResourceSelector: React.FC<TimeResourceSelectorProps>;
|
|
21
|
+
export default TimeResourceSelector;
|
|
@@ -0,0 +1,115 @@
|
|
|
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 React, { useState, useCallback, useEffect } from 'react';
|
|
8
|
+
import { Collapse, Empty } from 'antd';
|
|
9
|
+
import { PisellCard } from '@pisell/materials';
|
|
10
|
+
import PisellCustomCheckboxGroup from "../PisellCustomCheckboxGroup";
|
|
11
|
+
import "./index.less";
|
|
12
|
+
var TimeResourceSelector = function TimeResourceSelector(_ref) {
|
|
13
|
+
var _ref$timeSlots = _ref.timeSlots,
|
|
14
|
+
timeSlots = _ref$timeSlots === void 0 ? [] : _ref$timeSlots,
|
|
15
|
+
_ref$multiple = _ref.multiple,
|
|
16
|
+
multiple = _ref$multiple === void 0 ? false : _ref$multiple,
|
|
17
|
+
_ref$showUnavailable = _ref.showUnavailable,
|
|
18
|
+
showUnavailable = _ref$showUnavailable === void 0 ? true : _ref$showUnavailable,
|
|
19
|
+
_ref$defaultExpanded = _ref.defaultExpanded,
|
|
20
|
+
defaultExpanded = _ref$defaultExpanded === void 0 ? true : _ref$defaultExpanded,
|
|
21
|
+
_ref$defaultSelectFir = _ref.defaultSelectFirst,
|
|
22
|
+
defaultSelectFirst = _ref$defaultSelectFir === void 0 ? true : _ref$defaultSelectFir,
|
|
23
|
+
onChange = _ref.onChange,
|
|
24
|
+
className = _ref.className,
|
|
25
|
+
style = _ref.style;
|
|
26
|
+
var _useState = useState([]),
|
|
27
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
28
|
+
selectedValues = _useState2[0],
|
|
29
|
+
setSelectedValues = _useState2[1];
|
|
30
|
+
var _useState3 = useState(''),
|
|
31
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
32
|
+
error = _useState4[0],
|
|
33
|
+
setError = _useState4[1];
|
|
34
|
+
|
|
35
|
+
// 过滤可用的时间段
|
|
36
|
+
var filteredTimeSlots = timeSlots.filter(function (slot) {
|
|
37
|
+
return showUnavailable ? true : !slot.disabled;
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
// 初始化默认选中第一个可用选项
|
|
41
|
+
useEffect(function () {
|
|
42
|
+
if (defaultSelectFirst && filteredTimeSlots.length > 0 && selectedValues.length === 0) {
|
|
43
|
+
var firstAvailable = filteredTimeSlots.find(function (slot) {
|
|
44
|
+
return !slot.disabled;
|
|
45
|
+
});
|
|
46
|
+
if (firstAvailable) {
|
|
47
|
+
var value = firstAvailable.value;
|
|
48
|
+
setSelectedValues([value]);
|
|
49
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(multiple ? [value] : value);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}, [filteredTimeSlots, defaultSelectFirst, multiple, onChange]);
|
|
53
|
+
|
|
54
|
+
// 渲染时间卡片
|
|
55
|
+
var renderTimeCard = function renderTimeCard(item) {
|
|
56
|
+
var time = item.time,
|
|
57
|
+
remainingCount = item.remainingCount,
|
|
58
|
+
disabled = item.disabled;
|
|
59
|
+
return /*#__PURE__*/React.createElement(PisellCard, {
|
|
60
|
+
className: "time-resource-card",
|
|
61
|
+
bodyStyle: {
|
|
62
|
+
padding: '12px'
|
|
63
|
+
}
|
|
64
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
65
|
+
className: "time-slot-content"
|
|
66
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
67
|
+
className: "time-text"
|
|
68
|
+
}, time), /*#__PURE__*/React.createElement("div", {
|
|
69
|
+
className: "remaining-count"
|
|
70
|
+
}, "\u5269\u4F59: ", remainingCount)));
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
// 处理选择变更
|
|
74
|
+
var handleChange = useCallback(function (value) {
|
|
75
|
+
if (Array.isArray(value)) {
|
|
76
|
+
setSelectedValues(value);
|
|
77
|
+
setError(value.length === 0 ? 'Please select a session time' : '');
|
|
78
|
+
} else {
|
|
79
|
+
setSelectedValues([value]);
|
|
80
|
+
setError('');
|
|
81
|
+
}
|
|
82
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(value);
|
|
83
|
+
}, [onChange]);
|
|
84
|
+
|
|
85
|
+
// 渲染内容
|
|
86
|
+
var renderContent = function renderContent() {
|
|
87
|
+
if (filteredTimeSlots.length === 0) {
|
|
88
|
+
return /*#__PURE__*/React.createElement(Empty, {
|
|
89
|
+
description: "No dates are available"
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, error && /*#__PURE__*/React.createElement("div", {
|
|
93
|
+
className: "time-resource-error"
|
|
94
|
+
}, error), /*#__PURE__*/React.createElement(PisellCustomCheckboxGroup, {
|
|
95
|
+
dataSource: filteredTimeSlots,
|
|
96
|
+
renderItem: renderTimeCard,
|
|
97
|
+
value: selectedValues,
|
|
98
|
+
onChange: handleChange,
|
|
99
|
+
isMultiple: multiple,
|
|
100
|
+
columns: 4,
|
|
101
|
+
horizontalGap: 16,
|
|
102
|
+
verticalGap: 16
|
|
103
|
+
}));
|
|
104
|
+
};
|
|
105
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
106
|
+
className: "time-resource-selector ".concat(className || ''),
|
|
107
|
+
style: style
|
|
108
|
+
}, /*#__PURE__*/React.createElement(Collapse, {
|
|
109
|
+
defaultActiveKey: defaultExpanded ? ['1'] : []
|
|
110
|
+
}, /*#__PURE__*/React.createElement(Collapse.Panel, {
|
|
111
|
+
header: "\u9009\u62E9\u65F6\u95F4\u6BB5",
|
|
112
|
+
key: "1"
|
|
113
|
+
}, renderContent())));
|
|
114
|
+
};
|
|
115
|
+
export default TimeResourceSelector;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
.time-resource-selector {
|
|
2
|
+
.time-resource-card {
|
|
3
|
+
cursor: pointer;
|
|
4
|
+
transition: all 0.3s;
|
|
5
|
+
|
|
6
|
+
&:hover {
|
|
7
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.time-slot-content {
|
|
12
|
+
display: flex;
|
|
13
|
+
flex-direction: column;
|
|
14
|
+
align-items: center;
|
|
15
|
+
justify-content: center;
|
|
16
|
+
min-height: 80px;
|
|
17
|
+
|
|
18
|
+
.time-text {
|
|
19
|
+
font-size: 16px;
|
|
20
|
+
font-weight: 500;
|
|
21
|
+
margin-bottom: 8px;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.remaining-count {
|
|
25
|
+
font-size: 14px;
|
|
26
|
+
color: #666;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// 选中状态
|
|
31
|
+
.pisell-checkbox-item-selected {
|
|
32
|
+
.time-resource-card {
|
|
33
|
+
border-color: #1890ff;
|
|
34
|
+
background: rgba(24, 144, 255, 0.1);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// 禁用状态
|
|
39
|
+
.pisell-checkbox-item-disabled {
|
|
40
|
+
.time-resource-card {
|
|
41
|
+
cursor: not-allowed;
|
|
42
|
+
opacity: 0.5;
|
|
43
|
+
|
|
44
|
+
&:hover {
|
|
45
|
+
box-shadow: none;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// 错误提示
|
|
51
|
+
.time-resource-error {
|
|
52
|
+
color: #ff4d4f;
|
|
53
|
+
padding: 8px 0;
|
|
54
|
+
text-align: center;
|
|
55
|
+
background-color: #fff2f0;
|
|
56
|
+
border-radius: 4px;
|
|
57
|
+
margin-bottom: 16px;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import './index.less';
|
|
3
|
+
export interface Option {
|
|
4
|
+
id: string | number;
|
|
5
|
+
name: React.ReactNode;
|
|
6
|
+
}
|
|
7
|
+
export interface PisellAnchorProps {
|
|
8
|
+
options?: Option[];
|
|
9
|
+
tab?: string | number;
|
|
10
|
+
className?: string;
|
|
11
|
+
style?: React.CSSProperties;
|
|
12
|
+
onChange?: (key: string | number) => void;
|
|
13
|
+
}
|
|
14
|
+
declare const PisellAnchor: React.ForwardRefExoticComponent<PisellAnchorProps & React.RefAttributes<any>>;
|
|
15
|
+
export default PisellAnchor;
|
|
@@ -0,0 +1,126 @@
|
|
|
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 React, { useState, forwardRef, useImperativeHandle, useRef } from 'react';
|
|
8
|
+
import classNames from 'classnames';
|
|
9
|
+
import { useDebounceFn } from 'ahooks';
|
|
10
|
+
import ChevronLeft from '@pisell/icon/es/ChevronLeft';
|
|
11
|
+
import ChevronRight from '@pisell/icon/es/ChevronRight';
|
|
12
|
+
import "./index.less";
|
|
13
|
+
var PisellAnchor = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
14
|
+
var _props$options = props.options,
|
|
15
|
+
options = _props$options === void 0 ? [] : _props$options,
|
|
16
|
+
tab = props.tab,
|
|
17
|
+
className = props.className,
|
|
18
|
+
style = props.style,
|
|
19
|
+
onChange = props.onChange;
|
|
20
|
+
var contentRef = useRef(null);
|
|
21
|
+
var _useState = useState(true),
|
|
22
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
23
|
+
isShowButton = _useState2[0],
|
|
24
|
+
setIsShowButton = _useState2[1];
|
|
25
|
+
var _useState3 = useState(0),
|
|
26
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
27
|
+
leftWidth = _useState4[0],
|
|
28
|
+
setLeftWidth = _useState4[1];
|
|
29
|
+
var _useState5 = useState(40),
|
|
30
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
31
|
+
rightWidth = _useState6[0],
|
|
32
|
+
setRightWidth = _useState6[1];
|
|
33
|
+
|
|
34
|
+
// 处理滚动
|
|
35
|
+
var _useDebounceFn = useDebounceFn(function (e) {
|
|
36
|
+
var _e$target = e.target,
|
|
37
|
+
scrollLeft = _e$target.scrollLeft,
|
|
38
|
+
scrollWidth = _e$target.scrollWidth,
|
|
39
|
+
clientWidth = _e$target.clientWidth;
|
|
40
|
+
setLeftWidth(scrollLeft > 0 ? 40 : 0);
|
|
41
|
+
setRightWidth(scrollLeft + clientWidth >= scrollWidth ? 0 : 40);
|
|
42
|
+
}, {
|
|
43
|
+
wait: 200
|
|
44
|
+
}),
|
|
45
|
+
onScroll = _useDebounceFn.run;
|
|
46
|
+
|
|
47
|
+
// 滚动到指定选项
|
|
48
|
+
var setTabScroll = function setTabScroll(offsetLeft) {
|
|
49
|
+
if (contentRef.current) {
|
|
50
|
+
contentRef.current.scrollTo({
|
|
51
|
+
left: offsetLeft,
|
|
52
|
+
behavior: 'smooth'
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
// 暴露滚动方法
|
|
58
|
+
useImperativeHandle(ref, function () {
|
|
59
|
+
return {
|
|
60
|
+
scroll: function scroll(tab) {
|
|
61
|
+
if (tab) {
|
|
62
|
+
var dom = document.querySelector("#tab-".concat(tab));
|
|
63
|
+
if (dom) {
|
|
64
|
+
setTabScroll(dom.offsetLeft);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
// 左右按钮点击处理
|
|
72
|
+
var onPageChange = function onPageChange(type) {
|
|
73
|
+
if (contentRef.current) {
|
|
74
|
+
var _contentRef$current = contentRef.current,
|
|
75
|
+
scrollLeft = _contentRef$current.scrollLeft,
|
|
76
|
+
clientWidth = _contentRef$current.clientWidth;
|
|
77
|
+
contentRef.current.scrollTo({
|
|
78
|
+
left: scrollLeft + (type === 'left' ? -clientWidth : clientWidth),
|
|
79
|
+
behavior: 'smooth'
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
84
|
+
className: classNames('pisell-tabs', className),
|
|
85
|
+
style: style
|
|
86
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
87
|
+
className: "pisell-tabs-btn-left",
|
|
88
|
+
style: {
|
|
89
|
+
width: leftWidth
|
|
90
|
+
},
|
|
91
|
+
onClick: function onClick() {
|
|
92
|
+
return onPageChange('left');
|
|
93
|
+
}
|
|
94
|
+
}, /*#__PURE__*/React.createElement(ChevronLeft, {
|
|
95
|
+
className: "pisell-tabs-btn-icon"
|
|
96
|
+
})), /*#__PURE__*/React.createElement("div", {
|
|
97
|
+
ref: contentRef,
|
|
98
|
+
className: "pisell-tabs-content",
|
|
99
|
+
id: "tab-".concat(tab, "-content"),
|
|
100
|
+
onScroll: onScroll
|
|
101
|
+
}, options.map(function (item) {
|
|
102
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
103
|
+
key: item.id,
|
|
104
|
+
id: "tab-".concat(item.id),
|
|
105
|
+
className: classNames('pisell-tabs-tab', {
|
|
106
|
+
'pisell-tabs-tab-active': tab === item.id
|
|
107
|
+
}),
|
|
108
|
+
onClick: function onClick() {
|
|
109
|
+
return onChange === null || onChange === void 0 ? void 0 : onChange(item.id);
|
|
110
|
+
}
|
|
111
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
112
|
+
className: "pisell-tabs-tab-content"
|
|
113
|
+
}, item.name));
|
|
114
|
+
})), /*#__PURE__*/React.createElement("div", {
|
|
115
|
+
className: "pisell-tabs-btn-right",
|
|
116
|
+
style: {
|
|
117
|
+
width: rightWidth
|
|
118
|
+
},
|
|
119
|
+
onClick: function onClick() {
|
|
120
|
+
return onPageChange('right');
|
|
121
|
+
}
|
|
122
|
+
}, /*#__PURE__*/React.createElement(ChevronRight, {
|
|
123
|
+
className: "pisell-tabs-btn-icon"
|
|
124
|
+
})));
|
|
125
|
+
});
|
|
126
|
+
export default PisellAnchor;
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
.pisell-anchor-containers {
|
|
2
|
+
// display: flex;
|
|
3
|
+
// align-items: center;
|
|
4
|
+
// background-color: #fff;
|
|
5
|
+
// height: 40px;
|
|
6
|
+
.pisell-lowcode-anchor-wrapper {
|
|
7
|
+
&::before {
|
|
8
|
+
content: '';
|
|
9
|
+
display: none;
|
|
10
|
+
}
|
|
11
|
+
.pisell-lowcode-anchor {
|
|
12
|
+
height: 40px;
|
|
13
|
+
border-bottom: none !important;
|
|
14
|
+
background-color: #fff;
|
|
15
|
+
|
|
16
|
+
.pisell-lowcode-anchor-ink {
|
|
17
|
+
display: none;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.pisell-lowcode-anchor-link {
|
|
21
|
+
height: 100%;
|
|
22
|
+
padding: 0 16px;
|
|
23
|
+
display: flex;
|
|
24
|
+
align-items: center;
|
|
25
|
+
|
|
26
|
+
&-title {
|
|
27
|
+
color: var(--Gray-900, #101828);
|
|
28
|
+
font-family: Inter;
|
|
29
|
+
font-size: 16px;
|
|
30
|
+
font-weight: 600;
|
|
31
|
+
line-height: 40px;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.pisell-lowcode-anchor-link-active {
|
|
36
|
+
border-radius: 100px;
|
|
37
|
+
background: var(--theme-color, #7f56d9);
|
|
38
|
+
height: 40px;
|
|
39
|
+
|
|
40
|
+
.pisell-lowcode-anchor-link-title {
|
|
41
|
+
color: var(--White, #fff);
|
|
42
|
+
line-height: 40px;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
.pisell-anchor-scroll {
|
|
48
|
+
height: 40px;
|
|
49
|
+
flex: 1;
|
|
50
|
+
overflow-x: auto;
|
|
51
|
+
|
|
52
|
+
// 隐藏滚动条 - Firefox
|
|
53
|
+
scrollbar-width: none;
|
|
54
|
+
|
|
55
|
+
// 隐藏滚动条 - IE and Edge
|
|
56
|
+
-ms-overflow-style: none;
|
|
57
|
+
|
|
58
|
+
// 隐藏滚动条 - Chrome, Safari, Opera
|
|
59
|
+
&::-webkit-scrollbar {
|
|
60
|
+
display: none;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.pisell-anchor-buttons {
|
|
65
|
+
display: flex;
|
|
66
|
+
gap: 8px;
|
|
67
|
+
margin-left: 16px;
|
|
68
|
+
|
|
69
|
+
.scroll-button {
|
|
70
|
+
display: flex;
|
|
71
|
+
align-items: center;
|
|
72
|
+
justify-content: center;
|
|
73
|
+
width: 24px;
|
|
74
|
+
height: 24px;
|
|
75
|
+
border: 1px solid #d9d9d9;
|
|
76
|
+
border-radius: 4px;
|
|
77
|
+
background: white;
|
|
78
|
+
cursor: pointer;
|
|
79
|
+
transition: all 0.3s;
|
|
80
|
+
|
|
81
|
+
&:hover:not(.disabled) {
|
|
82
|
+
color: #1890ff;
|
|
83
|
+
border-color: #1890ff;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
&.disabled {
|
|
87
|
+
color: #d9d9d9;
|
|
88
|
+
cursor: not-allowed;
|
|
89
|
+
background: #f5f5f5;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.pisell-tabs {
|
|
96
|
+
display: flex;
|
|
97
|
+
align-items: center;
|
|
98
|
+
width: 100%;
|
|
99
|
+
height: 100%;
|
|
100
|
+
font-size: 17px;
|
|
101
|
+
font-weight: 400;
|
|
102
|
+
color: #0d1619;
|
|
103
|
+
cursor: default;
|
|
104
|
+
position: relative;
|
|
105
|
+
|
|
106
|
+
.pisell-tabs-btn-left,
|
|
107
|
+
.pisell-tabs-btn-right {
|
|
108
|
+
position: absolute;
|
|
109
|
+
top: 50%;
|
|
110
|
+
transform: translateY(-50%);
|
|
111
|
+
z-index: 1;
|
|
112
|
+
width: 40px;
|
|
113
|
+
height: 40px;
|
|
114
|
+
display: flex;
|
|
115
|
+
align-items: center;
|
|
116
|
+
justify-content: center;
|
|
117
|
+
background: linear-gradient(90deg, #fff 30%, rgba(255, 255, 255, 0.8) 100%);
|
|
118
|
+
cursor: pointer;
|
|
119
|
+
transition: width 300ms ease;
|
|
120
|
+
user-select: none;
|
|
121
|
+
|
|
122
|
+
.pisell-tabs-btn-icon {
|
|
123
|
+
width: 24px;
|
|
124
|
+
height: 24px;
|
|
125
|
+
background: #f1f1f1;
|
|
126
|
+
border-radius: 50%;
|
|
127
|
+
display: flex;
|
|
128
|
+
align-items: center;
|
|
129
|
+
justify-content: center;
|
|
130
|
+
color: #262626;
|
|
131
|
+
font-size: 20px;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.pisell-tabs-btn-left {
|
|
136
|
+
left: 0;
|
|
137
|
+
background: linear-gradient(270deg, rgba(255, 255, 255, 0.8) 0%, #fff 70%);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.pisell-tabs-btn-right {
|
|
141
|
+
right: 0;
|
|
142
|
+
background: linear-gradient(90deg, rgba(255, 255, 255, 0.8) 0%, #fff 70%);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.pisell-tabs-content {
|
|
146
|
+
flex: 1;
|
|
147
|
+
display: flex;
|
|
148
|
+
overflow-x: auto;
|
|
149
|
+
overflow-y: hidden;
|
|
150
|
+
scroll-behavior: smooth;
|
|
151
|
+
-webkit-overflow-scrolling: touch;
|
|
152
|
+
scrollbar-width: none;
|
|
153
|
+
-ms-overflow-style: none;
|
|
154
|
+
padding: 0;
|
|
155
|
+
|
|
156
|
+
&::-webkit-scrollbar {
|
|
157
|
+
display: none;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
.pisell-tabs-tab {
|
|
161
|
+
flex: 0 0 auto;
|
|
162
|
+
padding: 8px 16px;
|
|
163
|
+
cursor: pointer;
|
|
164
|
+
white-space: nowrap;
|
|
165
|
+
transition: all 0.3s;
|
|
166
|
+
|
|
167
|
+
&:hover {
|
|
168
|
+
color: #1677ff;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
&.pisell-tabs-tab-active {
|
|
172
|
+
color: #1677ff;
|
|
173
|
+
font-weight: 600;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { AvatarProps } from 'antd';
|
|
3
|
+
import './index.less';
|
|
4
|
+
export declare type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';
|
|
5
|
+
export interface PisellAvatarProps extends Omit<AvatarProps, 'size' | 'shape'> {
|
|
6
|
+
shape?: 'circle' | 'square';
|
|
7
|
+
size?: AvatarSize;
|
|
8
|
+
src?: string;
|
|
9
|
+
alt?: string;
|
|
10
|
+
icon?: React.ReactNode;
|
|
11
|
+
children?: React.ReactNode;
|
|
12
|
+
className?: string;
|
|
13
|
+
style?: React.CSSProperties;
|
|
14
|
+
useTextAvatar?: boolean;
|
|
15
|
+
borderRadius?: number;
|
|
16
|
+
onError?: () => boolean;
|
|
17
|
+
}
|
|
18
|
+
declare const PisellAvatar: React.FC<PisellAvatarProps>;
|
|
19
|
+
export default PisellAvatar;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
2
|
+
var _excluded = ["shape", "size", "src", "alt", "icon", "children", "className", "style", "useTextAvatar", "borderRadius", "onError"];
|
|
3
|
+
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
4
|
+
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; }
|
|
5
|
+
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; }
|
|
6
|
+
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; }
|
|
7
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
8
|
+
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); }
|
|
9
|
+
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; }
|
|
10
|
+
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; }
|
|
11
|
+
import React, { useMemo } from 'react';
|
|
12
|
+
import { Avatar } from 'antd';
|
|
13
|
+
import classNames from 'classnames';
|
|
14
|
+
import Iconfont from "../iconfont";
|
|
15
|
+
import "./index.less";
|
|
16
|
+
// 尺寸映射表(单位:像素)
|
|
17
|
+
var sizeMap = {
|
|
18
|
+
xs: 24,
|
|
19
|
+
sm: 32,
|
|
20
|
+
md: 40,
|
|
21
|
+
lg: 48,
|
|
22
|
+
xl: 56,
|
|
23
|
+
xxl: 64
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
// 字体大小映射表(单位:像素)
|
|
27
|
+
var fontSizeMap = {
|
|
28
|
+
xs: 12,
|
|
29
|
+
sm: 14,
|
|
30
|
+
md: 16,
|
|
31
|
+
lg: 18,
|
|
32
|
+
xl: 20,
|
|
33
|
+
xxl: 24
|
|
34
|
+
};
|
|
35
|
+
var PisellAvatar = function PisellAvatar(_ref) {
|
|
36
|
+
var _ref$shape = _ref.shape,
|
|
37
|
+
shape = _ref$shape === void 0 ? 'circle' : _ref$shape,
|
|
38
|
+
_ref$size = _ref.size,
|
|
39
|
+
size = _ref$size === void 0 ? 'xs' : _ref$size,
|
|
40
|
+
src = _ref.src,
|
|
41
|
+
alt = _ref.alt,
|
|
42
|
+
icon = _ref.icon,
|
|
43
|
+
children = _ref.children,
|
|
44
|
+
className = _ref.className,
|
|
45
|
+
style = _ref.style,
|
|
46
|
+
useTextAvatar = _ref.useTextAvatar,
|
|
47
|
+
_ref$borderRadius = _ref.borderRadius,
|
|
48
|
+
borderRadius = _ref$borderRadius === void 0 ? 4 : _ref$borderRadius,
|
|
49
|
+
onError = _ref.onError,
|
|
50
|
+
restProps = _objectWithoutProperties(_ref, _excluded);
|
|
51
|
+
var classes = classNames('pisell-avatar', "pisell-avatar-".concat(size), "pisell-avatar-".concat(shape), {
|
|
52
|
+
'pisell-avatar-with-text': !src && !icon && children
|
|
53
|
+
}, className);
|
|
54
|
+
var mergedStyle = _objectSpread(_objectSpread({}, style), {}, {
|
|
55
|
+
width: sizeMap[size],
|
|
56
|
+
height: sizeMap[size],
|
|
57
|
+
fontSize: fontSizeMap[size],
|
|
58
|
+
lineHeight: "".concat(sizeMap[size], "px"),
|
|
59
|
+
borderRadius: shape === 'square' ? "".concat(borderRadius, "px") : '50%'
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* @title: 渲染头像内容
|
|
64
|
+
* @description:
|
|
65
|
+
* @param {*} useMemo
|
|
66
|
+
* @return {*}
|
|
67
|
+
* @Author: WangHan
|
|
68
|
+
* @Date: 2025-01-07 11:58
|
|
69
|
+
*/
|
|
70
|
+
var renderChildren = useMemo(function () {
|
|
71
|
+
// 使用文本头像并且有文本内容
|
|
72
|
+
if (useTextAvatar && children) {
|
|
73
|
+
return children;
|
|
74
|
+
}
|
|
75
|
+
return /*#__PURE__*/React.createElement(Iconfont, {
|
|
76
|
+
type: "pisell2-user-01",
|
|
77
|
+
className: "pisell-avatar-icon"
|
|
78
|
+
});
|
|
79
|
+
}, [useTextAvatar, children]);
|
|
80
|
+
return /*#__PURE__*/React.createElement(Avatar, _extends({}, restProps, {
|
|
81
|
+
className: classes,
|
|
82
|
+
shape: shape,
|
|
83
|
+
style: mergedStyle,
|
|
84
|
+
src: src,
|
|
85
|
+
alt: alt,
|
|
86
|
+
icon: icon,
|
|
87
|
+
onError: onError
|
|
88
|
+
}), renderChildren);
|
|
89
|
+
};
|
|
90
|
+
export default PisellAvatar;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
@prefix: pisell-avatar;
|
|
2
|
+
|
|
3
|
+
.@{prefix} {
|
|
4
|
+
display: inline-flex;
|
|
5
|
+
align-items: center;
|
|
6
|
+
justify-content: center;
|
|
7
|
+
background: var(--Gray-100, #f2f4f7); // 默认背景色
|
|
8
|
+
border: none; // 移除默认边框
|
|
9
|
+
|
|
10
|
+
img {
|
|
11
|
+
object-fit: cover;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.anticon {
|
|
15
|
+
font-size: inherit !important;
|
|
16
|
+
color: var(--Gray-600, #475467) !important;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// 文本头像样式
|
|
20
|
+
&.pisell-avatar-with-text {
|
|
21
|
+
background: var(--Gray-100, #f2f4f7); // 文本头像的背景色
|
|
22
|
+
color: var(--Gray-600, #475467); // 文本颜色
|
|
23
|
+
font-weight: 600;
|
|
24
|
+
// border: 0.75px solid var(--Gray-900, #101828);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -2,6 +2,14 @@ import React from 'react';
|
|
|
2
2
|
import { CardProps } from 'antd';
|
|
3
3
|
import './index.less';
|
|
4
4
|
export interface PisellCardProps extends CardProps {
|
|
5
|
+
bordered?: boolean;
|
|
6
|
+
selected?: boolean;
|
|
7
|
+
loading?: boolean;
|
|
8
|
+
padding?: number;
|
|
9
|
+
borderRadius?: number;
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
onClick?: () => void;
|
|
12
|
+
isClickable?: boolean;
|
|
5
13
|
}
|
|
6
14
|
/**
|
|
7
15
|
* Pisell 卡片容器组件
|