@dreamtree-org/twreact-ui 1.3.2 → 1.3.4

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 (52) hide show
  1. package/DESIGN.md +2 -2
  2. package/README.md +14 -6
  3. package/ai-skills/dreamtree-ui.md +3 -1
  4. package/bin/cli.mjs +72 -4
  5. package/dist/ai-schema.json +3 -2
  6. package/dist/charts/index.js +75 -47
  7. package/dist/components/charts/CartesianChart.d.ts.map +1 -1
  8. package/dist/components/charts/DonutChart.d.ts.map +1 -1
  9. package/dist/components/charts/Sparkline.d.ts.map +1 -1
  10. package/dist/components/charts/chartTheme.d.ts +13 -3
  11. package/dist/components/charts/chartTheme.d.ts.map +1 -1
  12. package/dist/components/core/Table/MobileCard.d.ts.map +1 -1
  13. package/dist/components/core/Table/MobileFilters.d.ts.map +1 -1
  14. package/dist/components/core/Table/Table.d.ts.map +1 -1
  15. package/dist/components/core/Table/TableRow.d.ts.map +1 -1
  16. package/dist/components/core/Table/helpers.d.ts +12 -0
  17. package/dist/components/core/Table/helpers.d.ts.map +1 -1
  18. package/dist/components/utility/Stepper.d.ts.map +1 -1
  19. package/dist/esm/components/blocks/StatCard.js +1 -1
  20. package/dist/esm/components/charts/CartesianChart.js +7 -2
  21. package/dist/esm/components/charts/DonutChart.js +4 -1
  22. package/dist/esm/components/charts/Sparkline.js +4 -1
  23. package/dist/esm/components/charts/chartTheme.js +65 -48
  24. package/dist/esm/components/core/Select.js +2 -2
  25. package/dist/esm/components/core/Table/ActionMenu.js +5 -5
  26. package/dist/esm/components/core/Table/ColumnMenu.js +1 -1
  27. package/dist/esm/components/core/Table/FieldInput.js +5 -5
  28. package/dist/esm/components/core/Table/MobileCard.js +14 -12
  29. package/dist/esm/components/core/Table/MobileFilters.js +11 -4
  30. package/dist/esm/components/core/Table/Pagination.js +1 -1
  31. package/dist/esm/components/core/Table/Table.js +22 -19
  32. package/dist/esm/components/core/Table/TableRow.js +10 -11
  33. package/dist/esm/components/core/Table/helpers.js +16 -1
  34. package/dist/esm/components/navigation/Dropdown.js +1 -1
  35. package/dist/esm/components/navigation/Navbar.js +21 -21
  36. package/dist/esm/components/navigation/Sidebar.js +12 -12
  37. package/dist/esm/components/utility/Card.js +5 -5
  38. package/dist/esm/components/utility/Stepper.js +6 -4
  39. package/dist/index.css +1 -1
  40. package/dist/index.esm.css +1 -1
  41. package/dist/index.esm.js +129 -101
  42. package/dist/index.js +129 -101
  43. package/dist/tokens/brands/practicepro.json +1 -0
  44. package/dist/tokens/brands/studio.json +1 -0
  45. package/dist/types/index.d.ts +1 -0
  46. package/dist/types/index.d.ts.map +1 -1
  47. package/mcp/catalog.snapshot.json +21 -21
  48. package/package.json +2 -1
  49. package/tokens/brand.schema.json +612 -0
  50. package/tokens/brands/practicepro.json +1 -0
  51. package/tokens/brands/studio.json +1 -0
  52. package/tokens/lib.cjs +131 -7
@@ -5,7 +5,7 @@ import React from 'react';
5
5
  import { cn } from '../../../utils/cn.js';
6
6
  import { Trash2, MoreVertical } from 'lucide-react';
7
7
  import ActionMenu from './ActionMenu.js';
8
- import { getRowKey, resolveActions, rowHasDetails, getActionLabelText } from './helpers.js';
8
+ import { getRowKey, resolveActions, rowHasDetails, getActionLabelText, getStripeProps } from './helpers.js';
9
9
 
10
10
  /**
11
11
  * Desktop table row component
@@ -86,6 +86,7 @@ function TableRow(_ref) {
86
86
  var safeExtraRowClass = typeof extraRowClass === "string" ? extraRowClass.trim() : "";
87
87
  var stripeColors = theme === null || theme === void 0 ? void 0 : theme.stripedColors;
88
88
  var stripeBg = stripedRows && !isSelected && Array.isArray(stripeColors) && stripeColors.length > 0 ? stripeColors[globalIndex % stripeColors.length] : undefined;
89
+ var stripeProps = getStripeProps(stripeBg);
89
90
  var rowKey = isNewRow ? row._key : key;
90
91
  var isRowActive = interactive && (activeCell === null || activeCell === void 0 ? void 0 : activeCell.rowKey) === rowKey;
91
92
  var effectiveRow = React.useMemo(function () {
@@ -94,10 +95,8 @@ function TableRow(_ref) {
94
95
  }, [interactive, pendingEdits, rowKey, row]);
95
96
  return jsxs(React.Fragment, {
96
97
  children: [jsxs("tr", {
97
- style: stripeBg ? {
98
- backgroundColor: stripeBg
99
- } : undefined,
100
- className: cn(theme !== null && theme !== void 0 && theme.rowHover ? ["hover:" + theme.rowHover] : [], {
98
+ style: stripeProps.style,
99
+ className: cn(stripeProps.className, theme !== null && theme !== void 0 && theme.rowHover ? ["hover:" + theme.rowHover] : [], {
101
100
  "cursor-pointer": !!onRowClick,
102
101
  "bg-primary-50": isSelected,
103
102
  "bg-primary-50/20": isRowActive && !isSelected,
@@ -116,7 +115,7 @@ function TableRow(_ref) {
116
115
  },
117
116
  "aria-expanded": isExpanded,
118
117
  "aria-label": isExpanded ? "Collapse row details" : "Expand row details",
119
- className: "p-1 rounded hover:bg-gray-100",
118
+ className: "p-1 rounded hover:bg-gray-100 dark:hover:bg-gray-800",
120
119
  children: isExpanded ? "▾" : "▸"
121
120
  })
122
121
  }), showSerial && jsx("td", {
@@ -152,9 +151,9 @@ function TableRow(_ref) {
152
151
  title: isCellInvalid ? "Field \"".concat(column.label || column.key, "\" is required or invalid") : undefined,
153
152
  className: cn("px-6 py-4 text-sm transition-all", wrapCell ? "whitespace-normal break-words" : "whitespace-nowrap", {
154
153
  "ring-2 ring-error-500 ring-inset bg-error-50/40 relative z-10": isCellInvalid && !isCellEditing,
155
- "ring-2 ring-error-600 ring-inset bg-white p-1 z-20 relative": isCellEditing && isCellInvalid,
154
+ "ring-2 ring-error-600 ring-inset bg-surface p-1 z-20 relative": isCellEditing && isCellInvalid,
156
155
  "ring-2 ring-primary-500 ring-inset bg-primary-50/50 relative z-10": isCellActive && !isCellEditing && !isCellInvalid,
157
- "ring-2 ring-primary-600 ring-inset bg-white p-1 z-20 relative": isCellEditing && !isCellInvalid
156
+ "ring-2 ring-primary-600 ring-inset bg-surface p-1 z-20 relative": isCellEditing && !isCellInvalid
158
157
  }, safeExtraCellClass),
159
158
  onClick: function onClick() {
160
159
  if (interactive && onCellClick) {
@@ -201,7 +200,7 @@ function TableRow(_ref) {
201
200
  if (action.disabled) return;
202
201
  handleOnAction(action, row);
203
202
  },
204
- className: cn("p-1 rounded", action.disabled ? "opacity-50 cursor-not-allowed" : "hover:bg-gray-100"),
203
+ className: cn("p-1 rounded", action.disabled ? "opacity-50 cursor-not-allowed" : "hover:bg-gray-100 dark:hover:bg-gray-800"),
205
204
  children: action.render ? action.render(row) : (_action$icon = action.icon) !== null && _action$icon !== void 0 ? _action$icon : jsx("span", {
206
205
  className: "text-xs",
207
206
  children: actionLabel
@@ -217,7 +216,7 @@ function TableRow(_ref) {
217
216
  return toggleActions(e, actionCellKey, row);
218
217
  },
219
218
  "aria-expanded": activeActionRowKey === actionCellKey,
220
- className: "p-1 rounded hover:bg-gray-100",
219
+ className: "p-1 rounded hover:bg-gray-100 dark:hover:bg-gray-800",
221
220
  title: "Actions",
222
221
  children: jsx(MoreVertical, {
223
222
  className: "h-4 w-4"
@@ -241,7 +240,7 @@ function TableRow(_ref) {
241
240
  colSpan: visibleCount,
242
241
  className: cn(_defineProperty(_defineProperty({
243
242
  "px-6 py-4": true
244
- }, (_theme$accentColor = theme === null || theme === void 0 ? void 0 : theme.accentColor) !== null && _theme$accentColor !== void 0 ? _theme$accentColor : "bg-gray-50", true), (_theme$rowHover = theme === null || theme === void 0 ? void 0 : theme.rowHover) !== null && _theme$rowHover !== void 0 ? _theme$rowHover : "bg-gray-50", true)),
243
+ }, (_theme$accentColor = theme === null || theme === void 0 ? void 0 : theme.accentColor) !== null && _theme$accentColor !== void 0 ? _theme$accentColor : "bg-background", true), (_theme$rowHover = theme === null || theme === void 0 ? void 0 : theme.rowHover) !== null && _theme$rowHover !== void 0 ? _theme$rowHover : "bg-background", true)),
245
244
  children: jsx(DetailsComponent, {
246
245
  row: row,
247
246
  index: globalIndex
@@ -10,6 +10,21 @@ var getRowKey = function getRowKey(row, globalIndex) {
10
10
  if (row._id !== undefined && row._id !== null) return String(row._id);
11
11
  return String(globalIndex);
12
12
  };
13
+ /**
14
+ * A `stripedColors` entry is either a CSS colour ("#f7fafc", "rgb(...)") applied as an
15
+ * inline background, or a Tailwind class ("bg-surface", "dark:bg-gray-900") applied as a
16
+ * className. Returns the props to spread onto the striped element.
17
+ */
18
+ var getStripeProps = function getStripeProps(stripe) {
19
+ if (!stripe) return {};
20
+ return /(^|[\s:])bg-/.test(stripe) ? {
21
+ className: stripe
22
+ } : {
23
+ style: {
24
+ backgroundColor: stripe
25
+ }
26
+ };
27
+ };
13
28
  /**
14
29
  * Resolve a value that may be supplied directly or as a per-row producer.
15
30
  * Used for an action's `label`, `icon`, `hidden` and `disabled`.
@@ -121,4 +136,4 @@ var resolveActions = function resolveActions(actions, row, index) {
121
136
  };
122
137
  };
123
138
 
124
- export { getActionLabelText, getRowKey, mergeDefaultActions, resolveActions, rowHasDetails };
139
+ export { getActionLabelText, getRowKey, getStripeProps, mergeDefaultActions, resolveActions, rowHasDetails };
@@ -44,7 +44,7 @@ var Dropdown = function Dropdown(_ref) {
44
44
  },
45
45
  children: trigger
46
46
  }), isOpen && jsx("div", {
47
- className: "absolute z-50 bg-white border border-gray-200 rounded-md shadow-lg ".concat(placementClasses[placement], " min-w-48"),
47
+ className: "absolute z-50 bg-surface text-foreground border border-line rounded-md shadow-lg ".concat(placementClasses[placement], " min-w-48"),
48
48
  children: children
49
49
  })]
50
50
  }));
@@ -67,7 +67,7 @@ var NotificationsDropdown = function NotificationsDropdown(_ref) {
67
67
  // For simplicity, shows notifications in the dropdown, can be expanded
68
68
  return jsx(Dropdown, {
69
69
  trigger: jsxs("button", {
70
- className: "relative rounded-md p-2 text-primary-400 hover:text-primary-500 hover:bg-gray-100",
70
+ className: "relative rounded-md p-2 text-primary-400 hover:text-primary-500 hover:bg-gray-100 dark:hover:bg-gray-800",
71
71
  "aria-label": "notifications",
72
72
  children: [jsx(Bell, {
73
73
  className: "h-5 w-5"
@@ -80,9 +80,9 @@ var NotificationsDropdown = function NotificationsDropdown(_ref) {
80
80
  children: jsxs("div", {
81
81
  className: "py-2 min-w-56 max-h-80 overflow-y-auto",
82
82
  children: [jsxs("div", {
83
- className: "px-4 py-2 border-b border-gray-100 flex items-center justify-between",
83
+ className: "px-4 py-2 border-b border-line flex items-center justify-between",
84
84
  children: [jsx("span", {
85
- className: "font-medium text-primary-800 text-sm",
85
+ className: "font-medium text-primary-800 dark:text-primary-100 text-sm",
86
86
  children: "Notifications"
87
87
  }), jsx("button", {
88
88
  className: "text-xs text-primary-400 hover:text-error-600",
@@ -98,16 +98,16 @@ var NotificationsDropdown = function NotificationsDropdown(_ref) {
98
98
  children: "No notifications"
99
99
  }) : notifications.map(function (n) {
100
100
  return jsxs("div", {
101
- className: cn("flex items-start gap-3 px-4 py-2 hover:bg-gray-50 cursor-pointer group", !n.read ? "bg-primary-50" : ""),
101
+ className: cn("flex items-start gap-3 px-4 py-2 hover:bg-gray-50 dark:hover:bg-gray-800 cursor-pointer group", !n.read ? "bg-primary-50 dark:bg-primary-900/40" : ""),
102
102
  onClick: function onClick() {
103
103
  return onView();
104
104
  },
105
105
  children: [jsx("span", {
106
- className: cn("h-2 w-2 mt-2 rounded-full", !n.read ? "bg-primary-500" : "bg-gray-300")
106
+ className: cn("h-2 w-2 mt-2 rounded-full", !n.read ? "bg-primary-500" : "bg-gray-300 dark:bg-gray-600")
107
107
  }), jsxs("div", {
108
108
  className: "flex-1",
109
109
  children: [jsx("div", {
110
- className: "text-sm text-primary-800",
110
+ className: "text-sm text-primary-800 dark:text-primary-100",
111
111
  children: n.title
112
112
  }), n.message && jsx("div", {
113
113
  className: "text-xs text-primary-500",
@@ -159,10 +159,10 @@ var RightMenuContent = function RightMenuContent(_ref2) {
159
159
  });
160
160
  };
161
161
  var styledClassNames = {
162
- button: "rounded-md p-2 text-primary-400 hover:text-primary-500 hover:bg-gray-100",
162
+ button: "rounded-md p-2 text-primary-400 hover:text-primary-500 hover:bg-gray-100 dark:hover:bg-gray-800",
163
163
  mobileItem: "md:hidden",
164
164
  icon: "h-6 w-6",
165
- dropdown: "w-56 rounded-md border border-gray-200 bg-white py-1 shadow-lg"
165
+ dropdown: "w-56 rounded-md border border-line bg-surface py-1 shadow-lg"
166
166
  };
167
167
  var Navbar = /*#__PURE__*/React.forwardRef(function (_ref3, ref) {
168
168
  var emitter = _ref3.emitter,
@@ -247,7 +247,7 @@ var Navbar = /*#__PURE__*/React.forwardRef(function (_ref3, ref) {
247
247
  },
248
248
  className: cn("block w-full text-left px-4 py-2 text-sm", {
249
249
  "text-primary-600": item.active,
250
- "hover:bg-gray-50": !item.active
250
+ "hover:bg-gray-50 dark:hover:bg-gray-800": !item.active
251
251
  }),
252
252
  children: item.label
253
253
  }, item.id);
@@ -262,7 +262,7 @@ var Navbar = /*#__PURE__*/React.forwardRef(function (_ref3, ref) {
262
262
  };
263
263
  return jsxs("nav", _objectSpread2(_objectSpread2({
264
264
  ref: ref,
265
- className: cn("bg-white border-b border-gray-200 px-4 sm:px-6 lg:px-8", className)
265
+ className: cn("bg-surface text-foreground border-b border-line px-4 sm:px-6 lg:px-8", className)
266
266
  }, props), {}, {
267
267
  children: [jsxs("div", {
268
268
  className: "flex h-16 min-w-0 items-center justify-between gap-2 sm:gap-4",
@@ -275,7 +275,7 @@ var Navbar = /*#__PURE__*/React.forwardRef(function (_ref3, ref) {
275
275
  className: "flex min-w-0 items-center",
276
276
  children: [leftIcon !== false && jsx("button", {
277
277
  onClick: onLeftIconClick,
278
- className: "shrink-0 md:hidden rounded-md p-2 text-primary-400 hover:text-primary-500 hover:bg-gray-100",
278
+ className: "shrink-0 md:hidden rounded-md p-2 text-primary-400 hover:text-primary-500 hover:bg-gray-100 dark:hover:bg-gray-800",
279
279
  "aria-label": "back",
280
280
  children: leftIcon
281
281
  }), logo && jsx("div", {
@@ -302,7 +302,7 @@ var Navbar = /*#__PURE__*/React.forwardRef(function (_ref3, ref) {
302
302
  }), jsx("input", {
303
303
  type: "text",
304
304
  placeholder: "Search...",
305
- className: "w-64 rounded-md border border-gray-300 bg-white pl-10 pr-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent",
305
+ className: "w-64 rounded-md border border-gray-300 bg-surface text-foreground dark:border-gray-700 pl-10 pr-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent",
306
306
  value: searchTerm,
307
307
  onChange: function onChange(e) {
308
308
  return setSearchTerm(e.target.value);
@@ -365,9 +365,9 @@ var Navbar = /*#__PURE__*/React.forwardRef(function (_ref3, ref) {
365
365
  children: jsxs("div", {
366
366
  className: styledClassNames.dropdown,
367
367
  children: [jsxs("div", {
368
- className: "px-4 py-2 border-b border-gray-200",
368
+ className: "px-4 py-2 border-b border-line",
369
369
  children: [jsx("p", {
370
- className: "text-sm font-medium text-primary-900",
370
+ className: "text-sm font-medium text-primary-900 dark:text-primary-100",
371
371
  children: user.name
372
372
  }), jsx("p", {
373
373
  className: "text-xs text-primary-500",
@@ -377,23 +377,23 @@ var Navbar = /*#__PURE__*/React.forwardRef(function (_ref3, ref) {
377
377
  className: "py-1",
378
378
  children: renderNavItems(true)
379
379
  }), user.menuItems && user.menuItems.length > 0 && jsx("div", {
380
- className: "border-t border-gray-100",
380
+ className: "border-t border-line",
381
381
  children: user.menuItems.map(function (mi) {
382
382
  return jsx("button", {
383
383
  onClick: function onClick(e) {
384
384
  var _mi$onClick;
385
385
  return mi === null || mi === void 0 || (_mi$onClick = mi.onClick) === null || _mi$onClick === void 0 ? void 0 : _mi$onClick.call(mi, e);
386
386
  },
387
- className: "block w-full px-4 py-2 text-left text-sm hover:bg-gray-100",
387
+ className: "block w-full px-4 py-2 text-left text-sm hover:bg-gray-100 dark:hover:bg-gray-800",
388
388
  children: mi.label
389
389
  }, mi.id);
390
390
  })
391
391
  }), jsx("div", {
392
- className: "border-t border-gray-100 sm:hidden",
392
+ className: "border-t border-line sm:hidden",
393
393
  children: jsxs("button", {
394
394
  type: "button",
395
395
  onClick: handleLogoutClick,
396
- className: "flex w-full items-center gap-2 px-4 py-2 text-left text-sm hover:bg-gray-100",
396
+ className: "flex w-full items-center gap-2 px-4 py-2 text-left text-sm hover:bg-gray-100 dark:hover:bg-gray-800",
397
397
  children: [jsx(LogOut, {
398
398
  className: "h-4 w-4",
399
399
  "aria-hidden": "true"
@@ -407,13 +407,13 @@ var Navbar = /*#__PURE__*/React.forwardRef(function (_ref3, ref) {
407
407
  }), isMobileMenuOpen && !user && jsx("div", {
408
408
  className: "md:hidden h-full",
409
409
  children: jsx("div", {
410
- className: "space-y-1 border-t border-gray-200 px-2 pt-4 pb-3",
410
+ className: "space-y-1 border-t border-line px-2 pt-4 pb-3",
411
411
  children: items.map(function (item) {
412
412
  return jsx("a", {
413
413
  href: item.href,
414
414
  className: cn("block rounded-md px-3 py-2 text-base font-medium", {
415
- "bg-primary-50 text-primary-700": item.active,
416
- "hover:bg-gray-50": !item.active
415
+ "bg-primary-50 text-primary-700 dark:bg-primary-900/40 dark:text-primary-300": item.active,
416
+ "hover:bg-gray-50 dark:hover:bg-gray-800": !item.active
417
417
  }),
418
418
  children: item.label
419
419
  }, item.id);
@@ -334,8 +334,8 @@ var Sidebar = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
334
334
  }
335
335
  }), {}, {
336
336
  className: cn("flex items-center rounded-md px-3 py-2 text-sm font-medium transition-colors", "focus:outline-none focus-visible:ring-2 focus-visible:ring-primary-500", {
337
- "bg-primary-100 text-primary-700": isActive,
338
- "hover:bg-gray-100": !isActive && !item.disabled,
337
+ "bg-primary-100 text-primary-700 dark:bg-primary-900/40 dark:text-primary-300": isActive,
338
+ "hover:bg-gray-100 dark:hover:bg-gray-800": !isActive && !item.disabled,
339
339
  "cursor-pointer": !item.disabled,
340
340
  "cursor-not-allowed opacity-50": item.disabled,
341
341
  "justify-center": labelHidden
@@ -364,7 +364,7 @@ var Sidebar = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
364
364
  })]
365
365
  }) : item.badge
366
366
  }), hasChildren && jsx("span", {
367
- className: "ml-2 flex-shrink-0 rounded p-0.5 hover:bg-gray-200",
367
+ className: "ml-2 flex-shrink-0 rounded p-0.5 hover:bg-gray-200 dark:hover:bg-gray-700",
368
368
  "aria-hidden": "true",
369
369
  "data-sidebar-chevron": "",
370
370
  onClick: hasHref ? function (e) {
@@ -414,7 +414,7 @@ var Sidebar = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
414
414
  }),
415
415
  "data-sidebar-section": section.key || "",
416
416
  children: [effectiveCollapsed && idx > 0 && jsx("hr", {
417
- className: "mx-2 my-2 border-gray-200",
417
+ className: "mx-2 my-2 border-line",
418
418
  "aria-hidden": "true"
419
419
  }), section.key && (effectiveCollapsed ? jsx("span", {
420
420
  id: headingId,
@@ -422,7 +422,7 @@ var Sidebar = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
422
422
  children: section.key
423
423
  }) : jsx("p", {
424
424
  id: headingId,
425
- className: "px-3 pb-1 pt-2 text-micro font-semibold uppercase tracking-wide text-gray-500",
425
+ className: "px-3 pb-1 pt-2 text-micro font-semibold uppercase tracking-wide text-muted",
426
426
  children: section.key
427
427
  })), section.items.map(function (item) {
428
428
  return _renderMenuItem(item, 0, pane);
@@ -461,7 +461,7 @@ var Sidebar = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
461
461
  return jsx("button", {
462
462
  type: "button",
463
463
  onClick: handleUserClick,
464
- className: cn(base, "cursor-pointer hover:bg-gray-100 transition-colors", "focus:outline-none focus-visible:ring-2 focus-visible:ring-primary-500"),
464
+ className: cn(base, "cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors", "focus:outline-none focus-visible:ring-2 focus-visible:ring-primary-500"),
465
465
  "aria-label": effectiveCollapsed && !user.avatar ? user.name : undefined,
466
466
  children: content
467
467
  });
@@ -475,26 +475,26 @@ var Sidebar = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
475
475
  }) : footer;
476
476
  if (content === undefined || content === null || content === false) return null;
477
477
  return jsx("div", {
478
- className: "border-t border-gray-200 p-4",
478
+ className: "border-t border-line p-4",
479
479
  "data-sidebar-footer": "",
480
480
  children: content
481
481
  });
482
482
  };
483
483
  var renderSidebarContent = function renderSidebarContent(pane) {
484
484
  return jsxs("div", {
485
- className: cn("flex h-full flex-col bg-white border-r border-gray-200 shadow-sm", "w-64 transition-all duration-200", {
485
+ className: cn("flex h-full flex-col bg-surface text-foreground border-r border-line shadow-sm", "w-64 transition-all duration-200", {
486
486
  "w-16": effectiveCollapsed,
487
487
  "w-64": !effectiveCollapsed
488
488
  }),
489
489
  children: [jsxs("div", {
490
- className: "flex h-16 items-center justify-between border-b border-gray-200 px-4",
490
+ className: "flex h-16 items-center justify-between border-b border-line px-4",
491
491
  children: [!effectiveCollapsed && logo && jsx("div", {
492
492
  className: "flex items-center",
493
493
  children: logo
494
494
  }), jsx("button", {
495
495
  type: "button",
496
496
  onClick: handleToggleClick,
497
- className: "rounded-md p-1 hover:bg-gray-100",
497
+ className: "rounded-md p-1 hover:bg-gray-100 dark:hover:bg-gray-800",
498
498
  "aria-label": effectiveCollapsed ? "Expand sidebar" : "Collapse sidebar",
499
499
  children: effectiveCollapsed ? jsx(ChevronRight, {
500
500
  className: "h-5 w-5"
@@ -503,10 +503,10 @@ var Sidebar = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
503
503
  })
504
504
  })]
505
505
  }), jsx("nav", {
506
- className: "flex-1 space-y-1 overflow-y-auto p-4 [&::-webkit-scrollbar]:w-2\n [&::-webkit-scrollbar-track]:bg-gray-100\n [&::-webkit-scrollbar-thumb]:bg-gray-300\n hover:[&::-webkit-scrollbar-thumb]:bg-gray-400",
506
+ className: "flex-1 space-y-1 overflow-y-auto p-4 [&::-webkit-scrollbar]:w-2\n [&::-webkit-scrollbar-track]:bg-gray-100 dark:[&::-webkit-scrollbar-track]:bg-gray-800\n [&::-webkit-scrollbar-thumb]:bg-gray-300 dark:[&::-webkit-scrollbar-thumb]:bg-gray-700\n hover:[&::-webkit-scrollbar-thumb]:bg-gray-400",
507
507
  children: renderNavContent(pane)
508
508
  }), renderFooter(pane), user && jsx("div", {
509
- className: "border-t border-gray-200 p-4",
509
+ className: "border-t border-line p-4",
510
510
  children: jsx("div", {
511
511
  className: "relative",
512
512
  children: renderUserBlock()
@@ -18,7 +18,7 @@ var Card = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
18
18
  props = _objectWithoutProperties(_ref, _excluded);
19
19
  return jsx("div", _objectSpread2(_objectSpread2({
20
20
  ref: ref,
21
- className: cn('rounded-lg border border-gray-200 bg-white shadow-sm', {
21
+ className: cn('rounded-lg border border-line bg-surface shadow-sm', {
22
22
  'hover:shadow-md transition-shadow': hover
23
23
  }, className)
24
24
  }, props), {}, {
@@ -31,7 +31,7 @@ var CardHeader = function CardHeader(_ref2) {
31
31
  className = _ref2.className,
32
32
  props = _objectWithoutProperties(_ref2, _excluded2);
33
33
  return jsx("div", _objectSpread2(_objectSpread2({
34
- className: cn('px-6 py-4 border-b border-gray-200', className)
34
+ className: cn('px-6 py-4 border-b border-line', className)
35
35
  }, props), {}, {
36
36
  children: children
37
37
  }));
@@ -41,7 +41,7 @@ var CardTitle = function CardTitle(_ref3) {
41
41
  className = _ref3.className,
42
42
  props = _objectWithoutProperties(_ref3, _excluded3);
43
43
  return jsx("h3", _objectSpread2(_objectSpread2({
44
- className: cn('text-lg font-semibold text-primary-900', className)
44
+ className: cn('text-lg font-semibold text-primary-900 dark:text-primary-100', className)
45
45
  }, props), {}, {
46
46
  children: children
47
47
  }));
@@ -51,7 +51,7 @@ var CardDescription = function CardDescription(_ref4) {
51
51
  className = _ref4.className,
52
52
  props = _objectWithoutProperties(_ref4, _excluded4);
53
53
  return jsx("p", _objectSpread2(_objectSpread2({
54
- className: cn('text-sm text-primary-600', className)
54
+ className: cn('text-sm text-primary-600 dark:text-primary-300', className)
55
55
  }, props), {}, {
56
56
  children: children
57
57
  }));
@@ -71,7 +71,7 @@ var CardFooter = function CardFooter(_ref6) {
71
71
  className = _ref6.className,
72
72
  props = _objectWithoutProperties(_ref6, _excluded6);
73
73
  return jsx("div", _objectSpread2(_objectSpread2({
74
- className: cn('px-6 py-4 border-t border-gray-200', className)
74
+ className: cn('px-6 py-4 border-t border-line', className)
75
75
  }, props), {}, {
76
76
  children: children
77
77
  }));
@@ -34,9 +34,9 @@ var Stepper = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
34
34
  text: 'text-primary-600'
35
35
  },
36
36
  upcoming: {
37
- circle: 'bg-gray-300 text-primary-500',
37
+ circle: 'bg-gray-300 text-gray-700',
38
38
  line: 'bg-gray-300',
39
- text: 'text-primary-500'
39
+ text: 'text-muted'
40
40
  }
41
41
  };
42
42
  return jsx("nav", _objectSpread2(_objectSpread2({
@@ -70,8 +70,10 @@ var Stepper = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
70
70
  },
71
71
  disabled: !onStepClick || stepIndex > currentStep,
72
72
  "aria-current": status === 'current' ? 'step' : undefined,
73
+ "aria-label": "Step ".concat(stepIndex + 1).concat(step.title ? ": ".concat(step.title) : '').concat(status === 'completed' ? ' (completed)' : ''),
73
74
  children: status === 'completed' ? jsx(Check, {
74
- className: "h-4 w-4"
75
+ className: "h-4 w-4",
76
+ "aria-hidden": "true"
75
77
  }) : stepIndex + 1
76
78
  }), !isLast && jsx("div", {
77
79
  className: cn('bg-gray-300', {
@@ -88,7 +90,7 @@ var Stepper = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
88
90
  className: cn('text-sm font-medium', colors.text),
89
91
  children: step.title
90
92
  }), step.description && jsx("span", {
91
- className: "text-xs text-primary-500",
93
+ className: "text-xs text-muted",
92
94
  children: step.description
93
95
  })]
94
96
  })]