@expcat/tigercat-vue 1.2.23 → 1.2.31

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 (141) hide show
  1. package/dist/{chunk-OK7MTFAX.mjs → chunk-4GYBJBFJ.mjs} +76 -19
  2. package/dist/{chunk-YCBU3C4T.mjs → chunk-4J5EK3WY.mjs} +100 -35
  3. package/dist/{chunk-2C5TOAYI.js → chunk-663C2UX7.js} +2 -2
  4. package/dist/{chunk-P453RVKY.js → chunk-6G5IMGTC.js} +85 -14
  5. package/dist/{chunk-NMVKDWMK.mjs → chunk-7U673KY5.mjs} +77 -8
  6. package/dist/{chunk-5ZAIW5W3.mjs → chunk-AQE5RZDE.mjs} +1 -1
  7. package/dist/{chunk-DYJ4Z47L.mjs → chunk-BPRKQVIL.mjs} +143 -46
  8. package/dist/{chunk-V6YR7CPK.js → chunk-CNRBYRK6.js} +56 -21
  9. package/dist/{chunk-KOLARHCT.js → chunk-DEDRUUK4.js} +1 -0
  10. package/dist/{chunk-VPNIZPIF.js → chunk-DS7RQFEG.js} +15 -2
  11. package/dist/{chunk-BGMQIUPP.js → chunk-EU4IGIPC.js} +7 -4
  12. package/dist/{chunk-CN7HFUFN.mjs → chunk-F5S26BR3.mjs} +7 -4
  13. package/dist/{chunk-YCBLL5K3.js → chunk-FKLK6RHZ.js} +76 -19
  14. package/dist/{chunk-U5S3ZEYZ.js → chunk-H5JDEKIV.js} +100 -35
  15. package/dist/{chunk-XMGU52S5.js → chunk-L6W3XL3A.js} +143 -46
  16. package/dist/{chunk-F5JPUPWI.mjs → chunk-OF4MY6EC.mjs} +1 -0
  17. package/dist/{chunk-KLX7YHP2.mjs → chunk-OZLSZQXF.mjs} +83 -12
  18. package/dist/{chunk-ATRF7NPJ.mjs → chunk-PKMSTN65.mjs} +55 -20
  19. package/dist/{chunk-PUSTYAMS.mjs → chunk-RE7K3KNW.mjs} +16 -3
  20. package/dist/{chunk-IIEMDA36.mjs → chunk-S45NWVQS.mjs} +14 -8
  21. package/dist/{chunk-CBZIVUCJ.js → chunk-VES3OJOP.js} +14 -8
  22. package/dist/{chunk-OW5D4LU6.js → chunk-YS6YQKYU.js} +80 -11
  23. package/dist/components/ActivityFeed.d.mts +2 -2
  24. package/dist/components/ActivityFeed.d.ts +2 -2
  25. package/dist/components/ActivityFeed.js +2 -2
  26. package/dist/components/ActivityFeed.mjs +1 -1
  27. package/dist/components/Alert.d.mts +5 -5
  28. package/dist/components/Alert.d.ts +5 -5
  29. package/dist/components/Anchor.d.mts +2 -2
  30. package/dist/components/Anchor.d.ts +2 -2
  31. package/dist/components/BackTop.d.mts +1 -1
  32. package/dist/components/BackTop.d.ts +1 -1
  33. package/dist/components/ButtonGroup.d.mts +1 -1
  34. package/dist/components/ButtonGroup.d.ts +1 -1
  35. package/dist/components/Card.d.mts +1 -1
  36. package/dist/components/Card.d.ts +1 -1
  37. package/dist/components/ChatWindow.js +3 -2
  38. package/dist/components/ChatWindow.mjs +2 -1
  39. package/dist/components/CodeEditor.d.mts +1 -1
  40. package/dist/components/CodeEditor.d.ts +1 -1
  41. package/dist/components/CollapsePanel.d.mts +1 -1
  42. package/dist/components/CollapsePanel.d.ts +1 -1
  43. package/dist/components/CommentThread.d.mts +1 -1
  44. package/dist/components/CommentThread.d.ts +1 -1
  45. package/dist/components/CommentThread.js +2 -2
  46. package/dist/components/CommentThread.mjs +1 -1
  47. package/dist/components/Countdown.d.mts +1 -1
  48. package/dist/components/Countdown.d.ts +1 -1
  49. package/dist/components/CropUpload.js +2 -2
  50. package/dist/components/CropUpload.mjs +1 -1
  51. package/dist/components/DataTableWithToolbar.d.mts +3 -3
  52. package/dist/components/DataTableWithToolbar.d.ts +3 -3
  53. package/dist/components/DataTableWithToolbar.js +4 -3
  54. package/dist/components/DataTableWithToolbar.mjs +3 -2
  55. package/dist/components/DatePicker.d.mts +1 -1
  56. package/dist/components/DatePicker.d.ts +1 -1
  57. package/dist/components/Descriptions.d.mts +1 -1
  58. package/dist/components/Descriptions.d.ts +1 -1
  59. package/dist/components/Drawer.d.mts +4 -4
  60. package/dist/components/Drawer.d.ts +4 -4
  61. package/dist/components/Empty.d.mts +1 -1
  62. package/dist/components/Empty.d.ts +1 -1
  63. package/dist/components/FileManager.d.mts +1 -1
  64. package/dist/components/FileManager.d.ts +1 -1
  65. package/dist/components/FormWizard.d.mts +12 -3
  66. package/dist/components/FormWizard.d.ts +12 -3
  67. package/dist/components/FormWizard.js +3 -3
  68. package/dist/components/FormWizard.mjs +2 -2
  69. package/dist/components/HeatmapChart.d.mts +1 -1
  70. package/dist/components/HeatmapChart.d.ts +1 -1
  71. package/dist/components/InfiniteScroll.d.mts +1 -1
  72. package/dist/components/InfiniteScroll.d.ts +1 -1
  73. package/dist/components/Kanban.d.mts +1 -1
  74. package/dist/components/Kanban.d.ts +1 -1
  75. package/dist/components/Kanban.js +3 -3
  76. package/dist/components/Kanban.mjs +2 -2
  77. package/dist/components/List.d.mts +2 -2
  78. package/dist/components/List.d.ts +2 -2
  79. package/dist/components/MarkdownEditor.d.mts +1 -1
  80. package/dist/components/MarkdownEditor.d.ts +1 -1
  81. package/dist/components/Menu.d.mts +5 -5
  82. package/dist/components/Menu.d.ts +5 -5
  83. package/dist/components/Modal.d.mts +8 -8
  84. package/dist/components/Modal.d.ts +8 -8
  85. package/dist/components/NotificationCenter.d.mts +3 -3
  86. package/dist/components/NotificationCenter.d.ts +3 -3
  87. package/dist/components/NotificationCenter.js +2 -2
  88. package/dist/components/NotificationCenter.mjs +1 -1
  89. package/dist/components/NumberKeyboard.d.mts +1 -1
  90. package/dist/components/NumberKeyboard.d.ts +1 -1
  91. package/dist/components/Pagination.d.mts +2 -2
  92. package/dist/components/Pagination.d.ts +2 -2
  93. package/dist/components/Popconfirm.d.mts +5 -5
  94. package/dist/components/Popconfirm.d.ts +5 -5
  95. package/dist/components/Popover.d.mts +1 -1
  96. package/dist/components/Popover.d.ts +1 -1
  97. package/dist/components/Result.d.mts +1 -1
  98. package/dist/components/Result.d.ts +1 -1
  99. package/dist/components/ScrollSpy.d.mts +1 -1
  100. package/dist/components/ScrollSpy.d.ts +1 -1
  101. package/dist/components/Space.d.mts +1 -1
  102. package/dist/components/Space.d.ts +1 -1
  103. package/dist/components/Splitter.d.mts +1 -1
  104. package/dist/components/Splitter.d.ts +1 -1
  105. package/dist/components/Spotlight.d.mts +4 -4
  106. package/dist/components/Spotlight.d.ts +4 -4
  107. package/dist/components/Statistic.d.mts +1 -1
  108. package/dist/components/Statistic.d.ts +1 -1
  109. package/dist/components/Steps.d.mts +2 -2
  110. package/dist/components/Steps.d.ts +2 -2
  111. package/dist/components/Steps.js +2 -2
  112. package/dist/components/Steps.mjs +1 -1
  113. package/dist/components/StepsItem.js +3 -3
  114. package/dist/components/StepsItem.mjs +1 -1
  115. package/dist/components/Table.d.mts +1 -1
  116. package/dist/components/Table.d.ts +1 -1
  117. package/dist/components/Table.js +3 -2
  118. package/dist/components/Table.mjs +2 -1
  119. package/dist/components/Tabs.d.mts +2 -2
  120. package/dist/components/Tabs.d.ts +2 -2
  121. package/dist/components/Tag.d.mts +2 -2
  122. package/dist/components/Tag.d.ts +2 -2
  123. package/dist/components/TaskBoard.d.mts +1 -1
  124. package/dist/components/TaskBoard.d.ts +1 -1
  125. package/dist/components/TaskBoard.js +2 -2
  126. package/dist/components/TaskBoard.mjs +1 -1
  127. package/dist/components/TimePicker.d.mts +2 -2
  128. package/dist/components/TimePicker.d.ts +2 -2
  129. package/dist/components/Timeline.d.mts +2 -2
  130. package/dist/components/Timeline.d.ts +2 -2
  131. package/dist/components/Tour.d.mts +4 -4
  132. package/dist/components/Tour.d.ts +4 -4
  133. package/dist/components/Tree.d.mts +2 -2
  134. package/dist/components/Tree.d.ts +2 -2
  135. package/dist/components/Upload.d.mts +4 -4
  136. package/dist/components/Upload.d.ts +4 -4
  137. package/dist/components/VirtualTable.d.mts +1 -1
  138. package/dist/components/VirtualTable.d.ts +1 -1
  139. package/dist/index.js +15 -15
  140. package/dist/index.mjs +14 -14
  141. package/package.json +2 -2
@@ -1,11 +1,27 @@
1
+ import {
2
+ useTigerConfig
3
+ } from "./chunk-VG6E4NX6.mjs";
4
+
1
5
  // src/components/Table.ts
2
- import { defineComponent, h as h6, onBeforeUnmount, onMounted, ref as ref2 } from "vue";
6
+ import {
7
+ computed as computed2,
8
+ defineComponent,
9
+ h as h6,
10
+ onBeforeUnmount,
11
+ onMounted,
12
+ ref as ref2,
13
+ watch as watch2
14
+ } from "vue";
3
15
  import {
4
16
  classNames as classNames3,
5
17
  createTableResizeObserverController,
18
+ getImmediateTigerLocale,
6
19
  getTableWrapperClasses,
7
20
  getTableResponsiveTableClasses,
8
21
  getTableVirtualRecommendation,
22
+ isLazyTigerLocale,
23
+ mergeTigerLocale,
24
+ resolveTigerLocale,
9
25
  tableBaseClasses,
10
26
  tableResponsiveCardClasses,
11
27
  tableResponsiveCardLabelClasses,
@@ -1068,6 +1084,10 @@ function renderSummaryRow(ctx, props) {
1068
1084
  // src/components/Table/render-pagination.ts
1069
1085
  import { h as h5 } from "vue";
1070
1086
  import {
1087
+ formatIntlNumber,
1088
+ formatPageAriaLabel,
1089
+ formatPaginationTotal,
1090
+ getPaginationLabels,
1071
1091
  getSimplePaginationContainerClasses,
1072
1092
  getSimplePaginationTotalClasses,
1073
1093
  getSimplePaginationControlsClasses,
@@ -1076,18 +1096,31 @@ import {
1076
1096
  getSimplePaginationPageIndicatorClasses,
1077
1097
  getSimplePaginationButtonsWrapperClasses
1078
1098
  } from "@expcat/tigercat-core";
1079
- function renderPagination(ctx, props) {
1099
+ function renderPagination(ctx, props, view) {
1080
1100
  if (props.pagination === false || !ctx.paginationInfo.value) {
1081
1101
  return null;
1082
1102
  }
1083
1103
  const { totalPages, startIndex, endIndex, hasNext, hasPrev } = ctx.paginationInfo.value;
1084
1104
  const paginationConfig = props.pagination;
1085
1105
  const total = paginationConfig.total !== void 0 && paginationConfig.total > 0 ? paginationConfig.total : ctx.processedData.value.length;
1106
+ const locale = view?.disableI18n ? void 0 : view?.locale;
1107
+ const labels = locale ? getPaginationLabels(locale) : void 0;
1108
+ const localeCode = locale?.locale;
1109
+ const isZh = !!localeCode?.startsWith("zh") || locale?.formWizard?.prevText === "\u4E0A\u4E00\u6B65" || locale?.upload?.clickToUploadText === "\u70B9\u51FB\u4E0A\u4F20";
1110
+ const defaultTotalText = (t, range) => isZh ? `\u5171 ${t} \u6761` : `Showing ${range[0]} to ${range[1]} of ${t} results`;
1111
+ const defaultPrevText = isZh ? "\u4E0A\u4E00\u9875" : "Previous";
1112
+ const defaultNextText = isZh ? "\u4E0B\u4E00\u9875" : "Next";
1113
+ const defaultPageIndicatorText = (current, total2) => isZh ? `\u7B2C ${current} \u9875 / \u5171 ${total2} \u9875` : `Page ${current} of ${total2}`;
1114
+ const defaultPageSizeText = (size) => isZh ? `${size} \u6761/\u9875` : `${size} / page`;
1115
+ const finalTotalText = paginationConfig.totalText ? paginationConfig.totalText(total, [startIndex, endIndex]) : labels ? formatPaginationTotal(labels.totalText, total, [startIndex, endIndex], localeCode) : defaultTotalText(total, [startIndex, endIndex]);
1116
+ const finalPrevText = paginationConfig.prevText || labels?.prevPageAriaLabel || defaultPrevText;
1117
+ const finalNextText = paginationConfig.nextText || labels?.nextPageAriaLabel || defaultNextText;
1118
+ const finalPageIndicatorText = paginationConfig.pageIndicatorText ? paginationConfig.pageIndicatorText(ctx.currentPage.value, totalPages) : labels ? `${formatPageAriaLabel(labels.pageAriaLabel, ctx.currentPage.value, localeCode)} / ${formatIntlNumber(totalPages, localeCode)} ${labels.pageText}` : defaultPageIndicatorText(ctx.currentPage.value, totalPages);
1086
1119
  return h5("div", { class: getSimplePaginationContainerClasses() }, [
1087
1120
  paginationConfig.showTotal !== false && h5(
1088
1121
  "div",
1089
1122
  { class: getSimplePaginationTotalClasses() },
1090
- paginationConfig.totalText ? paginationConfig.totalText(total, [startIndex, endIndex]) : `Showing ${startIndex} to ${endIndex} of ${total} results`
1123
+ finalTotalText
1091
1124
  ),
1092
1125
  h5("div", { class: getSimplePaginationControlsClasses() }, [
1093
1126
  paginationConfig.showSizeChanger !== false && h5(
@@ -1098,7 +1131,7 @@ function renderPagination(ctx, props) {
1098
1131
  onChange: (e) => ctx.handlePageSizeChange(Number(e.target.value))
1099
1132
  },
1100
1133
  (paginationConfig.pageSizeOptions || [10, 20, 50, 100]).map(
1101
- (size) => h5("option", { value: size }, `${size} / page`)
1134
+ (size) => h5("option", { value: size }, paginationConfig.pageSizeText ? paginationConfig.pageSizeText(size) : labels ? `${formatIntlNumber(size, localeCode)} ${labels.itemsPerPageText}` : defaultPageSizeText(size))
1102
1135
  )
1103
1136
  ),
1104
1137
  h5("div", { class: getSimplePaginationButtonsWrapperClasses() }, [
@@ -1109,12 +1142,12 @@ function renderPagination(ctx, props) {
1109
1142
  disabled: !hasPrev,
1110
1143
  onClick: () => ctx.handlePageChange(ctx.currentPage.value - 1)
1111
1144
  },
1112
- "Previous"
1145
+ finalPrevText
1113
1146
  ),
1114
1147
  h5(
1115
1148
  "span",
1116
1149
  { class: getSimplePaginationPageIndicatorClasses() },
1117
- `Page ${ctx.currentPage.value} of ${totalPages}`
1150
+ finalPageIndicatorText
1118
1151
  ),
1119
1152
  h5(
1120
1153
  "button",
@@ -1123,7 +1156,7 @@ function renderPagination(ctx, props) {
1123
1156
  disabled: !hasNext,
1124
1157
  onClick: () => ctx.handlePageChange(ctx.currentPage.value + 1)
1125
1158
  },
1126
- "Next"
1159
+ finalNextText
1127
1160
  )
1128
1161
  ])
1129
1162
  ])
@@ -1136,11 +1169,44 @@ var Table = defineComponent({
1136
1169
  props: tableProps,
1137
1170
  emits: tableEmits,
1138
1171
  setup(props, { emit, slots }) {
1172
+ const config = useTigerConfig();
1139
1173
  const wrapperRef = ref2(null);
1140
1174
  const tableRef = ref2(null);
1141
1175
  const measuredColumnWidths = ref2({});
1142
1176
  const measuredRowHeights = ref2([]);
1143
1177
  const ctx = useTableState(props, emit, measuredColumnWidths);
1178
+ const resolvedPaginationLocale = ref2();
1179
+ let paginationLocaleResolveId = 0;
1180
+ const paginationLocaleInput = computed2(
1181
+ () => props.pagination !== false && typeof props.pagination === "object" ? props.pagination.locale : void 0
1182
+ );
1183
+ const isPaginationI18nDisabled = computed2(() => paginationLocaleInput.value === false);
1184
+ watch2(
1185
+ paginationLocaleInput,
1186
+ (locale) => {
1187
+ const resolveId = ++paginationLocaleResolveId;
1188
+ if (!locale) {
1189
+ resolvedPaginationLocale.value = void 0;
1190
+ return;
1191
+ }
1192
+ const immediateLocale = getImmediateTigerLocale(locale);
1193
+ resolvedPaginationLocale.value = immediateLocale;
1194
+ if (!isLazyTigerLocale(locale)) return;
1195
+ resolveTigerLocale(locale).then((nextLocale) => {
1196
+ if (resolveId === paginationLocaleResolveId) {
1197
+ resolvedPaginationLocale.value = nextLocale;
1198
+ }
1199
+ }).catch(() => {
1200
+ if (resolveId === paginationLocaleResolveId) {
1201
+ resolvedPaginationLocale.value = immediateLocale;
1202
+ }
1203
+ });
1204
+ },
1205
+ { immediate: true }
1206
+ );
1207
+ const paginationLocale = computed2(
1208
+ () => isPaginationI18nDisabled.value ? void 0 : mergeTigerLocale(config.value.locale, resolvedPaginationLocale.value)
1209
+ );
1144
1210
  const resizeController = createTableResizeObserverController({
1145
1211
  onResize: (snapshot) => {
1146
1212
  if (!areNumberRecordsEqual(measuredColumnWidths.value, snapshot.columnWidths)) {
@@ -1302,7 +1368,10 @@ var Table = defineComponent({
1302
1368
  },
1303
1369
  [LoadingSpinner(), h6("span", { class: "sr-only" }, "Loading")]
1304
1370
  ),
1305
- renderPagination(ctx, resolvedProps)
1371
+ renderPagination(ctx, resolvedProps, {
1372
+ locale: paginationLocale.value,
1373
+ disableI18n: isPaginationI18nDisabled.value
1374
+ })
1306
1375
  ]
1307
1376
  );
1308
1377
  };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  TaskBoard
3
- } from "./chunk-CN7HFUFN.mjs";
3
+ } from "./chunk-F5S26BR3.mjs";
4
4
 
5
5
  // src/components/Kanban.ts
6
6
  import { defineComponent, h } from "vue";
@@ -163,23 +163,9 @@ var CommentThread = defineComponent({
163
163
  updateExpandedKeys(next);
164
164
  }
165
165
  };
166
- const BTN_BASE = "px-1.5 py-0.5 h-auto min-h-0 text-xs rounded";
167
- const ACTION_BTN = `${BTN_BASE} text-gray-400 hover:text-gray-600 font-normal hover:bg-gray-50`;
168
- const PRIMARY_BTN = `${BTN_BASE} text-[var(--tiger-primary,#2563eb)] hover:text-[var(--tiger-primary-hover,#1d4ed8)] font-medium hover:bg-[var(--tiger-primary,#2563eb)]/5`;
169
- const renderActionButton = (label, key, onClick, active) => h(
170
- Button,
171
- {
172
- key,
173
- size: "sm",
174
- variant: "ghost",
175
- className: classNames(
176
- ACTION_BTN,
177
- active && "text-[var(--tiger-primary,#2563eb)] hover:text-[var(--tiger-primary,#2563eb)] font-medium"
178
- ),
179
- onClick
180
- },
181
- { default: () => label }
182
- );
166
+ const BTN_BASE = "px-2 py-0.5 h-auto min-h-0 text-xs rounded-md transition-all duration-200 ease-out";
167
+ const ACTION_BTN = `${BTN_BASE} text-gray-500 dark:text-gray-400 font-medium flex items-center gap-1.5`;
168
+ const PRIMARY_BTN = `${BTN_BASE} text-[var(--tiger-primary,#2563eb)] hover:text-[var(--tiger-primary-hover,#1d4ed8)] dark:text-blue-400 dark:hover:text-blue-300 font-semibold hover:bg-[var(--tiger-primary,#2563eb)]/10 dark:hover:bg-blue-400/10`;
183
169
  const renderNode = (node, depth, isLast) => {
184
170
  const hasChildren = !!node.children && node.children.length > 0;
185
171
  const isExpanded = expandedSet.value.has(node.id);
@@ -193,24 +179,110 @@ var CommentThread = defineComponent({
193
179
  const likeLabel = node.liked ? props.likedText : props.likeText;
194
180
  const likeCount = node.likes ? ` ${node.likes}` : "";
195
181
  actions.push(
196
- renderActionButton(
197
- `${likeLabel}${likeCount}`,
198
- "like",
199
- () => emit("like", node, !node.liked),
200
- node.liked
182
+ h(
183
+ Button,
184
+ {
185
+ key: "like",
186
+ size: "sm",
187
+ variant: "ghost",
188
+ className: classNames(
189
+ ACTION_BTN,
190
+ "hover:text-blue-600 hover:bg-blue-50/50 dark:hover:text-blue-400 dark:hover:bg-blue-950/20",
191
+ node.liked && "text-blue-600 dark:text-blue-400 bg-blue-50/30 dark:bg-blue-950/10 font-semibold border-blue-200/40 dark:border-blue-800/30"
192
+ ),
193
+ onClick: () => emit("like", node, !node.liked)
194
+ },
195
+ {
196
+ default: () => h("span", { class: "flex items-center gap-1.5" }, [
197
+ h("svg", {
198
+ class: classNames("w-3.5 h-3.5 transition-transform duration-200 active:scale-125", node.liked ? "fill-current" : "stroke-current fill-none"),
199
+ viewBox: "0 0 24 24",
200
+ strokeWidth: "2"
201
+ }, [
202
+ h("path", {
203
+ strokeLinecap: "round",
204
+ strokeLinejoin: "round",
205
+ d: "M6.633 10.5c.806 0 1.533-.446 2.031-1.08a9.041 9.041 0 012.861-2.4c.723-.384 1.35-.956 1.653-1.715a4.498 4.498 0 00.322-1.672V3a.75.75 0 01.75-.75A2.25 2.25 0 0116.5 4.5c0 1.152-.26 2.243-.723 3.218-.266.558.107 1.282.725 1.282h3.126c1.026 0 1.945.694 2.054 1.715.045.421.068.848.068 1.285a11.95 11.95 0 01-2.649 7.521c-.388.482-.987.729-1.605.729H13.48c-.483 0-.964-.078-1.423-.23l-3.114-1.04a4.501 4.501 0 00-1.423-.23H5.904M14.25 9h2.25M5.904 18.75c.083.205.173.405.27.602.197.4-.078.898-.523.898h-.908c-.889 0-1.713-.518-1.972-1.368a12 12 0 010-7.764c.26-.85.1083-1.368 1.972-1.368h.908c.445 0 .72.498.523.898a8.963 8.963 0 00-.27.602"
206
+ })
207
+ ]),
208
+ h("span", `${likeLabel}${likeCount}`)
209
+ ])
210
+ }
201
211
  )
202
212
  );
203
213
  }
204
214
  if (props.showReply) {
205
215
  actions.push(
206
- renderActionButton(props.replyText, "reply", () => {
207
- replyingTo.value = replyingTo.value === node.id ? null : node.id;
208
- replyValue.value = "";
209
- })
216
+ h(
217
+ Button,
218
+ {
219
+ key: "reply",
220
+ size: "sm",
221
+ variant: "ghost",
222
+ className: classNames(
223
+ ACTION_BTN,
224
+ "hover:text-emerald-600 hover:bg-emerald-50/50 dark:hover:text-emerald-400 dark:hover:bg-emerald-950/20"
225
+ ),
226
+ onClick: () => {
227
+ replyingTo.value = replyingTo.value === node.id ? null : node.id;
228
+ replyValue.value = "";
229
+ }
230
+ },
231
+ {
232
+ default: () => h("span", { class: "flex items-center gap-1.5" }, [
233
+ h("svg", {
234
+ class: "w-3.5 h-3.5",
235
+ viewBox: "0 0 24 24",
236
+ fill: "none",
237
+ stroke: "currentColor",
238
+ strokeWidth: "2"
239
+ }, [
240
+ h("path", {
241
+ strokeLinecap: "round",
242
+ strokeLinejoin: "round",
243
+ d: "M8.625 12a.375.375 0 11-.75 0 .375.375 0 01.75 0zm0 0H8.25m4.125 0a.375.375 0 11-.75 0 .375.375 0 01.75 0zm0 0H12m4.125 0a.375.375 0 11-.75 0 .375.375 0 01.75 0zm0 0h-.375M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z"
244
+ })
245
+ ]),
246
+ h("span", props.replyText)
247
+ ])
248
+ }
249
+ )
210
250
  );
211
251
  }
212
252
  if (props.showMore) {
213
- actions.push(renderActionButton(props.moreText, "more", () => emit("more", node)));
253
+ actions.push(
254
+ h(
255
+ Button,
256
+ {
257
+ key: "more",
258
+ size: "sm",
259
+ variant: "ghost",
260
+ className: classNames(
261
+ ACTION_BTN,
262
+ "hover:text-gray-700 dark:hover:text-gray-200 hover:bg-gray-100 dark:hover:bg-gray-800"
263
+ ),
264
+ onClick: () => emit("more", node)
265
+ },
266
+ {
267
+ default: () => h("span", { class: "flex items-center gap-1.5" }, [
268
+ h("svg", {
269
+ class: "w-3.5 h-3.5",
270
+ viewBox: "0 0 24 24",
271
+ fill: "none",
272
+ stroke: "currentColor",
273
+ strokeWidth: "2"
274
+ }, [
275
+ h("path", {
276
+ strokeLinecap: "round",
277
+ strokeLinejoin: "round",
278
+ d: "M6.75 12a.75.75 0 11-1.5 0 .75.75 0 011.5 0zM12.75 12a.75.75 0 11-1.5 0 .75.75 0 011.5 0zM18.75 12a.75.75 0 11-1.5 0 .75.75 0 011.5 0z"
279
+ })
280
+ ]),
281
+ h("span", props.moreText)
282
+ ])
283
+ }
284
+ )
285
+ );
214
286
  }
215
287
  if (node.actions && node.actions.length > 0) {
216
288
  node.actions.forEach((action, index) => {
@@ -222,7 +294,10 @@ var CommentThread = defineComponent({
222
294
  key: actionKey,
223
295
  size: "sm",
224
296
  variant: action.variant ?? "ghost",
225
- className: ACTION_BTN,
297
+ className: classNames(
298
+ ACTION_BTN,
299
+ "hover:bg-gray-100 dark:hover:bg-gray-800"
300
+ ),
226
301
  disabled: action.disabled,
227
302
  onClick: () => {
228
303
  action.onClick?.(node, action);
@@ -239,8 +314,8 @@ var CommentThread = defineComponent({
239
314
  {
240
315
  class: classNames(
241
316
  "tiger-comment-thread-item",
242
- depth === 1 && "py-4",
243
- depth === 1 && !isLast && props.showDivider && "border-b border-[var(--tiger-border,#e5e7eb)]"
317
+ depth === 1 && "py-5",
318
+ depth === 1 && !isLast && props.showDivider && "border-b border-gray-100 dark:border-gray-800/80"
244
319
  ),
245
320
  key: node.id
246
321
  },
@@ -250,23 +325,23 @@ var CommentThread = defineComponent({
250
325
  size: depth === 1 ? "md" : "sm",
251
326
  src: node.user.avatar,
252
327
  text: node.user.name,
253
- className: "shrink-0 mt-0.5"
328
+ className: "shrink-0 mt-0.5 ring-1 ring-black/5 dark:ring-white/10 shadow-sm transition-transform hover:scale-105 duration-200"
254
329
  }) : null,
255
330
  h("div", { class: "flex-1 min-w-0" }, [
256
331
  h("div", { class: "flex items-center gap-2 flex-wrap" }, [
257
332
  node.user?.name ? h(
258
333
  Text,
259
- { tag: "span", size: "sm", weight: "bold" },
334
+ { tag: "span", size: "sm", weight: "bold", class: "text-gray-900 dark:text-gray-100 hover:text-blue-600 dark:hover:text-blue-400 transition-colors cursor-pointer" },
260
335
  { default: () => node.user?.name }
261
336
  ) : null,
262
337
  node.user?.title ? h(
263
338
  Text,
264
- { tag: "span", size: "xs", color: "muted" },
339
+ { tag: "span", size: "xs", color: "muted", class: "bg-gray-100 dark:bg-gray-800 px-1.5 py-0.5 rounded text-gray-500 dark:text-gray-400 font-medium" },
265
340
  { default: () => node.user?.title }
266
341
  ) : null,
267
342
  node.tag ? h(
268
343
  Tag,
269
- { size: "sm", variant: node.tag.variant ?? "default" },
344
+ { size: "sm", variant: node.tag.variant ?? "default", className: "rounded-full px-2 py-0.5 text-[10px] font-semibold tracking-wide uppercase border border-current bg-opacity-10" },
270
345
  { default: () => node.tag?.label }
271
346
  ) : null,
272
347
  ...(node.tags ?? []).map(
@@ -275,36 +350,37 @@ var CommentThread = defineComponent({
275
350
  {
276
351
  key: `${node.id}-tag-${index}`,
277
352
  size: "sm",
278
- variant: tag.variant ?? "default"
353
+ variant: tag.variant ?? "default",
354
+ className: "rounded-full px-2 py-0.5 text-[10px] font-semibold tracking-wide uppercase border border-current bg-opacity-10"
279
355
  },
280
356
  { default: () => tag.label }
281
357
  )
282
358
  ),
283
359
  node.time ? h(
284
360
  Text,
285
- { tag: "span", size: "xs", color: "muted", class: "ml-auto" },
361
+ { tag: "span", size: "xs", color: "muted", class: "ml-auto text-gray-400 dark:text-gray-500 font-normal" },
286
362
  { default: () => formatCommentTime(node.time) }
287
363
  ) : null
288
364
  ]),
289
365
  h(
290
366
  "div",
291
367
  {
292
- class: "text-sm text-[var(--tiger-text-secondary,#4b5563)] leading-relaxed break-words mt-1.5 mb-2"
368
+ class: "text-sm text-gray-600 dark:text-gray-300 leading-relaxed break-words mt-2 mb-3 pr-2"
293
369
  },
294
370
  String(node.content)
295
371
  ),
296
- actions.length > 0 ? h("div", { class: "flex flex-wrap items-center gap-1" }, actions) : null,
372
+ actions.length > 0 ? h("div", { class: "flex flex-wrap items-center gap-1.5" }, actions) : null,
297
373
  replyingTo.value === node.id ? h(
298
374
  "div",
299
375
  {
300
- class: "mt-3 space-y-2 bg-[var(--tiger-surface-muted,#f9fafb)] p-3 rounded-[var(--tiger-radius-md,0.5rem)]"
376
+ class: "mt-3 space-y-3 bg-gray-50/50 dark:bg-gray-900/30 border border-gray-100 dark:border-gray-800/80 p-4 rounded-xl shadow-sm backdrop-blur-sm transition-all duration-300"
301
377
  },
302
378
  [
303
379
  h(Textarea, {
304
- rows: 2,
380
+ rows: 3,
305
381
  modelValue: replyValue.value,
306
382
  placeholder: props.replyPlaceholder,
307
- className: "bg-[var(--tiger-surface,#ffffff)]",
383
+ className: "bg-white dark:bg-gray-950 border-gray-200 dark:border-gray-800 focus:ring-2 focus:ring-blue-500/20 focus:border-blue-500 dark:focus:border-blue-400 rounded-lg shadow-inner transition-all duration-200",
308
384
  "onUpdate:modelValue": (value) => {
309
385
  replyValue.value = value;
310
386
  }
@@ -315,6 +391,7 @@ var CommentThread = defineComponent({
315
391
  {
316
392
  size: "sm",
317
393
  variant: "ghost",
394
+ className: "px-3 py-1.5 text-xs text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200 rounded-lg transition-colors",
318
395
  onClick: () => {
319
396
  replyingTo.value = null;
320
397
  replyValue.value = "";
@@ -327,6 +404,7 @@ var CommentThread = defineComponent({
327
404
  {
328
405
  size: "sm",
329
406
  variant: "primary",
407
+ className: "px-3 py-1.5 text-xs font-semibold shadow-sm hover:shadow transition-all duration-200 rounded-lg",
330
408
  onClick: () => handleReplySubmit(node)
331
409
  },
332
410
  { default: () => props.replyButtonText }
@@ -339,7 +417,7 @@ var CommentThread = defineComponent({
339
417
  {
340
418
  size: "sm",
341
419
  variant: "ghost",
342
- className: classNames("mt-2", PRIMARY_BTN),
420
+ className: classNames("mt-2 font-semibold hover:bg-[var(--tiger-primary,#2563eb)]/10 dark:hover:bg-blue-400/10 transition-colors", PRIMARY_BTN),
343
421
  "aria-expanded": isExpanded,
344
422
  "aria-controls": repliesId,
345
423
  onClick: () => toggleExpanded(node.id)
@@ -352,7 +430,7 @@ var CommentThread = defineComponent({
352
430
  "div",
353
431
  {
354
432
  id: repliesId,
355
- class: "mt-3 ml-1 pl-4 border-l-2 border-[var(--tiger-border,#e5e7eb)] space-y-3"
433
+ class: "mt-4 ml-1 pl-4 border-l-2 border-gray-100 dark:border-gray-800 hover:border-blue-500/40 dark:hover:border-blue-400/40 space-y-4 transition-colors duration-300"
356
434
  },
357
435
  [
358
436
  ...visibleChildren.map(
@@ -379,9 +457,28 @@ var CommentThread = defineComponent({
379
457
  const ariaLabel = attrs["aria-label"] ?? (attrs["aria-labelledby"] ? void 0 : "\u8BC4\u8BBA\u7EBF\u7A0B");
380
458
  const children = resolvedNodes.value.length === 0 ? [
381
459
  h(
382
- Text,
383
- { tag: "div", size: "sm", color: "muted", class: "text-center py-8" },
384
- { default: () => props.emptyText }
460
+ "div",
461
+ { class: "flex flex-col items-center justify-center border border-dashed border-gray-200 dark:border-gray-800/80 rounded-xl py-12 px-4 bg-gray-50/20 dark:bg-gray-900/5 transition-colors" },
462
+ [
463
+ h("svg", {
464
+ class: "w-10 h-10 text-gray-300 dark:text-gray-600 mb-3",
465
+ fill: "none",
466
+ viewBox: "0 0 24 24",
467
+ stroke: "currentColor",
468
+ strokeWidth: "1.5"
469
+ }, [
470
+ h("path", {
471
+ strokeLinecap: "round",
472
+ strokeLinejoin: "round",
473
+ d: "M8.625 12a.375.375 0 11-.75 0 .375.375 0 01.75 0zm0 0H8.25m4.125 0a.375.375 0 11-.75 0 .375.375 0 01.75 0zm0 0H12m4.125 0a.375.375 0 11-.75 0 .375.375 0 01.75 0zm0 0h-.375M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z"
474
+ })
475
+ ]),
476
+ h(
477
+ Text,
478
+ { tag: "div", size: "sm", color: "muted", class: "font-medium" },
479
+ { default: () => props.emptyText }
480
+ )
481
+ ]
385
482
  )
386
483
  ] : resolvedNodes.value.map(
387
484
  (node, index) => renderNode(node, 1, index === resolvedNodes.value.length - 1)
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
- var _chunkOW5D4LU6js = require('./chunk-OW5D4LU6.js');
3
+ var _chunkYS6YQKYUjs = require('./chunk-YS6YQKYU.js');
4
4
 
5
5
 
6
6
  var _chunkBGMAWKWVjs = require('./chunk-BGMAWKWV.js');
@@ -197,7 +197,8 @@ var DataTableWithToolbar = _vue.defineComponent.call(void 0, {
197
197
  const bulkLabel = _vue.computed.call(void 0, () => _nullishCoalesce(_optionalChain([props, 'access', _27 => _27.toolbar, 'optionalAccess', _28 => _28.bulkActionsLabel]), () => ( "\u5DF2\u9009\u62E9")));
198
198
  const wrapperClasses = _vue.computed.call(void 0,
199
199
  () => _tigercatcore.classNames.call(void 0,
200
- "tiger-data-table-with-toolbar flex flex-col gap-3",
200
+ "tiger-data-table-with-toolbar flex flex-col",
201
+ props.bordered ? "border border-[var(--tiger-border,#e5e7eb)] rounded-[var(--tiger-radius-md,0.5rem)] overflow-hidden bg-[var(--tiger-surface,#ffffff)] shadow-sm" : "gap-3.5",
201
202
  props.className,
202
203
  _tigercatcore.coerceClassValue.call(void 0, attrs.class)
203
204
  )
@@ -248,26 +249,49 @@ var DataTableWithToolbar = _vue.defineComponent.call(void 0, {
248
249
  leftNodes.push(
249
250
  _vue.h.call(void 0,
250
251
  "div",
251
- { class: "flex items-center gap-2 w-full sm:w-auto sm:min-w-[200px] sm:max-w-[320px]" },
252
+ { class: "flex items-center gap-2 w-full sm:w-auto sm:min-w-[220px] sm:max-w-[320px]" },
252
253
  [
253
- _vue.h.call(void 0, _chunkBYNMOQBBjs.Input, {
254
- type: "search",
255
- size: "sm",
256
- modelValue: searchValue.value,
257
- placeholder: _nullishCoalesce(_optionalChain([props, 'access', _35 => _35.toolbar, 'optionalAccess', _36 => _36.searchPlaceholder]), () => ( "\u641C\u7D22")),
258
- "onUpdate:modelValue": (value) => handleSearchChange(String(_nullishCoalesce(value, () => ( "")))),
259
- onKeydown: (event) => {
260
- if (event.key === "Enter") {
261
- handleSearchSubmit();
254
+ _vue.h.call(void 0,
255
+ _chunkBYNMOQBBjs.Input,
256
+ {
257
+ type: "search",
258
+ size: "sm",
259
+ modelValue: searchValue.value,
260
+ placeholder: _nullishCoalesce(_optionalChain([props, 'access', _35 => _35.toolbar, 'optionalAccess', _36 => _36.searchPlaceholder]), () => ( "\u641C\u7D22")),
261
+ "onUpdate:modelValue": (value) => handleSearchChange(String(_nullishCoalesce(value, () => ( "")))),
262
+ onKeydown: (event) => {
263
+ if (event.key === "Enter") {
264
+ handleSearchSubmit();
265
+ }
262
266
  }
267
+ },
268
+ {
269
+ prefix: () => _vue.h.call(void 0,
270
+ "svg",
271
+ {
272
+ class: "w-3.5 h-3.5 text-[var(--tiger-text-secondary,#6b7280)] shrink-0",
273
+ fill: "none",
274
+ stroke: "currentColor",
275
+ "stroke-width": "2",
276
+ viewBox: "0 0 24 24",
277
+ "aria-hidden": "true"
278
+ },
279
+ [
280
+ _vue.h.call(void 0, "path", {
281
+ "stroke-linecap": "round",
282
+ "stroke-linejoin": "round",
283
+ d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"
284
+ })
285
+ ]
286
+ )
263
287
  }
264
- }),
288
+ ),
265
289
  showButton ? _vue.h.call(void 0,
266
290
  _chunk4VLNT2EDjs.Button,
267
291
  {
268
292
  size: "sm",
269
293
  variant: "primary",
270
- class: "whitespace-nowrap shrink-0",
294
+ class: "whitespace-nowrap shrink-0 rounded-[var(--tiger-radius-md,0.5rem)] px-3",
271
295
  onClick: handleSearchSubmit,
272
296
  disabled: !canSearch.value
273
297
  },
@@ -305,9 +329,16 @@ var DataTableWithToolbar = _vue.defineComponent.call(void 0, {
305
329
  if (selectedCount.value > 0) {
306
330
  bulkChildren.push(
307
331
  _vue.h.call(void 0,
308
- "span",
309
- { class: "text-sm text-[var(--tiger-text-muted,#6b7280)]" },
310
- `${bulkLabel.value} ${selectedCount.value} \u9879`
332
+ "div",
333
+ {
334
+ class: "flex items-center gap-1.5 px-2.5 py-1 rounded-full bg-[var(--tiger-primary,#2563eb)]/10 text-[var(--tiger-primary,#2563eb)] text-xs font-medium border border-[var(--tiger-primary,#2563eb)]/15 shrink-0 transition-all duration-300"
335
+ },
336
+ [
337
+ _vue.h.call(void 0, "span", {
338
+ class: "w-1.5 h-1.5 rounded-full bg-[var(--tiger-primary,#2563eb)] animate-pulse"
339
+ }),
340
+ _vue.h.call(void 0, "span", null, `${bulkLabel.value} ${selectedCount.value} \u9879`)
341
+ ]
311
342
  )
312
343
  );
313
344
  }
@@ -331,15 +362,18 @@ var DataTableWithToolbar = _vue.defineComponent.call(void 0, {
331
362
  return _vue.h.call(void 0,
332
363
  "div",
333
364
  {
334
- class: "tiger-data-table-toolbar flex flex-wrap items-center gap-2 pb-3",
365
+ class: _tigercatcore.classNames.call(void 0,
366
+ "tiger-data-table-toolbar flex flex-wrap items-center gap-3",
367
+ props.bordered ? "bg-[var(--tiger-surface-muted,#f9fafb)] dark:bg-gray-800/10 px-4 py-3.5 border-b border-[var(--tiger-border,#e5e7eb)]" : "bg-[var(--tiger-surface-muted,#f9fafb)]/80 dark:bg-gray-800/30 px-4 py-3.5 border border-[var(--tiger-border,#e5e7eb)] rounded-[var(--tiger-radius-md,0.5rem)] shadow-sm"
368
+ ),
335
369
  role: "toolbar",
336
370
  "aria-label": "\u6570\u636E\u8868\u683C\u5DE5\u5177\u680F"
337
371
  },
338
372
  [
339
- _vue.h.call(void 0, "div", { class: "flex items-center gap-2 flex-wrap flex-1 min-w-0" }, leftNodes),
373
+ _vue.h.call(void 0, "div", { class: "flex items-center gap-3 flex-wrap flex-1 min-w-0" }, leftNodes),
340
374
  hasBulkActions.value ? _vue.h.call(void 0,
341
375
  "div",
342
- { class: "flex items-center gap-2 flex-wrap ml-auto shrink-0" },
376
+ { class: "flex items-center gap-2.5 flex-wrap ml-auto shrink-0" },
343
377
  bulkChildren
344
378
  ) : null
345
379
  ]
@@ -369,6 +403,7 @@ var DataTableWithToolbar = _vue.defineComponent.call(void 0, {
369
403
  stickyHeader: props.stickyHeader,
370
404
  maxHeight: props.maxHeight,
371
405
  tableLayout: props.tableLayout,
406
+ class: props.bordered ? "border-none rounded-none shadow-none" : void 0,
372
407
  onSelectionChange: (keys) => emit("selection-change", keys),
373
408
  onPageChange: handleTablePageChange
374
409
  };
@@ -379,7 +414,7 @@ var DataTableWithToolbar = _vue.defineComponent.call(void 0, {
379
414
  style: wrapperStyle.value,
380
415
  "data-tiger-data-table-with-toolbar": ""
381
416
  },
382
- [renderToolbar(), _vue.h.call(void 0, _chunkOW5D4LU6js.Table, tableProps)]
417
+ [renderToolbar(), _vue.h.call(void 0, _chunkYS6YQKYUjs.Table, tableProps)]
383
418
  );
384
419
  };
385
420
  }
@@ -179,6 +179,7 @@ var CropUpload = _vue.defineComponent.call(void 0, {
179
179
  closable: true,
180
180
  maskClosable: false,
181
181
  showDefaultFooter: false,
182
+ className: "tiger-crop-upload-modal",
182
183
  "onUpdate:open": (val) => {
183
184
  if (!val) handleCancel();
184
185
  }
@@ -19,7 +19,6 @@ var _vue = require('vue');
19
19
 
20
20
 
21
21
 
22
-
23
22
  var _tigercatcore = require('@expcat/tigercat-core');
24
23
  var StepsContextKey = /* @__PURE__ */ Symbol("StepsContext");
25
24
  var StepsItem = _vue.defineComponent.call(void 0, {
@@ -153,7 +152,21 @@ var StepsItem = _vue.defineComponent.call(void 0, {
153
152
  return _vue.h.call(void 0, "div", { class: iconClasses.value }, props.icon);
154
153
  }
155
154
  if (stepStatus.value === "finish") {
156
- return _vue.h.call(void 0, "div", { class: iconClasses.value, "aria-hidden": "true" }, _tigercatcore.stepFinishChar);
155
+ return _vue.h.call(void 0, "div", { class: iconClasses.value, "aria-hidden": "true" }, [
156
+ _vue.h.call(void 0, "svg", {
157
+ class: "w-4 h-4 shrink-0 transition-transform duration-300 animate-fade-in",
158
+ fill: "none",
159
+ stroke: "currentColor",
160
+ "stroke-width": "3",
161
+ viewBox: "0 0 24 24"
162
+ }, [
163
+ _vue.h.call(void 0, "path", {
164
+ "stroke-linecap": "round",
165
+ "stroke-linejoin": "round",
166
+ d: "M4.5 12.75l6 6 9-13.5"
167
+ })
168
+ ])
169
+ ]);
157
170
  }
158
171
  return _vue.h.call(void 0, "div", { class: iconClasses.value }, String(props.stepIndex + 1));
159
172
  };