@expcat/tigercat-core 1.2.23 → 1.2.31

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/index.cjs CHANGED
@@ -2973,21 +2973,25 @@ var ZH_CN_FORM_WIZARD_LABELS = {
2973
2973
  finishText: "\u5B8C\u6210"
2974
2974
  };
2975
2975
  function getFormWizardLabels(locale) {
2976
+ const isZh = locale?.locale?.startsWith("zh");
2977
+ const defaultLabels = isZh ? ZH_CN_FORM_WIZARD_LABELS : DEFAULT_FORM_WIZARD_LABELS;
2976
2978
  return {
2977
- prevText: locale?.formWizard?.prevText ?? DEFAULT_FORM_WIZARD_LABELS.prevText,
2978
- nextText: locale?.formWizard?.nextText ?? DEFAULT_FORM_WIZARD_LABELS.nextText,
2979
- finishText: locale?.formWizard?.finishText ?? DEFAULT_FORM_WIZARD_LABELS.finishText
2979
+ prevText: locale?.formWizard?.prevText ?? defaultLabels.prevText,
2980
+ nextText: locale?.formWizard?.nextText ?? defaultLabels.nextText,
2981
+ finishText: locale?.formWizard?.finishText ?? defaultLabels.finishText
2980
2982
  };
2981
2983
  }
2982
2984
  function getPaginationLabels(locale) {
2985
+ const isZh = !!locale?.locale?.startsWith("zh") || locale?.formWizard?.prevText === "\u4E0A\u4E00\u6B65" || locale?.upload?.clickToUploadText === "\u70B9\u51FB\u4E0A\u4F20";
2986
+ const defaultLabels = isZh ? ZH_CN_PAGINATION_LABELS : DEFAULT_PAGINATION_LABELS;
2983
2987
  return {
2984
- totalText: locale?.pagination?.totalText ?? DEFAULT_PAGINATION_LABELS.totalText,
2985
- itemsPerPageText: locale?.pagination?.itemsPerPageText ?? DEFAULT_PAGINATION_LABELS.itemsPerPageText,
2986
- jumpToText: locale?.pagination?.jumpToText ?? DEFAULT_PAGINATION_LABELS.jumpToText,
2987
- pageText: locale?.pagination?.pageText ?? DEFAULT_PAGINATION_LABELS.pageText,
2988
- prevPageAriaLabel: locale?.pagination?.prevPageAriaLabel ?? DEFAULT_PAGINATION_LABELS.prevPageAriaLabel,
2989
- nextPageAriaLabel: locale?.pagination?.nextPageAriaLabel ?? DEFAULT_PAGINATION_LABELS.nextPageAriaLabel,
2990
- pageAriaLabel: locale?.pagination?.pageAriaLabel ?? DEFAULT_PAGINATION_LABELS.pageAriaLabel
2988
+ totalText: locale?.pagination?.totalText ?? defaultLabels.totalText,
2989
+ itemsPerPageText: locale?.pagination?.itemsPerPageText ?? defaultLabels.itemsPerPageText,
2990
+ jumpToText: locale?.pagination?.jumpToText ?? defaultLabels.jumpToText,
2991
+ pageText: locale?.pagination?.pageText ?? defaultLabels.pageText,
2992
+ prevPageAriaLabel: locale?.pagination?.prevPageAriaLabel ?? defaultLabels.prevPageAriaLabel,
2993
+ nextPageAriaLabel: locale?.pagination?.nextPageAriaLabel ?? defaultLabels.nextPageAriaLabel,
2994
+ pageAriaLabel: locale?.pagination?.pageAriaLabel ?? defaultLabels.pageAriaLabel
2991
2995
  };
2992
2996
  }
2993
2997
  function formatPaginationTotal(template, total, range, locale) {
@@ -3012,12 +3016,14 @@ var ZH_CN_TASK_BOARD_LABELS = {
3012
3016
  boardAriaLabel: "\u4EFB\u52A1\u770B\u677F"
3013
3017
  };
3014
3018
  function getTaskBoardLabels(locale) {
3019
+ const isZh = locale?.locale?.startsWith("zh");
3020
+ const defaultLabels = isZh ? ZH_CN_TASK_BOARD_LABELS : DEFAULT_TASK_BOARD_LABELS;
3015
3021
  return {
3016
- emptyColumnText: locale?.taskBoard?.emptyColumnText ?? DEFAULT_TASK_BOARD_LABELS.emptyColumnText,
3017
- addCardText: locale?.taskBoard?.addCardText ?? DEFAULT_TASK_BOARD_LABELS.addCardText,
3018
- wipLimitText: locale?.taskBoard?.wipLimitText ?? DEFAULT_TASK_BOARD_LABELS.wipLimitText,
3019
- dragHintText: locale?.taskBoard?.dragHintText ?? DEFAULT_TASK_BOARD_LABELS.dragHintText,
3020
- boardAriaLabel: locale?.taskBoard?.boardAriaLabel ?? DEFAULT_TASK_BOARD_LABELS.boardAriaLabel
3022
+ emptyColumnText: locale?.taskBoard?.emptyColumnText ?? defaultLabels.emptyColumnText,
3023
+ addCardText: locale?.taskBoard?.addCardText ?? defaultLabels.addCardText,
3024
+ wipLimitText: locale?.taskBoard?.wipLimitText ?? defaultLabels.wipLimitText,
3025
+ dragHintText: locale?.taskBoard?.dragHintText ?? defaultLabels.dragHintText,
3026
+ boardAriaLabel: locale?.taskBoard?.boardAriaLabel ?? defaultLabels.boardAriaLabel
3021
3027
  };
3022
3028
  }
3023
3029
 
@@ -7196,7 +7202,7 @@ function getStepsContainerClasses(direction) {
7196
7202
  return `${baseClasses2} flex flex-row items-start`;
7197
7203
  }
7198
7204
  function getStepItemClasses(direction, isLast) {
7199
- const baseClasses2 = "tiger-step-item relative";
7205
+ const baseClasses2 = "tiger-step-item relative group";
7200
7206
  if (direction === "vertical") {
7201
7207
  return `${baseClasses2} flex flex-row ${!isLast ? "pb-6" : ""}`;
7202
7208
  }
@@ -7206,12 +7212,12 @@ function getStepIconClasses(status, size, simple, isCustomIcon) {
7206
7212
  const baseClasses2 = "tiger-step-icon relative z-10 flex items-center justify-center rounded-full border-2";
7207
7213
  const sizeClasses3 = simple ? "w-6 h-6 text-xs" : size === "small" ? "w-8 h-8 text-sm" : "w-10 h-10 text-base";
7208
7214
  const iconClasses = isCustomIcon ? "" : "font-medium";
7209
- const activeClasses = "bg-[var(--tiger-primary,#2563eb)] border-[var(--tiger-primary,#2563eb)] text-white";
7215
+ const activeClasses = "bg-[var(--tiger-primary,#2563eb)] border-[var(--tiger-primary,#2563eb)] text-white ring-4 ring-[var(--tiger-primary,#2563eb)]/15 scale-105 shadow-sm transition-all duration-300";
7210
7216
  const statusClasses = {
7211
- wait: "bg-[var(--tiger-surface-muted,#f3f4f6)] border-[var(--tiger-border,#e5e7eb)] text-[var(--tiger-text-muted,#6b7280)]",
7217
+ wait: "bg-[var(--tiger-surface-muted,#f3f4f6)] border-[var(--tiger-border,#e5e7eb)] text-[var(--tiger-text-muted,#6b7280)] transition-all duration-300 group-hover:border-[var(--tiger-primary,#2563eb)]/60 group-hover:text-[var(--tiger-primary,#2563eb)]/80",
7212
7218
  process: activeClasses,
7213
- finish: activeClasses,
7214
- error: "bg-[var(--tiger-error-bg,#fef2f2)] border-[var(--tiger-error,#ef4444)] text-[var(--tiger-error,#ef4444)]"
7219
+ finish: "bg-[var(--tiger-primary,#2563eb)] border-[var(--tiger-primary,#2563eb)] text-white shadow-sm transition-all duration-300 group-hover:scale-105 group-hover:bg-[var(--tiger-primary-hover,#0369a1)]",
7220
+ error: "bg-[var(--tiger-error-bg,#fef2f2)] border-[var(--tiger-error,#ef4444)] text-[var(--tiger-error,#ef4444)] transition-all duration-300"
7215
7221
  };
7216
7222
  return `${baseClasses2} ${sizeClasses3} ${iconClasses} ${statusClasses[status]}`;
7217
7223
  }
@@ -7236,9 +7242,9 @@ function getStepTitleClasses(status, size, clickable) {
7236
7242
  const baseClasses2 = "tiger-step-title font-medium";
7237
7243
  const sizeClasses3 = size === "small" ? "text-sm" : "text-base";
7238
7244
  const statusClasses = {
7239
- wait: "text-[var(--tiger-text-muted,#6b7280)]",
7240
- process: "text-[var(--tiger-text,#111827)]",
7241
- finish: "text-[var(--tiger-text,#111827)]",
7245
+ wait: "text-[var(--tiger-text-muted,#6b7280)] transition-colors duration-300 group-hover:text-[var(--tiger-text,#111827)]",
7246
+ process: "text-[var(--tiger-text,#111827)] font-semibold transition-colors duration-300",
7247
+ finish: "text-[var(--tiger-text,#111827)] transition-colors duration-300 group-hover:text-[var(--tiger-primary,#2563eb)]",
7242
7248
  error: "text-[var(--tiger-error,#ef4444)]"
7243
7249
  };
7244
7250
  const cursorClasses = clickable ? "bg-transparent border-0 p-0 cursor-pointer hover:text-[var(--tiger-primary,#2563eb)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--tiger-primary,#2563eb)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--tiger-surface,#ffffff)]" : "";
@@ -8782,29 +8788,29 @@ var imagePreviewToolbarBtnClasses = "flex items-center justify-center w-8 h-8 ro
8782
8788
  var imagePreviewNavBtnClasses = "absolute top-1/2 -translate-y-1/2 flex items-center justify-center w-10 h-10 rounded-full bg-[var(--tiger-image-toolbar-bg,rgba(0,0,0,0.6))] text-white hover:bg-white/20 transition-colors focus:outline-none focus:ring-2 focus:ring-white/50 disabled:opacity-40 disabled:cursor-not-allowed";
8783
8789
  var imagePreviewCloseBtnClasses = "absolute top-4 right-4 flex items-center justify-center w-10 h-10 rounded-full bg-[var(--tiger-image-toolbar-bg,rgba(0,0,0,0.6))] text-white hover:bg-white/20 transition-colors focus:outline-none focus:ring-2 focus:ring-white/50";
8784
8790
  var imagePreviewCounterClasses = "text-sm text-white/80 mx-2 tabular-nums";
8785
- var imageCropperContainerClasses = "relative overflow-hidden bg-[var(--tiger-image-cropper-bg,#1a1a2e)] select-none touch-none";
8791
+ var imageCropperContainerClasses = "relative overflow-hidden bg-[var(--tiger-image-cropper-bg,#0f172a)] rounded-[var(--tiger-radius-lg,0.75rem)] select-none touch-none shadow-inner border border-white/10 tiger-image-cropper-checkerboard";
8786
8792
  var imageCropperImgClasses = "absolute top-0 left-0 max-w-none pointer-events-none";
8787
8793
  var imageCropperMaskClasses = "absolute inset-0 pointer-events-none";
8788
- var imageCropperSelectionClasses = "absolute border-2 border-[var(--tiger-image-cropper-border,#ffffff)] pointer-events-none";
8789
- var imageCropperGuideClasses = "absolute border-[var(--tiger-image-cropper-border,rgba(255,255,255,0.4))] pointer-events-none";
8794
+ var imageCropperSelectionClasses = "absolute border-2 border-[var(--tiger-image-cropper-border,#ffffff)] pointer-events-none shadow-[0_0_0_9999px_rgba(0,0,0,0.65),0_0_15px_rgba(255,255,255,0.4)] transition-shadow duration-300";
8795
+ var imageCropperGuideClasses = "absolute border-[var(--tiger-image-cropper-border,rgba(255,255,255,0.25))] pointer-events-none opacity-40 transition-opacity duration-300";
8790
8796
  var imageCropperDragAreaClasses = "absolute cursor-move";
8791
8797
  function getCropperHandleClasses(handle) {
8792
- const base = "absolute w-3 h-3 bg-[var(--tiger-image-cropper-border,#ffffff)] border border-[var(--tiger-image-cropper-handle-border,rgba(0,0,0,0.3))]";
8798
+ const base = "absolute w-3.5 h-3.5 rounded-full bg-white border-2 border-[var(--tiger-primary,#2563eb)] shadow-md hover:scale-125 hover:bg-[var(--tiger-primary,#2563eb)] hover:border-white transition-all duration-200 cursor-pointer focus:outline-none focus:ring-2 focus:ring-[var(--tiger-primary,#2563eb)]";
8793
8799
  const positionMap = {
8794
- nw: "-top-1.5 -left-1.5 cursor-nw-resize",
8795
- n: "-top-1.5 left-1/2 -translate-x-1/2 cursor-n-resize",
8796
- ne: "-top-1.5 -right-1.5 cursor-ne-resize",
8797
- e: "top-1/2 -right-1.5 -translate-y-1/2 cursor-e-resize",
8798
- se: "-bottom-1.5 -right-1.5 cursor-se-resize",
8799
- s: "-bottom-1.5 left-1/2 -translate-x-1/2 cursor-s-resize",
8800
- sw: "-bottom-1.5 -left-1.5 cursor-sw-resize",
8801
- w: "top-1/2 -left-1.5 -translate-y-1/2 cursor-w-resize"
8800
+ nw: "-top-1.75 -left-1.75 cursor-nw-resize",
8801
+ n: "-top-1.75 left-1/2 -translate-x-1/2 cursor-n-resize",
8802
+ ne: "-top-1.75 -right-1.75 cursor-ne-resize",
8803
+ e: "top-1/2 -right-1.75 -translate-y-1/2 cursor-e-resize",
8804
+ se: "-bottom-1.75 -right-1.75 cursor-se-resize",
8805
+ s: "-bottom-1.75 left-1/2 -translate-x-1/2 cursor-s-resize",
8806
+ sw: "-bottom-1.75 -left-1.75 cursor-sw-resize",
8807
+ w: "top-1/2 -left-1.75 -translate-y-1/2 cursor-w-resize"
8802
8808
  };
8803
8809
  return classNames(base, positionMap[handle]);
8804
8810
  }
8805
8811
  var CROP_HANDLES = ["nw", "n", "ne", "e", "se", "s", "sw", "w"];
8806
- var cropUploadTriggerClasses = "inline-flex items-center justify-center gap-2 px-4 py-2 border-2 border-dashed border-[var(--tiger-border,#d1d5db)] rounded-[var(--tiger-radius-md,0.5rem)] text-[var(--tiger-text-muted,#6b7280)] hover:border-[var(--tiger-primary,#2563eb)] hover:text-[var(--tiger-primary,#2563eb)] transition-colors cursor-pointer focus:outline-none focus:ring-2 focus:ring-[var(--tiger-primary,#2563eb)] focus:ring-offset-2";
8807
- var cropUploadTriggerDisabledClasses = "inline-flex items-center justify-center gap-2 px-4 py-2 border-2 border-dashed border-[var(--tiger-border,#d1d5db)] rounded-[var(--tiger-radius-md,0.5rem)] text-[var(--tiger-text-muted,#9ca3af)] cursor-not-allowed opacity-50";
8812
+ var cropUploadTriggerClasses = "inline-flex items-center justify-center gap-2.5 px-5 py-2.5 border-2 border-dashed border-[var(--tiger-border,#d1d5db)] rounded-[var(--tiger-radius-lg,0.75rem)] text-[var(--tiger-text-secondary,#4b5563)] bg-[var(--tiger-surface-muted,#f9fafb)] hover:bg-[var(--tiger-surface,#ffffff)] hover:border-[var(--tiger-primary,#2563eb)] hover:text-[var(--tiger-primary,#2563eb)] hover:scale-[1.02] active:scale-[0.98] hover:shadow-md transition-all duration-300 ease-out cursor-pointer focus:outline-none focus:ring-2 focus:ring-[var(--tiger-primary,#2563eb)] focus:ring-offset-2 dark:bg-neutral-900 dark:hover:bg-neutral-800";
8813
+ var cropUploadTriggerDisabledClasses = "inline-flex items-center justify-center gap-2.5 px-5 py-2.5 border-2 border-dashed border-[var(--tiger-border,#d1d5db)] rounded-[var(--tiger-radius-lg,0.75rem)] text-[var(--tiger-text-disabled,#9ca3af)] bg-[var(--tiger-surface-muted,#f9fafb)] cursor-not-allowed opacity-60 dark:bg-neutral-900/50";
8808
8814
  var uploadPlusIconPath = "M12 4v16m8-8H4";
8809
8815
  function clampScale(scale, min, max) {
8810
8816
  return Math.min(Math.max(scale, min), max);
@@ -11866,18 +11872,18 @@ function createCountdownPayload(remaining, format = COUNTDOWN_DEFAULT_FORMAT) {
11866
11872
  }
11867
11873
 
11868
11874
  // src/utils/task-board-utils.ts
11869
- var taskBoardBaseClasses = "tiger-task-board flex gap-4 overflow-x-auto p-4 min-h-[400px]";
11870
- var taskBoardColumnClasses = "tiger-task-board-column flex flex-col shrink-0 w-72 rounded-[var(--tiger-radius-md,0.5rem)] border border-[var(--tiger-border,#e5e7eb)] bg-[var(--tiger-surface,#ffffff)] shadow-sm transition-shadow";
11871
- var taskBoardColumnHeaderClasses = "flex items-center justify-between px-3 py-2 border-b border-[var(--tiger-border,#e5e7eb)] text-sm font-semibold text-[var(--tiger-text,#1f2937)] select-none";
11872
- var taskBoardColumnBodyClasses = "flex-1 overflow-y-auto p-2 space-y-2 min-h-[80px]";
11873
- var taskBoardCardClasses = "tiger-task-board-card rounded-[var(--tiger-radius-md,0.5rem)] border border-[var(--tiger-border,#e5e7eb)] bg-[var(--tiger-surface,#ffffff)] p-3 shadow-sm cursor-grab select-none transition-opacity";
11874
- var taskBoardCardDraggingClasses = "opacity-50 shadow-lg";
11875
- var taskBoardDropIndicatorClasses = "h-1 rounded-full bg-[var(--tiger-primary,#2563eb)] my-1 transition-all";
11876
- var taskBoardColumnDropTargetClasses = "ring-2 ring-[var(--tiger-primary,#2563eb)] ring-opacity-50";
11875
+ var taskBoardBaseClasses = "tiger-task-board flex gap-5 overflow-x-auto p-6 min-h-[450px] scroll-smooth antialiased";
11876
+ var taskBoardColumnClasses = "tiger-task-board-column flex flex-col shrink-0 w-76 rounded-[var(--tiger-radius-lg,0.75rem)] border border-[var(--tiger-border,#e5e7eb)]/80 bg-[var(--tiger-surface-muted,#f9fafb)] shadow-xs transition-all duration-300 hover:shadow-md";
11877
+ var taskBoardColumnHeaderClasses = "flex items-center justify-between px-4 py-3.5 border-b border-[var(--tiger-border,#e5e7eb)]/60 text-sm font-semibold text-[var(--tiger-text,#1f2937)] select-none transition-colors";
11878
+ var taskBoardColumnBodyClasses = "flex-1 overflow-y-auto p-3 space-y-3 min-h-[100px] transition-colors";
11879
+ var taskBoardCardClasses = "tiger-task-board-card rounded-[var(--tiger-radius-md,0.5rem)] border border-[var(--tiger-border,#e5e7eb)]/80 bg-[var(--tiger-surface,#ffffff)] p-4 shadow-[0_1px_3px_rgba(0,0,0,0.04),_0_1px_2px_rgba(0,0,0,0.02)] cursor-grab select-none transition-all duration-200 hover:-translate-y-0.5 hover:shadow-md hover:border-[var(--tiger-primary,#2563eb)]/30 active:cursor-grabbing";
11880
+ var taskBoardCardDraggingClasses = "opacity-40 shadow-xl scale-[0.98] rotate-1";
11881
+ var taskBoardDropIndicatorClasses = "h-1.5 rounded-full bg-[var(--tiger-primary,#2563eb)] my-2 shadow-[0_0_8px_var(--tiger-primary,#2563eb)] transition-all duration-200";
11882
+ var taskBoardColumnDropTargetClasses = "ring-2 ring-[var(--tiger-primary,#2563eb)]/60 bg-[color-mix(in_srgb,var(--tiger-primary,#2563eb)_4%,transparent)]";
11877
11883
  var taskBoardColumnDraggingClasses = "opacity-50";
11878
11884
  var taskBoardEmptyClasses = "flex items-center justify-center text-[var(--tiger-text-muted,#6b7280)] text-sm py-8";
11879
11885
  var taskBoardWipExceededClasses = "text-[var(--tiger-error,#ef4444)]";
11880
- var taskBoardAddCardClasses = "flex items-center justify-center gap-1 w-full py-1.5 text-sm text-[var(--tiger-text-muted,#6b7280)] hover:text-[var(--tiger-primary,#2563eb)] hover:bg-[var(--tiger-surface-muted,#f9fafb)] rounded transition-colors cursor-pointer";
11886
+ var taskBoardAddCardClasses = "flex items-center justify-center gap-1.5 w-[calc(100%-16px)] mx-2 my-2 py-2.5 text-xs font-semibold text-[var(--tiger-text-muted,#6b7280)] border border-dashed border-[var(--tiger-border,#e5e7eb)] hover:border-[var(--tiger-primary,#2563eb)] hover:text-[var(--tiger-primary,#2563eb)] hover:bg-[var(--tiger-surface,#ffffff)] hover:shadow-xs rounded-[var(--tiger-radius-md,0.5rem)] transition-all duration-200 cursor-pointer active:scale-98";
11881
11887
  var MIME = "text/plain";
11882
11888
  function createCardDragData(cardId, columnId, index) {
11883
11889
  const data = { type: "card", cardId, columnId, index };
@@ -15584,13 +15590,13 @@ function createBuiltinRichTextEngine() {
15584
15590
  var builtinRichTextEngine = createBuiltinRichTextEngine();
15585
15591
 
15586
15592
  // src/utils/kanban-utils.ts
15587
- var kanbanCardCountClasses = "inline-flex items-center justify-center h-5 min-w-[20px] px-1.5 rounded-full text-xs font-medium bg-[var(--tiger-bg-secondary,#f3f4f6)] text-[var(--tiger-text-secondary,#6b7280)]";
15593
+ var kanbanCardCountClasses = "inline-flex items-center justify-center h-5 min-w-[22px] px-2 rounded-full text-xs font-semibold bg-[var(--tiger-border,#e5e7eb)]/60 text-[var(--tiger-text-secondary,#6b7280)]/90 backdrop-blur-xs shadow-inner";
15588
15594
  var kanbanSwimlaneClasses = "border-b border-[var(--tiger-border,#e5e7eb)] last:border-b-0";
15589
15595
  var kanbanSwimlaneHeaderClasses = "flex items-center gap-2 px-4 py-2 text-sm font-medium text-[var(--tiger-text,#1f2937)] cursor-pointer select-none hover:bg-[var(--tiger-bg-hover,#f9fafb)]";
15590
15596
  var kanbanSwimlaneDotClasses = "w-2.5 h-2.5 rounded-full shrink-0";
15591
15597
  var kanbanSwimlaneCollapsedClasses = "hidden";
15592
15598
  var kanbanFilterHighlightClasses = "bg-[var(--tiger-warning,#fbbf24)]/20";
15593
- var kanbanAddColumnClasses = "flex items-center justify-center shrink-0 w-72 min-h-[80px] rounded-[var(--tiger-radius-md,0.5rem)] border-2 border-dashed border-[var(--tiger-border,#d1d5db)] text-[var(--tiger-text-muted,#9ca3af)] hover:border-[var(--tiger-primary,#2563eb)] hover:text-[var(--tiger-primary,#2563eb)] cursor-pointer transition-colors";
15599
+ var kanbanAddColumnClasses = "flex items-center justify-center shrink-0 w-76 min-h-[120px] rounded-[var(--tiger-radius-lg,0.75rem)] border-2 border-dashed border-[var(--tiger-border,#e5e7eb)] bg-[var(--tiger-surface-muted,#f9fafb)]/40 text-sm font-medium text-[var(--tiger-text-muted,#6b7280)] hover:border-[var(--tiger-primary,#2563eb)]/80 hover:text-[var(--tiger-primary,#2563eb)] hover:bg-[var(--tiger-surface,#ffffff)] hover:shadow-sm cursor-pointer transition-all duration-300 active:scale-98";
15594
15600
  var kanbanAddCardClasses = taskBoardAddCardClasses;
15595
15601
  function filterCards(cards, filterText) {
15596
15602
  if (!filterText.trim()) return cards;
package/dist/index.d.cts CHANGED
@@ -6,8 +6,8 @@ import { a as TigerLocaleInput, b as TigerLocaleLazyModule, c as TigerLocaleLoad
6
6
  export { h as TigerLocaleCommon, j as TigerLocaleDrawer, i as TigerLocaleModal, k as TigerLocaleUpload } from './locale-9-B-d0mp.cjs';
7
7
  import { D as DatePickerLocalePreset, a as DatePickerLocaleInput, b as DatePickerLabels, c as DateFormat, d as DatePickerSize } from './datepicker-DXzS_8l8.cjs';
8
8
  export { e as DatePickerInputDate, k as DatePickerLocaleConfig, h as DatePickerModelValue, l as DatePickerProps, g as DatePickerRangeModelValue, j as DatePickerRangeValue, m as DatePickerShortcut, f as DatePickerSingleModelValue, i as DatePickerSingleValue } from './datepicker-DXzS_8l8.cjs';
9
- import { T as TableResponsiveMode, a as TableColumn, b as TableSize, C as ColumnAlign, S as SortDirection, F as FilterOption, c as TableProps, P as PaginationConfig, d as FilterRule, e as ColumnFilter, f as SortState } from './table-export-6ISYSoVB.cjs';
10
- export { E as ExpandableConfig, n as FilterType, R as RowSelectionConfig, m as TableExportFormat, i as downloadCsv, j as downloadExcel, l as downloadTableExport, k as exportTableData, g as exportTableToCsv, h as exportTableToExcel, t as tableExportButtonClasses } from './table-export-6ISYSoVB.cjs';
9
+ import { T as TableResponsiveMode, a as TableColumn, b as TableSize, C as ColumnAlign, S as SortDirection, F as FilterOption, c as TableProps, P as PaginationConfig, d as FilterRule, e as ColumnFilter, f as SortState } from './table-export-D7_CDqY7.cjs';
10
+ export { E as ExpandableConfig, n as FilterType, R as RowSelectionConfig, m as TableExportFormat, i as downloadCsv, j as downloadExcel, l as downloadTableExport, k as exportTableData, g as exportTableToCsv, h as exportTableToExcel, t as tableExportButtonClasses } from './table-export-D7_CDqY7.cjs';
11
11
  import { Middleware, MiddlewareData } from '@floating-ui/dom';
12
12
  import { T as ThemePreset, C as ColorScheme } from './tailwind-entry-DUchHtjs.cjs';
13
13
  export { a as ThemeColorScale, h as ThemeConfig, g as ThemeMotion, i as ThemePresetName, d as ThemeRadius, b as ThemeSemanticColors, e as ThemeShadows, f as ThemeSpacing, c as ThemeTypography, l as TigercatPluginOptions, m as createTigercatPlugin, j as tigercatDarkTheme, k as tigercatPlugin, t as tigercatTheme } from './tailwind-entry-DUchHtjs.cjs';
@@ -8344,7 +8344,7 @@ declare const imagePreviewCounterClasses = "text-sm text-white/80 mx-2 tabular-n
8344
8344
  /**
8345
8345
  * Cropper container classes
8346
8346
  */
8347
- declare const imageCropperContainerClasses = "relative overflow-hidden bg-[var(--tiger-image-cropper-bg,#1a1a2e)] select-none touch-none";
8347
+ declare const imageCropperContainerClasses = "relative overflow-hidden bg-[var(--tiger-image-cropper-bg,#0f172a)] rounded-[var(--tiger-radius-lg,0.75rem)] select-none touch-none shadow-inner border border-white/10 tiger-image-cropper-checkerboard";
8348
8348
  /**
8349
8349
  * Cropper image classes (the source image)
8350
8350
  */
@@ -8356,11 +8356,11 @@ declare const imageCropperMaskClasses = "absolute inset-0 pointer-events-none";
8356
8356
  /**
8357
8357
  * Cropper selection border classes (the crop box border)
8358
8358
  */
8359
- declare const imageCropperSelectionClasses = "absolute border-2 border-[var(--tiger-image-cropper-border,#ffffff)] pointer-events-none";
8359
+ declare const imageCropperSelectionClasses = "absolute border-2 border-[var(--tiger-image-cropper-border,#ffffff)] pointer-events-none shadow-[0_0_0_9999px_rgba(0,0,0,0.65),0_0_15px_rgba(255,255,255,0.4)] transition-shadow duration-300";
8360
8360
  /**
8361
8361
  * Cropper guide line classes
8362
8362
  */
8363
- declare const imageCropperGuideClasses = "absolute border-[var(--tiger-image-cropper-border,rgba(255,255,255,0.4))] pointer-events-none";
8363
+ declare const imageCropperGuideClasses = "absolute border-[var(--tiger-image-cropper-border,rgba(255,255,255,0.25))] pointer-events-none opacity-40 transition-opacity duration-300";
8364
8364
  /**
8365
8365
  * Cropper drag area classes (inside the crop box, handles moving)
8366
8366
  */
@@ -8376,11 +8376,11 @@ declare const CROP_HANDLES: CropHandle[];
8376
8376
  /**
8377
8377
  * CropUpload trigger button classes
8378
8378
  */
8379
- declare const cropUploadTriggerClasses = "inline-flex items-center justify-center gap-2 px-4 py-2 border-2 border-dashed border-[var(--tiger-border,#d1d5db)] rounded-[var(--tiger-radius-md,0.5rem)] text-[var(--tiger-text-muted,#6b7280)] hover:border-[var(--tiger-primary,#2563eb)] hover:text-[var(--tiger-primary,#2563eb)] transition-colors cursor-pointer focus:outline-none focus:ring-2 focus:ring-[var(--tiger-primary,#2563eb)] focus:ring-offset-2";
8379
+ declare const cropUploadTriggerClasses = "inline-flex items-center justify-center gap-2.5 px-5 py-2.5 border-2 border-dashed border-[var(--tiger-border,#d1d5db)] rounded-[var(--tiger-radius-lg,0.75rem)] text-[var(--tiger-text-secondary,#4b5563)] bg-[var(--tiger-surface-muted,#f9fafb)] hover:bg-[var(--tiger-surface,#ffffff)] hover:border-[var(--tiger-primary,#2563eb)] hover:text-[var(--tiger-primary,#2563eb)] hover:scale-[1.02] active:scale-[0.98] hover:shadow-md transition-all duration-300 ease-out cursor-pointer focus:outline-none focus:ring-2 focus:ring-[var(--tiger-primary,#2563eb)] focus:ring-offset-2 dark:bg-neutral-900 dark:hover:bg-neutral-800";
8380
8380
  /**
8381
8381
  * CropUpload disabled trigger classes
8382
8382
  */
8383
- declare const cropUploadTriggerDisabledClasses = "inline-flex items-center justify-center gap-2 px-4 py-2 border-2 border-dashed border-[var(--tiger-border,#d1d5db)] rounded-[var(--tiger-radius-md,0.5rem)] text-[var(--tiger-text-muted,#9ca3af)] cursor-not-allowed opacity-50";
8383
+ declare const cropUploadTriggerDisabledClasses = "inline-flex items-center justify-center gap-2.5 px-5 py-2.5 border-2 border-dashed border-[var(--tiger-border,#d1d5db)] rounded-[var(--tiger-radius-lg,0.75rem)] text-[var(--tiger-text-disabled,#9ca3af)] bg-[var(--tiger-surface-muted,#f9fafb)] cursor-not-allowed opacity-60 dark:bg-neutral-900/50";
8384
8384
  /**
8385
8385
  * Upload icon path (plus sign in a frame)
8386
8386
  */
@@ -13101,6 +13101,11 @@ interface FormWizardProps {
13101
13101
  * @default false
13102
13102
  */
13103
13103
  simple?: boolean;
13104
+ /**
13105
+ * Whether to show border around the wizard card
13106
+ * @default true
13107
+ */
13108
+ bordered?: boolean;
13104
13109
  /**
13105
13110
  * Whether to show steps header
13106
13111
  * @default true
@@ -13423,21 +13428,21 @@ declare function formatCountdown(remaining: number, format?: string): string;
13423
13428
  declare function createCountdownPayload(remaining: number, format?: string): CountdownChangePayload;
13424
13429
 
13425
13430
  /** Root wrapper — horizontal scroll container */
13426
- declare const taskBoardBaseClasses = "tiger-task-board flex gap-4 overflow-x-auto p-4 min-h-[400px]";
13431
+ declare const taskBoardBaseClasses = "tiger-task-board flex gap-5 overflow-x-auto p-6 min-h-[450px] scroll-smooth antialiased";
13427
13432
  /** Single column shell */
13428
- declare const taskBoardColumnClasses = "tiger-task-board-column flex flex-col shrink-0 w-72 rounded-[var(--tiger-radius-md,0.5rem)] border border-[var(--tiger-border,#e5e7eb)] bg-[var(--tiger-surface,#ffffff)] shadow-sm transition-shadow";
13433
+ declare const taskBoardColumnClasses = "tiger-task-board-column flex flex-col shrink-0 w-76 rounded-[var(--tiger-radius-lg,0.75rem)] border border-[var(--tiger-border,#e5e7eb)]/80 bg-[var(--tiger-surface-muted,#f9fafb)] shadow-xs transition-all duration-300 hover:shadow-md";
13429
13434
  /** Column header (sticky, never scrolls) */
13430
- declare const taskBoardColumnHeaderClasses = "flex items-center justify-between px-3 py-2 border-b border-[var(--tiger-border,#e5e7eb)] text-sm font-semibold text-[var(--tiger-text,#1f2937)] select-none";
13435
+ declare const taskBoardColumnHeaderClasses = "flex items-center justify-between px-4 py-3.5 border-b border-[var(--tiger-border,#e5e7eb)]/60 text-sm font-semibold text-[var(--tiger-text,#1f2937)] select-none transition-colors";
13431
13436
  /** Scrollable card area */
13432
- declare const taskBoardColumnBodyClasses = "flex-1 overflow-y-auto p-2 space-y-2 min-h-[80px]";
13437
+ declare const taskBoardColumnBodyClasses = "flex-1 overflow-y-auto p-3 space-y-3 min-h-[100px] transition-colors";
13433
13438
  /** Card base styles */
13434
- declare const taskBoardCardClasses = "tiger-task-board-card rounded-[var(--tiger-radius-md,0.5rem)] border border-[var(--tiger-border,#e5e7eb)] bg-[var(--tiger-surface,#ffffff)] p-3 shadow-sm cursor-grab select-none transition-opacity";
13439
+ declare const taskBoardCardClasses = "tiger-task-board-card rounded-[var(--tiger-radius-md,0.5rem)] border border-[var(--tiger-border,#e5e7eb)]/80 bg-[var(--tiger-surface,#ffffff)] p-4 shadow-[0_1px_3px_rgba(0,0,0,0.04),_0_1px_2px_rgba(0,0,0,0.02)] cursor-grab select-none transition-all duration-200 hover:-translate-y-0.5 hover:shadow-md hover:border-[var(--tiger-primary,#2563eb)]/30 active:cursor-grabbing";
13435
13440
  /** Card while being dragged */
13436
- declare const taskBoardCardDraggingClasses = "opacity-50 shadow-lg";
13441
+ declare const taskBoardCardDraggingClasses = "opacity-40 shadow-xl scale-[0.98] rotate-1";
13437
13442
  /** Thin line indicating the drop position */
13438
- declare const taskBoardDropIndicatorClasses = "h-1 rounded-full bg-[var(--tiger-primary,#2563eb)] my-1 transition-all";
13443
+ declare const taskBoardDropIndicatorClasses = "h-1.5 rounded-full bg-[var(--tiger-primary,#2563eb)] my-2 shadow-[0_0_8px_var(--tiger-primary,#2563eb)] transition-all duration-200";
13439
13444
  /** Column highlighted when a card hovers over it */
13440
- declare const taskBoardColumnDropTargetClasses = "ring-2 ring-[var(--tiger-primary,#2563eb)] ring-opacity-50";
13445
+ declare const taskBoardColumnDropTargetClasses = "ring-2 ring-[var(--tiger-primary,#2563eb)]/60 bg-[color-mix(in_srgb,var(--tiger-primary,#2563eb)_4%,transparent)]";
13441
13446
  /** Column being dragged */
13442
13447
  declare const taskBoardColumnDraggingClasses = "opacity-50";
13443
13448
  /** Empty column placeholder */
@@ -13445,7 +13450,7 @@ declare const taskBoardEmptyClasses = "flex items-center justify-center text-[va
13445
13450
  /** WIP exceeded badge / header tint */
13446
13451
  declare const taskBoardWipExceededClasses = "text-[var(--tiger-error,#ef4444)]";
13447
13452
  /** Add-card button inside column footer */
13448
- declare const taskBoardAddCardClasses = "flex items-center justify-center gap-1 w-full py-1.5 text-sm text-[var(--tiger-text-muted,#6b7280)] hover:text-[var(--tiger-primary,#2563eb)] hover:bg-[var(--tiger-surface-muted,#f9fafb)] rounded transition-colors cursor-pointer";
13453
+ declare const taskBoardAddCardClasses = "flex items-center justify-center gap-1.5 w-[calc(100%-16px)] mx-2 my-2 py-2.5 text-xs font-semibold text-[var(--tiger-text-muted,#6b7280)] border border-dashed border-[var(--tiger-border,#e5e7eb)] hover:border-[var(--tiger-primary,#2563eb)] hover:text-[var(--tiger-primary,#2563eb)] hover:bg-[var(--tiger-surface,#ffffff)] hover:shadow-xs rounded-[var(--tiger-radius-md,0.5rem)] transition-all duration-200 cursor-pointer active:scale-98";
13449
13454
  interface CardDragData {
13450
13455
  type: 'card';
13451
13456
  cardId: string | number;
@@ -15991,7 +15996,7 @@ interface KanbanProps extends TaskBoardProps {
15991
15996
  */
15992
15997
 
15993
15998
  /** Card count badge */
15994
- declare const kanbanCardCountClasses = "inline-flex items-center justify-center h-5 min-w-[20px] px-1.5 rounded-full text-xs font-medium bg-[var(--tiger-bg-secondary,#f3f4f6)] text-[var(--tiger-text-secondary,#6b7280)]";
15999
+ declare const kanbanCardCountClasses = "inline-flex items-center justify-center h-5 min-w-[22px] px-2 rounded-full text-xs font-semibold bg-[var(--tiger-border,#e5e7eb)]/60 text-[var(--tiger-text-secondary,#6b7280)]/90 backdrop-blur-xs shadow-inner";
15995
16000
  /** Swimlane row wrapper */
15996
16001
  declare const kanbanSwimlaneClasses = "border-b border-[var(--tiger-border,#e5e7eb)] last:border-b-0";
15997
16002
  /** Swimlane header */
@@ -16003,9 +16008,9 @@ declare const kanbanSwimlaneCollapsedClasses = "hidden";
16003
16008
  /** Filter match highlight on card */
16004
16009
  declare const kanbanFilterHighlightClasses = "bg-[var(--tiger-warning,#fbbf24)]/20";
16005
16010
  /** Add column button */
16006
- declare const kanbanAddColumnClasses = "flex items-center justify-center shrink-0 w-72 min-h-[80px] rounded-[var(--tiger-radius-md,0.5rem)] border-2 border-dashed border-[var(--tiger-border,#d1d5db)] text-[var(--tiger-text-muted,#9ca3af)] hover:border-[var(--tiger-primary,#2563eb)] hover:text-[var(--tiger-primary,#2563eb)] cursor-pointer transition-colors";
16011
+ declare const kanbanAddColumnClasses = "flex items-center justify-center shrink-0 w-76 min-h-[120px] rounded-[var(--tiger-radius-lg,0.75rem)] border-2 border-dashed border-[var(--tiger-border,#e5e7eb)] bg-[var(--tiger-surface-muted,#f9fafb)]/40 text-sm font-medium text-[var(--tiger-text-muted,#6b7280)] hover:border-[var(--tiger-primary,#2563eb)]/80 hover:text-[var(--tiger-primary,#2563eb)] hover:bg-[var(--tiger-surface,#ffffff)] hover:shadow-sm cursor-pointer transition-all duration-300 active:scale-98";
16007
16012
  /** @deprecated Use `taskBoardAddCardClasses` instead */
16008
- declare const kanbanAddCardClasses = "flex items-center justify-center gap-1 w-full py-1.5 text-sm text-[var(--tiger-text-muted,#6b7280)] hover:text-[var(--tiger-primary,#2563eb)] hover:bg-[var(--tiger-surface-muted,#f9fafb)] rounded transition-colors cursor-pointer";
16013
+ declare const kanbanAddCardClasses = "flex items-center justify-center gap-1.5 w-[calc(100%-16px)] mx-2 my-2 py-2.5 text-xs font-semibold text-[var(--tiger-text-muted,#6b7280)] border border-dashed border-[var(--tiger-border,#e5e7eb)] hover:border-[var(--tiger-primary,#2563eb)] hover:text-[var(--tiger-primary,#2563eb)] hover:bg-[var(--tiger-surface,#ffffff)] hover:shadow-xs rounded-[var(--tiger-radius-md,0.5rem)] transition-all duration-200 cursor-pointer active:scale-98";
16009
16014
  /**
16010
16015
  * Filter cards by a search term (matches against title and description).
16011
16016
  * Returns a new array of matching cards.
package/dist/index.d.ts CHANGED
@@ -6,8 +6,8 @@ import { a as TigerLocaleInput, b as TigerLocaleLazyModule, c as TigerLocaleLoad
6
6
  export { h as TigerLocaleCommon, j as TigerLocaleDrawer, i as TigerLocaleModal, k as TigerLocaleUpload } from './locale-Bc3zz2b0.js';
7
7
  import { D as DatePickerLocalePreset, a as DatePickerLocaleInput, b as DatePickerLabels, c as DateFormat, d as DatePickerSize } from './datepicker-DXzS_8l8.js';
8
8
  export { e as DatePickerInputDate, k as DatePickerLocaleConfig, h as DatePickerModelValue, l as DatePickerProps, g as DatePickerRangeModelValue, j as DatePickerRangeValue, m as DatePickerShortcut, f as DatePickerSingleModelValue, i as DatePickerSingleValue } from './datepicker-DXzS_8l8.js';
9
- import { T as TableResponsiveMode, a as TableColumn, b as TableSize, C as ColumnAlign, S as SortDirection, F as FilterOption, c as TableProps, P as PaginationConfig, d as FilterRule, e as ColumnFilter, f as SortState } from './table-export-6ISYSoVB.js';
10
- export { E as ExpandableConfig, n as FilterType, R as RowSelectionConfig, m as TableExportFormat, i as downloadCsv, j as downloadExcel, l as downloadTableExport, k as exportTableData, g as exportTableToCsv, h as exportTableToExcel, t as tableExportButtonClasses } from './table-export-6ISYSoVB.js';
9
+ import { T as TableResponsiveMode, a as TableColumn, b as TableSize, C as ColumnAlign, S as SortDirection, F as FilterOption, c as TableProps, P as PaginationConfig, d as FilterRule, e as ColumnFilter, f as SortState } from './table-export-C-BAknOZ.js';
10
+ export { E as ExpandableConfig, n as FilterType, R as RowSelectionConfig, m as TableExportFormat, i as downloadCsv, j as downloadExcel, l as downloadTableExport, k as exportTableData, g as exportTableToCsv, h as exportTableToExcel, t as tableExportButtonClasses } from './table-export-C-BAknOZ.js';
11
11
  import { Middleware, MiddlewareData } from '@floating-ui/dom';
12
12
  import { T as ThemePreset, C as ColorScheme } from './tailwind-entry-D4_sseNi.js';
13
13
  export { a as ThemeColorScale, h as ThemeConfig, g as ThemeMotion, i as ThemePresetName, d as ThemeRadius, b as ThemeSemanticColors, e as ThemeShadows, f as ThemeSpacing, c as ThemeTypography, l as TigercatPluginOptions, m as createTigercatPlugin, j as tigercatDarkTheme, k as tigercatPlugin, t as tigercatTheme } from './tailwind-entry-D4_sseNi.js';
@@ -8344,7 +8344,7 @@ declare const imagePreviewCounterClasses = "text-sm text-white/80 mx-2 tabular-n
8344
8344
  /**
8345
8345
  * Cropper container classes
8346
8346
  */
8347
- declare const imageCropperContainerClasses = "relative overflow-hidden bg-[var(--tiger-image-cropper-bg,#1a1a2e)] select-none touch-none";
8347
+ declare const imageCropperContainerClasses = "relative overflow-hidden bg-[var(--tiger-image-cropper-bg,#0f172a)] rounded-[var(--tiger-radius-lg,0.75rem)] select-none touch-none shadow-inner border border-white/10 tiger-image-cropper-checkerboard";
8348
8348
  /**
8349
8349
  * Cropper image classes (the source image)
8350
8350
  */
@@ -8356,11 +8356,11 @@ declare const imageCropperMaskClasses = "absolute inset-0 pointer-events-none";
8356
8356
  /**
8357
8357
  * Cropper selection border classes (the crop box border)
8358
8358
  */
8359
- declare const imageCropperSelectionClasses = "absolute border-2 border-[var(--tiger-image-cropper-border,#ffffff)] pointer-events-none";
8359
+ declare const imageCropperSelectionClasses = "absolute border-2 border-[var(--tiger-image-cropper-border,#ffffff)] pointer-events-none shadow-[0_0_0_9999px_rgba(0,0,0,0.65),0_0_15px_rgba(255,255,255,0.4)] transition-shadow duration-300";
8360
8360
  /**
8361
8361
  * Cropper guide line classes
8362
8362
  */
8363
- declare const imageCropperGuideClasses = "absolute border-[var(--tiger-image-cropper-border,rgba(255,255,255,0.4))] pointer-events-none";
8363
+ declare const imageCropperGuideClasses = "absolute border-[var(--tiger-image-cropper-border,rgba(255,255,255,0.25))] pointer-events-none opacity-40 transition-opacity duration-300";
8364
8364
  /**
8365
8365
  * Cropper drag area classes (inside the crop box, handles moving)
8366
8366
  */
@@ -8376,11 +8376,11 @@ declare const CROP_HANDLES: CropHandle[];
8376
8376
  /**
8377
8377
  * CropUpload trigger button classes
8378
8378
  */
8379
- declare const cropUploadTriggerClasses = "inline-flex items-center justify-center gap-2 px-4 py-2 border-2 border-dashed border-[var(--tiger-border,#d1d5db)] rounded-[var(--tiger-radius-md,0.5rem)] text-[var(--tiger-text-muted,#6b7280)] hover:border-[var(--tiger-primary,#2563eb)] hover:text-[var(--tiger-primary,#2563eb)] transition-colors cursor-pointer focus:outline-none focus:ring-2 focus:ring-[var(--tiger-primary,#2563eb)] focus:ring-offset-2";
8379
+ declare const cropUploadTriggerClasses = "inline-flex items-center justify-center gap-2.5 px-5 py-2.5 border-2 border-dashed border-[var(--tiger-border,#d1d5db)] rounded-[var(--tiger-radius-lg,0.75rem)] text-[var(--tiger-text-secondary,#4b5563)] bg-[var(--tiger-surface-muted,#f9fafb)] hover:bg-[var(--tiger-surface,#ffffff)] hover:border-[var(--tiger-primary,#2563eb)] hover:text-[var(--tiger-primary,#2563eb)] hover:scale-[1.02] active:scale-[0.98] hover:shadow-md transition-all duration-300 ease-out cursor-pointer focus:outline-none focus:ring-2 focus:ring-[var(--tiger-primary,#2563eb)] focus:ring-offset-2 dark:bg-neutral-900 dark:hover:bg-neutral-800";
8380
8380
  /**
8381
8381
  * CropUpload disabled trigger classes
8382
8382
  */
8383
- declare const cropUploadTriggerDisabledClasses = "inline-flex items-center justify-center gap-2 px-4 py-2 border-2 border-dashed border-[var(--tiger-border,#d1d5db)] rounded-[var(--tiger-radius-md,0.5rem)] text-[var(--tiger-text-muted,#9ca3af)] cursor-not-allowed opacity-50";
8383
+ declare const cropUploadTriggerDisabledClasses = "inline-flex items-center justify-center gap-2.5 px-5 py-2.5 border-2 border-dashed border-[var(--tiger-border,#d1d5db)] rounded-[var(--tiger-radius-lg,0.75rem)] text-[var(--tiger-text-disabled,#9ca3af)] bg-[var(--tiger-surface-muted,#f9fafb)] cursor-not-allowed opacity-60 dark:bg-neutral-900/50";
8384
8384
  /**
8385
8385
  * Upload icon path (plus sign in a frame)
8386
8386
  */
@@ -13101,6 +13101,11 @@ interface FormWizardProps {
13101
13101
  * @default false
13102
13102
  */
13103
13103
  simple?: boolean;
13104
+ /**
13105
+ * Whether to show border around the wizard card
13106
+ * @default true
13107
+ */
13108
+ bordered?: boolean;
13104
13109
  /**
13105
13110
  * Whether to show steps header
13106
13111
  * @default true
@@ -13423,21 +13428,21 @@ declare function formatCountdown(remaining: number, format?: string): string;
13423
13428
  declare function createCountdownPayload(remaining: number, format?: string): CountdownChangePayload;
13424
13429
 
13425
13430
  /** Root wrapper — horizontal scroll container */
13426
- declare const taskBoardBaseClasses = "tiger-task-board flex gap-4 overflow-x-auto p-4 min-h-[400px]";
13431
+ declare const taskBoardBaseClasses = "tiger-task-board flex gap-5 overflow-x-auto p-6 min-h-[450px] scroll-smooth antialiased";
13427
13432
  /** Single column shell */
13428
- declare const taskBoardColumnClasses = "tiger-task-board-column flex flex-col shrink-0 w-72 rounded-[var(--tiger-radius-md,0.5rem)] border border-[var(--tiger-border,#e5e7eb)] bg-[var(--tiger-surface,#ffffff)] shadow-sm transition-shadow";
13433
+ declare const taskBoardColumnClasses = "tiger-task-board-column flex flex-col shrink-0 w-76 rounded-[var(--tiger-radius-lg,0.75rem)] border border-[var(--tiger-border,#e5e7eb)]/80 bg-[var(--tiger-surface-muted,#f9fafb)] shadow-xs transition-all duration-300 hover:shadow-md";
13429
13434
  /** Column header (sticky, never scrolls) */
13430
- declare const taskBoardColumnHeaderClasses = "flex items-center justify-between px-3 py-2 border-b border-[var(--tiger-border,#e5e7eb)] text-sm font-semibold text-[var(--tiger-text,#1f2937)] select-none";
13435
+ declare const taskBoardColumnHeaderClasses = "flex items-center justify-between px-4 py-3.5 border-b border-[var(--tiger-border,#e5e7eb)]/60 text-sm font-semibold text-[var(--tiger-text,#1f2937)] select-none transition-colors";
13431
13436
  /** Scrollable card area */
13432
- declare const taskBoardColumnBodyClasses = "flex-1 overflow-y-auto p-2 space-y-2 min-h-[80px]";
13437
+ declare const taskBoardColumnBodyClasses = "flex-1 overflow-y-auto p-3 space-y-3 min-h-[100px] transition-colors";
13433
13438
  /** Card base styles */
13434
- declare const taskBoardCardClasses = "tiger-task-board-card rounded-[var(--tiger-radius-md,0.5rem)] border border-[var(--tiger-border,#e5e7eb)] bg-[var(--tiger-surface,#ffffff)] p-3 shadow-sm cursor-grab select-none transition-opacity";
13439
+ declare const taskBoardCardClasses = "tiger-task-board-card rounded-[var(--tiger-radius-md,0.5rem)] border border-[var(--tiger-border,#e5e7eb)]/80 bg-[var(--tiger-surface,#ffffff)] p-4 shadow-[0_1px_3px_rgba(0,0,0,0.04),_0_1px_2px_rgba(0,0,0,0.02)] cursor-grab select-none transition-all duration-200 hover:-translate-y-0.5 hover:shadow-md hover:border-[var(--tiger-primary,#2563eb)]/30 active:cursor-grabbing";
13435
13440
  /** Card while being dragged */
13436
- declare const taskBoardCardDraggingClasses = "opacity-50 shadow-lg";
13441
+ declare const taskBoardCardDraggingClasses = "opacity-40 shadow-xl scale-[0.98] rotate-1";
13437
13442
  /** Thin line indicating the drop position */
13438
- declare const taskBoardDropIndicatorClasses = "h-1 rounded-full bg-[var(--tiger-primary,#2563eb)] my-1 transition-all";
13443
+ declare const taskBoardDropIndicatorClasses = "h-1.5 rounded-full bg-[var(--tiger-primary,#2563eb)] my-2 shadow-[0_0_8px_var(--tiger-primary,#2563eb)] transition-all duration-200";
13439
13444
  /** Column highlighted when a card hovers over it */
13440
- declare const taskBoardColumnDropTargetClasses = "ring-2 ring-[var(--tiger-primary,#2563eb)] ring-opacity-50";
13445
+ declare const taskBoardColumnDropTargetClasses = "ring-2 ring-[var(--tiger-primary,#2563eb)]/60 bg-[color-mix(in_srgb,var(--tiger-primary,#2563eb)_4%,transparent)]";
13441
13446
  /** Column being dragged */
13442
13447
  declare const taskBoardColumnDraggingClasses = "opacity-50";
13443
13448
  /** Empty column placeholder */
@@ -13445,7 +13450,7 @@ declare const taskBoardEmptyClasses = "flex items-center justify-center text-[va
13445
13450
  /** WIP exceeded badge / header tint */
13446
13451
  declare const taskBoardWipExceededClasses = "text-[var(--tiger-error,#ef4444)]";
13447
13452
  /** Add-card button inside column footer */
13448
- declare const taskBoardAddCardClasses = "flex items-center justify-center gap-1 w-full py-1.5 text-sm text-[var(--tiger-text-muted,#6b7280)] hover:text-[var(--tiger-primary,#2563eb)] hover:bg-[var(--tiger-surface-muted,#f9fafb)] rounded transition-colors cursor-pointer";
13453
+ declare const taskBoardAddCardClasses = "flex items-center justify-center gap-1.5 w-[calc(100%-16px)] mx-2 my-2 py-2.5 text-xs font-semibold text-[var(--tiger-text-muted,#6b7280)] border border-dashed border-[var(--tiger-border,#e5e7eb)] hover:border-[var(--tiger-primary,#2563eb)] hover:text-[var(--tiger-primary,#2563eb)] hover:bg-[var(--tiger-surface,#ffffff)] hover:shadow-xs rounded-[var(--tiger-radius-md,0.5rem)] transition-all duration-200 cursor-pointer active:scale-98";
13449
13454
  interface CardDragData {
13450
13455
  type: 'card';
13451
13456
  cardId: string | number;
@@ -15991,7 +15996,7 @@ interface KanbanProps extends TaskBoardProps {
15991
15996
  */
15992
15997
 
15993
15998
  /** Card count badge */
15994
- declare const kanbanCardCountClasses = "inline-flex items-center justify-center h-5 min-w-[20px] px-1.5 rounded-full text-xs font-medium bg-[var(--tiger-bg-secondary,#f3f4f6)] text-[var(--tiger-text-secondary,#6b7280)]";
15999
+ declare const kanbanCardCountClasses = "inline-flex items-center justify-center h-5 min-w-[22px] px-2 rounded-full text-xs font-semibold bg-[var(--tiger-border,#e5e7eb)]/60 text-[var(--tiger-text-secondary,#6b7280)]/90 backdrop-blur-xs shadow-inner";
15995
16000
  /** Swimlane row wrapper */
15996
16001
  declare const kanbanSwimlaneClasses = "border-b border-[var(--tiger-border,#e5e7eb)] last:border-b-0";
15997
16002
  /** Swimlane header */
@@ -16003,9 +16008,9 @@ declare const kanbanSwimlaneCollapsedClasses = "hidden";
16003
16008
  /** Filter match highlight on card */
16004
16009
  declare const kanbanFilterHighlightClasses = "bg-[var(--tiger-warning,#fbbf24)]/20";
16005
16010
  /** Add column button */
16006
- declare const kanbanAddColumnClasses = "flex items-center justify-center shrink-0 w-72 min-h-[80px] rounded-[var(--tiger-radius-md,0.5rem)] border-2 border-dashed border-[var(--tiger-border,#d1d5db)] text-[var(--tiger-text-muted,#9ca3af)] hover:border-[var(--tiger-primary,#2563eb)] hover:text-[var(--tiger-primary,#2563eb)] cursor-pointer transition-colors";
16011
+ declare const kanbanAddColumnClasses = "flex items-center justify-center shrink-0 w-76 min-h-[120px] rounded-[var(--tiger-radius-lg,0.75rem)] border-2 border-dashed border-[var(--tiger-border,#e5e7eb)] bg-[var(--tiger-surface-muted,#f9fafb)]/40 text-sm font-medium text-[var(--tiger-text-muted,#6b7280)] hover:border-[var(--tiger-primary,#2563eb)]/80 hover:text-[var(--tiger-primary,#2563eb)] hover:bg-[var(--tiger-surface,#ffffff)] hover:shadow-sm cursor-pointer transition-all duration-300 active:scale-98";
16007
16012
  /** @deprecated Use `taskBoardAddCardClasses` instead */
16008
- declare const kanbanAddCardClasses = "flex items-center justify-center gap-1 w-full py-1.5 text-sm text-[var(--tiger-text-muted,#6b7280)] hover:text-[var(--tiger-primary,#2563eb)] hover:bg-[var(--tiger-surface-muted,#f9fafb)] rounded transition-colors cursor-pointer";
16013
+ declare const kanbanAddCardClasses = "flex items-center justify-center gap-1.5 w-[calc(100%-16px)] mx-2 my-2 py-2.5 text-xs font-semibold text-[var(--tiger-text-muted,#6b7280)] border border-dashed border-[var(--tiger-border,#e5e7eb)] hover:border-[var(--tiger-primary,#2563eb)] hover:text-[var(--tiger-primary,#2563eb)] hover:bg-[var(--tiger-surface,#ffffff)] hover:shadow-xs rounded-[var(--tiger-radius-md,0.5rem)] transition-all duration-200 cursor-pointer active:scale-98";
16009
16014
  /**
16010
16015
  * Filter cards by a search term (matches against title and description).
16011
16016
  * Returns a new array of matching cards.
package/dist/index.js CHANGED
@@ -1109,21 +1109,25 @@ var ZH_CN_FORM_WIZARD_LABELS = {
1109
1109
  finishText: "\u5B8C\u6210"
1110
1110
  };
1111
1111
  function getFormWizardLabels(locale) {
1112
+ const isZh = locale?.locale?.startsWith("zh");
1113
+ const defaultLabels = isZh ? ZH_CN_FORM_WIZARD_LABELS : DEFAULT_FORM_WIZARD_LABELS;
1112
1114
  return {
1113
- prevText: locale?.formWizard?.prevText ?? DEFAULT_FORM_WIZARD_LABELS.prevText,
1114
- nextText: locale?.formWizard?.nextText ?? DEFAULT_FORM_WIZARD_LABELS.nextText,
1115
- finishText: locale?.formWizard?.finishText ?? DEFAULT_FORM_WIZARD_LABELS.finishText
1115
+ prevText: locale?.formWizard?.prevText ?? defaultLabels.prevText,
1116
+ nextText: locale?.formWizard?.nextText ?? defaultLabels.nextText,
1117
+ finishText: locale?.formWizard?.finishText ?? defaultLabels.finishText
1116
1118
  };
1117
1119
  }
1118
1120
  function getPaginationLabels(locale) {
1121
+ const isZh = !!locale?.locale?.startsWith("zh") || locale?.formWizard?.prevText === "\u4E0A\u4E00\u6B65" || locale?.upload?.clickToUploadText === "\u70B9\u51FB\u4E0A\u4F20";
1122
+ const defaultLabels = isZh ? ZH_CN_PAGINATION_LABELS : DEFAULT_PAGINATION_LABELS;
1119
1123
  return {
1120
- totalText: locale?.pagination?.totalText ?? DEFAULT_PAGINATION_LABELS.totalText,
1121
- itemsPerPageText: locale?.pagination?.itemsPerPageText ?? DEFAULT_PAGINATION_LABELS.itemsPerPageText,
1122
- jumpToText: locale?.pagination?.jumpToText ?? DEFAULT_PAGINATION_LABELS.jumpToText,
1123
- pageText: locale?.pagination?.pageText ?? DEFAULT_PAGINATION_LABELS.pageText,
1124
- prevPageAriaLabel: locale?.pagination?.prevPageAriaLabel ?? DEFAULT_PAGINATION_LABELS.prevPageAriaLabel,
1125
- nextPageAriaLabel: locale?.pagination?.nextPageAriaLabel ?? DEFAULT_PAGINATION_LABELS.nextPageAriaLabel,
1126
- pageAriaLabel: locale?.pagination?.pageAriaLabel ?? DEFAULT_PAGINATION_LABELS.pageAriaLabel
1124
+ totalText: locale?.pagination?.totalText ?? defaultLabels.totalText,
1125
+ itemsPerPageText: locale?.pagination?.itemsPerPageText ?? defaultLabels.itemsPerPageText,
1126
+ jumpToText: locale?.pagination?.jumpToText ?? defaultLabels.jumpToText,
1127
+ pageText: locale?.pagination?.pageText ?? defaultLabels.pageText,
1128
+ prevPageAriaLabel: locale?.pagination?.prevPageAriaLabel ?? defaultLabels.prevPageAriaLabel,
1129
+ nextPageAriaLabel: locale?.pagination?.nextPageAriaLabel ?? defaultLabels.nextPageAriaLabel,
1130
+ pageAriaLabel: locale?.pagination?.pageAriaLabel ?? defaultLabels.pageAriaLabel
1127
1131
  };
1128
1132
  }
1129
1133
  function formatPaginationTotal(template, total, range, locale) {
@@ -1148,12 +1152,14 @@ var ZH_CN_TASK_BOARD_LABELS = {
1148
1152
  boardAriaLabel: "\u4EFB\u52A1\u770B\u677F"
1149
1153
  };
1150
1154
  function getTaskBoardLabels(locale) {
1155
+ const isZh = locale?.locale?.startsWith("zh");
1156
+ const defaultLabels = isZh ? ZH_CN_TASK_BOARD_LABELS : DEFAULT_TASK_BOARD_LABELS;
1151
1157
  return {
1152
- emptyColumnText: locale?.taskBoard?.emptyColumnText ?? DEFAULT_TASK_BOARD_LABELS.emptyColumnText,
1153
- addCardText: locale?.taskBoard?.addCardText ?? DEFAULT_TASK_BOARD_LABELS.addCardText,
1154
- wipLimitText: locale?.taskBoard?.wipLimitText ?? DEFAULT_TASK_BOARD_LABELS.wipLimitText,
1155
- dragHintText: locale?.taskBoard?.dragHintText ?? DEFAULT_TASK_BOARD_LABELS.dragHintText,
1156
- boardAriaLabel: locale?.taskBoard?.boardAriaLabel ?? DEFAULT_TASK_BOARD_LABELS.boardAriaLabel
1158
+ emptyColumnText: locale?.taskBoard?.emptyColumnText ?? defaultLabels.emptyColumnText,
1159
+ addCardText: locale?.taskBoard?.addCardText ?? defaultLabels.addCardText,
1160
+ wipLimitText: locale?.taskBoard?.wipLimitText ?? defaultLabels.wipLimitText,
1161
+ dragHintText: locale?.taskBoard?.dragHintText ?? defaultLabels.dragHintText,
1162
+ boardAriaLabel: locale?.taskBoard?.boardAriaLabel ?? defaultLabels.boardAriaLabel
1157
1163
  };
1158
1164
  }
1159
1165
 
@@ -5332,7 +5338,7 @@ function getStepsContainerClasses(direction) {
5332
5338
  return `${baseClasses2} flex flex-row items-start`;
5333
5339
  }
5334
5340
  function getStepItemClasses(direction, isLast) {
5335
- const baseClasses2 = "tiger-step-item relative";
5341
+ const baseClasses2 = "tiger-step-item relative group";
5336
5342
  if (direction === "vertical") {
5337
5343
  return `${baseClasses2} flex flex-row ${!isLast ? "pb-6" : ""}`;
5338
5344
  }
@@ -5342,12 +5348,12 @@ function getStepIconClasses(status, size, simple, isCustomIcon) {
5342
5348
  const baseClasses2 = "tiger-step-icon relative z-10 flex items-center justify-center rounded-full border-2";
5343
5349
  const sizeClasses3 = simple ? "w-6 h-6 text-xs" : size === "small" ? "w-8 h-8 text-sm" : "w-10 h-10 text-base";
5344
5350
  const iconClasses = isCustomIcon ? "" : "font-medium";
5345
- const activeClasses = "bg-[var(--tiger-primary,#2563eb)] border-[var(--tiger-primary,#2563eb)] text-white";
5351
+ const activeClasses = "bg-[var(--tiger-primary,#2563eb)] border-[var(--tiger-primary,#2563eb)] text-white ring-4 ring-[var(--tiger-primary,#2563eb)]/15 scale-105 shadow-sm transition-all duration-300";
5346
5352
  const statusClasses = {
5347
- wait: "bg-[var(--tiger-surface-muted,#f3f4f6)] border-[var(--tiger-border,#e5e7eb)] text-[var(--tiger-text-muted,#6b7280)]",
5353
+ wait: "bg-[var(--tiger-surface-muted,#f3f4f6)] border-[var(--tiger-border,#e5e7eb)] text-[var(--tiger-text-muted,#6b7280)] transition-all duration-300 group-hover:border-[var(--tiger-primary,#2563eb)]/60 group-hover:text-[var(--tiger-primary,#2563eb)]/80",
5348
5354
  process: activeClasses,
5349
- finish: activeClasses,
5350
- error: "bg-[var(--tiger-error-bg,#fef2f2)] border-[var(--tiger-error,#ef4444)] text-[var(--tiger-error,#ef4444)]"
5355
+ finish: "bg-[var(--tiger-primary,#2563eb)] border-[var(--tiger-primary,#2563eb)] text-white shadow-sm transition-all duration-300 group-hover:scale-105 group-hover:bg-[var(--tiger-primary-hover,#0369a1)]",
5356
+ error: "bg-[var(--tiger-error-bg,#fef2f2)] border-[var(--tiger-error,#ef4444)] text-[var(--tiger-error,#ef4444)] transition-all duration-300"
5351
5357
  };
5352
5358
  return `${baseClasses2} ${sizeClasses3} ${iconClasses} ${statusClasses[status]}`;
5353
5359
  }
@@ -5372,9 +5378,9 @@ function getStepTitleClasses(status, size, clickable) {
5372
5378
  const baseClasses2 = "tiger-step-title font-medium";
5373
5379
  const sizeClasses3 = size === "small" ? "text-sm" : "text-base";
5374
5380
  const statusClasses = {
5375
- wait: "text-[var(--tiger-text-muted,#6b7280)]",
5376
- process: "text-[var(--tiger-text,#111827)]",
5377
- finish: "text-[var(--tiger-text,#111827)]",
5381
+ wait: "text-[var(--tiger-text-muted,#6b7280)] transition-colors duration-300 group-hover:text-[var(--tiger-text,#111827)]",
5382
+ process: "text-[var(--tiger-text,#111827)] font-semibold transition-colors duration-300",
5383
+ finish: "text-[var(--tiger-text,#111827)] transition-colors duration-300 group-hover:text-[var(--tiger-primary,#2563eb)]",
5378
5384
  error: "text-[var(--tiger-error,#ef4444)]"
5379
5385
  };
5380
5386
  const cursorClasses = clickable ? "bg-transparent border-0 p-0 cursor-pointer hover:text-[var(--tiger-primary,#2563eb)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--tiger-primary,#2563eb)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--tiger-surface,#ffffff)]" : "";
@@ -6918,29 +6924,29 @@ var imagePreviewToolbarBtnClasses = "flex items-center justify-center w-8 h-8 ro
6918
6924
  var imagePreviewNavBtnClasses = "absolute top-1/2 -translate-y-1/2 flex items-center justify-center w-10 h-10 rounded-full bg-[var(--tiger-image-toolbar-bg,rgba(0,0,0,0.6))] text-white hover:bg-white/20 transition-colors focus:outline-none focus:ring-2 focus:ring-white/50 disabled:opacity-40 disabled:cursor-not-allowed";
6919
6925
  var imagePreviewCloseBtnClasses = "absolute top-4 right-4 flex items-center justify-center w-10 h-10 rounded-full bg-[var(--tiger-image-toolbar-bg,rgba(0,0,0,0.6))] text-white hover:bg-white/20 transition-colors focus:outline-none focus:ring-2 focus:ring-white/50";
6920
6926
  var imagePreviewCounterClasses = "text-sm text-white/80 mx-2 tabular-nums";
6921
- var imageCropperContainerClasses = "relative overflow-hidden bg-[var(--tiger-image-cropper-bg,#1a1a2e)] select-none touch-none";
6927
+ var imageCropperContainerClasses = "relative overflow-hidden bg-[var(--tiger-image-cropper-bg,#0f172a)] rounded-[var(--tiger-radius-lg,0.75rem)] select-none touch-none shadow-inner border border-white/10 tiger-image-cropper-checkerboard";
6922
6928
  var imageCropperImgClasses = "absolute top-0 left-0 max-w-none pointer-events-none";
6923
6929
  var imageCropperMaskClasses = "absolute inset-0 pointer-events-none";
6924
- var imageCropperSelectionClasses = "absolute border-2 border-[var(--tiger-image-cropper-border,#ffffff)] pointer-events-none";
6925
- var imageCropperGuideClasses = "absolute border-[var(--tiger-image-cropper-border,rgba(255,255,255,0.4))] pointer-events-none";
6930
+ var imageCropperSelectionClasses = "absolute border-2 border-[var(--tiger-image-cropper-border,#ffffff)] pointer-events-none shadow-[0_0_0_9999px_rgba(0,0,0,0.65),0_0_15px_rgba(255,255,255,0.4)] transition-shadow duration-300";
6931
+ var imageCropperGuideClasses = "absolute border-[var(--tiger-image-cropper-border,rgba(255,255,255,0.25))] pointer-events-none opacity-40 transition-opacity duration-300";
6926
6932
  var imageCropperDragAreaClasses = "absolute cursor-move";
6927
6933
  function getCropperHandleClasses(handle) {
6928
- const base = "absolute w-3 h-3 bg-[var(--tiger-image-cropper-border,#ffffff)] border border-[var(--tiger-image-cropper-handle-border,rgba(0,0,0,0.3))]";
6934
+ const base = "absolute w-3.5 h-3.5 rounded-full bg-white border-2 border-[var(--tiger-primary,#2563eb)] shadow-md hover:scale-125 hover:bg-[var(--tiger-primary,#2563eb)] hover:border-white transition-all duration-200 cursor-pointer focus:outline-none focus:ring-2 focus:ring-[var(--tiger-primary,#2563eb)]";
6929
6935
  const positionMap = {
6930
- nw: "-top-1.5 -left-1.5 cursor-nw-resize",
6931
- n: "-top-1.5 left-1/2 -translate-x-1/2 cursor-n-resize",
6932
- ne: "-top-1.5 -right-1.5 cursor-ne-resize",
6933
- e: "top-1/2 -right-1.5 -translate-y-1/2 cursor-e-resize",
6934
- se: "-bottom-1.5 -right-1.5 cursor-se-resize",
6935
- s: "-bottom-1.5 left-1/2 -translate-x-1/2 cursor-s-resize",
6936
- sw: "-bottom-1.5 -left-1.5 cursor-sw-resize",
6937
- w: "top-1/2 -left-1.5 -translate-y-1/2 cursor-w-resize"
6936
+ nw: "-top-1.75 -left-1.75 cursor-nw-resize",
6937
+ n: "-top-1.75 left-1/2 -translate-x-1/2 cursor-n-resize",
6938
+ ne: "-top-1.75 -right-1.75 cursor-ne-resize",
6939
+ e: "top-1/2 -right-1.75 -translate-y-1/2 cursor-e-resize",
6940
+ se: "-bottom-1.75 -right-1.75 cursor-se-resize",
6941
+ s: "-bottom-1.75 left-1/2 -translate-x-1/2 cursor-s-resize",
6942
+ sw: "-bottom-1.75 -left-1.75 cursor-sw-resize",
6943
+ w: "top-1/2 -left-1.75 -translate-y-1/2 cursor-w-resize"
6938
6944
  };
6939
6945
  return classNames(base, positionMap[handle]);
6940
6946
  }
6941
6947
  var CROP_HANDLES = ["nw", "n", "ne", "e", "se", "s", "sw", "w"];
6942
- var cropUploadTriggerClasses = "inline-flex items-center justify-center gap-2 px-4 py-2 border-2 border-dashed border-[var(--tiger-border,#d1d5db)] rounded-[var(--tiger-radius-md,0.5rem)] text-[var(--tiger-text-muted,#6b7280)] hover:border-[var(--tiger-primary,#2563eb)] hover:text-[var(--tiger-primary,#2563eb)] transition-colors cursor-pointer focus:outline-none focus:ring-2 focus:ring-[var(--tiger-primary,#2563eb)] focus:ring-offset-2";
6943
- var cropUploadTriggerDisabledClasses = "inline-flex items-center justify-center gap-2 px-4 py-2 border-2 border-dashed border-[var(--tiger-border,#d1d5db)] rounded-[var(--tiger-radius-md,0.5rem)] text-[var(--tiger-text-muted,#9ca3af)] cursor-not-allowed opacity-50";
6948
+ var cropUploadTriggerClasses = "inline-flex items-center justify-center gap-2.5 px-5 py-2.5 border-2 border-dashed border-[var(--tiger-border,#d1d5db)] rounded-[var(--tiger-radius-lg,0.75rem)] text-[var(--tiger-text-secondary,#4b5563)] bg-[var(--tiger-surface-muted,#f9fafb)] hover:bg-[var(--tiger-surface,#ffffff)] hover:border-[var(--tiger-primary,#2563eb)] hover:text-[var(--tiger-primary,#2563eb)] hover:scale-[1.02] active:scale-[0.98] hover:shadow-md transition-all duration-300 ease-out cursor-pointer focus:outline-none focus:ring-2 focus:ring-[var(--tiger-primary,#2563eb)] focus:ring-offset-2 dark:bg-neutral-900 dark:hover:bg-neutral-800";
6949
+ var cropUploadTriggerDisabledClasses = "inline-flex items-center justify-center gap-2.5 px-5 py-2.5 border-2 border-dashed border-[var(--tiger-border,#d1d5db)] rounded-[var(--tiger-radius-lg,0.75rem)] text-[var(--tiger-text-disabled,#9ca3af)] bg-[var(--tiger-surface-muted,#f9fafb)] cursor-not-allowed opacity-60 dark:bg-neutral-900/50";
6944
6950
  var uploadPlusIconPath = "M12 4v16m8-8H4";
6945
6951
  function clampScale(scale, min, max) {
6946
6952
  return Math.min(Math.max(scale, min), max);
@@ -10009,18 +10015,18 @@ function createCountdownPayload(remaining, format = COUNTDOWN_DEFAULT_FORMAT) {
10009
10015
  }
10010
10016
 
10011
10017
  // src/utils/task-board-utils.ts
10012
- var taskBoardBaseClasses = "tiger-task-board flex gap-4 overflow-x-auto p-4 min-h-[400px]";
10013
- var taskBoardColumnClasses = "tiger-task-board-column flex flex-col shrink-0 w-72 rounded-[var(--tiger-radius-md,0.5rem)] border border-[var(--tiger-border,#e5e7eb)] bg-[var(--tiger-surface,#ffffff)] shadow-sm transition-shadow";
10014
- var taskBoardColumnHeaderClasses = "flex items-center justify-between px-3 py-2 border-b border-[var(--tiger-border,#e5e7eb)] text-sm font-semibold text-[var(--tiger-text,#1f2937)] select-none";
10015
- var taskBoardColumnBodyClasses = "flex-1 overflow-y-auto p-2 space-y-2 min-h-[80px]";
10016
- var taskBoardCardClasses = "tiger-task-board-card rounded-[var(--tiger-radius-md,0.5rem)] border border-[var(--tiger-border,#e5e7eb)] bg-[var(--tiger-surface,#ffffff)] p-3 shadow-sm cursor-grab select-none transition-opacity";
10017
- var taskBoardCardDraggingClasses = "opacity-50 shadow-lg";
10018
- var taskBoardDropIndicatorClasses = "h-1 rounded-full bg-[var(--tiger-primary,#2563eb)] my-1 transition-all";
10019
- var taskBoardColumnDropTargetClasses = "ring-2 ring-[var(--tiger-primary,#2563eb)] ring-opacity-50";
10018
+ var taskBoardBaseClasses = "tiger-task-board flex gap-5 overflow-x-auto p-6 min-h-[450px] scroll-smooth antialiased";
10019
+ var taskBoardColumnClasses = "tiger-task-board-column flex flex-col shrink-0 w-76 rounded-[var(--tiger-radius-lg,0.75rem)] border border-[var(--tiger-border,#e5e7eb)]/80 bg-[var(--tiger-surface-muted,#f9fafb)] shadow-xs transition-all duration-300 hover:shadow-md";
10020
+ var taskBoardColumnHeaderClasses = "flex items-center justify-between px-4 py-3.5 border-b border-[var(--tiger-border,#e5e7eb)]/60 text-sm font-semibold text-[var(--tiger-text,#1f2937)] select-none transition-colors";
10021
+ var taskBoardColumnBodyClasses = "flex-1 overflow-y-auto p-3 space-y-3 min-h-[100px] transition-colors";
10022
+ var taskBoardCardClasses = "tiger-task-board-card rounded-[var(--tiger-radius-md,0.5rem)] border border-[var(--tiger-border,#e5e7eb)]/80 bg-[var(--tiger-surface,#ffffff)] p-4 shadow-[0_1px_3px_rgba(0,0,0,0.04),_0_1px_2px_rgba(0,0,0,0.02)] cursor-grab select-none transition-all duration-200 hover:-translate-y-0.5 hover:shadow-md hover:border-[var(--tiger-primary,#2563eb)]/30 active:cursor-grabbing";
10023
+ var taskBoardCardDraggingClasses = "opacity-40 shadow-xl scale-[0.98] rotate-1";
10024
+ var taskBoardDropIndicatorClasses = "h-1.5 rounded-full bg-[var(--tiger-primary,#2563eb)] my-2 shadow-[0_0_8px_var(--tiger-primary,#2563eb)] transition-all duration-200";
10025
+ var taskBoardColumnDropTargetClasses = "ring-2 ring-[var(--tiger-primary,#2563eb)]/60 bg-[color-mix(in_srgb,var(--tiger-primary,#2563eb)_4%,transparent)]";
10020
10026
  var taskBoardColumnDraggingClasses = "opacity-50";
10021
10027
  var taskBoardEmptyClasses = "flex items-center justify-center text-[var(--tiger-text-muted,#6b7280)] text-sm py-8";
10022
10028
  var taskBoardWipExceededClasses = "text-[var(--tiger-error,#ef4444)]";
10023
- var taskBoardAddCardClasses = "flex items-center justify-center gap-1 w-full py-1.5 text-sm text-[var(--tiger-text-muted,#6b7280)] hover:text-[var(--tiger-primary,#2563eb)] hover:bg-[var(--tiger-surface-muted,#f9fafb)] rounded transition-colors cursor-pointer";
10029
+ var taskBoardAddCardClasses = "flex items-center justify-center gap-1.5 w-[calc(100%-16px)] mx-2 my-2 py-2.5 text-xs font-semibold text-[var(--tiger-text-muted,#6b7280)] border border-dashed border-[var(--tiger-border,#e5e7eb)] hover:border-[var(--tiger-primary,#2563eb)] hover:text-[var(--tiger-primary,#2563eb)] hover:bg-[var(--tiger-surface,#ffffff)] hover:shadow-xs rounded-[var(--tiger-radius-md,0.5rem)] transition-all duration-200 cursor-pointer active:scale-98";
10024
10030
  var MIME = "text/plain";
10025
10031
  function createCardDragData(cardId, columnId, index) {
10026
10032
  const data = { type: "card", cardId, columnId, index };
@@ -13727,13 +13733,13 @@ function createBuiltinRichTextEngine() {
13727
13733
  var builtinRichTextEngine = createBuiltinRichTextEngine();
13728
13734
 
13729
13735
  // src/utils/kanban-utils.ts
13730
- var kanbanCardCountClasses = "inline-flex items-center justify-center h-5 min-w-[20px] px-1.5 rounded-full text-xs font-medium bg-[var(--tiger-bg-secondary,#f3f4f6)] text-[var(--tiger-text-secondary,#6b7280)]";
13736
+ var kanbanCardCountClasses = "inline-flex items-center justify-center h-5 min-w-[22px] px-2 rounded-full text-xs font-semibold bg-[var(--tiger-border,#e5e7eb)]/60 text-[var(--tiger-text-secondary,#6b7280)]/90 backdrop-blur-xs shadow-inner";
13731
13737
  var kanbanSwimlaneClasses = "border-b border-[var(--tiger-border,#e5e7eb)] last:border-b-0";
13732
13738
  var kanbanSwimlaneHeaderClasses = "flex items-center gap-2 px-4 py-2 text-sm font-medium text-[var(--tiger-text,#1f2937)] cursor-pointer select-none hover:bg-[var(--tiger-bg-hover,#f9fafb)]";
13733
13739
  var kanbanSwimlaneDotClasses = "w-2.5 h-2.5 rounded-full shrink-0";
13734
13740
  var kanbanSwimlaneCollapsedClasses = "hidden";
13735
13741
  var kanbanFilterHighlightClasses = "bg-[var(--tiger-warning,#fbbf24)]/20";
13736
- var kanbanAddColumnClasses = "flex items-center justify-center shrink-0 w-72 min-h-[80px] rounded-[var(--tiger-radius-md,0.5rem)] border-2 border-dashed border-[var(--tiger-border,#d1d5db)] text-[var(--tiger-text-muted,#9ca3af)] hover:border-[var(--tiger-primary,#2563eb)] hover:text-[var(--tiger-primary,#2563eb)] cursor-pointer transition-colors";
13742
+ var kanbanAddColumnClasses = "flex items-center justify-center shrink-0 w-76 min-h-[120px] rounded-[var(--tiger-radius-lg,0.75rem)] border-2 border-dashed border-[var(--tiger-border,#e5e7eb)] bg-[var(--tiger-surface-muted,#f9fafb)]/40 text-sm font-medium text-[var(--tiger-text-muted,#6b7280)] hover:border-[var(--tiger-primary,#2563eb)]/80 hover:text-[var(--tiger-primary,#2563eb)] hover:bg-[var(--tiger-surface,#ffffff)] hover:shadow-sm cursor-pointer transition-all duration-300 active:scale-98";
13737
13743
  var kanbanAddCardClasses = taskBoardAddCardClasses;
13738
13744
  function filterCards(cards, filterText) {
13739
13745
  if (!filterText.trim()) return cards;
@@ -1,6 +1,9 @@
1
+ import { a as TigerLocaleInput } from './locale-Bc3zz2b0.js';
2
+
1
3
  /**
2
4
  * Table component types and interfaces
3
5
  */
6
+
4
7
  /**
5
8
  * Table size types
6
9
  */
@@ -184,6 +187,26 @@ interface PaginationConfig {
184
187
  * Custom total text render function
185
188
  */
186
189
  totalText?: (total: number, range: [number, number]) => string;
190
+ /**
191
+ * Locale configuration for pagination text. Set to false to ignore i18n.
192
+ */
193
+ locale?: TigerLocaleInput | false;
194
+ /**
195
+ * Custom text for 'Previous' button
196
+ */
197
+ prevText?: string;
198
+ /**
199
+ * Custom text for 'Next' button
200
+ */
201
+ nextText?: string;
202
+ /**
203
+ * Custom text template for page indicator
204
+ */
205
+ pageIndicatorText?: (current: number, total: number) => string;
206
+ /**
207
+ * Custom text template for page size option
208
+ */
209
+ pageSizeText?: (size: number) => string;
187
210
  }
188
211
  /**
189
212
  * Table row selection configuration
@@ -1,6 +1,9 @@
1
+ import { a as TigerLocaleInput } from './locale-9-B-d0mp.cjs';
2
+
1
3
  /**
2
4
  * Table component types and interfaces
3
5
  */
6
+
4
7
  /**
5
8
  * Table size types
6
9
  */
@@ -184,6 +187,26 @@ interface PaginationConfig {
184
187
  * Custom total text render function
185
188
  */
186
189
  totalText?: (total: number, range: [number, number]) => string;
190
+ /**
191
+ * Locale configuration for pagination text. Set to false to ignore i18n.
192
+ */
193
+ locale?: TigerLocaleInput | false;
194
+ /**
195
+ * Custom text for 'Previous' button
196
+ */
197
+ prevText?: string;
198
+ /**
199
+ * Custom text for 'Next' button
200
+ */
201
+ nextText?: string;
202
+ /**
203
+ * Custom text template for page indicator
204
+ */
205
+ pageIndicatorText?: (current: number, total: number) => string;
206
+ /**
207
+ * Custom text template for page size option
208
+ */
209
+ pageSizeText?: (size: number) => string;
187
210
  }
188
211
  /**
189
212
  * Table row selection configuration
@@ -1 +1,3 @@
1
- export { i as downloadCsv, j as downloadExcel, l as downloadTableExport, k as exportTableData, g as exportTableToCsv, h as exportTableToExcel, t as tableExportButtonClasses } from '../table-export-6ISYSoVB.cjs';
1
+ export { i as downloadCsv, j as downloadExcel, l as downloadTableExport, k as exportTableData, g as exportTableToCsv, h as exportTableToExcel, t as tableExportButtonClasses } from '../table-export-D7_CDqY7.cjs';
2
+ import '../locale-9-B-d0mp.cjs';
3
+ import '../datepicker-DXzS_8l8.cjs';
@@ -1 +1,3 @@
1
- export { i as downloadCsv, j as downloadExcel, l as downloadTableExport, k as exportTableData, g as exportTableToCsv, h as exportTableToExcel, t as tableExportButtonClasses } from '../table-export-6ISYSoVB.js';
1
+ export { i as downloadCsv, j as downloadExcel, l as downloadTableExport, k as exportTableData, g as exportTableToCsv, h as exportTableToExcel, t as tableExportButtonClasses } from '../table-export-C-BAknOZ.js';
2
+ import '../locale-Bc3zz2b0.js';
3
+ import '../datepicker-DXzS_8l8.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expcat/tigercat-core",
3
- "version": "1.2.23",
3
+ "version": "1.2.31",
4
4
  "type": "module",
5
5
  "description": "Core utilities for Tigercat UI library",
6
6
  "license": "MIT",