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.
Files changed (109) hide show
  1. package/dist/favicon.ico +0 -0
  2. package/dist/file.svg +1 -0
  3. package/dist/globe.svg +1 -0
  4. package/dist/index.d.ts +1141 -0
  5. package/dist/index.js +51 -0
  6. package/dist/index.mjs +51 -0
  7. package/dist/miniapp.d.ts +1 -0
  8. package/dist/miniapp.js +1 -0
  9. package/dist/miniapp.mjs +1 -0
  10. package/dist/mobile.d.ts +1 -0
  11. package/dist/mobile.js +1 -0
  12. package/dist/mobile.mjs +1 -0
  13. package/dist/next.svg +1 -0
  14. package/dist/react.d.ts +1 -0
  15. package/dist/react.js +1 -0
  16. package/dist/react.mjs +1 -0
  17. package/dist/shared.d.ts +1 -0
  18. package/dist/shared.js +1 -0
  19. package/dist/shared.mjs +1 -0
  20. package/dist/style.css +3744 -0
  21. package/dist/vercel.svg +1 -0
  22. package/dist/web/BasicInput/BInput.js +208 -0
  23. package/dist/web/BasicInput/BInput.mjs +209 -0
  24. package/dist/web/BasicInput/utils.js +47 -0
  25. package/dist/web/BasicInput/utils.mjs +47 -0
  26. package/dist/web/CategoryDropdown/CategoryDropdown.js +307 -0
  27. package/dist/web/CategoryDropdown/CategoryDropdown.mjs +308 -0
  28. package/dist/web/CheckBox/BCheckBox.js +116 -0
  29. package/dist/web/CheckBox/BCheckBox.mjs +117 -0
  30. package/dist/web/CheckBox/Group.js +73 -0
  31. package/dist/web/CheckBox/Group.mjs +74 -0
  32. package/dist/web/CheckBox/context.js +5 -0
  33. package/dist/web/CheckBox/context.mjs +5 -0
  34. package/dist/web/CheckBox/index.js +8 -0
  35. package/dist/web/CheckBox/index.mjs +8 -0
  36. package/dist/web/Dropdown/BDropdown.js +186 -0
  37. package/dist/web/Dropdown/BDropdown.mjs +186 -0
  38. package/dist/web/EmptyInputBox/EmptyInputBox.js +77 -0
  39. package/dist/web/EmptyInputBox/EmptyInputBox.mjs +78 -0
  40. package/dist/web/FileCard/FileCard.js +157 -0
  41. package/dist/web/FileCard/FileCard.mjs +158 -0
  42. package/dist/web/Icon/Icon.js +9 -0
  43. package/dist/web/Icon/Icon.mjs +10 -0
  44. package/dist/web/Input/Input.js +181 -0
  45. package/dist/web/Input/Input.mjs +182 -0
  46. package/dist/web/InputNumber/BInputNumber.js +311 -0
  47. package/dist/web/InputNumber/BInputNumber.mjs +312 -0
  48. package/dist/web/InputNumber/StepHandler.js +69 -0
  49. package/dist/web/InputNumber/StepHandler.mjs +70 -0
  50. package/dist/web/InputNumber/hooks/useCursor.js +40 -0
  51. package/dist/web/InputNumber/hooks/useCursor.mjs +41 -0
  52. package/dist/web/InputNumber/hooks/useFrame.js +12 -0
  53. package/dist/web/InputNumber/hooks/useFrame.mjs +13 -0
  54. package/dist/web/InputNumber/utils/decimal.js +147 -0
  55. package/dist/web/InputNumber/utils/decimal.mjs +147 -0
  56. package/dist/web/Modal/Modal.js +84 -0
  57. package/dist/web/Modal/Modal.mjs +85 -0
  58. package/dist/web/OverlayScrollbar/BOverlayScrollbar.js +232 -0
  59. package/dist/web/OverlayScrollbar/BOverlayScrollbar.mjs +233 -0
  60. package/dist/web/Pagination/Pagination.js +328 -0
  61. package/dist/web/Pagination/Pagination.mjs +329 -0
  62. package/dist/web/ProductField/ProductField.js +272 -0
  63. package/dist/web/ProductField/ProductField.mjs +273 -0
  64. package/dist/web/ProductField/arrow-up.svg.js +3 -0
  65. package/dist/web/ProductField/arrow-up.svg.mjs +4 -0
  66. package/dist/web/ProductField/checkbox-no.svg.js +3 -0
  67. package/dist/web/ProductField/checkbox-no.svg.mjs +4 -0
  68. package/dist/web/ProductField/checkbox-ok.svg.js +3 -0
  69. package/dist/web/ProductField/checkbox-ok.svg.mjs +4 -0
  70. package/dist/web/ProductField/no_data_light.svg.js +3 -0
  71. package/dist/web/ProductField/no_data_light.svg.mjs +4 -0
  72. package/dist/web/ProductField/search.svg.js +3 -0
  73. package/dist/web/ProductField/search.svg.mjs +4 -0
  74. package/dist/web/ProductField/sort.svg.js +3 -0
  75. package/dist/web/ProductField/sort.svg.mjs +4 -0
  76. package/dist/web/SkuInputCard/SkuInputCard.js +276 -0
  77. package/dist/web/SkuInputCard/SkuInputCard.mjs +277 -0
  78. package/dist/web/SkuInputCard/spin_loading_red.gif.js +3 -0
  79. package/dist/web/SkuInputCard/spin_loading_red.gif.mjs +4 -0
  80. package/dist/web/Switch/Switch.js +70 -0
  81. package/dist/web/Switch/Switch.mjs +71 -0
  82. package/dist/web/Table/BTable.js +950 -0
  83. package/dist/web/Table/BTable.mjs +950 -0
  84. package/dist/web/Table/Column.js +5 -0
  85. package/dist/web/Table/Column.mjs +6 -0
  86. package/dist/web/Table/ColumnGroup.js +5 -0
  87. package/dist/web/Table/ColumnGroup.mjs +6 -0
  88. package/dist/web/Table/utils/columns.js +48 -0
  89. package/dist/web/Table/utils/columns.mjs +48 -0
  90. package/dist/web/Table/utils/sortFilter.js +84 -0
  91. package/dist/web/Table/utils/sortFilter.mjs +84 -0
  92. package/dist/web/Tabs/BTabs.js +150 -0
  93. package/dist/web/Tabs/BTabs.mjs +150 -0
  94. package/dist/web/Tabs/TabPane.js +8 -0
  95. package/dist/web/Tabs/TabPane.mjs +8 -0
  96. package/dist/web/Tooltip/ConfirmTooltip.js +26 -0
  97. package/dist/web/Tooltip/ConfirmTooltip.mjs +27 -0
  98. package/dist/web/Tooltip/ContentTooltip.js +94 -0
  99. package/dist/web/Tooltip/ContentTooltip.mjs +95 -0
  100. package/dist/web/Tooltip/ProgressTooltip.js +36 -0
  101. package/dist/web/Tooltip/ProgressTooltip.mjs +37 -0
  102. package/dist/web/Tooltip/TooltipWrapper.js +12 -0
  103. package/dist/web/Tooltip/TooltipWrapper.mjs +13 -0
  104. package/dist/web/Tooltip/useAutoPlacement.js +41 -0
  105. package/dist/web/Tooltip/useAutoPlacement.mjs +41 -0
  106. package/dist/web.d.ts +1141 -0
  107. package/dist/web.js +51 -0
  108. package/dist/web.mjs +51 -0
  109. package/package.json +1 -1
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ function Column(_) {
3
+ return null;
4
+ }
5
+ module.exports = Column;
@@ -0,0 +1,6 @@
1
+ function Column(_) {
2
+ return null;
3
+ }
4
+ export {
5
+ Column as default
6
+ };
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ function ColumnGroup(_) {
3
+ return null;
4
+ }
5
+ module.exports = ColumnGroup;
@@ -0,0 +1,6 @@
1
+ function ColumnGroup(_) {
2
+ return null;
3
+ }
4
+ export {
5
+ ColumnGroup as default
6
+ };
@@ -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,8 @@
1
+ function TabPane(_) {
2
+ return null;
3
+ }
4
+ TabPane.displayName = "BTabs.TabPane";
5
+ export {
6
+ TabPane,
7
+ TabPane as default
8
+ };
@@ -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
+ };