@expcat/tigercat-core 2.1.0 → 2.1.2

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-CLWdsrRn.d.ts} +1 -1
  2. package/dist/index.d.ts +474 -101
  3. package/dist/index.js +1388 -304
  4. package/dist/{locale-CEDXoKX7.d.ts → locale-KMGxL6bT.d.ts} +101 -1
  5. package/dist/locales/ar-SA.d.ts +1 -1
  6. package/dist/locales/ar-SA.js +140 -4
  7. package/dist/locales/de-DE.d.ts +1 -1
  8. package/dist/locales/de-DE.js +140 -4
  9. package/dist/locales/en-US.d.ts +1 -1
  10. package/dist/locales/en-US.js +86 -3
  11. package/dist/locales/es-ES.d.ts +1 -1
  12. package/dist/locales/es-ES.js +140 -4
  13. package/dist/locales/fr-FR.d.ts +1 -1
  14. package/dist/locales/fr-FR.js +140 -4
  15. package/dist/locales/id-ID.d.ts +1 -1
  16. package/dist/locales/id-ID.js +140 -4
  17. package/dist/locales/ja-JP.d.ts +1 -1
  18. package/dist/locales/ja-JP.js +140 -4
  19. package/dist/locales/ko-KR.d.ts +1 -1
  20. package/dist/locales/ko-KR.js +140 -4
  21. package/dist/locales/pt-BR.d.ts +1 -1
  22. package/dist/locales/pt-BR.js +140 -4
  23. package/dist/locales/th-TH.d.ts +1 -1
  24. package/dist/locales/th-TH.js +140 -4
  25. package/dist/locales/vi-VN.d.ts +1 -1
  26. package/dist/locales/vi-VN.js +140 -4
  27. package/dist/locales/zh-CN.d.ts +1 -1
  28. package/dist/locales/zh-CN.js +86 -3
  29. package/dist/locales/zh-TW.d.ts +1 -1
  30. package/dist/locales/zh-TW.js +140 -4
  31. package/dist/{table-CbPOY5bp.d.ts → table-CHeBgM_2.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,7 +1496,13 @@ 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",
1505
+ "colorPicker",
1500
1506
  "tabs",
1501
1507
  "rate",
1502
1508
  "carousel",
@@ -1565,7 +1571,13 @@ function mergeTigerLocale(base, override) {
1565
1571
  imageEditor: { ...base?.imageEditor, ...override?.imageEditor },
1566
1572
  status: { ...base?.status, ...override?.status },
1567
1573
  taskBoard: { ...base?.taskBoard, ...override?.taskBoard },
1574
+ chatWindow: { ...base?.chatWindow, ...override?.chatWindow },
1575
+ code: { ...base?.code, ...override?.code },
1576
+ commentThread: { ...base?.commentThread, ...override?.commentThread },
1577
+ activityFeed: { ...base?.activityFeed, ...override?.activityFeed },
1578
+ notificationCenter: { ...base?.notificationCenter, ...override?.notificationCenter },
1568
1579
  select: { ...base?.select, ...override?.select },
1580
+ colorPicker: { ...base?.colorPicker, ...override?.colorPicker },
1569
1581
  tabs: { ...base?.tabs, ...override?.tabs },
1570
1582
  rate: { ...base?.rate, ...override?.rate },
1571
1583
  avatarGroup: { ...base?.avatarGroup, ...override?.avatarGroup },
@@ -1868,19 +1880,205 @@ function getTaskBoardLabels(locale, overrides) {
1868
1880
  boardAriaLabel: overrides?.boardAriaLabel ?? locale?.taskBoard?.boardAriaLabel ?? defaultLabels.boardAriaLabel
1869
1881
  };
1870
1882
  }
1883
+ var DEFAULT_CHAT_WINDOW_LABELS = {
1884
+ emptyText: "No messages",
1885
+ sendText: "Send",
1886
+ placeholder: "Type a message",
1887
+ sendingText: "Sending",
1888
+ sentText: "Delivered",
1889
+ failedText: "Failed to send"
1890
+ };
1891
+ var ZH_CN_CHAT_WINDOW_LABELS = {
1892
+ emptyText: "\u6682\u65E0\u6D88\u606F",
1893
+ sendText: "\u53D1\u9001",
1894
+ placeholder: "\u8BF7\u8F93\u5165\u6D88\u606F",
1895
+ sendingText: "\u53D1\u9001\u4E2D",
1896
+ sentText: "\u5DF2\u9001\u8FBE",
1897
+ failedText: "\u53D1\u9001\u5931\u8D25"
1898
+ };
1899
+ function getChatWindowLabels(locale, overrides) {
1900
+ const isZh = locale?.locale?.startsWith("zh");
1901
+ const defaultLabels = isZh ? ZH_CN_CHAT_WINDOW_LABELS : DEFAULT_CHAT_WINDOW_LABELS;
1902
+ return {
1903
+ emptyText: overrides?.emptyText ?? locale?.chatWindow?.emptyText ?? defaultLabels.emptyText,
1904
+ sendText: overrides?.sendText ?? locale?.chatWindow?.sendText ?? defaultLabels.sendText,
1905
+ placeholder: overrides?.placeholder ?? locale?.chatWindow?.placeholder ?? defaultLabels.placeholder,
1906
+ sendingText: overrides?.sendingText ?? locale?.chatWindow?.sendingText ?? defaultLabels.sendingText,
1907
+ sentText: overrides?.sentText ?? locale?.chatWindow?.sentText ?? defaultLabels.sentText,
1908
+ failedText: overrides?.failedText ?? locale?.chatWindow?.failedText ?? defaultLabels.failedText
1909
+ };
1910
+ }
1911
+ var DEFAULT_CODE_LABELS = {
1912
+ copyLabel: "Copy",
1913
+ copiedLabel: "Copied",
1914
+ copyFailedLabel: "Copy failed"
1915
+ };
1916
+ var ZH_CN_CODE_LABELS = {
1917
+ copyLabel: "\u590D\u5236",
1918
+ copiedLabel: "\u5DF2\u590D\u5236",
1919
+ copyFailedLabel: "\u590D\u5236\u5931\u8D25"
1920
+ };
1921
+ function getCodeLabels(locale, overrides) {
1922
+ const isZh = locale?.locale?.startsWith("zh");
1923
+ const defaultLabels = isZh ? ZH_CN_CODE_LABELS : DEFAULT_CODE_LABELS;
1924
+ return {
1925
+ copyLabel: overrides?.copyLabel ?? locale?.code?.copyLabel ?? defaultLabels.copyLabel,
1926
+ copiedLabel: overrides?.copiedLabel ?? locale?.code?.copiedLabel ?? defaultLabels.copiedLabel,
1927
+ copyFailedLabel: overrides?.copyFailedLabel ?? locale?.code?.copyFailedLabel ?? defaultLabels.copyFailedLabel
1928
+ };
1929
+ }
1930
+ var DEFAULT_COMMENT_THREAD_LABELS = {
1931
+ emptyText: "No comments",
1932
+ replyPlaceholder: "Write a reply...",
1933
+ replyButtonText: "Reply",
1934
+ cancelReplyText: "Cancel",
1935
+ likeText: "Like",
1936
+ likedText: "Liked",
1937
+ replyText: "Reply",
1938
+ moreText: "More",
1939
+ loadMoreText: "Load more",
1940
+ collapseRepliesText: "\u25BE Collapse replies",
1941
+ expandRepliesText: "\u25B8 Expand {count} replies"
1942
+ };
1943
+ var ZH_CN_COMMENT_THREAD_LABELS = {
1944
+ emptyText: "\u6682\u65E0\u8BC4\u8BBA",
1945
+ replyPlaceholder: "\u5199\u4E0B\u56DE\u590D...",
1946
+ replyButtonText: "\u56DE\u590D",
1947
+ cancelReplyText: "\u53D6\u6D88",
1948
+ likeText: "\u70B9\u8D5E",
1949
+ likedText: "\u5DF2\u8D5E",
1950
+ replyText: "\u56DE\u590D",
1951
+ moreText: "\u66F4\u591A",
1952
+ loadMoreText: "\u52A0\u8F7D\u66F4\u591A",
1953
+ collapseRepliesText: "\u25BE \u6536\u8D77\u56DE\u590D",
1954
+ expandRepliesText: "\u25B8 \u5C55\u5F00 {count} \u6761\u56DE\u590D"
1955
+ };
1956
+ function getCommentThreadLabels(locale, overrides) {
1957
+ const isZh = locale?.locale?.startsWith("zh");
1958
+ const defaultLabels = isZh ? ZH_CN_COMMENT_THREAD_LABELS : DEFAULT_COMMENT_THREAD_LABELS;
1959
+ return {
1960
+ emptyText: overrides?.emptyText ?? locale?.commentThread?.emptyText ?? defaultLabels.emptyText,
1961
+ replyPlaceholder: overrides?.replyPlaceholder ?? locale?.commentThread?.replyPlaceholder ?? defaultLabels.replyPlaceholder,
1962
+ replyButtonText: overrides?.replyButtonText ?? locale?.commentThread?.replyButtonText ?? defaultLabels.replyButtonText,
1963
+ cancelReplyText: overrides?.cancelReplyText ?? locale?.commentThread?.cancelReplyText ?? defaultLabels.cancelReplyText,
1964
+ likeText: overrides?.likeText ?? locale?.commentThread?.likeText ?? defaultLabels.likeText,
1965
+ likedText: overrides?.likedText ?? locale?.commentThread?.likedText ?? defaultLabels.likedText,
1966
+ replyText: overrides?.replyText ?? locale?.commentThread?.replyText ?? defaultLabels.replyText,
1967
+ moreText: overrides?.moreText ?? locale?.commentThread?.moreText ?? defaultLabels.moreText,
1968
+ loadMoreText: overrides?.loadMoreText ?? locale?.commentThread?.loadMoreText ?? defaultLabels.loadMoreText,
1969
+ collapseRepliesText: overrides?.collapseRepliesText ?? locale?.commentThread?.collapseRepliesText ?? defaultLabels.collapseRepliesText,
1970
+ expandRepliesText: overrides?.expandRepliesText ?? locale?.commentThread?.expandRepliesText ?? defaultLabels.expandRepliesText
1971
+ };
1972
+ }
1973
+ var DEFAULT_ACTIVITY_FEED_LABELS = {
1974
+ emptyText: "No activity",
1975
+ loadingText: "Loading..."
1976
+ };
1977
+ var ZH_CN_ACTIVITY_FEED_LABELS = {
1978
+ emptyText: "\u6682\u65E0\u52A8\u6001",
1979
+ loadingText: "\u52A0\u8F7D\u4E2D..."
1980
+ };
1981
+ function getActivityFeedLabels(locale, overrides) {
1982
+ const isZh = locale?.locale?.startsWith("zh");
1983
+ const defaultLabels = isZh ? ZH_CN_ACTIVITY_FEED_LABELS : DEFAULT_ACTIVITY_FEED_LABELS;
1984
+ return {
1985
+ emptyText: overrides?.emptyText ?? locale?.activityFeed?.emptyText ?? defaultLabels.emptyText,
1986
+ loadingText: overrides?.loadingText ?? locale?.activityFeed?.loadingText ?? defaultLabels.loadingText
1987
+ };
1988
+ }
1989
+ var DEFAULT_NOTIFICATION_CENTER_LABELS = {
1990
+ title: "Notifications",
1991
+ emptyText: "No notifications",
1992
+ loadingText: "Loading...",
1993
+ allLabel: "All",
1994
+ unreadLabel: "Unread",
1995
+ readLabel: "Read",
1996
+ markAllReadText: "Mark all as read",
1997
+ markReadText: "Mark as read",
1998
+ markUnreadText: "Mark as unread"
1999
+ };
2000
+ var ZH_CN_NOTIFICATION_CENTER_LABELS = {
2001
+ title: "\u901A\u77E5\u4E2D\u5FC3",
2002
+ emptyText: "\u6682\u65E0\u901A\u77E5",
2003
+ loadingText: "\u52A0\u8F7D\u4E2D...",
2004
+ allLabel: "\u5168\u90E8",
2005
+ unreadLabel: "\u672A\u8BFB",
2006
+ readLabel: "\u5DF2\u8BFB",
2007
+ markAllReadText: "\u5168\u90E8\u6807\u8BB0\u5DF2\u8BFB",
2008
+ markReadText: "\u6807\u8BB0\u5DF2\u8BFB",
2009
+ markUnreadText: "\u6807\u8BB0\u672A\u8BFB"
2010
+ };
2011
+ function getNotificationCenterLabels(locale, overrides) {
2012
+ const isZh = locale?.locale?.startsWith("zh");
2013
+ const defaultLabels = isZh ? ZH_CN_NOTIFICATION_CENTER_LABELS : DEFAULT_NOTIFICATION_CENTER_LABELS;
2014
+ return {
2015
+ title: overrides?.title ?? locale?.notificationCenter?.title ?? defaultLabels.title,
2016
+ emptyText: overrides?.emptyText ?? locale?.notificationCenter?.emptyText ?? defaultLabels.emptyText,
2017
+ loadingText: overrides?.loadingText ?? locale?.notificationCenter?.loadingText ?? defaultLabels.loadingText,
2018
+ allLabel: overrides?.allLabel ?? locale?.notificationCenter?.allLabel ?? defaultLabels.allLabel,
2019
+ unreadLabel: overrides?.unreadLabel ?? locale?.notificationCenter?.unreadLabel ?? defaultLabels.unreadLabel,
2020
+ readLabel: overrides?.readLabel ?? locale?.notificationCenter?.readLabel ?? defaultLabels.readLabel,
2021
+ markAllReadText: overrides?.markAllReadText ?? locale?.notificationCenter?.markAllReadText ?? defaultLabels.markAllReadText,
2022
+ markReadText: overrides?.markReadText ?? locale?.notificationCenter?.markReadText ?? defaultLabels.markReadText,
2023
+ markUnreadText: overrides?.markUnreadText ?? locale?.notificationCenter?.markUnreadText ?? defaultLabels.markUnreadText
2024
+ };
2025
+ }
1871
2026
  var DEFAULT_SELECT_LABELS = {
1872
- doneText: "Done"
2027
+ doneText: "Done",
2028
+ placeholder: "Select an option",
2029
+ emptyText: "No options found"
1873
2030
  };
1874
2031
  var ZH_CN_SELECT_LABELS = {
1875
- doneText: "\u5B8C\u6210"
2032
+ doneText: "\u5B8C\u6210",
2033
+ placeholder: "\u8BF7\u9009\u62E9",
2034
+ emptyText: "\u6682\u65E0\u9009\u9879"
1876
2035
  };
1877
2036
  function getSelectLabels(locale, overrides) {
1878
2037
  const isZh = !!locale?.locale?.startsWith("zh") || locale?.formWizard?.finishText === "\u5B8C\u6210";
1879
2038
  const defaultLabels = isZh ? ZH_CN_SELECT_LABELS : DEFAULT_SELECT_LABELS;
1880
2039
  return {
1881
- doneText: overrides?.doneText ?? locale?.select?.doneText ?? locale?.common?.okText ?? defaultLabels.doneText
2040
+ doneText: overrides?.doneText ?? locale?.select?.doneText ?? locale?.common?.okText ?? defaultLabels.doneText,
2041
+ placeholder: overrides?.placeholder ?? locale?.select?.placeholder ?? defaultLabels.placeholder,
2042
+ emptyText: overrides?.emptyText ?? locale?.select?.emptyText ?? locale?.common?.emptyText ?? defaultLabels.emptyText
2043
+ };
2044
+ }
2045
+ var DEFAULT_COLOR_PICKER_LABELS = {
2046
+ trigger: "Pick color",
2047
+ panelTitle: "Color",
2048
+ clear: "Clear",
2049
+ hue: "Hue",
2050
+ alpha: "Alpha",
2051
+ value: "Color value",
2052
+ preview: "Color preview",
2053
+ selectPreset: "Select {color}"
2054
+ };
2055
+ var ZH_CN_COLOR_PICKER_LABELS = {
2056
+ trigger: "\u9009\u62E9\u989C\u8272",
2057
+ panelTitle: "\u989C\u8272",
2058
+ clear: "\u6E05\u7A7A",
2059
+ hue: "\u8272\u76F8",
2060
+ alpha: "\u900F\u660E\u5EA6",
2061
+ value: "\u989C\u8272\u503C",
2062
+ preview: "\u989C\u8272\u9884\u89C8",
2063
+ selectPreset: "\u9009\u62E9 {color}"
2064
+ };
2065
+ function getColorPickerLabels(locale, overrides) {
2066
+ const isZh = locale?.locale?.startsWith("zh");
2067
+ const defaultLabels = isZh ? ZH_CN_COLOR_PICKER_LABELS : DEFAULT_COLOR_PICKER_LABELS;
2068
+ return {
2069
+ trigger: overrides?.trigger ?? locale?.colorPicker?.trigger ?? defaultLabels.trigger,
2070
+ panelTitle: overrides?.panelTitle ?? locale?.colorPicker?.panelTitle ?? defaultLabels.panelTitle,
2071
+ clear: overrides?.clear ?? locale?.colorPicker?.clear ?? defaultLabels.clear,
2072
+ hue: overrides?.hue ?? locale?.colorPicker?.hue ?? defaultLabels.hue,
2073
+ alpha: overrides?.alpha ?? locale?.colorPicker?.alpha ?? defaultLabels.alpha,
2074
+ value: overrides?.value ?? locale?.colorPicker?.value ?? defaultLabels.value,
2075
+ preview: overrides?.preview ?? locale?.colorPicker?.preview ?? defaultLabels.preview,
2076
+ selectPreset: overrides?.selectPreset ?? locale?.colorPicker?.selectPreset ?? defaultLabels.selectPreset
1882
2077
  };
1883
2078
  }
2079
+ function formatColorPickerSelectPreset(template, color) {
2080
+ return template.replace("{color}", color);
2081
+ }
1884
2082
  var DEFAULT_TABS_LABELS = {
1885
2083
  addTabAriaLabel: "Add tab",
1886
2084
  closeTabAriaLabel: "Close {label}"
@@ -2002,7 +2200,20 @@ var DEFAULT_MARKDOWN_EDITOR_LABELS = {
2002
2200
  previewAriaLabel: "Markdown preview",
2003
2201
  editModeLabel: "Edit",
2004
2202
  splitModeLabel: "Split",
2005
- previewModeLabel: "Preview"
2203
+ previewModeLabel: "Preview",
2204
+ bold: "Bold",
2205
+ italic: "Italic",
2206
+ strikethrough: "Strikethrough",
2207
+ heading: "Heading",
2208
+ blockquote: "Blockquote",
2209
+ unorderedList: "Bulleted list",
2210
+ orderedList: "Numbered list",
2211
+ inlineCode: "Inline code",
2212
+ codeBlock: "Code block",
2213
+ link: "Link",
2214
+ image: "Image",
2215
+ table: "Table",
2216
+ horizontalRule: "Horizontal rule"
2006
2217
  };
2007
2218
  var ZH_CN_MARKDOWN_EDITOR_LABELS = {
2008
2219
  formattingToolbarAriaLabel: "Markdown \u683C\u5F0F\u5DE5\u5177\u680F",
@@ -2011,33 +2222,77 @@ var ZH_CN_MARKDOWN_EDITOR_LABELS = {
2011
2222
  previewAriaLabel: "Markdown \u9884\u89C8",
2012
2223
  editModeLabel: "\u7F16\u8F91",
2013
2224
  splitModeLabel: "\u5206\u680F",
2014
- previewModeLabel: "\u9884\u89C8"
2225
+ previewModeLabel: "\u9884\u89C8",
2226
+ bold: "\u52A0\u7C97",
2227
+ italic: "\u659C\u4F53",
2228
+ strikethrough: "\u5220\u9664\u7EBF",
2229
+ heading: "\u6807\u9898",
2230
+ blockquote: "\u5F15\u7528",
2231
+ unorderedList: "\u65E0\u5E8F\u5217\u8868",
2232
+ orderedList: "\u6709\u5E8F\u5217\u8868",
2233
+ inlineCode: "\u884C\u5185\u4EE3\u7801",
2234
+ codeBlock: "\u4EE3\u7801\u5757",
2235
+ link: "\u94FE\u63A5",
2236
+ image: "\u56FE\u7247",
2237
+ table: "\u8868\u683C",
2238
+ horizontalRule: "\u5206\u9694\u7EBF"
2015
2239
  };
2016
2240
  function getMarkdownEditorLabels(locale, overrides) {
2017
2241
  const defaultLabels = locale?.locale?.toLowerCase().startsWith("zh") ? ZH_CN_MARKDOWN_EDITOR_LABELS : DEFAULT_MARKDOWN_EDITOR_LABELS;
2018
2242
  return {
2019
- formattingToolbarAriaLabel: overrides?.formattingToolbarAriaLabel ?? locale?.markdownEditor?.formattingToolbarAriaLabel ?? defaultLabels.formattingToolbarAriaLabel,
2020
- modeToolbarAriaLabel: overrides?.modeToolbarAriaLabel ?? locale?.markdownEditor?.modeToolbarAriaLabel ?? defaultLabels.modeToolbarAriaLabel,
2021
- editorAriaLabel: overrides?.editorAriaLabel ?? locale?.markdownEditor?.editorAriaLabel ?? defaultLabels.editorAriaLabel,
2022
- previewAriaLabel: overrides?.previewAriaLabel ?? locale?.markdownEditor?.previewAriaLabel ?? defaultLabels.previewAriaLabel,
2023
- editModeLabel: overrides?.editModeLabel ?? locale?.markdownEditor?.editModeLabel ?? defaultLabels.editModeLabel,
2024
- splitModeLabel: overrides?.splitModeLabel ?? locale?.markdownEditor?.splitModeLabel ?? defaultLabels.splitModeLabel,
2025
- previewModeLabel: overrides?.previewModeLabel ?? locale?.markdownEditor?.previewModeLabel ?? defaultLabels.previewModeLabel
2243
+ ...defaultLabels,
2244
+ ...locale?.markdownEditor,
2245
+ ...overrides
2026
2246
  };
2027
2247
  }
2028
2248
  var DEFAULT_RICH_TEXT_EDITOR_LABELS = {
2029
2249
  formattingToolbarAriaLabel: "Text formatting",
2030
- editorAriaLabel: "Rich text editor"
2250
+ editorAriaLabel: "Rich text editor",
2251
+ bold: "Bold",
2252
+ italic: "Italic",
2253
+ underline: "Underline",
2254
+ strikethrough: "Strikethrough",
2255
+ heading1: "H1",
2256
+ heading2: "H2",
2257
+ heading3: "H3",
2258
+ bulletList: "Bullet List",
2259
+ orderedList: "Ordered List",
2260
+ blockquote: "Blockquote",
2261
+ codeBlock: "Code",
2262
+ link: "Link",
2263
+ image: "Image",
2264
+ horizontalRule: "HR",
2265
+ undo: "Undo",
2266
+ redo: "Redo",
2267
+ clear: "Clear"
2031
2268
  };
2032
2269
  var ZH_CN_RICH_TEXT_EDITOR_LABELS = {
2033
2270
  formattingToolbarAriaLabel: "\u5BCC\u6587\u672C\u683C\u5F0F\u5DE5\u5177\u680F",
2034
- editorAriaLabel: "\u5BCC\u6587\u672C\u7F16\u8F91\u5668"
2271
+ editorAriaLabel: "\u5BCC\u6587\u672C\u7F16\u8F91\u5668",
2272
+ bold: "\u52A0\u7C97",
2273
+ italic: "\u659C\u4F53",
2274
+ underline: "\u4E0B\u5212\u7EBF",
2275
+ strikethrough: "\u5220\u9664\u7EBF",
2276
+ heading1: "\u6807\u98981",
2277
+ heading2: "\u6807\u98982",
2278
+ heading3: "\u6807\u98983",
2279
+ bulletList: "\u65E0\u5E8F\u5217\u8868",
2280
+ orderedList: "\u6709\u5E8F\u5217\u8868",
2281
+ blockquote: "\u5F15\u7528",
2282
+ codeBlock: "\u4EE3\u7801",
2283
+ link: "\u94FE\u63A5",
2284
+ image: "\u56FE\u7247",
2285
+ horizontalRule: "\u5206\u9694\u7EBF",
2286
+ undo: "\u64A4\u9500",
2287
+ redo: "\u91CD\u505A",
2288
+ clear: "\u6E05\u9664\u683C\u5F0F"
2035
2289
  };
2036
2290
  function getRichTextEditorLabels(locale, overrides) {
2037
2291
  const defaultLabels = locale?.locale?.toLowerCase().startsWith("zh") ? ZH_CN_RICH_TEXT_EDITOR_LABELS : DEFAULT_RICH_TEXT_EDITOR_LABELS;
2038
2292
  return {
2039
- formattingToolbarAriaLabel: overrides?.formattingToolbarAriaLabel ?? locale?.richTextEditor?.formattingToolbarAriaLabel ?? defaultLabels.formattingToolbarAriaLabel,
2040
- editorAriaLabel: overrides?.editorAriaLabel ?? locale?.richTextEditor?.editorAriaLabel ?? defaultLabels.editorAriaLabel
2293
+ ...defaultLabels,
2294
+ ...locale?.richTextEditor,
2295
+ ...overrides
2041
2296
  };
2042
2297
  }
2043
2298
  var DEFAULT_CRON_EDITOR_LABELS = {
@@ -3066,8 +3321,61 @@ var enUS = {
3066
3321
  dragHintText: "Drag to move",
3067
3322
  boardAriaLabel: "Task Board"
3068
3323
  },
3324
+ chatWindow: {
3325
+ emptyText: "No messages",
3326
+ sendText: "Send",
3327
+ placeholder: "Type a message",
3328
+ sendingText: "Sending",
3329
+ sentText: "Delivered",
3330
+ failedText: "Failed to send"
3331
+ },
3332
+ code: {
3333
+ copyLabel: "Copy",
3334
+ copiedLabel: "Copied",
3335
+ copyFailedLabel: "Copy failed"
3336
+ },
3337
+ commentThread: {
3338
+ emptyText: "No comments",
3339
+ replyPlaceholder: "Write a reply...",
3340
+ replyButtonText: "Reply",
3341
+ cancelReplyText: "Cancel",
3342
+ likeText: "Like",
3343
+ likedText: "Liked",
3344
+ replyText: "Reply",
3345
+ moreText: "More",
3346
+ loadMoreText: "Load more",
3347
+ collapseRepliesText: "\u25BE Collapse replies",
3348
+ expandRepliesText: "\u25B8 Expand {count} replies"
3349
+ },
3350
+ activityFeed: {
3351
+ emptyText: "No activity",
3352
+ loadingText: "Loading..."
3353
+ },
3354
+ notificationCenter: {
3355
+ title: "Notifications",
3356
+ emptyText: "No notifications",
3357
+ loadingText: "Loading...",
3358
+ allLabel: "All",
3359
+ unreadLabel: "Unread",
3360
+ readLabel: "Read",
3361
+ markAllReadText: "Mark all as read",
3362
+ markReadText: "Mark as read",
3363
+ markUnreadText: "Mark as unread"
3364
+ },
3069
3365
  select: {
3070
- doneText: "Done"
3366
+ doneText: "Done",
3367
+ placeholder: "Select an option",
3368
+ emptyText: "No options found"
3369
+ },
3370
+ colorPicker: {
3371
+ trigger: "Pick color",
3372
+ panelTitle: "Color",
3373
+ clear: "Clear",
3374
+ hue: "Hue",
3375
+ alpha: "Alpha",
3376
+ value: "Color value",
3377
+ preview: "Color preview",
3378
+ selectPreset: "Select {color}"
3071
3379
  },
3072
3380
  tabs: {
3073
3381
  addTabAriaLabel: "Add tab",
@@ -3108,11 +3416,41 @@ var enUS = {
3108
3416
  previewAriaLabel: "Markdown preview",
3109
3417
  editModeLabel: "Edit",
3110
3418
  splitModeLabel: "Split",
3111
- previewModeLabel: "Preview"
3419
+ previewModeLabel: "Preview",
3420
+ bold: "Bold",
3421
+ italic: "Italic",
3422
+ strikethrough: "Strikethrough",
3423
+ heading: "Heading",
3424
+ blockquote: "Blockquote",
3425
+ unorderedList: "Bulleted list",
3426
+ orderedList: "Numbered list",
3427
+ inlineCode: "Inline code",
3428
+ codeBlock: "Code block",
3429
+ link: "Link",
3430
+ image: "Image",
3431
+ table: "Table",
3432
+ horizontalRule: "Horizontal rule"
3112
3433
  },
3113
3434
  richTextEditor: {
3114
3435
  formattingToolbarAriaLabel: "Text formatting",
3115
- editorAriaLabel: "Rich text editor"
3436
+ editorAriaLabel: "Rich text editor",
3437
+ bold: "Bold",
3438
+ italic: "Italic",
3439
+ underline: "Underline",
3440
+ strikethrough: "Strikethrough",
3441
+ heading1: "H1",
3442
+ heading2: "H2",
3443
+ heading3: "H3",
3444
+ bulletList: "Bullet List",
3445
+ orderedList: "Ordered List",
3446
+ blockquote: "Blockquote",
3447
+ codeBlock: "Code",
3448
+ link: "Link",
3449
+ image: "Image",
3450
+ horizontalRule: "HR",
3451
+ undo: "Undo",
3452
+ redo: "Redo",
3453
+ clear: "Clear"
3116
3454
  },
3117
3455
  cronEditor: {
3118
3456
  ariaLabel: "Cron editor",
@@ -3253,53 +3591,128 @@ var buttonDangerClasses = {
3253
3591
  var buttonGroupBaseClasses = "inline-flex";
3254
3592
  var buttonGroupVerticalClasses = "flex-col";
3255
3593
  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";
3594
+ 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";
3595
+ 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
3596
 
3259
3597
  // src/utils/input-styles.ts
3260
- var BASE_INPUT_CLASSES = [
3598
+ var INPUT_FIELD_BASE_CLASSES = [
3261
3599
  "w-full",
3262
- "border",
3263
- "rounded-[var(--tiger-radius-md,0.5rem)]",
3264
- "bg-[var(--tiger-surface,#ffffff)]",
3600
+ "bg-transparent",
3265
3601
  "text-[var(--tiger-text,#111827)]",
3266
3602
  "focus:outline-none",
3267
- "focus:ring-2",
3268
- "transition-colors",
3269
- "disabled:bg-[var(--tiger-surface-muted,#f3f4f6)]",
3270
3603
  "disabled:text-[var(--tiger-text-muted,#6b7280)]",
3271
3604
  "disabled:cursor-not-allowed",
3272
3605
  "placeholder:text-[var(--tiger-text-muted,#6b7280)]"
3273
3606
  ];
3274
- var STATUS_CLASSES = {
3607
+ var INPUT_CHROME_BASE_CLASSES = [
3608
+ "border",
3609
+ "rounded-[var(--tiger-radius-md,0.5rem)]",
3610
+ "bg-[var(--tiger-surface,#ffffff)]",
3611
+ "transition-colors"
3612
+ ];
3613
+ var NATIVE_CHROME_FOCUS_CLASSES = [
3614
+ "focus:ring-2",
3615
+ "disabled:bg-[var(--tiger-surface-muted,#f3f4f6)]"
3616
+ ];
3617
+ var WRAPPER_CHROME_FOCUS_CLASSES = [
3618
+ "focus-within:ring-2",
3619
+ "has-[:disabled]:bg-[var(--tiger-surface-muted,#f3f4f6)]"
3620
+ ];
3621
+ var NATIVE_STATUS_CLASSES = {
3275
3622
  default: "border-[var(--tiger-border,#e5e7eb)] focus:ring-[var(--tiger-primary,#2563eb)]/40 focus:border-transparent",
3276
3623
  error: "border-red-500 focus:ring-red-500 focus:border-red-500 text-red-900 placeholder-red-300",
3277
3624
  success: "border-green-500 focus:ring-green-500 focus:border-green-500 text-green-900 placeholder-green-300",
3278
3625
  warning: "border-yellow-500 focus:ring-yellow-500 focus:border-yellow-500 text-yellow-900 placeholder-yellow-300"
3279
3626
  };
3627
+ var WRAPPER_STATUS_CLASSES = {
3628
+ default: "border-[var(--tiger-border,#e5e7eb)] focus-within:ring-[var(--tiger-primary,#2563eb)]/40 focus-within:border-transparent",
3629
+ error: "border-red-500 focus-within:ring-red-500 focus-within:border-red-500",
3630
+ success: "border-green-500 focus-within:ring-green-500 focus-within:border-green-500",
3631
+ warning: "border-yellow-500 focus-within:ring-yellow-500 focus-within:border-yellow-500"
3632
+ };
3633
+ var FIELD_STATUS_CLASSES = {
3634
+ default: "",
3635
+ error: "text-red-900 placeholder-red-300",
3636
+ success: "text-green-900 placeholder-green-300",
3637
+ warning: "text-yellow-900 placeholder-yellow-300"
3638
+ };
3280
3639
  var INPUT_SIZE_CLASSES = {
3281
3640
  sm: "py-1 text-sm",
3282
3641
  md: "py-2 text-base",
3283
3642
  lg: "py-3 text-lg"
3284
3643
  };
3285
3644
  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" }
3645
+ sm: {
3646
+ left: "pl-2",
3647
+ right: "pr-2",
3648
+ prefixLeft: "pl-8",
3649
+ suffixRight: "pr-8",
3650
+ dualSuffixRight: "pr-16"
3651
+ },
3652
+ md: {
3653
+ left: "pl-3",
3654
+ right: "pr-3",
3655
+ prefixLeft: "pl-10",
3656
+ suffixRight: "pr-10",
3657
+ dualSuffixRight: "pr-20"
3658
+ },
3659
+ lg: {
3660
+ left: "pl-4",
3661
+ right: "pr-4",
3662
+ prefixLeft: "pl-12",
3663
+ suffixRight: "pr-12",
3664
+ dualSuffixRight: "pr-24"
3665
+ }
3289
3666
  };
3290
- function getInputClasses(options = {}) {
3291
- const { size: size2 = "md", status = "default", hasPrefix, hasSuffix } = options;
3667
+ var INPUT_SUFFIX_SLOT_INSET = {
3668
+ sm: "right-8",
3669
+ md: "right-10",
3670
+ lg: "right-12"
3671
+ };
3672
+ function getInputLayoutClasses(options = {}) {
3673
+ const { size: size2 = "md", hasPrefix, hasSuffix, hasDualSuffix } = options;
3292
3674
  const pad = INPUT_PADDING[size2];
3293
3675
  return classNames(
3294
- ...BASE_INPUT_CLASSES,
3295
3676
  INPUT_SIZE_CLASSES[size2],
3296
- STATUS_CLASSES[status],
3297
3677
  hasPrefix ? pad.prefixLeft : pad.left,
3298
- hasSuffix ? pad.suffixRight : pad.right
3678
+ hasDualSuffix ? pad.dualSuffixRight : hasSuffix ? pad.suffixRight : pad.right
3679
+ );
3680
+ }
3681
+ function getInputChromeClasses(status = "default") {
3682
+ return classNames(
3683
+ ...INPUT_CHROME_BASE_CLASSES,
3684
+ ...WRAPPER_CHROME_FOCUS_CLASSES,
3685
+ WRAPPER_STATUS_CLASSES[status]
3686
+ );
3687
+ }
3688
+ function getInputFieldClasses(options = {}) {
3689
+ const { status = "default" } = options;
3690
+ return classNames(
3691
+ ...INPUT_FIELD_BASE_CLASSES,
3692
+ FIELD_STATUS_CLASSES[status],
3693
+ getInputLayoutClasses(options)
3694
+ );
3695
+ }
3696
+ function getInputClasses(options = {}) {
3697
+ const { status = "default" } = options;
3698
+ return classNames(
3699
+ "w-full",
3700
+ ...INPUT_CHROME_BASE_CLASSES,
3701
+ "text-[var(--tiger-text,#111827)]",
3702
+ "focus:outline-none",
3703
+ ...NATIVE_CHROME_FOCUS_CLASSES,
3704
+ "disabled:text-[var(--tiger-text-muted,#6b7280)]",
3705
+ "disabled:cursor-not-allowed",
3706
+ "placeholder:text-[var(--tiger-text-muted,#6b7280)]",
3707
+ NATIVE_STATUS_CLASSES[status],
3708
+ getInputLayoutClasses(options)
3299
3709
  );
3300
3710
  }
3301
- function getInputWrapperClasses() {
3302
- return "relative w-full";
3711
+ function getInputWrapperClasses(status) {
3712
+ return classNames(
3713
+ "relative w-full",
3714
+ status !== void 0 ? getInputChromeClasses(status) : void 0
3715
+ );
3303
3716
  }
3304
3717
  function getInputAffixClasses(position, size2 = "md") {
3305
3718
  const base = "absolute top-0 bottom-0 flex items-center justify-center text-gray-500";
@@ -3311,26 +3724,23 @@ function getInputAffixClasses(position, size2 = "md") {
3311
3724
  }[size2];
3312
3725
  return classNames(base, posClass, widthClass);
3313
3726
  }
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
- );
3727
+ function getInputErrorClasses(_size = "md") {
3728
+ return classNames("text-red-500 text-sm mt-1 text-left break-words");
3320
3729
  }
3321
- function getInputClearButtonClasses(size2 = "md") {
3730
+ function getInputTrailingButtonClasses(size2, rightClass) {
3322
3731
  return classNames(
3323
- "absolute inset-y-0 right-0 flex items-center cursor-pointer",
3732
+ "absolute inset-y-0 flex items-center cursor-pointer",
3733
+ rightClass,
3324
3734
  "text-[var(--tiger-text-muted,#6b7280)] hover:text-[var(--tiger-text,#111827)]",
3325
3735
  INPUT_PADDING[size2].right
3326
3736
  );
3327
3737
  }
3738
+ function getInputClearButtonClasses(size2 = "md", options = {}) {
3739
+ const rightClass = options.offset ? INPUT_SUFFIX_SLOT_INSET[size2] : "right-0";
3740
+ return getInputTrailingButtonClasses(size2, rightClass);
3741
+ }
3328
3742
  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
- );
3743
+ return getInputTrailingButtonClasses(size2, "right-0");
3334
3744
  }
3335
3745
  function getInputCountClasses(isOverLimit = false) {
3336
3746
  return classNames(
@@ -3355,7 +3765,7 @@ function getInputNumberWrapperClasses(disabled) {
3355
3765
  disabled ? "bg-[var(--tiger-surface-muted,#f3f4f6)] cursor-not-allowed opacity-60" : "hover:border-[var(--tiger-primary,#2563eb)]"
3356
3766
  );
3357
3767
  }
3358
- var WRAPPER_STATUS_CLASSES = {
3768
+ var WRAPPER_STATUS_CLASSES2 = {
3359
3769
  default: "border-[var(--tiger-border,#e5e7eb)]",
3360
3770
  error: "border-red-500",
3361
3771
  success: "border-green-500",
@@ -3368,7 +3778,7 @@ var WRAPPER_FOCUS_STATUS_CLASSES = {
3368
3778
  warning: "ring-yellow-500"
3369
3779
  };
3370
3780
  function getInputNumberStatusClasses(status = "default") {
3371
- return WRAPPER_STATUS_CLASSES[status];
3781
+ return WRAPPER_STATUS_CLASSES2[status];
3372
3782
  }
3373
3783
  function getInputNumberFocusRingColor(status = "default") {
3374
3784
  return WRAPPER_FOCUS_STATUS_CLASSES[status];
@@ -4115,11 +4525,26 @@ var radioGroupDefaultClasses = "space-y-2";
4115
4525
  var getRadioGroupClasses = ({ className } = {}) => classNames(className, !className && radioGroupDefaultClasses);
4116
4526
 
4117
4527
  // src/utils/date-utils.ts
4528
+ var DATE_ONLY_ISO_RE = /^\s*(\d{4})-(\d{2})-(\d{2})\s*$/;
4529
+ function parseDateOnlyLocal(value) {
4530
+ const match = DATE_ONLY_ISO_RE.exec(value);
4531
+ if (!match) return void 0;
4532
+ const year = Number(match[1]);
4533
+ const month = Number(match[2]);
4534
+ const day = Number(match[3]);
4535
+ const local = new Date(year, month - 1, day);
4536
+ if (local.getFullYear() !== year || local.getMonth() !== month - 1 || local.getDate() !== day) {
4537
+ return null;
4538
+ }
4539
+ return local;
4540
+ }
4118
4541
  function parseDate(value) {
4119
4542
  if (!value) return null;
4120
4543
  if (value instanceof Date) {
4121
4544
  return isNaN(value.getTime()) ? null : value;
4122
4545
  }
4546
+ const dateOnly = parseDateOnlyLocal(value);
4547
+ if (dateOnly !== void 0) return dateOnly;
4123
4548
  const parsed = new Date(value);
4124
4549
  return isNaN(parsed.getTime()) ? null : parsed;
4125
4550
  }
@@ -4908,7 +5333,7 @@ function getUploadButtonClasses(disabled) {
4908
5333
  "px-4",
4909
5334
  "py-2",
4910
5335
  "border",
4911
- "border-gray-300",
5336
+ "border-[var(--tiger-border,#d1d5db)]",
4912
5337
  "rounded-[var(--tiger-radius-md,0.5rem)]",
4913
5338
  "text-sm",
4914
5339
  "font-medium",
@@ -4916,7 +5341,7 @@ function getUploadButtonClasses(disabled) {
4916
5341
  "duration-200"
4917
5342
  ];
4918
5343
  const stateClasses = disabled ? ["bg-gray-100", "text-gray-400", "cursor-not-allowed"] : [
4919
- "bg-white",
5344
+ "bg-[var(--tiger-surface,#ffffff)]",
4920
5345
  "text-gray-700",
4921
5346
  "hover:bg-gray-50",
4922
5347
  "focus:outline-none",
@@ -4960,7 +5385,7 @@ function getDragAreaClasses(isDragging, disabled) {
4960
5385
  ];
4961
5386
  } else {
4962
5387
  stateClasses = [
4963
- "border-gray-300",
5388
+ "border-[var(--tiger-border,#d1d5db)]",
4964
5389
  "hover:border-[var(--tiger-primary,#2563eb)]",
4965
5390
  "hover:bg-gray-50",
4966
5391
  "cursor-pointer",
@@ -4976,9 +5401,9 @@ var FILE_LIST_STATUS_CLASSES = {
4976
5401
  error: ["bg-red-50", "text-red-700", "hover:bg-red-100"]
4977
5402
  };
4978
5403
  var PICTURE_CARD_STATUS_CLASSES = {
4979
- ready: ["border-gray-300"],
5404
+ ready: ["border-[var(--tiger-border,#d1d5db)]"],
4980
5405
  uploading: ["border-blue-400", "bg-blue-50"],
4981
- success: ["border-gray-300", "hover:border-blue-400"],
5406
+ success: ["border-[var(--tiger-border,#d1d5db)]", "hover:border-blue-400"],
4982
5407
  error: ["border-red-400", "bg-red-50"]
4983
5408
  };
4984
5409
  function getFileListItemClasses(status) {
@@ -5250,7 +5675,7 @@ function getSidebarStyle(collapsed, width = "256px", collapsedWidth = "64px") {
5250
5675
  const w = collapsed ? collapsedWidth : width;
5251
5676
  return { width: w, minWidth: w };
5252
5677
  }
5253
- var layoutContentClasses = "tiger-content flex-1 bg-[var(--tiger-layout-content-bg,#f9fafb)]";
5678
+ var layoutContentClasses = "tiger-content flex-1 bg-[var(--tiger-layout-content-bg,var(--tiger-surface-muted,#f9fafb))]";
5254
5679
  function getLayoutContentClasses(padding = true) {
5255
5680
  return classNames(
5256
5681
  layoutContentClasses,
@@ -5665,6 +6090,7 @@ function getSortIconClasses(active) {
5665
6090
  active ? "text-[var(--tiger-primary,#2563eb)]" : "text-gray-400"
5666
6091
  );
5667
6092
  }
6093
+ var tableSortButtonClasses = "inline-flex items-center appearance-none border-0 bg-transparent p-0 font-[inherit] text-inherit cursor-pointer";
5668
6094
  var tableEmptyStateClasses = "text-center py-12 text-[var(--tiger-text-muted,#6b7280)]";
5669
6095
  var tableLoadingOverlayClasses = classNames(
5670
6096
  "absolute inset-0 bg-[var(--tiger-surface,#ffffff)]/80 flex items-center justify-center z-20"
@@ -5688,13 +6114,18 @@ function defaultSortFn(a, b) {
5688
6114
  }
5689
6115
  return String(a).localeCompare(String(b));
5690
6116
  }
5691
- function sortData(data, key, direction, sortFn) {
6117
+ function getTableColumnDataKey(column) {
6118
+ return column.dataKey || column.key;
6119
+ }
6120
+ function sortData(data, key, direction, sortFn, columns) {
5692
6121
  if (!direction || !key) {
5693
6122
  return data;
5694
6123
  }
6124
+ const column = columns?.find((col) => col.key === key);
6125
+ const fieldKey = column ? getTableColumnDataKey(column) : key;
5695
6126
  const sortedData = [...data].sort((a, b) => {
5696
- const aValue = a[key];
5697
- const bValue = b[key];
6127
+ const aValue = a[fieldKey];
6128
+ const bValue = b[fieldKey];
5698
6129
  const compareResult = sortFn ? sortFn(aValue, bValue) : defaultSortFn(aValue, bValue);
5699
6130
  return direction === "asc" ? compareResult : -compareResult;
5700
6131
  });
@@ -5721,8 +6152,10 @@ function filterTableData(data, columns, filters) {
5721
6152
  if (!filters || Object.keys(filters).length === 0) {
5722
6153
  return data;
5723
6154
  }
6155
+ const columnByKey = /* @__PURE__ */ new Map();
5724
6156
  const filterFnByKey = /* @__PURE__ */ new Map();
5725
6157
  for (const column of columns) {
6158
+ columnByKey.set(column.key, column);
5726
6159
  if (column.filter?.filterFn) {
5727
6160
  filterFnByKey.set(column.key, column.filter.filterFn);
5728
6161
  }
@@ -5732,7 +6165,9 @@ function filterTableData(data, columns, filters) {
5732
6165
  if (filterValue === "" || filterValue === null || filterValue === void 0) {
5733
6166
  return true;
5734
6167
  }
5735
- const cellValue = record[key];
6168
+ const column = columnByKey.get(key);
6169
+ const fieldKey = column ? getTableColumnDataKey(column) : key;
6170
+ const cellValue = record[fieldKey];
5736
6171
  const customFn = filterFnByKey.get(key);
5737
6172
  if (customFn) {
5738
6173
  return customFn(cellValue, filterValue);
@@ -5991,6 +6426,9 @@ function getInitials(name) {
5991
6426
  const words = trimmed.split(/\s+/).filter(Boolean);
5992
6427
  if (words.length === 1) {
5993
6428
  const firstWord = words[0];
6429
+ if (firstWord.length <= 2) {
6430
+ return firstWord.toUpperCase();
6431
+ }
5994
6432
  const hasNonASCII = /[^\x20-\x7E]/.test(firstWord);
5995
6433
  return hasNonASCII ? firstWord.slice(0, 2).toUpperCase() : firstWord.charAt(0).toUpperCase();
5996
6434
  }
@@ -6411,10 +6849,10 @@ function getTreeKeyboardAction(ctx) {
6411
6849
  return null;
6412
6850
  }
6413
6851
  }
6414
- var treeBaseClasses = "w-full bg-white rounded-[var(--tiger-radius-md,0.5rem)]";
6852
+ 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
6853
  var treeNodeWrapperClasses = "select-none";
6416
6854
  var treeNodeContentClasses = "flex items-center px-2 py-1.5 cursor-pointer rounded transition-colors duration-200";
6417
- var treeNodeHoverClasses = "hover:bg-gray-50";
6855
+ var treeNodeHoverClasses = "hover:bg-[var(--tiger-tree-node-hover,var(--tiger-surface-muted,#f9fafb))]";
6418
6856
  var treeNodeSelectedClasses = "bg-[color-mix(in_srgb,var(--tiger-primary,#2563eb)_10%,transparent)] text-[var(--tiger-primary,#2563eb)]";
6419
6857
  var treeNodeDisabledClasses = "opacity-50 cursor-not-allowed";
6420
6858
  var treeNodeIndentClasses = "inline-block w-6";
@@ -6425,8 +6863,8 @@ var treeNodeIconClasses = "mr-2 flex-shrink-0";
6425
6863
  var treeNodeLabelClasses = "flex-1 truncate";
6426
6864
  var treeNodeChildrenClasses = "ml-6";
6427
6865
  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";
6866
+ var treeEmptyStateClasses = "py-8 text-center text-[var(--tiger-text-secondary,#6b7280)]";
6867
+ var treeLineClasses = "border-l border-[var(--tiger-border,#e5e7eb)]";
6430
6868
  function getTreeNodeClasses(selected, disabled, blockNode = false) {
6431
6869
  return classNames(
6432
6870
  treeNodeContentClasses,
@@ -6667,10 +7105,10 @@ function checkedSetsFromState(state) {
6667
7105
  }
6668
7106
 
6669
7107
  // src/utils/skeleton-utils.ts
6670
- var skeletonBaseClasses = "bg-[var(--tiger-skeleton-bg,#e5e7eb)] rounded-[var(--tiger-radius-sm,0.375rem)]";
7108
+ var skeletonBaseClasses = "bg-[var(--tiger-skeleton-bg,var(--tiger-surface-muted,#f9fafb))] rounded-[var(--tiger-radius-sm,0.375rem)]";
6671
7109
  var skeletonAnimationClasses = {
6672
7110
  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%]",
7111
+ 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
7112
  none: ""
6675
7113
  };
6676
7114
  var skeletonVariantDefaults = {
@@ -6965,7 +7403,7 @@ var menuCollapsedModeClasses = {
6965
7403
  vertical: "flex-col border-r",
6966
7404
  inline: "flex-col"
6967
7405
  };
6968
- var menuLightThemeClasses = "[--tiger-surface:#ffffff] [--tiger-text:#111827] [--tiger-text-muted:#6b7280] [--tiger-border:#e5e7eb] [--tiger-surface-muted:#f9fafb]";
7406
+ var menuLightThemeClasses = "";
6969
7407
  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
7408
  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
7409
  var menuItemHoverLightClasses = "hover:bg-[var(--tiger-surface-muted,#f9fafb)]";
@@ -6996,7 +7434,10 @@ function themeClass(theme, light, dark) {
6996
7434
  function getMenuClasses(mode, theme, collapsed) {
6997
7435
  const modeClasses = collapsed && (mode === "vertical" || mode === "inline") ? menuCollapsedModeClasses[mode] : menuModeClasses[mode];
6998
7436
  const classes = [menuBaseClasses, modeClasses];
6999
- classes.push(themeClass(theme, menuLightThemeClasses, menuDarkThemeClasses));
7437
+ const themeClasses = themeClass(theme, menuLightThemeClasses, menuDarkThemeClasses);
7438
+ if (themeClasses) {
7439
+ classes.push(themeClasses);
7440
+ }
7000
7441
  if (collapsed && (mode === "vertical" || mode === "inline")) {
7001
7442
  classes.push(menuCollapsedClasses);
7002
7443
  }
@@ -7622,8 +8063,8 @@ function getPageNumbers(current, totalPages, showLessItems = false) {
7622
8063
  }
7623
8064
  return pages;
7624
8065
  }
7625
- function defaultTotalText(total, _range) {
7626
- return `\u5171 ${total} \u6761`;
8066
+ function defaultTotalText(total, range) {
8067
+ return formatPaginationTotal(DEFAULT_PAGINATION_LABELS.totalText, total, range);
7627
8068
  }
7628
8069
  var PAGINATION_FULL_MODE_PAGE_THRESHOLD = 3;
7629
8070
  function resolvePaginationDisplayMode(totalPages, config) {
@@ -8229,31 +8670,31 @@ var messagePositionClasses = {
8229
8670
  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
8671
  var defaultMessageThemeColors = {
8231
8672
  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)]"
8673
+ bg: "bg-[var(--tiger-message-info-bg,var(--tiger-surface,#ffffff))]",
8674
+ border: "border-[var(--tiger-message-info-border,var(--tiger-border,#e5e7eb))]",
8675
+ text: "text-[var(--tiger-message-info-text,var(--tiger-info,#3b82f6))]",
8676
+ icon: "text-[var(--tiger-message-info-icon,var(--tiger-info,#3b82f6))]"
8236
8677
  },
8237
8678
  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)]"
8679
+ bg: "bg-[var(--tiger-message-success-bg,var(--tiger-surface,#ffffff))]",
8680
+ border: "border-[var(--tiger-message-success-border,var(--tiger-border,#e5e7eb))]",
8681
+ text: "text-[var(--tiger-message-success-text,var(--tiger-success,#16a34a))]",
8682
+ icon: "text-[var(--tiger-message-success-icon,var(--tiger-success,#16a34a))]"
8242
8683
  },
8243
8684
  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)]"
8685
+ bg: "bg-[var(--tiger-message-warning-bg,var(--tiger-surface,#ffffff))]",
8686
+ border: "border-[var(--tiger-message-warning-border,var(--tiger-border,#e5e7eb))]",
8687
+ text: "text-[var(--tiger-message-warning-text,var(--tiger-warning,#d97706))]",
8688
+ icon: "text-[var(--tiger-message-warning-icon,var(--tiger-warning,#d97706))]"
8248
8689
  },
8249
8690
  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)]"
8691
+ bg: "bg-[var(--tiger-message-error-bg,var(--tiger-surface,#ffffff))]",
8692
+ border: "border-[var(--tiger-message-error-border,var(--tiger-border,#e5e7eb))]",
8693
+ text: "text-[var(--tiger-message-error-text,var(--tiger-error,#dc2626))]",
8694
+ icon: "text-[var(--tiger-message-error-icon,var(--tiger-error,#dc2626))]"
8254
8695
  },
8255
8696
  loading: {
8256
- bg: "bg-[var(--tiger-message-loading-bg,var(--tiger-surface-muted,#f3f4f6))]",
8697
+ bg: "bg-[var(--tiger-message-loading-bg,var(--tiger-surface-muted,#f9fafb))]",
8257
8698
  border: "border-[var(--tiger-message-loading-border,var(--tiger-border,#e5e7eb))]",
8258
8699
  text: "text-[var(--tiger-message-loading-text,var(--tiger-text,#111827))]",
8259
8700
  icon: "text-[var(--tiger-message-loading-icon,var(--tiger-text-muted,#6b7280))]"
@@ -8420,6 +8861,7 @@ var loadingColorClasses = {
8420
8861
  };
8421
8862
  var loadingContainerBaseClasses = "inline-flex flex-col items-center justify-center gap-2";
8422
8863
  var loadingFullscreenBaseClasses = "fixed inset-0 z-50 flex items-center justify-center";
8864
+ var DEFAULT_LOADING_BACKGROUND = "var(--tiger-loading-mask, color-mix(in srgb, var(--tiger-surface, #ffffff) 90%, transparent))";
8423
8865
  var loadingSpinnerBaseClasses = "animate-spin";
8424
8866
  var loadingOverlaySpinnerBaseClasses = "animate-spin h-8 w-8 text-[var(--tiger-primary,#2563eb)]";
8425
8867
  function getLoadingOverlaySpinnerClasses(customClassName) {
@@ -8863,6 +9305,59 @@ function createLoadingBarController(hooks = {}) {
8863
9305
  }
8864
9306
 
8865
9307
  // src/utils/floating-popup-utils.ts
9308
+ var DEFAULT_FLOATING_HOVER_HIDE_DELAY_MS = 100;
9309
+ var DEFAULT_FLOATING_HOVER_SHOW_DELAY_MS = 0;
9310
+ function createFloatingHoverDelayController(options) {
9311
+ const hideDelay = options.hideDelay ?? DEFAULT_FLOATING_HOVER_HIDE_DELAY_MS;
9312
+ const showDelay = options.showDelay ?? DEFAULT_FLOATING_HOVER_SHOW_DELAY_MS;
9313
+ let showTimer = null;
9314
+ let hideTimer = null;
9315
+ const clearShowTimer = () => {
9316
+ if (showTimer === null) return;
9317
+ clearTimeout(showTimer);
9318
+ showTimer = null;
9319
+ };
9320
+ const clearHideTimer = () => {
9321
+ if (hideTimer === null) return;
9322
+ clearTimeout(hideTimer);
9323
+ hideTimer = null;
9324
+ };
9325
+ const cancel = () => {
9326
+ clearShowTimer();
9327
+ clearHideTimer();
9328
+ };
9329
+ const enter = () => {
9330
+ clearHideTimer();
9331
+ if (showDelay <= 0) {
9332
+ clearShowTimer();
9333
+ options.show();
9334
+ return;
9335
+ }
9336
+ if (showTimer !== null) return;
9337
+ showTimer = setTimeout(() => {
9338
+ showTimer = null;
9339
+ options.show();
9340
+ }, showDelay);
9341
+ };
9342
+ const leave = () => {
9343
+ clearShowTimer();
9344
+ if (hideDelay <= 0) {
9345
+ clearHideTimer();
9346
+ options.hide();
9347
+ return;
9348
+ }
9349
+ if (hideTimer !== null) return;
9350
+ hideTimer = setTimeout(() => {
9351
+ hideTimer = null;
9352
+ options.hide();
9353
+ }, hideDelay);
9354
+ };
9355
+ const closeNow = () => {
9356
+ cancel();
9357
+ options.hide();
9358
+ };
9359
+ return { enter, leave, cancel, dispose: cancel, closeNow };
9360
+ }
8866
9361
  function createFloatingIdFactory(prefix) {
8867
9362
  let counter = 0;
8868
9363
  return () => `tiger-${prefix}-${++counter}`;
@@ -9136,13 +9631,15 @@ var codeBlockContainerClasses = "relative rounded-[var(--tiger-radius-md,0.5rem)
9136
9631
  var codeBlockPreClasses = "m-0 overflow-auto p-4 text-sm leading-relaxed font-mono whitespace-pre";
9137
9632
  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
9633
  var codeBlockCopyButtonCopiedClasses = "border-[var(--tiger-primary,#2563eb)] text-[var(--tiger-primary,#2563eb)]";
9634
+ var codeBlockCopyButtonFailedClasses = "border-[var(--tiger-error,#ef4444)] text-[var(--tiger-error,#ef4444)]";
9139
9635
  function getCodeBlockContainerClasses(...classes) {
9140
9636
  return classNames(codeBlockContainerClasses, ...classes);
9141
9637
  }
9142
- function getCodeBlockCopyButtonClasses(isCopied, ...classes) {
9638
+ function getCodeBlockCopyButtonClasses(status = "idle", ...classes) {
9143
9639
  return classNames(
9144
9640
  codeBlockCopyButtonBaseClasses,
9145
- isCopied && codeBlockCopyButtonCopiedClasses,
9641
+ status === "copied" && codeBlockCopyButtonCopiedClasses,
9642
+ status === "failed" && codeBlockCopyButtonFailedClasses,
9146
9643
  ...classes
9147
9644
  );
9148
9645
  }
@@ -9279,7 +9776,7 @@ var textDecorationClasses = {
9279
9776
  };
9280
9777
  var defaultTagThemeColors = {
9281
9778
  default: {
9282
- bg: "bg-[var(--tiger-tag-default-bg,#f3f4f6)]",
9779
+ bg: "bg-[var(--tiger-tag-default-bg,var(--tiger-surface-muted,#f9fafb))]",
9283
9780
  text: "text-[var(--tiger-text,#111827)]",
9284
9781
  border: "border-[var(--tiger-border,#e5e7eb)]",
9285
9782
  closeBgHover: "hover:bg-[var(--tiger-tag-default-close-hover,#e5e7eb)]"
@@ -9386,44 +9883,44 @@ function getProgressTextColorClasses(variant, colors = defaultProgressThemeColor
9386
9883
  }
9387
9884
  var defaultAlertThemeColors = {
9388
9885
  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)]"
9886
+ bg: "bg-[var(--tiger-alert-success-bg,var(--tiger-surface,#ffffff))]",
9887
+ border: "border-[var(--tiger-alert-success-border,var(--tiger-border,#e5e7eb))]",
9888
+ icon: "text-[var(--tiger-alert-success-icon,var(--tiger-success,#16a34a))]",
9889
+ title: "text-[var(--tiger-alert-success-title,var(--tiger-success,#16a34a))]",
9890
+ description: "text-[var(--tiger-alert-success-description,var(--tiger-text-secondary,#6b7280))]",
9891
+ closeButton: "text-[var(--tiger-alert-success-close,var(--tiger-success,#16a34a))]",
9892
+ closeButtonHover: "hover:bg-[var(--tiger-alert-success-close-hover-bg,var(--tiger-surface-muted,#f9fafb))]",
9893
+ focus: "focus:ring-[color:var(--tiger-alert-success-ring,var(--tiger-success,#16a34a))]"
9397
9894
  },
9398
9895
  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)]"
9896
+ bg: "bg-[var(--tiger-alert-warning-bg,var(--tiger-surface,#ffffff))]",
9897
+ border: "border-[var(--tiger-alert-warning-border,var(--tiger-border,#e5e7eb))]",
9898
+ icon: "text-[var(--tiger-alert-warning-icon,var(--tiger-warning,#d97706))]",
9899
+ title: "text-[var(--tiger-alert-warning-title,var(--tiger-warning,#d97706))]",
9900
+ description: "text-[var(--tiger-alert-warning-description,var(--tiger-text-secondary,#6b7280))]",
9901
+ closeButton: "text-[var(--tiger-alert-warning-close,var(--tiger-warning,#d97706))]",
9902
+ closeButtonHover: "hover:bg-[var(--tiger-alert-warning-close-hover-bg,var(--tiger-surface-muted,#f9fafb))]",
9903
+ focus: "focus:ring-[color:var(--tiger-alert-warning-ring,var(--tiger-warning,#d97706))]"
9407
9904
  },
9408
9905
  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)]"
9906
+ bg: "bg-[var(--tiger-alert-error-bg,var(--tiger-surface,#ffffff))]",
9907
+ border: "border-[var(--tiger-alert-error-border,var(--tiger-border,#e5e7eb))]",
9908
+ icon: "text-[var(--tiger-alert-error-icon,var(--tiger-error,#dc2626))]",
9909
+ title: "text-[var(--tiger-alert-error-title,var(--tiger-error,#dc2626))]",
9910
+ description: "text-[var(--tiger-alert-error-description,var(--tiger-text-secondary,#6b7280))]",
9911
+ closeButton: "text-[var(--tiger-alert-error-close,var(--tiger-error,#dc2626))]",
9912
+ closeButtonHover: "hover:bg-[var(--tiger-alert-error-close-hover-bg,var(--tiger-surface-muted,#f9fafb))]",
9913
+ focus: "focus:ring-[color:var(--tiger-alert-error-ring,var(--tiger-error,#dc2626))]"
9417
9914
  },
9418
9915
  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)]"
9916
+ bg: "bg-[var(--tiger-alert-info-bg,var(--tiger-surface,#ffffff))]",
9917
+ border: "border-[var(--tiger-alert-info-border,var(--tiger-border,#e5e7eb))]",
9918
+ icon: "text-[var(--tiger-alert-info-icon,var(--tiger-info,#3b82f6))]",
9919
+ title: "text-[var(--tiger-alert-info-title,var(--tiger-info,#3b82f6))]",
9920
+ description: "text-[var(--tiger-alert-info-description,var(--tiger-text-secondary,#6b7280))]",
9921
+ closeButton: "text-[var(--tiger-alert-info-close,var(--tiger-info,#3b82f6))]",
9922
+ closeButtonHover: "hover:bg-[var(--tiger-alert-info-close-hover-bg,var(--tiger-surface-muted,#f9fafb))]",
9923
+ focus: "focus:ring-[color:var(--tiger-alert-info-ring,var(--tiger-info,#3b82f6))]"
9427
9924
  }
9428
9925
  };
9429
9926
  function getAlertTypeClasses(type, colors = defaultAlertThemeColors) {
@@ -9975,7 +10472,7 @@ var nextIconPath = "M9 5l7 7-7 7";
9975
10472
  var previewCloseIconPath = "M6 18L18 6M6 6l12 12";
9976
10473
  var imagePreviewMaskClasses = "fixed inset-0 bg-[var(--tiger-image-mask,rgba(0,0,0,0.85))] transition-opacity";
9977
10474
  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";
10475
+ var imagePreviewImgClasses = "max-h-[90vh] max-w-[90vw] select-none transition-transform duration-150 ease-out cursor-grab active:cursor-grabbing touch-none";
9979
10476
  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
10477
  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
10478
  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 +11173,19 @@ function scrollToAnchor(href, container, targetOffset = 0) {
10676
11173
  const scrollTarget = container === window ? window : container;
10677
11174
  scrollTarget.scrollTo({ top, behavior: "smooth" });
10678
11175
  }
11176
+ function findActiveAnchorAtOffsetLine(links, getSectionTop, offsetLine) {
11177
+ if (links.length === 0) {
11178
+ return "";
11179
+ }
11180
+ for (let i = links.length - 1; i >= 0; i--) {
11181
+ const href = links[i];
11182
+ const top = getSectionTop(href);
11183
+ if (top !== null && top <= offsetLine) {
11184
+ return href;
11185
+ }
11186
+ }
11187
+ return links[0] || "";
11188
+ }
10679
11189
  function findActiveAnchor(links, container, bounds = 5, targetOffset = 0) {
10680
11190
  if (links.length === 0) {
10681
11191
  return "";
@@ -10684,24 +11194,103 @@ function findActiveAnchor(links, container, bounds = 5, targetOffset = 0) {
10684
11194
  return links[0] || "";
10685
11195
  }
10686
11196
  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;
11197
+ const offsetLine = scrollTop + targetOffset + bounds;
11198
+ return findActiveAnchorAtOffsetLine(
11199
+ links,
11200
+ (href) => {
11201
+ const element = getAnchorTargetElement(href);
11202
+ if (!element) {
11203
+ return null;
10694
11204
  }
11205
+ return getElementOffsetTop(element, container);
11206
+ },
11207
+ offsetLine
11208
+ );
11209
+ }
11210
+ var DEFAULT_SCROLL_LOCK_IDLE_MS = 150;
11211
+ var DEFAULT_SCROLL_LOCK_TIMEOUT_MS = 2e3;
11212
+ function createProgrammaticScrollLock(getTarget, options = {}) {
11213
+ const idleMs = options.idleMs ?? DEFAULT_SCROLL_LOCK_IDLE_MS;
11214
+ const timeoutMs = options.timeoutMs ?? DEFAULT_SCROLL_LOCK_TIMEOUT_MS;
11215
+ let locked = false;
11216
+ let idleTimer = null;
11217
+ let safetyTimer = null;
11218
+ let attachedTarget = null;
11219
+ let listeningScrollEnd = false;
11220
+ const clearTimers = () => {
11221
+ if (idleTimer !== null) {
11222
+ clearTimeout(idleTimer);
11223
+ idleTimer = null;
11224
+ }
11225
+ if (safetyTimer !== null) {
11226
+ clearTimeout(safetyTimer);
11227
+ safetyTimer = null;
11228
+ }
11229
+ };
11230
+ const onScroll = () => {
11231
+ scheduleIdle();
11232
+ };
11233
+ const onScrollEnd = () => {
11234
+ unlock();
11235
+ };
11236
+ const detach = () => {
11237
+ if (!attachedTarget) {
11238
+ return;
10695
11239
  }
10696
- }
10697
- return links[0] || "";
11240
+ attachedTarget.removeEventListener("scroll", onScroll);
11241
+ if (listeningScrollEnd) {
11242
+ attachedTarget.removeEventListener("scrollend", onScrollEnd);
11243
+ }
11244
+ attachedTarget = null;
11245
+ listeningScrollEnd = false;
11246
+ };
11247
+ const unlock = () => {
11248
+ locked = false;
11249
+ clearTimers();
11250
+ detach();
11251
+ };
11252
+ const scheduleIdle = () => {
11253
+ if (idleTimer !== null) {
11254
+ clearTimeout(idleTimer);
11255
+ }
11256
+ idleTimer = setTimeout(() => {
11257
+ idleTimer = null;
11258
+ unlock();
11259
+ }, idleMs);
11260
+ };
11261
+ const lock = () => {
11262
+ clearTimers();
11263
+ detach();
11264
+ locked = true;
11265
+ if (isBrowser()) {
11266
+ const container = getTarget();
11267
+ const target = container === window ? window : container;
11268
+ attachedTarget = target;
11269
+ listeningScrollEnd = "onscrollend" in window;
11270
+ target.addEventListener("scroll", onScroll, { passive: true });
11271
+ if (listeningScrollEnd) {
11272
+ target.addEventListener("scrollend", onScrollEnd);
11273
+ }
11274
+ }
11275
+ scheduleIdle();
11276
+ safetyTimer = setTimeout(() => {
11277
+ safetyTimer = null;
11278
+ unlock();
11279
+ }, timeoutMs);
11280
+ };
11281
+ return {
11282
+ isLocked: () => locked,
11283
+ lock,
11284
+ unlock,
11285
+ dispose: unlock
11286
+ };
10698
11287
  }
10699
11288
  function createAnchorObserver(links, options) {
10700
11289
  if (!isBrowser()) return () => {
10701
11290
  };
10702
11291
  if (typeof IntersectionObserver === "undefined") return () => {
10703
11292
  };
10704
- const { offsetTop = 0, root = null, onChange } = options;
11293
+ const { offsetTop = 0, bounds = 5, root = null, onChange } = options;
10705
11294
  const targets = /* @__PURE__ */ new Map();
10706
11295
  for (const href of links) {
10707
11296
  const el = getAnchorTargetElement(href);
@@ -10709,30 +11298,24 @@ function createAnchorObserver(links, options) {
10709
11298
  }
10710
11299
  if (targets.size === 0) return () => {
10711
11300
  };
10712
- const visible = /* @__PURE__ */ new Set();
10713
11301
  const computeActive = () => {
10714
- for (const href of links) {
10715
- if (visible.has(href)) return href;
10716
- }
10717
11302
  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;
11303
+ const offsetLine = rootTop + offsetTop + bounds;
11304
+ return findActiveAnchorAtOffsetLine(
11305
+ links,
11306
+ (href) => {
11307
+ const el = getAnchorTargetElement(href);
11308
+ if (!el) {
11309
+ return null;
11310
+ }
11311
+ return el.getBoundingClientRect().top;
11312
+ },
11313
+ offsetLine
11314
+ );
10726
11315
  };
10727
11316
  let last = "";
10728
11317
  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
- }
11318
+ () => {
10736
11319
  const next = computeActive();
10737
11320
  if (next !== last) {
10738
11321
  last = next;
@@ -10741,9 +11324,8 @@ function createAnchorObserver(links, options) {
10741
11324
  },
10742
11325
  {
10743
11326
  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`,
11327
+ // Top inset at the offset line; 0 bottom so last sections still notify.
11328
+ rootMargin: `-${offsetTop}px 0px 0px 0px`,
10747
11329
  threshold: [0, 1]
10748
11330
  }
10749
11331
  );
@@ -10772,8 +11354,8 @@ var DEFAULT_CHART_COLORS = [
10772
11354
  "var(--tiger-chart-6,#ef4444)"
10773
11355
  ];
10774
11356
  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))"
11357
+ "var(--tiger-chart-split-1,color-mix(in oklab, var(--tiger-text) 4%, transparent))",
11358
+ "var(--tiger-chart-split-2,color-mix(in oklab, var(--tiger-text) 10%, transparent))"
10777
11359
  ];
10778
11360
  var PIE_EMPHASIS_SHADOW = "drop-shadow(0 4px 8px rgba(0,0,0,0.2))";
10779
11361
  var PIE_BASE_SHADOW = "drop-shadow(0 1px 2px rgba(0,0,0,0.06))";
@@ -10790,7 +11372,7 @@ function getScatterHoverShadow(color) {
10790
11372
  function getScatterHoverSize(baseSize) {
10791
11373
  return baseSize + 2;
10792
11374
  }
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}}`;
11375
+ 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
11376
  var SCATTER_ENTRANCE_CLASS = "tiger-scatter-entrance";
10795
11377
  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
11378
  var DONUT_ENTRANCE_CLASS = "tiger-donut-entrance";
@@ -11139,6 +11721,31 @@ function createPolygonPath(points) {
11139
11721
  " "
11140
11722
  );
11141
11723
  }
11724
+ function createPolygonRingPath(outerPoints, innerPoints = []) {
11725
+ const outer = createPolygonPath(outerPoints);
11726
+ if (!outer) return "";
11727
+ if (innerPoints.length === 0) return outer;
11728
+ const inner = createPolygonPath(innerPoints.slice().reverse());
11729
+ if (!inner) return outer;
11730
+ return `${outer} ${inner}`;
11731
+ }
11732
+ function createCircleRingPath(cx, cy, outerRadius, innerRadius = 0) {
11733
+ if (outerRadius <= 0) return "";
11734
+ const outer = [
11735
+ `M ${cx} ${cy - outerRadius}`,
11736
+ `A ${outerRadius} ${outerRadius} 0 1 1 ${cx} ${cy + outerRadius}`,
11737
+ `A ${outerRadius} ${outerRadius} 0 1 1 ${cx} ${cy - outerRadius}`,
11738
+ "Z"
11739
+ ].join(" ");
11740
+ if (innerRadius <= 0) return outer;
11741
+ const inner = [
11742
+ `M ${cx} ${cy - innerRadius}`,
11743
+ `A ${innerRadius} ${innerRadius} 0 1 0 ${cx} ${cy + innerRadius}`,
11744
+ `A ${innerRadius} ${innerRadius} 0 1 0 ${cx} ${cy - innerRadius}`,
11745
+ "Z"
11746
+ ].join(" ");
11747
+ return `${outer} ${inner}`;
11748
+ }
11142
11749
  function getRadarLabelAlign(angle) {
11143
11750
  const TWO_PI = Math.PI * 2;
11144
11751
  const a = (angle % TWO_PI + TWO_PI) % TWO_PI;
@@ -12111,6 +12718,10 @@ function layoutRect(items, x, y, w, h, gap, palette, out) {
12111
12718
  }
12112
12719
 
12113
12720
  // src/utils/sunburst-chart-utils.ts
12721
+ function getSunburstLabelPoint(arc, cx, cy) {
12722
+ const midRadius = (arc.innerRadius + arc.outerRadius) / 2;
12723
+ return polarToCartesian(cx, cy, midRadius, arc.midAngle);
12724
+ }
12114
12725
  function sumValue(d) {
12115
12726
  let v;
12116
12727
  if (d.children && d.children.length > 0) {
@@ -12170,7 +12781,9 @@ function computeSunburstArcs(data, opts) {
12170
12781
  endAngle: ea,
12171
12782
  color,
12172
12783
  path,
12173
- midAngle: (sa + ea) / 2
12784
+ midAngle: (sa + ea) / 2,
12785
+ innerRadius: iR,
12786
+ outerRadius: oR
12174
12787
  });
12175
12788
  if (item.children && item.children.length > 0) {
12176
12789
  layoutLevel(item.children, sa, ea, level + 1, colorIdx);
@@ -12510,6 +13123,45 @@ function getWatermarkOverlayStyle(opts) {
12510
13123
  };
12511
13124
  }
12512
13125
 
13126
+ // src/utils/viewport-floating-utils.ts
13127
+ var viewportFloatingBaseClasses = "fixed z-50";
13128
+ var viewportPlacementClasses = {
13129
+ "top-left": "top-0 left-0",
13130
+ "top-right": "top-0 right-0",
13131
+ "bottom-left": "bottom-0 left-0",
13132
+ "bottom-right": "bottom-0 right-0"
13133
+ };
13134
+ function toCssLength(value) {
13135
+ return typeof value === "number" ? `${value}px` : value;
13136
+ }
13137
+ function resolveAxisOffset(offset2) {
13138
+ if (offset2 === void 0) {
13139
+ return { x: 24, y: 24 };
13140
+ }
13141
+ if (typeof offset2 === "number" || typeof offset2 === "string") {
13142
+ return { x: offset2, y: offset2 };
13143
+ }
13144
+ return {
13145
+ x: offset2.x ?? 24,
13146
+ y: offset2.y ?? 24
13147
+ };
13148
+ }
13149
+ function getViewportOffsetStyle(placement, offset2) {
13150
+ const { x, y } = resolveAxisOffset(offset2);
13151
+ const style = {};
13152
+ if (placement.startsWith("top")) {
13153
+ style.top = toCssLength(y);
13154
+ } else {
13155
+ style.bottom = toCssLength(y);
13156
+ }
13157
+ if (placement.endsWith("left")) {
13158
+ style.left = toCssLength(x);
13159
+ } else {
13160
+ style.right = toCssLength(x);
13161
+ }
13162
+ return style;
13163
+ }
13164
+
12513
13165
  // src/utils/float-button-utils.ts
12514
13166
  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
13167
  var floatButtonShapeClasses = {
@@ -12526,13 +13178,23 @@ var floatButtonTypeClasses = {
12526
13178
  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
13179
  };
12528
13180
  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";
13181
+ var floatButtonGroupClasses = "z-50 flex flex-col-reverse items-center gap-3";
12530
13182
  var floatButtonGroupExpandClasses = "transition-all duration-200 ease-in-out";
13183
+ function getFloatButtonGroupClasses(options = {}) {
13184
+ const placement = options.placement ?? "bottom-right";
13185
+ const portal = options.portal ?? true;
13186
+ return classNames(
13187
+ portal ? viewportFloatingBaseClasses : "absolute z-50",
13188
+ viewportPlacementClasses[placement],
13189
+ floatButtonGroupClasses
13190
+ );
13191
+ }
12531
13192
  var floatButtonIconSizeClasses = {
12532
13193
  sm: "h-4 w-4",
12533
13194
  md: "h-5 w-5",
12534
13195
  lg: "h-6 w-6"
12535
13196
  };
13197
+ var floatButtonPlusIconPath = "M12 5v14M5 12h14";
12536
13198
 
12537
13199
  // src/utils/tour-utils.ts
12538
13200
  var tourMaskClasses = "fixed inset-0 z-[1000] bg-black/45 transition-opacity duration-200";
@@ -12630,13 +13292,35 @@ function getTourTargetRect(selector) {
12630
13292
  height: r.height
12631
13293
  };
12632
13294
  }
12633
- function getTourSpotlightStyle(rect, padding = 4) {
13295
+ var TOUR_MASK_HOLE_PADDING = 4;
13296
+ function getTourMaskHoleRect(rect, padding) {
13297
+ const scrollX = isBrowser() ? window.scrollX : 0;
13298
+ const scrollY = isBrowser() ? window.scrollY : 0;
13299
+ return {
13300
+ top: rect.top - scrollY - padding,
13301
+ left: rect.left - scrollX - padding,
13302
+ width: rect.width + padding * 2,
13303
+ height: rect.height + padding * 2
13304
+ };
13305
+ }
13306
+ function getTourMaskHoleStyle(rect, padding = TOUR_MASK_HOLE_PADDING) {
13307
+ const hole = getTourMaskHoleRect(rect, padding);
13308
+ const left = hole.left;
13309
+ const top = hole.top;
13310
+ const right = hole.left + hole.width;
13311
+ const bottom = hole.top + hole.height;
13312
+ return {
13313
+ 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)`
13314
+ };
13315
+ }
13316
+ function getTourSpotlightStyle(rect, padding = TOUR_MASK_HOLE_PADDING) {
13317
+ const hole = getTourMaskHoleRect(rect, padding);
12634
13318
  return {
12635
13319
  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`,
13320
+ top: `${hole.top}px`,
13321
+ left: `${hole.left}px`,
13322
+ width: `${hole.width}px`,
13323
+ height: `${hole.height}px`,
12640
13324
  borderRadius: "4px",
12641
13325
  boxShadow: "0 0 0 9999px rgba(0,0,0,0.45)",
12642
13326
  zIndex: "1000",
@@ -12647,17 +13331,18 @@ function getTourSpotlightStyle(rect, padding = 4) {
12647
13331
 
12648
13332
  // src/utils/affix-utils.ts
12649
13333
  var affixWrapperClasses = "relative";
12650
- function calculateAffixState(elementRect, containerRect, offsetTop, offsetBottom, zIndex) {
13334
+ function calculateAffixState(elementRect, containerRect, offsetTop, offsetBottom, zIndex, viewportHeight) {
12651
13335
  const useBottom = offsetBottom !== void 0;
12652
13336
  const offset2 = useBottom ? offsetBottom : offsetTop ?? 0;
12653
13337
  if (useBottom) {
12654
13338
  const shouldAffix = elementRect.top + elementRect.height > containerRect.bottom - offset2;
12655
13339
  if (shouldAffix) {
13340
+ const innerHeight = viewportHeight ?? (isBrowser() ? window.innerHeight : containerRect.bottom);
12656
13341
  return {
12657
13342
  affixed: true,
12658
13343
  style: {
12659
13344
  position: "fixed",
12660
- bottom: `${offset2}px`,
13345
+ bottom: `${innerHeight - containerRect.bottom + offset2}px`,
12661
13346
  left: `${elementRect.left}px`,
12662
13347
  width: `${elementRect.width}px`,
12663
13348
  zIndex
@@ -13095,10 +13780,35 @@ function resetDevWarnCache() {
13095
13780
 
13096
13781
  // src/utils/chat-window-utils.ts
13097
13782
  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)]" }
13783
+ sending: {
13784
+ text: DEFAULT_CHAT_WINDOW_LABELS.sendingText,
13785
+ className: "text-[var(--tiger-text-muted,#6b7280)]"
13786
+ },
13787
+ sent: {
13788
+ text: DEFAULT_CHAT_WINDOW_LABELS.sentText,
13789
+ className: "text-[var(--tiger-text-muted,#6b7280)]"
13790
+ },
13791
+ failed: {
13792
+ text: DEFAULT_CHAT_WINDOW_LABELS.failedText,
13793
+ className: "text-[var(--tiger-danger,#ef4444)]"
13794
+ }
13101
13795
  };
13796
+ function buildChatMessageStatusInfo(labels) {
13797
+ return {
13798
+ sending: {
13799
+ text: labels.sendingText ?? defaultChatMessageStatusInfo.sending.text,
13800
+ className: defaultChatMessageStatusInfo.sending.className
13801
+ },
13802
+ sent: {
13803
+ text: labels.sentText ?? defaultChatMessageStatusInfo.sent.text,
13804
+ className: defaultChatMessageStatusInfo.sent.className
13805
+ },
13806
+ failed: {
13807
+ text: labels.failedText ?? defaultChatMessageStatusInfo.failed.text,
13808
+ className: defaultChatMessageStatusInfo.failed.className
13809
+ }
13810
+ };
13811
+ }
13102
13812
  function getChatMessageStatusInfo(status, statusMap = defaultChatMessageStatusInfo) {
13103
13813
  return statusMap[status] || defaultChatMessageStatusInfo[status];
13104
13814
  }
@@ -13215,6 +13925,21 @@ var buildNotificationGroups = (items = [], groups, groupBy, groupOrder) => {
13215
13925
  };
13216
13926
 
13217
13927
  // src/utils/comment-thread-utils.ts
13928
+ var resolveCommentLikeState = (node, overlay) => {
13929
+ const entry = overlay?.get(node.id);
13930
+ if (entry) return { liked: entry.liked, likes: entry.likes };
13931
+ return { liked: !!node.liked, likes: node.likes ?? 0 };
13932
+ };
13933
+ var nextCommentLikeState = (node, overlay) => {
13934
+ const current = resolveCommentLikeState(node, overlay);
13935
+ const liked = !current.liked;
13936
+ return { liked, likes: Math.max(0, current.likes + (liked ? 1 : -1)) };
13937
+ };
13938
+ var writeCommentLikeOverlay = (overlay, id, state) => {
13939
+ const next = new Map(overlay ?? void 0);
13940
+ next.set(id, { liked: state.liked, likes: state.likes });
13941
+ return next;
13942
+ };
13218
13943
  var buildCommentTree = (items = []) => {
13219
13944
  if (!items || items.length === 0) return [];
13220
13945
  const nodeMap = /* @__PURE__ */ new Map();
@@ -13471,6 +14196,30 @@ function isWipExceeded(column) {
13471
14196
  if (column.wipLimit == null || column.wipLimit <= 0) return false;
13472
14197
  return column.cards.length > column.wipLimit;
13473
14198
  }
14199
+ var DEFAULT_TASK_BOARD_NEW_CARD_TITLE = "New task";
14200
+ function nextDefaultTaskBoardCardId(columns) {
14201
+ const used = /* @__PURE__ */ new Set();
14202
+ for (const column of columns) {
14203
+ for (const card of column.cards) {
14204
+ used.add(String(card.id));
14205
+ }
14206
+ }
14207
+ let n = 1;
14208
+ let id = `card-${n}`;
14209
+ while (used.has(id)) {
14210
+ n += 1;
14211
+ id = `card-${n}`;
14212
+ }
14213
+ return id;
14214
+ }
14215
+ function appendDefaultTaskBoardCard(columns, columnId, title = DEFAULT_TASK_BOARD_NEW_CARD_TITLE) {
14216
+ const colIdx = columns.findIndex((c) => c.id === columnId);
14217
+ if (colIdx === -1) return columns;
14218
+ const card = { id: nextDefaultTaskBoardCardId(columns), title };
14219
+ return columns.map(
14220
+ (column, i) => i === colIdx ? { ...column, cards: [...column.cards, card] } : column
14221
+ );
14222
+ }
13474
14223
  function getDropIndex(pointerY, cardRects) {
13475
14224
  for (let i = 0; i < cardRects.length; i++) {
13476
14225
  const mid = cardRects[i].top + cardRects[i].height / 2;
@@ -13478,6 +14227,22 @@ function getDropIndex(pointerY, cardRects) {
13478
14227
  }
13479
14228
  return cardRects.length;
13480
14229
  }
14230
+ function mapVisibleCardIndexToSource(sourceCards, visibleCards, visibleIndex) {
14231
+ if (visibleCards.length === 0) {
14232
+ return visibleIndex <= 0 ? 0 : sourceCards.length;
14233
+ }
14234
+ if (visibleIndex <= 0) {
14235
+ const idx2 = sourceCards.findIndex((card) => card.id === visibleCards[0].id);
14236
+ return idx2 === -1 ? 0 : idx2;
14237
+ }
14238
+ if (visibleIndex >= visibleCards.length) {
14239
+ const last = visibleCards[visibleCards.length - 1];
14240
+ const idx2 = sourceCards.findIndex((card) => card.id === last.id);
14241
+ return idx2 === -1 ? sourceCards.length : idx2 + 1;
14242
+ }
14243
+ const idx = sourceCards.findIndex((card) => card.id === visibleCards[visibleIndex].id);
14244
+ return idx === -1 ? visibleIndex : idx;
14245
+ }
13481
14246
  function getColumnDropIndex(pointerX, columnRects) {
13482
14247
  for (let i = 0; i < columnRects.length; i++) {
13483
14248
  const mid = columnRects[i].left + columnRects[i].width / 2;
@@ -14091,6 +14856,16 @@ function filterAutoCompleteOptions(options, inputValue, filterOption) {
14091
14856
  const filterFn = typeof filterOption === "function" ? filterOption : defaultAutoCompleteFilter;
14092
14857
  return options.filter((opt) => filterFn(inputValue, opt));
14093
14858
  }
14859
+ function resolveAutoCompleteDisplayValue(value, options = [], fallback = "") {
14860
+ if (value === void 0 || value === null) {
14861
+ return String(fallback ?? "");
14862
+ }
14863
+ const match = (options ?? []).find((option) => String(option.value) === String(value));
14864
+ if (match) {
14865
+ return match.label;
14866
+ }
14867
+ return String(value);
14868
+ }
14094
14869
 
14095
14870
  // src/utils/signature-utils.ts
14096
14871
  var signatureRootClasses = "inline-flex w-full flex-col gap-2";
@@ -14989,6 +15764,7 @@ function createScrollSpyObserver(items = [], options) {
14989
15764
  const root = options.container === window ? null : options.container;
14990
15765
  return createAnchorObserver(hrefs, {
14991
15766
  offsetTop: offset2,
15767
+ bounds: options.bounds ?? 5,
14992
15768
  root,
14993
15769
  onChange: notify
14994
15770
  });
@@ -15221,6 +15997,7 @@ function getRateStarClasses(size2, isCharacter, disabled) {
15221
15997
  disabled ? "cursor-default" : "cursor-pointer"
15222
15998
  );
15223
15999
  }
16000
+ var rateHalfStarInnerClasses = "w-[200%] h-full";
15224
16001
  var rateActiveColor = "text-[var(--tiger-rate-active,var(--tiger-warning,#f59e0b))]";
15225
16002
  var rateInactiveColor = "text-[var(--tiger-rate-inactive,var(--tiger-border,#d1d5db))]";
15226
16003
  var rateHoverColor = "text-[var(--tiger-rate-hover,var(--tiger-warning,#fbbf24))]";
@@ -15236,7 +16013,7 @@ function getSegmentedContainerClasses(size2, block) {
15236
16013
  };
15237
16014
  return classNames(
15238
16015
  "relative inline-grid overflow-hidden rounded-[var(--tiger-radius-md,0.5rem)]",
15239
- "bg-[var(--tiger-segmented-bg,var(--tiger-fill,#f3f4f6))]",
16016
+ "bg-[var(--tiger-segmented-bg,var(--tiger-surface-muted,#f9fafb))]",
15240
16017
  sizeClasses3[size2],
15241
16018
  block ? "w-full" : ""
15242
16019
  );
@@ -15254,7 +16031,7 @@ function getSegmentedIndicatorClasses(size2) {
15254
16031
  };
15255
16032
  return classNames(
15256
16033
  "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",
16034
+ "bg-[var(--tiger-segmented-active-bg,var(--tiger-surface-raised,#ffffff))] shadow-sm",
15258
16035
  "transition-transform duration-200 ease-out will-change-transform",
15259
16036
  insetClasses[size2]
15260
16037
  );
@@ -15488,16 +16265,103 @@ function formatColorString(r, g, b, format, alpha) {
15488
16265
  function isValidHex(value) {
15489
16266
  return /^#?([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/.test(value);
15490
16267
  }
16268
+ function clampByte(n) {
16269
+ return Math.max(0, Math.min(255, Math.round(n)));
16270
+ }
16271
+ function clampUnit(n) {
16272
+ return Math.max(0, Math.min(1, n));
16273
+ }
16274
+ function parseOptionalAlpha(raw) {
16275
+ if (raw === void 0 || raw === "") return 1;
16276
+ const n = Number(raw);
16277
+ if (!Number.isFinite(n)) return 1;
16278
+ return clampUnit(n);
16279
+ }
16280
+ function hslToRgb(h, s, l) {
16281
+ const hue = (h % 360 + 360) % 360;
16282
+ const ss = Math.max(0, Math.min(100, s)) / 100;
16283
+ const ll = Math.max(0, Math.min(100, l)) / 100;
16284
+ const c = (1 - Math.abs(2 * ll - 1)) * ss;
16285
+ const x = c * (1 - Math.abs(hue / 60 % 2 - 1));
16286
+ const m = ll - c / 2;
16287
+ let r = 0;
16288
+ let g = 0;
16289
+ let b = 0;
16290
+ if (hue < 60) {
16291
+ r = c;
16292
+ g = x;
16293
+ b = 0;
16294
+ } else if (hue < 120) {
16295
+ r = x;
16296
+ g = c;
16297
+ b = 0;
16298
+ } else if (hue < 180) {
16299
+ r = 0;
16300
+ g = c;
16301
+ b = x;
16302
+ } else if (hue < 240) {
16303
+ r = 0;
16304
+ g = x;
16305
+ b = c;
16306
+ } else if (hue < 300) {
16307
+ r = x;
16308
+ g = 0;
16309
+ b = c;
16310
+ } else {
16311
+ r = c;
16312
+ g = 0;
16313
+ b = x;
16314
+ }
16315
+ return {
16316
+ r: Math.round((r + m) * 255),
16317
+ g: Math.round((g + m) * 255),
16318
+ b: Math.round((b + m) * 255)
16319
+ };
16320
+ }
16321
+ function parseColorParts(raw) {
16322
+ const value = raw.trim();
16323
+ if (!value) return null;
16324
+ if (isValidHex(value)) {
16325
+ const rgb = hexToRgb2(value);
16326
+ return { r: rgb.r, g: rgb.g, b: rgb.b, a: 1 };
16327
+ }
16328
+ const rgbMatch = value.match(
16329
+ /^rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)(?:\s*,\s*([\d.]+))?\s*\)?\s*$/i
16330
+ );
16331
+ if (rgbMatch) {
16332
+ return {
16333
+ r: clampByte(Number(rgbMatch[1])),
16334
+ g: clampByte(Number(rgbMatch[2])),
16335
+ b: clampByte(Number(rgbMatch[3])),
16336
+ a: parseOptionalAlpha(rgbMatch[4])
16337
+ };
16338
+ }
16339
+ const hslMatch = value.match(
16340
+ /^hsla?\(\s*([\d.]+)\s*,\s*([\d.]+)%\s*,\s*([\d.]+)%(?:\s*,\s*([\d.]+))?\s*\)?\s*$/i
16341
+ );
16342
+ if (hslMatch) {
16343
+ const rgb = hslToRgb(Number(hslMatch[1]), Number(hslMatch[2]), Number(hslMatch[3]));
16344
+ return {
16345
+ r: rgb.r,
16346
+ g: rgb.g,
16347
+ b: rgb.b,
16348
+ a: parseOptionalAlpha(hslMatch[4])
16349
+ };
16350
+ }
16351
+ return null;
16352
+ }
15491
16353
  function parseColorInput(raw) {
15492
16354
  const value = raw.trim();
15493
16355
  if (isValidHex(value)) {
15494
16356
  return value.startsWith("#") ? value : `#${value}`;
15495
16357
  }
15496
- const rgbMatch = value.match(/^rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)/i);
15497
- if (!rgbMatch) {
15498
- return null;
16358
+ const parts = parseColorParts(value);
16359
+ if (!parts) return null;
16360
+ if (parts.a < 1) {
16361
+ const format = /^hsla?\(/i.test(value) ? "hsl" : "rgb";
16362
+ return formatColorString(parts.r, parts.g, parts.b, format, parts.a);
15499
16363
  }
15500
- return rgbToHex2(Number(rgbMatch[1]), Number(rgbMatch[2]), Number(rgbMatch[3]));
16364
+ return rgbToHex2(parts.r, parts.g, parts.b);
15501
16365
  }
15502
16366
 
15503
16367
  // src/utils/color-swatch-utils.ts
@@ -15665,12 +16529,21 @@ function getCalendarDayClasses(isSelected, isToday2, isCurrentMonth, isDisabled)
15665
16529
  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
16530
  );
15667
16531
  }
15668
- function getCalendarMonthClasses(isSelected) {
16532
+ function getCalendarMonthClasses(isSelected, isDisabled) {
15669
16533
  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",
16534
+ "inline-flex items-center justify-center rounded-[var(--tiger-radius-md,0.5rem)] py-2 px-3 text-sm transition-colors",
16535
+ isDisabled ? "opacity-30 cursor-not-allowed" : "cursor-pointer",
15671
16536
  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
16537
  );
15673
16538
  }
16539
+ function isCalendarMonthDisabled(year, month, disabledDate) {
16540
+ if (!disabledDate) return false;
16541
+ const lastDay = new Date(year, month + 1, 0).getDate();
16542
+ for (let day = 1; day <= lastDay; day++) {
16543
+ if (!disabledDate(new Date(year, month, day))) return false;
16544
+ }
16545
+ return true;
16546
+ }
15674
16547
  var WEEKDAYS = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"];
15675
16548
  var MONTHS = [
15676
16549
  "Jan",
@@ -16354,45 +17227,6 @@ function isTablet(options = {}) {
16354
17227
  return width !== void 0 && width >= TIGER_VIEWPORT_BREAKPOINTS.md && width < TIGER_VIEWPORT_BREAKPOINTS.lg;
16355
17228
  }
16356
17229
 
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
17230
  // src/utils/drag.ts
16397
17231
  function createDragState() {
16398
17232
  return {
@@ -16584,12 +17418,12 @@ var splitterBaseClasses = "relative flex w-full h-full overflow-hidden";
16584
17418
  var splitterHorizontalClasses = "flex-row";
16585
17419
  var splitterVerticalClasses = "flex-col";
16586
17420
  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";
17421
+ var splitterGutterBaseClasses = "relative flex-shrink-0 bg-[var(--tiger-border,#e5e7eb)] transition-colors duration-150 hover:bg-[var(--tiger-primary,#2563eb)] z-10";
16588
17422
  var splitterGutterHorizontalClasses = "cursor-col-resize w-[var(--tiger-splitter-gutter,4px)] h-full";
16589
17423
  var splitterGutterVerticalClasses = "cursor-row-resize h-[var(--tiger-splitter-gutter,4px)] w-full";
16590
17424
  var splitterGutterDraggingClasses = "bg-[var(--tiger-primary,#2563eb)]";
16591
17425
  var splitterGutterDisabledClasses = "cursor-default opacity-50 pointer-events-none";
16592
- var splitterGutterHandleClasses = "absolute rounded bg-gray-400 transition-colors duration-150";
17426
+ var splitterGutterHandleClasses = "absolute rounded bg-[var(--tiger-text-muted,#9ca3af)] transition-colors duration-150";
16593
17427
  var splitterGutterHandleHorizontalClasses = "w-0.5 h-6 top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2";
16594
17428
  var splitterGutterHandleVerticalClasses = "h-0.5 w-6 top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2";
16595
17429
  function getSplitterContainerClasses(direction, className) {
@@ -16615,6 +17449,11 @@ function getSplitterGutterHandleClasses(direction) {
16615
17449
  direction === "horizontal" ? splitterGutterHandleHorizontalClasses : splitterGutterHandleVerticalClasses
16616
17450
  ].join(" ");
16617
17451
  }
17452
+ function getSplitterGutterCssVars(gutterSize = 4) {
17453
+ return {
17454
+ "--tiger-splitter-gutter": `${gutterSize}px`
17455
+ };
17456
+ }
16618
17457
  function parsePaneSize(size2, totalSize) {
16619
17458
  if (typeof size2 === "number") return size2;
16620
17459
  const trimmed = size2.trim();
@@ -16646,6 +17485,23 @@ function clampPaneSize(size2, min, max) {
16646
17485
  }
16647
17486
  return result;
16648
17487
  }
17488
+ function isPercentagePaneSize(size2) {
17489
+ return typeof size2 === "string" && size2.trim().endsWith("%");
17490
+ }
17491
+ function resolveInitialPaneSizes(paneCount, containerSize, gutterSize, sizes, min = 0, max) {
17492
+ if (paneCount <= 0) return null;
17493
+ const provided = sizes && sizes.length === paneCount ? sizes : void 0;
17494
+ const hasPercent = provided != null && provided.some(isPercentagePaneSize);
17495
+ if (containerSize <= 0) {
17496
+ if (hasPercent || !provided) return null;
17497
+ return calculateInitialSizes(paneCount, 0, gutterSize, provided).map(
17498
+ (s) => clampPaneSize(s, min, max)
17499
+ );
17500
+ }
17501
+ return calculateInitialSizes(paneCount, containerSize, gutterSize, provided).map(
17502
+ (s) => clampPaneSize(s, min, max)
17503
+ );
17504
+ }
16649
17505
  function resizePanes(sizes, gutterIndex, delta, mins, maxes) {
16650
17506
  if (gutterIndex < 0 || gutterIndex >= sizes.length - 1) return null;
16651
17507
  const leftIdx = gutterIndex;
@@ -17299,27 +18155,60 @@ function isToolbarSeparator(item) {
17299
18155
  function getToolbarButtons(items) {
17300
18156
  return items.filter((item) => !isToolbarSeparator(item));
17301
18157
  }
17302
- var defaultToolbar = [
17303
- { name: "bold", label: "Bold", tooltip: "Bold (Ctrl+B)", hotkey: "Ctrl+B" },
17304
- { name: "italic", label: "Italic", tooltip: "Italic (Ctrl+I)", hotkey: "Ctrl+I" },
17305
- { name: "underline", label: "Underline", tooltip: "Underline (Ctrl+U)", hotkey: "Ctrl+U" },
17306
- { name: "strikethrough", label: "Strikethrough", tooltip: "Strikethrough" },
17307
- { name: "heading1", label: "H1", tooltip: "Heading 1" },
17308
- { name: "heading2", label: "H2", tooltip: "Heading 2" },
17309
- { name: "heading3", label: "H3", tooltip: "Heading 3" },
17310
- { name: "bulletList", label: "Bullet List", tooltip: "Bullet List" },
17311
- { name: "orderedList", label: "Ordered List", tooltip: "Ordered List" },
17312
- { name: "blockquote", label: "Blockquote", tooltip: "Blockquote" },
17313
- { name: "codeBlock", label: "Code", tooltip: "Code Block" },
17314
- { name: "link", label: "Link", tooltip: "Insert Link" },
17315
- { name: "horizontalRule", label: "HR", tooltip: "Horizontal Rule" },
17316
- { name: "undo", label: "Undo", tooltip: "Undo (Ctrl+Z)", hotkey: "Ctrl+Z" },
17317
- { name: "redo", label: "Redo", tooltip: "Redo (Ctrl+Y)", hotkey: "Ctrl+Y" },
17318
- { name: "clear", label: "Clear", tooltip: "Clear Formatting" }
17319
- ];
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)]";
18158
+ function toolbarTooltip(label, hotkey) {
18159
+ return hotkey ? `${label} (${hotkey})` : label;
18160
+ }
18161
+ function createDefaultRichTextToolbar(labels) {
18162
+ return [
18163
+ {
18164
+ name: "bold",
18165
+ label: labels.bold,
18166
+ tooltip: toolbarTooltip(labels.bold, "Ctrl+B"),
18167
+ hotkey: "Ctrl+B"
18168
+ },
18169
+ {
18170
+ name: "italic",
18171
+ label: labels.italic,
18172
+ tooltip: toolbarTooltip(labels.italic, "Ctrl+I"),
18173
+ hotkey: "Ctrl+I"
18174
+ },
18175
+ {
18176
+ name: "underline",
18177
+ label: labels.underline,
18178
+ tooltip: toolbarTooltip(labels.underline, "Ctrl+U"),
18179
+ hotkey: "Ctrl+U"
18180
+ },
18181
+ { name: "strikethrough", label: labels.strikethrough, tooltip: labels.strikethrough },
18182
+ { name: "heading1", label: labels.heading1, tooltip: labels.heading1 },
18183
+ { name: "heading2", label: labels.heading2, tooltip: labels.heading2 },
18184
+ { name: "heading3", label: labels.heading3, tooltip: labels.heading3 },
18185
+ { name: "bulletList", label: labels.bulletList, tooltip: labels.bulletList },
18186
+ { name: "orderedList", label: labels.orderedList, tooltip: labels.orderedList },
18187
+ { name: "blockquote", label: labels.blockquote, tooltip: labels.blockquote },
18188
+ { name: "codeBlock", label: labels.codeBlock, tooltip: labels.codeBlock },
18189
+ { name: "link", label: labels.link, tooltip: labels.link },
18190
+ { name: "horizontalRule", label: labels.horizontalRule, tooltip: labels.horizontalRule },
18191
+ {
18192
+ name: "undo",
18193
+ label: labels.undo,
18194
+ tooltip: toolbarTooltip(labels.undo, "Ctrl+Z"),
18195
+ hotkey: "Ctrl+Z"
18196
+ },
18197
+ {
18198
+ name: "redo",
18199
+ label: labels.redo,
18200
+ tooltip: toolbarTooltip(labels.redo, "Ctrl+Y"),
18201
+ hotkey: "Ctrl+Y"
18202
+ },
18203
+ { name: "clear", label: labels.clear, tooltip: labels.clear }
18204
+ ];
18205
+ }
18206
+ var defaultToolbar = createDefaultRichTextToolbar(
18207
+ DEFAULT_RICH_TEXT_EDITOR_LABELS
18208
+ );
18209
+ 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
18210
  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)]";
18211
+ 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
18212
  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
18213
  var richTextToolbarButtonActive = "bg-[var(--tiger-primary,#2563eb)]/10 text-[var(--tiger-primary,#2563eb)]";
17325
18214
  var richTextToolbarSeparatorClasses = "w-px h-5 mx-1 bg-[var(--tiger-border,#d1d5db)]";
@@ -17462,35 +18351,58 @@ function parseHeight(height) {
17462
18351
  }
17463
18352
 
17464
18353
  // 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)]";
18354
+ 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
18355
  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)]";
18356
+ 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
18357
  var markdownEditorToolbarGroupClasses = "flex flex-wrap items-center gap-1";
17469
18358
  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
18359
  var markdownEditorToolbarButtonActive = "bg-[var(--tiger-primary,#2563eb)]/10 text-[var(--tiger-primary,#2563eb)]";
17471
18360
  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)]";
18361
+ var markdownEditorBodyClasses = "grid flex-1 min-h-0 bg-[var(--tiger-md-bg,var(--tiger-surface,#ffffff))]";
17473
18362
  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
18363
  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
18364
  var markdownEditorEmptyPreviewClasses = "text-[var(--tiger-text-tertiary,#9ca3af)]";
17476
18365
  var markdownEditorSplitDividerClasses = "border-l border-[var(--tiger-border,#d1d5db)]";
17477
- var defaultMarkdownToolbar = [
17478
- { name: "bold", label: "B", tooltip: "Bold (Ctrl+B)", hotkey: "Ctrl+B" },
17479
- { name: "italic", label: "I", tooltip: "Italic (Ctrl+I)", hotkey: "Ctrl+I" },
17480
- { name: "strikethrough", label: "S", tooltip: "Strikethrough" },
17481
- { type: "separator" },
17482
- { name: "heading", label: "H", tooltip: "Heading" },
17483
- { name: "blockquote", label: "Quote", tooltip: "Blockquote" },
17484
- { name: "unorderedList", label: "List", tooltip: "Bulleted list" },
17485
- { name: "orderedList", label: "1.", tooltip: "Numbered list" },
17486
- { type: "separator" },
17487
- { name: "inlineCode", label: "`", tooltip: "Inline code" },
17488
- { name: "codeBlock", label: "{}", tooltip: "Code block" },
17489
- { name: "link", label: "Link", tooltip: "Link (Ctrl+K)", hotkey: "Ctrl+K" },
17490
- { name: "image", label: "Img", tooltip: "Image" },
17491
- { name: "table", label: "Table", tooltip: "Table" },
17492
- { name: "horizontalRule", label: "HR", tooltip: "Horizontal rule" }
17493
- ];
18366
+ function markdownToolbarTooltip(label, hotkey) {
18367
+ return hotkey ? `${label} (${hotkey})` : label;
18368
+ }
18369
+ function createDefaultMarkdownToolbar(labels) {
18370
+ return [
18371
+ {
18372
+ name: "bold",
18373
+ label: "B",
18374
+ tooltip: markdownToolbarTooltip(labels.bold, "Ctrl+B"),
18375
+ hotkey: "Ctrl+B"
18376
+ },
18377
+ {
18378
+ name: "italic",
18379
+ label: "I",
18380
+ tooltip: markdownToolbarTooltip(labels.italic, "Ctrl+I"),
18381
+ hotkey: "Ctrl+I"
18382
+ },
18383
+ { name: "strikethrough", label: "S", tooltip: labels.strikethrough },
18384
+ { type: "separator" },
18385
+ { name: "heading", label: "H", tooltip: labels.heading },
18386
+ { name: "blockquote", label: labels.blockquote, tooltip: labels.blockquote },
18387
+ { name: "unorderedList", label: labels.unorderedList, tooltip: labels.unorderedList },
18388
+ { name: "orderedList", label: "1.", tooltip: labels.orderedList },
18389
+ { type: "separator" },
18390
+ { name: "inlineCode", label: "`", tooltip: labels.inlineCode },
18391
+ { name: "codeBlock", label: "{}", tooltip: labels.codeBlock },
18392
+ {
18393
+ name: "link",
18394
+ label: labels.link,
18395
+ tooltip: markdownToolbarTooltip(labels.link, "Ctrl+K"),
18396
+ hotkey: "Ctrl+K"
18397
+ },
18398
+ { name: "image", label: labels.image, tooltip: labels.image },
18399
+ { name: "table", label: labels.table, tooltip: labels.table },
18400
+ { name: "horizontalRule", label: "HR", tooltip: labels.horizontalRule }
18401
+ ];
18402
+ }
18403
+ var defaultMarkdownToolbar = createDefaultMarkdownToolbar(
18404
+ DEFAULT_MARKDOWN_EDITOR_LABELS
18405
+ );
17494
18406
  var markdownModeLabels = {
17495
18407
  edit: "Edit",
17496
18408
  split: "Split",
@@ -18098,8 +19010,8 @@ function getInfiniteScrollContainerClasses(direction, className) {
18098
19010
  }
18099
19011
 
18100
19012
  // 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)]";
19013
+ 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";
19014
+ 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
19015
  var fileManagerBreadcrumbClasses = "flex items-center gap-1 text-sm text-[var(--tiger-text-secondary,#6b7280)]";
18104
19016
  var fileManagerBreadcrumbItemClasses = "cursor-pointer hover:text-[var(--tiger-primary,#2563eb)] transition-colors";
18105
19017
  var fileManagerBreadcrumbSeparatorClasses = "text-[var(--tiger-text-muted,#9ca3af)]";
@@ -18112,8 +19024,8 @@ var fileManagerItemIconClasses = "text-[var(--tiger-text-muted,#9ca3af)] flex-sh
18112
19024
  var fileManagerItemNameClasses = "text-sm font-medium text-[var(--tiger-text,#1f2937)] truncate";
18113
19025
  var fileManagerItemMetaClasses = "text-xs text-[var(--tiger-text-muted,#9ca3af)]";
18114
19026
  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";
19027
+ var fileManagerLoadingClasses = "absolute inset-0 flex items-center justify-center bg-[var(--tiger-file-manager-bg,var(--tiger-surface,#ffffff))]/60 z-10";
19028
+ 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
19029
  function sortFileItems(items, field = "name", order = "asc") {
18118
19030
  const sorted = [...items].sort((a, b) => {
18119
19031
  if (a.type !== b.type) {
@@ -18249,7 +19161,7 @@ function getImageAnnotationToolLabel(tool) {
18249
19161
  function getImageAnnotationToolButtonClasses(active) {
18250
19162
  return classNames(
18251
19163
  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)]"
19164
+ 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
19165
  );
18254
19166
  }
18255
19167
  function getImageAnnotationStrokeColor(annotation) {
@@ -18349,10 +19261,10 @@ function isImageAnnotationShapeTool(tool) {
18349
19261
 
18350
19262
  // src/utils/org-chart-utils.ts
18351
19263
  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]";
19264
+ var orgChartNodeRectClasses = "stroke-[var(--tiger-border,#d1d5db)] fill-[var(--tiger-org-node-bg,var(--tiger-surface,#ffffff))] drop-shadow-sm";
19265
+ var orgChartNodeLabelClasses = "pointer-events-none select-none fill-[var(--tiger-org-label,var(--tiger-text,#111827))] text-sm font-semibold";
19266
+ var orgChartNodeTitleClasses = "pointer-events-none select-none fill-[var(--tiger-org-title,var(--tiger-text-secondary,#6b7280))] text-xs";
19267
+ var orgChartNodeSubtitleClasses = "pointer-events-none select-none fill-[var(--tiger-org-subtitle,var(--tiger-text-secondary,#6b7280))] text-[11px]";
18356
19268
  var orgChartLinkClasses = "fill-none stroke-[var(--tiger-border,#d1d5db)] stroke-2";
18357
19269
  function normalizeOrgChartData(data) {
18358
19270
  return Array.isArray(data) ? data : [data];
@@ -18467,9 +19379,7 @@ function flipLayoutNode(node) {
18467
19379
  return {
18468
19380
  ...node,
18469
19381
  x: node.y,
18470
- y: node.x,
18471
- width: node.height,
18472
- height: node.width
19382
+ y: node.x
18473
19383
  };
18474
19384
  }
18475
19385
  function flipLayoutLink(link) {
@@ -18510,8 +19420,95 @@ function getGanttTaskAriaLabel(task) {
18510
19420
  const progress = typeof task.progress === "number" ? `, ${clampProgress(task.progress)}%` : "";
18511
19421
  return `${task.label}, ${start} to ${end}${progress}`;
18512
19422
  }
18513
- function getGanttTaskClasses(interactive, selected) {
18514
- return classNames(ganttBarClasses, interactive && "cursor-pointer", selected && "drop-shadow-md");
19423
+ function getGanttTaskClasses(interactive, selected, movable = false, grabbing = false) {
19424
+ return classNames(
19425
+ ganttBarClasses,
19426
+ grabbing ? "cursor-grabbing" : movable ? "cursor-grab" : interactive && "cursor-pointer",
19427
+ selected && "drop-shadow-md"
19428
+ );
19429
+ }
19430
+ function ganttPxToMs(deltaX, minMs, maxMs, timelineWidth) {
19431
+ if (!(timelineWidth > 0) || !Number.isFinite(timelineWidth) || !Number.isFinite(deltaX)) return 0;
19432
+ const rangeMs = maxMs - minMs;
19433
+ if (!Number.isFinite(rangeMs) || rangeMs <= 0) return 0;
19434
+ return deltaX * (rangeMs / timelineWidth);
19435
+ }
19436
+ function ganttDateValuesEqual(a, b) {
19437
+ if (Object.is(a, b)) return true;
19438
+ const aMs = normalizeGanttDate(a);
19439
+ const bMs = normalizeGanttDate(b);
19440
+ return Number.isFinite(aMs) && Number.isFinite(bMs) && aMs === bMs;
19441
+ }
19442
+ function clampGanttDragDeltaX(deltaX, barX, barWidth, taskLabelWidth, layoutWidth) {
19443
+ if (!Number.isFinite(deltaX)) return 0;
19444
+ const minDelta = taskLabelWidth - barX;
19445
+ const maxDelta = layoutWidth - barX - barWidth;
19446
+ if (!Number.isFinite(minDelta) || !Number.isFinite(maxDelta) || minDelta > maxDelta) {
19447
+ return 0;
19448
+ }
19449
+ return Math.min(maxDelta, Math.max(minDelta, deltaX));
19450
+ }
19451
+ function shiftGanttTaskDates(task, deltaMs, options = {}) {
19452
+ const startMs = normalizeGanttDate(task.start);
19453
+ const endMs = normalizeGanttDate(task.end);
19454
+ if (!Number.isFinite(startMs) || !Number.isFinite(endMs)) return { ...task };
19455
+ const dayDelta = Math.round((Number.isFinite(deltaMs) ? deltaMs : 0) / DAY_MS);
19456
+ if (dayDelta === 0) {
19457
+ return {
19458
+ ...task,
19459
+ start: cloneGanttDateValue(task.start),
19460
+ end: cloneGanttDateValue(task.end)
19461
+ };
19462
+ }
19463
+ let nextStart = addLocalDays(startMs, dayDelta);
19464
+ let nextEnd = addLocalDays(endMs, dayDelta);
19465
+ if (nextEnd.getTime() < nextStart.getTime()) {
19466
+ const swapped = nextStart;
19467
+ nextStart = nextEnd;
19468
+ nextEnd = swapped;
19469
+ }
19470
+ const durationMs = nextEnd.getTime() - nextStart.getTime();
19471
+ const minMs = options.minMs;
19472
+ const maxMs = options.maxMs;
19473
+ const hasMin = minMs !== void 0 && Number.isFinite(minMs);
19474
+ const hasMax = maxMs !== void 0 && Number.isFinite(maxMs);
19475
+ if (hasMin && hasMax && durationMs > maxMs - minMs) {
19476
+ nextStart = new Date(minMs);
19477
+ nextEnd = new Date(minMs + durationMs);
19478
+ } else {
19479
+ if (hasMin && nextStart.getTime() < minMs) {
19480
+ nextStart = new Date(minMs);
19481
+ nextEnd = new Date(minMs + durationMs);
19482
+ }
19483
+ if (hasMax && nextEnd.getTime() > maxMs) {
19484
+ nextEnd = new Date(maxMs);
19485
+ nextStart = new Date(maxMs - durationMs);
19486
+ }
19487
+ if (hasMin && nextStart.getTime() < minMs) {
19488
+ nextStart = new Date(minMs);
19489
+ nextEnd = new Date(minMs + durationMs);
19490
+ }
19491
+ }
19492
+ return {
19493
+ ...task,
19494
+ start: preserveGanttDateValue(task.start, nextStart),
19495
+ end: preserveGanttDateValue(task.end, nextEnd)
19496
+ };
19497
+ }
19498
+ function moveGanttTaskByPx(task, deltaX, range) {
19499
+ const deltaMs = ganttPxToMs(deltaX, range.minMs, range.maxMs, range.timelineWidth);
19500
+ return shiftGanttTaskDates(task, deltaMs, { minMs: range.minMs, maxMs: range.maxMs });
19501
+ }
19502
+ function applyGanttTaskDateOverlay(data, overlay) {
19503
+ if (!overlay || overlay.size === 0) return data;
19504
+ return data.map((task) => {
19505
+ const entry = overlay.get(task.id);
19506
+ if (!entry) return task;
19507
+ if (entry.baseStart !== void 0 && entry.baseEnd !== void 0 && (!ganttDateValuesEqual(task.start, entry.baseStart) || !ganttDateValuesEqual(task.end, entry.baseEnd))) {
19508
+ return task;
19509
+ }
19510
+ return { ...task, start: entry.start, end: entry.end };
19511
+ });
18515
19512
  }
18516
19513
  function getGanttDependencyPath(dependency) {
18517
19514
  const midX = dependency.sourceX + Math.max(16, (dependency.targetX - dependency.sourceX) / 2);
@@ -18686,10 +19683,33 @@ function addTick(date, scale) {
18686
19683
  else next.setDate(next.getDate() + 1);
18687
19684
  return next;
18688
19685
  }
19686
+ function isYearMonthDayString(value) {
19687
+ return typeof value === "string" && /^\d{4}-\d{2}-\d{2}$/.test(value);
19688
+ }
19689
+ function toYearMonthDayString(date) {
19690
+ const year = date.getFullYear();
19691
+ const month = `${date.getMonth() + 1}`.padStart(2, "0");
19692
+ const day = `${date.getDate()}`.padStart(2, "0");
19693
+ return `${year}-${month}-${day}`;
19694
+ }
19695
+ function cloneGanttDateValue(value) {
19696
+ return value instanceof Date ? new Date(value.getTime()) : value;
19697
+ }
19698
+ function addLocalDays(ms, days) {
19699
+ const date = new Date(ms);
19700
+ date.setDate(date.getDate() + days);
19701
+ return date;
19702
+ }
19703
+ function preserveGanttDateValue(original, next) {
19704
+ if (isYearMonthDayString(original)) return toYearMonthDayString(next);
19705
+ if (original instanceof Date) return next;
19706
+ if (typeof original === "number") return next.getTime();
19707
+ return toYearMonthDayString(next);
19708
+ }
18689
19709
 
18690
19710
  // src/utils/input-group-utils.ts
18691
19711
  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";
19712
+ 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
19713
  var inputGroupSpacedClasses = "gap-2";
18694
19714
  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
19715
  var inputGroupAddonSizeClasses = {
@@ -19010,7 +20030,7 @@ function loadImage(src) {
19010
20030
  }
19011
20031
 
19012
20032
  // 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";
20033
+ 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
20034
  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
20035
  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
20036
  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 +20063,11 @@ var printLayoutPrintStyles = `
19043
20063
  // src/utils/image-viewer-utils.ts
19044
20064
  var imageViewerBackdropClasses = "fixed inset-0 bg-[var(--tiger-image-mask,rgba(0,0,0,0.85))] z-50 flex items-center justify-center";
19045
20065
  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";
20066
+ 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
20067
  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";
20068
+ 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
20069
  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";
20070
+ 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
20071
  var imageViewerIcons = {
19052
20072
  zoomIn: zoomInIconPath,
19053
20073
  zoomOut: zoomOutIconPath,
@@ -19427,6 +20447,10 @@ var THEME_CSS_VARS = {
19427
20447
  chart4: "--tiger-chart-4",
19428
20448
  chart5: "--tiger-chart-5",
19429
20449
  chart6: "--tiger-chart-6",
20450
+ // Aliases of existing semantic tokens (not a third color system)
20451
+ textMuted: "--tiger-text-muted",
20452
+ fill: "--tiger-fill",
20453
+ bg: "--tiger-bg",
19430
20454
  // Breakpoints
19431
20455
  breakpointXs: "--tiger-breakpoint-xs",
19432
20456
  breakpointSm: "--tiger-breakpoint-sm",
@@ -19434,6 +20458,23 @@ var THEME_CSS_VARS = {
19434
20458
  breakpointLg: "--tiger-breakpoint-lg",
19435
20459
  breakpointXl: "--tiger-breakpoint-xl"
19436
20460
  };
20461
+ var THEME_CSS_VAR_ALIAS_SOURCES = {
20462
+ textMuted: "textSecondary",
20463
+ fill: "surfaceMuted",
20464
+ bg: "surface"
20465
+ };
20466
+ function semanticColorsToCssVars(colors = {}) {
20467
+ const vars = {};
20468
+ for (const [key, value] of Object.entries(colors)) {
20469
+ const varName = THEME_CSS_VARS[key];
20470
+ if (varName && value) vars[varName] = value;
20471
+ }
20472
+ for (const aliasKey of Object.keys(THEME_CSS_VAR_ALIAS_SOURCES)) {
20473
+ const sourceKey = THEME_CSS_VAR_ALIAS_SOURCES[aliasKey];
20474
+ vars[THEME_CSS_VARS[aliasKey]] = `var(${THEME_CSS_VARS[sourceKey]})`;
20475
+ }
20476
+ return vars;
20477
+ }
19437
20478
  var cssVarCache = /* @__PURE__ */ new WeakMap();
19438
20479
  function setCssVarsCached(element, vars) {
19439
20480
  let cache = cssVarCache.get(element);
@@ -19715,18 +20756,8 @@ var defaultTheme = {
19715
20756
  };
19716
20757
 
19717
20758
  // 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);
20759
+ var tigercatTheme = semanticColorsToCssVars(defaultThemeLightColors);
20760
+ var tigercatDarkTheme = semanticColorsToCssVars(defaultThemeDarkColors);
19730
20761
  var tigercatDirectionBase = {
19731
20762
  '[dir="rtl"] .tiger-rtl-mirror, [data-tiger-dir="rtl"] .tiger-rtl-mirror': {
19732
20763
  transform: "scaleX(-1)"
@@ -19768,8 +20799,8 @@ var tigercatPlugin = plugin(function({ addBase }) {
19768
20799
  function createTigercatPlugin(options = {}) {
19769
20800
  return plugin(function({ addBase }) {
19770
20801
  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;
20802
+ const lightVars = preset?.light?.colors ? semanticColorsToCssVars(preset.light.colors) : tigercatTheme;
20803
+ const darkVars = preset?.dark?.colors ? semanticColorsToCssVars(preset.dark.colors) : tigercatDarkTheme;
19773
20804
  addBase({
19774
20805
  ":root": { ...lightVars, ...MODERN_BASE_TOKENS_LIGHT },
19775
20806
  ".dark": { ...darkVars, ...MODERN_BASE_TOKENS_DARK },
@@ -19833,13 +20864,9 @@ var THEME_CONFIG_CSS_VARS = {
19833
20864
  }
19834
20865
  };
19835
20866
  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
- }
20867
+ const vars = {
20868
+ ...semanticColorsToCssVars(config.colors)
20869
+ };
19843
20870
  for (const section of ["typography", "radius", "shadows", "spacing", "motion"]) {
19844
20871
  const values = config[section];
19845
20872
  if (!values) continue;
@@ -20932,7 +21959,7 @@ var designTokens = {
20932
21959
  };
20933
21960
 
20934
21961
  // src/index.ts
20935
- var version = "2.1.0";
21962
+ var version = "2.1.2";
20936
21963
  export {
20937
21964
  ANIMATION_DURATION_FAST_MS,
20938
21965
  ANIMATION_DURATION_MS,
@@ -20946,14 +21973,21 @@ export {
20946
21973
  COUNTDOWN_DEFAULT_FORMAT,
20947
21974
  COUNTDOWN_DEFAULT_INTERVAL_MS,
20948
21975
  CROP_HANDLES,
21976
+ DEFAULT_ACTIVITY_FEED_LABELS,
20949
21977
  DEFAULT_AVATAR_GROUP_LABELS,
20950
21978
  DEFAULT_CALENDAR_LABELS,
20951
21979
  DEFAULT_CAROUSEL_LABELS,
20952
21980
  DEFAULT_CHART_COLORS,
20953
21981
  DEFAULT_CHART_LABELS,
21982
+ DEFAULT_CHAT_WINDOW_LABELS,
21983
+ DEFAULT_CODE_LABELS,
21984
+ DEFAULT_COLOR_PICKER_LABELS,
21985
+ DEFAULT_COMMENT_THREAD_LABELS,
20954
21986
  DEFAULT_CRON_EDITOR_LABELS,
20955
21987
  DEFAULT_DATA_EXPORT_LABELS,
20956
21988
  DEFAULT_FILE_MANAGER_LABELS,
21989
+ DEFAULT_FLOATING_HOVER_HIDE_DELAY_MS,
21990
+ DEFAULT_FLOATING_HOVER_SHOW_DELAY_MS,
20957
21991
  DEFAULT_FORM_VALIDATION_LABELS,
20958
21992
  DEFAULT_FORM_WIZARD_LABELS,
20959
21993
  DEFAULT_HEATMAP_CANVAS_THRESHOLD,
@@ -20970,6 +22004,7 @@ export {
20970
22004
  DEFAULT_KBD_SEPARATOR,
20971
22005
  DEFAULT_KBD_SIZE,
20972
22006
  DEFAULT_KBD_VARIANT,
22007
+ DEFAULT_LOADING_BACKGROUND,
20973
22008
  DEFAULT_LOADING_BAR_ARIA_LABEL,
20974
22009
  DEFAULT_LOADING_BAR_COLOR,
20975
22010
  DEFAULT_LOADING_BAR_HEIGHT,
@@ -20981,6 +22016,7 @@ export {
20981
22016
  DEFAULT_MARQUEE_PAUSE_ON_HOVER,
20982
22017
  DEFAULT_MARQUEE_REPEAT,
20983
22018
  DEFAULT_MASK_TOKENS,
22019
+ DEFAULT_NOTIFICATION_CENTER_LABELS,
20984
22020
  DEFAULT_PAGINATION_LABELS,
20985
22021
  DEFAULT_RATE_LABELS,
20986
22022
  DEFAULT_RICH_TEXT_EDITOR_LABELS,
@@ -21082,10 +22118,15 @@ export {
21082
22118
  ThemeManager,
21083
22119
  VIEW_TRANSITION_CSS,
21084
22120
  WEEKDAYS,
22121
+ ZH_CN_ACTIVITY_FEED_LABELS,
21085
22122
  ZH_CN_AVATAR_GROUP_LABELS,
21086
22123
  ZH_CN_CALENDAR_LABELS,
21087
22124
  ZH_CN_CAROUSEL_LABELS,
21088
22125
  ZH_CN_CHART_LABELS,
22126
+ ZH_CN_CHAT_WINDOW_LABELS,
22127
+ ZH_CN_CODE_LABELS,
22128
+ ZH_CN_COLOR_PICKER_LABELS,
22129
+ ZH_CN_COMMENT_THREAD_LABELS,
21089
22130
  ZH_CN_CRON_EDITOR_LABELS,
21090
22131
  ZH_CN_DATA_EXPORT_LABELS,
21091
22132
  ZH_CN_FILE_MANAGER_LABELS,
@@ -21095,6 +22136,7 @@ export {
21095
22136
  ZH_CN_IMAGE_VIEWER_LABELS,
21096
22137
  ZH_CN_INPUT_OTP_LABELS,
21097
22138
  ZH_CN_MARKDOWN_EDITOR_LABELS,
22139
+ ZH_CN_NOTIFICATION_CENTER_LABELS,
21098
22140
  ZH_CN_PAGINATION_LABELS,
21099
22141
  ZH_CN_RATE_LABELS,
21100
22142
  ZH_CN_RICH_TEXT_EDITOR_LABELS,
@@ -21149,10 +22191,12 @@ export {
21149
22191
  animationDelayClasses,
21150
22192
  animationDelayStyles,
21151
22193
  announceToScreenReader,
22194
+ appendDefaultTaskBoardCard,
21152
22195
  applyAspectRatio,
21153
22196
  applyChartBrush,
21154
22197
  applyFileDragReorder,
21155
22198
  applyFloatingStyles,
22199
+ applyGanttTaskDateOverlay,
21156
22200
  applyMarkdownToolbarAction,
21157
22201
  applyMaskInput,
21158
22202
  applyNumberKeyboardInput,
@@ -21207,6 +22251,7 @@ export {
21207
22251
  buildActivityGroups,
21208
22252
  buildChartLegendItems,
21209
22253
  buildChartSeriesKeys,
22254
+ buildChatMessageStatusInfo,
21210
22255
  buildCommentTree,
21211
22256
  buildCronFieldValue,
21212
22257
  buildNotificationGroups,
@@ -21298,6 +22343,7 @@ export {
21298
22343
  chevronRightSolidIcon20PathD,
21299
22344
  clampBarWidth,
21300
22345
  clampDimensions,
22346
+ clampGanttDragDeltaX,
21301
22347
  clampImageAnnotationPoint,
21302
22348
  clampImageAnnotationUnit,
21303
22349
  clampLoadingBarPercentage,
@@ -21332,6 +22378,7 @@ export {
21332
22378
  codeBlockContainerClasses,
21333
22379
  codeBlockCopyButtonBaseClasses,
21334
22380
  codeBlockCopyButtonCopiedClasses,
22381
+ codeBlockCopyButtonFailedClasses,
21335
22382
  codeBlockPreClasses,
21336
22383
  codeEditorActiveLineDarkClasses,
21337
22384
  codeEditorActiveLineLightClasses,
@@ -21416,14 +22463,18 @@ export {
21416
22463
  createChartLinkController,
21417
22464
  createChartPointerMoveScheduler,
21418
22465
  createChartResizeObserverController,
22466
+ createCircleRingPath,
21419
22467
  createCollapseTransitionController,
21420
22468
  createColumnDragData,
21421
22469
  createCountdownPayload,
21422
22470
  createDefaultDragSnapshot,
22471
+ createDefaultMarkdownToolbar,
22472
+ createDefaultRichTextToolbar,
21423
22473
  createDefaultTransform,
21424
22474
  createDocumentDragSession,
21425
22475
  createDragState,
21426
22476
  createEmptyScrollAreaState,
22477
+ createFloatingHoverDelayController,
21427
22478
  createFloatingIdFactory,
21428
22479
  createFocusTrap,
21429
22480
  createFormConditionDependencies,
@@ -21452,6 +22503,8 @@ export {
21452
22503
  createPinchState,
21453
22504
  createPointScale,
21454
22505
  createPolygonPath,
22506
+ createPolygonRingPath,
22507
+ createProgrammaticScrollLock,
21455
22508
  createRafRepeatActionController,
21456
22509
  createScrollSpyObserver,
21457
22510
  createScrollSpyPayload,
@@ -21617,6 +22670,7 @@ export {
21617
22670
  filterTreeNodes,
21618
22671
  filterTreeSelectNodes,
21619
22672
  findActiveAnchor,
22673
+ findActiveAnchorAtOffsetLine,
21620
22674
  findCascaderOption,
21621
22675
  findColumnFromPoint,
21622
22676
  findFirstEnabledIndex,
@@ -21640,6 +22694,7 @@ export {
21640
22694
  floatButtonGroupClasses,
21641
22695
  floatButtonGroupExpandClasses,
21642
22696
  floatButtonIconSizeClasses,
22697
+ floatButtonPlusIconPath,
21643
22698
  floatButtonShapeClasses,
21644
22699
  floatButtonSizeClasses,
21645
22700
  floatButtonTypeClasses,
@@ -21655,6 +22710,7 @@ export {
21655
22710
  formatBadgeContent,
21656
22711
  formatBytes,
21657
22712
  formatChatTime,
22713
+ formatColorPickerSelectPreset,
21658
22714
  formatColorString,
21659
22715
  formatCommentTime,
21660
22716
  formatCountdown,
@@ -21687,9 +22743,11 @@ export {
21687
22743
  fullscreenIcon,
21688
22744
  ganttAxisTextClasses,
21689
22745
  ganttBarClasses,
22746
+ ganttDateValuesEqual,
21690
22747
  ganttDependencyClasses,
21691
22748
  ganttLabelClasses,
21692
22749
  ganttProgressClasses,
22750
+ ganttPxToMs,
21693
22751
  ganttRowClasses,
21694
22752
  ganttTodayLineClasses,
21695
22753
  generateAvatarColor,
@@ -21705,6 +22763,7 @@ export {
21705
22763
  getActiveLineIndex,
21706
22764
  getActiveTourStepPosition,
21707
22765
  getActiveTourSteps,
22766
+ getActivityFeedLabels,
21708
22767
  getAlertIconPath,
21709
22768
  getAlertTypeClasses,
21710
22769
  getAlignClasses,
@@ -21780,6 +22839,7 @@ export {
21780
22839
  getChartTooltipTransform,
21781
22840
  getChatMessageStatusInfo,
21782
22841
  getChatStatusBarClasses,
22842
+ getChatWindowLabels,
21783
22843
  getCheckboxCellClasses,
21784
22844
  getCheckboxClasses,
21785
22845
  getCheckboxLabelClasses,
@@ -21790,6 +22850,7 @@ export {
21790
22850
  getCodeEditorActiveLineClasses,
21791
22851
  getCodeEditorCaretClasses,
21792
22852
  getCodeEditorContainerClasses,
22853
+ getCodeLabels,
21793
22854
  getColGutterClasses,
21794
22855
  getColMergedStyleVars,
21795
22856
  getColOrderStyleVars,
@@ -21798,12 +22859,14 @@ export {
21798
22859
  getCollapseIconClasses,
21799
22860
  getCollapsePanelClasses,
21800
22861
  getCollapsePanelHeaderClasses,
22862
+ getColorPickerLabels,
21801
22863
  getColorPickerTriggerClasses,
21802
22864
  getColorSwatchButtonClasses,
21803
22865
  getColorSwatchCheckClasses,
21804
22866
  getColorSwatchOptionKey,
21805
22867
  getColumnCardCount,
21806
22868
  getColumnDropIndex,
22869
+ getCommentThreadLabels,
21807
22870
  getComponentMotionStyle,
21808
22871
  getComponentMotionTransition,
21809
22872
  getComponentTransition,
@@ -21896,6 +22959,7 @@ export {
21896
22959
  getFixedColumnStyle,
21897
22960
  getFixedVirtualRange,
21898
22961
  getFlexClasses,
22962
+ getFloatButtonGroupClasses,
21899
22963
  getFloatingMiddleware,
21900
22964
  getFocusTrapNavigation,
21901
22965
  getFocusableElements2 as getFocusableElements,
@@ -21957,10 +23021,12 @@ export {
21957
23021
  getInitialSubmenuHeightTransitionStyle,
21958
23022
  getInitials,
21959
23023
  getInputAffixClasses,
23024
+ getInputChromeClasses,
21960
23025
  getInputClasses,
21961
23026
  getInputClearButtonClasses,
21962
23027
  getInputCountClasses,
21963
23028
  getInputErrorClasses,
23029
+ getInputFieldClasses,
21964
23030
  getInputGroupAddonClasses,
21965
23031
  getInputGroupClasses,
21966
23032
  getInputNumberFocusRingColor,
@@ -22043,6 +23109,7 @@ export {
22043
23109
  getNextImageAnnotationTool,
22044
23110
  getNextSlideIndex,
22045
23111
  getNextTableSelectAllKeys,
23112
+ getNotificationCenterLabels,
22046
23113
  getNotificationIconPath,
22047
23114
  getNotificationTypeClasses,
22048
23115
  getNumberExtent,
@@ -22187,6 +23254,7 @@ export {
22187
23254
  getSplitButtonTriggerClasses,
22188
23255
  getSplitterContainerClasses,
22189
23256
  getSplitterGutterClasses,
23257
+ getSplitterGutterCssVars,
22190
23258
  getSplitterGutterHandleClasses,
22191
23259
  getSpotlightFuzzyScore,
22192
23260
  getSpotlightOptionClasses,
@@ -22212,6 +23280,7 @@ export {
22212
23280
  getSubMenuExpandIconClasses,
22213
23281
  getSubMenuTitleClasses,
22214
23282
  getSunburstGradientPrefix,
23283
+ getSunburstLabelPoint,
22215
23284
  getSvgDefaultAttrs,
22216
23285
  getSwitchClasses,
22217
23286
  getSwitchThumbClasses,
@@ -22224,6 +23293,7 @@ export {
22224
23293
  getTabPaneClasses,
22225
23294
  getTableCellClasses,
22226
23295
  getTableColgroup,
23296
+ getTableColumnDataKey,
22227
23297
  getTableFixedCellClasses,
22228
23298
  getTableFixedHeaderCellClasses,
22229
23299
  getTableHeaderCellClasses,
@@ -22273,6 +23343,7 @@ export {
22273
23343
  getTotalTextClasses,
22274
23344
  getTouchDistance,
22275
23345
  getTourLabels,
23346
+ getTourMaskHoleStyle,
22276
23347
  getTourPopoverPosition,
22277
23348
  getTourSpotlightStyle,
22278
23349
  getTourTargetRect,
@@ -22441,6 +23512,7 @@ export {
22441
23512
  isAtMax,
22442
23513
  isAtMin,
22443
23514
  isBrowser,
23515
+ isCalendarMonthDisabled,
22444
23516
  isCascaderOptionExpandable,
22445
23517
  isColorSwatchSelected,
22446
23518
  isContentEmpty,
@@ -22557,6 +23629,7 @@ export {
22557
23629
  lockOpenIcon24PathD,
22558
23630
  manageLiveRegion,
22559
23631
  mapToolbarAction,
23632
+ mapVisibleCardIndexToSource,
22560
23633
  markdownEditorBodyClasses,
22561
23634
  markdownEditorContainerBase,
22562
23635
  markdownEditorContainerDisabled,
@@ -22640,6 +23713,7 @@ export {
22640
23713
  moveCard,
22641
23714
  moveCropRect,
22642
23715
  moveFocusInMenu,
23716
+ moveGanttTaskByPx,
22643
23717
  moveItemBetweenContainers,
22644
23718
  movePan,
22645
23719
  movePinch,
@@ -22647,6 +23721,7 @@ export {
22647
23721
  musicIcon,
22648
23722
  naturalTheme,
22649
23723
  navigateToFolder,
23724
+ nextCommentLikeState,
22650
23725
  nextIconPath,
22651
23726
  nextLoadingBarTricklePercentage,
22652
23727
  normalizeActiveKeys,
@@ -22713,6 +23788,7 @@ export {
22713
23788
  paperclipIcon,
22714
23789
  parseAspectRatio,
22715
23790
  parseColorInput,
23791
+ parseColorParts,
22716
23792
  parseCountdownTimestamp,
22717
23793
  parseCronFieldControl,
22718
23794
  parseDate,
@@ -22787,6 +23863,7 @@ export {
22787
23863
  radioVisualBaseClasses,
22788
23864
  rateActiveColor,
22789
23865
  rateBaseClasses,
23866
+ rateHalfStarInnerClasses,
22790
23867
  rateHoverColor,
22791
23868
  rateInactiveColor,
22792
23869
  readFileAsDataUrl,
@@ -22827,11 +23904,13 @@ export {
22827
23904
  resizePanes,
22828
23905
  resolveAffixTarget,
22829
23906
  resolveAnchoredOverlayTarget,
23907
+ resolveAutoCompleteDisplayValue,
22830
23908
  resolveCardPadding,
22831
23909
  resolveCarouselSwipeDirection,
22832
23910
  resolveChartPalette,
22833
23911
  resolveChartTooltipContent,
22834
23912
  resolveChartTooltipPosition,
23913
+ resolveCommentLikeState,
22835
23914
  resolveConditionalFormRules,
22836
23915
  resolveCreatableSelectOption,
22837
23916
  resolveDragConfig,
@@ -22847,6 +23926,7 @@ export {
22847
23926
  resolveImageCompareOrientation,
22848
23927
  resolveImageComparePosition,
22849
23928
  resolveImageCompareStep,
23929
+ resolveInitialPaneSizes,
22850
23930
  resolveKbdSeparator,
22851
23931
  resolveKbdSize,
22852
23932
  resolveKbdVariant,
@@ -22940,6 +24020,7 @@ export {
22940
24020
  selectOptionDisabledClasses,
22941
24021
  selectOptionSelectedClasses,
22942
24022
  selectSearchInputClasses,
24023
+ semanticColorsToCssVars,
22943
24024
  semanticTokens,
22944
24025
  sendIcon,
22945
24026
  serializeChartSvg,
@@ -22949,6 +24030,7 @@ export {
22949
24030
  setThemeColors,
22950
24031
  shareIcon,
22951
24032
  shieldCheckIcon,
24033
+ shiftGanttTaskDates,
22952
24034
  shouldCloseOnMaskClick,
22953
24035
  shouldCommitImageAnnotationBox,
22954
24036
  shouldHideBadge,
@@ -23106,6 +24188,7 @@ export {
23106
24188
  tableRowGroupHoverClasses,
23107
24189
  tableRowHoverClasses,
23108
24190
  tableRowStripedClasses,
24191
+ tableSortButtonClasses,
23109
24192
  tableSummaryRowClasses,
23110
24193
  tabsBaseClasses,
23111
24194
  tagBaseClasses,
@@ -23260,6 +24343,7 @@ export {
23260
24343
  watermarkFontDefaults,
23261
24344
  watermarkWrapperClasses,
23262
24345
  wifiIcon,
24346
+ writeCommentLikeOverlay,
23263
24347
  zoomInIcon,
23264
24348
  zoomInIconPath,
23265
24349
  zoomOutIcon,