@expcat/tigercat-react 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 (51) hide show
  1. package/dist/{chunk-MMGZEG7G.mjs → chunk-56DP32W7.mjs} +93 -45
  2. package/dist/{chunk-36WZNVQ5.mjs → chunk-5XE5VBDS.mjs} +2 -3
  3. package/dist/{chunk-2DH6MGC6.js → chunk-7KPALCG3.js} +11 -7
  4. package/dist/{chunk-7YUD6VIC.js → chunk-APODZAVO.js} +47 -16
  5. package/dist/{chunk-LKKZLYCA.mjs → chunk-CPNDCACQ.mjs} +1 -1
  6. package/dist/{chunk-XHT2VIDR.js → chunk-FXVKJWUP.js} +19 -9
  7. package/dist/{chunk-RUZQN7X3.js → chunk-FZIF5LZW.js} +52 -25
  8. package/dist/{chunk-X37Q7VME.mjs → chunk-GYFR2O27.mjs} +11 -7
  9. package/dist/chunk-I5YYA7FB.mjs +244 -0
  10. package/dist/{chunk-3FEFHD3E.mjs → chunk-IUOTJ73N.mjs} +1 -0
  11. package/dist/{chunk-T7ACOL7K.mjs → chunk-IWLUYAZV.mjs} +62 -15
  12. package/dist/{chunk-5EZWYEGJ.js → chunk-IXHXSD2E.js} +65 -18
  13. package/dist/{chunk-EX63M5ID.js → chunk-JCINYGGM.js} +93 -45
  14. package/dist/{chunk-CSH2QOOH.js → chunk-K5B4XXAI.js} +2 -2
  15. package/dist/{chunk-UE52NMPO.js → chunk-KTV3ZDSQ.js} +1 -0
  16. package/dist/{chunk-XPA2YCQO.js → chunk-M7HBWFQO.js} +1 -2
  17. package/dist/{chunk-DTYDPMNR.js → chunk-P4INKEQ3.js} +76 -9
  18. package/dist/{chunk-5XS6PXBX.mjs → chunk-PKWHSCFK.mjs} +52 -25
  19. package/dist/{chunk-J5R4Q2QM.mjs → chunk-UQOMRXTD.mjs} +74 -7
  20. package/dist/chunk-UVWLYRAC.js +244 -0
  21. package/dist/{chunk-6CAKUMWV.mjs → chunk-VUODYCCC.mjs} +46 -15
  22. package/dist/{chunk-ZB55SAGI.mjs → chunk-WWDCH2XX.mjs} +19 -9
  23. package/dist/components/ActivityFeed.js +2 -2
  24. package/dist/components/ActivityFeed.mjs +1 -1
  25. package/dist/components/ChatWindow.js +3 -2
  26. package/dist/components/ChatWindow.mjs +2 -1
  27. package/dist/components/CommentThread.js +2 -2
  28. package/dist/components/CommentThread.mjs +1 -1
  29. package/dist/components/CropUpload.js +2 -2
  30. package/dist/components/CropUpload.mjs +1 -1
  31. package/dist/components/DataTableWithToolbar.js +4 -3
  32. package/dist/components/DataTableWithToolbar.mjs +3 -2
  33. package/dist/components/FormWizard.js +3 -3
  34. package/dist/components/FormWizard.mjs +2 -2
  35. package/dist/components/Kanban.js +3 -3
  36. package/dist/components/Kanban.mjs +2 -2
  37. package/dist/components/NotificationCenter.js +2 -2
  38. package/dist/components/NotificationCenter.mjs +1 -1
  39. package/dist/components/Steps.js +2 -2
  40. package/dist/components/Steps.mjs +1 -1
  41. package/dist/components/StepsItem.js +2 -2
  42. package/dist/components/StepsItem.mjs +1 -1
  43. package/dist/components/Table.js +3 -2
  44. package/dist/components/Table.mjs +2 -1
  45. package/dist/components/TaskBoard.js +2 -2
  46. package/dist/components/TaskBoard.mjs +1 -1
  47. package/dist/index.js +15 -15
  48. package/dist/index.mjs +14 -14
  49. package/package.json +2 -2
  50. package/dist/chunk-DXMSDLVJ.js +0 -168
  51. package/dist/chunk-GBJILZTY.mjs +0 -168
@@ -95,23 +95,9 @@ var CommentThread = ({
95
95
  updateExpandedKeys(next);
96
96
  }
97
97
  };
98
- const BTN_BASE = "px-1.5 py-0.5 h-auto min-h-0 text-xs rounded";
99
- const ACTION_BTN = `${BTN_BASE} text-gray-400 hover:text-gray-600 font-normal hover:bg-gray-50`;
100
- 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`;
101
- const renderActionButton = (label, key, onClick, active) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
102
- _chunk56ZV3VVYjs.Button,
103
- {
104
- size: "sm",
105
- variant: "ghost",
106
- className: _tigercatcore.classNames.call(void 0,
107
- ACTION_BTN,
108
- active && "text-[var(--tiger-primary,#2563eb)] hover:text-[var(--tiger-primary,#2563eb)] font-medium"
109
- ),
110
- onClick,
111
- children: label
112
- },
113
- key
114
- );
98
+ const BTN_BASE = "px-2 py-0.5 h-auto min-h-0 text-xs rounded-md transition-all duration-200 ease-out";
99
+ const ACTION_BTN = `${BTN_BASE} text-gray-500 dark:text-gray-400 font-medium flex items-center gap-1.5`;
100
+ 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`;
115
101
  const renderNode = (node, depth, isLast) => {
116
102
  const hasChildren = !!node.children && node.children.length > 0;
117
103
  const isExpanded = expandedSet.has(node.id);
@@ -125,24 +111,70 @@ var CommentThread = ({
125
111
  const likeLabel = node.liked ? likedText : likeText;
126
112
  const likeCount = node.likes ? ` ${node.likes}` : "";
127
113
  actions.push(
128
- renderActionButton(
129
- `${likeLabel}${likeCount}`,
130
- "like",
131
- () => _optionalChain([onLike, 'optionalCall', _4 => _4(node, !node.liked)]),
132
- node.liked
114
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
115
+ _chunk56ZV3VVYjs.Button,
116
+ {
117
+ size: "sm",
118
+ variant: "ghost",
119
+ className: _tigercatcore.classNames.call(void 0,
120
+ ACTION_BTN,
121
+ "hover:text-blue-600 hover:bg-blue-50/50 dark:hover:text-blue-400 dark:hover:bg-blue-950/20",
122
+ 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"
123
+ ),
124
+ onClick: () => _optionalChain([onLike, 'optionalCall', _4 => _4(node, !node.liked)]),
125
+ children: [
126
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "svg", { className: _tigercatcore.classNames.call(void 0, "w-3.5 h-3.5 transition-transform duration-200 active:scale-125", node.liked ? "fill-current" : "stroke-current fill-none"), viewBox: "0 0 24 24", strokeWidth: "2", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "path", { strokeLinecap: "round", strokeLinejoin: "round", 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" }) }),
127
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: `${likeLabel}${likeCount}` })
128
+ ]
129
+ },
130
+ "like"
133
131
  )
134
132
  );
135
133
  }
136
134
  if (showReply) {
137
135
  actions.push(
138
- renderActionButton(replyText, "reply", () => {
139
- setReplyingTo((prev) => prev === node.id ? null : node.id);
140
- setReplyValue("");
141
- })
136
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
137
+ _chunk56ZV3VVYjs.Button,
138
+ {
139
+ size: "sm",
140
+ variant: "ghost",
141
+ className: _tigercatcore.classNames.call(void 0,
142
+ ACTION_BTN,
143
+ "hover:text-emerald-600 hover:bg-emerald-50/50 dark:hover:text-emerald-400 dark:hover:bg-emerald-950/20"
144
+ ),
145
+ onClick: () => {
146
+ setReplyingTo((prev) => prev === node.id ? null : node.id);
147
+ setReplyValue("");
148
+ },
149
+ children: [
150
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "svg", { className: "w-3.5 h-3.5", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "path", { strokeLinecap: "round", strokeLinejoin: "round", 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" }) }),
151
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: replyText })
152
+ ]
153
+ },
154
+ "reply"
155
+ )
142
156
  );
143
157
  }
144
158
  if (showMore) {
145
- actions.push(renderActionButton(moreText, "more", () => _optionalChain([onMore, 'optionalCall', _5 => _5(node)])));
159
+ actions.push(
160
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
161
+ _chunk56ZV3VVYjs.Button,
162
+ {
163
+ size: "sm",
164
+ variant: "ghost",
165
+ className: _tigercatcore.classNames.call(void 0,
166
+ ACTION_BTN,
167
+ "hover:text-gray-700 dark:hover:text-gray-200 hover:bg-gray-100 dark:hover:bg-gray-800"
168
+ ),
169
+ onClick: () => _optionalChain([onMore, 'optionalCall', _5 => _5(node)]),
170
+ children: [
171
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "svg", { className: "w-3.5 h-3.5", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "path", { strokeLinecap: "round", strokeLinejoin: "round", 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" }) }),
172
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: moreText })
173
+ ]
174
+ },
175
+ "more"
176
+ )
177
+ );
146
178
  }
147
179
  if (node.actions && node.actions.length > 0) {
148
180
  node.actions.forEach((action, index) => {
@@ -153,7 +185,10 @@ var CommentThread = ({
153
185
  {
154
186
  size: "sm",
155
187
  variant: _nullishCoalesce(action.variant, () => ( "ghost")),
156
- className: ACTION_BTN,
188
+ className: _tigercatcore.classNames.call(void 0,
189
+ ACTION_BTN,
190
+ "hover:bg-gray-100 dark:hover:bg-gray-800"
191
+ ),
157
192
  disabled: action.disabled,
158
193
  onClick: () => {
159
194
  _optionalChain([action, 'access', _6 => _6.onClick, 'optionalCall', _7 => _7(node, action)]);
@@ -171,8 +206,8 @@ var CommentThread = ({
171
206
  {
172
207
  className: _tigercatcore.classNames.call(void 0,
173
208
  "tiger-comment-thread-item",
174
- depth === 1 && "py-4",
175
- depth === 1 && !isLast && showDivider && "border-b border-[var(--tiger-border,#e5e7eb)]"
209
+ depth === 1 && "py-5",
210
+ depth === 1 && !isLast && showDivider && "border-b border-gray-100 dark:border-gray-800/80"
176
211
  ),
177
212
  children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex gap-3", children: [
178
213
  showAvatar && node.user ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -181,27 +216,27 @@ var CommentThread = ({
181
216
  size: depth === 1 ? "md" : "sm",
182
217
  src: node.user.avatar,
183
218
  text: node.user.name,
184
- className: "shrink-0 mt-0.5"
219
+ className: "shrink-0 mt-0.5 ring-1 ring-black/5 dark:ring-white/10 shadow-sm transition-transform hover:scale-105 duration-200"
185
220
  }
186
221
  ) : null,
187
222
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex-1 min-w-0", children: [
188
223
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-2 flex-wrap", children: [
189
- _optionalChain([node, 'access', _9 => _9.user, 'optionalAccess', _10 => _10.name]) ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUF3DXKCIjs.Text, { tag: "span", size: "sm", weight: "bold", children: node.user.name }) : null,
190
- _optionalChain([node, 'access', _11 => _11.user, 'optionalAccess', _12 => _12.title]) ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUF3DXKCIjs.Text, { tag: "span", size: "xs", color: "muted", children: node.user.title }) : null,
191
- node.tag ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVCULFIZ5js.Tag, { size: "sm", variant: _nullishCoalesce(node.tag.variant, () => ( "default")), children: node.tag.label }) : null,
192
- _optionalChain([node, 'access', _13 => _13.tags, 'optionalAccess', _14 => _14.map, 'call', _15 => _15((tag, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVCULFIZ5js.Tag, { size: "sm", variant: _nullishCoalesce(tag.variant, () => ( "default")), children: tag.label }, `${node.id}-tag-${index}`))]),
193
- node.time ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUF3DXKCIjs.Text, { tag: "span", size: "xs", color: "muted", className: "ml-auto", children: _tigercatcore.formatCommentTime.call(void 0, node.time) }) : null
224
+ _optionalChain([node, 'access', _9 => _9.user, 'optionalAccess', _10 => _10.name]) ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUF3DXKCIjs.Text, { tag: "span", size: "sm", weight: "bold", className: "text-gray-900 dark:text-gray-100 hover:text-blue-600 dark:hover:text-blue-400 transition-colors cursor-pointer", children: node.user.name }) : null,
225
+ _optionalChain([node, 'access', _11 => _11.user, 'optionalAccess', _12 => _12.title]) ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUF3DXKCIjs.Text, { tag: "span", size: "xs", color: "muted", className: "bg-gray-100 dark:bg-gray-800 px-1.5 py-0.5 rounded text-gray-500 dark:text-gray-400 font-medium", children: node.user.title }) : null,
226
+ node.tag ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVCULFIZ5js.Tag, { size: "sm", variant: _nullishCoalesce(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", children: node.tag.label }) : null,
227
+ _optionalChain([node, 'access', _13 => _13.tags, 'optionalAccess', _14 => _14.map, 'call', _15 => _15((tag, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVCULFIZ5js.Tag, { size: "sm", variant: _nullishCoalesce(tag.variant, () => ( "default")), className: "rounded-full px-2 py-0.5 text-[10px] font-semibold tracking-wide uppercase border border-current bg-opacity-10", children: tag.label }, `${node.id}-tag-${index}`))]),
228
+ node.time ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUF3DXKCIjs.Text, { tag: "span", size: "xs", color: "muted", className: "ml-auto text-gray-400 dark:text-gray-500 font-normal", children: _tigercatcore.formatCommentTime.call(void 0, node.time) }) : null
194
229
  ] }),
195
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "text-sm text-[var(--tiger-text-secondary,#4b5563)] leading-relaxed break-words mt-1.5 mb-2", children: node.content }),
196
- actions.length > 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex flex-wrap items-center gap-1", children: actions }) : null,
197
- replyingTo === node.id ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mt-3 space-y-2 bg-[var(--tiger-surface-muted,#f9fafb)] p-3 rounded-[var(--tiger-radius-md,0.5rem)]", children: [
230
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "text-sm text-gray-600 dark:text-gray-300 leading-relaxed break-words mt-2 mb-3 pr-2", children: node.content }),
231
+ actions.length > 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex flex-wrap items-center gap-1.5", children: actions }) : null,
232
+ replyingTo === node.id ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "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", children: [
198
233
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
199
234
  _chunkWVVXZKNIjs.Textarea,
200
235
  {
201
- rows: 2,
236
+ rows: 3,
202
237
  value: replyValue,
203
238
  placeholder: replyPlaceholder,
204
- className: "bg-[var(--tiger-surface,#ffffff)]",
239
+ 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",
205
240
  onChange: (event) => setReplyValue(event.target.value)
206
241
  }
207
242
  ),
@@ -211,6 +246,7 @@ var CommentThread = ({
211
246
  {
212
247
  size: "sm",
213
248
  variant: "ghost",
249
+ 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",
214
250
  onClick: () => {
215
251
  setReplyingTo(null);
216
252
  setReplyValue("");
@@ -218,7 +254,16 @@ var CommentThread = ({
218
254
  children: cancelReplyText
219
255
  }
220
256
  ),
221
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk56ZV3VVYjs.Button, { size: "sm", variant: "primary", onClick: () => handleReplySubmit(node), children: replyButtonText })
257
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
258
+ _chunk56ZV3VVYjs.Button,
259
+ {
260
+ size: "sm",
261
+ variant: "primary",
262
+ className: "px-3 py-1.5 text-xs font-semibold shadow-sm hover:shadow transition-all duration-200 rounded-lg",
263
+ onClick: () => handleReplySubmit(node),
264
+ children: replyButtonText
265
+ }
266
+ )
222
267
  ] })
223
268
  ] }) : null,
224
269
  hasChildren ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -226,7 +271,7 @@ var CommentThread = ({
226
271
  {
227
272
  size: "sm",
228
273
  variant: "ghost",
229
- className: _tigercatcore.classNames.call(void 0, "mt-2", PRIMARY_BTN),
274
+ className: _tigercatcore.classNames.call(void 0, "mt-2 font-semibold hover:bg-[var(--tiger-primary,#2563eb)]/10 dark:hover:bg-blue-400/10 transition-colors", PRIMARY_BTN),
230
275
  "aria-expanded": isExpanded,
231
276
  "aria-controls": repliesId,
232
277
  onClick: () => toggleExpanded(node.id),
@@ -237,7 +282,7 @@ var CommentThread = ({
237
282
  "div",
238
283
  {
239
284
  id: repliesId,
240
- className: "mt-3 ml-1 pl-4 border-l-2 border-[var(--tiger-border,#e5e7eb)] space-y-3",
285
+ className: "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",
241
286
  children: [
242
287
  visibleChildren.map(
243
288
  (child, index) => renderNode(child, depth + 1, index === visibleChildren.length - 1)
@@ -269,7 +314,10 @@ var CommentThread = ({
269
314
  "data-tiger-comment-thread": true,
270
315
  "aria-label": _nullishCoalesce(divProps["aria-label"], () => ( (divProps["aria-labelledby"] ? void 0 : "\u8BC4\u8BBA\u7EBF\u7A0B"))),
271
316
  ...divProps,
272
- children: resolvedNodes.length === 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUF3DXKCIjs.Text, { tag: "div", size: "sm", color: "muted", className: "text-center py-8", children: emptyText }) : resolvedNodes.map((node, index) => renderNode(node, 1, index === resolvedNodes.length - 1))
317
+ children: resolvedNodes.length === 0 ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "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", children: [
318
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "svg", { className: "w-10 h-10 text-gray-300 dark:text-gray-600 mb-3", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "path", { strokeLinecap: "round", strokeLinejoin: "round", 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" }) }),
319
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUF3DXKCIjs.Text, { tag: "div", size: "sm", color: "muted", className: "font-medium", children: emptyText })
320
+ ] }) : resolvedNodes.map((node, index) => renderNode(node, 1, index === resolvedNodes.length - 1))
273
321
  }
274
322
  );
275
323
  };
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkXHT2VIDRjs = require('./chunk-XHT2VIDR.js');
3
+ var _chunkFXVKJWUPjs = require('./chunk-FXVKJWUP.js');
4
4
 
5
5
  // src/components/Kanban.tsx
6
6
  var _jsxruntime = require('react/jsx-runtime');
@@ -11,7 +11,7 @@ var Kanban = ({
11
11
  ...props
12
12
  }) => {
13
13
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
14
- _chunkXHT2VIDRjs.TaskBoard,
14
+ _chunkFXVKJWUPjs.TaskBoard,
15
15
  {
16
16
  showCardCount,
17
17
  allowAddCard,
@@ -145,6 +145,7 @@ var CropUpload = ({
145
145
  open: modalVisible,
146
146
  size: "lg",
147
147
  title: modalTitle,
148
+ className: "tiger-crop-upload-modal",
148
149
  closable: true,
149
150
  maskClosable: false,
150
151
  onClose: handleCancel,
@@ -10,7 +10,6 @@ var _react = require('react'); var _react2 = _interopRequireDefault(_react);
10
10
 
11
11
 
12
12
 
13
-
14
13
  var _tigercatcore = require('@expcat/tigercat-core');
15
14
  var _jsxruntime = require('react/jsx-runtime');
16
15
  var StepsContext = _react.createContext.call(void 0, null);
@@ -65,7 +64,7 @@ var StepsItem = ({
65
64
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: iconClasses, children: icon });
66
65
  }
67
66
  if (stepStatus === "finish") {
68
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: iconClasses, "aria-hidden": "true", children: _tigercatcore.stepFinishChar });
67
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: iconClasses, "aria-hidden": "true", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "svg", { className: "w-4 h-4 shrink-0 transition-transform duration-300 animate-fade-in", fill: "none", stroke: "currentColor", strokeWidth: "3", viewBox: "0 0 24 24", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4.5 12.75l6 6 9-13.5" }) }) });
69
68
  }
70
69
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: iconClasses, children: stepIndex + 1 });
71
70
  };
@@ -1,7 +1,7 @@
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
3
 
4
- var _chunkXPA2YCQOjs = require('./chunk-XPA2YCQO.js');
4
+ var _chunkM7HBWFQOjs = require('./chunk-M7HBWFQO.js');
5
5
 
6
6
 
7
7
  var _chunkTDODFBBOjs = require('./chunk-TDODFBBO.js');
@@ -21,6 +21,42 @@ var _react = require('react');
21
21
 
22
22
  var _tigercatcore = require('@expcat/tigercat-core');
23
23
  var _jsxruntime = require('react/jsx-runtime');
24
+ var ArrowLeftIcon = () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
25
+ "svg",
26
+ {
27
+ className: "w-3.5 h-3.5 transition-transform duration-300 group-hover:-translate-x-0.5",
28
+ fill: "none",
29
+ stroke: "currentColor",
30
+ strokeWidth: "2",
31
+ viewBox: "0 0 24 24",
32
+ "aria-hidden": "true",
33
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M10.5 19.5L3 12m0 0l7.5-7.5M3 12h18" })
34
+ }
35
+ );
36
+ var ArrowRightIcon = () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
37
+ "svg",
38
+ {
39
+ className: "w-3.5 h-3.5 transition-transform duration-300 group-hover:translate-x-0.5",
40
+ fill: "none",
41
+ stroke: "currentColor",
42
+ strokeWidth: "2",
43
+ viewBox: "0 0 24 24",
44
+ "aria-hidden": "true",
45
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M13.5 4.5L21 12m0 0l-7.5 7.5M21 12H3" })
46
+ }
47
+ );
48
+ var CheckIcon = () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
49
+ "svg",
50
+ {
51
+ className: "w-3.5 h-3.5 transition-transform duration-300 group-hover:scale-110",
52
+ fill: "none",
53
+ stroke: "currentColor",
54
+ strokeWidth: "2.5",
55
+ viewBox: "0 0 24 24",
56
+ "aria-hidden": "true",
57
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4.5 12.75l6 6 9-13.5" })
58
+ }
59
+ );
24
60
  var FormWizard = ({
25
61
  steps = [],
26
62
  current,
@@ -29,6 +65,7 @@ var FormWizard = ({
29
65
  direction = "horizontal",
30
66
  size = "default",
31
67
  simple = false,
68
+ bordered = true,
32
69
  showSteps = true,
33
70
  showActions = true,
34
71
  prevText,
@@ -60,7 +97,8 @@ var FormWizard = ({
60
97
  const isFirst = currentIndex <= 0;
61
98
  const isLast = currentIndex >= totalCount - 1;
62
99
  const wrapperClasses = _tigercatcore.classNames.call(void 0,
63
- "tiger-form-wizard w-full rounded-[var(--tiger-radius-md,0.5rem)] border border-[var(--tiger-border,#e5e7eb)] bg-[var(--tiger-surface,#ffffff)] shadow-sm overflow-hidden",
100
+ "tiger-form-wizard w-full overflow-hidden transition-all duration-300",
101
+ bordered ? "rounded-[var(--tiger-radius-md,0.5rem)] border border-[var(--tiger-border,#e5e7eb)] bg-[var(--tiger-surface,#ffffff)] shadow-sm" : "bg-transparent",
64
102
  className
65
103
  );
66
104
  const setCurrent = _react.useCallback.call(void 0,
@@ -129,7 +167,7 @@ var FormWizard = ({
129
167
  }, [currentIndex, currentStep, renderStep]);
130
168
  const stepsNodes = _react.useMemo.call(void 0,
131
169
  () => steps.map((step, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
132
- _chunkXPA2YCQOjs.StepsItem,
170
+ _chunkM7HBWFQOjs.StepsItem,
133
171
  {
134
172
  title: step.title,
135
173
  description: step.description,
@@ -142,8 +180,11 @@ var FormWizard = ({
142
180
  [steps]
143
181
  );
144
182
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: wrapperClasses, style, "data-tiger-form-wizard": true, ...props, children: [
145
- showSteps && steps.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "px-6 py-5 bg-[var(--tiger-surface-muted,#f9fafb)]", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
146
- _chunkXPA2YCQOjs.Steps,
183
+ showSteps && steps.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _tigercatcore.classNames.call(void 0,
184
+ "px-6 py-5 bg-[var(--tiger-surface-muted,#f9fafb)]/95 backdrop-blur-sm transition-all duration-300",
185
+ bordered ? "border-b border-[var(--tiger-border,#e5e7eb)]" : ""
186
+ ), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
187
+ _chunkM7HBWFQOjs.Steps,
147
188
  {
148
189
  current: currentIndex,
149
190
  direction,
@@ -154,10 +195,36 @@ var FormWizard = ({
154
195
  children: stepsNodes
155
196
  }
156
197
  ) }),
157
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "px-6 py-4 flex flex-col items-center", children: contentNode }),
158
- showActions && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center justify-center gap-3 px-6 py-2 border-t border-[var(--tiger-border,#e5e7eb)] bg-[var(--tiger-surface-muted,#f9fafb)]", children: [
159
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk56ZV3VVYjs.Button, { htmlType: "button", variant: "secondary", disabled: isFirst, onClick: handlePrev, children: _tigercatcore.resolveLocaleText.call(void 0, labels.prevText, prevText) }),
160
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk56ZV3VVYjs.Button, { htmlType: "button", variant: "primary", onClick: handleNext, children: isLast ? _tigercatcore.resolveLocaleText.call(void 0, labels.finishText, finishText) : _tigercatcore.resolveLocaleText.call(void 0, labels.nextText, nextText) })
198
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "px-8 py-6 flex flex-col items-center w-full min-h-[120px] transition-all duration-300", children: contentNode }),
199
+ showActions && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _tigercatcore.classNames.call(void 0,
200
+ "flex items-center justify-between gap-3 px-8 py-4 bg-[var(--tiger-surface-muted,#f9fafb)]/95 backdrop-blur-sm transition-all duration-300",
201
+ bordered ? "border-t border-[var(--tiger-border,#e5e7eb)]" : ""
202
+ ), children: [
203
+ !isFirst ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
204
+ _chunk56ZV3VVYjs.Button,
205
+ {
206
+ htmlType: "button",
207
+ variant: "secondary",
208
+ className: "group",
209
+ onClick: handlePrev,
210
+ size: size === "small" ? "sm" : "md",
211
+ icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ArrowLeftIcon, {}),
212
+ children: _tigercatcore.resolveLocaleText.call(void 0, labels.prevText, prevText)
213
+ }
214
+ ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", {}),
215
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
216
+ _chunk56ZV3VVYjs.Button,
217
+ {
218
+ htmlType: "button",
219
+ variant: "primary",
220
+ className: "group",
221
+ onClick: handleNext,
222
+ size: size === "small" ? "sm" : "md",
223
+ icon: isLast ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, CheckIcon, {}) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ArrowRightIcon, {}),
224
+ iconPosition: isLast ? "left" : "right",
225
+ children: isLast ? _tigercatcore.resolveLocaleText.call(void 0, labels.finishText, finishText) : _tigercatcore.resolveLocaleText.call(void 0, labels.nextText, nextText)
226
+ }
227
+ )
161
228
  ] })
162
229
  ] });
163
230
  };
@@ -201,22 +201,29 @@ var NotificationCenter = ({
201
201
  "div",
202
202
  {
203
203
  className: classNames(
204
- "flex items-start gap-3 w-full py-0.5 transition-colors",
205
- !isRead && "border-l-2 border-l-[var(--tiger-primary,#2563eb)] -ml-[2px] pl-[calc(0.75rem-2px)]"
204
+ "group relative flex items-start gap-3.5 w-full p-3.5 rounded-xl transition-all duration-300 hover:bg-gray-50/60 dark:hover:bg-gray-800/30",
205
+ !isRead ? "bg-blue-50/20 dark:bg-blue-950/5 hover:bg-blue-50/40 dark:hover:bg-blue-950/10 border-l-[3px] border-l-blue-500/80 -ml-[3px] pl-[calc(0.875rem-3px)]" : "border-l-[3px] border-l-transparent -ml-[3px] pl-[calc(0.875rem-3px)]"
206
206
  ),
207
207
  children: [
208
208
  /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
209
209
  /* @__PURE__ */ jsxs("div", { className: "flex items-baseline justify-between gap-2", children: [
210
- /* @__PURE__ */ jsx(Text, { tag: "span", size: "sm", weight: isRead ? "normal" : "semibold", children: item.title }),
211
- timeText ? /* @__PURE__ */ jsx("span", { className: "text-xs text-[var(--tiger-text-muted,#6b7280)] whitespace-nowrap flex-shrink-0", children: timeText }) : null
210
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
211
+ /* @__PURE__ */ jsx(Text, { tag: "span", size: "sm", weight: isRead ? "normal" : "semibold", className: isRead ? "text-gray-600 dark:text-gray-400" : "text-gray-900 dark:text-gray-100", children: item.title }),
212
+ !isRead && /* @__PURE__ */ jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-blue-500 dark:bg-blue-400 shrink-0 shadow-sm shadow-blue-500/40 animate-pulse" })
213
+ ] }),
214
+ timeText ? /* @__PURE__ */ jsx("span", { className: "text-[11px] text-gray-400 dark:text-gray-500 font-medium whitespace-nowrap flex-shrink-0 self-center", children: timeText }) : null
212
215
  ] }),
213
- item.description ? /* @__PURE__ */ jsx("div", { className: "mt-0.5 text-xs text-[var(--tiger-text-muted,#6b7280)] line-clamp-2 leading-relaxed", children: item.description }) : null
216
+ item.description ? /* @__PURE__ */ jsx("div", { className: classNames(
217
+ "mt-1 text-xs leading-relaxed line-clamp-2",
218
+ isRead ? "text-gray-500 dark:text-gray-400" : "text-gray-600 dark:text-gray-300"
219
+ ), children: item.description }) : null
214
220
  ] }),
215
221
  /* @__PURE__ */ jsx(
216
222
  Button,
217
223
  {
218
224
  size: "sm",
219
225
  variant: "ghost",
226
+ className: "opacity-0 group-hover:opacity-100 focus:opacity-100 rounded-full px-2.5 py-1 text-[11px] font-semibold transition-all duration-200 bg-gray-100 hover:bg-gray-200 dark:bg-gray-800 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-300 border-0 flex-shrink-0 self-center",
220
227
  onClick: (event) => {
221
228
  event.stopPropagation();
222
229
  if (manageReadState) {
@@ -235,19 +242,27 @@ var NotificationCenter = ({
235
242
  }
236
243
  );
237
244
  };
238
- const renderList = (listItems) => /* @__PURE__ */ jsx(
239
- List,
240
- {
241
- dataSource: listItems,
242
- split: true,
243
- bordered: "divided",
244
- hoverable: true,
245
- emptyText,
246
- onItemClick: (item, index) => onItemClick?.(item, index),
247
- renderItem
245
+ const renderList = (listItems) => {
246
+ if (listItems.length === 0) {
247
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center justify-center py-14 px-4 text-center", children: [
248
+ /* @__PURE__ */ jsx("div", { className: "p-3.5 bg-gray-50 dark:bg-gray-900 rounded-full mb-3 shadow-inner", children: /* @__PURE__ */ jsx("svg", { className: "w-8 h-8 text-gray-400 dark:text-gray-600 animate-pulse", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M14.857 17.082a23.848 23.848 0 0 0 5.454-1.31A8.967 8.967 0 0 1 18 9.75V9A6 6 0 0 0 6 9v.75a8.967 8.967 0 0 1-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 0 1-5.714 0m5.714 0a3 3 0 1 1-5.714 0" }) }) }),
249
+ /* @__PURE__ */ jsx(Text, { tag: "div", size: "sm", color: "muted", className: "font-semibold text-gray-400 dark:text-gray-500", children: emptyText })
250
+ ] });
248
251
  }
249
- );
250
- const content = loading ? /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center py-12", children: /* @__PURE__ */ jsx(Loading, { text: loadingText }) }) : resolvedGroups.length > 0 ? /* @__PURE__ */ jsx("div", { className: "-mx-4 -mb-4", children: /* @__PURE__ */ jsx(Tabs, { type: "line", size: "small", activeKey: currentGroupKey, onChange: handleGroupChange, children: groupTabData.map((tab) => /* @__PURE__ */ jsx(TabPane, { tabKey: tab.key, label: tab.label, children: /* @__PURE__ */ jsx("div", { className: "max-h-[380px] overflow-y-auto", children: renderList(tab.filteredItems) }) }, String(tab.key))) }) }) : /* @__PURE__ */ jsx("div", { className: "-mx-4 -mb-4 max-h-[380px] overflow-y-auto", children: renderList(filteredFlatItems) });
252
+ return /* @__PURE__ */ jsx(
253
+ List,
254
+ {
255
+ dataSource: listItems,
256
+ split: true,
257
+ bordered: "divided",
258
+ hoverable: true,
259
+ emptyText,
260
+ onItemClick: (item, index) => onItemClick?.(item, index),
261
+ renderItem
262
+ }
263
+ );
264
+ };
265
+ const content = loading ? /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center py-16", children: /* @__PURE__ */ jsx(Loading, { text: loadingText, className: "text-blue-500 dark:text-blue-400 font-medium" }) }) : resolvedGroups.length > 0 ? /* @__PURE__ */ jsx("div", { className: "-mx-4 -mb-4", children: /* @__PURE__ */ jsx(Tabs, { type: "line", size: "small", activeKey: currentGroupKey, onChange: handleGroupChange, children: groupTabData.map((tab) => /* @__PURE__ */ jsx(TabPane, { tabKey: tab.key, label: tab.label, children: /* @__PURE__ */ jsx("div", { className: "max-h-[380px] overflow-y-auto", children: renderList(tab.filteredItems) }) }, String(tab.key))) }) }) : /* @__PURE__ */ jsx("div", { className: "-mx-4 -mb-4 max-h-[380px] overflow-y-auto", children: renderList(filteredFlatItems) });
251
266
  return /* @__PURE__ */ jsx(
252
267
  "div",
253
268
  {
@@ -260,22 +275,34 @@ var NotificationCenter = ({
260
275
  Card,
261
276
  {
262
277
  variant: "bordered",
263
- className: "w-full",
278
+ className: "w-full rounded-2xl border border-gray-100/80 dark:border-gray-800/80 bg-white/95 dark:bg-gray-950/90 backdrop-blur-md shadow-[0_8px_30px_rgb(0,0,0,0.04)] dark:shadow-[0_8px_30px_rgb(0,0,0,0.2)] transition-all duration-300 overflow-hidden",
264
279
  header: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3", children: [
265
280
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
266
281
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2.5", children: [
267
- /* @__PURE__ */ jsx(Text, { tag: "div", size: "base", weight: "bold", children: title }),
268
- totalUnread > 0 ? /* @__PURE__ */ jsx("span", { className: "inline-flex items-center justify-center min-w-[20px] h-5 px-1.5 text-xs font-semibold rounded-full bg-[var(--tiger-primary,#2563eb)] text-white", children: totalUnread }) : null
282
+ /* @__PURE__ */ jsx(Text, { tag: "div", size: "base", weight: "bold", className: "text-gray-900 dark:text-gray-100", children: title }),
283
+ totalUnread > 0 ? /* @__PURE__ */ jsx("span", { className: "inline-flex items-center justify-center min-w-[20px] h-5 px-1.5 text-[11px] font-bold rounded-full bg-gradient-to-r from-blue-500 to-indigo-600 text-white shadow-sm shadow-blue-500/20 animate-pulse", children: totalUnread }) : null
269
284
  ] }),
270
- /* @__PURE__ */ jsx(Button, { size: "sm", variant: "ghost", disabled: !hasUnread, onClick: handleMarkAllRead, children: markAllReadText })
285
+ /* @__PURE__ */ jsx(
286
+ Button,
287
+ {
288
+ size: "sm",
289
+ variant: "ghost",
290
+ disabled: !hasUnread,
291
+ onClick: handleMarkAllRead,
292
+ className: classNames(
293
+ "text-xs font-semibold transition-colors duration-200",
294
+ hasUnread ? "text-blue-600 dark:text-blue-400 hover:text-blue-700 dark:hover:text-blue-300" : "text-gray-400 dark:text-gray-600"
295
+ ),
296
+ children: markAllReadText
297
+ }
298
+ )
271
299
  ] }),
272
- /* @__PURE__ */ jsx("div", { className: "inline-flex rounded-[var(--tiger-radius-sm,0.375rem)] border border-[var(--tiger-border,#e5e7eb)] overflow-hidden self-start", children: filterButtons.map((option) => /* @__PURE__ */ jsx(
300
+ /* @__PURE__ */ jsx("div", { className: "inline-flex items-center gap-0.5 p-0.5 rounded-lg bg-gray-100/80 dark:bg-gray-800/60 self-start", children: filterButtons.map((option) => /* @__PURE__ */ jsx(
273
301
  "button",
274
302
  {
275
303
  className: classNames(
276
- "px-3 py-1 text-xs font-medium transition-colors",
277
- "border-r border-[var(--tiger-border,#e5e7eb)] last:border-r-0",
278
- currentReadFilter === option.key ? "bg-[var(--tiger-primary,#2563eb)] text-white" : "bg-[var(--tiger-surface,#ffffff)] text-[var(--tiger-text-muted,#6b7280)] hover:bg-[var(--tiger-surface-muted,#f9fafb)]"
304
+ "px-3.5 py-1 text-xs font-semibold rounded-md transition-all duration-200",
305
+ currentReadFilter === option.key ? "bg-white dark:bg-gray-700 text-gray-900 dark:text-white shadow-sm scale-102" : "text-gray-500 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white"
279
306
  ),
280
307
  onClick: () => handleReadFilterChange(option.key),
281
308
  children: option.label