@expcat/tigercat-core 0.3.0 → 0.3.69

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.js CHANGED
@@ -405,7 +405,7 @@ function sliderGetKeyboardValue(key, currentValue, min, max, step = 1, largeStep
405
405
  // src/utils/back-top-utils.ts
406
406
  function getScrollTop(target) {
407
407
  if (target === window) {
408
- return window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
408
+ return window.scrollY || 0;
409
409
  }
410
410
  return target.scrollTop;
411
411
  }
@@ -438,13 +438,21 @@ function scrollToTop(target, duration, callback) {
438
438
  };
439
439
  requestAnimationFrame(animateScroll);
440
440
  }
441
- var backTopBaseClasses = "z-50 flex h-10 w-10 cursor-pointer items-center justify-center rounded-full bg-[var(--tiger-primary,#2563eb)] text-white shadow-lg transition-all duration-300 hover:bg-[var(--tiger-primary-hover,#1d4ed8)] focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--tiger-primary,#2563eb)] focus-visible:ring-offset-2";
442
- var backTopButtonClasses = `fixed bottom-8 right-8 ${backTopBaseClasses}`;
443
- var backTopContainerClasses = `sticky bottom-4 ml-auto mr-4 ${backTopBaseClasses}`;
441
+ var baseClasses = "z-50 flex h-10 w-10 cursor-pointer items-center justify-center rounded-full bg-[var(--tiger-primary,#2563eb)] text-white shadow-lg transition-all duration-300 hover:bg-[var(--tiger-primary-hover,#1d4ed8)] focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--tiger-primary,#2563eb)] focus-visible:ring-offset-2";
442
+ var backTopButtonClasses = `fixed bottom-8 right-8 ${baseClasses}`;
443
+ var backTopContainerClasses = `sticky bottom-4 ml-auto mr-4 ${baseClasses}`;
444
444
  var backTopHiddenClasses = "opacity-0 pointer-events-none translate-y-4";
445
445
  var backTopVisibleClasses = "opacity-100 translate-y-0";
446
446
  var backTopIconPath = "M12 19V5M12 5l-7 7M12 5l7 7";
447
447
 
448
+ // src/utils/imperative-api.ts
449
+ function normalizeStringOption(options, key) {
450
+ if (typeof options === "string") {
451
+ return { [key]: options };
452
+ }
453
+ return options;
454
+ }
455
+
448
456
  // src/utils/common-icons.ts
449
457
  var closeIconViewBox = "0 0 24 24";
450
458
  var closeIconPathD = "M6 18L18 6M6 6l12 12";
@@ -664,7 +672,8 @@ function mergeTigerLocale(base, override) {
664
672
  modal: { ...base?.modal, ...override?.modal },
665
673
  drawer: { ...base?.drawer, ...override?.drawer },
666
674
  upload: { ...base?.upload, ...override?.upload },
667
- pagination: { ...base?.pagination, ...override?.pagination }
675
+ pagination: { ...base?.pagination, ...override?.pagination },
676
+ formWizard: { ...base?.formWizard, ...override?.formWizard }
668
677
  };
669
678
  }
670
679
  var DEFAULT_PAGINATION_LABELS = {
@@ -685,6 +694,23 @@ var ZH_CN_PAGINATION_LABELS = {
685
694
  nextPageAriaLabel: "\u4E0B\u4E00\u9875",
686
695
  pageAriaLabel: "\u7B2C {page} \u9875"
687
696
  };
697
+ var DEFAULT_FORM_WIZARD_LABELS = {
698
+ prevText: "Previous",
699
+ nextText: "Next",
700
+ finishText: "Finish"
701
+ };
702
+ var ZH_CN_FORM_WIZARD_LABELS = {
703
+ prevText: "\u4E0A\u4E00\u6B65",
704
+ nextText: "\u4E0B\u4E00\u6B65",
705
+ finishText: "\u5B8C\u6210"
706
+ };
707
+ function getFormWizardLabels(locale) {
708
+ return {
709
+ prevText: locale?.formWizard?.prevText ?? DEFAULT_FORM_WIZARD_LABELS.prevText,
710
+ nextText: locale?.formWizard?.nextText ?? DEFAULT_FORM_WIZARD_LABELS.nextText,
711
+ finishText: locale?.formWizard?.finishText ?? DEFAULT_FORM_WIZARD_LABELS.finishText
712
+ };
713
+ }
688
714
  function getPaginationLabels(locale) {
689
715
  return {
690
716
  totalText: locale?.pagination?.totalText ?? DEFAULT_PAGINATION_LABELS.totalText,
@@ -767,24 +793,18 @@ function pluralizeEn(value, singular) {
767
793
  }
768
794
  function getTimePickerOptionAriaLabel(value, unit, locale, labelOverrides) {
769
795
  const labels = getTimePickerLabels(locale, labelOverrides);
770
- if (isZhLocale(locale)) {
771
- const suffix = unit === "hour" ? labels.hour : unit === "minute" ? labels.minute : labels.second;
772
- return `${value}${suffix}`;
773
- }
796
+ const unitLabel = unit === "hour" ? labels.hour : unit === "minute" ? labels.minute : labels.second;
797
+ if (isZhLocale(locale)) return `${value}${unitLabel}`;
774
798
  const lc = (locale ?? "").toLowerCase();
775
- const useEnglishPlural = lc.length === 0 ? labelOverrides == null : lc.startsWith("en");
776
- if (useEnglishPlural) {
777
- if (unit === "hour") return `${value} ${pluralizeEn(value, "hour")}`;
778
- if (unit === "minute") return `${value} ${pluralizeEn(value, "minute")}`;
779
- return `${value} ${pluralizeEn(value, "second")}`;
799
+ if (lc.startsWith("en") || !lc && !labelOverrides) {
800
+ return `${value} ${pluralizeEn(value, unit)}`;
780
801
  }
781
- const unitLabel = unit === "hour" ? labels.hour : unit === "minute" ? labels.minute : labels.second;
782
802
  return `${value} ${unitLabel}`;
783
803
  }
784
804
  var timePickerBaseClasses = "relative inline-block w-full max-w-xs";
785
805
  var timePickerInputWrapperClasses = "relative flex items-center";
786
806
  function getTimePickerInputClasses(size, disabled) {
787
- const baseClasses = [
807
+ const baseClasses2 = [
788
808
  "w-full rounded-md border border-gray-300",
789
809
  "focus:outline-none focus:ring-2 focus:ring-[var(--tiger-primary,#2563eb)] focus:border-transparent",
790
810
  "transition-colors duration-200",
@@ -797,10 +817,10 @@ function getTimePickerInputClasses(size, disabled) {
797
817
  lg: "px-4 py-3 text-lg"
798
818
  };
799
819
  const stateClasses = disabled ? "bg-gray-100 text-gray-400 cursor-not-allowed" : "bg-white text-gray-900 cursor-pointer hover:border-gray-400";
800
- return [...baseClasses, sizeClasses[size], stateClasses].join(" ");
820
+ return [...baseClasses2, sizeClasses[size], stateClasses].join(" ");
801
821
  }
802
822
  function getTimePickerIconButtonClasses(size) {
803
- const baseClasses = [
823
+ const baseClasses2 = [
804
824
  "absolute right-1 flex items-center justify-center",
805
825
  "text-gray-400 hover:text-gray-600",
806
826
  "focus:outline-none focus:ring-2 focus:ring-[var(--tiger-primary,#2563eb)] focus:ring-offset-1",
@@ -812,7 +832,7 @@ function getTimePickerIconButtonClasses(size) {
812
832
  md: "w-8 h-8",
813
833
  lg: "w-10 h-10"
814
834
  };
815
- return [...baseClasses, sizeClasses[size]].join(" ");
835
+ return [...baseClasses2, sizeClasses[size]].join(" ");
816
836
  }
817
837
  var timePickerClearButtonClasses = [
818
838
  "absolute right-10 flex items-center justify-center",
@@ -830,18 +850,18 @@ var timePickerRangeHeaderClasses = [
830
850
  "flex items-center gap-2"
831
851
  ].join(" ");
832
852
  function getTimePickerRangeTabButtonClasses(isActive) {
833
- const baseClasses = [
853
+ const baseClasses2 = [
834
854
  "px-3 py-1 text-xs font-medium rounded",
835
855
  "border border-gray-300",
836
856
  "focus:outline-none focus:ring-2 focus:ring-[var(--tiger-primary,#2563eb)] focus:ring-offset-1",
837
857
  "transition-colors duration-150"
838
858
  ];
839
859
  if (isActive) {
840
- return [...baseClasses, "bg-[var(--tiger-primary,#2563eb)] text-white border-transparent"].join(
860
+ return [...baseClasses2, "bg-[var(--tiger-primary,#2563eb)] text-white border-transparent"].join(
841
861
  " "
842
862
  );
843
863
  }
844
- return [...baseClasses, "bg-white hover:bg-gray-50 text-gray-700"].join(" ");
864
+ return [...baseClasses2, "bg-white hover:bg-gray-50 text-gray-700"].join(" ");
845
865
  }
846
866
  var timePickerColumnClasses = "flex flex-col overflow-hidden shrink-0 w-16";
847
867
  var timePickerColumnHeaderClasses = [
@@ -852,27 +872,27 @@ var timePickerColumnListClasses = [
852
872
  "overflow-y-auto max-h-48 scrollbar-thin scrollbar-thumb-gray-300 scrollbar-track-gray-100"
853
873
  ].join(" ");
854
874
  function getTimePickerItemClasses(isSelected, isDisabled) {
855
- const baseClasses = [
875
+ const baseClasses2 = [
856
876
  "w-full px-3 py-1.5 text-sm text-center",
857
877
  "hover:bg-gray-100 focus:outline-none focus:bg-gray-100",
858
878
  "transition-colors duration-150",
859
879
  "cursor-pointer"
860
880
  ];
861
881
  if (isDisabled) {
862
- return [...baseClasses, "text-gray-300 cursor-not-allowed hover:bg-transparent"].join(" ");
882
+ return [...baseClasses2, "text-gray-300 cursor-not-allowed hover:bg-transparent"].join(" ");
863
883
  }
864
884
  if (isSelected) {
865
885
  return [
866
- ...baseClasses,
886
+ ...baseClasses2,
867
887
  "bg-[var(--tiger-primary,#2563eb)] text-white",
868
888
  "hover:bg-[var(--tiger-primary-hover,#1d4ed8)]",
869
889
  "font-medium"
870
890
  ].join(" ");
871
891
  }
872
- return [...baseClasses, "text-gray-700"].join(" ");
892
+ return [...baseClasses2, "text-gray-700"].join(" ");
873
893
  }
874
894
  function getTimePickerPeriodButtonClasses(isSelected) {
875
- const baseClasses = [
895
+ const baseClasses2 = [
876
896
  "w-full px-3 py-2 text-sm font-medium text-center",
877
897
  "hover:bg-gray-100 focus:outline-none focus:bg-gray-100",
878
898
  "transition-colors duration-150",
@@ -880,12 +900,12 @@ function getTimePickerPeriodButtonClasses(isSelected) {
880
900
  ];
881
901
  if (isSelected) {
882
902
  return [
883
- ...baseClasses,
903
+ ...baseClasses2,
884
904
  "bg-[var(--tiger-primary,#2563eb)] text-white",
885
905
  "hover:bg-[var(--tiger-primary-hover,#1d4ed8)]"
886
906
  ].join(" ");
887
907
  }
888
- return [...baseClasses, "text-gray-700"].join(" ");
908
+ return [...baseClasses2, "text-gray-700"].join(" ");
889
909
  }
890
910
  var timePickerFooterClasses = [
891
911
  "px-3 py-2 border-t border-gray-200",
@@ -1023,35 +1043,20 @@ var INPUT_SIZE_CLASSES = {
1023
1043
  md: "py-2 text-base",
1024
1044
  lg: "py-3 text-lg"
1025
1045
  };
1026
- var PADDING_LEFT = {
1027
- sm: "pl-2",
1028
- md: "pl-3",
1029
- lg: "pl-4"
1030
- };
1031
- var PADDING_RIGHT = {
1032
- sm: "pr-2",
1033
- md: "pr-3",
1034
- lg: "pr-4"
1046
+ var INPUT_PADDING = {
1047
+ sm: { left: "pl-2", right: "pr-2", prefixLeft: "pl-8", suffixRight: "pr-8" },
1048
+ md: { left: "pl-3", right: "pr-3", prefixLeft: "pl-10", suffixRight: "pr-10" },
1049
+ lg: { left: "pl-4", right: "pr-4", prefixLeft: "pl-12", suffixRight: "pr-12" }
1035
1050
  };
1036
- var PREFIX_PADDING = {
1037
- sm: "pl-8",
1038
- md: "pl-10",
1039
- lg: "pl-12"
1040
- };
1041
- var SUFFIX_PADDING = {
1042
- sm: "pr-8",
1043
- md: "pr-10",
1044
- lg: "pr-12"
1045
- };
1046
- function getInputClasses(options = "md") {
1047
- const opts = typeof options === "string" ? { size: options, status: "default" } : { size: "md", status: "default", ...options };
1048
- const { size = "md", status = "default", hasPrefix, hasSuffix } = opts;
1051
+ function getInputClasses(options = {}) {
1052
+ const { size = "md", status = "default", hasPrefix, hasSuffix } = options;
1053
+ const pad = INPUT_PADDING[size];
1049
1054
  return classNames(
1050
1055
  ...BASE_INPUT_CLASSES,
1051
1056
  INPUT_SIZE_CLASSES[size],
1052
1057
  STATUS_CLASSES[status],
1053
- hasPrefix ? PREFIX_PADDING[size] : PADDING_LEFT[size],
1054
- hasSuffix ? SUFFIX_PADDING[size] : PADDING_RIGHT[size]
1058
+ hasPrefix ? pad.prefixLeft : pad.left,
1059
+ hasSuffix ? pad.suffixRight : pad.right
1055
1060
  );
1056
1061
  }
1057
1062
  function getInputWrapperClasses() {
@@ -1068,17 +1073,18 @@ function getInputAffixClasses(position, size = "md") {
1068
1073
  return classNames(base, posClass, widthClass);
1069
1074
  }
1070
1075
  function getInputErrorClasses(size = "md") {
1071
- const padding = {
1072
- sm: "pr-2",
1073
- md: "pr-3",
1074
- lg: "pr-4"
1075
- }[size];
1076
1076
  return classNames(
1077
1077
  "absolute inset-y-0 right-0 flex items-center pointer-events-none",
1078
- padding,
1078
+ INPUT_PADDING[size].right,
1079
1079
  "text-red-500 text-sm"
1080
1080
  );
1081
1081
  }
1082
+ function parseInputValue(target, type) {
1083
+ if (type === "number") {
1084
+ return Number.isNaN(target.valueAsNumber) ? target.value : target.valueAsNumber;
1085
+ }
1086
+ return target.value;
1087
+ }
1082
1088
 
1083
1089
  // src/utils/form-item-styles.ts
1084
1090
  var FORM_ITEM_SPACING = {
@@ -1101,6 +1107,11 @@ var ERROR_TEXT_SIZE = {
1101
1107
  md: "text-xs",
1102
1108
  lg: "text-sm"
1103
1109
  };
1110
+ var ERROR_MIN_HEIGHT = {
1111
+ sm: "min-h-[1rem]",
1112
+ md: "min-h-[1.25rem]",
1113
+ lg: "min-h-[1.5rem]"
1114
+ };
1104
1115
  function getFormItemClasses(options = {}) {
1105
1116
  const { size = "md", labelPosition = "right", hasError = false, disabled = false } = options;
1106
1117
  const layoutClasses = labelPosition === "top" ? "flex flex-col gap-2" : "flex items-start gap-4";
@@ -1117,7 +1128,7 @@ function getFormItemClasses(options = {}) {
1117
1128
  }
1118
1129
  function getFormItemLabelClasses(options = {}) {
1119
1130
  const { size = "md", labelPosition = "right", labelAlign = "right", isRequired = false } = options;
1120
- const alignClass = labelAlign === "right" ? "text-right" : labelAlign === "left" ? "text-left" : "text-left";
1131
+ const alignClass = labelAlign === "right" ? "text-right" : "text-left";
1121
1132
  const positionClasses = labelPosition === "top" ? "w-full" : "shrink-0";
1122
1133
  const paddingClass = labelPosition === "top" ? "" : LABEL_PADDING_TOP[size];
1123
1134
  return classNames(
@@ -1149,7 +1160,11 @@ function getFormItemErrorClasses(size = "md") {
1149
1160
  "tiger-form-item__error",
1150
1161
  "mt-1",
1151
1162
  ERROR_TEXT_SIZE[size],
1152
- "text-[var(--tiger-error,#ef4444)]"
1163
+ ERROR_MIN_HEIGHT[size],
1164
+ "text-[var(--tiger-error,#ef4444)]",
1165
+ "transition-opacity",
1166
+ "duration-150",
1167
+ "opacity-0"
1153
1168
  );
1154
1169
  }
1155
1170
  function getFormItemAsteriskClasses() {
@@ -1157,15 +1172,9 @@ function getFormItemAsteriskClasses() {
1157
1172
  "tiger-form-item__asterisk",
1158
1173
  "mr-1",
1159
1174
  "font-semibold",
1160
- "text-red-500",
1161
1175
  "text-[var(--tiger-error,#ef4444)]"
1162
1176
  );
1163
1177
  }
1164
- function getFormItemAsteriskStyle() {
1165
- return {
1166
- color: "var(--tiger-error,#ef4444)"
1167
- };
1168
- }
1169
1178
 
1170
1179
  // src/utils/select-utils.ts
1171
1180
  var selectBaseClasses = "relative inline-block w-full";
@@ -1176,7 +1185,6 @@ var SELECT_TRIGGER_BASE_CLASSES = [
1176
1185
  "justify-between",
1177
1186
  "gap-2",
1178
1187
  "px-3",
1179
- "py-2",
1180
1188
  "bg-[var(--tiger-select-trigger-bg,var(--tiger-surface,#ffffff))]",
1181
1189
  "border",
1182
1190
  "border-[var(--tiger-select-trigger-border,var(--tiger-border,#d1d5db))]",
@@ -1232,6 +1240,17 @@ function getSelectOptionClasses(isSelected, isDisabled, size) {
1232
1240
  function isOptionGroup(option) {
1233
1241
  return !!option && typeof option === "object" && "options" in option && Array.isArray(option.options);
1234
1242
  }
1243
+ function flattenSelectOptions(options) {
1244
+ const all = [];
1245
+ for (const item of options) {
1246
+ if (isOptionGroup(item)) {
1247
+ all.push(...item.options);
1248
+ } else {
1249
+ all.push(item);
1250
+ }
1251
+ }
1252
+ return all;
1253
+ }
1235
1254
  function filterOptions(options, query) {
1236
1255
  if (!query) {
1237
1256
  return options;
@@ -1523,20 +1542,9 @@ var getRadioLabelClasses = ({ size, disabled, colors }) => classNames(
1523
1542
 
1524
1543
  // src/utils/radio-group-utils.ts
1525
1544
  var radioGroupDefaultClasses = "space-y-2";
1526
- var getRadioGroupClasses = ({
1527
- className,
1528
- hasCustomClass
1529
- } = {}) => {
1530
- const effectiveHasCustomClass = hasCustomClass ?? !!className;
1531
- return classNames(className, !effectiveHasCustomClass && radioGroupDefaultClasses);
1532
- };
1545
+ var getRadioGroupClasses = ({ className } = {}) => classNames(className, !className && radioGroupDefaultClasses);
1533
1546
 
1534
1547
  // src/utils/date-utils.ts
1535
- function isValidDate(value) {
1536
- if (!value) return false;
1537
- const date = value instanceof Date ? value : new Date(value);
1538
- return !isNaN(date.getTime());
1539
- }
1540
1548
  function parseDate(value) {
1541
1549
  if (!value) return null;
1542
1550
  if (value instanceof Date) {
@@ -1546,7 +1554,7 @@ function parseDate(value) {
1546
1554
  return isNaN(parsed.getTime()) ? null : parsed;
1547
1555
  }
1548
1556
  function formatDate(date, format = "yyyy-MM-dd") {
1549
- if (!date || !isValidDate(date)) return "";
1557
+ if (!date || isNaN(date.getTime())) return "";
1550
1558
  const year = date.getFullYear();
1551
1559
  const month = String(date.getMonth() + 1).padStart(2, "0");
1552
1560
  const day = String(date.getDate()).padStart(2, "0");
@@ -1573,15 +1581,13 @@ function normalizeDate(date) {
1573
1581
  return normalized;
1574
1582
  }
1575
1583
  function isDateInRange(date, minDate, maxDate) {
1576
- if (!isValidDate(date)) return false;
1584
+ if (isNaN(date.getTime())) return false;
1577
1585
  const normalizedDate = normalizeDate(date);
1578
- if (minDate && isValidDate(minDate)) {
1579
- const normalizedMin = normalizeDate(minDate);
1580
- if (normalizedDate < normalizedMin) return false;
1586
+ if (minDate && !isNaN(minDate.getTime())) {
1587
+ if (normalizedDate < normalizeDate(minDate)) return false;
1581
1588
  }
1582
- if (maxDate && isValidDate(maxDate)) {
1583
- const normalizedMax = normalizeDate(maxDate);
1584
- if (normalizedDate > normalizedMax) return false;
1589
+ if (maxDate && !isNaN(maxDate.getTime())) {
1590
+ if (normalizedDate > normalizeDate(maxDate)) return false;
1585
1591
  }
1586
1592
  return true;
1587
1593
  }
@@ -1708,7 +1714,7 @@ function isToday(date) {
1708
1714
  var datePickerBaseClasses = "relative inline-block w-full";
1709
1715
  var datePickerInputWrapperClasses = "relative w-full";
1710
1716
  function getDatePickerInputClasses(size = "md", disabled = false) {
1711
- const baseClasses = [
1717
+ const baseClasses2 = [
1712
1718
  "w-full",
1713
1719
  "rounded-md",
1714
1720
  "border",
@@ -1730,10 +1736,10 @@ function getDatePickerInputClasses(size = "md", disabled = false) {
1730
1736
  lg: "px-4 py-3 text-lg"
1731
1737
  };
1732
1738
  const disabledClasses = disabled ? ["bg-gray-100", "cursor-not-allowed", "text-gray-500"] : ["cursor-pointer"];
1733
- return classNames(...baseClasses, sizeClasses[size], ...disabledClasses);
1739
+ return classNames(...baseClasses2, sizeClasses[size], ...disabledClasses);
1734
1740
  }
1735
1741
  function getDatePickerIconButtonClasses(size = "md") {
1736
- const baseClasses = [
1742
+ const baseClasses2 = [
1737
1743
  "absolute",
1738
1744
  "right-0",
1739
1745
  "top-0",
@@ -1750,7 +1756,7 @@ function getDatePickerIconButtonClasses(size = "md") {
1750
1756
  md: "px-3",
1751
1757
  lg: "px-4"
1752
1758
  };
1753
- return classNames(...baseClasses, sizeClasses[size]);
1759
+ return classNames(...baseClasses2, sizeClasses[size]);
1754
1760
  }
1755
1761
  var datePickerCalendarClasses = classNames(
1756
1762
  "absolute",
@@ -1791,33 +1797,22 @@ var datePickerDayNameClasses = classNames(
1791
1797
  "py-2"
1792
1798
  );
1793
1799
  function getDatePickerDayCellClasses(isCurrentMonth, isSelected, isToday2, isDisabled, isInRange = false, isRangeStart = false, isRangeEnd = false) {
1794
- const baseClasses = [
1795
- "w-10",
1796
- "h-10",
1797
- "flex",
1798
- "items-center",
1799
- "justify-center",
1800
- "rounded-md",
1801
- "text-sm",
1802
- "transition-colors"
1803
- ];
1804
- const interactionClasses = isDisabled ? ["cursor-not-allowed", "text-gray-300"] : ["cursor-pointer", "hover:bg-gray-100"];
1805
- const monthClasses = isCurrentMonth ? ["text-gray-900"] : ["text-gray-400"];
1806
- const stateClasses = [];
1807
- if (isInRange && !isDisabled && !isSelected) {
1808
- stateClasses.push("bg-[var(--tiger-outline-bg-hover,#eff6ff)]");
1800
+ const base = "w-10 h-10 flex items-center justify-center rounded-md text-sm transition-colors";
1801
+ if (isDisabled) {
1802
+ return classNames(base, "cursor-not-allowed text-gray-300");
1809
1803
  }
1810
1804
  if (isSelected || isRangeStart || isRangeEnd) {
1811
- stateClasses.push(
1812
- "bg-[var(--tiger-primary,#2563eb)]",
1813
- "text-white",
1814
- "hover:bg-[var(--tiger-primary-hover,#1d4ed8)]",
1815
- "font-semibold"
1805
+ return classNames(
1806
+ base,
1807
+ "cursor-pointer",
1808
+ "bg-[var(--tiger-primary,#2563eb)] text-white",
1809
+ "hover:bg-[var(--tiger-primary-hover,#1d4ed8)] font-semibold"
1816
1810
  );
1817
- } else if (isToday2) {
1818
- stateClasses.push("border", "border-[var(--tiger-primary,#2563eb)]", "font-semibold");
1819
1811
  }
1820
- return classNames(...baseClasses, ...interactionClasses, ...monthClasses, ...stateClasses);
1812
+ const color = isCurrentMonth ? "text-gray-900" : "text-gray-400";
1813
+ const range = isInRange ? "bg-[var(--tiger-outline-bg-hover,#eff6ff)]" : "";
1814
+ const today = isToday2 ? "border border-[var(--tiger-primary,#2563eb)] font-semibold" : "";
1815
+ return classNames(base, "cursor-pointer hover:bg-gray-100", color, range, today);
1821
1816
  }
1822
1817
  var datePickerClearButtonClasses = classNames(
1823
1818
  "absolute",
@@ -1900,15 +1895,7 @@ function to24HourFormat(hours, period) {
1900
1895
  }
1901
1896
  }
1902
1897
  function formatTimeDisplay(hours, minutes, seconds = 0, format = "24", showSeconds = false) {
1903
- if (format === "12") {
1904
- const { hours: hours12, period } = to12HourFormat(hours);
1905
- const h = hours12.toString().padStart(2, "0");
1906
- const m = clampValue(minutes, 0, 59).toString().padStart(2, "0");
1907
- const s = clampValue(seconds, 0, 59).toString().padStart(2, "0");
1908
- const timeStr = showSeconds ? `${h}:${m}:${s}` : `${h}:${m}`;
1909
- return `${timeStr} ${period}`;
1910
- }
1911
- return formatTime(hours, minutes, seconds, showSeconds);
1898
+ return formatTimeDisplayWithLocale(hours, minutes, seconds, format, showSeconds);
1912
1899
  }
1913
1900
  function getTimePeriodLabels(locale) {
1914
1901
  if (!locale) return { am: "AM", pm: "PM" };
@@ -1972,21 +1959,19 @@ function generateHours(step = 1, format = "24") {
1972
1959
  }
1973
1960
  return hours;
1974
1961
  }
1975
- function generateMinutes(step = 1) {
1976
- const minutes = [];
1962
+ function generateTimeSlots(step, max) {
1977
1963
  const validStep = validateStep(step);
1978
- for (let i = 0; i < 60; i += validStep) {
1979
- minutes.push(i);
1964
+ const values = [];
1965
+ for (let i = 0; i < max; i += validStep) {
1966
+ values.push(i);
1980
1967
  }
1981
- return minutes;
1968
+ return values;
1969
+ }
1970
+ function generateMinutes(step = 1) {
1971
+ return generateTimeSlots(step, 60);
1982
1972
  }
1983
1973
  function generateSeconds(step = 1) {
1984
- const seconds = [];
1985
- const validStep = validateStep(step);
1986
- for (let i = 0; i < 60; i += validStep) {
1987
- seconds.push(i);
1988
- }
1989
- return seconds;
1974
+ return generateTimeSlots(step, 60);
1990
1975
  }
1991
1976
  function getCurrentTime(showSeconds = false) {
1992
1977
  const now = /* @__PURE__ */ new Date();
@@ -2126,8 +2111,8 @@ function formatFileSize(bytes) {
2126
2111
  const i = Math.floor(Math.log(bytes) / Math.log(k));
2127
2112
  return `${(bytes / Math.pow(k, i)).toFixed(2)} ${units[i]}`;
2128
2113
  }
2129
- function getUploadButtonClasses(drag, disabled) {
2130
- const baseClasses = [
2114
+ function getUploadButtonClasses(disabled) {
2115
+ const baseClasses2 = [
2131
2116
  "inline-flex",
2132
2117
  "items-center",
2133
2118
  "justify-center",
@@ -2152,10 +2137,10 @@ function getUploadButtonClasses(drag, disabled) {
2152
2137
  "focus:ring-[var(--tiger-primary,#2563eb)]",
2153
2138
  "cursor-pointer"
2154
2139
  ];
2155
- return classNames(...baseClasses, ...stateClasses);
2140
+ return classNames(...baseClasses2, ...stateClasses);
2156
2141
  }
2157
2142
  function getDragAreaClasses(isDragging, disabled) {
2158
- const baseClasses = [
2143
+ const baseClasses2 = [
2159
2144
  "flex",
2160
2145
  "flex-col",
2161
2146
  "items-center",
@@ -2194,7 +2179,7 @@ function getDragAreaClasses(isDragging, disabled) {
2194
2179
  ...focusClasses
2195
2180
  ];
2196
2181
  }
2197
- return classNames(...baseClasses, ...stateClasses);
2182
+ return classNames(...baseClasses2, ...stateClasses);
2198
2183
  }
2199
2184
  var FILE_LIST_STATUS_CLASSES = {
2200
2185
  ready: ["bg-gray-50", "hover:bg-gray-100"],
@@ -2209,7 +2194,7 @@ var PICTURE_CARD_STATUS_CLASSES = {
2209
2194
  error: ["border-red-400", "bg-red-50"]
2210
2195
  };
2211
2196
  function getFileListItemClasses(status) {
2212
- const baseClasses = [
2197
+ const baseClasses2 = [
2213
2198
  "flex",
2214
2199
  "items-center",
2215
2200
  "justify-between",
@@ -2220,10 +2205,10 @@ function getFileListItemClasses(status) {
2220
2205
  "duration-200"
2221
2206
  ];
2222
2207
  const stateClasses = status ? FILE_LIST_STATUS_CLASSES[status] : FILE_LIST_STATUS_CLASSES.ready;
2223
- return classNames(...baseClasses, ...stateClasses);
2208
+ return classNames(...baseClasses2, ...stateClasses);
2224
2209
  }
2225
2210
  function getPictureCardClasses(status) {
2226
- const baseClasses = [
2211
+ const baseClasses2 = [
2227
2212
  "relative",
2228
2213
  "inline-flex",
2229
2214
  "items-center",
@@ -2237,7 +2222,7 @@ function getPictureCardClasses(status) {
2237
2222
  "duration-200"
2238
2223
  ];
2239
2224
  const stateClasses = status ? PICTURE_CARD_STATUS_CLASSES[status] : PICTURE_CARD_STATUS_CLASSES.ready;
2240
- return classNames(...baseClasses, ...stateClasses);
2225
+ return classNames(...baseClasses2, ...stateClasses);
2241
2226
  }
2242
2227
 
2243
2228
  // src/utils/grid.ts
@@ -2340,6 +2325,14 @@ function getColOrderStyleVars(order) {
2340
2325
  setOrderVars(vars, order);
2341
2326
  return vars;
2342
2327
  }
2328
+ function getColMergedStyleVars(span, offset2, order, flex) {
2329
+ const vars = {};
2330
+ if (span !== void 0 && span !== null) setSpanVars(vars, span);
2331
+ if (offset2 !== void 0 && offset2 !== null) setOffsetVars(vars, offset2);
2332
+ if (order !== void 0 && order !== null) setOrderVars(vars, order);
2333
+ if (flex !== void 0) vars["--tiger-col-flex"] = String(flex).replace(/_/g, " ");
2334
+ return vars;
2335
+ }
2343
2336
  function getAlignClasses(align) {
2344
2337
  return ALIGN_MAP[align] || "items-start";
2345
2338
  }
@@ -2384,34 +2377,48 @@ function getFlexClasses(flex) {
2384
2377
  }
2385
2378
 
2386
2379
  // src/utils/divider.ts
2387
- var SPACING_MAP = {
2388
- none: { horizontal: "", vertical: "" },
2389
- xs: { horizontal: "my-1", vertical: "mx-1" },
2390
- sm: { horizontal: "my-2", vertical: "mx-2" },
2391
- md: { horizontal: "my-4", vertical: "mx-4" },
2392
- lg: { horizontal: "my-6", vertical: "mx-6" },
2393
- xl: { horizontal: "my-8", vertical: "mx-8" }
2380
+ var BORDER_COLOR = "border-[var(--tiger-border,#e5e7eb)]";
2381
+ var SPACING_H = {
2382
+ none: "",
2383
+ xs: "my-1",
2384
+ sm: "my-2",
2385
+ md: "my-4",
2386
+ lg: "my-6",
2387
+ xl: "my-8"
2388
+ };
2389
+ var SPACING_V = {
2390
+ none: "",
2391
+ xs: "mx-1",
2392
+ sm: "mx-2",
2393
+ md: "mx-4",
2394
+ lg: "mx-6",
2395
+ xl: "mx-8"
2394
2396
  };
2395
2397
  var LINE_STYLE_MAP = {
2396
2398
  solid: "border-solid",
2397
2399
  dashed: "border-dashed",
2398
2400
  dotted: "border-dotted"
2399
2401
  };
2400
- var DEFAULT_BORDER_COLOR_CLASS = "border-[var(--tiger-border,#e5e7eb)]";
2401
- function getDividerSpacingClasses(spacing, orientation) {
2402
- return SPACING_MAP[spacing][orientation];
2402
+ function getDividerClasses(orientation, lineStyle, spacing) {
2403
+ const isH = orientation === "horizontal";
2404
+ const base = isH ? `w-full border-t ${BORDER_COLOR}` : `h-full border-l ${BORDER_COLOR}`;
2405
+ const sp = (isH ? SPACING_H : SPACING_V)[spacing];
2406
+ return sp ? `${base} ${LINE_STYLE_MAP[lineStyle]} ${sp}` : `${base} ${LINE_STYLE_MAP[lineStyle]}`;
2403
2407
  }
2404
- function getDividerLineStyleClasses(lineStyle) {
2405
- return LINE_STYLE_MAP[lineStyle];
2406
- }
2407
- function getDividerOrientationClasses(orientation) {
2408
- return orientation === "horizontal" ? `w-full border-t ${DEFAULT_BORDER_COLOR_CLASS}` : `h-full border-l ${DEFAULT_BORDER_COLOR_CLASS}`;
2408
+ function getDividerStyle(orientation, color, thickness) {
2409
+ if (!color && !thickness) return void 0;
2410
+ const style = {};
2411
+ if (color) style.borderColor = color;
2412
+ if (thickness) {
2413
+ style[orientation === "horizontal" ? "borderTopWidth" : "borderLeftWidth"] = thickness;
2414
+ }
2415
+ return style;
2409
2416
  }
2410
2417
 
2411
2418
  // src/utils/layout-utils.ts
2412
2419
  var layoutRootClasses = "tiger-layout flex flex-col min-h-screen";
2413
2420
  var layoutHeaderClasses = "tiger-header bg-[var(--tiger-surface,#ffffff)] border-b border-[var(--tiger-border,#e5e7eb)]";
2414
- var layoutSidebarClasses = "tiger-sidebar bg-[var(--tiger-surface,#ffffff)] border-r border-[var(--tiger-border,#e5e7eb)] transition-all duration-300";
2421
+ var layoutSidebarClasses = "tiger-sidebar bg-[var(--tiger-surface,#ffffff)] border-r border-[var(--tiger-border,#e5e7eb)] overflow-hidden transition-all duration-300";
2415
2422
  var layoutContentClasses = "tiger-content flex-1 bg-[var(--tiger-layout-content-bg,#f9fafb)] p-6";
2416
2423
  var layoutFooterClasses = "tiger-footer bg-[var(--tiger-surface,#ffffff)] border-t border-[var(--tiger-border,#e5e7eb)] p-4";
2417
2424
 
@@ -2441,33 +2448,30 @@ var getContainerClasses = ({
2441
2448
  );
2442
2449
 
2443
2450
  // src/utils/space.ts
2444
- var SPACE_BASE_CLASS = "inline-flex";
2445
- function getSpaceGapSize(size = "md") {
2446
- if (typeof size === "number") {
2447
- return { style: `${size}px` };
2448
- }
2449
- const sizeMap = {
2450
- sm: "gap-2",
2451
- // 8px
2452
- md: "gap-4",
2453
- // 16px
2454
- lg: "gap-6"
2455
- // 24px
2456
- };
2457
- return { class: sizeMap[size] };
2458
- }
2459
- function getSpaceAlignClass(align = "start") {
2460
- const alignMap = {
2461
- start: "items-start",
2462
- end: "items-end",
2463
- center: "items-center",
2464
- baseline: "items-baseline",
2465
- stretch: "items-stretch"
2466
- };
2467
- return alignMap[align];
2451
+ var SIZE_CLASS = {
2452
+ sm: "gap-2",
2453
+ md: "gap-4",
2454
+ lg: "gap-6"
2455
+ };
2456
+ var ALIGN_CLASS = {
2457
+ start: "items-start",
2458
+ end: "items-end",
2459
+ center: "items-center",
2460
+ baseline: "items-baseline",
2461
+ stretch: "items-stretch"
2462
+ };
2463
+ function getSpaceClasses({ direction = "horizontal", size = "md", align = "start", wrap = false } = {}, className) {
2464
+ return classNames(
2465
+ "inline-flex",
2466
+ direction === "horizontal" ? "flex-row" : "flex-col",
2467
+ ALIGN_CLASS[align],
2468
+ typeof size === "string" ? SIZE_CLASS[size] : void 0,
2469
+ wrap && "flex-wrap",
2470
+ className
2471
+ );
2468
2472
  }
2469
- function getSpaceDirectionClass(direction = "horizontal") {
2470
- return direction === "horizontal" ? "flex-row" : "flex-col";
2473
+ function getSpaceStyle(size = "md") {
2474
+ return typeof size === "number" ? { gap: `${size}px` } : void 0;
2471
2475
  }
2472
2476
 
2473
2477
  // src/utils/table-utils.ts
@@ -2510,13 +2514,17 @@ function getFixedColumnOffsets(columns) {
2510
2514
  }
2511
2515
  function getTableWrapperClasses(bordered, maxHeight) {
2512
2516
  return classNames(
2517
+ "relative",
2513
2518
  tableContainerClasses,
2514
- bordered && "border border-gray-200 rounded-lg",
2519
+ bordered && "border border-[var(--tiger-border,#e5e7eb)] rounded-lg overflow-hidden",
2515
2520
  maxHeight && "overflow-y-auto"
2516
2521
  );
2517
2522
  }
2518
2523
  function getTableHeaderClasses(stickyHeader) {
2519
- return classNames("bg-gray-50 border-b border-gray-200", stickyHeader && "sticky top-0 z-10");
2524
+ return classNames(
2525
+ "bg-[var(--tiger-surface-muted,#f9fafb)] border-b border-[var(--tiger-border,#e5e7eb)]",
2526
+ stickyHeader && "sticky top-0 z-10"
2527
+ );
2520
2528
  }
2521
2529
  function getTableHeaderCellClasses(size, align, sortable, customClassName) {
2522
2530
  const paddingClasses = {
@@ -2530,18 +2538,18 @@ function getTableHeaderCellClasses(size, align, sortable, customClassName) {
2530
2538
  right: "text-right"
2531
2539
  };
2532
2540
  return classNames(
2533
- "font-medium text-gray-700 text-sm",
2541
+ "font-medium text-[var(--tiger-text-muted,#6b7280)] text-xs uppercase tracking-wider",
2534
2542
  paddingClasses[size],
2535
2543
  alignClasses[align],
2536
- sortable && "cursor-pointer select-none hover:bg-gray-100 transition-colors",
2544
+ sortable && "cursor-pointer select-none hover:bg-[var(--tiger-surface,#ffffff)]/50 transition-colors",
2537
2545
  customClassName
2538
2546
  );
2539
2547
  }
2540
2548
  function getTableRowClasses(hoverable, striped, isEven, customClassName) {
2541
2549
  return classNames(
2542
- "border-b border-gray-200 last:border-b-0",
2543
- hoverable && "hover:bg-gray-50 transition-colors",
2544
- striped && isEven && "bg-gray-50/50",
2550
+ "border-b border-[var(--tiger-border,#e5e7eb)] last:border-b-0",
2551
+ hoverable && "hover:bg-[var(--tiger-surface-muted,#f9fafb)] transition-colors",
2552
+ striped && isEven && "bg-[var(--tiger-surface-muted,#f9fafb)]/50",
2545
2553
  customClassName
2546
2554
  );
2547
2555
  }
@@ -2557,7 +2565,7 @@ function getTableCellClasses(size, align, customClassName) {
2557
2565
  right: "text-right"
2558
2566
  };
2559
2567
  return classNames(
2560
- "text-sm text-gray-900",
2568
+ "text-sm text-[var(--tiger-text,#111827)]",
2561
2569
  paddingClasses[size],
2562
2570
  alignClasses[align],
2563
2571
  customClassName
@@ -2569,9 +2577,9 @@ function getSortIconClasses(active) {
2569
2577
  active ? "text-[var(--tiger-primary,#2563eb)]" : "text-gray-400"
2570
2578
  );
2571
2579
  }
2572
- var tableEmptyStateClasses = "text-center py-12 text-gray-500";
2580
+ var tableEmptyStateClasses = "text-center py-12 text-[var(--tiger-text-muted,#6b7280)]";
2573
2581
  var tableLoadingOverlayClasses = classNames(
2574
- "absolute inset-0 bg-white/80 flex items-center justify-center z-20"
2582
+ "absolute inset-0 bg-[var(--tiger-surface,#ffffff)]/80 flex items-center justify-center z-20"
2575
2583
  );
2576
2584
  var tablePaginationContainerClasses = classNames(
2577
2585
  "flex items-center justify-between px-4 py-3 border-t border-gray-200"
@@ -2687,27 +2695,17 @@ var badgePositionClasses = {
2687
2695
  "bottom-left": "absolute -bottom-1 -left-1"
2688
2696
  };
2689
2697
  function formatBadgeContent(content, max = 99, showZero = false) {
2690
- if (content === void 0 || content === null) {
2691
- return null;
2692
- }
2693
- if (typeof content === "string") {
2694
- return content;
2695
- }
2696
- const num = Number(content);
2697
- if (num === 0 && !showZero) {
2698
- return null;
2699
- }
2700
- if (num > max) {
2701
- return `${max}+`;
2702
- }
2703
- return String(num);
2698
+ if (content === void 0 || content === null) return null;
2699
+ if (typeof content === "string") return content;
2700
+ if (content === 0 && !showZero) return null;
2701
+ if (content > max) return `${max}+`;
2702
+ return String(content);
2704
2703
  }
2705
2704
  function shouldHideBadge(content, type, showZero) {
2706
- if (type === "dot") {
2707
- return false;
2708
- }
2709
- const formattedContent = formatBadgeContent(content, 99, showZero);
2710
- return formattedContent === null || formattedContent === "";
2705
+ if (type === "dot") return false;
2706
+ if (content === void 0 || content === null) return true;
2707
+ if (typeof content === "string") return content === "";
2708
+ return content === 0 && !showZero;
2711
2709
  }
2712
2710
 
2713
2711
  // src/utils/card-utils.ts
@@ -2725,7 +2723,6 @@ var cardVariantClasses = {
2725
2723
  };
2726
2724
  var cardHoverClasses = "cursor-pointer hover:shadow-xl hover:scale-[1.02]";
2727
2725
  var cardHeaderClasses = "border-b border-[var(--tiger-border,#e5e7eb)] pb-3 mb-3";
2728
- var cardBodyClasses = "";
2729
2726
  var cardFooterClasses = "border-t border-[var(--tiger-border,#e5e7eb)] pt-3 mt-3";
2730
2727
  var cardCoverClasses = "w-full h-48 object-cover";
2731
2728
  var cardCoverWrapperClasses = "overflow-hidden";
@@ -2754,10 +2751,9 @@ var avatarDefaultBgColor = "bg-[var(--tiger-avatar-bg,#e5e7eb)]";
2754
2751
  var avatarDefaultTextColor = "text-[var(--tiger-avatar-text,var(--tiger-text-muted,#6b7280))]";
2755
2752
  var avatarImageClasses = "w-full h-full object-cover";
2756
2753
  function getInitials(name) {
2757
- const trimmed = typeof name === "string" ? name.trim() : "";
2754
+ const trimmed = name.trim();
2758
2755
  if (!trimmed) return "";
2759
2756
  const words = trimmed.split(/\s+/).filter(Boolean);
2760
- if (words.length === 0) return "";
2761
2757
  if (words.length === 1) {
2762
2758
  const firstWord = words[0];
2763
2759
  const hasNonASCII = /[^\x20-\x7E]/.test(firstWord);
@@ -2819,7 +2815,6 @@ var listHeaderFooterBaseClasses = "border-b border-[var(--tiger-border,#e5e7eb)]
2819
2815
  var listFooterClasses = "border-t border-b-0";
2820
2816
  var listEmptyStateClasses = "py-8 text-center text-[var(--tiger-text-muted,#6b7280)]";
2821
2817
  var listLoadingOverlayClasses = "absolute inset-0 bg-[var(--tiger-surface,#ffffff)]/75 flex items-center justify-center z-10";
2822
- var listPaginationContainerClasses = "flex items-center justify-between px-4 py-3 border-t border-[var(--tiger-border,#e5e7eb)]";
2823
2818
  var listItemMetaClasses = "flex items-center gap-3 flex-1";
2824
2819
  var listItemAvatarClasses = "flex-shrink-0";
2825
2820
  var listItemContentClasses = "flex-1 min-w-0";
@@ -2887,7 +2882,6 @@ var descriptionsSizeClasses = {
2887
2882
  };
2888
2883
  var descriptionsTableClasses = "w-full border-collapse";
2889
2884
  var descriptionsTableBorderedClasses = "border border-[var(--tiger-border,#e5e7eb)]";
2890
- var descriptionsRowClasses = "";
2891
2885
  var descriptionsCellSizeClasses = {
2892
2886
  sm: "px-3 py-2",
2893
2887
  md: "px-4 py-3",
@@ -2897,12 +2891,12 @@ var descriptionsLabelClasses = "font-medium bg-[var(--tiger-surface-muted,#f9faf
2897
2891
  var descriptionsLabelBorderedClasses = "border border-[var(--tiger-border,#e5e7eb)]";
2898
2892
  var descriptionsContentClasses = "text-[var(--tiger-text,#111827)]";
2899
2893
  var descriptionsContentBorderedClasses = "border border-[var(--tiger-border,#e5e7eb)]";
2900
- var descriptionsVerticalWrapperClasses = "space-y-0";
2894
+ var descriptionsVerticalWrapperClasses = "";
2901
2895
  var descriptionsVerticalItemClasses = "border-b border-[var(--tiger-border,#e5e7eb)] last:border-b-0";
2902
2896
  var descriptionsVerticalLabelClasses = "font-medium mb-1 text-[var(--tiger-text-muted,#374151)]";
2903
2897
  var descriptionsVerticalContentClasses = "text-[var(--tiger-text,#111827)]";
2904
- function getDescriptionsClasses(bordered, size) {
2905
- return [descriptionsBaseClasses, descriptionsSizeClasses[size]].join(" ");
2898
+ function getDescriptionsClasses(size) {
2899
+ return `${descriptionsBaseClasses} ${descriptionsSizeClasses[size]}`;
2906
2900
  }
2907
2901
  function getDescriptionsTableClasses(bordered) {
2908
2902
  const classes = [descriptionsTableClasses];
@@ -2931,12 +2925,8 @@ function getDescriptionsContentClasses(bordered, size, layout) {
2931
2925
  }
2932
2926
  return classes.join(" ");
2933
2927
  }
2934
- function getDescriptionsVerticalItemClasses(bordered, size) {
2935
- const classes = [descriptionsCellSizeClasses[size]];
2936
- if (!bordered) {
2937
- classes.push(descriptionsVerticalItemClasses);
2938
- }
2939
- return classes.join(" ");
2928
+ function getDescriptionsVerticalItemClasses(size) {
2929
+ return `${descriptionsCellSizeClasses[size]} ${descriptionsVerticalItemClasses}`;
2940
2930
  }
2941
2931
  function groupItemsIntoRows(items, column) {
2942
2932
  const rows = [];
@@ -2973,8 +2963,9 @@ var timelineContentClasses = "relative";
2973
2963
  var timelineCustomDotClasses = "flex items-center justify-center";
2974
2964
  var timelineLabelClasses = "text-sm text-[var(--tiger-text-muted,#6b7280)] mb-1";
2975
2965
  var timelineDescriptionClasses = "text-[var(--tiger-text,#374151)]";
2976
- var dotBg = "bg-[var(--tiger-timeline-dot,#d1d5db)]";
2977
- var timelineDotClasses = `w-2.5 h-2.5 rounded-full border-2 border-[var(--tiger-surface,#ffffff)] ${dotBg}`;
2966
+ var timelineDotBase = "w-2.5 h-2.5 rounded-full border-2 border-[var(--tiger-surface,#ffffff)]";
2967
+ var timelineDotBg = "bg-[var(--tiger-timeline-dot,#d1d5db)]";
2968
+ var timelineDotClasses = `${timelineDotBase} ${timelineDotBg}`;
2978
2969
  var HEAD_TOP = "top-[18px]";
2979
2970
  var TAIL_TOP = "top-[23px]";
2980
2971
  var TAIL_BOTTOM = "-bottom-[23px]";
@@ -2990,22 +2981,21 @@ function getTimelineItemClasses(mode, position, isLast = false) {
2990
2981
  }
2991
2982
  return `${base} pl-8`;
2992
2983
  }
2993
- function getTimelineTailClasses(mode, _position, isLast = false) {
2984
+ function getTimelineTailClasses(mode, isLast = false) {
2994
2985
  if (isLast) return "hidden";
2995
2986
  const span = `${timelineTailClasses} ${TAIL_TOP} ${TAIL_BOTTOM}`;
2996
2987
  if (mode === "right") return `${span} right-0 translate-x-1/2`;
2997
2988
  if (mode === "alternate") return `${span} left-1/2 -translate-x-1/2`;
2998
2989
  return `${span} left-0 -translate-x-1/2`;
2999
2990
  }
3000
- function getTimelineHeadClasses(mode, _position) {
2991
+ function getTimelineHeadClasses(mode) {
3001
2992
  if (mode === "right") return `${timelineHeadClasses} right-0 ${HEAD_TOP} translate-x-1/2`;
3002
2993
  if (mode === "alternate") return `${timelineHeadClasses} left-1/2 -translate-x-1/2 ${HEAD_TOP}`;
3003
2994
  return `${timelineHeadClasses} left-0 ${HEAD_TOP} -translate-x-1/2`;
3004
2995
  }
3005
2996
  function getTimelineDotClasses(color, isCustom = false) {
3006
2997
  if (isCustom) return timelineCustomDotClasses;
3007
- if (color) return timelineDotClasses.replace(dotBg, "");
3008
- return timelineDotClasses;
2998
+ return color ? timelineDotBase : timelineDotClasses;
3009
2999
  }
3010
3000
  function getTimelineContentClasses(mode, position) {
3011
3001
  if (mode === "right") return `${timelineContentClasses} pr-2`;
@@ -3039,7 +3029,7 @@ var treeBaseClasses = "w-full bg-white rounded-lg";
3039
3029
  var treeNodeWrapperClasses = "select-none";
3040
3030
  var treeNodeContentClasses = "flex items-center px-2 py-1.5 cursor-pointer rounded transition-colors duration-200";
3041
3031
  var treeNodeHoverClasses = "hover:bg-gray-50";
3042
- var treeNodeSelectedClasses = "bg-[var(--tiger-primary,#2563eb)] bg-opacity-10 text-[var(--tiger-primary,#2563eb)]";
3032
+ var treeNodeSelectedClasses = "bg-[color-mix(in_srgb,var(--tiger-primary,#2563eb)_10%,transparent)] text-[var(--tiger-primary,#2563eb)]";
3043
3033
  var treeNodeDisabledClasses = "opacity-50 cursor-not-allowed";
3044
3034
  var treeNodeIndentClasses = "inline-block w-6";
3045
3035
  var treeNodeExpandIconClasses = "inline-flex items-center justify-center w-6 h-6 transition-transform duration-200";
@@ -3052,40 +3042,16 @@ var treeLoadingClasses = "inline-block ml-2 animate-spin h-4 w-4";
3052
3042
  var treeEmptyStateClasses = "py-8 text-center text-gray-500";
3053
3043
  var treeLineClasses = "border-l border-gray-300";
3054
3044
  function getTreeNodeClasses(selected, disabled, blockNode = false) {
3055
- const classes = [treeNodeContentClasses];
3056
- if (!disabled) {
3057
- classes.push(treeNodeHoverClasses);
3058
- }
3059
- if (selected) {
3060
- classes.push(treeNodeSelectedClasses);
3061
- }
3062
- if (disabled) {
3063
- classes.push(treeNodeDisabledClasses);
3064
- }
3065
- if (blockNode) {
3066
- classes.push("w-full");
3067
- }
3068
- return classes.join(" ");
3045
+ return classNames(
3046
+ treeNodeContentClasses,
3047
+ !disabled && treeNodeHoverClasses,
3048
+ selected && treeNodeSelectedClasses,
3049
+ disabled && treeNodeDisabledClasses,
3050
+ blockNode && "w-full"
3051
+ );
3069
3052
  }
3070
3053
  function getTreeNodeExpandIconClasses(expanded) {
3071
- const classes = [treeNodeExpandIconClasses];
3072
- if (expanded) {
3073
- classes.push(treeNodeExpandIconExpandedClasses);
3074
- }
3075
- return classes.join(" ");
3076
- }
3077
- function flattenTree(treeData, expandedKeys = /* @__PURE__ */ new Set()) {
3078
- const result = [];
3079
- function traverse(nodes, level = 0, parentKey) {
3080
- nodes.forEach((node) => {
3081
- result.push({ ...node, level, parentKey });
3082
- if (node.children && node.children.length > 0 && expandedKeys.has(node.key)) {
3083
- traverse(node.children, level + 1, node.key);
3084
- }
3085
- });
3086
- }
3087
- traverse(treeData);
3088
- return result;
3054
+ return classNames(treeNodeExpandIconClasses, expanded && treeNodeExpandIconExpandedClasses);
3089
3055
  }
3090
3056
  function getAllKeys(treeData) {
3091
3057
  const keys = [];
@@ -3307,18 +3273,12 @@ function getAutoExpandKeys(treeData, matchedKeys) {
3307
3273
  });
3308
3274
  return expandKeys;
3309
3275
  }
3310
- var defaultExpandIcon = (expanded) => `
3311
- <svg class="${getTreeNodeExpandIconClasses(
3312
- expanded
3313
- )}" width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
3314
- <path d="M6 4l4 4-4 4V4z"/>
3315
- </svg>
3316
- `;
3317
- var defaultIndeterminateIcon = `
3318
- <svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
3319
- <rect x="4" y="7" width="8" height="2" rx="1"/>
3320
- </svg>
3321
- `;
3276
+ function checkedSetsFromState(state) {
3277
+ return {
3278
+ checkedSet: new Set(state.checked),
3279
+ halfCheckedSet: new Set(state.halfChecked)
3280
+ };
3281
+ }
3322
3282
 
3323
3283
  // src/utils/skeleton-utils.ts
3324
3284
  var skeletonBaseClasses = "bg-[var(--tiger-skeleton-bg,#e5e7eb)] rounded";
@@ -3382,7 +3342,7 @@ function getParagraphRowWidth(rowIndex, totalRows) {
3382
3342
  // src/utils/progress-utils.ts
3383
3343
  var progressLineBaseClasses = "relative overflow-hidden rounded-full";
3384
3344
  var progressLineInnerClasses = "h-full rounded-full transition-all duration-300 ease-in-out flex items-center justify-end";
3385
- var progressTextBaseClasses = "font-medium ml-2 text-[color:var(--tiger-text,#374151)]";
3345
+ var progressTextBaseClasses = "font-medium ml-2";
3386
3346
  var progressCircleBaseClasses = "relative inline-flex items-center justify-center";
3387
3347
  var progressLineSizeClasses = {
3388
3348
  sm: "h-2",
@@ -3422,7 +3382,7 @@ function formatProgressText(percentage, customText, formatFn) {
3422
3382
  function clampPercentage(percentage) {
3423
3383
  return Math.max(0, Math.min(100, percentage));
3424
3384
  }
3425
- function calculateCirclePath(radius, strokeWidth, percentage) {
3385
+ function calculateCirclePath(radius, percentage) {
3426
3386
  const circumference = 2 * Math.PI * radius;
3427
3387
  const offset2 = circumference - percentage / 100 * circumference;
3428
3388
  return {
@@ -3460,7 +3420,6 @@ var collapseIconPositionClasses = {
3460
3420
  end: "ml-auto"
3461
3421
  };
3462
3422
  var collapseHeaderTextClasses = "flex-1 font-medium text-gray-900";
3463
- var collapseExtraClasses = "ml-auto";
3464
3423
  function getCollapseContainerClasses(bordered, ghost, className) {
3465
3424
  const classes = [collapseBaseClasses];
3466
3425
  if (ghost) {
@@ -3471,7 +3430,7 @@ function getCollapseContainerClasses(bordered, ghost, className) {
3471
3430
  if (className) {
3472
3431
  classes.push(className);
3473
3432
  }
3474
- return classes.filter(Boolean).join(" ");
3433
+ return classes.join(" ");
3475
3434
  }
3476
3435
  function getCollapsePanelClasses(ghost, className) {
3477
3436
  const classes = [];
@@ -3481,7 +3440,7 @@ function getCollapsePanelClasses(ghost, className) {
3481
3440
  if (className) {
3482
3441
  classes.push(className);
3483
3442
  }
3484
- return classes.filter(Boolean).join(" ");
3443
+ return classes.join(" ");
3485
3444
  }
3486
3445
  function getCollapsePanelHeaderClasses(active, disabled, className) {
3487
3446
  const classes = [collapsePanelHeaderBaseClasses];
@@ -3493,7 +3452,7 @@ function getCollapsePanelHeaderClasses(active, disabled, className) {
3493
3452
  if (className) {
3494
3453
  classes.push(className);
3495
3454
  }
3496
- return classes.filter(Boolean).join(" ");
3455
+ return classes.join(" ");
3497
3456
  }
3498
3457
  function getCollapseIconClasses(expanded, position, className) {
3499
3458
  const classes = [collapseIconBaseClasses, collapseIconPositionClasses[position]];
@@ -3503,7 +3462,7 @@ function getCollapseIconClasses(expanded, position, className) {
3503
3462
  if (className) {
3504
3463
  classes.push(className);
3505
3464
  }
3506
- return classes.filter(Boolean).join(" ");
3465
+ return classes.join(" ");
3507
3466
  }
3508
3467
  function normalizeActiveKeys(activeKey) {
3509
3468
  if (activeKey === void 0) {
@@ -3526,11 +3485,6 @@ function togglePanelKey(panelKey, activeKeys, accordion) {
3526
3485
  }
3527
3486
  }
3528
3487
  }
3529
- var collapseRightArrowIcon = `
3530
- <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
3531
- <path d="M6 12L10 8L6 4" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3532
- </svg>
3533
- `.trim();
3534
3488
 
3535
3489
  // src/utils/menu-utils.ts
3536
3490
  var menuBaseClasses = "flex border bg-[var(--tiger-surface,#ffffff)] text-[var(--tiger-text,#111827)] border-[var(--tiger-border,#e5e7eb)]";
@@ -3626,15 +3580,71 @@ function replaceKeys(key, keys) {
3626
3580
  }
3627
3581
  return [key];
3628
3582
  }
3583
+ function getMenuButtons(container) {
3584
+ return Array.from(
3585
+ container.querySelectorAll('button[data-tiger-menuitem="true"]')
3586
+ ).filter((el) => !el.disabled && !el.closest('[data-tiger-menu-hidden="true"]'));
3587
+ }
3588
+ function moveFocusInMenu(current, delta) {
3589
+ const menuEl = current.closest('ul[role="menu"]');
3590
+ if (!menuEl) return;
3591
+ const items = getMenuButtons(menuEl);
3592
+ const idx = items.indexOf(current);
3593
+ if (idx < 0) return;
3594
+ const next = items[(idx + delta + items.length) % items.length];
3595
+ items.forEach((el) => {
3596
+ el.tabIndex = el === next ? 0 : -1;
3597
+ });
3598
+ next.focus();
3599
+ }
3600
+ function focusMenuEdge(current, edge) {
3601
+ const menuEl = current.closest('ul[role="menu"]');
3602
+ if (!menuEl) return;
3603
+ const items = getMenuButtons(menuEl);
3604
+ if (items.length === 0) return;
3605
+ const target = edge === "start" ? items[0] : items[items.length - 1];
3606
+ items.forEach((el) => {
3607
+ el.tabIndex = el === target ? 0 : -1;
3608
+ });
3609
+ target.focus();
3610
+ }
3611
+ function initRovingTabIndex(root) {
3612
+ const items = getMenuButtons(root);
3613
+ if (items.length === 0) return;
3614
+ const hasActive = items.some((el) => el.tabIndex === 0);
3615
+ if (hasActive) return;
3616
+ const selected = items.find((el) => el.dataset.tigerSelected === "true");
3617
+ const active = selected ?? items[0];
3618
+ items.forEach((el) => {
3619
+ el.tabIndex = el === active ? 0 : -1;
3620
+ });
3621
+ }
3622
+ function focusFirstChildItem(titleEl) {
3623
+ const li = titleEl.closest("li");
3624
+ const submenu = li?.querySelector('ul[role="menu"]');
3625
+ if (!submenu) return;
3626
+ const items = getMenuButtons(submenu);
3627
+ if (items.length === 0) return;
3628
+ items.forEach((el, idx) => {
3629
+ el.tabIndex = idx === 0 ? 0 : -1;
3630
+ });
3631
+ items[0].focus();
3632
+ }
3629
3633
 
3630
3634
  // src/utils/tabs-utils.ts
3631
3635
  var tabsBaseClasses = "w-full";
3632
- var tabNavBaseClasses = "flex transition-colors duration-200";
3636
+ var tabNavBaseClasses = "flex";
3633
3637
  var tabNavPositionClasses = {
3634
- top: "flex-row border-b border-gray-200",
3635
- bottom: "flex-row border-t border-gray-200",
3636
- left: "flex-col border-r border-gray-200",
3637
- right: "flex-col border-l border-gray-200"
3638
+ top: "flex-row",
3639
+ bottom: "flex-row",
3640
+ left: "flex-col",
3641
+ right: "flex-col"
3642
+ };
3643
+ var tabNavLineBorderClasses = {
3644
+ top: "border-b border-gray-200",
3645
+ bottom: "border-t border-gray-200",
3646
+ left: "border-r border-gray-200",
3647
+ right: "border-l border-gray-200"
3638
3648
  };
3639
3649
  var tabNavListBaseClasses = "flex gap-1";
3640
3650
  var tabNavListPositionClasses = {
@@ -3644,7 +3654,7 @@ var tabNavListPositionClasses = {
3644
3654
  right: "flex-col"
3645
3655
  };
3646
3656
  var tabNavListCenteredClasses = "justify-center";
3647
- var tabItemBaseClasses = "relative px-4 py-2 cursor-pointer transition-all duration-200 select-none flex items-center gap-2 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--tiger-focus-ring,var(--tiger-primary,#2563eb))] focus-visible:ring-offset-2 active:opacity-90";
3657
+ var tabItemBaseClasses = "relative cursor-pointer transition-all duration-200 select-none flex items-center gap-2 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--tiger-focus-ring,var(--tiger-primary,#2563eb))] focus-visible:ring-offset-2 active:opacity-90";
3648
3658
  var tabItemSizeClasses = {
3649
3659
  small: "text-sm px-3 py-1.5",
3650
3660
  medium: "text-base px-4 py-2",
@@ -3663,63 +3673,39 @@ var tabPaneBaseClasses = "w-full";
3663
3673
  var tabPaneHiddenClasses = "hidden";
3664
3674
  var tabAddButtonClasses = "px-3 py-2 border border-gray-200 rounded-t bg-gray-50 hover:bg-white hover:text-[var(--tiger-primary,#2563eb)] text-gray-600 cursor-pointer transition-colors duration-200";
3665
3675
  function getTabsContainerClasses(position) {
3666
- const classes = [tabsBaseClasses];
3667
- if (position === "left" || position === "right") {
3668
- classes.push("flex");
3669
- if (position === "right") {
3670
- classes.push("flex-row-reverse");
3671
- }
3672
- }
3673
- return classes.filter(Boolean).join(" ");
3676
+ if (position === "right") return `${tabsBaseClasses} flex flex-row-reverse`;
3677
+ if (position === "left") return `${tabsBaseClasses} flex`;
3678
+ return tabsBaseClasses;
3674
3679
  }
3675
3680
  function getTabNavClasses(position, type) {
3676
- const classes = [tabNavBaseClasses, tabNavPositionClasses[position]];
3677
- if (type === "card" || type === "editable-card") {
3678
- classes.push("border-0");
3679
- }
3680
- return classes.filter(Boolean).join(" ");
3681
+ const base = `${tabNavBaseClasses} ${tabNavPositionClasses[position]}`;
3682
+ return type === "line" ? `${base} ${tabNavLineBorderClasses[position]}` : base;
3681
3683
  }
3682
3684
  function getTabNavListClasses(position, centered) {
3683
- const classes = [tabNavListBaseClasses, tabNavListPositionClasses[position]];
3684
- if (centered && (position === "top" || position === "bottom")) {
3685
- classes.push(tabNavListCenteredClasses);
3686
- }
3687
- return classes.filter(Boolean).join(" ");
3685
+ const base = `${tabNavListBaseClasses} ${tabNavListPositionClasses[position]}`;
3686
+ return centered && (position === "top" || position === "bottom") ? `${base} ${tabNavListCenteredClasses}` : base;
3688
3687
  }
3689
3688
  function getTabItemClasses(active, disabled, type, size) {
3690
- const classes = [tabItemBaseClasses, tabItemSizeClasses[size]];
3691
- if (disabled) {
3692
- classes.push(tabItemDisabledClasses);
3693
- } else {
3694
- switch (type) {
3695
- case "line":
3696
- classes.push(tabItemLineClasses);
3697
- if (active) {
3698
- classes.push(tabItemLineActiveClasses);
3699
- }
3700
- break;
3701
- case "card":
3702
- classes.push(tabItemCardClasses);
3703
- if (active) {
3704
- classes.push(tabItemCardActiveClasses);
3705
- }
3706
- break;
3707
- case "editable-card":
3708
- classes.push(tabItemEditableCardClasses);
3709
- if (active) {
3710
- classes.push(tabItemEditableCardActiveClasses);
3711
- }
3712
- break;
3713
- }
3689
+ let cls = `${tabItemBaseClasses} ${tabItemSizeClasses[size]}`;
3690
+ if (disabled) return `${cls} ${tabItemDisabledClasses}`;
3691
+ switch (type) {
3692
+ case "line":
3693
+ cls += ` ${tabItemLineClasses}`;
3694
+ if (active) cls += ` ${tabItemLineActiveClasses}`;
3695
+ break;
3696
+ case "card":
3697
+ cls += ` ${tabItemCardClasses}`;
3698
+ if (active) cls += ` ${tabItemCardActiveClasses}`;
3699
+ break;
3700
+ case "editable-card":
3701
+ cls += ` ${tabItemEditableCardClasses}`;
3702
+ if (active) cls += ` ${tabItemEditableCardActiveClasses}`;
3703
+ break;
3714
3704
  }
3715
- return classes.filter(Boolean).join(" ");
3705
+ return cls;
3716
3706
  }
3717
3707
  function getTabPaneClasses(active) {
3718
- const classes = [tabPaneBaseClasses];
3719
- if (!active) {
3720
- classes.push(tabPaneHiddenClasses);
3721
- }
3722
- return classes.filter(Boolean).join(" ");
3708
+ return active ? tabPaneBaseClasses : `${tabPaneBaseClasses} ${tabPaneHiddenClasses}`;
3723
3709
  }
3724
3710
  function isKeyActive(key, activeKey) {
3725
3711
  return activeKey !== void 0 && key === activeKey;
@@ -3749,16 +3735,14 @@ var breadcrumbLinkClasses = classNames(
3749
3735
  );
3750
3736
  var breadcrumbCurrentClasses = classNames("text-gray-900 font-medium", "cursor-default");
3751
3737
  var breadcrumbSeparatorBaseClasses = "text-gray-400 select-none";
3752
- function getBreadcrumbItemClasses(current, className) {
3738
+ function getBreadcrumbItemClasses(className) {
3753
3739
  return classNames(breadcrumbItemBaseClasses, className);
3754
3740
  }
3755
3741
  function getBreadcrumbLinkClasses(current) {
3756
3742
  return current ? breadcrumbCurrentClasses : breadcrumbLinkClasses;
3757
3743
  }
3758
3744
  function getSeparatorContent(separator) {
3759
- if (!separator || separator === "/") {
3760
- return "/";
3761
- }
3745
+ if (!separator) return "/";
3762
3746
  switch (separator) {
3763
3747
  case "slash":
3764
3748
  return "/";
@@ -3775,61 +3759,53 @@ function getBreadcrumbSeparatorClasses(className) {
3775
3759
  }
3776
3760
 
3777
3761
  // src/utils/steps-utils.ts
3778
- var stepFinishIconSvgClasses = "w-5 h-5";
3779
- var stepFinishIconViewBox = "0 0 24 24";
3780
- var stepFinishIconPathD = "M5 13l4 4L19 7";
3781
- var stepFinishIconPathStrokeLinecap = "round";
3782
- var stepFinishIconPathStrokeLinejoin = "round";
3783
- var stepFinishIconPathStrokeWidth = 2;
3762
+ var stepFinishChar = "\u2713";
3784
3763
  function getStepsContainerClasses(direction) {
3785
- const baseClasses = "tiger-steps w-full list-none m-0 p-0";
3764
+ const baseClasses2 = "tiger-steps w-full list-none m-0 p-0";
3786
3765
  if (direction === "vertical") {
3787
- return `${baseClasses} flex flex-col`;
3766
+ return `${baseClasses2} flex flex-col`;
3788
3767
  }
3789
- return `${baseClasses} flex flex-row items-start`;
3768
+ return `${baseClasses2} flex flex-row items-start`;
3790
3769
  }
3791
- function getStepItemClasses(direction, isLast, simple) {
3792
- const baseClasses = "tiger-step-item relative";
3770
+ function getStepItemClasses(direction, isLast) {
3771
+ const baseClasses2 = "tiger-step-item relative";
3793
3772
  if (direction === "vertical") {
3794
- return `${baseClasses} flex flex-row ${!isLast ? "pb-6" : ""}`;
3773
+ return `${baseClasses2} flex flex-row ${!isLast ? "pb-6" : ""}`;
3795
3774
  }
3796
- return `${baseClasses} flex flex-col flex-1 items-center`;
3775
+ return `${baseClasses2} flex flex-col flex-1 items-center`;
3797
3776
  }
3798
3777
  function getStepIconClasses(status, size, simple, isCustomIcon) {
3799
- const baseClasses = "tiger-step-icon flex items-center justify-center rounded-full border-2 transition-all duration-200";
3778
+ const baseClasses2 = "tiger-step-icon relative z-10 flex items-center justify-center rounded-full border-2";
3800
3779
  const sizeClasses = simple ? "w-6 h-6 text-xs" : size === "small" ? "w-8 h-8 text-sm" : "w-10 h-10 text-base";
3801
3780
  const iconClasses = isCustomIcon ? "" : "font-medium";
3781
+ const activeClasses = "bg-[var(--tiger-primary,#2563eb)] border-[var(--tiger-primary,#2563eb)] text-white";
3802
3782
  const statusClasses = {
3803
3783
  wait: "bg-[var(--tiger-surface-muted,#f3f4f6)] border-[var(--tiger-border,#e5e7eb)] text-[var(--tiger-text-muted,#6b7280)]",
3804
- process: "bg-[var(--tiger-primary,#2563eb)] border-[var(--tiger-primary,#2563eb)] text-white",
3805
- finish: "bg-[var(--tiger-primary,#2563eb)] border-[var(--tiger-primary,#2563eb)] text-white",
3784
+ process: activeClasses,
3785
+ finish: activeClasses,
3806
3786
  error: "bg-[var(--tiger-error-bg,#fef2f2)] border-[var(--tiger-error,#ef4444)] text-[var(--tiger-error,#ef4444)]"
3807
3787
  };
3808
- return `${baseClasses} ${sizeClasses} ${iconClasses} ${statusClasses[status]}`;
3788
+ return `${baseClasses2} ${sizeClasses} ${iconClasses} ${statusClasses[status]}`;
3809
3789
  }
3810
- function getStepTailClasses(direction, status, isLast) {
3811
- if (isLast) {
3812
- return "hidden";
3813
- }
3814
- const baseClasses = "tiger-step-tail transition-all duration-200";
3790
+ function getStepTailClasses(direction, status, isLast, size, simple) {
3791
+ if (isLast) return "hidden";
3792
+ const colorClasses = status === "finish" ? "bg-[var(--tiger-primary,#2563eb)]" : "bg-[var(--tiger-border,#e5e7eb)]";
3815
3793
  if (direction === "vertical") {
3816
- const positionClasses2 = "absolute left-4 top-10 w-0.5 h-full";
3817
- const colorClasses2 = status === "finish" ? "bg-[var(--tiger-primary,#2563eb)]" : "bg-[var(--tiger-border,#e5e7eb)]";
3818
- return `${baseClasses} ${positionClasses2} ${colorClasses2}`;
3794
+ const verticalClasses = simple ? "absolute left-3 top-6 w-0.5 h-full" : size === "small" ? "absolute left-4 top-8 w-0.5 h-full" : "absolute left-5 top-10 w-0.5 h-full";
3795
+ return `tiger-step-tail ${verticalClasses} ${colorClasses}`;
3819
3796
  }
3820
- const positionClasses = "flex-1 h-0.5 mx-2 mt-5";
3821
- const colorClasses = status === "finish" ? "bg-[var(--tiger-primary,#2563eb)]" : "bg-[var(--tiger-border,#e5e7eb)]";
3822
- return `${baseClasses} ${positionClasses} ${colorClasses}`;
3797
+ const horizontalClasses = simple ? "absolute top-3 left-1/2 w-full h-0.5" : size === "small" ? "absolute top-4 left-1/2 w-full h-0.5" : "absolute top-5 left-1/2 w-full h-0.5";
3798
+ return `tiger-step-tail ${horizontalClasses} ${colorClasses}`;
3823
3799
  }
3824
- function getStepContentClasses(direction, simple) {
3825
- const baseClasses = "tiger-step-content";
3800
+ function getStepContentClasses(direction) {
3801
+ const baseClasses2 = "tiger-step-content";
3826
3802
  if (direction === "vertical") {
3827
- return `${baseClasses} ml-4 flex-1`;
3803
+ return `${baseClasses2} ml-4 flex-1`;
3828
3804
  }
3829
- return `${baseClasses} mt-2 text-center`;
3805
+ return `${baseClasses2} mt-2 text-center`;
3830
3806
  }
3831
3807
  function getStepTitleClasses(status, size, clickable) {
3832
- const baseClasses = "tiger-step-title font-medium transition-colors duration-200 bg-transparent border-0 p-0";
3808
+ const baseClasses2 = "tiger-step-title font-medium";
3833
3809
  const sizeClasses = size === "small" ? "text-sm" : "text-base";
3834
3810
  const statusClasses = {
3835
3811
  wait: "text-[var(--tiger-text-muted,#6b7280)]",
@@ -3837,19 +3813,14 @@ function getStepTitleClasses(status, size, clickable) {
3837
3813
  finish: "text-[var(--tiger-text,#111827)]",
3838
3814
  error: "text-[var(--tiger-error,#ef4444)]"
3839
3815
  };
3840
- const cursorClasses = clickable ? "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)]" : "";
3841
- return `${baseClasses} ${sizeClasses} ${statusClasses[status]} ${cursorClasses}`;
3816
+ 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)]" : "";
3817
+ return `${baseClasses2} ${sizeClasses} ${statusClasses[status]} ${cursorClasses}`;
3842
3818
  }
3843
3819
  function getStepDescriptionClasses(status, size) {
3844
- const baseClasses = "tiger-step-description mt-1 transition-colors duration-200";
3820
+ const baseClasses2 = "tiger-step-description mt-1";
3845
3821
  const sizeClasses = size === "small" ? "text-xs" : "text-sm";
3846
- const statusClasses = {
3847
- wait: "text-[var(--tiger-text-muted,#6b7280)]",
3848
- process: "text-[var(--tiger-text-muted,#6b7280)]",
3849
- finish: "text-[var(--tiger-text-muted,#6b7280)]",
3850
- error: "text-[var(--tiger-error,#ef4444)]"
3851
- };
3852
- return `${baseClasses} ${sizeClasses} ${statusClasses[status]}`;
3822
+ const statusClass = status === "error" ? "text-[var(--tiger-error,#ef4444)]" : "text-[var(--tiger-text-muted,#6b7280)]";
3823
+ return `${baseClasses2} ${sizeClasses} ${statusClass}`;
3853
3824
  }
3854
3825
  function calculateStepStatus(index, currentIndex, currentStatus, customStatus) {
3855
3826
  if (customStatus) {
@@ -3984,13 +3955,16 @@ function getPageSizeSelectorClasses(size = "medium") {
3984
3955
  sizeClasses[size]
3985
3956
  );
3986
3957
  }
3987
- function getTotalTextClasses(size = "medium") {
3958
+ function getSizeTextClasses(size = "medium") {
3988
3959
  const sizeClasses = {
3989
3960
  small: "text-sm",
3990
3961
  medium: "text-base",
3991
3962
  large: "text-lg"
3992
3963
  };
3993
- return classNames("text-[var(--tiger-text-muted,#6b7280)]", "mr-2", sizeClasses[size]);
3964
+ return sizeClasses[size];
3965
+ }
3966
+ function getTotalTextClasses(size = "medium") {
3967
+ return classNames("text-[var(--tiger-text-muted,#6b7280)]", "mr-2", getSizeTextClasses(size));
3994
3968
  }
3995
3969
  function getSimplePaginationContainerClasses() {
3996
3970
  return classNames(
@@ -4037,48 +4011,45 @@ function getDropdownContainerClasses() {
4037
4011
  function getDropdownTriggerClasses(disabled) {
4038
4012
  return classNames(
4039
4013
  "tiger-dropdown-trigger",
4040
- "cursor-pointer",
4041
- disabled && "cursor-not-allowed opacity-50"
4014
+ "inline-flex items-center gap-1.5",
4015
+ "select-none",
4016
+ disabled ? "cursor-not-allowed opacity-50 pointer-events-none" : "cursor-pointer"
4042
4017
  );
4043
4018
  }
4044
- function getDropdownMenuWrapperClasses(visible, placement) {
4045
- const positionClasses = getPlacementClasses(placement);
4019
+ function getDropdownChevronClasses(visible) {
4046
4020
  return classNames(
4047
- "tiger-dropdown-menu-wrapper",
4048
- "absolute",
4049
- "z-50",
4050
- positionClasses,
4051
- visible ? "block" : "hidden"
4021
+ "tiger-dropdown-chevron",
4022
+ "w-4 h-4 shrink-0",
4023
+ "text-[var(--tiger-text-muted,#9ca3af)]",
4024
+ "transition-transform duration-200 ease-out",
4025
+ visible && "rotate-180"
4052
4026
  );
4053
4027
  }
4028
+ var DROPDOWN_CHEVRON_PATH = "M6 9l6 6 6-6";
4054
4029
  function getDropdownMenuClasses() {
4055
4030
  return classNames(
4056
4031
  "tiger-dropdown-menu",
4057
4032
  "min-w-[160px]",
4058
- "py-1",
4059
- "rounded-md",
4060
- "shadow-lg",
4033
+ "py-1.5 px-1",
4034
+ "rounded-lg",
4035
+ "bg-[var(--tiger-surface,#ffffff)]",
4061
4036
  "border border-[var(--tiger-border,#e5e7eb)]",
4062
- "bg-[var(--tiger-surface,#ffffff)]"
4037
+ "shadow-[0_6px_16px_-2px_rgba(0,0,0,0.12),0_2px_6px_-1px_rgba(0,0,0,0.08)]",
4038
+ "ring-1 ring-black/[0.04]"
4063
4039
  );
4064
4040
  }
4065
4041
  function getDropdownItemClasses(disabled, divided) {
4066
4042
  return classNames(
4067
4043
  "tiger-dropdown-item",
4068
- "flex",
4069
- "items-center",
4070
- "gap-2",
4071
- "px-4",
4072
- "py-2",
4073
- "text-sm",
4074
- "text-[var(--tiger-text,#374151)]",
4075
- "transition-colors",
4076
- "duration-150",
4077
- "w-full",
4044
+ "flex items-center gap-2",
4045
+ "w-full rounded-md",
4046
+ "px-3 py-1.5",
4047
+ "text-sm text-[var(--tiger-text,#374151)]",
4048
+ "transition-colors duration-150",
4078
4049
  "text-left",
4079
4050
  "focus:outline-none",
4080
- "focus-visible:ring-2 focus-visible:ring-[var(--tiger-primary,#2563eb)] focus-visible:ring-opacity-50",
4081
- divided && "border-t border-[var(--tiger-border,#e5e7eb)]",
4051
+ "focus-visible:ring-2 focus-visible:ring-[var(--tiger-primary,#2563eb)] focus-visible:ring-inset",
4052
+ divided && "mt-1 border-t border-[var(--tiger-border,#e5e7eb)] pt-1",
4082
4053
  disabled ? "cursor-not-allowed opacity-50" : classNames(
4083
4054
  "cursor-pointer",
4084
4055
  "hover:bg-[var(--tiger-surface-muted,#f3f4f6)]",
@@ -4086,23 +4057,36 @@ function getDropdownItemClasses(disabled, divided) {
4086
4057
  )
4087
4058
  );
4088
4059
  }
4089
- function getPlacementClasses(placement) {
4090
- const placementMap = {
4091
- "bottom-start": "top-full left-0 mt-2",
4092
- bottom: "top-full left-1/2 -translate-x-1/2 mt-2",
4093
- "bottom-end": "top-full right-0 mt-2",
4094
- "top-start": "bottom-full left-0 mb-2",
4095
- top: "bottom-full left-1/2 -translate-x-1/2 mb-2",
4096
- "top-end": "bottom-full right-0 mb-2",
4097
- "left-start": "right-full top-0 mr-2",
4098
- left: "right-full top-1/2 -translate-y-1/2 mr-2",
4099
- "left-end": "right-full bottom-0 mr-2",
4100
- "right-start": "left-full top-0 ml-2",
4101
- right: "left-full top-1/2 -translate-y-1/2 ml-2",
4102
- "right-end": "left-full bottom-0 ml-2"
4103
- };
4104
- return placementMap[placement] || placementMap["bottom-start"];
4060
+ var DROPDOWN_ANIMATION_CSS = `
4061
+ @keyframes tiger-dropdown-in {
4062
+ from {
4063
+ opacity: 0;
4064
+ transform: scale(0.95);
4065
+ }
4066
+ to {
4067
+ opacity: 1;
4068
+ transform: scale(1);
4069
+ }
4070
+ }
4071
+ .tiger-dropdown-enter {
4072
+ animation: tiger-dropdown-in 0.15s ease-out;
4073
+ }
4074
+ `;
4075
+ var isDropdownStyleInjected = false;
4076
+ function injectDropdownStyles() {
4077
+ if (typeof document === "undefined" || isDropdownStyleInjected) return;
4078
+ const styleId = "tiger-ui-dropdown-styles";
4079
+ if (document.getElementById(styleId)) {
4080
+ isDropdownStyleInjected = true;
4081
+ return;
4082
+ }
4083
+ const style = document.createElement("style");
4084
+ style.id = styleId;
4085
+ style.textContent = DROPDOWN_ANIMATION_CSS;
4086
+ document.head.appendChild(style);
4087
+ isDropdownStyleInjected = true;
4105
4088
  }
4089
+ var DROPDOWN_ENTER_CLASS = "tiger-dropdown-enter";
4106
4090
 
4107
4091
  // src/utils/drawer-utils.ts
4108
4092
  function getDrawerMaskClasses(visible) {
@@ -4111,12 +4095,11 @@ function getDrawerMaskClasses(visible) {
4111
4095
  visible ? "opacity-100" : "opacity-0 pointer-events-none"
4112
4096
  );
4113
4097
  }
4114
- function getDrawerContainerClasses(zIndex) {
4115
- void zIndex;
4098
+ function getDrawerContainerClasses() {
4116
4099
  return "fixed inset-0 overflow-hidden";
4117
4100
  }
4118
4101
  function getDrawerPanelClasses(placement, visible, size) {
4119
- const baseClasses = "absolute bg-[var(--tiger-surface,#ffffff)] shadow-xl transition-transform duration-300 ease-in-out pointer-events-auto";
4102
+ const baseClasses2 = "absolute bg-[var(--tiger-surface,#ffffff)] shadow-xl transition-transform duration-300 ease-in-out pointer-events-auto";
4120
4103
  const sizeMap = {
4121
4104
  sm: { width: "w-64", height: "h-48" },
4122
4105
  md: { width: "w-96", height: "h-64" },
@@ -4146,7 +4129,7 @@ function getDrawerPanelClasses(placement, visible, size) {
4146
4129
  visible ? "translate-y-0" : "translate-y-full"
4147
4130
  )
4148
4131
  };
4149
- return classNames(baseClasses, placementClasses[placement]);
4132
+ return classNames(baseClasses2, placementClasses[placement]);
4150
4133
  }
4151
4134
  function getDrawerHeaderClasses() {
4152
4135
  return "flex items-center justify-between px-6 py-4 border-b border-[var(--tiger-border,#e5e7eb)]";
@@ -4221,19 +4204,15 @@ var alertDescriptionSizeClasses = {
4221
4204
  var alertCloseButtonBaseClasses = "ml-auto -mr-1 -mt-0.5 rounded-md p-1.5 inline-flex focus:outline-none focus:ring-2 focus:ring-offset-2 transition-colors";
4222
4205
  var alertIconContainerClasses = "flex-shrink-0";
4223
4206
  var alertContentClasses = "flex-1 ml-3";
4224
- var alertSuccessIconPath = statusSuccessIconPath;
4225
- var alertWarningIconPath = statusWarningIconPath;
4226
- var alertErrorIconPath = statusErrorIconPath;
4227
- var alertInfoIconPath = statusInfoIconPath;
4228
4207
  var alertCloseIconPath = closeIconPathD;
4208
+ var alertIconPaths = {
4209
+ success: statusSuccessIconPath,
4210
+ warning: statusWarningIconPath,
4211
+ error: statusErrorIconPath,
4212
+ info: statusInfoIconPath
4213
+ };
4229
4214
  function getAlertIconPath(type) {
4230
- const iconPaths = {
4231
- success: alertSuccessIconPath,
4232
- warning: alertWarningIconPath,
4233
- error: alertErrorIconPath,
4234
- info: alertInfoIconPath
4235
- };
4236
- return iconPaths[type];
4215
+ return alertIconPaths[type];
4237
4216
  }
4238
4217
 
4239
4218
  // src/utils/message-utils.ts
@@ -4247,10 +4226,6 @@ var messagePositionClasses = {
4247
4226
  "bottom-right": "bottom-6 right-6"
4248
4227
  };
4249
4228
  var messageBaseClasses = "flex items-center gap-3 px-4 py-3 rounded-lg shadow-lg border pointer-events-auto transition-all duration-300 ease-in-out";
4250
- var messageEnterClasses = "opacity-0 -translate-y-2";
4251
- var messageEnterActiveClasses = "opacity-100 translate-y-0";
4252
- var messageLeaveClasses = "opacity-100 translate-y-0";
4253
- var messageLeaveActiveClasses = "opacity-0 -translate-y-2";
4254
4229
  var defaultMessageThemeColors = {
4255
4230
  info: {
4256
4231
  bg: "bg-[var(--tiger-message-info-bg,#eff6ff)]",
@@ -4284,7 +4259,7 @@ var defaultMessageThemeColors = {
4284
4259
  }
4285
4260
  };
4286
4261
  function getMessageTypeClasses(type, themeColors = defaultMessageThemeColors) {
4287
- return themeColors[type] || themeColors.info;
4262
+ return themeColors[type];
4288
4263
  }
4289
4264
  var messageIconPaths = {
4290
4265
  success: statusSuccessIconPath,
@@ -4294,7 +4269,7 @@ var messageIconPaths = {
4294
4269
  loading: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
4295
4270
  };
4296
4271
  function getMessageIconPath(type) {
4297
- return messageIconPaths[type] || messageIconPaths.info;
4272
+ return messageIconPaths[type];
4298
4273
  }
4299
4274
  var messageCloseIconPath = closeIconPathD;
4300
4275
  var messageCloseButtonClasses = "ml-auto p-1 rounded hover:bg-[var(--tiger-surface-muted,#e5e7eb)] transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-[var(--tiger-primary,#2563eb)]";
@@ -4393,25 +4368,23 @@ function getLoadingOverlaySpinnerClasses(customClassName) {
4393
4368
  function getLoadingClasses(variant, size, color, customColor) {
4394
4369
  const sizeClass = loadingSizeClasses[size];
4395
4370
  const colorClass = customColor ? "" : loadingColorClasses[color];
4396
- const baseClasses = classNames(sizeClass, colorClass);
4371
+ const baseClasses2 = classNames(sizeClass, colorClass);
4397
4372
  switch (variant) {
4398
- case "spinner":
4399
- return classNames(baseClasses, loadingSpinnerBaseClasses);
4400
4373
  case "dots":
4401
- return baseClasses;
4402
4374
  case "bars":
4403
- return baseClasses;
4404
- case "ring":
4405
- return classNames(baseClasses, loadingSpinnerBaseClasses);
4375
+ return baseClasses2;
4406
4376
  case "pulse":
4407
- return classNames(baseClasses, "animate-pulse");
4377
+ return classNames(baseClasses2, "animate-pulse");
4378
+ case "spinner":
4379
+ case "ring":
4408
4380
  default:
4409
- return classNames(baseClasses, loadingSpinnerBaseClasses);
4381
+ return classNames(baseClasses2, loadingSpinnerBaseClasses);
4410
4382
  }
4411
4383
  }
4412
4384
  function getSpinnerSVG(variant) {
4413
4385
  switch (variant) {
4414
4386
  case "spinner":
4387
+ default:
4415
4388
  return {
4416
4389
  viewBox: "0 0 24 24",
4417
4390
  elements: [
@@ -4484,24 +4457,6 @@ function getSpinnerSVG(variant) {
4484
4457
  }
4485
4458
  ]
4486
4459
  };
4487
- default:
4488
- return {
4489
- viewBox: "0 0 24 24",
4490
- elements: [
4491
- {
4492
- type: "circle",
4493
- attrs: {
4494
- className: "opacity-25",
4495
- cx: "12",
4496
- cy: "12",
4497
- r: "10",
4498
- stroke: "currentColor",
4499
- strokeWidth: "4",
4500
- fill: "none"
4501
- }
4502
- }
4503
- ]
4504
- };
4505
4460
  }
4506
4461
  }
4507
4462
  var dotsVariantConfig = {
@@ -4606,6 +4561,25 @@ function injectLoadingAnimationStyles() {
4606
4561
  }
4607
4562
  }
4608
4563
 
4564
+ // src/utils/floating-popup-utils.ts
4565
+ function createFloatingIdFactory(prefix) {
4566
+ let counter = 0;
4567
+ return () => `tiger-${prefix}-${++counter}`;
4568
+ }
4569
+ function buildTriggerHandlerMap(trigger, handlers, framework = "vue") {
4570
+ switch (trigger) {
4571
+ case "click":
4572
+ return { onClick: handlers.toggle };
4573
+ case "hover":
4574
+ return framework === "vue" ? { onMouseenter: handlers.show, onMouseleave: handlers.hide } : { onMouseEnter: handlers.show, onMouseLeave: handlers.hide };
4575
+ case "focus":
4576
+ return framework === "vue" ? { onFocusin: handlers.show, onFocusout: handlers.hide } : { onFocus: handlers.show, onBlur: handlers.hide };
4577
+ case "manual":
4578
+ default:
4579
+ return {};
4580
+ }
4581
+ }
4582
+
4609
4583
  // src/utils/popconfirm-utils.ts
4610
4584
  function getPopconfirmContainerClasses() {
4611
4585
  return classNames("tiger-popconfirm", "relative", "inline-block", "w-fit", "justify-self-start");
@@ -4776,14 +4750,9 @@ function getPopoverTriggerClasses(disabled) {
4776
4750
  }
4777
4751
  function getPopoverContentClasses(width) {
4778
4752
  let widthClass = "min-w-[200px]";
4779
- if (width) {
4780
- if (typeof width === "number") {
4781
- widthClass = `w-[${width}px]`;
4782
- } else if (width.match(/^\d+$/)) {
4783
- widthClass = `w-[${width}px]`;
4784
- } else {
4785
- widthClass = width;
4786
- }
4753
+ if (width != null && width !== "") {
4754
+ const w = String(width);
4755
+ widthClass = /^\d+$/.test(w) ? `w-[${w}px]` : w;
4787
4756
  }
4788
4757
  return classNames(
4789
4758
  "tiger-popover-content",
@@ -4797,20 +4766,26 @@ function getPopoverContentClasses(width) {
4797
4766
  "border-[var(--tiger-border,#e5e7eb)]"
4798
4767
  );
4799
4768
  }
4769
+ var POPOVER_TITLE_CLASSES = classNames(
4770
+ "tiger-popover-title",
4771
+ "text-sm",
4772
+ "font-semibold",
4773
+ "text-[var(--tiger-text,#111827)]",
4774
+ "mb-2",
4775
+ "border-b",
4776
+ "border-[var(--tiger-border,#e5e7eb)]",
4777
+ "pb-2"
4778
+ );
4779
+ var POPOVER_TEXT_CLASSES = classNames(
4780
+ "tiger-popover-text",
4781
+ "text-sm",
4782
+ "text-[var(--tiger-text-muted,#374151)]"
4783
+ );
4800
4784
  function getPopoverTitleClasses() {
4801
- return classNames(
4802
- "tiger-popover-title",
4803
- "text-sm",
4804
- "font-semibold",
4805
- "text-[var(--tiger-text,#111827)]",
4806
- "mb-2",
4807
- "border-b",
4808
- "border-[var(--tiger-border,#e5e7eb)]",
4809
- "pb-2"
4810
- );
4785
+ return POPOVER_TITLE_CLASSES;
4811
4786
  }
4812
4787
  function getPopoverContentTextClasses() {
4813
- return classNames("tiger-popover-text", "text-sm", "text-[var(--tiger-text-muted,#374151)]");
4788
+ return POPOVER_TEXT_CLASSES;
4814
4789
  }
4815
4790
 
4816
4791
  // src/utils/tooltip-utils.ts
@@ -4857,6 +4832,9 @@ var iconSizeClasses = {
4857
4832
  lg: "w-6 h-6",
4858
4833
  xl: "w-8 h-8"
4859
4834
  };
4835
+ var iconSvgDefaultStrokeWidth = 2;
4836
+ var iconSvgDefaultStrokeLinecap = "round";
4837
+ var iconSvgDefaultStrokeLinejoin = "round";
4860
4838
 
4861
4839
  // src/utils/code-utils.ts
4862
4840
  var codeBlockContainerClasses = "relative rounded-lg border border-gray-200 bg-gray-50 text-gray-800 dark:border-gray-800 dark:bg-gray-900/60 dark:text-gray-100";
@@ -4864,82 +4842,377 @@ var codeBlockPreClasses = "m-0 overflow-auto p-4 text-sm leading-relaxed font-mo
4864
4842
  var codeBlockCopyButtonBaseClasses = "absolute right-3 top-0 -translate-y-1/2 inline-flex items-center rounded-md border border-gray-200 bg-white/90 px-1.5 py-0.5 text-[10px] text-gray-600 shadow-sm transition-colors hover:bg-white hover:text-gray-900 dark:border-gray-700 dark:bg-gray-900/90 dark:text-gray-200 dark:hover:bg-gray-800";
4865
4843
  var codeBlockCopyButtonCopiedClasses = "border-[var(--tiger-primary,#2563eb)] text-[var(--tiger-primary,#2563eb)]";
4866
4844
 
4867
- // src/utils/carousel-utils.ts
4868
- var carouselBaseClasses = "relative overflow-hidden w-full";
4869
- var carouselTrackScrollClasses = "flex transition-transform ease-in-out";
4870
- var carouselTrackFadeClasses = "relative";
4871
- var carouselSlideBaseClasses = "flex-shrink-0 w-full";
4872
- var carouselSlideFadeClasses = "absolute inset-0 transition-opacity ease-in-out";
4873
- var carouselDotsBaseClasses = "absolute flex gap-2 z-10";
4874
- var carouselDotsPositionClasses = {
4875
- top: "top-4 left-1/2 -translate-x-1/2 flex-row",
4876
- bottom: "bottom-4 left-1/2 -translate-x-1/2 flex-row",
4877
- left: "left-4 top-1/2 -translate-y-1/2 flex-col",
4878
- right: "right-4 top-1/2 -translate-y-1/2 flex-col"
4879
- };
4880
- var carouselDotClasses = "w-3 h-3 rounded-full transition-all duration-200 cursor-pointer border-0 p-0 bg-white/50 hover:bg-white/75 focus:outline-none focus-visible:ring-2 focus-visible:ring-white focus-visible:ring-offset-2 focus-visible:ring-offset-gray-800";
4881
- var carouselDotActiveClasses = "bg-white scale-110";
4882
- var carouselArrowBaseClasses = "absolute top-1/2 -translate-y-1/2 z-10 flex items-center justify-center w-10 h-10 rounded-full bg-black/30 text-white cursor-pointer transition-all duration-200 hover:bg-black/50 focus:outline-none focus-visible:ring-2 focus-visible:ring-white border-0";
4883
- var carouselPrevArrowClasses = "left-4";
4884
- var carouselNextArrowClasses = "right-4";
4885
- var carouselArrowDisabledClasses = "opacity-50 cursor-not-allowed pointer-events-none";
4886
- function getCarouselContainerClasses(className) {
4887
- const classes = [carouselBaseClasses];
4888
- if (className) {
4889
- classes.push(className);
4890
- }
4891
- return classes.filter(Boolean).join(" ");
4892
- }
4893
- function getCarouselDotsClasses(position) {
4894
- return `${carouselDotsBaseClasses} ${carouselDotsPositionClasses[position]}`;
4895
- }
4896
- function getCarouselDotClasses(isActive) {
4897
- const classes = [carouselDotClasses];
4898
- if (isActive) {
4899
- classes.push(carouselDotActiveClasses);
4845
+ // src/theme/colors.ts
4846
+ var defaultThemeColors = {
4847
+ primary: {
4848
+ bg: "bg-[var(--tiger-primary,#2563eb)]",
4849
+ bgHover: "hover:bg-[var(--tiger-primary-hover,#1d4ed8)]",
4850
+ text: "text-white",
4851
+ focus: "focus:ring-[var(--tiger-primary,#2563eb)]",
4852
+ disabled: "disabled:bg-[var(--tiger-primary-disabled,#93c5fd)]"
4853
+ },
4854
+ secondary: {
4855
+ bg: "bg-[var(--tiger-secondary,#4b5563)]",
4856
+ bgHover: "hover:bg-[var(--tiger-secondary-hover,#374151)]",
4857
+ text: "text-white",
4858
+ focus: "focus:ring-[var(--tiger-secondary,#4b5563)]",
4859
+ disabled: "disabled:bg-[var(--tiger-secondary-disabled,#9ca3af)]"
4860
+ },
4861
+ outline: {
4862
+ bg: "bg-transparent",
4863
+ bgHover: "hover:bg-[var(--tiger-outline-bg-hover,#eff6ff)]",
4864
+ text: "text-[var(--tiger-primary,#2563eb)]",
4865
+ border: "border-2 border-[var(--tiger-primary,#2563eb)]",
4866
+ focus: "focus:ring-[var(--tiger-primary,#2563eb)]",
4867
+ disabled: "disabled:border-[var(--tiger-primary-disabled,#93c5fd)] disabled:text-[var(--tiger-primary-disabled,#93c5fd)]"
4868
+ },
4869
+ ghost: {
4870
+ bg: "bg-transparent",
4871
+ bgHover: "hover:bg-[var(--tiger-ghost-bg-hover,#eff6ff)]",
4872
+ text: "text-[var(--tiger-primary,#2563eb)]",
4873
+ focus: "focus:ring-[var(--tiger-primary,#2563eb)]",
4874
+ disabled: "disabled:text-[var(--tiger-primary-disabled,#93c5fd)]"
4875
+ },
4876
+ link: {
4877
+ bg: "bg-transparent",
4878
+ bgHover: "hover:underline",
4879
+ text: "text-[var(--tiger-primary,#2563eb)]",
4880
+ focus: "focus:ring-[var(--tiger-primary,#2563eb)]",
4881
+ disabled: "disabled:text-[var(--tiger-primary-disabled,#93c5fd)]"
4900
4882
  }
4901
- return classes.filter(Boolean).join(" ");
4883
+ };
4884
+ function getButtonVariantClasses(variant, colors = defaultThemeColors) {
4885
+ const scheme = colors[variant];
4886
+ const classes = [
4887
+ scheme.bg,
4888
+ scheme.bgHover,
4889
+ scheme.text,
4890
+ scheme.border,
4891
+ scheme.borderHover,
4892
+ scheme.focus,
4893
+ scheme.disabled
4894
+ ].filter(Boolean);
4895
+ return classes.join(" ");
4902
4896
  }
4903
- function getCarouselArrowClasses(type, disabled) {
4904
- const classes = [carouselArrowBaseClasses];
4905
- classes.push(type === "prev" ? carouselPrevArrowClasses : carouselNextArrowClasses);
4906
- if (disabled) {
4907
- classes.push(carouselArrowDisabledClasses);
4897
+ var defaultRadioColors = {
4898
+ border: "border-[var(--tiger-border,#d1d5db)]",
4899
+ borderChecked: "border-[var(--tiger-primary,#2563eb)]",
4900
+ bg: "bg-[var(--tiger-surface,#ffffff)]",
4901
+ bgChecked: "bg-[var(--tiger-primary,#2563eb)]",
4902
+ innerDot: "bg-[var(--tiger-surface,#ffffff)]",
4903
+ focus: "ring-[var(--tiger-primary,#2563eb)]",
4904
+ disabled: "bg-[var(--tiger-surface-muted,#f3f4f6)] border-[var(--tiger-border,#d1d5db)]",
4905
+ textDisabled: "text-[var(--tiger-text-muted,#6b7280)]"
4906
+ };
4907
+ var getRadioColorClasses = (colors = defaultRadioColors) => colors;
4908
+ var defaultLinkThemeColors = {
4909
+ primary: {
4910
+ text: "text-[var(--tiger-primary,#2563eb)]",
4911
+ textHover: "hover:text-[var(--tiger-primary-hover,#1d4ed8)]",
4912
+ focus: "focus:ring-[var(--tiger-primary,#2563eb)]",
4913
+ disabled: "text-[var(--tiger-primary-disabled,#93c5fd)]"
4914
+ },
4915
+ secondary: {
4916
+ text: "text-[var(--tiger-secondary,#4b5563)]",
4917
+ textHover: "hover:text-[var(--tiger-secondary-hover,#374151)]",
4918
+ focus: "focus:ring-[var(--tiger-secondary,#4b5563)]",
4919
+ disabled: "text-[var(--tiger-secondary-disabled,#9ca3af)]"
4920
+ },
4921
+ default: {
4922
+ text: "text-gray-700",
4923
+ textHover: "hover:text-gray-900",
4924
+ focus: "focus:ring-gray-500",
4925
+ disabled: "text-gray-400"
4908
4926
  }
4909
- return classes.filter(Boolean).join(" ");
4927
+ };
4928
+ function getLinkVariantClasses(variant, colors, options) {
4929
+ const scheme = (colors ?? defaultLinkThemeColors)[variant];
4930
+ if (options?.disabled) return scheme.disabled;
4931
+ return `${scheme.text} ${scheme.textHover}`;
4910
4932
  }
4911
- function getNextSlideIndex(currentIndex, totalSlides, infinite) {
4912
- if (totalSlides <= 0) return 0;
4913
- const nextIndex = currentIndex + 1;
4914
- if (nextIndex >= totalSlides) {
4915
- return infinite ? 0 : currentIndex;
4933
+ var textSizeClasses = {
4934
+ xs: "text-xs",
4935
+ sm: "text-sm",
4936
+ base: "text-base",
4937
+ lg: "text-lg",
4938
+ xl: "text-xl",
4939
+ "2xl": "text-2xl",
4940
+ "3xl": "text-3xl",
4941
+ "4xl": "text-4xl",
4942
+ "5xl": "text-5xl",
4943
+ "6xl": "text-6xl"
4944
+ };
4945
+ var textWeightClasses = {
4946
+ thin: "font-thin",
4947
+ light: "font-light",
4948
+ normal: "font-normal",
4949
+ medium: "font-medium",
4950
+ semibold: "font-semibold",
4951
+ bold: "font-bold",
4952
+ extrabold: "font-extrabold",
4953
+ black: "font-black"
4954
+ };
4955
+ var textAlignClasses = {
4956
+ left: "text-left",
4957
+ center: "text-center",
4958
+ right: "text-right",
4959
+ justify: "text-justify"
4960
+ };
4961
+ var textColorClasses = {
4962
+ default: "text-[var(--tiger-text,#111827)]",
4963
+ primary: "text-[var(--tiger-primary,#2563eb)]",
4964
+ secondary: "text-[var(--tiger-secondary,#4b5563)]",
4965
+ success: "text-[var(--tiger-success,#16a34a)]",
4966
+ warning: "text-[var(--tiger-warning,#ca8a04)]",
4967
+ danger: "text-[var(--tiger-error,#dc2626)]",
4968
+ muted: "text-[var(--tiger-text-muted,#6b7280)]"
4969
+ };
4970
+ var textDecorationClasses = {
4971
+ truncate: "truncate",
4972
+ italic: "italic",
4973
+ underline: "underline",
4974
+ lineThrough: "line-through"
4975
+ };
4976
+ var defaultTagThemeColors = {
4977
+ default: {
4978
+ bg: "bg-[var(--tiger-tag-default-bg,#f3f4f6)]",
4979
+ text: "text-[var(--tiger-text,#111827)]",
4980
+ border: "border-[var(--tiger-border,#e5e7eb)]",
4981
+ closeBgHover: "hover:bg-[var(--tiger-tag-default-close-hover,#e5e7eb)]"
4982
+ },
4983
+ primary: {
4984
+ bg: "bg-[var(--tiger-tag-primary-bg,#dbeafe)]",
4985
+ text: "text-[var(--tiger-primary,#2563eb)]",
4986
+ border: "border-[var(--tiger-tag-primary-border,#bfdbfe)]",
4987
+ closeBgHover: "hover:bg-[var(--tiger-tag-primary-close-hover,#bfdbfe)]"
4988
+ },
4989
+ success: {
4990
+ bg: "bg-[var(--tiger-tag-success-bg,#dcfce7)]",
4991
+ text: "text-[var(--tiger-success,#16a34a)]",
4992
+ border: "border-[var(--tiger-tag-success-border,#bbf7d0)]",
4993
+ closeBgHover: "hover:bg-[var(--tiger-tag-success-close-hover,#bbf7d0)]"
4994
+ },
4995
+ warning: {
4996
+ bg: "bg-[var(--tiger-tag-warning-bg,#fef9c3)]",
4997
+ text: "text-[var(--tiger-warning,#ca8a04)]",
4998
+ border: "border-[var(--tiger-tag-warning-border,#fef08a)]",
4999
+ closeBgHover: "hover:bg-[var(--tiger-tag-warning-close-hover,#fef08a)]"
5000
+ },
5001
+ danger: {
5002
+ bg: "bg-[var(--tiger-tag-danger-bg,#fee2e2)]",
5003
+ text: "text-[var(--tiger-error,#dc2626)]",
5004
+ border: "border-[var(--tiger-tag-danger-border,#fecaca)]",
5005
+ closeBgHover: "hover:bg-[var(--tiger-tag-danger-close-hover,#fecaca)]"
5006
+ },
5007
+ info: {
5008
+ bg: "bg-[var(--tiger-tag-info-bg,#e0f2fe)]",
5009
+ text: "text-[var(--tiger-info,#3b82f6)]",
5010
+ border: "border-[var(--tiger-tag-info-border,#bae6fd)]",
5011
+ closeBgHover: "hover:bg-[var(--tiger-tag-info-close-hover,#bae6fd)]"
4916
5012
  }
4917
- return nextIndex;
5013
+ };
5014
+ function getTagVariantClasses(variant, colors = defaultTagThemeColors) {
5015
+ const scheme = colors[variant];
5016
+ const classes = [scheme.bg, scheme.text, scheme.border].filter(Boolean);
5017
+ return classes.join(" ");
4918
5018
  }
4919
- function getPrevSlideIndex(currentIndex, totalSlides, infinite) {
4920
- if (totalSlides <= 0) return 0;
4921
- const prevIndex = currentIndex - 1;
4922
- if (prevIndex < 0) {
4923
- return infinite ? totalSlides - 1 : currentIndex;
5019
+ var defaultBadgeThemeColors = {
5020
+ default: {
5021
+ bg: "bg-[var(--tiger-text-muted,#6b7280)]",
5022
+ text: "text-white"
5023
+ },
5024
+ primary: {
5025
+ bg: "bg-[var(--tiger-primary,#2563eb)]",
5026
+ text: "text-white"
5027
+ },
5028
+ success: {
5029
+ bg: "bg-[var(--tiger-success,#16a34a)]",
5030
+ text: "text-white"
5031
+ },
5032
+ warning: {
5033
+ bg: "bg-[var(--tiger-warning,#ca8a04)]",
5034
+ text: "text-white"
5035
+ },
5036
+ danger: {
5037
+ bg: "bg-[var(--tiger-error,#dc2626)]",
5038
+ text: "text-white"
5039
+ },
5040
+ info: {
5041
+ bg: "bg-[var(--tiger-info,#3b82f6)]",
5042
+ text: "text-white"
4924
5043
  }
4925
- return prevIndex;
4926
- }
4927
- function isNextDisabled(currentIndex, totalSlides, infinite) {
4928
- if (infinite) return false;
4929
- return currentIndex >= totalSlides - 1;
4930
- }
4931
- function isPrevDisabled(currentIndex, _totalSlides, infinite) {
4932
- if (infinite) return false;
4933
- return currentIndex <= 0;
5044
+ };
5045
+ function getBadgeVariantClasses(variant, colors = defaultBadgeThemeColors) {
5046
+ const scheme = colors[variant];
5047
+ return `${scheme.bg} ${scheme.text}`;
4934
5048
  }
4935
- function clampSlideIndex(index, totalSlides) {
4936
- if (totalSlides <= 0) return 0;
4937
- if (index < 0) return 0;
4938
- if (index >= totalSlides) return totalSlides - 1;
4939
- return index;
5049
+ var defaultProgressThemeColors = {
5050
+ default: {
5051
+ bg: "bg-[color:var(--tiger-text-muted,#6b7280)]",
5052
+ text: "text-[color:var(--tiger-text,#374151)]"
5053
+ },
5054
+ primary: {
5055
+ bg: "bg-[color:var(--tiger-primary,#2563eb)]",
5056
+ text: "text-[color:var(--tiger-primary,#2563eb)]"
5057
+ },
5058
+ success: {
5059
+ bg: "bg-[color:var(--tiger-success,#16a34a)]",
5060
+ text: "text-[color:var(--tiger-success,#16a34a)]"
5061
+ },
5062
+ warning: {
5063
+ bg: "bg-[color:var(--tiger-warning,#f59e0b)]",
5064
+ text: "text-[color:var(--tiger-warning,#f59e0b)]"
5065
+ },
5066
+ danger: {
5067
+ bg: "bg-[color:var(--tiger-error,#dc2626)]",
5068
+ text: "text-[color:var(--tiger-error,#dc2626)]"
5069
+ },
5070
+ info: {
5071
+ bg: "bg-[color:var(--tiger-info,#0ea5e9)]",
5072
+ text: "text-[color:var(--tiger-info,#0ea5e9)]"
5073
+ }
5074
+ };
5075
+ function getProgressVariantClasses(variant, colors = defaultProgressThemeColors) {
5076
+ const scheme = colors[variant];
5077
+ return scheme.bg;
4940
5078
  }
4941
- function getScrollTransform(currentIndex) {
4942
- return `translateX(-${currentIndex * 100}%)`;
5079
+ function getProgressTextColorClasses(variant, colors = defaultProgressThemeColors) {
5080
+ const scheme = colors[variant];
5081
+ return scheme.text || "text-[var(--tiger-text,#374151)]";
5082
+ }
5083
+ var defaultAlertThemeColors = {
5084
+ success: {
5085
+ bg: "bg-[var(--tiger-alert-success-bg,#f0fdf4)]",
5086
+ border: "border-[var(--tiger-alert-success-border,#bbf7d0)]",
5087
+ icon: "text-[var(--tiger-alert-success-icon,#22c55e)]",
5088
+ title: "text-[var(--tiger-alert-success-title,#166534)]",
5089
+ description: "text-[var(--tiger-alert-success-description,#15803d)]",
5090
+ closeButton: "text-[var(--tiger-alert-success-close,#22c55e)]",
5091
+ closeButtonHover: "hover:bg-[var(--tiger-alert-success-close-hover-bg,#dcfce7)]",
5092
+ focus: "focus:ring-[color:var(--tiger-alert-success-ring,#22c55e)]"
5093
+ },
5094
+ warning: {
5095
+ bg: "bg-[var(--tiger-alert-warning-bg,#fefce8)]",
5096
+ border: "border-[var(--tiger-alert-warning-border,#fef08a)]",
5097
+ icon: "text-[var(--tiger-alert-warning-icon,#eab308)]",
5098
+ title: "text-[var(--tiger-alert-warning-title,#854d0e)]",
5099
+ description: "text-[var(--tiger-alert-warning-description,#a16207)]",
5100
+ closeButton: "text-[var(--tiger-alert-warning-close,#eab308)]",
5101
+ closeButtonHover: "hover:bg-[var(--tiger-alert-warning-close-hover-bg,#fef9c3)]",
5102
+ focus: "focus:ring-[color:var(--tiger-alert-warning-ring,#eab308)]"
5103
+ },
5104
+ error: {
5105
+ bg: "bg-[var(--tiger-alert-error-bg,#fef2f2)]",
5106
+ border: "border-[var(--tiger-alert-error-border,#fecaca)]",
5107
+ icon: "text-[var(--tiger-alert-error-icon,#ef4444)]",
5108
+ title: "text-[var(--tiger-alert-error-title,#991b1b)]",
5109
+ description: "text-[var(--tiger-alert-error-description,#b91c1c)]",
5110
+ closeButton: "text-[var(--tiger-alert-error-close,#ef4444)]",
5111
+ closeButtonHover: "hover:bg-[var(--tiger-alert-error-close-hover-bg,#fee2e2)]",
5112
+ focus: "focus:ring-[color:var(--tiger-alert-error-ring,#ef4444)]"
5113
+ },
5114
+ info: {
5115
+ bg: "bg-[var(--tiger-alert-info-bg,#eff6ff)]",
5116
+ border: "border-[var(--tiger-alert-info-border,#bfdbfe)]",
5117
+ icon: "text-[var(--tiger-alert-info-icon,#3b82f6)]",
5118
+ title: "text-[var(--tiger-alert-info-title,#1e40af)]",
5119
+ description: "text-[var(--tiger-alert-info-description,#1d4ed8)]",
5120
+ closeButton: "text-[var(--tiger-alert-info-close,#3b82f6)]",
5121
+ closeButtonHover: "hover:bg-[var(--tiger-alert-info-close-hover-bg,#dbeafe)]",
5122
+ focus: "focus:ring-[color:var(--tiger-alert-info-ring,#3b82f6)]"
5123
+ }
5124
+ };
5125
+ function getAlertTypeClasses(type, colors = defaultAlertThemeColors) {
5126
+ return colors[type];
5127
+ }
5128
+
5129
+ // src/utils/text-utils.ts
5130
+ function getTextClasses(props) {
5131
+ const {
5132
+ size = "base",
5133
+ weight = "normal",
5134
+ align,
5135
+ color = "default",
5136
+ truncate,
5137
+ italic,
5138
+ underline,
5139
+ lineThrough
5140
+ } = props;
5141
+ return classNames(
5142
+ textSizeClasses[size],
5143
+ textWeightClasses[weight],
5144
+ align && textAlignClasses[align],
5145
+ textColorClasses[color],
5146
+ truncate && textDecorationClasses.truncate,
5147
+ italic && textDecorationClasses.italic,
5148
+ underline && textDecorationClasses.underline,
5149
+ lineThrough && textDecorationClasses.lineThrough
5150
+ );
5151
+ }
5152
+
5153
+ // src/utils/carousel-utils.ts
5154
+ var carouselBaseClasses = "relative overflow-hidden w-full";
5155
+ var carouselTrackScrollClasses = "flex transition-transform ease-in-out";
5156
+ var carouselTrackFadeClasses = "relative";
5157
+ var carouselSlideBaseClasses = "flex-shrink-0 w-full";
5158
+ var carouselDotsBaseClasses = "absolute flex gap-2 z-10";
5159
+ var carouselDotsPositionClasses = {
5160
+ top: "top-4 left-1/2 -translate-x-1/2 flex-row",
5161
+ bottom: "bottom-4 left-1/2 -translate-x-1/2 flex-row",
5162
+ left: "left-4 top-1/2 -translate-y-1/2 flex-col",
5163
+ right: "right-4 top-1/2 -translate-y-1/2 flex-col"
5164
+ };
5165
+ var carouselDotClasses = "w-3 h-3 rounded-full transition-all duration-200 cursor-pointer border-0 p-0 bg-white/50 hover:bg-white/75 focus:outline-none focus-visible:ring-2 focus-visible:ring-white focus-visible:ring-offset-2 focus-visible:ring-offset-gray-800";
5166
+ var carouselDotActiveClasses = "bg-white scale-110";
5167
+ var carouselArrowBaseClasses = "absolute top-1/2 -translate-y-1/2 z-10 flex items-center justify-center w-10 h-10 rounded-full bg-black/30 text-white cursor-pointer transition-all duration-200 hover:bg-black/50 focus:outline-none focus-visible:ring-2 focus-visible:ring-white border-0";
5168
+ var carouselPrevArrowClasses = "left-4";
5169
+ var carouselNextArrowClasses = "right-4";
5170
+ var carouselArrowDisabledClasses = "opacity-50 cursor-not-allowed pointer-events-none";
5171
+ function getCarouselContainerClasses(className) {
5172
+ return className ? `${carouselBaseClasses} ${className}` : carouselBaseClasses;
5173
+ }
5174
+ function getCarouselDotsClasses(position) {
5175
+ return `${carouselDotsBaseClasses} ${carouselDotsPositionClasses[position]}`;
5176
+ }
5177
+ function getCarouselDotClasses(isActive) {
5178
+ return isActive ? `${carouselDotClasses} ${carouselDotActiveClasses}` : carouselDotClasses;
5179
+ }
5180
+ function getCarouselArrowClasses(type, disabled) {
5181
+ const position = type === "prev" ? carouselPrevArrowClasses : carouselNextArrowClasses;
5182
+ return disabled ? `${carouselArrowBaseClasses} ${position} ${carouselArrowDisabledClasses}` : `${carouselArrowBaseClasses} ${position}`;
5183
+ }
5184
+ function getNextSlideIndex(currentIndex, totalSlides, infinite) {
5185
+ if (totalSlides <= 0) return 0;
5186
+ const nextIndex = currentIndex + 1;
5187
+ if (nextIndex >= totalSlides) {
5188
+ return infinite ? 0 : currentIndex;
5189
+ }
5190
+ return nextIndex;
5191
+ }
5192
+ function getPrevSlideIndex(currentIndex, totalSlides, infinite) {
5193
+ if (totalSlides <= 0) return 0;
5194
+ const prevIndex = currentIndex - 1;
5195
+ if (prevIndex < 0) {
5196
+ return infinite ? totalSlides - 1 : currentIndex;
5197
+ }
5198
+ return prevIndex;
5199
+ }
5200
+ function isNextDisabled(currentIndex, totalSlides, infinite) {
5201
+ if (infinite) return false;
5202
+ return currentIndex >= totalSlides - 1;
5203
+ }
5204
+ function isPrevDisabled(currentIndex, _totalSlides, infinite) {
5205
+ if (infinite) return false;
5206
+ return currentIndex <= 0;
5207
+ }
5208
+ function clampSlideIndex(index, totalSlides) {
5209
+ if (totalSlides <= 0) return 0;
5210
+ if (index < 0) return 0;
5211
+ if (index >= totalSlides) return totalSlides - 1;
5212
+ return index;
5213
+ }
5214
+ function getScrollTransform(currentIndex) {
5215
+ return `translateX(-${currentIndex * 100}%)`;
4943
5216
  }
4944
5217
  var carouselPrevArrowPath = "M15.75 19.5L8.25 12l7.5-7.5";
4945
5218
  var carouselNextArrowPath = "M8.25 4.5l7.5 7.5-7.5 7.5";
@@ -4956,14 +5229,7 @@ var anchorLinkListHorizontalClasses = "flex items-center space-x-4 pb-2";
4956
5229
  var anchorLinkBaseClasses = "block text-sm text-gray-600 hover:text-[var(--tiger-primary,#2563eb)] transition-colors duration-200 whitespace-nowrap";
4957
5230
  var anchorLinkActiveClasses = "text-[var(--tiger-primary,#2563eb)] font-medium";
4958
5231
  function getAnchorWrapperClasses(affix, className) {
4959
- const classes = [anchorBaseClasses];
4960
- if (affix) {
4961
- classes.push(anchorAffixClasses);
4962
- }
4963
- if (className) {
4964
- classes.push(className);
4965
- }
4966
- return classes.filter(Boolean).join(" ");
5232
+ return [anchorBaseClasses, affix && anchorAffixClasses, className].filter(Boolean).join(" ");
4967
5233
  }
4968
5234
  function getAnchorInkContainerClasses(direction) {
4969
5235
  return direction === "vertical" ? anchorInkContainerVerticalClasses : anchorInkContainerHorizontalClasses;
@@ -4975,14 +5241,7 @@ function getAnchorLinkListClasses(direction) {
4975
5241
  return direction === "vertical" ? anchorLinkListVerticalClasses : anchorLinkListHorizontalClasses;
4976
5242
  }
4977
5243
  function getAnchorLinkClasses(active, className) {
4978
- const classes = [anchorLinkBaseClasses];
4979
- if (active) {
4980
- classes.push(anchorLinkActiveClasses);
4981
- }
4982
- if (className) {
4983
- classes.push(className);
4984
- }
4985
- return classes.filter(Boolean).join(" ");
5244
+ return [anchorLinkBaseClasses, active && anchorLinkActiveClasses, className].filter(Boolean).join(" ");
4986
5245
  }
4987
5246
  function getAnchorTargetElement(href) {
4988
5247
  if (!href || !href.startsWith("#")) {
@@ -5030,19 +5289,9 @@ function scrollToAnchor(href, container, targetOffset = 0) {
5030
5289
  if (!element) {
5031
5290
  return;
5032
5291
  }
5033
- const offsetTop = getElementOffsetTop(element, container) - targetOffset;
5034
- if (container === window) {
5035
- window.scrollTo({
5036
- top: offsetTop,
5037
- behavior: "smooth"
5038
- });
5039
- } else {
5040
- ;
5041
- container.scrollTo({
5042
- top: offsetTop,
5043
- behavior: "smooth"
5044
- });
5045
- }
5292
+ const top = getElementOffsetTop(element, container) - targetOffset;
5293
+ const scrollTarget = container === window ? window : container;
5294
+ scrollTarget.scrollTo({ top, behavior: "smooth" });
5046
5295
  }
5047
5296
  function findActiveAnchor(links, container, bounds = 5, targetOffset = 0) {
5048
5297
  if (links.length === 0) {
@@ -5298,6 +5547,33 @@ function createPieArcPath(options) {
5298
5547
  "Z"
5299
5548
  ].join(" ");
5300
5549
  }
5550
+ function computePieHoverOffset(startAngle, endAngle, offset2) {
5551
+ const midAngle = (startAngle + endAngle) / 2;
5552
+ return {
5553
+ dx: offset2 * Math.cos(midAngle),
5554
+ dy: offset2 * Math.sin(midAngle)
5555
+ };
5556
+ }
5557
+ function computePieLabelLine(cx, cy, outerRadius, startAngle, endAngle, offset2) {
5558
+ const midAngle = (startAngle + endAngle) / 2;
5559
+ const gap = offset2 ?? Math.max(12, outerRadius * 0.15);
5560
+ const anchor = polarToCartesian(cx, cy, outerRadius, midAngle);
5561
+ const elbow = polarToCartesian(cx, cy, outerRadius + gap * 0.6, midAngle);
5562
+ const isRight = Math.cos(midAngle) >= 0;
5563
+ return {
5564
+ anchor,
5565
+ elbow,
5566
+ label: {
5567
+ x: elbow.x + (isRight ? gap * 0.8 : -gap * 0.8),
5568
+ y: elbow.y
5569
+ },
5570
+ textAnchor: isRight ? "start" : "end"
5571
+ };
5572
+ }
5573
+ var PIE_EMPHASIS_SHADOW = "drop-shadow(0 4px 8px rgba(0,0,0,0.2))";
5574
+ var PIE_BASE_SHADOW = "drop-shadow(0 1px 2px rgba(0,0,0,0.06))";
5575
+ var DONUT_EMPHASIS_SHADOW = "drop-shadow(0 8px 20px rgba(0,0,0,0.28)) drop-shadow(0 2px 6px rgba(0,0,0,0.12))";
5576
+ var DONUT_BASE_SHADOW = "drop-shadow(0 2px 8px rgba(0,0,0,0.10))";
5301
5577
  function getRadarAngles(count, startAngle = -Math.PI / 2) {
5302
5578
  if (count <= 0) return [];
5303
5579
  const step = Math.PI * 2 / count;
@@ -5333,6 +5609,49 @@ function createPolygonPath(points) {
5333
5609
  " "
5334
5610
  );
5335
5611
  }
5612
+ function getRadarLabelAlign(angle) {
5613
+ const TWO_PI = Math.PI * 2;
5614
+ const a = (angle % TWO_PI + TWO_PI) % TWO_PI;
5615
+ const threshold = Math.PI / 10;
5616
+ let textAnchor;
5617
+ if (Math.abs(a - Math.PI * 1.5) < threshold || a < threshold || Math.abs(a - TWO_PI) < threshold) {
5618
+ textAnchor = "middle";
5619
+ } else if (a > Math.PI - threshold && a < Math.PI + threshold) {
5620
+ textAnchor = "middle";
5621
+ } else if (a < Math.PI) {
5622
+ textAnchor = "start";
5623
+ } else {
5624
+ textAnchor = "end";
5625
+ }
5626
+ let dominantBaseline;
5627
+ if (Math.abs(a - Math.PI / 2) < threshold * 1.5) {
5628
+ dominantBaseline = "hanging";
5629
+ } else if (Math.abs(a - Math.PI * 1.5) < threshold * 1.5) {
5630
+ dominantBaseline = "auto";
5631
+ } else {
5632
+ dominantBaseline = "middle";
5633
+ }
5634
+ return { textAnchor, dominantBaseline };
5635
+ }
5636
+ var RADAR_SPLIT_AREA_COLORS = [
5637
+ "var(--tiger-chart-split-1,rgba(0,0,0,0.02))",
5638
+ "var(--tiger-chart-split-2,rgba(0,0,0,0.05))"
5639
+ ];
5640
+ var lineGradientCounter = 0;
5641
+ function getLineGradientPrefix() {
5642
+ return `tiger-line-grad-${++lineGradientCounter}`;
5643
+ }
5644
+ function resetLineGradientCounter() {
5645
+ lineGradientCounter = 0;
5646
+ }
5647
+ var areaGradientCounter = 0;
5648
+ function getAreaGradientPrefix() {
5649
+ return `tiger-area-grad-${++areaGradientCounter}`;
5650
+ }
5651
+ function resetAreaGradientCounter() {
5652
+ areaGradientCounter = 0;
5653
+ }
5654
+ var linePointTransitionClasses = "transition-all duration-200 ease-out";
5336
5655
  function createLinePath(points, curve = "linear") {
5337
5656
  if (points.length === 0) return "";
5338
5657
  if (points.length === 1) return `M ${points[0].x} ${points[0].y}`;
@@ -5488,6 +5807,63 @@ function stackSeriesData(seriesData) {
5488
5807
  }
5489
5808
  return result;
5490
5809
  }
5810
+ var barGradientCounter = 0;
5811
+ function getBarGradientPrefix() {
5812
+ return `tiger-bar-grad-${++barGradientCounter}`;
5813
+ }
5814
+ function resetBarGradientCounter() {
5815
+ barGradientCounter = 0;
5816
+ }
5817
+ function clampBarWidth(width, maxWidth) {
5818
+ if (maxWidth === void 0 || maxWidth <= 0) return width;
5819
+ return Math.min(width, maxWidth);
5820
+ }
5821
+ function ensureBarMinHeight(barY, barHeight, baseline, minHeight) {
5822
+ if (minHeight <= 0 || barHeight === 0 || barHeight >= minHeight) {
5823
+ return { y: barY, height: barHeight };
5824
+ }
5825
+ if (barY < baseline) {
5826
+ return { y: baseline - minHeight, height: minHeight };
5827
+ }
5828
+ return { y: baseline, height: minHeight };
5829
+ }
5830
+ function getBarValueLabelY(barY, barHeight, position, offset2 = 8) {
5831
+ if (position === "inside") {
5832
+ return barY + barHeight / 2;
5833
+ }
5834
+ return barY - offset2;
5835
+ }
5836
+ var barValueLabelClasses = "fill-[color:var(--tiger-text,#374151)] text-[11px] font-medium pointer-events-none select-none";
5837
+ var barValueLabelInsideClasses = "fill-white text-[11px] font-medium pointer-events-none select-none";
5838
+ var barAnimatedTransition = "transition: y 600ms cubic-bezier(.4,0,.2,1), height 600ms cubic-bezier(.4,0,.2,1), opacity 200ms ease-out, filter 200ms ease-out";
5839
+ var scatterGradientCounter = 0;
5840
+ function getScatterGradientPrefix() {
5841
+ return `tiger-scatter-grad-${++scatterGradientCounter}`;
5842
+ }
5843
+ function resetScatterGradientCounter() {
5844
+ scatterGradientCounter = 0;
5845
+ }
5846
+ var scatterPointTransitionClasses = "transition-all duration-200 ease-out";
5847
+ function getScatterHoverShadow(color) {
5848
+ return `drop-shadow(0 0 4px ${color})`;
5849
+ }
5850
+ function getScatterPointPath(style, size) {
5851
+ switch (style) {
5852
+ case "square":
5853
+ return `M ${-size} ${-size} L ${size} ${-size} L ${size} ${size} L ${-size} ${size} Z`;
5854
+ case "triangle": {
5855
+ const h = size * 1.15;
5856
+ return `M 0 ${-h} L ${size} ${h * 0.75} L ${-size} ${h * 0.75} Z`;
5857
+ }
5858
+ case "diamond":
5859
+ return `M 0 ${-size * 1.2} L ${size} 0 L 0 ${size * 1.2} L ${-size} 0 Z`;
5860
+ }
5861
+ }
5862
+ function getScatterHoverSize(baseSize) {
5863
+ return baseSize + 2;
5864
+ }
5865
+ var SCATTER_ENTRANCE_KEYFRAMES = `@keyframes tiger-scatter-entrance{from{opacity:0;transform:scale(0)}60%{transform:scale(1.15)}to{opacity:1;transform:scale(1)}}`;
5866
+ var SCATTER_ENTRANCE_CLASS = "tiger-scatter-entrance";
5491
5867
 
5492
5868
  // src/utils/chart-interaction.ts
5493
5869
  function createChartInteractionHandlers(data, state, options) {
@@ -5585,6 +5961,59 @@ function getChartEntranceTransform(type, progress, options = {}) {
5585
5961
  }
5586
5962
  }
5587
5963
 
5964
+ // src/utils/chart-shared.ts
5965
+ function resolveChartPalette(colors, fallbackColor) {
5966
+ if (colors && colors.length > 0) return colors;
5967
+ if (fallbackColor) return [fallbackColor];
5968
+ return [...DEFAULT_CHART_COLORS];
5969
+ }
5970
+ function buildChartLegendItems(options) {
5971
+ const { data, palette, activeIndex, getLabel, getColor } = options;
5972
+ return data.map((datum, index) => ({
5973
+ index,
5974
+ label: getLabel(datum, index),
5975
+ color: getColor ? getColor(datum, index) : palette[index % palette.length],
5976
+ active: activeIndex === null || activeIndex === index
5977
+ }));
5978
+ }
5979
+ function resolveChartTooltipContent(hoveredIndex, data, formatter, defaultFormatter) {
5980
+ if (hoveredIndex === null) return "";
5981
+ const datum = data[hoveredIndex];
5982
+ if (!datum) return "";
5983
+ const fmt = formatter ?? defaultFormatter;
5984
+ return fmt(datum, hoveredIndex);
5985
+ }
5986
+ function resolveMultiSeriesTooltipContent(hoveredPoint, series, formatter, defaultFormatter) {
5987
+ if (!hoveredPoint) return "";
5988
+ const { seriesIndex, pointIndex } = hoveredPoint;
5989
+ const s = series[seriesIndex];
5990
+ const datum = s?.data[pointIndex];
5991
+ if (!datum) return "";
5992
+ const fmt = formatter ?? defaultFormatter;
5993
+ return fmt(datum, seriesIndex, pointIndex, s);
5994
+ }
5995
+ function resolveSeriesData(series, data, defaultSeries) {
5996
+ if (series && series.length > 0) return series;
5997
+ if (data && data.length > 0) {
5998
+ return [{ ...defaultSeries, data }];
5999
+ }
6000
+ return [];
6001
+ }
6002
+ function defaultXYTooltipFormatter(datum, index) {
6003
+ const label = datum.label ?? (datum.x !== void 0 ? String(datum.x) : `#${index + 1}`);
6004
+ return `${label}: ${datum.y ?? ""}`;
6005
+ }
6006
+ function defaultSeriesXYTooltipFormatter(datum, seriesIndex, _pointIndex, series) {
6007
+ const seriesName = series?.name ?? `Series ${seriesIndex + 1}`;
6008
+ const label = datum.label ?? (datum.x !== void 0 ? String(datum.x) : "");
6009
+ return `${seriesName} \xB7 ${label}: ${datum.y ?? ""}`;
6010
+ }
6011
+ function defaultRadarTooltipFormatter(datum, seriesIndex, _pointIndex, series) {
6012
+ const seriesName = series?.name ?? `Series ${seriesIndex + 1}`;
6013
+ const label = datum.label ?? `#${_pointIndex + 1}`;
6014
+ return `${seriesName} \xB7 ${label}: ${datum.value}`;
6015
+ }
6016
+
5588
6017
  // src/utils/floating.ts
5589
6018
  import {
5590
6019
  computePosition,
@@ -5660,484 +6089,185 @@ function getArrowStyles(placement, arrowData) {
5660
6089
  top: "bottom",
5661
6090
  bottom: "top",
5662
6091
  left: "right",
5663
- right: "left"
5664
- };
5665
- const styles = {
5666
- position: "absolute",
5667
- [staticSide[side]]: "-4px"
5668
- };
5669
- if (arrowData?.x != null) {
5670
- styles.left = `${arrowData.x}px`;
5671
- }
5672
- if (arrowData?.y != null) {
5673
- styles.top = `${arrowData.y}px`;
5674
- }
5675
- return styles;
5676
- }
5677
- function applyFloatingStyles(element, result) {
5678
- element.style.left = `${result.x}px`;
5679
- element.style.top = `${result.y}px`;
5680
- }
5681
-
5682
- // src/utils/chat-window-utils.ts
5683
- var defaultChatMessageStatusInfo = {
5684
- sending: { text: "\u53D1\u9001\u4E2D", className: "text-[var(--tiger-text-muted,#6b7280)]" },
5685
- sent: { text: "\u5DF2\u9001\u8FBE", className: "text-[var(--tiger-text-muted,#6b7280)]" },
5686
- failed: { text: "\u53D1\u9001\u5931\u8D25", className: "text-[var(--tiger-danger,#ef4444)]" }
5687
- };
5688
- function getChatMessageStatusInfo(status, statusMap = defaultChatMessageStatusInfo) {
5689
- return statusMap[status] || defaultChatMessageStatusInfo[status];
5690
- }
5691
-
5692
- // src/utils/activity-feed-utils.ts
5693
- var formatActivityTime = (value) => {
5694
- if (value == null || value === "") return "";
5695
- if (value instanceof Date) return value.toLocaleString();
5696
- if (typeof value === "number") return new Date(value).toLocaleString();
5697
- return value;
5698
- };
5699
- var sortActivityGroups = (groups, groupOrder) => {
5700
- if (!groupOrder || groupOrder.length === 0) return groups;
5701
- const orderMap = new Map(groupOrder.map((key, index) => [key, index]));
5702
- return [...groups].sort((a, b) => {
5703
- const aKey = String(a.key ?? a.title ?? "");
5704
- const bKey = String(b.key ?? b.title ?? "");
5705
- const aIndex = orderMap.has(aKey) ? orderMap.get(aKey) : Number.POSITIVE_INFINITY;
5706
- const bIndex = orderMap.has(bKey) ? orderMap.get(bKey) : Number.POSITIVE_INFINITY;
5707
- if (aIndex === bIndex) return 0;
5708
- return aIndex - bIndex;
5709
- });
5710
- };
5711
- var buildActivityGroups = (items, groups, groupBy, groupOrder) => {
5712
- if (groups && groups.length > 0) {
5713
- return sortActivityGroups(groups, groupOrder);
5714
- }
5715
- if (!items || items.length === 0) return [];
5716
- if (groupBy) {
5717
- const groupMap = /* @__PURE__ */ new Map();
5718
- items.forEach((item) => {
5719
- const key = groupBy(item) || "\u5176\u4ED6";
5720
- const bucket = groupMap.get(key) ?? [];
5721
- bucket.push(item);
5722
- groupMap.set(key, bucket);
5723
- });
5724
- const mappedGroups = Array.from(groupMap.entries()).map(([title, groupItems]) => ({
5725
- key: title,
5726
- title,
5727
- items: groupItems
5728
- }));
5729
- return sortActivityGroups(mappedGroups, groupOrder);
5730
- }
5731
- return [{ key: "default", title: "", items }];
5732
- };
5733
- var toActivityTimelineItems = (items) => {
5734
- return items.map((item, index) => ({
5735
- key: item.id ?? index,
5736
- activity: item
5737
- }));
5738
- };
5739
-
5740
- // src/utils/notification-center-utils.ts
5741
- var sortNotificationGroups = (groups, groupOrder) => {
5742
- if (!groupOrder || groupOrder.length === 0) {
5743
- return groups;
5744
- }
5745
- const orderMap = /* @__PURE__ */ new Map();
5746
- groupOrder.forEach((key, index) => {
5747
- orderMap.set(String(key), index);
5748
- });
5749
- return [...groups].sort((a, b) => {
5750
- const aKey = String(a.key ?? a.title);
5751
- const bKey = String(b.key ?? b.title);
5752
- const aIndex = orderMap.get(aKey);
5753
- const bIndex = orderMap.get(bKey);
5754
- if (aIndex === void 0 && bIndex === void 0) return 0;
5755
- if (aIndex === void 0) return 1;
5756
- if (bIndex === void 0) return -1;
5757
- return aIndex - bIndex;
5758
- });
5759
- };
5760
- var buildNotificationGroups = (items = [], groups, groupBy, groupOrder) => {
5761
- if (groups && groups.length > 0) {
5762
- return sortNotificationGroups(groups, groupOrder);
5763
- }
5764
- if (!items || items.length === 0) {
5765
- return [];
5766
- }
5767
- const groupFn = groupBy ?? ((item) => String(item.type ?? "default"));
5768
- const groupMap = /* @__PURE__ */ new Map();
5769
- items.forEach((item) => {
5770
- const key = groupFn(item);
5771
- if (!groupMap.has(key)) {
5772
- groupMap.set(key, []);
5773
- }
5774
- groupMap.get(key)?.push(item);
5775
- });
5776
- const mappedGroups = Array.from(groupMap.entries()).map(([key, groupItems]) => ({
5777
- key,
5778
- title: key,
5779
- items: groupItems
5780
- }));
5781
- return sortNotificationGroups(mappedGroups, groupOrder);
5782
- };
5783
-
5784
- // src/utils/comment-thread-utils.ts
5785
- var buildCommentTree = (items = []) => {
5786
- if (!items || items.length === 0) return [];
5787
- const nodeMap = /* @__PURE__ */ new Map();
5788
- const order = [];
5789
- items.forEach((item) => {
5790
- nodeMap.set(item.id, {
5791
- ...item,
5792
- children: []
5793
- });
5794
- order.push(item.id);
5795
- });
5796
- const roots = [];
5797
- order.forEach((id) => {
5798
- const node = nodeMap.get(id);
5799
- if (!node) return;
5800
- if (node.parentId === void 0 || node.parentId === null) {
5801
- roots.push(node);
5802
- return;
5803
- }
5804
- const parent = nodeMap.get(node.parentId);
5805
- if (!parent) {
5806
- roots.push(node);
5807
- return;
5808
- }
5809
- if (!parent.children) parent.children = [];
5810
- parent.children.push(node);
5811
- });
5812
- return roots;
5813
- };
5814
- var clipCommentTreeDepth = (nodes = [], maxDepth = 3) => {
5815
- if (!nodes || nodes.length === 0) return [];
5816
- if (maxDepth <= 0) return [];
5817
- const cloneNode = (node, depth) => {
5818
- const next = { ...node };
5819
- if (node.children && node.children.length > 0 && depth < maxDepth) {
5820
- next.children = node.children.map((child) => cloneNode(child, depth + 1));
5821
- } else {
5822
- next.children = [];
5823
- }
5824
- return next;
5825
- };
5826
- return nodes.map((node) => cloneNode(node, 1));
5827
- };
5828
-
5829
- // src/utils/composite-time-utils.ts
5830
- var formatChatTime = (value) => {
5831
- if (!value) return "";
5832
- if (value instanceof Date) return value.toLocaleTimeString();
5833
- if (typeof value === "number") return new Date(value).toLocaleTimeString();
5834
- return value;
5835
- };
5836
- var formatCommentTime = (value) => {
5837
- if (value == null || value === "") return "";
5838
- if (value instanceof Date) return value.toLocaleString();
5839
- if (typeof value === "number") return new Date(value).toLocaleString();
5840
- return value;
5841
- };
5842
-
5843
- // src/theme/colors.ts
5844
- var defaultThemeColors = {
5845
- primary: {
5846
- bg: "bg-[var(--tiger-primary,#2563eb)]",
5847
- bgHover: "hover:bg-[var(--tiger-primary-hover,#1d4ed8)]",
5848
- text: "text-white",
5849
- focus: "focus:ring-[var(--tiger-primary,#2563eb)]",
5850
- disabled: "disabled:bg-[var(--tiger-primary-disabled,#93c5fd)]"
5851
- },
5852
- secondary: {
5853
- bg: "bg-[var(--tiger-secondary,#4b5563)]",
5854
- bgHover: "hover:bg-[var(--tiger-secondary-hover,#374151)]",
5855
- text: "text-white",
5856
- focus: "focus:ring-[var(--tiger-secondary,#4b5563)]",
5857
- disabled: "disabled:bg-[var(--tiger-secondary-disabled,#9ca3af)]"
5858
- },
5859
- outline: {
5860
- bg: "bg-transparent",
5861
- bgHover: "hover:bg-[var(--tiger-outline-bg-hover,#eff6ff)]",
5862
- text: "text-[var(--tiger-primary,#2563eb)]",
5863
- border: "border-2 border-[var(--tiger-primary,#2563eb)]",
5864
- focus: "focus:ring-[var(--tiger-primary,#2563eb)]",
5865
- disabled: "disabled:border-[var(--tiger-primary-disabled,#93c5fd)] disabled:text-[var(--tiger-primary-disabled,#93c5fd)]"
5866
- },
5867
- ghost: {
5868
- bg: "bg-transparent",
5869
- bgHover: "hover:bg-[var(--tiger-ghost-bg-hover,#eff6ff)]",
5870
- text: "text-[var(--tiger-primary,#2563eb)]",
5871
- focus: "focus:ring-[var(--tiger-primary,#2563eb)]",
5872
- disabled: "disabled:text-[var(--tiger-primary-disabled,#93c5fd)]"
5873
- },
5874
- link: {
5875
- bg: "bg-transparent",
5876
- bgHover: "hover:underline",
5877
- text: "text-[var(--tiger-primary,#2563eb)]",
5878
- focus: "focus:ring-[var(--tiger-primary,#2563eb)]",
5879
- disabled: "disabled:text-[var(--tiger-primary-disabled,#93c5fd)]"
5880
- }
5881
- };
5882
- function getButtonVariantClasses(variant, colors = defaultThemeColors) {
5883
- const scheme = colors[variant];
5884
- const classes = [
5885
- scheme.bg,
5886
- scheme.bgHover,
5887
- scheme.text,
5888
- scheme.border,
5889
- scheme.borderHover,
5890
- scheme.focus,
5891
- scheme.disabled
5892
- ].filter(Boolean);
5893
- return classes.join(" ");
5894
- }
5895
- var defaultRadioColors = {
5896
- border: "border-[var(--tiger-border,#d1d5db)]",
5897
- borderChecked: "border-[var(--tiger-primary,#2563eb)]",
5898
- bg: "bg-[var(--tiger-surface,#ffffff)]",
5899
- bgChecked: "bg-[var(--tiger-primary,#2563eb)]",
5900
- innerDot: "bg-[var(--tiger-surface,#ffffff)]",
5901
- focus: "ring-[var(--tiger-primary,#2563eb)]",
5902
- disabled: "bg-[var(--tiger-surface-muted,#f3f4f6)] border-[var(--tiger-border,#d1d5db)]",
5903
- textDisabled: "text-[var(--tiger-text-muted,#6b7280)]"
5904
- };
5905
- function getRadioColorClasses(colors = defaultRadioColors) {
5906
- return colors;
5907
- }
5908
- var defaultLinkThemeColors = {
5909
- primary: {
5910
- text: "text-[var(--tiger-primary,#2563eb)]",
5911
- textHover: "hover:text-[var(--tiger-primary-hover,#1d4ed8)]",
5912
- focus: "focus:ring-[var(--tiger-primary,#2563eb)]",
5913
- disabled: "text-[var(--tiger-primary-disabled,#93c5fd)]"
5914
- },
5915
- secondary: {
5916
- text: "text-[var(--tiger-secondary,#4b5563)]",
5917
- textHover: "hover:text-[var(--tiger-secondary-hover,#374151)]",
5918
- focus: "focus:ring-[var(--tiger-secondary,#4b5563)]",
5919
- disabled: "text-[var(--tiger-secondary-disabled,#9ca3af)]"
5920
- },
5921
- default: {
5922
- text: "text-gray-700",
5923
- textHover: "hover:text-gray-900",
5924
- focus: "focus:ring-gray-500",
5925
- disabled: "text-gray-400"
5926
- }
5927
- };
5928
- function getLinkVariantClasses(variant, colors, options) {
5929
- const scheme = (colors ?? defaultLinkThemeColors)[variant];
5930
- const classes = [
5931
- scheme.text,
5932
- scheme.textHover,
5933
- scheme.focus,
5934
- `disabled:${scheme.disabled}`,
5935
- options?.disabled ? scheme.disabled : void 0
5936
- ].filter(Boolean);
5937
- return classes.join(" ");
5938
- }
5939
- var textSizeClasses = {
5940
- xs: "text-xs",
5941
- sm: "text-sm",
5942
- base: "text-base",
5943
- lg: "text-lg",
5944
- xl: "text-xl",
5945
- "2xl": "text-2xl",
5946
- "3xl": "text-3xl",
5947
- "4xl": "text-4xl",
5948
- "5xl": "text-5xl",
5949
- "6xl": "text-6xl"
5950
- };
5951
- var textWeightClasses = {
5952
- thin: "font-thin",
5953
- light: "font-light",
5954
- normal: "font-normal",
5955
- medium: "font-medium",
5956
- semibold: "font-semibold",
5957
- bold: "font-bold",
5958
- extrabold: "font-extrabold",
5959
- black: "font-black"
5960
- };
5961
- var textAlignClasses = {
5962
- left: "text-left",
5963
- center: "text-center",
5964
- right: "text-right",
5965
- justify: "text-justify"
5966
- };
5967
- var textColorClasses = {
5968
- default: "text-[var(--tiger-text,#111827)]",
5969
- primary: "text-[var(--tiger-primary,#2563eb)]",
5970
- secondary: "text-[var(--tiger-secondary,#4b5563)]",
5971
- success: "text-[var(--tiger-success,#16a34a)]",
5972
- warning: "text-[var(--tiger-warning,#ca8a04)]",
5973
- danger: "text-[var(--tiger-error,#dc2626)]",
5974
- muted: "text-[var(--tiger-text-muted,#6b7280)]"
5975
- };
5976
- var textDecorationClasses = {
5977
- truncate: "truncate",
5978
- italic: "italic",
5979
- underline: "underline",
5980
- lineThrough: "line-through"
5981
- };
5982
- var defaultTagThemeColors = {
5983
- default: {
5984
- bg: "bg-[var(--tiger-tag-default-bg,#f3f4f6)]",
5985
- text: "text-[var(--tiger-text,#111827)]",
5986
- border: "border-[var(--tiger-border,#e5e7eb)]",
5987
- closeBgHover: "hover:bg-[var(--tiger-tag-default-close-hover,#e5e7eb)]"
5988
- },
5989
- primary: {
5990
- bg: "bg-[var(--tiger-tag-primary-bg,#dbeafe)]",
5991
- text: "text-[var(--tiger-primary,#2563eb)]",
5992
- border: "border-[var(--tiger-tag-primary-border,#bfdbfe)]",
5993
- closeBgHover: "hover:bg-[var(--tiger-tag-primary-close-hover,#bfdbfe)]"
5994
- },
5995
- success: {
5996
- bg: "bg-[var(--tiger-tag-success-bg,#dcfce7)]",
5997
- text: "text-[var(--tiger-success,#16a34a)]",
5998
- border: "border-[var(--tiger-tag-success-border,#bbf7d0)]",
5999
- closeBgHover: "hover:bg-[var(--tiger-tag-success-close-hover,#bbf7d0)]"
6000
- },
6001
- warning: {
6002
- bg: "bg-[var(--tiger-tag-warning-bg,#fef9c3)]",
6003
- text: "text-[var(--tiger-warning,#ca8a04)]",
6004
- border: "border-[var(--tiger-tag-warning-border,#fef08a)]",
6005
- closeBgHover: "hover:bg-[var(--tiger-tag-warning-close-hover,#fef08a)]"
6006
- },
6007
- danger: {
6008
- bg: "bg-[var(--tiger-tag-danger-bg,#fee2e2)]",
6009
- text: "text-[var(--tiger-error,#dc2626)]",
6010
- border: "border-[var(--tiger-tag-danger-border,#fecaca)]",
6011
- closeBgHover: "hover:bg-[var(--tiger-tag-danger-close-hover,#fecaca)]"
6012
- },
6013
- info: {
6014
- bg: "bg-[var(--tiger-tag-info-bg,#e0f2fe)]",
6015
- text: "text-[var(--tiger-info,#3b82f6)]",
6016
- border: "border-[var(--tiger-tag-info-border,#bae6fd)]",
6017
- closeBgHover: "hover:bg-[var(--tiger-tag-info-close-hover,#bae6fd)]"
6018
- }
6019
- };
6020
- function getTagVariantClasses(variant, colors = defaultTagThemeColors) {
6021
- const scheme = colors[variant];
6022
- const classes = [scheme.bg, scheme.text, scheme.border].filter(Boolean);
6023
- return classes.join(" ");
6024
- }
6025
- var defaultBadgeThemeColors = {
6026
- default: {
6027
- bg: "bg-[var(--tiger-text-muted,#6b7280)]",
6028
- text: "text-white",
6029
- border: "border-[var(--tiger-text-muted,#6b7280)]"
6030
- },
6031
- primary: {
6032
- bg: "bg-[var(--tiger-primary,#2563eb)]",
6033
- text: "text-white",
6034
- border: "border-[var(--tiger-primary,#2563eb)]"
6035
- },
6036
- success: {
6037
- bg: "bg-[var(--tiger-success,#16a34a)]",
6038
- text: "text-white",
6039
- border: "border-[var(--tiger-success,#16a34a)]"
6040
- },
6041
- warning: {
6042
- bg: "bg-[var(--tiger-warning,#ca8a04)]",
6043
- text: "text-white",
6044
- border: "border-[var(--tiger-warning,#ca8a04)]"
6045
- },
6046
- danger: {
6047
- bg: "bg-[var(--tiger-error,#dc2626)]",
6048
- text: "text-white",
6049
- border: "border-[var(--tiger-error,#dc2626)]"
6050
- },
6051
- info: {
6052
- bg: "bg-[var(--tiger-info,#3b82f6)]",
6053
- text: "text-white",
6054
- border: "border-[var(--tiger-info,#3b82f6)]"
6092
+ right: "left"
6093
+ };
6094
+ const styles = {
6095
+ position: "absolute",
6096
+ [staticSide[side]]: "-4px"
6097
+ };
6098
+ if (arrowData?.x != null) {
6099
+ styles.left = `${arrowData.x}px`;
6055
6100
  }
6101
+ if (arrowData?.y != null) {
6102
+ styles.top = `${arrowData.y}px`;
6103
+ }
6104
+ return styles;
6105
+ }
6106
+ function applyFloatingStyles(element, result) {
6107
+ element.style.left = `${result.x}px`;
6108
+ element.style.top = `${result.y}px`;
6109
+ }
6110
+
6111
+ // src/utils/chat-window-utils.ts
6112
+ var defaultChatMessageStatusInfo = {
6113
+ sending: { text: "\u53D1\u9001\u4E2D", className: "text-[var(--tiger-text-muted,#6b7280)]" },
6114
+ sent: { text: "\u5DF2\u9001\u8FBE", className: "text-[var(--tiger-text-muted,#6b7280)]" },
6115
+ failed: { text: "\u53D1\u9001\u5931\u8D25", className: "text-[var(--tiger-danger,#ef4444)]" }
6056
6116
  };
6057
- function getBadgeVariantClasses(variant, colors = defaultBadgeThemeColors) {
6058
- const scheme = colors[variant];
6059
- const classes = [scheme.bg, scheme.text, scheme.border].filter(Boolean);
6060
- return classes.join(" ");
6117
+ function getChatMessageStatusInfo(status, statusMap = defaultChatMessageStatusInfo) {
6118
+ return statusMap[status] || defaultChatMessageStatusInfo[status];
6061
6119
  }
6062
- var defaultProgressThemeColors = {
6063
- default: {
6064
- bg: "bg-[color:var(--tiger-text-muted,#6b7280)]",
6065
- text: "text-[color:var(--tiger-text,#374151)]"
6066
- },
6067
- primary: {
6068
- bg: "bg-[color:var(--tiger-primary,#2563eb)]",
6069
- text: "text-[color:var(--tiger-primary,#2563eb)]"
6070
- },
6071
- success: {
6072
- bg: "bg-[color:var(--tiger-success,#16a34a)]",
6073
- text: "text-[color:var(--tiger-success,#16a34a)]"
6074
- },
6075
- warning: {
6076
- bg: "bg-[color:var(--tiger-warning,#f59e0b)]",
6077
- text: "text-[color:var(--tiger-warning,#f59e0b)]"
6078
- },
6079
- danger: {
6080
- bg: "bg-[color:var(--tiger-error,#dc2626)]",
6081
- text: "text-[color:var(--tiger-error,#dc2626)]"
6082
- },
6083
- info: {
6084
- bg: "bg-[color:var(--tiger-info,#0ea5e9)]",
6085
- text: "text-[color:var(--tiger-info,#0ea5e9)]"
6120
+
6121
+ // src/utils/activity-feed-utils.ts
6122
+ var formatActivityTime = (value) => {
6123
+ if (value == null || value === "") return "";
6124
+ if (value instanceof Date) return value.toLocaleString();
6125
+ if (typeof value === "number") return new Date(value).toLocaleString();
6126
+ return value;
6127
+ };
6128
+ var sortActivityGroups = (groups, groupOrder) => {
6129
+ if (!groupOrder || groupOrder.length === 0) return groups;
6130
+ const orderMap = new Map(groupOrder.map((key, index) => [key, index]));
6131
+ return [...groups].sort((a, b) => {
6132
+ const aKey = String(a.key ?? a.title ?? "");
6133
+ const bKey = String(b.key ?? b.title ?? "");
6134
+ const aIndex = orderMap.has(aKey) ? orderMap.get(aKey) : Number.POSITIVE_INFINITY;
6135
+ const bIndex = orderMap.has(bKey) ? orderMap.get(bKey) : Number.POSITIVE_INFINITY;
6136
+ if (aIndex === bIndex) return 0;
6137
+ return aIndex - bIndex;
6138
+ });
6139
+ };
6140
+ var buildActivityGroups = (items, groups, groupBy, groupOrder) => {
6141
+ if (groups && groups.length > 0) {
6142
+ return sortActivityGroups(groups, groupOrder);
6143
+ }
6144
+ if (!items || items.length === 0) return [];
6145
+ if (groupBy) {
6146
+ const groupMap = /* @__PURE__ */ new Map();
6147
+ items.forEach((item) => {
6148
+ const key = groupBy(item) || "\u5176\u4ED6";
6149
+ const bucket = groupMap.get(key) ?? [];
6150
+ bucket.push(item);
6151
+ groupMap.set(key, bucket);
6152
+ });
6153
+ const mappedGroups = Array.from(groupMap.entries()).map(([title, groupItems]) => ({
6154
+ key: title,
6155
+ title,
6156
+ items: groupItems
6157
+ }));
6158
+ return sortActivityGroups(mappedGroups, groupOrder);
6086
6159
  }
6160
+ return [{ key: "default", title: "", items }];
6087
6161
  };
6088
- function getProgressVariantClasses(variant, colors = defaultProgressThemeColors) {
6089
- const scheme = colors[variant];
6090
- return scheme.bg;
6091
- }
6092
- function getProgressTextColorClasses(variant, colors = defaultProgressThemeColors) {
6093
- const scheme = colors[variant];
6094
- return scheme.text || "text-[var(--tiger-text,#374151)]";
6095
- }
6096
- var defaultAlertThemeColors = {
6097
- success: {
6098
- bg: "bg-[var(--tiger-alert-success-bg,#f0fdf4)]",
6099
- border: "border-[var(--tiger-alert-success-border,#bbf7d0)]",
6100
- icon: "text-[var(--tiger-alert-success-icon,#22c55e)]",
6101
- title: "text-[var(--tiger-alert-success-title,#166534)]",
6102
- description: "text-[var(--tiger-alert-success-description,#15803d)]",
6103
- closeButton: "text-[var(--tiger-alert-success-close,#22c55e)]",
6104
- closeButtonHover: "hover:bg-[var(--tiger-alert-success-close-hover-bg,#dcfce7)]",
6105
- focus: "focus:ring-[color:var(--tiger-alert-success-ring,#22c55e)]"
6106
- },
6107
- warning: {
6108
- bg: "bg-[var(--tiger-alert-warning-bg,#fefce8)]",
6109
- border: "border-[var(--tiger-alert-warning-border,#fef08a)]",
6110
- icon: "text-[var(--tiger-alert-warning-icon,#eab308)]",
6111
- title: "text-[var(--tiger-alert-warning-title,#854d0e)]",
6112
- description: "text-[var(--tiger-alert-warning-description,#a16207)]",
6113
- closeButton: "text-[var(--tiger-alert-warning-close,#eab308)]",
6114
- closeButtonHover: "hover:bg-[var(--tiger-alert-warning-close-hover-bg,#fef9c3)]",
6115
- focus: "focus:ring-[color:var(--tiger-alert-warning-ring,#eab308)]"
6116
- },
6117
- error: {
6118
- bg: "bg-[var(--tiger-alert-error-bg,#fef2f2)]",
6119
- border: "border-[var(--tiger-alert-error-border,#fecaca)]",
6120
- icon: "text-[var(--tiger-alert-error-icon,#ef4444)]",
6121
- title: "text-[var(--tiger-alert-error-title,#991b1b)]",
6122
- description: "text-[var(--tiger-alert-error-description,#b91c1c)]",
6123
- closeButton: "text-[var(--tiger-alert-error-close,#ef4444)]",
6124
- closeButtonHover: "hover:bg-[var(--tiger-alert-error-close-hover-bg,#fee2e2)]",
6125
- focus: "focus:ring-[color:var(--tiger-alert-error-ring,#ef4444)]"
6126
- },
6127
- info: {
6128
- bg: "bg-[var(--tiger-alert-info-bg,#eff6ff)]",
6129
- border: "border-[var(--tiger-alert-info-border,#bfdbfe)]",
6130
- icon: "text-[var(--tiger-alert-info-icon,#3b82f6)]",
6131
- title: "text-[var(--tiger-alert-info-title,#1e40af)]",
6132
- description: "text-[var(--tiger-alert-info-description,#1d4ed8)]",
6133
- closeButton: "text-[var(--tiger-alert-info-close,#3b82f6)]",
6134
- closeButtonHover: "hover:bg-[var(--tiger-alert-info-close-hover-bg,#dbeafe)]",
6135
- focus: "focus:ring-[color:var(--tiger-alert-info-ring,#3b82f6)]"
6162
+ var toActivityTimelineItems = (items) => {
6163
+ return items.map((item, index) => ({
6164
+ key: item.id ?? index,
6165
+ activity: item
6166
+ }));
6167
+ };
6168
+
6169
+ // src/utils/notification-center-utils.ts
6170
+ var sortNotificationGroups = (groups, groupOrder) => {
6171
+ if (!groupOrder || groupOrder.length === 0) {
6172
+ return groups;
6173
+ }
6174
+ const orderMap = /* @__PURE__ */ new Map();
6175
+ groupOrder.forEach((key, index) => {
6176
+ orderMap.set(String(key), index);
6177
+ });
6178
+ return [...groups].sort((a, b) => {
6179
+ const aKey = String(a.key ?? a.title);
6180
+ const bKey = String(b.key ?? b.title);
6181
+ const aIndex = orderMap.get(aKey);
6182
+ const bIndex = orderMap.get(bKey);
6183
+ if (aIndex === void 0 && bIndex === void 0) return 0;
6184
+ if (aIndex === void 0) return 1;
6185
+ if (bIndex === void 0) return -1;
6186
+ return aIndex - bIndex;
6187
+ });
6188
+ };
6189
+ var buildNotificationGroups = (items = [], groups, groupBy, groupOrder) => {
6190
+ if (groups && groups.length > 0) {
6191
+ return sortNotificationGroups(groups, groupOrder);
6192
+ }
6193
+ if (!items || items.length === 0) {
6194
+ return [];
6136
6195
  }
6196
+ const groupFn = groupBy ?? ((item) => String(item.type ?? "default"));
6197
+ const groupMap = /* @__PURE__ */ new Map();
6198
+ items.forEach((item) => {
6199
+ const key = groupFn(item);
6200
+ if (!groupMap.has(key)) {
6201
+ groupMap.set(key, []);
6202
+ }
6203
+ groupMap.get(key)?.push(item);
6204
+ });
6205
+ const mappedGroups = Array.from(groupMap.entries()).map(([key, groupItems]) => ({
6206
+ key,
6207
+ title: key,
6208
+ items: groupItems
6209
+ }));
6210
+ return sortNotificationGroups(mappedGroups, groupOrder);
6211
+ };
6212
+
6213
+ // src/utils/comment-thread-utils.ts
6214
+ var buildCommentTree = (items = []) => {
6215
+ if (!items || items.length === 0) return [];
6216
+ const nodeMap = /* @__PURE__ */ new Map();
6217
+ const order = [];
6218
+ items.forEach((item) => {
6219
+ nodeMap.set(item.id, {
6220
+ ...item,
6221
+ children: []
6222
+ });
6223
+ order.push(item.id);
6224
+ });
6225
+ const roots = [];
6226
+ order.forEach((id) => {
6227
+ const node = nodeMap.get(id);
6228
+ if (!node) return;
6229
+ if (node.parentId === void 0 || node.parentId === null) {
6230
+ roots.push(node);
6231
+ return;
6232
+ }
6233
+ const parent = nodeMap.get(node.parentId);
6234
+ if (!parent) {
6235
+ roots.push(node);
6236
+ return;
6237
+ }
6238
+ if (!parent.children) parent.children = [];
6239
+ parent.children.push(node);
6240
+ });
6241
+ return roots;
6242
+ };
6243
+ var clipCommentTreeDepth = (nodes = [], maxDepth = 3) => {
6244
+ if (!nodes || nodes.length === 0) return [];
6245
+ if (maxDepth <= 0) return [];
6246
+ const cloneNode = (node, depth) => {
6247
+ const next = { ...node };
6248
+ if (node.children && node.children.length > 0 && depth < maxDepth) {
6249
+ next.children = node.children.map((child) => cloneNode(child, depth + 1));
6250
+ } else {
6251
+ next.children = [];
6252
+ }
6253
+ return next;
6254
+ };
6255
+ return nodes.map((node) => cloneNode(node, 1));
6256
+ };
6257
+
6258
+ // src/utils/composite-time-utils.ts
6259
+ var formatChatTime = (value) => {
6260
+ if (!value) return "";
6261
+ if (value instanceof Date) return value.toLocaleTimeString();
6262
+ if (typeof value === "number") return new Date(value).toLocaleTimeString();
6263
+ return value;
6264
+ };
6265
+ var formatCommentTime = (value) => {
6266
+ if (value == null || value === "") return "";
6267
+ if (value instanceof Date) return value.toLocaleString();
6268
+ if (typeof value === "number") return new Date(value).toLocaleString();
6269
+ return value;
6137
6270
  };
6138
- function getAlertTypeClasses(type, colors = defaultAlertThemeColors) {
6139
- return colors[type];
6140
- }
6141
6271
 
6142
6272
  // src/theme/checkbox.ts
6143
6273
  var checkboxSizeClasses = {
@@ -6151,26 +6281,17 @@ var checkboxLabelSizeClasses = {
6151
6281
  lg: "text-lg"
6152
6282
  };
6153
6283
  function getCheckboxClasses(size = "md", disabled = false) {
6154
- const baseClasses = "rounded border-2 transition-all duration-150 cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--tiger-focus-ring,var(--tiger-primary,#2563eb))] active:scale-95";
6284
+ const baseClasses2 = "rounded border-2 transition-all duration-150 cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-[var(--tiger-focus-ring,var(--tiger-primary,#2563eb))] active:scale-95";
6155
6285
  const sizeClass = checkboxSizeClasses[size];
6156
- const colorClasses = [
6157
- "border-[var(--tiger-primary,#2563eb)]",
6158
- "accent-[var(--tiger-primary,#2563eb)]",
6159
- "text-white",
6160
- "checked:bg-[var(--tiger-primary,#2563eb)]",
6161
- "checked:border-[var(--tiger-primary,#2563eb)]",
6162
- "indeterminate:bg-[var(--tiger-primary,#2563eb)]",
6163
- "indeterminate:border-[var(--tiger-primary,#2563eb)]",
6164
- "focus:ring-[var(--tiger-primary,#2563eb)]"
6165
- ].join(" ");
6286
+ const colorClasses = "border-[var(--tiger-primary,#2563eb)] accent-[var(--tiger-primary,#2563eb)] text-white checked:bg-[var(--tiger-primary,#2563eb)] checked:border-[var(--tiger-primary,#2563eb)] indeterminate:bg-[var(--tiger-primary,#2563eb)] indeterminate:border-[var(--tiger-primary,#2563eb)]";
6166
6287
  const disabledClasses = disabled ? "cursor-not-allowed opacity-50 disabled:bg-[var(--tiger-surface-muted,#f3f4f6)] disabled:border-[var(--tiger-border,#e5e7eb)]" : "";
6167
- return [baseClasses, sizeClass, colorClasses, disabledClasses].filter(Boolean).join(" ");
6288
+ return [baseClasses2, sizeClass, colorClasses, disabledClasses].filter(Boolean).join(" ");
6168
6289
  }
6169
6290
  function getCheckboxLabelClasses(size = "md", disabled = false) {
6170
- const baseClasses = "inline-flex items-center cursor-pointer select-none";
6291
+ const baseClasses2 = "inline-flex items-center cursor-pointer select-none";
6171
6292
  const sizeClass = checkboxLabelSizeClasses[size];
6172
- const disabledClasses = disabled ? "cursor-not-allowed opacity-50" : "";
6173
- return [baseClasses, sizeClass, disabledClasses].filter(Boolean).join(" ");
6293
+ const disabledClasses = disabled ? "cursor-not-allowed" : "";
6294
+ return [baseClasses2, sizeClass, disabledClasses].filter(Boolean).join(" ");
6174
6295
  }
6175
6296
 
6176
6297
  // src/theme/switch.ts
@@ -6201,10 +6322,10 @@ function getSwitchClasses(size = "md", checked = false, disabled = false) {
6201
6322
  );
6202
6323
  }
6203
6324
  function getSwitchThumbClasses(size = "md", checked = false) {
6204
- const baseClasses = "inline-block transform rounded-full bg-[var(--tiger-surface,#ffffff)] shadow-lg transition-transform";
6325
+ const baseClasses2 = "inline-block rounded-full bg-[var(--tiger-surface,#ffffff)] shadow-lg transition-transform";
6205
6326
  const sizeClass = switchThumbSizeClasses[size];
6206
6327
  const translateClass = checked ? switchThumbTranslateClasses[size] : "translate-x-0.5";
6207
- return classNames(baseClasses, sizeClass, translateClass);
6328
+ return classNames(baseClasses2, sizeClass, translateClass);
6208
6329
  }
6209
6330
 
6210
6331
  // src/theme/slider.ts
@@ -6318,7 +6439,11 @@ var tigercatTheme = {
6318
6439
  };
6319
6440
  var tigercatPlugin = (0, import_plugin.default)(function({ addBase }) {
6320
6441
  addBase({
6321
- ":root": tigercatTheme
6442
+ ":root": tigercatTheme,
6443
+ // Remove browser default focus outline on interactive SVG elements
6444
+ 'svg [tabindex], svg [role="button"]': {
6445
+ outline: "none"
6446
+ }
6322
6447
  });
6323
6448
  });
6324
6449
 
@@ -6334,15 +6459,26 @@ export {
6334
6459
  ClockIconPath,
6335
6460
  CloseIconPath,
6336
6461
  DEFAULT_CHART_COLORS,
6462
+ DEFAULT_FORM_WIZARD_LABELS,
6337
6463
  DEFAULT_PAGINATION_LABELS,
6464
+ DONUT_BASE_SHADOW,
6465
+ DONUT_EMPHASIS_SHADOW,
6466
+ DROPDOWN_CHEVRON_PATH,
6467
+ DROPDOWN_ENTER_CLASS,
6338
6468
  DURATION_CLASS,
6339
6469
  DURATION_FAST_CLASS,
6340
6470
  DURATION_SLOW_CLASS,
6341
6471
  EASING_DEFAULT,
6342
6472
  EASING_ENTER,
6343
6473
  EASING_LEAVE,
6474
+ PIE_BASE_SHADOW,
6475
+ PIE_EMPHASIS_SHADOW,
6476
+ POPOVER_TEXT_CLASSES,
6477
+ POPOVER_TITLE_CLASSES,
6478
+ RADAR_SPLIT_AREA_COLORS,
6479
+ SCATTER_ENTRANCE_CLASS,
6480
+ SCATTER_ENTRANCE_KEYFRAMES,
6344
6481
  SHAKE_CLASS,
6345
- SPACE_BASE_CLASS,
6346
6482
  SVG_ANIMATION_CLASSES,
6347
6483
  SVG_ANIMATION_VARS,
6348
6484
  SVG_DEFAULT_FILL,
@@ -6356,6 +6492,7 @@ export {
6356
6492
  TRANSITION_OPACITY,
6357
6493
  TRANSITION_TRANSFORM,
6358
6494
  TimePickerCloseIconPath,
6495
+ ZH_CN_FORM_WIZARD_LABELS,
6359
6496
  ZH_CN_PAGINATION_LABELS,
6360
6497
  activeOpacityClasses,
6361
6498
  activePressClasses,
@@ -6364,14 +6501,10 @@ export {
6364
6501
  alertCloseIconPath,
6365
6502
  alertContentClasses,
6366
6503
  alertDescriptionSizeClasses,
6367
- alertErrorIconPath,
6368
6504
  alertIconContainerClasses,
6369
6505
  alertIconSizeClasses,
6370
- alertInfoIconPath,
6371
6506
  alertSizeClasses,
6372
- alertSuccessIconPath,
6373
6507
  alertTitleSizeClasses,
6374
- alertWarningIconPath,
6375
6508
  anchorAffixClasses,
6376
6509
  anchorBaseClasses,
6377
6510
  anchorInkActiveHorizontalClasses,
@@ -6393,7 +6526,6 @@ export {
6393
6526
  avatarImageClasses,
6394
6527
  avatarShapeClasses,
6395
6528
  avatarSizeClasses,
6396
- backTopBaseClasses,
6397
6529
  backTopButtonClasses,
6398
6530
  backTopContainerClasses,
6399
6531
  backTopHiddenClasses,
@@ -6404,6 +6536,9 @@ export {
6404
6536
  badgeSizeClasses,
6405
6537
  badgeTypeClasses,
6406
6538
  badgeWrapperClasses,
6539
+ barAnimatedTransition,
6540
+ barValueLabelClasses,
6541
+ barValueLabelInsideClasses,
6407
6542
  barsVariantConfig,
6408
6543
  breadcrumbContainerClasses,
6409
6544
  breadcrumbCurrentClasses,
@@ -6411,8 +6546,10 @@ export {
6411
6546
  breadcrumbLinkClasses,
6412
6547
  breadcrumbSeparatorBaseClasses,
6413
6548
  buildActivityGroups,
6549
+ buildChartLegendItems,
6414
6550
  buildCommentTree,
6415
6551
  buildNotificationGroups,
6552
+ buildTriggerHandlerMap,
6416
6553
  buttonBaseClasses,
6417
6554
  buttonDisabledClasses,
6418
6555
  buttonSizeClasses,
@@ -6424,7 +6561,6 @@ export {
6424
6561
  captureActiveElement,
6425
6562
  cardActionsClasses,
6426
6563
  cardBaseClasses,
6427
- cardBodyClasses,
6428
6564
  cardCoverClasses,
6429
6565
  cardCoverWrapperClasses,
6430
6566
  cardFooterClasses,
@@ -6444,7 +6580,6 @@ export {
6444
6580
  carouselPrevArrowClasses,
6445
6581
  carouselPrevArrowPath,
6446
6582
  carouselSlideBaseClasses,
6447
- carouselSlideFadeClasses,
6448
6583
  carouselTrackFadeClasses,
6449
6584
  carouselTrackScrollClasses,
6450
6585
  chartAxisLabelClasses,
@@ -6457,9 +6592,11 @@ export {
6457
6592
  checkSolidIcon20PathD,
6458
6593
  checkboxLabelSizeClasses,
6459
6594
  checkboxSizeClasses,
6595
+ checkedSetsFromState,
6460
6596
  chevronDownSolidIcon20PathD,
6461
6597
  chevronLeftSolidIcon20PathD,
6462
6598
  chevronRightSolidIcon20PathD,
6599
+ clampBarWidth,
6463
6600
  clampPercentage,
6464
6601
  clampSlideIndex,
6465
6602
  classNames,
@@ -6480,7 +6617,6 @@ export {
6480
6617
  coerceStyleValue,
6481
6618
  collapseBaseClasses,
6482
6619
  collapseBorderlessClasses,
6483
- collapseExtraClasses,
6484
6620
  collapseGhostClasses,
6485
6621
  collapseHeaderTextClasses,
6486
6622
  collapseIconBaseClasses,
@@ -6492,8 +6628,9 @@ export {
6492
6628
  collapsePanelHeaderActiveClasses,
6493
6629
  collapsePanelHeaderBaseClasses,
6494
6630
  collapsePanelHeaderDisabledClasses,
6495
- collapseRightArrowIcon,
6496
6631
  computeFloatingPosition,
6632
+ computePieHoverOffset,
6633
+ computePieLabelLine,
6497
6634
  containerBaseClasses,
6498
6635
  containerCenteredClasses,
6499
6636
  containerMaxWidthClasses,
@@ -6503,6 +6640,7 @@ export {
6503
6640
  createAriaId,
6504
6641
  createBandScale,
6505
6642
  createChartInteractionHandlers,
6643
+ createFloatingIdFactory,
6506
6644
  createLinePath,
6507
6645
  createLinearScale,
6508
6646
  createPieArcPath,
@@ -6522,18 +6660,19 @@ export {
6522
6660
  defaultAlertThemeColors,
6523
6661
  defaultBadgeThemeColors,
6524
6662
  defaultChatMessageStatusInfo,
6525
- defaultExpandIcon,
6526
- defaultIndeterminateIcon,
6527
6663
  defaultLinkThemeColors,
6528
6664
  defaultMessageThemeColors,
6529
6665
  defaultNotificationThemeColors,
6530
6666
  defaultProgressThemeColors,
6667
+ defaultRadarTooltipFormatter,
6531
6668
  defaultRadioColors,
6669
+ defaultSeriesXYTooltipFormatter,
6532
6670
  defaultSortFn,
6533
6671
  defaultTagThemeColors,
6534
6672
  defaultThemeColors,
6535
6673
  defaultTooltipFormatter,
6536
6674
  defaultTotalText,
6675
+ defaultXYTooltipFormatter,
6537
6676
  descriptionsBaseClasses,
6538
6677
  descriptionsCellSizeClasses,
6539
6678
  descriptionsContentBorderedClasses,
@@ -6542,7 +6681,6 @@ export {
6542
6681
  descriptionsHeaderClasses,
6543
6682
  descriptionsLabelBorderedClasses,
6544
6683
  descriptionsLabelClasses,
6545
- descriptionsRowClasses,
6546
6684
  descriptionsSizeClasses,
6547
6685
  descriptionsTableBorderedClasses,
6548
6686
  descriptionsTableClasses,
@@ -6554,6 +6692,7 @@ export {
6554
6692
  descriptionsWrapperClasses,
6555
6693
  dotSizeClasses,
6556
6694
  dotsVariantConfig,
6695
+ ensureBarMinHeight,
6557
6696
  errorCircleSolidIcon20PathD,
6558
6697
  fileToUploadFile,
6559
6698
  filterData,
@@ -6561,9 +6700,11 @@ export {
6561
6700
  filterTreeNodes,
6562
6701
  findActiveAnchor,
6563
6702
  findNode,
6564
- flattenTree,
6703
+ flattenSelectOptions,
6565
6704
  focusElement,
6566
6705
  focusFirst,
6706
+ focusFirstChildItem,
6707
+ focusMenuEdge,
6567
6708
  focusRingClasses,
6568
6709
  focusRingInsetClasses,
6569
6710
  formatActivityTime,
@@ -6596,10 +6737,13 @@ export {
6596
6737
  getAnchorLinkListClasses,
6597
6738
  getAnchorTargetElement,
6598
6739
  getAnchorWrapperClasses,
6740
+ getAreaGradientPrefix,
6599
6741
  getArrowStyles,
6600
6742
  getAutoExpandKeys,
6601
6743
  getBadgeVariantClasses,
6744
+ getBarGradientPrefix,
6602
6745
  getBarGrowAnimationStyle,
6746
+ getBarValueLabelY,
6603
6747
  getBreadcrumbItemClasses,
6604
6748
  getBreadcrumbLinkClasses,
6605
6749
  getBreadcrumbSeparatorClasses,
@@ -6622,6 +6766,7 @@ export {
6622
6766
  getCheckboxLabelClasses,
6623
6767
  getCheckedKeysByStrategy,
6624
6768
  getCircleSize,
6769
+ getColMergedStyleVars,
6625
6770
  getColOrderStyleVars,
6626
6771
  getColStyleVars,
6627
6772
  getCollapseContainerClasses,
@@ -6644,9 +6789,8 @@ export {
6644
6789
  getDescriptionsLabelClasses,
6645
6790
  getDescriptionsTableClasses,
6646
6791
  getDescriptionsVerticalItemClasses,
6647
- getDividerLineStyleClasses,
6648
- getDividerOrientationClasses,
6649
- getDividerSpacingClasses,
6792
+ getDividerClasses,
6793
+ getDividerStyle,
6650
6794
  getDragAreaClasses,
6651
6795
  getDrawerBodyClasses,
6652
6796
  getDrawerCloseButtonClasses,
@@ -6656,10 +6800,10 @@ export {
6656
6800
  getDrawerMaskClasses,
6657
6801
  getDrawerPanelClasses,
6658
6802
  getDrawerTitleClasses,
6803
+ getDropdownChevronClasses,
6659
6804
  getDropdownContainerClasses,
6660
6805
  getDropdownItemClasses,
6661
6806
  getDropdownMenuClasses,
6662
- getDropdownMenuWrapperClasses,
6663
6807
  getDropdownTriggerClasses,
6664
6808
  getElementOffsetTop,
6665
6809
  getErrorFields,
@@ -6671,12 +6815,12 @@ export {
6671
6815
  getFocusTrapNavigation,
6672
6816
  getFocusableElements,
6673
6817
  getFormItemAsteriskClasses,
6674
- getFormItemAsteriskStyle,
6675
6818
  getFormItemClasses,
6676
6819
  getFormItemContentClasses,
6677
6820
  getFormItemErrorClasses,
6678
6821
  getFormItemFieldClasses,
6679
6822
  getFormItemLabelClasses,
6823
+ getFormWizardLabels,
6680
6824
  getGridColumnClasses,
6681
6825
  getGutterStyles,
6682
6826
  getInitials,
@@ -6686,6 +6830,7 @@ export {
6686
6830
  getInputWrapperClasses,
6687
6831
  getJustifyClasses,
6688
6832
  getLeafKeys,
6833
+ getLineGradientPrefix,
6689
6834
  getLinkVariantClasses,
6690
6835
  getListClasses,
6691
6836
  getListHeaderFooterClasses,
@@ -6697,6 +6842,7 @@ export {
6697
6842
  getLoadingDotsWrapperClasses,
6698
6843
  getLoadingOverlaySpinnerClasses,
6699
6844
  getLoadingTextClasses,
6845
+ getMenuButtons,
6700
6846
  getMenuClasses,
6701
6847
  getMenuItemClasses,
6702
6848
  getMenuItemIndent,
@@ -6752,6 +6898,7 @@ export {
6752
6898
  getProgressVariantClasses,
6753
6899
  getQuickJumperInputClasses,
6754
6900
  getRadarAngles,
6901
+ getRadarLabelAlign,
6755
6902
  getRadarPoints,
6756
6903
  getRadioColorClasses,
6757
6904
  getRadioDotClasses,
@@ -6759,6 +6906,10 @@ export {
6759
6906
  getRadioLabelClasses,
6760
6907
  getRadioVisualClasses,
6761
6908
  getRowKey,
6909
+ getScatterGradientPrefix,
6910
+ getScatterHoverShadow,
6911
+ getScatterHoverSize,
6912
+ getScatterPointPath,
6762
6913
  getScrollTop,
6763
6914
  getScrollTransform,
6764
6915
  getSecureRel,
@@ -6775,15 +6926,15 @@ export {
6775
6926
  getSimplePaginationPageIndicatorClasses,
6776
6927
  getSimplePaginationSelectClasses,
6777
6928
  getSimplePaginationTotalClasses,
6929
+ getSizeTextClasses,
6778
6930
  getSkeletonClasses,
6779
6931
  getSkeletonDimensions,
6780
6932
  getSliderThumbClasses,
6781
6933
  getSliderTooltipClasses,
6782
6934
  getSliderTrackClasses,
6783
6935
  getSortIconClasses,
6784
- getSpaceAlignClass,
6785
- getSpaceDirectionClass,
6786
- getSpaceGapSize,
6936
+ getSpaceClasses,
6937
+ getSpaceStyle,
6787
6938
  getSpanClasses,
6788
6939
  getSpinnerSVG,
6789
6940
  getStatusVariant,
@@ -6810,6 +6961,7 @@ export {
6810
6961
  getTableWrapperClasses,
6811
6962
  getTabsContainerClasses,
6812
6963
  getTagVariantClasses,
6964
+ getTextClasses,
6813
6965
  getThemeColor,
6814
6966
  getTimePeriodLabels,
6815
6967
  getTimePickerIconButtonClasses,
@@ -6849,7 +7001,12 @@ export {
6849
7001
  icon24ViewBox,
6850
7002
  iconSizeClasses,
6851
7003
  iconSvgBaseClasses,
7004
+ iconSvgDefaultStrokeLinecap,
7005
+ iconSvgDefaultStrokeLinejoin,
7006
+ iconSvgDefaultStrokeWidth,
6852
7007
  iconWrapperClasses,
7008
+ initRovingTabIndex,
7009
+ injectDropdownStyles,
6853
7010
  injectLoadingAnimationStyles,
6854
7011
  injectShakeStyle,
6855
7012
  injectSvgAnimationStyles,
@@ -6880,6 +7037,7 @@ export {
6880
7037
  layoutHeaderClasses,
6881
7038
  layoutRootClasses,
6882
7039
  layoutSidebarClasses,
7040
+ linePointTransitionClasses,
6883
7041
  linkBaseClasses,
6884
7042
  linkDisabledClasses,
6885
7043
  linkSizeClasses,
@@ -6901,7 +7059,6 @@ export {
6901
7059
  listItemSizeClasses,
6902
7060
  listItemTitleClasses,
6903
7061
  listLoadingOverlayClasses,
6904
- listPaginationContainerClasses,
6905
7062
  listSizeClasses,
6906
7063
  listWrapperClasses,
6907
7064
  loadingBarBaseClasses,
@@ -6939,12 +7096,8 @@ export {
6939
7096
  messageCloseIconPath,
6940
7097
  messageContainerBaseClasses,
6941
7098
  messageContentClasses,
6942
- messageEnterActiveClasses,
6943
- messageEnterClasses,
6944
7099
  messageIconClasses,
6945
7100
  messageIconPaths,
6946
- messageLeaveActiveClasses,
6947
- messageLeaveClasses,
6948
7101
  messageLoadingSpinnerClasses,
6949
7102
  messagePositionClasses,
6950
7103
  modalBodyClasses,
@@ -6956,9 +7109,11 @@ export {
6956
7109
  modalSizeClasses,
6957
7110
  modalTitleClasses,
6958
7111
  modalWrapperClasses,
7112
+ moveFocusInMenu,
6959
7113
  normalizeActiveKeys,
6960
7114
  normalizeChartPadding,
6961
7115
  normalizeDate,
7116
+ normalizeStringOption,
6962
7117
  normalizeSvgAttrs,
6963
7118
  notificationBaseClasses,
6964
7119
  notificationCloseButtonClasses,
@@ -6973,6 +7128,7 @@ export {
6973
7128
  notificationTitleClasses,
6974
7129
  paginateData,
6975
7130
  parseDate,
7131
+ parseInputValue,
6976
7132
  parseTime,
6977
7133
  parseWidthToPx,
6978
7134
  polarToCartesian,
@@ -7008,8 +7164,17 @@ export {
7008
7164
  radioSizeClasses,
7009
7165
  radioVisualBaseClasses,
7010
7166
  replaceKeys,
7167
+ resetAreaGradientCounter,
7168
+ resetBarGradientCounter,
7169
+ resetLineGradientCounter,
7170
+ resetScatterGradientCounter,
7171
+ resolveChartPalette,
7172
+ resolveChartTooltipContent,
7011
7173
  resolveLocaleText,
7174
+ resolveMultiSeriesTooltipContent,
7175
+ resolveSeriesData,
7012
7176
  restoreFocus,
7177
+ scatterPointTransitionClasses,
7013
7178
  scrollToAnchor,
7014
7179
  scrollToTop,
7015
7180
  selectBaseClasses,
@@ -7049,12 +7214,7 @@ export {
7049
7214
  statusInfoIconPath,
7050
7215
  statusSuccessIconPath,
7051
7216
  statusWarningIconPath,
7052
- stepFinishIconPathD,
7053
- stepFinishIconPathStrokeLinecap,
7054
- stepFinishIconPathStrokeLinejoin,
7055
- stepFinishIconPathStrokeWidth,
7056
- stepFinishIconSvgClasses,
7057
- stepFinishIconViewBox,
7217
+ stepFinishChar,
7058
7218
  submenuContentHorizontalClasses,
7059
7219
  submenuContentInlineClasses,
7060
7220
  submenuContentPopupClasses,
@@ -7081,6 +7241,7 @@ export {
7081
7241
  tabItemLineClasses,
7082
7242
  tabItemSizeClasses,
7083
7243
  tabNavBaseClasses,
7244
+ tabNavLineBorderClasses,
7084
7245
  tabNavListBaseClasses,
7085
7246
  tabNavListCenteredClasses,
7086
7247
  tabNavListPositionClasses,