@expcat/tigercat-core 2.1.0 → 2.1.1

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.
Files changed (38) hide show
  1. package/dist/{data-export-CJUETRjV.d.ts → data-export-BtjseC7G.d.ts} +1 -1
  2. package/dist/index.d.ts +459 -101
  3. package/dist/index.js +1128 -250
  4. package/dist/{locale-CEDXoKX7.d.ts → locale-CGl5S1-B.d.ts} +48 -1
  5. package/dist/locales/ar-SA.d.ts +1 -1
  6. package/dist/locales/ar-SA.js +82 -0
  7. package/dist/locales/de-DE.d.ts +1 -1
  8. package/dist/locales/de-DE.js +82 -0
  9. package/dist/locales/en-US.d.ts +1 -1
  10. package/dist/locales/en-US.js +41 -0
  11. package/dist/locales/es-ES.d.ts +1 -1
  12. package/dist/locales/es-ES.js +82 -0
  13. package/dist/locales/fr-FR.d.ts +1 -1
  14. package/dist/locales/fr-FR.js +82 -0
  15. package/dist/locales/id-ID.d.ts +1 -1
  16. package/dist/locales/id-ID.js +82 -0
  17. package/dist/locales/ja-JP.d.ts +1 -1
  18. package/dist/locales/ja-JP.js +82 -0
  19. package/dist/locales/ko-KR.d.ts +1 -1
  20. package/dist/locales/ko-KR.js +82 -0
  21. package/dist/locales/pt-BR.d.ts +1 -1
  22. package/dist/locales/pt-BR.js +82 -0
  23. package/dist/locales/th-TH.d.ts +1 -1
  24. package/dist/locales/th-TH.js +82 -0
  25. package/dist/locales/vi-VN.d.ts +1 -1
  26. package/dist/locales/vi-VN.js +82 -0
  27. package/dist/locales/zh-CN.d.ts +1 -1
  28. package/dist/locales/zh-CN.js +41 -0
  29. package/dist/locales/zh-TW.d.ts +1 -1
  30. package/dist/locales/zh-TW.js +82 -0
  31. package/dist/{table-CbPOY5bp.d.ts → table-D_1D4Euk.d.ts} +1 -1
  32. package/dist/tailwind/modern.js +25 -14
  33. package/dist/{tailwind-entry-CNBAH7iv.d.ts → tailwind-entry-nnuviNxx.d.ts} +1 -1
  34. package/dist/tailwind.d.ts +1 -1
  35. package/dist/tailwind.js +23 -12
  36. package/dist/utils/data-export.d.ts +3 -3
  37. package/dist/utils/table-export.d.ts +2 -2
  38. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1496,6 +1496,11 @@ var TIGER_LOCALE_KEYS = [
1496
1496
  "imageEditor",
1497
1497
  "status",
1498
1498
  "taskBoard",
1499
+ "chatWindow",
1500
+ "code",
1501
+ "commentThread",
1502
+ "activityFeed",
1503
+ "notificationCenter",
1499
1504
  "select",
1500
1505
  "tabs",
1501
1506
  "rate",
@@ -1565,6 +1570,11 @@ function mergeTigerLocale(base, override) {
1565
1570
  imageEditor: { ...base?.imageEditor, ...override?.imageEditor },
1566
1571
  status: { ...base?.status, ...override?.status },
1567
1572
  taskBoard: { ...base?.taskBoard, ...override?.taskBoard },
1573
+ chatWindow: { ...base?.chatWindow, ...override?.chatWindow },
1574
+ code: { ...base?.code, ...override?.code },
1575
+ commentThread: { ...base?.commentThread, ...override?.commentThread },
1576
+ activityFeed: { ...base?.activityFeed, ...override?.activityFeed },
1577
+ notificationCenter: { ...base?.notificationCenter, ...override?.notificationCenter },
1568
1578
  select: { ...base?.select, ...override?.select },
1569
1579
  tabs: { ...base?.tabs, ...override?.tabs },
1570
1580
  rate: { ...base?.rate, ...override?.rate },
@@ -1868,6 +1878,149 @@ function getTaskBoardLabels(locale, overrides) {
1868
1878
  boardAriaLabel: overrides?.boardAriaLabel ?? locale?.taskBoard?.boardAriaLabel ?? defaultLabels.boardAriaLabel
1869
1879
  };
1870
1880
  }
1881
+ var DEFAULT_CHAT_WINDOW_LABELS = {
1882
+ emptyText: "No messages",
1883
+ sendText: "Send",
1884
+ placeholder: "Type a message",
1885
+ sendingText: "Sending",
1886
+ sentText: "Delivered",
1887
+ failedText: "Failed to send"
1888
+ };
1889
+ var ZH_CN_CHAT_WINDOW_LABELS = {
1890
+ emptyText: "\u6682\u65E0\u6D88\u606F",
1891
+ sendText: "\u53D1\u9001",
1892
+ placeholder: "\u8BF7\u8F93\u5165\u6D88\u606F",
1893
+ sendingText: "\u53D1\u9001\u4E2D",
1894
+ sentText: "\u5DF2\u9001\u8FBE",
1895
+ failedText: "\u53D1\u9001\u5931\u8D25"
1896
+ };
1897
+ function getChatWindowLabels(locale, overrides) {
1898
+ const isZh = locale?.locale?.startsWith("zh");
1899
+ const defaultLabels = isZh ? ZH_CN_CHAT_WINDOW_LABELS : DEFAULT_CHAT_WINDOW_LABELS;
1900
+ return {
1901
+ emptyText: overrides?.emptyText ?? locale?.chatWindow?.emptyText ?? defaultLabels.emptyText,
1902
+ sendText: overrides?.sendText ?? locale?.chatWindow?.sendText ?? defaultLabels.sendText,
1903
+ placeholder: overrides?.placeholder ?? locale?.chatWindow?.placeholder ?? defaultLabels.placeholder,
1904
+ sendingText: overrides?.sendingText ?? locale?.chatWindow?.sendingText ?? defaultLabels.sendingText,
1905
+ sentText: overrides?.sentText ?? locale?.chatWindow?.sentText ?? defaultLabels.sentText,
1906
+ failedText: overrides?.failedText ?? locale?.chatWindow?.failedText ?? defaultLabels.failedText
1907
+ };
1908
+ }
1909
+ var DEFAULT_CODE_LABELS = {
1910
+ copyLabel: "Copy",
1911
+ copiedLabel: "Copied",
1912
+ copyFailedLabel: "Copy failed"
1913
+ };
1914
+ var ZH_CN_CODE_LABELS = {
1915
+ copyLabel: "\u590D\u5236",
1916
+ copiedLabel: "\u5DF2\u590D\u5236",
1917
+ copyFailedLabel: "\u590D\u5236\u5931\u8D25"
1918
+ };
1919
+ function getCodeLabels(locale, overrides) {
1920
+ const isZh = locale?.locale?.startsWith("zh");
1921
+ const defaultLabels = isZh ? ZH_CN_CODE_LABELS : DEFAULT_CODE_LABELS;
1922
+ return {
1923
+ copyLabel: overrides?.copyLabel ?? locale?.code?.copyLabel ?? defaultLabels.copyLabel,
1924
+ copiedLabel: overrides?.copiedLabel ?? locale?.code?.copiedLabel ?? defaultLabels.copiedLabel,
1925
+ copyFailedLabel: overrides?.copyFailedLabel ?? locale?.code?.copyFailedLabel ?? defaultLabels.copyFailedLabel
1926
+ };
1927
+ }
1928
+ var DEFAULT_COMMENT_THREAD_LABELS = {
1929
+ emptyText: "No comments",
1930
+ replyPlaceholder: "Write a reply...",
1931
+ replyButtonText: "Reply",
1932
+ cancelReplyText: "Cancel",
1933
+ likeText: "Like",
1934
+ likedText: "Liked",
1935
+ replyText: "Reply",
1936
+ moreText: "More",
1937
+ loadMoreText: "Load more",
1938
+ collapseRepliesText: "\u25BE Collapse replies",
1939
+ expandRepliesText: "\u25B8 Expand {count} replies"
1940
+ };
1941
+ var ZH_CN_COMMENT_THREAD_LABELS = {
1942
+ emptyText: "\u6682\u65E0\u8BC4\u8BBA",
1943
+ replyPlaceholder: "\u5199\u4E0B\u56DE\u590D...",
1944
+ replyButtonText: "\u56DE\u590D",
1945
+ cancelReplyText: "\u53D6\u6D88",
1946
+ likeText: "\u70B9\u8D5E",
1947
+ likedText: "\u5DF2\u8D5E",
1948
+ replyText: "\u56DE\u590D",
1949
+ moreText: "\u66F4\u591A",
1950
+ loadMoreText: "\u52A0\u8F7D\u66F4\u591A",
1951
+ collapseRepliesText: "\u25BE \u6536\u8D77\u56DE\u590D",
1952
+ expandRepliesText: "\u25B8 \u5C55\u5F00 {count} \u6761\u56DE\u590D"
1953
+ };
1954
+ function getCommentThreadLabels(locale, overrides) {
1955
+ const isZh = locale?.locale?.startsWith("zh");
1956
+ const defaultLabels = isZh ? ZH_CN_COMMENT_THREAD_LABELS : DEFAULT_COMMENT_THREAD_LABELS;
1957
+ return {
1958
+ emptyText: overrides?.emptyText ?? locale?.commentThread?.emptyText ?? defaultLabels.emptyText,
1959
+ replyPlaceholder: overrides?.replyPlaceholder ?? locale?.commentThread?.replyPlaceholder ?? defaultLabels.replyPlaceholder,
1960
+ replyButtonText: overrides?.replyButtonText ?? locale?.commentThread?.replyButtonText ?? defaultLabels.replyButtonText,
1961
+ cancelReplyText: overrides?.cancelReplyText ?? locale?.commentThread?.cancelReplyText ?? defaultLabels.cancelReplyText,
1962
+ likeText: overrides?.likeText ?? locale?.commentThread?.likeText ?? defaultLabels.likeText,
1963
+ likedText: overrides?.likedText ?? locale?.commentThread?.likedText ?? defaultLabels.likedText,
1964
+ replyText: overrides?.replyText ?? locale?.commentThread?.replyText ?? defaultLabels.replyText,
1965
+ moreText: overrides?.moreText ?? locale?.commentThread?.moreText ?? defaultLabels.moreText,
1966
+ loadMoreText: overrides?.loadMoreText ?? locale?.commentThread?.loadMoreText ?? defaultLabels.loadMoreText,
1967
+ collapseRepliesText: overrides?.collapseRepliesText ?? locale?.commentThread?.collapseRepliesText ?? defaultLabels.collapseRepliesText,
1968
+ expandRepliesText: overrides?.expandRepliesText ?? locale?.commentThread?.expandRepliesText ?? defaultLabels.expandRepliesText
1969
+ };
1970
+ }
1971
+ var DEFAULT_ACTIVITY_FEED_LABELS = {
1972
+ emptyText: "No activity",
1973
+ loadingText: "Loading..."
1974
+ };
1975
+ var ZH_CN_ACTIVITY_FEED_LABELS = {
1976
+ emptyText: "\u6682\u65E0\u52A8\u6001",
1977
+ loadingText: "\u52A0\u8F7D\u4E2D..."
1978
+ };
1979
+ function getActivityFeedLabels(locale, overrides) {
1980
+ const isZh = locale?.locale?.startsWith("zh");
1981
+ const defaultLabels = isZh ? ZH_CN_ACTIVITY_FEED_LABELS : DEFAULT_ACTIVITY_FEED_LABELS;
1982
+ return {
1983
+ emptyText: overrides?.emptyText ?? locale?.activityFeed?.emptyText ?? defaultLabels.emptyText,
1984
+ loadingText: overrides?.loadingText ?? locale?.activityFeed?.loadingText ?? defaultLabels.loadingText
1985
+ };
1986
+ }
1987
+ var DEFAULT_NOTIFICATION_CENTER_LABELS = {
1988
+ title: "Notifications",
1989
+ emptyText: "No notifications",
1990
+ loadingText: "Loading...",
1991
+ allLabel: "All",
1992
+ unreadLabel: "Unread",
1993
+ readLabel: "Read",
1994
+ markAllReadText: "Mark all as read",
1995
+ markReadText: "Mark as read",
1996
+ markUnreadText: "Mark as unread"
1997
+ };
1998
+ var ZH_CN_NOTIFICATION_CENTER_LABELS = {
1999
+ title: "\u901A\u77E5\u4E2D\u5FC3",
2000
+ emptyText: "\u6682\u65E0\u901A\u77E5",
2001
+ loadingText: "\u52A0\u8F7D\u4E2D...",
2002
+ allLabel: "\u5168\u90E8",
2003
+ unreadLabel: "\u672A\u8BFB",
2004
+ readLabel: "\u5DF2\u8BFB",
2005
+ markAllReadText: "\u5168\u90E8\u6807\u8BB0\u5DF2\u8BFB",
2006
+ markReadText: "\u6807\u8BB0\u5DF2\u8BFB",
2007
+ markUnreadText: "\u6807\u8BB0\u672A\u8BFB"
2008
+ };
2009
+ function getNotificationCenterLabels(locale, overrides) {
2010
+ const isZh = locale?.locale?.startsWith("zh");
2011
+ const defaultLabels = isZh ? ZH_CN_NOTIFICATION_CENTER_LABELS : DEFAULT_NOTIFICATION_CENTER_LABELS;
2012
+ return {
2013
+ title: overrides?.title ?? locale?.notificationCenter?.title ?? defaultLabels.title,
2014
+ emptyText: overrides?.emptyText ?? locale?.notificationCenter?.emptyText ?? defaultLabels.emptyText,
2015
+ loadingText: overrides?.loadingText ?? locale?.notificationCenter?.loadingText ?? defaultLabels.loadingText,
2016
+ allLabel: overrides?.allLabel ?? locale?.notificationCenter?.allLabel ?? defaultLabels.allLabel,
2017
+ unreadLabel: overrides?.unreadLabel ?? locale?.notificationCenter?.unreadLabel ?? defaultLabels.unreadLabel,
2018
+ readLabel: overrides?.readLabel ?? locale?.notificationCenter?.readLabel ?? defaultLabels.readLabel,
2019
+ markAllReadText: overrides?.markAllReadText ?? locale?.notificationCenter?.markAllReadText ?? defaultLabels.markAllReadText,
2020
+ markReadText: overrides?.markReadText ?? locale?.notificationCenter?.markReadText ?? defaultLabels.markReadText,
2021
+ markUnreadText: overrides?.markUnreadText ?? locale?.notificationCenter?.markUnreadText ?? defaultLabels.markUnreadText
2022
+ };
2023
+ }
1871
2024
  var DEFAULT_SELECT_LABELS = {
1872
2025
  doneText: "Done"
1873
2026
  };
@@ -3066,6 +3219,47 @@ var enUS = {
3066
3219
  dragHintText: "Drag to move",
3067
3220
  boardAriaLabel: "Task Board"
3068
3221
  },
3222
+ chatWindow: {
3223
+ emptyText: "No messages",
3224
+ sendText: "Send",
3225
+ placeholder: "Type a message",
3226
+ sendingText: "Sending",
3227
+ sentText: "Delivered",
3228
+ failedText: "Failed to send"
3229
+ },
3230
+ code: {
3231
+ copyLabel: "Copy",
3232
+ copiedLabel: "Copied",
3233
+ copyFailedLabel: "Copy failed"
3234
+ },
3235
+ commentThread: {
3236
+ emptyText: "No comments",
3237
+ replyPlaceholder: "Write a reply...",
3238
+ replyButtonText: "Reply",
3239
+ cancelReplyText: "Cancel",
3240
+ likeText: "Like",
3241
+ likedText: "Liked",
3242
+ replyText: "Reply",
3243
+ moreText: "More",
3244
+ loadMoreText: "Load more",
3245
+ collapseRepliesText: "\u25BE Collapse replies",
3246
+ expandRepliesText: "\u25B8 Expand {count} replies"
3247
+ },
3248
+ activityFeed: {
3249
+ emptyText: "No activity",
3250
+ loadingText: "Loading..."
3251
+ },
3252
+ notificationCenter: {
3253
+ title: "Notifications",
3254
+ emptyText: "No notifications",
3255
+ loadingText: "Loading...",
3256
+ allLabel: "All",
3257
+ unreadLabel: "Unread",
3258
+ readLabel: "Read",
3259
+ markAllReadText: "Mark all as read",
3260
+ markReadText: "Mark as read",
3261
+ markUnreadText: "Mark as unread"
3262
+ },
3069
3263
  select: {
3070
3264
  doneText: "Done"
3071
3265
  },
@@ -3253,53 +3447,128 @@ var buttonDangerClasses = {
3253
3447
  var buttonGroupBaseClasses = "inline-flex";
3254
3448
  var buttonGroupVerticalClasses = "flex-col";
3255
3449
  var buttonGroupHorizontalClasses = "flex-row";
3256
- var buttonGroupItemClasses = "[&:not(:first-child):not(:last-child)]:rounded-none [&:first-child]:rounded-r-none [&:last-child]:rounded-l-none [&:not(:first-child)]:-ml-px";
3257
- var buttonGroupItemVerticalClasses = "[&:not(:first-child):not(:last-child)]:rounded-none [&:first-child]:rounded-b-none [&:last-child]:rounded-t-none [&:not(:first-child)]:-mt-px";
3450
+ var buttonGroupItemClasses = "[&>*:not(:first-child):not(:last-child)]:!rounded-none [&>*:first-child]:!rounded-r-none [&>*:last-child]:!rounded-l-none [&>*:not(:first-child)]:-ml-px [&>*:focus]:z-10 [&>*:focus]:relative";
3451
+ var buttonGroupItemVerticalClasses = "[&>*:not(:first-child):not(:last-child)]:!rounded-none [&>*:first-child]:!rounded-b-none [&>*:last-child]:!rounded-t-none [&>*:not(:first-child)]:-mt-px [&>*:focus]:z-10 [&>*:focus]:relative";
3258
3452
 
3259
3453
  // src/utils/input-styles.ts
3260
- var BASE_INPUT_CLASSES = [
3454
+ var INPUT_FIELD_BASE_CLASSES = [
3261
3455
  "w-full",
3262
- "border",
3263
- "rounded-[var(--tiger-radius-md,0.5rem)]",
3264
- "bg-[var(--tiger-surface,#ffffff)]",
3456
+ "bg-transparent",
3265
3457
  "text-[var(--tiger-text,#111827)]",
3266
3458
  "focus:outline-none",
3267
- "focus:ring-2",
3268
- "transition-colors",
3269
- "disabled:bg-[var(--tiger-surface-muted,#f3f4f6)]",
3270
3459
  "disabled:text-[var(--tiger-text-muted,#6b7280)]",
3271
3460
  "disabled:cursor-not-allowed",
3272
3461
  "placeholder:text-[var(--tiger-text-muted,#6b7280)]"
3273
3462
  ];
3274
- var STATUS_CLASSES = {
3463
+ var INPUT_CHROME_BASE_CLASSES = [
3464
+ "border",
3465
+ "rounded-[var(--tiger-radius-md,0.5rem)]",
3466
+ "bg-[var(--tiger-surface,#ffffff)]",
3467
+ "transition-colors"
3468
+ ];
3469
+ var NATIVE_CHROME_FOCUS_CLASSES = [
3470
+ "focus:ring-2",
3471
+ "disabled:bg-[var(--tiger-surface-muted,#f3f4f6)]"
3472
+ ];
3473
+ var WRAPPER_CHROME_FOCUS_CLASSES = [
3474
+ "focus-within:ring-2",
3475
+ "has-[:disabled]:bg-[var(--tiger-surface-muted,#f3f4f6)]"
3476
+ ];
3477
+ var NATIVE_STATUS_CLASSES = {
3275
3478
  default: "border-[var(--tiger-border,#e5e7eb)] focus:ring-[var(--tiger-primary,#2563eb)]/40 focus:border-transparent",
3276
3479
  error: "border-red-500 focus:ring-red-500 focus:border-red-500 text-red-900 placeholder-red-300",
3277
3480
  success: "border-green-500 focus:ring-green-500 focus:border-green-500 text-green-900 placeholder-green-300",
3278
3481
  warning: "border-yellow-500 focus:ring-yellow-500 focus:border-yellow-500 text-yellow-900 placeholder-yellow-300"
3279
3482
  };
3483
+ var WRAPPER_STATUS_CLASSES = {
3484
+ default: "border-[var(--tiger-border,#e5e7eb)] focus-within:ring-[var(--tiger-primary,#2563eb)]/40 focus-within:border-transparent",
3485
+ error: "border-red-500 focus-within:ring-red-500 focus-within:border-red-500",
3486
+ success: "border-green-500 focus-within:ring-green-500 focus-within:border-green-500",
3487
+ warning: "border-yellow-500 focus-within:ring-yellow-500 focus-within:border-yellow-500"
3488
+ };
3489
+ var FIELD_STATUS_CLASSES = {
3490
+ default: "",
3491
+ error: "text-red-900 placeholder-red-300",
3492
+ success: "text-green-900 placeholder-green-300",
3493
+ warning: "text-yellow-900 placeholder-yellow-300"
3494
+ };
3280
3495
  var INPUT_SIZE_CLASSES = {
3281
3496
  sm: "py-1 text-sm",
3282
3497
  md: "py-2 text-base",
3283
3498
  lg: "py-3 text-lg"
3284
3499
  };
3285
3500
  var INPUT_PADDING = {
3286
- sm: { left: "pl-2", right: "pr-2", prefixLeft: "pl-8", suffixRight: "pr-8" },
3287
- md: { left: "pl-3", right: "pr-3", prefixLeft: "pl-10", suffixRight: "pr-10" },
3288
- lg: { left: "pl-4", right: "pr-4", prefixLeft: "pl-12", suffixRight: "pr-12" }
3501
+ sm: {
3502
+ left: "pl-2",
3503
+ right: "pr-2",
3504
+ prefixLeft: "pl-8",
3505
+ suffixRight: "pr-8",
3506
+ dualSuffixRight: "pr-16"
3507
+ },
3508
+ md: {
3509
+ left: "pl-3",
3510
+ right: "pr-3",
3511
+ prefixLeft: "pl-10",
3512
+ suffixRight: "pr-10",
3513
+ dualSuffixRight: "pr-20"
3514
+ },
3515
+ lg: {
3516
+ left: "pl-4",
3517
+ right: "pr-4",
3518
+ prefixLeft: "pl-12",
3519
+ suffixRight: "pr-12",
3520
+ dualSuffixRight: "pr-24"
3521
+ }
3289
3522
  };
3290
- function getInputClasses(options = {}) {
3291
- const { size: size2 = "md", status = "default", hasPrefix, hasSuffix } = options;
3523
+ var INPUT_SUFFIX_SLOT_INSET = {
3524
+ sm: "right-8",
3525
+ md: "right-10",
3526
+ lg: "right-12"
3527
+ };
3528
+ function getInputLayoutClasses(options = {}) {
3529
+ const { size: size2 = "md", hasPrefix, hasSuffix, hasDualSuffix } = options;
3292
3530
  const pad = INPUT_PADDING[size2];
3293
3531
  return classNames(
3294
- ...BASE_INPUT_CLASSES,
3295
3532
  INPUT_SIZE_CLASSES[size2],
3296
- STATUS_CLASSES[status],
3297
3533
  hasPrefix ? pad.prefixLeft : pad.left,
3298
- hasSuffix ? pad.suffixRight : pad.right
3534
+ hasDualSuffix ? pad.dualSuffixRight : hasSuffix ? pad.suffixRight : pad.right
3535
+ );
3536
+ }
3537
+ function getInputChromeClasses(status = "default") {
3538
+ return classNames(
3539
+ ...INPUT_CHROME_BASE_CLASSES,
3540
+ ...WRAPPER_CHROME_FOCUS_CLASSES,
3541
+ WRAPPER_STATUS_CLASSES[status]
3542
+ );
3543
+ }
3544
+ function getInputFieldClasses(options = {}) {
3545
+ const { status = "default" } = options;
3546
+ return classNames(
3547
+ ...INPUT_FIELD_BASE_CLASSES,
3548
+ FIELD_STATUS_CLASSES[status],
3549
+ getInputLayoutClasses(options)
3550
+ );
3551
+ }
3552
+ function getInputClasses(options = {}) {
3553
+ const { status = "default" } = options;
3554
+ return classNames(
3555
+ "w-full",
3556
+ ...INPUT_CHROME_BASE_CLASSES,
3557
+ "text-[var(--tiger-text,#111827)]",
3558
+ "focus:outline-none",
3559
+ ...NATIVE_CHROME_FOCUS_CLASSES,
3560
+ "disabled:text-[var(--tiger-text-muted,#6b7280)]",
3561
+ "disabled:cursor-not-allowed",
3562
+ "placeholder:text-[var(--tiger-text-muted,#6b7280)]",
3563
+ NATIVE_STATUS_CLASSES[status],
3564
+ getInputLayoutClasses(options)
3299
3565
  );
3300
3566
  }
3301
- function getInputWrapperClasses() {
3302
- return "relative w-full";
3567
+ function getInputWrapperClasses(status) {
3568
+ return classNames(
3569
+ "relative w-full",
3570
+ status !== void 0 ? getInputChromeClasses(status) : void 0
3571
+ );
3303
3572
  }
3304
3573
  function getInputAffixClasses(position, size2 = "md") {
3305
3574
  const base = "absolute top-0 bottom-0 flex items-center justify-center text-gray-500";
@@ -3311,26 +3580,23 @@ function getInputAffixClasses(position, size2 = "md") {
3311
3580
  }[size2];
3312
3581
  return classNames(base, posClass, widthClass);
3313
3582
  }
3314
- function getInputErrorClasses(size2 = "md") {
3315
- return classNames(
3316
- "absolute inset-y-0 right-0 flex items-center pointer-events-none",
3317
- INPUT_PADDING[size2].right,
3318
- "text-red-500 text-sm"
3319
- );
3583
+ function getInputErrorClasses(_size = "md") {
3584
+ return classNames("text-red-500 text-sm mt-1 text-left break-words");
3320
3585
  }
3321
- function getInputClearButtonClasses(size2 = "md") {
3586
+ function getInputTrailingButtonClasses(size2, rightClass) {
3322
3587
  return classNames(
3323
- "absolute inset-y-0 right-0 flex items-center cursor-pointer",
3588
+ "absolute inset-y-0 flex items-center cursor-pointer",
3589
+ rightClass,
3324
3590
  "text-[var(--tiger-text-muted,#6b7280)] hover:text-[var(--tiger-text,#111827)]",
3325
3591
  INPUT_PADDING[size2].right
3326
3592
  );
3327
3593
  }
3594
+ function getInputClearButtonClasses(size2 = "md", options = {}) {
3595
+ const rightClass = options.offset ? INPUT_SUFFIX_SLOT_INSET[size2] : "right-0";
3596
+ return getInputTrailingButtonClasses(size2, rightClass);
3597
+ }
3328
3598
  function getInputPasswordToggleClasses(size2 = "md") {
3329
- return classNames(
3330
- "absolute inset-y-0 right-0 flex items-center cursor-pointer",
3331
- "text-[var(--tiger-text-muted,#6b7280)] hover:text-[var(--tiger-text,#111827)]",
3332
- INPUT_PADDING[size2].right
3333
- );
3599
+ return getInputTrailingButtonClasses(size2, "right-0");
3334
3600
  }
3335
3601
  function getInputCountClasses(isOverLimit = false) {
3336
3602
  return classNames(
@@ -3355,7 +3621,7 @@ function getInputNumberWrapperClasses(disabled) {
3355
3621
  disabled ? "bg-[var(--tiger-surface-muted,#f3f4f6)] cursor-not-allowed opacity-60" : "hover:border-[var(--tiger-primary,#2563eb)]"
3356
3622
  );
3357
3623
  }
3358
- var WRAPPER_STATUS_CLASSES = {
3624
+ var WRAPPER_STATUS_CLASSES2 = {
3359
3625
  default: "border-[var(--tiger-border,#e5e7eb)]",
3360
3626
  error: "border-red-500",
3361
3627
  success: "border-green-500",
@@ -3368,7 +3634,7 @@ var WRAPPER_FOCUS_STATUS_CLASSES = {
3368
3634
  warning: "ring-yellow-500"
3369
3635
  };
3370
3636
  function getInputNumberStatusClasses(status = "default") {
3371
- return WRAPPER_STATUS_CLASSES[status];
3637
+ return WRAPPER_STATUS_CLASSES2[status];
3372
3638
  }
3373
3639
  function getInputNumberFocusRingColor(status = "default") {
3374
3640
  return WRAPPER_FOCUS_STATUS_CLASSES[status];
@@ -4115,11 +4381,26 @@ var radioGroupDefaultClasses = "space-y-2";
4115
4381
  var getRadioGroupClasses = ({ className } = {}) => classNames(className, !className && radioGroupDefaultClasses);
4116
4382
 
4117
4383
  // src/utils/date-utils.ts
4384
+ var DATE_ONLY_ISO_RE = /^\s*(\d{4})-(\d{2})-(\d{2})\s*$/;
4385
+ function parseDateOnlyLocal(value) {
4386
+ const match = DATE_ONLY_ISO_RE.exec(value);
4387
+ if (!match) return void 0;
4388
+ const year = Number(match[1]);
4389
+ const month = Number(match[2]);
4390
+ const day = Number(match[3]);
4391
+ const local = new Date(year, month - 1, day);
4392
+ if (local.getFullYear() !== year || local.getMonth() !== month - 1 || local.getDate() !== day) {
4393
+ return null;
4394
+ }
4395
+ return local;
4396
+ }
4118
4397
  function parseDate(value) {
4119
4398
  if (!value) return null;
4120
4399
  if (value instanceof Date) {
4121
4400
  return isNaN(value.getTime()) ? null : value;
4122
4401
  }
4402
+ const dateOnly = parseDateOnlyLocal(value);
4403
+ if (dateOnly !== void 0) return dateOnly;
4123
4404
  const parsed = new Date(value);
4124
4405
  return isNaN(parsed.getTime()) ? null : parsed;
4125
4406
  }
@@ -4908,7 +5189,7 @@ function getUploadButtonClasses(disabled) {
4908
5189
  "px-4",
4909
5190
  "py-2",
4910
5191
  "border",
4911
- "border-gray-300",
5192
+ "border-[var(--tiger-border,#d1d5db)]",
4912
5193
  "rounded-[var(--tiger-radius-md,0.5rem)]",
4913
5194
  "text-sm",
4914
5195
  "font-medium",
@@ -4916,7 +5197,7 @@ function getUploadButtonClasses(disabled) {
4916
5197
  "duration-200"
4917
5198
  ];
4918
5199
  const stateClasses = disabled ? ["bg-gray-100", "text-gray-400", "cursor-not-allowed"] : [
4919
- "bg-white",
5200
+ "bg-[var(--tiger-surface,#ffffff)]",
4920
5201
  "text-gray-700",
4921
5202
  "hover:bg-gray-50",
4922
5203
  "focus:outline-none",
@@ -4960,7 +5241,7 @@ function getDragAreaClasses(isDragging, disabled) {
4960
5241
  ];
4961
5242
  } else {
4962
5243
  stateClasses = [
4963
- "border-gray-300",
5244
+ "border-[var(--tiger-border,#d1d5db)]",
4964
5245
  "hover:border-[var(--tiger-primary,#2563eb)]",
4965
5246
  "hover:bg-gray-50",
4966
5247
  "cursor-pointer",
@@ -4976,9 +5257,9 @@ var FILE_LIST_STATUS_CLASSES = {
4976
5257
  error: ["bg-red-50", "text-red-700", "hover:bg-red-100"]
4977
5258
  };
4978
5259
  var PICTURE_CARD_STATUS_CLASSES = {
4979
- ready: ["border-gray-300"],
5260
+ ready: ["border-[var(--tiger-border,#d1d5db)]"],
4980
5261
  uploading: ["border-blue-400", "bg-blue-50"],
4981
- success: ["border-gray-300", "hover:border-blue-400"],
5262
+ success: ["border-[var(--tiger-border,#d1d5db)]", "hover:border-blue-400"],
4982
5263
  error: ["border-red-400", "bg-red-50"]
4983
5264
  };
4984
5265
  function getFileListItemClasses(status) {
@@ -5250,7 +5531,7 @@ function getSidebarStyle(collapsed, width = "256px", collapsedWidth = "64px") {
5250
5531
  const w = collapsed ? collapsedWidth : width;
5251
5532
  return { width: w, minWidth: w };
5252
5533
  }
5253
- var layoutContentClasses = "tiger-content flex-1 bg-[var(--tiger-layout-content-bg,#f9fafb)]";
5534
+ var layoutContentClasses = "tiger-content flex-1 bg-[var(--tiger-layout-content-bg,var(--tiger-surface-muted,#f9fafb))]";
5254
5535
  function getLayoutContentClasses(padding = true) {
5255
5536
  return classNames(
5256
5537
  layoutContentClasses,
@@ -5665,6 +5946,7 @@ function getSortIconClasses(active) {
5665
5946
  active ? "text-[var(--tiger-primary,#2563eb)]" : "text-gray-400"
5666
5947
  );
5667
5948
  }
5949
+ var tableSortButtonClasses = "inline-flex items-center appearance-none border-0 bg-transparent p-0 font-[inherit] text-inherit cursor-pointer";
5668
5950
  var tableEmptyStateClasses = "text-center py-12 text-[var(--tiger-text-muted,#6b7280)]";
5669
5951
  var tableLoadingOverlayClasses = classNames(
5670
5952
  "absolute inset-0 bg-[var(--tiger-surface,#ffffff)]/80 flex items-center justify-center z-20"
@@ -5688,13 +5970,18 @@ function defaultSortFn(a, b) {
5688
5970
  }
5689
5971
  return String(a).localeCompare(String(b));
5690
5972
  }
5691
- function sortData(data, key, direction, sortFn) {
5973
+ function getTableColumnDataKey(column) {
5974
+ return column.dataKey || column.key;
5975
+ }
5976
+ function sortData(data, key, direction, sortFn, columns) {
5692
5977
  if (!direction || !key) {
5693
5978
  return data;
5694
5979
  }
5980
+ const column = columns?.find((col) => col.key === key);
5981
+ const fieldKey = column ? getTableColumnDataKey(column) : key;
5695
5982
  const sortedData = [...data].sort((a, b) => {
5696
- const aValue = a[key];
5697
- const bValue = b[key];
5983
+ const aValue = a[fieldKey];
5984
+ const bValue = b[fieldKey];
5698
5985
  const compareResult = sortFn ? sortFn(aValue, bValue) : defaultSortFn(aValue, bValue);
5699
5986
  return direction === "asc" ? compareResult : -compareResult;
5700
5987
  });
@@ -5721,8 +6008,10 @@ function filterTableData(data, columns, filters) {
5721
6008
  if (!filters || Object.keys(filters).length === 0) {
5722
6009
  return data;
5723
6010
  }
6011
+ const columnByKey = /* @__PURE__ */ new Map();
5724
6012
  const filterFnByKey = /* @__PURE__ */ new Map();
5725
6013
  for (const column of columns) {
6014
+ columnByKey.set(column.key, column);
5726
6015
  if (column.filter?.filterFn) {
5727
6016
  filterFnByKey.set(column.key, column.filter.filterFn);
5728
6017
  }
@@ -5732,7 +6021,9 @@ function filterTableData(data, columns, filters) {
5732
6021
  if (filterValue === "" || filterValue === null || filterValue === void 0) {
5733
6022
  return true;
5734
6023
  }
5735
- const cellValue = record[key];
6024
+ const column = columnByKey.get(key);
6025
+ const fieldKey = column ? getTableColumnDataKey(column) : key;
6026
+ const cellValue = record[fieldKey];
5736
6027
  const customFn = filterFnByKey.get(key);
5737
6028
  if (customFn) {
5738
6029
  return customFn(cellValue, filterValue);
@@ -5991,6 +6282,9 @@ function getInitials(name) {
5991
6282
  const words = trimmed.split(/\s+/).filter(Boolean);
5992
6283
  if (words.length === 1) {
5993
6284
  const firstWord = words[0];
6285
+ if (firstWord.length <= 2) {
6286
+ return firstWord.toUpperCase();
6287
+ }
5994
6288
  const hasNonASCII = /[^\x20-\x7E]/.test(firstWord);
5995
6289
  return hasNonASCII ? firstWord.slice(0, 2).toUpperCase() : firstWord.charAt(0).toUpperCase();
5996
6290
  }
@@ -6411,10 +6705,10 @@ function getTreeKeyboardAction(ctx) {
6411
6705
  return null;
6412
6706
  }
6413
6707
  }
6414
- var treeBaseClasses = "w-full bg-white rounded-[var(--tiger-radius-md,0.5rem)]";
6708
+ var treeBaseClasses = "w-full bg-[var(--tiger-tree-bg,var(--tiger-surface,#ffffff))] text-[var(--tiger-text,#111827)] rounded-[var(--tiger-radius-md,0.5rem)]";
6415
6709
  var treeNodeWrapperClasses = "select-none";
6416
6710
  var treeNodeContentClasses = "flex items-center px-2 py-1.5 cursor-pointer rounded transition-colors duration-200";
6417
- var treeNodeHoverClasses = "hover:bg-gray-50";
6711
+ var treeNodeHoverClasses = "hover:bg-[var(--tiger-tree-node-hover,var(--tiger-surface-muted,#f9fafb))]";
6418
6712
  var treeNodeSelectedClasses = "bg-[color-mix(in_srgb,var(--tiger-primary,#2563eb)_10%,transparent)] text-[var(--tiger-primary,#2563eb)]";
6419
6713
  var treeNodeDisabledClasses = "opacity-50 cursor-not-allowed";
6420
6714
  var treeNodeIndentClasses = "inline-block w-6";
@@ -6425,8 +6719,8 @@ var treeNodeIconClasses = "mr-2 flex-shrink-0";
6425
6719
  var treeNodeLabelClasses = "flex-1 truncate";
6426
6720
  var treeNodeChildrenClasses = "ml-6";
6427
6721
  var treeLoadingClasses = "inline-block ml-2 animate-spin h-4 w-4";
6428
- var treeEmptyStateClasses = "py-8 text-center text-gray-500";
6429
- var treeLineClasses = "border-l border-gray-300";
6722
+ var treeEmptyStateClasses = "py-8 text-center text-[var(--tiger-text-secondary,#6b7280)]";
6723
+ var treeLineClasses = "border-l border-[var(--tiger-border,#e5e7eb)]";
6430
6724
  function getTreeNodeClasses(selected, disabled, blockNode = false) {
6431
6725
  return classNames(
6432
6726
  treeNodeContentClasses,
@@ -6667,10 +6961,10 @@ function checkedSetsFromState(state) {
6667
6961
  }
6668
6962
 
6669
6963
  // src/utils/skeleton-utils.ts
6670
- var skeletonBaseClasses = "bg-[var(--tiger-skeleton-bg,#e5e7eb)] rounded-[var(--tiger-radius-sm,0.375rem)]";
6964
+ var skeletonBaseClasses = "bg-[var(--tiger-skeleton-bg,var(--tiger-surface-muted,#f9fafb))] rounded-[var(--tiger-radius-sm,0.375rem)]";
6671
6965
  var skeletonAnimationClasses = {
6672
6966
  pulse: "animate-pulse",
6673
- wave: "animate-pulse bg-gradient-to-r from-[var(--tiger-skeleton-bg,#e5e7eb)] via-[var(--tiger-skeleton-bg-alt,#d1d5db)] to-[var(--tiger-skeleton-bg,#e5e7eb)] bg-[length:200%_100%]",
6967
+ wave: "animate-pulse bg-gradient-to-r from-[var(--tiger-skeleton-bg,var(--tiger-surface-muted,#f9fafb))] via-[var(--tiger-skeleton-bg-alt,var(--tiger-border,#e5e7eb))] to-[var(--tiger-skeleton-bg,var(--tiger-surface-muted,#f9fafb))] bg-[length:200%_100%]",
6674
6968
  none: ""
6675
6969
  };
6676
6970
  var skeletonVariantDefaults = {
@@ -6965,7 +7259,7 @@ var menuCollapsedModeClasses = {
6965
7259
  vertical: "flex-col border-r",
6966
7260
  inline: "flex-col"
6967
7261
  };
6968
- var menuLightThemeClasses = "[--tiger-surface:#ffffff] [--tiger-text:#111827] [--tiger-text-muted:#6b7280] [--tiger-border:#e5e7eb] [--tiger-surface-muted:#f9fafb]";
7262
+ var menuLightThemeClasses = "";
6969
7263
  var menuDarkThemeClasses = "[--tiger-surface:#111827] [--tiger-text:#f9fafb] [--tiger-text-muted:#9ca3af] [--tiger-border:#374151] [--tiger-surface-muted:#1f2937] [--tiger-outline-bg-hover:#2563eb1a] [--tiger-ghost-bg-hover:#2563eb1a]";
6970
7264
  var menuItemBaseClasses = "flex w-full items-center px-4 py-2 text-left bg-transparent border-0 cursor-pointer transition-colors duration-200 select-none appearance-none focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--tiger-focus-ring,var(--tiger-primary,#2563eb))]/40 focus-visible:ring-inset active:opacity-90";
6971
7265
  var menuItemHoverLightClasses = "hover:bg-[var(--tiger-surface-muted,#f9fafb)]";
@@ -6996,7 +7290,10 @@ function themeClass(theme, light, dark) {
6996
7290
  function getMenuClasses(mode, theme, collapsed) {
6997
7291
  const modeClasses = collapsed && (mode === "vertical" || mode === "inline") ? menuCollapsedModeClasses[mode] : menuModeClasses[mode];
6998
7292
  const classes = [menuBaseClasses, modeClasses];
6999
- classes.push(themeClass(theme, menuLightThemeClasses, menuDarkThemeClasses));
7293
+ const themeClasses = themeClass(theme, menuLightThemeClasses, menuDarkThemeClasses);
7294
+ if (themeClasses) {
7295
+ classes.push(themeClasses);
7296
+ }
7000
7297
  if (collapsed && (mode === "vertical" || mode === "inline")) {
7001
7298
  classes.push(menuCollapsedClasses);
7002
7299
  }
@@ -7622,8 +7919,8 @@ function getPageNumbers(current, totalPages, showLessItems = false) {
7622
7919
  }
7623
7920
  return pages;
7624
7921
  }
7625
- function defaultTotalText(total, _range) {
7626
- return `\u5171 ${total} \u6761`;
7922
+ function defaultTotalText(total, range) {
7923
+ return formatPaginationTotal(DEFAULT_PAGINATION_LABELS.totalText, total, range);
7627
7924
  }
7628
7925
  var PAGINATION_FULL_MODE_PAGE_THRESHOLD = 3;
7629
7926
  function resolvePaginationDisplayMode(totalPages, config) {
@@ -8229,31 +8526,31 @@ var messagePositionClasses = {
8229
8526
  var messageBaseClasses = "flex items-center gap-3 px-4 py-3 rounded-[var(--tiger-radius-lg,0.75rem)] shadow-lg border pointer-events-auto transition-all duration-300 ease-in-out";
8230
8527
  var defaultMessageThemeColors = {
8231
8528
  info: {
8232
- bg: "bg-[var(--tiger-message-info-bg,#eff6ff)]",
8233
- border: "border-[var(--tiger-message-info-border,#bfdbfe)]",
8234
- text: "text-[var(--tiger-message-info-text,#1e40af)]",
8235
- icon: "text-[var(--tiger-message-info-icon,#3b82f6)]"
8529
+ bg: "bg-[var(--tiger-message-info-bg,var(--tiger-surface,#ffffff))]",
8530
+ border: "border-[var(--tiger-message-info-border,var(--tiger-border,#e5e7eb))]",
8531
+ text: "text-[var(--tiger-message-info-text,var(--tiger-info,#3b82f6))]",
8532
+ icon: "text-[var(--tiger-message-info-icon,var(--tiger-info,#3b82f6))]"
8236
8533
  },
8237
8534
  success: {
8238
- bg: "bg-[var(--tiger-message-success-bg,#f0fdf4)]",
8239
- border: "border-[var(--tiger-message-success-border,#bbf7d0)]",
8240
- text: "text-[var(--tiger-message-success-text,#166534)]",
8241
- icon: "text-[var(--tiger-message-success-icon,#22c55e)]"
8535
+ bg: "bg-[var(--tiger-message-success-bg,var(--tiger-surface,#ffffff))]",
8536
+ border: "border-[var(--tiger-message-success-border,var(--tiger-border,#e5e7eb))]",
8537
+ text: "text-[var(--tiger-message-success-text,var(--tiger-success,#16a34a))]",
8538
+ icon: "text-[var(--tiger-message-success-icon,var(--tiger-success,#16a34a))]"
8242
8539
  },
8243
8540
  warning: {
8244
- bg: "bg-[var(--tiger-message-warning-bg,#fffbeb)]",
8245
- border: "border-[var(--tiger-message-warning-border,#fde68a)]",
8246
- text: "text-[var(--tiger-message-warning-text,#92400e)]",
8247
- icon: "text-[var(--tiger-message-warning-icon,#f59e0b)]"
8541
+ bg: "bg-[var(--tiger-message-warning-bg,var(--tiger-surface,#ffffff))]",
8542
+ border: "border-[var(--tiger-message-warning-border,var(--tiger-border,#e5e7eb))]",
8543
+ text: "text-[var(--tiger-message-warning-text,var(--tiger-warning,#d97706))]",
8544
+ icon: "text-[var(--tiger-message-warning-icon,var(--tiger-warning,#d97706))]"
8248
8545
  },
8249
8546
  error: {
8250
- bg: "bg-[var(--tiger-message-error-bg,#fef2f2)]",
8251
- border: "border-[var(--tiger-message-error-border,#fecaca)]",
8252
- text: "text-[var(--tiger-message-error-text,#991b1b)]",
8253
- icon: "text-[var(--tiger-message-error-icon,#ef4444)]"
8547
+ bg: "bg-[var(--tiger-message-error-bg,var(--tiger-surface,#ffffff))]",
8548
+ border: "border-[var(--tiger-message-error-border,var(--tiger-border,#e5e7eb))]",
8549
+ text: "text-[var(--tiger-message-error-text,var(--tiger-error,#dc2626))]",
8550
+ icon: "text-[var(--tiger-message-error-icon,var(--tiger-error,#dc2626))]"
8254
8551
  },
8255
8552
  loading: {
8256
- bg: "bg-[var(--tiger-message-loading-bg,var(--tiger-surface-muted,#f3f4f6))]",
8553
+ bg: "bg-[var(--tiger-message-loading-bg,var(--tiger-surface-muted,#f9fafb))]",
8257
8554
  border: "border-[var(--tiger-message-loading-border,var(--tiger-border,#e5e7eb))]",
8258
8555
  text: "text-[var(--tiger-message-loading-text,var(--tiger-text,#111827))]",
8259
8556
  icon: "text-[var(--tiger-message-loading-icon,var(--tiger-text-muted,#6b7280))]"
@@ -8420,6 +8717,7 @@ var loadingColorClasses = {
8420
8717
  };
8421
8718
  var loadingContainerBaseClasses = "inline-flex flex-col items-center justify-center gap-2";
8422
8719
  var loadingFullscreenBaseClasses = "fixed inset-0 z-50 flex items-center justify-center";
8720
+ var DEFAULT_LOADING_BACKGROUND = "var(--tiger-loading-mask, color-mix(in srgb, var(--tiger-surface, #ffffff) 90%, transparent))";
8423
8721
  var loadingSpinnerBaseClasses = "animate-spin";
8424
8722
  var loadingOverlaySpinnerBaseClasses = "animate-spin h-8 w-8 text-[var(--tiger-primary,#2563eb)]";
8425
8723
  function getLoadingOverlaySpinnerClasses(customClassName) {
@@ -8863,6 +9161,59 @@ function createLoadingBarController(hooks = {}) {
8863
9161
  }
8864
9162
 
8865
9163
  // src/utils/floating-popup-utils.ts
9164
+ var DEFAULT_FLOATING_HOVER_HIDE_DELAY_MS = 100;
9165
+ var DEFAULT_FLOATING_HOVER_SHOW_DELAY_MS = 0;
9166
+ function createFloatingHoverDelayController(options) {
9167
+ const hideDelay = options.hideDelay ?? DEFAULT_FLOATING_HOVER_HIDE_DELAY_MS;
9168
+ const showDelay = options.showDelay ?? DEFAULT_FLOATING_HOVER_SHOW_DELAY_MS;
9169
+ let showTimer = null;
9170
+ let hideTimer = null;
9171
+ const clearShowTimer = () => {
9172
+ if (showTimer === null) return;
9173
+ clearTimeout(showTimer);
9174
+ showTimer = null;
9175
+ };
9176
+ const clearHideTimer = () => {
9177
+ if (hideTimer === null) return;
9178
+ clearTimeout(hideTimer);
9179
+ hideTimer = null;
9180
+ };
9181
+ const cancel = () => {
9182
+ clearShowTimer();
9183
+ clearHideTimer();
9184
+ };
9185
+ const enter = () => {
9186
+ clearHideTimer();
9187
+ if (showDelay <= 0) {
9188
+ clearShowTimer();
9189
+ options.show();
9190
+ return;
9191
+ }
9192
+ if (showTimer !== null) return;
9193
+ showTimer = setTimeout(() => {
9194
+ showTimer = null;
9195
+ options.show();
9196
+ }, showDelay);
9197
+ };
9198
+ const leave = () => {
9199
+ clearShowTimer();
9200
+ if (hideDelay <= 0) {
9201
+ clearHideTimer();
9202
+ options.hide();
9203
+ return;
9204
+ }
9205
+ if (hideTimer !== null) return;
9206
+ hideTimer = setTimeout(() => {
9207
+ hideTimer = null;
9208
+ options.hide();
9209
+ }, hideDelay);
9210
+ };
9211
+ const closeNow = () => {
9212
+ cancel();
9213
+ options.hide();
9214
+ };
9215
+ return { enter, leave, cancel, dispose: cancel, closeNow };
9216
+ }
8866
9217
  function createFloatingIdFactory(prefix) {
8867
9218
  let counter = 0;
8868
9219
  return () => `tiger-${prefix}-${++counter}`;
@@ -9136,13 +9487,15 @@ var codeBlockContainerClasses = "relative rounded-[var(--tiger-radius-md,0.5rem)
9136
9487
  var codeBlockPreClasses = "m-0 overflow-auto p-4 text-sm leading-relaxed font-mono whitespace-pre";
9137
9488
  var codeBlockCopyButtonBaseClasses = "absolute right-3 top-0 -translate-y-1/2 inline-flex items-center rounded-[var(--tiger-radius-md,0.5rem)] border border-[var(--tiger-border,#e5e7eb)] bg-[var(--tiger-surface,#fff)] px-1.5 py-0.5 text-[10px] text-[var(--tiger-text-muted,#6b7280)] shadow-sm transition-colors hover:text-[var(--tiger-text,#111827)] motion-reduce:transition-none";
9138
9489
  var codeBlockCopyButtonCopiedClasses = "border-[var(--tiger-primary,#2563eb)] text-[var(--tiger-primary,#2563eb)]";
9490
+ var codeBlockCopyButtonFailedClasses = "border-[var(--tiger-error,#ef4444)] text-[var(--tiger-error,#ef4444)]";
9139
9491
  function getCodeBlockContainerClasses(...classes) {
9140
9492
  return classNames(codeBlockContainerClasses, ...classes);
9141
9493
  }
9142
- function getCodeBlockCopyButtonClasses(isCopied, ...classes) {
9494
+ function getCodeBlockCopyButtonClasses(status = "idle", ...classes) {
9143
9495
  return classNames(
9144
9496
  codeBlockCopyButtonBaseClasses,
9145
- isCopied && codeBlockCopyButtonCopiedClasses,
9497
+ status === "copied" && codeBlockCopyButtonCopiedClasses,
9498
+ status === "failed" && codeBlockCopyButtonFailedClasses,
9146
9499
  ...classes
9147
9500
  );
9148
9501
  }
@@ -9279,7 +9632,7 @@ var textDecorationClasses = {
9279
9632
  };
9280
9633
  var defaultTagThemeColors = {
9281
9634
  default: {
9282
- bg: "bg-[var(--tiger-tag-default-bg,#f3f4f6)]",
9635
+ bg: "bg-[var(--tiger-tag-default-bg,var(--tiger-surface-muted,#f9fafb))]",
9283
9636
  text: "text-[var(--tiger-text,#111827)]",
9284
9637
  border: "border-[var(--tiger-border,#e5e7eb)]",
9285
9638
  closeBgHover: "hover:bg-[var(--tiger-tag-default-close-hover,#e5e7eb)]"
@@ -9386,44 +9739,44 @@ function getProgressTextColorClasses(variant, colors = defaultProgressThemeColor
9386
9739
  }
9387
9740
  var defaultAlertThemeColors = {
9388
9741
  success: {
9389
- bg: "bg-[var(--tiger-alert-success-bg,#f0fdf4)]",
9390
- border: "border-[var(--tiger-alert-success-border,#bbf7d0)]",
9391
- icon: "text-[var(--tiger-alert-success-icon,#22c55e)]",
9392
- title: "text-[var(--tiger-alert-success-title,#166534)]",
9393
- description: "text-[var(--tiger-alert-success-description,#15803d)]",
9394
- closeButton: "text-[var(--tiger-alert-success-close,#22c55e)]",
9395
- closeButtonHover: "hover:bg-[var(--tiger-alert-success-close-hover-bg,#dcfce7)]",
9396
- focus: "focus:ring-[color:var(--tiger-alert-success-ring,#22c55e)]"
9742
+ bg: "bg-[var(--tiger-alert-success-bg,var(--tiger-surface,#ffffff))]",
9743
+ border: "border-[var(--tiger-alert-success-border,var(--tiger-border,#e5e7eb))]",
9744
+ icon: "text-[var(--tiger-alert-success-icon,var(--tiger-success,#16a34a))]",
9745
+ title: "text-[var(--tiger-alert-success-title,var(--tiger-success,#16a34a))]",
9746
+ description: "text-[var(--tiger-alert-success-description,var(--tiger-text-secondary,#6b7280))]",
9747
+ closeButton: "text-[var(--tiger-alert-success-close,var(--tiger-success,#16a34a))]",
9748
+ closeButtonHover: "hover:bg-[var(--tiger-alert-success-close-hover-bg,var(--tiger-surface-muted,#f9fafb))]",
9749
+ focus: "focus:ring-[color:var(--tiger-alert-success-ring,var(--tiger-success,#16a34a))]"
9397
9750
  },
9398
9751
  warning: {
9399
- bg: "bg-[var(--tiger-alert-warning-bg,#fefce8)]",
9400
- border: "border-[var(--tiger-alert-warning-border,#fef08a)]",
9401
- icon: "text-[var(--tiger-alert-warning-icon,#eab308)]",
9402
- title: "text-[var(--tiger-alert-warning-title,#854d0e)]",
9403
- description: "text-[var(--tiger-alert-warning-description,#a16207)]",
9404
- closeButton: "text-[var(--tiger-alert-warning-close,#eab308)]",
9405
- closeButtonHover: "hover:bg-[var(--tiger-alert-warning-close-hover-bg,#fef9c3)]",
9406
- focus: "focus:ring-[color:var(--tiger-alert-warning-ring,#eab308)]"
9752
+ bg: "bg-[var(--tiger-alert-warning-bg,var(--tiger-surface,#ffffff))]",
9753
+ border: "border-[var(--tiger-alert-warning-border,var(--tiger-border,#e5e7eb))]",
9754
+ icon: "text-[var(--tiger-alert-warning-icon,var(--tiger-warning,#d97706))]",
9755
+ title: "text-[var(--tiger-alert-warning-title,var(--tiger-warning,#d97706))]",
9756
+ description: "text-[var(--tiger-alert-warning-description,var(--tiger-text-secondary,#6b7280))]",
9757
+ closeButton: "text-[var(--tiger-alert-warning-close,var(--tiger-warning,#d97706))]",
9758
+ closeButtonHover: "hover:bg-[var(--tiger-alert-warning-close-hover-bg,var(--tiger-surface-muted,#f9fafb))]",
9759
+ focus: "focus:ring-[color:var(--tiger-alert-warning-ring,var(--tiger-warning,#d97706))]"
9407
9760
  },
9408
9761
  error: {
9409
- bg: "bg-[var(--tiger-alert-error-bg,#fef2f2)]",
9410
- border: "border-[var(--tiger-alert-error-border,#fecaca)]",
9411
- icon: "text-[var(--tiger-alert-error-icon,#ef4444)]",
9412
- title: "text-[var(--tiger-alert-error-title,#991b1b)]",
9413
- description: "text-[var(--tiger-alert-error-description,#b91c1c)]",
9414
- closeButton: "text-[var(--tiger-alert-error-close,#ef4444)]",
9415
- closeButtonHover: "hover:bg-[var(--tiger-alert-error-close-hover-bg,#fee2e2)]",
9416
- focus: "focus:ring-[color:var(--tiger-alert-error-ring,#ef4444)]"
9762
+ bg: "bg-[var(--tiger-alert-error-bg,var(--tiger-surface,#ffffff))]",
9763
+ border: "border-[var(--tiger-alert-error-border,var(--tiger-border,#e5e7eb))]",
9764
+ icon: "text-[var(--tiger-alert-error-icon,var(--tiger-error,#dc2626))]",
9765
+ title: "text-[var(--tiger-alert-error-title,var(--tiger-error,#dc2626))]",
9766
+ description: "text-[var(--tiger-alert-error-description,var(--tiger-text-secondary,#6b7280))]",
9767
+ closeButton: "text-[var(--tiger-alert-error-close,var(--tiger-error,#dc2626))]",
9768
+ closeButtonHover: "hover:bg-[var(--tiger-alert-error-close-hover-bg,var(--tiger-surface-muted,#f9fafb))]",
9769
+ focus: "focus:ring-[color:var(--tiger-alert-error-ring,var(--tiger-error,#dc2626))]"
9417
9770
  },
9418
9771
  info: {
9419
- bg: "bg-[var(--tiger-alert-info-bg,#eff6ff)]",
9420
- border: "border-[var(--tiger-alert-info-border,#bfdbfe)]",
9421
- icon: "text-[var(--tiger-alert-info-icon,#3b82f6)]",
9422
- title: "text-[var(--tiger-alert-info-title,#1e40af)]",
9423
- description: "text-[var(--tiger-alert-info-description,#1d4ed8)]",
9424
- closeButton: "text-[var(--tiger-alert-info-close,#3b82f6)]",
9425
- closeButtonHover: "hover:bg-[var(--tiger-alert-info-close-hover-bg,#dbeafe)]",
9426
- focus: "focus:ring-[color:var(--tiger-alert-info-ring,#3b82f6)]"
9772
+ bg: "bg-[var(--tiger-alert-info-bg,var(--tiger-surface,#ffffff))]",
9773
+ border: "border-[var(--tiger-alert-info-border,var(--tiger-border,#e5e7eb))]",
9774
+ icon: "text-[var(--tiger-alert-info-icon,var(--tiger-info,#3b82f6))]",
9775
+ title: "text-[var(--tiger-alert-info-title,var(--tiger-info,#3b82f6))]",
9776
+ description: "text-[var(--tiger-alert-info-description,var(--tiger-text-secondary,#6b7280))]",
9777
+ closeButton: "text-[var(--tiger-alert-info-close,var(--tiger-info,#3b82f6))]",
9778
+ closeButtonHover: "hover:bg-[var(--tiger-alert-info-close-hover-bg,var(--tiger-surface-muted,#f9fafb))]",
9779
+ focus: "focus:ring-[color:var(--tiger-alert-info-ring,var(--tiger-info,#3b82f6))]"
9427
9780
  }
9428
9781
  };
9429
9782
  function getAlertTypeClasses(type, colors = defaultAlertThemeColors) {
@@ -9975,7 +10328,7 @@ var nextIconPath = "M9 5l7 7-7 7";
9975
10328
  var previewCloseIconPath = "M6 18L18 6M6 6l12 12";
9976
10329
  var imagePreviewMaskClasses = "fixed inset-0 bg-[var(--tiger-image-mask,rgba(0,0,0,0.85))] transition-opacity";
9977
10330
  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";
10331
+ var imagePreviewImgClasses = "max-h-[90vh] max-w-[90vw] select-none transition-transform duration-150 ease-out cursor-grab active:cursor-grabbing touch-none";
9979
10332
  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
10333
  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
10334
  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";
@@ -10676,6 +11029,19 @@ function scrollToAnchor(href, container, targetOffset = 0) {
10676
11029
  const scrollTarget = container === window ? window : container;
10677
11030
  scrollTarget.scrollTo({ top, behavior: "smooth" });
10678
11031
  }
11032
+ function findActiveAnchorAtOffsetLine(links, getSectionTop, offsetLine) {
11033
+ if (links.length === 0) {
11034
+ return "";
11035
+ }
11036
+ for (let i = links.length - 1; i >= 0; i--) {
11037
+ const href = links[i];
11038
+ const top = getSectionTop(href);
11039
+ if (top !== null && top <= offsetLine) {
11040
+ return href;
11041
+ }
11042
+ }
11043
+ return links[0] || "";
11044
+ }
10679
11045
  function findActiveAnchor(links, container, bounds = 5, targetOffset = 0) {
10680
11046
  if (links.length === 0) {
10681
11047
  return "";
@@ -10684,24 +11050,103 @@ function findActiveAnchor(links, container, bounds = 5, targetOffset = 0) {
10684
11050
  return links[0] || "";
10685
11051
  }
10686
11052
  const scrollTop = getContainerScrollTop(container);
10687
- for (let i = links.length - 1; i >= 0; i--) {
10688
- const href = links[i];
10689
- const element = getAnchorTargetElement(href);
10690
- if (element) {
10691
- const offsetTop = getElementOffsetTop(element, container) - targetOffset - bounds;
10692
- if (scrollTop >= offsetTop) {
10693
- return href;
11053
+ const offsetLine = scrollTop + targetOffset + bounds;
11054
+ return findActiveAnchorAtOffsetLine(
11055
+ links,
11056
+ (href) => {
11057
+ const element = getAnchorTargetElement(href);
11058
+ if (!element) {
11059
+ return null;
11060
+ }
11061
+ return getElementOffsetTop(element, container);
11062
+ },
11063
+ offsetLine
11064
+ );
11065
+ }
11066
+ var DEFAULT_SCROLL_LOCK_IDLE_MS = 150;
11067
+ var DEFAULT_SCROLL_LOCK_TIMEOUT_MS = 2e3;
11068
+ function createProgrammaticScrollLock(getTarget, options = {}) {
11069
+ const idleMs = options.idleMs ?? DEFAULT_SCROLL_LOCK_IDLE_MS;
11070
+ const timeoutMs = options.timeoutMs ?? DEFAULT_SCROLL_LOCK_TIMEOUT_MS;
11071
+ let locked = false;
11072
+ let idleTimer = null;
11073
+ let safetyTimer = null;
11074
+ let attachedTarget = null;
11075
+ let listeningScrollEnd = false;
11076
+ const clearTimers = () => {
11077
+ if (idleTimer !== null) {
11078
+ clearTimeout(idleTimer);
11079
+ idleTimer = null;
11080
+ }
11081
+ if (safetyTimer !== null) {
11082
+ clearTimeout(safetyTimer);
11083
+ safetyTimer = null;
11084
+ }
11085
+ };
11086
+ const onScroll = () => {
11087
+ scheduleIdle();
11088
+ };
11089
+ const onScrollEnd = () => {
11090
+ unlock();
11091
+ };
11092
+ const detach = () => {
11093
+ if (!attachedTarget) {
11094
+ return;
11095
+ }
11096
+ attachedTarget.removeEventListener("scroll", onScroll);
11097
+ if (listeningScrollEnd) {
11098
+ attachedTarget.removeEventListener("scrollend", onScrollEnd);
11099
+ }
11100
+ attachedTarget = null;
11101
+ listeningScrollEnd = false;
11102
+ };
11103
+ const unlock = () => {
11104
+ locked = false;
11105
+ clearTimers();
11106
+ detach();
11107
+ };
11108
+ const scheduleIdle = () => {
11109
+ if (idleTimer !== null) {
11110
+ clearTimeout(idleTimer);
11111
+ }
11112
+ idleTimer = setTimeout(() => {
11113
+ idleTimer = null;
11114
+ unlock();
11115
+ }, idleMs);
11116
+ };
11117
+ const lock = () => {
11118
+ clearTimers();
11119
+ detach();
11120
+ locked = true;
11121
+ if (isBrowser()) {
11122
+ const container = getTarget();
11123
+ const target = container === window ? window : container;
11124
+ attachedTarget = target;
11125
+ listeningScrollEnd = "onscrollend" in window;
11126
+ target.addEventListener("scroll", onScroll, { passive: true });
11127
+ if (listeningScrollEnd) {
11128
+ target.addEventListener("scrollend", onScrollEnd);
10694
11129
  }
10695
11130
  }
10696
- }
10697
- return links[0] || "";
11131
+ scheduleIdle();
11132
+ safetyTimer = setTimeout(() => {
11133
+ safetyTimer = null;
11134
+ unlock();
11135
+ }, timeoutMs);
11136
+ };
11137
+ return {
11138
+ isLocked: () => locked,
11139
+ lock,
11140
+ unlock,
11141
+ dispose: unlock
11142
+ };
10698
11143
  }
10699
11144
  function createAnchorObserver(links, options) {
10700
11145
  if (!isBrowser()) return () => {
10701
11146
  };
10702
11147
  if (typeof IntersectionObserver === "undefined") return () => {
10703
11148
  };
10704
- const { offsetTop = 0, root = null, onChange } = options;
11149
+ const { offsetTop = 0, bounds = 5, root = null, onChange } = options;
10705
11150
  const targets = /* @__PURE__ */ new Map();
10706
11151
  for (const href of links) {
10707
11152
  const el = getAnchorTargetElement(href);
@@ -10709,30 +11154,24 @@ function createAnchorObserver(links, options) {
10709
11154
  }
10710
11155
  if (targets.size === 0) return () => {
10711
11156
  };
10712
- const visible = /* @__PURE__ */ new Set();
10713
11157
  const computeActive = () => {
10714
- for (const href of links) {
10715
- if (visible.has(href)) return href;
10716
- }
10717
11158
  const rootTop = root ? root.getBoundingClientRect().top : 0;
10718
- let fallback = "";
10719
- for (const href of links) {
10720
- const el = getAnchorTargetElement(href);
10721
- if (el && el.getBoundingClientRect().top - rootTop <= offsetTop + 1) {
10722
- fallback = href;
10723
- }
10724
- }
10725
- return fallback;
11159
+ const offsetLine = rootTop + offsetTop + bounds;
11160
+ return findActiveAnchorAtOffsetLine(
11161
+ links,
11162
+ (href) => {
11163
+ const el = getAnchorTargetElement(href);
11164
+ if (!el) {
11165
+ return null;
11166
+ }
11167
+ return el.getBoundingClientRect().top;
11168
+ },
11169
+ offsetLine
11170
+ );
10726
11171
  };
10727
11172
  let last = "";
10728
11173
  const observer = new IntersectionObserver(
10729
- (entries) => {
10730
- for (const entry of entries) {
10731
- const href = targets.get(entry.target);
10732
- if (!href) continue;
10733
- if (entry.isIntersecting) visible.add(href);
10734
- else visible.delete(href);
10735
- }
11174
+ () => {
10736
11175
  const next = computeActive();
10737
11176
  if (next !== last) {
10738
11177
  last = next;
@@ -10741,9 +11180,8 @@ function createAnchorObserver(links, options) {
10741
11180
  },
10742
11181
  {
10743
11182
  root,
10744
- // Active zone: from `offsetTop` down to ~40% of viewport height.
10745
- // Sections fully below this band are considered "below".
10746
- rootMargin: `-${offsetTop}px 0px -60% 0px`,
11183
+ // Top inset at the offset line; 0 bottom so last sections still notify.
11184
+ rootMargin: `-${offsetTop}px 0px 0px 0px`,
10747
11185
  threshold: [0, 1]
10748
11186
  }
10749
11187
  );
@@ -10772,8 +11210,8 @@ var DEFAULT_CHART_COLORS = [
10772
11210
  "var(--tiger-chart-6,#ef4444)"
10773
11211
  ];
10774
11212
  var RADAR_SPLIT_AREA_COLORS = [
10775
- "var(--tiger-chart-split-1,rgba(0,0,0,0.02))",
10776
- "var(--tiger-chart-split-2,rgba(0,0,0,0.05))"
11213
+ "var(--tiger-chart-split-1,color-mix(in oklab, var(--tiger-text) 4%, transparent))",
11214
+ "var(--tiger-chart-split-2,color-mix(in oklab, var(--tiger-text) 10%, transparent))"
10777
11215
  ];
10778
11216
  var PIE_EMPHASIS_SHADOW = "drop-shadow(0 4px 8px rgba(0,0,0,0.2))";
10779
11217
  var PIE_BASE_SHADOW = "drop-shadow(0 1px 2px rgba(0,0,0,0.06))";
@@ -10790,7 +11228,7 @@ function getScatterHoverShadow(color) {
10790
11228
  function getScatterHoverSize(baseSize) {
10791
11229
  return baseSize + 2;
10792
11230
  }
10793
- var SCATTER_ENTRANCE_KEYFRAMES = `@keyframes tiger-scatter-entrance{from{opacity:0;transform:scale(0)}60%{transform:scale(1.15)}to{opacity:1;transform:scale(1)}}@media (prefers-reduced-motion: reduce){.tiger-scatter-entrance{animation-duration:0ms;animation-delay:0ms}}`;
11231
+ var SCATTER_ENTRANCE_KEYFRAMES = `@keyframes tiger-scatter-entrance{from{opacity:0;transform:scale(0)}60%{transform:scale(1.15)}to{opacity:1;transform:scale(1)}}.tiger-scatter-entrance{transform-box:fill-box;transform-origin:center}@media (prefers-reduced-motion: reduce){.tiger-scatter-entrance{animation-duration:0ms;animation-delay:0ms}}`;
10794
11232
  var SCATTER_ENTRANCE_CLASS = "tiger-scatter-entrance";
10795
11233
  var DONUT_ENTRANCE_KEYFRAMES = `@keyframes tiger-donut-entrance{from{opacity:0;transform:scale(0.9)}to{opacity:1;transform:scale(1)}}.tiger-donut-entrance{transform-origin:center;animation:tiger-donut-entrance var(--tiger-motion-duration-slow,500ms) var(--tiger-motion-ease-spring,cubic-bezier(.34,1.56,.64,1)) both}@media (prefers-reduced-motion: reduce){.tiger-donut-entrance{animation-duration:0ms}}`;
10796
11234
  var DONUT_ENTRANCE_CLASS = "tiger-donut-entrance";
@@ -11139,6 +11577,31 @@ function createPolygonPath(points) {
11139
11577
  " "
11140
11578
  );
11141
11579
  }
11580
+ function createPolygonRingPath(outerPoints, innerPoints = []) {
11581
+ const outer = createPolygonPath(outerPoints);
11582
+ if (!outer) return "";
11583
+ if (innerPoints.length === 0) return outer;
11584
+ const inner = createPolygonPath(innerPoints.slice().reverse());
11585
+ if (!inner) return outer;
11586
+ return `${outer} ${inner}`;
11587
+ }
11588
+ function createCircleRingPath(cx, cy, outerRadius, innerRadius = 0) {
11589
+ if (outerRadius <= 0) return "";
11590
+ const outer = [
11591
+ `M ${cx} ${cy - outerRadius}`,
11592
+ `A ${outerRadius} ${outerRadius} 0 1 1 ${cx} ${cy + outerRadius}`,
11593
+ `A ${outerRadius} ${outerRadius} 0 1 1 ${cx} ${cy - outerRadius}`,
11594
+ "Z"
11595
+ ].join(" ");
11596
+ if (innerRadius <= 0) return outer;
11597
+ const inner = [
11598
+ `M ${cx} ${cy - innerRadius}`,
11599
+ `A ${innerRadius} ${innerRadius} 0 1 0 ${cx} ${cy + innerRadius}`,
11600
+ `A ${innerRadius} ${innerRadius} 0 1 0 ${cx} ${cy - innerRadius}`,
11601
+ "Z"
11602
+ ].join(" ");
11603
+ return `${outer} ${inner}`;
11604
+ }
11142
11605
  function getRadarLabelAlign(angle) {
11143
11606
  const TWO_PI = Math.PI * 2;
11144
11607
  const a = (angle % TWO_PI + TWO_PI) % TWO_PI;
@@ -12111,6 +12574,10 @@ function layoutRect(items, x, y, w, h, gap, palette, out) {
12111
12574
  }
12112
12575
 
12113
12576
  // src/utils/sunburst-chart-utils.ts
12577
+ function getSunburstLabelPoint(arc, cx, cy) {
12578
+ const midRadius = (arc.innerRadius + arc.outerRadius) / 2;
12579
+ return polarToCartesian(cx, cy, midRadius, arc.midAngle);
12580
+ }
12114
12581
  function sumValue(d) {
12115
12582
  let v;
12116
12583
  if (d.children && d.children.length > 0) {
@@ -12170,7 +12637,9 @@ function computeSunburstArcs(data, opts) {
12170
12637
  endAngle: ea,
12171
12638
  color,
12172
12639
  path,
12173
- midAngle: (sa + ea) / 2
12640
+ midAngle: (sa + ea) / 2,
12641
+ innerRadius: iR,
12642
+ outerRadius: oR
12174
12643
  });
12175
12644
  if (item.children && item.children.length > 0) {
12176
12645
  layoutLevel(item.children, sa, ea, level + 1, colorIdx);
@@ -12510,6 +12979,45 @@ function getWatermarkOverlayStyle(opts) {
12510
12979
  };
12511
12980
  }
12512
12981
 
12982
+ // src/utils/viewport-floating-utils.ts
12983
+ var viewportFloatingBaseClasses = "fixed z-50";
12984
+ var viewportPlacementClasses = {
12985
+ "top-left": "top-0 left-0",
12986
+ "top-right": "top-0 right-0",
12987
+ "bottom-left": "bottom-0 left-0",
12988
+ "bottom-right": "bottom-0 right-0"
12989
+ };
12990
+ function toCssLength(value) {
12991
+ return typeof value === "number" ? `${value}px` : value;
12992
+ }
12993
+ function resolveAxisOffset(offset2) {
12994
+ if (offset2 === void 0) {
12995
+ return { x: 24, y: 24 };
12996
+ }
12997
+ if (typeof offset2 === "number" || typeof offset2 === "string") {
12998
+ return { x: offset2, y: offset2 };
12999
+ }
13000
+ return {
13001
+ x: offset2.x ?? 24,
13002
+ y: offset2.y ?? 24
13003
+ };
13004
+ }
13005
+ function getViewportOffsetStyle(placement, offset2) {
13006
+ const { x, y } = resolveAxisOffset(offset2);
13007
+ const style = {};
13008
+ if (placement.startsWith("top")) {
13009
+ style.top = toCssLength(y);
13010
+ } else {
13011
+ style.bottom = toCssLength(y);
13012
+ }
13013
+ if (placement.endsWith("left")) {
13014
+ style.left = toCssLength(x);
13015
+ } else {
13016
+ style.right = toCssLength(x);
13017
+ }
13018
+ return style;
13019
+ }
13020
+
12513
13021
  // src/utils/float-button-utils.ts
12514
13022
  var floatButtonBaseClasses = "inline-flex items-center justify-center shadow-lg transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-[var(--tiger-focus-ring,#3b82f6)]";
12515
13023
  var floatButtonShapeClasses = {
@@ -12526,13 +13034,23 @@ var floatButtonTypeClasses = {
12526
13034
  default: "bg-[var(--tiger-surface-raised,#ffffff)] text-[var(--tiger-text,#111827)] border border-[var(--tiger-border,#e5e7eb)] hover:border-[var(--tiger-border-strong,#d1d5db)] hover:shadow-xl"
12527
13035
  };
12528
13036
  var floatButtonDisabledClasses = "opacity-50 cursor-not-allowed pointer-events-none";
12529
- var floatButtonGroupClasses = "fixed right-6 bottom-6 z-50 flex flex-col-reverse items-center gap-3";
13037
+ var floatButtonGroupClasses = "z-50 flex flex-col-reverse items-center gap-3";
12530
13038
  var floatButtonGroupExpandClasses = "transition-all duration-200 ease-in-out";
13039
+ function getFloatButtonGroupClasses(options = {}) {
13040
+ const placement = options.placement ?? "bottom-right";
13041
+ const portal = options.portal ?? true;
13042
+ return classNames(
13043
+ portal ? viewportFloatingBaseClasses : "absolute z-50",
13044
+ viewportPlacementClasses[placement],
13045
+ floatButtonGroupClasses
13046
+ );
13047
+ }
12531
13048
  var floatButtonIconSizeClasses = {
12532
13049
  sm: "h-4 w-4",
12533
13050
  md: "h-5 w-5",
12534
13051
  lg: "h-6 w-6"
12535
13052
  };
13053
+ var floatButtonPlusIconPath = "M12 5v14M5 12h14";
12536
13054
 
12537
13055
  // src/utils/tour-utils.ts
12538
13056
  var tourMaskClasses = "fixed inset-0 z-[1000] bg-black/45 transition-opacity duration-200";
@@ -12630,13 +13148,35 @@ function getTourTargetRect(selector) {
12630
13148
  height: r.height
12631
13149
  };
12632
13150
  }
12633
- function getTourSpotlightStyle(rect, padding = 4) {
13151
+ var TOUR_MASK_HOLE_PADDING = 4;
13152
+ function getTourMaskHoleRect(rect, padding) {
13153
+ const scrollX = isBrowser() ? window.scrollX : 0;
13154
+ const scrollY = isBrowser() ? window.scrollY : 0;
13155
+ return {
13156
+ top: rect.top - scrollY - padding,
13157
+ left: rect.left - scrollX - padding,
13158
+ width: rect.width + padding * 2,
13159
+ height: rect.height + padding * 2
13160
+ };
13161
+ }
13162
+ function getTourMaskHoleStyle(rect, padding = TOUR_MASK_HOLE_PADDING) {
13163
+ const hole = getTourMaskHoleRect(rect, padding);
13164
+ const left = hole.left;
13165
+ const top = hole.top;
13166
+ const right = hole.left + hole.width;
13167
+ const bottom = hole.top + hole.height;
13168
+ return {
13169
+ clipPath: `polygon(evenodd, 0% 0%, 100% 0%, 100% 100%, 0% 100%, 0% 0%, ${left}px ${top}px, ${right}px ${top}px, ${right}px ${bottom}px, ${left}px ${bottom}px, ${left}px ${top}px)`
13170
+ };
13171
+ }
13172
+ function getTourSpotlightStyle(rect, padding = TOUR_MASK_HOLE_PADDING) {
13173
+ const hole = getTourMaskHoleRect(rect, padding);
12634
13174
  return {
12635
13175
  position: "fixed",
12636
- top: `${rect.top - window.scrollY - padding}px`,
12637
- left: `${rect.left - window.scrollX - padding}px`,
12638
- width: `${rect.width + padding * 2}px`,
12639
- height: `${rect.height + padding * 2}px`,
13176
+ top: `${hole.top}px`,
13177
+ left: `${hole.left}px`,
13178
+ width: `${hole.width}px`,
13179
+ height: `${hole.height}px`,
12640
13180
  borderRadius: "4px",
12641
13181
  boxShadow: "0 0 0 9999px rgba(0,0,0,0.45)",
12642
13182
  zIndex: "1000",
@@ -12647,17 +13187,18 @@ function getTourSpotlightStyle(rect, padding = 4) {
12647
13187
 
12648
13188
  // src/utils/affix-utils.ts
12649
13189
  var affixWrapperClasses = "relative";
12650
- function calculateAffixState(elementRect, containerRect, offsetTop, offsetBottom, zIndex) {
13190
+ function calculateAffixState(elementRect, containerRect, offsetTop, offsetBottom, zIndex, viewportHeight) {
12651
13191
  const useBottom = offsetBottom !== void 0;
12652
13192
  const offset2 = useBottom ? offsetBottom : offsetTop ?? 0;
12653
13193
  if (useBottom) {
12654
13194
  const shouldAffix = elementRect.top + elementRect.height > containerRect.bottom - offset2;
12655
13195
  if (shouldAffix) {
13196
+ const innerHeight = viewportHeight ?? (isBrowser() ? window.innerHeight : containerRect.bottom);
12656
13197
  return {
12657
13198
  affixed: true,
12658
13199
  style: {
12659
13200
  position: "fixed",
12660
- bottom: `${offset2}px`,
13201
+ bottom: `${innerHeight - containerRect.bottom + offset2}px`,
12661
13202
  left: `${elementRect.left}px`,
12662
13203
  width: `${elementRect.width}px`,
12663
13204
  zIndex
@@ -13095,10 +13636,35 @@ function resetDevWarnCache() {
13095
13636
 
13096
13637
  // src/utils/chat-window-utils.ts
13097
13638
  var defaultChatMessageStatusInfo = {
13098
- sending: { text: "\u53D1\u9001\u4E2D", className: "text-[var(--tiger-text-muted,#6b7280)]" },
13099
- sent: { text: "\u5DF2\u9001\u8FBE", className: "text-[var(--tiger-text-muted,#6b7280)]" },
13100
- failed: { text: "\u53D1\u9001\u5931\u8D25", className: "text-[var(--tiger-danger,#ef4444)]" }
13639
+ sending: {
13640
+ text: DEFAULT_CHAT_WINDOW_LABELS.sendingText,
13641
+ className: "text-[var(--tiger-text-muted,#6b7280)]"
13642
+ },
13643
+ sent: {
13644
+ text: DEFAULT_CHAT_WINDOW_LABELS.sentText,
13645
+ className: "text-[var(--tiger-text-muted,#6b7280)]"
13646
+ },
13647
+ failed: {
13648
+ text: DEFAULT_CHAT_WINDOW_LABELS.failedText,
13649
+ className: "text-[var(--tiger-danger,#ef4444)]"
13650
+ }
13101
13651
  };
13652
+ function buildChatMessageStatusInfo(labels) {
13653
+ return {
13654
+ sending: {
13655
+ text: labels.sendingText ?? defaultChatMessageStatusInfo.sending.text,
13656
+ className: defaultChatMessageStatusInfo.sending.className
13657
+ },
13658
+ sent: {
13659
+ text: labels.sentText ?? defaultChatMessageStatusInfo.sent.text,
13660
+ className: defaultChatMessageStatusInfo.sent.className
13661
+ },
13662
+ failed: {
13663
+ text: labels.failedText ?? defaultChatMessageStatusInfo.failed.text,
13664
+ className: defaultChatMessageStatusInfo.failed.className
13665
+ }
13666
+ };
13667
+ }
13102
13668
  function getChatMessageStatusInfo(status, statusMap = defaultChatMessageStatusInfo) {
13103
13669
  return statusMap[status] || defaultChatMessageStatusInfo[status];
13104
13670
  }
@@ -13215,6 +13781,21 @@ var buildNotificationGroups = (items = [], groups, groupBy, groupOrder) => {
13215
13781
  };
13216
13782
 
13217
13783
  // src/utils/comment-thread-utils.ts
13784
+ var resolveCommentLikeState = (node, overlay) => {
13785
+ const entry = overlay?.get(node.id);
13786
+ if (entry) return { liked: entry.liked, likes: entry.likes };
13787
+ return { liked: !!node.liked, likes: node.likes ?? 0 };
13788
+ };
13789
+ var nextCommentLikeState = (node, overlay) => {
13790
+ const current = resolveCommentLikeState(node, overlay);
13791
+ const liked = !current.liked;
13792
+ return { liked, likes: Math.max(0, current.likes + (liked ? 1 : -1)) };
13793
+ };
13794
+ var writeCommentLikeOverlay = (overlay, id, state) => {
13795
+ const next = new Map(overlay ?? void 0);
13796
+ next.set(id, { liked: state.liked, likes: state.likes });
13797
+ return next;
13798
+ };
13218
13799
  var buildCommentTree = (items = []) => {
13219
13800
  if (!items || items.length === 0) return [];
13220
13801
  const nodeMap = /* @__PURE__ */ new Map();
@@ -13471,6 +14052,30 @@ function isWipExceeded(column) {
13471
14052
  if (column.wipLimit == null || column.wipLimit <= 0) return false;
13472
14053
  return column.cards.length > column.wipLimit;
13473
14054
  }
14055
+ var DEFAULT_TASK_BOARD_NEW_CARD_TITLE = "New task";
14056
+ function nextDefaultTaskBoardCardId(columns) {
14057
+ const used = /* @__PURE__ */ new Set();
14058
+ for (const column of columns) {
14059
+ for (const card of column.cards) {
14060
+ used.add(String(card.id));
14061
+ }
14062
+ }
14063
+ let n = 1;
14064
+ let id = `card-${n}`;
14065
+ while (used.has(id)) {
14066
+ n += 1;
14067
+ id = `card-${n}`;
14068
+ }
14069
+ return id;
14070
+ }
14071
+ function appendDefaultTaskBoardCard(columns, columnId, title = DEFAULT_TASK_BOARD_NEW_CARD_TITLE) {
14072
+ const colIdx = columns.findIndex((c) => c.id === columnId);
14073
+ if (colIdx === -1) return columns;
14074
+ const card = { id: nextDefaultTaskBoardCardId(columns), title };
14075
+ return columns.map(
14076
+ (column, i) => i === colIdx ? { ...column, cards: [...column.cards, card] } : column
14077
+ );
14078
+ }
13474
14079
  function getDropIndex(pointerY, cardRects) {
13475
14080
  for (let i = 0; i < cardRects.length; i++) {
13476
14081
  const mid = cardRects[i].top + cardRects[i].height / 2;
@@ -13478,6 +14083,22 @@ function getDropIndex(pointerY, cardRects) {
13478
14083
  }
13479
14084
  return cardRects.length;
13480
14085
  }
14086
+ function mapVisibleCardIndexToSource(sourceCards, visibleCards, visibleIndex) {
14087
+ if (visibleCards.length === 0) {
14088
+ return visibleIndex <= 0 ? 0 : sourceCards.length;
14089
+ }
14090
+ if (visibleIndex <= 0) {
14091
+ const idx2 = sourceCards.findIndex((card) => card.id === visibleCards[0].id);
14092
+ return idx2 === -1 ? 0 : idx2;
14093
+ }
14094
+ if (visibleIndex >= visibleCards.length) {
14095
+ const last = visibleCards[visibleCards.length - 1];
14096
+ const idx2 = sourceCards.findIndex((card) => card.id === last.id);
14097
+ return idx2 === -1 ? sourceCards.length : idx2 + 1;
14098
+ }
14099
+ const idx = sourceCards.findIndex((card) => card.id === visibleCards[visibleIndex].id);
14100
+ return idx === -1 ? visibleIndex : idx;
14101
+ }
13481
14102
  function getColumnDropIndex(pointerX, columnRects) {
13482
14103
  for (let i = 0; i < columnRects.length; i++) {
13483
14104
  const mid = columnRects[i].left + columnRects[i].width / 2;
@@ -14091,6 +14712,16 @@ function filterAutoCompleteOptions(options, inputValue, filterOption) {
14091
14712
  const filterFn = typeof filterOption === "function" ? filterOption : defaultAutoCompleteFilter;
14092
14713
  return options.filter((opt) => filterFn(inputValue, opt));
14093
14714
  }
14715
+ function resolveAutoCompleteDisplayValue(value, options = [], fallback = "") {
14716
+ if (value === void 0 || value === null) {
14717
+ return String(fallback ?? "");
14718
+ }
14719
+ const match = (options ?? []).find((option) => String(option.value) === String(value));
14720
+ if (match) {
14721
+ return match.label;
14722
+ }
14723
+ return String(value);
14724
+ }
14094
14725
 
14095
14726
  // src/utils/signature-utils.ts
14096
14727
  var signatureRootClasses = "inline-flex w-full flex-col gap-2";
@@ -14989,6 +15620,7 @@ function createScrollSpyObserver(items = [], options) {
14989
15620
  const root = options.container === window ? null : options.container;
14990
15621
  return createAnchorObserver(hrefs, {
14991
15622
  offsetTop: offset2,
15623
+ bounds: options.bounds ?? 5,
14992
15624
  root,
14993
15625
  onChange: notify
14994
15626
  });
@@ -15221,6 +15853,7 @@ function getRateStarClasses(size2, isCharacter, disabled) {
15221
15853
  disabled ? "cursor-default" : "cursor-pointer"
15222
15854
  );
15223
15855
  }
15856
+ var rateHalfStarInnerClasses = "w-[200%] h-full";
15224
15857
  var rateActiveColor = "text-[var(--tiger-rate-active,var(--tiger-warning,#f59e0b))]";
15225
15858
  var rateInactiveColor = "text-[var(--tiger-rate-inactive,var(--tiger-border,#d1d5db))]";
15226
15859
  var rateHoverColor = "text-[var(--tiger-rate-hover,var(--tiger-warning,#fbbf24))]";
@@ -15236,7 +15869,7 @@ function getSegmentedContainerClasses(size2, block) {
15236
15869
  };
15237
15870
  return classNames(
15238
15871
  "relative inline-grid overflow-hidden rounded-[var(--tiger-radius-md,0.5rem)]",
15239
- "bg-[var(--tiger-segmented-bg,var(--tiger-fill,#f3f4f6))]",
15872
+ "bg-[var(--tiger-segmented-bg,var(--tiger-surface-muted,#f9fafb))]",
15240
15873
  sizeClasses3[size2],
15241
15874
  block ? "w-full" : ""
15242
15875
  );
@@ -15254,7 +15887,7 @@ function getSegmentedIndicatorClasses(size2) {
15254
15887
  };
15255
15888
  return classNames(
15256
15889
  "pointer-events-none absolute z-0 rounded-[var(--tiger-radius-md,0.5rem)]",
15257
- "bg-[var(--tiger-segmented-active-bg,var(--tiger-surface,#ffffff))] shadow-sm",
15890
+ "bg-[var(--tiger-segmented-active-bg,var(--tiger-surface-raised,#ffffff))] shadow-sm",
15258
15891
  "transition-transform duration-200 ease-out will-change-transform",
15259
15892
  insetClasses[size2]
15260
15893
  );
@@ -15488,16 +16121,103 @@ function formatColorString(r, g, b, format, alpha) {
15488
16121
  function isValidHex(value) {
15489
16122
  return /^#?([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/.test(value);
15490
16123
  }
16124
+ function clampByte(n) {
16125
+ return Math.max(0, Math.min(255, Math.round(n)));
16126
+ }
16127
+ function clampUnit(n) {
16128
+ return Math.max(0, Math.min(1, n));
16129
+ }
16130
+ function parseOptionalAlpha(raw) {
16131
+ if (raw === void 0 || raw === "") return 1;
16132
+ const n = Number(raw);
16133
+ if (!Number.isFinite(n)) return 1;
16134
+ return clampUnit(n);
16135
+ }
16136
+ function hslToRgb(h, s, l) {
16137
+ const hue = (h % 360 + 360) % 360;
16138
+ const ss = Math.max(0, Math.min(100, s)) / 100;
16139
+ const ll = Math.max(0, Math.min(100, l)) / 100;
16140
+ const c = (1 - Math.abs(2 * ll - 1)) * ss;
16141
+ const x = c * (1 - Math.abs(hue / 60 % 2 - 1));
16142
+ const m = ll - c / 2;
16143
+ let r = 0;
16144
+ let g = 0;
16145
+ let b = 0;
16146
+ if (hue < 60) {
16147
+ r = c;
16148
+ g = x;
16149
+ b = 0;
16150
+ } else if (hue < 120) {
16151
+ r = x;
16152
+ g = c;
16153
+ b = 0;
16154
+ } else if (hue < 180) {
16155
+ r = 0;
16156
+ g = c;
16157
+ b = x;
16158
+ } else if (hue < 240) {
16159
+ r = 0;
16160
+ g = x;
16161
+ b = c;
16162
+ } else if (hue < 300) {
16163
+ r = x;
16164
+ g = 0;
16165
+ b = c;
16166
+ } else {
16167
+ r = c;
16168
+ g = 0;
16169
+ b = x;
16170
+ }
16171
+ return {
16172
+ r: Math.round((r + m) * 255),
16173
+ g: Math.round((g + m) * 255),
16174
+ b: Math.round((b + m) * 255)
16175
+ };
16176
+ }
16177
+ function parseColorParts(raw) {
16178
+ const value = raw.trim();
16179
+ if (!value) return null;
16180
+ if (isValidHex(value)) {
16181
+ const rgb = hexToRgb2(value);
16182
+ return { r: rgb.r, g: rgb.g, b: rgb.b, a: 1 };
16183
+ }
16184
+ const rgbMatch = value.match(
16185
+ /^rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)(?:\s*,\s*([\d.]+))?\s*\)?\s*$/i
16186
+ );
16187
+ if (rgbMatch) {
16188
+ return {
16189
+ r: clampByte(Number(rgbMatch[1])),
16190
+ g: clampByte(Number(rgbMatch[2])),
16191
+ b: clampByte(Number(rgbMatch[3])),
16192
+ a: parseOptionalAlpha(rgbMatch[4])
16193
+ };
16194
+ }
16195
+ const hslMatch = value.match(
16196
+ /^hsla?\(\s*([\d.]+)\s*,\s*([\d.]+)%\s*,\s*([\d.]+)%(?:\s*,\s*([\d.]+))?\s*\)?\s*$/i
16197
+ );
16198
+ if (hslMatch) {
16199
+ const rgb = hslToRgb(Number(hslMatch[1]), Number(hslMatch[2]), Number(hslMatch[3]));
16200
+ return {
16201
+ r: rgb.r,
16202
+ g: rgb.g,
16203
+ b: rgb.b,
16204
+ a: parseOptionalAlpha(hslMatch[4])
16205
+ };
16206
+ }
16207
+ return null;
16208
+ }
15491
16209
  function parseColorInput(raw) {
15492
16210
  const value = raw.trim();
15493
16211
  if (isValidHex(value)) {
15494
16212
  return value.startsWith("#") ? value : `#${value}`;
15495
16213
  }
15496
- const rgbMatch = value.match(/^rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)/i);
15497
- if (!rgbMatch) {
15498
- return null;
16214
+ const parts = parseColorParts(value);
16215
+ if (!parts) return null;
16216
+ if (parts.a < 1) {
16217
+ const format = /^hsla?\(/i.test(value) ? "hsl" : "rgb";
16218
+ return formatColorString(parts.r, parts.g, parts.b, format, parts.a);
15499
16219
  }
15500
- return rgbToHex2(Number(rgbMatch[1]), Number(rgbMatch[2]), Number(rgbMatch[3]));
16220
+ return rgbToHex2(parts.r, parts.g, parts.b);
15501
16221
  }
15502
16222
 
15503
16223
  // src/utils/color-swatch-utils.ts
@@ -15665,12 +16385,21 @@ function getCalendarDayClasses(isSelected, isToday2, isCurrentMonth, isDisabled)
15665
16385
  isSelected ? "bg-[var(--tiger-calendar-selected-bg,var(--tiger-primary,#2563eb))] text-white" : isToday2 ? "bg-[var(--tiger-calendar-today-bg,var(--tiger-primary,#2563eb))]/10 text-[var(--tiger-calendar-today-text,var(--tiger-primary,#2563eb))]" : isCurrentMonth ? "text-[var(--tiger-calendar-day,var(--tiger-text,#111827))] hover:bg-[var(--tiger-calendar-day-hover,var(--tiger-fill-hover,#e5e7eb))]" : "text-[var(--tiger-calendar-day-outside,var(--tiger-text-muted,#9ca3af))]"
15666
16386
  );
15667
16387
  }
15668
- function getCalendarMonthClasses(isSelected) {
16388
+ function getCalendarMonthClasses(isSelected, isDisabled) {
15669
16389
  return classNames(
15670
- "inline-flex items-center justify-center rounded-[var(--tiger-radius-md,0.5rem)] py-2 px-3 text-sm transition-colors cursor-pointer",
16390
+ "inline-flex items-center justify-center rounded-[var(--tiger-radius-md,0.5rem)] py-2 px-3 text-sm transition-colors",
16391
+ isDisabled ? "opacity-30 cursor-not-allowed" : "cursor-pointer",
15671
16392
  isSelected ? "bg-[var(--tiger-calendar-selected-bg,var(--tiger-primary,#2563eb))] text-white" : "text-[var(--tiger-calendar-day,var(--tiger-text,#111827))] hover:bg-[var(--tiger-calendar-day-hover,var(--tiger-fill-hover,#e5e7eb))]"
15672
16393
  );
15673
16394
  }
16395
+ function isCalendarMonthDisabled(year, month, disabledDate) {
16396
+ if (!disabledDate) return false;
16397
+ const lastDay = new Date(year, month + 1, 0).getDate();
16398
+ for (let day = 1; day <= lastDay; day++) {
16399
+ if (!disabledDate(new Date(year, month, day))) return false;
16400
+ }
16401
+ return true;
16402
+ }
15674
16403
  var WEEKDAYS = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"];
15675
16404
  var MONTHS = [
15676
16405
  "Jan",
@@ -16354,45 +17083,6 @@ function isTablet(options = {}) {
16354
17083
  return width !== void 0 && width >= TIGER_VIEWPORT_BREAKPOINTS.md && width < TIGER_VIEWPORT_BREAKPOINTS.lg;
16355
17084
  }
16356
17085
 
16357
- // src/utils/viewport-floating-utils.ts
16358
- var viewportFloatingBaseClasses = "fixed z-50";
16359
- var viewportPlacementClasses = {
16360
- "top-left": "top-0 left-0",
16361
- "top-right": "top-0 right-0",
16362
- "bottom-left": "bottom-0 left-0",
16363
- "bottom-right": "bottom-0 right-0"
16364
- };
16365
- function toCssLength(value) {
16366
- return typeof value === "number" ? `${value}px` : value;
16367
- }
16368
- function resolveAxisOffset(offset2) {
16369
- if (offset2 === void 0) {
16370
- return { x: 24, y: 24 };
16371
- }
16372
- if (typeof offset2 === "number" || typeof offset2 === "string") {
16373
- return { x: offset2, y: offset2 };
16374
- }
16375
- return {
16376
- x: offset2.x ?? 24,
16377
- y: offset2.y ?? 24
16378
- };
16379
- }
16380
- function getViewportOffsetStyle(placement, offset2) {
16381
- const { x, y } = resolveAxisOffset(offset2);
16382
- const style = {};
16383
- if (placement.startsWith("top")) {
16384
- style.top = toCssLength(y);
16385
- } else {
16386
- style.bottom = toCssLength(y);
16387
- }
16388
- if (placement.endsWith("left")) {
16389
- style.left = toCssLength(x);
16390
- } else {
16391
- style.right = toCssLength(x);
16392
- }
16393
- return style;
16394
- }
16395
-
16396
17086
  // src/utils/drag.ts
16397
17087
  function createDragState() {
16398
17088
  return {
@@ -16584,12 +17274,12 @@ var splitterBaseClasses = "relative flex w-full h-full overflow-hidden";
16584
17274
  var splitterHorizontalClasses = "flex-row";
16585
17275
  var splitterVerticalClasses = "flex-col";
16586
17276
  var splitterPaneBaseClasses = "relative overflow-auto";
16587
- var splitterGutterBaseClasses = "relative flex-shrink-0 bg-gray-200 transition-colors duration-150 hover:bg-[var(--tiger-primary,#2563eb)] z-10";
17277
+ var splitterGutterBaseClasses = "relative flex-shrink-0 bg-[var(--tiger-border,#e5e7eb)] transition-colors duration-150 hover:bg-[var(--tiger-primary,#2563eb)] z-10";
16588
17278
  var splitterGutterHorizontalClasses = "cursor-col-resize w-[var(--tiger-splitter-gutter,4px)] h-full";
16589
17279
  var splitterGutterVerticalClasses = "cursor-row-resize h-[var(--tiger-splitter-gutter,4px)] w-full";
16590
17280
  var splitterGutterDraggingClasses = "bg-[var(--tiger-primary,#2563eb)]";
16591
17281
  var splitterGutterDisabledClasses = "cursor-default opacity-50 pointer-events-none";
16592
- var splitterGutterHandleClasses = "absolute rounded bg-gray-400 transition-colors duration-150";
17282
+ var splitterGutterHandleClasses = "absolute rounded bg-[var(--tiger-text-muted,#9ca3af)] transition-colors duration-150";
16593
17283
  var splitterGutterHandleHorizontalClasses = "w-0.5 h-6 top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2";
16594
17284
  var splitterGutterHandleVerticalClasses = "h-0.5 w-6 top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2";
16595
17285
  function getSplitterContainerClasses(direction, className) {
@@ -16615,6 +17305,11 @@ function getSplitterGutterHandleClasses(direction) {
16615
17305
  direction === "horizontal" ? splitterGutterHandleHorizontalClasses : splitterGutterHandleVerticalClasses
16616
17306
  ].join(" ");
16617
17307
  }
17308
+ function getSplitterGutterCssVars(gutterSize = 4) {
17309
+ return {
17310
+ "--tiger-splitter-gutter": `${gutterSize}px`
17311
+ };
17312
+ }
16618
17313
  function parsePaneSize(size2, totalSize) {
16619
17314
  if (typeof size2 === "number") return size2;
16620
17315
  const trimmed = size2.trim();
@@ -16646,6 +17341,23 @@ function clampPaneSize(size2, min, max) {
16646
17341
  }
16647
17342
  return result;
16648
17343
  }
17344
+ function isPercentagePaneSize(size2) {
17345
+ return typeof size2 === "string" && size2.trim().endsWith("%");
17346
+ }
17347
+ function resolveInitialPaneSizes(paneCount, containerSize, gutterSize, sizes, min = 0, max) {
17348
+ if (paneCount <= 0) return null;
17349
+ const provided = sizes && sizes.length === paneCount ? sizes : void 0;
17350
+ const hasPercent = provided != null && provided.some(isPercentagePaneSize);
17351
+ if (containerSize <= 0) {
17352
+ if (hasPercent || !provided) return null;
17353
+ return calculateInitialSizes(paneCount, 0, gutterSize, provided).map(
17354
+ (s) => clampPaneSize(s, min, max)
17355
+ );
17356
+ }
17357
+ return calculateInitialSizes(paneCount, containerSize, gutterSize, provided).map(
17358
+ (s) => clampPaneSize(s, min, max)
17359
+ );
17360
+ }
16649
17361
  function resizePanes(sizes, gutterIndex, delta, mins, maxes) {
16650
17362
  if (gutterIndex < 0 || gutterIndex >= sizes.length - 1) return null;
16651
17363
  const leftIdx = gutterIndex;
@@ -17317,9 +18029,9 @@ var defaultToolbar = [
17317
18029
  { name: "redo", label: "Redo", tooltip: "Redo (Ctrl+Y)", hotkey: "Ctrl+Y" },
17318
18030
  { name: "clear", label: "Clear", tooltip: "Clear Formatting" }
17319
18031
  ];
17320
- var richTextContainerBase = "flex flex-col border border-[var(--tiger-border,#d1d5db)] rounded-[var(--tiger-radius-md,0.5rem)] overflow-hidden bg-[var(--tiger-bg,#ffffff)]";
18032
+ var richTextContainerBase = "flex flex-col border border-[var(--tiger-border,#d1d5db)] rounded-[var(--tiger-radius-md,0.5rem)] overflow-hidden bg-[var(--tiger-rte-bg,var(--tiger-surface,#ffffff))]";
17321
18033
  var richTextContainerDisabled = "opacity-50 cursor-not-allowed pointer-events-none";
17322
- var richTextToolbarClasses = "flex flex-wrap items-center gap-1 px-2 py-1.5 border-b border-[var(--tiger-border,#d1d5db)] bg-[var(--tiger-bg-secondary,#f9fafb)]";
18034
+ var richTextToolbarClasses = "flex flex-wrap items-center gap-1 px-2 py-1.5 border-b border-[var(--tiger-border,#d1d5db)] bg-[var(--tiger-rte-toolbar-bg,var(--tiger-surface-muted,#f9fafb))]";
17323
18035
  var richTextToolbarButtonBase = "inline-flex items-center justify-center min-w-8 h-8 px-2 rounded text-sm font-medium transition-colors duration-150 text-[var(--tiger-text-secondary,#6b7280)] hover:bg-[var(--tiger-bg-hover,#e5e7eb)] hover:text-[var(--tiger-text,#111827)]";
17324
18036
  var richTextToolbarButtonActive = "bg-[var(--tiger-primary,#2563eb)]/10 text-[var(--tiger-primary,#2563eb)]";
17325
18037
  var richTextToolbarSeparatorClasses = "w-px h-5 mx-1 bg-[var(--tiger-border,#d1d5db)]";
@@ -17462,14 +18174,14 @@ function parseHeight(height) {
17462
18174
  }
17463
18175
 
17464
18176
  // src/utils/markdown-editor-utils.ts
17465
- var markdownEditorContainerBase = "flex flex-col border border-[var(--tiger-border,#d1d5db)] rounded-[var(--tiger-radius-md,0.5rem)] overflow-hidden bg-[var(--tiger-bg,#ffffff)] text-[var(--tiger-text,#111827)]";
18177
+ var markdownEditorContainerBase = "flex flex-col border border-[var(--tiger-border,#d1d5db)] rounded-[var(--tiger-radius-md,0.5rem)] overflow-hidden bg-[var(--tiger-md-bg,var(--tiger-surface,#ffffff))] text-[var(--tiger-text,#111827)]";
17466
18178
  var markdownEditorContainerDisabled = "opacity-50 cursor-not-allowed";
17467
- var markdownEditorToolbarClasses = "flex flex-wrap items-center justify-between gap-2 px-2 py-1.5 border-b border-[var(--tiger-border,#d1d5db)] bg-[var(--tiger-bg-secondary,#f9fafb)]";
18179
+ var markdownEditorToolbarClasses = "flex flex-wrap items-center justify-between gap-2 px-2 py-1.5 border-b border-[var(--tiger-border,#d1d5db)] bg-[var(--tiger-md-toolbar-bg,var(--tiger-surface-muted,#f9fafb))]";
17468
18180
  var markdownEditorToolbarGroupClasses = "flex flex-wrap items-center gap-1";
17469
18181
  var markdownEditorToolbarButtonBase = "inline-flex items-center justify-center min-w-8 h-8 px-2 rounded text-sm font-medium transition-colors duration-150 text-[var(--tiger-text-secondary,#6b7280)] hover:bg-[var(--tiger-bg-hover,#e5e7eb)] hover:text-[var(--tiger-text,#111827)] disabled:cursor-not-allowed disabled:opacity-50";
17470
18182
  var markdownEditorToolbarButtonActive = "bg-[var(--tiger-primary,#2563eb)]/10 text-[var(--tiger-primary,#2563eb)]";
17471
18183
  var markdownEditorToolbarSeparatorClasses = "w-px h-5 mx-1 bg-[var(--tiger-border,#d1d5db)]";
17472
- var markdownEditorBodyClasses = "grid flex-1 min-h-0 bg-[var(--tiger-bg,#ffffff)]";
18184
+ var markdownEditorBodyClasses = "grid flex-1 min-h-0 bg-[var(--tiger-md-bg,var(--tiger-surface,#ffffff))]";
17473
18185
  var markdownEditorTextareaClasses = "w-full h-full min-h-0 resize-none border-0 outline-none bg-transparent p-4 font-mono text-sm leading-7 text-[var(--tiger-text,#111827)] placeholder:text-[var(--tiger-text-tertiary,#9ca3af)] disabled:cursor-not-allowed";
17474
18186
  var markdownEditorPreviewClasses = "h-full min-h-0 overflow-auto p-4 text-sm leading-7 text-[var(--tiger-text,#111827)] [&_a]:text-[var(--tiger-primary,#2563eb)] [&_a]:underline [&_blockquote]:border-l-4 [&_blockquote]:border-[var(--tiger-border,#d1d5db)] [&_blockquote]:pl-3 [&_blockquote]:text-[var(--tiger-text-secondary,#6b7280)] [&_code]:rounded [&_code]:bg-[var(--tiger-bg-secondary,#f3f4f6)] [&_code]:px-1 [&_code]:py-0.5 [&_code]:font-mono [&_code]:text-[0.9em] [&_h1]:mb-3 [&_h1]:text-2xl [&_h1]:font-semibold [&_h2]:mb-2 [&_h2]:text-xl [&_h2]:font-semibold [&_h3]:mb-2 [&_h3]:text-lg [&_h3]:font-semibold [&_hr]:my-4 [&_hr]:border-[var(--tiger-border,#d1d5db)] [&_img]:max-w-full [&_li]:my-1 [&_ol]:my-2 [&_ol]:list-decimal [&_ol]:pl-6 [&_p]:my-2 [&_pre]:my-3 [&_pre]:overflow-auto [&_pre]:rounded [&_pre]:bg-[var(--tiger-bg-secondary,#f3f4f6)] [&_pre]:p-3 [&_pre_code]:bg-transparent [&_pre_code]:p-0 [&_table]:my-3 [&_table]:w-full [&_table]:border-collapse [&_td]:border [&_td]:border-[var(--tiger-border,#d1d5db)] [&_td]:px-2 [&_td]:py-1 [&_th]:border [&_th]:border-[var(--tiger-border,#d1d5db)] [&_th]:bg-[var(--tiger-bg-secondary,#f9fafb)] [&_th]:px-2 [&_th]:py-1 [&_th]:text-left [&_ul]:my-2 [&_ul]:list-disc [&_ul]:pl-6";
17475
18187
  var markdownEditorEmptyPreviewClasses = "text-[var(--tiger-text-tertiary,#9ca3af)]";
@@ -18098,8 +18810,8 @@ function getInfiniteScrollContainerClasses(direction, className) {
18098
18810
  }
18099
18811
 
18100
18812
  // src/utils/file-manager-utils.ts
18101
- var fileManagerContainerClasses = "tiger-file-manager relative flex flex-col border border-[var(--tiger-border,#e5e7eb)] rounded-[var(--tiger-radius-md,0.5rem)] bg-[var(--tiger-bg,#ffffff)] overflow-hidden";
18102
- var fileManagerToolbarClasses = "flex items-center gap-2 px-3 py-2 border-b border-[var(--tiger-border,#e5e7eb)] bg-[var(--tiger-bg-secondary,#f9fafb)]";
18813
+ var fileManagerContainerClasses = "tiger-file-manager relative flex flex-col border border-[var(--tiger-border,#e5e7eb)] rounded-[var(--tiger-radius-md,0.5rem)] bg-[var(--tiger-file-manager-bg,var(--tiger-surface,#ffffff))] overflow-hidden";
18814
+ var fileManagerToolbarClasses = "flex items-center gap-2 px-3 py-2 border-b border-[var(--tiger-border,#e5e7eb)] bg-[var(--tiger-file-manager-toolbar-bg,var(--tiger-surface-muted,#f9fafb))]";
18103
18815
  var fileManagerBreadcrumbClasses = "flex items-center gap-1 text-sm text-[var(--tiger-text-secondary,#6b7280)]";
18104
18816
  var fileManagerBreadcrumbItemClasses = "cursor-pointer hover:text-[var(--tiger-primary,#2563eb)] transition-colors";
18105
18817
  var fileManagerBreadcrumbSeparatorClasses = "text-[var(--tiger-text-muted,#9ca3af)]";
@@ -18112,8 +18824,8 @@ var fileManagerItemIconClasses = "text-[var(--tiger-text-muted,#9ca3af)] flex-sh
18112
18824
  var fileManagerItemNameClasses = "text-sm font-medium text-[var(--tiger-text,#1f2937)] truncate";
18113
18825
  var fileManagerItemMetaClasses = "text-xs text-[var(--tiger-text-muted,#9ca3af)]";
18114
18826
  var fileManagerEmptyClasses = "flex items-center justify-center py-12 text-sm text-[var(--tiger-text-muted,#9ca3af)]";
18115
- var fileManagerLoadingClasses = "absolute inset-0 flex items-center justify-center bg-[var(--tiger-bg,#ffffff)]/60 z-10";
18116
- var fileManagerSearchClasses = "px-3 py-1.5 text-sm border border-[var(--tiger-border,#e5e7eb)] rounded-[var(--tiger-radius-md,0.5rem)] bg-[var(--tiger-bg,#ffffff)] focus:outline-none focus:ring-2 focus:ring-[var(--tiger-primary,#2563eb)]/30";
18827
+ var fileManagerLoadingClasses = "absolute inset-0 flex items-center justify-center bg-[var(--tiger-file-manager-bg,var(--tiger-surface,#ffffff))]/60 z-10";
18828
+ var fileManagerSearchClasses = "px-3 py-1.5 text-sm border border-[var(--tiger-border,#e5e7eb)] rounded-[var(--tiger-radius-md,0.5rem)] bg-[var(--tiger-file-manager-bg,var(--tiger-surface,#ffffff))] focus:outline-none focus:ring-2 focus:ring-[var(--tiger-primary,#2563eb)]/30";
18117
18829
  function sortFileItems(items, field = "name", order = "asc") {
18118
18830
  const sorted = [...items].sort((a, b) => {
18119
18831
  if (a.type !== b.type) {
@@ -18249,7 +18961,7 @@ function getImageAnnotationToolLabel(tool) {
18249
18961
  function getImageAnnotationToolButtonClasses(active) {
18250
18962
  return classNames(
18251
18963
  imageAnnotationToolButtonClasses,
18252
- active ? "border-[var(--tiger-primary,#2563eb)] bg-[var(--tiger-primary,#2563eb)] text-white" : "border-[var(--tiger-border,#d1d5db)] bg-[var(--tiger-bg,#ffffff)] text-[var(--tiger-text,#111827)] hover:bg-[var(--tiger-bg-muted,#f3f4f6)]"
18964
+ active ? "border-[var(--tiger-primary,#2563eb)] bg-[var(--tiger-primary,#2563eb)] text-white" : "border-[var(--tiger-border,#d1d5db)] bg-[var(--tiger-annotation-tool-bg,var(--tiger-surface,#ffffff))] text-[var(--tiger-annotation-tool-text,var(--tiger-text,#111827))] hover:bg-[var(--tiger-surface-muted,#f3f4f6)]"
18253
18965
  );
18254
18966
  }
18255
18967
  function getImageAnnotationStrokeColor(annotation) {
@@ -18349,10 +19061,10 @@ function isImageAnnotationShapeTool(tool) {
18349
19061
 
18350
19062
  // src/utils/org-chart-utils.ts
18351
19063
  var orgChartNodeClasses = "transition-[filter,opacity,stroke] duration-150 ease-out focus:outline-none";
18352
- var orgChartNodeRectClasses = "stroke-[var(--tiger-border,#d1d5db)] fill-[var(--tiger-bg,#ffffff)] drop-shadow-sm";
18353
- var orgChartNodeLabelClasses = "pointer-events-none select-none fill-[var(--tiger-text,#111827)] text-sm font-semibold";
18354
- var orgChartNodeTitleClasses = "pointer-events-none select-none fill-[var(--tiger-text-muted,#6b7280)] text-xs";
18355
- var orgChartNodeSubtitleClasses = "pointer-events-none select-none fill-[var(--tiger-text-muted,#6b7280)] text-[11px]";
19064
+ var orgChartNodeRectClasses = "stroke-[var(--tiger-border,#d1d5db)] fill-[var(--tiger-org-node-bg,var(--tiger-surface,#ffffff))] drop-shadow-sm";
19065
+ var orgChartNodeLabelClasses = "pointer-events-none select-none fill-[var(--tiger-org-label,var(--tiger-text,#111827))] text-sm font-semibold";
19066
+ var orgChartNodeTitleClasses = "pointer-events-none select-none fill-[var(--tiger-org-title,var(--tiger-text-secondary,#6b7280))] text-xs";
19067
+ var orgChartNodeSubtitleClasses = "pointer-events-none select-none fill-[var(--tiger-org-subtitle,var(--tiger-text-secondary,#6b7280))] text-[11px]";
18356
19068
  var orgChartLinkClasses = "fill-none stroke-[var(--tiger-border,#d1d5db)] stroke-2";
18357
19069
  function normalizeOrgChartData(data) {
18358
19070
  return Array.isArray(data) ? data : [data];
@@ -18467,9 +19179,7 @@ function flipLayoutNode(node) {
18467
19179
  return {
18468
19180
  ...node,
18469
19181
  x: node.y,
18470
- y: node.x,
18471
- width: node.height,
18472
- height: node.width
19182
+ y: node.x
18473
19183
  };
18474
19184
  }
18475
19185
  function flipLayoutLink(link) {
@@ -18510,8 +19220,95 @@ function getGanttTaskAriaLabel(task) {
18510
19220
  const progress = typeof task.progress === "number" ? `, ${clampProgress(task.progress)}%` : "";
18511
19221
  return `${task.label}, ${start} to ${end}${progress}`;
18512
19222
  }
18513
- function getGanttTaskClasses(interactive, selected) {
18514
- return classNames(ganttBarClasses, interactive && "cursor-pointer", selected && "drop-shadow-md");
19223
+ function getGanttTaskClasses(interactive, selected, movable = false, grabbing = false) {
19224
+ return classNames(
19225
+ ganttBarClasses,
19226
+ grabbing ? "cursor-grabbing" : movable ? "cursor-grab" : interactive && "cursor-pointer",
19227
+ selected && "drop-shadow-md"
19228
+ );
19229
+ }
19230
+ function ganttPxToMs(deltaX, minMs, maxMs, timelineWidth) {
19231
+ if (!(timelineWidth > 0) || !Number.isFinite(timelineWidth) || !Number.isFinite(deltaX)) return 0;
19232
+ const rangeMs = maxMs - minMs;
19233
+ if (!Number.isFinite(rangeMs) || rangeMs <= 0) return 0;
19234
+ return deltaX * (rangeMs / timelineWidth);
19235
+ }
19236
+ function ganttDateValuesEqual(a, b) {
19237
+ if (Object.is(a, b)) return true;
19238
+ const aMs = normalizeGanttDate(a);
19239
+ const bMs = normalizeGanttDate(b);
19240
+ return Number.isFinite(aMs) && Number.isFinite(bMs) && aMs === bMs;
19241
+ }
19242
+ function clampGanttDragDeltaX(deltaX, barX, barWidth, taskLabelWidth, layoutWidth) {
19243
+ if (!Number.isFinite(deltaX)) return 0;
19244
+ const minDelta = taskLabelWidth - barX;
19245
+ const maxDelta = layoutWidth - barX - barWidth;
19246
+ if (!Number.isFinite(minDelta) || !Number.isFinite(maxDelta) || minDelta > maxDelta) {
19247
+ return 0;
19248
+ }
19249
+ return Math.min(maxDelta, Math.max(minDelta, deltaX));
19250
+ }
19251
+ function shiftGanttTaskDates(task, deltaMs, options = {}) {
19252
+ const startMs = normalizeGanttDate(task.start);
19253
+ const endMs = normalizeGanttDate(task.end);
19254
+ if (!Number.isFinite(startMs) || !Number.isFinite(endMs)) return { ...task };
19255
+ const dayDelta = Math.round((Number.isFinite(deltaMs) ? deltaMs : 0) / DAY_MS);
19256
+ if (dayDelta === 0) {
19257
+ return {
19258
+ ...task,
19259
+ start: cloneGanttDateValue(task.start),
19260
+ end: cloneGanttDateValue(task.end)
19261
+ };
19262
+ }
19263
+ let nextStart = addLocalDays(startMs, dayDelta);
19264
+ let nextEnd = addLocalDays(endMs, dayDelta);
19265
+ if (nextEnd.getTime() < nextStart.getTime()) {
19266
+ const swapped = nextStart;
19267
+ nextStart = nextEnd;
19268
+ nextEnd = swapped;
19269
+ }
19270
+ const durationMs = nextEnd.getTime() - nextStart.getTime();
19271
+ const minMs = options.minMs;
19272
+ const maxMs = options.maxMs;
19273
+ const hasMin = minMs !== void 0 && Number.isFinite(minMs);
19274
+ const hasMax = maxMs !== void 0 && Number.isFinite(maxMs);
19275
+ if (hasMin && hasMax && durationMs > maxMs - minMs) {
19276
+ nextStart = new Date(minMs);
19277
+ nextEnd = new Date(minMs + durationMs);
19278
+ } else {
19279
+ if (hasMin && nextStart.getTime() < minMs) {
19280
+ nextStart = new Date(minMs);
19281
+ nextEnd = new Date(minMs + durationMs);
19282
+ }
19283
+ if (hasMax && nextEnd.getTime() > maxMs) {
19284
+ nextEnd = new Date(maxMs);
19285
+ nextStart = new Date(maxMs - durationMs);
19286
+ }
19287
+ if (hasMin && nextStart.getTime() < minMs) {
19288
+ nextStart = new Date(minMs);
19289
+ nextEnd = new Date(minMs + durationMs);
19290
+ }
19291
+ }
19292
+ return {
19293
+ ...task,
19294
+ start: preserveGanttDateValue(task.start, nextStart),
19295
+ end: preserveGanttDateValue(task.end, nextEnd)
19296
+ };
19297
+ }
19298
+ function moveGanttTaskByPx(task, deltaX, range) {
19299
+ const deltaMs = ganttPxToMs(deltaX, range.minMs, range.maxMs, range.timelineWidth);
19300
+ return shiftGanttTaskDates(task, deltaMs, { minMs: range.minMs, maxMs: range.maxMs });
19301
+ }
19302
+ function applyGanttTaskDateOverlay(data, overlay) {
19303
+ if (!overlay || overlay.size === 0) return data;
19304
+ return data.map((task) => {
19305
+ const entry = overlay.get(task.id);
19306
+ if (!entry) return task;
19307
+ if (entry.baseStart !== void 0 && entry.baseEnd !== void 0 && (!ganttDateValuesEqual(task.start, entry.baseStart) || !ganttDateValuesEqual(task.end, entry.baseEnd))) {
19308
+ return task;
19309
+ }
19310
+ return { ...task, start: entry.start, end: entry.end };
19311
+ });
18515
19312
  }
18516
19313
  function getGanttDependencyPath(dependency) {
18517
19314
  const midX = dependency.sourceX + Math.max(16, (dependency.targetX - dependency.sourceX) / 2);
@@ -18686,10 +19483,33 @@ function addTick(date, scale) {
18686
19483
  else next.setDate(next.getDate() + 1);
18687
19484
  return next;
18688
19485
  }
19486
+ function isYearMonthDayString(value) {
19487
+ return typeof value === "string" && /^\d{4}-\d{2}-\d{2}$/.test(value);
19488
+ }
19489
+ function toYearMonthDayString(date) {
19490
+ const year = date.getFullYear();
19491
+ const month = `${date.getMonth() + 1}`.padStart(2, "0");
19492
+ const day = `${date.getDate()}`.padStart(2, "0");
19493
+ return `${year}-${month}-${day}`;
19494
+ }
19495
+ function cloneGanttDateValue(value) {
19496
+ return value instanceof Date ? new Date(value.getTime()) : value;
19497
+ }
19498
+ function addLocalDays(ms, days) {
19499
+ const date = new Date(ms);
19500
+ date.setDate(date.getDate() + days);
19501
+ return date;
19502
+ }
19503
+ function preserveGanttDateValue(original, next) {
19504
+ if (isYearMonthDayString(original)) return toYearMonthDayString(next);
19505
+ if (original instanceof Date) return next;
19506
+ if (typeof original === "number") return next.getTime();
19507
+ return toYearMonthDayString(next);
19508
+ }
18689
19509
 
18690
19510
  // src/utils/input-group-utils.ts
18691
19511
  var inputGroupBaseClasses = "inline-flex items-stretch w-full";
18692
- var inputGroupCompactClasses = "[&>*:not(:first-child):not(:last-child)]:rounded-none [&>*:first-child]:rounded-r-none [&>*:last-child]:rounded-l-none [&>*:not(:first-child)]:-ml-px [&>*:focus]:z-10 [&>*:focus]:relative";
19512
+ var inputGroupCompactClasses = "[&>*:not(:first-child):not(:last-child)]:!rounded-none [&>*:first-child]:!rounded-r-none [&>*:last-child]:!rounded-l-none [&>*:not(:first-child)]:-ml-px [&>*:focus-within]:z-10 [&>*:focus-within]:relative";
18693
19513
  var inputGroupSpacedClasses = "gap-2";
18694
19514
  var inputGroupAddonBaseClasses = "inline-flex items-center justify-center border border-[var(--tiger-border,#e5e7eb)] bg-[var(--tiger-surface-muted,#f9fafb)] text-[var(--tiger-text-muted,#6b7280)] whitespace-nowrap";
18695
19515
  var inputGroupAddonSizeClasses = {
@@ -19010,7 +19830,7 @@ function loadImage(src) {
19010
19830
  }
19011
19831
 
19012
19832
  // src/utils/print-layout-utils.ts
19013
- var printLayoutBaseClasses = "tiger-print-layout relative bg-white shadow-sm border border-[var(--tiger-border,#e5e7eb)] mx-auto";
19833
+ var printLayoutBaseClasses = "tiger-print-layout relative bg-white text-[var(--tiger-print-ink,#111827)] shadow-sm border border-[var(--tiger-border,#e5e7eb)] mx-auto";
19014
19834
  var printLayoutHeaderClasses = "hidden print:block text-center text-sm text-[var(--tiger-text-muted,#6b7280)] border-b border-[var(--tiger-border,#e5e7eb)] py-2 mb-4";
19015
19835
  var printLayoutFooterClasses = "hidden print:block text-center text-xs text-[var(--tiger-text-muted,#6b7280)] border-t border-[var(--tiger-border,#e5e7eb)] pt-2 mt-4";
19016
19836
  var printLayoutPageBreakClasses = 'border-t-2 border-dashed border-[var(--tiger-border,#e5e7eb)] my-4 print:hidden relative before:content-["Page_Break"] before:absolute before:left-1/2 before:-translate-x-1/2 before:-translate-y-1/2 before:bg-white before:px-2 before:text-xs before:text-[var(--tiger-text-muted,#6b7280)]';
@@ -19043,11 +19863,11 @@ var printLayoutPrintStyles = `
19043
19863
  // src/utils/image-viewer-utils.ts
19044
19864
  var imageViewerBackdropClasses = "fixed inset-0 bg-[var(--tiger-image-mask,rgba(0,0,0,0.85))] z-50 flex items-center justify-center";
19045
19865
  var imageViewerImgClasses = "max-h-[90vh] max-w-[90vw] select-none transition-transform duration-200 ease-out cursor-grab active:cursor-grabbing touch-none";
19046
- var imageViewerToolbarClasses = "fixed bottom-6 left-1/2 -translate-x-1/2 z-50 flex items-center gap-2 bg-[var(--tiger-surface,rgba(0,0,0,0.6))] backdrop-blur-sm rounded-[var(--tiger-radius-md,0.5rem)] px-4 py-2";
19866
+ var imageViewerToolbarClasses = "fixed bottom-6 left-1/2 -translate-x-1/2 z-50 flex items-center gap-2 bg-[var(--tiger-image-toolbar-bg,rgba(0,0,0,0.6))] backdrop-blur-sm rounded-[var(--tiger-radius-md,0.5rem)] px-4 py-2";
19047
19867
  var imageViewerToolbarBtnClasses = "p-2 text-white hover:bg-white/20 rounded-[var(--tiger-radius-md,0.5rem)] transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-white";
19048
- var imageViewerNavBtnClasses = "fixed top-1/2 -translate-y-1/2 z-50 p-3 text-white bg-[var(--tiger-surface,rgba(0,0,0,0.4))] hover:bg-[var(--tiger-surface,rgba(0,0,0,0.6))] rounded-full transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-white";
19868
+ var imageViewerNavBtnClasses = "fixed top-1/2 -translate-y-1/2 z-50 p-3 text-white bg-[var(--tiger-image-toolbar-bg,rgba(0,0,0,0.6))] hover:bg-white/20 rounded-full transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-white";
19049
19869
  var imageViewerCloseBtnClasses = "fixed top-4 right-4 z-50 p-2 text-white hover:bg-white/20 rounded-[var(--tiger-radius-md,0.5rem)] transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-white";
19050
- var imageViewerCounterClasses = "fixed top-4 left-1/2 -translate-x-1/2 z-50 text-white text-sm bg-[var(--tiger-surface,rgba(0,0,0,0.4))] rounded-full px-3 py-1";
19870
+ var imageViewerCounterClasses = "fixed top-4 left-1/2 -translate-x-1/2 z-50 text-white text-sm bg-[var(--tiger-image-toolbar-bg,rgba(0,0,0,0.6))] rounded-full px-3 py-1";
19051
19871
  var imageViewerIcons = {
19052
19872
  zoomIn: zoomInIconPath,
19053
19873
  zoomOut: zoomOutIconPath,
@@ -19427,6 +20247,10 @@ var THEME_CSS_VARS = {
19427
20247
  chart4: "--tiger-chart-4",
19428
20248
  chart5: "--tiger-chart-5",
19429
20249
  chart6: "--tiger-chart-6",
20250
+ // Aliases of existing semantic tokens (not a third color system)
20251
+ textMuted: "--tiger-text-muted",
20252
+ fill: "--tiger-fill",
20253
+ bg: "--tiger-bg",
19430
20254
  // Breakpoints
19431
20255
  breakpointXs: "--tiger-breakpoint-xs",
19432
20256
  breakpointSm: "--tiger-breakpoint-sm",
@@ -19434,6 +20258,23 @@ var THEME_CSS_VARS = {
19434
20258
  breakpointLg: "--tiger-breakpoint-lg",
19435
20259
  breakpointXl: "--tiger-breakpoint-xl"
19436
20260
  };
20261
+ var THEME_CSS_VAR_ALIAS_SOURCES = {
20262
+ textMuted: "textSecondary",
20263
+ fill: "surfaceMuted",
20264
+ bg: "surface"
20265
+ };
20266
+ function semanticColorsToCssVars(colors = {}) {
20267
+ const vars = {};
20268
+ for (const [key, value] of Object.entries(colors)) {
20269
+ const varName = THEME_CSS_VARS[key];
20270
+ if (varName && value) vars[varName] = value;
20271
+ }
20272
+ for (const aliasKey of Object.keys(THEME_CSS_VAR_ALIAS_SOURCES)) {
20273
+ const sourceKey = THEME_CSS_VAR_ALIAS_SOURCES[aliasKey];
20274
+ vars[THEME_CSS_VARS[aliasKey]] = `var(${THEME_CSS_VARS[sourceKey]})`;
20275
+ }
20276
+ return vars;
20277
+ }
19437
20278
  var cssVarCache = /* @__PURE__ */ new WeakMap();
19438
20279
  function setCssVarsCached(element, vars) {
19439
20280
  let cache = cssVarCache.get(element);
@@ -19715,18 +20556,8 @@ var defaultTheme = {
19715
20556
  };
19716
20557
 
19717
20558
  // src/tailwind-plugin.ts
19718
- function presetToVars(colors) {
19719
- const vars = {};
19720
- for (const [key, value] of Object.entries(colors)) {
19721
- const varName = THEME_CSS_VARS[key];
19722
- if (varName && value) {
19723
- vars[varName] = value;
19724
- }
19725
- }
19726
- return vars;
19727
- }
19728
- var tigercatTheme = presetToVars(defaultThemeLightColors);
19729
- var tigercatDarkTheme = presetToVars(defaultThemeDarkColors);
20559
+ var tigercatTheme = semanticColorsToCssVars(defaultThemeLightColors);
20560
+ var tigercatDarkTheme = semanticColorsToCssVars(defaultThemeDarkColors);
19730
20561
  var tigercatDirectionBase = {
19731
20562
  '[dir="rtl"] .tiger-rtl-mirror, [data-tiger-dir="rtl"] .tiger-rtl-mirror': {
19732
20563
  transform: "scaleX(-1)"
@@ -19768,8 +20599,8 @@ var tigercatPlugin = plugin(function({ addBase }) {
19768
20599
  function createTigercatPlugin(options = {}) {
19769
20600
  return plugin(function({ addBase }) {
19770
20601
  const preset = options.preset;
19771
- const lightVars = preset?.light?.colors ? presetToVars(preset.light.colors) : tigercatTheme;
19772
- const darkVars = preset?.dark?.colors ? presetToVars(preset.dark.colors) : tigercatDarkTheme;
20602
+ const lightVars = preset?.light?.colors ? semanticColorsToCssVars(preset.light.colors) : tigercatTheme;
20603
+ const darkVars = preset?.dark?.colors ? semanticColorsToCssVars(preset.dark.colors) : tigercatDarkTheme;
19773
20604
  addBase({
19774
20605
  ":root": { ...lightVars, ...MODERN_BASE_TOKENS_LIGHT },
19775
20606
  ".dark": { ...darkVars, ...MODERN_BASE_TOKENS_DARK },
@@ -19833,13 +20664,9 @@ var THEME_CONFIG_CSS_VARS = {
19833
20664
  }
19834
20665
  };
19835
20666
  function themeConfigToCssVars(config) {
19836
- const vars = {};
19837
- if (config.colors) {
19838
- for (const [key, value] of Object.entries(config.colors)) {
19839
- const varName = THEME_CSS_VARS[key];
19840
- if (varName && value) vars[varName] = value;
19841
- }
19842
- }
20667
+ const vars = {
20668
+ ...semanticColorsToCssVars(config.colors)
20669
+ };
19843
20670
  for (const section of ["typography", "radius", "shadows", "spacing", "motion"]) {
19844
20671
  const values = config[section];
19845
20672
  if (!values) continue;
@@ -20932,7 +21759,7 @@ var designTokens = {
20932
21759
  };
20933
21760
 
20934
21761
  // src/index.ts
20935
- var version = "2.1.0";
21762
+ var version = "2.1.1";
20936
21763
  export {
20937
21764
  ANIMATION_DURATION_FAST_MS,
20938
21765
  ANIMATION_DURATION_MS,
@@ -20946,14 +21773,20 @@ export {
20946
21773
  COUNTDOWN_DEFAULT_FORMAT,
20947
21774
  COUNTDOWN_DEFAULT_INTERVAL_MS,
20948
21775
  CROP_HANDLES,
21776
+ DEFAULT_ACTIVITY_FEED_LABELS,
20949
21777
  DEFAULT_AVATAR_GROUP_LABELS,
20950
21778
  DEFAULT_CALENDAR_LABELS,
20951
21779
  DEFAULT_CAROUSEL_LABELS,
20952
21780
  DEFAULT_CHART_COLORS,
20953
21781
  DEFAULT_CHART_LABELS,
21782
+ DEFAULT_CHAT_WINDOW_LABELS,
21783
+ DEFAULT_CODE_LABELS,
21784
+ DEFAULT_COMMENT_THREAD_LABELS,
20954
21785
  DEFAULT_CRON_EDITOR_LABELS,
20955
21786
  DEFAULT_DATA_EXPORT_LABELS,
20956
21787
  DEFAULT_FILE_MANAGER_LABELS,
21788
+ DEFAULT_FLOATING_HOVER_HIDE_DELAY_MS,
21789
+ DEFAULT_FLOATING_HOVER_SHOW_DELAY_MS,
20957
21790
  DEFAULT_FORM_VALIDATION_LABELS,
20958
21791
  DEFAULT_FORM_WIZARD_LABELS,
20959
21792
  DEFAULT_HEATMAP_CANVAS_THRESHOLD,
@@ -20970,6 +21803,7 @@ export {
20970
21803
  DEFAULT_KBD_SEPARATOR,
20971
21804
  DEFAULT_KBD_SIZE,
20972
21805
  DEFAULT_KBD_VARIANT,
21806
+ DEFAULT_LOADING_BACKGROUND,
20973
21807
  DEFAULT_LOADING_BAR_ARIA_LABEL,
20974
21808
  DEFAULT_LOADING_BAR_COLOR,
20975
21809
  DEFAULT_LOADING_BAR_HEIGHT,
@@ -20981,6 +21815,7 @@ export {
20981
21815
  DEFAULT_MARQUEE_PAUSE_ON_HOVER,
20982
21816
  DEFAULT_MARQUEE_REPEAT,
20983
21817
  DEFAULT_MASK_TOKENS,
21818
+ DEFAULT_NOTIFICATION_CENTER_LABELS,
20984
21819
  DEFAULT_PAGINATION_LABELS,
20985
21820
  DEFAULT_RATE_LABELS,
20986
21821
  DEFAULT_RICH_TEXT_EDITOR_LABELS,
@@ -21082,10 +21917,14 @@ export {
21082
21917
  ThemeManager,
21083
21918
  VIEW_TRANSITION_CSS,
21084
21919
  WEEKDAYS,
21920
+ ZH_CN_ACTIVITY_FEED_LABELS,
21085
21921
  ZH_CN_AVATAR_GROUP_LABELS,
21086
21922
  ZH_CN_CALENDAR_LABELS,
21087
21923
  ZH_CN_CAROUSEL_LABELS,
21088
21924
  ZH_CN_CHART_LABELS,
21925
+ ZH_CN_CHAT_WINDOW_LABELS,
21926
+ ZH_CN_CODE_LABELS,
21927
+ ZH_CN_COMMENT_THREAD_LABELS,
21089
21928
  ZH_CN_CRON_EDITOR_LABELS,
21090
21929
  ZH_CN_DATA_EXPORT_LABELS,
21091
21930
  ZH_CN_FILE_MANAGER_LABELS,
@@ -21095,6 +21934,7 @@ export {
21095
21934
  ZH_CN_IMAGE_VIEWER_LABELS,
21096
21935
  ZH_CN_INPUT_OTP_LABELS,
21097
21936
  ZH_CN_MARKDOWN_EDITOR_LABELS,
21937
+ ZH_CN_NOTIFICATION_CENTER_LABELS,
21098
21938
  ZH_CN_PAGINATION_LABELS,
21099
21939
  ZH_CN_RATE_LABELS,
21100
21940
  ZH_CN_RICH_TEXT_EDITOR_LABELS,
@@ -21149,10 +21989,12 @@ export {
21149
21989
  animationDelayClasses,
21150
21990
  animationDelayStyles,
21151
21991
  announceToScreenReader,
21992
+ appendDefaultTaskBoardCard,
21152
21993
  applyAspectRatio,
21153
21994
  applyChartBrush,
21154
21995
  applyFileDragReorder,
21155
21996
  applyFloatingStyles,
21997
+ applyGanttTaskDateOverlay,
21156
21998
  applyMarkdownToolbarAction,
21157
21999
  applyMaskInput,
21158
22000
  applyNumberKeyboardInput,
@@ -21207,6 +22049,7 @@ export {
21207
22049
  buildActivityGroups,
21208
22050
  buildChartLegendItems,
21209
22051
  buildChartSeriesKeys,
22052
+ buildChatMessageStatusInfo,
21210
22053
  buildCommentTree,
21211
22054
  buildCronFieldValue,
21212
22055
  buildNotificationGroups,
@@ -21298,6 +22141,7 @@ export {
21298
22141
  chevronRightSolidIcon20PathD,
21299
22142
  clampBarWidth,
21300
22143
  clampDimensions,
22144
+ clampGanttDragDeltaX,
21301
22145
  clampImageAnnotationPoint,
21302
22146
  clampImageAnnotationUnit,
21303
22147
  clampLoadingBarPercentage,
@@ -21332,6 +22176,7 @@ export {
21332
22176
  codeBlockContainerClasses,
21333
22177
  codeBlockCopyButtonBaseClasses,
21334
22178
  codeBlockCopyButtonCopiedClasses,
22179
+ codeBlockCopyButtonFailedClasses,
21335
22180
  codeBlockPreClasses,
21336
22181
  codeEditorActiveLineDarkClasses,
21337
22182
  codeEditorActiveLineLightClasses,
@@ -21416,6 +22261,7 @@ export {
21416
22261
  createChartLinkController,
21417
22262
  createChartPointerMoveScheduler,
21418
22263
  createChartResizeObserverController,
22264
+ createCircleRingPath,
21419
22265
  createCollapseTransitionController,
21420
22266
  createColumnDragData,
21421
22267
  createCountdownPayload,
@@ -21424,6 +22270,7 @@ export {
21424
22270
  createDocumentDragSession,
21425
22271
  createDragState,
21426
22272
  createEmptyScrollAreaState,
22273
+ createFloatingHoverDelayController,
21427
22274
  createFloatingIdFactory,
21428
22275
  createFocusTrap,
21429
22276
  createFormConditionDependencies,
@@ -21452,6 +22299,8 @@ export {
21452
22299
  createPinchState,
21453
22300
  createPointScale,
21454
22301
  createPolygonPath,
22302
+ createPolygonRingPath,
22303
+ createProgrammaticScrollLock,
21455
22304
  createRafRepeatActionController,
21456
22305
  createScrollSpyObserver,
21457
22306
  createScrollSpyPayload,
@@ -21617,6 +22466,7 @@ export {
21617
22466
  filterTreeNodes,
21618
22467
  filterTreeSelectNodes,
21619
22468
  findActiveAnchor,
22469
+ findActiveAnchorAtOffsetLine,
21620
22470
  findCascaderOption,
21621
22471
  findColumnFromPoint,
21622
22472
  findFirstEnabledIndex,
@@ -21640,6 +22490,7 @@ export {
21640
22490
  floatButtonGroupClasses,
21641
22491
  floatButtonGroupExpandClasses,
21642
22492
  floatButtonIconSizeClasses,
22493
+ floatButtonPlusIconPath,
21643
22494
  floatButtonShapeClasses,
21644
22495
  floatButtonSizeClasses,
21645
22496
  floatButtonTypeClasses,
@@ -21687,9 +22538,11 @@ export {
21687
22538
  fullscreenIcon,
21688
22539
  ganttAxisTextClasses,
21689
22540
  ganttBarClasses,
22541
+ ganttDateValuesEqual,
21690
22542
  ganttDependencyClasses,
21691
22543
  ganttLabelClasses,
21692
22544
  ganttProgressClasses,
22545
+ ganttPxToMs,
21693
22546
  ganttRowClasses,
21694
22547
  ganttTodayLineClasses,
21695
22548
  generateAvatarColor,
@@ -21705,6 +22558,7 @@ export {
21705
22558
  getActiveLineIndex,
21706
22559
  getActiveTourStepPosition,
21707
22560
  getActiveTourSteps,
22561
+ getActivityFeedLabels,
21708
22562
  getAlertIconPath,
21709
22563
  getAlertTypeClasses,
21710
22564
  getAlignClasses,
@@ -21780,6 +22634,7 @@ export {
21780
22634
  getChartTooltipTransform,
21781
22635
  getChatMessageStatusInfo,
21782
22636
  getChatStatusBarClasses,
22637
+ getChatWindowLabels,
21783
22638
  getCheckboxCellClasses,
21784
22639
  getCheckboxClasses,
21785
22640
  getCheckboxLabelClasses,
@@ -21790,6 +22645,7 @@ export {
21790
22645
  getCodeEditorActiveLineClasses,
21791
22646
  getCodeEditorCaretClasses,
21792
22647
  getCodeEditorContainerClasses,
22648
+ getCodeLabels,
21793
22649
  getColGutterClasses,
21794
22650
  getColMergedStyleVars,
21795
22651
  getColOrderStyleVars,
@@ -21804,6 +22660,7 @@ export {
21804
22660
  getColorSwatchOptionKey,
21805
22661
  getColumnCardCount,
21806
22662
  getColumnDropIndex,
22663
+ getCommentThreadLabels,
21807
22664
  getComponentMotionStyle,
21808
22665
  getComponentMotionTransition,
21809
22666
  getComponentTransition,
@@ -21896,6 +22753,7 @@ export {
21896
22753
  getFixedColumnStyle,
21897
22754
  getFixedVirtualRange,
21898
22755
  getFlexClasses,
22756
+ getFloatButtonGroupClasses,
21899
22757
  getFloatingMiddleware,
21900
22758
  getFocusTrapNavigation,
21901
22759
  getFocusableElements2 as getFocusableElements,
@@ -21957,10 +22815,12 @@ export {
21957
22815
  getInitialSubmenuHeightTransitionStyle,
21958
22816
  getInitials,
21959
22817
  getInputAffixClasses,
22818
+ getInputChromeClasses,
21960
22819
  getInputClasses,
21961
22820
  getInputClearButtonClasses,
21962
22821
  getInputCountClasses,
21963
22822
  getInputErrorClasses,
22823
+ getInputFieldClasses,
21964
22824
  getInputGroupAddonClasses,
21965
22825
  getInputGroupClasses,
21966
22826
  getInputNumberFocusRingColor,
@@ -22043,6 +22903,7 @@ export {
22043
22903
  getNextImageAnnotationTool,
22044
22904
  getNextSlideIndex,
22045
22905
  getNextTableSelectAllKeys,
22906
+ getNotificationCenterLabels,
22046
22907
  getNotificationIconPath,
22047
22908
  getNotificationTypeClasses,
22048
22909
  getNumberExtent,
@@ -22187,6 +23048,7 @@ export {
22187
23048
  getSplitButtonTriggerClasses,
22188
23049
  getSplitterContainerClasses,
22189
23050
  getSplitterGutterClasses,
23051
+ getSplitterGutterCssVars,
22190
23052
  getSplitterGutterHandleClasses,
22191
23053
  getSpotlightFuzzyScore,
22192
23054
  getSpotlightOptionClasses,
@@ -22212,6 +23074,7 @@ export {
22212
23074
  getSubMenuExpandIconClasses,
22213
23075
  getSubMenuTitleClasses,
22214
23076
  getSunburstGradientPrefix,
23077
+ getSunburstLabelPoint,
22215
23078
  getSvgDefaultAttrs,
22216
23079
  getSwitchClasses,
22217
23080
  getSwitchThumbClasses,
@@ -22224,6 +23087,7 @@ export {
22224
23087
  getTabPaneClasses,
22225
23088
  getTableCellClasses,
22226
23089
  getTableColgroup,
23090
+ getTableColumnDataKey,
22227
23091
  getTableFixedCellClasses,
22228
23092
  getTableFixedHeaderCellClasses,
22229
23093
  getTableHeaderCellClasses,
@@ -22273,6 +23137,7 @@ export {
22273
23137
  getTotalTextClasses,
22274
23138
  getTouchDistance,
22275
23139
  getTourLabels,
23140
+ getTourMaskHoleStyle,
22276
23141
  getTourPopoverPosition,
22277
23142
  getTourSpotlightStyle,
22278
23143
  getTourTargetRect,
@@ -22441,6 +23306,7 @@ export {
22441
23306
  isAtMax,
22442
23307
  isAtMin,
22443
23308
  isBrowser,
23309
+ isCalendarMonthDisabled,
22444
23310
  isCascaderOptionExpandable,
22445
23311
  isColorSwatchSelected,
22446
23312
  isContentEmpty,
@@ -22557,6 +23423,7 @@ export {
22557
23423
  lockOpenIcon24PathD,
22558
23424
  manageLiveRegion,
22559
23425
  mapToolbarAction,
23426
+ mapVisibleCardIndexToSource,
22560
23427
  markdownEditorBodyClasses,
22561
23428
  markdownEditorContainerBase,
22562
23429
  markdownEditorContainerDisabled,
@@ -22640,6 +23507,7 @@ export {
22640
23507
  moveCard,
22641
23508
  moveCropRect,
22642
23509
  moveFocusInMenu,
23510
+ moveGanttTaskByPx,
22643
23511
  moveItemBetweenContainers,
22644
23512
  movePan,
22645
23513
  movePinch,
@@ -22647,6 +23515,7 @@ export {
22647
23515
  musicIcon,
22648
23516
  naturalTheme,
22649
23517
  navigateToFolder,
23518
+ nextCommentLikeState,
22650
23519
  nextIconPath,
22651
23520
  nextLoadingBarTricklePercentage,
22652
23521
  normalizeActiveKeys,
@@ -22713,6 +23582,7 @@ export {
22713
23582
  paperclipIcon,
22714
23583
  parseAspectRatio,
22715
23584
  parseColorInput,
23585
+ parseColorParts,
22716
23586
  parseCountdownTimestamp,
22717
23587
  parseCronFieldControl,
22718
23588
  parseDate,
@@ -22787,6 +23657,7 @@ export {
22787
23657
  radioVisualBaseClasses,
22788
23658
  rateActiveColor,
22789
23659
  rateBaseClasses,
23660
+ rateHalfStarInnerClasses,
22790
23661
  rateHoverColor,
22791
23662
  rateInactiveColor,
22792
23663
  readFileAsDataUrl,
@@ -22827,11 +23698,13 @@ export {
22827
23698
  resizePanes,
22828
23699
  resolveAffixTarget,
22829
23700
  resolveAnchoredOverlayTarget,
23701
+ resolveAutoCompleteDisplayValue,
22830
23702
  resolveCardPadding,
22831
23703
  resolveCarouselSwipeDirection,
22832
23704
  resolveChartPalette,
22833
23705
  resolveChartTooltipContent,
22834
23706
  resolveChartTooltipPosition,
23707
+ resolveCommentLikeState,
22835
23708
  resolveConditionalFormRules,
22836
23709
  resolveCreatableSelectOption,
22837
23710
  resolveDragConfig,
@@ -22847,6 +23720,7 @@ export {
22847
23720
  resolveImageCompareOrientation,
22848
23721
  resolveImageComparePosition,
22849
23722
  resolveImageCompareStep,
23723
+ resolveInitialPaneSizes,
22850
23724
  resolveKbdSeparator,
22851
23725
  resolveKbdSize,
22852
23726
  resolveKbdVariant,
@@ -22940,6 +23814,7 @@ export {
22940
23814
  selectOptionDisabledClasses,
22941
23815
  selectOptionSelectedClasses,
22942
23816
  selectSearchInputClasses,
23817
+ semanticColorsToCssVars,
22943
23818
  semanticTokens,
22944
23819
  sendIcon,
22945
23820
  serializeChartSvg,
@@ -22949,6 +23824,7 @@ export {
22949
23824
  setThemeColors,
22950
23825
  shareIcon,
22951
23826
  shieldCheckIcon,
23827
+ shiftGanttTaskDates,
22952
23828
  shouldCloseOnMaskClick,
22953
23829
  shouldCommitImageAnnotationBox,
22954
23830
  shouldHideBadge,
@@ -23106,6 +23982,7 @@ export {
23106
23982
  tableRowGroupHoverClasses,
23107
23983
  tableRowHoverClasses,
23108
23984
  tableRowStripedClasses,
23985
+ tableSortButtonClasses,
23109
23986
  tableSummaryRowClasses,
23110
23987
  tabsBaseClasses,
23111
23988
  tagBaseClasses,
@@ -23260,6 +24137,7 @@ export {
23260
24137
  watermarkFontDefaults,
23261
24138
  watermarkWrapperClasses,
23262
24139
  wifiIcon,
24140
+ writeCommentLikeOverlay,
23263
24141
  zoomInIcon,
23264
24142
  zoomInIconPath,
23265
24143
  zoomOutIcon,