@dreamtree-org/twreact-ui 1.1.70 → 1.1.72

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
@@ -3191,8 +3191,8 @@ function cn$1() {
3191
3191
  }
3192
3192
 
3193
3193
  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; }
3194
+ 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; }
3195
+ 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
3196
  var Input = /*#__PURE__*/React.forwardRef(function (props, forwardedRef) {
3197
3197
  var _ref$current$value2, _ref$current;
3198
3198
  var id = props.id,
@@ -3307,7 +3307,7 @@ var Input = /*#__PURE__*/React.forwardRef(function (props, forwardedRef) {
3307
3307
  className: "text-primary-400",
3308
3308
  children: icon
3309
3309
  })
3310
- }), jsxRuntime.jsx("input", _objectSpread$F({
3310
+ }), jsxRuntime.jsx("input", _objectSpread$G({
3311
3311
  id: inputId,
3312
3312
  ref: ref,
3313
3313
  type: inputType,
@@ -3368,8 +3368,8 @@ var Input = /*#__PURE__*/React.forwardRef(function (props, forwardedRef) {
3368
3368
  });
3369
3369
 
3370
3370
  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; }
3371
+ 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; }
3372
+ 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
3373
  var Button = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
3374
3374
  var className = _ref.className,
3375
3375
  _ref$variant = _ref.variant,
@@ -3399,7 +3399,7 @@ var Button = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
3399
3399
  // Full width
3400
3400
  'w-full': fullWidth
3401
3401
  }, className);
3402
- return jsxRuntime.jsxs("button", _objectSpread$E(_objectSpread$E({
3402
+ return jsxRuntime.jsxs("button", _objectSpread$F(_objectSpread$F({
3403
3403
  ref: ref,
3404
3404
  className: baseClasses,
3405
3405
  disabled: disabled || loading
@@ -3434,8 +3434,8 @@ function _toConsumableArray$1(r) {
3434
3434
  }
3435
3435
 
3436
3436
  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; }
3437
+ 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; }
3438
+ 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
3439
  /**
3440
3440
  * Enhanced Select component (debounce removed)
3441
3441
  * - Supports single and multi select
@@ -3456,7 +3456,7 @@ var flattenGroups = function flattenGroups() {
3456
3456
  return groups.reduce(function (acc, g) {
3457
3457
  var groupLabel = g.label;
3458
3458
  g.options.forEach(function (opt) {
3459
- return acc.push(_objectSpread$D(_objectSpread$D({}, opt), {}, {
3459
+ return acc.push(_objectSpread$E(_objectSpread$E({}, opt), {}, {
3460
3460
  _group: groupLabel
3461
3461
  }));
3462
3462
  });
@@ -3552,7 +3552,7 @@ var Select = /*#__PURE__*/React.forwardRef(function (_ref, forwardedRef) {
3552
3552
  var flatOptions = React.useMemo(function () {
3553
3553
  if (grouped) return flattenGroups(options);
3554
3554
  return options.map(function (opt) {
3555
- return _objectSpread$D({}, opt);
3555
+ return _objectSpread$E({}, opt);
3556
3556
  });
3557
3557
  }, [options, grouped]);
3558
3558
  var selectedValues = multiSelect ? Array.isArray(value) ? value : [] : value;
@@ -3577,7 +3577,7 @@ var Select = /*#__PURE__*/React.forwardRef(function (_ref, forwardedRef) {
3577
3577
  }
3578
3578
  if (grouped) {
3579
3579
  return options.map(function (g) {
3580
- return _objectSpread$D(_objectSpread$D({}, g), {}, {
3580
+ return _objectSpread$E(_objectSpread$E({}, g), {}, {
3581
3581
  options: g.options.filter(function (o) {
3582
3582
  return o.label.toLowerCase().includes(searchTerm.toLowerCase());
3583
3583
  })
@@ -3847,7 +3847,7 @@ var Select = /*#__PURE__*/React.forwardRef(function (_ref, forwardedRef) {
3847
3847
  className: "text-xs border border-slate-200 p-0.5 rounded-md cursor-pointer hover:bg-gray-100",
3848
3848
  onClick: function onClick() {
3849
3849
  return setCollapsedGroups(function (prev) {
3850
- return _objectSpread$D(_objectSpread$D({}, prev), {}, _defineProperty$4({}, group.label, !prev[group.label]));
3850
+ return _objectSpread$E(_objectSpread$E({}, prev), {}, _defineProperty$4({}, group.label, !prev[group.label]));
3851
3851
  });
3852
3852
  },
3853
3853
  children: jsxRuntime.jsx(ChevronDown, {
@@ -3941,7 +3941,7 @@ var Select = /*#__PURE__*/React.forwardRef(function (_ref, forwardedRef) {
3941
3941
  }), jsxRuntime.jsxs("div", {
3942
3942
  ref: selectRef,
3943
3943
  className: "relative",
3944
- children: [jsxRuntime.jsxs("button", _objectSpread$D(_objectSpread$D({
3944
+ children: [jsxRuntime.jsxs("button", _objectSpread$E(_objectSpread$E({
3945
3945
  type: "button",
3946
3946
  "aria-haspopup": "listbox",
3947
3947
  "aria-expanded": isOpen,
@@ -4008,7 +4008,7 @@ var Select = /*#__PURE__*/React.forwardRef(function (_ref, forwardedRef) {
4008
4008
  // escapes any ancestor overflow:hidden|auto|scroll. Coordinates
4009
4009
  // are anchored to the trigger's viewport rect; width matches the
4010
4010
  // trigger; maxHeight is driven by available space.
4011
- style: _objectSpread$D({
4011
+ style: _objectSpread$E({
4012
4012
  left: menuCoords ? "".concat(menuCoords.left, "px") : undefined,
4013
4013
  top: menuCoords ? "".concat(menuCoords.top, "px") : undefined,
4014
4014
  width: menuCoords ? "".concat(menuCoords.width, "px") : undefined
@@ -4490,8 +4490,8 @@ var DEFAULT_ACTIONS = [{
4490
4490
  })
4491
4491
  }];
4492
4492
 
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; }
4493
+ 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; }
4494
+ 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
4495
  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
4496
  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
4497
  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 +4555,7 @@ var mergeDefaultActions = function mergeDefaultActions(overrides, defaults) {
4555
4555
  _iterator.f();
4556
4556
  }
4557
4557
  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;
4558
+ return d !== null && d !== void 0 && d.name && byName.has(d.name) ? _objectSpread$D(_objectSpread$D({}, d), byName.get(d.name)) : d;
4559
4559
  });
4560
4560
  var defaultNames = new Set(defaults.map(function (d) {
4561
4561
  return d === null || d === void 0 ? void 0 : d.name;
@@ -4597,7 +4597,7 @@ var resolveActions = function resolveActions(actions, row, index) {
4597
4597
  var action = _step2.value;
4598
4598
  if (!action || _typeof$4(action) !== "object") continue;
4599
4599
  if (callIfFn(action.hidden, row, index)) continue;
4600
- var resolved = _objectSpread$C(_objectSpread$C({}, action), {}, {
4600
+ var resolved = _objectSpread$D(_objectSpread$D({}, action), {}, {
4601
4601
  label: callIfFn(action.label, row, index),
4602
4602
  icon: callIfFn(action.icon, row, index),
4603
4603
  disabled: !!callIfFn(action.disabled, row, index),
@@ -5134,6 +5134,8 @@ function ActionMenu(_ref) {
5134
5134
  }), document.body);
5135
5135
  }
5136
5136
 
5137
+ 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; }
5138
+ 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
5139
  /**
5138
5140
  * Desktop table row component
5139
5141
  */
@@ -5182,6 +5184,8 @@ function TableRow(_ref) {
5182
5184
  renderInteractiveCellInput = _ref$renderInteractiv === void 0 ? null : _ref$renderInteractiv,
5183
5185
  _ref$invalidCellSet = _ref.invalidCellSet,
5184
5186
  invalidCellSet = _ref$invalidCellSet === void 0 ? null : _ref$invalidCellSet,
5187
+ _ref$pendingEdits = _ref.pendingEdits,
5188
+ pendingEdits = _ref$pendingEdits === void 0 ? null : _ref$pendingEdits,
5185
5189
  _ref$isNewRow = _ref.isNewRow,
5186
5190
  isNewRow = _ref$isNewRow === void 0 ? false : _ref$isNewRow,
5187
5191
  _ref$onDeleteNewRow = _ref.onDeleteNewRow,
@@ -5209,6 +5213,10 @@ function TableRow(_ref) {
5209
5213
  var stripeBg = stripedRows && !isSelected && Array.isArray(stripeColors) && stripeColors.length > 0 ? stripeColors[globalIndex % stripeColors.length] : undefined;
5210
5214
  var rowKey = isNewRow ? row._key : key;
5211
5215
  var isRowActive = interactive && (activeCell === null || activeCell === void 0 ? void 0 : activeCell.rowKey) === rowKey;
5216
+ var effectiveRow = React.useMemo(function () {
5217
+ if (!interactive || !pendingEdits || !pendingEdits[rowKey]) return row;
5218
+ return _objectSpread$C(_objectSpread$C({}, row), pendingEdits[rowKey]);
5219
+ }, [interactive, pendingEdits, rowKey, row]);
5212
5220
  return jsxRuntime.jsxs(React.Fragment, {
5213
5221
  children: [jsxRuntime.jsxs("tr", {
5214
5222
  style: stripeBg ? {
@@ -5221,7 +5229,7 @@ function TableRow(_ref) {
5221
5229
  "bg-amber-50/40": isNewRow && !isSelected && !isRowActive
5222
5230
  }, safeExtraRowClass),
5223
5231
  onClick: function onClick() {
5224
- return onRowClick === null || onRowClick === void 0 ? void 0 : onRowClick(row, globalIndex);
5232
+ return onRowClick === null || onRowClick === void 0 ? void 0 : onRowClick(effectiveRow, globalIndex);
5225
5233
  },
5226
5234
  children: [hasDetailsColumn && jsxRuntime.jsx("td", {
5227
5235
  className: "px-4 py-4 text-sm",
@@ -5229,7 +5237,7 @@ function TableRow(_ref) {
5229
5237
  type: "button",
5230
5238
  onClick: function onClick(e) {
5231
5239
  e.stopPropagation();
5232
- toggleExpandRow(row, rowIndexInPage);
5240
+ toggleExpandRow(effectiveRow, rowIndexInPage);
5233
5241
  },
5234
5242
  "aria-expanded": isExpanded,
5235
5243
  "aria-label": isExpanded ? "Collapse row details" : "Expand row details",
@@ -5249,12 +5257,12 @@ function TableRow(_ref) {
5249
5257
  className: "rounded border-gray-300",
5250
5258
  checked: isSelected,
5251
5259
  onChange: function onChange() {
5252
- return handleSelectRow(row, rowIndexInPage);
5260
+ return handleSelectRow(effectiveRow, rowIndexInPage);
5253
5261
  }
5254
5262
  })
5255
5263
  }), visibleColumns.map(function (column, columnIndex) {
5256
5264
  var extraCellClass = typeof cellClass === "function" ? cellClass({
5257
- row: row,
5265
+ row: effectiveRow,
5258
5266
  rowIndex: globalIndex,
5259
5267
  column: column,
5260
5268
  columnIndex: columnIndex
@@ -5273,15 +5281,15 @@ function TableRow(_ref) {
5273
5281
  }, safeExtraCellClass),
5274
5282
  onClick: function onClick(e) {
5275
5283
  if (interactive && onCellClick) {
5276
- onCellClick(rowKey, column.key, row, column, globalIndex);
5284
+ onCellClick(rowKey, column.key, effectiveRow, column, globalIndex);
5277
5285
  }
5278
5286
  },
5279
5287
  onDoubleClick: function onDoubleClick(e) {
5280
5288
  if (interactive && onCellDoubleClick && column.editable !== false) {
5281
- onCellDoubleClick(rowKey, column.key, row, column, globalIndex);
5289
+ onCellDoubleClick(rowKey, column.key, effectiveRow, column, globalIndex);
5282
5290
  }
5283
5291
  },
5284
- children: isCellEditing && renderInteractiveCellInput ? renderInteractiveCellInput(column, row, globalIndex, rowKey) : renderCell(column, row, globalIndex)
5292
+ children: isCellEditing && renderInteractiveCellInput ? renderInteractiveCellInput(column, effectiveRow, globalIndex, rowKey) : renderCell(column, effectiveRow, globalIndex)
5285
5293
  }, column.key);
5286
5294
  }), jsxRuntime.jsx("td", {
5287
5295
  className: "px-4 py-4"
@@ -5552,6 +5560,7 @@ function FieldInput(_ref) {
5552
5560
  var column = _ref.column,
5553
5561
  value = _ref.value,
5554
5562
  _onChange = _ref.onChange,
5563
+ onKeyDown = _ref.onKeyDown,
5555
5564
  _ref$isEditing = _ref.isEditing,
5556
5565
  isEditing = _ref$isEditing === void 0 ? true : _ref$isEditing,
5557
5566
  _ref$row = _ref.row,
@@ -5564,14 +5573,22 @@ function FieldInput(_ref) {
5564
5573
  autoFocus = _ref$autoFocus === void 0 ? false : _ref$autoFocus;
5565
5574
  var currentValue = value !== null && value !== void 0 ? value : "";
5566
5575
  var inputType = column.type || column.inputType || "text";
5576
+ var stopProp = function stopProp(e) {
5577
+ e.stopPropagation();
5578
+ };
5567
5579
  // Check if custom onRender renderer is provided on the column definition
5568
5580
  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
5581
+ return jsxRuntime.jsx("div", {
5582
+ onClick: stopProp,
5583
+ onMouseDown: stopProp,
5584
+ children: column.onRender(row, rowIndex, column, {
5585
+ value: currentValue,
5586
+ onChange: function onChange(newVal) {
5587
+ return _onChange === null || _onChange === void 0 ? void 0 : _onChange(newVal);
5588
+ },
5589
+ onKeyDown: onKeyDown,
5590
+ isEditing: isEditing
5591
+ })
5575
5592
  });
5576
5593
  }
5577
5594
  // Textarea / Longtext
@@ -5583,6 +5600,9 @@ function FieldInput(_ref) {
5583
5600
  onChange: function onChange(e) {
5584
5601
  return _onChange === null || _onChange === void 0 ? void 0 : _onChange(e.target.value);
5585
5602
  },
5603
+ onKeyDown: onKeyDown,
5604
+ onClick: stopProp,
5605
+ onMouseDown: stopProp,
5586
5606
  placeholder: "Enter ".concat(column.label || column.key, "..."),
5587
5607
  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
5608
  });
@@ -5601,6 +5621,9 @@ function FieldInput(_ref) {
5601
5621
  onChange: function onChange(e) {
5602
5622
  return _onChange === null || _onChange === void 0 ? void 0 : _onChange(e.target.value);
5603
5623
  },
5624
+ onKeyDown: onKeyDown,
5625
+ onClick: stopProp,
5626
+ onMouseDown: stopProp,
5604
5627
  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
5628
  children: [jsxRuntime.jsxs("option", {
5606
5629
  value: "",
@@ -5618,6 +5641,8 @@ function FieldInput(_ref) {
5618
5641
  var checked = Boolean(currentValue);
5619
5642
  return jsxRuntime.jsx("div", {
5620
5643
  className: cn$1("flex items-center justify-center py-1", className),
5644
+ onClick: stopProp,
5645
+ onMouseDown: stopProp,
5621
5646
  children: jsxRuntime.jsx("input", {
5622
5647
  type: "checkbox",
5623
5648
  autoFocus: autoFocus,
@@ -5625,6 +5650,7 @@ function FieldInput(_ref) {
5625
5650
  onChange: function onChange(e) {
5626
5651
  return _onChange === null || _onChange === void 0 ? void 0 : _onChange(e.target.checked);
5627
5652
  },
5653
+ onKeyDown: onKeyDown,
5628
5654
  className: "w-4 h-4 text-primary-600 border-gray-300 rounded focus:ring-primary-500 cursor-pointer"
5629
5655
  })
5630
5656
  });
@@ -5638,6 +5664,9 @@ function FieldInput(_ref) {
5638
5664
  onChange: function onChange(e) {
5639
5665
  return _onChange === null || _onChange === void 0 ? void 0 : _onChange(e.target.value);
5640
5666
  },
5667
+ onKeyDown: onKeyDown,
5668
+ onClick: stopProp,
5669
+ onMouseDown: stopProp,
5641
5670
  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
5671
  });
5643
5672
  }
@@ -5650,6 +5679,9 @@ function FieldInput(_ref) {
5650
5679
  onChange: function onChange(e) {
5651
5680
  return _onChange === null || _onChange === void 0 ? void 0 : _onChange(e.target.value === "" ? "" : Number(e.target.value));
5652
5681
  },
5682
+ onKeyDown: onKeyDown,
5683
+ onClick: stopProp,
5684
+ onMouseDown: stopProp,
5653
5685
  placeholder: "Enter ".concat(column.label || column.key, "..."),
5654
5686
  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
5687
  });
@@ -5662,12 +5694,15 @@ function FieldInput(_ref) {
5662
5694
  onChange: function onChange(e) {
5663
5695
  return _onChange === null || _onChange === void 0 ? void 0 : _onChange(e.target.value);
5664
5696
  },
5697
+ onKeyDown: onKeyDown,
5698
+ onClick: stopProp,
5699
+ onMouseDown: stopProp,
5665
5700
  placeholder: "Enter ".concat(column.label || column.key, "..."),
5666
5701
  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
5702
  });
5668
5703
  }
5669
5704
 
5670
- var _excluded$x = ["data", "columns", "sortable", "filterable", "selectable", "pagination", "pageSize", "onSort", "onFilter", "onFetch", "onFilterChange", "onSelectionChange", "onRowClick", "hasDetails", "DetailsComponent", "className", "withAction", "onAction", "actions", "replaceDefaultActions", "showSerial", "cellClass", "rowClass", "globalSearch", "limitOptions", "showLimitSelector", "onLimitChange", "showReloadButton", "renderReloadButton", "onReload", "stripedRows", "theme", "responsiveBreakpoint", "serverSide", "totalRecords", "pageNumber", "onPageChange", "TheadComponent", "TfootComponent", "interactive", "onSave", "onRowAdd", "onRowDelete"],
5705
+ var _excluded$x = ["data", "columns", "sortable", "filterable", "selectable", "pagination", "pageSize", "onSort", "onFilter", "onFetch", "onFilterChange", "onSelectionChange", "onRowClick", "hasDetails", "DetailsComponent", "className", "withAction", "onAction", "actions", "replaceDefaultActions", "showSerial", "cellClass", "rowClass", "globalSearch", "limitOptions", "showLimitSelector", "onLimitChange", "showReloadButton", "renderReloadButton", "onReload", "stripedRows", "theme", "responsiveBreakpoint", "serverSide", "totalRecords", "pageNumber", "onPageChange", "TheadComponent", "TfootComponent", "interactive", "onSave", "onEdit", "onRowAdd", "onRowDelete"],
5671
5706
  _excluded2$4 = ["_key", "_isNew"];
5672
5707
  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; }
5673
5708
  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; }
@@ -5747,6 +5782,7 @@ var Table = function Table(_ref) {
5747
5782
  _ref$interactive = _ref.interactive,
5748
5783
  interactive = _ref$interactive === void 0 ? false : _ref$interactive,
5749
5784
  onSave = _ref.onSave,
5785
+ onEdit = _ref.onEdit,
5750
5786
  onRowAdd = _ref.onRowAdd,
5751
5787
  onRowDelete = _ref.onRowDelete,
5752
5788
  props = _objectWithoutProperties$1(_ref, _excluded$x);
@@ -5999,15 +6035,33 @@ var Table = function Table(_ref) {
5999
6035
  setNewRows(function (prev) {
6000
6036
  var next = _toConsumableArray$1(prev);
6001
6037
  next[newRowIdx] = _objectSpread$B(_objectSpread$B({}, next[newRowIdx]), {}, _defineProperty$4({}, colKey, newValue));
6038
+ onEdit === null || onEdit === void 0 || onEdit({
6039
+ rowKey: rowKey,
6040
+ colKey: colKey,
6041
+ newValue: newValue,
6042
+ row: next[newRowIdx],
6043
+ isNew: true
6044
+ });
6002
6045
  return next;
6003
6046
  });
6004
6047
  return;
6005
6048
  }
6006
6049
  setPendingEdits(function (prev) {
6007
6050
  var nextRowEdits = _objectSpread$B(_objectSpread$B({}, prev[rowKey] || {}), {}, _defineProperty$4({}, colKey, newValue));
6051
+ var origRow = tableData.find(function (r, i) {
6052
+ return getRowKey(r, i) === rowKey;
6053
+ });
6054
+ var updatedRow = _objectSpread$B(_objectSpread$B({}, origRow), nextRowEdits);
6055
+ onEdit === null || onEdit === void 0 || onEdit({
6056
+ rowKey: rowKey,
6057
+ colKey: colKey,
6058
+ newValue: newValue,
6059
+ row: updatedRow,
6060
+ isNew: false
6061
+ });
6008
6062
  return _objectSpread$B(_objectSpread$B({}, prev), {}, _defineProperty$4({}, rowKey, nextRowEdits));
6009
6063
  });
6010
- }, [newRows]);
6064
+ }, [newRows, tableData, onEdit]);
6011
6065
  var handleAddRow = React.useCallback(function () {
6012
6066
  var _columnsState$find, _columnsState$;
6013
6067
  var newKey = "new-".concat(Date.now());
@@ -6055,7 +6109,7 @@ var Table = function Table(_ref) {
6055
6109
  onRowDelete === null || onRowDelete === void 0 || onRowDelete(rowKey);
6056
6110
  }, [activeCell, onRowDelete]);
6057
6111
  var handleSave = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
6058
- var updatedTableData, finalNewRows, finalData, _t;
6112
+ var _customSaveResult, _customSaveResult2, updatedTableData, finalNewRows, finalData, customSaveResult, nextData, _t;
6059
6113
  return _regeneratorRuntime.wrap(function (_context) {
6060
6114
  while (1) switch (_context.prev = _context.next) {
6061
6115
  case 0:
@@ -6082,43 +6136,59 @@ var Table = function Table(_ref) {
6082
6136
  });
6083
6137
  finalData = [].concat(_toConsumableArray$1(updatedTableData), _toConsumableArray$1(finalNewRows));
6084
6138
  if (!onSave) {
6085
- _context.next = 3;
6139
+ _context.next = 4;
6086
6140
  break;
6087
6141
  }
6088
6142
  _context.next = 3;
6089
6143
  return onSave({
6090
6144
  updatedRows: dirtyEdits,
6091
6145
  newRows: finalNewRows,
6092
- allData: finalData
6146
+ allData: finalData,
6147
+ tableData: updatedTableData
6093
6148
  });
6094
6149
  case 3:
6095
- setTableData(finalData);
6150
+ customSaveResult = _context.sent;
6151
+ case 4:
6152
+ nextData = Array.isArray(customSaveResult) ? customSaveResult : ((_customSaveResult = customSaveResult) === null || _customSaveResult === void 0 ? void 0 : _customSaveResult.data) || ((_customSaveResult2 = customSaveResult) === null || _customSaveResult2 === void 0 ? void 0 : _customSaveResult2.allData) || finalData;
6153
+ setTableData(nextData);
6154
+ initialDataRef.current = nextData;
6096
6155
  setPendingEdits({});
6097
6156
  setNewRows([]);
6098
6157
  setEditingCell(null);
6099
- _context.next = 5;
6158
+ _context.next = 6;
6100
6159
  break;
6101
- case 4:
6102
- _context.prev = 4;
6103
- _t = _context["catch"](2);
6104
- console.error("Save error:", _t);
6105
6160
  case 5:
6106
6161
  _context.prev = 5;
6107
- setIsSaving(false);
6108
- return _context.finish(5);
6162
+ _t = _context["catch"](2);
6163
+ console.error("Save error:", _t);
6109
6164
  case 6:
6165
+ _context.prev = 6;
6166
+ setIsSaving(false);
6167
+ return _context.finish(6);
6168
+ case 7:
6110
6169
  case "end":
6111
6170
  return _context.stop();
6112
6171
  }
6113
- }, _callee, null, [[2, 4, 5, 6]]);
6172
+ }, _callee, null, [[2, 5, 6, 7]]);
6114
6173
  })), [isDirty, isSaving, tableData, dirtyEdits, newRows, onSave]);
6174
+ var handleClearChanges = React.useCallback(function () {
6175
+ setPendingEdits({});
6176
+ setNewRows([]);
6177
+ setEditingCell(null);
6178
+ setActiveCell(null);
6179
+ }, []);
6115
6180
  var handleCellClick = React.useCallback(function (rowKey, colKey, row, column, globalIndex) {
6116
6181
  setActiveCell({
6117
6182
  rowKey: rowKey,
6118
6183
  colKey: colKey,
6119
6184
  rowIndex: globalIndex
6120
6185
  });
6121
- setEditingCell(null);
6186
+ setEditingCell(function (prev) {
6187
+ if (prev && prev.rowKey === rowKey && prev.colKey === colKey) {
6188
+ return prev;
6189
+ }
6190
+ return null;
6191
+ });
6122
6192
  }, []);
6123
6193
  var handleCellDoubleClick = React.useCallback(function (rowKey, colKey, row, column, globalIndex) {
6124
6194
  setActiveCell({
@@ -6134,21 +6204,6 @@ var Table = function Table(_ref) {
6134
6204
  });
6135
6205
  }
6136
6206
  }, []);
6137
- var renderInteractiveCellInput = React.useCallback(function (column, row, globalIndex, rowKey) {
6138
- var _row$column$key;
6139
- 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 : "";
6140
- return jsxRuntime.jsx(FieldInput, {
6141
- column: column,
6142
- value: value,
6143
- onChange: function onChange(newVal) {
6144
- return handleCellValueChange(rowKey, column.key, newVal);
6145
- },
6146
- isEditing: true,
6147
- row: row,
6148
- rowIndex: globalIndex,
6149
- autoFocus: (editingCell === null || editingCell === void 0 ? void 0 : editingCell.rowKey) === rowKey && (editingCell === null || editingCell === void 0 ? void 0 : editingCell.colKey) === column.key
6150
- });
6151
- }, [pendingEdits, handleCellValueChange, editingCell]);
6152
6207
  useClickOutside([tableContainerRef], interactive && Boolean(editingCell), function () {
6153
6208
  setEditingCell(null);
6154
6209
  });
@@ -6299,6 +6354,129 @@ var Table = function Table(_ref) {
6299
6354
  };
6300
6355
  });
6301
6356
  }, [limitOptions]);
6357
+ var handleTableKeyDown = React.useCallback(function (e) {
6358
+ if (!interactive) return;
6359
+ var key = e.key,
6360
+ shiftKey = e.shiftKey;
6361
+ // Escape: stop editing
6362
+ if (key === "Escape") {
6363
+ if (editingCell) {
6364
+ e.preventDefault();
6365
+ setEditingCell(null);
6366
+ }
6367
+ return;
6368
+ }
6369
+ // Enter: Save changes only when there are modified changes (isDirty)
6370
+ if (key === "Enter") {
6371
+ var _e$target;
6372
+ if (((_e$target = e.target) === null || _e$target === void 0 ? void 0 : _e$target.tagName) === "TEXTAREA" && shiftKey) {
6373
+ return;
6374
+ }
6375
+ if (isDirty) {
6376
+ e.preventDefault();
6377
+ setEditingCell(null);
6378
+ if (isValid && !isSaving) {
6379
+ handleSave();
6380
+ }
6381
+ }
6382
+ return;
6383
+ }
6384
+ var currentCell = activeCell || editingCell;
6385
+ if (!currentCell) return;
6386
+ var allRows = [].concat(_toConsumableArray$1(paginatedData), _toConsumableArray$1(newRows));
6387
+ if (allRows.length === 0 || visibleColumns.length === 0) return;
6388
+ var rIdx = allRows.findIndex(function (r, idx) {
6389
+ var rKey = r._key || getRowKey(r, startIndex + idx);
6390
+ return rKey === currentCell.rowKey;
6391
+ });
6392
+ var cIdx = visibleColumns.findIndex(function (c) {
6393
+ return c.key === currentCell.colKey;
6394
+ });
6395
+ if (rIdx === -1 || cIdx === -1) return;
6396
+ var nextRIdx = rIdx;
6397
+ var nextCIdx = cIdx;
6398
+ if (key === "Tab") {
6399
+ e.preventDefault();
6400
+ if (shiftKey) {
6401
+ if (cIdx > 0) {
6402
+ nextCIdx = cIdx - 1;
6403
+ } else if (rIdx > 0) {
6404
+ nextRIdx = rIdx - 1;
6405
+ nextCIdx = visibleColumns.length - 1;
6406
+ }
6407
+ } else {
6408
+ if (cIdx < visibleColumns.length - 1) {
6409
+ nextCIdx = cIdx + 1;
6410
+ } else if (rIdx < allRows.length - 1) {
6411
+ nextRIdx = rIdx + 1;
6412
+ nextCIdx = 0;
6413
+ }
6414
+ }
6415
+ } else if (key === "ArrowRight") {
6416
+ var _e$target2, _e$target$value;
6417
+ 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) {
6418
+ return;
6419
+ }
6420
+ if (cIdx < visibleColumns.length - 1) {
6421
+ e.preventDefault();
6422
+ nextCIdx = cIdx + 1;
6423
+ }
6424
+ } else if (key === "ArrowLeft") {
6425
+ var _e$target3;
6426
+ if (editingCell && ((_e$target3 = e.target) === null || _e$target3 === void 0 ? void 0 : _e$target3.selectionStart) !== undefined && e.target.selectionStart > 0) {
6427
+ return;
6428
+ }
6429
+ if (cIdx > 0) {
6430
+ e.preventDefault();
6431
+ nextCIdx = cIdx - 1;
6432
+ }
6433
+ } else if (key === "ArrowDown") {
6434
+ var _e$target4;
6435
+ if (((_e$target4 = e.target) === null || _e$target4 === void 0 ? void 0 : _e$target4.tagName) === "SELECT") return;
6436
+ if (rIdx < allRows.length - 1) {
6437
+ e.preventDefault();
6438
+ nextRIdx = rIdx + 1;
6439
+ }
6440
+ } else if (key === "ArrowUp") {
6441
+ var _e$target5;
6442
+ if (((_e$target5 = e.target) === null || _e$target5 === void 0 ? void 0 : _e$target5.tagName) === "SELECT") return;
6443
+ if (rIdx > 0) {
6444
+ e.preventDefault();
6445
+ nextRIdx = rIdx - 1;
6446
+ }
6447
+ } else {
6448
+ return;
6449
+ }
6450
+ var targetRow = allRows[nextRIdx];
6451
+ var targetCol = visibleColumns[nextCIdx];
6452
+ if (!targetRow || !targetCol) return;
6453
+ var targetRowKey = targetRow._key || getRowKey(targetRow, startIndex + nextRIdx);
6454
+ var nextCellObj = {
6455
+ rowKey: targetRowKey,
6456
+ colKey: targetCol.key,
6457
+ rowIndex: startIndex + nextRIdx
6458
+ };
6459
+ setActiveCell(nextCellObj);
6460
+ if (editingCell && targetCol.editable !== false) {
6461
+ setEditingCell(nextCellObj);
6462
+ }
6463
+ }, [interactive, editingCell, activeCell, isDirty, isValid, isSaving, handleSave, paginatedData, newRows, visibleColumns, startIndex]);
6464
+ var renderInteractiveCellInput = React.useCallback(function (column, row, globalIndex, rowKey) {
6465
+ var _row$column$key;
6466
+ 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 : "";
6467
+ return jsxRuntime.jsx(FieldInput, {
6468
+ column: column,
6469
+ value: value,
6470
+ onChange: function onChange(newVal) {
6471
+ return handleCellValueChange(rowKey, column.key, newVal);
6472
+ },
6473
+ onKeyDown: handleTableKeyDown,
6474
+ isEditing: true,
6475
+ row: row,
6476
+ rowIndex: globalIndex,
6477
+ autoFocus: (editingCell === null || editingCell === void 0 ? void 0 : editingCell.rowKey) === rowKey && (editingCell === null || editingCell === void 0 ? void 0 : editingCell.colKey) === column.key
6478
+ });
6479
+ }, [pendingEdits, handleCellValueChange, handleTableKeyDown, editingCell]);
6302
6480
  // Callbacks
6303
6481
  var toggleColumnVisibility = React.useCallback(function (key) {
6304
6482
  setColumnsState(function (prev) {
@@ -6403,12 +6581,40 @@ var Table = function Table(_ref) {
6403
6581
  action: action,
6404
6582
  row: row
6405
6583
  });
6584
+ if ((action === null || action === void 0 ? void 0 : action.name) === "edit" || (action === null || action === void 0 ? void 0 : action.name) === "Edit") {
6585
+ if (interactive) {
6586
+ var _columnsState$find2, _columnsState$2;
6587
+ var firstColKey = ((_columnsState$find2 = columnsState.find(function (c) {
6588
+ return c.isVisible !== false && c.editable !== false;
6589
+ })) === null || _columnsState$find2 === void 0 ? void 0 : _columnsState$find2.key) || ((_columnsState$2 = columnsState[0]) === null || _columnsState$2 === void 0 ? void 0 : _columnsState$2.key);
6590
+ var globalIndex = tableData.findIndex(function (r, i) {
6591
+ return getRowKey(r, i) === getRowKey(row);
6592
+ });
6593
+ if (firstColKey && globalIndex !== -1) {
6594
+ var rKey = getRowKey(row, globalIndex);
6595
+ setActiveCell({
6596
+ rowKey: rKey,
6597
+ colKey: firstColKey,
6598
+ rowIndex: globalIndex
6599
+ });
6600
+ setEditingCell({
6601
+ rowKey: rKey,
6602
+ colKey: firstColKey,
6603
+ rowIndex: globalIndex
6604
+ });
6605
+ }
6606
+ }
6607
+ onEdit === null || onEdit === void 0 || onEdit({
6608
+ action: action,
6609
+ row: row
6610
+ });
6611
+ }
6406
6612
  onAction === null || onAction === void 0 || onAction({
6407
6613
  action: action,
6408
6614
  row: row
6409
6615
  });
6410
6616
  setActiveActionRowKey(null);
6411
- }, [onAction]);
6617
+ }, [onAction, onEdit, interactive, columnsState, tableData]);
6412
6618
  var handleLimitChange = React.useCallback(function (nextLimit) {
6413
6619
  var parsed = Number(nextLimit);
6414
6620
  if (!Number.isFinite(parsed) || parsed <= 0) return;
@@ -6493,11 +6699,14 @@ var Table = function Table(_ref) {
6493
6699
  onCellClick: handleCellClick,
6494
6700
  onCellDoubleClick: handleCellDoubleClick,
6495
6701
  renderInteractiveCellInput: renderInteractiveCellInput,
6496
- invalidCellSet: invalidCellSet
6702
+ invalidCellSet: invalidCellSet,
6703
+ pendingEdits: pendingEdits
6497
6704
  };
6498
6705
  return jsxRuntime.jsxs("div", {
6499
6706
  ref: tableContainerRef,
6500
- className: cn$1("w-full border rounded-lg md:rounded-md", className),
6707
+ tabIndex: interactive ? 0 : undefined,
6708
+ onKeyDown: handleTableKeyDown,
6709
+ className: cn$1("w-full border rounded-lg md:rounded-md outline-none focus:ring-1 focus:ring-primary-400", className),
6501
6710
  children: [TheadComponent && typeof TheadComponent === "function" ? jsxRuntime.jsx(TheadComponent, {
6502
6711
  columns: columnsState,
6503
6712
  data: filteredData
@@ -6544,15 +6753,26 @@ var Table = function Table(_ref) {
6544
6753
  onClick: handleSave,
6545
6754
  disabled: !isValid || isSaving,
6546
6755
  title: !isValid ? "Cannot save: ".concat(((_validationErrors$ = validationErrors[0]) === null || _validationErrors$ === void 0 ? void 0 : _validationErrors$.message) || "Validation failed") : "Save changes",
6547
- 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"),
6756
+ 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"),
6548
6757
  children: [jsxRuntime.jsx(Save, {
6549
6758
  className: "w-4 h-4"
6550
6759
  }), jsxRuntime.jsx("span", {
6551
6760
  children: isSaving ? "Saving..." : "Save Changes"
6552
6761
  }), pendingCount > 0 && jsxRuntime.jsx("span", {
6553
- 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"),
6762
+ 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"),
6554
6763
  children: pendingCount
6555
6764
  })]
6765
+ }), jsxRuntime.jsxs("button", {
6766
+ type: "button",
6767
+ onClick: handleClearChanges,
6768
+ disabled: isSaving,
6769
+ title: "Discard all pending modifications",
6770
+ 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",
6771
+ children: [jsxRuntime.jsx(X, {
6772
+ className: "w-4 h-4 text-primary-600"
6773
+ }), jsxRuntime.jsx("span", {
6774
+ children: "Clear Changes"
6775
+ })]
6556
6776
  }), !isValid && validationErrors.length > 0 && jsxRuntime.jsxs("div", {
6557
6777
  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",
6558
6778
  children: [jsxRuntime.jsx(AlertCircle, {
@@ -6778,9 +6998,9 @@ var Table = function Table(_ref) {
6778
6998
  className: "bg-primary-50/40 hover:bg-primary-100/70 active:bg-primary-100 transition-colors border-t-2 border-dashed border-primary-300 cursor-pointer group",
6779
6999
  children: jsxRuntime.jsx("td", {
6780
7000
  colSpan: visibleCount,
6781
- className: "px-6 py-3.5 text-center text-sm font-semibold text-primary-700 group-hover:text-primary-800",
7001
+ className: "px-6 py-3.5 text-left text-sm font-semibold text-primary-700 group-hover:text-primary-800",
6782
7002
  children: jsxRuntime.jsxs("div", {
6783
- className: "flex items-center justify-center gap-2",
7003
+ className: "flex items-center justify-start gap-2",
6784
7004
  children: [jsxRuntime.jsx(Plus, {
6785
7005
  className: "w-4 h-4 text-primary-600 group-hover:scale-110 transition-transform"
6786
7006
  }), jsxRuntime.jsx("span", {
@@ -12605,7 +12825,7 @@ var DatePicker = /*#__PURE__*/React.forwardRef(function (_ref, forwardedRef) {
12605
12825
  });
12606
12826
  });
12607
12827
 
12608
- var _excluded$v = ["id", "name", "checked", "defaultChecked", "onChange", "disabled", "size", "trackClass", "thumbClass", "className", "topLabel", "bottomLabel", "rightLabel", "leftLabel", "ariaLabel"];
12828
+ var _excluded$v = ["id", "name", "checked", "defaultChecked", "onChange", "disabled", "size", "color", "trackClass", "thumbClass", "className", "topLabel", "bottomLabel", "rightLabel", "leftLabel", "ariaLabel"];
12609
12829
  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; }
12610
12830
  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; }
12611
12831
  /**
@@ -12637,6 +12857,52 @@ var SIZE_MAP$2 = {
12637
12857
  knobTranslate: "translate-x-6"
12638
12858
  }
12639
12859
  };
12860
+ var COLOR_PRESETS$1 = {
12861
+ primary: {
12862
+ bg: "bg-primary-600",
12863
+ ring: "focus-visible:ring-primary-300"
12864
+ },
12865
+ secondary: {
12866
+ bg: "bg-secondary-600",
12867
+ ring: "focus-visible:ring-secondary-300"
12868
+ },
12869
+ success: {
12870
+ bg: "bg-success-600",
12871
+ ring: "focus-visible:ring-success-300"
12872
+ },
12873
+ green: {
12874
+ bg: "bg-success-600",
12875
+ ring: "focus-visible:ring-success-300"
12876
+ },
12877
+ error: {
12878
+ bg: "bg-error-600",
12879
+ ring: "focus-visible:ring-error-300"
12880
+ },
12881
+ danger: {
12882
+ bg: "bg-error-600",
12883
+ ring: "focus-visible:ring-error-300"
12884
+ },
12885
+ red: {
12886
+ bg: "bg-error-600",
12887
+ ring: "focus-visible:ring-error-300"
12888
+ },
12889
+ warning: {
12890
+ bg: "bg-warning-600",
12891
+ ring: "focus-visible:ring-warning-300"
12892
+ },
12893
+ blue: {
12894
+ bg: "bg-blue-600",
12895
+ ring: "focus-visible:ring-blue-300"
12896
+ },
12897
+ indigo: {
12898
+ bg: "bg-indigo-600",
12899
+ ring: "focus-visible:ring-indigo-300"
12900
+ },
12901
+ purple: {
12902
+ bg: "bg-purple-600",
12903
+ ring: "focus-visible:ring-purple-300"
12904
+ }
12905
+ };
12640
12906
  var Switch = /*#__PURE__*/React.forwardRef(function Switch(props, ref) {
12641
12907
  var id = props.id,
12642
12908
  name = props.name,
@@ -12648,6 +12914,8 @@ var Switch = /*#__PURE__*/React.forwardRef(function Switch(props, ref) {
12648
12914
  disabled = _props$disabled === void 0 ? false : _props$disabled,
12649
12915
  _props$size = props.size,
12650
12916
  size = _props$size === void 0 ? "md" : _props$size,
12917
+ _props$color = props.color,
12918
+ color = _props$color === void 0 ? "primary" : _props$color,
12651
12919
  trackClass = props.trackClass,
12652
12920
  thumbClass = props.thumbClass,
12653
12921
  _props$className = props.className,
@@ -12683,16 +12951,18 @@ var Switch = /*#__PURE__*/React.forwardRef(function Switch(props, ref) {
12683
12951
  }
12684
12952
  };
12685
12953
  var sizeStuff = SIZE_MAP$2[size] || SIZE_MAP$2.md;
12954
+ var isPreset = COLOR_PRESETS$1[color];
12686
12955
  // Classes for the track (we use inline style for arbitrary trackClass when ON)
12687
- 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
12956
+ 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
12688
12957
  );
12689
12958
  // Knob classes (thumb)
12690
12959
  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
12691
12960
  );
12692
12961
  var knobTransform = isOn ? sizeStuff.knobTranslate : "translate-x-1";
12693
- var focusClasses = disabled ? "" : "focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-sky-300";
12694
- var trackStyle = isOn && !trackClass ? {
12695
- backgroundColor: "rgb(14, 165, 233)"
12962
+ var ringClass = isPreset ? isPreset.ring : "focus-visible:ring-primary-300";
12963
+ var focusClasses = disabled ? "" : "focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 ".concat(ringClass);
12964
+ var trackStyle = isOn && !trackClass && !isPreset ? {
12965
+ backgroundColor: color
12696
12966
  } : undefined; // Fallback to default trackClass if trackClass is not a class
12697
12967
  var accessibleLabel = ariaLabel || rightLabel || leftLabel || topLabel || bottomLabel || "Toggle";
12698
12968
  var containerIsColumn = Boolean(topLabel || bottomLabel);
@@ -13407,7 +13677,7 @@ var Accordion = /*#__PURE__*/React.forwardRef(function Accordion(_ref, ref) {
13407
13677
  });
13408
13678
  Accordion.displayName = "Accordion";
13409
13679
 
13410
- var _excluded$s = ["id", "name", "label", "checked", "defaultChecked", "onChange", "disabled", "required", "className", "size", "labelPosition", "value", "ariaLabel", "variant", "indeterminate", "borderColor", "iconClass", "checkedClass"];
13680
+ var _excluded$s = ["id", "name", "label", "checked", "defaultChecked", "onChange", "disabled", "required", "className", "size", "labelPosition", "value", "ariaLabel", "variant", "indeterminate", "borderColor", "color", "iconClass", "checkedClass"];
13411
13681
  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; }
13412
13682
  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; }
13413
13683
  var SIZE_CLASSES = {
@@ -13427,6 +13697,52 @@ var SIZE_CLASSES = {
13427
13697
  icon: "w-4 h-4"
13428
13698
  }
13429
13699
  };
13700
+ var COLOR_PRESETS = {
13701
+ primary: {
13702
+ checked: "peer-checked:bg-primary-600 peer-checked:border-primary-600 peer-checked:text-white",
13703
+ ring: "peer-focus:ring-primary-300"
13704
+ },
13705
+ secondary: {
13706
+ checked: "peer-checked:bg-secondary-600 peer-checked:border-secondary-600 peer-checked:text-white",
13707
+ ring: "peer-focus:ring-secondary-300"
13708
+ },
13709
+ success: {
13710
+ checked: "peer-checked:bg-success-600 peer-checked:border-success-600 peer-checked:text-white",
13711
+ ring: "peer-focus:ring-success-300"
13712
+ },
13713
+ green: {
13714
+ checked: "peer-checked:bg-success-600 peer-checked:border-success-600 peer-checked:text-white",
13715
+ ring: "peer-focus:ring-success-300"
13716
+ },
13717
+ error: {
13718
+ checked: "peer-checked:bg-error-600 peer-checked:border-error-600 peer-checked:text-white",
13719
+ ring: "peer-focus:ring-error-300"
13720
+ },
13721
+ danger: {
13722
+ checked: "peer-checked:bg-error-600 peer-checked:border-error-600 peer-checked:text-white",
13723
+ ring: "peer-focus:ring-error-300"
13724
+ },
13725
+ red: {
13726
+ checked: "peer-checked:bg-error-600 peer-checked:border-error-600 peer-checked:text-white",
13727
+ ring: "peer-focus:ring-error-300"
13728
+ },
13729
+ warning: {
13730
+ checked: "peer-checked:bg-warning-600 peer-checked:border-warning-600 peer-checked:text-white",
13731
+ ring: "peer-focus:ring-warning-300"
13732
+ },
13733
+ blue: {
13734
+ checked: "peer-checked:bg-blue-600 peer-checked:border-blue-600 peer-checked:text-white",
13735
+ ring: "peer-focus:ring-blue-300"
13736
+ },
13737
+ indigo: {
13738
+ checked: "peer-checked:bg-indigo-600 peer-checked:border-indigo-600 peer-checked:text-white",
13739
+ ring: "peer-focus:ring-indigo-300"
13740
+ },
13741
+ purple: {
13742
+ checked: "peer-checked:bg-purple-600 peer-checked:border-purple-600 peer-checked:text-white",
13743
+ ring: "peer-focus:ring-purple-300"
13744
+ }
13745
+ };
13430
13746
  var Checkbox = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
13431
13747
  var _props$wrapperProps;
13432
13748
  var id = _ref.id,
@@ -13452,6 +13768,8 @@ var Checkbox = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
13452
13768
  indeterminate = _ref$indeterminate === void 0 ? false : _ref$indeterminate,
13453
13769
  _ref$borderColor = _ref.borderColor,
13454
13770
  borderColor = _ref$borderColor === void 0 ? "#ccc" : _ref$borderColor,
13771
+ _ref$color = _ref.color,
13772
+ color = _ref$color === void 0 ? "primary" : _ref$color,
13455
13773
  iconClass = _ref.iconClass,
13456
13774
  checkedClass = _ref.checkedClass,
13457
13775
  props = _objectWithoutProperties$1(_ref, _excluded$s);
@@ -13485,6 +13803,13 @@ var Checkbox = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
13485
13803
  var iconBase = "pointer-events-none transform transition-all duration-150 ease-out";
13486
13804
  var iconShown = "opacity-100 scale-100";
13487
13805
  var iconHidden = "opacity-0 scale-75";
13806
+ var isPreset = COLOR_PRESETS[color];
13807
+ 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";
13808
+ var customColorStyle = currentChecked && !isPreset && !checkedClass ? {
13809
+ backgroundColor: color,
13810
+ borderColor: color,
13811
+ color: "#ffffff"
13812
+ } : {};
13488
13813
  return jsxRuntime.jsxs("div", _objectSpread$w(_objectSpread$w({
13489
13814
  className: wrapperCls
13490
13815
  }, (_props$wrapperProps = props === null || props === void 0 ? void 0 : props.wrapperProps) !== null && _props$wrapperProps !== void 0 ? _props$wrapperProps : {}), {}, {
@@ -13495,7 +13820,7 @@ var Checkbox = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
13495
13820
  }), jsxRuntime.jsxs("div", {
13496
13821
  className: boxOuterCls,
13497
13822
  style: disabled ? {} : {
13498
- borderColor: borderColor
13823
+ borderColor: currentChecked && (isPreset || customColorStyle.borderColor) ? undefined : borderColor
13499
13824
  },
13500
13825
  "aria-disabled": disabled,
13501
13826
  children: [jsxRuntime.jsx("input", _objectSpread$w({
@@ -13514,11 +13839,11 @@ var Checkbox = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
13514
13839
  "aria-label": ariaLabel,
13515
13840
  "aria-checked": Boolean(currentChecked)
13516
13841
  }, props)), jsxRuntime.jsx("div", {
13517
- 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 : ""),
13842
+ 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 : ""),
13518
13843
  style: currentChecked && checkedClass ? {
13519
13844
  backgroundColor: "",
13520
13845
  borderColor: ""
13521
- } : {},
13846
+ } : customColorStyle,
13522
13847
  "aria-hidden": "true",
13523
13848
  children: jsxRuntime.jsx(Check, {
13524
13849
  className: "".concat(sizeClass.icon, " ").concat(iconBase, " ").concat(currentChecked ? iconShown : iconHidden, " ").concat(iconClass || ""),