@dreamtree-org/twreact-ui 1.1.71 → 1.1.73

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.
package/dist/index.js CHANGED
@@ -247,6 +247,22 @@ const Calendar = createLucideIcon$1("Calendar", [
247
247
  */
248
248
 
249
249
 
250
+ const CheckCircle2 = createLucideIcon$1("CheckCircle2", [
251
+ [
252
+ "path",
253
+ {
254
+ d: "M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z",
255
+ key: "14v8dr"
256
+ }
257
+ ],
258
+ ["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }]
259
+ ]);
260
+
261
+ /**
262
+ * lucide-react v0.0.1 - ISC
263
+ */
264
+
265
+
250
266
  const CheckCircle = createLucideIcon$1("CheckCircle", [
251
267
  ["path", { d: "M22 11.08V12a10 10 0 1 1-5.93-9.14", key: "g774vq" }],
252
268
  ["polyline", { points: "22 4 12 14.01 9 11.01", key: "6xbx8j" }]
@@ -657,6 +673,17 @@ const User = createLucideIcon$1("User", [
657
673
  */
658
674
 
659
675
 
676
+ const XCircle = createLucideIcon$1("XCircle", [
677
+ ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
678
+ ["path", { d: "m15 9-6 6", key: "1uzhvr" }],
679
+ ["path", { d: "m9 9 6 6", key: "z0biqf" }]
680
+ ]);
681
+
682
+ /**
683
+ * lucide-react v0.0.1 - ISC
684
+ */
685
+
686
+
660
687
  const X = createLucideIcon$1("X", [
661
688
  ["path", { d: "M18 6 6 18", key: "1bl5f8" }],
662
689
  ["path", { d: "m6 6 12 12", key: "d8bk6v" }]
@@ -3191,8 +3218,8 @@ function cn$1() {
3191
3218
  }
3192
3219
 
3193
3220
  var _excluded$A = ["id", "className", "type", "label", "placeholder", "error", "success", "disabled", "required", "clearable", "icon", "iconPosition", "onClear", "showCount", "maxLength", "readOnly", "onChange", "value", "defaultValue"];
3194
- function ownKeys$F(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3195
- function _objectSpread$F(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$F(Object(t), true).forEach(function (r) { _defineProperty$4(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$F(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3221
+ function ownKeys$G(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3222
+ function _objectSpread$G(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$G(Object(t), true).forEach(function (r) { _defineProperty$4(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$G(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3196
3223
  var Input = /*#__PURE__*/React.forwardRef(function (props, forwardedRef) {
3197
3224
  var _ref$current$value2, _ref$current;
3198
3225
  var id = props.id,
@@ -3307,7 +3334,7 @@ var Input = /*#__PURE__*/React.forwardRef(function (props, forwardedRef) {
3307
3334
  className: "text-primary-400",
3308
3335
  children: icon
3309
3336
  })
3310
- }), jsxRuntime.jsx("input", _objectSpread$F({
3337
+ }), jsxRuntime.jsx("input", _objectSpread$G({
3311
3338
  id: inputId,
3312
3339
  ref: ref,
3313
3340
  type: inputType,
@@ -3368,8 +3395,8 @@ var Input = /*#__PURE__*/React.forwardRef(function (props, forwardedRef) {
3368
3395
  });
3369
3396
 
3370
3397
  var _excluded$z = ["className", "variant", "size", "disabled", "loading", "children", "leftIcon", "rightIcon", "fullWidth"];
3371
- function ownKeys$E(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3372
- function _objectSpread$E(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$E(Object(t), true).forEach(function (r) { _defineProperty$4(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$E(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3398
+ function ownKeys$F(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3399
+ function _objectSpread$F(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$F(Object(t), true).forEach(function (r) { _defineProperty$4(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$F(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3373
3400
  var Button = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
3374
3401
  var className = _ref.className,
3375
3402
  _ref$variant = _ref.variant,
@@ -3399,7 +3426,7 @@ var Button = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
3399
3426
  // Full width
3400
3427
  'w-full': fullWidth
3401
3428
  }, className);
3402
- return jsxRuntime.jsxs("button", _objectSpread$E(_objectSpread$E({
3429
+ return jsxRuntime.jsxs("button", _objectSpread$F(_objectSpread$F({
3403
3430
  ref: ref,
3404
3431
  className: baseClasses,
3405
3432
  disabled: disabled || loading
@@ -3434,8 +3461,8 @@ function _toConsumableArray$1(r) {
3434
3461
  }
3435
3462
 
3436
3463
  var _excluded$y = ["options", "value", "onChange", "placeholder", "label", "error", "disabled", "required", "multiSelect", "searchable", "grouped", "onMenuItemRender", "className", "allowClear", "creatable", "onCreateOption", "onSearch", "loading", "selectAllOption", "closeOnSelect", "maxTagCount", "renderGroupLabel", "name"];
3437
- function ownKeys$D(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3438
- function _objectSpread$D(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$D(Object(t), true).forEach(function (r) { _defineProperty$4(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$D(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3464
+ function ownKeys$E(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3465
+ function _objectSpread$E(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$E(Object(t), true).forEach(function (r) { _defineProperty$4(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$E(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3439
3466
  /**
3440
3467
  * Enhanced Select component (debounce removed)
3441
3468
  * - Supports single and multi select
@@ -3456,7 +3483,7 @@ var flattenGroups = function flattenGroups() {
3456
3483
  return groups.reduce(function (acc, g) {
3457
3484
  var groupLabel = g.label;
3458
3485
  g.options.forEach(function (opt) {
3459
- return acc.push(_objectSpread$D(_objectSpread$D({}, opt), {}, {
3486
+ return acc.push(_objectSpread$E(_objectSpread$E({}, opt), {}, {
3460
3487
  _group: groupLabel
3461
3488
  }));
3462
3489
  });
@@ -3552,7 +3579,7 @@ var Select = /*#__PURE__*/React.forwardRef(function (_ref, forwardedRef) {
3552
3579
  var flatOptions = React.useMemo(function () {
3553
3580
  if (grouped) return flattenGroups(options);
3554
3581
  return options.map(function (opt) {
3555
- return _objectSpread$D({}, opt);
3582
+ return _objectSpread$E({}, opt);
3556
3583
  });
3557
3584
  }, [options, grouped]);
3558
3585
  var selectedValues = multiSelect ? Array.isArray(value) ? value : [] : value;
@@ -3577,7 +3604,7 @@ var Select = /*#__PURE__*/React.forwardRef(function (_ref, forwardedRef) {
3577
3604
  }
3578
3605
  if (grouped) {
3579
3606
  return options.map(function (g) {
3580
- return _objectSpread$D(_objectSpread$D({}, g), {}, {
3607
+ return _objectSpread$E(_objectSpread$E({}, g), {}, {
3581
3608
  options: g.options.filter(function (o) {
3582
3609
  return o.label.toLowerCase().includes(searchTerm.toLowerCase());
3583
3610
  })
@@ -3847,7 +3874,7 @@ var Select = /*#__PURE__*/React.forwardRef(function (_ref, forwardedRef) {
3847
3874
  className: "text-xs border border-slate-200 p-0.5 rounded-md cursor-pointer hover:bg-gray-100",
3848
3875
  onClick: function onClick() {
3849
3876
  return setCollapsedGroups(function (prev) {
3850
- return _objectSpread$D(_objectSpread$D({}, prev), {}, _defineProperty$4({}, group.label, !prev[group.label]));
3877
+ return _objectSpread$E(_objectSpread$E({}, prev), {}, _defineProperty$4({}, group.label, !prev[group.label]));
3851
3878
  });
3852
3879
  },
3853
3880
  children: jsxRuntime.jsx(ChevronDown, {
@@ -3941,7 +3968,7 @@ var Select = /*#__PURE__*/React.forwardRef(function (_ref, forwardedRef) {
3941
3968
  }), jsxRuntime.jsxs("div", {
3942
3969
  ref: selectRef,
3943
3970
  className: "relative",
3944
- children: [jsxRuntime.jsxs("button", _objectSpread$D(_objectSpread$D({
3971
+ children: [jsxRuntime.jsxs("button", _objectSpread$E(_objectSpread$E({
3945
3972
  type: "button",
3946
3973
  "aria-haspopup": "listbox",
3947
3974
  "aria-expanded": isOpen,
@@ -4008,7 +4035,7 @@ var Select = /*#__PURE__*/React.forwardRef(function (_ref, forwardedRef) {
4008
4035
  // escapes any ancestor overflow:hidden|auto|scroll. Coordinates
4009
4036
  // are anchored to the trigger's viewport rect; width matches the
4010
4037
  // trigger; maxHeight is driven by available space.
4011
- style: _objectSpread$D({
4038
+ style: _objectSpread$E({
4012
4039
  left: menuCoords ? "".concat(menuCoords.left, "px") : undefined,
4013
4040
  top: menuCoords ? "".concat(menuCoords.top, "px") : undefined,
4014
4041
  width: menuCoords ? "".concat(menuCoords.width, "px") : undefined
@@ -4490,8 +4517,8 @@ var DEFAULT_ACTIONS = [{
4490
4517
  })
4491
4518
  }];
4492
4519
 
4493
- function ownKeys$C(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4494
- function _objectSpread$C(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$C(Object(t), true).forEach(function (r) { _defineProperty$4(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$C(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4520
+ function ownKeys$D(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4521
+ function _objectSpread$D(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$D(Object(t), true).forEach(function (r) { _defineProperty$4(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$D(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4495
4522
  function _createForOfIteratorHelper$1(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$1(r)) || e) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: true } : { done: false, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = true, u = false; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = true, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
4496
4523
  function _unsupportedIterableToArray$1(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$1(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$1(r, a) : void 0; } }
4497
4524
  function _arrayLikeToArray$1(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
@@ -4555,7 +4582,7 @@ var mergeDefaultActions = function mergeDefaultActions(overrides, defaults) {
4555
4582
  _iterator.f();
4556
4583
  }
4557
4584
  var merged = defaults.map(function (d) {
4558
- return d !== null && d !== void 0 && d.name && byName.has(d.name) ? _objectSpread$C(_objectSpread$C({}, d), byName.get(d.name)) : d;
4585
+ return d !== null && d !== void 0 && d.name && byName.has(d.name) ? _objectSpread$D(_objectSpread$D({}, d), byName.get(d.name)) : d;
4559
4586
  });
4560
4587
  var defaultNames = new Set(defaults.map(function (d) {
4561
4588
  return d === null || d === void 0 ? void 0 : d.name;
@@ -4597,7 +4624,7 @@ var resolveActions = function resolveActions(actions, row, index) {
4597
4624
  var action = _step2.value;
4598
4625
  if (!action || _typeof$4(action) !== "object") continue;
4599
4626
  if (callIfFn(action.hidden, row, index)) continue;
4600
- var resolved = _objectSpread$C(_objectSpread$C({}, action), {}, {
4627
+ var resolved = _objectSpread$D(_objectSpread$D({}, action), {}, {
4601
4628
  label: callIfFn(action.label, row, index),
4602
4629
  icon: callIfFn(action.icon, row, index),
4603
4630
  disabled: !!callIfFn(action.disabled, row, index),
@@ -5134,6 +5161,8 @@ function ActionMenu(_ref) {
5134
5161
  }), document.body);
5135
5162
  }
5136
5163
 
5164
+ function ownKeys$C(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
5165
+ function _objectSpread$C(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$C(Object(t), true).forEach(function (r) { _defineProperty$4(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$C(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5137
5166
  /**
5138
5167
  * Desktop table row component
5139
5168
  */
@@ -5182,6 +5211,8 @@ function TableRow(_ref) {
5182
5211
  renderInteractiveCellInput = _ref$renderInteractiv === void 0 ? null : _ref$renderInteractiv,
5183
5212
  _ref$invalidCellSet = _ref.invalidCellSet,
5184
5213
  invalidCellSet = _ref$invalidCellSet === void 0 ? null : _ref$invalidCellSet,
5214
+ _ref$pendingEdits = _ref.pendingEdits,
5215
+ pendingEdits = _ref$pendingEdits === void 0 ? null : _ref$pendingEdits,
5185
5216
  _ref$isNewRow = _ref.isNewRow,
5186
5217
  isNewRow = _ref$isNewRow === void 0 ? false : _ref$isNewRow,
5187
5218
  _ref$onDeleteNewRow = _ref.onDeleteNewRow,
@@ -5209,6 +5240,10 @@ function TableRow(_ref) {
5209
5240
  var stripeBg = stripedRows && !isSelected && Array.isArray(stripeColors) && stripeColors.length > 0 ? stripeColors[globalIndex % stripeColors.length] : undefined;
5210
5241
  var rowKey = isNewRow ? row._key : key;
5211
5242
  var isRowActive = interactive && (activeCell === null || activeCell === void 0 ? void 0 : activeCell.rowKey) === rowKey;
5243
+ var effectiveRow = React.useMemo(function () {
5244
+ if (!interactive || !pendingEdits || !pendingEdits[rowKey]) return row;
5245
+ return _objectSpread$C(_objectSpread$C({}, row), pendingEdits[rowKey]);
5246
+ }, [interactive, pendingEdits, rowKey, row]);
5212
5247
  return jsxRuntime.jsxs(React.Fragment, {
5213
5248
  children: [jsxRuntime.jsxs("tr", {
5214
5249
  style: stripeBg ? {
@@ -5221,7 +5256,7 @@ function TableRow(_ref) {
5221
5256
  "bg-amber-50/40": isNewRow && !isSelected && !isRowActive
5222
5257
  }, safeExtraRowClass),
5223
5258
  onClick: function onClick() {
5224
- return onRowClick === null || onRowClick === void 0 ? void 0 : onRowClick(row, globalIndex);
5259
+ return onRowClick === null || onRowClick === void 0 ? void 0 : onRowClick(effectiveRow, globalIndex);
5225
5260
  },
5226
5261
  children: [hasDetailsColumn && jsxRuntime.jsx("td", {
5227
5262
  className: "px-4 py-4 text-sm",
@@ -5229,7 +5264,7 @@ function TableRow(_ref) {
5229
5264
  type: "button",
5230
5265
  onClick: function onClick(e) {
5231
5266
  e.stopPropagation();
5232
- toggleExpandRow(row, rowIndexInPage);
5267
+ toggleExpandRow(effectiveRow, rowIndexInPage);
5233
5268
  },
5234
5269
  "aria-expanded": isExpanded,
5235
5270
  "aria-label": isExpanded ? "Collapse row details" : "Expand row details",
@@ -5249,12 +5284,12 @@ function TableRow(_ref) {
5249
5284
  className: "rounded border-gray-300",
5250
5285
  checked: isSelected,
5251
5286
  onChange: function onChange() {
5252
- return handleSelectRow(row, rowIndexInPage);
5287
+ return handleSelectRow(effectiveRow, rowIndexInPage);
5253
5288
  }
5254
5289
  })
5255
5290
  }), visibleColumns.map(function (column, columnIndex) {
5256
5291
  var extraCellClass = typeof cellClass === "function" ? cellClass({
5257
- row: row,
5292
+ row: effectiveRow,
5258
5293
  rowIndex: globalIndex,
5259
5294
  column: column,
5260
5295
  columnIndex: columnIndex
@@ -5273,15 +5308,15 @@ function TableRow(_ref) {
5273
5308
  }, safeExtraCellClass),
5274
5309
  onClick: function onClick(e) {
5275
5310
  if (interactive && onCellClick) {
5276
- onCellClick(rowKey, column.key, row, column, globalIndex);
5311
+ onCellClick(rowKey, column.key, effectiveRow, column, globalIndex);
5277
5312
  }
5278
5313
  },
5279
5314
  onDoubleClick: function onDoubleClick(e) {
5280
5315
  if (interactive && onCellDoubleClick && column.editable !== false) {
5281
- onCellDoubleClick(rowKey, column.key, row, column, globalIndex);
5316
+ onCellDoubleClick(rowKey, column.key, effectiveRow, column, globalIndex);
5282
5317
  }
5283
5318
  },
5284
- children: isCellEditing && renderInteractiveCellInput ? renderInteractiveCellInput(column, row, globalIndex, rowKey) : renderCell(column, row, globalIndex)
5319
+ children: isCellEditing && renderInteractiveCellInput ? renderInteractiveCellInput(column, effectiveRow, globalIndex, rowKey) : renderCell(column, effectiveRow, globalIndex)
5285
5320
  }, column.key);
5286
5321
  }), jsxRuntime.jsx("td", {
5287
5322
  className: "px-4 py-4"
@@ -5552,6 +5587,7 @@ function FieldInput(_ref) {
5552
5587
  var column = _ref.column,
5553
5588
  value = _ref.value,
5554
5589
  _onChange = _ref.onChange,
5590
+ onKeyDown = _ref.onKeyDown,
5555
5591
  _ref$isEditing = _ref.isEditing,
5556
5592
  isEditing = _ref$isEditing === void 0 ? true : _ref$isEditing,
5557
5593
  _ref$row = _ref.row,
@@ -5564,14 +5600,22 @@ function FieldInput(_ref) {
5564
5600
  autoFocus = _ref$autoFocus === void 0 ? false : _ref$autoFocus;
5565
5601
  var currentValue = value !== null && value !== void 0 ? value : "";
5566
5602
  var inputType = column.type || column.inputType || "text";
5603
+ var stopProp = function stopProp(e) {
5604
+ e.stopPropagation();
5605
+ };
5567
5606
  // Check if custom onRender renderer is provided on the column definition
5568
5607
  if (typeof column.onRender === "function") {
5569
- return column.onRender(row, rowIndex, column, {
5570
- value: currentValue,
5571
- onChange: function onChange(newVal) {
5572
- return _onChange === null || _onChange === void 0 ? void 0 : _onChange(newVal);
5573
- },
5574
- isEditing: isEditing
5608
+ return jsxRuntime.jsx("div", {
5609
+ onClick: stopProp,
5610
+ onMouseDown: stopProp,
5611
+ children: column.onRender(row, rowIndex, column, {
5612
+ value: currentValue,
5613
+ onChange: function onChange(newVal) {
5614
+ return _onChange === null || _onChange === void 0 ? void 0 : _onChange(newVal);
5615
+ },
5616
+ onKeyDown: onKeyDown,
5617
+ isEditing: isEditing
5618
+ })
5575
5619
  });
5576
5620
  }
5577
5621
  // Textarea / Longtext
@@ -5583,6 +5627,9 @@ function FieldInput(_ref) {
5583
5627
  onChange: function onChange(e) {
5584
5628
  return _onChange === null || _onChange === void 0 ? void 0 : _onChange(e.target.value);
5585
5629
  },
5630
+ onKeyDown: onKeyDown,
5631
+ onClick: stopProp,
5632
+ onMouseDown: stopProp,
5586
5633
  placeholder: "Enter ".concat(column.label || column.key, "..."),
5587
5634
  className: cn$1("w-full px-2 py-1 text-sm border rounded outline-none transition-all focus:ring-2 focus:ring-primary-500 bg-white resize-y min-h-[2.5rem]", className)
5588
5635
  });
@@ -5601,6 +5648,9 @@ function FieldInput(_ref) {
5601
5648
  onChange: function onChange(e) {
5602
5649
  return _onChange === null || _onChange === void 0 ? void 0 : _onChange(e.target.value);
5603
5650
  },
5651
+ onKeyDown: onKeyDown,
5652
+ onClick: stopProp,
5653
+ onMouseDown: stopProp,
5604
5654
  className: cn$1("w-full px-2 py-1 text-sm border rounded outline-none focus:ring-2 focus:ring-primary-500 bg-white", className),
5605
5655
  children: [jsxRuntime.jsxs("option", {
5606
5656
  value: "",
@@ -5618,6 +5668,8 @@ function FieldInput(_ref) {
5618
5668
  var checked = Boolean(currentValue);
5619
5669
  return jsxRuntime.jsx("div", {
5620
5670
  className: cn$1("flex items-center justify-center py-1", className),
5671
+ onClick: stopProp,
5672
+ onMouseDown: stopProp,
5621
5673
  children: jsxRuntime.jsx("input", {
5622
5674
  type: "checkbox",
5623
5675
  autoFocus: autoFocus,
@@ -5625,6 +5677,7 @@ function FieldInput(_ref) {
5625
5677
  onChange: function onChange(e) {
5626
5678
  return _onChange === null || _onChange === void 0 ? void 0 : _onChange(e.target.checked);
5627
5679
  },
5680
+ onKeyDown: onKeyDown,
5628
5681
  className: "w-4 h-4 text-primary-600 border-gray-300 rounded focus:ring-primary-500 cursor-pointer"
5629
5682
  })
5630
5683
  });
@@ -5638,6 +5691,9 @@ function FieldInput(_ref) {
5638
5691
  onChange: function onChange(e) {
5639
5692
  return _onChange === null || _onChange === void 0 ? void 0 : _onChange(e.target.value);
5640
5693
  },
5694
+ onKeyDown: onKeyDown,
5695
+ onClick: stopProp,
5696
+ onMouseDown: stopProp,
5641
5697
  className: cn$1("w-full px-2 py-1 text-sm border rounded outline-none focus:ring-2 focus:ring-primary-500 bg-white", className)
5642
5698
  });
5643
5699
  }
@@ -5650,6 +5706,9 @@ function FieldInput(_ref) {
5650
5706
  onChange: function onChange(e) {
5651
5707
  return _onChange === null || _onChange === void 0 ? void 0 : _onChange(e.target.value === "" ? "" : Number(e.target.value));
5652
5708
  },
5709
+ onKeyDown: onKeyDown,
5710
+ onClick: stopProp,
5711
+ onMouseDown: stopProp,
5653
5712
  placeholder: "Enter ".concat(column.label || column.key, "..."),
5654
5713
  className: cn$1("w-full px-2 py-1 text-sm border rounded outline-none focus:ring-2 focus:ring-primary-500 bg-white", className)
5655
5714
  });
@@ -5662,6 +5721,9 @@ function FieldInput(_ref) {
5662
5721
  onChange: function onChange(e) {
5663
5722
  return _onChange === null || _onChange === void 0 ? void 0 : _onChange(e.target.value);
5664
5723
  },
5724
+ onKeyDown: onKeyDown,
5725
+ onClick: stopProp,
5726
+ onMouseDown: stopProp,
5665
5727
  placeholder: "Enter ".concat(column.label || column.key, "..."),
5666
5728
  className: cn$1("w-full px-2 py-1 text-sm border rounded outline-none focus:ring-2 focus:ring-primary-500 bg-white", className)
5667
5729
  });
@@ -6136,13 +6198,24 @@ var Table = function Table(_ref) {
6136
6198
  }
6137
6199
  }, _callee, null, [[2, 5, 6, 7]]);
6138
6200
  })), [isDirty, isSaving, tableData, dirtyEdits, newRows, onSave]);
6201
+ var handleClearChanges = React.useCallback(function () {
6202
+ setPendingEdits({});
6203
+ setNewRows([]);
6204
+ setEditingCell(null);
6205
+ setActiveCell(null);
6206
+ }, []);
6139
6207
  var handleCellClick = React.useCallback(function (rowKey, colKey, row, column, globalIndex) {
6140
6208
  setActiveCell({
6141
6209
  rowKey: rowKey,
6142
6210
  colKey: colKey,
6143
6211
  rowIndex: globalIndex
6144
6212
  });
6145
- setEditingCell(null);
6213
+ setEditingCell(function (prev) {
6214
+ if (prev && prev.rowKey === rowKey && prev.colKey === colKey) {
6215
+ return prev;
6216
+ }
6217
+ return null;
6218
+ });
6146
6219
  }, []);
6147
6220
  var handleCellDoubleClick = React.useCallback(function (rowKey, colKey, row, column, globalIndex) {
6148
6221
  setActiveCell({
@@ -6158,21 +6231,6 @@ var Table = function Table(_ref) {
6158
6231
  });
6159
6232
  }
6160
6233
  }, []);
6161
- var renderInteractiveCellInput = React.useCallback(function (column, row, globalIndex, rowKey) {
6162
- var _row$column$key;
6163
- var value = pendingEdits[rowKey] && pendingEdits[rowKey][column.key] !== undefined ? pendingEdits[rowKey][column.key] : (_row$column$key = row[column.key]) !== null && _row$column$key !== void 0 ? _row$column$key : "";
6164
- return jsxRuntime.jsx(FieldInput, {
6165
- column: column,
6166
- value: value,
6167
- onChange: function onChange(newVal) {
6168
- return handleCellValueChange(rowKey, column.key, newVal);
6169
- },
6170
- isEditing: true,
6171
- row: row,
6172
- rowIndex: globalIndex,
6173
- autoFocus: (editingCell === null || editingCell === void 0 ? void 0 : editingCell.rowKey) === rowKey && (editingCell === null || editingCell === void 0 ? void 0 : editingCell.colKey) === column.key
6174
- });
6175
- }, [pendingEdits, handleCellValueChange, editingCell]);
6176
6234
  useClickOutside([tableContainerRef], interactive && Boolean(editingCell), function () {
6177
6235
  setEditingCell(null);
6178
6236
  });
@@ -6323,6 +6381,129 @@ var Table = function Table(_ref) {
6323
6381
  };
6324
6382
  });
6325
6383
  }, [limitOptions]);
6384
+ var handleTableKeyDown = React.useCallback(function (e) {
6385
+ if (!interactive) return;
6386
+ var key = e.key,
6387
+ shiftKey = e.shiftKey;
6388
+ // Escape: stop editing
6389
+ if (key === "Escape") {
6390
+ if (editingCell) {
6391
+ e.preventDefault();
6392
+ setEditingCell(null);
6393
+ }
6394
+ return;
6395
+ }
6396
+ // Enter: Save changes only when there are modified changes (isDirty)
6397
+ if (key === "Enter") {
6398
+ var _e$target;
6399
+ if (((_e$target = e.target) === null || _e$target === void 0 ? void 0 : _e$target.tagName) === "TEXTAREA" && shiftKey) {
6400
+ return;
6401
+ }
6402
+ if (isDirty) {
6403
+ e.preventDefault();
6404
+ setEditingCell(null);
6405
+ if (isValid && !isSaving) {
6406
+ handleSave();
6407
+ }
6408
+ }
6409
+ return;
6410
+ }
6411
+ var currentCell = activeCell || editingCell;
6412
+ if (!currentCell) return;
6413
+ var allRows = [].concat(_toConsumableArray$1(paginatedData), _toConsumableArray$1(newRows));
6414
+ if (allRows.length === 0 || visibleColumns.length === 0) return;
6415
+ var rIdx = allRows.findIndex(function (r, idx) {
6416
+ var rKey = r._key || getRowKey(r, startIndex + idx);
6417
+ return rKey === currentCell.rowKey;
6418
+ });
6419
+ var cIdx = visibleColumns.findIndex(function (c) {
6420
+ return c.key === currentCell.colKey;
6421
+ });
6422
+ if (rIdx === -1 || cIdx === -1) return;
6423
+ var nextRIdx = rIdx;
6424
+ var nextCIdx = cIdx;
6425
+ if (key === "Tab") {
6426
+ e.preventDefault();
6427
+ if (shiftKey) {
6428
+ if (cIdx > 0) {
6429
+ nextCIdx = cIdx - 1;
6430
+ } else if (rIdx > 0) {
6431
+ nextRIdx = rIdx - 1;
6432
+ nextCIdx = visibleColumns.length - 1;
6433
+ }
6434
+ } else {
6435
+ if (cIdx < visibleColumns.length - 1) {
6436
+ nextCIdx = cIdx + 1;
6437
+ } else if (rIdx < allRows.length - 1) {
6438
+ nextRIdx = rIdx + 1;
6439
+ nextCIdx = 0;
6440
+ }
6441
+ }
6442
+ } else if (key === "ArrowRight") {
6443
+ var _e$target2, _e$target$value;
6444
+ if (editingCell && ((_e$target2 = e.target) === null || _e$target2 === void 0 ? void 0 : _e$target2.selectionStart) !== undefined && e.target.selectionStart < String((_e$target$value = e.target.value) !== null && _e$target$value !== void 0 ? _e$target$value : "").length) {
6445
+ return;
6446
+ }
6447
+ if (cIdx < visibleColumns.length - 1) {
6448
+ e.preventDefault();
6449
+ nextCIdx = cIdx + 1;
6450
+ }
6451
+ } else if (key === "ArrowLeft") {
6452
+ var _e$target3;
6453
+ if (editingCell && ((_e$target3 = e.target) === null || _e$target3 === void 0 ? void 0 : _e$target3.selectionStart) !== undefined && e.target.selectionStart > 0) {
6454
+ return;
6455
+ }
6456
+ if (cIdx > 0) {
6457
+ e.preventDefault();
6458
+ nextCIdx = cIdx - 1;
6459
+ }
6460
+ } else if (key === "ArrowDown") {
6461
+ var _e$target4;
6462
+ if (((_e$target4 = e.target) === null || _e$target4 === void 0 ? void 0 : _e$target4.tagName) === "SELECT") return;
6463
+ if (rIdx < allRows.length - 1) {
6464
+ e.preventDefault();
6465
+ nextRIdx = rIdx + 1;
6466
+ }
6467
+ } else if (key === "ArrowUp") {
6468
+ var _e$target5;
6469
+ if (((_e$target5 = e.target) === null || _e$target5 === void 0 ? void 0 : _e$target5.tagName) === "SELECT") return;
6470
+ if (rIdx > 0) {
6471
+ e.preventDefault();
6472
+ nextRIdx = rIdx - 1;
6473
+ }
6474
+ } else {
6475
+ return;
6476
+ }
6477
+ var targetRow = allRows[nextRIdx];
6478
+ var targetCol = visibleColumns[nextCIdx];
6479
+ if (!targetRow || !targetCol) return;
6480
+ var targetRowKey = targetRow._key || getRowKey(targetRow, startIndex + nextRIdx);
6481
+ var nextCellObj = {
6482
+ rowKey: targetRowKey,
6483
+ colKey: targetCol.key,
6484
+ rowIndex: startIndex + nextRIdx
6485
+ };
6486
+ setActiveCell(nextCellObj);
6487
+ if (editingCell && targetCol.editable !== false) {
6488
+ setEditingCell(nextCellObj);
6489
+ }
6490
+ }, [interactive, editingCell, activeCell, isDirty, isValid, isSaving, handleSave, paginatedData, newRows, visibleColumns, startIndex]);
6491
+ var renderInteractiveCellInput = React.useCallback(function (column, row, globalIndex, rowKey) {
6492
+ var _row$column$key;
6493
+ var value = pendingEdits[rowKey] && pendingEdits[rowKey][column.key] !== undefined ? pendingEdits[rowKey][column.key] : (_row$column$key = row[column.key]) !== null && _row$column$key !== void 0 ? _row$column$key : "";
6494
+ return jsxRuntime.jsx(FieldInput, {
6495
+ column: column,
6496
+ value: value,
6497
+ onChange: function onChange(newVal) {
6498
+ return handleCellValueChange(rowKey, column.key, newVal);
6499
+ },
6500
+ onKeyDown: handleTableKeyDown,
6501
+ isEditing: true,
6502
+ row: row,
6503
+ rowIndex: globalIndex,
6504
+ autoFocus: (editingCell === null || editingCell === void 0 ? void 0 : editingCell.rowKey) === rowKey && (editingCell === null || editingCell === void 0 ? void 0 : editingCell.colKey) === column.key
6505
+ });
6506
+ }, [pendingEdits, handleCellValueChange, handleTableKeyDown, editingCell]);
6326
6507
  // Callbacks
6327
6508
  var toggleColumnVisibility = React.useCallback(function (key) {
6328
6509
  setColumnsState(function (prev) {
@@ -6545,11 +6726,14 @@ var Table = function Table(_ref) {
6545
6726
  onCellClick: handleCellClick,
6546
6727
  onCellDoubleClick: handleCellDoubleClick,
6547
6728
  renderInteractiveCellInput: renderInteractiveCellInput,
6548
- invalidCellSet: invalidCellSet
6729
+ invalidCellSet: invalidCellSet,
6730
+ pendingEdits: pendingEdits
6549
6731
  };
6550
6732
  return jsxRuntime.jsxs("div", {
6551
6733
  ref: tableContainerRef,
6552
- className: cn$1("w-full border rounded-lg md:rounded-md", className),
6734
+ tabIndex: interactive ? 0 : undefined,
6735
+ onKeyDown: handleTableKeyDown,
6736
+ className: cn$1("w-full border rounded-lg md:rounded-md outline-none focus:ring-1 focus:ring-primary-400", className),
6553
6737
  children: [TheadComponent && typeof TheadComponent === "function" ? jsxRuntime.jsx(TheadComponent, {
6554
6738
  columns: columnsState,
6555
6739
  data: filteredData
@@ -6596,15 +6780,26 @@ var Table = function Table(_ref) {
6596
6780
  onClick: handleSave,
6597
6781
  disabled: !isValid || isSaving,
6598
6782
  title: !isValid ? "Cannot save: ".concat(((_validationErrors$ = validationErrors[0]) === null || _validationErrors$ === void 0 ? void 0 : _validationErrors$.message) || "Validation failed") : "Save changes",
6599
- className: cn$1("px-4 py-2 font-medium rounded-lg text-sm flex items-center gap-2 transition-all shadow-sm", isValid ? "bg-success-600 hover:bg-success-700 active:bg-success-800 text-white cursor-pointer" : "bg-gray-200 text-gray-400 border border-gray-300 cursor-not-allowed opacity-75"),
6783
+ className: cn$1("px-4 py-2 font-medium rounded-lg text-sm flex items-center gap-2 transition-all shadow-sm", isValid ? "bg-primary-600 hover:bg-primary-700 active:bg-primary-800 text-white cursor-pointer" : "bg-gray-200 text-gray-400 border border-gray-300 cursor-not-allowed opacity-75"),
6600
6784
  children: [jsxRuntime.jsx(Save, {
6601
6785
  className: "w-4 h-4"
6602
6786
  }), jsxRuntime.jsx("span", {
6603
6787
  children: isSaving ? "Saving..." : "Save Changes"
6604
6788
  }), pendingCount > 0 && jsxRuntime.jsx("span", {
6605
- className: cn$1("ml-1 px-2 py-0.5 text-xs rounded-full font-bold", isValid ? "bg-success-700 text-white" : "bg-gray-300 text-gray-600"),
6789
+ className: cn$1("ml-1 px-2 py-0.5 text-xs rounded-full font-bold", isValid ? "bg-primary-700 text-white" : "bg-gray-300 text-gray-600"),
6606
6790
  children: pendingCount
6607
6791
  })]
6792
+ }), jsxRuntime.jsxs("button", {
6793
+ type: "button",
6794
+ onClick: handleClearChanges,
6795
+ disabled: isSaving,
6796
+ title: "Discard all pending modifications",
6797
+ className: "px-4 py-2 font-medium rounded-lg text-sm flex items-center gap-2 transition-all border border-primary-300 text-primary-700 bg-white hover:bg-primary-50 active:bg-primary-100 cursor-pointer shadow-sm disabled:opacity-50",
6798
+ children: [jsxRuntime.jsx(X, {
6799
+ className: "w-4 h-4 text-primary-600"
6800
+ }), jsxRuntime.jsx("span", {
6801
+ children: "Clear Changes"
6802
+ })]
6608
6803
  }), !isValid && validationErrors.length > 0 && jsxRuntime.jsxs("div", {
6609
6804
  className: "flex items-center gap-1.5 px-3 py-1.5 bg-warning-50 border border-warning-200 text-warning-800 rounded-md text-xs font-medium",
6610
6805
  children: [jsxRuntime.jsx(AlertCircle, {
@@ -12657,7 +12852,7 @@ var DatePicker = /*#__PURE__*/React.forwardRef(function (_ref, forwardedRef) {
12657
12852
  });
12658
12853
  });
12659
12854
 
12660
- var _excluded$v = ["id", "name", "checked", "defaultChecked", "onChange", "disabled", "size", "trackClass", "thumbClass", "className", "topLabel", "bottomLabel", "rightLabel", "leftLabel", "ariaLabel"];
12855
+ var _excluded$v = ["id", "name", "checked", "defaultChecked", "onChange", "disabled", "size", "color", "trackClass", "thumbClass", "className", "topLabel", "bottomLabel", "rightLabel", "leftLabel", "ariaLabel"];
12661
12856
  function ownKeys$z(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
12662
12857
  function _objectSpread$z(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$z(Object(t), true).forEach(function (r) { _defineProperty$4(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$z(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
12663
12858
  /**
@@ -12689,6 +12884,52 @@ var SIZE_MAP$2 = {
12689
12884
  knobTranslate: "translate-x-6"
12690
12885
  }
12691
12886
  };
12887
+ var COLOR_PRESETS$1 = {
12888
+ primary: {
12889
+ bg: "bg-primary-600",
12890
+ ring: "focus-visible:ring-primary-300"
12891
+ },
12892
+ secondary: {
12893
+ bg: "bg-secondary-600",
12894
+ ring: "focus-visible:ring-secondary-300"
12895
+ },
12896
+ success: {
12897
+ bg: "bg-success-600",
12898
+ ring: "focus-visible:ring-success-300"
12899
+ },
12900
+ green: {
12901
+ bg: "bg-success-600",
12902
+ ring: "focus-visible:ring-success-300"
12903
+ },
12904
+ error: {
12905
+ bg: "bg-error-600",
12906
+ ring: "focus-visible:ring-error-300"
12907
+ },
12908
+ danger: {
12909
+ bg: "bg-error-600",
12910
+ ring: "focus-visible:ring-error-300"
12911
+ },
12912
+ red: {
12913
+ bg: "bg-error-600",
12914
+ ring: "focus-visible:ring-error-300"
12915
+ },
12916
+ warning: {
12917
+ bg: "bg-warning-600",
12918
+ ring: "focus-visible:ring-warning-300"
12919
+ },
12920
+ blue: {
12921
+ bg: "bg-blue-600",
12922
+ ring: "focus-visible:ring-blue-300"
12923
+ },
12924
+ indigo: {
12925
+ bg: "bg-indigo-600",
12926
+ ring: "focus-visible:ring-indigo-300"
12927
+ },
12928
+ purple: {
12929
+ bg: "bg-purple-600",
12930
+ ring: "focus-visible:ring-purple-300"
12931
+ }
12932
+ };
12692
12933
  var Switch = /*#__PURE__*/React.forwardRef(function Switch(props, ref) {
12693
12934
  var id = props.id,
12694
12935
  name = props.name,
@@ -12700,6 +12941,8 @@ var Switch = /*#__PURE__*/React.forwardRef(function Switch(props, ref) {
12700
12941
  disabled = _props$disabled === void 0 ? false : _props$disabled,
12701
12942
  _props$size = props.size,
12702
12943
  size = _props$size === void 0 ? "md" : _props$size,
12944
+ _props$color = props.color,
12945
+ color = _props$color === void 0 ? "primary" : _props$color,
12703
12946
  trackClass = props.trackClass,
12704
12947
  thumbClass = props.thumbClass,
12705
12948
  _props$className = props.className,
@@ -12735,16 +12978,18 @@ var Switch = /*#__PURE__*/React.forwardRef(function Switch(props, ref) {
12735
12978
  }
12736
12979
  };
12737
12980
  var sizeStuff = SIZE_MAP$2[size] || SIZE_MAP$2.md;
12981
+ var isPreset = COLOR_PRESETS$1[color];
12738
12982
  // Classes for the track (we use inline style for arbitrary trackClass when ON)
12739
- var trackClasses = cn$1("relative inline-flex items-center rounded-full transition-colors duration-200 ease-in-out", sizeStuff.track, isOn ? "" : "bg-gray-100", disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer", trackClass // Accepting trackClass as a class name
12983
+ var trackClasses = cn$1("relative inline-flex items-center rounded-full transition-colors duration-200 ease-in-out", sizeStuff.track, isOn ? trackClass ? "" : isPreset ? isPreset.bg : "" : "bg-gray-100", disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer", trackClass // Accepting trackClass as a class name
12740
12984
  );
12741
12985
  // Knob classes (thumb)
12742
12986
  var knobBase = cn$1("inline-block rounded-full bg-white shadow transform ring-0 transition-transform duration-200 ease-in-out", sizeStuff.knob, thumbClass // Accepting thumbClass as a class name
12743
12987
  );
12744
12988
  var knobTransform = isOn ? sizeStuff.knobTranslate : "translate-x-1";
12745
- var focusClasses = disabled ? "" : "focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-sky-300";
12746
- var trackStyle = isOn && !trackClass ? {
12747
- backgroundColor: "rgb(14, 165, 233)"
12989
+ var ringClass = isPreset ? isPreset.ring : "focus-visible:ring-primary-300";
12990
+ var focusClasses = disabled ? "" : "focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 ".concat(ringClass);
12991
+ var trackStyle = isOn && !trackClass && !isPreset ? {
12992
+ backgroundColor: color
12748
12993
  } : undefined; // Fallback to default trackClass if trackClass is not a class
12749
12994
  var accessibleLabel = ariaLabel || rightLabel || leftLabel || topLabel || bottomLabel || "Toggle";
12750
12995
  var containerIsColumn = Boolean(topLabel || bottomLabel);
@@ -13459,7 +13704,7 @@ var Accordion = /*#__PURE__*/React.forwardRef(function Accordion(_ref, ref) {
13459
13704
  });
13460
13705
  Accordion.displayName = "Accordion";
13461
13706
 
13462
- var _excluded$s = ["id", "name", "label", "checked", "defaultChecked", "onChange", "disabled", "required", "className", "size", "labelPosition", "value", "ariaLabel", "variant", "indeterminate", "borderColor", "iconClass", "checkedClass"];
13707
+ var _excluded$s = ["id", "name", "label", "checked", "defaultChecked", "onChange", "disabled", "required", "className", "size", "labelPosition", "value", "ariaLabel", "variant", "indeterminate", "borderColor", "color", "iconClass", "checkedClass"];
13463
13708
  function ownKeys$w(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13464
13709
  function _objectSpread$w(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$w(Object(t), true).forEach(function (r) { _defineProperty$4(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$w(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13465
13710
  var SIZE_CLASSES = {
@@ -13479,6 +13724,52 @@ var SIZE_CLASSES = {
13479
13724
  icon: "w-4 h-4"
13480
13725
  }
13481
13726
  };
13727
+ var COLOR_PRESETS = {
13728
+ primary: {
13729
+ checked: "peer-checked:bg-primary-600 peer-checked:border-primary-600 peer-checked:text-white",
13730
+ ring: "peer-focus:ring-primary-300"
13731
+ },
13732
+ secondary: {
13733
+ checked: "peer-checked:bg-secondary-600 peer-checked:border-secondary-600 peer-checked:text-white",
13734
+ ring: "peer-focus:ring-secondary-300"
13735
+ },
13736
+ success: {
13737
+ checked: "peer-checked:bg-success-600 peer-checked:border-success-600 peer-checked:text-white",
13738
+ ring: "peer-focus:ring-success-300"
13739
+ },
13740
+ green: {
13741
+ checked: "peer-checked:bg-success-600 peer-checked:border-success-600 peer-checked:text-white",
13742
+ ring: "peer-focus:ring-success-300"
13743
+ },
13744
+ error: {
13745
+ checked: "peer-checked:bg-error-600 peer-checked:border-error-600 peer-checked:text-white",
13746
+ ring: "peer-focus:ring-error-300"
13747
+ },
13748
+ danger: {
13749
+ checked: "peer-checked:bg-error-600 peer-checked:border-error-600 peer-checked:text-white",
13750
+ ring: "peer-focus:ring-error-300"
13751
+ },
13752
+ red: {
13753
+ checked: "peer-checked:bg-error-600 peer-checked:border-error-600 peer-checked:text-white",
13754
+ ring: "peer-focus:ring-error-300"
13755
+ },
13756
+ warning: {
13757
+ checked: "peer-checked:bg-warning-600 peer-checked:border-warning-600 peer-checked:text-white",
13758
+ ring: "peer-focus:ring-warning-300"
13759
+ },
13760
+ blue: {
13761
+ checked: "peer-checked:bg-blue-600 peer-checked:border-blue-600 peer-checked:text-white",
13762
+ ring: "peer-focus:ring-blue-300"
13763
+ },
13764
+ indigo: {
13765
+ checked: "peer-checked:bg-indigo-600 peer-checked:border-indigo-600 peer-checked:text-white",
13766
+ ring: "peer-focus:ring-indigo-300"
13767
+ },
13768
+ purple: {
13769
+ checked: "peer-checked:bg-purple-600 peer-checked:border-purple-600 peer-checked:text-white",
13770
+ ring: "peer-focus:ring-purple-300"
13771
+ }
13772
+ };
13482
13773
  var Checkbox = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
13483
13774
  var _props$wrapperProps;
13484
13775
  var id = _ref.id,
@@ -13504,6 +13795,8 @@ var Checkbox = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
13504
13795
  indeterminate = _ref$indeterminate === void 0 ? false : _ref$indeterminate,
13505
13796
  _ref$borderColor = _ref.borderColor,
13506
13797
  borderColor = _ref$borderColor === void 0 ? "#ccc" : _ref$borderColor,
13798
+ _ref$color = _ref.color,
13799
+ color = _ref$color === void 0 ? "primary" : _ref$color,
13507
13800
  iconClass = _ref.iconClass,
13508
13801
  checkedClass = _ref.checkedClass,
13509
13802
  props = _objectWithoutProperties$1(_ref, _excluded$s);
@@ -13537,6 +13830,13 @@ var Checkbox = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
13537
13830
  var iconBase = "pointer-events-none transform transition-all duration-150 ease-out";
13538
13831
  var iconShown = "opacity-100 scale-100";
13539
13832
  var iconHidden = "opacity-0 scale-75";
13833
+ var isPreset = COLOR_PRESETS[color];
13834
+ var colorClasses = isPreset ? "".concat(isPreset.checked, " peer-focus:ring-2 peer-focus:ring-offset-1 ").concat(isPreset.ring) : "peer-focus:ring-2 peer-focus:ring-offset-1 peer-focus:ring-primary-300";
13835
+ var customColorStyle = currentChecked && !isPreset && !checkedClass ? {
13836
+ backgroundColor: color,
13837
+ borderColor: color,
13838
+ color: "#ffffff"
13839
+ } : {};
13540
13840
  return jsxRuntime.jsxs("div", _objectSpread$w(_objectSpread$w({
13541
13841
  className: wrapperCls
13542
13842
  }, (_props$wrapperProps = props === null || props === void 0 ? void 0 : props.wrapperProps) !== null && _props$wrapperProps !== void 0 ? _props$wrapperProps : {}), {}, {
@@ -13547,7 +13847,7 @@ var Checkbox = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
13547
13847
  }), jsxRuntime.jsxs("div", {
13548
13848
  className: boxOuterCls,
13549
13849
  style: disabled ? {} : {
13550
- borderColor: borderColor
13850
+ borderColor: currentChecked && (isPreset || customColorStyle.borderColor) ? undefined : borderColor
13551
13851
  },
13552
13852
  "aria-disabled": disabled,
13553
13853
  children: [jsxRuntime.jsx("input", _objectSpread$w({
@@ -13566,11 +13866,11 @@ var Checkbox = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
13566
13866
  "aria-label": ariaLabel,
13567
13867
  "aria-checked": Boolean(currentChecked)
13568
13868
  }, props)), jsxRuntime.jsx("div", {
13569
- className: "pointer-events-none z-0 flex items-center justify-center rounded-sm w-full h-full transition-colors duration-150 ease-in-out " + "peer-checked:bg-green-600 peer-checked:border-green-600 peer-checked:text-white " + "peer-focus:ring-2 peer-focus:ring-offset-1 peer-focus:ring-green-300 " + "".concat(disabled ? "bg-gray-100 border-gray-400 text-primary-400" : "bg-white border-gray-500", " ").concat(checkedClass ? checkedClass : ""),
13869
+ className: "pointer-events-none z-0 flex items-center justify-center rounded-sm w-full h-full transition-colors duration-150 ease-in-out " + "".concat(colorClasses, " ") + "".concat(disabled ? "bg-gray-100 border-gray-400 text-primary-400" : "bg-white border-gray-500", " ").concat(checkedClass ? checkedClass : ""),
13570
13870
  style: currentChecked && checkedClass ? {
13571
13871
  backgroundColor: "",
13572
13872
  borderColor: ""
13573
- } : {},
13873
+ } : customColorStyle,
13574
13874
  "aria-hidden": "true",
13575
13875
  children: jsxRuntime.jsx(Check, {
13576
13876
  className: "".concat(sizeClass.icon, " ").concat(iconBase, " ").concat(currentChecked ? iconShown : iconHidden, " ").concat(iconClass || ""),
@@ -18947,13 +19247,57 @@ Dialog.Footer = function (_ref6) {
18947
19247
  }));
18948
19248
  };
18949
19249
 
18950
- var _excluded$7 = ["id", "title", "message", "type", "duration", "onClose", "position"];
19250
+ var _excluded$7 = ["id", "title", "message", "description", "type", "duration", "onClose", "position", "statusIcon", "actions", "color", "footerNote", "showFooterNote", "portal", "className"];
18951
19251
  function ownKeys$b(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
18952
19252
  function _objectSpread$b(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$b(Object(t), true).forEach(function (r) { _defineProperty$4(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$b(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
19253
+ var STATUS_CONFIG = {
19254
+ success: {
19255
+ icon: CheckCircle2,
19256
+ iconClass: 'text-emerald-500 dark:text-emerald-400',
19257
+ progressClass: 'bg-emerald-500 dark:bg-emerald-400'
19258
+ },
19259
+ error: {
19260
+ icon: XCircle,
19261
+ iconClass: 'text-rose-500 dark:text-rose-400',
19262
+ progressClass: 'bg-rose-500 dark:bg-rose-400'
19263
+ },
19264
+ warning: {
19265
+ icon: AlertTriangle,
19266
+ iconClass: 'text-amber-500 dark:text-amber-400',
19267
+ progressClass: 'bg-amber-500 dark:bg-amber-400'
19268
+ },
19269
+ info: {
19270
+ icon: Info,
19271
+ iconClass: 'text-sky-500 dark:text-sky-400',
19272
+ progressClass: 'bg-sky-500 dark:bg-sky-400'
19273
+ },
19274
+ "default": {
19275
+ icon: Bell,
19276
+ iconClass: 'text-primary-500 dark:text-primary-400',
19277
+ progressClass: 'bg-primary-500 dark:bg-primary-400'
19278
+ }
19279
+ };
19280
+ var POSITION_CLASSES = {
19281
+ 'top-right': 'top-4 right-4 items-end',
19282
+ 'top-left': 'top-4 left-4 items-start',
19283
+ 'bottom-right': 'bottom-4 right-4 items-end',
19284
+ 'bottom-left': 'bottom-4 left-4 items-start',
19285
+ 'top-center': 'top-4 left-1/2 transform -translate-x-1/2 items-center',
19286
+ 'bottom-center': 'bottom-4 left-1/2 transform -translate-x-1/2 items-center'
19287
+ };
19288
+ var STANDALONE_POSITION_CLASSES = {
19289
+ 'top-right': 'top-4 right-4',
19290
+ 'top-left': 'top-4 left-4',
19291
+ 'bottom-right': 'bottom-4 right-4',
19292
+ 'bottom-left': 'bottom-4 left-4',
19293
+ 'top-center': 'top-4 left-1/2 transform -translate-x-1/2',
19294
+ 'bottom-center': 'bottom-4 left-1/2 transform -translate-x-1/2'
19295
+ };
18953
19296
  var Toast = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
18954
19297
  var id = _ref.id,
18955
19298
  title = _ref.title,
18956
19299
  message = _ref.message,
19300
+ description = _ref.description,
18957
19301
  _ref$type = _ref.type,
18958
19302
  type = _ref$type === void 0 ? 'info' : _ref$type,
18959
19303
  _ref$duration = _ref.duration,
@@ -18961,153 +19305,277 @@ var Toast = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
18961
19305
  onClose = _ref.onClose,
18962
19306
  _ref$position = _ref.position,
18963
19307
  position = _ref$position === void 0 ? 'top-right' : _ref$position,
19308
+ statusIcon = _ref.statusIcon,
19309
+ _ref$actions = _ref.actions,
19310
+ actions = _ref$actions === void 0 ? [] : _ref$actions,
19311
+ color = _ref.color,
19312
+ footerNote = _ref.footerNote,
19313
+ _ref$showFooterNote = _ref.showFooterNote,
19314
+ showFooterNote = _ref$showFooterNote === void 0 ? false : _ref$showFooterNote,
19315
+ _ref$portal = _ref.portal,
19316
+ portal = _ref$portal === void 0 ? true : _ref$portal,
19317
+ _ref$className = _ref.className,
19318
+ className = _ref$className === void 0 ? '' : _ref$className,
18964
19319
  props = _objectWithoutProperties$1(_ref, _excluded$7);
18965
19320
  var _useState = React.useState(true),
18966
19321
  _useState2 = _slicedToArray(_useState, 2),
18967
19322
  isVisible = _useState2[0],
18968
19323
  setIsVisible = _useState2[1];
18969
- React.useEffect(function () {
18970
- if (duration > 0) {
18971
- var timer = setTimeout(function () {
18972
- handleClose();
18973
- }, duration);
18974
- return function () {
18975
- return clearTimeout(timer);
18976
- };
18977
- }
18978
- }, [duration]);
18979
- var handleClose = function handleClose() {
18980
- setIsVisible(false);
19324
+ var _useState3 = React.useState(false),
19325
+ _useState4 = _slicedToArray(_useState3, 2),
19326
+ isLeaving = _useState4[0],
19327
+ setIsLeaving = _useState4[1];
19328
+ var _useState5 = React.useState(false),
19329
+ _useState6 = _slicedToArray(_useState5, 2),
19330
+ isPaused = _useState6[0],
19331
+ setIsPaused = _useState6[1];
19332
+ var progressBarRef = React.useRef(null);
19333
+ var timerTextRef = React.useRef(null);
19334
+ var startTimeRef = React.useRef(null);
19335
+ var remainingRef = React.useRef(duration);
19336
+ var timerRef = React.useRef(null);
19337
+ var animFrameRef = React.useRef(null);
19338
+ var handleClose = React.useCallback(function () {
19339
+ if (isLeaving) return;
19340
+ setIsLeaving(true);
18981
19341
  setTimeout(function () {
19342
+ setIsVisible(false);
18982
19343
  onClose === null || onClose === void 0 || onClose(id);
18983
19344
  }, 300);
18984
- };
18985
- var icons = {
18986
- success: jsxRuntime.jsx(CheckCircle, {
18987
- className: "h-5 w-5 text-success-500"
18988
- }),
18989
- error: jsxRuntime.jsx(AlertCircle, {
18990
- className: "h-5 w-5 text-error-500"
18991
- }),
18992
- warning: jsxRuntime.jsx(AlertTriangle, {
18993
- className: "h-5 w-5 text-warning-500"
18994
- }),
18995
- info: jsxRuntime.jsx(Info, {
18996
- className: "h-5 w-5 text-primary-500"
18997
- })
18998
- };
18999
- var positionClasses = {
19000
- 'top-right': 'top-4 right-4',
19001
- 'top-left': 'top-4 left-4',
19002
- 'bottom-right': 'bottom-4 right-4',
19003
- 'bottom-left': 'bottom-4 left-4',
19004
- 'top-center': 'top-4 left-1/2 transform -translate-x-1/2',
19005
- 'bottom-center': 'bottom-4 left-1/2 transform -translate-x-1/2'
19006
- };
19345
+ }, [id, onClose, isLeaving]);
19346
+ var handleStopTimer = React.useCallback(function (e) {
19347
+ e === null || e === void 0 || e.stopPropagation();
19348
+ setIsPaused(true);
19349
+ if (timerRef.current) clearTimeout(timerRef.current);
19350
+ if (animFrameRef.current) cancelAnimationFrame(animFrameRef.current);
19351
+ }, []);
19352
+ // Direct DOM-based progress updates to prevent 60 FPS React re-renders and glitches
19353
+ React.useEffect(function () {
19354
+ if (duration <= 0) return;
19355
+ if (isPaused) {
19356
+ if (timerRef.current) clearTimeout(timerRef.current);
19357
+ if (animFrameRef.current) cancelAnimationFrame(animFrameRef.current);
19358
+ return;
19359
+ }
19360
+ startTimeRef.current = Date.now();
19361
+ timerRef.current = setTimeout(function () {
19362
+ handleClose();
19363
+ }, remainingRef.current);
19364
+ var _updateProgress = function updateProgress() {
19365
+ var elapsed = startTimeRef.current ? Date.now() - startTimeRef.current : 0;
19366
+ var currentRemaining = Math.max(0, remainingRef.current - elapsed);
19367
+ var pct = currentRemaining / duration * 100;
19368
+ if (progressBarRef.current) {
19369
+ progressBarRef.current.style.width = "".concat(pct, "%");
19370
+ }
19371
+ if (timerTextRef.current) {
19372
+ var secs = Math.ceil(currentRemaining / 1000);
19373
+ timerTextRef.current.textContent = "This message will close in ".concat(secs, " seconds. ");
19374
+ }
19375
+ if (currentRemaining > 0 && !isPaused) {
19376
+ animFrameRef.current = requestAnimationFrame(_updateProgress);
19377
+ }
19378
+ };
19379
+ animFrameRef.current = requestAnimationFrame(_updateProgress);
19380
+ return function () {
19381
+ if (timerRef.current) clearTimeout(timerRef.current);
19382
+ if (animFrameRef.current) cancelAnimationFrame(animFrameRef.current);
19383
+ if (!isPaused && startTimeRef.current) {
19384
+ var elapsed = Date.now() - startTimeRef.current;
19385
+ remainingRef.current = Math.max(0, remainingRef.current - elapsed);
19386
+ }
19387
+ };
19388
+ }, [duration, isPaused, handleClose]);
19007
19389
  if (!isVisible) return null;
19008
- return /*#__PURE__*/ReactDOM.createPortal(jsxRuntime.jsx("div", _objectSpread$b(_objectSpread$b({
19390
+ var statusStyle = STATUS_CONFIG[type] || STATUS_CONFIG.info || STATUS_CONFIG["default"];
19391
+ var StatusIconComponent = statusStyle.icon;
19392
+ var bodyText = description || message;
19393
+ var toastContent = jsxRuntime.jsxs("div", _objectSpread$b(_objectSpread$b({
19009
19394
  ref: ref,
19010
- className: cn$1('fixed z-50 max-w-sm rounded-lg border border-gray-200 bg-white p-4 shadow-lg animate-slide-up', positionClasses[position])
19395
+ onMouseEnter: function onMouseEnter() {
19396
+ return setIsPaused(true);
19397
+ },
19398
+ onMouseLeave: function onMouseLeave() {
19399
+ return setIsPaused(false);
19400
+ },
19401
+ className: cn$1('relative overflow-hidden rounded-xl border border-slate-200/90 bg-white/95 shadow-xl backdrop-blur-md transition-all duration-300', 'dark:border-slate-800/80 dark:bg-[#18181b] dark:text-slate-100 dark:shadow-2xl', 'max-w-md w-full', isLeaving ? 'opacity-0 scale-95 translate-y-1' : 'animate-slide-up opacity-100 scale-100', portal ? ['fixed z-50', STANDALONE_POSITION_CLASSES[position] || STANDALONE_POSITION_CLASSES['top-right']] : '', className)
19011
19402
  }, props), {}, {
19012
- children: jsxRuntime.jsxs("div", {
19013
- className: "flex items-start",
19014
- children: [jsxRuntime.jsx("div", {
19015
- className: "flex-shrink-0",
19016
- children: icons[type]
19017
- }), jsxRuntime.jsxs("div", {
19018
- className: "ml-3 flex-1",
19019
- children: [title && jsxRuntime.jsx("h4", {
19020
- className: "text-sm font-medium text-primary-900",
19021
- children: title
19022
- }), message && jsxRuntime.jsx("p", {
19023
- className: "mt-1 text-sm text-primary-600",
19024
- children: message
19403
+ children: [jsxRuntime.jsx("div", {
19404
+ className: "p-4",
19405
+ children: jsxRuntime.jsxs("div", {
19406
+ className: "flex items-start gap-3 justify-between",
19407
+ children: [jsxRuntime.jsx("span", {
19408
+ className: "flex-shrink-0 mt-0.5",
19409
+ children: statusIcon ? statusIcon : jsxRuntime.jsx(StatusIconComponent, {
19410
+ className: cn$1('h-5 w-5', statusStyle.iconClass)
19411
+ })
19412
+ }), jsxRuntime.jsxs("div", {
19413
+ className: "flex-1 min-w-0 pr-2",
19414
+ children: [title && jsxRuntime.jsx("h4", {
19415
+ className: "text-sm font-semibold text-slate-900 dark:text-slate-100 leading-snug",
19416
+ children: title
19417
+ }), bodyText && jsxRuntime.jsx("p", {
19418
+ className: "mt-1 text-xs text-slate-600 dark:text-slate-400 leading-relaxed whitespace-pre-line",
19419
+ children: bodyText
19420
+ }), actions && actions.length > 0 && jsxRuntime.jsx("div", {
19421
+ className: "mt-3 flex items-center gap-2 flex-wrap",
19422
+ children: actions.map(function (actItem, idx) {
19423
+ return jsxRuntime.jsx("button", {
19424
+ type: "button",
19425
+ onClick: function onClick(e) {
19426
+ var _actItem$onClick;
19427
+ (_actItem$onClick = actItem.onClick) === null || _actItem$onClick === void 0 || _actItem$onClick.call(actItem, e);
19428
+ if (actItem.dismiss !== false) {
19429
+ handleClose();
19430
+ }
19431
+ },
19432
+ className: cn$1('px-3 py-1.5 text-xs font-medium rounded-lg transition-colors border shadow-xs', actItem.variant === 'primary' ? 'bg-primary-600 hover:bg-primary-700 text-white border-primary-600' : 'bg-slate-100 dark:bg-zinc-800/80 text-slate-700 dark:text-zinc-200 border-slate-200 dark:border-zinc-700 hover:bg-slate-200 dark:hover:bg-zinc-700', actItem.className),
19433
+ children: actItem.label
19434
+ }, actItem.id || actItem.label || "act-".concat(idx));
19435
+ })
19436
+ })]
19437
+ }), jsxRuntime.jsx("button", {
19438
+ type: "button",
19439
+ "aria-label": "Close notification",
19440
+ className: "flex-shrink-0 rounded-lg p-1 text-slate-400 hover:text-slate-600 dark:hover:text-slate-200 hover:bg-slate-100 dark:hover:bg-zinc-800/70 transition-colors outline-none focus:ring-2 focus:ring-primary-500",
19441
+ onClick: handleClose,
19442
+ children: jsxRuntime.jsx(X, {
19443
+ className: "h-4 w-4"
19444
+ })
19025
19445
  })]
19026
- }), jsxRuntime.jsx("button", {
19027
- type: "button",
19028
- className: "ml-4 flex-shrink-0 rounded-md p-1 text-primary-400 hover:text-primary-600 hover:bg-gray-100",
19029
- onClick: handleClose,
19030
- children: jsxRuntime.jsx(X, {
19031
- className: "h-4 w-4"
19446
+ })
19447
+ }), (showFooterNote || footerNote) && duration > 0 && jsxRuntime.jsx("div", {
19448
+ className: "px-4 py-2 bg-slate-50 dark:bg-zinc-950/40 border-t border-slate-100 dark:border-zinc-800/50 text-[11px] text-slate-500 dark:text-zinc-400 flex items-center justify-between",
19449
+ children: jsxRuntime.jsx("span", {
19450
+ children: footerNote ? footerNote : jsxRuntime.jsxs(jsxRuntime.Fragment, {
19451
+ children: [jsxRuntime.jsxs("span", {
19452
+ ref: timerTextRef,
19453
+ children: ["This message will close in ", Math.ceil(duration / 1000), " seconds.", ' ']
19454
+ }), jsxRuntime.jsx("button", {
19455
+ type: "button",
19456
+ onClick: handleStopTimer,
19457
+ className: "font-medium text-slate-700 dark:text-zinc-200 hover:underline inline",
19458
+ children: "Click to stop."
19459
+ })]
19032
19460
  })
19033
- })]
19034
- })
19035
- })), document.body);
19461
+ })
19462
+ }), duration > 0 && jsxRuntime.jsx("div", {
19463
+ className: "absolute bottom-0 left-0 right-0 h-0.5 bg-slate-100 dark:bg-zinc-800/80 overflow-hidden rounded-b-xl",
19464
+ children: jsxRuntime.jsx("div", {
19465
+ ref: progressBarRef,
19466
+ className: cn$1('h-full transition-all ease-linear', color ? '' : statusStyle.progressClass),
19467
+ style: {
19468
+ width: '100%',
19469
+ backgroundColor: color || undefined
19470
+ }
19471
+ })
19472
+ })]
19473
+ }));
19474
+ if (portal) {
19475
+ return /*#__PURE__*/ReactDOM.createPortal(toastContent, document.body);
19476
+ }
19477
+ return toastContent;
19036
19478
  });
19037
19479
  Toast.displayName = 'Toast';
19038
- // Toast Container Component
19480
+ // Toast Container Component for vertical stacking & scrollable overflow without visible scrollbars
19039
19481
  var ToastContainer = function ToastContainer(_ref2) {
19040
19482
  var _ref2$toasts = _ref2.toasts,
19041
19483
  toasts = _ref2$toasts === void 0 ? [] : _ref2$toasts,
19042
19484
  _ref2$position = _ref2.position,
19043
19485
  position = _ref2$position === void 0 ? 'top-right' : _ref2$position,
19044
- onRemove = _ref2.onRemove;
19045
- return jsxRuntime.jsx("div", {
19046
- className: "fixed z-50 space-y-2",
19047
- style: _defineProperty$4(_defineProperty$4({}, position.includes('top') ? 'top' : 'bottom', '1rem'), position.includes('right') ? 'right' : position.includes('left') ? 'left' : 'left', position.includes('center') ? '50%' : '1rem'),
19048
- children: toasts.map(function (toast) {
19049
- return jsxRuntime.jsx(Toast, _objectSpread$b(_objectSpread$b({}, toast), {}, {
19050
- position: position,
19051
- onClose: onRemove
19052
- }), toast.id);
19486
+ onRemove = _ref2.onRemove,
19487
+ _ref2$className = _ref2.className,
19488
+ className = _ref2$className === void 0 ? '' : _ref2$className;
19489
+ if (!toasts || toasts.length === 0) {
19490
+ return null;
19491
+ }
19492
+ var posClass = POSITION_CLASSES[position] || POSITION_CLASSES['top-right'];
19493
+ return /*#__PURE__*/ReactDOM.createPortal(jsxRuntime.jsx("div", {
19494
+ className: cn$1('fixed z-50 flex flex-col gap-3 max-h-[calc(100vh-2rem)] overflow-y-auto overflow-x-hidden p-2 pointer-events-none', '[scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden', posClass, className),
19495
+ children: toasts.map(function (t) {
19496
+ return jsxRuntime.jsx("div", {
19497
+ className: "pointer-events-auto w-full max-w-md",
19498
+ children: jsxRuntime.jsx(Toast, _objectSpread$b(_objectSpread$b({}, t), {}, {
19499
+ portal: false,
19500
+ position: position,
19501
+ onClose: onRemove
19502
+ }))
19503
+ }, t.id);
19053
19504
  })
19054
- });
19505
+ }), document.body);
19055
19506
  };
19056
19507
  // Toast Hook
19057
19508
  var useToast = function useToast() {
19058
- var _useState3 = React.useState([]),
19059
- _useState4 = _slicedToArray(_useState3, 2),
19060
- toasts = _useState4[0],
19061
- setToasts = _useState4[1];
19062
- var addToast = function addToast(toast) {
19063
- var id = Date.now().toString();
19509
+ var _useState7 = React.useState([]),
19510
+ _useState8 = _slicedToArray(_useState7, 2),
19511
+ toasts = _useState8[0],
19512
+ setToasts = _useState8[1];
19513
+ var addToast = React.useCallback(function (toastOptions) {
19514
+ var id = toastOptions.id || "".concat(Date.now(), "-").concat(Math.random().toString(36).slice(2, 7));
19515
+ var newToast = _objectSpread$b(_objectSpread$b({}, toastOptions), {}, {
19516
+ id: id
19517
+ });
19064
19518
  setToasts(function (prev) {
19065
- return [].concat(_toConsumableArray$1(prev), [_objectSpread$b(_objectSpread$b({}, toast), {}, {
19066
- id: id
19067
- })]);
19519
+ return [].concat(_toConsumableArray$1(prev), [newToast]);
19068
19520
  });
19069
- };
19070
- var removeToast = function removeToast(id) {
19521
+ return id;
19522
+ }, []);
19523
+ var removeToast = React.useCallback(function (id) {
19071
19524
  setToasts(function (prev) {
19072
- return prev.filter(function (toast) {
19073
- return toast.id !== id;
19525
+ return prev.filter(function (t) {
19526
+ return t.id !== id;
19074
19527
  });
19075
19528
  });
19529
+ }, []);
19530
+ var clearToasts = React.useCallback(function () {
19531
+ setToasts([]);
19532
+ }, []);
19533
+ var toast = React.useCallback(function (options) {
19534
+ return addToast(typeof options === 'string' ? {
19535
+ message: options
19536
+ } : options);
19537
+ }, [addToast]);
19538
+ toast.success = function (title, message, options) {
19539
+ return addToast(_objectSpread$b({
19540
+ title: title,
19541
+ message: message,
19542
+ type: 'success'
19543
+ }, _typeof$4(options) === 'object' ? options : {}));
19076
19544
  };
19077
- var toast = {
19078
- success: function success(title, message, options) {
19079
- return addToast(_objectSpread$b({
19080
- title: title,
19081
- message: message,
19082
- type: 'success'
19083
- }, options));
19084
- },
19085
- error: function error(title, message, options) {
19086
- return addToast(_objectSpread$b({
19087
- title: title,
19088
- message: message,
19089
- type: 'error'
19090
- }, options));
19091
- },
19092
- warning: function warning(title, message, options) {
19093
- return addToast(_objectSpread$b({
19094
- title: title,
19095
- message: message,
19096
- type: 'warning'
19097
- }, options));
19098
- },
19099
- info: function info(title, message, options) {
19100
- return addToast(_objectSpread$b({
19101
- title: title,
19102
- message: message,
19103
- type: 'info'
19104
- }, options));
19105
- }
19545
+ toast.error = function (title, message, options) {
19546
+ return addToast(_objectSpread$b({
19547
+ title: title,
19548
+ message: message,
19549
+ type: 'error'
19550
+ }, _typeof$4(options) === 'object' ? options : {}));
19551
+ };
19552
+ toast.warning = function (title, message, options) {
19553
+ return addToast(_objectSpread$b({
19554
+ title: title,
19555
+ message: message,
19556
+ type: 'warning'
19557
+ }, _typeof$4(options) === 'object' ? options : {}));
19558
+ };
19559
+ toast.info = function (title, message, options) {
19560
+ return addToast(_objectSpread$b({
19561
+ title: title,
19562
+ message: message,
19563
+ type: 'info'
19564
+ }, _typeof$4(options) === 'object' ? options : {}));
19565
+ };
19566
+ toast["default"] = function (title, message, options) {
19567
+ return addToast(_objectSpread$b({
19568
+ title: title,
19569
+ message: message,
19570
+ type: 'default'
19571
+ }, _typeof$4(options) === 'object' ? options : {}));
19106
19572
  };
19107
19573
  return {
19108
19574
  toast: toast,
19109
19575
  toasts: toasts,
19110
- removeToast: removeToast
19576
+ removeToast: removeToast,
19577
+ clearToasts: clearToasts,
19578
+ addToast: addToast
19111
19579
  };
19112
19580
  };
19113
19581