@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
@@ -33,6 +33,7 @@ import {
33
33
  getPickerOptionAria,
34
34
  getPickerTriggerKeyAction,
35
35
  getPickerNavigationIndex,
36
+ getPickerOptionId,
36
37
  findFirstEnabledIndex,
37
38
  classNames,
38
39
  icon20ViewBox,
@@ -165,18 +166,17 @@ var TreeSelect = (props) => {
165
166
  commitActiveIndex(-1);
166
167
  return;
167
168
  }
168
- if (!virtual) return;
169
169
  commitActiveIndex(resolveActiveIndex());
170
- }, [isOpen, searchQuery, virtual, commitActiveIndex, resolveActiveIndex]);
170
+ }, [isOpen, searchQuery, commitActiveIndex, resolveActiveIndex]);
171
171
  useLayoutEffect(() => {
172
- if (!isOpen || !virtual) return;
172
+ if (!isOpen) return;
173
173
  const remapped = getTreeSelectVisibleIndex(visibleNodesRef.current, lastActiveKeyRef.current);
174
174
  if (remapped >= 0) setActiveIndex(remapped);
175
- }, [expandedKeys, treeData, isOpen, virtual]);
175
+ }, [expandedKeys, treeData, isOpen]);
176
176
  useLayoutEffect(() => {
177
- if (!isOpen || !virtual) return;
177
+ if (!isOpen) return;
178
178
  alignVirtualScroll(activeIndex);
179
- }, [activeIndex, isOpen, virtual, alignVirtualScroll, visibleNodes.length]);
179
+ }, [activeIndex, isOpen, alignVirtualScroll, visibleNodes.length]);
180
180
  function handleVirtualListKeyDown(e) {
181
181
  if (e.key !== "ArrowDown" && e.key !== "ArrowUp" && e.key !== "Home" && e.key !== "End") {
182
182
  return;
@@ -207,8 +207,7 @@ var TreeSelect = (props) => {
207
207
  if (isOpen) closeDropdown();
208
208
  else openDropdown();
209
209
  }
210
- function toggleExpand(key, e) {
211
- e.stopPropagation();
210
+ function toggleExpandKey(key) {
212
211
  setExpandedKeys((prev) => {
213
212
  const next = new Set(prev);
214
213
  if (next.has(key)) next.delete(key);
@@ -216,6 +215,10 @@ var TreeSelect = (props) => {
216
215
  return next;
217
216
  });
218
217
  }
218
+ function toggleExpand(key, e) {
219
+ e.stopPropagation();
220
+ toggleExpandKey(key);
221
+ }
219
222
  function isSelected(key) {
220
223
  if (multiple && Array.isArray(value)) {
221
224
  return value.includes(key);
@@ -239,7 +242,51 @@ var TreeSelect = (props) => {
239
242
  e.stopPropagation();
240
243
  onChange?.(multiple ? [] : void 0);
241
244
  }
245
+ function handleOpenListKeyDown(e, fromSearchInput = false) {
246
+ const key = e.key;
247
+ if (fromSearchInput && key === " ") return false;
248
+ if (key === "ArrowDown" || key === "ArrowUp" || key === "Home" || key === "End") {
249
+ e.preventDefault();
250
+ e.stopPropagation();
251
+ setActiveIndex((current) => {
252
+ const next = getPickerNavigationIndex(visibleNodes, current, key, isNodeDisabled);
253
+ lastActiveKeyRef.current = visibleNodes[next]?.node.key;
254
+ return next;
255
+ });
256
+ return true;
257
+ }
258
+ if (key === "Enter" || key === " ") {
259
+ e.preventDefault();
260
+ e.stopPropagation();
261
+ const item = visibleNodes[activeIndex];
262
+ if (item && !item.node.disabled) {
263
+ handleNodeSelect(item.node);
264
+ }
265
+ return true;
266
+ }
267
+ if (key === "ArrowRight") {
268
+ e.preventDefault();
269
+ e.stopPropagation();
270
+ const item = visibleNodes[activeIndex];
271
+ if (item?.hasChildren && !item.isExpanded) {
272
+ toggleExpandKey(item.node.key);
273
+ }
274
+ return true;
275
+ }
276
+ if (key === "ArrowLeft") {
277
+ e.preventDefault();
278
+ e.stopPropagation();
279
+ const item = visibleNodes[activeIndex];
280
+ if (item?.hasChildren && item.isExpanded) {
281
+ toggleExpandKey(item.node.key);
282
+ }
283
+ return true;
284
+ }
285
+ return false;
286
+ }
242
287
  function handleKeyDown(e) {
288
+ if (disabled) return;
289
+ if (isOpen && handleOpenListKeyDown(e)) return;
243
290
  const action = getPickerTriggerKeyAction(e.key, isOpen);
244
291
  if (action === "none") return;
245
292
  e.preventDefault();
@@ -252,15 +299,43 @@ var TreeSelect = (props) => {
252
299
  closeDropdown();
253
300
  }
254
301
  }
255
- function renderFlatNode(flatNode) {
302
+ function handleDropdownKeyDown(e) {
303
+ if (e.target instanceof HTMLInputElement) return;
304
+ if (!isOpen) return;
305
+ handleOpenListKeyDown(e);
306
+ }
307
+ function handleSearchKeyDown(e) {
308
+ switch (e.key) {
309
+ case " ":
310
+ e.stopPropagation();
311
+ return;
312
+ case "ArrowDown":
313
+ case "ArrowUp":
314
+ case "Enter":
315
+ handleOpenListKeyDown(e, true);
316
+ return;
317
+ case "Escape":
318
+ e.preventDefault();
319
+ e.stopPropagation();
320
+ closeDropdown();
321
+ triggerRef.current?.focus();
322
+ return;
323
+ default:
324
+ return;
325
+ }
326
+ }
327
+ function renderFlatNode(flatNode, index) {
256
328
  const { node, level, hasChildren, isExpanded } = flatNode;
257
329
  const selected = isSelected(node.key);
330
+ const isActive = index === activeIndex;
258
331
  const indent = level * 20;
259
332
  return /* @__PURE__ */ jsxs(
260
333
  "div",
261
334
  {
335
+ id: getPickerOptionId(listboxId, index),
336
+ "data-active": isActive || void 0,
262
337
  ...getPickerOptionAria({ selected, disabled: !!node.disabled }),
263
- className: getTreeSelectNodeClasses(selected, !!node.disabled, size),
338
+ className: getTreeSelectNodeClasses(selected || isActive, !!node.disabled, size),
264
339
  style: { paddingLeft: `${indent + 8}px`, height: virtual ? "100%" : void 0 },
265
340
  onClick: (e) => {
266
341
  e.stopPropagation();
@@ -285,45 +360,65 @@ var TreeSelect = (props) => {
285
360
  );
286
361
  }
287
362
  return /* @__PURE__ */ jsxs("div", { ref: containerRef, className: classNames(treeSelectBaseClasses, className), ...divProps, children: [
288
- /* @__PURE__ */ jsxs(
363
+ /* @__PURE__ */ jsx(
289
364
  "button",
290
365
  {
291
366
  ref: triggerRef,
292
367
  type: "button",
293
- className: getTreeSelectTriggerClasses(size, disabled, isOpen),
294
- ...getPickerComboboxAria({ expanded: isOpen, listboxId }),
368
+ className: classNames(
369
+ getTreeSelectTriggerClasses(size, disabled, isOpen),
370
+ showClearButton ? "pr-14" : void 0
371
+ ),
372
+ ...getPickerComboboxAria({
373
+ expanded: isOpen,
374
+ listboxId,
375
+ activeIndex: isOpen ? activeIndex : -1
376
+ }),
295
377
  disabled,
296
378
  onClick: toggleDropdown,
297
379
  onKeyDown: handleKeyDown,
298
- children: [
299
- /* @__PURE__ */ jsx(
300
- "span",
380
+ children: /* @__PURE__ */ jsx(
381
+ "span",
382
+ {
383
+ className: classNames(
384
+ "flex-1 truncate",
385
+ !displayLabel ? "text-[var(--tiger-treeselect-placeholder,var(--tiger-text-muted,#9ca3af))]" : ""
386
+ ),
387
+ children: displayLabel || placeholder
388
+ }
389
+ )
390
+ }
391
+ ),
392
+ /* @__PURE__ */ jsxs("span", { className: "pointer-events-none absolute inset-y-0 right-3 flex items-center gap-1", children: [
393
+ showClearButton && /* @__PURE__ */ jsx(
394
+ "button",
395
+ {
396
+ type: "button",
397
+ className: "pointer-events-auto inline-flex rounded-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--tiger-treeselect-ring,var(--tiger-primary,#2563eb))] text-[var(--tiger-treeselect-clear,var(--tiger-text-muted,#9ca3af))] hover:text-[var(--tiger-treeselect-clear-hover,var(--tiger-text,#111827))]",
398
+ "data-tiger-treeselect-clear": "",
399
+ "aria-label": resolveLocaleText("Clear selection", mergedLocale?.common?.clearText),
400
+ onClick: handleClear,
401
+ children: /* @__PURE__ */ jsx(
402
+ "svg",
301
403
  {
302
- className: classNames(
303
- "flex-1 truncate",
304
- !displayLabel ? "text-[var(--tiger-treeselect-placeholder,var(--tiger-text-muted,#9ca3af))]" : ""
305
- ),
306
- children: displayLabel || placeholder
404
+ className: "w-4 h-4",
405
+ viewBox: icon20ViewBox,
406
+ fill: "currentColor",
407
+ xmlns: "http://www.w3.org/2000/svg",
408
+ children: /* @__PURE__ */ jsx("path", { d: closeSolidIcon20PathD, fillRule: "evenodd", clipRule: "evenodd" })
307
409
  }
410
+ )
411
+ }
412
+ ),
413
+ /* @__PURE__ */ jsx(
414
+ "span",
415
+ {
416
+ className: classNames(
417
+ "inline-flex text-[var(--tiger-text-muted,#9ca3af)]",
418
+ isOpen && "rotate-180"
308
419
  ),
309
- showClearButton ? /* @__PURE__ */ jsx(
310
- "span",
311
- {
312
- className: "absolute right-2 top-1/2 -translate-y-1/2 text-[var(--tiger-treeselect-clear,var(--tiger-text-muted,#9ca3af))] hover:text-[var(--tiger-treeselect-clear-hover,var(--tiger-text,#111827))]",
313
- "aria-label": resolveLocaleText("Clear selection", mergedLocale?.common?.clearText),
314
- onClick: handleClear,
315
- children: /* @__PURE__ */ jsx(
316
- "svg",
317
- {
318
- className: "w-4 h-4",
319
- viewBox: icon20ViewBox,
320
- fill: "currentColor",
321
- xmlns: "http://www.w3.org/2000/svg",
322
- children: /* @__PURE__ */ jsx("path", { d: closeSolidIcon20PathD, fillRule: "evenodd", clipRule: "evenodd" })
323
- }
324
- )
325
- }
326
- ) : /* @__PURE__ */ jsx("span", { className: "absolute right-2 top-1/2 -translate-y-1/2 text-[var(--tiger-text-muted,#9ca3af)] pointer-events-none", children: /* @__PURE__ */ jsx(
420
+ "aria-hidden": "true",
421
+ children: /* @__PURE__ */ jsx(
327
422
  "svg",
328
423
  {
329
424
  className: "w-4 h-4 transition-transform",
@@ -332,10 +427,10 @@ var TreeSelect = (props) => {
332
427
  xmlns: "http://www.w3.org/2000/svg",
333
428
  children: /* @__PURE__ */ jsx("path", { d: chevronDownSolidIcon20PathD, fillRule: "evenodd", clipRule: "evenodd" })
334
429
  }
335
- ) })
336
- ]
337
- }
338
- ),
430
+ )
431
+ }
432
+ )
433
+ ] }),
339
434
  renderOverlayPortal(
340
435
  isOpen ? /* @__PURE__ */ jsxs(
341
436
  "div",
@@ -345,6 +440,7 @@ var TreeSelect = (props) => {
345
440
  className: classNames(getTreeSelectDropdownClasses(virtual), overlay.floatingClasses),
346
441
  style: overlay.floatingStyles,
347
442
  "data-positioned": overlay.positioned,
443
+ onKeyDown: handleDropdownKeyDown,
348
444
  children: [
349
445
  searchable && /* @__PURE__ */ jsx(
350
446
  "input",
@@ -360,7 +456,8 @@ var TreeSelect = (props) => {
360
456
  "Search tree",
361
457
  mergedLocale?.common?.searchPlaceholder
362
458
  ),
363
- onChange: (e) => updateSearchValue(e.target.value)
459
+ onChange: (e) => updateSearchValue(e.target.value),
460
+ onKeyDown: handleSearchKeyDown
364
461
  }
365
462
  ),
366
463
  visibleNodes.length > 0 ? virtual ? /* @__PURE__ */ jsx(
@@ -378,12 +475,12 @@ var TreeSelect = (props) => {
378
475
  height,
379
476
  renderItem: ({ index }) => {
380
477
  const item = visibleNodes[index];
381
- return item ? renderFlatNode(item) : null;
478
+ return item ? renderFlatNode(item, index) : null;
382
479
  }
383
480
  }
384
481
  )
385
482
  }
386
- ) : visibleNodes.map((flatNode) => renderFlatNode(flatNode)) : /* @__PURE__ */ jsx("div", { className: treeSelectEmptyClasses, children: resolveLocaleText("No data", emptyText, mergedLocale?.common?.emptyText) })
483
+ ) : visibleNodes.map((flatNode, index) => renderFlatNode(flatNode, index)) : /* @__PURE__ */ jsx("div", { className: treeSelectEmptyClasses, children: resolveLocaleText("No data", emptyText, mergedLocale?.common?.emptyText) })
387
484
  ]
388
485
  }
389
486
  ) : null,
@@ -13,6 +13,7 @@ import {
13
13
  calendarWeekdayClasses,
14
14
  getCalendarDayClasses,
15
15
  getCalendarMonthClasses,
16
+ isCalendarMonthDisabled,
16
17
  isSameDay,
17
18
  getMonthDays,
18
19
  getShortDayNames,
@@ -91,10 +92,13 @@ var Calendar = ({
91
92
  );
92
93
  const selectMonth = useCallback(
93
94
  (monthIdx) => {
95
+ if (isCalendarMonthDisabled(viewYear, monthIdx, disabledDate)) return;
94
96
  setViewMonth(monthIdx);
95
- onPanelChange?.(new Date(viewYear, monthIdx, 1), mode);
97
+ const date = new Date(viewYear, monthIdx, 1);
98
+ onChange?.(date);
99
+ onPanelChange?.(date, "month");
96
100
  },
97
- [viewYear, mode, onPanelChange]
101
+ [viewYear, disabledDate, onChange, onPanelChange]
98
102
  );
99
103
  const dayGridRef = useRef(null);
100
104
  const pendingFocusIsoRef = useRef(null);
@@ -256,14 +260,16 @@ var Calendar = ({
256
260
  ] }),
257
261
  mode === "year" ? /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-2", role: "grid", ref: monthGridRef, children: monthRows.map((row, ri) => /* @__PURE__ */ jsx("div", { className: "grid grid-cols-3 gap-2", role: "row", children: row.map((m, ci) => {
258
262
  const i = ri * 3 + ci;
263
+ const isDisabled = isCalendarMonthDisabled(viewYear, i, disabledDate);
259
264
  return /* @__PURE__ */ jsx(
260
265
  "button",
261
266
  {
262
267
  type: "button",
263
268
  role: "gridcell",
264
269
  "aria-selected": viewMonth === i,
265
- tabIndex: rovingMonthIdx === i ? 0 : -1,
266
- className: getCalendarMonthClasses(viewMonth === i),
270
+ disabled: isDisabled,
271
+ tabIndex: rovingMonthIdx === i && !isDisabled ? 0 : -1,
272
+ className: getCalendarMonthClasses(viewMonth === i, isDisabled),
267
273
  onClick: () => selectMonth(i),
268
274
  onFocus: () => setActiveMonthIdx(i),
269
275
  onKeyDown: (e) => handleMonthKeyDown(e, i),
@@ -4,26 +4,32 @@ import {
4
4
  } from "./chunk-Z3CRHC5F.mjs";
5
5
  import {
6
6
  List
7
- } from "./chunk-FSMJLJFL.mjs";
7
+ } from "./chunk-Y6UH3EKE.mjs";
8
8
  import {
9
9
  Button
10
10
  } from "./chunk-5TE7KLE5.mjs";
11
11
  import {
12
12
  Loading
13
- } from "./chunk-K4GIKSZE.mjs";
13
+ } from "./chunk-I2BENK5X.mjs";
14
14
  import {
15
15
  Text
16
16
  } from "./chunk-HLS4CHWX.mjs";
17
17
  import {
18
18
  Card
19
19
  } from "./chunk-IXV5YBCZ.mjs";
20
+ import {
21
+ useTigerConfig
22
+ } from "./chunk-YSIXURBW.mjs";
20
23
 
21
24
  // src/components/NotificationCenter.tsx
22
25
  import { useMemo, useEffect, useState, useCallback } from "react";
23
26
  import {
24
27
  classNames,
25
28
  buildNotificationGroups,
26
- formatActivityTime
29
+ formatActivityTime,
30
+ getNotificationCenterLabels,
31
+ mergeTigerLocale,
32
+ resolveLocaleText
27
33
  } from "@expcat/tigercat-core";
28
34
 
29
35
  // ../core/src/internal/notification-center-styles.ts
@@ -75,15 +81,17 @@ var NotificationCenter = ({
75
81
  readFilter,
76
82
  defaultReadFilter = "all",
77
83
  loading = false,
78
- loadingText = "\u52A0\u8F7D\u4E2D...",
79
- emptyText = "\u6682\u65E0\u901A\u77E5",
80
- title = "\u901A\u77E5\u4E2D\u5FC3",
81
- allLabel = "\u5168\u90E8",
82
- unreadLabel = "\u672A\u8BFB",
83
- readLabel = "\u5DF2\u8BFB",
84
- markAllReadText = "\u5168\u90E8\u6807\u8BB0\u5DF2\u8BFB",
85
- markReadText = "\u6807\u8BB0\u5DF2\u8BFB",
86
- markUnreadText = "\u6807\u8BB0\u672A\u8BFB",
84
+ loadingText,
85
+ emptyText,
86
+ title,
87
+ allLabel,
88
+ unreadLabel,
89
+ readLabel,
90
+ markAllReadText,
91
+ markReadText,
92
+ markUnreadText,
93
+ locale,
94
+ labels: labelsOverride,
87
95
  manageReadState = false,
88
96
  onGroupChange,
89
97
  onReadFilterChange,
@@ -93,6 +101,24 @@ var NotificationCenter = ({
93
101
  className,
94
102
  ...props
95
103
  }) => {
104
+ const config = useTigerConfig();
105
+ const mergedLocale = useMemo(
106
+ () => mergeTigerLocale(config.locale, locale),
107
+ [config.locale, locale]
108
+ );
109
+ const labels = useMemo(
110
+ () => getNotificationCenterLabels(mergedLocale, labelsOverride),
111
+ [mergedLocale, labelsOverride]
112
+ );
113
+ const resolvedTitle = resolveLocaleText(labels.title, title);
114
+ const resolvedEmptyText = resolveLocaleText(labels.emptyText, emptyText);
115
+ const resolvedLoadingText = resolveLocaleText(labels.loadingText, loadingText);
116
+ const resolvedAllLabel = resolveLocaleText(labels.allLabel, allLabel);
117
+ const resolvedUnreadLabel = resolveLocaleText(labels.unreadLabel, unreadLabel);
118
+ const resolvedReadLabel = resolveLocaleText(labels.readLabel, readLabel);
119
+ const resolvedMarkAllReadText = resolveLocaleText(labels.markAllReadText, markAllReadText);
120
+ const resolvedMarkReadText = resolveLocaleText(labels.markReadText, markReadText);
121
+ const resolvedMarkUnreadText = resolveLocaleText(labels.markUnreadText, markUnreadText);
96
122
  const resolvedGroups = useMemo(
97
123
  () => buildNotificationGroups(items, groups, groupBy, groupOrder),
98
124
  [items, groups, groupBy, groupOrder]
@@ -168,11 +194,11 @@ var NotificationCenter = ({
168
194
  );
169
195
  const filterButtons = useMemo(
170
196
  () => [
171
- { key: "all", label: allLabel },
172
- { key: "unread", label: unreadLabel },
173
- { key: "read", label: readLabel }
197
+ { key: "all", label: resolvedAllLabel },
198
+ { key: "unread", label: resolvedUnreadLabel },
199
+ { key: "read", label: resolvedReadLabel }
174
200
  ],
175
- [allLabel, unreadLabel, readLabel]
201
+ [resolvedAllLabel, resolvedUnreadLabel, resolvedReadLabel]
176
202
  );
177
203
  const groupTabData = useMemo(
178
204
  () => resolvedGroups.map((group, index) => {
@@ -270,7 +296,7 @@ var NotificationCenter = ({
270
296
  }
271
297
  onItemReadChange?.(item, !isRead);
272
298
  },
273
- children: isRead ? markUnreadText : markReadText
299
+ children: isRead ? resolvedMarkUnreadText : resolvedMarkReadText
274
300
  }
275
301
  )
276
302
  ]
@@ -298,7 +324,7 @@ var NotificationCenter = ({
298
324
  )
299
325
  }
300
326
  ) }),
301
- /* @__PURE__ */ jsx(Text, { tag: "div", size: "sm", color: "muted", className: notificationCenterEmptyTextClasses, children: emptyText })
327
+ /* @__PURE__ */ jsx(Text, { tag: "div", size: "sm", color: "muted", className: notificationCenterEmptyTextClasses, children: resolvedEmptyText })
302
328
  ] });
303
329
  }
304
330
  return /* @__PURE__ */ jsx(
@@ -308,13 +334,13 @@ var NotificationCenter = ({
308
334
  split: true,
309
335
  bordered: "divided",
310
336
  hoverable: true,
311
- emptyText,
337
+ emptyText: resolvedEmptyText,
312
338
  onItemClick: (item, index) => onItemClick?.(item, index),
313
339
  renderItem
314
340
  }
315
341
  );
316
342
  };
317
- const content = loading ? /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center py-16", children: /* @__PURE__ */ jsx(Loading, { text: loadingText, className: notificationCenterLoadingClasses }) }) : resolvedGroups.length > 0 ? /* @__PURE__ */ jsx("div", { className: "-mx-4 -mb-4", children: /* @__PURE__ */ jsx(
343
+ const content = loading ? /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center py-16", children: /* @__PURE__ */ jsx(Loading, { text: resolvedLoadingText, className: notificationCenterLoadingClasses }) }) : resolvedGroups.length > 0 ? /* @__PURE__ */ jsx("div", { className: "-mx-4 -mb-4", children: /* @__PURE__ */ jsx(
318
344
  Tabs,
319
345
  {
320
346
  type: "line",
@@ -329,7 +355,7 @@ var NotificationCenter = ({
329
355
  {
330
356
  className: wrapperClasses,
331
357
  role: props.role ?? "region",
332
- "aria-label": props["aria-label"] ?? (props["aria-labelledby"] ? void 0 : title),
358
+ "aria-label": props["aria-label"] ?? (props["aria-labelledby"] ? void 0 : resolvedTitle),
333
359
  ...props,
334
360
  "data-tiger-notification-center": true,
335
361
  children: /* @__PURE__ */ jsx(
@@ -347,7 +373,7 @@ var NotificationCenter = ({
347
373
  size: "base",
348
374
  weight: "bold",
349
375
  className: notificationCenterTitleClasses,
350
- children: title
376
+ children: resolvedTitle
351
377
  }
352
378
  ),
353
379
  totalUnread > 0 ? /* @__PURE__ */ jsx("span", { className: notificationCenterUnreadBadgeClasses, children: totalUnread }) : null
@@ -363,7 +389,7 @@ var NotificationCenter = ({
363
389
  notificationCenterMarkAllBaseClasses,
364
390
  hasUnread ? notificationCenterMarkAllEnabledClasses : notificationCenterMarkAllDisabledClasses
365
391
  ),
366
- children: markAllReadText
392
+ children: resolvedMarkAllReadText
367
393
  }
368
394
  )
369
395
  ] }),
@@ -1,6 +1,9 @@
1
+ import {
2
+ useResponsiveChartSize
3
+ } from "./chunk-5JETWHLJ.mjs";
1
4
  import {
2
5
  useChartInteraction
3
- } from "./chunk-DNOPEJ5I.mjs";
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-DKNVSQSV.mjs";
18
+ } from "./chunk-CUAXRBKO.mjs";
16
19
  import {
17
20
  ChartGrid
18
21
  } from "./chunk-677VSTPW.mjs";
@@ -29,7 +32,6 @@ import {
29
32
  createLinePath,
30
33
  createPointScale,
31
34
  getChartElementOpacity,
32
- getChartInnerRect,
33
35
  getStableChartGradientPrefix,
34
36
  getNumberExtent,
35
37
  linePointTransitionClasses,
@@ -111,9 +113,11 @@ var AreaChart = ({
111
113
  () => getStableChartGradientPrefix("area", gradientId),
112
114
  [gradientId]
113
115
  );
114
- const innerRect = useMemo(
115
- () => getChartInnerRect(width, height, padding),
116
- [width, height, padding]
116
+ const { innerRect, onResolvedSizeChange } = useResponsiveChartSize(
117
+ width,
118
+ height,
119
+ padding,
120
+ responsive
117
121
  );
118
122
  const resolvedSeries = useMemo(
119
123
  () => resolveSeriesData(series, data, {
@@ -135,6 +139,7 @@ var AreaChart = ({
135
139
  wrapperClasses
136
140
  } = useChartInteraction({
137
141
  hoverable,
142
+ showTooltip,
138
143
  hoveredIndexProp,
139
144
  selectable,
140
145
  selectedIndexProp,
@@ -287,17 +292,21 @@ var AreaChart = ({
287
292
  (seriesIndex, pointIndex, event) => {
288
293
  setHoveredPointInfo({ seriesIndex, pointIndex });
289
294
  setTooltipPosition({ x: event.clientX, y: event.clientY });
290
- onPointHover?.(seriesIndex, pointIndex, resolvedSeries[seriesIndex]?.data[pointIndex]);
295
+ if (hoverable) {
296
+ onPointHover?.(seriesIndex, pointIndex, resolvedSeries[seriesIndex]?.data[pointIndex]);
297
+ }
291
298
  },
292
- [onPointHover, resolvedSeries]
299
+ [hoverable, onPointHover, resolvedSeries]
293
300
  );
294
301
  const handlePointMouseMove = useCallback((event) => {
295
302
  setTooltipPosition({ x: event.clientX, y: event.clientY });
296
303
  }, []);
297
304
  const handlePointMouseLeave = useCallback(() => {
298
305
  setHoveredPointInfo(null);
299
- onPointHover?.(null, null, null);
300
- }, [onPointHover]);
306
+ if (hoverable) {
307
+ onPointHover?.(null, null, null);
308
+ }
309
+ }, [hoverable, onPointHover]);
301
310
  const showPointTooltipFromElement = useCallback(
302
311
  (el, seriesIndex, pointIndex) => {
303
312
  if (!hoverable) return;
@@ -325,6 +334,7 @@ var AreaChart = ({
325
334
  [selectable, handleSeriesSelect]
326
335
  );
327
336
  const pointClickable = selectable || !!onPointClick;
337
+ const trackPointHover = showTooltip || hoverable;
328
338
  const reversedSeriesData = useMemo(() => [...seriesData].reverse(), [seriesData]);
329
339
  const chart = /* @__PURE__ */ jsxs(
330
340
  ChartCanvas,
@@ -336,6 +346,7 @@ var AreaChart = ({
336
346
  title,
337
347
  desc,
338
348
  className: classNames(className),
349
+ onResolvedSizeChange,
339
350
  children: [
340
351
  (gradient || animated || strokeGradient || pointGradient) && /* @__PURE__ */ jsxs("defs", { children: [
341
352
  animated && /* @__PURE__ */ jsx("style", { children: `
@@ -518,9 +529,9 @@ var AreaChart = ({
518
529
  tabIndex: pointInteractive ? 0 : void 0,
519
530
  "data-point-index": point.pointIndex,
520
531
  "data-series-key": sd.seriesKey,
521
- onMouseEnter: hoverable ? (e) => handlePointMouseEnter(sd.seriesIndex, point.pointIndex, e) : void 0,
522
- onMouseMove: hoverable ? handlePointMouseMove : void 0,
523
- onMouseLeave: hoverable ? handlePointMouseLeave : void 0,
532
+ onMouseEnter: trackPointHover ? (e) => handlePointMouseEnter(sd.seriesIndex, point.pointIndex, e) : void 0,
533
+ onMouseMove: trackPointHover ? handlePointMouseMove : void 0,
534
+ onMouseLeave: trackPointHover ? handlePointMouseLeave : void 0,
524
535
  onClick: pointClickable ? (e) => {
525
536
  e.stopPropagation();
526
537
  handlePointClick(sd.seriesIndex, point.pointIndex);
@@ -44,6 +44,7 @@ var DropdownMenu = ({
44
44
  var DropdownItem = ({
45
45
  disabled = false,
46
46
  divided = false,
47
+ closeOnClick,
47
48
  className,
48
49
  onClick,
49
50
  children,
@@ -56,8 +57,9 @@ var DropdownItem = ({
56
57
  return;
57
58
  }
58
59
  onClick?.(event);
59
- if (context?.closeOnClick) {
60
- context.handleItemClick();
60
+ const shouldClose = closeOnClick ?? context?.closeOnClick ?? true;
61
+ if (shouldClose) {
62
+ context?.handleItemClick();
61
63
  }
62
64
  };
63
65
  const itemClasses = classNames(getDropdownItemClasses(disabled, divided), className);
@@ -129,10 +131,8 @@ var Dropdown = ({
129
131
  [disabled, visible, controlledOpen, onOpenChange]
130
132
  );
131
133
  const handleItemClick = useCallback(() => {
132
- if (closeOnClick) {
133
- setVisible(false);
134
- }
135
- }, [closeOnClick, setVisible]);
134
+ setVisible(false);
135
+ }, [setVisible]);
136
136
  const handleMouseEnter = useCallback(() => {
137
137
  if (trigger !== "hover") return;
138
138
  if (hoverTimerRef.current) {