@expcat/tigercat-react 2.1.0 → 2.1.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.
Files changed (137) hide show
  1. package/dist/{chunk-RUAPTIQ7.mjs → chunk-246DAUEF.mjs} +2 -2
  2. package/dist/{chunk-PU3JY6RE.mjs → chunk-2JMI7TCM.mjs} +1 -1
  3. package/dist/chunk-2YBLMVDT.mjs +428 -0
  4. package/dist/{chunk-25D5TXZH.mjs → chunk-32MCQMBJ.mjs} +8 -6
  5. package/dist/{chunk-M5MZWOHF.mjs → chunk-3HHEVMHE.mjs} +1 -1
  6. package/dist/{chunk-HSBN5MLS.mjs → chunk-3LACOSJQ.mjs} +1 -1
  7. package/dist/{chunk-F6WV53BS.mjs → chunk-3LDDXHW2.mjs} +28 -11
  8. package/dist/{chunk-IXQAECFP.mjs → chunk-3QNIFKVF.mjs} +12 -14
  9. package/dist/{chunk-UD4DTVJZ.mjs → chunk-4C2X5PZO.mjs} +57 -25
  10. package/dist/chunk-5JETWHLJ.mjs +28 -0
  11. package/dist/{chunk-VA6PZWOH.mjs → chunk-5SEMRHBD.mjs} +14 -6
  12. package/dist/{chunk-EKILTLUO.mjs → chunk-72CJNKDY.mjs} +1 -1
  13. package/dist/{chunk-XE4YFBOZ.mjs → chunk-AUD3VOLO.mjs} +1 -1
  14. package/dist/{chunk-I4MWOYJS.mjs → chunk-AYFKHWJS.mjs} +13 -7
  15. package/dist/{chunk-RPSHILHD.mjs → chunk-BXAH2GH3.mjs} +8 -2
  16. package/dist/{chunk-EW5EO7VE.mjs → chunk-BYD7EAWK.mjs} +1 -1
  17. package/dist/{chunk-GCY55TBC.mjs → chunk-CQOLQAB5.mjs} +105 -90
  18. package/dist/{chunk-L55UK45A.mjs → chunk-CRIEUKMD.mjs} +5 -2
  19. package/dist/{chunk-DKNVSQSV.mjs → chunk-CUAXRBKO.mjs} +12 -0
  20. package/dist/{chunk-NWVNTZOP.mjs → chunk-DECUASRW.mjs} +14 -16
  21. package/dist/{chunk-XMTEMBQV.mjs → chunk-EAAWB3CK.mjs} +16 -13
  22. package/dist/{chunk-IR7VA6AO.mjs → chunk-EG7EMDKK.mjs} +1 -1
  23. package/dist/{chunk-HOYBHB7B.mjs → chunk-FNK2VWPP.mjs} +1 -1
  24. package/dist/{chunk-RJPNBYK5.mjs → chunk-FQS24AUH.mjs} +12 -3
  25. package/dist/{chunk-LADKKOJT.mjs → chunk-GBEDWXLL.mjs} +16 -10
  26. package/dist/{chunk-2ENQZECC.mjs → chunk-HAXRHSCN.mjs} +4 -3
  27. package/dist/{chunk-K4GIKSZE.mjs → chunk-I2BENK5X.mjs} +2 -1
  28. package/dist/{chunk-DNOPEJ5I.mjs → chunk-JZZPLKTW.mjs} +7 -4
  29. package/dist/{chunk-7KCQMXJA.mjs → chunk-KDURW5AS.mjs} +4 -3
  30. package/dist/{chunk-TFMEHUVZ.mjs → chunk-KKN7KLTB.mjs} +0 -1
  31. package/dist/{chunk-6MGQAJ62.mjs → chunk-KL6YJIZ3.mjs} +24 -7
  32. package/dist/{chunk-PFL4HNWM.mjs → chunk-M6ZPTGBV.mjs} +1 -2
  33. package/dist/{chunk-PXRZ6CKY.mjs → chunk-MJVSZ2UJ.mjs} +46 -16
  34. package/dist/{chunk-LZKBDQE4.mjs → chunk-MYI3FPG4.mjs} +23 -4
  35. package/dist/{chunk-OIGEBCAS.mjs → chunk-NADODEZX.mjs} +69 -1
  36. package/dist/{chunk-UKY2EPS3.mjs → chunk-NJWTZ5MO.mjs} +54 -42
  37. package/dist/{chunk-773LH7BK.mjs → chunk-O6VYD4E4.mjs} +24 -2
  38. package/dist/{chunk-G7D4QV7A.mjs → chunk-O7TV5OKS.mjs} +33 -6
  39. package/dist/{chunk-DPWRXXXW.mjs → chunk-OJ6SHHOZ.mjs} +3 -3
  40. package/dist/{chunk-UYJJLHVA.mjs → chunk-PMQJ6AYT.mjs} +23 -21
  41. package/dist/{chunk-KC55B62J.mjs → chunk-PY2VUNEJ.mjs} +143 -46
  42. package/dist/{chunk-BEJZPJIK.mjs → chunk-QOAOOD53.mjs} +10 -4
  43. package/dist/{chunk-JQJM65RJ.mjs → chunk-QU3QXUTC.mjs} +49 -23
  44. package/dist/{chunk-7EMCZVJ2.mjs → chunk-QXSUG7SN.mjs} +3 -3
  45. package/dist/{chunk-RQ4PUK6G.mjs → chunk-R7YZ6FKP.mjs} +24 -13
  46. package/dist/{chunk-YI6YWH66.mjs → chunk-RE5ZLA5D.mjs} +6 -6
  47. package/dist/{chunk-UCBW5RJN.mjs → chunk-RGVU4EMA.mjs} +11 -6
  48. package/dist/{chunk-IBSOUQGB.mjs → chunk-RRGPDFDI.mjs} +7 -4
  49. package/dist/{chunk-ZH5ZBLAN.mjs → chunk-RUQ3F3MV.mjs} +34 -7
  50. package/dist/{chunk-PGD5RPKF.mjs → chunk-SVIJ2UZA.mjs} +2 -1
  51. package/dist/{chunk-UETARXIK.mjs → chunk-SXWEFZOF.mjs} +246 -53
  52. package/dist/{chunk-H6MVW5YD.mjs → chunk-TEVEXDY2.mjs} +24 -13
  53. package/dist/{chunk-DJOFM2VO.mjs → chunk-TO6MZFNQ.mjs} +52 -40
  54. package/dist/{chunk-ZCGIZOMT.mjs → chunk-V7HJ5HLC.mjs} +6 -10
  55. package/dist/{chunk-SIDDYP3O.mjs → chunk-VJWSKJLJ.mjs} +1 -1
  56. package/dist/{chunk-ZG56T75O.mjs → chunk-WTHWLCRL.mjs} +51 -11
  57. package/dist/{chunk-KP6DEYWB.mjs → chunk-X4L3W7RQ.mjs} +1 -1
  58. package/dist/{chunk-ZMRTETN2.mjs → chunk-X6C6MNG5.mjs} +4 -3
  59. package/dist/{chunk-OGG2TQDG.mjs → chunk-XVHTJQ4T.mjs} +12 -1
  60. package/dist/{chunk-FSMJLJFL.mjs → chunk-Y6UH3EKE.mjs} +1 -1
  61. package/dist/chunk-YJ5T4XZN.mjs +81 -0
  62. package/dist/{chunk-VVNFXJMN.mjs → chunk-YNDPQVEK.mjs} +8 -1
  63. package/dist/{chunk-QGZ32NFQ.mjs → chunk-Z23KOLNU.mjs} +4 -3
  64. package/dist/{chunk-5CKMYMTS.mjs → chunk-ZATZRXMW.mjs} +27 -8
  65. package/dist/components/ActivityFeed.mjs +2 -2
  66. package/dist/components/Affix.mjs +1 -1
  67. package/dist/components/Anchor.mjs +1 -1
  68. package/dist/components/AreaChart.mjs +4 -3
  69. package/dist/components/AutoComplete.mjs +1 -1
  70. package/dist/components/BarChart.mjs +4 -3
  71. package/dist/components/Calendar.mjs +1 -1
  72. package/dist/components/Cascader.mjs +1 -1
  73. package/dist/components/ChartCanvas.mjs +1 -1
  74. package/dist/components/ChatWindow.mjs +3 -3
  75. package/dist/components/Code.mjs +3 -1
  76. package/dist/components/CollapsePanel.mjs +1 -1
  77. package/dist/components/ColorPicker.mjs +1 -1
  78. package/dist/components/CommentThread.mjs +2 -2
  79. package/dist/components/DataExport.mjs +2 -2
  80. package/dist/components/DataTableWithToolbar.mjs +6 -6
  81. package/dist/components/DonutChart.mjs +4 -4
  82. package/dist/components/Dropdown.mjs +1 -1
  83. package/dist/components/FileManager.mjs +2 -1
  84. package/dist/components/FloatButton.mjs +1 -1
  85. package/dist/components/FormItem.mjs +1 -1
  86. package/dist/components/FormWizard.mjs +1 -1
  87. package/dist/components/FunnelChart.mjs +3 -3
  88. package/dist/components/Gantt.d.mts +3 -1
  89. package/dist/components/Gantt.mjs +2 -2
  90. package/dist/components/GaugeChart.mjs +2 -2
  91. package/dist/components/HeatmapChart.mjs +3 -3
  92. package/dist/components/Image.mjs +4 -4
  93. package/dist/components/ImageGroup.mjs +2 -2
  94. package/dist/components/ImagePreview.mjs +1 -1
  95. package/dist/components/Input.mjs +1 -1
  96. package/dist/components/InputNumber.d.mts +1 -1
  97. package/dist/components/InputNumber.mjs +1 -1
  98. package/dist/components/Kanban.mjs +2 -2
  99. package/dist/components/LineChart.mjs +4 -3
  100. package/dist/components/List.mjs +2 -2
  101. package/dist/components/Loading.mjs +1 -1
  102. package/dist/components/MaskInput.mjs +1 -1
  103. package/dist/components/NotificationCenter.mjs +4 -4
  104. package/dist/components/OrgChart.mjs +2 -2
  105. package/dist/components/Pagination.mjs +1 -1
  106. package/dist/components/PieChart.mjs +3 -3
  107. package/dist/components/Popconfirm.mjs +2 -2
  108. package/dist/components/Popover.mjs +2 -2
  109. package/dist/components/QRCode.d.mts +2 -2
  110. package/dist/components/QRCode.mjs +1 -1
  111. package/dist/components/RadarChart.mjs +3 -3
  112. package/dist/components/Rate.mjs +1 -1
  113. package/dist/components/ScatterChart.mjs +4 -3
  114. package/dist/components/ScrollSpy.mjs +1 -1
  115. package/dist/components/Signature.mjs +1 -1
  116. package/dist/components/SplitButton.mjs +2 -2
  117. package/dist/components/Splitter.mjs +1 -1
  118. package/dist/components/Stepper.d.mts +2 -0
  119. package/dist/components/Stepper.mjs +2 -1
  120. package/dist/components/SunburstChart.mjs +3 -3
  121. package/dist/components/Switch.d.mts +5 -1
  122. package/dist/components/Switch.mjs +2 -1
  123. package/dist/components/Table.mjs +2 -2
  124. package/dist/components/TaskBoard.mjs +1 -1
  125. package/dist/components/Textarea.mjs +1 -1
  126. package/dist/components/Tooltip.mjs +2 -2
  127. package/dist/components/Tour.mjs +1 -1
  128. package/dist/components/TreeMapChart.mjs +3 -3
  129. package/dist/components/TreeSelect.mjs +1 -1
  130. package/dist/components/Upload.mjs +1 -1
  131. package/dist/hooks/useChartInteraction.d.mts +5 -0
  132. package/dist/hooks/useChartInteraction.mjs +1 -1
  133. package/dist/index.d.mts +1 -1
  134. package/dist/index.mjs +51 -0
  135. package/package.json +2 -2
  136. package/dist/chunk-CB4SK5AU.mjs +0 -235
  137. package/dist/chunk-KPACLRQH.mjs +0 -55
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  useChartInteraction
3
- } from "./chunk-DNOPEJ5I.mjs";
3
+ } from "./chunk-JZZPLKTW.mjs";
4
4
  import {
5
5
  ChartTooltip
6
6
  } from "./chunk-YORCCCQX.mjs";
7
7
  import {
8
8
  ChartCanvas
9
- } from "./chunk-DKNVSQSV.mjs";
9
+ } from "./chunk-CUAXRBKO.mjs";
10
10
  import {
11
11
  ChartLegend
12
12
  } from "./chunk-F2ITBDUS.mjs";
@@ -70,6 +70,7 @@ var FunnelChart = ({
70
70
  wrapperClasses
71
71
  } = useChartInteraction({
72
72
  hoverable,
73
+ showTooltip,
73
74
  hoveredIndexProp,
74
75
  selectable,
75
76
  selectedIndexProp,
@@ -191,7 +192,7 @@ var FunnelChart = ({
191
192
  ]
192
193
  }
193
194
  );
194
- const tooltip = showTooltip && hoverable ? /* @__PURE__ */ jsx(
195
+ const tooltip = showTooltip ? /* @__PURE__ */ jsx(
195
196
  ChartTooltip,
196
197
  {
197
198
  content: tooltipContent,
@@ -18,7 +18,6 @@ var QRCode = ({
18
18
  size = 128,
19
19
  color = "#000000",
20
20
  bgColor = "#ffffff",
21
- level: _level = "M",
22
21
  status = "active",
23
22
  onRefresh,
24
23
  className,
@@ -11,15 +11,24 @@ import {
11
11
  colorPickerPanelClasses,
12
12
  colorPickerInputClasses,
13
13
  colorPickerPresetClasses,
14
- hexToRgb,
15
14
  rgbToHex,
16
15
  rgbToHsv,
17
16
  hsvToRgb,
18
17
  formatColorString,
19
18
  parseColorInput,
19
+ parseColorParts,
20
20
  classNames
21
21
  } from "@expcat/tigercat-core";
22
22
  import { jsx, jsxs } from "react/jsx-runtime";
23
+ function rgbFromValue(value) {
24
+ const parts = parseColorParts(value);
25
+ return parts ? { r: parts.r, g: parts.g, b: parts.b } : { r: 0, g: 0, b: 0 };
26
+ }
27
+ function explicitAlphaFromValue(value) {
28
+ if (!/^(rgba|hsla)\(/i.test(value.trim())) return null;
29
+ const parts = parseColorParts(value);
30
+ return parts ? parts.a : null;
31
+ }
23
32
  var ColorPicker = ({
24
33
  value = "#2563eb",
25
34
  disabled = false,
@@ -31,7 +40,7 @@ var ColorPicker = ({
31
40
  onChange
32
41
  }) => {
33
42
  const [isOpen, setIsOpen] = useState(false);
34
- const [alpha, setAlpha] = useState(1);
43
+ const [alpha, setAlpha] = useState(() => explicitAlphaFromValue(value) ?? 1);
35
44
  const containerRef = useRef(null);
36
45
  const triggerRef = useRef(null);
37
46
  const panelRef = useRef(null);
@@ -47,8 +56,12 @@ var ColorPicker = ({
47
56
  restoreFocusOnDismiss: true,
48
57
  onDismiss: () => setIsOpen(false)
49
58
  });
50
- const rgb = useMemo(() => hexToRgb(value), [value]);
59
+ const rgb = useMemo(() => rgbFromValue(value), [value]);
51
60
  const hsv = useMemo(() => rgbToHsv(rgb.r, rgb.g, rgb.b), [rgb]);
61
+ useEffect(() => {
62
+ const next = explicitAlphaFromValue(value);
63
+ if (next !== null) setAlpha(next);
64
+ }, [value]);
52
65
  const displayValue = useMemo(
53
66
  () => formatColorString(rgb.r, rgb.g, rgb.b, format, showAlpha ? alpha : void 0),
54
67
  [rgb, format, showAlpha, alpha]
@@ -80,13 +93,17 @@ var ColorPicker = ({
80
93
  function handleInputChange(e) {
81
94
  const val = e.target.value;
82
95
  setInputValue(val);
83
- const hex = parseColorInput(val);
84
- if (hex) {
85
- onChange?.(hex);
96
+ const parsed = parseColorInput(val);
97
+ if (parsed) {
98
+ onChange?.(parsed);
86
99
  }
87
100
  }
88
101
  function handleAlphaChange(e) {
89
- setAlpha(Number(e.target.value) / 100);
102
+ const nextAlpha = Number(e.target.value) / 100;
103
+ setAlpha(nextAlpha);
104
+ const emitFormat = format === "hex" ? "rgb" : format;
105
+ const next = formatColorString(rgb.r, rgb.g, rgb.b, emitFormat, nextAlpha);
106
+ onChange?.(next);
90
107
  }
91
108
  function handlePresetClick(color) {
92
109
  onChange?.(color);
@@ -10,7 +10,6 @@ import {
10
10
  getPageRange,
11
11
  validateCurrentPage,
12
12
  getPageNumbers,
13
- defaultTotalText,
14
13
  formatPaginationTotal,
15
14
  getPaginationContainerClasses,
16
15
  getPaginationButtonBaseClasses,
@@ -179,7 +178,7 @@ var Pagination = ({
179
178
  const nextDisabled = validatedCurrentPage >= totalPages || disabled;
180
179
  const elements = [];
181
180
  if (showTotal) {
182
- const totalTextFn = totalText || (labelsOverride?.totalText || mergedLocale?.pagination?.totalText ? (value, range) => formatPaginationTotal(labels.totalText, value, range, localeCode) : defaultTotalText);
181
+ const totalTextFn = totalText || ((value, range) => formatPaginationTotal(labels.totalText, value, range, localeCode));
183
182
  elements.push(
184
183
  /* @__PURE__ */ jsx("span", { className: getTotalTextClasses(size), children: totalTextFn(total, pageRange) }, "total")
185
184
  );
@@ -3,38 +3,47 @@ import {
3
3
  } from "./chunk-Y5X3G2LD.mjs";
4
4
  import {
5
5
  Input
6
- } from "./chunk-F6WV53BS.mjs";
6
+ } from "./chunk-3LDDXHW2.mjs";
7
7
  import {
8
8
  Empty
9
9
  } from "./chunk-W7BC4I2Y.mjs";
10
10
  import {
11
11
  Textarea
12
- } from "./chunk-UYJJLHVA.mjs";
12
+ } from "./chunk-PMQJ6AYT.mjs";
13
13
  import {
14
14
  Button
15
15
  } from "./chunk-5TE7KLE5.mjs";
16
16
  import {
17
17
  Avatar
18
18
  } from "./chunk-OO562MFD.mjs";
19
+ import {
20
+ useTigerConfig
21
+ } from "./chunk-YSIXURBW.mjs";
19
22
 
20
23
  // src/components/ChatWindow.tsx
21
24
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
22
25
  import {
23
26
  classNames,
24
27
  getChatMessageStatusInfo,
28
+ buildChatMessageStatusInfo,
25
29
  getChatStatusBarClasses,
26
- formatChatTime
30
+ formatChatTime,
31
+ getChatWindowLabels,
32
+ mergeTigerLocale,
33
+ resolveLocaleText
27
34
  } from "@expcat/tigercat-core";
28
35
  import { jsx, jsxs } from "react/jsx-runtime";
29
36
  var ChatWindow = ({
30
37
  messages = [],
31
38
  value,
32
39
  defaultValue = "",
33
- placeholder = "\u8BF7\u8F93\u5165\u6D88\u606F",
40
+ placeholder,
34
41
  disabled = false,
35
42
  maxLength,
36
- emptyText = "\u6682\u65E0\u6D88\u606F",
37
- sendText = "\u53D1\u9001",
43
+ emptyText,
44
+ sendText,
45
+ locale,
46
+ labels: labelsOverride,
38
47
  messageListAriaLabel,
39
48
  inputAriaLabel,
40
49
  sendAriaLabel,
@@ -59,6 +68,19 @@ var ChatWindow = ({
59
68
  className,
60
69
  ...props
61
70
  }) => {
71
+ const config = useTigerConfig();
72
+ const mergedLocale = useMemo(
73
+ () => mergeTigerLocale(config.locale, locale),
74
+ [config.locale, locale]
75
+ );
76
+ const labels = useMemo(
77
+ () => getChatWindowLabels(mergedLocale, labelsOverride),
78
+ [mergedLocale, labelsOverride]
79
+ );
80
+ const statusMap = useMemo(() => buildChatMessageStatusInfo(labels), [labels]);
81
+ const resolvedPlaceholder = resolveLocaleText(labels.placeholder, placeholder);
82
+ const resolvedEmptyText = resolveLocaleText(labels.emptyText, emptyText);
83
+ const resolvedSendText = resolveLocaleText(labels.sendText, sendText);
62
84
  const [innerValue, setInnerValue] = useState(value ?? defaultValue);
63
85
  useEffect(() => {
64
86
  if (value !== void 0) {
@@ -112,7 +134,7 @@ var ChatWindow = ({
112
134
  const renderMessageItem = useCallback(
113
135
  (message, index) => {
114
136
  const isSelf = message.direction === "self";
115
- const statusInfo = message.status ? getChatMessageStatusInfo(message.status) : void 0;
137
+ const statusInfo = message.status ? getChatMessageStatusInfo(message.status, statusMap) : void 0;
116
138
  const timeText = showTime ? formatChatTime(message.time) : "";
117
139
  return /* @__PURE__ */ jsxs(
118
140
  "div",
@@ -163,7 +185,7 @@ var ChatWindow = ({
163
185
  message.id ?? index
164
186
  );
165
187
  },
166
- [renderMessage, showAvatar, showName, showTime]
188
+ [renderMessage, showAvatar, showName, showTime, statusMap]
167
189
  );
168
190
  const messageListRef = useRef(null);
169
191
  useEffect(() => {
@@ -185,7 +207,7 @@ var ChatWindow = ({
185
207
  role: "log",
186
208
  "aria-live": "polite",
187
209
  "aria-relevant": "additions text",
188
- "aria-label": messageListAriaLabel ?? "\u6D88\u606F\u5217\u8868",
210
+ "aria-label": messageListAriaLabel ?? "Message list",
189
211
  children: /* @__PURE__ */ jsx(
190
212
  VirtualList,
191
213
  {
@@ -204,8 +226,8 @@ var ChatWindow = ({
204
226
  role: "log",
205
227
  "aria-live": "polite",
206
228
  "aria-relevant": "additions text",
207
- "aria-label": messageListAriaLabel ?? "\u6D88\u606F\u5217\u8868",
208
- children: messages.length === 0 ? /* @__PURE__ */ jsx("div", { className: "h-full flex items-center justify-center py-8", children: /* @__PURE__ */ jsx(Empty, { description: emptyText }) }) : messages.map(renderMessageItem)
229
+ "aria-label": messageListAriaLabel ?? "Message list",
230
+ children: messages.length === 0 ? /* @__PURE__ */ jsx("div", { className: "h-full flex items-center justify-center py-8", children: /* @__PURE__ */ jsx(Empty, { description: resolvedEmptyText }) }) : messages.map(renderMessageItem)
209
231
  }
210
232
  ),
211
233
  statusText && /* @__PURE__ */ jsx("div", { className: getChatStatusBarClasses(statusVariant), children: statusText }),
@@ -214,10 +236,10 @@ var ChatWindow = ({
214
236
  Input,
215
237
  {
216
238
  value: inputValue,
217
- placeholder,
239
+ placeholder: resolvedPlaceholder,
218
240
  disabled,
219
241
  maxLength,
220
- "aria-label": inputAriaLabel ?? placeholder ?? "\u6D88\u606F\u8F93\u5165",
242
+ "aria-label": inputAriaLabel ?? resolvedPlaceholder,
221
243
  onChange: (event) => handleValueChange(event.currentTarget.value),
222
244
  onKeyDown: handleKeyDown
223
245
  }
@@ -225,16 +247,24 @@ var ChatWindow = ({
225
247
  Textarea,
226
248
  {
227
249
  value: inputValue,
228
- placeholder,
250
+ placeholder: resolvedPlaceholder,
229
251
  disabled,
230
252
  maxLength,
231
253
  rows: inputRows,
232
- "aria-label": inputAriaLabel ?? placeholder ?? "\u6D88\u606F\u8F93\u5165",
254
+ "aria-label": inputAriaLabel ?? resolvedPlaceholder,
233
255
  onChange: (event) => handleValueChange(event.currentTarget.value),
234
256
  onKeyDown: handleKeyDown
235
257
  }
236
258
  ) }),
237
- /* @__PURE__ */ jsx(Button, { disabled: !canSend, onClick: handleSend, "aria-label": sendAriaLabel ?? sendText, children: sendText })
259
+ /* @__PURE__ */ jsx(
260
+ Button,
261
+ {
262
+ disabled: !canSend,
263
+ onClick: handleSend,
264
+ "aria-label": sendAriaLabel ?? resolvedSendText,
265
+ children: resolvedSendText
266
+ }
267
+ )
238
268
  ] })
239
269
  ] });
240
270
  };
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  useChartInteraction
3
- } from "./chunk-DNOPEJ5I.mjs";
3
+ } from "./chunk-JZZPLKTW.mjs";
4
4
  import {
5
5
  ChartTooltip
6
6
  } from "./chunk-YORCCCQX.mjs";
7
7
  import {
8
8
  ChartCanvas
9
- } from "./chunk-DKNVSQSV.mjs";
9
+ } from "./chunk-CUAXRBKO.mjs";
10
10
  import {
11
11
  ChartLegend
12
12
  } from "./chunk-F2ITBDUS.mjs";
@@ -16,6 +16,7 @@ import { useId, useMemo } from "react";
16
16
  import {
17
17
  classNames,
18
18
  computeSunburstArcs,
19
+ getSunburstLabelPoint,
19
20
  getChartElementOpacity,
20
21
  getChartInnerRect,
21
22
  getStableChartGradientPrefix,
@@ -30,7 +31,7 @@ var SunburstChart = ({
30
31
  padding = 24,
31
32
  data,
32
33
  innerRadiusRatio = 0,
33
- showLabels: _showLabels = true,
34
+ showLabels = true,
34
35
  colors,
35
36
  gradient = false,
36
37
  hoverable = false,
@@ -97,6 +98,7 @@ var SunburstChart = ({
97
98
  wrapperClasses
98
99
  } = useChartInteraction({
99
100
  hoverable,
101
+ showTooltip,
100
102
  hoveredIndexProp,
101
103
  selectable,
102
104
  selectedIndexProp,
@@ -189,11 +191,28 @@ var SunburstChart = ({
189
191
  },
190
192
  `arc-${arc.index}`
191
193
  );
194
+ }),
195
+ showLabels && arcs.map((arc) => {
196
+ const { x, y } = getSunburstLabelPoint(arc, cx, cy);
197
+ return /* @__PURE__ */ jsx(
198
+ "text",
199
+ {
200
+ x,
201
+ y,
202
+ className: "fill-white text-xs",
203
+ textAnchor: "middle",
204
+ dominantBaseline: "middle",
205
+ style: { pointerEvents: "none" },
206
+ "aria-hidden": "true",
207
+ children: arc.label
208
+ },
209
+ `label-${arc.index}`
210
+ );
192
211
  })
193
212
  ] })
194
213
  }
195
214
  );
196
- const tooltip = showTooltip && hoverable ? /* @__PURE__ */ jsx(
215
+ const tooltip = showTooltip ? /* @__PURE__ */ jsx(
197
216
  ChartTooltip,
198
217
  {
199
218
  content: tooltipContent,
@@ -64,6 +64,10 @@ var Signature = forwardRef(
64
64
  const canvasRef = useRef(null);
65
65
  const strokesRef = useRef([]);
66
66
  const activeStrokeRef = useRef(null);
67
+ const capturedPointerIdRef = useRef(null);
68
+ const documentPointerListeningRef = useRef(false);
69
+ const finishStrokeRef = useRef(() => {
70
+ });
67
71
  const [strokes, setStrokes] = useState([]);
68
72
  const isDisabled = disabled || readonly;
69
73
  const normalizedLineWidth = clampSignatureLineWidth(lineWidth);
@@ -118,9 +122,52 @@ var Signature = forwardRef(
118
122
  },
119
123
  [createPayload, onChange]
120
124
  );
125
+ const handleDocumentPointerEnd = useRef(() => {
126
+ finishStrokeRef.current();
127
+ }).current;
128
+ const detachDocumentPointerListeners = () => {
129
+ if (!documentPointerListeningRef.current || typeof document === "undefined") return;
130
+ document.removeEventListener("pointerup", handleDocumentPointerEnd);
131
+ document.removeEventListener("pointercancel", handleDocumentPointerEnd);
132
+ documentPointerListeningRef.current = false;
133
+ };
134
+ const attachDocumentPointerListeners = () => {
135
+ if (documentPointerListeningRef.current || typeof document === "undefined") return;
136
+ document.addEventListener("pointerup", handleDocumentPointerEnd);
137
+ document.addEventListener("pointercancel", handleDocumentPointerEnd);
138
+ documentPointerListeningRef.current = true;
139
+ };
140
+ const captureCanvasPointer = (pointerId) => {
141
+ capturedPointerIdRef.current = pointerId;
142
+ const canvas = canvasRef.current;
143
+ if (!canvas || typeof canvas.setPointerCapture !== "function") return;
144
+ try {
145
+ canvas.setPointerCapture(pointerId);
146
+ } catch {
147
+ }
148
+ };
149
+ const releaseCanvasPointer = () => {
150
+ const canvas = canvasRef.current;
151
+ const pointerId = capturedPointerIdRef.current;
152
+ capturedPointerIdRef.current = null;
153
+ if (!canvas || pointerId == null || typeof canvas.releasePointerCapture !== "function") return;
154
+ if (typeof canvas.hasPointerCapture === "function") {
155
+ try {
156
+ if (!canvas.hasPointerCapture(pointerId)) return;
157
+ } catch {
158
+ return;
159
+ }
160
+ }
161
+ try {
162
+ canvas.releasePointerCapture(pointerId);
163
+ } catch {
164
+ }
165
+ };
121
166
  const clear = useCallback(() => {
122
167
  strokesRef.current = [];
123
168
  activeStrokeRef.current = null;
169
+ detachDocumentPointerListeners();
170
+ releaseCanvasPointer();
124
171
  setStrokes([]);
125
172
  draw([]);
126
173
  emitChange([]);
@@ -137,13 +184,23 @@ var Signature = forwardRef(
137
184
  [clear, toDataURL, toSVG]
138
185
  );
139
186
  const getPointFromEvent = (event) => {
140
- const rect = event.currentTarget.getBoundingClientRect();
187
+ const canvas = canvasRef.current;
188
+ const rect = canvas?.getBoundingClientRect() ?? {
189
+ left: 0,
190
+ top: 0,
191
+ width,
192
+ height
193
+ };
141
194
  return getSignaturePoint(event.clientX, event.clientY, rect, width, height);
142
195
  };
143
196
  const handlePointerDown = (event) => {
144
197
  if (isDisabled) return;
145
198
  event.preventDefault();
146
199
  event.currentTarget.focus();
200
+ const pointerId = event.pointerId;
201
+ if (typeof pointerId === "number") {
202
+ captureCanvasPointer(pointerId);
203
+ }
147
204
  const stroke = {
148
205
  color: penColor,
149
206
  lineWidth: normalizedLineWidth,
@@ -153,6 +210,7 @@ var Signature = forwardRef(
153
210
  activeStrokeRef.current = stroke;
154
211
  strokesRef.current = nextStrokes;
155
212
  setStrokes(nextStrokes);
213
+ attachDocumentPointerListeners();
156
214
  onBegin?.();
157
215
  };
158
216
  const handlePointerMove = (event) => {
@@ -169,7 +227,16 @@ var Signature = forwardRef(
169
227
  activeStrokeRef.current = null;
170
228
  const payload = emitChange(strokesRef.current);
171
229
  onEnd?.(payload);
230
+ detachDocumentPointerListeners();
231
+ releaseCanvasPointer();
172
232
  };
233
+ finishStrokeRef.current = finishStroke;
234
+ useEffect(() => {
235
+ return () => {
236
+ detachDocumentPointerListeners();
237
+ releaseCanvasPointer();
238
+ };
239
+ }, []);
173
240
  const handleKeyDown = (event) => {
174
241
  if (!clearable || isDisabled) return;
175
242
  if (event.key !== "Delete" && event.key !== "Backspace") return;
@@ -192,6 +259,7 @@ var Signature = forwardRef(
192
259
  onPointerMove: handlePointerMove,
193
260
  onPointerUp: finishStroke,
194
261
  onPointerCancel: finishStroke,
262
+ onLostPointerCapture: finishStroke,
195
263
  onKeyDown: handleKeyDown
196
264
  }
197
265
  ) }),
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  useChartInteraction
3
- } from "./chunk-DNOPEJ5I.mjs";
3
+ } from "./chunk-JZZPLKTW.mjs";
4
4
  import {
5
5
  ChartSeries
6
6
  } from "./chunk-SDLMB34Y.mjs";
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-YORCCCQX.mjs";
10
10
  import {
11
11
  ChartCanvas
12
- } from "./chunk-DKNVSQSV.mjs";
12
+ } from "./chunk-CUAXRBKO.mjs";
13
13
  import {
14
14
  ChartLegend
15
15
  } from "./chunk-F2ITBDUS.mjs";
@@ -20,7 +20,9 @@ import {
20
20
  chartAxisTickTextClasses,
21
21
  chartGridLineClasses,
22
22
  classNames,
23
+ createCircleRingPath,
23
24
  createPolygonPath,
25
+ createPolygonRingPath,
24
26
  getChartGridLineDasharray,
25
27
  getChartInnerRect,
26
28
  getRadarAngles,
@@ -121,6 +123,7 @@ var RadarChart = ({
121
123
  wrapperClasses
122
124
  } = useChartInteraction({
123
125
  hoverable,
126
+ showTooltip,
124
127
  hoveredIndexProp,
125
128
  selectable,
126
129
  selectedIndexProp,
@@ -142,11 +145,11 @@ var RadarChart = ({
142
145
  const [hoveredPoint, setHoveredPoint] = useState(null);
143
146
  const handlePointEnter = useCallback(
144
147
  (seriesIndex, pointIndex, event) => {
145
- if (!hoverable) return;
148
+ if (!hoverable && !showTooltip) return;
146
149
  setHoveredPoint({ seriesIndex, pointIndex });
147
150
  handleHoverEnter(seriesIndex, event);
148
151
  },
149
- [hoverable, handleHoverEnter]
152
+ [hoverable, showTooltip, handleHoverEnter]
150
153
  );
151
154
  const handlePointMove = useCallback(
152
155
  (event) => {
@@ -422,52 +425,61 @@ var RadarChart = ({
422
425
  ] }),
423
426
  splitAreaPaths.map((area, index) => {
424
427
  if (area.type === "circle-ring") {
425
- return /* @__PURE__ */ jsxs("g", { children: [
426
- /* @__PURE__ */ jsx(
427
- "circle",
428
+ if (area.innerRadius > 0) {
429
+ return /* @__PURE__ */ jsx(
430
+ "path",
428
431
  {
429
- cx: area.cx,
430
- cy: area.cy,
431
- r: area.outerRadius,
432
+ d: createCircleRingPath(area.cx, area.cy, area.outerRadius, area.innerRadius),
432
433
  fill: area.color,
433
434
  fillOpacity: splitAreaOpacity,
435
+ fillRule: "evenodd",
434
436
  stroke: "none",
435
437
  "data-radar-split-area": "true"
436
- }
437
- ),
438
- area.innerRadius > 0 ? /* @__PURE__ */ jsx(
439
- "circle",
440
- {
441
- cx: area.cx,
442
- cy: area.cy,
443
- r: area.innerRadius,
444
- fill: "var(--tiger-bg,#fff)",
445
- stroke: "none"
446
- }
447
- ) : null
448
- ] }, `split-${index}`);
449
- }
450
- const outerPath = createPolygonPath(area.outerPoints);
451
- return /* @__PURE__ */ jsxs("g", { children: [
452
- outerPath ? /* @__PURE__ */ jsx(
453
- "path",
438
+ },
439
+ `split-${index}`
440
+ );
441
+ }
442
+ return /* @__PURE__ */ jsx(
443
+ "circle",
454
444
  {
455
- d: outerPath,
445
+ cx: area.cx,
446
+ cy: area.cy,
447
+ r: area.outerRadius,
456
448
  fill: area.color,
457
449
  fillOpacity: splitAreaOpacity,
458
450
  stroke: "none",
459
451
  "data-radar-split-area": "true"
460
- }
461
- ) : null,
462
- area.innerPoints.length > 0 ? /* @__PURE__ */ jsx(
452
+ },
453
+ `split-${index}`
454
+ );
455
+ }
456
+ if (area.innerPoints.length > 0) {
457
+ const ringPath = createPolygonRingPath(area.outerPoints, area.innerPoints);
458
+ return ringPath ? /* @__PURE__ */ jsx(
463
459
  "path",
464
460
  {
465
- d: createPolygonPath(area.innerPoints),
466
- fill: "var(--tiger-bg,#fff)",
467
- stroke: "none"
468
- }
469
- ) : null
470
- ] }, `split-${index}`);
461
+ d: ringPath,
462
+ fill: area.color,
463
+ fillOpacity: splitAreaOpacity,
464
+ fillRule: "evenodd",
465
+ stroke: "none",
466
+ "data-radar-split-area": "true"
467
+ },
468
+ `split-${index}`
469
+ ) : null;
470
+ }
471
+ const outerPath = createPolygonPath(area.outerPoints);
472
+ return outerPath ? /* @__PURE__ */ jsx(
473
+ "path",
474
+ {
475
+ d: outerPath,
476
+ fill: area.color,
477
+ fillOpacity: splitAreaOpacity,
478
+ stroke: "none",
479
+ "data-radar-split-area": "true"
480
+ },
481
+ `split-${index}`
482
+ ) : null;
471
483
  }),
472
484
  gridPaths.map(
473
485
  (grid, index) => grid.type === "circle" ? /* @__PURE__ */ jsx(
@@ -581,9 +593,9 @@ var RadarChart = ({
581
593
  "data-series-index": seriesIndex,
582
594
  "data-series-key": item.seriesKey,
583
595
  "data-point-index": point.index,
584
- onMouseEnter: showTooltip && hoverable ? (e) => handlePointEnter(seriesIndex, point.index, e) : void 0,
585
- onMouseMove: showTooltip && hoverable ? handlePointMove : void 0,
586
- onMouseLeave: showTooltip && hoverable ? handlePointLeave : void 0,
596
+ onMouseEnter: showTooltip || hoverable ? (e) => handlePointEnter(seriesIndex, point.index, e) : void 0,
597
+ onMouseMove: showTooltip || hoverable ? handlePointMove : void 0,
598
+ onMouseLeave: showTooltip || hoverable ? handlePointLeave : void 0,
587
599
  onFocus: showTooltip && hoverable ? (e) => showPointTooltipFromElement(e.currentTarget, seriesIndex, point.index) : void 0,
588
600
  onBlur: showTooltip && hoverable ? handlePointLeave : void 0,
589
601
  onKeyDown: showTooltip && hoverable ? (e) => {
@@ -635,7 +647,7 @@ var RadarChart = ({
635
647
  ]
636
648
  }
637
649
  );
638
- const tooltip = showTooltip && hoverable ? /* @__PURE__ */ jsx(
650
+ const tooltip = showTooltip ? /* @__PURE__ */ jsx(
639
651
  ChartTooltip,
640
652
  {
641
653
  content: tooltipContent,