tabler-react-2 0.1.158 → 0.1.160

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.
@@ -28,7 +28,8 @@ var Alert = exports.Alert = function Alert(_ref) {
28
28
  }, icon), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("h4", {
29
29
  className: "alert-title alert-heading"
30
30
  }, title), /*#__PURE__*/_react["default"].createElement("div", {
31
- className: "text-secondary"
31
+ className: "text-secondary ".concat(props.contentClassName),
32
+ style: props.contentStyle
32
33
  }, children))), onDismiss && /*#__PURE__*/_react["default"].createElement("a", {
33
34
  className: "btn-close",
34
35
  "data-bs-dismiss": "alert",
@@ -1,6 +1,5 @@
1
1
  "use strict";
2
2
 
3
- function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
@@ -11,11 +10,15 @@ var _reactTable = require("@tanstack/react-table");
11
10
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
12
11
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
13
12
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
14
- // TableV2.jsx
13
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
14
+ function ownKeys(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; }
15
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
16
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
17
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
18
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } // TableV2.jsx
15
19
  // TanStack Table v8 styled like the Original component's Tabler look.
16
20
  // Adds `dense` mode for a compact layout.
17
21
  // Controlled (server-side) pagination & sorting. ES modules, named exports, arrow functions only.
18
-
19
22
  /** Small utilities */
20
23
 
21
24
  var SortIcon = exports.SortIcon = function SortIcon(_ref) {
@@ -49,7 +52,7 @@ var PageSizeSelect = exports.PageSizeSelect = function PageSizeSelect(_ref3) {
49
52
  options = _ref3$options === void 0 ? [10, 25, 50, 100] : _ref3$options,
50
53
  dense = _ref3.dense;
51
54
  return /*#__PURE__*/_react["default"].createElement("select", {
52
- className: dense ? "form-select form-select-sm" : "form-select",
55
+ className: "form-select form-select-sm",
53
56
  value: value,
54
57
  onChange: function onChange(e) {
55
58
  return _onChange(Number(e.target.value));
@@ -106,24 +109,29 @@ var isEmptyRender = function isEmptyRender(node) {
106
109
  if (typeof node === "string" && node.trim() === "") return true;
107
110
  return false;
108
111
  };
109
- var renderCellWithFallback = function renderCellWithFallback(cell) {
112
+ var renderCellWithFallback = function renderCellWithFallback(cell, fallbackText) {
110
113
  var _cell$getValue;
111
- // If the column provided a custom cell renderer, use it first.
112
114
  var rendered = (0, _reactTable.flexRender)(cell.column.columnDef.cell, cell.getContext());
113
-
114
- // If the renderer returned something empty-ish, or if there's no renderer,
115
- // fall back to the raw value.
116
115
  var finalNode = isEmptyRender(rendered) ? (_cell$getValue = cell.getValue) === null || _cell$getValue === void 0 ? void 0 : _cell$getValue.call(cell) : rendered;
117
-
118
- // If the final node is still null/undefined/empty string, show a placeholder.
119
116
  if (finalNode === null || finalNode === undefined || typeof finalNode === "string" && finalNode.trim() === "") {
120
117
  return /*#__PURE__*/_react["default"].createElement("span", {
121
118
  className: "text-muted"
122
- }, "\u2014");
119
+ }, fallbackText);
123
120
  }
124
121
  return finalNode;
125
122
  };
126
123
 
124
+ /** Skeletons */
125
+
126
+ var SkeletonCSS = function SkeletonCSS() {
127
+ return /*#__PURE__*/_react["default"].createElement("style", null, "\n /* TableV2 skeletons */\n .tblv2-skel {\n display: inline-block;\n vertical-align: middle;\n border-radius: 9999px;\n background: linear-gradient(90deg, #e9ecef 25%, #f1f3f5 37%, #e9ecef 63%);\n background-size: 400% 100%;\n animation: tblv2-shimmer 1.2s ease-in-out infinite;\n }\n @keyframes tblv2-shimmer {\n 0% { background-position: 100% 0; }\n 100% { background-position: 0 0; }\n }\n ");
128
+ };
129
+ var skeletonWidthAt = function skeletonWidthAt(rowIdx, colIdx) {
130
+ // Cycle through some natural-looking widths
131
+ var widths = [48, 72, 96, 120, 64, 88, 140];
132
+ return widths[(rowIdx + colIdx) % widths.length];
133
+ };
134
+
127
135
  /** Main table */
128
136
 
129
137
  var TableV2 = exports.TableV2 = function TableV2(_ref5) {
@@ -166,22 +174,30 @@ var TableV2 = exports.TableV2 = function TableV2(_ref5) {
166
174
  var table = (0, _reactTable.useReactTable)({
167
175
  data: data,
168
176
  columns: columns,
169
- state: {
170
- sorting: sorting,
171
- rowSelection: rowSelection !== null && rowSelection !== void 0 ? rowSelection : {}
172
- },
177
+ state: _objectSpread({
178
+ sorting: sorting
179
+ }, rowSelection !== undefined ? {
180
+ rowSelection: rowSelection
181
+ } : {}),
173
182
  getCoreRowModel: (0, _reactTable.getCoreRowModel)(),
174
183
  manualSorting: true,
175
184
  enableSortingRemoval: false,
176
- onSortingChange: onSortingChange,
177
- getRowId: getRowId,
185
+ /** Selection essentials */
186
+ enableRowSelection: true,
178
187
  onRowSelectionChange: onRowSelectionChange,
179
- // Note: renderFallbackValue triggers only when a renderer returns `undefined`.
180
- // We still handle null/"" ourselves in renderCellWithFallback.
188
+ getRowId: getRowId,
189
+ // IMPORTANT: provide a stable id (e.g., row => row.id) when paginating
190
+ autoResetRowSelection: false,
191
+ onSortingChange: onSortingChange,
181
192
  renderFallbackValue: /*#__PURE__*/_react["default"].createElement("span", {
182
193
  className: "text-muted"
183
194
  }, fallbackText)
184
195
  });
196
+
197
+ /** Make memoization responsive to internal table state, not just the instance ref */
198
+ var _table$getState = table.getState(),
199
+ rs = _table$getState.rowSelection,
200
+ currentSorting = _table$getState.sorting;
185
201
  var headerCell = function headerCell(_ref6) {
186
202
  var header = _ref6.header;
187
203
  var canSort = header.column.getCanSort();
@@ -215,10 +231,40 @@ var TableV2 = exports.TableV2 = function TableV2(_ref5) {
215
231
  state: sortState || false
216
232
  }));
217
233
  };
234
+ var total = totalRows !== null && totalRows !== void 0 ? totalRows : 0;
235
+ var leafCols = table.getAllLeafColumns().length;
218
236
  var content = (0, _react.useMemo)(function () {
237
+ if (loading) {
238
+ var rowCount = Math.max(1, size || data.length || 10);
239
+ var rowClass = [dense ? "align-middle" : ""].filter(Boolean).join(" ");
240
+ var cellClass = [dense ? "py-1" : ""].filter(Boolean).join(" ");
241
+ var pillHeight = dense ? 16 : 18;
242
+ return Array.from({
243
+ length: rowCount
244
+ }).map(function (_, r) {
245
+ return /*#__PURE__*/_react["default"].createElement("tr", {
246
+ key: "skel-".concat(r),
247
+ className: rowClass,
248
+ "aria-hidden": "true"
249
+ }, Array.from({
250
+ length: leafCols
251
+ }).map(function (__, c) {
252
+ return /*#__PURE__*/_react["default"].createElement("td", {
253
+ key: "skel-".concat(r, "-").concat(c),
254
+ className: cellClass
255
+ }, /*#__PURE__*/_react["default"].createElement("span", {
256
+ className: "tblv2-skel",
257
+ style: {
258
+ height: pillHeight,
259
+ width: skeletonWidthAt(r, c)
260
+ }
261
+ }));
262
+ }));
263
+ });
264
+ }
219
265
  if (!loading && data.length === 0) {
220
266
  return /*#__PURE__*/_react["default"].createElement("tr", null, /*#__PURE__*/_react["default"].createElement("td", {
221
- colSpan: table.getAllLeafColumns().length,
267
+ colSpan: leafCols,
222
268
  className: "text-center ".concat(dense ? "py-3 small" : "py-3", " text-muted")
223
269
  }, typeof emptyState === "function" ? emptyState() : emptyState));
224
270
  }
@@ -230,14 +276,14 @@ var TableV2 = exports.TableV2 = function TableV2(_ref5) {
230
276
  return /*#__PURE__*/_react["default"].createElement("td", {
231
277
  key: cell.id,
232
278
  className: [cell.column.columnDef.className || "", dense ? "py-1" : ""].filter(Boolean).join(" ")
233
- }, renderCellWithFallback(cell));
279
+ }, renderCellWithFallback(cell, fallbackText));
234
280
  }));
235
281
  });
236
- }, [data, loading, emptyState, table, dense]);
237
- var total = totalRows !== null && totalRows !== void 0 ? totalRows : 0;
282
+ // Depend on internal table state so selection/sorting changes trigger re-render
283
+ }, [loading, size, data, dense, table, rs, currentSorting, emptyState, leafCols, fallbackText]);
238
284
  return /*#__PURE__*/_react["default"].createElement("div", {
239
285
  className: parentClassName
240
- }, /*#__PURE__*/_react["default"].createElement("div", {
286
+ }, /*#__PURE__*/_react["default"].createElement(SkeletonCSS, null), /*#__PURE__*/_react["default"].createElement("div", {
241
287
  className: "table-responsive ".concat(nowrap ? "table-nowrap" : "", " ").concat(className)
242
288
  }, /*#__PURE__*/_react["default"].createElement("table", {
243
289
  className: ["table table-vcenter", stickyHeader ? "sticky-top" : "", dense ? "table-sm" : "", tableClassName].filter(Boolean).join(" ")
@@ -249,17 +295,8 @@ var TableV2 = exports.TableV2 = function TableV2(_ref5) {
249
295
  header: h
250
296
  });
251
297
  }));
252
- })), /*#__PURE__*/_react["default"].createElement("tbody", null, loading && /*#__PURE__*/_react["default"].createElement("tr", null, /*#__PURE__*/_react["default"].createElement("td", {
253
- colSpan: table.getAllLeafColumns().length,
254
- className: "text-center ".concat(dense ? "py-2" : "py-3")
255
- }, /*#__PURE__*/_react["default"].createElement("span", {
256
- className: "spinner-border spinner-border-sm me-2",
257
- role: "status",
258
- "aria-hidden": true
259
- }), /*#__PURE__*/_react["default"].createElement("span", {
260
- className: dense ? "small text-muted" : "text-muted"
261
- }, "Loading\u2026"))), content))), showPagination && /*#__PURE__*/_react["default"].createElement("div", {
262
- className: "d-flex justify-content-between align-items-center ".concat(dense ? "mt-1" : "mt-2", " ").concat(paginationClassName)
298
+ })), /*#__PURE__*/_react["default"].createElement("tbody", null, content))), showPagination && /*#__PURE__*/_react["default"].createElement("div", {
299
+ className: "d-flex justify-content-between align-items-center mx-2 ".concat(dense ? "my-1" : "my-2", " ").concat(paginationClassName)
263
300
  }, /*#__PURE__*/_react["default"].createElement("div", {
264
301
  className: "d-flex align-items-center ".concat(dense ? "gap-2" : "")
265
302
  }, /*#__PURE__*/_react["default"].createElement(Pager, {
@@ -334,6 +371,7 @@ TableV2.propTypes = {
334
371
  parentClassName: _propTypes["default"].string,
335
372
  emptyState: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].func]),
336
373
  loading: _propTypes["default"].bool,
374
+ // now shows skeleton pills per cell
337
375
  showPagination: _propTypes["default"].bool,
338
376
  pageSizeOptions: _propTypes["default"].arrayOf(_propTypes["default"].number),
339
377
  dense: _propTypes["default"].bool
@@ -352,7 +390,10 @@ TableV2.propTypes = {
352
390
  * onSizeChange={(n)=>{ setPage(1); setSize(n); }}
353
391
  * sorting={sorting}
354
392
  * onSortingChange={(next)=>{ setPage(1); setSorting(next); }}
355
- * loading={loading}
393
+ * rowSelection={rowSelection} // { [rowId]: true }
394
+ * onRowSelectionChange={setRowSelection}
395
+ * getRowId={(row) => row.id} // <<< stable id across pages
396
+ * loading={loading} // <<< skeletons instead of spinner row
356
397
  * nowrap
357
398
  * stickyHeader
358
399
  * />
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tabler-react-2",
3
- "version": "0.1.158",
3
+ "version": "0.1.160",
4
4
  "description": "A react implementation of Tabler ui",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {