@bioturing/components 0.13.1
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/LICENSE +20 -0
- package/README.md +91 -0
- package/dist/Badge.js +41 -0
- package/dist/Breadcrumb.js +92 -0
- package/dist/Checkbox.js +13 -0
- package/dist/CodeBlock.js +497 -0
- package/dist/Collapse.js +50 -0
- package/dist/DSRoot.js +1024 -0
- package/dist/DropdownMenu.js +206 -0
- package/dist/Empty.js +53 -0
- package/dist/Field.js +69 -0
- package/dist/Form.js +126 -0
- package/dist/IconButton.js +83 -0
- package/dist/Input.js +49 -0
- package/dist/Modal.js +430 -0
- package/dist/Popover.js +10 -0
- package/dist/Radio.js +24 -0
- package/dist/ScrollArea.js +47 -0
- package/dist/Segmented.js +10 -0
- package/dist/Select.js +41 -0
- package/dist/Slider.js +39 -0
- package/dist/Spin.js +33 -0
- package/dist/Splitter.js +47 -0
- package/dist/Switch.js +10 -0
- package/dist/Table.js +125 -0
- package/dist/Tag.js +24 -0
- package/dist/ThemeProvider.js +261 -0
- package/dist/Toast.js +1009 -0
- package/dist/Tooltip.js +36 -0
- package/dist/Tour.js +54 -0
- package/dist/Tree.js +318 -0
- package/dist/Truncate.js +160 -0
- package/dist/Upload.js +419 -0
- package/dist/VerticalCollapsiblePanel.js +414 -0
- package/dist/assets/src/icons/ANOVAAnalysis.d.ts +7 -0
- package/dist/assets/src/icons/AUCell.d.ts +7 -0
- package/dist/assets/src/icons/Alphabet.d.ts +7 -0
- package/dist/assets/src/icons/BarChart.d.ts +7 -0
- package/dist/assets/src/icons/BoxPlot.d.ts +7 -0
- package/dist/assets/src/icons/BubbleHeatmap.d.ts +7 -0
- package/dist/assets/src/icons/CDR3Spectratyping.d.ts +7 -0
- package/dist/assets/src/icons/CancerPrediction.d.ts +7 -0
- package/dist/assets/src/icons/Cell.d.ts +7 -0
- package/dist/assets/src/icons/CellCellCommunication.d.ts +7 -0
- package/dist/assets/src/icons/CellSearch.d.ts +7 -0
- package/dist/assets/src/icons/CellTypePrediction.d.ts +7 -0
- package/dist/assets/src/icons/Cells.d.ts +7 -0
- package/dist/assets/src/icons/Circos.d.ts +7 -0
- package/dist/assets/src/icons/Clonotype.d.ts +7 -0
- package/dist/assets/src/icons/CoexpressionPlot.d.ts +7 -0
- package/dist/assets/src/icons/Composition.d.ts +7 -0
- package/dist/assets/src/icons/DEG.d.ts +7 -0
- package/dist/assets/src/icons/Digits.d.ts +7 -0
- package/dist/assets/src/icons/DiversityAnalysis.d.ts +7 -0
- package/dist/assets/src/icons/Embedding.d.ts +7 -0
- package/dist/assets/src/icons/EnrichmentTest.d.ts +7 -0
- package/dist/assets/src/icons/Eppendorf.d.ts +7 -0
- package/dist/assets/src/icons/FileArrowRight.d.ts +7 -0
- package/dist/assets/src/icons/FolderArrowRight.d.ts +7 -0
- package/dist/assets/src/icons/Heatmap.d.ts +7 -0
- package/dist/assets/src/icons/ImageSegmentation.d.ts +7 -0
- package/dist/assets/src/icons/IntersectionPlot.d.ts +7 -0
- package/dist/assets/src/icons/LouvainClustering.d.ts +7 -0
- package/dist/assets/src/icons/MarkerGenes.d.ts +7 -0
- package/dist/assets/src/icons/MixedView.d.ts +7 -0
- package/dist/assets/src/icons/NeighborhoodAnalysis.d.ts +7 -0
- package/dist/assets/src/icons/PenSize.d.ts +7 -0
- package/dist/assets/src/icons/Pertubation.d.ts +7 -0
- package/dist/assets/src/icons/Pseudotime.d.ts +7 -0
- package/dist/assets/src/icons/RegionSegmentation.d.ts +7 -0
- package/dist/assets/src/icons/ScatterPlotTissueImageView.d.ts +7 -0
- package/dist/assets/src/icons/ScatterPlotView.d.ts +7 -0
- package/dist/assets/src/icons/SegmentSelection.d.ts +7 -0
- package/dist/assets/src/icons/SpatialCellProportion.d.ts +7 -0
- package/dist/assets/src/icons/Species.d.ts +7 -0
- package/dist/assets/src/icons/SubClustering.d.ts +7 -0
- package/dist/assets/src/icons/TSNEUMAP.d.ts +7 -0
- package/dist/assets/src/icons/TissueImageScatterPlotView.d.ts +7 -0
- package/dist/assets/src/icons/TissueImageView.d.ts +7 -0
- package/dist/assets/src/icons/TwoD.d.ts +7 -0
- package/dist/assets/src/icons/VennDiagramAnalysis.d.ts +7 -0
- package/dist/assets/src/icons/ViolinPlot.d.ts +7 -0
- package/dist/assets/src/icons/custom.d.ts +48 -0
- package/dist/assets/src/icons/index.d.ts +2 -0
- package/dist/assets/src/icons/phosphor.d.ts +1 -0
- package/dist/assets/src/index.d.ts +2 -0
- package/dist/assets/src/logos/BBrowserX.d.ts +9 -0
- package/dist/assets/src/logos/BioStudio.d.ts +9 -0
- package/dist/assets/src/logos/BioTuring.d.ts +9 -0
- package/dist/assets/src/logos/BioTuringAlpha.d.ts +9 -0
- package/dist/assets/src/logos/Lens.d.ts +9 -0
- package/dist/assets/src/logos/Pixel.d.ts +9 -0
- package/dist/assets/src/logos/SmartBulk.d.ts +9 -0
- package/dist/assets/src/logos/SpatialX.d.ts +9 -0
- package/dist/assets/src/logos/Talk2Data.d.ts +9 -0
- package/dist/assets/src/logos/Vinci.d.ts +9 -0
- package/dist/assets/src/logos/index.d.ts +10 -0
- package/dist/components/src/components/Badge/component.d.ts +3 -0
- package/dist/components/src/components/Badge/index.d.ts +1 -0
- package/dist/components/src/components/Breadcrumb/component.d.ts +5 -0
- package/dist/components/src/components/Breadcrumb/index.d.ts +2 -0
- package/dist/components/src/components/Breadcrumb/types.d.ts +18 -0
- package/dist/components/src/components/Breadcrumb/useItemRender.d.ts +6 -0
- package/dist/components/src/components/Button/component.d.ts +7 -0
- package/dist/components/src/components/Button/index.d.ts +1 -0
- package/dist/components/src/components/Checkbox/component.d.ts +10 -0
- package/dist/components/src/components/Checkbox/index.d.ts +1 -0
- package/dist/components/src/components/CodeBlock/component.d.ts +2 -0
- package/dist/components/src/components/CodeBlock/index.d.ts +2 -0
- package/dist/components/src/components/CodeBlock/types.d.ts +47 -0
- package/dist/components/src/components/Collapse/component.d.ts +13 -0
- package/dist/components/src/components/Collapse/index.d.ts +1 -0
- package/dist/components/src/components/DSRoot/component.d.ts +13 -0
- package/dist/components/src/components/DSRoot/index.d.ts +1 -0
- package/dist/components/src/components/DropdownMenu/component.d.ts +25 -0
- package/dist/components/src/components/DropdownMenu/index.d.ts +2 -0
- package/dist/components/src/components/DropdownMenu/utils.d.ts +5 -0
- package/dist/components/src/components/Empty/component.d.ts +12 -0
- package/dist/components/src/components/Empty/index.d.ts +1 -0
- package/dist/components/src/components/Field/component.d.ts +41 -0
- package/dist/components/src/components/Field/index.d.ts +1 -0
- package/dist/components/src/components/Form/component.d.ts +18 -0
- package/dist/components/src/components/Form/index.d.ts +1 -0
- package/dist/components/src/components/Form/item.d.ts +5 -0
- package/dist/components/src/components/IconButton/component.d.ts +29 -0
- package/dist/components/src/components/IconButton/index.d.ts +1 -0
- package/dist/components/src/components/Input/component.d.ts +30 -0
- package/dist/components/src/components/Input/index.d.ts +1 -0
- package/dist/components/src/components/Modal/Modal.d.ts +69 -0
- package/dist/components/src/components/Modal/ModalProvider.d.ts +5 -0
- package/dist/components/src/components/Modal/ModalService.d.ts +33 -0
- package/dist/components/src/components/Modal/constants.d.ts +9 -0
- package/dist/components/src/components/Modal/functions.d.ts +27 -0
- package/dist/components/src/components/Modal/index.d.ts +14 -0
- package/dist/components/src/components/Popover/component.d.ts +9 -0
- package/dist/components/src/components/Popover/index.d.ts +1 -0
- package/dist/components/src/components/Radio/component.d.ts +7 -0
- package/dist/components/src/components/Radio/index.d.ts +2 -0
- package/dist/components/src/components/Radio/interface.d.ts +5 -0
- package/dist/components/src/components/ScrollArea/component.d.ts +10 -0
- package/dist/components/src/components/ScrollArea/index.d.ts +1 -0
- package/dist/components/src/components/Segmented/component.d.ts +9 -0
- package/dist/components/src/components/Segmented/index.d.ts +1 -0
- package/dist/components/src/components/Select/component.d.ts +11 -0
- package/dist/components/src/components/Select/index.d.ts +1 -0
- package/dist/components/src/components/Slider/component.d.ts +5 -0
- package/dist/components/src/components/Slider/index.d.ts +1 -0
- package/dist/components/src/components/Spin/component.d.ts +3 -0
- package/dist/components/src/components/Spin/index.d.ts +1 -0
- package/dist/components/src/components/Splitter/component.d.ts +12 -0
- package/dist/components/src/components/Splitter/index.d.ts +1 -0
- package/dist/components/src/components/Switch/component.d.ts +8 -0
- package/dist/components/src/components/Switch/index.d.ts +1 -0
- package/dist/components/src/components/Table/component.d.ts +19 -0
- package/dist/components/src/components/Table/index.d.ts +1 -0
- package/dist/components/src/components/Tag/component.d.ts +11 -0
- package/dist/components/src/components/Tag/index.d.ts +1 -0
- package/dist/components/src/components/ThemeProvider/component.d.ts +6 -0
- package/dist/components/src/components/ThemeProvider/index.d.ts +1 -0
- package/dist/components/src/components/Toast/component.d.ts +14 -0
- package/dist/components/src/components/Toast/function.d.ts +10 -0
- package/dist/components/src/components/Toast/index.d.ts +3 -0
- package/dist/components/src/components/Toast/types.d.ts +3 -0
- package/dist/components/src/components/Tooltip/component.d.ts +9 -0
- package/dist/components/src/components/Tooltip/index.d.ts +1 -0
- package/dist/components/src/components/Tour/component.d.ts +7 -0
- package/dist/components/src/components/Tour/index.d.ts +1 -0
- package/dist/components/src/components/Transition/component.d.ts +17 -0
- package/dist/components/src/components/Transition/index.d.ts +1 -0
- package/dist/components/src/components/Tree/components.d.ts +13 -0
- package/dist/components/src/components/Tree/helpers.d.ts +4 -0
- package/dist/components/src/components/Tree/index.d.ts +4 -0
- package/dist/components/src/components/Tree/types.d.ts +55 -0
- package/dist/components/src/components/Tree/useTreeCommon.d.ts +178 -0
- package/dist/components/src/components/Tree/useUniqueKeysTree.d.ts +33 -0
- package/dist/components/src/components/Truncate/component.d.ts +12 -0
- package/dist/components/src/components/Truncate/helpers.d.ts +5 -0
- package/dist/components/src/components/Truncate/index.d.ts +1 -0
- package/dist/components/src/components/Upload/component.d.ts +16 -0
- package/dist/components/src/components/Upload/dragger.d.ts +13 -0
- package/dist/components/src/components/Upload/hooks.d.ts +5 -0
- package/dist/components/src/components/Upload/index.d.ts +3 -0
- package/dist/components/src/components/Upload/item.d.ts +11 -0
- package/dist/components/src/components/Upload/utils.d.ts +1 -0
- package/dist/components/src/components/VerticalCollapsiblePanel/component.d.ts +64 -0
- package/dist/components/src/components/VerticalCollapsiblePanel/index.d.ts +1 -0
- package/dist/components/src/components/hooks/antd.d.ts +11 -0
- package/dist/components/src/components/hooks/base-ui.d.ts +7 -0
- package/dist/components/src/components/hooks/index.d.ts +3 -0
- package/dist/components/src/components/hooks/useControlledState.d.ts +1 -0
- package/dist/components/src/components/index.d.ts +39 -0
- package/dist/components/src/components/utils/WithAntdTokens.d.ts +7 -0
- package/dist/components/src/components/utils/antdUtils.d.ts +10 -0
- package/dist/components/src/components/utils/client.d.ts +2 -0
- package/dist/components/src/components/utils/cn.d.ts +4 -0
- package/dist/components/src/components/utils/index.d.ts +3 -0
- package/dist/components/src/components/utils/isTracebackError.d.ts +1 -0
- package/dist/components/src/components/utils/main.d.ts +3 -0
- package/dist/components/src/components/utils/reactToString.d.ts +2 -0
- package/dist/components/src/components/utils/types.d.ts +9 -0
- package/dist/components/src/index.d.ts +2 -0
- package/dist/components/src/tokens/index.d.ts +3 -0
- package/dist/index.js +2430 -0
- package/dist/style.css +1242 -0
- package/dist/style.js +0 -0
- package/dist/tailwind.css +4 -0
- package/dist/tailwind.js +0 -0
- package/dist/utils.js +78 -0
- package/package.json +153 -0
package/dist/Tooltip.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import * as __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__ from "react/jsx-runtime";
|
|
2
|
+
import * as __WEBPACK_EXTERNAL_MODULE_antd_es_tooltip_1091cc47__ from "antd/es/tooltip";
|
|
3
|
+
import * as __WEBPACK_EXTERNAL_MODULE_antd_es_config_provider_6a57beb3__ from "antd/es/config-provider";
|
|
4
|
+
import "antd/es/theme/useToken";
|
|
5
|
+
import * as __WEBPACK_EXTERNAL_MODULE_react__ from "react";
|
|
6
|
+
import "tailwind-merge";
|
|
7
|
+
function cx(...args) {
|
|
8
|
+
const classes = [];
|
|
9
|
+
for (const arg of args)if (arg) {
|
|
10
|
+
if ("string" == typeof arg || "number" == typeof arg) classes.push(String(arg));
|
|
11
|
+
else if (Array.isArray(arg)) classes.push(...cx(...arg));
|
|
12
|
+
else if ("object" == typeof arg) {
|
|
13
|
+
for (const [key, value] of Object.entries(arg))if (value) classes.push(key);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return classes;
|
|
17
|
+
}
|
|
18
|
+
function clsx(...args) {
|
|
19
|
+
return cx(...args).join(" ");
|
|
20
|
+
}
|
|
21
|
+
"use client";
|
|
22
|
+
const useCls = ()=>{
|
|
23
|
+
const { getPrefixCls } = (0, __WEBPACK_EXTERNAL_MODULE_react__.useContext)(__WEBPACK_EXTERNAL_MODULE_antd_es_config_provider_6a57beb3__["default"].ConfigContext);
|
|
24
|
+
return (...args)=>cx(...args).map((cls)=>getPrefixCls(cls)).join(" ");
|
|
25
|
+
};
|
|
26
|
+
"use client";
|
|
27
|
+
const Tooltip = ({ className, style, arrow = false, ...rest })=>{
|
|
28
|
+
const cls = useCls();
|
|
29
|
+
return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE_antd_es_tooltip_1091cc47__["default"], {
|
|
30
|
+
className: clsx(cls("tooltip"), className),
|
|
31
|
+
arrow: arrow,
|
|
32
|
+
style: style,
|
|
33
|
+
...rest
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
export { Tooltip };
|
package/dist/Tour.js
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import * as __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__ from "react/jsx-runtime";
|
|
2
|
+
import * as __WEBPACK_EXTERNAL_MODULE_antd_es_tour_6998cb50__ from "antd/es/tour";
|
|
3
|
+
import * as __WEBPACK_EXTERNAL_MODULE_antd_es_config_provider_6a57beb3__ from "antd/es/config-provider";
|
|
4
|
+
import "antd/es/theme/useToken";
|
|
5
|
+
import * as __WEBPACK_EXTERNAL_MODULE_react__ from "react";
|
|
6
|
+
import "tailwind-merge";
|
|
7
|
+
function cx(...args) {
|
|
8
|
+
const classes = [];
|
|
9
|
+
for (const arg of args)if (arg) {
|
|
10
|
+
if ("string" == typeof arg || "number" == typeof arg) classes.push(String(arg));
|
|
11
|
+
else if (Array.isArray(arg)) classes.push(...cx(...arg));
|
|
12
|
+
else if ("object" == typeof arg) {
|
|
13
|
+
for (const [key, value] of Object.entries(arg))if (value) classes.push(key);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return classes;
|
|
17
|
+
}
|
|
18
|
+
function clsx(...args) {
|
|
19
|
+
return cx(...args).join(" ");
|
|
20
|
+
}
|
|
21
|
+
"use client";
|
|
22
|
+
const useCls = ()=>{
|
|
23
|
+
const { getPrefixCls } = (0, __WEBPACK_EXTERNAL_MODULE_react__.useContext)(__WEBPACK_EXTERNAL_MODULE_antd_es_config_provider_6a57beb3__["default"].ConfigContext);
|
|
24
|
+
return (...args)=>cx(...args).map((cls)=>getPrefixCls(cls)).join(" ");
|
|
25
|
+
};
|
|
26
|
+
"use client";
|
|
27
|
+
const Tour = ({ indicatorsRender, ...rest })=>{
|
|
28
|
+
const cls = useCls();
|
|
29
|
+
const defaultIndicatorRender = (current, total)=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("div", {
|
|
30
|
+
className: cls("tour-indicator-wrapper"),
|
|
31
|
+
children: [
|
|
32
|
+
/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("span", {
|
|
33
|
+
className: cls("tour-indicator-summary-text"),
|
|
34
|
+
children: [
|
|
35
|
+
current + 1,
|
|
36
|
+
" / ",
|
|
37
|
+
total
|
|
38
|
+
]
|
|
39
|
+
}),
|
|
40
|
+
/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
|
|
41
|
+
children: Array.from({
|
|
42
|
+
length: total
|
|
43
|
+
}).map((_, index)=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("span", {
|
|
44
|
+
className: clsx(index === current && cls("tour-indicator-active"), cls("tour-indicator"))
|
|
45
|
+
}, index))
|
|
46
|
+
})
|
|
47
|
+
]
|
|
48
|
+
});
|
|
49
|
+
return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE_antd_es_tour_6998cb50__["default"], {
|
|
50
|
+
indicatorsRender: indicatorsRender || defaultIndicatorRender,
|
|
51
|
+
...rest
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
export { Tour };
|
package/dist/Tree.js
ADDED
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
import * as __WEBPACK_EXTERNAL_MODULE_react__ from "react";
|
|
2
|
+
import * as __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__ from "react/jsx-runtime";
|
|
3
|
+
import * as __WEBPACK_EXTERNAL_MODULE__bioturing_assets_dd0c210d__ from "@bioturing/assets";
|
|
4
|
+
import * as __WEBPACK_EXTERNAL_MODULE_antd_es_tree_05ca9855__ from "antd/es/tree";
|
|
5
|
+
import "tailwind-merge";
|
|
6
|
+
import * as __WEBPACK_EXTERNAL_MODULE_antd_es_config_provider_6a57beb3__ from "antd/es/config-provider";
|
|
7
|
+
import "antd/es/theme/useToken";
|
|
8
|
+
"use client";
|
|
9
|
+
function useControlledState(value, onChange, defaultValue) {
|
|
10
|
+
const [internalState, setInternalState] = (0, __WEBPACK_EXTERNAL_MODULE_react__.useState)(defaultValue);
|
|
11
|
+
const isControlled = void 0 !== value;
|
|
12
|
+
const setState = (0, __WEBPACK_EXTERNAL_MODULE_react__.useCallback)((next)=>{
|
|
13
|
+
const nextValue = "function" == typeof next ? next(value) : next;
|
|
14
|
+
if ("function" == typeof onChange) onChange(nextValue);
|
|
15
|
+
if (!isControlled) setInternalState(next);
|
|
16
|
+
}, [
|
|
17
|
+
value,
|
|
18
|
+
onChange,
|
|
19
|
+
isControlled
|
|
20
|
+
]);
|
|
21
|
+
const state = isControlled ? value : internalState;
|
|
22
|
+
return [
|
|
23
|
+
state,
|
|
24
|
+
setState
|
|
25
|
+
];
|
|
26
|
+
}
|
|
27
|
+
"use client";
|
|
28
|
+
const getUniqueKeysFromOriginals = (nodes, originalKeysToFind, map)=>{
|
|
29
|
+
if (!nodes) return [];
|
|
30
|
+
let keys = [];
|
|
31
|
+
nodes.forEach((node)=>{
|
|
32
|
+
const originalKey = map.get(node.key);
|
|
33
|
+
if (void 0 !== originalKey && originalKeysToFind.has(originalKey)) keys.push(node.key);
|
|
34
|
+
if (node.children) keys = keys.concat(getUniqueKeysFromOriginals(node.children, originalKeysToFind, map));
|
|
35
|
+
});
|
|
36
|
+
return keys;
|
|
37
|
+
};
|
|
38
|
+
const processTreeData = (nodes, expandedOriginalKeys, parentKeyPrefix = "", keyMap)=>{
|
|
39
|
+
if (!nodes) return;
|
|
40
|
+
return nodes.map((node)=>{
|
|
41
|
+
const originalKey = node.key;
|
|
42
|
+
if (null == originalKey) {
|
|
43
|
+
console.warn("Tree node is missing a key. Skipping unique key generation for this node and its children.", node);
|
|
44
|
+
return {
|
|
45
|
+
...node
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
const separator = "/";
|
|
49
|
+
const originalKeyString = String(originalKey);
|
|
50
|
+
if (originalKeyString.includes(separator)) console.warn(`Tree node original key "${originalKeyString}" contains the separator character "${separator}". This might lead to unexpected behavior if keys are not truly unique.`, node);
|
|
51
|
+
const uniqueKey = parentKeyPrefix ? `${parentKeyPrefix}${separator}${originalKeyString}` : originalKeyString;
|
|
52
|
+
keyMap.set(uniqueKey, originalKey);
|
|
53
|
+
const isExpanded = expandedOriginalKeys.has(originalKey);
|
|
54
|
+
const icon = node.icon || (node.isLeaf ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__bioturing_assets_dd0c210d__.File, {}) : isExpanded ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__bioturing_assets_dd0c210d__.FolderOpen, {}) : /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__bioturing_assets_dd0c210d__.Folder, {}));
|
|
55
|
+
const processedChildren = processTreeData(node.children, expandedOriginalKeys, uniqueKey, keyMap);
|
|
56
|
+
return {
|
|
57
|
+
...node,
|
|
58
|
+
key: uniqueKey,
|
|
59
|
+
icon: icon,
|
|
60
|
+
children: processedChildren
|
|
61
|
+
};
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
const useUniqueKeysTree = ({ treeData: originTreeData, expandedKeys, defaultExpandedKeys = [], onExpand, checkedKeys, defaultCheckedKeys = [], onCheck, allowDuplicatedKeys })=>{
|
|
65
|
+
const [currentOriginalExpandedKeys, setCurrentOriginalExpandedKeys] = useControlledState(expandedKeys, void 0, defaultExpandedKeys);
|
|
66
|
+
const controlledCheckedKeysValue = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>{
|
|
67
|
+
if (!checkedKeys) return;
|
|
68
|
+
return Array.isArray(checkedKeys) ? checkedKeys : checkedKeys.checked;
|
|
69
|
+
}, [
|
|
70
|
+
checkedKeys
|
|
71
|
+
]);
|
|
72
|
+
const [currentOriginalCheckedKeys, setCurrentOriginalCheckedKeys] = useControlledState(controlledCheckedKeysValue, void 0, defaultCheckedKeys);
|
|
73
|
+
const { processedTreeData, uniqueToOriginalKeyMap } = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>{
|
|
74
|
+
if (!allowDuplicatedKeys) return {
|
|
75
|
+
processedTreeData: originTreeData,
|
|
76
|
+
uniqueToOriginalKeyMap: new Map()
|
|
77
|
+
};
|
|
78
|
+
const map = new Map();
|
|
79
|
+
const expandedOriginalKeySet = new Set(currentOriginalExpandedKeys);
|
|
80
|
+
const data = processTreeData(originTreeData, expandedOriginalKeySet, "", map);
|
|
81
|
+
return {
|
|
82
|
+
processedTreeData: data,
|
|
83
|
+
uniqueToOriginalKeyMap: map
|
|
84
|
+
};
|
|
85
|
+
}, [
|
|
86
|
+
originTreeData,
|
|
87
|
+
currentOriginalExpandedKeys,
|
|
88
|
+
allowDuplicatedKeys
|
|
89
|
+
]);
|
|
90
|
+
const currentUniqueExpandedKeys = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>{
|
|
91
|
+
if (!allowDuplicatedKeys) return currentOriginalExpandedKeys;
|
|
92
|
+
const originalKeysSet = new Set(currentOriginalExpandedKeys);
|
|
93
|
+
return getUniqueKeysFromOriginals(processedTreeData, originalKeysSet, uniqueToOriginalKeyMap);
|
|
94
|
+
}, [
|
|
95
|
+
currentOriginalExpandedKeys,
|
|
96
|
+
processedTreeData,
|
|
97
|
+
uniqueToOriginalKeyMap,
|
|
98
|
+
allowDuplicatedKeys
|
|
99
|
+
]);
|
|
100
|
+
const currentUniqueCheckedKeys = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>{
|
|
101
|
+
if (!allowDuplicatedKeys) return currentOriginalCheckedKeys;
|
|
102
|
+
const originalKeysSet = new Set(currentOriginalCheckedKeys);
|
|
103
|
+
return getUniqueKeysFromOriginals(processedTreeData, originalKeysSet, uniqueToOriginalKeyMap);
|
|
104
|
+
}, [
|
|
105
|
+
currentOriginalCheckedKeys,
|
|
106
|
+
processedTreeData,
|
|
107
|
+
uniqueToOriginalKeyMap,
|
|
108
|
+
allowDuplicatedKeys
|
|
109
|
+
]);
|
|
110
|
+
const handleOriginalExpand = (0, __WEBPACK_EXTERNAL_MODULE_react__.useCallback)((keys, info)=>{
|
|
111
|
+
const keysArray = Array.from(keys);
|
|
112
|
+
setCurrentOriginalExpandedKeys(keysArray);
|
|
113
|
+
if (onExpand) onExpand(keysArray, info);
|
|
114
|
+
}, [
|
|
115
|
+
onExpand,
|
|
116
|
+
setCurrentOriginalExpandedKeys
|
|
117
|
+
]);
|
|
118
|
+
const handleUniqueExpand = (0, __WEBPACK_EXTERNAL_MODULE_react__.useCallback)((uniqueKeys, info)=>{
|
|
119
|
+
const originalKeys = uniqueKeys.map((uk)=>uniqueToOriginalKeyMap.get(uk)).filter((ok)=>void 0 !== ok);
|
|
120
|
+
const triggeredOriginalKey = uniqueToOriginalKeyMap.get(info.node.key);
|
|
121
|
+
setCurrentOriginalExpandedKeys(originalKeys);
|
|
122
|
+
if (onExpand) onExpand(originalKeys, {
|
|
123
|
+
...info,
|
|
124
|
+
triggeredOriginalKey: triggeredOriginalKey
|
|
125
|
+
});
|
|
126
|
+
}, [
|
|
127
|
+
uniqueToOriginalKeyMap,
|
|
128
|
+
setCurrentOriginalExpandedKeys,
|
|
129
|
+
onExpand
|
|
130
|
+
]);
|
|
131
|
+
const handleOriginalCheck = (0, __WEBPACK_EXTERNAL_MODULE_react__.useCallback)((checkedInfoOrKeys, info)=>{
|
|
132
|
+
let checkedArray;
|
|
133
|
+
checkedArray = Array.isArray(checkedInfoOrKeys) ? Array.from(checkedInfoOrKeys) : checkedInfoOrKeys && "object" == typeof checkedInfoOrKeys && "checked" in checkedInfoOrKeys ? Array.from(checkedInfoOrKeys.checked) : [];
|
|
134
|
+
setCurrentOriginalCheckedKeys(checkedArray);
|
|
135
|
+
if (onCheck) onCheck(checkedArray, info);
|
|
136
|
+
}, [
|
|
137
|
+
onCheck,
|
|
138
|
+
setCurrentOriginalCheckedKeys
|
|
139
|
+
]);
|
|
140
|
+
const handleUniqueCheck = (0, __WEBPACK_EXTERNAL_MODULE_react__.useCallback)((checkedInfoOrKeys, info)=>{
|
|
141
|
+
const triggeredUniqueKey = info.node.key;
|
|
142
|
+
const triggeredOriginalKey = uniqueToOriginalKeyMap.get(triggeredUniqueKey);
|
|
143
|
+
if (void 0 === triggeredOriginalKey) return void console.error("Could not find original key for unique key:", triggeredUniqueKey);
|
|
144
|
+
if (!info.checked) {
|
|
145
|
+
const currentKeys = [
|
|
146
|
+
...currentOriginalCheckedKeys
|
|
147
|
+
];
|
|
148
|
+
const newCheckedKeys = currentKeys.filter((key)=>key !== triggeredOriginalKey);
|
|
149
|
+
setCurrentOriginalCheckedKeys(newCheckedKeys);
|
|
150
|
+
if (onCheck) onCheck(newCheckedKeys, {
|
|
151
|
+
...info,
|
|
152
|
+
triggeredOriginalKey: triggeredOriginalKey
|
|
153
|
+
});
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
let uniqueCheckedKeys;
|
|
157
|
+
uniqueCheckedKeys = Array.isArray(checkedInfoOrKeys) ? checkedInfoOrKeys : checkedInfoOrKeys && "object" == typeof checkedInfoOrKeys && "checked" in checkedInfoOrKeys ? checkedInfoOrKeys.checked : [];
|
|
158
|
+
const derivedOriginalKeys = new Set();
|
|
159
|
+
for (const uniqueKey of uniqueCheckedKeys){
|
|
160
|
+
const originalKey = uniqueToOriginalKeyMap.get(uniqueKey);
|
|
161
|
+
if (void 0 !== originalKey) derivedOriginalKeys.add(originalKey);
|
|
162
|
+
}
|
|
163
|
+
derivedOriginalKeys.add(triggeredOriginalKey);
|
|
164
|
+
const originalKeysArray = Array.from(derivedOriginalKeys);
|
|
165
|
+
setCurrentOriginalCheckedKeys(originalKeysArray);
|
|
166
|
+
if (onCheck) onCheck(originalKeysArray, {
|
|
167
|
+
...info,
|
|
168
|
+
triggeredOriginalKey: triggeredOriginalKey
|
|
169
|
+
});
|
|
170
|
+
}, [
|
|
171
|
+
uniqueToOriginalKeyMap,
|
|
172
|
+
setCurrentOriginalCheckedKeys,
|
|
173
|
+
onCheck,
|
|
174
|
+
currentOriginalCheckedKeys
|
|
175
|
+
]);
|
|
176
|
+
const handleAntTreeExpand = allowDuplicatedKeys ? handleUniqueExpand : handleOriginalExpand;
|
|
177
|
+
const handleAntTreeCheck = allowDuplicatedKeys ? handleUniqueCheck : handleOriginalCheck;
|
|
178
|
+
const finalProcessedTreeData = allowDuplicatedKeys ? processedTreeData : originTreeData;
|
|
179
|
+
return {
|
|
180
|
+
processedTreeData: finalProcessedTreeData,
|
|
181
|
+
currentUniqueExpandedKeys,
|
|
182
|
+
currentUniqueCheckedKeys,
|
|
183
|
+
handleAntTreeExpand,
|
|
184
|
+
handleAntTreeCheck
|
|
185
|
+
};
|
|
186
|
+
};
|
|
187
|
+
function cx(...args) {
|
|
188
|
+
const classes = [];
|
|
189
|
+
for (const arg of args)if (arg) {
|
|
190
|
+
if ("string" == typeof arg || "number" == typeof arg) classes.push(String(arg));
|
|
191
|
+
else if (Array.isArray(arg)) classes.push(...cx(...arg));
|
|
192
|
+
else if ("object" == typeof arg) {
|
|
193
|
+
for (const [key, value] of Object.entries(arg))if (value) classes.push(key);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return classes;
|
|
197
|
+
}
|
|
198
|
+
function clsx(...args) {
|
|
199
|
+
return cx(...args).join(" ");
|
|
200
|
+
}
|
|
201
|
+
"use client";
|
|
202
|
+
const useCls = ()=>{
|
|
203
|
+
const { getPrefixCls } = (0, __WEBPACK_EXTERNAL_MODULE_react__.useContext)(__WEBPACK_EXTERNAL_MODULE_antd_es_config_provider_6a57beb3__["default"].ConfigContext);
|
|
204
|
+
return (...args)=>cx(...args).map((cls)=>getPrefixCls(cls)).join(" ");
|
|
205
|
+
};
|
|
206
|
+
"use client";
|
|
207
|
+
function useTreeCommon(props) {
|
|
208
|
+
const { treeData: originTreeData = [], expandedKeys: propExpandedKeys, defaultExpandedKeys: propDefaultExpandedKeys = [], defaultExpandAll = false, defaultExpandParent = true, onExpand: propOnExpand, checkedKeys, defaultCheckedKeys, onCheck, allowDuplicatedKeys, className, switcherIcon, ...restProps } = props;
|
|
209
|
+
const resolvedDefaultExpandedKeys = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>{
|
|
210
|
+
if (defaultExpandAll) {
|
|
211
|
+
const keys = [];
|
|
212
|
+
const traverse = (nodes = [])=>{
|
|
213
|
+
nodes.forEach((node)=>{
|
|
214
|
+
keys.push(node.key);
|
|
215
|
+
if (Array.isArray(node.children)) traverse(node.children);
|
|
216
|
+
});
|
|
217
|
+
};
|
|
218
|
+
traverse(originTreeData);
|
|
219
|
+
return keys;
|
|
220
|
+
}
|
|
221
|
+
if (defaultExpandParent && (null == propDefaultExpandedKeys ? void 0 : propDefaultExpandedKeys.length)) {
|
|
222
|
+
const parentMap = new Map();
|
|
223
|
+
const traverse = (nodes, parent)=>{
|
|
224
|
+
nodes.forEach((node)=>{
|
|
225
|
+
if (parent) parentMap.set(node.key, parent.key);
|
|
226
|
+
const children = Array.isArray(node.children) ? node.children : [];
|
|
227
|
+
if (children.length) traverse(children, node);
|
|
228
|
+
});
|
|
229
|
+
};
|
|
230
|
+
traverse(originTreeData);
|
|
231
|
+
const expanded = new Set(propDefaultExpandedKeys);
|
|
232
|
+
propDefaultExpandedKeys.forEach((key)=>{
|
|
233
|
+
let k = key;
|
|
234
|
+
while(parentMap.has(k)){
|
|
235
|
+
const p = parentMap.get(k);
|
|
236
|
+
if (!expanded.has(p)) expanded.add(p);
|
|
237
|
+
k = p;
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
return Array.from(expanded);
|
|
241
|
+
}
|
|
242
|
+
return propDefaultExpandedKeys ?? [];
|
|
243
|
+
}, [
|
|
244
|
+
originTreeData,
|
|
245
|
+
defaultExpandAll,
|
|
246
|
+
defaultExpandParent,
|
|
247
|
+
propDefaultExpandedKeys
|
|
248
|
+
]);
|
|
249
|
+
const { processedTreeData, currentUniqueExpandedKeys, currentUniqueCheckedKeys, handleAntTreeExpand, handleAntTreeCheck } = useUniqueKeysTree({
|
|
250
|
+
treeData: originTreeData,
|
|
251
|
+
expandedKeys: propExpandedKeys,
|
|
252
|
+
defaultExpandedKeys: resolvedDefaultExpandedKeys,
|
|
253
|
+
onExpand: propOnExpand,
|
|
254
|
+
checkedKeys,
|
|
255
|
+
defaultCheckedKeys,
|
|
256
|
+
onCheck,
|
|
257
|
+
allowDuplicatedKeys
|
|
258
|
+
});
|
|
259
|
+
const cls = useCls();
|
|
260
|
+
const customSwitcherIcon = ()=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__bioturing_assets_dd0c210d__.CaretRight, {
|
|
261
|
+
weight: "bold",
|
|
262
|
+
className: cls("caret-switcher-icon")
|
|
263
|
+
});
|
|
264
|
+
return {
|
|
265
|
+
cls,
|
|
266
|
+
customSwitcherIcon,
|
|
267
|
+
processedTreeData,
|
|
268
|
+
currentUniqueExpandedKeys,
|
|
269
|
+
currentUniqueCheckedKeys,
|
|
270
|
+
handleAntTreeExpand,
|
|
271
|
+
handleAntTreeCheck,
|
|
272
|
+
restProps,
|
|
273
|
+
className,
|
|
274
|
+
switcherIcon
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
"use client";
|
|
278
|
+
const MainTreeInner = (props, ref)=>{
|
|
279
|
+
const { cls, customSwitcherIcon, processedTreeData, currentUniqueExpandedKeys, currentUniqueCheckedKeys, handleAntTreeExpand, handleAntTreeCheck, restProps, className, switcherIcon } = useTreeCommon(props);
|
|
280
|
+
return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE_antd_es_tree_05ca9855__["default"], {
|
|
281
|
+
ref: ref,
|
|
282
|
+
className: clsx(cls("tree"), className),
|
|
283
|
+
switcherIcon: switcherIcon || customSwitcherIcon,
|
|
284
|
+
treeData: processedTreeData,
|
|
285
|
+
expandedKeys: currentUniqueExpandedKeys,
|
|
286
|
+
onExpand: handleAntTreeExpand,
|
|
287
|
+
checkedKeys: {
|
|
288
|
+
checked: currentUniqueCheckedKeys,
|
|
289
|
+
halfChecked: []
|
|
290
|
+
},
|
|
291
|
+
onCheck: handleAntTreeCheck,
|
|
292
|
+
...restProps
|
|
293
|
+
});
|
|
294
|
+
};
|
|
295
|
+
const DirectoryTreeInner = (props, ref)=>{
|
|
296
|
+
const { cls, customSwitcherIcon, processedTreeData, currentUniqueExpandedKeys, currentUniqueCheckedKeys, handleAntTreeExpand, handleAntTreeCheck, restProps, className, switcherIcon } = useTreeCommon(props);
|
|
297
|
+
return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE_antd_es_tree_05ca9855__["default"].DirectoryTree, {
|
|
298
|
+
ref: ref,
|
|
299
|
+
className: clsx(cls("directory-tree"), className),
|
|
300
|
+
switcherIcon: switcherIcon || customSwitcherIcon,
|
|
301
|
+
treeData: processedTreeData,
|
|
302
|
+
expandedKeys: currentUniqueExpandedKeys,
|
|
303
|
+
onExpand: handleAntTreeExpand,
|
|
304
|
+
checkedKeys: {
|
|
305
|
+
checked: currentUniqueCheckedKeys,
|
|
306
|
+
halfChecked: []
|
|
307
|
+
},
|
|
308
|
+
onCheck: handleAntTreeCheck,
|
|
309
|
+
...restProps
|
|
310
|
+
});
|
|
311
|
+
};
|
|
312
|
+
const MainTree = /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react__.forwardRef)(MainTreeInner);
|
|
313
|
+
const DirectoryTree = /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react__.forwardRef)(DirectoryTreeInner);
|
|
314
|
+
const Tree = Object.assign(MainTree, {
|
|
315
|
+
DirectoryTree,
|
|
316
|
+
TreeNode: __WEBPACK_EXTERNAL_MODULE_antd_es_tree_05ca9855__["default"].TreeNode
|
|
317
|
+
});
|
|
318
|
+
export { Tree, getUniqueKeysFromOriginals, processTreeData, useUniqueKeysTree };
|
package/dist/Truncate.js
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import * as __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__ from "react/jsx-runtime";
|
|
2
|
+
import * as __WEBPACK_EXTERNAL_MODULE_react__ from "react";
|
|
3
|
+
import * as __WEBPACK_EXTERNAL_MODULE_antd_es_config_provider_6a57beb3__ from "antd/es/config-provider";
|
|
4
|
+
import "antd/es/theme/useToken";
|
|
5
|
+
import "tailwind-merge";
|
|
6
|
+
function cx(...args) {
|
|
7
|
+
const classes = [];
|
|
8
|
+
for (const arg of args)if (arg) {
|
|
9
|
+
if ("string" == typeof arg || "number" == typeof arg) classes.push(String(arg));
|
|
10
|
+
else if (Array.isArray(arg)) classes.push(...cx(...arg));
|
|
11
|
+
else if ("object" == typeof arg) {
|
|
12
|
+
for (const [key, value] of Object.entries(arg))if (value) classes.push(key);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return classes;
|
|
16
|
+
}
|
|
17
|
+
function clsx(...args) {
|
|
18
|
+
return cx(...args).join(" ");
|
|
19
|
+
}
|
|
20
|
+
"use client";
|
|
21
|
+
const useCls = ()=>{
|
|
22
|
+
const { getPrefixCls } = (0, __WEBPACK_EXTERNAL_MODULE_react__.useContext)(__WEBPACK_EXTERNAL_MODULE_antd_es_config_provider_6a57beb3__["default"].ConfigContext);
|
|
23
|
+
return (...args)=>cx(...args).map((cls)=>getPrefixCls(cls)).join(" ");
|
|
24
|
+
};
|
|
25
|
+
const measureText = (container)=>{
|
|
26
|
+
const span = document.createElement("span");
|
|
27
|
+
span.style.opacity = "0";
|
|
28
|
+
span.style.position = "absolute";
|
|
29
|
+
span.style.top = "-1000px";
|
|
30
|
+
span.style.left = "-1000px";
|
|
31
|
+
span.style.whiteSpace = "nowrap";
|
|
32
|
+
span.style.pointerEvents = "none";
|
|
33
|
+
container.appendChild(span);
|
|
34
|
+
return {
|
|
35
|
+
measure: (text)=>{
|
|
36
|
+
span.innerText = text;
|
|
37
|
+
return span.clientWidth;
|
|
38
|
+
},
|
|
39
|
+
destroy: ()=>{
|
|
40
|
+
container.removeChild(span);
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
const getMiddleTruncatedString = (text, ellipsis, container)=>{
|
|
45
|
+
var _Object_values_reverse_find;
|
|
46
|
+
if (!text) return text;
|
|
47
|
+
const { measure: getTextWidth, destroy: destroyMeasure } = measureText(container);
|
|
48
|
+
const textWidth = getTextWidth(text);
|
|
49
|
+
const containerWidth = container.clientWidth;
|
|
50
|
+
const initialOffset = Math.floor(containerWidth / textWidth * text.length);
|
|
51
|
+
if (textWidth <= containerWidth) {
|
|
52
|
+
destroyMeasure();
|
|
53
|
+
return text;
|
|
54
|
+
}
|
|
55
|
+
let offset = initialOffset;
|
|
56
|
+
const attempts = {};
|
|
57
|
+
const maxAttempts = 20;
|
|
58
|
+
const buffer = 10;
|
|
59
|
+
while(Object.values(attempts).length <= maxAttempts){
|
|
60
|
+
if (attempts[offset]) break;
|
|
61
|
+
if (offset <= 1) {
|
|
62
|
+
attempts[0] = [
|
|
63
|
+
0,
|
|
64
|
+
ellipsis
|
|
65
|
+
];
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
const start = text.slice(0, Math.ceil((offset - ellipsis.length) / 2 - 1)).trimEnd();
|
|
69
|
+
const end = text.slice(Math.floor((offset - ellipsis.length) / 2) - offset).trimStart();
|
|
70
|
+
const truncatedStr = start + ellipsis + end;
|
|
71
|
+
const width = getTextWidth(truncatedStr);
|
|
72
|
+
attempts[offset] = [
|
|
73
|
+
width,
|
|
74
|
+
truncatedStr
|
|
75
|
+
];
|
|
76
|
+
if (width >= containerWidth) offset -= 2;
|
|
77
|
+
else {
|
|
78
|
+
if (containerWidth - width < buffer) break;
|
|
79
|
+
offset += 2;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
destroyMeasure();
|
|
83
|
+
return (null == (_Object_values_reverse_find = Object.values(attempts).reverse().find(([width])=>width < containerWidth)) ? void 0 : _Object_values_reverse_find[1]) ?? Object.values(attempts)[0][1];
|
|
84
|
+
};
|
|
85
|
+
"use client";
|
|
86
|
+
const Truncate = ({ children, position = "end", className, style, ...rest })=>{
|
|
87
|
+
const cls = useCls();
|
|
88
|
+
const containerRef = (0, __WEBPACK_EXTERNAL_MODULE_react__.useRef)(null);
|
|
89
|
+
const [isTruncated, setIsTruncated] = (0, __WEBPACK_EXTERNAL_MODULE_react__.useState)(false);
|
|
90
|
+
const [truncatedText, setTruncatedText] = (0, __WEBPACK_EXTERNAL_MODULE_react__.useState)(children);
|
|
91
|
+
const text = children;
|
|
92
|
+
const getContainerStyles = (0, __WEBPACK_EXTERNAL_MODULE_react__.useCallback)(()=>{
|
|
93
|
+
const baseStyles = {
|
|
94
|
+
overflow: "hidden",
|
|
95
|
+
whiteSpace: "nowrap",
|
|
96
|
+
textOverflow: "clip",
|
|
97
|
+
flexGrow: 1,
|
|
98
|
+
minWidth: 0,
|
|
99
|
+
maxWidth: "100%",
|
|
100
|
+
display: "block",
|
|
101
|
+
...style
|
|
102
|
+
};
|
|
103
|
+
if ("end" === position) return {
|
|
104
|
+
...baseStyles,
|
|
105
|
+
textOverflow: "ellipsis"
|
|
106
|
+
};
|
|
107
|
+
return baseStyles;
|
|
108
|
+
}, [
|
|
109
|
+
position,
|
|
110
|
+
style
|
|
111
|
+
]);
|
|
112
|
+
(0, __WEBPACK_EXTERNAL_MODULE_react__.useLayoutEffect)(()=>{
|
|
113
|
+
const container = containerRef.current;
|
|
114
|
+
if (!container) return;
|
|
115
|
+
let cancellationToken = {
|
|
116
|
+
cancelled: false
|
|
117
|
+
};
|
|
118
|
+
const calculateTruncatedString = ()=>{
|
|
119
|
+
if (cancellationToken) cancellationToken.cancelled = true;
|
|
120
|
+
const requestCancellationToken = {
|
|
121
|
+
cancelled: false
|
|
122
|
+
};
|
|
123
|
+
cancellationToken = requestCancellationToken;
|
|
124
|
+
const truncated = getMiddleTruncatedString(text, "\u2026", container);
|
|
125
|
+
if (requestCancellationToken.cancelled) return;
|
|
126
|
+
setTruncatedText(truncated);
|
|
127
|
+
};
|
|
128
|
+
if ("middle" == position) {
|
|
129
|
+
var _window_document_fonts_ready, _window_document_fonts;
|
|
130
|
+
null == (_window_document_fonts = window.document.fonts) || null == (_window_document_fonts_ready = _window_document_fonts.ready) || _window_document_fonts_ready.then(calculateTruncatedString);
|
|
131
|
+
}
|
|
132
|
+
if ("end" == position) setTruncatedText(text);
|
|
133
|
+
const observer = new ResizeObserver(()=>{
|
|
134
|
+
if ("middle" == position) window.requestAnimationFrame(calculateTruncatedString);
|
|
135
|
+
if ("end" == position) {
|
|
136
|
+
const isOverflowing = container.scrollWidth > container.clientWidth;
|
|
137
|
+
if (isOverflowing) setIsTruncated(true);
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
observer.observe(container);
|
|
141
|
+
return ()=>{
|
|
142
|
+
cancellationToken.cancelled = true;
|
|
143
|
+
observer.disconnect();
|
|
144
|
+
};
|
|
145
|
+
}, [
|
|
146
|
+
text,
|
|
147
|
+
position
|
|
148
|
+
]);
|
|
149
|
+
return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("span", {
|
|
150
|
+
ref: containerRef,
|
|
151
|
+
style: getContainerStyles(),
|
|
152
|
+
className: clsx(cls("truncate"), className),
|
|
153
|
+
title: isTruncated ? text : void 0,
|
|
154
|
+
...rest,
|
|
155
|
+
children: text === truncatedText ? text : /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("span", {
|
|
156
|
+
children: truncatedText
|
|
157
|
+
})
|
|
158
|
+
});
|
|
159
|
+
};
|
|
160
|
+
export { Truncate };
|