@expcat/tigercat-core 2.0.19 → 2.1.0

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
@@ -109,8 +109,9 @@ var copyTextToClipboard = async (text) => {
109
109
  }
110
110
  }
111
111
  if (!isBrowser()) return false;
112
+ let textarea = null;
112
113
  try {
113
- const textarea = document.createElement("textarea");
114
+ textarea = document.createElement("textarea");
114
115
  textarea.value = text;
115
116
  textarea.setAttribute("readonly", "");
116
117
  textarea.style.position = "fixed";
@@ -119,11 +120,11 @@ var copyTextToClipboard = async (text) => {
119
120
  document.body.appendChild(textarea);
120
121
  textarea.select();
121
122
  textarea.setSelectionRange(0, textarea.value.length);
122
- const ok = document.execCommand("copy");
123
- document.body.removeChild(textarea);
124
- return ok;
123
+ return document.execCommand("copy");
125
124
  } catch {
126
125
  return false;
126
+ } finally {
127
+ textarea?.remove();
127
128
  }
128
129
  };
129
130
 
@@ -1504,7 +1505,9 @@ var TIGER_LOCALE_KEYS = [
1504
1505
  "markdownEditor",
1505
1506
  "richTextEditor",
1506
1507
  "cronEditor",
1507
- "formValidation"
1508
+ "formValidation",
1509
+ "inputOtp",
1510
+ "tagsInput"
1508
1511
  ];
1509
1512
  function isRecord3(value) {
1510
1513
  return typeof value === "object" && value !== null && !Array.isArray(value);
@@ -1572,7 +1575,9 @@ function mergeTigerLocale(base, override) {
1572
1575
  markdownEditor: { ...base?.markdownEditor, ...override?.markdownEditor },
1573
1576
  richTextEditor: { ...base?.richTextEditor, ...override?.richTextEditor },
1574
1577
  cronEditor: { ...base?.cronEditor, ...override?.cronEditor },
1575
- formValidation: { ...base?.formValidation, ...override?.formValidation }
1578
+ formValidation: { ...base?.formValidation, ...override?.formValidation },
1579
+ inputOtp: { ...base?.inputOtp, ...override?.inputOtp },
1580
+ tagsInput: { ...base?.tagsInput, ...override?.tagsInput }
1576
1581
  };
1577
1582
  }
1578
1583
  var RTL_LANGUAGE_CODES = /* @__PURE__ */ new Set(["ar", "fa", "he", "iw", "ps", "ur"]);
@@ -2393,6 +2398,36 @@ var ZH_CN_UPLOAD_LABELS = {
2393
2398
  removeFileAriaLabel: "\u79FB\u9664 {fileName}",
2394
2399
  previewFileAriaLabel: "\u9884\u89C8 {fileName}"
2395
2400
  };
2401
+ var DEFAULT_INPUT_OTP_LABELS = {
2402
+ groupLabel: "One-time password",
2403
+ slotLabel: "Character {index} of {total}"
2404
+ };
2405
+ var ZH_CN_INPUT_OTP_LABELS = {
2406
+ groupLabel: "\u4E00\u6B21\u6027\u9A8C\u8BC1\u7801",
2407
+ slotLabel: "\u7B2C {index} \u4F4D\uFF0C\u5171 {total} \u4F4D"
2408
+ };
2409
+ function getInputOTPLabels(locale, overrides) {
2410
+ const defaultLabels = locale?.locale?.toLowerCase().startsWith("zh") ? ZH_CN_INPUT_OTP_LABELS : DEFAULT_INPUT_OTP_LABELS;
2411
+ return {
2412
+ groupLabel: overrides?.groupLabel ?? locale?.inputOtp?.groupLabel ?? defaultLabels.groupLabel,
2413
+ slotLabel: overrides?.slotLabel ?? locale?.inputOtp?.slotLabel ?? defaultLabels.slotLabel
2414
+ };
2415
+ }
2416
+ var DEFAULT_TAGS_INPUT_LABELS = {
2417
+ removeTagLabel: "Remove {tag}",
2418
+ clearAllLabel: "Clear all tags"
2419
+ };
2420
+ var ZH_CN_TAGS_INPUT_LABELS = {
2421
+ removeTagLabel: "\u79FB\u9664 {tag}",
2422
+ clearAllLabel: "\u6E05\u7A7A\u5168\u90E8\u6807\u7B7E"
2423
+ };
2424
+ function getTagsInputLabels(locale, overrides) {
2425
+ const defaultLabels = locale?.locale?.toLowerCase().startsWith("zh") ? ZH_CN_TAGS_INPUT_LABELS : DEFAULT_TAGS_INPUT_LABELS;
2426
+ return {
2427
+ removeTagLabel: overrides?.removeTagLabel ?? locale?.tagsInput?.removeTagLabel ?? defaultLabels.removeTagLabel,
2428
+ clearAllLabel: overrides?.clearAllLabel ?? locale?.tagsInput?.clearAllLabel ?? defaultLabels.clearAllLabel
2429
+ };
2430
+ }
2396
2431
 
2397
2432
  // src/utils/i18n/datepicker-locales/en-US.ts
2398
2433
  var EN_US_DATEPICKER_LOCALE = {
@@ -3134,6 +3169,14 @@ var enUS = {
3134
3169
  patternMismatch: "Value does not match the required pattern",
3135
3170
  validatorFailed: "Validation failed",
3136
3171
  validatorError: "Validation error occurred"
3172
+ },
3173
+ inputOtp: {
3174
+ groupLabel: "One-time password",
3175
+ slotLabel: "Character {index} of {total}"
3176
+ },
3177
+ tagsInput: {
3178
+ removeTagLabel: "Remove {tag}",
3179
+ clearAllLabel: "Clear all tags"
3137
3180
  }
3138
3181
  };
3139
3182
 
@@ -7781,6 +7824,235 @@ function injectDropdownStyles() {
7781
7824
  }
7782
7825
  var DROPDOWN_ENTER_CLASS = "tiger-dropdown-enter";
7783
7826
 
7827
+ // src/utils/context-menu-utils.ts
7828
+ var CONTEXT_MENU_POINT_SIZE = 1;
7829
+ var CONTEXT_MENU_ENTER_CLASS = DROPDOWN_ENTER_CLASS;
7830
+ var CONTEXT_MENU_SUB_CHEVRON_PATH = "M9 5l7 7-7 7";
7831
+ function injectContextMenuStyles() {
7832
+ injectDropdownStyles();
7833
+ }
7834
+ function getContextMenuContainerClasses() {
7835
+ return classNames("tiger-context-menu", "relative");
7836
+ }
7837
+ function getContextMenuTriggerClasses(disabled) {
7838
+ return classNames(
7839
+ "tiger-context-menu-trigger",
7840
+ disabled ? "cursor-not-allowed opacity-50 pointer-events-none" : void 0
7841
+ );
7842
+ }
7843
+ function getContextMenuMenuClasses() {
7844
+ return classNames("tiger-context-menu-menu", getDropdownMenuClasses());
7845
+ }
7846
+ function getContextMenuItemClasses(disabled, divided) {
7847
+ return classNames("tiger-context-menu-item", getDropdownItemClasses(disabled, divided));
7848
+ }
7849
+ function getContextMenuSubTriggerClasses(disabled) {
7850
+ return classNames(getContextMenuItemClasses(disabled, false), "justify-between");
7851
+ }
7852
+ function getContextMenuSubChevronClasses() {
7853
+ return classNames(
7854
+ "tiger-context-menu-sub-chevron",
7855
+ "w-3.5 h-3.5 shrink-0",
7856
+ "text-[var(--tiger-text-muted,#9ca3af)]"
7857
+ );
7858
+ }
7859
+ function getContextMenuPointStyle(point) {
7860
+ return {
7861
+ position: "fixed",
7862
+ left: `${point.x}px`,
7863
+ top: `${point.y}px`,
7864
+ width: `${CONTEXT_MENU_POINT_SIZE}px`,
7865
+ height: `${CONTEXT_MENU_POINT_SIZE}px`,
7866
+ margin: "0px",
7867
+ padding: "0px",
7868
+ border: "0px",
7869
+ pointerEvents: "none"
7870
+ };
7871
+ }
7872
+ function getContextMenuPointFromEvent(event) {
7873
+ return { x: event.clientX, y: event.clientY };
7874
+ }
7875
+ function getContextMenuPointFromElement(element) {
7876
+ const rect = element.getBoundingClientRect();
7877
+ return { x: rect.left, y: rect.top };
7878
+ }
7879
+ function getContextMenuOpenPoint(event, fallbackElement) {
7880
+ if (event) return getContextMenuPointFromEvent(event);
7881
+ if (fallbackElement) return getContextMenuPointFromElement(fallbackElement);
7882
+ return { x: 0, y: 0 };
7883
+ }
7884
+ function isContextMenuKeyboardEvent(event) {
7885
+ return event.key === "ContextMenu" || event.key === "F10" && event.shiftKey;
7886
+ }
7887
+
7888
+ // src/utils/navigation-menu-utils.ts
7889
+ var NAVIGATION_MENU_DEFAULT_DELAY_DURATION = 100;
7890
+ var NAVIGATION_MENU_DEFAULT_SKIP_DELAY_DURATION = 150;
7891
+ var NAVIGATION_MENU_DEFAULT_OFFSET = 4;
7892
+ var NAVIGATION_MENU_ENTER_CLASS = DROPDOWN_ENTER_CLASS;
7893
+ var NAVIGATION_MENU_CHEVRON_PATH = DROPDOWN_CHEVRON_PATH;
7894
+ var NAVIGATION_MENU_BAR_ITEM_ATTR = "data-tiger-navigation-menu-bar-item";
7895
+ function injectNavigationMenuStyles() {
7896
+ injectDropdownStyles();
7897
+ }
7898
+ function isNavigationMenuValueOpen(itemValue, openValue) {
7899
+ return openValue !== null && openValue !== void 0 && openValue !== "" && openValue === itemValue;
7900
+ }
7901
+ function isNavigationMenuOpen(openValue) {
7902
+ return openValue !== null && openValue !== void 0 && openValue !== "";
7903
+ }
7904
+ function resolveNavigationMenuOpenValue(options) {
7905
+ const next = options.value !== void 0 ? options.value : options.internalValue;
7906
+ if (options.open === false) return null;
7907
+ if (!isNavigationMenuOpen(next)) return null;
7908
+ return next;
7909
+ }
7910
+ function shouldSkipNavigationMenuOpenDelay(lastOpenAt, now, skipDelayDuration) {
7911
+ if (lastOpenAt <= 0) return false;
7912
+ return now - lastOpenAt < skipDelayDuration;
7913
+ }
7914
+ function isNavigationMenuTriggerOpenKey(key) {
7915
+ return key === "Enter" || key === " " || key === "ArrowDown";
7916
+ }
7917
+ function getNavigationMenuBarItems(container) {
7918
+ return Array.from(
7919
+ container.querySelectorAll(`[${NAVIGATION_MENU_BAR_ITEM_ATTR}]`)
7920
+ ).filter((el) => {
7921
+ if (el.disabled) return false;
7922
+ if (el.getAttribute("aria-disabled") === "true") return false;
7923
+ return true;
7924
+ });
7925
+ }
7926
+ function handleMenubarNavigation(container, event) {
7927
+ const items = getNavigationMenuBarItems(container);
7928
+ if (items.length === 0) return false;
7929
+ const activeElement = container.ownerDocument?.activeElement ?? null;
7930
+ const currentIndex = items.indexOf(activeElement);
7931
+ let nextIndex = -1;
7932
+ switch (event.key) {
7933
+ case "ArrowRight":
7934
+ nextIndex = currentIndex < items.length - 1 ? currentIndex + 1 : 0;
7935
+ break;
7936
+ case "ArrowLeft":
7937
+ nextIndex = currentIndex > 0 ? currentIndex - 1 : items.length - 1;
7938
+ break;
7939
+ case "Home":
7940
+ nextIndex = 0;
7941
+ break;
7942
+ case "End":
7943
+ nextIndex = items.length - 1;
7944
+ break;
7945
+ default:
7946
+ return false;
7947
+ }
7948
+ event.preventDefault();
7949
+ const next = items[nextIndex];
7950
+ items.forEach((el) => {
7951
+ el.tabIndex = el === next ? 0 : -1;
7952
+ });
7953
+ next.focus();
7954
+ return true;
7955
+ }
7956
+ function initNavigationMenuRovingTabIndex(root) {
7957
+ const items = getNavigationMenuBarItems(root);
7958
+ if (items.length === 0) return;
7959
+ const hasActive = items.some((el) => el.tabIndex === 0);
7960
+ if (hasActive) return;
7961
+ items.forEach((el, index) => {
7962
+ el.tabIndex = index === 0 ? 0 : -1;
7963
+ });
7964
+ }
7965
+ function getNavigationMenuClasses() {
7966
+ return classNames("tiger-navigation-menu", "relative");
7967
+ }
7968
+ function getNavigationMenuListClasses() {
7969
+ return classNames(
7970
+ "tiger-navigation-menu-list",
7971
+ "flex flex-row flex-wrap items-center gap-1",
7972
+ "m-0 p-1",
7973
+ "list-none"
7974
+ );
7975
+ }
7976
+ function getNavigationMenuItemClasses() {
7977
+ return classNames("tiger-navigation-menu-item", "relative");
7978
+ }
7979
+ function getNavigationMenuTriggerClasses(disabled, open) {
7980
+ return classNames(
7981
+ "tiger-navigation-menu-trigger",
7982
+ "inline-flex items-center gap-1.5",
7983
+ "px-3 py-2",
7984
+ "rounded-[var(--tiger-radius-md,0.5rem)]",
7985
+ "text-sm font-medium text-[var(--tiger-text,#374151)]",
7986
+ "bg-transparent border-0",
7987
+ "select-none appearance-none",
7988
+ "transition-colors duration-150",
7989
+ "focus:outline-none",
7990
+ "focus-visible:ring-2 focus-visible:ring-[var(--tiger-focus-ring,var(--tiger-primary,#2563eb))]/40",
7991
+ disabled ? "cursor-not-allowed opacity-50 pointer-events-none" : "cursor-pointer hover:bg-[var(--tiger-surface-muted,#f3f4f6)]",
7992
+ open && "bg-[var(--tiger-surface-muted,#f3f4f6)]"
7993
+ );
7994
+ }
7995
+ function getNavigationMenuChevronClasses(open) {
7996
+ return classNames("tiger-navigation-menu-chevron", getDropdownChevronClasses(open));
7997
+ }
7998
+ function getNavigationMenuContentClasses(mega) {
7999
+ return classNames(
8000
+ "tiger-navigation-menu-content",
8001
+ getDropdownMenuClasses(),
8002
+ mega && "min-w-[28rem]! p-4"
8003
+ );
8004
+ }
8005
+ function getNavigationMenuLinkClasses(disabled, inPanel, active = false) {
8006
+ if (inPanel) {
8007
+ return classNames(
8008
+ "tiger-navigation-menu-link",
8009
+ getDropdownItemClasses(disabled, false),
8010
+ active && "bg-[var(--tiger-surface-muted,#f3f4f6)] font-medium"
8011
+ );
8012
+ }
8013
+ return classNames("tiger-navigation-menu-link", getNavigationMenuTriggerClasses(disabled, active));
8014
+ }
8015
+
8016
+ // src/types/page-header.ts
8017
+ var PAGE_HEADER_DEFAULT_BACK_ARIA_LABEL = "Back";
8018
+
8019
+ // src/utils/page-header-utils.ts
8020
+ var pageHeaderRootClasses = "tiger-page-header flex w-full flex-col gap-3 border-b border-[var(--tiger-border,#e5e7eb)] pb-4";
8021
+ var pageHeaderHeadingRowClasses = "tiger-page-header-heading flex w-full items-start justify-between gap-4";
8022
+ var pageHeaderStartClasses = "tiger-page-header-start flex min-w-0 items-start gap-2";
8023
+ var pageHeaderMainClasses = "tiger-page-header-main flex min-w-0 flex-1 flex-col gap-1";
8024
+ var pageHeaderTitleRowClasses = "tiger-page-header-title-row flex min-w-0 flex-wrap items-baseline gap-x-3 gap-y-1";
8025
+ var pageHeaderTitleClasses = "tiger-page-header-title text-xl font-semibold leading-7 text-[var(--tiger-text,#111827)]";
8026
+ var pageHeaderSubtitleClasses = "tiger-page-header-subtitle text-sm leading-6 text-[var(--tiger-text-muted,#6b7280)]";
8027
+ var pageHeaderActionsClasses = "tiger-page-header-actions ml-auto flex shrink-0 flex-wrap items-center justify-end gap-2";
8028
+ var pageHeaderBackWrapClasses = "tiger-page-header-back flex shrink-0 items-center pt-0.5";
8029
+ var pageHeaderBackButtonClasses = "h-8 w-8 shrink-0 !px-0";
8030
+ var pageHeaderBackIconClasses = "h-5 w-5 rtl:-scale-x-100";
8031
+ var pageHeaderContentClasses = "tiger-page-header-content min-w-0";
8032
+ function resolvePageHeaderBackVisibility(input) {
8033
+ if (input.showBack === false) return false;
8034
+ if (input.showBack === true) return true;
8035
+ return Boolean(input.hasHandler) || Boolean(input.hasBackHref) || Boolean(input.hasBackOverride);
8036
+ }
8037
+ function resolvePageHeaderBackAriaLabel(label) {
8038
+ if (typeof label === "string") {
8039
+ const trimmed = label.trim();
8040
+ if (trimmed) return trimmed;
8041
+ }
8042
+ return PAGE_HEADER_DEFAULT_BACK_ARIA_LABEL;
8043
+ }
8044
+ function hasPageHeaderHeadingContent(flags) {
8045
+ return Boolean(
8046
+ flags.showBack || flags.hasBreadcrumb || flags.hasTitle || flags.hasSubtitle || flags.hasActions
8047
+ );
8048
+ }
8049
+ function getPageHeaderRootClasses(className) {
8050
+ return classNames(pageHeaderRootClasses, className);
8051
+ }
8052
+ function getPageHeaderBackButtonClasses(className) {
8053
+ return classNames(pageHeaderBackButtonClasses, className);
8054
+ }
8055
+
7784
8056
  // src/utils/drawer-utils.ts
7785
8057
  function getDrawerMaskClasses(visible) {
7786
8058
  return classNames(
@@ -8357,6 +8629,239 @@ function injectLoadingAnimationStyles() {
8357
8629
  }
8358
8630
  }
8359
8631
 
8632
+ // src/utils/loading-bar-utils.ts
8633
+ var DEFAULT_LOADING_BAR_HEIGHT = 2;
8634
+ var DEFAULT_LOADING_BAR_COLOR = "primary";
8635
+ var DEFAULT_LOADING_BAR_ARIA_LABEL = "Loading";
8636
+ var LOADING_BAR_START_PERCENTAGE = 8;
8637
+ var LOADING_BAR_MAX_TRICKLE_PERCENTAGE = 94;
8638
+ var LOADING_BAR_TRICKLE_INTERVAL_MS = 200;
8639
+ var LOADING_BAR_FINISH_HIDE_DELAY_MS = 300;
8640
+ var LOADING_BAR_CONTAINER_ID = "tiger-loading-bar-container";
8641
+ var LOADING_BAR_CONTAINER_ROOT_ID = `${LOADING_BAR_CONTAINER_ID}-root`;
8642
+ var loadingBarContainerBaseClasses = "fixed top-0 left-0 right-0 z-[10000] pointer-events-none overflow-hidden";
8643
+ var loadingBarFillBaseClasses = "block w-full origin-left transition-transform duration-200 ease-out motion-reduce:transition-none";
8644
+ var loadingBarColorClasses = {
8645
+ primary: "bg-[color:var(--tiger-primary,#2563eb)]",
8646
+ success: "bg-[color:var(--tiger-success,#16a34a)]",
8647
+ warning: "bg-[color:var(--tiger-warning,#f59e0b)]",
8648
+ danger: "bg-[color:var(--tiger-error,#dc2626)]",
8649
+ info: "bg-[color:var(--tiger-info,#0ea5e9)]"
8650
+ };
8651
+ function createInitialLoadingBarState() {
8652
+ return {
8653
+ visible: false,
8654
+ percentage: 0,
8655
+ status: "idle",
8656
+ color: DEFAULT_LOADING_BAR_COLOR,
8657
+ height: DEFAULT_LOADING_BAR_HEIGHT,
8658
+ startedCount: 0
8659
+ };
8660
+ }
8661
+ function clampLoadingBarPercentage(percentage) {
8662
+ if (!Number.isFinite(percentage)) return 0;
8663
+ return Math.max(0, Math.min(100, percentage));
8664
+ }
8665
+ function resolveLoadingBarColor(color) {
8666
+ if (color && color in loadingBarColorClasses) return color;
8667
+ return DEFAULT_LOADING_BAR_COLOR;
8668
+ }
8669
+ function resolveLoadingBarHeight(height) {
8670
+ if (typeof height !== "number" || !Number.isFinite(height) || height <= 0) {
8671
+ return DEFAULT_LOADING_BAR_HEIGHT;
8672
+ }
8673
+ return height;
8674
+ }
8675
+ function resolveLoadingBarFillColor(status, color) {
8676
+ if (status === "error") return "danger";
8677
+ return resolveLoadingBarColor(color);
8678
+ }
8679
+ function resolveLoadingBarAriaLabel(ariaLabel) {
8680
+ const trimmed = ariaLabel?.trim();
8681
+ return trimmed ? trimmed : DEFAULT_LOADING_BAR_ARIA_LABEL;
8682
+ }
8683
+ function getLoadingBarColorClasses(color) {
8684
+ return loadingBarColorClasses[resolveLoadingBarColor(color)];
8685
+ }
8686
+ function getLoadingBarContainerClasses(className) {
8687
+ return classNames(loadingBarContainerBaseClasses, className);
8688
+ }
8689
+ function getLoadingBarFillClasses(status, color) {
8690
+ return classNames(
8691
+ loadingBarFillBaseClasses,
8692
+ getLoadingBarColorClasses(resolveLoadingBarFillColor(status, color))
8693
+ );
8694
+ }
8695
+ function getLoadingBarFillStyle(percentage, height) {
8696
+ return {
8697
+ transform: `scaleX(${clampLoadingBarPercentage(percentage) / 100})`,
8698
+ height: `${resolveLoadingBarHeight(height)}px`
8699
+ };
8700
+ }
8701
+ function nextLoadingBarTricklePercentage(current, random = Math.random) {
8702
+ const clamped = clampLoadingBarPercentage(current);
8703
+ if (clamped >= LOADING_BAR_MAX_TRICKLE_PERCENTAGE) {
8704
+ return LOADING_BAR_MAX_TRICKLE_PERCENTAGE;
8705
+ }
8706
+ const remaining = LOADING_BAR_MAX_TRICKLE_PERCENTAGE - clamped;
8707
+ const rawSample = random();
8708
+ const sample = Number.isFinite(rawSample) ? Math.min(1, Math.max(0, rawSample)) : 0.5;
8709
+ const step = Math.max(0.5, remaining * 0.08 * (0.4 + sample));
8710
+ return Math.min(LOADING_BAR_MAX_TRICKLE_PERCENTAGE, clamped + step);
8711
+ }
8712
+ function resolveLoadingBarMountTarget(container) {
8713
+ if (!isBrowser()) return null;
8714
+ if (!container) return document.body;
8715
+ if (typeof container === "string") {
8716
+ const found = document.querySelector(container);
8717
+ return found instanceof HTMLElement ? found : document.body;
8718
+ }
8719
+ return container;
8720
+ }
8721
+ function mergeStartOptions(state, options) {
8722
+ return {
8723
+ ...state,
8724
+ color: resolveLoadingBarColor(options?.color ?? state.color),
8725
+ height: resolveLoadingBarHeight(options?.height ?? state.height),
8726
+ className: options?.className ?? state.className,
8727
+ style: options?.style ?? state.style,
8728
+ ariaLabel: options?.ariaLabel ?? state.ariaLabel,
8729
+ container: options?.container ?? state.container
8730
+ };
8731
+ }
8732
+ function createLoadingBarController(hooks = {}) {
8733
+ let state = createInitialLoadingBarState();
8734
+ const listeners = /* @__PURE__ */ new Set();
8735
+ let trickleTimer;
8736
+ let hideTimer;
8737
+ const schedule = hooks.setTimeout ?? ((handler, timeout) => globalThis.setTimeout(handler, timeout));
8738
+ const cancel = hooks.clearTimeout ?? ((id) => globalThis.clearTimeout(id));
8739
+ function emit() {
8740
+ listeners.forEach((listener) => listener());
8741
+ }
8742
+ function stopTrickle() {
8743
+ if (trickleTimer === void 0) return;
8744
+ cancel(trickleTimer);
8745
+ trickleTimer = void 0;
8746
+ }
8747
+ function stopHide() {
8748
+ if (hideTimer === void 0) return;
8749
+ cancel(hideTimer);
8750
+ hideTimer = void 0;
8751
+ }
8752
+ function hideNow() {
8753
+ stopTrickle();
8754
+ stopHide();
8755
+ state = {
8756
+ ...createInitialLoadingBarState(),
8757
+ color: state.color,
8758
+ height: state.height,
8759
+ className: state.className,
8760
+ style: state.style,
8761
+ ariaLabel: state.ariaLabel,
8762
+ container: state.container
8763
+ };
8764
+ emit();
8765
+ }
8766
+ function scheduleHide() {
8767
+ stopHide();
8768
+ if (!isBrowser() && !hooks.setTimeout) {
8769
+ hideNow();
8770
+ return;
8771
+ }
8772
+ hideTimer = schedule(() => {
8773
+ hideTimer = void 0;
8774
+ hideNow();
8775
+ }, LOADING_BAR_FINISH_HIDE_DELAY_MS);
8776
+ }
8777
+ function tickTrickle() {
8778
+ if (state.status !== "loading" || state.startedCount <= 0) {
8779
+ stopTrickle();
8780
+ return;
8781
+ }
8782
+ state = {
8783
+ ...state,
8784
+ percentage: nextLoadingBarTricklePercentage(state.percentage)
8785
+ };
8786
+ emit();
8787
+ trickleTimer = schedule(tickTrickle, LOADING_BAR_TRICKLE_INTERVAL_MS);
8788
+ }
8789
+ function startTrickle() {
8790
+ stopTrickle();
8791
+ if (!isBrowser() && !hooks.setTimeout) return;
8792
+ trickleTimer = schedule(tickTrickle, LOADING_BAR_TRICKLE_INTERVAL_MS);
8793
+ }
8794
+ function start(options) {
8795
+ stopHide();
8796
+ const nextCount = state.startedCount + 1;
8797
+ const isFresh = state.status !== "loading" || !state.visible;
8798
+ state = mergeStartOptions(state, options);
8799
+ state = {
8800
+ ...state,
8801
+ visible: true,
8802
+ status: "loading",
8803
+ startedCount: nextCount,
8804
+ percentage: isFresh ? LOADING_BAR_START_PERCENTAGE : state.percentage
8805
+ };
8806
+ emit();
8807
+ if (isFresh) {
8808
+ startTrickle();
8809
+ }
8810
+ }
8811
+ function finish() {
8812
+ if (state.startedCount <= 0 && state.status !== "loading") {
8813
+ return;
8814
+ }
8815
+ const nextCount = Math.max(0, state.startedCount - 1);
8816
+ if (nextCount > 0) {
8817
+ state = { ...state, startedCount: nextCount };
8818
+ emit();
8819
+ return;
8820
+ }
8821
+ stopTrickle();
8822
+ state = {
8823
+ ...state,
8824
+ visible: true,
8825
+ startedCount: 0,
8826
+ percentage: 100,
8827
+ status: "success"
8828
+ };
8829
+ emit();
8830
+ scheduleHide();
8831
+ }
8832
+ function error() {
8833
+ stopTrickle();
8834
+ state = {
8835
+ ...state,
8836
+ visible: true,
8837
+ startedCount: 0,
8838
+ percentage: 100,
8839
+ status: "error"
8840
+ };
8841
+ emit();
8842
+ scheduleHide();
8843
+ }
8844
+ function clear() {
8845
+ stopTrickle();
8846
+ stopHide();
8847
+ state = createInitialLoadingBarState();
8848
+ emit();
8849
+ }
8850
+ return {
8851
+ getState: () => ({ ...state }),
8852
+ start,
8853
+ finish,
8854
+ error,
8855
+ clear,
8856
+ subscribe: (listener) => {
8857
+ listeners.add(listener);
8858
+ return () => {
8859
+ listeners.delete(listener);
8860
+ };
8861
+ }
8862
+ };
8863
+ }
8864
+
8360
8865
  // src/utils/floating-popup-utils.ts
8361
8866
  function createFloatingIdFactory(prefix) {
8362
8867
  let counter = 0;
@@ -8949,93 +9454,590 @@ function getTextClasses(props) {
8949
9454
  );
8950
9455
  }
8951
9456
 
8952
- // src/utils/image-utils.ts
8953
- var imageBaseClasses = "relative inline-block overflow-hidden";
8954
- function getImageImgClasses(fit) {
8955
- const fitMap = {
8956
- contain: "object-contain",
8957
- cover: "object-cover",
8958
- fill: "object-fill",
8959
- none: "object-none",
8960
- "scale-down": "object-scale-down"
8961
- };
8962
- return classNames("block w-full h-full", fitMap[fit]);
9457
+ // src/types/kbd.ts
9458
+ var DEFAULT_KBD_SEPARATOR = "+";
9459
+ var DEFAULT_KBD_SIZE = "md";
9460
+ var DEFAULT_KBD_VARIANT = "default";
9461
+
9462
+ // src/utils/kbd-utils.ts
9463
+ var kbdBaseClasses = "tiger-kbd inline-flex items-center rounded-[var(--tiger-radius-sm,0.375rem)] border font-medium font-mono align-middle whitespace-nowrap transition-colors";
9464
+ var kbdKeyClasses = "tiger-kbd-key border-0 bg-transparent p-0 shadow-none rounded-none";
9465
+ var kbdSeparatorClasses = "tiger-kbd-separator";
9466
+ var kbdSubtleVariantClasses = "border-transparent bg-[var(--tiger-surface-muted,#f9fafb)] text-[var(--tiger-text-muted,#6b7280)]";
9467
+ function normalizeKbdKeys(keys) {
9468
+ if (keys == null) return [];
9469
+ if (typeof keys === "string") {
9470
+ const trimmed = keys.trim();
9471
+ return trimmed ? [trimmed] : [];
9472
+ }
9473
+ if (!Array.isArray(keys)) return [];
9474
+ const result = [];
9475
+ for (const key of keys) {
9476
+ if (typeof key !== "string") continue;
9477
+ const trimmed = key.trim();
9478
+ if (trimmed) result.push(trimmed);
9479
+ }
9480
+ return result;
8963
9481
  }
8964
- var imageErrorClasses = "flex items-center justify-center w-full h-full bg-[var(--tiger-image-error-bg,#f3f4f6)] text-[var(--tiger-image-error-text,#9ca3af)]";
8965
- var imageLoadingClasses = "flex items-center justify-center w-full h-full bg-[var(--tiger-image-error-bg,#f3f4f6)] text-[var(--tiger-image-error-text,#9ca3af)] animate-pulse";
8966
- var imagePreviewCursorClass = "cursor-pointer";
8967
- var imageErrorIconPath = "M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z";
8968
- var zoomInIconPath = "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0zM10 7v6m3-3H7";
8969
- var zoomOutIconPath = "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0zM13 10H7";
8970
- var resetIconPath = "M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15";
8971
- var prevIconPath = "M15 19l-7-7 7-7";
8972
- var nextIconPath = "M9 5l7 7-7 7";
8973
- var previewCloseIconPath = "M6 18L18 6M6 6l12 12";
8974
- var imagePreviewMaskClasses = "fixed inset-0 bg-[var(--tiger-image-mask,rgba(0,0,0,0.85))] transition-opacity";
8975
- var imagePreviewWrapperClasses = "fixed inset-0 flex items-center justify-center select-none";
8976
- var imagePreviewImgClasses = "max-w-none transition-transform duration-150 ease-out cursor-grab active:cursor-grabbing touch-none";
8977
- var imagePreviewToolbarClasses = "absolute bottom-6 left-1/2 -translate-x-1/2 flex items-center gap-2 px-4 py-2 rounded-full bg-[var(--tiger-image-toolbar-bg,rgba(0,0,0,0.6))] text-white";
8978
- var imagePreviewToolbarBtnClasses = "flex items-center justify-center w-8 h-8 rounded-full hover:bg-white/20 transition-colors focus:outline-none focus:ring-2 focus:ring-white/50 disabled:opacity-40 disabled:cursor-not-allowed";
8979
- var imagePreviewNavBtnClasses = "absolute top-1/2 -translate-y-1/2 flex items-center justify-center w-10 h-10 rounded-full bg-[var(--tiger-image-toolbar-bg,rgba(0,0,0,0.6))] text-white hover:bg-white/20 transition-colors focus:outline-none focus:ring-2 focus:ring-white/50 disabled:opacity-40 disabled:cursor-not-allowed";
8980
- var imagePreviewCloseBtnClasses = "absolute top-4 right-4 flex items-center justify-center w-10 h-10 rounded-full bg-[var(--tiger-image-toolbar-bg,rgba(0,0,0,0.6))] text-white hover:bg-white/20 transition-colors focus:outline-none focus:ring-2 focus:ring-white/50";
8981
- var imagePreviewCounterClasses = "text-sm text-white/80 mx-2 tabular-nums";
8982
- var imageCropperContainerClasses = "relative overflow-hidden bg-[var(--tiger-image-cropper-bg,#0f172a)] rounded-[var(--tiger-radius-lg,0.75rem)] select-none touch-none shadow-inner border border-white/10 tiger-image-cropper-checkerboard";
8983
- var imageCropperImgClasses = "absolute top-0 left-0 max-w-none pointer-events-none";
8984
- var imageCropperMaskClasses = "absolute inset-0 pointer-events-none";
8985
- var imageCropperSelectionClasses = "absolute border-2 border-[var(--tiger-image-cropper-border,#ffffff)] pointer-events-none shadow-[0_0_0_9999px_rgba(0,0,0,0.65),0_0_15px_rgba(255,255,255,0.4)] transition-shadow duration-300";
8986
- var imageCropperGuideClasses = "absolute border-[var(--tiger-image-cropper-border,rgba(255,255,255,0.25))] pointer-events-none opacity-40 transition-opacity duration-300";
8987
- var imageCropperDragAreaClasses = "absolute cursor-move";
8988
- function getCropperHandleClasses(handle) {
8989
- const base = "absolute w-3.5 h-3.5 rounded-full bg-white border-2 border-[var(--tiger-primary,#2563eb)] shadow-md hover:scale-125 hover:bg-[var(--tiger-primary,#2563eb)] hover:border-white transition-all duration-200 cursor-pointer focus:outline-none focus:ring-2 focus:ring-[var(--tiger-primary,#2563eb)]";
8990
- const positionMap = {
8991
- nw: "-top-1.75 -left-1.75 cursor-nw-resize",
8992
- n: "-top-1.75 left-1/2 -translate-x-1/2 cursor-n-resize",
8993
- ne: "-top-1.75 -right-1.75 cursor-ne-resize",
8994
- e: "top-1/2 -right-1.75 -translate-y-1/2 cursor-e-resize",
8995
- se: "-bottom-1.75 -right-1.75 cursor-se-resize",
8996
- s: "-bottom-1.75 left-1/2 -translate-x-1/2 cursor-s-resize",
8997
- sw: "-bottom-1.75 -left-1.75 cursor-sw-resize",
8998
- w: "top-1/2 -left-1.75 -translate-y-1/2 cursor-w-resize"
8999
- };
9000
- return classNames(base, positionMap[handle]);
9482
+ function resolveKbdSeparator(separator) {
9483
+ if (typeof separator === "string") {
9484
+ const trimmed = separator.trim();
9485
+ if (trimmed) return trimmed;
9486
+ }
9487
+ return DEFAULT_KBD_SEPARATOR;
9001
9488
  }
9002
- var CROP_HANDLES = ["nw", "n", "ne", "e", "se", "s", "sw", "w"];
9003
- var cropUploadTriggerClasses = "inline-flex items-center justify-center gap-2.5 px-5 py-2.5 border-2 border-dashed border-[var(--tiger-border,#d1d5db)] rounded-[var(--tiger-radius-lg,0.75rem)] text-[var(--tiger-text-secondary,#4b5563)] bg-[var(--tiger-surface-muted,#f9fafb)] hover:bg-[var(--tiger-surface,#ffffff)] hover:border-[var(--tiger-primary,#2563eb)] hover:text-[var(--tiger-primary,#2563eb)] hover:scale-[1.02] active:scale-[0.98] hover:shadow-md transition-all duration-300 ease-out cursor-pointer focus:outline-none focus:ring-2 focus:ring-[var(--tiger-primary,#2563eb)] focus:ring-offset-2 dark:bg-neutral-900 dark:hover:bg-neutral-800";
9004
- var cropUploadTriggerDisabledClasses = "inline-flex items-center justify-center gap-2.5 px-5 py-2.5 border-2 border-dashed border-[var(--tiger-border,#d1d5db)] rounded-[var(--tiger-radius-lg,0.75rem)] text-[var(--tiger-text-disabled,#9ca3af)] bg-[var(--tiger-surface-muted,#f9fafb)] cursor-not-allowed opacity-60 dark:bg-neutral-900/50";
9005
- var uploadPlusIconPath = "M12 4v16m8-8H4";
9006
- function clampScale(scale, min, max) {
9007
- return Math.min(Math.max(scale, min), max);
9489
+ function resolveKbdSize(size2) {
9490
+ if (size2 === "sm" || size2 === "md" || size2 === "lg") return size2;
9491
+ return DEFAULT_KBD_SIZE;
9008
9492
  }
9009
- function calculateTransform(scale, offsetX, offsetY) {
9010
- return `translate(${offsetX}px, ${offsetY}px) scale(${scale})`;
9493
+ function resolveKbdVariant(variant) {
9494
+ if (variant === "default" || variant === "subtle") return variant;
9495
+ return DEFAULT_KBD_VARIANT;
9011
9496
  }
9012
- function getPreviewNavState(currentIndex, total) {
9013
- return {
9014
- hasPrev: currentIndex > 0,
9015
- hasNext: currentIndex < total - 1,
9016
- counter: total > 1 ? `${currentIndex + 1} / ${total}` : ""
9017
- };
9497
+ function getKbdParts(keys, separator) {
9498
+ const normalized = normalizeKbdKeys(keys);
9499
+ const resolvedSeparator = resolveKbdSeparator(separator);
9500
+ const parts = [];
9501
+ for (let index = 0; index < normalized.length; index++) {
9502
+ if (index > 0) {
9503
+ parts.push({ type: "separator", value: resolvedSeparator });
9504
+ }
9505
+ parts.push({ type: "key", value: normalized[index] });
9506
+ }
9507
+ return parts;
9018
9508
  }
9019
- function constrainCropRect(rect, imageWidth, imageHeight, aspectRatio) {
9020
- let { x, y, width, height } = rect;
9021
- if (aspectRatio && aspectRatio > 0) {
9022
- const currentRatio = width / height;
9023
- if (currentRatio > aspectRatio) {
9024
- width = height * aspectRatio;
9025
- } else {
9026
- height = width / aspectRatio;
9509
+ function formatKbdCombo(keys, separator) {
9510
+ const normalized = normalizeKbdKeys(keys);
9511
+ if (normalized.length === 0) return "";
9512
+ return normalized.join(` ${resolveKbdSeparator(separator)} `);
9513
+ }
9514
+ function getKbdVariantClasses(variant) {
9515
+ if (resolveKbdVariant(variant) === "subtle") return kbdSubtleVariantClasses;
9516
+ return getTagVariantClasses("default");
9517
+ }
9518
+ function getKbdRootClasses(input = {}) {
9519
+ const size2 = resolveKbdSize(input.size);
9520
+ return classNames(
9521
+ kbdBaseClasses,
9522
+ tagSizeClasses[size2],
9523
+ getKbdVariantClasses(input.variant),
9524
+ input.className
9525
+ );
9526
+ }
9527
+ function formatKbdSeparatorText(separator) {
9528
+ return ` ${resolveKbdSeparator(separator)} `;
9529
+ }
9530
+
9531
+ // src/types/highlight.ts
9532
+ var DEFAULT_HIGHLIGHT_CASE_SENSITIVE = false;
9533
+ var DEFAULT_HIGHLIGHT_GLOBAL = true;
9534
+
9535
+ // src/utils/highlight-utils.ts
9536
+ var highlightRootClasses = "tiger-highlight";
9537
+ var highlightMarkClasses = "tiger-highlight-mark rounded-[var(--tiger-radius-sm,0.375rem)] bg-[color-mix(in_srgb,var(--tiger-warning,#d97706)_20%,transparent)] px-0.5 text-inherit box-decoration-clone";
9538
+ var REGEXP_SPECIAL_CHARS = /[.*+?^${}()|[\]\\]/g;
9539
+ function escapeHighlightKeyword(keyword) {
9540
+ return keyword.replace(REGEXP_SPECIAL_CHARS, "\\$&");
9541
+ }
9542
+ function normalizeHighlightKeywords(keywords) {
9543
+ if (keywords == null) return [];
9544
+ if (typeof keywords === "string" || keywords instanceof RegExp) {
9545
+ return [keywords];
9546
+ }
9547
+ if (!Array.isArray(keywords)) return [];
9548
+ const result = [];
9549
+ for (const item of keywords) {
9550
+ if (typeof item === "string" || item instanceof RegExp) {
9551
+ result.push(item);
9027
9552
  }
9028
9553
  }
9029
- width = Math.min(width, imageWidth);
9030
- height = Math.min(height, imageHeight);
9031
- x = Math.max(0, Math.min(x, imageWidth - width));
9032
- y = Math.max(0, Math.min(y, imageHeight - height));
9033
- return { x, y, width, height };
9554
+ return result;
9034
9555
  }
9035
- function resizeCropRect(rect, handle, dx, dy, imageWidth, imageHeight, aspectRatio, minW = 20, minH = 20) {
9036
- let { x, y, width, height } = rect;
9037
- switch (handle) {
9038
- case "nw":
9556
+ function resolveHighlightCaseSensitive(value) {
9557
+ if (typeof value === "boolean") return value;
9558
+ return DEFAULT_HIGHLIGHT_CASE_SENSITIVE;
9559
+ }
9560
+ function resolveHighlightGlobal(value) {
9561
+ if (typeof value === "boolean") return value;
9562
+ return DEFAULT_HIGHLIGHT_GLOBAL;
9563
+ }
9564
+ function resolveHighlightText(text, fallback) {
9565
+ if (text != null) return text;
9566
+ if (fallback != null) return fallback;
9567
+ return "";
9568
+ }
9569
+ function cloneRegExp(source, global) {
9570
+ const withoutG = source.flags.replace(/g/g, "");
9571
+ const flags = global ? `${withoutG}g` : withoutG;
9572
+ try {
9573
+ return new RegExp(source.source, flags);
9574
+ } catch {
9575
+ return null;
9576
+ }
9577
+ }
9578
+ function collectRegExpRanges(text, pattern, global) {
9579
+ const ranges = [];
9580
+ if (!text) return ranges;
9581
+ try {
9582
+ if (!global) {
9583
+ const match2 = pattern.exec(text);
9584
+ if (match2 && match2[0].length > 0) {
9585
+ ranges.push({ start: match2.index, end: match2.index + match2[0].length });
9586
+ }
9587
+ return ranges;
9588
+ }
9589
+ pattern.lastIndex = 0;
9590
+ let match;
9591
+ let steps = 0;
9592
+ const limit = text.length + 2;
9593
+ while ((match = pattern.exec(text)) !== null) {
9594
+ if (++steps > limit) break;
9595
+ if (match[0].length === 0) {
9596
+ pattern.lastIndex += 1;
9597
+ if (pattern.lastIndex > text.length) break;
9598
+ continue;
9599
+ }
9600
+ ranges.push({ start: match.index, end: match.index + match[0].length });
9601
+ }
9602
+ } catch {
9603
+ return [];
9604
+ }
9605
+ return ranges;
9606
+ }
9607
+ function collectStringRanges(text, keyword, caseSensitive, global) {
9608
+ if (!keyword) return [];
9609
+ const flags = `${global ? "g" : ""}${caseSensitive ? "" : "i"}`;
9610
+ let pattern;
9611
+ try {
9612
+ pattern = new RegExp(escapeHighlightKeyword(keyword), flags);
9613
+ } catch {
9614
+ return [];
9615
+ }
9616
+ return collectRegExpRanges(text, pattern, global);
9617
+ }
9618
+ function sanitizeRange(range, length) {
9619
+ const start = Math.max(0, Math.min(range.start, length));
9620
+ const end = Math.max(0, Math.min(range.end, length));
9621
+ if (end <= start) return null;
9622
+ return { start, end };
9623
+ }
9624
+ function mergeHighlightRanges(ranges) {
9625
+ if (ranges.length === 0) return [];
9626
+ const sorted = ranges.map((range) => ({ start: range.start, end: range.end })).sort((left, right) => left.start - right.start || left.end - right.end);
9627
+ const merged = [{ ...sorted[0] }];
9628
+ for (let index = 1; index < sorted.length; index++) {
9629
+ const current = sorted[index];
9630
+ const last = merged[merged.length - 1];
9631
+ if (current.start <= last.end) {
9632
+ if (current.end > last.end) last.end = current.end;
9633
+ } else {
9634
+ merged.push({ ...current });
9635
+ }
9636
+ }
9637
+ return merged;
9638
+ }
9639
+ function findHighlightRanges(text, keywords, options = {}) {
9640
+ if (!text) return [];
9641
+ const caseSensitive = resolveHighlightCaseSensitive(options.caseSensitive);
9642
+ const global = resolveHighlightGlobal(options.global);
9643
+ const queries = normalizeHighlightKeywords(keywords);
9644
+ const collected = [];
9645
+ for (const query of queries) {
9646
+ if (typeof query === "string") {
9647
+ collected.push(...collectStringRanges(text, query, caseSensitive, global));
9648
+ continue;
9649
+ }
9650
+ const pattern = cloneRegExp(query, global);
9651
+ if (!pattern) continue;
9652
+ collected.push(...collectRegExpRanges(text, pattern, global));
9653
+ }
9654
+ const sanitized = [];
9655
+ for (const range of collected) {
9656
+ const next = sanitizeRange(range, text.length);
9657
+ if (next) sanitized.push(next);
9658
+ }
9659
+ return mergeHighlightRanges(sanitized);
9660
+ }
9661
+ function getHighlightSegments(text, keywords, options = {}) {
9662
+ if (!text) return [];
9663
+ const ranges = findHighlightRanges(text, keywords, options);
9664
+ const segments = [];
9665
+ let cursor = 0;
9666
+ for (const range of ranges) {
9667
+ if (range.start > cursor) {
9668
+ segments.push({
9669
+ text: text.slice(cursor, range.start),
9670
+ highlighted: false,
9671
+ start: cursor,
9672
+ end: range.start
9673
+ });
9674
+ }
9675
+ segments.push({
9676
+ text: text.slice(range.start, range.end),
9677
+ highlighted: true,
9678
+ start: range.start,
9679
+ end: range.end
9680
+ });
9681
+ cursor = range.end;
9682
+ }
9683
+ if (cursor < text.length) {
9684
+ segments.push({
9685
+ text: text.slice(cursor),
9686
+ highlighted: false,
9687
+ start: cursor,
9688
+ end: text.length
9689
+ });
9690
+ }
9691
+ if (segments.length === 0) {
9692
+ segments.push({ text, highlighted: false, start: 0, end: text.length });
9693
+ }
9694
+ return segments;
9695
+ }
9696
+ function getHighlightRootClasses(className) {
9697
+ return classNames(highlightRootClasses, className);
9698
+ }
9699
+ function getHighlightMarkClasses(className) {
9700
+ return classNames(highlightMarkClasses, className);
9701
+ }
9702
+
9703
+ // src/types/marquee.ts
9704
+ var DEFAULT_MARQUEE_DIRECTION = "left";
9705
+ var DEFAULT_MARQUEE_DURATION_MS = 2e4;
9706
+ var DEFAULT_MARQUEE_GAP_PX = 16;
9707
+ var DEFAULT_MARQUEE_REPEAT = 2;
9708
+ var MAX_MARQUEE_REPEAT = 16;
9709
+ var DEFAULT_MARQUEE_PAUSE_ON_HOVER = true;
9710
+ var DEFAULT_MARQUEE_ARIA_LABEL = "Scrolling content";
9711
+
9712
+ // src/utils/marquee-utils.ts
9713
+ var MARQUEE_STYLE_ID = "tiger-ui-marquee-styles";
9714
+ var MARQUEE_DURATION_VAR = "--tiger-marquee-duration";
9715
+ var MARQUEE_COPIES_VAR = "--tiger-marquee-copies";
9716
+ var MARQUEE_GAP_VAR = "--tiger-marquee-gap";
9717
+ var MARQUEE_CSS = `
9718
+ @keyframes tiger-marquee-x {
9719
+ from { transform: translate3d(0, 0, 0); }
9720
+ to { transform: translate3d(calc(-100% / var(${MARQUEE_COPIES_VAR}, 2)), 0, 0); }
9721
+ }
9722
+
9723
+ @keyframes tiger-marquee-y {
9724
+ from { transform: translate3d(0, 0, 0); }
9725
+ to { transform: translate3d(0, calc(-100% / var(${MARQUEE_COPIES_VAR}, 2)), 0); }
9726
+ }
9727
+
9728
+ .tiger-marquee-track {
9729
+ animation: tiger-marquee-x var(${MARQUEE_DURATION_VAR}, 20000ms) linear infinite;
9730
+ }
9731
+
9732
+ .tiger-marquee-vertical > .tiger-marquee-track {
9733
+ animation-name: tiger-marquee-y;
9734
+ }
9735
+
9736
+ .tiger-marquee-reverse > .tiger-marquee-track {
9737
+ animation-direction: reverse;
9738
+ }
9739
+
9740
+ .tiger-marquee-content {
9741
+ gap: var(${MARQUEE_GAP_VAR}, 16px);
9742
+ }
9743
+
9744
+ .tiger-marquee-horizontal > .tiger-marquee-track > .tiger-marquee-content {
9745
+ padding-inline-end: var(${MARQUEE_GAP_VAR}, 16px);
9746
+ }
9747
+
9748
+ .tiger-marquee-vertical > .tiger-marquee-track > .tiger-marquee-content {
9749
+ padding-block-end: var(${MARQUEE_GAP_VAR}, 16px);
9750
+ }
9751
+
9752
+ .tiger-marquee-static > .tiger-marquee-track {
9753
+ animation: none;
9754
+ }
9755
+
9756
+ .tiger-marquee[data-marquee-paused='true'] > .tiger-marquee-track,
9757
+ .tiger-marquee-pause-hover:hover > .tiger-marquee-track,
9758
+ .tiger-marquee-pause-hover:focus-within > .tiger-marquee-track {
9759
+ animation-play-state: paused;
9760
+ }
9761
+
9762
+ @media (prefers-reduced-motion: reduce) {
9763
+ .tiger-marquee {
9764
+ overflow: auto;
9765
+ }
9766
+
9767
+ .tiger-marquee > .tiger-marquee-track {
9768
+ animation: none !important;
9769
+ will-change: auto;
9770
+ }
9771
+
9772
+ .tiger-marquee .tiger-marquee-clone {
9773
+ display: none !important;
9774
+ }
9775
+
9776
+ .tiger-marquee-horizontal > .tiger-marquee-track > .tiger-marquee-content {
9777
+ padding-inline-end: 0;
9778
+ }
9779
+
9780
+ .tiger-marquee-vertical > .tiger-marquee-track > .tiger-marquee-content {
9781
+ padding-block-end: 0;
9782
+ }
9783
+ }
9784
+ `;
9785
+ var marqueeRootClasses = "tiger-marquee overflow-hidden max-w-full";
9786
+ var marqueePauseHoverClasses = "tiger-marquee-pause-hover";
9787
+ var marqueeHorizontalClasses = "tiger-marquee-horizontal";
9788
+ var marqueeVerticalClasses = "tiger-marquee-vertical";
9789
+ var marqueeReverseClasses = "tiger-marquee-reverse";
9790
+ var marqueeStaticClasses = "tiger-marquee-static";
9791
+ var marqueeTrackClasses = "tiger-marquee-track flex w-max";
9792
+ var marqueeTrackVerticalClasses = "flex-col w-full h-max";
9793
+ var marqueeContentClasses = "tiger-marquee-content flex shrink-0 items-center";
9794
+ var marqueeContentVerticalClasses = "flex-col items-stretch";
9795
+ var marqueeCloneClasses = "tiger-marquee-clone";
9796
+ var MARQUEE_DIRECTIONS = /* @__PURE__ */ new Set(["left", "right", "up", "down"]);
9797
+ var isStyleInjected2 = false;
9798
+ function injectMarqueeStyles() {
9799
+ if (!isBrowser() || isStyleInjected2) return;
9800
+ if (document.getElementById(MARQUEE_STYLE_ID)) {
9801
+ isStyleInjected2 = true;
9802
+ return;
9803
+ }
9804
+ const style = document.createElement("style");
9805
+ style.id = MARQUEE_STYLE_ID;
9806
+ style.textContent = MARQUEE_CSS;
9807
+ document.head.appendChild(style);
9808
+ isStyleInjected2 = true;
9809
+ }
9810
+ function resolveMarqueeDirection(direction) {
9811
+ if (direction && MARQUEE_DIRECTIONS.has(direction)) return direction;
9812
+ return DEFAULT_MARQUEE_DIRECTION;
9813
+ }
9814
+ function isMarqueeVertical(direction) {
9815
+ const resolved = resolveMarqueeDirection(direction);
9816
+ return resolved === "up" || resolved === "down";
9817
+ }
9818
+ function isMarqueeReverse(direction) {
9819
+ const resolved = resolveMarqueeDirection(direction);
9820
+ return resolved === "right" || resolved === "down";
9821
+ }
9822
+ function resolveMarqueeDuration(duration) {
9823
+ if (typeof duration === "number" && Number.isFinite(duration) && duration > 0) {
9824
+ return `${duration}ms`;
9825
+ }
9826
+ return `${DEFAULT_MARQUEE_DURATION_MS}ms`;
9827
+ }
9828
+ function resolveMarqueeGap(gap) {
9829
+ if (typeof gap === "number" && Number.isFinite(gap) && gap >= 0) {
9830
+ return `${gap}px`;
9831
+ }
9832
+ if (typeof gap === "string") {
9833
+ const trimmed = gap.trim();
9834
+ if (trimmed) return trimmed;
9835
+ }
9836
+ return `${DEFAULT_MARQUEE_GAP_PX}px`;
9837
+ }
9838
+ function resolveMarqueeRepeat(repeat) {
9839
+ if (typeof repeat === "number" && Number.isFinite(repeat)) {
9840
+ const copies = Math.floor(repeat);
9841
+ if (copies >= 1) return Math.min(copies, MAX_MARQUEE_REPEAT);
9842
+ }
9843
+ return DEFAULT_MARQUEE_REPEAT;
9844
+ }
9845
+ function shouldLoopMarquee(repeat) {
9846
+ return resolveMarqueeRepeat(repeat) >= 2;
9847
+ }
9848
+ function resolveMarqueePauseOnHover(value) {
9849
+ if (typeof value === "boolean") return value;
9850
+ return DEFAULT_MARQUEE_PAUSE_ON_HOVER;
9851
+ }
9852
+ function resolveMarqueeAriaLabel(label) {
9853
+ if (typeof label === "string") {
9854
+ const trimmed = label.trim();
9855
+ if (trimmed) return trimmed;
9856
+ }
9857
+ return DEFAULT_MARQUEE_ARIA_LABEL;
9858
+ }
9859
+ function isMarqueePaused(input) {
9860
+ if (!resolveMarqueePauseOnHover(input.pauseOnHover)) return false;
9861
+ return Boolean(input.hovered || input.focused);
9862
+ }
9863
+ function isMarqueeFocusInside(root, related) {
9864
+ return root instanceof Node && related instanceof Node && root.contains(related);
9865
+ }
9866
+ function getMarqueeTrackStyle(input = {}) {
9867
+ return {
9868
+ [MARQUEE_DURATION_VAR]: resolveMarqueeDuration(input.duration),
9869
+ [MARQUEE_COPIES_VAR]: String(resolveMarqueeRepeat(input.repeat)),
9870
+ [MARQUEE_GAP_VAR]: resolveMarqueeGap(input.gap)
9871
+ };
9872
+ }
9873
+ function getMarqueeRootClasses(input = {}) {
9874
+ const direction = resolveMarqueeDirection(input.direction);
9875
+ const looping = shouldLoopMarquee(input.repeat);
9876
+ return classNames(
9877
+ marqueeRootClasses,
9878
+ isMarqueeVertical(direction) ? marqueeVerticalClasses : marqueeHorizontalClasses,
9879
+ isMarqueeReverse(direction) && marqueeReverseClasses,
9880
+ resolveMarqueePauseOnHover(input.pauseOnHover) && marqueePauseHoverClasses,
9881
+ !looping && marqueeStaticClasses,
9882
+ input.className
9883
+ );
9884
+ }
9885
+ function getMarqueeTrackClasses(direction) {
9886
+ return classNames(
9887
+ marqueeTrackClasses,
9888
+ isMarqueeVertical(direction) && marqueeTrackVerticalClasses
9889
+ );
9890
+ }
9891
+ function getMarqueeContentClasses(input = {}) {
9892
+ return classNames(
9893
+ marqueeContentClasses,
9894
+ isMarqueeVertical(input.direction) && marqueeContentVerticalClasses,
9895
+ input.clone && marqueeCloneClasses,
9896
+ input.className
9897
+ );
9898
+ }
9899
+
9900
+ // src/types/split-button.ts
9901
+ var DEFAULT_SPLIT_BUTTON_TRIGGER_ARIA_LABEL = "More options";
9902
+ var DEFAULT_SPLIT_BUTTON_VARIANT = "primary";
9903
+ var DEFAULT_SPLIT_BUTTON_SIZE = "md";
9904
+
9905
+ // src/utils/split-button-utils.ts
9906
+ var splitButtonRootClasses = "tiger-split-button inline-flex";
9907
+ var splitButtonRootBlockClasses = "w-full";
9908
+ var splitButtonPrimaryClasses = "!rounded-r-none";
9909
+ var splitButtonPrimaryBlockClasses = "min-w-0 flex-1";
9910
+ var splitButtonTriggerClasses = "tiger-split-button-trigger shrink-0 !rounded-l-none -ml-px";
9911
+ var splitButtonTriggerSizeClasses = {
9912
+ xs: "!px-1.5",
9913
+ sm: "!px-2",
9914
+ md: "!px-2.5",
9915
+ lg: "!px-3",
9916
+ xl: "!px-4"
9917
+ };
9918
+ var BUTTON_SIZES = /* @__PURE__ */ new Set(["xs", "sm", "md", "lg", "xl"]);
9919
+ var BUTTON_VARIANTS = /* @__PURE__ */ new Set(["primary", "secondary", "outline", "ghost", "link"]);
9920
+ function resolveSplitButtonSize(size2) {
9921
+ if (size2 && BUTTON_SIZES.has(size2)) return size2;
9922
+ return DEFAULT_SPLIT_BUTTON_SIZE;
9923
+ }
9924
+ function resolveSplitButtonVariant(variant) {
9925
+ if (variant && BUTTON_VARIANTS.has(variant)) return variant;
9926
+ return DEFAULT_SPLIT_BUTTON_VARIANT;
9927
+ }
9928
+ function resolveSplitButtonTriggerAriaLabel(label) {
9929
+ if (typeof label === "string") {
9930
+ const trimmed = label.trim();
9931
+ if (trimmed) return trimmed;
9932
+ }
9933
+ return DEFAULT_SPLIT_BUTTON_TRIGGER_ARIA_LABEL;
9934
+ }
9935
+ function getSplitButtonRootClasses(input = {}) {
9936
+ return classNames(
9937
+ splitButtonRootClasses,
9938
+ input.block && splitButtonRootBlockClasses,
9939
+ input.className
9940
+ );
9941
+ }
9942
+ function getSplitButtonPrimaryClasses(input = {}) {
9943
+ return classNames(
9944
+ splitButtonPrimaryClasses,
9945
+ input.block && splitButtonPrimaryBlockClasses,
9946
+ input.className
9947
+ );
9948
+ }
9949
+ function getSplitButtonTriggerClasses(input = {}) {
9950
+ const size2 = resolveSplitButtonSize(input.size);
9951
+ return classNames(splitButtonTriggerClasses, splitButtonTriggerSizeClasses[size2], input.className);
9952
+ }
9953
+
9954
+ // src/utils/image-utils.ts
9955
+ var imageBaseClasses = "relative inline-block overflow-hidden";
9956
+ function getImageImgClasses(fit) {
9957
+ const fitMap = {
9958
+ contain: "object-contain",
9959
+ cover: "object-cover",
9960
+ fill: "object-fill",
9961
+ none: "object-none",
9962
+ "scale-down": "object-scale-down"
9963
+ };
9964
+ return classNames("block w-full h-full", fitMap[fit]);
9965
+ }
9966
+ var imageErrorClasses = "flex items-center justify-center w-full h-full bg-[var(--tiger-image-error-bg,#f3f4f6)] text-[var(--tiger-image-error-text,#9ca3af)]";
9967
+ var imageLoadingClasses = "flex items-center justify-center w-full h-full bg-[var(--tiger-image-error-bg,#f3f4f6)] text-[var(--tiger-image-error-text,#9ca3af)] animate-pulse";
9968
+ var imagePreviewCursorClass = "cursor-pointer";
9969
+ var imageErrorIconPath = "M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z";
9970
+ var zoomInIconPath = "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0zM10 7v6m3-3H7";
9971
+ var zoomOutIconPath = "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0zM13 10H7";
9972
+ var resetIconPath = "M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15";
9973
+ var prevIconPath = "M15 19l-7-7 7-7";
9974
+ var nextIconPath = "M9 5l7 7-7 7";
9975
+ var previewCloseIconPath = "M6 18L18 6M6 6l12 12";
9976
+ var imagePreviewMaskClasses = "fixed inset-0 bg-[var(--tiger-image-mask,rgba(0,0,0,0.85))] transition-opacity";
9977
+ var imagePreviewWrapperClasses = "fixed inset-0 flex items-center justify-center select-none";
9978
+ var imagePreviewImgClasses = "max-w-none transition-transform duration-150 ease-out cursor-grab active:cursor-grabbing touch-none";
9979
+ var imagePreviewToolbarClasses = "absolute bottom-6 left-1/2 -translate-x-1/2 flex items-center gap-2 px-4 py-2 rounded-full bg-[var(--tiger-image-toolbar-bg,rgba(0,0,0,0.6))] text-white";
9980
+ var imagePreviewToolbarBtnClasses = "flex items-center justify-center w-8 h-8 rounded-full hover:bg-white/20 transition-colors focus:outline-none focus:ring-2 focus:ring-white/50 disabled:opacity-40 disabled:cursor-not-allowed";
9981
+ var imagePreviewNavBtnClasses = "absolute top-1/2 -translate-y-1/2 flex items-center justify-center w-10 h-10 rounded-full bg-[var(--tiger-image-toolbar-bg,rgba(0,0,0,0.6))] text-white hover:bg-white/20 transition-colors focus:outline-none focus:ring-2 focus:ring-white/50 disabled:opacity-40 disabled:cursor-not-allowed";
9982
+ var imagePreviewCloseBtnClasses = "absolute top-4 right-4 flex items-center justify-center w-10 h-10 rounded-full bg-[var(--tiger-image-toolbar-bg,rgba(0,0,0,0.6))] text-white hover:bg-white/20 transition-colors focus:outline-none focus:ring-2 focus:ring-white/50";
9983
+ var imagePreviewCounterClasses = "text-sm text-white/80 mx-2 tabular-nums";
9984
+ var imageCropperContainerClasses = "relative overflow-hidden bg-[var(--tiger-image-cropper-bg,#0f172a)] rounded-[var(--tiger-radius-lg,0.75rem)] select-none touch-none shadow-inner border border-white/10 tiger-image-cropper-checkerboard";
9985
+ var imageCropperImgClasses = "absolute top-0 left-0 max-w-none pointer-events-none";
9986
+ var imageCropperMaskClasses = "absolute inset-0 pointer-events-none";
9987
+ var imageCropperSelectionClasses = "absolute border-2 border-[var(--tiger-image-cropper-border,#ffffff)] pointer-events-none shadow-[0_0_0_9999px_rgba(0,0,0,0.65),0_0_15px_rgba(255,255,255,0.4)] transition-shadow duration-300";
9988
+ var imageCropperGuideClasses = "absolute border-[var(--tiger-image-cropper-border,rgba(255,255,255,0.25))] pointer-events-none opacity-40 transition-opacity duration-300";
9989
+ var imageCropperDragAreaClasses = "absolute cursor-move";
9990
+ function getCropperHandleClasses(handle) {
9991
+ const base = "absolute w-3.5 h-3.5 rounded-full bg-white border-2 border-[var(--tiger-primary,#2563eb)] shadow-md hover:scale-125 hover:bg-[var(--tiger-primary,#2563eb)] hover:border-white transition-all duration-200 cursor-pointer focus:outline-none focus:ring-2 focus:ring-[var(--tiger-primary,#2563eb)]";
9992
+ const positionMap = {
9993
+ nw: "-top-1.75 -left-1.75 cursor-nw-resize",
9994
+ n: "-top-1.75 left-1/2 -translate-x-1/2 cursor-n-resize",
9995
+ ne: "-top-1.75 -right-1.75 cursor-ne-resize",
9996
+ e: "top-1/2 -right-1.75 -translate-y-1/2 cursor-e-resize",
9997
+ se: "-bottom-1.75 -right-1.75 cursor-se-resize",
9998
+ s: "-bottom-1.75 left-1/2 -translate-x-1/2 cursor-s-resize",
9999
+ sw: "-bottom-1.75 -left-1.75 cursor-sw-resize",
10000
+ w: "top-1/2 -left-1.75 -translate-y-1/2 cursor-w-resize"
10001
+ };
10002
+ return classNames(base, positionMap[handle]);
10003
+ }
10004
+ var CROP_HANDLES = ["nw", "n", "ne", "e", "se", "s", "sw", "w"];
10005
+ var cropUploadTriggerClasses = "inline-flex items-center justify-center gap-2.5 px-5 py-2.5 border-2 border-dashed border-[var(--tiger-border,#d1d5db)] rounded-[var(--tiger-radius-lg,0.75rem)] text-[var(--tiger-text-secondary,#4b5563)] bg-[var(--tiger-surface-muted,#f9fafb)] hover:bg-[var(--tiger-surface,#ffffff)] hover:border-[var(--tiger-primary,#2563eb)] hover:text-[var(--tiger-primary,#2563eb)] hover:scale-[1.02] active:scale-[0.98] hover:shadow-md transition-all duration-300 ease-out cursor-pointer focus:outline-none focus:ring-2 focus:ring-[var(--tiger-primary,#2563eb)] focus:ring-offset-2 dark:bg-neutral-900 dark:hover:bg-neutral-800";
10006
+ var cropUploadTriggerDisabledClasses = "inline-flex items-center justify-center gap-2.5 px-5 py-2.5 border-2 border-dashed border-[var(--tiger-border,#d1d5db)] rounded-[var(--tiger-radius-lg,0.75rem)] text-[var(--tiger-text-disabled,#9ca3af)] bg-[var(--tiger-surface-muted,#f9fafb)] cursor-not-allowed opacity-60 dark:bg-neutral-900/50";
10007
+ var uploadPlusIconPath = "M12 4v16m8-8H4";
10008
+ function clampScale(scale, min, max) {
10009
+ return Math.min(Math.max(scale, min), max);
10010
+ }
10011
+ function calculateTransform(scale, offsetX, offsetY) {
10012
+ return `translate(${offsetX}px, ${offsetY}px) scale(${scale})`;
10013
+ }
10014
+ function getPreviewNavState(currentIndex, total) {
10015
+ return {
10016
+ hasPrev: currentIndex > 0,
10017
+ hasNext: currentIndex < total - 1,
10018
+ counter: total > 1 ? `${currentIndex + 1} / ${total}` : ""
10019
+ };
10020
+ }
10021
+ function constrainCropRect(rect, imageWidth, imageHeight, aspectRatio) {
10022
+ let { x, y, width, height } = rect;
10023
+ if (aspectRatio && aspectRatio > 0) {
10024
+ const currentRatio = width / height;
10025
+ if (currentRatio > aspectRatio) {
10026
+ width = height * aspectRatio;
10027
+ } else {
10028
+ height = width / aspectRatio;
10029
+ }
10030
+ }
10031
+ width = Math.min(width, imageWidth);
10032
+ height = Math.min(height, imageHeight);
10033
+ x = Math.max(0, Math.min(x, imageWidth - width));
10034
+ y = Math.max(0, Math.min(y, imageHeight - height));
10035
+ return { x, y, width, height };
10036
+ }
10037
+ function resizeCropRect(rect, handle, dx, dy, imageWidth, imageHeight, aspectRatio, minW = 20, minH = 20) {
10038
+ let { x, y, width, height } = rect;
10039
+ switch (handle) {
10040
+ case "nw":
9039
10041
  x += dx;
9040
10042
  y += dy;
9041
10043
  width -= dx;
@@ -9149,6 +10151,153 @@ function toCSSSize(value) {
9149
10151
  return typeof value === "number" ? `${value}px` : value;
9150
10152
  }
9151
10153
 
10154
+ // src/types/image-compare.ts
10155
+ var DEFAULT_IMAGE_COMPARE_POSITION = 50;
10156
+ var DEFAULT_IMAGE_COMPARE_STEP = 1;
10157
+ var DEFAULT_IMAGE_COMPARE_ORIENTATION = "horizontal";
10158
+ var DEFAULT_IMAGE_COMPARE_FIT = "cover";
10159
+ var DEFAULT_IMAGE_COMPARE_ARIA_LABEL = "Image comparison";
10160
+
10161
+ // src/utils/image-compare-utils.ts
10162
+ var IMAGE_COMPARE_POSITION_VAR = "--tiger-image-compare-position";
10163
+ var imageCompareRootClasses = "tiger-image-compare relative overflow-hidden select-none touch-none max-w-full";
10164
+ var imageCompareHorizontalClasses = "tiger-image-compare-horizontal";
10165
+ var imageCompareVerticalClasses = "tiger-image-compare-vertical";
10166
+ var imageCompareDisabledClasses = "tiger-image-compare-disabled cursor-not-allowed";
10167
+ var imageCompareAfterClasses = "tiger-image-compare-after relative block w-full h-full [&>img]:pointer-events-none [&>img]:select-none [&>img]:max-w-none";
10168
+ var imageCompareBeforeClasses = "tiger-image-compare-before absolute inset-0 overflow-hidden [&>img]:pointer-events-none [&>img]:select-none [&>img]:max-w-none";
10169
+ var imageCompareHandleClasses = "tiger-image-compare-handle absolute z-10 flex items-center justify-center outline-none focus-visible:ring-2 focus-visible:ring-[var(--tiger-primary,#2563eb)] focus-visible:ring-offset-2";
10170
+ var imageCompareHandleHorizontalClasses = "inset-y-0 w-6 -translate-x-1/2 cursor-ew-resize";
10171
+ var imageCompareHandleVerticalClasses = "inset-x-0 h-6 -translate-y-1/2 cursor-ns-resize";
10172
+ var imageCompareHandleDisabledClasses = "cursor-not-allowed";
10173
+ var imageCompareLineClasses = "tiger-image-compare-line absolute bg-white shadow pointer-events-none";
10174
+ var imageCompareLineHorizontalClasses = "inset-y-0 left-1/2 w-0.5 -translate-x-1/2";
10175
+ var imageCompareLineVerticalClasses = "inset-x-0 top-1/2 h-0.5 -translate-y-1/2";
10176
+ var imageCompareKnobClasses = "tiger-image-compare-knob relative z-10 flex h-8 w-8 items-center justify-center rounded-full border-2 border-white bg-[var(--tiger-primary,#2563eb)] text-white shadow pointer-events-none";
10177
+ var IMAGE_COMPARE_ORIENTATIONS = /* @__PURE__ */ new Set(["horizontal", "vertical"]);
10178
+ var IMAGE_FITS = /* @__PURE__ */ new Set(["contain", "cover", "fill", "none", "scale-down"]);
10179
+ function resolveImageCompareOrientation(orientation) {
10180
+ if (orientation && IMAGE_COMPARE_ORIENTATIONS.has(orientation)) return orientation;
10181
+ return DEFAULT_IMAGE_COMPARE_ORIENTATION;
10182
+ }
10183
+ function isImageCompareVertical(orientation) {
10184
+ return resolveImageCompareOrientation(orientation) === "vertical";
10185
+ }
10186
+ function resolveImageCompareFit(fit) {
10187
+ if (fit && IMAGE_FITS.has(fit)) return fit;
10188
+ return DEFAULT_IMAGE_COMPARE_FIT;
10189
+ }
10190
+ function resolveImageCompareStep(step) {
10191
+ if (typeof step === "number" && Number.isFinite(step) && step > 0) return step;
10192
+ return DEFAULT_IMAGE_COMPARE_STEP;
10193
+ }
10194
+ function resolveImageComparePosition(position, step) {
10195
+ const safeStep = resolveImageCompareStep(step);
10196
+ const raw = typeof position === "number" && Number.isFinite(position) ? position : DEFAULT_IMAGE_COMPARE_POSITION;
10197
+ return sliderNormalizeValue(raw, 0, 100, safeStep);
10198
+ }
10199
+ function resolveImageCompareAriaLabel(label) {
10200
+ if (typeof label === "string") {
10201
+ const trimmed = label.trim();
10202
+ if (trimmed) return trimmed;
10203
+ }
10204
+ return DEFAULT_IMAGE_COMPARE_ARIA_LABEL;
10205
+ }
10206
+ var IMAGE_COMPARE_INTERACTIVE_SELECTOR = 'a, button, input, textarea, select, [role="button"]';
10207
+ function isImageCompareInteractiveTarget(target, handle) {
10208
+ if (!(target instanceof Element)) return false;
10209
+ if (handle instanceof Node && handle.contains(target)) return false;
10210
+ return target.closest(IMAGE_COMPARE_INTERACTIVE_SELECTOR) !== null;
10211
+ }
10212
+ function getImageComparePointerClientPoint(event) {
10213
+ if (event.touches && event.touches.length > 0) {
10214
+ const touch = event.touches[0];
10215
+ return { clientX: touch.clientX, clientY: touch.clientY };
10216
+ }
10217
+ if (typeof event.clientX === "number" && typeof event.clientY === "number") {
10218
+ return { clientX: event.clientX, clientY: event.clientY };
10219
+ }
10220
+ return null;
10221
+ }
10222
+ function getImageComparePositionFromPointer(input) {
10223
+ const orientation = resolveImageCompareOrientation(input.orientation);
10224
+ const step = resolveImageCompareStep(input.step);
10225
+ const { rect } = input;
10226
+ if (orientation === "vertical") {
10227
+ return sliderGetValueFromPosition(input.clientY - rect.top, rect.height, 0, 100, step);
10228
+ }
10229
+ return sliderGetValueFromPosition(input.clientX - rect.left, rect.width, 0, 100, step);
10230
+ }
10231
+ function getImageCompareKeyboardPosition(key, current, step) {
10232
+ return sliderGetKeyboardValue(
10233
+ key,
10234
+ resolveImageComparePosition(current, step),
10235
+ 0,
10236
+ 100,
10237
+ resolveImageCompareStep(step)
10238
+ );
10239
+ }
10240
+ function getImageCompareClipStyle(position, orientation, step) {
10241
+ const resolved = resolveImageComparePosition(position, step);
10242
+ const clipped = `${100 - resolved}%`;
10243
+ if (isImageCompareVertical(orientation)) {
10244
+ return { clipPath: `inset(0 0 ${clipped} 0)` };
10245
+ }
10246
+ return { clipPath: `inset(0 ${clipped} 0 0)` };
10247
+ }
10248
+ function getImageCompareHandleStyle(position, orientation, step) {
10249
+ const resolved = resolveImageComparePosition(position, step);
10250
+ if (isImageCompareVertical(orientation)) {
10251
+ return { top: `${resolved}%` };
10252
+ }
10253
+ return { left: `${resolved}%` };
10254
+ }
10255
+ function getImageCompareRootStyle(input = {}) {
10256
+ const position = resolveImageComparePosition(input.position, input.step);
10257
+ const style = {
10258
+ [IMAGE_COMPARE_POSITION_VAR]: `${position}%`
10259
+ };
10260
+ const width = toCSSSize(input.width);
10261
+ const height = toCSSSize(input.height);
10262
+ if (width) style.width = width;
10263
+ if (height) style.height = height;
10264
+ return style;
10265
+ }
10266
+ function getImageCompareRootClasses(input = {}) {
10267
+ return classNames(
10268
+ imageCompareRootClasses,
10269
+ isImageCompareVertical(input.orientation) ? imageCompareVerticalClasses : imageCompareHorizontalClasses,
10270
+ input.disabled && imageCompareDisabledClasses,
10271
+ input.className
10272
+ );
10273
+ }
10274
+ function getImageCompareAfterClasses(className) {
10275
+ return classNames(imageCompareAfterClasses, className);
10276
+ }
10277
+ function getImageCompareBeforeClasses(className) {
10278
+ return classNames(imageCompareBeforeClasses, className);
10279
+ }
10280
+ function getImageCompareHandleClasses(input = {}) {
10281
+ return classNames(
10282
+ imageCompareHandleClasses,
10283
+ isImageCompareVertical(input.orientation) ? imageCompareHandleVerticalClasses : imageCompareHandleHorizontalClasses,
10284
+ input.disabled && imageCompareHandleDisabledClasses,
10285
+ input.className
10286
+ );
10287
+ }
10288
+ function getImageCompareLineClasses(orientation) {
10289
+ return classNames(
10290
+ imageCompareLineClasses,
10291
+ isImageCompareVertical(orientation) ? imageCompareLineVerticalClasses : imageCompareLineHorizontalClasses
10292
+ );
10293
+ }
10294
+ function getImageCompareKnobClasses(className) {
10295
+ return classNames(imageCompareKnobClasses, className);
10296
+ }
10297
+ function getImageCompareImgClasses(fit) {
10298
+ return getImageImgClasses(resolveImageCompareFit(fit));
10299
+ }
10300
+
9152
10301
  // src/utils/gesture-utils.ts
9153
10302
  var DEFAULT_SWIPE_DISTANCE = 24;
9154
10303
  var DEFAULT_LONG_PRESS_THRESHOLD = 500;
@@ -10758,7 +11907,10 @@ function valueToGaugeAngle(value, min, max, startAngle, endAngle) {
10758
11907
  const safeMin = safeNumber(min);
10759
11908
  const safeMax = safeNumber(max, safeMin);
10760
11909
  if (safeMax <= safeMin) return safeStart;
10761
- const ratio = Math.max(0, Math.min(1, (safeNumber(value, safeMin) - safeMin) / (safeMax - safeMin)));
11910
+ const ratio = Math.max(
11911
+ 0,
11912
+ Math.min(1, (safeNumber(value, safeMin) - safeMin) / (safeMax - safeMin))
11913
+ );
10762
11914
  return safeStart + ratio * (safeEnd - safeStart);
10763
11915
  }
10764
11916
  function computeGaugeTicks(cx, cy, radius, min, max, startAngle, endAngle, tickCount) {
@@ -10820,11 +11972,7 @@ function interpolateColor(minColor, maxColor, t) {
10820
11972
  const clamped = Number.isFinite(t) ? Math.max(0, Math.min(1, t)) : 0;
10821
11973
  const [r1, g1, b1] = hexToRgb(minColor);
10822
11974
  const [r2, g2, b2] = hexToRgb(maxColor);
10823
- return rgbToHex(
10824
- r1 + (r2 - r1) * clamped,
10825
- g1 + (g2 - g1) * clamped,
10826
- b1 + (b2 - b1) * clamped
10827
- );
11975
+ return rgbToHex(r1 + (r2 - r1) * clamped, g1 + (g2 - g1) * clamped, b1 + (b2 - b1) * clamped);
10828
11976
  }
10829
11977
  function interpolateColorOklch(minColor, maxColor, t) {
10830
11978
  const clamped = Math.max(0, Math.min(1, t));
@@ -12607,6 +13755,148 @@ function createTaskBoardDragController(callbacks, initialOptions) {
12607
13755
  return ctrl;
12608
13756
  }
12609
13757
 
13758
+ // src/utils/virtual-list-utils.ts
13759
+ var virtualListContainerClasses = classNames(
13760
+ "overflow-auto relative",
13761
+ "bg-[var(--tiger-virtuallist-bg,var(--tiger-surface,#ffffff))]"
13762
+ );
13763
+ var virtualListInnerClasses = "relative w-full";
13764
+ function getFixedVirtualRange(scrollTop, containerHeight, itemHeight, itemCount, overscan) {
13765
+ if (itemHeight <= 0 || itemCount <= 0) {
13766
+ return { startIndex: 0, endIndex: -1, offsetTop: 0, totalHeight: 0 };
13767
+ }
13768
+ const totalHeight = itemCount * itemHeight;
13769
+ const startIndex = Math.max(0, Math.floor(scrollTop / itemHeight) - overscan);
13770
+ const visibleCount = Math.ceil(containerHeight / itemHeight);
13771
+ const endIndex = Math.min(itemCount - 1, startIndex + visibleCount + 2 * overscan);
13772
+ const offsetTop = startIndex * itemHeight;
13773
+ return { startIndex, endIndex, offsetTop, totalHeight };
13774
+ }
13775
+ function fixedSizeStrategy(itemHeight) {
13776
+ return {
13777
+ getRange(scrollTop, containerHeight, itemCount, overscan) {
13778
+ return getFixedVirtualRange(scrollTop, containerHeight, itemHeight, itemCount, overscan);
13779
+ },
13780
+ getItemHeight() {
13781
+ return itemHeight;
13782
+ },
13783
+ getItemOffset(index) {
13784
+ return index * itemHeight;
13785
+ }
13786
+ };
13787
+ }
13788
+ function variableSizeStrategy(getHeight, itemCount) {
13789
+ const offsets = new Float64Array(itemCount + 1);
13790
+ for (let i = 0; i < itemCount; i++) {
13791
+ offsets[i + 1] = offsets[i] + getHeight(i);
13792
+ }
13793
+ const totalHeight = offsets[itemCount] ?? 0;
13794
+ function binarySearchStart(scrollTop) {
13795
+ let lo = 0;
13796
+ let hi = itemCount - 1;
13797
+ while (lo <= hi) {
13798
+ const mid = lo + hi >>> 1;
13799
+ if (offsets[mid + 1] <= scrollTop) {
13800
+ lo = mid + 1;
13801
+ } else {
13802
+ hi = mid - 1;
13803
+ }
13804
+ }
13805
+ return Math.min(lo, itemCount - 1);
13806
+ }
13807
+ return {
13808
+ getRange(scrollTop, containerHeight, _itemCount, overscan) {
13809
+ if (itemCount === 0) {
13810
+ return { startIndex: 0, endIndex: -1, offsetTop: 0, totalHeight: 0 };
13811
+ }
13812
+ const rawStart = binarySearchStart(scrollTop);
13813
+ const startIndex = Math.max(0, rawStart - overscan);
13814
+ const viewEnd = scrollTop + containerHeight;
13815
+ let endIndex = rawStart;
13816
+ while (endIndex < itemCount - 1 && offsets[endIndex] < viewEnd) {
13817
+ endIndex++;
13818
+ }
13819
+ endIndex = Math.min(itemCount - 1, endIndex + overscan);
13820
+ const offsetTop = offsets[startIndex];
13821
+ return { startIndex, endIndex, offsetTop, totalHeight };
13822
+ },
13823
+ getItemHeight(index) {
13824
+ return getHeight(index);
13825
+ },
13826
+ getItemOffset(index) {
13827
+ return offsets[index] ?? 0;
13828
+ }
13829
+ };
13830
+ }
13831
+ function dynamicSizeStrategy(estimatedHeight, itemCount) {
13832
+ const measuredHeights = /* @__PURE__ */ new Map();
13833
+ const offsets = new Float64Array(itemCount + 1);
13834
+ for (let i = 0; i < itemCount; i++) {
13835
+ offsets[i + 1] = offsets[i] + estimatedHeight;
13836
+ }
13837
+ let dirtyFrom = itemCount;
13838
+ function getHeight(index) {
13839
+ return measuredHeights.get(index) ?? estimatedHeight;
13840
+ }
13841
+ function rebuildOffsets() {
13842
+ if (dirtyFrom >= itemCount) return;
13843
+ for (let i = dirtyFrom; i < itemCount; i++) {
13844
+ offsets[i + 1] = offsets[i] + getHeight(i);
13845
+ }
13846
+ dirtyFrom = itemCount;
13847
+ }
13848
+ function getOffset(index) {
13849
+ rebuildOffsets();
13850
+ const safeIndex = Math.min(itemCount, Math.max(0, index));
13851
+ return offsets[safeIndex] ?? 0;
13852
+ }
13853
+ function binarySearchStart(scrollTop) {
13854
+ let lo = 0;
13855
+ let hi = itemCount - 1;
13856
+ while (lo <= hi) {
13857
+ const mid = lo + hi >>> 1;
13858
+ if (offsets[mid + 1] <= scrollTop) {
13859
+ lo = mid + 1;
13860
+ } else {
13861
+ hi = mid - 1;
13862
+ }
13863
+ }
13864
+ return Math.min(lo, itemCount - 1);
13865
+ }
13866
+ return {
13867
+ getRange(scrollTop, containerHeight, _itemCount, overscan) {
13868
+ if (itemCount === 0) {
13869
+ return { startIndex: 0, endIndex: -1, offsetTop: 0, totalHeight: 0 };
13870
+ }
13871
+ rebuildOffsets();
13872
+ const rawStart = binarySearchStart(scrollTop);
13873
+ const startIndex = Math.max(0, rawStart - overscan);
13874
+ const viewEnd = scrollTop + containerHeight;
13875
+ let endIndex = rawStart;
13876
+ while (endIndex < itemCount - 1 && offsets[endIndex] < viewEnd) {
13877
+ endIndex++;
13878
+ }
13879
+ endIndex = Math.min(itemCount - 1, endIndex + overscan);
13880
+ const offsetTop = offsets[startIndex] ?? 0;
13881
+ const totalHeight = offsets[itemCount] ?? 0;
13882
+ return { startIndex, endIndex, offsetTop, totalHeight };
13883
+ },
13884
+ getItemHeight(index) {
13885
+ return getHeight(index);
13886
+ },
13887
+ getItemOffset(index) {
13888
+ return getOffset(index);
13889
+ },
13890
+ updateItemHeight(index, measuredHeight) {
13891
+ if (index < 0 || index >= itemCount || !Number.isFinite(measuredHeight) || measuredHeight <= 0 || getHeight(index) === measuredHeight) {
13892
+ return;
13893
+ }
13894
+ measuredHeights.set(index, measuredHeight);
13895
+ dirtyFrom = Math.min(dirtyFrom, index);
13896
+ }
13897
+ };
13898
+ }
13899
+
12610
13900
  // src/utils/cascader-utils.ts
12611
13901
  var cascaderBaseClasses = "relative inline-block w-full";
12612
13902
  var CASCADER_TRIGGER_BASE_CLASSES = [
@@ -12745,6 +14035,27 @@ function getCascaderColumns(options, activePath) {
12745
14035
  }
12746
14036
  return columns;
12747
14037
  }
14038
+ var CASCADER_DEFAULT_LIST_HEIGHT = 256;
14039
+ var CASCADER_VIRTUAL_OVERSCAN = 5;
14040
+ function getCascaderVirtualItemHeight(size2 = "md") {
14041
+ return getSelectVirtualItemHeight(size2);
14042
+ }
14043
+ function getCascaderVirtualRange(scrollTop, listHeight, itemCount, itemHeight, overscan = CASCADER_VIRTUAL_OVERSCAN) {
14044
+ const range = fixedSizeStrategy(itemHeight).getRange(scrollTop, listHeight, itemCount, overscan);
14045
+ if (range.endIndex < 0 || range.startIndex <= range.endIndex) return range;
14046
+ return {
14047
+ ...range,
14048
+ startIndex: range.endIndex,
14049
+ offsetTop: range.endIndex * itemHeight
14050
+ };
14051
+ }
14052
+ function getCascaderVirtualAlignScrollTop(scrollTop, index, itemHeight, listHeight) {
14053
+ if (index < 0 || itemHeight <= 0 || listHeight <= 0) return scrollTop;
14054
+ const top = index * itemHeight;
14055
+ if (top < scrollTop) return top;
14056
+ if (top + itemHeight > scrollTop + listHeight) return top + itemHeight - listHeight;
14057
+ return scrollTop;
14058
+ }
12748
14059
 
12749
14060
  // src/utils/auto-complete-utils.ts
12750
14061
  var autoCompleteBaseClasses = "relative inline-block w-full";
@@ -12979,15 +14290,351 @@ function getNumberKeyboardKeys(options = {}) {
12979
14290
  if (options.showConfirm !== false) {
12980
14291
  keys.push({ type: "confirm", value: "confirm", label: confirmText, ariaLabel: confirmText });
12981
14292
  }
12982
- return keys;
14293
+ return keys;
14294
+ }
14295
+ function getNumberKeyboardKeyClasses(key, disabled = false) {
14296
+ return classNames(
14297
+ numberKeyboardKeyClasses,
14298
+ key.type === "confirm" && numberKeyboardConfirmKeyClasses,
14299
+ key.type === "empty" && numberKeyboardEmptyKeyClasses,
14300
+ disabled && "pointer-events-none"
14301
+ );
14302
+ }
14303
+
14304
+ // src/utils/input-otp-utils.ts
14305
+ var OTP_TYPE_PATTERNS = {
14306
+ numeric: /^[0-9]$/,
14307
+ alphanumeric: /^[a-zA-Z0-9]$/
14308
+ };
14309
+ function getOtpCharPattern(options) {
14310
+ const pattern = options.pattern;
14311
+ if (!pattern) return OTP_TYPE_PATTERNS[options.type ?? "numeric"];
14312
+ return pattern.global || pattern.sticky ? new RegExp(pattern.source, pattern.flags.replace(/[gy]/g, "")) : pattern;
14313
+ }
14314
+ function sanitizeOtpInput(raw, options = {}) {
14315
+ const pattern = getOtpCharPattern(options);
14316
+ let result = "";
14317
+ for (const char of raw) {
14318
+ if (pattern.test(char)) result += char;
14319
+ }
14320
+ return result;
14321
+ }
14322
+ function normalizeOtpValue(raw, length, options = {}) {
14323
+ return sanitizeOtpInput(raw, options).slice(0, length);
14324
+ }
14325
+ function distributeOtpPaste(pasted, length, options = {}) {
14326
+ const sanitized = sanitizeOtpInput(pasted, options);
14327
+ if (!sanitized) return null;
14328
+ const value = sanitized.slice(0, length);
14329
+ return { value, nextIndex: Math.min(value.length, length - 1) };
14330
+ }
14331
+ function applyOtpCharInput(current, index, chars, length, options = {}) {
14332
+ const sanitized = sanitizeOtpInput(chars, options);
14333
+ if (!sanitized) return { value: current, nextIndex: index };
14334
+ if (sanitized.length > 1) {
14335
+ return distributeOtpPaste(sanitized, length, options) ?? { value: current, nextIndex: index };
14336
+ }
14337
+ const effectiveIndex = Math.min(index, current.length, length - 1);
14338
+ const value = (current.slice(0, effectiveIndex) + sanitized + current.slice(effectiveIndex + 1)).slice(0, length);
14339
+ return { value, nextIndex: Math.min(effectiveIndex + 1, length - 1) };
14340
+ }
14341
+ function applyOtpBackspace(current, index) {
14342
+ if (index < current.length) {
14343
+ return { value: current.slice(0, index) + current.slice(index + 1), nextIndex: index };
14344
+ }
14345
+ if (index > 0) {
14346
+ return { value: current.slice(0, index - 1) + current.slice(index), nextIndex: index - 1 };
14347
+ }
14348
+ return { value: current, nextIndex: 0 };
14349
+ }
14350
+ function applyOtpDelete(current, index) {
14351
+ if (index < current.length) {
14352
+ return { value: current.slice(0, index) + current.slice(index + 1), nextIndex: index };
14353
+ }
14354
+ return { value: current, nextIndex: index };
14355
+ }
14356
+ function isOtpComplete(value, length) {
14357
+ return length > 0 && value.length >= length;
14358
+ }
14359
+ function getOtpSeparatorIndices(length, groups) {
14360
+ if (!groups || groups.length === 0) return [];
14361
+ const indices = [];
14362
+ let sum = 0;
14363
+ for (const group of groups) {
14364
+ if (!Number.isInteger(group) || group <= 0) return [];
14365
+ sum += group;
14366
+ if (sum < length) indices.push(sum - 1);
14367
+ }
14368
+ return sum === length ? indices : [];
14369
+ }
14370
+ function formatOtpSlotLabel(template, index, total) {
14371
+ return template.replace("{index}", String(index)).replace("{total}", String(total));
14372
+ }
14373
+ var OTP_CONTAINER_GAP = {
14374
+ sm: "gap-1.5",
14375
+ md: "gap-2",
14376
+ lg: "gap-3"
14377
+ };
14378
+ function getOtpContainerClasses(size2 = "md") {
14379
+ return classNames("inline-flex items-center", OTP_CONTAINER_GAP[size2]);
14380
+ }
14381
+ var OTP_TEXT_SIZE_CLASSES = {
14382
+ sm: "text-sm",
14383
+ md: "text-base",
14384
+ lg: "text-lg"
14385
+ };
14386
+ var OTP_SLOT_SIZE_CLASSES = {
14387
+ sm: "h-8 w-8 text-sm",
14388
+ md: "h-10 w-10 text-base",
14389
+ lg: "h-12 w-12 text-lg"
14390
+ };
14391
+ var OTP_SLOT_STATUS_CLASSES = {
14392
+ default: "border-[var(--tiger-border,#e5e7eb)] focus:ring-[var(--tiger-primary,#2563eb)]/40 focus:border-transparent",
14393
+ error: "border-red-500 focus:ring-red-500 focus:border-red-500 text-red-900",
14394
+ success: "border-green-500 focus:ring-green-500 focus:border-green-500 text-green-900",
14395
+ warning: "border-yellow-500 focus:ring-yellow-500 focus:border-yellow-500 text-yellow-900"
14396
+ };
14397
+ function getOtpSlotClasses(size2 = "md", status = "default", options = {}) {
14398
+ return classNames(
14399
+ "text-center border rounded-[var(--tiger-radius-md,0.5rem)]",
14400
+ "bg-[var(--tiger-surface,#ffffff)] text-[var(--tiger-text,#111827)]",
14401
+ "focus:outline-none focus:ring-2 transition-colors",
14402
+ "disabled:bg-[var(--tiger-surface-muted,#f3f4f6)] disabled:text-[var(--tiger-text-muted,#6b7280)] disabled:cursor-not-allowed",
14403
+ OTP_SLOT_SIZE_CLASSES[size2],
14404
+ OTP_SLOT_STATUS_CLASSES[status],
14405
+ options.readonly && "cursor-default"
14406
+ );
14407
+ }
14408
+ function getOtpSeparatorClasses(size2 = "md") {
14409
+ return classNames(
14410
+ "select-none text-[var(--tiger-text-muted,#6b7280)]",
14411
+ OTP_TEXT_SIZE_CLASSES[size2]
14412
+ );
14413
+ }
14414
+ function getOtpErrorClasses() {
14415
+ return "mt-1 text-sm text-[var(--tiger-error,#dc2626)]";
14416
+ }
14417
+
14418
+ // src/utils/tags-input-utils.ts
14419
+ function extractTagCandidates(inputValue, delimiters = [","]) {
14420
+ const separators = delimiters.filter((delimiter) => delimiter.length > 0);
14421
+ if (separators.length === 0) return { candidates: [], pending: inputValue };
14422
+ const candidates = [];
14423
+ let rest = inputValue;
14424
+ for (; ; ) {
14425
+ let earliest = -1;
14426
+ let separatorLength = 0;
14427
+ for (const separator of separators) {
14428
+ const index = rest.indexOf(separator);
14429
+ if (index !== -1 && (earliest === -1 || index < earliest)) {
14430
+ earliest = index;
14431
+ separatorLength = separator.length;
14432
+ }
14433
+ }
14434
+ if (earliest === -1) break;
14435
+ const segment = rest.slice(0, earliest).trim();
14436
+ if (segment) candidates.push(segment);
14437
+ rest = rest.slice(earliest + separatorLength);
14438
+ }
14439
+ return { candidates, pending: rest };
14440
+ }
14441
+ function splitTagInput(raw, delimiters = [","]) {
14442
+ const { candidates, pending } = extractTagCandidates(raw, [...delimiters, "\n", "\r"]);
14443
+ const last = pending.trim();
14444
+ return last ? [...candidates, last] : candidates;
14445
+ }
14446
+ function addTags(current, candidates, options = {}) {
14447
+ const { allowDuplicates = false, max } = options;
14448
+ const tags = [...current];
14449
+ const added = [];
14450
+ const rejected = [];
14451
+ for (const candidate of candidates) {
14452
+ const tag = candidate.trim();
14453
+ if (!tag) continue;
14454
+ if (max !== void 0 && tags.length >= max) {
14455
+ rejected.push(tag);
14456
+ continue;
14457
+ }
14458
+ if (!allowDuplicates && tags.includes(tag)) {
14459
+ rejected.push(tag);
14460
+ continue;
14461
+ }
14462
+ tags.push(tag);
14463
+ added.push(tag);
14464
+ }
14465
+ return { tags, added, rejected };
14466
+ }
14467
+ function removeTagAt(tags, index) {
14468
+ if (index < 0 || index >= tags.length) return tags;
14469
+ return [...tags.slice(0, index), ...tags.slice(index + 1)];
14470
+ }
14471
+ function formatRemoveTagLabel(template, tag) {
14472
+ return template.replace("{tag}", tag);
14473
+ }
14474
+ var TAGS_INPUT_SIZE_CLASSES = {
14475
+ sm: "min-h-8 px-2 py-1 text-sm gap-1",
14476
+ md: "min-h-10 px-3 py-1.5 text-base gap-1.5",
14477
+ lg: "min-h-12 px-4 py-2 text-lg gap-2"
14478
+ };
14479
+ var TAGS_INPUT_STATUS_CLASSES = {
14480
+ default: "border-[var(--tiger-border,#e5e7eb)] focus-within:ring-[var(--tiger-primary,#2563eb)]/40 focus-within:border-transparent",
14481
+ error: "border-red-500 focus-within:ring-red-500 focus-within:border-red-500",
14482
+ success: "border-green-500 focus-within:ring-green-500 focus-within:border-green-500",
14483
+ warning: "border-yellow-500 focus-within:ring-yellow-500 focus-within:border-yellow-500"
14484
+ };
14485
+ function getTagsInputContainerClasses(size2 = "md", status = "default", options = {}) {
14486
+ return classNames(
14487
+ "flex w-full flex-wrap items-center border rounded-[var(--tiger-radius-md,0.5rem)]",
14488
+ "bg-[var(--tiger-surface,#ffffff)] transition-colors focus-within:ring-2",
14489
+ TAGS_INPUT_SIZE_CLASSES[size2],
14490
+ TAGS_INPUT_STATUS_CLASSES[status],
14491
+ options.disabled && "cursor-not-allowed bg-[var(--tiger-surface-muted,#f3f4f6)] text-[var(--tiger-text-muted,#6b7280)]"
14492
+ );
14493
+ }
14494
+ function getTagsInputInnerInputClasses() {
14495
+ return classNames(
14496
+ "min-w-16 flex-1 border-none bg-transparent p-0 outline-none",
14497
+ "text-[var(--tiger-text,#111827)] placeholder:text-[var(--tiger-text-muted,#6b7280)]",
14498
+ "disabled:cursor-not-allowed"
14499
+ );
14500
+ }
14501
+ function getTagsInputHighlightClasses() {
14502
+ return "ring-2 ring-[var(--tiger-primary,#2563eb)]/60";
14503
+ }
14504
+ function getTagsInputClearButtonClasses() {
14505
+ return classNames(
14506
+ "shrink-0 cursor-pointer border-none bg-transparent p-0",
14507
+ "text-[var(--tiger-text-muted,#6b7280)] hover:text-[var(--tiger-text,#111827)]"
14508
+ );
14509
+ }
14510
+ function getTagsInputErrorClasses() {
14511
+ return "mt-1 text-sm text-[var(--tiger-error,#dc2626)]";
14512
+ }
14513
+
14514
+ // src/utils/mask-input-utils.ts
14515
+ var DEFAULT_MASK_TOKENS = {
14516
+ "#": { pattern: /[0-9]/ },
14517
+ a: { pattern: /[a-zA-Z]/ },
14518
+ "*": { pattern: /[a-zA-Z0-9]/ }
14519
+ };
14520
+ function parseMask(mask, tokens) {
14521
+ const tokenMap = { ...DEFAULT_MASK_TOKENS, ...tokens };
14522
+ const spec = [];
14523
+ let escaped = false;
14524
+ for (const char of mask) {
14525
+ if (escaped) {
14526
+ spec.push({ kind: "fixed", char });
14527
+ escaped = false;
14528
+ continue;
14529
+ }
14530
+ if (char === "!") {
14531
+ escaped = true;
14532
+ continue;
14533
+ }
14534
+ const token = tokenMap[char];
14535
+ spec.push(token ? { kind: "token", token } : { kind: "fixed", char });
14536
+ }
14537
+ return spec;
14538
+ }
14539
+ function countMaskTokens(spec) {
14540
+ let count = 0;
14541
+ for (const entry of spec) {
14542
+ if (entry.kind === "token") count += 1;
14543
+ }
14544
+ return count;
14545
+ }
14546
+ function formatMaskValue(raw, spec) {
14547
+ let maskedValue = "";
14548
+ let rawValue = "";
14549
+ let fixedBuffer = "";
14550
+ let rawPos = 0;
14551
+ let filled = 0;
14552
+ const chars = Array.from(raw);
14553
+ for (const entry of spec) {
14554
+ if (entry.kind === "fixed") {
14555
+ fixedBuffer += entry.char;
14556
+ continue;
14557
+ }
14558
+ let accepted;
14559
+ while (rawPos < chars.length) {
14560
+ const candidate = chars[rawPos];
14561
+ rawPos += 1;
14562
+ const transformed = entry.token.transform ? entry.token.transform(candidate) : candidate;
14563
+ if (entry.token.pattern.test(transformed)) {
14564
+ accepted = transformed;
14565
+ break;
14566
+ }
14567
+ }
14568
+ if (accepted === void 0) break;
14569
+ maskedValue += fixedBuffer + accepted;
14570
+ fixedBuffer = "";
14571
+ rawValue += accepted;
14572
+ filled += 1;
14573
+ }
14574
+ const totalTokens = countMaskTokens(spec);
14575
+ if (rawValue.length > 0 && fixedBuffer) {
14576
+ maskedValue += fixedBuffer;
14577
+ }
14578
+ return { rawValue, maskedValue, completed: totalTokens > 0 && filled === totalTokens };
14579
+ }
14580
+ function extractRawValue(masked, spec, upTo) {
14581
+ let raw = "";
14582
+ let specIdx = 0;
14583
+ const limit = upTo === void 0 ? masked.length : Math.min(upTo, masked.length);
14584
+ for (let i = 0; i < limit; i++) {
14585
+ const char = masked[i];
14586
+ if (specIdx < spec.length) {
14587
+ const entry2 = spec[specIdx];
14588
+ if (entry2.kind === "fixed" && entry2.char === char) {
14589
+ specIdx += 1;
14590
+ continue;
14591
+ }
14592
+ }
14593
+ let tokenIdx = specIdx;
14594
+ while (tokenIdx < spec.length && spec[tokenIdx].kind === "fixed") tokenIdx += 1;
14595
+ if (tokenIdx >= spec.length) break;
14596
+ const entry = spec[tokenIdx];
14597
+ const transformed = entry.token.transform ? entry.token.transform(char) : char;
14598
+ if (entry.token.pattern.test(transformed)) {
14599
+ raw += transformed;
14600
+ specIdx = tokenIdx + 1;
14601
+ }
14602
+ }
14603
+ return raw;
14604
+ }
14605
+ function getMaskCaretPosition(spec, rawIndex) {
14606
+ if (rawIndex <= 0) return 0;
14607
+ let pos = 0;
14608
+ let tokens = 0;
14609
+ for (let i = 0; i < spec.length; i++) {
14610
+ pos += 1;
14611
+ if (spec[i].kind !== "token") continue;
14612
+ tokens += 1;
14613
+ if (tokens === rawIndex) {
14614
+ for (let j = i + 1; j < spec.length && spec[j].kind === "fixed"; j++) {
14615
+ pos += 1;
14616
+ }
14617
+ return pos;
14618
+ }
14619
+ }
14620
+ return pos;
12983
14621
  }
12984
- function getNumberKeyboardKeyClasses(key, disabled = false) {
12985
- return classNames(
12986
- numberKeyboardKeyClasses,
12987
- key.type === "confirm" && numberKeyboardConfirmKeyClasses,
12988
- key.type === "empty" && numberKeyboardEmptyKeyClasses,
12989
- disabled && "pointer-events-none"
12990
- );
14622
+ function applyMaskInput(inputValue, caret, spec, previousMasked) {
14623
+ let raw = extractRawValue(inputValue, spec);
14624
+ let rawBeforeCaret = extractRawValue(inputValue, spec, caret).length;
14625
+ let result = formatMaskValue(raw, spec);
14626
+ if (previousMasked !== void 0 && inputValue.length < previousMasked.length && result.maskedValue === previousMasked && rawBeforeCaret > 0) {
14627
+ raw = raw.slice(0, rawBeforeCaret - 1) + raw.slice(rawBeforeCaret);
14628
+ rawBeforeCaret -= 1;
14629
+ result = formatMaskValue(raw, spec);
14630
+ }
14631
+ const caretPos = Math.min(getMaskCaretPosition(spec, rawBeforeCaret), result.maskedValue.length);
14632
+ return {
14633
+ rawValue: result.rawValue,
14634
+ maskedValue: result.maskedValue,
14635
+ caret: caretPos,
14636
+ completed: result.completed
14637
+ };
12991
14638
  }
12992
14639
 
12993
14640
  // src/utils/cron-editor-utils.ts
@@ -13440,7 +15087,16 @@ function filterTransferItems(items, query, filterFn) {
13440
15087
 
13441
15088
  // src/utils/tree-select-utils.ts
13442
15089
  var treeSelectBaseClasses = "relative inline-block w-full";
13443
- var treeSelectDropdownClasses = "bg-[var(--tiger-treeselect-dropdown-bg,var(--tiger-surface,#ffffff))] border border-[var(--tiger-treeselect-dropdown-border,var(--tiger-border,#d1d5db))] rounded-[var(--tiger-radius-md,0.5rem)] shadow-lg max-h-60 overflow-auto";
15090
+ var treeSelectDropdownSurfaceClasses = "bg-[var(--tiger-treeselect-dropdown-bg,var(--tiger-surface,#ffffff))] border border-[var(--tiger-treeselect-dropdown-border,var(--tiger-border,#d1d5db))] rounded-[var(--tiger-radius-md,0.5rem)] shadow-lg";
15091
+ var treeSelectDropdownClasses = classNames(
15092
+ treeSelectDropdownSurfaceClasses,
15093
+ "max-h-60 overflow-auto"
15094
+ );
15095
+ var TREE_SELECT_DEFAULT_HEIGHT = 400;
15096
+ var TREE_SELECT_DEFAULT_ITEM_HEIGHT = 32;
15097
+ function getTreeSelectDropdownClasses(virtual = false) {
15098
+ return virtual ? classNames(treeSelectDropdownSurfaceClasses, "overflow-hidden") : treeSelectDropdownClasses;
15099
+ }
13444
15100
  var treeSelectSearchClasses = "w-full px-3 py-1.5 border-b border-[var(--tiger-treeselect-border,var(--tiger-border,#d1d5db))] text-sm bg-[var(--tiger-treeselect-bg,var(--tiger-surface,#ffffff))] text-[var(--tiger-treeselect-text,var(--tiger-text,#111827))] outline-none placeholder:text-[var(--tiger-treeselect-placeholder,var(--tiger-text-muted,#9ca3af))]";
13445
15101
  var treeSelectEmptyClasses = "px-3 py-4 text-center text-[var(--tiger-treeselect-empty-text,var(--tiger-text-muted,#9ca3af))]";
13446
15102
  var treeSelectNodeBaseClasses = "flex items-center px-2 py-1.5 cursor-pointer rounded transition-colors";
@@ -13520,6 +15176,31 @@ function filterTreeSelectNodes(data, query) {
13520
15176
  search(data, []);
13521
15177
  return matchedKeys;
13522
15178
  }
15179
+ function getTreeSelectVisibleIndex(nodes, value) {
15180
+ if (value === void 0 || value === null || value === "") return -1;
15181
+ if (Array.isArray(value)) {
15182
+ if (value.length === 0) return -1;
15183
+ const selected = new Set(value);
15184
+ return nodes.findIndex((item) => selected.has(item.node.key));
15185
+ }
15186
+ return nodes.findIndex((item) => item.node.key === value);
15187
+ }
15188
+ function getTreeSelectVirtualAlignScrollTop(scrollTop, index, itemHeight, viewportHeight) {
15189
+ if (index < 0 || itemHeight <= 0 || viewportHeight <= 0) return scrollTop;
15190
+ const top = index * itemHeight;
15191
+ if (top < scrollTop) return top;
15192
+ if (top + itemHeight > scrollTop + viewportHeight) return top + itemHeight - viewportHeight;
15193
+ return scrollTop;
15194
+ }
15195
+ function alignTreeSelectVirtualScroll(el, index, itemHeight, viewportHeight) {
15196
+ if (!el || index < 0) return el?.scrollTop ?? 0;
15197
+ const next = getTreeSelectVirtualAlignScrollTop(el.scrollTop, index, itemHeight, viewportHeight);
15198
+ if (el.scrollTop !== next) {
15199
+ el.scrollTop = next;
15200
+ el.dispatchEvent(new Event("scroll"));
15201
+ }
15202
+ return next;
15203
+ }
13523
15204
 
13524
15205
  // src/utils/rate-utils.ts
13525
15206
  var rateBaseClasses = "inline-flex items-center gap-0.5";
@@ -13905,148 +15586,6 @@ function findEnabledColorSwatchIndex(options, startIndex, direction) {
13905
15586
  return -1;
13906
15587
  }
13907
15588
 
13908
- // src/utils/virtual-list-utils.ts
13909
- var virtualListContainerClasses = classNames(
13910
- "overflow-auto relative",
13911
- "bg-[var(--tiger-virtuallist-bg,var(--tiger-surface,#ffffff))]"
13912
- );
13913
- var virtualListInnerClasses = "relative w-full";
13914
- function getFixedVirtualRange(scrollTop, containerHeight, itemHeight, itemCount, overscan) {
13915
- if (itemHeight <= 0 || itemCount <= 0) {
13916
- return { startIndex: 0, endIndex: -1, offsetTop: 0, totalHeight: 0 };
13917
- }
13918
- const totalHeight = itemCount * itemHeight;
13919
- const startIndex = Math.max(0, Math.floor(scrollTop / itemHeight) - overscan);
13920
- const visibleCount = Math.ceil(containerHeight / itemHeight);
13921
- const endIndex = Math.min(itemCount - 1, startIndex + visibleCount + 2 * overscan);
13922
- const offsetTop = startIndex * itemHeight;
13923
- return { startIndex, endIndex, offsetTop, totalHeight };
13924
- }
13925
- function fixedSizeStrategy(itemHeight) {
13926
- return {
13927
- getRange(scrollTop, containerHeight, itemCount, overscan) {
13928
- return getFixedVirtualRange(scrollTop, containerHeight, itemHeight, itemCount, overscan);
13929
- },
13930
- getItemHeight() {
13931
- return itemHeight;
13932
- },
13933
- getItemOffset(index) {
13934
- return index * itemHeight;
13935
- }
13936
- };
13937
- }
13938
- function variableSizeStrategy(getHeight, itemCount) {
13939
- const offsets = new Float64Array(itemCount + 1);
13940
- for (let i = 0; i < itemCount; i++) {
13941
- offsets[i + 1] = offsets[i] + getHeight(i);
13942
- }
13943
- const totalHeight = offsets[itemCount] ?? 0;
13944
- function binarySearchStart(scrollTop) {
13945
- let lo = 0;
13946
- let hi = itemCount - 1;
13947
- while (lo <= hi) {
13948
- const mid = lo + hi >>> 1;
13949
- if (offsets[mid + 1] <= scrollTop) {
13950
- lo = mid + 1;
13951
- } else {
13952
- hi = mid - 1;
13953
- }
13954
- }
13955
- return Math.min(lo, itemCount - 1);
13956
- }
13957
- return {
13958
- getRange(scrollTop, containerHeight, _itemCount, overscan) {
13959
- if (itemCount === 0) {
13960
- return { startIndex: 0, endIndex: -1, offsetTop: 0, totalHeight: 0 };
13961
- }
13962
- const rawStart = binarySearchStart(scrollTop);
13963
- const startIndex = Math.max(0, rawStart - overscan);
13964
- const viewEnd = scrollTop + containerHeight;
13965
- let endIndex = rawStart;
13966
- while (endIndex < itemCount - 1 && offsets[endIndex] < viewEnd) {
13967
- endIndex++;
13968
- }
13969
- endIndex = Math.min(itemCount - 1, endIndex + overscan);
13970
- const offsetTop = offsets[startIndex];
13971
- return { startIndex, endIndex, offsetTop, totalHeight };
13972
- },
13973
- getItemHeight(index) {
13974
- return getHeight(index);
13975
- },
13976
- getItemOffset(index) {
13977
- return offsets[index] ?? 0;
13978
- }
13979
- };
13980
- }
13981
- function dynamicSizeStrategy(estimatedHeight, itemCount) {
13982
- const measuredHeights = /* @__PURE__ */ new Map();
13983
- const offsets = new Float64Array(itemCount + 1);
13984
- for (let i = 0; i < itemCount; i++) {
13985
- offsets[i + 1] = offsets[i] + estimatedHeight;
13986
- }
13987
- let dirtyFrom = itemCount;
13988
- function getHeight(index) {
13989
- return measuredHeights.get(index) ?? estimatedHeight;
13990
- }
13991
- function rebuildOffsets() {
13992
- if (dirtyFrom >= itemCount) return;
13993
- for (let i = dirtyFrom; i < itemCount; i++) {
13994
- offsets[i + 1] = offsets[i] + getHeight(i);
13995
- }
13996
- dirtyFrom = itemCount;
13997
- }
13998
- function getOffset(index) {
13999
- rebuildOffsets();
14000
- const safeIndex = Math.min(itemCount, Math.max(0, index));
14001
- return offsets[safeIndex] ?? 0;
14002
- }
14003
- function binarySearchStart(scrollTop) {
14004
- let lo = 0;
14005
- let hi = itemCount - 1;
14006
- while (lo <= hi) {
14007
- const mid = lo + hi >>> 1;
14008
- if (offsets[mid + 1] <= scrollTop) {
14009
- lo = mid + 1;
14010
- } else {
14011
- hi = mid - 1;
14012
- }
14013
- }
14014
- return Math.min(lo, itemCount - 1);
14015
- }
14016
- return {
14017
- getRange(scrollTop, containerHeight, _itemCount, overscan) {
14018
- if (itemCount === 0) {
14019
- return { startIndex: 0, endIndex: -1, offsetTop: 0, totalHeight: 0 };
14020
- }
14021
- rebuildOffsets();
14022
- const rawStart = binarySearchStart(scrollTop);
14023
- const startIndex = Math.max(0, rawStart - overscan);
14024
- const viewEnd = scrollTop + containerHeight;
14025
- let endIndex = rawStart;
14026
- while (endIndex < itemCount - 1 && offsets[endIndex] < viewEnd) {
14027
- endIndex++;
14028
- }
14029
- endIndex = Math.min(itemCount - 1, endIndex + overscan);
14030
- const offsetTop = offsets[startIndex] ?? 0;
14031
- const totalHeight = offsets[itemCount] ?? 0;
14032
- return { startIndex, endIndex, offsetTop, totalHeight };
14033
- },
14034
- getItemHeight(index) {
14035
- return getHeight(index);
14036
- },
14037
- getItemOffset(index) {
14038
- return getOffset(index);
14039
- },
14040
- updateItemHeight(index, measuredHeight) {
14041
- if (index < 0 || index >= itemCount || !Number.isFinite(measuredHeight) || measuredHeight <= 0 || getHeight(index) === measuredHeight) {
14042
- return;
14043
- }
14044
- measuredHeights.set(index, measuredHeight);
14045
- dirtyFrom = Math.min(dirtyFrom, index);
14046
- }
14047
- };
14048
- }
14049
-
14050
15589
  // src/utils/stepper-utils.ts
14051
15590
  var stepperBaseClasses = "inline-flex items-center";
14052
15591
  var sizePad = {
@@ -15241,6 +16780,202 @@ function applyAspectRatio(width, height, originalWidth, originalHeight) {
15241
16780
  return { width, height: width / ratio };
15242
16781
  }
15243
16782
 
16783
+ // src/utils/scroll-area-utils.ts
16784
+ var SCROLL_AREA_MIN_THUMB_SIZE = 20;
16785
+ var SCROLL_AREA_EPSILON = 1;
16786
+ var scrollAreaRootClasses = "tiger-scroll-area group/scroll-area relative overflow-hidden";
16787
+ var scrollAreaViewportBaseClasses = "tiger-scroll-area-viewport h-full w-full [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-[var(--tiger-primary,#2563eb)]";
16788
+ var scrollAreaScrollbarBaseClasses = "tiger-scroll-area-scrollbar absolute z-10 touch-none select-none rounded-full bg-[var(--tiger-surface-muted,#f3f4f6)] transition-opacity duration-200";
16789
+ var scrollAreaThumbBaseClasses = "tiger-scroll-area-thumb absolute rounded-full bg-[var(--tiger-border,#d1d5db)] transition-colors hover:bg-[var(--tiger-text-muted,#9ca3af)]";
16790
+ var scrollAreaThumbDraggingClasses = "bg-[var(--tiger-text-muted,#9ca3af)]";
16791
+ var scrollAreaContentBaseClasses = "tiger-scroll-area-content";
16792
+ var scrollAreaShadowBaseClasses = "tiger-scroll-area-shadow pointer-events-none absolute";
16793
+ var VIEWPORT_OVERFLOW_CLASSES = {
16794
+ vertical: "overflow-y-auto overflow-x-hidden",
16795
+ horizontal: "overflow-x-auto overflow-y-hidden",
16796
+ both: "overflow-auto"
16797
+ };
16798
+ var SCROLLBAR_THICKNESS_CLASSES = {
16799
+ sm: { x: "h-1.5", y: "w-1.5" },
16800
+ md: { x: "h-2.5", y: "w-2.5" },
16801
+ lg: { x: "h-3.5", y: "w-3.5" }
16802
+ };
16803
+ var SCROLLBAR_PLACEMENT_CLASSES = {
16804
+ x: "bottom-0 left-0 right-0",
16805
+ y: "right-0 top-0 bottom-0"
16806
+ };
16807
+ var THUMB_AXIS_CLASSES = {
16808
+ x: "top-0.5 bottom-0.5",
16809
+ y: "left-0.5 right-0.5"
16810
+ };
16811
+ var SHADOW_SIDE_CLASSES = {
16812
+ top: "inset-x-0 top-0 h-3 bg-gradient-to-b from-black/10 to-transparent",
16813
+ bottom: "inset-x-0 bottom-0 h-3 bg-gradient-to-t from-black/10 to-transparent",
16814
+ left: "inset-y-0 left-0 w-3 bg-gradient-to-r from-black/10 to-transparent",
16815
+ right: "inset-y-0 right-0 w-3 bg-gradient-to-l from-black/10 to-transparent"
16816
+ };
16817
+ function clamp(value, min, max) {
16818
+ if (Number.isNaN(value)) return min;
16819
+ if (value < min) return min;
16820
+ if (value > max) return max;
16821
+ return value;
16822
+ }
16823
+ function computeScrollAreaAxisState(scrollPos, scrollSize, clientSize, minThumbSize = SCROLL_AREA_MIN_THUMB_SIZE) {
16824
+ const maxScroll = scrollSize - clientSize;
16825
+ const scrollable = clientSize > 0 && maxScroll > SCROLL_AREA_EPSILON;
16826
+ if (!scrollable) {
16827
+ return {
16828
+ scrollable: false,
16829
+ thumbSize: clientSize > 0 ? clientSize : 0,
16830
+ thumbOffset: 0,
16831
+ progress: 0,
16832
+ atStart: true,
16833
+ atEnd: true
16834
+ };
16835
+ }
16836
+ const thumbSize = clamp(clientSize / scrollSize * clientSize, minThumbSize, clientSize);
16837
+ const position = clamp(scrollPos, 0, maxScroll);
16838
+ const progress = position / maxScroll;
16839
+ const thumbOffset = (clientSize - thumbSize) * progress;
16840
+ return {
16841
+ scrollable: true,
16842
+ thumbSize,
16843
+ thumbOffset,
16844
+ progress,
16845
+ atStart: position <= SCROLL_AREA_EPSILON,
16846
+ atEnd: maxScroll - position <= SCROLL_AREA_EPSILON
16847
+ };
16848
+ }
16849
+ function computeScrollAreaState(metrics, minThumbSize = SCROLL_AREA_MIN_THUMB_SIZE) {
16850
+ return {
16851
+ x: computeScrollAreaAxisState(
16852
+ Math.abs(metrics.scrollLeft),
16853
+ metrics.scrollWidth,
16854
+ metrics.clientWidth,
16855
+ minThumbSize
16856
+ ),
16857
+ y: computeScrollAreaAxisState(
16858
+ metrics.scrollTop,
16859
+ metrics.scrollHeight,
16860
+ metrics.clientHeight,
16861
+ minThumbSize
16862
+ )
16863
+ };
16864
+ }
16865
+ function createEmptyScrollAreaState() {
16866
+ const axis = {
16867
+ scrollable: false,
16868
+ thumbSize: 0,
16869
+ thumbOffset: 0,
16870
+ progress: 0,
16871
+ atStart: true,
16872
+ atEnd: true
16873
+ };
16874
+ return { x: { ...axis }, y: { ...axis } };
16875
+ }
16876
+ function readScrollAreaMetrics(element) {
16877
+ return {
16878
+ scrollTop: element.scrollTop,
16879
+ scrollLeft: element.scrollLeft,
16880
+ scrollHeight: element.scrollHeight,
16881
+ scrollWidth: element.scrollWidth,
16882
+ clientHeight: element.clientHeight,
16883
+ clientWidth: element.clientWidth
16884
+ };
16885
+ }
16886
+ function computeScrollFromThumbOffset(thumbOffset, trackSize, thumbSize, scrollSize, clientSize) {
16887
+ const maxThumbOffset = trackSize - thumbSize;
16888
+ const maxScroll = Math.max(scrollSize - clientSize, 0);
16889
+ if (maxThumbOffset <= 0 || maxScroll <= 0) return 0;
16890
+ return clamp(thumbOffset / maxThumbOffset, 0, 1) * maxScroll;
16891
+ }
16892
+ function computeScrollFromTrackPoint(point, trackSize, thumbSize, scrollSize, clientSize) {
16893
+ return computeScrollFromThumbOffset(
16894
+ point - thumbSize / 2,
16895
+ trackSize,
16896
+ thumbSize,
16897
+ scrollSize,
16898
+ clientSize
16899
+ );
16900
+ }
16901
+ function isScrollAreaAxisEnabled(direction, axis) {
16902
+ if (direction === "both") return true;
16903
+ return axis === "y" ? direction === "vertical" : direction === "horizontal";
16904
+ }
16905
+ function shouldRenderScrollAreaScrollbar(visibility, direction, axis, axisState) {
16906
+ if (visibility === "hidden") return false;
16907
+ if (!isScrollAreaAxisEnabled(direction, axis)) return false;
16908
+ if (visibility === "always") return true;
16909
+ return axisState.scrollable;
16910
+ }
16911
+ function getScrollAreaShadowSides(state, direction) {
16912
+ const sides = [];
16913
+ if (isScrollAreaAxisEnabled(direction, "y") && state.y.scrollable) {
16914
+ if (!state.y.atStart) sides.push("top");
16915
+ if (!state.y.atEnd) sides.push("bottom");
16916
+ }
16917
+ if (isScrollAreaAxisEnabled(direction, "x") && state.x.scrollable) {
16918
+ if (!state.x.atStart) sides.push("left");
16919
+ if (!state.x.atEnd) sides.push("right");
16920
+ }
16921
+ return sides;
16922
+ }
16923
+ function resolveScrollAreaLength(value) {
16924
+ if (value === void 0 || value === null || value === "") return void 0;
16925
+ return typeof value === "number" ? `${value}px` : value;
16926
+ }
16927
+ function getScrollAreaBoxStyle(options) {
16928
+ const style = {};
16929
+ const height = resolveScrollAreaLength(options.height);
16930
+ const maxHeight = resolveScrollAreaLength(options.maxHeight);
16931
+ const width = resolveScrollAreaLength(options.width);
16932
+ const maxWidth = resolveScrollAreaLength(options.maxWidth);
16933
+ if (height !== void 0) style.height = height;
16934
+ if (maxHeight !== void 0) style.maxHeight = maxHeight;
16935
+ if (width !== void 0) style.width = width;
16936
+ if (maxWidth !== void 0) style.maxWidth = maxWidth;
16937
+ return style;
16938
+ }
16939
+ function getScrollAreaViewportClasses(direction, className) {
16940
+ return [scrollAreaViewportBaseClasses, VIEWPORT_OVERFLOW_CLASSES[direction], className].filter(Boolean).join(" ");
16941
+ }
16942
+ function getScrollAreaContentClasses(direction) {
16943
+ return direction === "vertical" ? scrollAreaContentBaseClasses : `${scrollAreaContentBaseClasses} min-w-max`;
16944
+ }
16945
+ function getScrollAreaScrollbarClasses(axis, size2, visibility) {
16946
+ const thickness = SCROLLBAR_THICKNESS_CLASSES[size2][axis];
16947
+ const fade = visibility === "hover" ? "opacity-0 group-hover/scroll-area:opacity-100 group-focus-within/scroll-area:opacity-100" : "opacity-100";
16948
+ return [scrollAreaScrollbarBaseClasses, SCROLLBAR_PLACEMENT_CLASSES[axis], thickness, fade].join(
16949
+ " "
16950
+ );
16951
+ }
16952
+ function getScrollAreaThumbClasses(axis, dragging) {
16953
+ return [
16954
+ scrollAreaThumbBaseClasses,
16955
+ THUMB_AXIS_CLASSES[axis],
16956
+ dragging ? scrollAreaThumbDraggingClasses : ""
16957
+ ].filter(Boolean).join(" ");
16958
+ }
16959
+ function getScrollAreaThumbStyle(axis, axisState) {
16960
+ if (axis === "y") {
16961
+ return { height: `${axisState.thumbSize}px`, top: `${axisState.thumbOffset}px` };
16962
+ }
16963
+ return { width: `${axisState.thumbSize}px`, left: `${axisState.thumbOffset}px` };
16964
+ }
16965
+ function getScrollAreaShadowClasses(side) {
16966
+ return `${scrollAreaShadowBaseClasses} ${SHADOW_SIDE_CLASSES[side]}`;
16967
+ }
16968
+ function observeScrollAreaSize(targets, onResize) {
16969
+ if (typeof ResizeObserver === "undefined") return () => void 0;
16970
+ const observed = targets.filter((target) => Boolean(target));
16971
+ if (observed.length === 0) return () => void 0;
16972
+ const observer = new ResizeObserver(() => onResize());
16973
+ for (const target of observed) {
16974
+ observer.observe(target);
16975
+ }
16976
+ return () => observer.disconnect();
16977
+ }
16978
+
15244
16979
  // src/utils/code-editor-utils.ts
15245
16980
  var codeEditorBaseClasses = "relative font-mono text-sm leading-[1.625rem] border rounded overflow-hidden";
15246
16981
  var codeEditorLightClasses = "bg-white border-gray-200 text-gray-900";
@@ -17415,6 +19150,144 @@ async function getCropperResult(cropper) {
17415
19150
  return await cropper.getCropResult();
17416
19151
  }
17417
19152
 
19153
+ // src/utils/aspect-ratio-utils.ts
19154
+ var ASPECT_RATIO_DEFAULT = "16/9";
19155
+ var ASPECT_RATIO_DEFAULT_NUMERIC = 16 / 9;
19156
+ var ASPECT_RATIO_DEFAULT_STYLE = { aspectRatio: "16 / 9" };
19157
+ var ASPECT_RATIO_FRACTION_PATTERN = /^\s*(\d+(?:\.\d+)?)\s*\/\s*(\d+(?:\.\d+)?)\s*$/;
19158
+ var aspectRatioRootClasses = "tiger-aspect-ratio relative w-full";
19159
+ var aspectRatioContentClasses = "tiger-aspect-ratio-content absolute inset-0";
19160
+ function isValidAspectRatio(value) {
19161
+ return Number.isFinite(value) && value > 0;
19162
+ }
19163
+ function matchValidFraction(ratio) {
19164
+ const fraction = ASPECT_RATIO_FRACTION_PATTERN.exec(ratio);
19165
+ if (!fraction) return null;
19166
+ const numerator = Number(fraction[1]);
19167
+ const denominator = Number(fraction[2]);
19168
+ if (denominator <= 0 || !isValidAspectRatio(numerator) || !isValidAspectRatio(numerator / denominator)) {
19169
+ return null;
19170
+ }
19171
+ return { numerator: fraction[1], denominator: fraction[2] };
19172
+ }
19173
+ function parseAspectRatio(ratio, fallback = ASPECT_RATIO_DEFAULT_NUMERIC) {
19174
+ if (typeof ratio === "number") {
19175
+ return isValidAspectRatio(ratio) ? ratio : fallback;
19176
+ }
19177
+ if (typeof ratio === "string") {
19178
+ const fraction = matchValidFraction(ratio);
19179
+ if (fraction) {
19180
+ return Number(fraction.numerator) / Number(fraction.denominator);
19181
+ }
19182
+ const numeric = Number(ratio.trim());
19183
+ return isValidAspectRatio(numeric) ? numeric : fallback;
19184
+ }
19185
+ return fallback;
19186
+ }
19187
+ function getAspectRatioStyle(ratio) {
19188
+ if (typeof ratio === "string") {
19189
+ const fraction = matchValidFraction(ratio);
19190
+ if (fraction) {
19191
+ return { aspectRatio: fraction.numerator + " / " + fraction.denominator };
19192
+ }
19193
+ const numeric = Number(ratio.trim());
19194
+ if (isValidAspectRatio(numeric)) {
19195
+ return { aspectRatio: String(numeric) };
19196
+ }
19197
+ return ASPECT_RATIO_DEFAULT_STYLE;
19198
+ }
19199
+ if (typeof ratio === "number" && isValidAspectRatio(ratio)) {
19200
+ return { aspectRatio: String(ratio) };
19201
+ }
19202
+ return ASPECT_RATIO_DEFAULT_STYLE;
19203
+ }
19204
+ function getAspectRatioRootClasses(className) {
19205
+ return className ? aspectRatioRootClasses + " " + className : aspectRatioRootClasses;
19206
+ }
19207
+ function getAspectRatioContentClasses(className) {
19208
+ return className ? aspectRatioContentClasses + " " + className : aspectRatioContentClasses;
19209
+ }
19210
+
19211
+ // src/utils/masonry-utils.ts
19212
+ var MASONRY_DEFAULT_COLUMNS = 3;
19213
+ var MASONRY_DEFAULT_GAP = 16;
19214
+ var masonryRootClasses = "tiger-masonry flex w-full items-start";
19215
+ var masonryColumnClasses = "tiger-masonry-column flex min-w-0 flex-1 flex-col";
19216
+ var masonryItemClasses = "tiger-masonry-item";
19217
+ function clampMasonryColumnCount(value) {
19218
+ if (!Number.isFinite(value) || value < 1) return 1;
19219
+ return Math.floor(value);
19220
+ }
19221
+ function clampMasonryGap(value) {
19222
+ if (!Number.isFinite(value) || value < 0) return 0;
19223
+ return value;
19224
+ }
19225
+ function resolveMasonryColumnCount(columns, width) {
19226
+ const resolved = resolveResponsiveValue(
19227
+ columns ?? MASONRY_DEFAULT_COLUMNS,
19228
+ width,
19229
+ MASONRY_DEFAULT_COLUMNS
19230
+ );
19231
+ return clampMasonryColumnCount(resolved);
19232
+ }
19233
+ function resolveMasonryGap(gap, width) {
19234
+ const resolved = resolveResponsiveValue(gap ?? MASONRY_DEFAULT_GAP, width, MASONRY_DEFAULT_GAP);
19235
+ return clampMasonryGap(resolved);
19236
+ }
19237
+ function distributeMasonryItems(heights, columnCount) {
19238
+ const count = clampMasonryColumnCount(columnCount);
19239
+ const columns = Array.from({ length: count }, () => []);
19240
+ const totals = new Array(count).fill(0);
19241
+ heights.forEach((rawHeight, index) => {
19242
+ const height = Number.isFinite(rawHeight) ? rawHeight : 0;
19243
+ let target = 0;
19244
+ for (let column = 1; column < count; column++) {
19245
+ if (totals[column] < totals[target]) target = column;
19246
+ }
19247
+ columns[target].push(index);
19248
+ totals[target] += height;
19249
+ });
19250
+ return columns;
19251
+ }
19252
+ function moduloDistributeMasonryItems(itemCount, columnCount) {
19253
+ const count = clampMasonryColumnCount(columnCount);
19254
+ const columns = Array.from({ length: count }, () => []);
19255
+ const total = Number.isFinite(itemCount) && itemCount > 0 ? Math.floor(itemCount) : 0;
19256
+ for (let index = 0; index < total; index++) {
19257
+ columns[index % count].push(index);
19258
+ }
19259
+ return columns;
19260
+ }
19261
+ function computeMasonryColumnHeights(heights, columns, gap) {
19262
+ const spacing = clampMasonryGap(gap);
19263
+ return columns.map((column) => {
19264
+ const total = column.reduce(
19265
+ (sum, index) => sum + (Number.isFinite(heights[index]) ? heights[index] : 0),
19266
+ 0
19267
+ );
19268
+ return total + Math.max(column.length - 1, 0) * spacing;
19269
+ });
19270
+ }
19271
+ function readMasonryItemHeight(element) {
19272
+ const height = element.getBoundingClientRect().height;
19273
+ return Number.isFinite(height) ? height : 0;
19274
+ }
19275
+ function getMasonryRootClasses(className) {
19276
+ return [masonryRootClasses, className].filter(Boolean).join(" ");
19277
+ }
19278
+ function getMasonryColumnClasses(className) {
19279
+ return [masonryColumnClasses, className].filter(Boolean).join(" ");
19280
+ }
19281
+ function getMasonryItemClasses(className) {
19282
+ return [masonryItemClasses, className].filter(Boolean).join(" ");
19283
+ }
19284
+ function getMasonryGapStyle(gap) {
19285
+ return { gap: `${clampMasonryGap(gap)}px` };
19286
+ }
19287
+ function getMasonryColumnStyle(gap) {
19288
+ return { rowGap: `${clampMasonryGap(gap)}px` };
19289
+ }
19290
+
17418
19291
  // src/theme-runtime/checkbox.ts
17419
19292
  var checkboxSizeClasses2 = {
17420
19293
  sm: "w-4 h-4",
@@ -19059,12 +20932,17 @@ var designTokens = {
19059
20932
  };
19060
20933
 
19061
20934
  // src/index.ts
19062
- var version = "2.0.0";
20935
+ var version = "2.1.0";
19063
20936
  export {
19064
20937
  ANIMATION_DURATION_FAST_MS,
19065
20938
  ANIMATION_DURATION_MS,
19066
20939
  ANIMATION_DURATION_SLOW_MS,
20940
+ ASPECT_RATIO_DEFAULT,
20941
+ CASCADER_DEFAULT_LIST_HEIGHT,
19067
20942
  COMPONENT_MOTION_VARS,
20943
+ CONTEXT_MENU_ENTER_CLASS,
20944
+ CONTEXT_MENU_POINT_SIZE,
20945
+ CONTEXT_MENU_SUB_CHEVRON_PATH,
19068
20946
  COUNTDOWN_DEFAULT_FORMAT,
19069
20947
  COUNTDOWN_DEFAULT_INTERVAL_MS,
19070
20948
  CROP_HANDLES,
@@ -19079,16 +20957,41 @@ export {
19079
20957
  DEFAULT_FORM_VALIDATION_LABELS,
19080
20958
  DEFAULT_FORM_WIZARD_LABELS,
19081
20959
  DEFAULT_HEATMAP_CANVAS_THRESHOLD,
20960
+ DEFAULT_HIGHLIGHT_CASE_SENSITIVE,
20961
+ DEFAULT_HIGHLIGHT_GLOBAL,
20962
+ DEFAULT_IMAGE_COMPARE_ARIA_LABEL,
20963
+ DEFAULT_IMAGE_COMPARE_FIT,
20964
+ DEFAULT_IMAGE_COMPARE_ORIENTATION,
20965
+ DEFAULT_IMAGE_COMPARE_POSITION,
20966
+ DEFAULT_IMAGE_COMPARE_STEP,
19082
20967
  DEFAULT_IMAGE_EDITOR_LABELS,
19083
20968
  DEFAULT_IMAGE_VIEWER_LABELS,
20969
+ DEFAULT_INPUT_OTP_LABELS,
20970
+ DEFAULT_KBD_SEPARATOR,
20971
+ DEFAULT_KBD_SIZE,
20972
+ DEFAULT_KBD_VARIANT,
20973
+ DEFAULT_LOADING_BAR_ARIA_LABEL,
20974
+ DEFAULT_LOADING_BAR_COLOR,
20975
+ DEFAULT_LOADING_BAR_HEIGHT,
19084
20976
  DEFAULT_MARKDOWN_EDITOR_LABELS,
20977
+ DEFAULT_MARQUEE_ARIA_LABEL,
20978
+ DEFAULT_MARQUEE_DIRECTION,
20979
+ DEFAULT_MARQUEE_DURATION_MS,
20980
+ DEFAULT_MARQUEE_GAP_PX,
20981
+ DEFAULT_MARQUEE_PAUSE_ON_HOVER,
20982
+ DEFAULT_MARQUEE_REPEAT,
20983
+ DEFAULT_MASK_TOKENS,
19085
20984
  DEFAULT_PAGINATION_LABELS,
19086
20985
  DEFAULT_RATE_LABELS,
19087
20986
  DEFAULT_RICH_TEXT_EDITOR_LABELS,
19088
20987
  DEFAULT_SELECT_LABELS,
20988
+ DEFAULT_SPLIT_BUTTON_SIZE,
20989
+ DEFAULT_SPLIT_BUTTON_TRIGGER_ARIA_LABEL,
20990
+ DEFAULT_SPLIT_BUTTON_VARIANT,
19089
20991
  DEFAULT_STATUS_LABELS,
19090
20992
  DEFAULT_TABLE_LABELS,
19091
20993
  DEFAULT_TABS_LABELS,
20994
+ DEFAULT_TAGS_INPUT_LABELS,
19092
20995
  DEFAULT_TASK_BOARD_LABELS,
19093
20996
  DEFAULT_TIME_PICKER_LABELS,
19094
20997
  DEFAULT_TOUR_LABELS,
@@ -19113,6 +21016,21 @@ export {
19113
21016
  FLOATING_OVERLAY_Z_INDEX,
19114
21017
  FORM_VALIDATION_PRESETS,
19115
21018
  GAUGE_ANIMATION_DURATION_MS,
21019
+ IMAGE_COMPARE_POSITION_VAR,
21020
+ LOADING_BAR_CONTAINER_ID,
21021
+ LOADING_BAR_CONTAINER_ROOT_ID,
21022
+ LOADING_BAR_FINISH_HIDE_DELAY_MS,
21023
+ LOADING_BAR_MAX_TRICKLE_PERCENTAGE,
21024
+ LOADING_BAR_START_PERCENTAGE,
21025
+ LOADING_BAR_TRICKLE_INTERVAL_MS,
21026
+ MARQUEE_COPIES_VAR,
21027
+ MARQUEE_CSS,
21028
+ MARQUEE_DURATION_VAR,
21029
+ MARQUEE_GAP_VAR,
21030
+ MARQUEE_STYLE_ID,
21031
+ MASONRY_DEFAULT_COLUMNS,
21032
+ MASONRY_DEFAULT_GAP,
21033
+ MAX_MARQUEE_REPEAT,
19116
21034
  MODERN_BASE_TOKENS_DARK,
19117
21035
  MODERN_BASE_TOKENS_LIGHT,
19118
21036
  MODERN_OVERRIDE_TOKENS_DARK,
@@ -19123,6 +21041,13 @@ export {
19123
21041
  MOTION_DURATION_TOKEN_VARS,
19124
21042
  MOTION_EASING_TOKEN_FALLBACKS,
19125
21043
  MOTION_EASING_TOKEN_VARS,
21044
+ NAVIGATION_MENU_BAR_ITEM_ATTR,
21045
+ NAVIGATION_MENU_CHEVRON_PATH,
21046
+ NAVIGATION_MENU_DEFAULT_DELAY_DURATION,
21047
+ NAVIGATION_MENU_DEFAULT_OFFSET,
21048
+ NAVIGATION_MENU_DEFAULT_SKIP_DELAY_DURATION,
21049
+ NAVIGATION_MENU_ENTER_CLASS,
21050
+ PAGE_HEADER_DEFAULT_BACK_ARIA_LABEL,
19126
21051
  PAGINATION_FULL_MODE_PAGE_THRESHOLD,
19127
21052
  PIE_BASE_SHADOW,
19128
21053
  PIE_EMPHASIS_SHADOW,
@@ -19132,6 +21057,7 @@ export {
19132
21057
  RESIZE_KEYBOARD_STEP,
19133
21058
  SCATTER_ENTRANCE_CLASS,
19134
21059
  SCATTER_ENTRANCE_KEYFRAMES,
21060
+ SCROLL_AREA_MIN_THUMB_SIZE,
19135
21061
  SHAKE_CLASS,
19136
21062
  STATISTIC_ANIMATION_DURATION_MS,
19137
21063
  SVG_ANIMATION_CLASSES,
@@ -19151,6 +21077,8 @@ export {
19151
21077
  TRANSITION_DURATIONS,
19152
21078
  TRANSITION_OPACITY,
19153
21079
  TRANSITION_TRANSFORM,
21080
+ TREE_SELECT_DEFAULT_HEIGHT,
21081
+ TREE_SELECT_DEFAULT_ITEM_HEIGHT,
19154
21082
  ThemeManager,
19155
21083
  VIEW_TRANSITION_CSS,
19156
21084
  WEEKDAYS,
@@ -19165,6 +21093,7 @@ export {
19165
21093
  ZH_CN_FORM_WIZARD_LABELS,
19166
21094
  ZH_CN_IMAGE_EDITOR_LABELS,
19167
21095
  ZH_CN_IMAGE_VIEWER_LABELS,
21096
+ ZH_CN_INPUT_OTP_LABELS,
19168
21097
  ZH_CN_MARKDOWN_EDITOR_LABELS,
19169
21098
  ZH_CN_PAGINATION_LABELS,
19170
21099
  ZH_CN_RATE_LABELS,
@@ -19173,6 +21102,7 @@ export {
19173
21102
  ZH_CN_STATUS_LABELS,
19174
21103
  ZH_CN_TABLE_LABELS,
19175
21104
  ZH_CN_TABS_LABELS,
21105
+ ZH_CN_TAGS_INPUT_LABELS,
19176
21106
  ZH_CN_TASK_BOARD_LABELS,
19177
21107
  ZH_CN_TIME_PICKER_LABELS,
19178
21108
  ZH_CN_TOUR_LABELS,
@@ -19189,6 +21119,7 @@ export {
19189
21119
  activityItemTitleGroupClasses,
19190
21120
  addDays,
19191
21121
  addMonths,
21122
+ addTags,
19192
21123
  addYears,
19193
21124
  affixWrapperClasses,
19194
21125
  alertBannerClasses,
@@ -19204,6 +21135,7 @@ export {
19204
21135
  alertIconSizeClasses,
19205
21136
  alertSizeClasses,
19206
21137
  alertTitleSizeClasses,
21138
+ alignTreeSelectVirtualScroll,
19207
21139
  anchorAffixClasses,
19208
21140
  anchorBaseClasses,
19209
21141
  anchorInkActiveHorizontalClasses,
@@ -19222,9 +21154,15 @@ export {
19222
21154
  applyFileDragReorder,
19223
21155
  applyFloatingStyles,
19224
21156
  applyMarkdownToolbarAction,
21157
+ applyMaskInput,
19225
21158
  applyNumberKeyboardInput,
21159
+ applyOtpBackspace,
21160
+ applyOtpCharInput,
21161
+ applyOtpDelete,
19226
21162
  applyWheelZoom,
19227
21163
  archiveIcon,
21164
+ aspectRatioContentClasses,
21165
+ aspectRatioRootClasses,
19228
21166
  autoCompleteBaseClasses,
19229
21167
  autoCompleteDropdownClasses,
19230
21168
  autoCompleteEmptyStateClasses,
@@ -19362,6 +21300,9 @@ export {
19362
21300
  clampDimensions,
19363
21301
  clampImageAnnotationPoint,
19364
21302
  clampImageAnnotationUnit,
21303
+ clampLoadingBarPercentage,
21304
+ clampMasonryColumnCount,
21305
+ clampMasonryGap,
19365
21306
  clampPaneSize,
19366
21307
  clampPercentage,
19367
21308
  clampScale,
@@ -19439,9 +21380,14 @@ export {
19439
21380
  computeGanttLayout,
19440
21381
  computeGaugeTicks,
19441
21382
  computeHeatmapCells,
21383
+ computeMasonryColumnHeights,
19442
21384
  computeOrgChartLayout,
19443
21385
  computePieHoverOffset,
19444
21386
  computePieLabelLine,
21387
+ computeScrollAreaAxisState,
21388
+ computeScrollAreaState,
21389
+ computeScrollFromThumbOffset,
21390
+ computeScrollFromTrackPoint,
19445
21391
  computeSunburstArcs,
19446
21392
  computeTreeMapNodes,
19447
21393
  constrainCropRect,
@@ -19451,6 +21397,7 @@ export {
19451
21397
  containerPaddingClasses,
19452
21398
  copyTextToClipboard,
19453
21399
  countLines,
21400
+ countMaskTokens,
19454
21401
  countdownBaseClasses,
19455
21402
  countdownPrefixClasses,
19456
21403
  countdownSuffixClasses,
@@ -19476,6 +21423,7 @@ export {
19476
21423
  createDefaultTransform,
19477
21424
  createDocumentDragSession,
19478
21425
  createDragState,
21426
+ createEmptyScrollAreaState,
19479
21427
  createFloatingIdFactory,
19480
21428
  createFocusTrap,
19481
21429
  createFormConditionDependencies,
@@ -19490,9 +21438,11 @@ export {
19490
21438
  createImageAnnotationBox,
19491
21439
  createImageAnnotationPath,
19492
21440
  createInfiniteScrollObserver,
21441
+ createInitialLoadingBarState,
19493
21442
  createInstanceCounter,
19494
21443
  createLinePath,
19495
21444
  createLinearScale,
21445
+ createLoadingBarController,
19496
21446
  createLongPressController,
19497
21447
  createMotionSequence,
19498
21448
  createNotificationStackUpdateScheduler,
@@ -19596,6 +21546,8 @@ export {
19596
21546
  descriptionsWrapperClasses,
19597
21547
  designTokens,
19598
21548
  devWarn,
21549
+ distributeMasonryItems,
21550
+ distributeOtpPaste,
19599
21551
  dotSizeClasses,
19600
21552
  dotsVariantConfig,
19601
21553
  downloadChartBlob,
@@ -19618,6 +21570,7 @@ export {
19618
21570
  ensureBarMinHeight,
19619
21571
  errorCircleSolidIcon20PathD,
19620
21572
  escapeHighlightHtml,
21573
+ escapeHighlightKeyword,
19621
21574
  escapeMarkdownHtml,
19622
21575
  evaluateFormCondition,
19623
21576
  evaluateFormConditions,
@@ -19629,6 +21582,8 @@ export {
19629
21582
  exportTableToExcel,
19630
21583
  extendedIcons,
19631
21584
  extractMentionQuery,
21585
+ extractRawValue,
21586
+ extractTagCandidates,
19632
21587
  fileManagerBreadcrumbClasses,
19633
21588
  fileManagerBreadcrumbItemClasses,
19634
21589
  fileManagerBreadcrumbSeparatorClasses,
@@ -19665,6 +21620,7 @@ export {
19665
21620
  findCascaderOption,
19666
21621
  findColumnFromPoint,
19667
21622
  findFirstEnabledIndex,
21623
+ findHighlightRanges,
19668
21624
  findHotkeyMatch,
19669
21625
  findLastEnabledIndex,
19670
21626
  findMarkdownHotkeyMatch,
@@ -19709,12 +21665,17 @@ export {
19709
21665
  formatGanttDate,
19710
21666
  formatInputNumberDisplay,
19711
21667
  formatIntlNumber,
21668
+ formatKbdCombo,
21669
+ formatKbdSeparatorText,
21670
+ formatMaskValue,
19712
21671
  formatMonthYear,
21672
+ formatOtpSlotLabel,
19713
21673
  formatPageAriaLabel,
19714
21674
  formatPaginationPageIndicator,
19715
21675
  formatPaginationTotal,
19716
21676
  formatPrecision,
19717
21677
  formatProgressText,
21678
+ formatRemoveTagLabel,
19718
21679
  formatStatisticValue,
19719
21680
  formatTableSelectRowAriaLabel,
19720
21681
  formatTableSortByText,
@@ -19759,6 +21720,9 @@ export {
19759
21720
  getAnchoredOverlayTabTarget,
19760
21721
  getAreaGradientPrefix,
19761
21722
  getArrowStyles,
21723
+ getAspectRatioContentClasses,
21724
+ getAspectRatioRootClasses,
21725
+ getAspectRatioStyle,
19762
21726
  getAutoCompleteInputClasses,
19763
21727
  getAutoCompleteOptionClasses,
19764
21728
  getAutoExpandKeys,
@@ -19801,6 +21765,9 @@ export {
19801
21765
  getCascaderOptionPath,
19802
21766
  getCascaderOptionsAtLevel,
19803
21767
  getCascaderTriggerClasses,
21768
+ getCascaderVirtualAlignScrollTop,
21769
+ getCascaderVirtualItemHeight,
21770
+ getCascaderVirtualRange,
19804
21771
  getChartAnimationStyle,
19805
21772
  getChartAxisTickCacheSize,
19806
21773
  getChartAxisTicks,
@@ -19843,6 +21810,16 @@ export {
19843
21810
  getContainerClasses,
19844
21811
  getContainerHeight,
19845
21812
  getContainerScrollTop,
21813
+ getContextMenuContainerClasses,
21814
+ getContextMenuItemClasses,
21815
+ getContextMenuMenuClasses,
21816
+ getContextMenuOpenPoint,
21817
+ getContextMenuPointFromElement,
21818
+ getContextMenuPointFromEvent,
21819
+ getContextMenuPointStyle,
21820
+ getContextMenuSubChevronClasses,
21821
+ getContextMenuSubTriggerClasses,
21822
+ getContextMenuTriggerClasses,
19846
21823
  getCountdownParts,
19847
21824
  getCountdownRemaining,
19848
21825
  getCountdownTitleClasses,
@@ -19942,6 +21919,9 @@ export {
19942
21919
  getGroupHeaderCellClasses,
19943
21920
  getGutterStyles,
19944
21921
  getHeatmapCellIndexAtPoint,
21922
+ getHighlightMarkClasses,
21923
+ getHighlightRootClasses,
21924
+ getHighlightSegments,
19945
21925
  getIconDefinition,
19946
21926
  getImageAnnotationCenter,
19947
21927
  getImageAnnotationPathData,
@@ -19950,6 +21930,19 @@ export {
19950
21930
  getImageAnnotationStrokeColor,
19951
21931
  getImageAnnotationToolButtonClasses,
19952
21932
  getImageAnnotationToolLabel,
21933
+ getImageCompareAfterClasses,
21934
+ getImageCompareBeforeClasses,
21935
+ getImageCompareClipStyle,
21936
+ getImageCompareHandleClasses,
21937
+ getImageCompareHandleStyle,
21938
+ getImageCompareImgClasses,
21939
+ getImageCompareKeyboardPosition,
21940
+ getImageCompareKnobClasses,
21941
+ getImageCompareLineClasses,
21942
+ getImageComparePointerClientPoint,
21943
+ getImageComparePositionFromPointer,
21944
+ getImageCompareRootClasses,
21945
+ getImageCompareRootStyle,
19953
21946
  getImageEditorLabels,
19954
21947
  getImageGroupClasses,
19955
21948
  getImageImgClasses,
@@ -19977,11 +21970,15 @@ export {
19977
21970
  getInputNumberStatusClasses,
19978
21971
  getInputNumberStepButtonClasses,
19979
21972
  getInputNumberWrapperClasses,
21973
+ getInputOTPLabels,
19980
21974
  getInputPasswordToggleClasses,
19981
21975
  getInputWrapperClasses,
19982
21976
  getIntlPluralCategory,
19983
21977
  getJustifyClasses,
19984
21978
  getKanbanContainerClasses,
21979
+ getKbdParts,
21980
+ getKbdRootClasses,
21981
+ getKbdVariantClasses,
19985
21982
  getLayoutContentClasses,
19986
21983
  getLayoutHeaderClasses,
19987
21984
  getLeafKeys,
@@ -19993,6 +21990,10 @@ export {
19993
21990
  getListHeaderFooterClasses,
19994
21991
  getListItemClasses,
19995
21992
  getLoadingBarClasses,
21993
+ getLoadingBarColorClasses,
21994
+ getLoadingBarContainerClasses,
21995
+ getLoadingBarFillClasses,
21996
+ getLoadingBarFillStyle,
19996
21997
  getLoadingBarsWrapperClasses,
19997
21998
  getLoadingClasses,
19998
21999
  getLoadingDotClasses,
@@ -20005,6 +22006,16 @@ export {
20005
22006
  getMarkdownEditorLabels,
20006
22007
  getMarkdownToolbarButtonClasses,
20007
22008
  getMarkdownToolbarButtons,
22009
+ getMarqueeContentClasses,
22010
+ getMarqueeRootClasses,
22011
+ getMarqueeTrackClasses,
22012
+ getMarqueeTrackStyle,
22013
+ getMaskCaretPosition,
22014
+ getMasonryColumnClasses,
22015
+ getMasonryColumnStyle,
22016
+ getMasonryGapStyle,
22017
+ getMasonryItemClasses,
22018
+ getMasonryRootClasses,
20008
22019
  getMentionsInputClasses,
20009
22020
  getMentionsOptionClasses,
20010
22021
  getMenuButtons,
@@ -20019,6 +22030,14 @@ export {
20019
22030
  getModalContentClasses,
20020
22031
  getMonthDays,
20021
22032
  getMonthNames,
22033
+ getNavigationMenuBarItems,
22034
+ getNavigationMenuChevronClasses,
22035
+ getNavigationMenuClasses,
22036
+ getNavigationMenuContentClasses,
22037
+ getNavigationMenuItemClasses,
22038
+ getNavigationMenuLinkClasses,
22039
+ getNavigationMenuListClasses,
22040
+ getNavigationMenuTriggerClasses,
20022
22041
  getNextActiveKey,
20023
22042
  getNextColorSwatchIndex,
20024
22043
  getNextImageAnnotationTool,
@@ -20037,6 +22056,13 @@ export {
20037
22056
  getOrgChartLinkPath,
20038
22057
  getOrgChartNodeAriaLabel,
20039
22058
  getOrgChartNodeClasses,
22059
+ getOtpContainerClasses,
22060
+ getOtpErrorClasses,
22061
+ getOtpSeparatorClasses,
22062
+ getOtpSeparatorIndices,
22063
+ getOtpSlotClasses,
22064
+ getPageHeaderBackButtonClasses,
22065
+ getPageHeaderRootClasses,
20040
22066
  getPageNumbers,
20041
22067
  getPageRange,
20042
22068
  getPageSizeSelectorClasses,
@@ -20110,6 +22136,14 @@ export {
20110
22136
  getScatterHoverShadow,
20111
22137
  getScatterHoverSize,
20112
22138
  getScatterPointPath,
22139
+ getScrollAreaBoxStyle,
22140
+ getScrollAreaContentClasses,
22141
+ getScrollAreaScrollbarClasses,
22142
+ getScrollAreaShadowClasses,
22143
+ getScrollAreaShadowSides,
22144
+ getScrollAreaThumbClasses,
22145
+ getScrollAreaThumbStyle,
22146
+ getScrollAreaViewportClasses,
20113
22147
  getScrollSpyItemByHref,
20114
22148
  getScrollSpyItemByKey,
20115
22149
  getScrollSpyItemClasses,
@@ -20148,6 +22182,9 @@ export {
20148
22182
  getSpaceStyle,
20149
22183
  getSpanClasses,
20150
22184
  getSpinnerSVG,
22185
+ getSplitButtonPrimaryClasses,
22186
+ getSplitButtonRootClasses,
22187
+ getSplitButtonTriggerClasses,
20151
22188
  getSplitterContainerClasses,
20152
22189
  getSplitterGutterClasses,
20153
22190
  getSplitterGutterHandleClasses,
@@ -20203,6 +22240,12 @@ export {
20203
22240
  getTabsContainerClasses,
20204
22241
  getTabsLabels,
20205
22242
  getTagVariantClasses,
22243
+ getTagsInputClearButtonClasses,
22244
+ getTagsInputContainerClasses,
22245
+ getTagsInputErrorClasses,
22246
+ getTagsInputHighlightClasses,
22247
+ getTagsInputInnerInputClasses,
22248
+ getTagsInputLabels,
20206
22249
  getTaskBoardLabels,
20207
22250
  getTextClasses,
20208
22251
  getThemeColor,
@@ -20244,8 +22287,11 @@ export {
20244
22287
  getTreeNodeClasses,
20245
22288
  getTreeNodeExpandIconClasses,
20246
22289
  getTreeSelectDisplayLabel,
22290
+ getTreeSelectDropdownClasses,
20247
22291
  getTreeSelectNodeClasses,
20248
22292
  getTreeSelectTriggerClasses,
22293
+ getTreeSelectVirtualAlignScrollTop,
22294
+ getTreeSelectVisibleIndex,
20249
22295
  getUploadButtonClasses,
20250
22296
  getUploadDataTransferFiles,
20251
22297
  getUploadLabels,
@@ -20279,6 +22325,7 @@ export {
20279
22325
  handleDragStart,
20280
22326
  handleDrop,
20281
22327
  handleMenuNavigation,
22328
+ handleMenubarNavigation,
20282
22329
  handleNodeCheck,
20283
22330
  handleTabKey,
20284
22331
  handleUploadDragLeave,
@@ -20286,10 +22333,13 @@ export {
20286
22333
  handleUploadDrop,
20287
22334
  hasErrors,
20288
22335
  hasGutter,
22336
+ hasPageHeaderHeadingContent,
20289
22337
  hasTableSelectionColumn,
20290
22338
  helpCircleIcon,
20291
22339
  hexToRgb2 as hexToRgb,
20292
22340
  highContrastTheme,
22341
+ highlightMarkClasses,
22342
+ highlightRootClasses,
20293
22343
  hsvToRgb,
20294
22344
  icon16ViewBox,
20295
22345
  icon20ViewBox,
@@ -20315,6 +22365,20 @@ export {
20315
22365
  imageAnnotationToolButtonClasses,
20316
22366
  imageAnnotationToolbarClasses,
20317
22367
  imageBaseClasses,
22368
+ imageCompareAfterClasses,
22369
+ imageCompareBeforeClasses,
22370
+ imageCompareDisabledClasses,
22371
+ imageCompareHandleClasses,
22372
+ imageCompareHandleDisabledClasses,
22373
+ imageCompareHandleHorizontalClasses,
22374
+ imageCompareHandleVerticalClasses,
22375
+ imageCompareHorizontalClasses,
22376
+ imageCompareKnobClasses,
22377
+ imageCompareLineClasses,
22378
+ imageCompareLineHorizontalClasses,
22379
+ imageCompareLineVerticalClasses,
22380
+ imageCompareRootClasses,
22381
+ imageCompareVerticalClasses,
20318
22382
  imageCropperContainerClasses,
20319
22383
  imageCropperDragAreaClasses,
20320
22384
  imageCropperGuideClasses,
@@ -20347,9 +22411,13 @@ export {
20347
22411
  infiniteScrollEndClasses,
20348
22412
  infiniteScrollLoaderClasses,
20349
22413
  infiniteScrollSentinelClasses,
22414
+ initNavigationMenuRovingTabIndex,
20350
22415
  initRovingTabIndex,
22416
+ injectContextMenuStyles,
20351
22417
  injectDropdownStyles,
20352
22418
  injectLoadingAnimationStyles,
22419
+ injectMarqueeStyles,
22420
+ injectNavigationMenuStyles,
20353
22421
  injectShakeStyle,
20354
22422
  injectSvgAnimationStyles,
20355
22423
  injectViewTransitionStyles,
@@ -20376,6 +22444,7 @@ export {
20376
22444
  isCascaderOptionExpandable,
20377
22445
  isColorSwatchSelected,
20378
22446
  isContentEmpty,
22447
+ isContextMenuKeyboardEvent,
20379
22448
  isCrossContainerDrag,
20380
22449
  isDateInRange,
20381
22450
  isDragEnabled,
@@ -20387,6 +22456,8 @@ export {
20387
22456
  isHttpResultStatus,
20388
22457
  isImageAnnotationPathClosed,
20389
22458
  isImageAnnotationShapeTool,
22459
+ isImageCompareInteractiveTarget,
22460
+ isImageCompareVertical,
20390
22461
  isInlineFormat,
20391
22462
  isKeyActive,
20392
22463
  isKeyOpen,
@@ -20394,15 +22465,24 @@ export {
20394
22465
  isLazyTigerLocale,
20395
22466
  isLongPress,
20396
22467
  isMarkdownToolbarSeparator,
22468
+ isMarqueeFocusInside,
22469
+ isMarqueePaused,
22470
+ isMarqueeReverse,
22471
+ isMarqueeVertical,
20397
22472
  isMobile,
20398
22473
  isModalSheetSwipeCloseGesture,
22474
+ isNavigationMenuOpen,
22475
+ isNavigationMenuTriggerOpenKey,
22476
+ isNavigationMenuValueOpen,
20399
22477
  isNextDisabled,
20400
22478
  isOptionGroup,
22479
+ isOtpComplete,
20401
22480
  isPanelActive,
20402
22481
  isPrevDisabled,
20403
22482
  isRtlLocale,
20404
22483
  isSameContainerDrag,
20405
22484
  isSameDay,
22485
+ isScrollAreaAxisEnabled,
20406
22486
  isSignatureEmpty,
20407
22487
  isSpaceKey,
20408
22488
  isTabKey,
@@ -20422,6 +22502,10 @@ export {
20422
22502
  kanbanSwimlaneCollapsedClasses,
20423
22503
  kanbanSwimlaneDotClasses,
20424
22504
  kanbanSwimlaneHeaderClasses,
22505
+ kbdBaseClasses,
22506
+ kbdKeyClasses,
22507
+ kbdSeparatorClasses,
22508
+ kbdSubtleVariantClasses,
20425
22509
  keyIcon,
20426
22510
  layoutContentClasses,
20427
22511
  layoutFooterClasses,
@@ -20455,6 +22539,9 @@ export {
20455
22539
  listSizeClasses,
20456
22540
  listWrapperClasses,
20457
22541
  loadingBarBaseClasses,
22542
+ loadingBarColorClasses,
22543
+ loadingBarContainerBaseClasses,
22544
+ loadingBarFillBaseClasses,
20458
22545
  loadingBarsWrapperBaseClasses,
20459
22546
  loadingColorClasses,
20460
22547
  loadingContainerBaseClasses,
@@ -20484,6 +22571,20 @@ export {
20484
22571
  markdownEditorToolbarSeparatorClasses,
20485
22572
  markdownHotkeyMatches,
20486
22573
  markdownModeLabels,
22574
+ marqueeCloneClasses,
22575
+ marqueeContentClasses,
22576
+ marqueeContentVerticalClasses,
22577
+ marqueeHorizontalClasses,
22578
+ marqueePauseHoverClasses,
22579
+ marqueeReverseClasses,
22580
+ marqueeRootClasses,
22581
+ marqueeStaticClasses,
22582
+ marqueeTrackClasses,
22583
+ marqueeTrackVerticalClasses,
22584
+ marqueeVerticalClasses,
22585
+ masonryColumnClasses,
22586
+ masonryItemClasses,
22587
+ masonryRootClasses,
20487
22588
  matchesHotkey,
20488
22589
  matchesMenuSearch,
20489
22590
  measureTableResizeSnapshot,
@@ -20508,6 +22609,7 @@ export {
20508
22609
  menuSearchEmptyClasses,
20509
22610
  menuSearchFieldClasses,
20510
22611
  menuSearchInputClasses,
22612
+ mergeHighlightRanges,
20511
22613
  mergeStyleValues,
20512
22614
  mergeTigerLocale,
20513
22615
  messageBaseClasses,
@@ -20533,6 +22635,7 @@ export {
20533
22635
  modalTitleClasses,
20534
22636
  modalWrapperClasses,
20535
22637
  modernTheme,
22638
+ moduloDistributeMasonryItems,
20536
22639
  moonIcon,
20537
22640
  moveCard,
20538
22641
  moveCropRect,
@@ -20545,6 +22648,7 @@ export {
20545
22648
  naturalTheme,
20546
22649
  navigateToFolder,
20547
22650
  nextIconPath,
22651
+ nextLoadingBarTricklePercentage,
20548
22652
  normalizeActiveKeys,
20549
22653
  normalizeChartBrushRange,
20550
22654
  normalizeChartPadding,
@@ -20553,10 +22657,13 @@ export {
20553
22657
  normalizeCronExpression,
20554
22658
  normalizeDate,
20555
22659
  normalizeGanttDate,
22660
+ normalizeHighlightKeywords,
20556
22661
  normalizeImageAnnotationBox,
22662
+ normalizeKbdKeys,
20557
22663
  normalizeMenuSearchQuery,
20558
22664
  normalizeNumberKeyboardValue,
20559
22665
  normalizeOrgChartData,
22666
+ normalizeOtpValue,
20560
22667
  normalizeRotation,
20561
22668
  normalizeSpotlightText,
20562
22669
  normalizeStringOption,
@@ -20580,6 +22687,7 @@ export {
20580
22687
  numberKeyboardGridClasses,
20581
22688
  numberKeyboardKeyClasses,
20582
22689
  numberKeyboardRootClasses,
22690
+ observeScrollAreaSize,
20583
22691
  orderTableFixedColumns,
20584
22692
  orgChartLinkClasses,
20585
22693
  orgChartNodeClasses,
@@ -20589,8 +22697,21 @@ export {
20589
22697
  orgChartNodeTitleClasses,
20590
22698
  padCountdownNumber,
20591
22699
  padTwo,
22700
+ pageHeaderActionsClasses,
22701
+ pageHeaderBackButtonClasses,
22702
+ pageHeaderBackIconClasses,
22703
+ pageHeaderBackWrapClasses,
22704
+ pageHeaderContentClasses,
22705
+ pageHeaderHeadingRowClasses,
22706
+ pageHeaderMainClasses,
22707
+ pageHeaderRootClasses,
22708
+ pageHeaderStartClasses,
22709
+ pageHeaderSubtitleClasses,
22710
+ pageHeaderTitleClasses,
22711
+ pageHeaderTitleRowClasses,
20592
22712
  paginateData,
20593
22713
  paperclipIcon,
22714
+ parseAspectRatio,
20594
22715
  parseColorInput,
20595
22716
  parseCountdownTimestamp,
20596
22717
  parseCronFieldControl,
@@ -20601,6 +22722,7 @@ export {
20601
22722
  parseInputNumberValue,
20602
22723
  parseInputValue,
20603
22724
  parseHeight as parseMarkdownHeight,
22725
+ parseMask,
20604
22726
  parsePaneSize,
20605
22727
  parseTime,
20606
22728
  parseWidthToPx,
@@ -20668,10 +22790,13 @@ export {
20668
22790
  rateHoverColor,
20669
22791
  rateInactiveColor,
20670
22792
  readFileAsDataUrl,
22793
+ readMasonryItemHeight,
22794
+ readScrollAreaMetrics,
20671
22795
  redoFormHistory,
20672
22796
  registerEscapeDismiss,
20673
22797
  registerImageGroupItem,
20674
22798
  removeCssVarsCached,
22799
+ removeTagAt,
20675
22800
  renderMarkdownInline,
20676
22801
  renderMarkdownToHtml,
20677
22802
  renderTokenHtml,
@@ -20714,17 +22839,48 @@ export {
20714
22839
  resolveFormConditionState,
20715
22840
  resolveFormFieldConditionState,
20716
22841
  resolveHeatmapRenderMode,
22842
+ resolveHighlightCaseSensitive,
22843
+ resolveHighlightGlobal,
22844
+ resolveHighlightText,
22845
+ resolveImageCompareAriaLabel,
22846
+ resolveImageCompareFit,
22847
+ resolveImageCompareOrientation,
22848
+ resolveImageComparePosition,
22849
+ resolveImageCompareStep,
22850
+ resolveKbdSeparator,
22851
+ resolveKbdSize,
22852
+ resolveKbdVariant,
22853
+ resolveLoadingBarAriaLabel,
22854
+ resolveLoadingBarColor,
22855
+ resolveLoadingBarFillColor,
22856
+ resolveLoadingBarHeight,
22857
+ resolveLoadingBarMountTarget,
20717
22858
  resolveLocaleText,
22859
+ resolveMarqueeAriaLabel,
22860
+ resolveMarqueeDirection,
22861
+ resolveMarqueeDuration,
22862
+ resolveMarqueeGap,
22863
+ resolveMarqueePauseOnHover,
22864
+ resolveMarqueeRepeat,
22865
+ resolveMasonryColumnCount,
22866
+ resolveMasonryGap,
20718
22867
  resolveMotionDuration,
20719
22868
  resolveMotionEasing,
20720
22869
  resolveMultiSeriesTooltipContent,
22870
+ resolveNavigationMenuOpenValue,
22871
+ resolvePageHeaderBackAriaLabel,
22872
+ resolvePageHeaderBackVisibility,
20721
22873
  resolvePaginationDisplayMode,
20722
22874
  resolvePanGesture,
20723
22875
  resolvePinchScale,
20724
22876
  resolveResponsiveChartSize,
20725
22877
  resolveResponsiveValue,
22878
+ resolveScrollAreaLength,
20726
22879
  resolveSelectFilteredOptions,
20727
22880
  resolveSeriesData,
22881
+ resolveSplitButtonSize,
22882
+ resolveSplitButtonTriggerAriaLabel,
22883
+ resolveSplitButtonVariant,
20728
22884
  resolveSwipeGesture,
20729
22885
  resolveTableColumnWidth,
20730
22886
  resolveTigerLocale,
@@ -20754,7 +22910,15 @@ export {
20754
22910
  runStepValidation,
20755
22911
  runUploadQueue,
20756
22912
  sanitizeHtml,
22913
+ sanitizeOtpInput,
20757
22914
  scatterPointTransitionClasses,
22915
+ scrollAreaContentBaseClasses,
22916
+ scrollAreaRootClasses,
22917
+ scrollAreaScrollbarBaseClasses,
22918
+ scrollAreaShadowBaseClasses,
22919
+ scrollAreaThumbBaseClasses,
22920
+ scrollAreaThumbDraggingClasses,
22921
+ scrollAreaViewportBaseClasses,
20758
22922
  scrollSpyItemActiveClasses,
20759
22923
  scrollSpyItemBaseClasses,
20760
22924
  scrollSpyItemDisabledClasses,
@@ -20789,8 +22953,11 @@ export {
20789
22953
  shouldCommitImageAnnotationBox,
20790
22954
  shouldHideBadge,
20791
22955
  shouldLoadMore,
22956
+ shouldLoopMarquee,
20792
22957
  shouldReduceMotion,
22958
+ shouldRenderScrollAreaScrollbar,
20793
22959
  shouldShowBackTop,
22960
+ shouldSkipNavigationMenuOpenDelay,
20794
22961
  signatureCanvasClasses,
20795
22962
  signatureCanvasWrapClasses,
20796
22963
  signatureClearButtonClasses,
@@ -20827,6 +22994,13 @@ export {
20827
22994
  sortFileItems,
20828
22995
  sortNotificationGroups,
20829
22996
  sparklesIcon,
22997
+ splitButtonPrimaryBlockClasses,
22998
+ splitButtonPrimaryClasses,
22999
+ splitButtonRootBlockClasses,
23000
+ splitButtonRootClasses,
23001
+ splitButtonTriggerClasses,
23002
+ splitButtonTriggerSizeClasses,
23003
+ splitTagInput,
20830
23004
  splitTransferData,
20831
23005
  splitterBaseClasses,
20832
23006
  splitterGutterBaseClasses,