bj-web-components 0.2.26 → 0.2.28
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/dist/favicon.ico +0 -0
- package/dist/file.svg +1 -0
- package/dist/globe.svg +1 -0
- package/dist/index.d.ts +1141 -0
- package/dist/index.js +51 -0
- package/dist/index.mjs +51 -0
- package/dist/miniapp.d.ts +1 -0
- package/dist/miniapp.js +1 -0
- package/dist/miniapp.mjs +1 -0
- package/dist/mobile.d.ts +1 -0
- package/dist/mobile.js +1 -0
- package/dist/mobile.mjs +1 -0
- package/dist/next.svg +1 -0
- package/dist/react.d.ts +1 -0
- package/dist/react.js +1 -0
- package/dist/react.mjs +1 -0
- package/dist/shared.d.ts +1 -0
- package/dist/shared.js +1 -0
- package/dist/shared.mjs +1 -0
- package/dist/style.css +3744 -0
- package/dist/vercel.svg +1 -0
- package/dist/web/BasicInput/BInput.js +208 -0
- package/dist/web/BasicInput/BInput.mjs +209 -0
- package/dist/web/BasicInput/utils.js +47 -0
- package/dist/web/BasicInput/utils.mjs +47 -0
- package/dist/web/CategoryDropdown/CategoryDropdown.js +307 -0
- package/dist/web/CategoryDropdown/CategoryDropdown.mjs +308 -0
- package/dist/web/CheckBox/BCheckBox.js +116 -0
- package/dist/web/CheckBox/BCheckBox.mjs +117 -0
- package/dist/web/CheckBox/Group.js +73 -0
- package/dist/web/CheckBox/Group.mjs +74 -0
- package/dist/web/CheckBox/context.js +5 -0
- package/dist/web/CheckBox/context.mjs +5 -0
- package/dist/web/CheckBox/index.js +8 -0
- package/dist/web/CheckBox/index.mjs +8 -0
- package/dist/web/Dropdown/BDropdown.js +186 -0
- package/dist/web/Dropdown/BDropdown.mjs +186 -0
- package/dist/web/EmptyInputBox/EmptyInputBox.js +77 -0
- package/dist/web/EmptyInputBox/EmptyInputBox.mjs +78 -0
- package/dist/web/FileCard/FileCard.js +157 -0
- package/dist/web/FileCard/FileCard.mjs +158 -0
- package/dist/web/Icon/Icon.js +9 -0
- package/dist/web/Icon/Icon.mjs +10 -0
- package/dist/web/Input/Input.js +181 -0
- package/dist/web/Input/Input.mjs +182 -0
- package/dist/web/InputNumber/BInputNumber.js +311 -0
- package/dist/web/InputNumber/BInputNumber.mjs +312 -0
- package/dist/web/InputNumber/StepHandler.js +69 -0
- package/dist/web/InputNumber/StepHandler.mjs +70 -0
- package/dist/web/InputNumber/hooks/useCursor.js +40 -0
- package/dist/web/InputNumber/hooks/useCursor.mjs +41 -0
- package/dist/web/InputNumber/hooks/useFrame.js +12 -0
- package/dist/web/InputNumber/hooks/useFrame.mjs +13 -0
- package/dist/web/InputNumber/utils/decimal.js +147 -0
- package/dist/web/InputNumber/utils/decimal.mjs +147 -0
- package/dist/web/Modal/Modal.js +84 -0
- package/dist/web/Modal/Modal.mjs +85 -0
- package/dist/web/OverlayScrollbar/BOverlayScrollbar.js +232 -0
- package/dist/web/OverlayScrollbar/BOverlayScrollbar.mjs +233 -0
- package/dist/web/Pagination/Pagination.js +328 -0
- package/dist/web/Pagination/Pagination.mjs +329 -0
- package/dist/web/ProductField/ProductField.js +272 -0
- package/dist/web/ProductField/ProductField.mjs +273 -0
- package/dist/web/ProductField/arrow-up.svg.js +3 -0
- package/dist/web/ProductField/arrow-up.svg.mjs +4 -0
- package/dist/web/ProductField/checkbox-no.svg.js +3 -0
- package/dist/web/ProductField/checkbox-no.svg.mjs +4 -0
- package/dist/web/ProductField/checkbox-ok.svg.js +3 -0
- package/dist/web/ProductField/checkbox-ok.svg.mjs +4 -0
- package/dist/web/ProductField/no_data_light.svg.js +3 -0
- package/dist/web/ProductField/no_data_light.svg.mjs +4 -0
- package/dist/web/ProductField/search.svg.js +3 -0
- package/dist/web/ProductField/search.svg.mjs +4 -0
- package/dist/web/ProductField/sort.svg.js +3 -0
- package/dist/web/ProductField/sort.svg.mjs +4 -0
- package/dist/web/SkuInputCard/SkuInputCard.js +276 -0
- package/dist/web/SkuInputCard/SkuInputCard.mjs +277 -0
- package/dist/web/SkuInputCard/spin_loading_red.gif.js +3 -0
- package/dist/web/SkuInputCard/spin_loading_red.gif.mjs +4 -0
- package/dist/web/Switch/Switch.js +70 -0
- package/dist/web/Switch/Switch.mjs +71 -0
- package/dist/web/Table/BTable.js +950 -0
- package/dist/web/Table/BTable.mjs +950 -0
- package/dist/web/Table/Column.js +5 -0
- package/dist/web/Table/Column.mjs +6 -0
- package/dist/web/Table/ColumnGroup.js +5 -0
- package/dist/web/Table/ColumnGroup.mjs +6 -0
- package/dist/web/Table/utils/columns.js +48 -0
- package/dist/web/Table/utils/columns.mjs +48 -0
- package/dist/web/Table/utils/sortFilter.js +84 -0
- package/dist/web/Table/utils/sortFilter.mjs +84 -0
- package/dist/web/Tabs/BTabs.js +150 -0
- package/dist/web/Tabs/BTabs.mjs +150 -0
- package/dist/web/Tabs/TabPane.js +8 -0
- package/dist/web/Tabs/TabPane.mjs +8 -0
- package/dist/web/Tooltip/ConfirmTooltip.js +26 -0
- package/dist/web/Tooltip/ConfirmTooltip.mjs +27 -0
- package/dist/web/Tooltip/ContentTooltip.js +94 -0
- package/dist/web/Tooltip/ContentTooltip.mjs +95 -0
- package/dist/web/Tooltip/ProgressTooltip.js +36 -0
- package/dist/web/Tooltip/ProgressTooltip.mjs +37 -0
- package/dist/web/Tooltip/TooltipWrapper.js +12 -0
- package/dist/web/Tooltip/TooltipWrapper.mjs +13 -0
- package/dist/web/Tooltip/useAutoPlacement.js +41 -0
- package/dist/web/Tooltip/useAutoPlacement.mjs +41 -0
- package/dist/web.d.ts +1141 -0
- package/dist/web.js +51 -0
- package/dist/web.mjs +51 -0
- package/package.json +1 -1
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const react = require("react");
|
|
4
|
+
function convertChildrenToColumns(children) {
|
|
5
|
+
return react.Children.toArray(children).flatMap((child, index) => {
|
|
6
|
+
if (!react.isValidElement(child)) return [];
|
|
7
|
+
const props = child.props;
|
|
8
|
+
const { children: nestedChildren, ...columnProps } = props;
|
|
9
|
+
return [{
|
|
10
|
+
...columnProps,
|
|
11
|
+
key: child.key ?? columnProps.key ?? index,
|
|
12
|
+
...nestedChildren ? { children: convertChildrenToColumns(nestedChildren) } : {}
|
|
13
|
+
}];
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
function flattenColumns(columns) {
|
|
17
|
+
return columns.flatMap((column) => "children" in column ? flattenColumns(column.children) : [column]);
|
|
18
|
+
}
|
|
19
|
+
function getDepth(columns) {
|
|
20
|
+
return columns.reduce((depth, column) => Math.max(
|
|
21
|
+
depth,
|
|
22
|
+
"children" in column ? 1 + getDepth(column.children) : 1
|
|
23
|
+
), 1);
|
|
24
|
+
}
|
|
25
|
+
function getLeafCount(column) {
|
|
26
|
+
return "children" in column ? column.children.reduce((count, child) => count + getLeafCount(child), 0) : 1;
|
|
27
|
+
}
|
|
28
|
+
function buildHeaderRows(columns) {
|
|
29
|
+
const maxDepth = getDepth(columns);
|
|
30
|
+
const rows = Array.from({ length: maxDepth }, () => []);
|
|
31
|
+
const visit = (items, depth) => {
|
|
32
|
+
items.forEach((column) => {
|
|
33
|
+
const hasChildren = "children" in column && column.children.length > 0;
|
|
34
|
+
rows[depth].push({
|
|
35
|
+
column,
|
|
36
|
+
colSpan: column.colSpan ?? (hasChildren ? getLeafCount(column) : 1),
|
|
37
|
+
rowSpan: hasChildren ? 1 : maxDepth - depth,
|
|
38
|
+
depth
|
|
39
|
+
});
|
|
40
|
+
if (hasChildren) visit(column.children, depth + 1);
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
visit(columns, 0);
|
|
44
|
+
return rows;
|
|
45
|
+
}
|
|
46
|
+
exports.buildHeaderRows = buildHeaderRows;
|
|
47
|
+
exports.convertChildrenToColumns = convertChildrenToColumns;
|
|
48
|
+
exports.flattenColumns = flattenColumns;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Children, isValidElement } from "react";
|
|
2
|
+
function convertChildrenToColumns(children) {
|
|
3
|
+
return Children.toArray(children).flatMap((child, index) => {
|
|
4
|
+
if (!isValidElement(child)) return [];
|
|
5
|
+
const props = child.props;
|
|
6
|
+
const { children: nestedChildren, ...columnProps } = props;
|
|
7
|
+
return [{
|
|
8
|
+
...columnProps,
|
|
9
|
+
key: child.key ?? columnProps.key ?? index,
|
|
10
|
+
...nestedChildren ? { children: convertChildrenToColumns(nestedChildren) } : {}
|
|
11
|
+
}];
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
function flattenColumns(columns) {
|
|
15
|
+
return columns.flatMap((column) => "children" in column ? flattenColumns(column.children) : [column]);
|
|
16
|
+
}
|
|
17
|
+
function getDepth(columns) {
|
|
18
|
+
return columns.reduce((depth, column) => Math.max(
|
|
19
|
+
depth,
|
|
20
|
+
"children" in column ? 1 + getDepth(column.children) : 1
|
|
21
|
+
), 1);
|
|
22
|
+
}
|
|
23
|
+
function getLeafCount(column) {
|
|
24
|
+
return "children" in column ? column.children.reduce((count, child) => count + getLeafCount(child), 0) : 1;
|
|
25
|
+
}
|
|
26
|
+
function buildHeaderRows(columns) {
|
|
27
|
+
const maxDepth = getDepth(columns);
|
|
28
|
+
const rows = Array.from({ length: maxDepth }, () => []);
|
|
29
|
+
const visit = (items, depth) => {
|
|
30
|
+
items.forEach((column) => {
|
|
31
|
+
const hasChildren = "children" in column && column.children.length > 0;
|
|
32
|
+
rows[depth].push({
|
|
33
|
+
column,
|
|
34
|
+
colSpan: column.colSpan ?? (hasChildren ? getLeafCount(column) : 1),
|
|
35
|
+
rowSpan: hasChildren ? 1 : maxDepth - depth,
|
|
36
|
+
depth
|
|
37
|
+
});
|
|
38
|
+
if (hasChildren) visit(column.children, depth + 1);
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
visit(columns, 0);
|
|
42
|
+
return rows;
|
|
43
|
+
}
|
|
44
|
+
export {
|
|
45
|
+
buildHeaderRows,
|
|
46
|
+
convertChildrenToColumns,
|
|
47
|
+
flattenColumns
|
|
48
|
+
};
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
function getColumnKey(column, index) {
|
|
4
|
+
if (column.key !== void 0 && column.key !== null) {
|
|
5
|
+
return column.key;
|
|
6
|
+
}
|
|
7
|
+
if (column.dataIndex !== void 0) {
|
|
8
|
+
return Array.isArray(column.dataIndex) ? column.dataIndex.join(".") : column.dataIndex;
|
|
9
|
+
}
|
|
10
|
+
return index;
|
|
11
|
+
}
|
|
12
|
+
function renderColumnTitle(title, props) {
|
|
13
|
+
return typeof title === "function" ? title(props) : title;
|
|
14
|
+
}
|
|
15
|
+
function getNextSortOrder(current, directions = ["ascend", "descend", null]) {
|
|
16
|
+
const currentIndex = directions.indexOf(current);
|
|
17
|
+
const nextOrder = directions[currentIndex + 1];
|
|
18
|
+
return nextOrder === void 0 ? directions[0] ?? null : nextOrder;
|
|
19
|
+
}
|
|
20
|
+
function getCompare(column) {
|
|
21
|
+
if (typeof column.sorter === "function") {
|
|
22
|
+
return column.sorter;
|
|
23
|
+
}
|
|
24
|
+
if (column.sorter && typeof column.sorter === "object") {
|
|
25
|
+
return column.sorter.compare;
|
|
26
|
+
}
|
|
27
|
+
return void 0;
|
|
28
|
+
}
|
|
29
|
+
function getMultiplePriority(column) {
|
|
30
|
+
return column.sorter && typeof column.sorter === "object" ? column.sorter.multiple ?? 0 : 0;
|
|
31
|
+
}
|
|
32
|
+
function sortRecords(records, columns, orders, childrenColumnName = "children") {
|
|
33
|
+
const activeSorters = columns.map((column, index) => ({
|
|
34
|
+
column,
|
|
35
|
+
key: getColumnKey(column, index)
|
|
36
|
+
})).filter(({ column, key }) => !("children" in column) && getCompare(column) && orders.get(key)).sort((first, second) => getMultiplePriority(second.column) - getMultiplePriority(first.column));
|
|
37
|
+
if (activeSorters.length === 0) {
|
|
38
|
+
return [...records];
|
|
39
|
+
}
|
|
40
|
+
return [...records].sort((first, second) => {
|
|
41
|
+
for (const { column, key } of activeSorters) {
|
|
42
|
+
const order = orders.get(key);
|
|
43
|
+
const compare = getCompare(column);
|
|
44
|
+
if (order && compare) {
|
|
45
|
+
const result = compare(first, second, order);
|
|
46
|
+
if (result !== 0) {
|
|
47
|
+
return order === "ascend" ? result : -result;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return 0;
|
|
52
|
+
}).map((record) => {
|
|
53
|
+
const children = record[childrenColumnName];
|
|
54
|
+
return Array.isArray(children) ? { ...record, [childrenColumnName]: sortRecords(children, columns, orders, childrenColumnName) } : record;
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
function filterRecords(records, columns, filters) {
|
|
58
|
+
return columns.reduce((currentRecords, rawColumn, index) => {
|
|
59
|
+
const column = rawColumn;
|
|
60
|
+
const selectedValues = filters.get(getColumnKey(column, index));
|
|
61
|
+
if (!column.onFilter || !(selectedValues == null ? void 0 : selectedValues.length)) {
|
|
62
|
+
return currentRecords;
|
|
63
|
+
}
|
|
64
|
+
return currentRecords.filter((record) => selectedValues.some((value) => {
|
|
65
|
+
var _a;
|
|
66
|
+
return (_a = column.onFilter) == null ? void 0 : _a.call(column, value, record);
|
|
67
|
+
}));
|
|
68
|
+
}, [...records]);
|
|
69
|
+
}
|
|
70
|
+
function getSorterResult(columns, orders) {
|
|
71
|
+
const results = columns.flatMap((rawColumn, index) => {
|
|
72
|
+
const column = rawColumn;
|
|
73
|
+
const key = getColumnKey(column, index);
|
|
74
|
+
const order = orders.get(key);
|
|
75
|
+
return order ? [{ column, order, field: column.dataIndex, columnKey: key }] : [];
|
|
76
|
+
});
|
|
77
|
+
return results.length <= 1 ? results[0] ?? {} : results;
|
|
78
|
+
}
|
|
79
|
+
exports.filterRecords = filterRecords;
|
|
80
|
+
exports.getColumnKey = getColumnKey;
|
|
81
|
+
exports.getNextSortOrder = getNextSortOrder;
|
|
82
|
+
exports.getSorterResult = getSorterResult;
|
|
83
|
+
exports.renderColumnTitle = renderColumnTitle;
|
|
84
|
+
exports.sortRecords = sortRecords;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
function getColumnKey(column, index) {
|
|
2
|
+
if (column.key !== void 0 && column.key !== null) {
|
|
3
|
+
return column.key;
|
|
4
|
+
}
|
|
5
|
+
if (column.dataIndex !== void 0) {
|
|
6
|
+
return Array.isArray(column.dataIndex) ? column.dataIndex.join(".") : column.dataIndex;
|
|
7
|
+
}
|
|
8
|
+
return index;
|
|
9
|
+
}
|
|
10
|
+
function renderColumnTitle(title, props) {
|
|
11
|
+
return typeof title === "function" ? title(props) : title;
|
|
12
|
+
}
|
|
13
|
+
function getNextSortOrder(current, directions = ["ascend", "descend", null]) {
|
|
14
|
+
const currentIndex = directions.indexOf(current);
|
|
15
|
+
const nextOrder = directions[currentIndex + 1];
|
|
16
|
+
return nextOrder === void 0 ? directions[0] ?? null : nextOrder;
|
|
17
|
+
}
|
|
18
|
+
function getCompare(column) {
|
|
19
|
+
if (typeof column.sorter === "function") {
|
|
20
|
+
return column.sorter;
|
|
21
|
+
}
|
|
22
|
+
if (column.sorter && typeof column.sorter === "object") {
|
|
23
|
+
return column.sorter.compare;
|
|
24
|
+
}
|
|
25
|
+
return void 0;
|
|
26
|
+
}
|
|
27
|
+
function getMultiplePriority(column) {
|
|
28
|
+
return column.sorter && typeof column.sorter === "object" ? column.sorter.multiple ?? 0 : 0;
|
|
29
|
+
}
|
|
30
|
+
function sortRecords(records, columns, orders, childrenColumnName = "children") {
|
|
31
|
+
const activeSorters = columns.map((column, index) => ({
|
|
32
|
+
column,
|
|
33
|
+
key: getColumnKey(column, index)
|
|
34
|
+
})).filter(({ column, key }) => !("children" in column) && getCompare(column) && orders.get(key)).sort((first, second) => getMultiplePriority(second.column) - getMultiplePriority(first.column));
|
|
35
|
+
if (activeSorters.length === 0) {
|
|
36
|
+
return [...records];
|
|
37
|
+
}
|
|
38
|
+
return [...records].sort((first, second) => {
|
|
39
|
+
for (const { column, key } of activeSorters) {
|
|
40
|
+
const order = orders.get(key);
|
|
41
|
+
const compare = getCompare(column);
|
|
42
|
+
if (order && compare) {
|
|
43
|
+
const result = compare(first, second, order);
|
|
44
|
+
if (result !== 0) {
|
|
45
|
+
return order === "ascend" ? result : -result;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return 0;
|
|
50
|
+
}).map((record) => {
|
|
51
|
+
const children = record[childrenColumnName];
|
|
52
|
+
return Array.isArray(children) ? { ...record, [childrenColumnName]: sortRecords(children, columns, orders, childrenColumnName) } : record;
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
function filterRecords(records, columns, filters) {
|
|
56
|
+
return columns.reduce((currentRecords, rawColumn, index) => {
|
|
57
|
+
const column = rawColumn;
|
|
58
|
+
const selectedValues = filters.get(getColumnKey(column, index));
|
|
59
|
+
if (!column.onFilter || !(selectedValues == null ? void 0 : selectedValues.length)) {
|
|
60
|
+
return currentRecords;
|
|
61
|
+
}
|
|
62
|
+
return currentRecords.filter((record) => selectedValues.some((value) => {
|
|
63
|
+
var _a;
|
|
64
|
+
return (_a = column.onFilter) == null ? void 0 : _a.call(column, value, record);
|
|
65
|
+
}));
|
|
66
|
+
}, [...records]);
|
|
67
|
+
}
|
|
68
|
+
function getSorterResult(columns, orders) {
|
|
69
|
+
const results = columns.flatMap((rawColumn, index) => {
|
|
70
|
+
const column = rawColumn;
|
|
71
|
+
const key = getColumnKey(column, index);
|
|
72
|
+
const order = orders.get(key);
|
|
73
|
+
return order ? [{ column, order, field: column.dataIndex, columnKey: key }] : [];
|
|
74
|
+
});
|
|
75
|
+
return results.length <= 1 ? results[0] ?? {} : results;
|
|
76
|
+
}
|
|
77
|
+
export {
|
|
78
|
+
filterRecords,
|
|
79
|
+
getColumnKey,
|
|
80
|
+
getNextSortOrder,
|
|
81
|
+
getSorterResult,
|
|
82
|
+
renderColumnTitle,
|
|
83
|
+
sortRecords
|
|
84
|
+
};
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const react = require("react");
|
|
5
|
+
const TabPane = require("./TabPane.js");
|
|
6
|
+
;/* empty css */
|
|
7
|
+
function classNames(...values) {
|
|
8
|
+
return values.filter(Boolean).join(" ");
|
|
9
|
+
}
|
|
10
|
+
function useMergedState(defaultValue, value) {
|
|
11
|
+
const [innerValue, setInnerValue] = react.useState(defaultValue);
|
|
12
|
+
return [value === void 0 ? innerValue : value, setInnerValue];
|
|
13
|
+
}
|
|
14
|
+
function useLegacyItems(items, children) {
|
|
15
|
+
return react.useMemo(() => {
|
|
16
|
+
if (items) return items.filter((item) => Boolean(item && typeof item === "object" && "key" in item));
|
|
17
|
+
return react.Children.toArray(children).flatMap((child) => {
|
|
18
|
+
if (!react.isValidElement(child)) return [];
|
|
19
|
+
const { tab, tabKey, ...restProps } = child.props;
|
|
20
|
+
const key = tabKey ?? child.key;
|
|
21
|
+
return key === null ? [] : [{ ...restProps, key: String(key), label: tab }];
|
|
22
|
+
});
|
|
23
|
+
}, [children, items]);
|
|
24
|
+
}
|
|
25
|
+
function TabNode({
|
|
26
|
+
active,
|
|
27
|
+
id,
|
|
28
|
+
item,
|
|
29
|
+
onClick,
|
|
30
|
+
onKeyDown,
|
|
31
|
+
tabCount,
|
|
32
|
+
tabIndex
|
|
33
|
+
}) {
|
|
34
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
35
|
+
"button",
|
|
36
|
+
{
|
|
37
|
+
"aria-controls": `${id}-panel-${item.key}`,
|
|
38
|
+
"aria-disabled": item.disabled,
|
|
39
|
+
"aria-selected": active,
|
|
40
|
+
className: classNames("bj-tabs__tab", active && "bj-tabs__tab--active", item.disabled && "bj-tabs__tab--disabled"),
|
|
41
|
+
disabled: item.disabled,
|
|
42
|
+
id: `${id}-tab-${item.key}`,
|
|
43
|
+
onClick,
|
|
44
|
+
onKeyDown,
|
|
45
|
+
role: "tab",
|
|
46
|
+
tabIndex: item.disabled ? -1 : active ? 0 : -1,
|
|
47
|
+
type: "button",
|
|
48
|
+
children: [
|
|
49
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "bj-tabs__tab-btn", children: item.label }),
|
|
50
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "bj-tabs__sr-only", children: `Tab ${tabIndex + 1} of ${tabCount}` })
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
function TabPanelList({ activeKey, id, items }) {
|
|
56
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bj-tabs__content-holder", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bj-tabs__content", children: items.map((item) => {
|
|
57
|
+
const active = item.key === activeKey;
|
|
58
|
+
if (!active && !item.forceRender) return null;
|
|
59
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
60
|
+
"div",
|
|
61
|
+
{
|
|
62
|
+
"aria-hidden": !active,
|
|
63
|
+
"aria-labelledby": `${id}-tab-${item.key}`,
|
|
64
|
+
className: classNames("bj-tabs__tabpane", active && "bj-tabs__tabpane--active", item.className),
|
|
65
|
+
id: `${id}-panel-${item.key}`,
|
|
66
|
+
role: "tabpanel",
|
|
67
|
+
style: item.style,
|
|
68
|
+
tabIndex: active ? 0 : -1,
|
|
69
|
+
children: item.children
|
|
70
|
+
},
|
|
71
|
+
item.key
|
|
72
|
+
);
|
|
73
|
+
}) }) });
|
|
74
|
+
}
|
|
75
|
+
function BTabs({
|
|
76
|
+
activeKey,
|
|
77
|
+
children,
|
|
78
|
+
centered,
|
|
79
|
+
className,
|
|
80
|
+
defaultActiveKey,
|
|
81
|
+
id,
|
|
82
|
+
items,
|
|
83
|
+
onChange,
|
|
84
|
+
onTabClick,
|
|
85
|
+
style,
|
|
86
|
+
tabBarGutter,
|
|
87
|
+
tabBarStyle,
|
|
88
|
+
tabPosition = "top",
|
|
89
|
+
type = "line"
|
|
90
|
+
}) {
|
|
91
|
+
const tabs = useLegacyItems(items, children);
|
|
92
|
+
const generatedIdRef = react.useRef(`bj-tabs-${Math.random().toString(36).slice(2, 10)}`);
|
|
93
|
+
const mergedId = id ?? generatedIdRef.current;
|
|
94
|
+
const [mergedActiveKey, setMergedActiveKey] = useMergedState(
|
|
95
|
+
() => {
|
|
96
|
+
var _a;
|
|
97
|
+
return defaultActiveKey ?? ((_a = tabs[0]) == null ? void 0 : _a.key);
|
|
98
|
+
},
|
|
99
|
+
activeKey
|
|
100
|
+
);
|
|
101
|
+
const [activeIndex, setActiveIndex] = react.useState(() => tabs.findIndex((tab) => tab.key === mergedActiveKey));
|
|
102
|
+
react.useEffect(() => {
|
|
103
|
+
var _a;
|
|
104
|
+
let nextActiveIndex = tabs.findIndex((tab) => tab.key === mergedActiveKey);
|
|
105
|
+
if (nextActiveIndex === -1) {
|
|
106
|
+
nextActiveIndex = Math.max(0, Math.min(activeIndex, tabs.length - 1));
|
|
107
|
+
setMergedActiveKey((_a = tabs[nextActiveIndex]) == null ? void 0 : _a.key);
|
|
108
|
+
}
|
|
109
|
+
setActiveIndex(nextActiveIndex);
|
|
110
|
+
}, [activeIndex, mergedActiveKey, setMergedActiveKey, tabs]);
|
|
111
|
+
const activateTab = (key, event) => {
|
|
112
|
+
onTabClick == null ? void 0 : onTabClick(key, event);
|
|
113
|
+
if (key === mergedActiveKey) return;
|
|
114
|
+
setMergedActiveKey(key);
|
|
115
|
+
onChange == null ? void 0 : onChange(key);
|
|
116
|
+
};
|
|
117
|
+
const moveFocus = (event, index) => {
|
|
118
|
+
var _a;
|
|
119
|
+
const isVertical = tabPosition === "left" || tabPosition === "right";
|
|
120
|
+
const nextKey = isVertical ? event.key === "ArrowDown" ? 1 : event.key === "ArrowUp" ? -1 : 0 : event.key === "ArrowRight" ? 1 : event.key === "ArrowLeft" ? -1 : 0;
|
|
121
|
+
if (!nextKey) return;
|
|
122
|
+
event.preventDefault();
|
|
123
|
+
const enabledTabs = tabs.filter((tab) => !tab.disabled);
|
|
124
|
+
const enabledIndex = enabledTabs.findIndex((tab) => {
|
|
125
|
+
var _a2;
|
|
126
|
+
return tab.key === ((_a2 = tabs[index]) == null ? void 0 : _a2.key);
|
|
127
|
+
});
|
|
128
|
+
const nextTab = enabledTabs[(enabledIndex + nextKey + enabledTabs.length) % enabledTabs.length];
|
|
129
|
+
(_a = document.getElementById(`${mergedId}-tab-${nextTab == null ? void 0 : nextTab.key}`)) == null ? void 0 : _a.focus();
|
|
130
|
+
};
|
|
131
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: classNames("bj-tabs", `bj-tabs--${tabPosition}`, `bj-tabs--${type}`, centered && "bj-tabs--centered", className), style, children: [
|
|
132
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "bj-tabs__nav", role: "tablist", style: tabBarStyle, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bj-tabs__nav-wrap", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bj-tabs__nav-list", children: tabs.map((item, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
133
|
+
TabNode,
|
|
134
|
+
{
|
|
135
|
+
active: item.key === mergedActiveKey,
|
|
136
|
+
id: mergedId,
|
|
137
|
+
item,
|
|
138
|
+
onClick: (event) => activateTab(item.key, event),
|
|
139
|
+
onKeyDown: (event) => moveFocus(event, index),
|
|
140
|
+
tabCount: tabs.length,
|
|
141
|
+
tabIndex: index
|
|
142
|
+
},
|
|
143
|
+
item.key
|
|
144
|
+
)) }) }) }),
|
|
145
|
+
/* @__PURE__ */ jsxRuntime.jsx(TabPanelList, { activeKey: mergedActiveKey, id: mergedId, items: tabs })
|
|
146
|
+
] });
|
|
147
|
+
}
|
|
148
|
+
BTabs.TabPane = TabPane.TabPane;
|
|
149
|
+
exports.TabPane = TabPane.TabPane;
|
|
150
|
+
exports.default = BTabs;
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useRef, useState, useEffect, useMemo, Children, isValidElement } from "react";
|
|
3
|
+
import { TabPane } from "./TabPane.mjs";
|
|
4
|
+
/* empty css */
|
|
5
|
+
function classNames(...values) {
|
|
6
|
+
return values.filter(Boolean).join(" ");
|
|
7
|
+
}
|
|
8
|
+
function useMergedState(defaultValue, value) {
|
|
9
|
+
const [innerValue, setInnerValue] = useState(defaultValue);
|
|
10
|
+
return [value === void 0 ? innerValue : value, setInnerValue];
|
|
11
|
+
}
|
|
12
|
+
function useLegacyItems(items, children) {
|
|
13
|
+
return useMemo(() => {
|
|
14
|
+
if (items) return items.filter((item) => Boolean(item && typeof item === "object" && "key" in item));
|
|
15
|
+
return Children.toArray(children).flatMap((child) => {
|
|
16
|
+
if (!isValidElement(child)) return [];
|
|
17
|
+
const { tab, tabKey, ...restProps } = child.props;
|
|
18
|
+
const key = tabKey ?? child.key;
|
|
19
|
+
return key === null ? [] : [{ ...restProps, key: String(key), label: tab }];
|
|
20
|
+
});
|
|
21
|
+
}, [children, items]);
|
|
22
|
+
}
|
|
23
|
+
function TabNode({
|
|
24
|
+
active,
|
|
25
|
+
id,
|
|
26
|
+
item,
|
|
27
|
+
onClick,
|
|
28
|
+
onKeyDown,
|
|
29
|
+
tabCount,
|
|
30
|
+
tabIndex
|
|
31
|
+
}) {
|
|
32
|
+
return /* @__PURE__ */ jsxs(
|
|
33
|
+
"button",
|
|
34
|
+
{
|
|
35
|
+
"aria-controls": `${id}-panel-${item.key}`,
|
|
36
|
+
"aria-disabled": item.disabled,
|
|
37
|
+
"aria-selected": active,
|
|
38
|
+
className: classNames("bj-tabs__tab", active && "bj-tabs__tab--active", item.disabled && "bj-tabs__tab--disabled"),
|
|
39
|
+
disabled: item.disabled,
|
|
40
|
+
id: `${id}-tab-${item.key}`,
|
|
41
|
+
onClick,
|
|
42
|
+
onKeyDown,
|
|
43
|
+
role: "tab",
|
|
44
|
+
tabIndex: item.disabled ? -1 : active ? 0 : -1,
|
|
45
|
+
type: "button",
|
|
46
|
+
children: [
|
|
47
|
+
/* @__PURE__ */ jsx("span", { className: "bj-tabs__tab-btn", children: item.label }),
|
|
48
|
+
/* @__PURE__ */ jsx("span", { className: "bj-tabs__sr-only", children: `Tab ${tabIndex + 1} of ${tabCount}` })
|
|
49
|
+
]
|
|
50
|
+
}
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
function TabPanelList({ activeKey, id, items }) {
|
|
54
|
+
return /* @__PURE__ */ jsx("div", { className: "bj-tabs__content-holder", children: /* @__PURE__ */ jsx("div", { className: "bj-tabs__content", children: items.map((item) => {
|
|
55
|
+
const active = item.key === activeKey;
|
|
56
|
+
if (!active && !item.forceRender) return null;
|
|
57
|
+
return /* @__PURE__ */ jsx(
|
|
58
|
+
"div",
|
|
59
|
+
{
|
|
60
|
+
"aria-hidden": !active,
|
|
61
|
+
"aria-labelledby": `${id}-tab-${item.key}`,
|
|
62
|
+
className: classNames("bj-tabs__tabpane", active && "bj-tabs__tabpane--active", item.className),
|
|
63
|
+
id: `${id}-panel-${item.key}`,
|
|
64
|
+
role: "tabpanel",
|
|
65
|
+
style: item.style,
|
|
66
|
+
tabIndex: active ? 0 : -1,
|
|
67
|
+
children: item.children
|
|
68
|
+
},
|
|
69
|
+
item.key
|
|
70
|
+
);
|
|
71
|
+
}) }) });
|
|
72
|
+
}
|
|
73
|
+
function BTabs({
|
|
74
|
+
activeKey,
|
|
75
|
+
children,
|
|
76
|
+
centered,
|
|
77
|
+
className,
|
|
78
|
+
defaultActiveKey,
|
|
79
|
+
id,
|
|
80
|
+
items,
|
|
81
|
+
onChange,
|
|
82
|
+
onTabClick,
|
|
83
|
+
style,
|
|
84
|
+
tabBarGutter,
|
|
85
|
+
tabBarStyle,
|
|
86
|
+
tabPosition = "top",
|
|
87
|
+
type = "line"
|
|
88
|
+
}) {
|
|
89
|
+
const tabs = useLegacyItems(items, children);
|
|
90
|
+
const generatedIdRef = useRef(`bj-tabs-${Math.random().toString(36).slice(2, 10)}`);
|
|
91
|
+
const mergedId = id ?? generatedIdRef.current;
|
|
92
|
+
const [mergedActiveKey, setMergedActiveKey] = useMergedState(
|
|
93
|
+
() => {
|
|
94
|
+
var _a;
|
|
95
|
+
return defaultActiveKey ?? ((_a = tabs[0]) == null ? void 0 : _a.key);
|
|
96
|
+
},
|
|
97
|
+
activeKey
|
|
98
|
+
);
|
|
99
|
+
const [activeIndex, setActiveIndex] = useState(() => tabs.findIndex((tab) => tab.key === mergedActiveKey));
|
|
100
|
+
useEffect(() => {
|
|
101
|
+
var _a;
|
|
102
|
+
let nextActiveIndex = tabs.findIndex((tab) => tab.key === mergedActiveKey);
|
|
103
|
+
if (nextActiveIndex === -1) {
|
|
104
|
+
nextActiveIndex = Math.max(0, Math.min(activeIndex, tabs.length - 1));
|
|
105
|
+
setMergedActiveKey((_a = tabs[nextActiveIndex]) == null ? void 0 : _a.key);
|
|
106
|
+
}
|
|
107
|
+
setActiveIndex(nextActiveIndex);
|
|
108
|
+
}, [activeIndex, mergedActiveKey, setMergedActiveKey, tabs]);
|
|
109
|
+
const activateTab = (key, event) => {
|
|
110
|
+
onTabClick == null ? void 0 : onTabClick(key, event);
|
|
111
|
+
if (key === mergedActiveKey) return;
|
|
112
|
+
setMergedActiveKey(key);
|
|
113
|
+
onChange == null ? void 0 : onChange(key);
|
|
114
|
+
};
|
|
115
|
+
const moveFocus = (event, index) => {
|
|
116
|
+
var _a;
|
|
117
|
+
const isVertical = tabPosition === "left" || tabPosition === "right";
|
|
118
|
+
const nextKey = isVertical ? event.key === "ArrowDown" ? 1 : event.key === "ArrowUp" ? -1 : 0 : event.key === "ArrowRight" ? 1 : event.key === "ArrowLeft" ? -1 : 0;
|
|
119
|
+
if (!nextKey) return;
|
|
120
|
+
event.preventDefault();
|
|
121
|
+
const enabledTabs = tabs.filter((tab) => !tab.disabled);
|
|
122
|
+
const enabledIndex = enabledTabs.findIndex((tab) => {
|
|
123
|
+
var _a2;
|
|
124
|
+
return tab.key === ((_a2 = tabs[index]) == null ? void 0 : _a2.key);
|
|
125
|
+
});
|
|
126
|
+
const nextTab = enabledTabs[(enabledIndex + nextKey + enabledTabs.length) % enabledTabs.length];
|
|
127
|
+
(_a = document.getElementById(`${mergedId}-tab-${nextTab == null ? void 0 : nextTab.key}`)) == null ? void 0 : _a.focus();
|
|
128
|
+
};
|
|
129
|
+
return /* @__PURE__ */ jsxs("div", { className: classNames("bj-tabs", `bj-tabs--${tabPosition}`, `bj-tabs--${type}`, centered && "bj-tabs--centered", className), style, children: [
|
|
130
|
+
/* @__PURE__ */ jsx("div", { className: "bj-tabs__nav", role: "tablist", style: tabBarStyle, children: /* @__PURE__ */ jsx("div", { className: "bj-tabs__nav-wrap", children: /* @__PURE__ */ jsx("div", { className: "bj-tabs__nav-list", children: tabs.map((item, index) => /* @__PURE__ */ jsx(
|
|
131
|
+
TabNode,
|
|
132
|
+
{
|
|
133
|
+
active: item.key === mergedActiveKey,
|
|
134
|
+
id: mergedId,
|
|
135
|
+
item,
|
|
136
|
+
onClick: (event) => activateTab(item.key, event),
|
|
137
|
+
onKeyDown: (event) => moveFocus(event, index),
|
|
138
|
+
tabCount: tabs.length,
|
|
139
|
+
tabIndex: index
|
|
140
|
+
},
|
|
141
|
+
item.key
|
|
142
|
+
)) }) }) }),
|
|
143
|
+
/* @__PURE__ */ jsx(TabPanelList, { activeKey: mergedActiveKey, id: mergedId, items: tabs })
|
|
144
|
+
] });
|
|
145
|
+
}
|
|
146
|
+
BTabs.TabPane = TabPane;
|
|
147
|
+
export {
|
|
148
|
+
TabPane,
|
|
149
|
+
BTabs as default
|
|
150
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
function TabPane(_) {
|
|
4
|
+
return null;
|
|
5
|
+
}
|
|
6
|
+
TabPane.displayName = "BTabs.TabPane";
|
|
7
|
+
exports.TabPane = TabPane;
|
|
8
|
+
exports.default = TabPane;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
3
|
+
;/* empty css */
|
|
4
|
+
const useAutoPlacement = require("./useAutoPlacement.js");
|
|
5
|
+
function ConfirmTooltip({
|
|
6
|
+
placement = "top",
|
|
7
|
+
title = "是否使用当前自动翻译的英文?",
|
|
8
|
+
okText = "使用",
|
|
9
|
+
cancelText = "我去改改",
|
|
10
|
+
onOk,
|
|
11
|
+
onCancel,
|
|
12
|
+
className,
|
|
13
|
+
style
|
|
14
|
+
}) {
|
|
15
|
+
const [activePlacement, popupRef] = useAutoPlacement.useAutoPlacement(placement);
|
|
16
|
+
const popupCls = ["tooltip-popup", `tooltip-popup--${activePlacement}`, className].filter(Boolean).join(" ");
|
|
17
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: popupRef, className: popupCls, style, children: [
|
|
18
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: `tooltip-arrow tooltip-arrow--${activePlacement}` }),
|
|
19
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "tooltip-confirm__title", children: title }),
|
|
20
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "tooltip-confirm__actions", children: [
|
|
21
|
+
/* @__PURE__ */ jsxRuntime.jsx("button", { className: "tooltip-confirm__cancel", onClick: onCancel, children: cancelText }),
|
|
22
|
+
/* @__PURE__ */ jsxRuntime.jsx("button", { className: "tooltip-confirm__ok", onClick: onOk, children: okText })
|
|
23
|
+
] })
|
|
24
|
+
] });
|
|
25
|
+
}
|
|
26
|
+
module.exports = ConfirmTooltip;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
/* empty css */
|
|
3
|
+
import { useAutoPlacement } from "./useAutoPlacement.mjs";
|
|
4
|
+
function ConfirmTooltip({
|
|
5
|
+
placement = "top",
|
|
6
|
+
title = "是否使用当前自动翻译的英文?",
|
|
7
|
+
okText = "使用",
|
|
8
|
+
cancelText = "我去改改",
|
|
9
|
+
onOk,
|
|
10
|
+
onCancel,
|
|
11
|
+
className,
|
|
12
|
+
style
|
|
13
|
+
}) {
|
|
14
|
+
const [activePlacement, popupRef] = useAutoPlacement(placement);
|
|
15
|
+
const popupCls = ["tooltip-popup", `tooltip-popup--${activePlacement}`, className].filter(Boolean).join(" ");
|
|
16
|
+
return /* @__PURE__ */ jsxs("div", { ref: popupRef, className: popupCls, style, children: [
|
|
17
|
+
/* @__PURE__ */ jsx("div", { className: `tooltip-arrow tooltip-arrow--${activePlacement}` }),
|
|
18
|
+
/* @__PURE__ */ jsx("p", { className: "tooltip-confirm__title", children: title }),
|
|
19
|
+
/* @__PURE__ */ jsxs("div", { className: "tooltip-confirm__actions", children: [
|
|
20
|
+
/* @__PURE__ */ jsx("button", { className: "tooltip-confirm__cancel", onClick: onCancel, children: cancelText }),
|
|
21
|
+
/* @__PURE__ */ jsx("button", { className: "tooltip-confirm__ok", onClick: onOk, children: okText })
|
|
22
|
+
] })
|
|
23
|
+
] });
|
|
24
|
+
}
|
|
25
|
+
export {
|
|
26
|
+
ConfirmTooltip as default
|
|
27
|
+
};
|