@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.esm.js CHANGED
@@ -227,6 +227,22 @@ const Calendar = createLucideIcon$1("Calendar", [
227
227
  */
228
228
 
229
229
 
230
+ const CheckCircle2 = createLucideIcon$1("CheckCircle2", [
231
+ [
232
+ "path",
233
+ {
234
+ d: "M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z",
235
+ key: "14v8dr"
236
+ }
237
+ ],
238
+ ["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }]
239
+ ]);
240
+
241
+ /**
242
+ * lucide-react v0.0.1 - ISC
243
+ */
244
+
245
+
230
246
  const CheckCircle = createLucideIcon$1("CheckCircle", [
231
247
  ["path", { d: "M22 11.08V12a10 10 0 1 1-5.93-9.14", key: "g774vq" }],
232
248
  ["polyline", { points: "22 4 12 14.01 9 11.01", key: "6xbx8j" }]
@@ -637,6 +653,17 @@ const User = createLucideIcon$1("User", [
637
653
  */
638
654
 
639
655
 
656
+ const XCircle = createLucideIcon$1("XCircle", [
657
+ ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
658
+ ["path", { d: "m15 9-6 6", key: "1uzhvr" }],
659
+ ["path", { d: "m9 9 6 6", key: "z0biqf" }]
660
+ ]);
661
+
662
+ /**
663
+ * lucide-react v0.0.1 - ISC
664
+ */
665
+
666
+
640
667
  const X = createLucideIcon$1("X", [
641
668
  ["path", { d: "M18 6 6 18", key: "1bl5f8" }],
642
669
  ["path", { d: "m6 6 12 12", key: "d8bk6v" }]
@@ -3171,8 +3198,8 @@ function cn$1() {
3171
3198
  }
3172
3199
 
3173
3200
  var _excluded$A = ["id", "className", "type", "label", "placeholder", "error", "success", "disabled", "required", "clearable", "icon", "iconPosition", "onClear", "showCount", "maxLength", "readOnly", "onChange", "value", "defaultValue"];
3174
- 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; }
3175
- 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; }
3201
+ 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; }
3202
+ 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; }
3176
3203
  var Input = /*#__PURE__*/forwardRef(function (props, forwardedRef) {
3177
3204
  var _ref$current$value2, _ref$current;
3178
3205
  var id = props.id,
@@ -3287,7 +3314,7 @@ var Input = /*#__PURE__*/forwardRef(function (props, forwardedRef) {
3287
3314
  className: "text-primary-400",
3288
3315
  children: icon
3289
3316
  })
3290
- }), jsx("input", _objectSpread$F({
3317
+ }), jsx("input", _objectSpread$G({
3291
3318
  id: inputId,
3292
3319
  ref: ref,
3293
3320
  type: inputType,
@@ -3348,8 +3375,8 @@ var Input = /*#__PURE__*/forwardRef(function (props, forwardedRef) {
3348
3375
  });
3349
3376
 
3350
3377
  var _excluded$z = ["className", "variant", "size", "disabled", "loading", "children", "leftIcon", "rightIcon", "fullWidth"];
3351
- 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; }
3352
- 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; }
3378
+ 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; }
3379
+ 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; }
3353
3380
  var Button = /*#__PURE__*/forwardRef(function (_ref, ref) {
3354
3381
  var className = _ref.className,
3355
3382
  _ref$variant = _ref.variant,
@@ -3379,7 +3406,7 @@ var Button = /*#__PURE__*/forwardRef(function (_ref, ref) {
3379
3406
  // Full width
3380
3407
  'w-full': fullWidth
3381
3408
  }, className);
3382
- return jsxs("button", _objectSpread$E(_objectSpread$E({
3409
+ return jsxs("button", _objectSpread$F(_objectSpread$F({
3383
3410
  ref: ref,
3384
3411
  className: baseClasses,
3385
3412
  disabled: disabled || loading
@@ -3414,8 +3441,8 @@ function _toConsumableArray$1(r) {
3414
3441
  }
3415
3442
 
3416
3443
  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"];
3417
- 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; }
3418
- 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; }
3444
+ 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; }
3445
+ 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; }
3419
3446
  /**
3420
3447
  * Enhanced Select component (debounce removed)
3421
3448
  * - Supports single and multi select
@@ -3436,7 +3463,7 @@ var flattenGroups = function flattenGroups() {
3436
3463
  return groups.reduce(function (acc, g) {
3437
3464
  var groupLabel = g.label;
3438
3465
  g.options.forEach(function (opt) {
3439
- return acc.push(_objectSpread$D(_objectSpread$D({}, opt), {}, {
3466
+ return acc.push(_objectSpread$E(_objectSpread$E({}, opt), {}, {
3440
3467
  _group: groupLabel
3441
3468
  }));
3442
3469
  });
@@ -3532,7 +3559,7 @@ var Select = /*#__PURE__*/React__default.forwardRef(function (_ref, forwardedRef
3532
3559
  var flatOptions = useMemo(function () {
3533
3560
  if (grouped) return flattenGroups(options);
3534
3561
  return options.map(function (opt) {
3535
- return _objectSpread$D({}, opt);
3562
+ return _objectSpread$E({}, opt);
3536
3563
  });
3537
3564
  }, [options, grouped]);
3538
3565
  var selectedValues = multiSelect ? Array.isArray(value) ? value : [] : value;
@@ -3557,7 +3584,7 @@ var Select = /*#__PURE__*/React__default.forwardRef(function (_ref, forwardedRef
3557
3584
  }
3558
3585
  if (grouped) {
3559
3586
  return options.map(function (g) {
3560
- return _objectSpread$D(_objectSpread$D({}, g), {}, {
3587
+ return _objectSpread$E(_objectSpread$E({}, g), {}, {
3561
3588
  options: g.options.filter(function (o) {
3562
3589
  return o.label.toLowerCase().includes(searchTerm.toLowerCase());
3563
3590
  })
@@ -3827,7 +3854,7 @@ var Select = /*#__PURE__*/React__default.forwardRef(function (_ref, forwardedRef
3827
3854
  className: "text-xs border border-slate-200 p-0.5 rounded-md cursor-pointer hover:bg-gray-100",
3828
3855
  onClick: function onClick() {
3829
3856
  return setCollapsedGroups(function (prev) {
3830
- return _objectSpread$D(_objectSpread$D({}, prev), {}, _defineProperty$4({}, group.label, !prev[group.label]));
3857
+ return _objectSpread$E(_objectSpread$E({}, prev), {}, _defineProperty$4({}, group.label, !prev[group.label]));
3831
3858
  });
3832
3859
  },
3833
3860
  children: jsx(ChevronDown, {
@@ -3921,7 +3948,7 @@ var Select = /*#__PURE__*/React__default.forwardRef(function (_ref, forwardedRef
3921
3948
  }), jsxs("div", {
3922
3949
  ref: selectRef,
3923
3950
  className: "relative",
3924
- children: [jsxs("button", _objectSpread$D(_objectSpread$D({
3951
+ children: [jsxs("button", _objectSpread$E(_objectSpread$E({
3925
3952
  type: "button",
3926
3953
  "aria-haspopup": "listbox",
3927
3954
  "aria-expanded": isOpen,
@@ -3988,7 +4015,7 @@ var Select = /*#__PURE__*/React__default.forwardRef(function (_ref, forwardedRef
3988
4015
  // escapes any ancestor overflow:hidden|auto|scroll. Coordinates
3989
4016
  // are anchored to the trigger's viewport rect; width matches the
3990
4017
  // trigger; maxHeight is driven by available space.
3991
- style: _objectSpread$D({
4018
+ style: _objectSpread$E({
3992
4019
  left: menuCoords ? "".concat(menuCoords.left, "px") : undefined,
3993
4020
  top: menuCoords ? "".concat(menuCoords.top, "px") : undefined,
3994
4021
  width: menuCoords ? "".concat(menuCoords.width, "px") : undefined
@@ -4470,8 +4497,8 @@ var DEFAULT_ACTIONS = [{
4470
4497
  })
4471
4498
  }];
4472
4499
 
4473
- 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; }
4474
- 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; }
4500
+ 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; }
4501
+ 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; }
4475
4502
  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; } } }; }
4476
4503
  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; } }
4477
4504
  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; }
@@ -4535,7 +4562,7 @@ var mergeDefaultActions = function mergeDefaultActions(overrides, defaults) {
4535
4562
  _iterator.f();
4536
4563
  }
4537
4564
  var merged = defaults.map(function (d) {
4538
- return d !== null && d !== void 0 && d.name && byName.has(d.name) ? _objectSpread$C(_objectSpread$C({}, d), byName.get(d.name)) : d;
4565
+ return d !== null && d !== void 0 && d.name && byName.has(d.name) ? _objectSpread$D(_objectSpread$D({}, d), byName.get(d.name)) : d;
4539
4566
  });
4540
4567
  var defaultNames = new Set(defaults.map(function (d) {
4541
4568
  return d === null || d === void 0 ? void 0 : d.name;
@@ -4577,7 +4604,7 @@ var resolveActions = function resolveActions(actions, row, index) {
4577
4604
  var action = _step2.value;
4578
4605
  if (!action || _typeof$4(action) !== "object") continue;
4579
4606
  if (callIfFn(action.hidden, row, index)) continue;
4580
- var resolved = _objectSpread$C(_objectSpread$C({}, action), {}, {
4607
+ var resolved = _objectSpread$D(_objectSpread$D({}, action), {}, {
4581
4608
  label: callIfFn(action.label, row, index),
4582
4609
  icon: callIfFn(action.icon, row, index),
4583
4610
  disabled: !!callIfFn(action.disabled, row, index),
@@ -5114,6 +5141,8 @@ function ActionMenu(_ref) {
5114
5141
  }), document.body);
5115
5142
  }
5116
5143
 
5144
+ 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; }
5145
+ 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; }
5117
5146
  /**
5118
5147
  * Desktop table row component
5119
5148
  */
@@ -5162,6 +5191,8 @@ function TableRow(_ref) {
5162
5191
  renderInteractiveCellInput = _ref$renderInteractiv === void 0 ? null : _ref$renderInteractiv,
5163
5192
  _ref$invalidCellSet = _ref.invalidCellSet,
5164
5193
  invalidCellSet = _ref$invalidCellSet === void 0 ? null : _ref$invalidCellSet,
5194
+ _ref$pendingEdits = _ref.pendingEdits,
5195
+ pendingEdits = _ref$pendingEdits === void 0 ? null : _ref$pendingEdits,
5165
5196
  _ref$isNewRow = _ref.isNewRow,
5166
5197
  isNewRow = _ref$isNewRow === void 0 ? false : _ref$isNewRow,
5167
5198
  _ref$onDeleteNewRow = _ref.onDeleteNewRow,
@@ -5189,6 +5220,10 @@ function TableRow(_ref) {
5189
5220
  var stripeBg = stripedRows && !isSelected && Array.isArray(stripeColors) && stripeColors.length > 0 ? stripeColors[globalIndex % stripeColors.length] : undefined;
5190
5221
  var rowKey = isNewRow ? row._key : key;
5191
5222
  var isRowActive = interactive && (activeCell === null || activeCell === void 0 ? void 0 : activeCell.rowKey) === rowKey;
5223
+ var effectiveRow = React__default.useMemo(function () {
5224
+ if (!interactive || !pendingEdits || !pendingEdits[rowKey]) return row;
5225
+ return _objectSpread$C(_objectSpread$C({}, row), pendingEdits[rowKey]);
5226
+ }, [interactive, pendingEdits, rowKey, row]);
5192
5227
  return jsxs(React__default.Fragment, {
5193
5228
  children: [jsxs("tr", {
5194
5229
  style: stripeBg ? {
@@ -5201,7 +5236,7 @@ function TableRow(_ref) {
5201
5236
  "bg-amber-50/40": isNewRow && !isSelected && !isRowActive
5202
5237
  }, safeExtraRowClass),
5203
5238
  onClick: function onClick() {
5204
- return onRowClick === null || onRowClick === void 0 ? void 0 : onRowClick(row, globalIndex);
5239
+ return onRowClick === null || onRowClick === void 0 ? void 0 : onRowClick(effectiveRow, globalIndex);
5205
5240
  },
5206
5241
  children: [hasDetailsColumn && jsx("td", {
5207
5242
  className: "px-4 py-4 text-sm",
@@ -5209,7 +5244,7 @@ function TableRow(_ref) {
5209
5244
  type: "button",
5210
5245
  onClick: function onClick(e) {
5211
5246
  e.stopPropagation();
5212
- toggleExpandRow(row, rowIndexInPage);
5247
+ toggleExpandRow(effectiveRow, rowIndexInPage);
5213
5248
  },
5214
5249
  "aria-expanded": isExpanded,
5215
5250
  "aria-label": isExpanded ? "Collapse row details" : "Expand row details",
@@ -5229,12 +5264,12 @@ function TableRow(_ref) {
5229
5264
  className: "rounded border-gray-300",
5230
5265
  checked: isSelected,
5231
5266
  onChange: function onChange() {
5232
- return handleSelectRow(row, rowIndexInPage);
5267
+ return handleSelectRow(effectiveRow, rowIndexInPage);
5233
5268
  }
5234
5269
  })
5235
5270
  }), visibleColumns.map(function (column, columnIndex) {
5236
5271
  var extraCellClass = typeof cellClass === "function" ? cellClass({
5237
- row: row,
5272
+ row: effectiveRow,
5238
5273
  rowIndex: globalIndex,
5239
5274
  column: column,
5240
5275
  columnIndex: columnIndex
@@ -5253,15 +5288,15 @@ function TableRow(_ref) {
5253
5288
  }, safeExtraCellClass),
5254
5289
  onClick: function onClick(e) {
5255
5290
  if (interactive && onCellClick) {
5256
- onCellClick(rowKey, column.key, row, column, globalIndex);
5291
+ onCellClick(rowKey, column.key, effectiveRow, column, globalIndex);
5257
5292
  }
5258
5293
  },
5259
5294
  onDoubleClick: function onDoubleClick(e) {
5260
5295
  if (interactive && onCellDoubleClick && column.editable !== false) {
5261
- onCellDoubleClick(rowKey, column.key, row, column, globalIndex);
5296
+ onCellDoubleClick(rowKey, column.key, effectiveRow, column, globalIndex);
5262
5297
  }
5263
5298
  },
5264
- children: isCellEditing && renderInteractiveCellInput ? renderInteractiveCellInput(column, row, globalIndex, rowKey) : renderCell(column, row, globalIndex)
5299
+ children: isCellEditing && renderInteractiveCellInput ? renderInteractiveCellInput(column, effectiveRow, globalIndex, rowKey) : renderCell(column, effectiveRow, globalIndex)
5265
5300
  }, column.key);
5266
5301
  }), jsx("td", {
5267
5302
  className: "px-4 py-4"
@@ -5532,6 +5567,7 @@ function FieldInput(_ref) {
5532
5567
  var column = _ref.column,
5533
5568
  value = _ref.value,
5534
5569
  _onChange = _ref.onChange,
5570
+ onKeyDown = _ref.onKeyDown,
5535
5571
  _ref$isEditing = _ref.isEditing,
5536
5572
  isEditing = _ref$isEditing === void 0 ? true : _ref$isEditing,
5537
5573
  _ref$row = _ref.row,
@@ -5544,14 +5580,22 @@ function FieldInput(_ref) {
5544
5580
  autoFocus = _ref$autoFocus === void 0 ? false : _ref$autoFocus;
5545
5581
  var currentValue = value !== null && value !== void 0 ? value : "";
5546
5582
  var inputType = column.type || column.inputType || "text";
5583
+ var stopProp = function stopProp(e) {
5584
+ e.stopPropagation();
5585
+ };
5547
5586
  // Check if custom onRender renderer is provided on the column definition
5548
5587
  if (typeof column.onRender === "function") {
5549
- return column.onRender(row, rowIndex, column, {
5550
- value: currentValue,
5551
- onChange: function onChange(newVal) {
5552
- return _onChange === null || _onChange === void 0 ? void 0 : _onChange(newVal);
5553
- },
5554
- isEditing: isEditing
5588
+ return jsx("div", {
5589
+ onClick: stopProp,
5590
+ onMouseDown: stopProp,
5591
+ children: column.onRender(row, rowIndex, column, {
5592
+ value: currentValue,
5593
+ onChange: function onChange(newVal) {
5594
+ return _onChange === null || _onChange === void 0 ? void 0 : _onChange(newVal);
5595
+ },
5596
+ onKeyDown: onKeyDown,
5597
+ isEditing: isEditing
5598
+ })
5555
5599
  });
5556
5600
  }
5557
5601
  // Textarea / Longtext
@@ -5563,6 +5607,9 @@ function FieldInput(_ref) {
5563
5607
  onChange: function onChange(e) {
5564
5608
  return _onChange === null || _onChange === void 0 ? void 0 : _onChange(e.target.value);
5565
5609
  },
5610
+ onKeyDown: onKeyDown,
5611
+ onClick: stopProp,
5612
+ onMouseDown: stopProp,
5566
5613
  placeholder: "Enter ".concat(column.label || column.key, "..."),
5567
5614
  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)
5568
5615
  });
@@ -5581,6 +5628,9 @@ function FieldInput(_ref) {
5581
5628
  onChange: function onChange(e) {
5582
5629
  return _onChange === null || _onChange === void 0 ? void 0 : _onChange(e.target.value);
5583
5630
  },
5631
+ onKeyDown: onKeyDown,
5632
+ onClick: stopProp,
5633
+ onMouseDown: stopProp,
5584
5634
  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),
5585
5635
  children: [jsxs("option", {
5586
5636
  value: "",
@@ -5598,6 +5648,8 @@ function FieldInput(_ref) {
5598
5648
  var checked = Boolean(currentValue);
5599
5649
  return jsx("div", {
5600
5650
  className: cn$1("flex items-center justify-center py-1", className),
5651
+ onClick: stopProp,
5652
+ onMouseDown: stopProp,
5601
5653
  children: jsx("input", {
5602
5654
  type: "checkbox",
5603
5655
  autoFocus: autoFocus,
@@ -5605,6 +5657,7 @@ function FieldInput(_ref) {
5605
5657
  onChange: function onChange(e) {
5606
5658
  return _onChange === null || _onChange === void 0 ? void 0 : _onChange(e.target.checked);
5607
5659
  },
5660
+ onKeyDown: onKeyDown,
5608
5661
  className: "w-4 h-4 text-primary-600 border-gray-300 rounded focus:ring-primary-500 cursor-pointer"
5609
5662
  })
5610
5663
  });
@@ -5618,6 +5671,9 @@ function FieldInput(_ref) {
5618
5671
  onChange: function onChange(e) {
5619
5672
  return _onChange === null || _onChange === void 0 ? void 0 : _onChange(e.target.value);
5620
5673
  },
5674
+ onKeyDown: onKeyDown,
5675
+ onClick: stopProp,
5676
+ onMouseDown: stopProp,
5621
5677
  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)
5622
5678
  });
5623
5679
  }
@@ -5630,6 +5686,9 @@ function FieldInput(_ref) {
5630
5686
  onChange: function onChange(e) {
5631
5687
  return _onChange === null || _onChange === void 0 ? void 0 : _onChange(e.target.value === "" ? "" : Number(e.target.value));
5632
5688
  },
5689
+ onKeyDown: onKeyDown,
5690
+ onClick: stopProp,
5691
+ onMouseDown: stopProp,
5633
5692
  placeholder: "Enter ".concat(column.label || column.key, "..."),
5634
5693
  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)
5635
5694
  });
@@ -5642,6 +5701,9 @@ function FieldInput(_ref) {
5642
5701
  onChange: function onChange(e) {
5643
5702
  return _onChange === null || _onChange === void 0 ? void 0 : _onChange(e.target.value);
5644
5703
  },
5704
+ onKeyDown: onKeyDown,
5705
+ onClick: stopProp,
5706
+ onMouseDown: stopProp,
5645
5707
  placeholder: "Enter ".concat(column.label || column.key, "..."),
5646
5708
  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)
5647
5709
  });
@@ -6116,13 +6178,24 @@ var Table = function Table(_ref) {
6116
6178
  }
6117
6179
  }, _callee, null, [[2, 5, 6, 7]]);
6118
6180
  })), [isDirty, isSaving, tableData, dirtyEdits, newRows, onSave]);
6181
+ var handleClearChanges = useCallback(function () {
6182
+ setPendingEdits({});
6183
+ setNewRows([]);
6184
+ setEditingCell(null);
6185
+ setActiveCell(null);
6186
+ }, []);
6119
6187
  var handleCellClick = useCallback(function (rowKey, colKey, row, column, globalIndex) {
6120
6188
  setActiveCell({
6121
6189
  rowKey: rowKey,
6122
6190
  colKey: colKey,
6123
6191
  rowIndex: globalIndex
6124
6192
  });
6125
- setEditingCell(null);
6193
+ setEditingCell(function (prev) {
6194
+ if (prev && prev.rowKey === rowKey && prev.colKey === colKey) {
6195
+ return prev;
6196
+ }
6197
+ return null;
6198
+ });
6126
6199
  }, []);
6127
6200
  var handleCellDoubleClick = useCallback(function (rowKey, colKey, row, column, globalIndex) {
6128
6201
  setActiveCell({
@@ -6138,21 +6211,6 @@ var Table = function Table(_ref) {
6138
6211
  });
6139
6212
  }
6140
6213
  }, []);
6141
- var renderInteractiveCellInput = useCallback(function (column, row, globalIndex, rowKey) {
6142
- var _row$column$key;
6143
- 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 : "";
6144
- return jsx(FieldInput, {
6145
- column: column,
6146
- value: value,
6147
- onChange: function onChange(newVal) {
6148
- return handleCellValueChange(rowKey, column.key, newVal);
6149
- },
6150
- isEditing: true,
6151
- row: row,
6152
- rowIndex: globalIndex,
6153
- autoFocus: (editingCell === null || editingCell === void 0 ? void 0 : editingCell.rowKey) === rowKey && (editingCell === null || editingCell === void 0 ? void 0 : editingCell.colKey) === column.key
6154
- });
6155
- }, [pendingEdits, handleCellValueChange, editingCell]);
6156
6214
  useClickOutside([tableContainerRef], interactive && Boolean(editingCell), function () {
6157
6215
  setEditingCell(null);
6158
6216
  });
@@ -6303,6 +6361,129 @@ var Table = function Table(_ref) {
6303
6361
  };
6304
6362
  });
6305
6363
  }, [limitOptions]);
6364
+ var handleTableKeyDown = useCallback(function (e) {
6365
+ if (!interactive) return;
6366
+ var key = e.key,
6367
+ shiftKey = e.shiftKey;
6368
+ // Escape: stop editing
6369
+ if (key === "Escape") {
6370
+ if (editingCell) {
6371
+ e.preventDefault();
6372
+ setEditingCell(null);
6373
+ }
6374
+ return;
6375
+ }
6376
+ // Enter: Save changes only when there are modified changes (isDirty)
6377
+ if (key === "Enter") {
6378
+ var _e$target;
6379
+ if (((_e$target = e.target) === null || _e$target === void 0 ? void 0 : _e$target.tagName) === "TEXTAREA" && shiftKey) {
6380
+ return;
6381
+ }
6382
+ if (isDirty) {
6383
+ e.preventDefault();
6384
+ setEditingCell(null);
6385
+ if (isValid && !isSaving) {
6386
+ handleSave();
6387
+ }
6388
+ }
6389
+ return;
6390
+ }
6391
+ var currentCell = activeCell || editingCell;
6392
+ if (!currentCell) return;
6393
+ var allRows = [].concat(_toConsumableArray$1(paginatedData), _toConsumableArray$1(newRows));
6394
+ if (allRows.length === 0 || visibleColumns.length === 0) return;
6395
+ var rIdx = allRows.findIndex(function (r, idx) {
6396
+ var rKey = r._key || getRowKey(r, startIndex + idx);
6397
+ return rKey === currentCell.rowKey;
6398
+ });
6399
+ var cIdx = visibleColumns.findIndex(function (c) {
6400
+ return c.key === currentCell.colKey;
6401
+ });
6402
+ if (rIdx === -1 || cIdx === -1) return;
6403
+ var nextRIdx = rIdx;
6404
+ var nextCIdx = cIdx;
6405
+ if (key === "Tab") {
6406
+ e.preventDefault();
6407
+ if (shiftKey) {
6408
+ if (cIdx > 0) {
6409
+ nextCIdx = cIdx - 1;
6410
+ } else if (rIdx > 0) {
6411
+ nextRIdx = rIdx - 1;
6412
+ nextCIdx = visibleColumns.length - 1;
6413
+ }
6414
+ } else {
6415
+ if (cIdx < visibleColumns.length - 1) {
6416
+ nextCIdx = cIdx + 1;
6417
+ } else if (rIdx < allRows.length - 1) {
6418
+ nextRIdx = rIdx + 1;
6419
+ nextCIdx = 0;
6420
+ }
6421
+ }
6422
+ } else if (key === "ArrowRight") {
6423
+ var _e$target2, _e$target$value;
6424
+ 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) {
6425
+ return;
6426
+ }
6427
+ if (cIdx < visibleColumns.length - 1) {
6428
+ e.preventDefault();
6429
+ nextCIdx = cIdx + 1;
6430
+ }
6431
+ } else if (key === "ArrowLeft") {
6432
+ var _e$target3;
6433
+ if (editingCell && ((_e$target3 = e.target) === null || _e$target3 === void 0 ? void 0 : _e$target3.selectionStart) !== undefined && e.target.selectionStart > 0) {
6434
+ return;
6435
+ }
6436
+ if (cIdx > 0) {
6437
+ e.preventDefault();
6438
+ nextCIdx = cIdx - 1;
6439
+ }
6440
+ } else if (key === "ArrowDown") {
6441
+ var _e$target4;
6442
+ if (((_e$target4 = e.target) === null || _e$target4 === void 0 ? void 0 : _e$target4.tagName) === "SELECT") return;
6443
+ if (rIdx < allRows.length - 1) {
6444
+ e.preventDefault();
6445
+ nextRIdx = rIdx + 1;
6446
+ }
6447
+ } else if (key === "ArrowUp") {
6448
+ var _e$target5;
6449
+ if (((_e$target5 = e.target) === null || _e$target5 === void 0 ? void 0 : _e$target5.tagName) === "SELECT") return;
6450
+ if (rIdx > 0) {
6451
+ e.preventDefault();
6452
+ nextRIdx = rIdx - 1;
6453
+ }
6454
+ } else {
6455
+ return;
6456
+ }
6457
+ var targetRow = allRows[nextRIdx];
6458
+ var targetCol = visibleColumns[nextCIdx];
6459
+ if (!targetRow || !targetCol) return;
6460
+ var targetRowKey = targetRow._key || getRowKey(targetRow, startIndex + nextRIdx);
6461
+ var nextCellObj = {
6462
+ rowKey: targetRowKey,
6463
+ colKey: targetCol.key,
6464
+ rowIndex: startIndex + nextRIdx
6465
+ };
6466
+ setActiveCell(nextCellObj);
6467
+ if (editingCell && targetCol.editable !== false) {
6468
+ setEditingCell(nextCellObj);
6469
+ }
6470
+ }, [interactive, editingCell, activeCell, isDirty, isValid, isSaving, handleSave, paginatedData, newRows, visibleColumns, startIndex]);
6471
+ var renderInteractiveCellInput = useCallback(function (column, row, globalIndex, rowKey) {
6472
+ var _row$column$key;
6473
+ 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 : "";
6474
+ return jsx(FieldInput, {
6475
+ column: column,
6476
+ value: value,
6477
+ onChange: function onChange(newVal) {
6478
+ return handleCellValueChange(rowKey, column.key, newVal);
6479
+ },
6480
+ onKeyDown: handleTableKeyDown,
6481
+ isEditing: true,
6482
+ row: row,
6483
+ rowIndex: globalIndex,
6484
+ autoFocus: (editingCell === null || editingCell === void 0 ? void 0 : editingCell.rowKey) === rowKey && (editingCell === null || editingCell === void 0 ? void 0 : editingCell.colKey) === column.key
6485
+ });
6486
+ }, [pendingEdits, handleCellValueChange, handleTableKeyDown, editingCell]);
6306
6487
  // Callbacks
6307
6488
  var toggleColumnVisibility = useCallback(function (key) {
6308
6489
  setColumnsState(function (prev) {
@@ -6525,11 +6706,14 @@ var Table = function Table(_ref) {
6525
6706
  onCellClick: handleCellClick,
6526
6707
  onCellDoubleClick: handleCellDoubleClick,
6527
6708
  renderInteractiveCellInput: renderInteractiveCellInput,
6528
- invalidCellSet: invalidCellSet
6709
+ invalidCellSet: invalidCellSet,
6710
+ pendingEdits: pendingEdits
6529
6711
  };
6530
6712
  return jsxs("div", {
6531
6713
  ref: tableContainerRef,
6532
- className: cn$1("w-full border rounded-lg md:rounded-md", className),
6714
+ tabIndex: interactive ? 0 : undefined,
6715
+ onKeyDown: handleTableKeyDown,
6716
+ className: cn$1("w-full border rounded-lg md:rounded-md outline-none focus:ring-1 focus:ring-primary-400", className),
6533
6717
  children: [TheadComponent && typeof TheadComponent === "function" ? jsx(TheadComponent, {
6534
6718
  columns: columnsState,
6535
6719
  data: filteredData
@@ -6576,15 +6760,26 @@ var Table = function Table(_ref) {
6576
6760
  onClick: handleSave,
6577
6761
  disabled: !isValid || isSaving,
6578
6762
  title: !isValid ? "Cannot save: ".concat(((_validationErrors$ = validationErrors[0]) === null || _validationErrors$ === void 0 ? void 0 : _validationErrors$.message) || "Validation failed") : "Save changes",
6579
- 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"),
6763
+ 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"),
6580
6764
  children: [jsx(Save, {
6581
6765
  className: "w-4 h-4"
6582
6766
  }), jsx("span", {
6583
6767
  children: isSaving ? "Saving..." : "Save Changes"
6584
6768
  }), pendingCount > 0 && jsx("span", {
6585
- 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"),
6769
+ 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"),
6586
6770
  children: pendingCount
6587
6771
  })]
6772
+ }), jsxs("button", {
6773
+ type: "button",
6774
+ onClick: handleClearChanges,
6775
+ disabled: isSaving,
6776
+ title: "Discard all pending modifications",
6777
+ 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",
6778
+ children: [jsx(X, {
6779
+ className: "w-4 h-4 text-primary-600"
6780
+ }), jsx("span", {
6781
+ children: "Clear Changes"
6782
+ })]
6588
6783
  }), !isValid && validationErrors.length > 0 && jsxs("div", {
6589
6784
  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",
6590
6785
  children: [jsx(AlertCircle, {
@@ -12637,7 +12832,7 @@ var DatePicker = /*#__PURE__*/React__default.forwardRef(function (_ref, forwarde
12637
12832
  });
12638
12833
  });
12639
12834
 
12640
- var _excluded$v = ["id", "name", "checked", "defaultChecked", "onChange", "disabled", "size", "trackClass", "thumbClass", "className", "topLabel", "bottomLabel", "rightLabel", "leftLabel", "ariaLabel"];
12835
+ var _excluded$v = ["id", "name", "checked", "defaultChecked", "onChange", "disabled", "size", "color", "trackClass", "thumbClass", "className", "topLabel", "bottomLabel", "rightLabel", "leftLabel", "ariaLabel"];
12641
12836
  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; }
12642
12837
  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; }
12643
12838
  /**
@@ -12669,6 +12864,52 @@ var SIZE_MAP$2 = {
12669
12864
  knobTranslate: "translate-x-6"
12670
12865
  }
12671
12866
  };
12867
+ var COLOR_PRESETS$1 = {
12868
+ primary: {
12869
+ bg: "bg-primary-600",
12870
+ ring: "focus-visible:ring-primary-300"
12871
+ },
12872
+ secondary: {
12873
+ bg: "bg-secondary-600",
12874
+ ring: "focus-visible:ring-secondary-300"
12875
+ },
12876
+ success: {
12877
+ bg: "bg-success-600",
12878
+ ring: "focus-visible:ring-success-300"
12879
+ },
12880
+ green: {
12881
+ bg: "bg-success-600",
12882
+ ring: "focus-visible:ring-success-300"
12883
+ },
12884
+ error: {
12885
+ bg: "bg-error-600",
12886
+ ring: "focus-visible:ring-error-300"
12887
+ },
12888
+ danger: {
12889
+ bg: "bg-error-600",
12890
+ ring: "focus-visible:ring-error-300"
12891
+ },
12892
+ red: {
12893
+ bg: "bg-error-600",
12894
+ ring: "focus-visible:ring-error-300"
12895
+ },
12896
+ warning: {
12897
+ bg: "bg-warning-600",
12898
+ ring: "focus-visible:ring-warning-300"
12899
+ },
12900
+ blue: {
12901
+ bg: "bg-blue-600",
12902
+ ring: "focus-visible:ring-blue-300"
12903
+ },
12904
+ indigo: {
12905
+ bg: "bg-indigo-600",
12906
+ ring: "focus-visible:ring-indigo-300"
12907
+ },
12908
+ purple: {
12909
+ bg: "bg-purple-600",
12910
+ ring: "focus-visible:ring-purple-300"
12911
+ }
12912
+ };
12672
12913
  var Switch = /*#__PURE__*/forwardRef(function Switch(props, ref) {
12673
12914
  var id = props.id,
12674
12915
  name = props.name,
@@ -12680,6 +12921,8 @@ var Switch = /*#__PURE__*/forwardRef(function Switch(props, ref) {
12680
12921
  disabled = _props$disabled === void 0 ? false : _props$disabled,
12681
12922
  _props$size = props.size,
12682
12923
  size = _props$size === void 0 ? "md" : _props$size,
12924
+ _props$color = props.color,
12925
+ color = _props$color === void 0 ? "primary" : _props$color,
12683
12926
  trackClass = props.trackClass,
12684
12927
  thumbClass = props.thumbClass,
12685
12928
  _props$className = props.className,
@@ -12715,16 +12958,18 @@ var Switch = /*#__PURE__*/forwardRef(function Switch(props, ref) {
12715
12958
  }
12716
12959
  };
12717
12960
  var sizeStuff = SIZE_MAP$2[size] || SIZE_MAP$2.md;
12961
+ var isPreset = COLOR_PRESETS$1[color];
12718
12962
  // Classes for the track (we use inline style for arbitrary trackClass when ON)
12719
- 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
12963
+ 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
12720
12964
  );
12721
12965
  // Knob classes (thumb)
12722
12966
  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
12723
12967
  );
12724
12968
  var knobTransform = isOn ? sizeStuff.knobTranslate : "translate-x-1";
12725
- var focusClasses = disabled ? "" : "focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-sky-300";
12726
- var trackStyle = isOn && !trackClass ? {
12727
- backgroundColor: "rgb(14, 165, 233)"
12969
+ var ringClass = isPreset ? isPreset.ring : "focus-visible:ring-primary-300";
12970
+ var focusClasses = disabled ? "" : "focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 ".concat(ringClass);
12971
+ var trackStyle = isOn && !trackClass && !isPreset ? {
12972
+ backgroundColor: color
12728
12973
  } : undefined; // Fallback to default trackClass if trackClass is not a class
12729
12974
  var accessibleLabel = ariaLabel || rightLabel || leftLabel || topLabel || bottomLabel || "Toggle";
12730
12975
  var containerIsColumn = Boolean(topLabel || bottomLabel);
@@ -13439,7 +13684,7 @@ var Accordion = /*#__PURE__*/forwardRef(function Accordion(_ref, ref) {
13439
13684
  });
13440
13685
  Accordion.displayName = "Accordion";
13441
13686
 
13442
- var _excluded$s = ["id", "name", "label", "checked", "defaultChecked", "onChange", "disabled", "required", "className", "size", "labelPosition", "value", "ariaLabel", "variant", "indeterminate", "borderColor", "iconClass", "checkedClass"];
13687
+ var _excluded$s = ["id", "name", "label", "checked", "defaultChecked", "onChange", "disabled", "required", "className", "size", "labelPosition", "value", "ariaLabel", "variant", "indeterminate", "borderColor", "color", "iconClass", "checkedClass"];
13443
13688
  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; }
13444
13689
  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; }
13445
13690
  var SIZE_CLASSES = {
@@ -13459,6 +13704,52 @@ var SIZE_CLASSES = {
13459
13704
  icon: "w-4 h-4"
13460
13705
  }
13461
13706
  };
13707
+ var COLOR_PRESETS = {
13708
+ primary: {
13709
+ checked: "peer-checked:bg-primary-600 peer-checked:border-primary-600 peer-checked:text-white",
13710
+ ring: "peer-focus:ring-primary-300"
13711
+ },
13712
+ secondary: {
13713
+ checked: "peer-checked:bg-secondary-600 peer-checked:border-secondary-600 peer-checked:text-white",
13714
+ ring: "peer-focus:ring-secondary-300"
13715
+ },
13716
+ success: {
13717
+ checked: "peer-checked:bg-success-600 peer-checked:border-success-600 peer-checked:text-white",
13718
+ ring: "peer-focus:ring-success-300"
13719
+ },
13720
+ green: {
13721
+ checked: "peer-checked:bg-success-600 peer-checked:border-success-600 peer-checked:text-white",
13722
+ ring: "peer-focus:ring-success-300"
13723
+ },
13724
+ error: {
13725
+ checked: "peer-checked:bg-error-600 peer-checked:border-error-600 peer-checked:text-white",
13726
+ ring: "peer-focus:ring-error-300"
13727
+ },
13728
+ danger: {
13729
+ checked: "peer-checked:bg-error-600 peer-checked:border-error-600 peer-checked:text-white",
13730
+ ring: "peer-focus:ring-error-300"
13731
+ },
13732
+ red: {
13733
+ checked: "peer-checked:bg-error-600 peer-checked:border-error-600 peer-checked:text-white",
13734
+ ring: "peer-focus:ring-error-300"
13735
+ },
13736
+ warning: {
13737
+ checked: "peer-checked:bg-warning-600 peer-checked:border-warning-600 peer-checked:text-white",
13738
+ ring: "peer-focus:ring-warning-300"
13739
+ },
13740
+ blue: {
13741
+ checked: "peer-checked:bg-blue-600 peer-checked:border-blue-600 peer-checked:text-white",
13742
+ ring: "peer-focus:ring-blue-300"
13743
+ },
13744
+ indigo: {
13745
+ checked: "peer-checked:bg-indigo-600 peer-checked:border-indigo-600 peer-checked:text-white",
13746
+ ring: "peer-focus:ring-indigo-300"
13747
+ },
13748
+ purple: {
13749
+ checked: "peer-checked:bg-purple-600 peer-checked:border-purple-600 peer-checked:text-white",
13750
+ ring: "peer-focus:ring-purple-300"
13751
+ }
13752
+ };
13462
13753
  var Checkbox = /*#__PURE__*/forwardRef(function (_ref, ref) {
13463
13754
  var _props$wrapperProps;
13464
13755
  var id = _ref.id,
@@ -13484,6 +13775,8 @@ var Checkbox = /*#__PURE__*/forwardRef(function (_ref, ref) {
13484
13775
  indeterminate = _ref$indeterminate === void 0 ? false : _ref$indeterminate,
13485
13776
  _ref$borderColor = _ref.borderColor,
13486
13777
  borderColor = _ref$borderColor === void 0 ? "#ccc" : _ref$borderColor,
13778
+ _ref$color = _ref.color,
13779
+ color = _ref$color === void 0 ? "primary" : _ref$color,
13487
13780
  iconClass = _ref.iconClass,
13488
13781
  checkedClass = _ref.checkedClass,
13489
13782
  props = _objectWithoutProperties$1(_ref, _excluded$s);
@@ -13517,6 +13810,13 @@ var Checkbox = /*#__PURE__*/forwardRef(function (_ref, ref) {
13517
13810
  var iconBase = "pointer-events-none transform transition-all duration-150 ease-out";
13518
13811
  var iconShown = "opacity-100 scale-100";
13519
13812
  var iconHidden = "opacity-0 scale-75";
13813
+ var isPreset = COLOR_PRESETS[color];
13814
+ 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";
13815
+ var customColorStyle = currentChecked && !isPreset && !checkedClass ? {
13816
+ backgroundColor: color,
13817
+ borderColor: color,
13818
+ color: "#ffffff"
13819
+ } : {};
13520
13820
  return jsxs("div", _objectSpread$w(_objectSpread$w({
13521
13821
  className: wrapperCls
13522
13822
  }, (_props$wrapperProps = props === null || props === void 0 ? void 0 : props.wrapperProps) !== null && _props$wrapperProps !== void 0 ? _props$wrapperProps : {}), {}, {
@@ -13527,7 +13827,7 @@ var Checkbox = /*#__PURE__*/forwardRef(function (_ref, ref) {
13527
13827
  }), jsxs("div", {
13528
13828
  className: boxOuterCls,
13529
13829
  style: disabled ? {} : {
13530
- borderColor: borderColor
13830
+ borderColor: currentChecked && (isPreset || customColorStyle.borderColor) ? undefined : borderColor
13531
13831
  },
13532
13832
  "aria-disabled": disabled,
13533
13833
  children: [jsx("input", _objectSpread$w({
@@ -13546,11 +13846,11 @@ var Checkbox = /*#__PURE__*/forwardRef(function (_ref, ref) {
13546
13846
  "aria-label": ariaLabel,
13547
13847
  "aria-checked": Boolean(currentChecked)
13548
13848
  }, props)), jsx("div", {
13549
- 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 : ""),
13849
+ 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 : ""),
13550
13850
  style: currentChecked && checkedClass ? {
13551
13851
  backgroundColor: "",
13552
13852
  borderColor: ""
13553
- } : {},
13853
+ } : customColorStyle,
13554
13854
  "aria-hidden": "true",
13555
13855
  children: jsx(Check, {
13556
13856
  className: "".concat(sizeClass.icon, " ").concat(iconBase, " ").concat(currentChecked ? iconShown : iconHidden, " ").concat(iconClass || ""),
@@ -18927,13 +19227,57 @@ Dialog.Footer = function (_ref6) {
18927
19227
  }));
18928
19228
  };
18929
19229
 
18930
- var _excluded$7 = ["id", "title", "message", "type", "duration", "onClose", "position"];
19230
+ var _excluded$7 = ["id", "title", "message", "description", "type", "duration", "onClose", "position", "statusIcon", "actions", "color", "footerNote", "showFooterNote", "portal", "className"];
18931
19231
  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; }
18932
19232
  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; }
18933
- var Toast = /*#__PURE__*/React__default.forwardRef(function (_ref, ref) {
19233
+ var STATUS_CONFIG = {
19234
+ success: {
19235
+ icon: CheckCircle2,
19236
+ iconClass: 'text-emerald-500 dark:text-emerald-400',
19237
+ progressClass: 'bg-emerald-500 dark:bg-emerald-400'
19238
+ },
19239
+ error: {
19240
+ icon: XCircle,
19241
+ iconClass: 'text-rose-500 dark:text-rose-400',
19242
+ progressClass: 'bg-rose-500 dark:bg-rose-400'
19243
+ },
19244
+ warning: {
19245
+ icon: AlertTriangle,
19246
+ iconClass: 'text-amber-500 dark:text-amber-400',
19247
+ progressClass: 'bg-amber-500 dark:bg-amber-400'
19248
+ },
19249
+ info: {
19250
+ icon: Info,
19251
+ iconClass: 'text-sky-500 dark:text-sky-400',
19252
+ progressClass: 'bg-sky-500 dark:bg-sky-400'
19253
+ },
19254
+ "default": {
19255
+ icon: Bell,
19256
+ iconClass: 'text-primary-500 dark:text-primary-400',
19257
+ progressClass: 'bg-primary-500 dark:bg-primary-400'
19258
+ }
19259
+ };
19260
+ var POSITION_CLASSES = {
19261
+ 'top-right': 'top-4 right-4 items-end',
19262
+ 'top-left': 'top-4 left-4 items-start',
19263
+ 'bottom-right': 'bottom-4 right-4 items-end',
19264
+ 'bottom-left': 'bottom-4 left-4 items-start',
19265
+ 'top-center': 'top-4 left-1/2 transform -translate-x-1/2 items-center',
19266
+ 'bottom-center': 'bottom-4 left-1/2 transform -translate-x-1/2 items-center'
19267
+ };
19268
+ var STANDALONE_POSITION_CLASSES = {
19269
+ 'top-right': 'top-4 right-4',
19270
+ 'top-left': 'top-4 left-4',
19271
+ 'bottom-right': 'bottom-4 right-4',
19272
+ 'bottom-left': 'bottom-4 left-4',
19273
+ 'top-center': 'top-4 left-1/2 transform -translate-x-1/2',
19274
+ 'bottom-center': 'bottom-4 left-1/2 transform -translate-x-1/2'
19275
+ };
19276
+ var Toast = /*#__PURE__*/forwardRef(function (_ref, ref) {
18934
19277
  var id = _ref.id,
18935
19278
  title = _ref.title,
18936
19279
  message = _ref.message,
19280
+ description = _ref.description,
18937
19281
  _ref$type = _ref.type,
18938
19282
  type = _ref$type === void 0 ? 'info' : _ref$type,
18939
19283
  _ref$duration = _ref.duration,
@@ -18941,153 +19285,277 @@ var Toast = /*#__PURE__*/React__default.forwardRef(function (_ref, ref) {
18941
19285
  onClose = _ref.onClose,
18942
19286
  _ref$position = _ref.position,
18943
19287
  position = _ref$position === void 0 ? 'top-right' : _ref$position,
19288
+ statusIcon = _ref.statusIcon,
19289
+ _ref$actions = _ref.actions,
19290
+ actions = _ref$actions === void 0 ? [] : _ref$actions,
19291
+ color = _ref.color,
19292
+ footerNote = _ref.footerNote,
19293
+ _ref$showFooterNote = _ref.showFooterNote,
19294
+ showFooterNote = _ref$showFooterNote === void 0 ? false : _ref$showFooterNote,
19295
+ _ref$portal = _ref.portal,
19296
+ portal = _ref$portal === void 0 ? true : _ref$portal,
19297
+ _ref$className = _ref.className,
19298
+ className = _ref$className === void 0 ? '' : _ref$className,
18944
19299
  props = _objectWithoutProperties$1(_ref, _excluded$7);
18945
19300
  var _useState = useState(true),
18946
19301
  _useState2 = _slicedToArray(_useState, 2),
18947
19302
  isVisible = _useState2[0],
18948
19303
  setIsVisible = _useState2[1];
18949
- useEffect(function () {
18950
- if (duration > 0) {
18951
- var timer = setTimeout(function () {
18952
- handleClose();
18953
- }, duration);
18954
- return function () {
18955
- return clearTimeout(timer);
18956
- };
18957
- }
18958
- }, [duration]);
18959
- var handleClose = function handleClose() {
18960
- setIsVisible(false);
19304
+ var _useState3 = useState(false),
19305
+ _useState4 = _slicedToArray(_useState3, 2),
19306
+ isLeaving = _useState4[0],
19307
+ setIsLeaving = _useState4[1];
19308
+ var _useState5 = useState(false),
19309
+ _useState6 = _slicedToArray(_useState5, 2),
19310
+ isPaused = _useState6[0],
19311
+ setIsPaused = _useState6[1];
19312
+ var progressBarRef = useRef(null);
19313
+ var timerTextRef = useRef(null);
19314
+ var startTimeRef = useRef(null);
19315
+ var remainingRef = useRef(duration);
19316
+ var timerRef = useRef(null);
19317
+ var animFrameRef = useRef(null);
19318
+ var handleClose = useCallback(function () {
19319
+ if (isLeaving) return;
19320
+ setIsLeaving(true);
18961
19321
  setTimeout(function () {
19322
+ setIsVisible(false);
18962
19323
  onClose === null || onClose === void 0 || onClose(id);
18963
19324
  }, 300);
18964
- };
18965
- var icons = {
18966
- success: jsx(CheckCircle, {
18967
- className: "h-5 w-5 text-success-500"
18968
- }),
18969
- error: jsx(AlertCircle, {
18970
- className: "h-5 w-5 text-error-500"
18971
- }),
18972
- warning: jsx(AlertTriangle, {
18973
- className: "h-5 w-5 text-warning-500"
18974
- }),
18975
- info: jsx(Info, {
18976
- className: "h-5 w-5 text-primary-500"
18977
- })
18978
- };
18979
- var positionClasses = {
18980
- 'top-right': 'top-4 right-4',
18981
- 'top-left': 'top-4 left-4',
18982
- 'bottom-right': 'bottom-4 right-4',
18983
- 'bottom-left': 'bottom-4 left-4',
18984
- 'top-center': 'top-4 left-1/2 transform -translate-x-1/2',
18985
- 'bottom-center': 'bottom-4 left-1/2 transform -translate-x-1/2'
18986
- };
19325
+ }, [id, onClose, isLeaving]);
19326
+ var handleStopTimer = useCallback(function (e) {
19327
+ e === null || e === void 0 || e.stopPropagation();
19328
+ setIsPaused(true);
19329
+ if (timerRef.current) clearTimeout(timerRef.current);
19330
+ if (animFrameRef.current) cancelAnimationFrame(animFrameRef.current);
19331
+ }, []);
19332
+ // Direct DOM-based progress updates to prevent 60 FPS React re-renders and glitches
19333
+ useEffect(function () {
19334
+ if (duration <= 0) return;
19335
+ if (isPaused) {
19336
+ if (timerRef.current) clearTimeout(timerRef.current);
19337
+ if (animFrameRef.current) cancelAnimationFrame(animFrameRef.current);
19338
+ return;
19339
+ }
19340
+ startTimeRef.current = Date.now();
19341
+ timerRef.current = setTimeout(function () {
19342
+ handleClose();
19343
+ }, remainingRef.current);
19344
+ var _updateProgress = function updateProgress() {
19345
+ var elapsed = startTimeRef.current ? Date.now() - startTimeRef.current : 0;
19346
+ var currentRemaining = Math.max(0, remainingRef.current - elapsed);
19347
+ var pct = currentRemaining / duration * 100;
19348
+ if (progressBarRef.current) {
19349
+ progressBarRef.current.style.width = "".concat(pct, "%");
19350
+ }
19351
+ if (timerTextRef.current) {
19352
+ var secs = Math.ceil(currentRemaining / 1000);
19353
+ timerTextRef.current.textContent = "This message will close in ".concat(secs, " seconds. ");
19354
+ }
19355
+ if (currentRemaining > 0 && !isPaused) {
19356
+ animFrameRef.current = requestAnimationFrame(_updateProgress);
19357
+ }
19358
+ };
19359
+ animFrameRef.current = requestAnimationFrame(_updateProgress);
19360
+ return function () {
19361
+ if (timerRef.current) clearTimeout(timerRef.current);
19362
+ if (animFrameRef.current) cancelAnimationFrame(animFrameRef.current);
19363
+ if (!isPaused && startTimeRef.current) {
19364
+ var elapsed = Date.now() - startTimeRef.current;
19365
+ remainingRef.current = Math.max(0, remainingRef.current - elapsed);
19366
+ }
19367
+ };
19368
+ }, [duration, isPaused, handleClose]);
18987
19369
  if (!isVisible) return null;
18988
- return /*#__PURE__*/createPortal(jsx("div", _objectSpread$b(_objectSpread$b({
19370
+ var statusStyle = STATUS_CONFIG[type] || STATUS_CONFIG.info || STATUS_CONFIG["default"];
19371
+ var StatusIconComponent = statusStyle.icon;
19372
+ var bodyText = description || message;
19373
+ var toastContent = jsxs("div", _objectSpread$b(_objectSpread$b({
18989
19374
  ref: ref,
18990
- 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])
19375
+ onMouseEnter: function onMouseEnter() {
19376
+ return setIsPaused(true);
19377
+ },
19378
+ onMouseLeave: function onMouseLeave() {
19379
+ return setIsPaused(false);
19380
+ },
19381
+ 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)
18991
19382
  }, props), {}, {
18992
- children: jsxs("div", {
18993
- className: "flex items-start",
18994
- children: [jsx("div", {
18995
- className: "flex-shrink-0",
18996
- children: icons[type]
18997
- }), jsxs("div", {
18998
- className: "ml-3 flex-1",
18999
- children: [title && jsx("h4", {
19000
- className: "text-sm font-medium text-primary-900",
19001
- children: title
19002
- }), message && jsx("p", {
19003
- className: "mt-1 text-sm text-primary-600",
19004
- children: message
19383
+ children: [jsx("div", {
19384
+ className: "p-4",
19385
+ children: jsxs("div", {
19386
+ className: "flex items-start gap-3 justify-between",
19387
+ children: [jsx("span", {
19388
+ className: "flex-shrink-0 mt-0.5",
19389
+ children: statusIcon ? statusIcon : jsx(StatusIconComponent, {
19390
+ className: cn$1('h-5 w-5', statusStyle.iconClass)
19391
+ })
19392
+ }), jsxs("div", {
19393
+ className: "flex-1 min-w-0 pr-2",
19394
+ children: [title && jsx("h4", {
19395
+ className: "text-sm font-semibold text-slate-900 dark:text-slate-100 leading-snug",
19396
+ children: title
19397
+ }), bodyText && jsx("p", {
19398
+ className: "mt-1 text-xs text-slate-600 dark:text-slate-400 leading-relaxed whitespace-pre-line",
19399
+ children: bodyText
19400
+ }), actions && actions.length > 0 && jsx("div", {
19401
+ className: "mt-3 flex items-center gap-2 flex-wrap",
19402
+ children: actions.map(function (actItem, idx) {
19403
+ return jsx("button", {
19404
+ type: "button",
19405
+ onClick: function onClick(e) {
19406
+ var _actItem$onClick;
19407
+ (_actItem$onClick = actItem.onClick) === null || _actItem$onClick === void 0 || _actItem$onClick.call(actItem, e);
19408
+ if (actItem.dismiss !== false) {
19409
+ handleClose();
19410
+ }
19411
+ },
19412
+ 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),
19413
+ children: actItem.label
19414
+ }, actItem.id || actItem.label || "act-".concat(idx));
19415
+ })
19416
+ })]
19417
+ }), jsx("button", {
19418
+ type: "button",
19419
+ "aria-label": "Close notification",
19420
+ 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",
19421
+ onClick: handleClose,
19422
+ children: jsx(X, {
19423
+ className: "h-4 w-4"
19424
+ })
19005
19425
  })]
19006
- }), jsx("button", {
19007
- type: "button",
19008
- className: "ml-4 flex-shrink-0 rounded-md p-1 text-primary-400 hover:text-primary-600 hover:bg-gray-100",
19009
- onClick: handleClose,
19010
- children: jsx(X, {
19011
- className: "h-4 w-4"
19426
+ })
19427
+ }), (showFooterNote || footerNote) && duration > 0 && jsx("div", {
19428
+ 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",
19429
+ children: jsx("span", {
19430
+ children: footerNote ? footerNote : jsxs(Fragment, {
19431
+ children: [jsxs("span", {
19432
+ ref: timerTextRef,
19433
+ children: ["This message will close in ", Math.ceil(duration / 1000), " seconds.", ' ']
19434
+ }), jsx("button", {
19435
+ type: "button",
19436
+ onClick: handleStopTimer,
19437
+ className: "font-medium text-slate-700 dark:text-zinc-200 hover:underline inline",
19438
+ children: "Click to stop."
19439
+ })]
19012
19440
  })
19013
- })]
19014
- })
19015
- })), document.body);
19441
+ })
19442
+ }), duration > 0 && jsx("div", {
19443
+ className: "absolute bottom-0 left-0 right-0 h-0.5 bg-slate-100 dark:bg-zinc-800/80 overflow-hidden rounded-b-xl",
19444
+ children: jsx("div", {
19445
+ ref: progressBarRef,
19446
+ className: cn$1('h-full transition-all ease-linear', color ? '' : statusStyle.progressClass),
19447
+ style: {
19448
+ width: '100%',
19449
+ backgroundColor: color || undefined
19450
+ }
19451
+ })
19452
+ })]
19453
+ }));
19454
+ if (portal) {
19455
+ return /*#__PURE__*/createPortal(toastContent, document.body);
19456
+ }
19457
+ return toastContent;
19016
19458
  });
19017
19459
  Toast.displayName = 'Toast';
19018
- // Toast Container Component
19460
+ // Toast Container Component for vertical stacking & scrollable overflow without visible scrollbars
19019
19461
  var ToastContainer = function ToastContainer(_ref2) {
19020
19462
  var _ref2$toasts = _ref2.toasts,
19021
19463
  toasts = _ref2$toasts === void 0 ? [] : _ref2$toasts,
19022
19464
  _ref2$position = _ref2.position,
19023
19465
  position = _ref2$position === void 0 ? 'top-right' : _ref2$position,
19024
- onRemove = _ref2.onRemove;
19025
- return jsx("div", {
19026
- className: "fixed z-50 space-y-2",
19027
- 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'),
19028
- children: toasts.map(function (toast) {
19029
- return jsx(Toast, _objectSpread$b(_objectSpread$b({}, toast), {}, {
19030
- position: position,
19031
- onClose: onRemove
19032
- }), toast.id);
19466
+ onRemove = _ref2.onRemove,
19467
+ _ref2$className = _ref2.className,
19468
+ className = _ref2$className === void 0 ? '' : _ref2$className;
19469
+ if (!toasts || toasts.length === 0) {
19470
+ return null;
19471
+ }
19472
+ var posClass = POSITION_CLASSES[position] || POSITION_CLASSES['top-right'];
19473
+ return /*#__PURE__*/createPortal(jsx("div", {
19474
+ 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),
19475
+ children: toasts.map(function (t) {
19476
+ return jsx("div", {
19477
+ className: "pointer-events-auto w-full max-w-md",
19478
+ children: jsx(Toast, _objectSpread$b(_objectSpread$b({}, t), {}, {
19479
+ portal: false,
19480
+ position: position,
19481
+ onClose: onRemove
19482
+ }))
19483
+ }, t.id);
19033
19484
  })
19034
- });
19485
+ }), document.body);
19035
19486
  };
19036
19487
  // Toast Hook
19037
19488
  var useToast = function useToast() {
19038
- var _useState3 = useState([]),
19039
- _useState4 = _slicedToArray(_useState3, 2),
19040
- toasts = _useState4[0],
19041
- setToasts = _useState4[1];
19042
- var addToast = function addToast(toast) {
19043
- var id = Date.now().toString();
19489
+ var _useState7 = useState([]),
19490
+ _useState8 = _slicedToArray(_useState7, 2),
19491
+ toasts = _useState8[0],
19492
+ setToasts = _useState8[1];
19493
+ var addToast = useCallback(function (toastOptions) {
19494
+ var id = toastOptions.id || "".concat(Date.now(), "-").concat(Math.random().toString(36).slice(2, 7));
19495
+ var newToast = _objectSpread$b(_objectSpread$b({}, toastOptions), {}, {
19496
+ id: id
19497
+ });
19044
19498
  setToasts(function (prev) {
19045
- return [].concat(_toConsumableArray$1(prev), [_objectSpread$b(_objectSpread$b({}, toast), {}, {
19046
- id: id
19047
- })]);
19499
+ return [].concat(_toConsumableArray$1(prev), [newToast]);
19048
19500
  });
19049
- };
19050
- var removeToast = function removeToast(id) {
19501
+ return id;
19502
+ }, []);
19503
+ var removeToast = useCallback(function (id) {
19051
19504
  setToasts(function (prev) {
19052
- return prev.filter(function (toast) {
19053
- return toast.id !== id;
19505
+ return prev.filter(function (t) {
19506
+ return t.id !== id;
19054
19507
  });
19055
19508
  });
19509
+ }, []);
19510
+ var clearToasts = useCallback(function () {
19511
+ setToasts([]);
19512
+ }, []);
19513
+ var toast = useCallback(function (options) {
19514
+ return addToast(typeof options === 'string' ? {
19515
+ message: options
19516
+ } : options);
19517
+ }, [addToast]);
19518
+ toast.success = function (title, message, options) {
19519
+ return addToast(_objectSpread$b({
19520
+ title: title,
19521
+ message: message,
19522
+ type: 'success'
19523
+ }, _typeof$4(options) === 'object' ? options : {}));
19056
19524
  };
19057
- var toast = {
19058
- success: function success(title, message, options) {
19059
- return addToast(_objectSpread$b({
19060
- title: title,
19061
- message: message,
19062
- type: 'success'
19063
- }, options));
19064
- },
19065
- error: function error(title, message, options) {
19066
- return addToast(_objectSpread$b({
19067
- title: title,
19068
- message: message,
19069
- type: 'error'
19070
- }, options));
19071
- },
19072
- warning: function warning(title, message, options) {
19073
- return addToast(_objectSpread$b({
19074
- title: title,
19075
- message: message,
19076
- type: 'warning'
19077
- }, options));
19078
- },
19079
- info: function info(title, message, options) {
19080
- return addToast(_objectSpread$b({
19081
- title: title,
19082
- message: message,
19083
- type: 'info'
19084
- }, options));
19085
- }
19525
+ toast.error = function (title, message, options) {
19526
+ return addToast(_objectSpread$b({
19527
+ title: title,
19528
+ message: message,
19529
+ type: 'error'
19530
+ }, _typeof$4(options) === 'object' ? options : {}));
19531
+ };
19532
+ toast.warning = function (title, message, options) {
19533
+ return addToast(_objectSpread$b({
19534
+ title: title,
19535
+ message: message,
19536
+ type: 'warning'
19537
+ }, _typeof$4(options) === 'object' ? options : {}));
19538
+ };
19539
+ toast.info = function (title, message, options) {
19540
+ return addToast(_objectSpread$b({
19541
+ title: title,
19542
+ message: message,
19543
+ type: 'info'
19544
+ }, _typeof$4(options) === 'object' ? options : {}));
19545
+ };
19546
+ toast["default"] = function (title, message, options) {
19547
+ return addToast(_objectSpread$b({
19548
+ title: title,
19549
+ message: message,
19550
+ type: 'default'
19551
+ }, _typeof$4(options) === 'object' ? options : {}));
19086
19552
  };
19087
19553
  return {
19088
19554
  toast: toast,
19089
19555
  toasts: toasts,
19090
- removeToast: removeToast
19556
+ removeToast: removeToast,
19557
+ clearToasts: clearToasts,
19558
+ addToast: addToast
19091
19559
  };
19092
19560
  };
19093
19561