@expcat/tigercat-core 2.0.4 → 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,13 +16780,209 @@ 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
- var codeEditorBaseClasses = "relative font-mono text-sm leading-relaxed border rounded overflow-hidden";
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";
15247
16982
  var codeEditorDarkClasses = "bg-gray-900 border-gray-700 text-gray-100";
15248
16983
  var codeEditorDisabledClasses = "opacity-60 cursor-not-allowed";
15249
- var codeEditorTextareaClasses = "absolute inset-0 w-full h-full resize-none outline-none bg-transparent text-transparent caret-current p-3 font-mono text-sm leading-relaxed whitespace-pre overflow-auto";
15250
- var codeEditorHighlightClasses = "p-3 font-mono text-sm leading-relaxed whitespace-pre overflow-auto pointer-events-none";
16984
+ var codeEditorTextareaClasses = "absolute inset-0 w-full h-full resize-none outline-none bg-transparent text-transparent p-3 font-mono text-sm leading-[1.625rem] whitespace-pre overflow-auto";
16985
+ var codeEditorHighlightClasses = "p-3 font-mono text-sm leading-[1.625rem] whitespace-pre overflow-auto pointer-events-none";
15251
16986
  var codeEditorLineNumberClasses = "select-none text-right pr-3 pl-2 border-r min-w-[3rem] flex-shrink-0";
15252
16987
  var codeEditorLineNumberLightClasses = "bg-gray-50 border-gray-200 text-gray-400";
15253
16988
  var codeEditorLineNumberDarkClasses = "bg-gray-800 border-gray-700 text-gray-500";
@@ -15256,6 +16991,9 @@ var codeEditorActiveLineDarkClasses = "bg-gray-800/60";
15256
16991
  function getCodeEditorActiveLineClasses(theme) {
15257
16992
  return theme === "dark" ? codeEditorActiveLineDarkClasses : codeEditorActiveLineLightClasses;
15258
16993
  }
16994
+ function getCodeEditorCaretClasses(theme) {
16995
+ return theme === "dark" ? "caret-gray-100" : "caret-gray-900";
16996
+ }
15259
16997
  function getActiveLineIndex(value, caretPosition) {
15260
16998
  const clamped = Math.max(0, Math.min(caretPosition, value.length));
15261
16999
  let line = 0;
@@ -17412,6 +19150,144 @@ async function getCropperResult(cropper) {
17412
19150
  return await cropper.getCropResult();
17413
19151
  }
17414
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
+
17415
19291
  // src/theme-runtime/checkbox.ts
17416
19292
  var checkboxSizeClasses2 = {
17417
19293
  sm: "w-4 h-4",
@@ -19056,12 +20932,17 @@ var designTokens = {
19056
20932
  };
19057
20933
 
19058
20934
  // src/index.ts
19059
- var version = "2.0.0";
20935
+ var version = "2.1.0";
19060
20936
  export {
19061
20937
  ANIMATION_DURATION_FAST_MS,
19062
20938
  ANIMATION_DURATION_MS,
19063
20939
  ANIMATION_DURATION_SLOW_MS,
20940
+ ASPECT_RATIO_DEFAULT,
20941
+ CASCADER_DEFAULT_LIST_HEIGHT,
19064
20942
  COMPONENT_MOTION_VARS,
20943
+ CONTEXT_MENU_ENTER_CLASS,
20944
+ CONTEXT_MENU_POINT_SIZE,
20945
+ CONTEXT_MENU_SUB_CHEVRON_PATH,
19065
20946
  COUNTDOWN_DEFAULT_FORMAT,
19066
20947
  COUNTDOWN_DEFAULT_INTERVAL_MS,
19067
20948
  CROP_HANDLES,
@@ -19076,16 +20957,41 @@ export {
19076
20957
  DEFAULT_FORM_VALIDATION_LABELS,
19077
20958
  DEFAULT_FORM_WIZARD_LABELS,
19078
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,
19079
20967
  DEFAULT_IMAGE_EDITOR_LABELS,
19080
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,
19081
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,
19082
20984
  DEFAULT_PAGINATION_LABELS,
19083
20985
  DEFAULT_RATE_LABELS,
19084
20986
  DEFAULT_RICH_TEXT_EDITOR_LABELS,
19085
20987
  DEFAULT_SELECT_LABELS,
20988
+ DEFAULT_SPLIT_BUTTON_SIZE,
20989
+ DEFAULT_SPLIT_BUTTON_TRIGGER_ARIA_LABEL,
20990
+ DEFAULT_SPLIT_BUTTON_VARIANT,
19086
20991
  DEFAULT_STATUS_LABELS,
19087
20992
  DEFAULT_TABLE_LABELS,
19088
20993
  DEFAULT_TABS_LABELS,
20994
+ DEFAULT_TAGS_INPUT_LABELS,
19089
20995
  DEFAULT_TASK_BOARD_LABELS,
19090
20996
  DEFAULT_TIME_PICKER_LABELS,
19091
20997
  DEFAULT_TOUR_LABELS,
@@ -19110,6 +21016,21 @@ export {
19110
21016
  FLOATING_OVERLAY_Z_INDEX,
19111
21017
  FORM_VALIDATION_PRESETS,
19112
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,
19113
21034
  MODERN_BASE_TOKENS_DARK,
19114
21035
  MODERN_BASE_TOKENS_LIGHT,
19115
21036
  MODERN_OVERRIDE_TOKENS_DARK,
@@ -19120,6 +21041,13 @@ export {
19120
21041
  MOTION_DURATION_TOKEN_VARS,
19121
21042
  MOTION_EASING_TOKEN_FALLBACKS,
19122
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,
19123
21051
  PAGINATION_FULL_MODE_PAGE_THRESHOLD,
19124
21052
  PIE_BASE_SHADOW,
19125
21053
  PIE_EMPHASIS_SHADOW,
@@ -19129,6 +21057,7 @@ export {
19129
21057
  RESIZE_KEYBOARD_STEP,
19130
21058
  SCATTER_ENTRANCE_CLASS,
19131
21059
  SCATTER_ENTRANCE_KEYFRAMES,
21060
+ SCROLL_AREA_MIN_THUMB_SIZE,
19132
21061
  SHAKE_CLASS,
19133
21062
  STATISTIC_ANIMATION_DURATION_MS,
19134
21063
  SVG_ANIMATION_CLASSES,
@@ -19148,6 +21077,8 @@ export {
19148
21077
  TRANSITION_DURATIONS,
19149
21078
  TRANSITION_OPACITY,
19150
21079
  TRANSITION_TRANSFORM,
21080
+ TREE_SELECT_DEFAULT_HEIGHT,
21081
+ TREE_SELECT_DEFAULT_ITEM_HEIGHT,
19151
21082
  ThemeManager,
19152
21083
  VIEW_TRANSITION_CSS,
19153
21084
  WEEKDAYS,
@@ -19162,6 +21093,7 @@ export {
19162
21093
  ZH_CN_FORM_WIZARD_LABELS,
19163
21094
  ZH_CN_IMAGE_EDITOR_LABELS,
19164
21095
  ZH_CN_IMAGE_VIEWER_LABELS,
21096
+ ZH_CN_INPUT_OTP_LABELS,
19165
21097
  ZH_CN_MARKDOWN_EDITOR_LABELS,
19166
21098
  ZH_CN_PAGINATION_LABELS,
19167
21099
  ZH_CN_RATE_LABELS,
@@ -19170,6 +21102,7 @@ export {
19170
21102
  ZH_CN_STATUS_LABELS,
19171
21103
  ZH_CN_TABLE_LABELS,
19172
21104
  ZH_CN_TABS_LABELS,
21105
+ ZH_CN_TAGS_INPUT_LABELS,
19173
21106
  ZH_CN_TASK_BOARD_LABELS,
19174
21107
  ZH_CN_TIME_PICKER_LABELS,
19175
21108
  ZH_CN_TOUR_LABELS,
@@ -19186,6 +21119,7 @@ export {
19186
21119
  activityItemTitleGroupClasses,
19187
21120
  addDays,
19188
21121
  addMonths,
21122
+ addTags,
19189
21123
  addYears,
19190
21124
  affixWrapperClasses,
19191
21125
  alertBannerClasses,
@@ -19201,6 +21135,7 @@ export {
19201
21135
  alertIconSizeClasses,
19202
21136
  alertSizeClasses,
19203
21137
  alertTitleSizeClasses,
21138
+ alignTreeSelectVirtualScroll,
19204
21139
  anchorAffixClasses,
19205
21140
  anchorBaseClasses,
19206
21141
  anchorInkActiveHorizontalClasses,
@@ -19219,9 +21154,15 @@ export {
19219
21154
  applyFileDragReorder,
19220
21155
  applyFloatingStyles,
19221
21156
  applyMarkdownToolbarAction,
21157
+ applyMaskInput,
19222
21158
  applyNumberKeyboardInput,
21159
+ applyOtpBackspace,
21160
+ applyOtpCharInput,
21161
+ applyOtpDelete,
19223
21162
  applyWheelZoom,
19224
21163
  archiveIcon,
21164
+ aspectRatioContentClasses,
21165
+ aspectRatioRootClasses,
19225
21166
  autoCompleteBaseClasses,
19226
21167
  autoCompleteDropdownClasses,
19227
21168
  autoCompleteEmptyStateClasses,
@@ -19359,6 +21300,9 @@ export {
19359
21300
  clampDimensions,
19360
21301
  clampImageAnnotationPoint,
19361
21302
  clampImageAnnotationUnit,
21303
+ clampLoadingBarPercentage,
21304
+ clampMasonryColumnCount,
21305
+ clampMasonryGap,
19362
21306
  clampPaneSize,
19363
21307
  clampPercentage,
19364
21308
  clampScale,
@@ -19436,9 +21380,14 @@ export {
19436
21380
  computeGanttLayout,
19437
21381
  computeGaugeTicks,
19438
21382
  computeHeatmapCells,
21383
+ computeMasonryColumnHeights,
19439
21384
  computeOrgChartLayout,
19440
21385
  computePieHoverOffset,
19441
21386
  computePieLabelLine,
21387
+ computeScrollAreaAxisState,
21388
+ computeScrollAreaState,
21389
+ computeScrollFromThumbOffset,
21390
+ computeScrollFromTrackPoint,
19442
21391
  computeSunburstArcs,
19443
21392
  computeTreeMapNodes,
19444
21393
  constrainCropRect,
@@ -19448,6 +21397,7 @@ export {
19448
21397
  containerPaddingClasses,
19449
21398
  copyTextToClipboard,
19450
21399
  countLines,
21400
+ countMaskTokens,
19451
21401
  countdownBaseClasses,
19452
21402
  countdownPrefixClasses,
19453
21403
  countdownSuffixClasses,
@@ -19473,6 +21423,7 @@ export {
19473
21423
  createDefaultTransform,
19474
21424
  createDocumentDragSession,
19475
21425
  createDragState,
21426
+ createEmptyScrollAreaState,
19476
21427
  createFloatingIdFactory,
19477
21428
  createFocusTrap,
19478
21429
  createFormConditionDependencies,
@@ -19487,9 +21438,11 @@ export {
19487
21438
  createImageAnnotationBox,
19488
21439
  createImageAnnotationPath,
19489
21440
  createInfiniteScrollObserver,
21441
+ createInitialLoadingBarState,
19490
21442
  createInstanceCounter,
19491
21443
  createLinePath,
19492
21444
  createLinearScale,
21445
+ createLoadingBarController,
19493
21446
  createLongPressController,
19494
21447
  createMotionSequence,
19495
21448
  createNotificationStackUpdateScheduler,
@@ -19593,6 +21546,8 @@ export {
19593
21546
  descriptionsWrapperClasses,
19594
21547
  designTokens,
19595
21548
  devWarn,
21549
+ distributeMasonryItems,
21550
+ distributeOtpPaste,
19596
21551
  dotSizeClasses,
19597
21552
  dotsVariantConfig,
19598
21553
  downloadChartBlob,
@@ -19615,6 +21570,7 @@ export {
19615
21570
  ensureBarMinHeight,
19616
21571
  errorCircleSolidIcon20PathD,
19617
21572
  escapeHighlightHtml,
21573
+ escapeHighlightKeyword,
19618
21574
  escapeMarkdownHtml,
19619
21575
  evaluateFormCondition,
19620
21576
  evaluateFormConditions,
@@ -19626,6 +21582,8 @@ export {
19626
21582
  exportTableToExcel,
19627
21583
  extendedIcons,
19628
21584
  extractMentionQuery,
21585
+ extractRawValue,
21586
+ extractTagCandidates,
19629
21587
  fileManagerBreadcrumbClasses,
19630
21588
  fileManagerBreadcrumbItemClasses,
19631
21589
  fileManagerBreadcrumbSeparatorClasses,
@@ -19662,6 +21620,7 @@ export {
19662
21620
  findCascaderOption,
19663
21621
  findColumnFromPoint,
19664
21622
  findFirstEnabledIndex,
21623
+ findHighlightRanges,
19665
21624
  findHotkeyMatch,
19666
21625
  findLastEnabledIndex,
19667
21626
  findMarkdownHotkeyMatch,
@@ -19706,12 +21665,17 @@ export {
19706
21665
  formatGanttDate,
19707
21666
  formatInputNumberDisplay,
19708
21667
  formatIntlNumber,
21668
+ formatKbdCombo,
21669
+ formatKbdSeparatorText,
21670
+ formatMaskValue,
19709
21671
  formatMonthYear,
21672
+ formatOtpSlotLabel,
19710
21673
  formatPageAriaLabel,
19711
21674
  formatPaginationPageIndicator,
19712
21675
  formatPaginationTotal,
19713
21676
  formatPrecision,
19714
21677
  formatProgressText,
21678
+ formatRemoveTagLabel,
19715
21679
  formatStatisticValue,
19716
21680
  formatTableSelectRowAriaLabel,
19717
21681
  formatTableSortByText,
@@ -19756,6 +21720,9 @@ export {
19756
21720
  getAnchoredOverlayTabTarget,
19757
21721
  getAreaGradientPrefix,
19758
21722
  getArrowStyles,
21723
+ getAspectRatioContentClasses,
21724
+ getAspectRatioRootClasses,
21725
+ getAspectRatioStyle,
19759
21726
  getAutoCompleteInputClasses,
19760
21727
  getAutoCompleteOptionClasses,
19761
21728
  getAutoExpandKeys,
@@ -19798,6 +21765,9 @@ export {
19798
21765
  getCascaderOptionPath,
19799
21766
  getCascaderOptionsAtLevel,
19800
21767
  getCascaderTriggerClasses,
21768
+ getCascaderVirtualAlignScrollTop,
21769
+ getCascaderVirtualItemHeight,
21770
+ getCascaderVirtualRange,
19801
21771
  getChartAnimationStyle,
19802
21772
  getChartAxisTickCacheSize,
19803
21773
  getChartAxisTicks,
@@ -19818,6 +21788,7 @@ export {
19818
21788
  getCodeBlockContainerClasses,
19819
21789
  getCodeBlockCopyButtonClasses,
19820
21790
  getCodeEditorActiveLineClasses,
21791
+ getCodeEditorCaretClasses,
19821
21792
  getCodeEditorContainerClasses,
19822
21793
  getColGutterClasses,
19823
21794
  getColMergedStyleVars,
@@ -19839,6 +21810,16 @@ export {
19839
21810
  getContainerClasses,
19840
21811
  getContainerHeight,
19841
21812
  getContainerScrollTop,
21813
+ getContextMenuContainerClasses,
21814
+ getContextMenuItemClasses,
21815
+ getContextMenuMenuClasses,
21816
+ getContextMenuOpenPoint,
21817
+ getContextMenuPointFromElement,
21818
+ getContextMenuPointFromEvent,
21819
+ getContextMenuPointStyle,
21820
+ getContextMenuSubChevronClasses,
21821
+ getContextMenuSubTriggerClasses,
21822
+ getContextMenuTriggerClasses,
19842
21823
  getCountdownParts,
19843
21824
  getCountdownRemaining,
19844
21825
  getCountdownTitleClasses,
@@ -19938,6 +21919,9 @@ export {
19938
21919
  getGroupHeaderCellClasses,
19939
21920
  getGutterStyles,
19940
21921
  getHeatmapCellIndexAtPoint,
21922
+ getHighlightMarkClasses,
21923
+ getHighlightRootClasses,
21924
+ getHighlightSegments,
19941
21925
  getIconDefinition,
19942
21926
  getImageAnnotationCenter,
19943
21927
  getImageAnnotationPathData,
@@ -19946,6 +21930,19 @@ export {
19946
21930
  getImageAnnotationStrokeColor,
19947
21931
  getImageAnnotationToolButtonClasses,
19948
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,
19949
21946
  getImageEditorLabels,
19950
21947
  getImageGroupClasses,
19951
21948
  getImageImgClasses,
@@ -19973,11 +21970,15 @@ export {
19973
21970
  getInputNumberStatusClasses,
19974
21971
  getInputNumberStepButtonClasses,
19975
21972
  getInputNumberWrapperClasses,
21973
+ getInputOTPLabels,
19976
21974
  getInputPasswordToggleClasses,
19977
21975
  getInputWrapperClasses,
19978
21976
  getIntlPluralCategory,
19979
21977
  getJustifyClasses,
19980
21978
  getKanbanContainerClasses,
21979
+ getKbdParts,
21980
+ getKbdRootClasses,
21981
+ getKbdVariantClasses,
19981
21982
  getLayoutContentClasses,
19982
21983
  getLayoutHeaderClasses,
19983
21984
  getLeafKeys,
@@ -19989,6 +21990,10 @@ export {
19989
21990
  getListHeaderFooterClasses,
19990
21991
  getListItemClasses,
19991
21992
  getLoadingBarClasses,
21993
+ getLoadingBarColorClasses,
21994
+ getLoadingBarContainerClasses,
21995
+ getLoadingBarFillClasses,
21996
+ getLoadingBarFillStyle,
19992
21997
  getLoadingBarsWrapperClasses,
19993
21998
  getLoadingClasses,
19994
21999
  getLoadingDotClasses,
@@ -20001,6 +22006,16 @@ export {
20001
22006
  getMarkdownEditorLabels,
20002
22007
  getMarkdownToolbarButtonClasses,
20003
22008
  getMarkdownToolbarButtons,
22009
+ getMarqueeContentClasses,
22010
+ getMarqueeRootClasses,
22011
+ getMarqueeTrackClasses,
22012
+ getMarqueeTrackStyle,
22013
+ getMaskCaretPosition,
22014
+ getMasonryColumnClasses,
22015
+ getMasonryColumnStyle,
22016
+ getMasonryGapStyle,
22017
+ getMasonryItemClasses,
22018
+ getMasonryRootClasses,
20004
22019
  getMentionsInputClasses,
20005
22020
  getMentionsOptionClasses,
20006
22021
  getMenuButtons,
@@ -20015,6 +22030,14 @@ export {
20015
22030
  getModalContentClasses,
20016
22031
  getMonthDays,
20017
22032
  getMonthNames,
22033
+ getNavigationMenuBarItems,
22034
+ getNavigationMenuChevronClasses,
22035
+ getNavigationMenuClasses,
22036
+ getNavigationMenuContentClasses,
22037
+ getNavigationMenuItemClasses,
22038
+ getNavigationMenuLinkClasses,
22039
+ getNavigationMenuListClasses,
22040
+ getNavigationMenuTriggerClasses,
20018
22041
  getNextActiveKey,
20019
22042
  getNextColorSwatchIndex,
20020
22043
  getNextImageAnnotationTool,
@@ -20033,6 +22056,13 @@ export {
20033
22056
  getOrgChartLinkPath,
20034
22057
  getOrgChartNodeAriaLabel,
20035
22058
  getOrgChartNodeClasses,
22059
+ getOtpContainerClasses,
22060
+ getOtpErrorClasses,
22061
+ getOtpSeparatorClasses,
22062
+ getOtpSeparatorIndices,
22063
+ getOtpSlotClasses,
22064
+ getPageHeaderBackButtonClasses,
22065
+ getPageHeaderRootClasses,
20036
22066
  getPageNumbers,
20037
22067
  getPageRange,
20038
22068
  getPageSizeSelectorClasses,
@@ -20106,6 +22136,14 @@ export {
20106
22136
  getScatterHoverShadow,
20107
22137
  getScatterHoverSize,
20108
22138
  getScatterPointPath,
22139
+ getScrollAreaBoxStyle,
22140
+ getScrollAreaContentClasses,
22141
+ getScrollAreaScrollbarClasses,
22142
+ getScrollAreaShadowClasses,
22143
+ getScrollAreaShadowSides,
22144
+ getScrollAreaThumbClasses,
22145
+ getScrollAreaThumbStyle,
22146
+ getScrollAreaViewportClasses,
20109
22147
  getScrollSpyItemByHref,
20110
22148
  getScrollSpyItemByKey,
20111
22149
  getScrollSpyItemClasses,
@@ -20144,6 +22182,9 @@ export {
20144
22182
  getSpaceStyle,
20145
22183
  getSpanClasses,
20146
22184
  getSpinnerSVG,
22185
+ getSplitButtonPrimaryClasses,
22186
+ getSplitButtonRootClasses,
22187
+ getSplitButtonTriggerClasses,
20147
22188
  getSplitterContainerClasses,
20148
22189
  getSplitterGutterClasses,
20149
22190
  getSplitterGutterHandleClasses,
@@ -20199,6 +22240,12 @@ export {
20199
22240
  getTabsContainerClasses,
20200
22241
  getTabsLabels,
20201
22242
  getTagVariantClasses,
22243
+ getTagsInputClearButtonClasses,
22244
+ getTagsInputContainerClasses,
22245
+ getTagsInputErrorClasses,
22246
+ getTagsInputHighlightClasses,
22247
+ getTagsInputInnerInputClasses,
22248
+ getTagsInputLabels,
20202
22249
  getTaskBoardLabels,
20203
22250
  getTextClasses,
20204
22251
  getThemeColor,
@@ -20240,8 +22287,11 @@ export {
20240
22287
  getTreeNodeClasses,
20241
22288
  getTreeNodeExpandIconClasses,
20242
22289
  getTreeSelectDisplayLabel,
22290
+ getTreeSelectDropdownClasses,
20243
22291
  getTreeSelectNodeClasses,
20244
22292
  getTreeSelectTriggerClasses,
22293
+ getTreeSelectVirtualAlignScrollTop,
22294
+ getTreeSelectVisibleIndex,
20245
22295
  getUploadButtonClasses,
20246
22296
  getUploadDataTransferFiles,
20247
22297
  getUploadLabels,
@@ -20275,6 +22325,7 @@ export {
20275
22325
  handleDragStart,
20276
22326
  handleDrop,
20277
22327
  handleMenuNavigation,
22328
+ handleMenubarNavigation,
20278
22329
  handleNodeCheck,
20279
22330
  handleTabKey,
20280
22331
  handleUploadDragLeave,
@@ -20282,10 +22333,13 @@ export {
20282
22333
  handleUploadDrop,
20283
22334
  hasErrors,
20284
22335
  hasGutter,
22336
+ hasPageHeaderHeadingContent,
20285
22337
  hasTableSelectionColumn,
20286
22338
  helpCircleIcon,
20287
22339
  hexToRgb2 as hexToRgb,
20288
22340
  highContrastTheme,
22341
+ highlightMarkClasses,
22342
+ highlightRootClasses,
20289
22343
  hsvToRgb,
20290
22344
  icon16ViewBox,
20291
22345
  icon20ViewBox,
@@ -20311,6 +22365,20 @@ export {
20311
22365
  imageAnnotationToolButtonClasses,
20312
22366
  imageAnnotationToolbarClasses,
20313
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,
20314
22382
  imageCropperContainerClasses,
20315
22383
  imageCropperDragAreaClasses,
20316
22384
  imageCropperGuideClasses,
@@ -20343,9 +22411,13 @@ export {
20343
22411
  infiniteScrollEndClasses,
20344
22412
  infiniteScrollLoaderClasses,
20345
22413
  infiniteScrollSentinelClasses,
22414
+ initNavigationMenuRovingTabIndex,
20346
22415
  initRovingTabIndex,
22416
+ injectContextMenuStyles,
20347
22417
  injectDropdownStyles,
20348
22418
  injectLoadingAnimationStyles,
22419
+ injectMarqueeStyles,
22420
+ injectNavigationMenuStyles,
20349
22421
  injectShakeStyle,
20350
22422
  injectSvgAnimationStyles,
20351
22423
  injectViewTransitionStyles,
@@ -20372,6 +22444,7 @@ export {
20372
22444
  isCascaderOptionExpandable,
20373
22445
  isColorSwatchSelected,
20374
22446
  isContentEmpty,
22447
+ isContextMenuKeyboardEvent,
20375
22448
  isCrossContainerDrag,
20376
22449
  isDateInRange,
20377
22450
  isDragEnabled,
@@ -20383,6 +22456,8 @@ export {
20383
22456
  isHttpResultStatus,
20384
22457
  isImageAnnotationPathClosed,
20385
22458
  isImageAnnotationShapeTool,
22459
+ isImageCompareInteractiveTarget,
22460
+ isImageCompareVertical,
20386
22461
  isInlineFormat,
20387
22462
  isKeyActive,
20388
22463
  isKeyOpen,
@@ -20390,15 +22465,24 @@ export {
20390
22465
  isLazyTigerLocale,
20391
22466
  isLongPress,
20392
22467
  isMarkdownToolbarSeparator,
22468
+ isMarqueeFocusInside,
22469
+ isMarqueePaused,
22470
+ isMarqueeReverse,
22471
+ isMarqueeVertical,
20393
22472
  isMobile,
20394
22473
  isModalSheetSwipeCloseGesture,
22474
+ isNavigationMenuOpen,
22475
+ isNavigationMenuTriggerOpenKey,
22476
+ isNavigationMenuValueOpen,
20395
22477
  isNextDisabled,
20396
22478
  isOptionGroup,
22479
+ isOtpComplete,
20397
22480
  isPanelActive,
20398
22481
  isPrevDisabled,
20399
22482
  isRtlLocale,
20400
22483
  isSameContainerDrag,
20401
22484
  isSameDay,
22485
+ isScrollAreaAxisEnabled,
20402
22486
  isSignatureEmpty,
20403
22487
  isSpaceKey,
20404
22488
  isTabKey,
@@ -20418,6 +22502,10 @@ export {
20418
22502
  kanbanSwimlaneCollapsedClasses,
20419
22503
  kanbanSwimlaneDotClasses,
20420
22504
  kanbanSwimlaneHeaderClasses,
22505
+ kbdBaseClasses,
22506
+ kbdKeyClasses,
22507
+ kbdSeparatorClasses,
22508
+ kbdSubtleVariantClasses,
20421
22509
  keyIcon,
20422
22510
  layoutContentClasses,
20423
22511
  layoutFooterClasses,
@@ -20451,6 +22539,9 @@ export {
20451
22539
  listSizeClasses,
20452
22540
  listWrapperClasses,
20453
22541
  loadingBarBaseClasses,
22542
+ loadingBarColorClasses,
22543
+ loadingBarContainerBaseClasses,
22544
+ loadingBarFillBaseClasses,
20454
22545
  loadingBarsWrapperBaseClasses,
20455
22546
  loadingColorClasses,
20456
22547
  loadingContainerBaseClasses,
@@ -20480,6 +22571,20 @@ export {
20480
22571
  markdownEditorToolbarSeparatorClasses,
20481
22572
  markdownHotkeyMatches,
20482
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,
20483
22588
  matchesHotkey,
20484
22589
  matchesMenuSearch,
20485
22590
  measureTableResizeSnapshot,
@@ -20504,6 +22609,7 @@ export {
20504
22609
  menuSearchEmptyClasses,
20505
22610
  menuSearchFieldClasses,
20506
22611
  menuSearchInputClasses,
22612
+ mergeHighlightRanges,
20507
22613
  mergeStyleValues,
20508
22614
  mergeTigerLocale,
20509
22615
  messageBaseClasses,
@@ -20529,6 +22635,7 @@ export {
20529
22635
  modalTitleClasses,
20530
22636
  modalWrapperClasses,
20531
22637
  modernTheme,
22638
+ moduloDistributeMasonryItems,
20532
22639
  moonIcon,
20533
22640
  moveCard,
20534
22641
  moveCropRect,
@@ -20541,6 +22648,7 @@ export {
20541
22648
  naturalTheme,
20542
22649
  navigateToFolder,
20543
22650
  nextIconPath,
22651
+ nextLoadingBarTricklePercentage,
20544
22652
  normalizeActiveKeys,
20545
22653
  normalizeChartBrushRange,
20546
22654
  normalizeChartPadding,
@@ -20549,10 +22657,13 @@ export {
20549
22657
  normalizeCronExpression,
20550
22658
  normalizeDate,
20551
22659
  normalizeGanttDate,
22660
+ normalizeHighlightKeywords,
20552
22661
  normalizeImageAnnotationBox,
22662
+ normalizeKbdKeys,
20553
22663
  normalizeMenuSearchQuery,
20554
22664
  normalizeNumberKeyboardValue,
20555
22665
  normalizeOrgChartData,
22666
+ normalizeOtpValue,
20556
22667
  normalizeRotation,
20557
22668
  normalizeSpotlightText,
20558
22669
  normalizeStringOption,
@@ -20576,6 +22687,7 @@ export {
20576
22687
  numberKeyboardGridClasses,
20577
22688
  numberKeyboardKeyClasses,
20578
22689
  numberKeyboardRootClasses,
22690
+ observeScrollAreaSize,
20579
22691
  orderTableFixedColumns,
20580
22692
  orgChartLinkClasses,
20581
22693
  orgChartNodeClasses,
@@ -20585,8 +22697,21 @@ export {
20585
22697
  orgChartNodeTitleClasses,
20586
22698
  padCountdownNumber,
20587
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,
20588
22712
  paginateData,
20589
22713
  paperclipIcon,
22714
+ parseAspectRatio,
20590
22715
  parseColorInput,
20591
22716
  parseCountdownTimestamp,
20592
22717
  parseCronFieldControl,
@@ -20597,6 +22722,7 @@ export {
20597
22722
  parseInputNumberValue,
20598
22723
  parseInputValue,
20599
22724
  parseHeight as parseMarkdownHeight,
22725
+ parseMask,
20600
22726
  parsePaneSize,
20601
22727
  parseTime,
20602
22728
  parseWidthToPx,
@@ -20664,10 +22790,13 @@ export {
20664
22790
  rateHoverColor,
20665
22791
  rateInactiveColor,
20666
22792
  readFileAsDataUrl,
22793
+ readMasonryItemHeight,
22794
+ readScrollAreaMetrics,
20667
22795
  redoFormHistory,
20668
22796
  registerEscapeDismiss,
20669
22797
  registerImageGroupItem,
20670
22798
  removeCssVarsCached,
22799
+ removeTagAt,
20671
22800
  renderMarkdownInline,
20672
22801
  renderMarkdownToHtml,
20673
22802
  renderTokenHtml,
@@ -20710,17 +22839,48 @@ export {
20710
22839
  resolveFormConditionState,
20711
22840
  resolveFormFieldConditionState,
20712
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,
20713
22858
  resolveLocaleText,
22859
+ resolveMarqueeAriaLabel,
22860
+ resolveMarqueeDirection,
22861
+ resolveMarqueeDuration,
22862
+ resolveMarqueeGap,
22863
+ resolveMarqueePauseOnHover,
22864
+ resolveMarqueeRepeat,
22865
+ resolveMasonryColumnCount,
22866
+ resolveMasonryGap,
20714
22867
  resolveMotionDuration,
20715
22868
  resolveMotionEasing,
20716
22869
  resolveMultiSeriesTooltipContent,
22870
+ resolveNavigationMenuOpenValue,
22871
+ resolvePageHeaderBackAriaLabel,
22872
+ resolvePageHeaderBackVisibility,
20717
22873
  resolvePaginationDisplayMode,
20718
22874
  resolvePanGesture,
20719
22875
  resolvePinchScale,
20720
22876
  resolveResponsiveChartSize,
20721
22877
  resolveResponsiveValue,
22878
+ resolveScrollAreaLength,
20722
22879
  resolveSelectFilteredOptions,
20723
22880
  resolveSeriesData,
22881
+ resolveSplitButtonSize,
22882
+ resolveSplitButtonTriggerAriaLabel,
22883
+ resolveSplitButtonVariant,
20724
22884
  resolveSwipeGesture,
20725
22885
  resolveTableColumnWidth,
20726
22886
  resolveTigerLocale,
@@ -20750,7 +22910,15 @@ export {
20750
22910
  runStepValidation,
20751
22911
  runUploadQueue,
20752
22912
  sanitizeHtml,
22913
+ sanitizeOtpInput,
20753
22914
  scatterPointTransitionClasses,
22915
+ scrollAreaContentBaseClasses,
22916
+ scrollAreaRootClasses,
22917
+ scrollAreaScrollbarBaseClasses,
22918
+ scrollAreaShadowBaseClasses,
22919
+ scrollAreaThumbBaseClasses,
22920
+ scrollAreaThumbDraggingClasses,
22921
+ scrollAreaViewportBaseClasses,
20754
22922
  scrollSpyItemActiveClasses,
20755
22923
  scrollSpyItemBaseClasses,
20756
22924
  scrollSpyItemDisabledClasses,
@@ -20785,8 +22953,11 @@ export {
20785
22953
  shouldCommitImageAnnotationBox,
20786
22954
  shouldHideBadge,
20787
22955
  shouldLoadMore,
22956
+ shouldLoopMarquee,
20788
22957
  shouldReduceMotion,
22958
+ shouldRenderScrollAreaScrollbar,
20789
22959
  shouldShowBackTop,
22960
+ shouldSkipNavigationMenuOpenDelay,
20790
22961
  signatureCanvasClasses,
20791
22962
  signatureCanvasWrapClasses,
20792
22963
  signatureClearButtonClasses,
@@ -20823,6 +22994,13 @@ export {
20823
22994
  sortFileItems,
20824
22995
  sortNotificationGroups,
20825
22996
  sparklesIcon,
22997
+ splitButtonPrimaryBlockClasses,
22998
+ splitButtonPrimaryClasses,
22999
+ splitButtonRootBlockClasses,
23000
+ splitButtonRootClasses,
23001
+ splitButtonTriggerClasses,
23002
+ splitButtonTriggerSizeClasses,
23003
+ splitTagInput,
20826
23004
  splitTransferData,
20827
23005
  splitterBaseClasses,
20828
23006
  splitterGutterBaseClasses,