@expcat/tigercat-react 2.1.0 → 2.1.2
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/{chunk-RUAPTIQ7.mjs → chunk-246DAUEF.mjs} +2 -2
- package/dist/{chunk-PU3JY6RE.mjs → chunk-2JMI7TCM.mjs} +1 -1
- package/dist/{chunk-GCY55TBC.mjs → chunk-2XZHYYZ2.mjs} +106 -91
- package/dist/chunk-2YBLMVDT.mjs +428 -0
- package/dist/{chunk-25D5TXZH.mjs → chunk-32MCQMBJ.mjs} +8 -6
- package/dist/{chunk-6MGQAJ62.mjs → chunk-3GPGSNOQ.mjs} +71 -16
- package/dist/{chunk-M5MZWOHF.mjs → chunk-3HHEVMHE.mjs} +1 -1
- package/dist/{chunk-HSBN5MLS.mjs → chunk-3LACOSJQ.mjs} +1 -1
- package/dist/{chunk-F6WV53BS.mjs → chunk-3LDDXHW2.mjs} +28 -11
- package/dist/{chunk-IXQAECFP.mjs → chunk-3QNIFKVF.mjs} +12 -14
- package/dist/{chunk-UD4DTVJZ.mjs → chunk-4C2X5PZO.mjs} +57 -25
- package/dist/chunk-5JETWHLJ.mjs +28 -0
- package/dist/{chunk-VA6PZWOH.mjs → chunk-5SEMRHBD.mjs} +14 -6
- package/dist/{chunk-MXXAJSRS.mjs → chunk-6RMBUZZE.mjs} +11 -11
- package/dist/{chunk-EKILTLUO.mjs → chunk-72CJNKDY.mjs} +1 -1
- package/dist/{chunk-XE4YFBOZ.mjs → chunk-AUD3VOLO.mjs} +1 -1
- package/dist/{chunk-I4MWOYJS.mjs → chunk-AYFKHWJS.mjs} +13 -7
- package/dist/{chunk-RPSHILHD.mjs → chunk-BXAH2GH3.mjs} +8 -2
- package/dist/{chunk-EW5EO7VE.mjs → chunk-BYD7EAWK.mjs} +1 -1
- package/dist/{chunk-L55UK45A.mjs → chunk-CRIEUKMD.mjs} +5 -2
- package/dist/{chunk-DKNVSQSV.mjs → chunk-CUAXRBKO.mjs} +12 -0
- package/dist/{chunk-NWVNTZOP.mjs → chunk-DECUASRW.mjs} +14 -16
- package/dist/{chunk-XMTEMBQV.mjs → chunk-EAAWB3CK.mjs} +16 -13
- package/dist/{chunk-IR7VA6AO.mjs → chunk-EG7EMDKK.mjs} +1 -1
- package/dist/{chunk-HOYBHB7B.mjs → chunk-FNK2VWPP.mjs} +1 -1
- package/dist/{chunk-RJPNBYK5.mjs → chunk-FQS24AUH.mjs} +12 -3
- package/dist/{chunk-LADKKOJT.mjs → chunk-GBEDWXLL.mjs} +16 -10
- package/dist/{chunk-2ENQZECC.mjs → chunk-HAXRHSCN.mjs} +4 -3
- package/dist/{chunk-K4GIKSZE.mjs → chunk-I2BENK5X.mjs} +2 -1
- package/dist/{chunk-DNOPEJ5I.mjs → chunk-JZZPLKTW.mjs} +7 -4
- package/dist/{chunk-7KCQMXJA.mjs → chunk-KDURW5AS.mjs} +4 -3
- package/dist/{chunk-TFMEHUVZ.mjs → chunk-KKN7KLTB.mjs} +0 -1
- package/dist/{chunk-PFL4HNWM.mjs → chunk-M6ZPTGBV.mjs} +1 -2
- package/dist/{chunk-PXRZ6CKY.mjs → chunk-MJVSZ2UJ.mjs} +46 -16
- package/dist/{chunk-LZKBDQE4.mjs → chunk-MYI3FPG4.mjs} +23 -4
- package/dist/{chunk-OIGEBCAS.mjs → chunk-NADODEZX.mjs} +69 -1
- package/dist/{chunk-UKY2EPS3.mjs → chunk-NJWTZ5MO.mjs} +54 -42
- package/dist/{chunk-ASLRAZZN.mjs → chunk-NXJMVH26.mjs} +5 -2
- package/dist/{chunk-773LH7BK.mjs → chunk-O6VYD4E4.mjs} +24 -2
- package/dist/{chunk-G7D4QV7A.mjs → chunk-O7TV5OKS.mjs} +33 -6
- package/dist/{chunk-DPWRXXXW.mjs → chunk-OJ6SHHOZ.mjs} +3 -3
- package/dist/{chunk-UYJJLHVA.mjs → chunk-PMQJ6AYT.mjs} +23 -21
- package/dist/{chunk-KC55B62J.mjs → chunk-PY2VUNEJ.mjs} +143 -46
- package/dist/{chunk-BEJZPJIK.mjs → chunk-QOAOOD53.mjs} +10 -4
- package/dist/{chunk-JQJM65RJ.mjs → chunk-QU3QXUTC.mjs} +49 -23
- package/dist/{chunk-RQ4PUK6G.mjs → chunk-R7YZ6FKP.mjs} +24 -13
- package/dist/{chunk-YI6YWH66.mjs → chunk-RE5ZLA5D.mjs} +6 -6
- package/dist/{chunk-UCBW5RJN.mjs → chunk-RGVU4EMA.mjs} +11 -6
- package/dist/{chunk-IBSOUQGB.mjs → chunk-RRGPDFDI.mjs} +7 -4
- package/dist/{chunk-ZH5ZBLAN.mjs → chunk-RUQ3F3MV.mjs} +34 -7
- package/dist/{chunk-KVCI2346.mjs → chunk-S2V3HGLZ.mjs} +8 -7
- package/dist/{chunk-PGD5RPKF.mjs → chunk-SVIJ2UZA.mjs} +2 -1
- package/dist/{chunk-UETARXIK.mjs → chunk-SXWEFZOF.mjs} +246 -53
- package/dist/{chunk-H6MVW5YD.mjs → chunk-TEVEXDY2.mjs} +24 -13
- package/dist/{chunk-DJOFM2VO.mjs → chunk-TO6MZFNQ.mjs} +52 -40
- package/dist/{chunk-ZCGIZOMT.mjs → chunk-V7HJ5HLC.mjs} +6 -10
- package/dist/{chunk-SIDDYP3O.mjs → chunk-VJWSKJLJ.mjs} +1 -1
- package/dist/{chunk-ZG56T75O.mjs → chunk-WTHWLCRL.mjs} +51 -11
- package/dist/{chunk-KP6DEYWB.mjs → chunk-X4L3W7RQ.mjs} +1 -1
- package/dist/{chunk-ZMRTETN2.mjs → chunk-X6C6MNG5.mjs} +4 -3
- package/dist/{chunk-OGG2TQDG.mjs → chunk-XVHTJQ4T.mjs} +12 -1
- package/dist/{chunk-FSMJLJFL.mjs → chunk-Y6UH3EKE.mjs} +1 -1
- package/dist/{chunk-7EMCZVJ2.mjs → chunk-YH7FKFRM.mjs} +4 -4
- package/dist/chunk-YJ5T4XZN.mjs +81 -0
- package/dist/{chunk-VVNFXJMN.mjs → chunk-YNDPQVEK.mjs} +8 -1
- package/dist/{chunk-QGZ32NFQ.mjs → chunk-Z23KOLNU.mjs} +4 -3
- package/dist/{chunk-5CKMYMTS.mjs → chunk-ZATZRXMW.mjs} +27 -8
- package/dist/components/ActivityFeed.mjs +2 -2
- package/dist/components/Affix.mjs +1 -1
- package/dist/components/Anchor.mjs +1 -1
- package/dist/components/AreaChart.mjs +4 -3
- package/dist/components/AutoComplete.mjs +1 -1
- package/dist/components/BarChart.mjs +4 -3
- package/dist/components/Calendar.mjs +1 -1
- package/dist/components/Cascader.mjs +1 -1
- package/dist/components/ChartCanvas.mjs +1 -1
- package/dist/components/ChatWindow.mjs +3 -3
- package/dist/components/Code.mjs +3 -1
- package/dist/components/CollapsePanel.mjs +1 -1
- package/dist/components/ColorPicker.d.mts +3 -1
- package/dist/components/ColorPicker.mjs +3 -1
- package/dist/components/CommentThread.mjs +2 -2
- package/dist/components/DataExport.mjs +2 -2
- package/dist/components/DataTableWithToolbar.mjs +7 -7
- package/dist/components/DonutChart.mjs +4 -4
- package/dist/components/Dropdown.mjs +1 -1
- package/dist/components/FileManager.mjs +2 -1
- package/dist/components/FloatButton.mjs +1 -1
- package/dist/components/FormItem.mjs +1 -1
- package/dist/components/FormWizard.mjs +1 -1
- package/dist/components/FunnelChart.mjs +3 -3
- package/dist/components/Gantt.d.mts +3 -1
- package/dist/components/Gantt.mjs +2 -2
- package/dist/components/GaugeChart.mjs +2 -2
- package/dist/components/HeatmapChart.mjs +3 -3
- package/dist/components/Image.mjs +4 -4
- package/dist/components/ImageGroup.mjs +2 -2
- package/dist/components/ImagePreview.mjs +1 -1
- package/dist/components/Input.mjs +1 -1
- package/dist/components/InputNumber.d.mts +1 -1
- package/dist/components/InputNumber.mjs +1 -1
- package/dist/components/Kanban.mjs +2 -2
- package/dist/components/LineChart.mjs +4 -3
- package/dist/components/List.mjs +2 -2
- package/dist/components/Loading.mjs +1 -1
- package/dist/components/MarkdownEditor.mjs +1 -1
- package/dist/components/MaskInput.mjs +1 -1
- package/dist/components/NotificationCenter.mjs +4 -4
- package/dist/components/OrgChart.mjs +2 -2
- package/dist/components/Pagination.mjs +1 -1
- package/dist/components/PieChart.mjs +3 -3
- package/dist/components/Popconfirm.mjs +2 -2
- package/dist/components/Popover.mjs +2 -2
- package/dist/components/QRCode.d.mts +2 -2
- package/dist/components/QRCode.mjs +1 -1
- package/dist/components/RadarChart.mjs +3 -3
- package/dist/components/Rate.mjs +1 -1
- package/dist/components/RichTextEditor.mjs +1 -1
- package/dist/components/ScatterChart.mjs +4 -3
- package/dist/components/ScrollSpy.mjs +1 -1
- package/dist/components/Select.mjs +1 -1
- package/dist/components/Signature.mjs +1 -1
- package/dist/components/SplitButton.mjs +2 -2
- package/dist/components/Splitter.mjs +1 -1
- package/dist/components/Stepper.d.mts +2 -0
- package/dist/components/Stepper.mjs +2 -1
- package/dist/components/SunburstChart.mjs +3 -3
- package/dist/components/Switch.d.mts +5 -1
- package/dist/components/Switch.mjs +2 -1
- package/dist/components/Table.mjs +3 -3
- package/dist/components/TaskBoard.mjs +1 -1
- package/dist/components/Textarea.mjs +1 -1
- package/dist/components/Tooltip.mjs +2 -2
- package/dist/components/Tour.mjs +1 -1
- package/dist/components/TreeMapChart.mjs +3 -3
- package/dist/components/TreeSelect.mjs +1 -1
- package/dist/components/Upload.mjs +1 -1
- package/dist/hooks/useChartInteraction.d.mts +5 -0
- package/dist/hooks/useChartInteraction.mjs +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +57 -0
- package/package.json +2 -2
- package/dist/chunk-CB4SK5AU.mjs +0 -235
- package/dist/chunk-KPACLRQH.mjs +0 -55
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
import { useState, useEffect, useRef, useCallback, useId } from "react";
|
|
13
13
|
import {
|
|
14
14
|
classNames,
|
|
15
|
-
|
|
15
|
+
getInputFieldClasses,
|
|
16
16
|
getInputWrapperClasses,
|
|
17
17
|
getInputAffixClasses,
|
|
18
18
|
getInputErrorClasses,
|
|
@@ -103,16 +103,13 @@ var Input = ({
|
|
|
103
103
|
const showClear = clearable && !disabled && !readonly && currentValStr.length > 0;
|
|
104
104
|
const showPasswordToggle = showPassword && type === "password" && !disabled;
|
|
105
105
|
const effectiveType = showPassword && type === "password" ? passwordVisible ? "text" : "password" : type;
|
|
106
|
-
const inputClasses =
|
|
106
|
+
const inputClasses = getInputFieldClasses({
|
|
107
107
|
size: effectiveSize,
|
|
108
108
|
status,
|
|
109
109
|
hasPrefix,
|
|
110
110
|
hasSuffix
|
|
111
111
|
});
|
|
112
112
|
const renderSuffix = () => {
|
|
113
|
-
if (activeError) {
|
|
114
|
-
return /* @__PURE__ */ jsx("div", { id: errorMsgId, className: getInputErrorClasses(effectiveSize), children: errorMessage });
|
|
115
|
-
}
|
|
116
113
|
if (showClear) {
|
|
117
114
|
return /* @__PURE__ */ jsx(
|
|
118
115
|
"button",
|
|
@@ -148,7 +145,7 @@ var Input = ({
|
|
|
148
145
|
"div",
|
|
149
146
|
{
|
|
150
147
|
ref: wrapperRef,
|
|
151
|
-
className: classNames(getInputWrapperClasses(), className),
|
|
148
|
+
className: classNames(getInputWrapperClasses(status), className),
|
|
152
149
|
style,
|
|
153
150
|
onAnimationEnd: handleAnimationEnd,
|
|
154
151
|
children: [
|
|
@@ -183,16 +180,36 @@ var Input = ({
|
|
|
183
180
|
]
|
|
184
181
|
}
|
|
185
182
|
);
|
|
183
|
+
const extras = [];
|
|
184
|
+
if (activeError) {
|
|
185
|
+
extras.push(
|
|
186
|
+
/* @__PURE__ */ jsx(
|
|
187
|
+
"div",
|
|
188
|
+
{
|
|
189
|
+
id: errorMsgId,
|
|
190
|
+
className: getInputErrorClasses(effectiveSize),
|
|
191
|
+
"aria-live": "polite",
|
|
192
|
+
children: errorMessage
|
|
193
|
+
},
|
|
194
|
+
"error"
|
|
195
|
+
)
|
|
196
|
+
);
|
|
197
|
+
}
|
|
186
198
|
if (showCount) {
|
|
187
199
|
const count = currentValStr.length;
|
|
188
200
|
const isOver = maxLength !== void 0 && count > maxLength;
|
|
189
201
|
const countText = maxLength !== void 0 ? `${count} / ${maxLength}` : `${count}`;
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
202
|
+
extras.push(
|
|
203
|
+
/* @__PURE__ */ jsx("div", { className: getInputCountClasses(isOver), children: countText }, "count")
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
if (extras.length === 0) {
|
|
207
|
+
return wrapperNode;
|
|
194
208
|
}
|
|
195
|
-
return
|
|
209
|
+
return /* @__PURE__ */ jsxs("div", { className: "w-full", children: [
|
|
210
|
+
wrapperNode,
|
|
211
|
+
extras
|
|
212
|
+
] });
|
|
196
213
|
};
|
|
197
214
|
|
|
198
215
|
export {
|
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
getAnchorLinkClasses,
|
|
17
17
|
getAnchorLinkListClasses,
|
|
18
18
|
createAnchorObserver,
|
|
19
|
+
createProgrammaticScrollLock,
|
|
19
20
|
scrollToAnchor
|
|
20
21
|
} from "@expcat/tigercat-core";
|
|
21
22
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -86,7 +87,7 @@ var AnchorLink = ({
|
|
|
86
87
|
};
|
|
87
88
|
var Anchor = ({
|
|
88
89
|
affix = true,
|
|
89
|
-
bounds
|
|
90
|
+
bounds = 5,
|
|
90
91
|
offsetTop = 0,
|
|
91
92
|
showInkInFixed = false,
|
|
92
93
|
targetOffset,
|
|
@@ -103,10 +104,9 @@ var Anchor = ({
|
|
|
103
104
|
const [links, setLinks] = useState([]);
|
|
104
105
|
const anchorRef = useRef(null);
|
|
105
106
|
const inkRef = useRef(null);
|
|
106
|
-
const isScrollingRef = useRef(false);
|
|
107
|
-
const scrollTimeoutRef = useRef(null);
|
|
108
107
|
const getContainerRef = useRef(getContainer);
|
|
109
108
|
getContainerRef.current = getContainer;
|
|
109
|
+
const scrollLockRef = useRef(createProgrammaticScrollLock(() => getContainerRef.current()));
|
|
110
110
|
const getCurrentAnchorRef = useRef(getCurrentAnchor);
|
|
111
111
|
getCurrentAnchorRef.current = getCurrentAnchor;
|
|
112
112
|
const onChangeRef = useRef(onChange);
|
|
@@ -133,14 +133,9 @@ var Anchor = ({
|
|
|
133
133
|
const handleLinkClick = useCallback(
|
|
134
134
|
(href, event) => {
|
|
135
135
|
onClick?.(event, href);
|
|
136
|
-
|
|
136
|
+
scrollLockRef.current.lock();
|
|
137
137
|
setActiveLink(href);
|
|
138
138
|
scrollTo(href);
|
|
139
|
-
if (scrollTimeoutRef.current !== null) clearTimeout(scrollTimeoutRef.current);
|
|
140
|
-
scrollTimeoutRef.current = setTimeout(() => {
|
|
141
|
-
isScrollingRef.current = false;
|
|
142
|
-
scrollTimeoutRef.current = null;
|
|
143
|
-
}, 500);
|
|
144
139
|
},
|
|
145
140
|
[onClick, scrollTo]
|
|
146
141
|
);
|
|
@@ -151,9 +146,10 @@ var Anchor = ({
|
|
|
151
146
|
const root = container === window ? null : container;
|
|
152
147
|
stop = createAnchorObserver(links, {
|
|
153
148
|
offsetTop: scrollOffset,
|
|
149
|
+
bounds,
|
|
154
150
|
root,
|
|
155
151
|
onChange: (newActiveLink) => {
|
|
156
|
-
if (
|
|
152
|
+
if (scrollLockRef.current.isLocked()) return;
|
|
157
153
|
const finalActiveLink = getCurrentAnchorRef.current ? getCurrentAnchorRef.current(newActiveLink) : newActiveLink;
|
|
158
154
|
setActiveLink((prev) => {
|
|
159
155
|
if (finalActiveLink !== prev) {
|
|
@@ -168,11 +164,13 @@ var Anchor = ({
|
|
|
168
164
|
return () => {
|
|
169
165
|
clearTimeout(timeoutId);
|
|
170
166
|
stop?.();
|
|
171
|
-
if (scrollTimeoutRef.current !== null) {
|
|
172
|
-
clearTimeout(scrollTimeoutRef.current);
|
|
173
|
-
}
|
|
174
167
|
};
|
|
175
|
-
}, [links, scrollOffset]);
|
|
168
|
+
}, [bounds, links, scrollOffset]);
|
|
169
|
+
useEffect(() => {
|
|
170
|
+
return () => {
|
|
171
|
+
scrollLockRef.current.dispose();
|
|
172
|
+
};
|
|
173
|
+
}, []);
|
|
176
174
|
useEffect(() => {
|
|
177
175
|
if (!inkRef.current || !anchorRef.current || !activeLink) {
|
|
178
176
|
return;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Textarea
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-PMQJ6AYT.mjs";
|
|
4
4
|
import {
|
|
5
5
|
Button
|
|
6
6
|
} from "./chunk-5TE7KLE5.mjs";
|
|
@@ -13,6 +13,9 @@ import {
|
|
|
13
13
|
import {
|
|
14
14
|
Avatar
|
|
15
15
|
} from "./chunk-OO562MFD.mjs";
|
|
16
|
+
import {
|
|
17
|
+
useTigerConfig
|
|
18
|
+
} from "./chunk-YSIXURBW.mjs";
|
|
16
19
|
|
|
17
20
|
// src/components/CommentThread.tsx
|
|
18
21
|
import { useMemo, useState } from "react";
|
|
@@ -20,7 +23,13 @@ import {
|
|
|
20
23
|
classNames,
|
|
21
24
|
buildCommentTree,
|
|
22
25
|
clipCommentTreeDepth,
|
|
23
|
-
formatCommentTime
|
|
26
|
+
formatCommentTime,
|
|
27
|
+
getCommentThreadLabels,
|
|
28
|
+
mergeTigerLocale,
|
|
29
|
+
nextCommentLikeState,
|
|
30
|
+
resolveCommentLikeState,
|
|
31
|
+
resolveLocaleText,
|
|
32
|
+
writeCommentLikeOverlay
|
|
24
33
|
} from "@expcat/tigercat-core";
|
|
25
34
|
|
|
26
35
|
// ../core/src/internal/comment-thread-styles.ts
|
|
@@ -55,15 +64,19 @@ var CommentThread = ({
|
|
|
55
64
|
maxReplies = 3,
|
|
56
65
|
defaultExpandedKeys = [],
|
|
57
66
|
expandedKeys,
|
|
58
|
-
emptyText
|
|
59
|
-
replyPlaceholder
|
|
60
|
-
replyButtonText
|
|
61
|
-
cancelReplyText
|
|
62
|
-
likeText
|
|
63
|
-
likedText
|
|
64
|
-
replyText
|
|
65
|
-
moreText
|
|
66
|
-
loadMoreText
|
|
67
|
+
emptyText,
|
|
68
|
+
replyPlaceholder,
|
|
69
|
+
replyButtonText,
|
|
70
|
+
cancelReplyText,
|
|
71
|
+
likeText,
|
|
72
|
+
likedText,
|
|
73
|
+
replyText,
|
|
74
|
+
moreText,
|
|
75
|
+
loadMoreText,
|
|
76
|
+
collapseRepliesText,
|
|
77
|
+
expandRepliesText,
|
|
78
|
+
locale,
|
|
79
|
+
labels: labelsOverride,
|
|
67
80
|
showAvatar = true,
|
|
68
81
|
showDivider = true,
|
|
69
82
|
showLike = true,
|
|
@@ -78,8 +91,18 @@ var CommentThread = ({
|
|
|
78
91
|
className,
|
|
79
92
|
...divProps
|
|
80
93
|
}) => {
|
|
94
|
+
const config = useTigerConfig();
|
|
95
|
+
const mergedLocale = useMemo(
|
|
96
|
+
() => mergeTigerLocale(config.locale, locale),
|
|
97
|
+
[config.locale, locale]
|
|
98
|
+
);
|
|
99
|
+
const labels = useMemo(
|
|
100
|
+
() => getCommentThreadLabels(mergedLocale, labelsOverride),
|
|
101
|
+
[mergedLocale, labelsOverride]
|
|
102
|
+
);
|
|
81
103
|
const [innerExpandedKeys, setInnerExpandedKeys] = useState(defaultExpandedKeys);
|
|
82
104
|
const [expandedAllKeys, setExpandedAllKeys] = useState(/* @__PURE__ */ new Set());
|
|
105
|
+
const [likeOverlay, setLikeOverlay] = useState(() => /* @__PURE__ */ new Map());
|
|
83
106
|
const [replyingTo, setReplyingTo] = useState(null);
|
|
84
107
|
const [replyValue, setReplyValue] = useState("");
|
|
85
108
|
const mergedExpandedKeys = expandedKeys ?? innerExpandedKeys;
|
|
@@ -109,6 +132,11 @@ var CommentThread = ({
|
|
|
109
132
|
});
|
|
110
133
|
onLoadMore?.(node);
|
|
111
134
|
};
|
|
135
|
+
const handleLike = (node) => {
|
|
136
|
+
const next = nextCommentLikeState(node, likeOverlay);
|
|
137
|
+
setLikeOverlay(writeCommentLikeOverlay(likeOverlay, node.id, next));
|
|
138
|
+
onLike?.(node, next.liked);
|
|
139
|
+
};
|
|
112
140
|
const handleReplySubmit = (node) => {
|
|
113
141
|
const trimmed = replyValue.trim();
|
|
114
142
|
if (!trimmed) return;
|
|
@@ -131,8 +159,9 @@ var CommentThread = ({
|
|
|
131
159
|
const showLoadMoreBtn = showReplies && maxReplies > 0 && children.length > maxReplies && !showAllReplies;
|
|
132
160
|
const actions = [];
|
|
133
161
|
if (showLike) {
|
|
134
|
-
const
|
|
135
|
-
const
|
|
162
|
+
const { liked, likes } = resolveCommentLikeState(node, likeOverlay);
|
|
163
|
+
const likeLabel = liked ? resolveLocaleText(labels.likedText, likedText) : resolveLocaleText(labels.likeText, likeText);
|
|
164
|
+
const likeCount = likes ? ` ${likes}` : "";
|
|
136
165
|
actions.push(
|
|
137
166
|
/* @__PURE__ */ jsxs(
|
|
138
167
|
Button,
|
|
@@ -142,16 +171,16 @@ var CommentThread = ({
|
|
|
142
171
|
className: classNames(
|
|
143
172
|
commentThreadActionButtonClasses,
|
|
144
173
|
commentThreadLikeButtonClasses,
|
|
145
|
-
|
|
174
|
+
liked && commentThreadLikedButtonClasses
|
|
146
175
|
),
|
|
147
|
-
onClick: () =>
|
|
176
|
+
onClick: () => handleLike(node),
|
|
148
177
|
children: [
|
|
149
178
|
/* @__PURE__ */ jsx(
|
|
150
179
|
"svg",
|
|
151
180
|
{
|
|
152
181
|
className: classNames(
|
|
153
182
|
commentThreadLikeIconClasses,
|
|
154
|
-
|
|
183
|
+
liked ? "fill-current" : "stroke-current fill-none"
|
|
155
184
|
),
|
|
156
185
|
viewBox: "0 0 24 24",
|
|
157
186
|
strokeWidth: "2",
|
|
@@ -203,7 +232,7 @@ var CommentThread = ({
|
|
|
203
232
|
)
|
|
204
233
|
}
|
|
205
234
|
),
|
|
206
|
-
/* @__PURE__ */ jsx("span", { children: replyText })
|
|
235
|
+
/* @__PURE__ */ jsx("span", { children: resolveLocaleText(labels.replyText, replyText) })
|
|
207
236
|
]
|
|
208
237
|
},
|
|
209
238
|
"reply"
|
|
@@ -241,7 +270,7 @@ var CommentThread = ({
|
|
|
241
270
|
)
|
|
242
271
|
}
|
|
243
272
|
),
|
|
244
|
-
/* @__PURE__ */ jsx("span", { children: moreText })
|
|
273
|
+
/* @__PURE__ */ jsx("span", { children: resolveLocaleText(labels.moreText, moreText) })
|
|
245
274
|
]
|
|
246
275
|
},
|
|
247
276
|
"more"
|
|
@@ -324,7 +353,7 @@ var CommentThread = ({
|
|
|
324
353
|
{
|
|
325
354
|
rows: 3,
|
|
326
355
|
value: replyValue,
|
|
327
|
-
placeholder: replyPlaceholder,
|
|
356
|
+
placeholder: resolveLocaleText(labels.replyPlaceholder, replyPlaceholder),
|
|
328
357
|
className: commentThreadReplyTextareaClasses,
|
|
329
358
|
onChange: (event) => setReplyValue(event.target.value)
|
|
330
359
|
}
|
|
@@ -340,7 +369,7 @@ var CommentThread = ({
|
|
|
340
369
|
setReplyingTo(null);
|
|
341
370
|
setReplyValue("");
|
|
342
371
|
},
|
|
343
|
-
children: cancelReplyText
|
|
372
|
+
children: resolveLocaleText(labels.cancelReplyText, cancelReplyText)
|
|
344
373
|
}
|
|
345
374
|
),
|
|
346
375
|
/* @__PURE__ */ jsx(
|
|
@@ -350,7 +379,7 @@ var CommentThread = ({
|
|
|
350
379
|
variant: "primary",
|
|
351
380
|
className: commentThreadSubmitButtonClasses,
|
|
352
381
|
onClick: () => handleReplySubmit(node),
|
|
353
|
-
children: replyButtonText
|
|
382
|
+
children: resolveLocaleText(labels.replyButtonText, replyButtonText)
|
|
354
383
|
}
|
|
355
384
|
)
|
|
356
385
|
] })
|
|
@@ -364,7 +393,10 @@ var CommentThread = ({
|
|
|
364
393
|
"aria-expanded": isExpanded,
|
|
365
394
|
"aria-controls": repliesId,
|
|
366
395
|
onClick: () => toggleExpanded(node.id),
|
|
367
|
-
children: isExpanded ?
|
|
396
|
+
children: isExpanded ? resolveLocaleText(labels.collapseRepliesText, collapseRepliesText) : resolveLocaleText(labels.expandRepliesText, expandRepliesText).replace(
|
|
397
|
+
"{count}",
|
|
398
|
+
String(children.length)
|
|
399
|
+
)
|
|
368
400
|
}
|
|
369
401
|
) : null,
|
|
370
402
|
showReplies ? /* @__PURE__ */ jsxs("div", { id: repliesId, className: commentThreadRepliesClasses, children: [
|
|
@@ -378,7 +410,7 @@ var CommentThread = ({
|
|
|
378
410
|
variant: "ghost",
|
|
379
411
|
className: commentThreadPrimaryButtonClasses,
|
|
380
412
|
onClick: () => handleLoadMore(node),
|
|
381
|
-
children: loadMoreText
|
|
413
|
+
children: resolveLocaleText(labels.loadMoreText, loadMoreText)
|
|
382
414
|
}
|
|
383
415
|
) : null
|
|
384
416
|
] }) : null
|
|
@@ -394,7 +426,7 @@ var CommentThread = ({
|
|
|
394
426
|
className: classNames("tiger-comment-thread flex flex-col", className),
|
|
395
427
|
role: divProps.role ?? "feed",
|
|
396
428
|
"data-tiger-comment-thread": true,
|
|
397
|
-
"aria-label": divProps["aria-label"] ?? (divProps["aria-labelledby"] ? void 0 : "
|
|
429
|
+
"aria-label": divProps["aria-label"] ?? (divProps["aria-labelledby"] ? void 0 : "Comment thread"),
|
|
398
430
|
...divProps,
|
|
399
431
|
children: resolvedNodes.length === 0 ? /* @__PURE__ */ jsxs("div", { className: commentThreadEmptyClasses, children: [
|
|
400
432
|
/* @__PURE__ */ jsx(
|
|
@@ -415,7 +447,7 @@ var CommentThread = ({
|
|
|
415
447
|
)
|
|
416
448
|
}
|
|
417
449
|
),
|
|
418
|
-
/* @__PURE__ */ jsx(Text, { tag: "div", size: "sm", color: "muted", className: "font-medium", children: emptyText })
|
|
450
|
+
/* @__PURE__ */ jsx(Text, { tag: "div", size: "sm", color: "muted", className: "font-medium", children: resolveLocaleText(labels.emptyText, emptyText) })
|
|
419
451
|
] }) : resolvedNodes.map((node, index) => renderNode(node, 1, index === resolvedNodes.length - 1))
|
|
420
452
|
}
|
|
421
453
|
);
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// src/hooks/useResponsiveChartSize.ts
|
|
2
|
+
import { useCallback, useMemo, useState } from "react";
|
|
3
|
+
import {
|
|
4
|
+
getChartInnerRect,
|
|
5
|
+
resolveResponsiveChartSize
|
|
6
|
+
} from "@expcat/tigercat-core";
|
|
7
|
+
function useResponsiveChartSize(width, height, padding, responsive) {
|
|
8
|
+
const [observedSize, setObservedSize] = useState(null);
|
|
9
|
+
const plotSize = useMemo(
|
|
10
|
+
() => resolveResponsiveChartSize({ width, height }, responsive ? observedSize : null),
|
|
11
|
+
[width, height, responsive, observedSize]
|
|
12
|
+
);
|
|
13
|
+
const innerRect = useMemo(
|
|
14
|
+
() => getChartInnerRect(plotSize.width, plotSize.height, padding),
|
|
15
|
+
[plotSize.width, plotSize.height, padding]
|
|
16
|
+
);
|
|
17
|
+
const onResolvedSizeChange = useCallback((size) => {
|
|
18
|
+
setObservedSize((prev) => {
|
|
19
|
+
if (prev && prev.width === size.width && prev.height === size.height) return prev;
|
|
20
|
+
return size;
|
|
21
|
+
});
|
|
22
|
+
}, []);
|
|
23
|
+
return { plotSize, innerRect, onResolvedSizeChange };
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export {
|
|
27
|
+
useResponsiveChartSize
|
|
28
|
+
};
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import {
|
|
2
|
+
useControlledState
|
|
3
|
+
} from "./chunk-MEFARVQI.mjs";
|
|
1
4
|
import {
|
|
2
5
|
useTigerConfig
|
|
3
6
|
} from "./chunk-YSIXURBW.mjs";
|
|
@@ -34,7 +37,8 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
34
37
|
var FileManager = ({
|
|
35
38
|
files = [],
|
|
36
39
|
viewMode = "list",
|
|
37
|
-
selectedKeys
|
|
40
|
+
selectedKeys,
|
|
41
|
+
defaultSelectedKeys,
|
|
38
42
|
multiple = false,
|
|
39
43
|
columns,
|
|
40
44
|
sortField = "name",
|
|
@@ -67,6 +71,11 @@ var FileManager = ({
|
|
|
67
71
|
const contentRef = useRef(null);
|
|
68
72
|
const dragFromIndex = useRef(null);
|
|
69
73
|
const labels = useMemo(() => getFileManagerLabels(mergedLocale), [mergedLocale]);
|
|
74
|
+
const [keys, setKeys] = useControlledState(
|
|
75
|
+
selectedKeys,
|
|
76
|
+
defaultSelectedKeys ?? [],
|
|
77
|
+
onSelectedKeysChange
|
|
78
|
+
);
|
|
70
79
|
const metaColumns = columns ?? ["size", "modified"];
|
|
71
80
|
const showSizeColumn = metaColumns.includes("size");
|
|
72
81
|
const showModifiedColumn = metaColumns.includes("modified");
|
|
@@ -75,23 +84,22 @@ var FileManager = ({
|
|
|
75
84
|
() => deriveFileManagerModel({
|
|
76
85
|
files,
|
|
77
86
|
currentPath,
|
|
78
|
-
selectedKeys,
|
|
87
|
+
selectedKeys: keys,
|
|
79
88
|
sortField,
|
|
80
89
|
sortOrder,
|
|
81
90
|
showHidden,
|
|
82
91
|
searchText: localSearch || searchText
|
|
83
92
|
}),
|
|
84
|
-
[files, currentPath,
|
|
93
|
+
[files, currentPath, keys, sortField, sortOrder, showHidden, localSearch, searchText]
|
|
85
94
|
);
|
|
86
95
|
const containerClasses = useMemo(() => getFileManagerContainerClasses(className), [className]);
|
|
87
96
|
const handleSelect = useCallback(
|
|
88
97
|
(item) => {
|
|
89
98
|
if (item.disabled) return;
|
|
90
99
|
onSelect?.(item);
|
|
91
|
-
|
|
92
|
-
onSelectedKeysChange?.(keys);
|
|
100
|
+
setKeys(toggleFileSelection(keys, item.key, multiple));
|
|
93
101
|
},
|
|
94
|
-
[
|
|
102
|
+
[keys, multiple, onSelect, setKeys]
|
|
95
103
|
);
|
|
96
104
|
const handleOpen = useCallback(
|
|
97
105
|
(item) => {
|
|
@@ -10,7 +10,7 @@ import { useCallback, useMemo, useRef } from "react";
|
|
|
10
10
|
import {
|
|
11
11
|
applyMarkdownToolbarAction,
|
|
12
12
|
classNames,
|
|
13
|
-
|
|
13
|
+
createDefaultMarkdownToolbar,
|
|
14
14
|
findMarkdownHotkeyMatch,
|
|
15
15
|
getMarkdownBodyClasses,
|
|
16
16
|
getMarkdownContainerClasses,
|
|
@@ -62,9 +62,17 @@ var MarkdownEditor = ({
|
|
|
62
62
|
const textareaRef = useRef(null);
|
|
63
63
|
const [currentValue, commitValue] = useControlledState(value, defaultValue, onChange);
|
|
64
64
|
const [currentMode, commitMode] = useControlledState(mode, defaultMode, onModeChange);
|
|
65
|
+
const mergedLocale = useMemo(
|
|
66
|
+
() => mergeTigerLocale(config.locale, locale),
|
|
67
|
+
[config.locale, locale]
|
|
68
|
+
);
|
|
69
|
+
const labels = useMemo(
|
|
70
|
+
() => getMarkdownEditorLabels(mergedLocale, labelsOverride),
|
|
71
|
+
[mergedLocale, labelsOverride]
|
|
72
|
+
);
|
|
65
73
|
const toolbarItems = useMemo(
|
|
66
|
-
() => toolbar === false ? [] : toolbar ??
|
|
67
|
-
[toolbar]
|
|
74
|
+
() => toolbar === false ? [] : toolbar ?? createDefaultMarkdownToolbar(labels),
|
|
75
|
+
[toolbar, labels]
|
|
68
76
|
);
|
|
69
77
|
const previewHtml = useMemo(
|
|
70
78
|
() => renderMarkdownToHtml(currentValue, renderer),
|
|
@@ -74,14 +82,6 @@ var MarkdownEditor = ({
|
|
|
74
82
|
const parsedHeight = parseMarkdownHeight(height);
|
|
75
83
|
return { ...parsedHeight ? { height: parsedHeight } : {}, ...style };
|
|
76
84
|
}, [height, style]);
|
|
77
|
-
const mergedLocale = useMemo(
|
|
78
|
-
() => mergeTigerLocale(config.locale, locale),
|
|
79
|
-
[config.locale, locale]
|
|
80
|
-
);
|
|
81
|
-
const labels = useMemo(
|
|
82
|
-
() => getMarkdownEditorLabels(mergedLocale, labelsOverride),
|
|
83
|
-
[mergedLocale, labelsOverride]
|
|
84
|
-
);
|
|
85
85
|
const modeLabels = {
|
|
86
86
|
edit: labels.editModeLabel,
|
|
87
87
|
split: labels.splitModeLabel,
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
import {
|
|
2
|
+
useResponsiveChartSize
|
|
3
|
+
} from "./chunk-5JETWHLJ.mjs";
|
|
1
4
|
import {
|
|
2
5
|
useChartInteraction
|
|
3
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-JZZPLKTW.mjs";
|
|
4
7
|
import {
|
|
5
8
|
ChartSeries
|
|
6
9
|
} from "./chunk-SDLMB34Y.mjs";
|
|
@@ -12,7 +15,7 @@ import {
|
|
|
12
15
|
} from "./chunk-RQSQXQN6.mjs";
|
|
13
16
|
import {
|
|
14
17
|
ChartCanvas
|
|
15
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-CUAXRBKO.mjs";
|
|
16
19
|
import {
|
|
17
20
|
ChartGrid
|
|
18
21
|
} from "./chunk-677VSTPW.mjs";
|
|
@@ -31,7 +34,6 @@ import {
|
|
|
31
34
|
getStableChartGradientPrefix,
|
|
32
35
|
getBarValueLabelY,
|
|
33
36
|
getChartElementOpacity,
|
|
34
|
-
getChartInnerRect,
|
|
35
37
|
getNumberExtent,
|
|
36
38
|
resolveChartPalette,
|
|
37
39
|
buildChartLegendItems,
|
|
@@ -117,6 +119,7 @@ var BarChart = ({
|
|
|
117
119
|
wrapperClasses
|
|
118
120
|
} = useChartInteraction({
|
|
119
121
|
hoverable,
|
|
122
|
+
showTooltip,
|
|
120
123
|
hoveredIndexProp,
|
|
121
124
|
selectable,
|
|
122
125
|
selectedIndexProp,
|
|
@@ -133,9 +136,11 @@ var BarChart = ({
|
|
|
133
136
|
onClick: onBarClick
|
|
134
137
|
}
|
|
135
138
|
});
|
|
136
|
-
const innerRect =
|
|
137
|
-
|
|
138
|
-
|
|
139
|
+
const { innerRect, onResolvedSizeChange } = useResponsiveChartSize(
|
|
140
|
+
width,
|
|
141
|
+
height,
|
|
142
|
+
padding,
|
|
143
|
+
responsive
|
|
139
144
|
);
|
|
140
145
|
const xDomain = useMemo(() => data.map((item) => String(item.x)), [data]);
|
|
141
146
|
const yValues = useMemo(() => data.map((item) => item.y), [data]);
|
|
@@ -229,6 +234,7 @@ var BarChart = ({
|
|
|
229
234
|
title,
|
|
230
235
|
desc,
|
|
231
236
|
className: classNames(className),
|
|
237
|
+
onResolvedSizeChange,
|
|
232
238
|
children: [
|
|
233
239
|
gradient && /* @__PURE__ */ jsx("defs", { children: bars.map((bar) => /* @__PURE__ */ jsxs(
|
|
234
240
|
"linearGradient",
|
|
@@ -342,7 +348,7 @@ var BarChart = ({
|
|
|
342
348
|
ChartTooltip,
|
|
343
349
|
{
|
|
344
350
|
content: tooltipContent,
|
|
345
|
-
open:
|
|
351
|
+
open: resolvedHoveredIndex !== null && tooltipContent !== "",
|
|
346
352
|
x: tooltipPosition.x,
|
|
347
353
|
y: tooltipPosition.y
|
|
348
354
|
}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import {
|
|
2
|
+
useControlledState
|
|
3
|
+
} from "./chunk-MEFARVQI.mjs";
|
|
4
|
+
|
|
1
5
|
// src/components/Switch.tsx
|
|
2
6
|
import {
|
|
3
7
|
getSwitchClasses,
|
|
@@ -5,7 +9,8 @@ import {
|
|
|
5
9
|
} from "@expcat/tigercat-core";
|
|
6
10
|
import { jsx } from "react/jsx-runtime";
|
|
7
11
|
var Switch = ({
|
|
8
|
-
checked
|
|
12
|
+
checked: checkedProp,
|
|
13
|
+
defaultChecked,
|
|
9
14
|
disabled = false,
|
|
10
15
|
size = "md",
|
|
11
16
|
onChange,
|
|
@@ -15,11 +20,12 @@ var Switch = ({
|
|
|
15
20
|
tabIndex,
|
|
16
21
|
...props
|
|
17
22
|
}) => {
|
|
23
|
+
const [checked, setChecked] = useControlledState(checkedProp, defaultChecked ?? false, onChange);
|
|
18
24
|
const switchClasses = getSwitchClasses(size, checked, disabled, className);
|
|
19
25
|
const thumbClasses = getSwitchThumbClasses(size, checked);
|
|
20
26
|
const toggle = () => {
|
|
21
27
|
if (disabled) return;
|
|
22
|
-
|
|
28
|
+
setChecked(!checked);
|
|
23
29
|
};
|
|
24
30
|
const handleClick = (event) => {
|
|
25
31
|
onClick?.(event);
|
|
@@ -56,7 +56,9 @@ var InputNumber = ({
|
|
|
56
56
|
onChange,
|
|
57
57
|
onFocus,
|
|
58
58
|
onBlur,
|
|
59
|
-
className
|
|
59
|
+
className,
|
|
60
|
+
style,
|
|
61
|
+
...rest
|
|
60
62
|
}) => {
|
|
61
63
|
const inputGroup = useInputGroupContext();
|
|
62
64
|
const effectiveSize = size ?? inputGroup?.size ?? "md";
|
|
@@ -181,7 +183,7 @@ var InputNumber = ({
|
|
|
181
183
|
),
|
|
182
184
|
[effectiveSize, controls, controlsPosition]
|
|
183
185
|
);
|
|
184
|
-
return /* @__PURE__ */ jsxs("div", { className: wrapperClasses, children: [
|
|
186
|
+
return /* @__PURE__ */ jsxs("div", { className: wrapperClasses, style, children: [
|
|
185
187
|
controls && controlsPosition === "both" && /* @__PURE__ */ jsx(
|
|
186
188
|
"button",
|
|
187
189
|
{
|
|
@@ -212,6 +214,7 @@ var InputNumber = ({
|
|
|
212
214
|
/* @__PURE__ */ jsx(
|
|
213
215
|
"input",
|
|
214
216
|
{
|
|
217
|
+
...rest,
|
|
215
218
|
ref: inputRef,
|
|
216
219
|
type: "text",
|
|
217
220
|
inputMode: "decimal",
|
|
@@ -17,10 +17,12 @@ var ChartCanvas = ({
|
|
|
17
17
|
title,
|
|
18
18
|
desc,
|
|
19
19
|
children,
|
|
20
|
+
onResolvedSizeChange,
|
|
20
21
|
...props
|
|
21
22
|
}) => {
|
|
22
23
|
const svgRef = useRef(null);
|
|
23
24
|
const [observedSize, setObservedSize] = useState(null);
|
|
25
|
+
const lastReportedSizeRef = useRef(null);
|
|
24
26
|
const resizeControllerRef = useRef(
|
|
25
27
|
createChartResizeObserverController({
|
|
26
28
|
onSizeChange: setObservedSize
|
|
@@ -47,6 +49,16 @@ var ChartCanvas = ({
|
|
|
47
49
|
controller.observe(target);
|
|
48
50
|
return () => controller.disconnect();
|
|
49
51
|
}, [responsive]);
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
if (!onResolvedSizeChange) return;
|
|
54
|
+
const prev = lastReportedSizeRef.current;
|
|
55
|
+
if (prev && prev.width === resolvedSize.width && prev.height === resolvedSize.height) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const nextSize = { width: resolvedSize.width, height: resolvedSize.height };
|
|
59
|
+
lastReportedSizeRef.current = nextSize;
|
|
60
|
+
onResolvedSizeChange(nextSize);
|
|
61
|
+
}, [resolvedSize.width, resolvedSize.height, onResolvedSizeChange]);
|
|
50
62
|
return /* @__PURE__ */ jsxs(
|
|
51
63
|
"svg",
|
|
52
64
|
{
|