@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.
Files changed (144) 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-GCY55TBC.mjs → chunk-2XZHYYZ2.mjs} +106 -91
  4. package/dist/chunk-2YBLMVDT.mjs +428 -0
  5. package/dist/{chunk-25D5TXZH.mjs → chunk-32MCQMBJ.mjs} +8 -6
  6. package/dist/{chunk-6MGQAJ62.mjs → chunk-3GPGSNOQ.mjs} +71 -16
  7. package/dist/{chunk-M5MZWOHF.mjs → chunk-3HHEVMHE.mjs} +1 -1
  8. package/dist/{chunk-HSBN5MLS.mjs → chunk-3LACOSJQ.mjs} +1 -1
  9. package/dist/{chunk-F6WV53BS.mjs → chunk-3LDDXHW2.mjs} +28 -11
  10. package/dist/{chunk-IXQAECFP.mjs → chunk-3QNIFKVF.mjs} +12 -14
  11. package/dist/{chunk-UD4DTVJZ.mjs → chunk-4C2X5PZO.mjs} +57 -25
  12. package/dist/chunk-5JETWHLJ.mjs +28 -0
  13. package/dist/{chunk-VA6PZWOH.mjs → chunk-5SEMRHBD.mjs} +14 -6
  14. package/dist/{chunk-MXXAJSRS.mjs → chunk-6RMBUZZE.mjs} +11 -11
  15. package/dist/{chunk-EKILTLUO.mjs → chunk-72CJNKDY.mjs} +1 -1
  16. package/dist/{chunk-XE4YFBOZ.mjs → chunk-AUD3VOLO.mjs} +1 -1
  17. package/dist/{chunk-I4MWOYJS.mjs → chunk-AYFKHWJS.mjs} +13 -7
  18. package/dist/{chunk-RPSHILHD.mjs → chunk-BXAH2GH3.mjs} +8 -2
  19. package/dist/{chunk-EW5EO7VE.mjs → chunk-BYD7EAWK.mjs} +1 -1
  20. package/dist/{chunk-L55UK45A.mjs → chunk-CRIEUKMD.mjs} +5 -2
  21. package/dist/{chunk-DKNVSQSV.mjs → chunk-CUAXRBKO.mjs} +12 -0
  22. package/dist/{chunk-NWVNTZOP.mjs → chunk-DECUASRW.mjs} +14 -16
  23. package/dist/{chunk-XMTEMBQV.mjs → chunk-EAAWB3CK.mjs} +16 -13
  24. package/dist/{chunk-IR7VA6AO.mjs → chunk-EG7EMDKK.mjs} +1 -1
  25. package/dist/{chunk-HOYBHB7B.mjs → chunk-FNK2VWPP.mjs} +1 -1
  26. package/dist/{chunk-RJPNBYK5.mjs → chunk-FQS24AUH.mjs} +12 -3
  27. package/dist/{chunk-LADKKOJT.mjs → chunk-GBEDWXLL.mjs} +16 -10
  28. package/dist/{chunk-2ENQZECC.mjs → chunk-HAXRHSCN.mjs} +4 -3
  29. package/dist/{chunk-K4GIKSZE.mjs → chunk-I2BENK5X.mjs} +2 -1
  30. package/dist/{chunk-DNOPEJ5I.mjs → chunk-JZZPLKTW.mjs} +7 -4
  31. package/dist/{chunk-7KCQMXJA.mjs → chunk-KDURW5AS.mjs} +4 -3
  32. package/dist/{chunk-TFMEHUVZ.mjs → chunk-KKN7KLTB.mjs} +0 -1
  33. package/dist/{chunk-PFL4HNWM.mjs → chunk-M6ZPTGBV.mjs} +1 -2
  34. package/dist/{chunk-PXRZ6CKY.mjs → chunk-MJVSZ2UJ.mjs} +46 -16
  35. package/dist/{chunk-LZKBDQE4.mjs → chunk-MYI3FPG4.mjs} +23 -4
  36. package/dist/{chunk-OIGEBCAS.mjs → chunk-NADODEZX.mjs} +69 -1
  37. package/dist/{chunk-UKY2EPS3.mjs → chunk-NJWTZ5MO.mjs} +54 -42
  38. package/dist/{chunk-ASLRAZZN.mjs → chunk-NXJMVH26.mjs} +5 -2
  39. package/dist/{chunk-773LH7BK.mjs → chunk-O6VYD4E4.mjs} +24 -2
  40. package/dist/{chunk-G7D4QV7A.mjs → chunk-O7TV5OKS.mjs} +33 -6
  41. package/dist/{chunk-DPWRXXXW.mjs → chunk-OJ6SHHOZ.mjs} +3 -3
  42. package/dist/{chunk-UYJJLHVA.mjs → chunk-PMQJ6AYT.mjs} +23 -21
  43. package/dist/{chunk-KC55B62J.mjs → chunk-PY2VUNEJ.mjs} +143 -46
  44. package/dist/{chunk-BEJZPJIK.mjs → chunk-QOAOOD53.mjs} +10 -4
  45. package/dist/{chunk-JQJM65RJ.mjs → chunk-QU3QXUTC.mjs} +49 -23
  46. package/dist/{chunk-RQ4PUK6G.mjs → chunk-R7YZ6FKP.mjs} +24 -13
  47. package/dist/{chunk-YI6YWH66.mjs → chunk-RE5ZLA5D.mjs} +6 -6
  48. package/dist/{chunk-UCBW5RJN.mjs → chunk-RGVU4EMA.mjs} +11 -6
  49. package/dist/{chunk-IBSOUQGB.mjs → chunk-RRGPDFDI.mjs} +7 -4
  50. package/dist/{chunk-ZH5ZBLAN.mjs → chunk-RUQ3F3MV.mjs} +34 -7
  51. package/dist/{chunk-KVCI2346.mjs → chunk-S2V3HGLZ.mjs} +8 -7
  52. package/dist/{chunk-PGD5RPKF.mjs → chunk-SVIJ2UZA.mjs} +2 -1
  53. package/dist/{chunk-UETARXIK.mjs → chunk-SXWEFZOF.mjs} +246 -53
  54. package/dist/{chunk-H6MVW5YD.mjs → chunk-TEVEXDY2.mjs} +24 -13
  55. package/dist/{chunk-DJOFM2VO.mjs → chunk-TO6MZFNQ.mjs} +52 -40
  56. package/dist/{chunk-ZCGIZOMT.mjs → chunk-V7HJ5HLC.mjs} +6 -10
  57. package/dist/{chunk-SIDDYP3O.mjs → chunk-VJWSKJLJ.mjs} +1 -1
  58. package/dist/{chunk-ZG56T75O.mjs → chunk-WTHWLCRL.mjs} +51 -11
  59. package/dist/{chunk-KP6DEYWB.mjs → chunk-X4L3W7RQ.mjs} +1 -1
  60. package/dist/{chunk-ZMRTETN2.mjs → chunk-X6C6MNG5.mjs} +4 -3
  61. package/dist/{chunk-OGG2TQDG.mjs → chunk-XVHTJQ4T.mjs} +12 -1
  62. package/dist/{chunk-FSMJLJFL.mjs → chunk-Y6UH3EKE.mjs} +1 -1
  63. package/dist/{chunk-7EMCZVJ2.mjs → chunk-YH7FKFRM.mjs} +4 -4
  64. package/dist/chunk-YJ5T4XZN.mjs +81 -0
  65. package/dist/{chunk-VVNFXJMN.mjs → chunk-YNDPQVEK.mjs} +8 -1
  66. package/dist/{chunk-QGZ32NFQ.mjs → chunk-Z23KOLNU.mjs} +4 -3
  67. package/dist/{chunk-5CKMYMTS.mjs → chunk-ZATZRXMW.mjs} +27 -8
  68. package/dist/components/ActivityFeed.mjs +2 -2
  69. package/dist/components/Affix.mjs +1 -1
  70. package/dist/components/Anchor.mjs +1 -1
  71. package/dist/components/AreaChart.mjs +4 -3
  72. package/dist/components/AutoComplete.mjs +1 -1
  73. package/dist/components/BarChart.mjs +4 -3
  74. package/dist/components/Calendar.mjs +1 -1
  75. package/dist/components/Cascader.mjs +1 -1
  76. package/dist/components/ChartCanvas.mjs +1 -1
  77. package/dist/components/ChatWindow.mjs +3 -3
  78. package/dist/components/Code.mjs +3 -1
  79. package/dist/components/CollapsePanel.mjs +1 -1
  80. package/dist/components/ColorPicker.d.mts +3 -1
  81. package/dist/components/ColorPicker.mjs +3 -1
  82. package/dist/components/CommentThread.mjs +2 -2
  83. package/dist/components/DataExport.mjs +2 -2
  84. package/dist/components/DataTableWithToolbar.mjs +7 -7
  85. package/dist/components/DonutChart.mjs +4 -4
  86. package/dist/components/Dropdown.mjs +1 -1
  87. package/dist/components/FileManager.mjs +2 -1
  88. package/dist/components/FloatButton.mjs +1 -1
  89. package/dist/components/FormItem.mjs +1 -1
  90. package/dist/components/FormWizard.mjs +1 -1
  91. package/dist/components/FunnelChart.mjs +3 -3
  92. package/dist/components/Gantt.d.mts +3 -1
  93. package/dist/components/Gantt.mjs +2 -2
  94. package/dist/components/GaugeChart.mjs +2 -2
  95. package/dist/components/HeatmapChart.mjs +3 -3
  96. package/dist/components/Image.mjs +4 -4
  97. package/dist/components/ImageGroup.mjs +2 -2
  98. package/dist/components/ImagePreview.mjs +1 -1
  99. package/dist/components/Input.mjs +1 -1
  100. package/dist/components/InputNumber.d.mts +1 -1
  101. package/dist/components/InputNumber.mjs +1 -1
  102. package/dist/components/Kanban.mjs +2 -2
  103. package/dist/components/LineChart.mjs +4 -3
  104. package/dist/components/List.mjs +2 -2
  105. package/dist/components/Loading.mjs +1 -1
  106. package/dist/components/MarkdownEditor.mjs +1 -1
  107. package/dist/components/MaskInput.mjs +1 -1
  108. package/dist/components/NotificationCenter.mjs +4 -4
  109. package/dist/components/OrgChart.mjs +2 -2
  110. package/dist/components/Pagination.mjs +1 -1
  111. package/dist/components/PieChart.mjs +3 -3
  112. package/dist/components/Popconfirm.mjs +2 -2
  113. package/dist/components/Popover.mjs +2 -2
  114. package/dist/components/QRCode.d.mts +2 -2
  115. package/dist/components/QRCode.mjs +1 -1
  116. package/dist/components/RadarChart.mjs +3 -3
  117. package/dist/components/Rate.mjs +1 -1
  118. package/dist/components/RichTextEditor.mjs +1 -1
  119. package/dist/components/ScatterChart.mjs +4 -3
  120. package/dist/components/ScrollSpy.mjs +1 -1
  121. package/dist/components/Select.mjs +1 -1
  122. package/dist/components/Signature.mjs +1 -1
  123. package/dist/components/SplitButton.mjs +2 -2
  124. package/dist/components/Splitter.mjs +1 -1
  125. package/dist/components/Stepper.d.mts +2 -0
  126. package/dist/components/Stepper.mjs +2 -1
  127. package/dist/components/SunburstChart.mjs +3 -3
  128. package/dist/components/Switch.d.mts +5 -1
  129. package/dist/components/Switch.mjs +2 -1
  130. package/dist/components/Table.mjs +3 -3
  131. package/dist/components/TaskBoard.mjs +1 -1
  132. package/dist/components/Textarea.mjs +1 -1
  133. package/dist/components/Tooltip.mjs +2 -2
  134. package/dist/components/Tour.mjs +1 -1
  135. package/dist/components/TreeMapChart.mjs +3 -3
  136. package/dist/components/TreeSelect.mjs +1 -1
  137. package/dist/components/Upload.mjs +1 -1
  138. package/dist/hooks/useChartInteraction.d.mts +5 -0
  139. package/dist/hooks/useChartInteraction.mjs +1 -1
  140. package/dist/index.d.mts +1 -1
  141. package/dist/index.mjs +57 -0
  142. package/package.json +2 -2
  143. package/dist/chunk-CB4SK5AU.mjs +0 -235
  144. package/dist/chunk-KPACLRQH.mjs +0 -55
@@ -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,
@@ -15,7 +15,7 @@ import {
15
15
  richTextToolbarClasses,
16
16
  richTextToolbarSeparatorClasses,
17
17
  richTextPlaceholderClasses,
18
- defaultToolbar,
18
+ createDefaultRichTextToolbar,
19
19
  isInlineFormat,
20
20
  findHotkeyMatch,
21
21
  isContentEmpty,
@@ -48,7 +48,6 @@ var RichTextEditor = ({
48
48
  const [currentContent, setContent] = useControlledState(value, defaultValue, onChange);
49
49
  const isControlled = value !== void 0;
50
50
  const [activeFormats, setActiveFormats] = useState(/* @__PURE__ */ new Set());
51
- const toolbarItems = toolbar ?? defaultToolbar;
52
51
  const empty = isContentEmpty(currentContent);
53
52
  const mergedLocale = useMemo(
54
53
  () => mergeTigerLocale(config.locale, locale),
@@ -58,6 +57,10 @@ var RichTextEditor = ({
58
57
  () => getRichTextEditorLabels(mergedLocale, labelsOverride),
59
58
  [mergedLocale, labelsOverride]
60
59
  );
60
+ const toolbarItems = useMemo(
61
+ () => toolbar ?? createDefaultRichTextToolbar(labels),
62
+ [toolbar, labels]
63
+ );
61
64
  useEffect(() => {
62
65
  if (!editorRef.current) return;
63
66
  const factory = engine ?? builtinRichTextEngine;
@@ -28,11 +28,14 @@ import {
28
28
  kanbanSwimlaneCollapsedClasses,
29
29
  kanbanAddColumnClasses,
30
30
  filterColumns,
31
+ filterCards,
31
32
  groupBySwimlane,
32
33
  getColumnCardCount,
33
34
  moveCard,
35
+ mapVisibleCardIndexToSource,
34
36
  reorderColumns,
35
37
  isWipExceeded,
38
+ appendDefaultTaskBoardCard,
36
39
  createTaskBoardDragController,
37
40
  createDefaultDragSnapshot
38
41
  } from "@expcat/tigercat-core";
@@ -343,6 +346,17 @@ var TaskBoard = ({
343
346
  },
344
347
  [onColumnsChange]
345
348
  );
349
+ const consumerOnCardAdd = onCardAdd;
350
+ const showAddCard = Boolean(allowAddCard || consumerOnCardAdd);
351
+ const handleCardAdd = useCallback(
352
+ (columnId) => {
353
+ if (consumerOnCardAdd == null) {
354
+ updateColumns(appendDefaultTaskBoardCard(columnsRef.current, columnId));
355
+ }
356
+ consumerOnCardAdd?.(columnId);
357
+ },
358
+ [consumerOnCardAdd, updateColumns]
359
+ );
346
360
  const [dragSnap, setDragSnap] = useState(createDefaultDragSnapshot);
347
361
  const boardRef = useRef(null);
348
362
  const beforeCardMoveRef = useRef(beforeCardMove);
@@ -355,9 +369,17 @@ var TaskBoard = ({
355
369
  onColumnMoveRef.current = onColumnMove;
356
370
  const enforceWipLimitRef = useRef(enforceWipLimit);
357
371
  enforceWipLimitRef.current = enforceWipLimit;
372
+ const filterTextRef = useRef(filterText);
373
+ filterTextRef.current = filterText;
358
374
  const applyCardMove = useCallback(
359
375
  async (cardId, fromColumnId, toColumnId, toIdx) => {
360
- const result = moveCard(columnsRef.current, cardId, fromColumnId, toColumnId, toIdx, {
376
+ const sourceCol = columnsRef.current.find((c) => c.id === toColumnId);
377
+ const mappedIdx = sourceCol == null ? toIdx : mapVisibleCardIndexToSource(
378
+ sourceCol.cards,
379
+ filterCards(sourceCol.cards, filterTextRef.current),
380
+ toIdx
381
+ );
382
+ const result = moveCard(columnsRef.current, cardId, fromColumnId, toColumnId, mappedIdx, {
361
383
  enforceWipLimit: enforceWipLimitRef.current
362
384
  });
363
385
  if (!result) return;
@@ -442,7 +464,7 @@ var TaskBoard = ({
442
464
  renderColumnHeader,
443
465
  renderColumnFooter,
444
466
  renderEmptyColumn,
445
- onCardAdd,
467
+ onCardAdd: showAddCard ? handleCardAdd : void 0,
446
468
  dragType,
447
469
  dragCtrl,
448
470
  dragStateId,
@@ -9,13 +9,28 @@ import {
9
9
  floatButtonSizeClasses,
10
10
  floatButtonTypeClasses,
11
11
  floatButtonDisabledClasses,
12
- floatButtonGroupClasses,
12
+ floatButtonIconSizeClasses,
13
+ floatButtonPlusIconPath,
14
+ getFloatButtonGroupClasses,
13
15
  getViewportOffsetStyle,
14
16
  viewportFloatingBaseClasses,
15
17
  viewportPlacementClasses
16
18
  } from "@expcat/tigercat-core";
17
19
  import { jsx, jsxs } from "react/jsx-runtime";
18
20
  var FloatButtonGroupContext = createContext(null);
21
+ var DefaultPlusIcon = ({ size }) => /* @__PURE__ */ jsx(
22
+ "svg",
23
+ {
24
+ xmlns: "http://www.w3.org/2000/svg",
25
+ fill: "none",
26
+ viewBox: "0 0 24 24",
27
+ stroke: "currentColor",
28
+ strokeWidth: 2,
29
+ className: floatButtonIconSizeClasses[size],
30
+ "aria-hidden": "true",
31
+ children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: floatButtonPlusIconPath })
32
+ }
33
+ );
19
34
  var FloatButton = ({
20
35
  shape,
21
36
  size = "md",
@@ -58,11 +73,11 @@ var FloatButton = ({
58
73
  type: "button",
59
74
  disabled,
60
75
  style: buttonStyle,
61
- "aria-label": ariaLabel ?? tooltip,
76
+ "aria-label": children != null ? ariaLabel ?? tooltip : ariaLabel ?? tooltip ?? "Add",
62
77
  title: tooltip,
63
78
  onClick: disabled ? void 0 : onClick,
64
79
  ...props,
65
- children
80
+ children: children ?? /* @__PURE__ */ jsx(DefaultPlusIcon, { size })
66
81
  }
67
82
  );
68
83
  };
@@ -74,6 +89,10 @@ var FloatButtonGroup = ({
74
89
  children,
75
90
  className,
76
91
  onOpenChange,
92
+ placement = "bottom-right",
93
+ offset,
94
+ portal = true,
95
+ style,
77
96
  ...props
78
97
  }) => {
79
98
  const groupContextValue = useMemo(() => ({ shape: groupShape }), [groupShape]);
@@ -92,12 +111,20 @@ var FloatButtonGroup = ({
92
111
  setInternalOpen(false);
93
112
  onOpenChange?.(false);
94
113
  }, [onOpenChange]);
95
- const groupClasses = useMemo(() => classNames(floatButtonGroupClasses, className), [className]);
96
- if (!isBrowser()) return null;
114
+ const groupClasses = useMemo(
115
+ () => classNames(getFloatButtonGroupClasses({ placement, portal }), className),
116
+ [placement, portal, className]
117
+ );
118
+ const groupStyle = useMemo(
119
+ () => ({ ...getViewportOffsetStyle(placement, offset), ...style }),
120
+ [placement, offset, style]
121
+ );
122
+ if (portal && !isBrowser()) return null;
97
123
  const content = /* @__PURE__ */ jsx(FloatButtonGroupContext.Provider, { value: groupContextValue, children: /* @__PURE__ */ jsxs(
98
124
  "div",
99
125
  {
100
126
  className: groupClasses,
127
+ style: groupStyle,
101
128
  onMouseEnter: trigger === "hover" ? handleMouseEnter : void 0,
102
129
  onMouseLeave: trigger === "hover" ? handleMouseLeave : void 0,
103
130
  ...props,
@@ -107,7 +134,7 @@ var FloatButtonGroup = ({
107
134
  ]
108
135
  }
109
136
  ) });
110
- return ReactDOM.createPortal(content, document.body);
137
+ return portal ? ReactDOM.createPortal(content, document.body) : content;
111
138
  };
112
139
 
113
140
  export {
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  ImageGroupContext
3
- } from "./chunk-HSBN5MLS.mjs";
3
+ } from "./chunk-3LACOSJQ.mjs";
4
4
  import {
5
5
  ImagePreview
6
- } from "./chunk-ZCGIZOMT.mjs";
6
+ } from "./chunk-V7HJ5HLC.mjs";
7
7
  import {
8
8
  usePopup
9
- } from "./chunk-ZG56T75O.mjs";
9
+ } from "./chunk-WTHWLCRL.mjs";
10
10
  import {
11
11
  renderOverlayPortal
12
12
  } from "./chunk-HKAZXG74.mjs";
@@ -66,28 +66,30 @@ var Textarea = forwardRef(
66
66
  onChange?.(event);
67
67
  };
68
68
  const currentLength = currentValue?.length ?? 0;
69
+ const textarea = /* @__PURE__ */ jsx(
70
+ "textarea",
71
+ {
72
+ ref: setRefs,
73
+ className: textareaClasses,
74
+ value: currentValue,
75
+ disabled,
76
+ readOnly: readonly,
77
+ required,
78
+ placeholder,
79
+ rows,
80
+ maxLength,
81
+ minLength,
82
+ onInput: handleInput,
83
+ onChange: handleChange,
84
+ onFocus,
85
+ onBlur,
86
+ ...props
87
+ }
88
+ );
89
+ if (!showCount) return textarea;
69
90
  return /* @__PURE__ */ jsxs("div", { className: "w-full", children: [
70
- /* @__PURE__ */ jsx(
71
- "textarea",
72
- {
73
- ref: setRefs,
74
- className: textareaClasses,
75
- value: currentValue,
76
- disabled,
77
- readOnly: readonly,
78
- required,
79
- placeholder,
80
- rows,
81
- maxLength,
82
- minLength,
83
- onInput: handleInput,
84
- onChange: handleChange,
85
- onFocus,
86
- onBlur,
87
- ...props
88
- }
89
- ),
90
- showCount && /* @__PURE__ */ jsx("div", { className: "mt-1 text-sm text-gray-500 text-right", children: maxLength ? `${currentLength}/${maxLength}` : currentLength })
91
+ textarea,
92
+ /* @__PURE__ */ jsx("div", { className: "mt-1 text-sm text-gray-500 text-right", children: maxLength ? `${currentLength}/${maxLength}` : currentLength })
91
93
  ] });
92
94
  }
93
95
  );