@expcat/tigercat-core 0.2.27 → 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,108 @@ 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
+ }
1088
+
1089
+ // src/utils/form-item-styles.ts
1090
+ var FORM_ITEM_SPACING = {
1091
+ sm: "mb-3 last:mb-0",
1092
+ md: "mb-4 last:mb-0",
1093
+ lg: "mb-6 last:mb-0"
1094
+ };
1095
+ var LABEL_TEXT_SIZE = {
1096
+ sm: "text-xs",
1097
+ md: "text-sm",
1098
+ lg: "text-base"
1099
+ };
1100
+ var LABEL_PADDING_TOP = {
1101
+ sm: "pt-1",
1102
+ md: "pt-2",
1103
+ lg: "pt-3"
1104
+ };
1105
+ var ERROR_TEXT_SIZE = {
1106
+ sm: "text-xs",
1107
+ md: "text-xs",
1108
+ lg: "text-sm"
1109
+ };
1110
+ var ERROR_MIN_HEIGHT = {
1111
+ sm: "min-h-[1rem]",
1112
+ md: "min-h-[1.25rem]",
1113
+ lg: "min-h-[1.5rem]"
1114
+ };
1115
+ function getFormItemClasses(options = {}) {
1116
+ const { size = "md", labelPosition = "right", hasError = false, disabled = false } = options;
1117
+ const layoutClasses = labelPosition === "top" ? "flex flex-col gap-2" : "flex items-start gap-4";
1118
+ return classNames(
1119
+ "tiger-form-item",
1120
+ "w-full",
1121
+ `tiger-form-item--${size}`,
1122
+ `tiger-form-item--label-${labelPosition}`,
1123
+ layoutClasses,
1124
+ FORM_ITEM_SPACING[size],
1125
+ hasError && "tiger-form-item--error",
1126
+ disabled && "tiger-form-item--disabled"
1127
+ );
1128
+ }
1129
+ function getFormItemLabelClasses(options = {}) {
1130
+ const { size = "md", labelPosition = "right", labelAlign = "right", isRequired = false } = options;
1131
+ const alignClass = labelAlign === "right" ? "text-right" : "text-left";
1132
+ const positionClasses = labelPosition === "top" ? "w-full" : "shrink-0";
1133
+ const paddingClass = labelPosition === "top" ? "" : LABEL_PADDING_TOP[size];
1134
+ return classNames(
1135
+ "tiger-form-item__label",
1136
+ `tiger-form-item__label--${labelAlign}`,
1137
+ "font-medium",
1138
+ "text-[var(--tiger-text,#111827)]",
1139
+ LABEL_TEXT_SIZE[size],
1140
+ alignClass,
1141
+ positionClasses,
1142
+ paddingClass,
1143
+ isRequired && "tiger-form-item__label--required"
1144
+ );
1145
+ }
1146
+ function getFormItemContentClasses(labelPosition = "right") {
1147
+ return classNames(
1148
+ "tiger-form-item__content",
1149
+ labelPosition === "top" ? "w-full" : "flex-1",
1150
+ "min-w-0",
1151
+ "flex",
1152
+ "flex-col"
1153
+ );
1154
+ }
1155
+ function getFormItemFieldClasses() {
1156
+ return classNames("tiger-form-item__field", "w-full");
1157
+ }
1158
+ function getFormItemErrorClasses(size = "md") {
1159
+ return classNames(
1160
+ "tiger-form-item__error",
1161
+ "mt-1",
1162
+ ERROR_TEXT_SIZE[size],
1163
+ ERROR_MIN_HEIGHT[size],
1164
+ "text-[var(--tiger-error,#ef4444)]",
1165
+ "transition-opacity",
1166
+ "duration-150",
1167
+ "opacity-0"
1168
+ );
1169
+ }
1170
+ function getFormItemAsteriskClasses() {
1171
+ return classNames(
1172
+ "tiger-form-item__asterisk",
1173
+ "mr-1",
1174
+ "font-semibold",
1175
+ "text-[var(--tiger-error,#ef4444)]"
1176
+ );
1177
+ }
1082
1178
 
1083
1179
  // src/utils/select-utils.ts
1084
1180
  var selectBaseClasses = "relative inline-block w-full";
@@ -1089,7 +1185,6 @@ var SELECT_TRIGGER_BASE_CLASSES = [
1089
1185
  "justify-between",
1090
1186
  "gap-2",
1091
1187
  "px-3",
1092
- "py-2",
1093
1188
  "bg-[var(--tiger-select-trigger-bg,var(--tiger-surface,#ffffff))]",
1094
1189
  "border",
1095
1190
  "border-[var(--tiger-select-trigger-border,var(--tiger-border,#d1d5db))]",
@@ -1145,6 +1240,17 @@ function getSelectOptionClasses(isSelected, isDisabled, size) {
1145
1240
  function isOptionGroup(option) {
1146
1241
  return !!option && typeof option === "object" && "options" in option && Array.isArray(option.options);
1147
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
+ }
1148
1254
  function filterOptions(options, query) {
1149
1255
  if (!query) {
1150
1256
  return options;
@@ -1436,20 +1542,9 @@ var getRadioLabelClasses = ({ size, disabled, colors }) => classNames(
1436
1542
 
1437
1543
  // src/utils/radio-group-utils.ts
1438
1544
  var radioGroupDefaultClasses = "space-y-2";
1439
- var getRadioGroupClasses = ({
1440
- className,
1441
- hasCustomClass
1442
- } = {}) => {
1443
- const effectiveHasCustomClass = hasCustomClass ?? !!className;
1444
- return classNames(className, !effectiveHasCustomClass && radioGroupDefaultClasses);
1445
- };
1545
+ var getRadioGroupClasses = ({ className } = {}) => classNames(className, !className && radioGroupDefaultClasses);
1446
1546
 
1447
1547
  // src/utils/date-utils.ts
1448
- function isValidDate(value) {
1449
- if (!value) return false;
1450
- const date = value instanceof Date ? value : new Date(value);
1451
- return !isNaN(date.getTime());
1452
- }
1453
1548
  function parseDate(value) {
1454
1549
  if (!value) return null;
1455
1550
  if (value instanceof Date) {
@@ -1459,7 +1554,7 @@ function parseDate(value) {
1459
1554
  return isNaN(parsed.getTime()) ? null : parsed;
1460
1555
  }
1461
1556
  function formatDate(date, format = "yyyy-MM-dd") {
1462
- if (!date || !isValidDate(date)) return "";
1557
+ if (!date || isNaN(date.getTime())) return "";
1463
1558
  const year = date.getFullYear();
1464
1559
  const month = String(date.getMonth() + 1).padStart(2, "0");
1465
1560
  const day = String(date.getDate()).padStart(2, "0");
@@ -1486,15 +1581,13 @@ function normalizeDate(date) {
1486
1581
  return normalized;
1487
1582
  }
1488
1583
  function isDateInRange(date, minDate, maxDate) {
1489
- if (!isValidDate(date)) return false;
1584
+ if (isNaN(date.getTime())) return false;
1490
1585
  const normalizedDate = normalizeDate(date);
1491
- if (minDate && isValidDate(minDate)) {
1492
- const normalizedMin = normalizeDate(minDate);
1493
- if (normalizedDate < normalizedMin) return false;
1586
+ if (minDate && !isNaN(minDate.getTime())) {
1587
+ if (normalizedDate < normalizeDate(minDate)) return false;
1494
1588
  }
1495
- if (maxDate && isValidDate(maxDate)) {
1496
- const normalizedMax = normalizeDate(maxDate);
1497
- if (normalizedDate > normalizedMax) return false;
1589
+ if (maxDate && !isNaN(maxDate.getTime())) {
1590
+ if (normalizedDate > normalizeDate(maxDate)) return false;
1498
1591
  }
1499
1592
  return true;
1500
1593
  }
@@ -1621,7 +1714,7 @@ function isToday(date) {
1621
1714
  var datePickerBaseClasses = "relative inline-block w-full";
1622
1715
  var datePickerInputWrapperClasses = "relative w-full";
1623
1716
  function getDatePickerInputClasses(size = "md", disabled = false) {
1624
- const baseClasses = [
1717
+ const baseClasses2 = [
1625
1718
  "w-full",
1626
1719
  "rounded-md",
1627
1720
  "border",
@@ -1643,10 +1736,10 @@ function getDatePickerInputClasses(size = "md", disabled = false) {
1643
1736
  lg: "px-4 py-3 text-lg"
1644
1737
  };
1645
1738
  const disabledClasses = disabled ? ["bg-gray-100", "cursor-not-allowed", "text-gray-500"] : ["cursor-pointer"];
1646
- return classNames(...baseClasses, sizeClasses[size], ...disabledClasses);
1739
+ return classNames(...baseClasses2, sizeClasses[size], ...disabledClasses);
1647
1740
  }
1648
1741
  function getDatePickerIconButtonClasses(size = "md") {
1649
- const baseClasses = [
1742
+ const baseClasses2 = [
1650
1743
  "absolute",
1651
1744
  "right-0",
1652
1745
  "top-0",
@@ -1663,7 +1756,7 @@ function getDatePickerIconButtonClasses(size = "md") {
1663
1756
  md: "px-3",
1664
1757
  lg: "px-4"
1665
1758
  };
1666
- return classNames(...baseClasses, sizeClasses[size]);
1759
+ return classNames(...baseClasses2, sizeClasses[size]);
1667
1760
  }
1668
1761
  var datePickerCalendarClasses = classNames(
1669
1762
  "absolute",
@@ -1704,33 +1797,22 @@ var datePickerDayNameClasses = classNames(
1704
1797
  "py-2"
1705
1798
  );
1706
1799
  function getDatePickerDayCellClasses(isCurrentMonth, isSelected, isToday2, isDisabled, isInRange = false, isRangeStart = false, isRangeEnd = false) {
1707
- const baseClasses = [
1708
- "w-10",
1709
- "h-10",
1710
- "flex",
1711
- "items-center",
1712
- "justify-center",
1713
- "rounded-md",
1714
- "text-sm",
1715
- "transition-colors"
1716
- ];
1717
- const interactionClasses = isDisabled ? ["cursor-not-allowed", "text-gray-300"] : ["cursor-pointer", "hover:bg-gray-100"];
1718
- const monthClasses = isCurrentMonth ? ["text-gray-900"] : ["text-gray-400"];
1719
- const stateClasses = [];
1720
- if (isInRange && !isDisabled && !isSelected) {
1721
- 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");
1722
1803
  }
1723
1804
  if (isSelected || isRangeStart || isRangeEnd) {
1724
- stateClasses.push(
1725
- "bg-[var(--tiger-primary,#2563eb)]",
1726
- "text-white",
1727
- "hover:bg-[var(--tiger-primary-hover,#1d4ed8)]",
1728
- "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"
1729
1810
  );
1730
- } else if (isToday2) {
1731
- stateClasses.push("border", "border-[var(--tiger-primary,#2563eb)]", "font-semibold");
1732
1811
  }
1733
- 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);
1734
1816
  }
1735
1817
  var datePickerClearButtonClasses = classNames(
1736
1818
  "absolute",
@@ -1813,15 +1895,7 @@ function to24HourFormat(hours, period) {
1813
1895
  }
1814
1896
  }
1815
1897
  function formatTimeDisplay(hours, minutes, seconds = 0, format = "24", showSeconds = false) {
1816
- if (format === "12") {
1817
- const { hours: hours12, period } = to12HourFormat(hours);
1818
- const h = hours12.toString().padStart(2, "0");
1819
- const m = clampValue(minutes, 0, 59).toString().padStart(2, "0");
1820
- const s = clampValue(seconds, 0, 59).toString().padStart(2, "0");
1821
- const timeStr = showSeconds ? `${h}:${m}:${s}` : `${h}:${m}`;
1822
- return `${timeStr} ${period}`;
1823
- }
1824
- return formatTime(hours, minutes, seconds, showSeconds);
1898
+ return formatTimeDisplayWithLocale(hours, minutes, seconds, format, showSeconds);
1825
1899
  }
1826
1900
  function getTimePeriodLabels(locale) {
1827
1901
  if (!locale) return { am: "AM", pm: "PM" };
@@ -1885,21 +1959,19 @@ function generateHours(step = 1, format = "24") {
1885
1959
  }
1886
1960
  return hours;
1887
1961
  }
1888
- function generateMinutes(step = 1) {
1889
- const minutes = [];
1962
+ function generateTimeSlots(step, max) {
1890
1963
  const validStep = validateStep(step);
1891
- for (let i = 0; i < 60; i += validStep) {
1892
- minutes.push(i);
1964
+ const values = [];
1965
+ for (let i = 0; i < max; i += validStep) {
1966
+ values.push(i);
1893
1967
  }
1894
- return minutes;
1968
+ return values;
1969
+ }
1970
+ function generateMinutes(step = 1) {
1971
+ return generateTimeSlots(step, 60);
1895
1972
  }
1896
1973
  function generateSeconds(step = 1) {
1897
- const seconds = [];
1898
- const validStep = validateStep(step);
1899
- for (let i = 0; i < 60; i += validStep) {
1900
- seconds.push(i);
1901
- }
1902
- return seconds;
1974
+ return generateTimeSlots(step, 60);
1903
1975
  }
1904
1976
  function getCurrentTime(showSeconds = false) {
1905
1977
  const now = /* @__PURE__ */ new Date();
@@ -2039,8 +2111,8 @@ function formatFileSize(bytes) {
2039
2111
  const i = Math.floor(Math.log(bytes) / Math.log(k));
2040
2112
  return `${(bytes / Math.pow(k, i)).toFixed(2)} ${units[i]}`;
2041
2113
  }
2042
- function getUploadButtonClasses(drag, disabled) {
2043
- const baseClasses = [
2114
+ function getUploadButtonClasses(disabled) {
2115
+ const baseClasses2 = [
2044
2116
  "inline-flex",
2045
2117
  "items-center",
2046
2118
  "justify-center",
@@ -2065,10 +2137,10 @@ function getUploadButtonClasses(drag, disabled) {
2065
2137
  "focus:ring-[var(--tiger-primary,#2563eb)]",
2066
2138
  "cursor-pointer"
2067
2139
  ];
2068
- return classNames(...baseClasses, ...stateClasses);
2140
+ return classNames(...baseClasses2, ...stateClasses);
2069
2141
  }
2070
2142
  function getDragAreaClasses(isDragging, disabled) {
2071
- const baseClasses = [
2143
+ const baseClasses2 = [
2072
2144
  "flex",
2073
2145
  "flex-col",
2074
2146
  "items-center",
@@ -2107,7 +2179,7 @@ function getDragAreaClasses(isDragging, disabled) {
2107
2179
  ...focusClasses
2108
2180
  ];
2109
2181
  }
2110
- return classNames(...baseClasses, ...stateClasses);
2182
+ return classNames(...baseClasses2, ...stateClasses);
2111
2183
  }
2112
2184
  var FILE_LIST_STATUS_CLASSES = {
2113
2185
  ready: ["bg-gray-50", "hover:bg-gray-100"],
@@ -2122,7 +2194,7 @@ var PICTURE_CARD_STATUS_CLASSES = {
2122
2194
  error: ["border-red-400", "bg-red-50"]
2123
2195
  };
2124
2196
  function getFileListItemClasses(status) {
2125
- const baseClasses = [
2197
+ const baseClasses2 = [
2126
2198
  "flex",
2127
2199
  "items-center",
2128
2200
  "justify-between",
@@ -2133,10 +2205,10 @@ function getFileListItemClasses(status) {
2133
2205
  "duration-200"
2134
2206
  ];
2135
2207
  const stateClasses = status ? FILE_LIST_STATUS_CLASSES[status] : FILE_LIST_STATUS_CLASSES.ready;
2136
- return classNames(...baseClasses, ...stateClasses);
2208
+ return classNames(...baseClasses2, ...stateClasses);
2137
2209
  }
2138
2210
  function getPictureCardClasses(status) {
2139
- const baseClasses = [
2211
+ const baseClasses2 = [
2140
2212
  "relative",
2141
2213
  "inline-flex",
2142
2214
  "items-center",
@@ -2150,7 +2222,7 @@ function getPictureCardClasses(status) {
2150
2222
  "duration-200"
2151
2223
  ];
2152
2224
  const stateClasses = status ? PICTURE_CARD_STATUS_CLASSES[status] : PICTURE_CARD_STATUS_CLASSES.ready;
2153
- return classNames(...baseClasses, ...stateClasses);
2225
+ return classNames(...baseClasses2, ...stateClasses);
2154
2226
  }
2155
2227
 
2156
2228
  // src/utils/grid.ts
@@ -2253,6 +2325,14 @@ function getColOrderStyleVars(order) {
2253
2325
  setOrderVars(vars, order);
2254
2326
  return vars;
2255
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
+ }
2256
2336
  function getAlignClasses(align) {
2257
2337
  return ALIGN_MAP[align] || "items-start";
2258
2338
  }
@@ -2297,34 +2377,48 @@ function getFlexClasses(flex) {
2297
2377
  }
2298
2378
 
2299
2379
  // src/utils/divider.ts
2300
- var SPACING_MAP = {
2301
- none: { horizontal: "", vertical: "" },
2302
- xs: { horizontal: "my-1", vertical: "mx-1" },
2303
- sm: { horizontal: "my-2", vertical: "mx-2" },
2304
- md: { horizontal: "my-4", vertical: "mx-4" },
2305
- lg: { horizontal: "my-6", vertical: "mx-6" },
2306
- 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"
2307
2396
  };
2308
2397
  var LINE_STYLE_MAP = {
2309
2398
  solid: "border-solid",
2310
2399
  dashed: "border-dashed",
2311
2400
  dotted: "border-dotted"
2312
2401
  };
2313
- var DEFAULT_BORDER_COLOR_CLASS = "border-[var(--tiger-border,#e5e7eb)]";
2314
- function getDividerSpacingClasses(spacing, orientation) {
2315
- return SPACING_MAP[spacing][orientation];
2316
- }
2317
- function getDividerLineStyleClasses(lineStyle) {
2318
- return LINE_STYLE_MAP[lineStyle];
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]}`;
2319
2407
  }
2320
- function getDividerOrientationClasses(orientation) {
2321
- 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;
2322
2416
  }
2323
2417
 
2324
2418
  // src/utils/layout-utils.ts
2325
2419
  var layoutRootClasses = "tiger-layout flex flex-col min-h-screen";
2326
2420
  var layoutHeaderClasses = "tiger-header bg-[var(--tiger-surface,#ffffff)] border-b border-[var(--tiger-border,#e5e7eb)]";
2327
- 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";
2328
2422
  var layoutContentClasses = "tiger-content flex-1 bg-[var(--tiger-layout-content-bg,#f9fafb)] p-6";
2329
2423
  var layoutFooterClasses = "tiger-footer bg-[var(--tiger-surface,#ffffff)] border-t border-[var(--tiger-border,#e5e7eb)] p-4";
2330
2424
 
@@ -2354,33 +2448,30 @@ var getContainerClasses = ({
2354
2448
  );
2355
2449
 
2356
2450
  // src/utils/space.ts
2357
- var SPACE_BASE_CLASS = "inline-flex";
2358
- function getSpaceGapSize(size = "md") {
2359
- if (typeof size === "number") {
2360
- return { style: `${size}px` };
2361
- }
2362
- const sizeMap = {
2363
- sm: "gap-2",
2364
- // 8px
2365
- md: "gap-4",
2366
- // 16px
2367
- lg: "gap-6"
2368
- // 24px
2369
- };
2370
- return { class: sizeMap[size] };
2371
- }
2372
- function getSpaceAlignClass(align = "start") {
2373
- const alignMap = {
2374
- start: "items-start",
2375
- end: "items-end",
2376
- center: "items-center",
2377
- baseline: "items-baseline",
2378
- stretch: "items-stretch"
2379
- };
2380
- 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
+ );
2381
2472
  }
2382
- function getSpaceDirectionClass(direction = "horizontal") {
2383
- return direction === "horizontal" ? "flex-row" : "flex-col";
2473
+ function getSpaceStyle(size = "md") {
2474
+ return typeof size === "number" ? { gap: `${size}px` } : void 0;
2384
2475
  }
2385
2476
 
2386
2477
  // src/utils/table-utils.ts
@@ -2423,13 +2514,17 @@ function getFixedColumnOffsets(columns) {
2423
2514
  }
2424
2515
  function getTableWrapperClasses(bordered, maxHeight) {
2425
2516
  return classNames(
2517
+ "relative",
2426
2518
  tableContainerClasses,
2427
- bordered && "border border-gray-200 rounded-lg",
2519
+ bordered && "border border-[var(--tiger-border,#e5e7eb)] rounded-lg overflow-hidden",
2428
2520
  maxHeight && "overflow-y-auto"
2429
2521
  );
2430
2522
  }
2431
2523
  function getTableHeaderClasses(stickyHeader) {
2432
- 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
+ );
2433
2528
  }
2434
2529
  function getTableHeaderCellClasses(size, align, sortable, customClassName) {
2435
2530
  const paddingClasses = {
@@ -2443,18 +2538,18 @@ function getTableHeaderCellClasses(size, align, sortable, customClassName) {
2443
2538
  right: "text-right"
2444
2539
  };
2445
2540
  return classNames(
2446
- "font-medium text-gray-700 text-sm",
2541
+ "font-medium text-[var(--tiger-text-muted,#6b7280)] text-xs uppercase tracking-wider",
2447
2542
  paddingClasses[size],
2448
2543
  alignClasses[align],
2449
- 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",
2450
2545
  customClassName
2451
2546
  );
2452
2547
  }
2453
2548
  function getTableRowClasses(hoverable, striped, isEven, customClassName) {
2454
2549
  return classNames(
2455
- "border-b border-gray-200 last:border-b-0",
2456
- hoverable && "hover:bg-gray-50 transition-colors",
2457
- 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",
2458
2553
  customClassName
2459
2554
  );
2460
2555
  }
@@ -2470,7 +2565,7 @@ function getTableCellClasses(size, align, customClassName) {
2470
2565
  right: "text-right"
2471
2566
  };
2472
2567
  return classNames(
2473
- "text-sm text-gray-900",
2568
+ "text-sm text-[var(--tiger-text,#111827)]",
2474
2569
  paddingClasses[size],
2475
2570
  alignClasses[align],
2476
2571
  customClassName
@@ -2482,9 +2577,9 @@ function getSortIconClasses(active) {
2482
2577
  active ? "text-[var(--tiger-primary,#2563eb)]" : "text-gray-400"
2483
2578
  );
2484
2579
  }
2485
- var tableEmptyStateClasses = "text-center py-12 text-gray-500";
2580
+ var tableEmptyStateClasses = "text-center py-12 text-[var(--tiger-text-muted,#6b7280)]";
2486
2581
  var tableLoadingOverlayClasses = classNames(
2487
- "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"
2488
2583
  );
2489
2584
  var tablePaginationContainerClasses = classNames(
2490
2585
  "flex items-center justify-between px-4 py-3 border-t border-gray-200"
@@ -2600,27 +2695,17 @@ var badgePositionClasses = {
2600
2695
  "bottom-left": "absolute -bottom-1 -left-1"
2601
2696
  };
2602
2697
  function formatBadgeContent(content, max = 99, showZero = false) {
2603
- if (content === void 0 || content === null) {
2604
- return null;
2605
- }
2606
- if (typeof content === "string") {
2607
- return content;
2608
- }
2609
- const num = Number(content);
2610
- if (num === 0 && !showZero) {
2611
- return null;
2612
- }
2613
- if (num > max) {
2614
- return `${max}+`;
2615
- }
2616
- 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);
2617
2703
  }
2618
2704
  function shouldHideBadge(content, type, showZero) {
2619
- if (type === "dot") {
2620
- return false;
2621
- }
2622
- const formattedContent = formatBadgeContent(content, 99, showZero);
2623
- 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;
2624
2709
  }
2625
2710
 
2626
2711
  // src/utils/card-utils.ts
@@ -2638,7 +2723,6 @@ var cardVariantClasses = {
2638
2723
  };
2639
2724
  var cardHoverClasses = "cursor-pointer hover:shadow-xl hover:scale-[1.02]";
2640
2725
  var cardHeaderClasses = "border-b border-[var(--tiger-border,#e5e7eb)] pb-3 mb-3";
2641
- var cardBodyClasses = "";
2642
2726
  var cardFooterClasses = "border-t border-[var(--tiger-border,#e5e7eb)] pt-3 mt-3";
2643
2727
  var cardCoverClasses = "w-full h-48 object-cover";
2644
2728
  var cardCoverWrapperClasses = "overflow-hidden";
@@ -2667,10 +2751,9 @@ var avatarDefaultBgColor = "bg-[var(--tiger-avatar-bg,#e5e7eb)]";
2667
2751
  var avatarDefaultTextColor = "text-[var(--tiger-avatar-text,var(--tiger-text-muted,#6b7280))]";
2668
2752
  var avatarImageClasses = "w-full h-full object-cover";
2669
2753
  function getInitials(name) {
2670
- const trimmed = typeof name === "string" ? name.trim() : "";
2754
+ const trimmed = name.trim();
2671
2755
  if (!trimmed) return "";
2672
2756
  const words = trimmed.split(/\s+/).filter(Boolean);
2673
- if (words.length === 0) return "";
2674
2757
  if (words.length === 1) {
2675
2758
  const firstWord = words[0];
2676
2759
  const hasNonASCII = /[^\x20-\x7E]/.test(firstWord);
@@ -2732,7 +2815,6 @@ var listHeaderFooterBaseClasses = "border-b border-[var(--tiger-border,#e5e7eb)]
2732
2815
  var listFooterClasses = "border-t border-b-0";
2733
2816
  var listEmptyStateClasses = "py-8 text-center text-[var(--tiger-text-muted,#6b7280)]";
2734
2817
  var listLoadingOverlayClasses = "absolute inset-0 bg-[var(--tiger-surface,#ffffff)]/75 flex items-center justify-center z-10";
2735
- var listPaginationContainerClasses = "flex items-center justify-between px-4 py-3 border-t border-[var(--tiger-border,#e5e7eb)]";
2736
2818
  var listItemMetaClasses = "flex items-center gap-3 flex-1";
2737
2819
  var listItemAvatarClasses = "flex-shrink-0";
2738
2820
  var listItemContentClasses = "flex-1 min-w-0";
@@ -2800,7 +2882,6 @@ var descriptionsSizeClasses = {
2800
2882
  };
2801
2883
  var descriptionsTableClasses = "w-full border-collapse";
2802
2884
  var descriptionsTableBorderedClasses = "border border-[var(--tiger-border,#e5e7eb)]";
2803
- var descriptionsRowClasses = "";
2804
2885
  var descriptionsCellSizeClasses = {
2805
2886
  sm: "px-3 py-2",
2806
2887
  md: "px-4 py-3",
@@ -2810,12 +2891,12 @@ var descriptionsLabelClasses = "font-medium bg-[var(--tiger-surface-muted,#f9faf
2810
2891
  var descriptionsLabelBorderedClasses = "border border-[var(--tiger-border,#e5e7eb)]";
2811
2892
  var descriptionsContentClasses = "text-[var(--tiger-text,#111827)]";
2812
2893
  var descriptionsContentBorderedClasses = "border border-[var(--tiger-border,#e5e7eb)]";
2813
- var descriptionsVerticalWrapperClasses = "space-y-0";
2894
+ var descriptionsVerticalWrapperClasses = "";
2814
2895
  var descriptionsVerticalItemClasses = "border-b border-[var(--tiger-border,#e5e7eb)] last:border-b-0";
2815
2896
  var descriptionsVerticalLabelClasses = "font-medium mb-1 text-[var(--tiger-text-muted,#374151)]";
2816
2897
  var descriptionsVerticalContentClasses = "text-[var(--tiger-text,#111827)]";
2817
- function getDescriptionsClasses(bordered, size) {
2818
- return [descriptionsBaseClasses, descriptionsSizeClasses[size]].join(" ");
2898
+ function getDescriptionsClasses(size) {
2899
+ return `${descriptionsBaseClasses} ${descriptionsSizeClasses[size]}`;
2819
2900
  }
2820
2901
  function getDescriptionsTableClasses(bordered) {
2821
2902
  const classes = [descriptionsTableClasses];
@@ -2844,12 +2925,8 @@ function getDescriptionsContentClasses(bordered, size, layout) {
2844
2925
  }
2845
2926
  return classes.join(" ");
2846
2927
  }
2847
- function getDescriptionsVerticalItemClasses(bordered, size) {
2848
- const classes = [descriptionsCellSizeClasses[size]];
2849
- if (!bordered) {
2850
- classes.push(descriptionsVerticalItemClasses);
2851
- }
2852
- return classes.join(" ");
2928
+ function getDescriptionsVerticalItemClasses(size) {
2929
+ return `${descriptionsCellSizeClasses[size]} ${descriptionsVerticalItemClasses}`;
2853
2930
  }
2854
2931
  function groupItemsIntoRows(items, column) {
2855
2932
  const rows = [];
@@ -2879,91 +2956,53 @@ function groupItemsIntoRows(items, column) {
2879
2956
  // src/utils/timeline-utils.ts
2880
2957
  var timelineContainerClasses = "relative";
2881
2958
  var timelineListClasses = "list-none m-0 p-0";
2882
- var timelineItemClasses = "relative pb-8 last:pb-0";
2959
+ var timelineItemClasses = "relative pb-8";
2883
2960
  var timelineTailClasses = "absolute w-0.5 bg-[var(--tiger-border,#e5e7eb)]";
2884
- var timelineHeadClasses = "absolute flex items-center justify-center";
2885
- var timelineDotBgClass = "bg-[var(--tiger-timeline-dot,#d1d5db)]";
2886
- var timelineDotClasses = `w-2.5 h-2.5 rounded-full border-2 border-[var(--tiger-surface,#ffffff)] ${timelineDotBgClass}`;
2887
- var timelineCustomDotClasses = "flex items-center justify-center";
2961
+ var timelineHeadClasses = "absolute z-10 flex items-center justify-center";
2888
2962
  var timelineContentClasses = "relative";
2963
+ var timelineCustomDotClasses = "flex items-center justify-center";
2889
2964
  var timelineLabelClasses = "text-sm text-[var(--tiger-text-muted,#6b7280)] mb-1";
2890
2965
  var timelineDescriptionClasses = "text-[var(--tiger-text,#374151)]";
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}`;
2969
+ var HEAD_TOP = "top-[18px]";
2970
+ var TAIL_TOP = "top-[23px]";
2971
+ var TAIL_BOTTOM = "-bottom-[23px]";
2891
2972
  function getTimelineContainerClasses(mode) {
2892
- const classes = [timelineContainerClasses];
2893
- if (mode === "left" || mode === "right") {
2894
- classes.push("pl-0");
2895
- } else if (mode === "alternate") {
2896
- classes.push("flex flex-col");
2897
- }
2898
- return classes.join(" ");
2973
+ if (mode === "alternate") return `${timelineContainerClasses} flex flex-col`;
2974
+ return timelineContainerClasses;
2899
2975
  }
2900
2976
  function getTimelineItemClasses(mode, position, isLast = false) {
2901
- const classes = [timelineItemClasses];
2902
- if (mode === "left") {
2903
- classes.push("pl-8");
2904
- } else if (mode === "right") {
2905
- classes.push("pr-8 text-right");
2906
- } else if (mode === "alternate") {
2907
- if (position === "left") {
2908
- classes.push("pr-8 text-right flex flex-row-reverse");
2909
- } else {
2910
- classes.push("pl-8 flex");
2911
- }
2977
+ const base = isLast ? "relative pb-0" : timelineItemClasses;
2978
+ if (mode === "right") return `${base} pr-8 text-right`;
2979
+ if (mode === "alternate") {
2980
+ return position === "left" ? `${base} pr-8 text-right flex flex-row-reverse` : `${base} pl-8 flex`;
2912
2981
  }
2913
- if (isLast) {
2914
- classes.push("pb-0");
2915
- }
2916
- return classes.join(" ");
2982
+ return `${base} pl-8`;
2917
2983
  }
2918
- function getTimelineTailClasses(mode, position, isLast = false) {
2919
- if (isLast) {
2920
- return "hidden";
2921
- }
2922
- const classes = [timelineTailClasses];
2923
- if (mode === "left") {
2924
- classes.push("left-0 -translate-x-1/2 top-[10px] bottom-0");
2925
- } else if (mode === "right") {
2926
- classes.push("right-0 translate-x-1/2 top-[10px] bottom-0");
2927
- } else if (mode === "alternate") {
2928
- classes.push("left-1/2 -translate-x-1/2 top-[10px] bottom-0");
2929
- }
2930
- return classes.join(" ");
2984
+ function getTimelineTailClasses(mode, isLast = false) {
2985
+ if (isLast) return "hidden";
2986
+ const span = `${timelineTailClasses} ${TAIL_TOP} ${TAIL_BOTTOM}`;
2987
+ if (mode === "right") return `${span} right-0 translate-x-1/2`;
2988
+ if (mode === "alternate") return `${span} left-1/2 -translate-x-1/2`;
2989
+ return `${span} left-0 -translate-x-1/2`;
2931
2990
  }
2932
- function getTimelineHeadClasses(mode, _position) {
2933
- const classes = [timelineHeadClasses];
2934
- if (mode === "left") {
2935
- classes.push("left-0 top-0 -translate-x-1/2");
2936
- } else if (mode === "right") {
2937
- classes.push("right-0 top-0 translate-x-1/2");
2938
- } else if (mode === "alternate") {
2939
- classes.push("left-1/2 -translate-x-1/2 top-0");
2940
- }
2941
- return classes.join(" ");
2991
+ function getTimelineHeadClasses(mode) {
2992
+ if (mode === "right") return `${timelineHeadClasses} right-0 ${HEAD_TOP} translate-x-1/2`;
2993
+ if (mode === "alternate") return `${timelineHeadClasses} left-1/2 -translate-x-1/2 ${HEAD_TOP}`;
2994
+ return `${timelineHeadClasses} left-0 ${HEAD_TOP} -translate-x-1/2`;
2942
2995
  }
2943
2996
  function getTimelineDotClasses(color, isCustom = false) {
2944
- if (isCustom) {
2945
- return timelineCustomDotClasses;
2946
- }
2947
- const classes = [timelineDotClasses];
2948
- if (color) {
2949
- return classes.join(" ").replace(timelineDotBgClass, "");
2950
- }
2951
- return classes.join(" ");
2997
+ if (isCustom) return timelineCustomDotClasses;
2998
+ return color ? timelineDotBase : timelineDotClasses;
2952
2999
  }
2953
3000
  function getTimelineContentClasses(mode, position) {
2954
- const classes = [timelineContentClasses];
2955
- if (mode === "left") {
2956
- classes.push("pl-2");
2957
- } else if (mode === "right") {
2958
- classes.push("pr-2");
2959
- } else if (mode === "alternate") {
2960
- if (position === "left") {
2961
- classes.push("pr-8");
2962
- } else {
2963
- classes.push("pl-8");
2964
- }
3001
+ if (mode === "right") return `${timelineContentClasses} pr-2`;
3002
+ if (mode === "alternate") {
3003
+ return position === "left" ? `${timelineContentClasses} pr-8` : `${timelineContentClasses} pl-8`;
2965
3004
  }
2966
- return classes.join(" ");
3005
+ return `${timelineContentClasses} pl-2`;
2967
3006
  }
2968
3007
  function getPendingDotClasses() {
2969
3008
  return "w-2.5 h-2.5 rounded-full border-2 border-white bg-[var(--tiger-primary,#2563eb)] animate-pulse";
@@ -2990,7 +3029,7 @@ var treeBaseClasses = "w-full bg-white rounded-lg";
2990
3029
  var treeNodeWrapperClasses = "select-none";
2991
3030
  var treeNodeContentClasses = "flex items-center px-2 py-1.5 cursor-pointer rounded transition-colors duration-200";
2992
3031
  var treeNodeHoverClasses = "hover:bg-gray-50";
2993
- 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)]";
2994
3033
  var treeNodeDisabledClasses = "opacity-50 cursor-not-allowed";
2995
3034
  var treeNodeIndentClasses = "inline-block w-6";
2996
3035
  var treeNodeExpandIconClasses = "inline-flex items-center justify-center w-6 h-6 transition-transform duration-200";
@@ -3003,40 +3042,16 @@ var treeLoadingClasses = "inline-block ml-2 animate-spin h-4 w-4";
3003
3042
  var treeEmptyStateClasses = "py-8 text-center text-gray-500";
3004
3043
  var treeLineClasses = "border-l border-gray-300";
3005
3044
  function getTreeNodeClasses(selected, disabled, blockNode = false) {
3006
- const classes = [treeNodeContentClasses];
3007
- if (!disabled) {
3008
- classes.push(treeNodeHoverClasses);
3009
- }
3010
- if (selected) {
3011
- classes.push(treeNodeSelectedClasses);
3012
- }
3013
- if (disabled) {
3014
- classes.push(treeNodeDisabledClasses);
3015
- }
3016
- if (blockNode) {
3017
- classes.push("w-full");
3018
- }
3019
- return classes.join(" ");
3045
+ return classNames(
3046
+ treeNodeContentClasses,
3047
+ !disabled && treeNodeHoverClasses,
3048
+ selected && treeNodeSelectedClasses,
3049
+ disabled && treeNodeDisabledClasses,
3050
+ blockNode && "w-full"
3051
+ );
3020
3052
  }
3021
3053
  function getTreeNodeExpandIconClasses(expanded) {
3022
- const classes = [treeNodeExpandIconClasses];
3023
- if (expanded) {
3024
- classes.push(treeNodeExpandIconExpandedClasses);
3025
- }
3026
- return classes.join(" ");
3027
- }
3028
- function flattenTree(treeData, expandedKeys = /* @__PURE__ */ new Set()) {
3029
- const result = [];
3030
- function traverse(nodes, level = 0, parentKey) {
3031
- nodes.forEach((node) => {
3032
- result.push({ ...node, level, parentKey });
3033
- if (node.children && node.children.length > 0 && expandedKeys.has(node.key)) {
3034
- traverse(node.children, level + 1, node.key);
3035
- }
3036
- });
3037
- }
3038
- traverse(treeData);
3039
- return result;
3054
+ return classNames(treeNodeExpandIconClasses, expanded && treeNodeExpandIconExpandedClasses);
3040
3055
  }
3041
3056
  function getAllKeys(treeData) {
3042
3057
  const keys = [];
@@ -3258,18 +3273,12 @@ function getAutoExpandKeys(treeData, matchedKeys) {
3258
3273
  });
3259
3274
  return expandKeys;
3260
3275
  }
3261
- var defaultExpandIcon = (expanded) => `
3262
- <svg class="${getTreeNodeExpandIconClasses(
3263
- expanded
3264
- )}" width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
3265
- <path d="M6 4l4 4-4 4V4z"/>
3266
- </svg>
3267
- `;
3268
- var defaultIndeterminateIcon = `
3269
- <svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
3270
- <rect x="4" y="7" width="8" height="2" rx="1"/>
3271
- </svg>
3272
- `;
3276
+ function checkedSetsFromState(state) {
3277
+ return {
3278
+ checkedSet: new Set(state.checked),
3279
+ halfCheckedSet: new Set(state.halfChecked)
3280
+ };
3281
+ }
3273
3282
 
3274
3283
  // src/utils/skeleton-utils.ts
3275
3284
  var skeletonBaseClasses = "bg-[var(--tiger-skeleton-bg,#e5e7eb)] rounded";
@@ -3333,7 +3342,7 @@ function getParagraphRowWidth(rowIndex, totalRows) {
3333
3342
  // src/utils/progress-utils.ts
3334
3343
  var progressLineBaseClasses = "relative overflow-hidden rounded-full";
3335
3344
  var progressLineInnerClasses = "h-full rounded-full transition-all duration-300 ease-in-out flex items-center justify-end";
3336
- var progressTextBaseClasses = "font-medium ml-2 text-[color:var(--tiger-text,#374151)]";
3345
+ var progressTextBaseClasses = "font-medium ml-2";
3337
3346
  var progressCircleBaseClasses = "relative inline-flex items-center justify-center";
3338
3347
  var progressLineSizeClasses = {
3339
3348
  sm: "h-2",
@@ -3373,7 +3382,7 @@ function formatProgressText(percentage, customText, formatFn) {
3373
3382
  function clampPercentage(percentage) {
3374
3383
  return Math.max(0, Math.min(100, percentage));
3375
3384
  }
3376
- function calculateCirclePath(radius, strokeWidth, percentage) {
3385
+ function calculateCirclePath(radius, percentage) {
3377
3386
  const circumference = 2 * Math.PI * radius;
3378
3387
  const offset2 = circumference - percentage / 100 * circumference;
3379
3388
  return {
@@ -3411,7 +3420,6 @@ var collapseIconPositionClasses = {
3411
3420
  end: "ml-auto"
3412
3421
  };
3413
3422
  var collapseHeaderTextClasses = "flex-1 font-medium text-gray-900";
3414
- var collapseExtraClasses = "ml-auto";
3415
3423
  function getCollapseContainerClasses(bordered, ghost, className) {
3416
3424
  const classes = [collapseBaseClasses];
3417
3425
  if (ghost) {
@@ -3422,7 +3430,7 @@ function getCollapseContainerClasses(bordered, ghost, className) {
3422
3430
  if (className) {
3423
3431
  classes.push(className);
3424
3432
  }
3425
- return classes.filter(Boolean).join(" ");
3433
+ return classes.join(" ");
3426
3434
  }
3427
3435
  function getCollapsePanelClasses(ghost, className) {
3428
3436
  const classes = [];
@@ -3432,7 +3440,7 @@ function getCollapsePanelClasses(ghost, className) {
3432
3440
  if (className) {
3433
3441
  classes.push(className);
3434
3442
  }
3435
- return classes.filter(Boolean).join(" ");
3443
+ return classes.join(" ");
3436
3444
  }
3437
3445
  function getCollapsePanelHeaderClasses(active, disabled, className) {
3438
3446
  const classes = [collapsePanelHeaderBaseClasses];
@@ -3444,7 +3452,7 @@ function getCollapsePanelHeaderClasses(active, disabled, className) {
3444
3452
  if (className) {
3445
3453
  classes.push(className);
3446
3454
  }
3447
- return classes.filter(Boolean).join(" ");
3455
+ return classes.join(" ");
3448
3456
  }
3449
3457
  function getCollapseIconClasses(expanded, position, className) {
3450
3458
  const classes = [collapseIconBaseClasses, collapseIconPositionClasses[position]];
@@ -3454,7 +3462,7 @@ function getCollapseIconClasses(expanded, position, className) {
3454
3462
  if (className) {
3455
3463
  classes.push(className);
3456
3464
  }
3457
- return classes.filter(Boolean).join(" ");
3465
+ return classes.join(" ");
3458
3466
  }
3459
3467
  function normalizeActiveKeys(activeKey) {
3460
3468
  if (activeKey === void 0) {
@@ -3477,11 +3485,6 @@ function togglePanelKey(panelKey, activeKeys, accordion) {
3477
3485
  }
3478
3486
  }
3479
3487
  }
3480
- var collapseRightArrowIcon = `
3481
- <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
3482
- <path d="M6 12L10 8L6 4" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3483
- </svg>
3484
- `.trim();
3485
3488
 
3486
3489
  // src/utils/menu-utils.ts
3487
3490
  var menuBaseClasses = "flex border bg-[var(--tiger-surface,#ffffff)] text-[var(--tiger-text,#111827)] border-[var(--tiger-border,#e5e7eb)]";
@@ -3577,15 +3580,71 @@ function replaceKeys(key, keys) {
3577
3580
  }
3578
3581
  return [key];
3579
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
+ }
3580
3633
 
3581
3634
  // src/utils/tabs-utils.ts
3582
3635
  var tabsBaseClasses = "w-full";
3583
- var tabNavBaseClasses = "flex transition-colors duration-200";
3636
+ var tabNavBaseClasses = "flex";
3584
3637
  var tabNavPositionClasses = {
3585
- top: "flex-row border-b border-gray-200",
3586
- bottom: "flex-row border-t border-gray-200",
3587
- left: "flex-col border-r border-gray-200",
3588
- 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"
3589
3648
  };
3590
3649
  var tabNavListBaseClasses = "flex gap-1";
3591
3650
  var tabNavListPositionClasses = {
@@ -3595,7 +3654,7 @@ var tabNavListPositionClasses = {
3595
3654
  right: "flex-col"
3596
3655
  };
3597
3656
  var tabNavListCenteredClasses = "justify-center";
3598
- 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";
3599
3658
  var tabItemSizeClasses = {
3600
3659
  small: "text-sm px-3 py-1.5",
3601
3660
  medium: "text-base px-4 py-2",
@@ -3614,63 +3673,39 @@ var tabPaneBaseClasses = "w-full";
3614
3673
  var tabPaneHiddenClasses = "hidden";
3615
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";
3616
3675
  function getTabsContainerClasses(position) {
3617
- const classes = [tabsBaseClasses];
3618
- if (position === "left" || position === "right") {
3619
- classes.push("flex");
3620
- if (position === "right") {
3621
- classes.push("flex-row-reverse");
3622
- }
3623
- }
3624
- 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;
3625
3679
  }
3626
3680
  function getTabNavClasses(position, type) {
3627
- const classes = [tabNavBaseClasses, tabNavPositionClasses[position]];
3628
- if (type === "card" || type === "editable-card") {
3629
- classes.push("border-0");
3630
- }
3631
- return classes.filter(Boolean).join(" ");
3681
+ const base = `${tabNavBaseClasses} ${tabNavPositionClasses[position]}`;
3682
+ return type === "line" ? `${base} ${tabNavLineBorderClasses[position]}` : base;
3632
3683
  }
3633
3684
  function getTabNavListClasses(position, centered) {
3634
- const classes = [tabNavListBaseClasses, tabNavListPositionClasses[position]];
3635
- if (centered && (position === "top" || position === "bottom")) {
3636
- classes.push(tabNavListCenteredClasses);
3637
- }
3638
- return classes.filter(Boolean).join(" ");
3685
+ const base = `${tabNavListBaseClasses} ${tabNavListPositionClasses[position]}`;
3686
+ return centered && (position === "top" || position === "bottom") ? `${base} ${tabNavListCenteredClasses}` : base;
3639
3687
  }
3640
3688
  function getTabItemClasses(active, disabled, type, size) {
3641
- const classes = [tabItemBaseClasses, tabItemSizeClasses[size]];
3642
- if (disabled) {
3643
- classes.push(tabItemDisabledClasses);
3644
- } else {
3645
- switch (type) {
3646
- case "line":
3647
- classes.push(tabItemLineClasses);
3648
- if (active) {
3649
- classes.push(tabItemLineActiveClasses);
3650
- }
3651
- break;
3652
- case "card":
3653
- classes.push(tabItemCardClasses);
3654
- if (active) {
3655
- classes.push(tabItemCardActiveClasses);
3656
- }
3657
- break;
3658
- case "editable-card":
3659
- classes.push(tabItemEditableCardClasses);
3660
- if (active) {
3661
- classes.push(tabItemEditableCardActiveClasses);
3662
- }
3663
- break;
3664
- }
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;
3665
3704
  }
3666
- return classes.filter(Boolean).join(" ");
3705
+ return cls;
3667
3706
  }
3668
3707
  function getTabPaneClasses(active) {
3669
- const classes = [tabPaneBaseClasses];
3670
- if (!active) {
3671
- classes.push(tabPaneHiddenClasses);
3672
- }
3673
- return classes.filter(Boolean).join(" ");
3708
+ return active ? tabPaneBaseClasses : `${tabPaneBaseClasses} ${tabPaneHiddenClasses}`;
3674
3709
  }
3675
3710
  function isKeyActive(key, activeKey) {
3676
3711
  return activeKey !== void 0 && key === activeKey;
@@ -3700,16 +3735,14 @@ var breadcrumbLinkClasses = classNames(
3700
3735
  );
3701
3736
  var breadcrumbCurrentClasses = classNames("text-gray-900 font-medium", "cursor-default");
3702
3737
  var breadcrumbSeparatorBaseClasses = "text-gray-400 select-none";
3703
- function getBreadcrumbItemClasses(current, className) {
3738
+ function getBreadcrumbItemClasses(className) {
3704
3739
  return classNames(breadcrumbItemBaseClasses, className);
3705
3740
  }
3706
3741
  function getBreadcrumbLinkClasses(current) {
3707
3742
  return current ? breadcrumbCurrentClasses : breadcrumbLinkClasses;
3708
3743
  }
3709
3744
  function getSeparatorContent(separator) {
3710
- if (!separator || separator === "/") {
3711
- return "/";
3712
- }
3745
+ if (!separator) return "/";
3713
3746
  switch (separator) {
3714
3747
  case "slash":
3715
3748
  return "/";
@@ -3726,61 +3759,53 @@ function getBreadcrumbSeparatorClasses(className) {
3726
3759
  }
3727
3760
 
3728
3761
  // src/utils/steps-utils.ts
3729
- var stepFinishIconSvgClasses = "w-5 h-5";
3730
- var stepFinishIconViewBox = "0 0 24 24";
3731
- var stepFinishIconPathD = "M5 13l4 4L19 7";
3732
- var stepFinishIconPathStrokeLinecap = "round";
3733
- var stepFinishIconPathStrokeLinejoin = "round";
3734
- var stepFinishIconPathStrokeWidth = 2;
3762
+ var stepFinishChar = "\u2713";
3735
3763
  function getStepsContainerClasses(direction) {
3736
- 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";
3737
3765
  if (direction === "vertical") {
3738
- return `${baseClasses} flex flex-col`;
3766
+ return `${baseClasses2} flex flex-col`;
3739
3767
  }
3740
- return `${baseClasses} flex flex-row items-start`;
3768
+ return `${baseClasses2} flex flex-row items-start`;
3741
3769
  }
3742
- function getStepItemClasses(direction, isLast, simple) {
3743
- const baseClasses = "tiger-step-item relative";
3770
+ function getStepItemClasses(direction, isLast) {
3771
+ const baseClasses2 = "tiger-step-item relative";
3744
3772
  if (direction === "vertical") {
3745
- return `${baseClasses} flex flex-row ${!isLast ? "pb-6" : ""}`;
3773
+ return `${baseClasses2} flex flex-row ${!isLast ? "pb-6" : ""}`;
3746
3774
  }
3747
- return `${baseClasses} flex flex-col flex-1 ${simple ? "items-center" : ""}`;
3775
+ return `${baseClasses2} flex flex-col flex-1 items-center`;
3748
3776
  }
3749
3777
  function getStepIconClasses(status, size, simple, isCustomIcon) {
3750
- 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";
3751
3779
  const sizeClasses = simple ? "w-6 h-6 text-xs" : size === "small" ? "w-8 h-8 text-sm" : "w-10 h-10 text-base";
3752
3780
  const iconClasses = isCustomIcon ? "" : "font-medium";
3781
+ const activeClasses = "bg-[var(--tiger-primary,#2563eb)] border-[var(--tiger-primary,#2563eb)] text-white";
3753
3782
  const statusClasses = {
3754
3783
  wait: "bg-[var(--tiger-surface-muted,#f3f4f6)] border-[var(--tiger-border,#e5e7eb)] text-[var(--tiger-text-muted,#6b7280)]",
3755
- process: "bg-[var(--tiger-primary,#2563eb)] border-[var(--tiger-primary,#2563eb)] text-white",
3756
- finish: "bg-[var(--tiger-primary,#2563eb)] border-[var(--tiger-primary,#2563eb)] text-white",
3784
+ process: activeClasses,
3785
+ finish: activeClasses,
3757
3786
  error: "bg-[var(--tiger-error-bg,#fef2f2)] border-[var(--tiger-error,#ef4444)] text-[var(--tiger-error,#ef4444)]"
3758
3787
  };
3759
- return `${baseClasses} ${sizeClasses} ${iconClasses} ${statusClasses[status]}`;
3788
+ return `${baseClasses2} ${sizeClasses} ${iconClasses} ${statusClasses[status]}`;
3760
3789
  }
3761
- function getStepTailClasses(direction, status, isLast) {
3762
- if (isLast) {
3763
- return "hidden";
3764
- }
3765
- 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)]";
3766
3793
  if (direction === "vertical") {
3767
- const positionClasses2 = "absolute left-4 top-10 w-0.5 h-full";
3768
- const colorClasses2 = status === "finish" ? "bg-[var(--tiger-primary,#2563eb)]" : "bg-[var(--tiger-border,#e5e7eb)]";
3769
- 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}`;
3770
3796
  }
3771
- const positionClasses = "flex-1 h-0.5 mx-2 mt-5";
3772
- const colorClasses = status === "finish" ? "bg-[var(--tiger-primary,#2563eb)]" : "bg-[var(--tiger-border,#e5e7eb)]";
3773
- 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}`;
3774
3799
  }
3775
- function getStepContentClasses(direction, simple) {
3776
- const baseClasses = "tiger-step-content";
3800
+ function getStepContentClasses(direction) {
3801
+ const baseClasses2 = "tiger-step-content";
3777
3802
  if (direction === "vertical") {
3778
- return `${baseClasses} ml-4 flex-1`;
3803
+ return `${baseClasses2} ml-4 flex-1`;
3779
3804
  }
3780
- return `${baseClasses} mt-2 ${simple ? "text-center" : ""}`;
3805
+ return `${baseClasses2} mt-2 text-center`;
3781
3806
  }
3782
3807
  function getStepTitleClasses(status, size, clickable) {
3783
- 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";
3784
3809
  const sizeClasses = size === "small" ? "text-sm" : "text-base";
3785
3810
  const statusClasses = {
3786
3811
  wait: "text-[var(--tiger-text-muted,#6b7280)]",
@@ -3788,19 +3813,14 @@ function getStepTitleClasses(status, size, clickable) {
3788
3813
  finish: "text-[var(--tiger-text,#111827)]",
3789
3814
  error: "text-[var(--tiger-error,#ef4444)]"
3790
3815
  };
3791
- 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)]" : "";
3792
- 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}`;
3793
3818
  }
3794
3819
  function getStepDescriptionClasses(status, size) {
3795
- const baseClasses = "tiger-step-description mt-1 transition-colors duration-200";
3820
+ const baseClasses2 = "tiger-step-description mt-1";
3796
3821
  const sizeClasses = size === "small" ? "text-xs" : "text-sm";
3797
- const statusClasses = {
3798
- wait: "text-[var(--tiger-text-muted,#6b7280)]",
3799
- process: "text-[var(--tiger-text-muted,#6b7280)]",
3800
- finish: "text-[var(--tiger-text-muted,#6b7280)]",
3801
- error: "text-[var(--tiger-error,#ef4444)]"
3802
- };
3803
- 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}`;
3804
3824
  }
3805
3825
  function calculateStepStatus(index, currentIndex, currentStatus, customStatus) {
3806
3826
  if (customStatus) {
@@ -3935,13 +3955,16 @@ function getPageSizeSelectorClasses(size = "medium") {
3935
3955
  sizeClasses[size]
3936
3956
  );
3937
3957
  }
3938
- function getTotalTextClasses(size = "medium") {
3958
+ function getSizeTextClasses(size = "medium") {
3939
3959
  const sizeClasses = {
3940
3960
  small: "text-sm",
3941
3961
  medium: "text-base",
3942
3962
  large: "text-lg"
3943
3963
  };
3944
- 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));
3945
3968
  }
3946
3969
  function getSimplePaginationContainerClasses() {
3947
3970
  return classNames(
@@ -3988,48 +4011,45 @@ function getDropdownContainerClasses() {
3988
4011
  function getDropdownTriggerClasses(disabled) {
3989
4012
  return classNames(
3990
4013
  "tiger-dropdown-trigger",
3991
- "cursor-pointer",
3992
- 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"
3993
4017
  );
3994
4018
  }
3995
- function getDropdownMenuWrapperClasses(visible, placement) {
3996
- const positionClasses = getPlacementClasses(placement);
4019
+ function getDropdownChevronClasses(visible) {
3997
4020
  return classNames(
3998
- "tiger-dropdown-menu-wrapper",
3999
- "absolute",
4000
- "z-50",
4001
- positionClasses,
4002
- 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"
4003
4026
  );
4004
4027
  }
4028
+ var DROPDOWN_CHEVRON_PATH = "M6 9l6 6 6-6";
4005
4029
  function getDropdownMenuClasses() {
4006
4030
  return classNames(
4007
4031
  "tiger-dropdown-menu",
4008
4032
  "min-w-[160px]",
4009
- "py-1",
4010
- "rounded-md",
4011
- "shadow-lg",
4033
+ "py-1.5 px-1",
4034
+ "rounded-lg",
4035
+ "bg-[var(--tiger-surface,#ffffff)]",
4012
4036
  "border border-[var(--tiger-border,#e5e7eb)]",
4013
- "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]"
4014
4039
  );
4015
4040
  }
4016
4041
  function getDropdownItemClasses(disabled, divided) {
4017
4042
  return classNames(
4018
4043
  "tiger-dropdown-item",
4019
- "flex",
4020
- "items-center",
4021
- "gap-2",
4022
- "px-4",
4023
- "py-2",
4024
- "text-sm",
4025
- "text-[var(--tiger-text,#374151)]",
4026
- "transition-colors",
4027
- "duration-150",
4028
- "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",
4029
4049
  "text-left",
4030
4050
  "focus:outline-none",
4031
- "focus-visible:ring-2 focus-visible:ring-[var(--tiger-primary,#2563eb)] focus-visible:ring-opacity-50",
4032
- 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",
4033
4053
  disabled ? "cursor-not-allowed opacity-50" : classNames(
4034
4054
  "cursor-pointer",
4035
4055
  "hover:bg-[var(--tiger-surface-muted,#f3f4f6)]",
@@ -4037,23 +4057,36 @@ function getDropdownItemClasses(disabled, divided) {
4037
4057
  )
4038
4058
  );
4039
4059
  }
4040
- function getPlacementClasses(placement) {
4041
- const placementMap = {
4042
- "bottom-start": "top-full left-0 mt-2",
4043
- bottom: "top-full left-1/2 -translate-x-1/2 mt-2",
4044
- "bottom-end": "top-full right-0 mt-2",
4045
- "top-start": "bottom-full left-0 mb-2",
4046
- top: "bottom-full left-1/2 -translate-x-1/2 mb-2",
4047
- "top-end": "bottom-full right-0 mb-2",
4048
- "left-start": "right-full top-0 mr-2",
4049
- left: "right-full top-1/2 -translate-y-1/2 mr-2",
4050
- "left-end": "right-full bottom-0 mr-2",
4051
- "right-start": "left-full top-0 ml-2",
4052
- right: "left-full top-1/2 -translate-y-1/2 ml-2",
4053
- "right-end": "left-full bottom-0 ml-2"
4054
- };
4055
- 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;
4056
4088
  }
4089
+ var DROPDOWN_ENTER_CLASS = "tiger-dropdown-enter";
4057
4090
 
4058
4091
  // src/utils/drawer-utils.ts
4059
4092
  function getDrawerMaskClasses(visible) {
@@ -4062,12 +4095,11 @@ function getDrawerMaskClasses(visible) {
4062
4095
  visible ? "opacity-100" : "opacity-0 pointer-events-none"
4063
4096
  );
4064
4097
  }
4065
- function getDrawerContainerClasses(zIndex) {
4066
- void zIndex;
4098
+ function getDrawerContainerClasses() {
4067
4099
  return "fixed inset-0 overflow-hidden";
4068
4100
  }
4069
4101
  function getDrawerPanelClasses(placement, visible, size) {
4070
- 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";
4071
4103
  const sizeMap = {
4072
4104
  sm: { width: "w-64", height: "h-48" },
4073
4105
  md: { width: "w-96", height: "h-64" },
@@ -4097,7 +4129,7 @@ function getDrawerPanelClasses(placement, visible, size) {
4097
4129
  visible ? "translate-y-0" : "translate-y-full"
4098
4130
  )
4099
4131
  };
4100
- return classNames(baseClasses, placementClasses[placement]);
4132
+ return classNames(baseClasses2, placementClasses[placement]);
4101
4133
  }
4102
4134
  function getDrawerHeaderClasses() {
4103
4135
  return "flex items-center justify-between px-6 py-4 border-b border-[var(--tiger-border,#e5e7eb)]";
@@ -4172,19 +4204,15 @@ var alertDescriptionSizeClasses = {
4172
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";
4173
4205
  var alertIconContainerClasses = "flex-shrink-0";
4174
4206
  var alertContentClasses = "flex-1 ml-3";
4175
- var alertSuccessIconPath = statusSuccessIconPath;
4176
- var alertWarningIconPath = statusWarningIconPath;
4177
- var alertErrorIconPath = statusErrorIconPath;
4178
- var alertInfoIconPath = statusInfoIconPath;
4179
4207
  var alertCloseIconPath = closeIconPathD;
4208
+ var alertIconPaths = {
4209
+ success: statusSuccessIconPath,
4210
+ warning: statusWarningIconPath,
4211
+ error: statusErrorIconPath,
4212
+ info: statusInfoIconPath
4213
+ };
4180
4214
  function getAlertIconPath(type) {
4181
- const iconPaths = {
4182
- success: alertSuccessIconPath,
4183
- warning: alertWarningIconPath,
4184
- error: alertErrorIconPath,
4185
- info: alertInfoIconPath
4186
- };
4187
- return iconPaths[type];
4215
+ return alertIconPaths[type];
4188
4216
  }
4189
4217
 
4190
4218
  // src/utils/message-utils.ts
@@ -4198,10 +4226,6 @@ var messagePositionClasses = {
4198
4226
  "bottom-right": "bottom-6 right-6"
4199
4227
  };
4200
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";
4201
- var messageEnterClasses = "opacity-0 -translate-y-2";
4202
- var messageEnterActiveClasses = "opacity-100 translate-y-0";
4203
- var messageLeaveClasses = "opacity-100 translate-y-0";
4204
- var messageLeaveActiveClasses = "opacity-0 -translate-y-2";
4205
4229
  var defaultMessageThemeColors = {
4206
4230
  info: {
4207
4231
  bg: "bg-[var(--tiger-message-info-bg,#eff6ff)]",
@@ -4235,7 +4259,7 @@ var defaultMessageThemeColors = {
4235
4259
  }
4236
4260
  };
4237
4261
  function getMessageTypeClasses(type, themeColors = defaultMessageThemeColors) {
4238
- return themeColors[type] || themeColors.info;
4262
+ return themeColors[type];
4239
4263
  }
4240
4264
  var messageIconPaths = {
4241
4265
  success: statusSuccessIconPath,
@@ -4245,7 +4269,7 @@ var messageIconPaths = {
4245
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"
4246
4270
  };
4247
4271
  function getMessageIconPath(type) {
4248
- return messageIconPaths[type] || messageIconPaths.info;
4272
+ return messageIconPaths[type];
4249
4273
  }
4250
4274
  var messageCloseIconPath = closeIconPathD;
4251
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)]";
@@ -4344,25 +4368,23 @@ function getLoadingOverlaySpinnerClasses(customClassName) {
4344
4368
  function getLoadingClasses(variant, size, color, customColor) {
4345
4369
  const sizeClass = loadingSizeClasses[size];
4346
4370
  const colorClass = customColor ? "" : loadingColorClasses[color];
4347
- const baseClasses = classNames(sizeClass, colorClass);
4371
+ const baseClasses2 = classNames(sizeClass, colorClass);
4348
4372
  switch (variant) {
4349
- case "spinner":
4350
- return classNames(baseClasses, loadingSpinnerBaseClasses);
4351
4373
  case "dots":
4352
- return baseClasses;
4353
4374
  case "bars":
4354
- return baseClasses;
4355
- case "ring":
4356
- return classNames(baseClasses, loadingSpinnerBaseClasses);
4375
+ return baseClasses2;
4357
4376
  case "pulse":
4358
- return classNames(baseClasses, "animate-pulse");
4377
+ return classNames(baseClasses2, "animate-pulse");
4378
+ case "spinner":
4379
+ case "ring":
4359
4380
  default:
4360
- return classNames(baseClasses, loadingSpinnerBaseClasses);
4381
+ return classNames(baseClasses2, loadingSpinnerBaseClasses);
4361
4382
  }
4362
4383
  }
4363
4384
  function getSpinnerSVG(variant) {
4364
4385
  switch (variant) {
4365
4386
  case "spinner":
4387
+ default:
4366
4388
  return {
4367
4389
  viewBox: "0 0 24 24",
4368
4390
  elements: [
@@ -4435,24 +4457,6 @@ function getSpinnerSVG(variant) {
4435
4457
  }
4436
4458
  ]
4437
4459
  };
4438
- default:
4439
- return {
4440
- viewBox: "0 0 24 24",
4441
- elements: [
4442
- {
4443
- type: "circle",
4444
- attrs: {
4445
- className: "opacity-25",
4446
- cx: "12",
4447
- cy: "12",
4448
- r: "10",
4449
- stroke: "currentColor",
4450
- strokeWidth: "4",
4451
- fill: "none"
4452
- }
4453
- }
4454
- ]
4455
- };
4456
4460
  }
4457
4461
  }
4458
4462
  var dotsVariantConfig = {
@@ -4557,6 +4561,25 @@ function injectLoadingAnimationStyles() {
4557
4561
  }
4558
4562
  }
4559
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
+
4560
4583
  // src/utils/popconfirm-utils.ts
4561
4584
  function getPopconfirmContainerClasses() {
4562
4585
  return classNames("tiger-popconfirm", "relative", "inline-block", "w-fit", "justify-self-start");
@@ -4727,14 +4750,9 @@ function getPopoverTriggerClasses(disabled) {
4727
4750
  }
4728
4751
  function getPopoverContentClasses(width) {
4729
4752
  let widthClass = "min-w-[200px]";
4730
- if (width) {
4731
- if (typeof width === "number") {
4732
- widthClass = `w-[${width}px]`;
4733
- } else if (width.match(/^\d+$/)) {
4734
- widthClass = `w-[${width}px]`;
4735
- } else {
4736
- widthClass = width;
4737
- }
4753
+ if (width != null && width !== "") {
4754
+ const w = String(width);
4755
+ widthClass = /^\d+$/.test(w) ? `w-[${w}px]` : w;
4738
4756
  }
4739
4757
  return classNames(
4740
4758
  "tiger-popover-content",
@@ -4748,20 +4766,26 @@ function getPopoverContentClasses(width) {
4748
4766
  "border-[var(--tiger-border,#e5e7eb)]"
4749
4767
  );
4750
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
+ );
4751
4784
  function getPopoverTitleClasses() {
4752
- return classNames(
4753
- "tiger-popover-title",
4754
- "text-sm",
4755
- "font-semibold",
4756
- "text-[var(--tiger-text,#111827)]",
4757
- "mb-2",
4758
- "border-b",
4759
- "border-[var(--tiger-border,#e5e7eb)]",
4760
- "pb-2"
4761
- );
4785
+ return POPOVER_TITLE_CLASSES;
4762
4786
  }
4763
4787
  function getPopoverContentTextClasses() {
4764
- return classNames("tiger-popover-text", "text-sm", "text-[var(--tiger-text-muted,#374151)]");
4788
+ return POPOVER_TEXT_CLASSES;
4765
4789
  }
4766
4790
 
4767
4791
  // src/utils/tooltip-utils.ts
@@ -4808,6 +4832,9 @@ var iconSizeClasses = {
4808
4832
  lg: "w-6 h-6",
4809
4833
  xl: "w-8 h-8"
4810
4834
  };
4835
+ var iconSvgDefaultStrokeWidth = 2;
4836
+ var iconSvgDefaultStrokeLinecap = "round";
4837
+ var iconSvgDefaultStrokeLinejoin = "round";
4811
4838
 
4812
4839
  // src/utils/code-utils.ts
4813
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";
@@ -4815,68 +4842,363 @@ var codeBlockPreClasses = "m-0 overflow-auto p-4 text-sm leading-relaxed font-mo
4815
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";
4816
4843
  var codeBlockCopyButtonCopiedClasses = "border-[var(--tiger-primary,#2563eb)] text-[var(--tiger-primary,#2563eb)]";
4817
4844
 
4818
- // src/utils/carousel-utils.ts
4819
- var carouselBaseClasses = "relative overflow-hidden w-full";
4820
- var carouselTrackScrollClasses = "flex transition-transform ease-in-out";
4821
- var carouselTrackFadeClasses = "relative";
4822
- var carouselSlideBaseClasses = "flex-shrink-0 w-full";
4823
- var carouselSlideFadeClasses = "absolute inset-0 transition-opacity ease-in-out";
4824
- var carouselDotsBaseClasses = "absolute flex gap-2 z-10";
4825
- var carouselDotsPositionClasses = {
4826
- top: "top-4 left-1/2 -translate-x-1/2 flex-row",
4827
- bottom: "bottom-4 left-1/2 -translate-x-1/2 flex-row",
4828
- left: "left-4 top-1/2 -translate-y-1/2 flex-col",
4829
- right: "right-4 top-1/2 -translate-y-1/2 flex-col"
4830
- };
4831
- 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";
4832
- var carouselDotActiveClasses = "bg-white scale-110";
4833
- 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";
4834
- var carouselPrevArrowClasses = "left-4";
4835
- var carouselNextArrowClasses = "right-4";
4836
- var carouselArrowDisabledClasses = "opacity-50 cursor-not-allowed pointer-events-none";
4837
- function getCarouselContainerClasses(className) {
4838
- const classes = [carouselBaseClasses];
4839
- if (className) {
4840
- classes.push(className);
4841
- }
4842
- return classes.filter(Boolean).join(" ");
4843
- }
4844
- function getCarouselDotsClasses(position) {
4845
- return `${carouselDotsBaseClasses} ${carouselDotsPositionClasses[position]}`;
4846
- }
4847
- function getCarouselDotClasses(isActive) {
4848
- const classes = [carouselDotClasses];
4849
- if (isActive) {
4850
- 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)]"
4851
4882
  }
4852
- 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(" ");
4853
4896
  }
4854
- function getCarouselArrowClasses(type, disabled) {
4855
- const classes = [carouselArrowBaseClasses];
4856
- classes.push(type === "prev" ? carouselPrevArrowClasses : carouselNextArrowClasses);
4857
- if (disabled) {
4858
- 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"
4859
4926
  }
4860
- 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}`;
4861
4932
  }
4862
- function getNextSlideIndex(currentIndex, totalSlides, infinite) {
4863
- if (totalSlides <= 0) return 0;
4864
- const nextIndex = currentIndex + 1;
4865
- if (nextIndex >= totalSlides) {
4866
- 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)]"
4867
5012
  }
4868
- 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(" ");
4869
5018
  }
4870
- function getPrevSlideIndex(currentIndex, totalSlides, infinite) {
4871
- if (totalSlides <= 0) return 0;
4872
- const prevIndex = currentIndex - 1;
4873
- if (prevIndex < 0) {
4874
- 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"
4875
5043
  }
4876
- return prevIndex;
5044
+ };
5045
+ function getBadgeVariantClasses(variant, colors = defaultBadgeThemeColors) {
5046
+ const scheme = colors[variant];
5047
+ return `${scheme.bg} ${scheme.text}`;
4877
5048
  }
4878
- function isNextDisabled(currentIndex, totalSlides, infinite) {
4879
- if (infinite) return false;
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;
5078
+ }
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;
4880
5202
  return currentIndex >= totalSlides - 1;
4881
5203
  }
4882
5204
  function isPrevDisabled(currentIndex, _totalSlides, infinite) {
@@ -4907,14 +5229,7 @@ var anchorLinkListHorizontalClasses = "flex items-center space-x-4 pb-2";
4907
5229
  var anchorLinkBaseClasses = "block text-sm text-gray-600 hover:text-[var(--tiger-primary,#2563eb)] transition-colors duration-200 whitespace-nowrap";
4908
5230
  var anchorLinkActiveClasses = "text-[var(--tiger-primary,#2563eb)] font-medium";
4909
5231
  function getAnchorWrapperClasses(affix, className) {
4910
- const classes = [anchorBaseClasses];
4911
- if (affix) {
4912
- classes.push(anchorAffixClasses);
4913
- }
4914
- if (className) {
4915
- classes.push(className);
4916
- }
4917
- return classes.filter(Boolean).join(" ");
5232
+ return [anchorBaseClasses, affix && anchorAffixClasses, className].filter(Boolean).join(" ");
4918
5233
  }
4919
5234
  function getAnchorInkContainerClasses(direction) {
4920
5235
  return direction === "vertical" ? anchorInkContainerVerticalClasses : anchorInkContainerHorizontalClasses;
@@ -4926,14 +5241,7 @@ function getAnchorLinkListClasses(direction) {
4926
5241
  return direction === "vertical" ? anchorLinkListVerticalClasses : anchorLinkListHorizontalClasses;
4927
5242
  }
4928
5243
  function getAnchorLinkClasses(active, className) {
4929
- const classes = [anchorLinkBaseClasses];
4930
- if (active) {
4931
- classes.push(anchorLinkActiveClasses);
4932
- }
4933
- if (className) {
4934
- classes.push(className);
4935
- }
4936
- return classes.filter(Boolean).join(" ");
5244
+ return [anchorLinkBaseClasses, active && anchorLinkActiveClasses, className].filter(Boolean).join(" ");
4937
5245
  }
4938
5246
  function getAnchorTargetElement(href) {
4939
5247
  if (!href || !href.startsWith("#")) {
@@ -4981,19 +5289,9 @@ function scrollToAnchor(href, container, targetOffset = 0) {
4981
5289
  if (!element) {
4982
5290
  return;
4983
5291
  }
4984
- const offsetTop = getElementOffsetTop(element, container) - targetOffset;
4985
- if (container === window) {
4986
- window.scrollTo({
4987
- top: offsetTop,
4988
- behavior: "smooth"
4989
- });
4990
- } else {
4991
- ;
4992
- container.scrollTo({
4993
- top: offsetTop,
4994
- behavior: "smooth"
4995
- });
4996
- }
5292
+ const top = getElementOffsetTop(element, container) - targetOffset;
5293
+ const scrollTarget = container === window ? window : container;
5294
+ scrollTarget.scrollTo({ top, behavior: "smooth" });
4997
5295
  }
4998
5296
  function findActiveAnchor(links, container, bounds = 5, targetOffset = 0) {
4999
5297
  if (links.length === 0) {
@@ -5249,6 +5547,33 @@ function createPieArcPath(options) {
5249
5547
  "Z"
5250
5548
  ].join(" ");
5251
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))";
5252
5577
  function getRadarAngles(count, startAngle = -Math.PI / 2) {
5253
5578
  if (count <= 0) return [];
5254
5579
  const step = Math.PI * 2 / count;
@@ -5284,6 +5609,49 @@ function createPolygonPath(points) {
5284
5609
  " "
5285
5610
  );
5286
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";
5287
5655
  function createLinePath(points, curve = "linear") {
5288
5656
  if (points.length === 0) return "";
5289
5657
  if (points.length === 1) return `M ${points[0].x} ${points[0].y}`;
@@ -5439,6 +5807,63 @@ function stackSeriesData(seriesData) {
5439
5807
  }
5440
5808
  return result;
5441
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";
5442
5867
 
5443
5868
  // src/utils/chart-interaction.ts
5444
5869
  function createChartInteractionHandlers(data, state, options) {
@@ -5536,6 +5961,59 @@ function getChartEntranceTransform(type, progress, options = {}) {
5536
5961
  }
5537
5962
  }
5538
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
+
5539
6017
  // src/utils/floating.ts
5540
6018
  import {
5541
6019
  computePosition,
@@ -5630,304 +6108,166 @@ function applyFloatingStyles(element, result) {
5630
6108
  element.style.top = `${result.y}px`;
5631
6109
  }
5632
6110
 
5633
- // src/theme/colors.ts
5634
- var defaultThemeColors = {
5635
- primary: {
5636
- bg: "bg-[var(--tiger-primary,#2563eb)]",
5637
- bgHover: "hover:bg-[var(--tiger-primary-hover,#1d4ed8)]",
5638
- text: "text-white",
5639
- focus: "focus:ring-[var(--tiger-primary,#2563eb)]",
5640
- disabled: "disabled:bg-[var(--tiger-primary-disabled,#93c5fd)]"
5641
- },
5642
- secondary: {
5643
- bg: "bg-[var(--tiger-secondary,#4b5563)]",
5644
- bgHover: "hover:bg-[var(--tiger-secondary-hover,#374151)]",
5645
- text: "text-white",
5646
- focus: "focus:ring-[var(--tiger-secondary,#4b5563)]",
5647
- disabled: "disabled:bg-[var(--tiger-secondary-disabled,#9ca3af)]"
5648
- },
5649
- outline: {
5650
- bg: "bg-transparent",
5651
- bgHover: "hover:bg-[var(--tiger-outline-bg-hover,#eff6ff)]",
5652
- text: "text-[var(--tiger-primary,#2563eb)]",
5653
- border: "border-2 border-[var(--tiger-primary,#2563eb)]",
5654
- focus: "focus:ring-[var(--tiger-primary,#2563eb)]",
5655
- disabled: "disabled:border-[var(--tiger-primary-disabled,#93c5fd)] disabled:text-[var(--tiger-primary-disabled,#93c5fd)]"
5656
- },
5657
- ghost: {
5658
- bg: "bg-transparent",
5659
- bgHover: "hover:bg-[var(--tiger-ghost-bg-hover,#eff6ff)]",
5660
- text: "text-[var(--tiger-primary,#2563eb)]",
5661
- focus: "focus:ring-[var(--tiger-primary,#2563eb)]",
5662
- disabled: "disabled:text-[var(--tiger-primary-disabled,#93c5fd)]"
5663
- },
5664
- link: {
5665
- bg: "bg-transparent",
5666
- bgHover: "hover:underline",
5667
- text: "text-[var(--tiger-primary,#2563eb)]",
5668
- focus: "focus:ring-[var(--tiger-primary,#2563eb)]",
5669
- disabled: "disabled:text-[var(--tiger-primary-disabled,#93c5fd)]"
5670
- }
5671
- };
5672
- function getButtonVariantClasses(variant, colors = defaultThemeColors) {
5673
- const scheme = colors[variant];
5674
- const classes = [
5675
- scheme.bg,
5676
- scheme.bgHover,
5677
- scheme.text,
5678
- scheme.border,
5679
- scheme.borderHover,
5680
- scheme.focus,
5681
- scheme.disabled
5682
- ].filter(Boolean);
5683
- return classes.join(" ");
5684
- }
5685
- var defaultRadioColors = {
5686
- border: "border-[var(--tiger-border,#d1d5db)]",
5687
- borderChecked: "border-[var(--tiger-primary,#2563eb)]",
5688
- bg: "bg-[var(--tiger-surface,#ffffff)]",
5689
- bgChecked: "bg-[var(--tiger-primary,#2563eb)]",
5690
- innerDot: "bg-[var(--tiger-surface,#ffffff)]",
5691
- focus: "ring-[var(--tiger-primary,#2563eb)]",
5692
- disabled: "bg-[var(--tiger-surface-muted,#f3f4f6)] border-[var(--tiger-border,#d1d5db)]",
5693
- textDisabled: "text-[var(--tiger-text-muted,#6b7280)]"
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)]" }
5694
6116
  };
5695
- function getRadioColorClasses(colors = defaultRadioColors) {
5696
- return colors;
6117
+ function getChatMessageStatusInfo(status, statusMap = defaultChatMessageStatusInfo) {
6118
+ return statusMap[status] || defaultChatMessageStatusInfo[status];
5697
6119
  }
5698
- var defaultLinkThemeColors = {
5699
- primary: {
5700
- text: "text-[var(--tiger-primary,#2563eb)]",
5701
- textHover: "hover:text-[var(--tiger-primary-hover,#1d4ed8)]",
5702
- focus: "focus:ring-[var(--tiger-primary,#2563eb)]",
5703
- disabled: "text-[var(--tiger-primary-disabled,#93c5fd)]"
5704
- },
5705
- secondary: {
5706
- text: "text-[var(--tiger-secondary,#4b5563)]",
5707
- textHover: "hover:text-[var(--tiger-secondary-hover,#374151)]",
5708
- focus: "focus:ring-[var(--tiger-secondary,#4b5563)]",
5709
- disabled: "text-[var(--tiger-secondary-disabled,#9ca3af)]"
5710
- },
5711
- default: {
5712
- text: "text-gray-700",
5713
- textHover: "hover:text-gray-900",
5714
- focus: "focus:ring-gray-500",
5715
- disabled: "text-gray-400"
5716
- }
5717
- };
5718
- function getLinkVariantClasses(variant, colors, options) {
5719
- const scheme = (colors ?? defaultLinkThemeColors)[variant];
5720
- const classes = [
5721
- scheme.text,
5722
- scheme.textHover,
5723
- scheme.focus,
5724
- `disabled:${scheme.disabled}`,
5725
- options?.disabled ? scheme.disabled : void 0
5726
- ].filter(Boolean);
5727
- return classes.join(" ");
5728
- }
5729
- var textSizeClasses = {
5730
- xs: "text-xs",
5731
- sm: "text-sm",
5732
- base: "text-base",
5733
- lg: "text-lg",
5734
- xl: "text-xl",
5735
- "2xl": "text-2xl",
5736
- "3xl": "text-3xl",
5737
- "4xl": "text-4xl",
5738
- "5xl": "text-5xl",
5739
- "6xl": "text-6xl"
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;
5740
6127
  };
5741
- var textWeightClasses = {
5742
- thin: "font-thin",
5743
- light: "font-light",
5744
- normal: "font-normal",
5745
- medium: "font-medium",
5746
- semibold: "font-semibold",
5747
- bold: "font-bold",
5748
- extrabold: "font-extrabold",
5749
- black: "font-black"
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
+ });
5750
6139
  };
5751
- var textAlignClasses = {
5752
- left: "text-left",
5753
- center: "text-center",
5754
- right: "text-right",
5755
- justify: "text-justify"
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);
6159
+ }
6160
+ return [{ key: "default", title: "", items }];
5756
6161
  };
5757
- var textColorClasses = {
5758
- default: "text-[var(--tiger-text,#111827)]",
5759
- primary: "text-[var(--tiger-primary,#2563eb)]",
5760
- secondary: "text-[var(--tiger-secondary,#4b5563)]",
5761
- success: "text-[var(--tiger-success,#16a34a)]",
5762
- warning: "text-[var(--tiger-warning,#ca8a04)]",
5763
- danger: "text-[var(--tiger-error,#dc2626)]",
5764
- muted: "text-[var(--tiger-text-muted,#6b7280)]"
6162
+ var toActivityTimelineItems = (items) => {
6163
+ return items.map((item, index) => ({
6164
+ key: item.id ?? index,
6165
+ activity: item
6166
+ }));
5765
6167
  };
5766
- var textDecorationClasses = {
5767
- truncate: "truncate",
5768
- italic: "italic",
5769
- underline: "underline",
5770
- lineThrough: "line-through"
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
+ });
5771
6188
  };
5772
- var defaultTagThemeColors = {
5773
- default: {
5774
- bg: "bg-[var(--tiger-tag-default-bg,#f3f4f6)]",
5775
- text: "text-[var(--tiger-text,#111827)]",
5776
- border: "border-[var(--tiger-border,#e5e7eb)]",
5777
- closeBgHover: "hover:bg-[var(--tiger-tag-default-close-hover,#e5e7eb)]"
5778
- },
5779
- primary: {
5780
- bg: "bg-[var(--tiger-tag-primary-bg,#dbeafe)]",
5781
- text: "text-[var(--tiger-primary,#2563eb)]",
5782
- border: "border-[var(--tiger-tag-primary-border,#bfdbfe)]",
5783
- closeBgHover: "hover:bg-[var(--tiger-tag-primary-close-hover,#bfdbfe)]"
5784
- },
5785
- success: {
5786
- bg: "bg-[var(--tiger-tag-success-bg,#dcfce7)]",
5787
- text: "text-[var(--tiger-success,#16a34a)]",
5788
- border: "border-[var(--tiger-tag-success-border,#bbf7d0)]",
5789
- closeBgHover: "hover:bg-[var(--tiger-tag-success-close-hover,#bbf7d0)]"
5790
- },
5791
- warning: {
5792
- bg: "bg-[var(--tiger-tag-warning-bg,#fef9c3)]",
5793
- text: "text-[var(--tiger-warning,#ca8a04)]",
5794
- border: "border-[var(--tiger-tag-warning-border,#fef08a)]",
5795
- closeBgHover: "hover:bg-[var(--tiger-tag-warning-close-hover,#fef08a)]"
5796
- },
5797
- danger: {
5798
- bg: "bg-[var(--tiger-tag-danger-bg,#fee2e2)]",
5799
- text: "text-[var(--tiger-error,#dc2626)]",
5800
- border: "border-[var(--tiger-tag-danger-border,#fecaca)]",
5801
- closeBgHover: "hover:bg-[var(--tiger-tag-danger-close-hover,#fecaca)]"
5802
- },
5803
- info: {
5804
- bg: "bg-[var(--tiger-tag-info-bg,#e0f2fe)]",
5805
- text: "text-[var(--tiger-info,#3b82f6)]",
5806
- border: "border-[var(--tiger-tag-info-border,#bae6fd)]",
5807
- closeBgHover: "hover:bg-[var(--tiger-tag-info-close-hover,#bae6fd)]"
6189
+ var buildNotificationGroups = (items = [], groups, groupBy, groupOrder) => {
6190
+ if (groups && groups.length > 0) {
6191
+ return sortNotificationGroups(groups, groupOrder);
5808
6192
  }
5809
- };
5810
- function getTagVariantClasses(variant, colors = defaultTagThemeColors) {
5811
- const scheme = colors[variant];
5812
- const classes = [scheme.bg, scheme.text, scheme.border].filter(Boolean);
5813
- return classes.join(" ");
5814
- }
5815
- var defaultBadgeThemeColors = {
5816
- default: {
5817
- bg: "bg-[var(--tiger-text-muted,#6b7280)]",
5818
- text: "text-white",
5819
- border: "border-[var(--tiger-text-muted,#6b7280)]"
5820
- },
5821
- primary: {
5822
- bg: "bg-[var(--tiger-primary,#2563eb)]",
5823
- text: "text-white",
5824
- border: "border-[var(--tiger-primary,#2563eb)]"
5825
- },
5826
- success: {
5827
- bg: "bg-[var(--tiger-success,#16a34a)]",
5828
- text: "text-white",
5829
- border: "border-[var(--tiger-success,#16a34a)]"
5830
- },
5831
- warning: {
5832
- bg: "bg-[var(--tiger-warning,#ca8a04)]",
5833
- text: "text-white",
5834
- border: "border-[var(--tiger-warning,#ca8a04)]"
5835
- },
5836
- danger: {
5837
- bg: "bg-[var(--tiger-error,#dc2626)]",
5838
- text: "text-white",
5839
- border: "border-[var(--tiger-error,#dc2626)]"
5840
- },
5841
- info: {
5842
- bg: "bg-[var(--tiger-info,#3b82f6)]",
5843
- text: "text-white",
5844
- border: "border-[var(--tiger-info,#3b82f6)]"
6193
+ if (!items || items.length === 0) {
6194
+ return [];
5845
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);
5846
6211
  };
5847
- function getBadgeVariantClasses(variant, colors = defaultBadgeThemeColors) {
5848
- const scheme = colors[variant];
5849
- const classes = [scheme.bg, scheme.text, scheme.border].filter(Boolean);
5850
- return classes.join(" ");
5851
- }
5852
- var defaultProgressThemeColors = {
5853
- default: {
5854
- bg: "bg-[color:var(--tiger-text-muted,#6b7280)]",
5855
- text: "text-[color:var(--tiger-text,#374151)]"
5856
- },
5857
- primary: {
5858
- bg: "bg-[color:var(--tiger-primary,#2563eb)]",
5859
- text: "text-[color:var(--tiger-primary,#2563eb)]"
5860
- },
5861
- success: {
5862
- bg: "bg-[color:var(--tiger-success,#16a34a)]",
5863
- text: "text-[color:var(--tiger-success,#16a34a)]"
5864
- },
5865
- warning: {
5866
- bg: "bg-[color:var(--tiger-warning,#f59e0b)]",
5867
- text: "text-[color:var(--tiger-warning,#f59e0b)]"
5868
- },
5869
- danger: {
5870
- bg: "bg-[color:var(--tiger-error,#dc2626)]",
5871
- text: "text-[color:var(--tiger-error,#dc2626)]"
5872
- },
5873
- info: {
5874
- bg: "bg-[color:var(--tiger-info,#0ea5e9)]",
5875
- text: "text-[color:var(--tiger-info,#0ea5e9)]"
5876
- }
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;
5877
6242
  };
5878
- function getProgressVariantClasses(variant, colors = defaultProgressThemeColors) {
5879
- const scheme = colors[variant];
5880
- return scheme.bg;
5881
- }
5882
- function getProgressTextColorClasses(variant, colors = defaultProgressThemeColors) {
5883
- const scheme = colors[variant];
5884
- return scheme.text || "text-[var(--tiger-text,#374151)]";
5885
- }
5886
- var defaultAlertThemeColors = {
5887
- success: {
5888
- bg: "bg-[var(--tiger-alert-success-bg,#f0fdf4)]",
5889
- border: "border-[var(--tiger-alert-success-border,#bbf7d0)]",
5890
- icon: "text-[var(--tiger-alert-success-icon,#22c55e)]",
5891
- title: "text-[var(--tiger-alert-success-title,#166534)]",
5892
- description: "text-[var(--tiger-alert-success-description,#15803d)]",
5893
- closeButton: "text-[var(--tiger-alert-success-close,#22c55e)]",
5894
- closeButtonHover: "hover:bg-[var(--tiger-alert-success-close-hover-bg,#dcfce7)]",
5895
- focus: "focus:ring-[color:var(--tiger-alert-success-ring,#22c55e)]"
5896
- },
5897
- warning: {
5898
- bg: "bg-[var(--tiger-alert-warning-bg,#fefce8)]",
5899
- border: "border-[var(--tiger-alert-warning-border,#fef08a)]",
5900
- icon: "text-[var(--tiger-alert-warning-icon,#eab308)]",
5901
- title: "text-[var(--tiger-alert-warning-title,#854d0e)]",
5902
- description: "text-[var(--tiger-alert-warning-description,#a16207)]",
5903
- closeButton: "text-[var(--tiger-alert-warning-close,#eab308)]",
5904
- closeButtonHover: "hover:bg-[var(--tiger-alert-warning-close-hover-bg,#fef9c3)]",
5905
- focus: "focus:ring-[color:var(--tiger-alert-warning-ring,#eab308)]"
5906
- },
5907
- error: {
5908
- bg: "bg-[var(--tiger-alert-error-bg,#fef2f2)]",
5909
- border: "border-[var(--tiger-alert-error-border,#fecaca)]",
5910
- icon: "text-[var(--tiger-alert-error-icon,#ef4444)]",
5911
- title: "text-[var(--tiger-alert-error-title,#991b1b)]",
5912
- description: "text-[var(--tiger-alert-error-description,#b91c1c)]",
5913
- closeButton: "text-[var(--tiger-alert-error-close,#ef4444)]",
5914
- closeButtonHover: "hover:bg-[var(--tiger-alert-error-close-hover-bg,#fee2e2)]",
5915
- focus: "focus:ring-[color:var(--tiger-alert-error-ring,#ef4444)]"
5916
- },
5917
- info: {
5918
- bg: "bg-[var(--tiger-alert-info-bg,#eff6ff)]",
5919
- border: "border-[var(--tiger-alert-info-border,#bfdbfe)]",
5920
- icon: "text-[var(--tiger-alert-info-icon,#3b82f6)]",
5921
- title: "text-[var(--tiger-alert-info-title,#1e40af)]",
5922
- description: "text-[var(--tiger-alert-info-description,#1d4ed8)]",
5923
- closeButton: "text-[var(--tiger-alert-info-close,#3b82f6)]",
5924
- closeButtonHover: "hover:bg-[var(--tiger-alert-info-close-hover-bg,#dbeafe)]",
5925
- focus: "focus:ring-[color:var(--tiger-alert-info-ring,#3b82f6)]"
5926
- }
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;
5927
6270
  };
5928
- function getAlertTypeClasses(type, colors = defaultAlertThemeColors) {
5929
- return colors[type];
5930
- }
5931
6271
 
5932
6272
  // src/theme/checkbox.ts
5933
6273
  var checkboxSizeClasses = {
@@ -5941,26 +6281,17 @@ var checkboxLabelSizeClasses = {
5941
6281
  lg: "text-lg"
5942
6282
  };
5943
6283
  function getCheckboxClasses(size = "md", disabled = false) {
5944
- 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";
5945
6285
  const sizeClass = checkboxSizeClasses[size];
5946
- const colorClasses = [
5947
- "border-[var(--tiger-primary,#2563eb)]",
5948
- "accent-[var(--tiger-primary,#2563eb)]",
5949
- "text-white",
5950
- "checked:bg-[var(--tiger-primary,#2563eb)]",
5951
- "checked:border-[var(--tiger-primary,#2563eb)]",
5952
- "indeterminate:bg-[var(--tiger-primary,#2563eb)]",
5953
- "indeterminate:border-[var(--tiger-primary,#2563eb)]",
5954
- "focus:ring-[var(--tiger-primary,#2563eb)]"
5955
- ].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)]";
5956
6287
  const disabledClasses = disabled ? "cursor-not-allowed opacity-50 disabled:bg-[var(--tiger-surface-muted,#f3f4f6)] disabled:border-[var(--tiger-border,#e5e7eb)]" : "";
5957
- return [baseClasses, sizeClass, colorClasses, disabledClasses].filter(Boolean).join(" ");
6288
+ return [baseClasses2, sizeClass, colorClasses, disabledClasses].filter(Boolean).join(" ");
5958
6289
  }
5959
6290
  function getCheckboxLabelClasses(size = "md", disabled = false) {
5960
- const baseClasses = "inline-flex items-center cursor-pointer select-none";
6291
+ const baseClasses2 = "inline-flex items-center cursor-pointer select-none";
5961
6292
  const sizeClass = checkboxLabelSizeClasses[size];
5962
- const disabledClasses = disabled ? "cursor-not-allowed opacity-50" : "";
5963
- return [baseClasses, sizeClass, disabledClasses].filter(Boolean).join(" ");
6293
+ const disabledClasses = disabled ? "cursor-not-allowed" : "";
6294
+ return [baseClasses2, sizeClass, disabledClasses].filter(Boolean).join(" ");
5964
6295
  }
5965
6296
 
5966
6297
  // src/theme/switch.ts
@@ -5991,10 +6322,10 @@ function getSwitchClasses(size = "md", checked = false, disabled = false) {
5991
6322
  );
5992
6323
  }
5993
6324
  function getSwitchThumbClasses(size = "md", checked = false) {
5994
- 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";
5995
6326
  const sizeClass = switchThumbSizeClasses[size];
5996
6327
  const translateClass = checked ? switchThumbTranslateClasses[size] : "translate-x-0.5";
5997
- return classNames(baseClasses, sizeClass, translateClass);
6328
+ return classNames(baseClasses2, sizeClass, translateClass);
5998
6329
  }
5999
6330
 
6000
6331
  // src/theme/slider.ts
@@ -6108,7 +6439,11 @@ var tigercatTheme = {
6108
6439
  };
6109
6440
  var tigercatPlugin = (0, import_plugin.default)(function({ addBase }) {
6110
6441
  addBase({
6111
- ":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
+ }
6112
6447
  });
6113
6448
  });
6114
6449
 
@@ -6124,15 +6459,26 @@ export {
6124
6459
  ClockIconPath,
6125
6460
  CloseIconPath,
6126
6461
  DEFAULT_CHART_COLORS,
6462
+ DEFAULT_FORM_WIZARD_LABELS,
6127
6463
  DEFAULT_PAGINATION_LABELS,
6464
+ DONUT_BASE_SHADOW,
6465
+ DONUT_EMPHASIS_SHADOW,
6466
+ DROPDOWN_CHEVRON_PATH,
6467
+ DROPDOWN_ENTER_CLASS,
6128
6468
  DURATION_CLASS,
6129
6469
  DURATION_FAST_CLASS,
6130
6470
  DURATION_SLOW_CLASS,
6131
6471
  EASING_DEFAULT,
6132
6472
  EASING_ENTER,
6133
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,
6134
6481
  SHAKE_CLASS,
6135
- SPACE_BASE_CLASS,
6136
6482
  SVG_ANIMATION_CLASSES,
6137
6483
  SVG_ANIMATION_VARS,
6138
6484
  SVG_DEFAULT_FILL,
@@ -6146,6 +6492,7 @@ export {
6146
6492
  TRANSITION_OPACITY,
6147
6493
  TRANSITION_TRANSFORM,
6148
6494
  TimePickerCloseIconPath,
6495
+ ZH_CN_FORM_WIZARD_LABELS,
6149
6496
  ZH_CN_PAGINATION_LABELS,
6150
6497
  activeOpacityClasses,
6151
6498
  activePressClasses,
@@ -6154,14 +6501,10 @@ export {
6154
6501
  alertCloseIconPath,
6155
6502
  alertContentClasses,
6156
6503
  alertDescriptionSizeClasses,
6157
- alertErrorIconPath,
6158
6504
  alertIconContainerClasses,
6159
6505
  alertIconSizeClasses,
6160
- alertInfoIconPath,
6161
6506
  alertSizeClasses,
6162
- alertSuccessIconPath,
6163
6507
  alertTitleSizeClasses,
6164
- alertWarningIconPath,
6165
6508
  anchorAffixClasses,
6166
6509
  anchorBaseClasses,
6167
6510
  anchorInkActiveHorizontalClasses,
@@ -6183,7 +6526,6 @@ export {
6183
6526
  avatarImageClasses,
6184
6527
  avatarShapeClasses,
6185
6528
  avatarSizeClasses,
6186
- backTopBaseClasses,
6187
6529
  backTopButtonClasses,
6188
6530
  backTopContainerClasses,
6189
6531
  backTopHiddenClasses,
@@ -6194,12 +6536,20 @@ export {
6194
6536
  badgeSizeClasses,
6195
6537
  badgeTypeClasses,
6196
6538
  badgeWrapperClasses,
6539
+ barAnimatedTransition,
6540
+ barValueLabelClasses,
6541
+ barValueLabelInsideClasses,
6197
6542
  barsVariantConfig,
6198
6543
  breadcrumbContainerClasses,
6199
6544
  breadcrumbCurrentClasses,
6200
6545
  breadcrumbItemBaseClasses,
6201
6546
  breadcrumbLinkClasses,
6202
6547
  breadcrumbSeparatorBaseClasses,
6548
+ buildActivityGroups,
6549
+ buildChartLegendItems,
6550
+ buildCommentTree,
6551
+ buildNotificationGroups,
6552
+ buildTriggerHandlerMap,
6203
6553
  buttonBaseClasses,
6204
6554
  buttonDisabledClasses,
6205
6555
  buttonSizeClasses,
@@ -6211,7 +6561,6 @@ export {
6211
6561
  captureActiveElement,
6212
6562
  cardActionsClasses,
6213
6563
  cardBaseClasses,
6214
- cardBodyClasses,
6215
6564
  cardCoverClasses,
6216
6565
  cardCoverWrapperClasses,
6217
6566
  cardFooterClasses,
@@ -6231,7 +6580,6 @@ export {
6231
6580
  carouselPrevArrowClasses,
6232
6581
  carouselPrevArrowPath,
6233
6582
  carouselSlideBaseClasses,
6234
- carouselSlideFadeClasses,
6235
6583
  carouselTrackFadeClasses,
6236
6584
  carouselTrackScrollClasses,
6237
6585
  chartAxisLabelClasses,
@@ -6244,13 +6592,16 @@ export {
6244
6592
  checkSolidIcon20PathD,
6245
6593
  checkboxLabelSizeClasses,
6246
6594
  checkboxSizeClasses,
6595
+ checkedSetsFromState,
6247
6596
  chevronDownSolidIcon20PathD,
6248
6597
  chevronLeftSolidIcon20PathD,
6249
6598
  chevronRightSolidIcon20PathD,
6599
+ clampBarWidth,
6250
6600
  clampPercentage,
6251
6601
  clampSlideIndex,
6252
6602
  classNames,
6253
6603
  clearFieldErrors,
6604
+ clipCommentTreeDepth,
6254
6605
  clockSolidIcon20PathD,
6255
6606
  closeIconPathD,
6256
6607
  closeIconPathStrokeLinecap,
@@ -6266,7 +6617,6 @@ export {
6266
6617
  coerceStyleValue,
6267
6618
  collapseBaseClasses,
6268
6619
  collapseBorderlessClasses,
6269
- collapseExtraClasses,
6270
6620
  collapseGhostClasses,
6271
6621
  collapseHeaderTextClasses,
6272
6622
  collapseIconBaseClasses,
@@ -6278,8 +6628,9 @@ export {
6278
6628
  collapsePanelHeaderActiveClasses,
6279
6629
  collapsePanelHeaderBaseClasses,
6280
6630
  collapsePanelHeaderDisabledClasses,
6281
- collapseRightArrowIcon,
6282
6631
  computeFloatingPosition,
6632
+ computePieHoverOffset,
6633
+ computePieLabelLine,
6283
6634
  containerBaseClasses,
6284
6635
  containerCenteredClasses,
6285
6636
  containerMaxWidthClasses,
@@ -6289,6 +6640,7 @@ export {
6289
6640
  createAriaId,
6290
6641
  createBandScale,
6291
6642
  createChartInteractionHandlers,
6643
+ createFloatingIdFactory,
6292
6644
  createLinePath,
6293
6645
  createLinearScale,
6294
6646
  createPieArcPath,
@@ -6307,18 +6659,20 @@ export {
6307
6659
  datePickerNavButtonClasses,
6308
6660
  defaultAlertThemeColors,
6309
6661
  defaultBadgeThemeColors,
6310
- defaultExpandIcon,
6311
- defaultIndeterminateIcon,
6662
+ defaultChatMessageStatusInfo,
6312
6663
  defaultLinkThemeColors,
6313
6664
  defaultMessageThemeColors,
6314
6665
  defaultNotificationThemeColors,
6315
6666
  defaultProgressThemeColors,
6667
+ defaultRadarTooltipFormatter,
6316
6668
  defaultRadioColors,
6669
+ defaultSeriesXYTooltipFormatter,
6317
6670
  defaultSortFn,
6318
6671
  defaultTagThemeColors,
6319
6672
  defaultThemeColors,
6320
6673
  defaultTooltipFormatter,
6321
6674
  defaultTotalText,
6675
+ defaultXYTooltipFormatter,
6322
6676
  descriptionsBaseClasses,
6323
6677
  descriptionsCellSizeClasses,
6324
6678
  descriptionsContentBorderedClasses,
@@ -6327,7 +6681,6 @@ export {
6327
6681
  descriptionsHeaderClasses,
6328
6682
  descriptionsLabelBorderedClasses,
6329
6683
  descriptionsLabelClasses,
6330
- descriptionsRowClasses,
6331
6684
  descriptionsSizeClasses,
6332
6685
  descriptionsTableBorderedClasses,
6333
6686
  descriptionsTableClasses,
@@ -6339,6 +6692,7 @@ export {
6339
6692
  descriptionsWrapperClasses,
6340
6693
  dotSizeClasses,
6341
6694
  dotsVariantConfig,
6695
+ ensureBarMinHeight,
6342
6696
  errorCircleSolidIcon20PathD,
6343
6697
  fileToUploadFile,
6344
6698
  filterData,
@@ -6346,12 +6700,17 @@ export {
6346
6700
  filterTreeNodes,
6347
6701
  findActiveAnchor,
6348
6702
  findNode,
6349
- flattenTree,
6703
+ flattenSelectOptions,
6350
6704
  focusElement,
6351
6705
  focusFirst,
6706
+ focusFirstChildItem,
6707
+ focusMenuEdge,
6352
6708
  focusRingClasses,
6353
6709
  focusRingInsetClasses,
6710
+ formatActivityTime,
6354
6711
  formatBadgeContent,
6712
+ formatChatTime,
6713
+ formatCommentTime,
6355
6714
  formatDate,
6356
6715
  formatFileSize,
6357
6716
  formatMonthYear,
@@ -6378,10 +6737,13 @@ export {
6378
6737
  getAnchorLinkListClasses,
6379
6738
  getAnchorTargetElement,
6380
6739
  getAnchorWrapperClasses,
6740
+ getAreaGradientPrefix,
6381
6741
  getArrowStyles,
6382
6742
  getAutoExpandKeys,
6383
6743
  getBadgeVariantClasses,
6744
+ getBarGradientPrefix,
6384
6745
  getBarGrowAnimationStyle,
6746
+ getBarValueLabelY,
6385
6747
  getBreadcrumbItemClasses,
6386
6748
  getBreadcrumbLinkClasses,
6387
6749
  getBreadcrumbSeparatorClasses,
@@ -6398,11 +6760,13 @@ export {
6398
6760
  getChartEntranceTransform,
6399
6761
  getChartGridLineDasharray,
6400
6762
  getChartInnerRect,
6763
+ getChatMessageStatusInfo,
6401
6764
  getCheckboxCellClasses,
6402
6765
  getCheckboxClasses,
6403
6766
  getCheckboxLabelClasses,
6404
6767
  getCheckedKeysByStrategy,
6405
6768
  getCircleSize,
6769
+ getColMergedStyleVars,
6406
6770
  getColOrderStyleVars,
6407
6771
  getColStyleVars,
6408
6772
  getCollapseContainerClasses,
@@ -6425,9 +6789,8 @@ export {
6425
6789
  getDescriptionsLabelClasses,
6426
6790
  getDescriptionsTableClasses,
6427
6791
  getDescriptionsVerticalItemClasses,
6428
- getDividerLineStyleClasses,
6429
- getDividerOrientationClasses,
6430
- getDividerSpacingClasses,
6792
+ getDividerClasses,
6793
+ getDividerStyle,
6431
6794
  getDragAreaClasses,
6432
6795
  getDrawerBodyClasses,
6433
6796
  getDrawerCloseButtonClasses,
@@ -6437,10 +6800,10 @@ export {
6437
6800
  getDrawerMaskClasses,
6438
6801
  getDrawerPanelClasses,
6439
6802
  getDrawerTitleClasses,
6803
+ getDropdownChevronClasses,
6440
6804
  getDropdownContainerClasses,
6441
6805
  getDropdownItemClasses,
6442
6806
  getDropdownMenuClasses,
6443
- getDropdownMenuWrapperClasses,
6444
6807
  getDropdownTriggerClasses,
6445
6808
  getElementOffsetTop,
6446
6809
  getErrorFields,
@@ -6451,6 +6814,13 @@ export {
6451
6814
  getFlexClasses,
6452
6815
  getFocusTrapNavigation,
6453
6816
  getFocusableElements,
6817
+ getFormItemAsteriskClasses,
6818
+ getFormItemClasses,
6819
+ getFormItemContentClasses,
6820
+ getFormItemErrorClasses,
6821
+ getFormItemFieldClasses,
6822
+ getFormItemLabelClasses,
6823
+ getFormWizardLabels,
6454
6824
  getGridColumnClasses,
6455
6825
  getGutterStyles,
6456
6826
  getInitials,
@@ -6460,6 +6830,7 @@ export {
6460
6830
  getInputWrapperClasses,
6461
6831
  getJustifyClasses,
6462
6832
  getLeafKeys,
6833
+ getLineGradientPrefix,
6463
6834
  getLinkVariantClasses,
6464
6835
  getListClasses,
6465
6836
  getListHeaderFooterClasses,
@@ -6471,6 +6842,7 @@ export {
6471
6842
  getLoadingDotsWrapperClasses,
6472
6843
  getLoadingOverlaySpinnerClasses,
6473
6844
  getLoadingTextClasses,
6845
+ getMenuButtons,
6474
6846
  getMenuClasses,
6475
6847
  getMenuItemClasses,
6476
6848
  getMenuItemIndent,
@@ -6526,6 +6898,7 @@ export {
6526
6898
  getProgressVariantClasses,
6527
6899
  getQuickJumperInputClasses,
6528
6900
  getRadarAngles,
6901
+ getRadarLabelAlign,
6529
6902
  getRadarPoints,
6530
6903
  getRadioColorClasses,
6531
6904
  getRadioDotClasses,
@@ -6533,6 +6906,10 @@ export {
6533
6906
  getRadioLabelClasses,
6534
6907
  getRadioVisualClasses,
6535
6908
  getRowKey,
6909
+ getScatterGradientPrefix,
6910
+ getScatterHoverShadow,
6911
+ getScatterHoverSize,
6912
+ getScatterPointPath,
6536
6913
  getScrollTop,
6537
6914
  getScrollTransform,
6538
6915
  getSecureRel,
@@ -6549,15 +6926,15 @@ export {
6549
6926
  getSimplePaginationPageIndicatorClasses,
6550
6927
  getSimplePaginationSelectClasses,
6551
6928
  getSimplePaginationTotalClasses,
6929
+ getSizeTextClasses,
6552
6930
  getSkeletonClasses,
6553
6931
  getSkeletonDimensions,
6554
6932
  getSliderThumbClasses,
6555
6933
  getSliderTooltipClasses,
6556
6934
  getSliderTrackClasses,
6557
6935
  getSortIconClasses,
6558
- getSpaceAlignClass,
6559
- getSpaceDirectionClass,
6560
- getSpaceGapSize,
6936
+ getSpaceClasses,
6937
+ getSpaceStyle,
6561
6938
  getSpanClasses,
6562
6939
  getSpinnerSVG,
6563
6940
  getStatusVariant,
@@ -6584,6 +6961,7 @@ export {
6584
6961
  getTableWrapperClasses,
6585
6962
  getTabsContainerClasses,
6586
6963
  getTagVariantClasses,
6964
+ getTextClasses,
6587
6965
  getThemeColor,
6588
6966
  getTimePeriodLabels,
6589
6967
  getTimePickerIconButtonClasses,
@@ -6623,7 +7001,12 @@ export {
6623
7001
  icon24ViewBox,
6624
7002
  iconSizeClasses,
6625
7003
  iconSvgBaseClasses,
7004
+ iconSvgDefaultStrokeLinecap,
7005
+ iconSvgDefaultStrokeLinejoin,
7006
+ iconSvgDefaultStrokeWidth,
6626
7007
  iconWrapperClasses,
7008
+ initRovingTabIndex,
7009
+ injectDropdownStyles,
6627
7010
  injectLoadingAnimationStyles,
6628
7011
  injectShakeStyle,
6629
7012
  injectSvgAnimationStyles,
@@ -6654,6 +7037,7 @@ export {
6654
7037
  layoutHeaderClasses,
6655
7038
  layoutRootClasses,
6656
7039
  layoutSidebarClasses,
7040
+ linePointTransitionClasses,
6657
7041
  linkBaseClasses,
6658
7042
  linkDisabledClasses,
6659
7043
  linkSizeClasses,
@@ -6675,7 +7059,6 @@ export {
6675
7059
  listItemSizeClasses,
6676
7060
  listItemTitleClasses,
6677
7061
  listLoadingOverlayClasses,
6678
- listPaginationContainerClasses,
6679
7062
  listSizeClasses,
6680
7063
  listWrapperClasses,
6681
7064
  loadingBarBaseClasses,
@@ -6713,12 +7096,8 @@ export {
6713
7096
  messageCloseIconPath,
6714
7097
  messageContainerBaseClasses,
6715
7098
  messageContentClasses,
6716
- messageEnterActiveClasses,
6717
- messageEnterClasses,
6718
7099
  messageIconClasses,
6719
7100
  messageIconPaths,
6720
- messageLeaveActiveClasses,
6721
- messageLeaveClasses,
6722
7101
  messageLoadingSpinnerClasses,
6723
7102
  messagePositionClasses,
6724
7103
  modalBodyClasses,
@@ -6730,9 +7109,11 @@ export {
6730
7109
  modalSizeClasses,
6731
7110
  modalTitleClasses,
6732
7111
  modalWrapperClasses,
7112
+ moveFocusInMenu,
6733
7113
  normalizeActiveKeys,
6734
7114
  normalizeChartPadding,
6735
7115
  normalizeDate,
7116
+ normalizeStringOption,
6736
7117
  normalizeSvgAttrs,
6737
7118
  notificationBaseClasses,
6738
7119
  notificationCloseButtonClasses,
@@ -6747,6 +7128,7 @@ export {
6747
7128
  notificationTitleClasses,
6748
7129
  paginateData,
6749
7130
  parseDate,
7131
+ parseInputValue,
6750
7132
  parseTime,
6751
7133
  parseWidthToPx,
6752
7134
  polarToCartesian,
@@ -6782,8 +7164,17 @@ export {
6782
7164
  radioSizeClasses,
6783
7165
  radioVisualBaseClasses,
6784
7166
  replaceKeys,
7167
+ resetAreaGradientCounter,
7168
+ resetBarGradientCounter,
7169
+ resetLineGradientCounter,
7170
+ resetScatterGradientCounter,
7171
+ resolveChartPalette,
7172
+ resolveChartTooltipContent,
6785
7173
  resolveLocaleText,
7174
+ resolveMultiSeriesTooltipContent,
7175
+ resolveSeriesData,
6786
7176
  restoreFocus,
7177
+ scatterPointTransitionClasses,
6787
7178
  scrollToAnchor,
6788
7179
  scrollToTop,
6789
7180
  selectBaseClasses,
@@ -6811,22 +7202,19 @@ export {
6811
7202
  sliderThumbClasses,
6812
7203
  sliderTooltipClasses,
6813
7204
  sliderTrackClasses,
7205
+ sortActivityGroups,
6814
7206
  sortAscIcon16PathD,
6815
7207
  sortBothIcon16PathD,
6816
7208
  sortData,
6817
7209
  sortDescIcon16PathD,
7210
+ sortNotificationGroups,
6818
7211
  stackSeriesData,
6819
7212
  statusErrorIconPath,
6820
7213
  statusIconPaths,
6821
7214
  statusInfoIconPath,
6822
7215
  statusSuccessIconPath,
6823
7216
  statusWarningIconPath,
6824
- stepFinishIconPathD,
6825
- stepFinishIconPathStrokeLinecap,
6826
- stepFinishIconPathStrokeLinejoin,
6827
- stepFinishIconPathStrokeWidth,
6828
- stepFinishIconSvgClasses,
6829
- stepFinishIconViewBox,
7217
+ stepFinishChar,
6830
7218
  submenuContentHorizontalClasses,
6831
7219
  submenuContentInlineClasses,
6832
7220
  submenuContentPopupClasses,
@@ -6853,6 +7241,7 @@ export {
6853
7241
  tabItemLineClasses,
6854
7242
  tabItemSizeClasses,
6855
7243
  tabNavBaseClasses,
7244
+ tabNavLineBorderClasses,
6856
7245
  tabNavListBaseClasses,
6857
7246
  tabNavListCenteredClasses,
6858
7247
  tabNavListPositionClasses,
@@ -6899,6 +7288,7 @@ export {
6899
7288
  timelineTailClasses,
6900
7289
  to12HourFormat,
6901
7290
  to24HourFormat,
7291
+ toActivityTimelineItems,
6902
7292
  toggleKey,
6903
7293
  togglePanelKey,
6904
7294
  treeBaseClasses,