tabler-react-2 0.1.156 → 0.1.157

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
@@ -156,7 +156,7 @@ Object.keys(_index15).forEach(function (key) {
156
156
  }
157
157
  });
158
158
  });
159
- var _index16 = require("./timeline/index");
159
+ var _index16 = require("./table-v2/index");
160
160
  Object.keys(_index16).forEach(function (key) {
161
161
  if (key === "default" || key === "__esModule") return;
162
162
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
@@ -168,7 +168,7 @@ Object.keys(_index16).forEach(function (key) {
168
168
  }
169
169
  });
170
170
  });
171
- var _index17 = require("./input/index");
171
+ var _index17 = require("./timeline/index");
172
172
  Object.keys(_index17).forEach(function (key) {
173
173
  if (key === "default" || key === "__esModule") return;
174
174
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
@@ -180,7 +180,7 @@ Object.keys(_index17).forEach(function (key) {
180
180
  }
181
181
  });
182
182
  });
183
- var _index18 = require("./navbar/index");
183
+ var _index18 = require("./input/index");
184
184
  Object.keys(_index18).forEach(function (key) {
185
185
  if (key === "default" || key === "__esModule") return;
186
186
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
@@ -192,7 +192,7 @@ Object.keys(_index18).forEach(function (key) {
192
192
  }
193
193
  });
194
194
  });
195
- var _index19 = require("./segmentedControl/index");
195
+ var _index19 = require("./navbar/index");
196
196
  Object.keys(_index19).forEach(function (key) {
197
197
  if (key === "default" || key === "__esModule") return;
198
198
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
@@ -204,7 +204,7 @@ Object.keys(_index19).forEach(function (key) {
204
204
  }
205
205
  });
206
206
  });
207
- var _index20 = require("./offcanvas/index");
207
+ var _index20 = require("./segmentedControl/index");
208
208
  Object.keys(_index20).forEach(function (key) {
209
209
  if (key === "default" || key === "__esModule") return;
210
210
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
@@ -216,5 +216,17 @@ Object.keys(_index20).forEach(function (key) {
216
216
  }
217
217
  });
218
218
  });
219
+ var _index21 = require("./offcanvas/index");
220
+ Object.keys(_index21).forEach(function (key) {
221
+ if (key === "default" || key === "__esModule") return;
222
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
223
+ if (key in exports && exports[key] === _index21[key]) return;
224
+ Object.defineProperty(exports, key, {
225
+ enumerable: true,
226
+ get: function get() {
227
+ return _index21[key];
228
+ }
229
+ });
230
+ });
219
231
  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); }
220
232
  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; }
@@ -6,21 +6,29 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.Checkbox = void 0;
7
7
  var _react = _interopRequireDefault(require("react"));
8
8
  var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _classnames = _interopRequireDefault(require("classnames"));
10
+ var _excluded = ["value", "onChange", "label", "required", "className"];
9
11
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
12
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
13
+ function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
14
+ function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }
10
15
  var Checkbox = exports.Checkbox = function Checkbox(_ref) {
11
- var value = _ref.value,
16
+ var _ref$value = _ref.value,
17
+ value = _ref$value === void 0 ? false : _ref$value,
12
18
  _onChange = _ref.onChange,
13
19
  label = _ref.label,
14
20
  _ref$required = _ref.required,
15
- required = _ref$required === void 0 ? false : _ref$required;
16
- return /*#__PURE__*/_react["default"].createElement("label", {
17
- className: "form-check",
21
+ required = _ref$required === void 0 ? false : _ref$required,
22
+ className = _ref.className,
23
+ props = _objectWithoutProperties(_ref, _excluded);
24
+ return /*#__PURE__*/_react["default"].createElement("label", _extends({
25
+ className: (0, _classnames["default"])("form-check", className),
18
26
  style: {
19
27
  display: "flex",
20
28
  alignItems: "center",
21
29
  gap: 8
22
30
  }
23
- }, /*#__PURE__*/_react["default"].createElement("input", {
31
+ }, props), /*#__PURE__*/_react["default"].createElement("input", {
24
32
  className: "form-check-input",
25
33
  type: "checkbox",
26
34
  checked: value,
@@ -9,7 +9,7 @@ var _react = _interopRequireWildcard(require("react"));
9
9
  var _propTypes = _interopRequireDefault(require("prop-types"));
10
10
  var _spinner = require("../spinner");
11
11
  var _classnames = _interopRequireDefault(require("classnames"));
12
- var _excluded = ["type", "label", "placeholder", "value", "onChange", "onRawChange", "onInput", "icon", "iconPos", "loader", "separated", "prependedText", "appendedText", "appendedLinkText", "appendedLinkHref", "appendedLinkOnClick", "datalistItems", "variant", "size", "noMargin", "inputProps", "helpText", "helpTextPlacement", "helpPrompt", "required", "hint", "labelDescription", "autocomplete", "useTextarea", "invalid"];
12
+ var _excluded = ["type", "label", "placeholder", "value", "onChange", "onRawChange", "onInput", "onKeyDown", "icon", "iconPos", "loader", "separated", "prependedText", "appendedText", "appendedLinkText", "appendedLinkHref", "appendedLinkOnClick", "datalistItems", "variant", "size", "noMargin", "inputProps", "helpText", "helpTextPlacement", "helpPrompt", "required", "hint", "labelDescription", "autocomplete", "useTextarea", "invalid", "invalidText", "autoFocus"];
13
13
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
14
14
  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); }
15
15
  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; }
@@ -32,6 +32,7 @@ var Input = exports.Input = function Input(_ref) {
32
32
  onChange = _ref.onChange,
33
33
  onRawChange = _ref.onRawChange,
34
34
  onInput = _ref.onInput,
35
+ _onKeyDown = _ref.onKeyDown,
35
36
  icon = _ref.icon,
36
37
  _ref$iconPos = _ref.iconPos,
37
38
  iconPos = _ref$iconPos === void 0 ? "leading" : _ref$iconPos,
@@ -59,6 +60,8 @@ var Input = exports.Input = function Input(_ref) {
59
60
  _ref$useTextarea = _ref.useTextarea,
60
61
  useTextarea = _ref$useTextarea === void 0 ? false : _ref$useTextarea,
61
62
  invalid = _ref.invalid,
63
+ invalidText = _ref.invalidText,
64
+ autoFocus = _ref.autoFocus,
62
65
  props = _objectWithoutProperties(_ref, _excluded);
63
66
  // State for managing uncontrolled input value
64
67
  var _useState = (0, _react.useState)(controlledValue),
@@ -88,6 +91,12 @@ var Input = exports.Input = function Input(_ref) {
88
91
  onRawChange(e);
89
92
  }
90
93
  };
94
+ var inputRef = (0, _react.useRef)(null);
95
+ (0, _react.useEffect)(function () {
96
+ if (autoFocus && inputRef.current) {
97
+ inputRef.current.focus();
98
+ }
99
+ }, [autoFocus]);
91
100
  var renderInput = function renderInput() {
92
101
  return useTextarea ? /*#__PURE__*/_react["default"].createElement("textarea", _extends({
93
102
  className: (0, _classnames["default"])("form-control", variant && "border-".concat(variant), variant && "text-".concat(variant), variant && "bg-".concat(variant, "-lt"), size && "form-control-".concat(size), invalid && "is-invalid"),
@@ -96,7 +105,8 @@ var Input = exports.Input = function Input(_ref) {
96
105
  ,
97
106
  onChange: handleInputChange,
98
107
  list: datalistItems.length > 0 ? "datalist-options" : undefined,
99
- autoComplete: autocomplete
108
+ autoComplete: autocomplete,
109
+ ref: inputRef
100
110
  }, inputProps)) : /*#__PURE__*/_react["default"].createElement("input", _extends({
101
111
  type: type,
102
112
  className: (0, _classnames["default"])("form-control", variant && "border-".concat(variant), variant && "text-".concat(variant), variant && "bg-".concat(variant, "-lt"), size && "form-control-".concat(size), invalid && "is-invalid", props.inputClassName),
@@ -104,8 +114,12 @@ var Input = exports.Input = function Input(_ref) {
104
114
  value: value !== null && value !== void 0 ? value : "" // Always ensure value is a string
105
115
  ,
106
116
  onChange: handleInputChange,
117
+ onKeyDown: function onKeyDown(e) {
118
+ return _onKeyDown === null || _onKeyDown === void 0 ? void 0 : _onKeyDown(e);
119
+ },
107
120
  list: datalistItems.length > 0 ? "datalist-options" : undefined,
108
- autoComplete: autocomplete
121
+ autoComplete: autocomplete,
122
+ ref: inputRef
109
123
  }, inputProps));
110
124
  };
111
125
  return /*#__PURE__*/_react["default"].createElement("div", _extends({
@@ -148,13 +162,13 @@ var Input = exports.Input = function Input(_ref) {
148
162
  }, /*#__PURE__*/_react["default"].createElement(_spinner.Spinner, {
149
163
  size: "sm"
150
164
  }))) : prependedText || appendedText ? /*#__PURE__*/_react["default"].createElement("div", {
151
- className: "input-group input-group-flat ".concat(noMargin ? "" : "mb-3")
165
+ className: "input-group input-group-flat ".concat(invalid && "is-invalid")
152
166
  }, prependedText && /*#__PURE__*/_react["default"].createElement("span", {
153
167
  className: "input-group-text"
154
168
  }, prependedText), renderInput(), appendedText && /*#__PURE__*/_react["default"].createElement("span", {
155
169
  className: "input-group-text"
156
170
  }, appendedText)) : appendedLinkText ? /*#__PURE__*/_react["default"].createElement("div", {
157
- className: "input-group input-group-flat"
171
+ className: "input-group input-group-flat ".concat(invalid && "is-invalid")
158
172
  }, renderInput(), /*#__PURE__*/_react["default"].createElement("span", {
159
173
  className: "input-group-text"
160
174
  }, /*#__PURE__*/_react["default"].createElement("a", _extends({}, appendedLinkHref ? {
@@ -174,7 +188,9 @@ var Input = exports.Input = function Input(_ref) {
174
188
  }, item);
175
189
  }))), hint && /*#__PURE__*/_react["default"].createElement("div", {
176
190
  className: "form-hint"
177
- }, hint));
191
+ }, hint), invalidText && invalid && /*#__PURE__*/_react["default"].createElement("div", {
192
+ className: "invalid-feedback"
193
+ }, invalidText));
178
194
  };
179
195
  Input.propTypes = {
180
196
  type: _propTypes["default"].string,
@@ -192,5 +208,18 @@ Input.propTypes = {
192
208
  appendedLinkText: _propTypes["default"].string,
193
209
  appendedLinkHref: _propTypes["default"].string,
194
210
  appendedLinkOnClick: _propTypes["default"].func,
195
- datalistItems: _propTypes["default"].arrayOf(_propTypes["default"].string)
211
+ datalistItems: _propTypes["default"].arrayOf(_propTypes["default"].string),
212
+ autoFocus: _propTypes["default"].bool,
213
+ onKeyDown: _propTypes["default"].func,
214
+ inputProps: _propTypes["default"].object,
215
+ helpText: _propTypes["default"].string,
216
+ helpTextPlacement: _propTypes["default"].string,
217
+ helpPrompt: _propTypes["default"].string,
218
+ required: _propTypes["default"].bool,
219
+ hint: _propTypes["default"].string,
220
+ labelDescription: _propTypes["default"].string,
221
+ autocomplete: _propTypes["default"].string,
222
+ useTextarea: _propTypes["default"].bool,
223
+ invalid: _propTypes["default"].bool,
224
+ invalidText: _propTypes["default"].string
196
225
  };
@@ -6,8 +6,12 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.Steps = void 0;
7
7
  var _react = _interopRequireDefault(require("react"));
8
8
  var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _classnames = _interopRequireDefault(require("classnames"));
10
+ var _excluded = ["steps", "color", "variant", "numbered", "hideText", "vertical", "className"];
9
11
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
10
12
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
13
+ function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
14
+ function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }
11
15
  var Steps = exports.Steps = function Steps(_ref) {
12
16
  var steps = _ref.steps,
13
17
  passedColor = _ref.color,
@@ -17,12 +21,14 @@ var Steps = exports.Steps = function Steps(_ref) {
17
21
  _ref$hideText = _ref.hideText,
18
22
  hideText = _ref$hideText === void 0 ? false : _ref$hideText,
19
23
  _ref$vertical = _ref.vertical,
20
- vertical = _ref$vertical === void 0 ? false : _ref$vertical;
24
+ vertical = _ref$vertical === void 0 ? false : _ref$vertical,
25
+ className = _ref.className,
26
+ props = _objectWithoutProperties(_ref, _excluded);
21
27
  var color = passedColor || passedVariant;
22
28
  var stepClass = "steps ".concat(color ? "steps-".concat(color) : "", " ").concat(numbered ? "steps-counter" : "", " ").concat(vertical ? "steps-vertical" : "");
23
- return /*#__PURE__*/_react["default"].createElement("ul", {
24
- className: stepClass
25
- }, steps.map(function (step, index) {
29
+ return /*#__PURE__*/_react["default"].createElement("ul", _extends({
30
+ className: (0, _classnames["default"])(stepClass, className)
31
+ }, props), steps.map(function (step, index) {
26
32
  var stepClasses = "step-item ".concat(step.active ? "active" : "");
27
33
  var stepContent = hideText ? "" : step.text;
28
34
  var tooltip = step.tooltip ? {
@@ -5,9 +5,16 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.Table = exports.IconSortDescending = exports.IconSortAscending = exports.IconArrowsSort = void 0;
8
+ Object.defineProperty(exports, "useTable", {
9
+ enumerable: true,
10
+ get: function get() {
11
+ return _useTable.useTable;
12
+ }
13
+ });
8
14
  var _react = _interopRequireWildcard(require("react"));
9
15
  var _propTypes = _interopRequireDefault(require("prop-types"));
10
16
  var _index = require("../index");
17
+ var _useTable = require("./useTable");
11
18
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
12
19
  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
20
  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; }
@@ -120,6 +127,21 @@ var Table = exports.Table = function Table(_ref4) {
120
127
  showPagination = _ref4$showPagination === void 0 ? false : _ref4$showPagination,
121
128
  _ref4$defaultRowsPerP = _ref4.defaultRowsPerPage,
122
129
  defaultRowsPerPage = _ref4$defaultRowsPerP === void 0 ? 10 : _ref4$defaultRowsPerP,
130
+ page = _ref4.page,
131
+ rowsPerPage = _ref4.rowsPerPage,
132
+ size = _ref4.size,
133
+ totalRows = _ref4.totalRows,
134
+ onPageChange = _ref4.onPageChange,
135
+ onRowsPerPageChange = _ref4.onRowsPerPageChange,
136
+ onSetPage = _ref4.onSetPage,
137
+ onSetSize = _ref4.onSetSize,
138
+ orderBy = _ref4.orderBy,
139
+ order = _ref4.order,
140
+ onSetOrder = _ref4.onSetOrder,
141
+ _ref4$loading = _ref4.loading,
142
+ loading = _ref4$loading === void 0 ? false : _ref4$loading,
143
+ _ref4$pageSizeOptions = _ref4.pageSizeOptions,
144
+ pageSizeOptions = _ref4$pageSizeOptions === void 0 ? [10, 25, 50, 100] : _ref4$pageSizeOptions,
123
145
  _ref4$tableClassName = _ref4.tableClassName,
124
146
  tableClassName = _ref4$tableClassName === void 0 ? "" : _ref4$tableClassName,
125
147
  _ref4$paginationClass = _ref4.paginationClassName,
@@ -141,22 +163,55 @@ var Table = exports.Table = function Table(_ref4) {
141
163
  _useState6 = _slicedToArray(_useState5, 2),
142
164
  pageSize = _useState6[0],
143
165
  setPageSize = _useState6[1];
166
+
167
+ // Determine controlled vs uncontrolled values
168
+ var isPageControlled = typeof page === "number" && page > 0;
169
+ var isPageSizeControlled = typeof size === "number" && size > 0 || typeof rowsPerPage === "number" && rowsPerPage > 0;
170
+ var useExternalPagination = isPageControlled || isPageSizeControlled || typeof totalRows === "number" || typeof onSetPage === "function" || typeof onSetSize === "function" || typeof onPageChange === "function" || typeof onRowsPerPageChange === "function";
171
+ var effectivePage = isPageControlled ? page : currentPage;
172
+ var effectivePageSize = isPageSizeControlled ? typeof size === "number" && size > 0 ? size : rowsPerPage : pageSize;
144
173
  var defaultSortFn = function defaultSortFn(a, b) {
145
174
  if (a === b) return 0;
146
175
  return a > b ? 1 : -1;
147
176
  };
148
177
  var handleSort = function handleSort(accessor, sortFn) {
149
- var direction = "asc";
150
- if (sortConfig.key === accessor && sortConfig.direction === "asc") {
151
- direction = "desc";
178
+ var isSortControlled = typeof orderBy === "string" || typeof onSetOrder === "function";
179
+ if (isSortControlled) {
180
+ var currentKey = typeof orderBy === "string" ? orderBy : null;
181
+ var currentDir = order === "desc" ? "desc" : "asc";
182
+ var nextDir = "asc";
183
+ if (currentKey === accessor) {
184
+ nextDir = currentDir === "asc" ? "desc" : "asc";
185
+ }
186
+ if (typeof onSetOrder === "function") {
187
+ onSetOrder(accessor, nextDir);
188
+ }
189
+ } else {
190
+ var direction = "asc";
191
+ if (sortConfig.key === accessor && sortConfig.direction === "asc") {
192
+ direction = "desc";
193
+ }
194
+ setSortConfig({
195
+ key: accessor,
196
+ direction: direction
197
+ });
198
+ }
199
+ if (useExternalPagination) {
200
+ if (typeof onSetPage === "function") {
201
+ onSetPage(1);
202
+ } else if (typeof onPageChange === "function") {
203
+ onPageChange(1);
204
+ } else {
205
+ setCurrentPage(1);
206
+ }
207
+ } else {
208
+ setCurrentPage(1);
152
209
  }
153
- setSortConfig({
154
- key: accessor,
155
- direction: direction
156
- });
157
- setCurrentPage(1);
158
210
  };
159
211
  var sortedData = (0, _react.useMemo)(function () {
212
+ // If sorting is controlled externally, do not sort here
213
+ var isSortControlled = typeof orderBy === "string" || typeof onSetOrder === "function";
214
+ if (isSortControlled) return data;
160
215
  if (!sortConfig.key) return data;
161
216
  var key = sortConfig.key,
162
217
  direction = sortConfig.direction;
@@ -170,27 +225,44 @@ var Table = exports.Table = function Table(_ref4) {
170
225
  var bValue = getValueByAccessor(b, key);
171
226
  return sortFunction(aValue, bValue) * order;
172
227
  });
173
- }, [data, sortConfig, columns]);
174
- var pageSizeOptions = [10, 25, 50, 100];
228
+ }, [data, sortConfig, columns, orderBy, order, onSetOrder]);
229
+ var totalRowCount = (0, _react.useMemo)(function () {
230
+ return useExternalPagination ? totalRows !== null && totalRows !== void 0 ? totalRows : data.length : sortedData.length;
231
+ }, [useExternalPagination, totalRows, data.length, sortedData]);
175
232
  var totalPages = (0, _react.useMemo)(function () {
176
- return Math.max(1, Math.ceil(sortedData.length / pageSize));
177
- }, [sortedData, pageSize]);
233
+ return Math.max(1, Math.ceil((totalRowCount || 0) / (effectivePageSize || 1)));
234
+ }, [totalRowCount, effectivePageSize]);
178
235
  var paginatedData = (0, _react.useMemo)(function () {
179
236
  if (!showPagination) return sortedData;
180
- var start = (currentPage - 1) * pageSize;
181
- return sortedData.slice(start, start + pageSize);
182
- }, [sortedData, currentPage, pageSize, showPagination]);
237
+ if (useExternalPagination) return sortedData; // data is already paginated externally
238
+ var start = (effectivePage - 1) * effectivePageSize;
239
+ return sortedData.slice(start, start + effectivePageSize);
240
+ }, [sortedData, effectivePage, effectivePageSize, showPagination, useExternalPagination]);
183
241
  var getSortIcon = function getSortIcon(column) {
184
- if (sortConfig.key === column.accessor) {
185
- return sortConfig.direction === "asc" ? /*#__PURE__*/_react["default"].createElement(IconSortAscending, {
242
+ var isSortControlled = typeof orderBy === "string" || typeof onSetOrder === "function";
243
+ if (isSortControlled) {
244
+ if (orderBy === column.accessor) {
245
+ return order === "desc" ? /*#__PURE__*/_react["default"].createElement(IconSortDescending, {
246
+ size: 16
247
+ }) : /*#__PURE__*/_react["default"].createElement(IconSortAscending, {
248
+ size: 16
249
+ });
250
+ }
251
+ return /*#__PURE__*/_react["default"].createElement(IconArrowsSort, {
186
252
  size: 16
187
- }) : /*#__PURE__*/_react["default"].createElement(IconSortDescending, {
253
+ });
254
+ } else {
255
+ if (sortConfig.key === column.accessor) {
256
+ return sortConfig.direction === "asc" ? /*#__PURE__*/_react["default"].createElement(IconSortAscending, {
257
+ size: 16
258
+ }) : /*#__PURE__*/_react["default"].createElement(IconSortDescending, {
259
+ size: 16
260
+ });
261
+ }
262
+ return /*#__PURE__*/_react["default"].createElement(IconArrowsSort, {
188
263
  size: 16
189
264
  });
190
265
  }
191
- return /*#__PURE__*/_react["default"].createElement(IconArrowsSort, {
192
- size: 16
193
- });
194
266
  };
195
267
  return /*#__PURE__*/_react["default"].createElement("div", {
196
268
  className: parentClassName
@@ -202,11 +274,11 @@ var Table = exports.Table = function Table(_ref4) {
202
274
  return /*#__PURE__*/_react["default"].createElement("th", {
203
275
  key: idx,
204
276
  className: "".concat(column.className || "", " ").concat(column.sortable ? "sortable" : ""),
205
- onClick: column.sortable ? function () {
277
+ onClick: column.sortable && !loading ? function () {
206
278
  return handleSort(column.accessor, column.sortFn);
207
279
  } : undefined,
208
280
  style: {
209
- cursor: column.sortable ? "pointer" : "default"
281
+ cursor: column.sortable && !loading ? "pointer" : "default"
210
282
  }
211
283
  }, column.icon && /*#__PURE__*/_react["default"].createElement("span", {
212
284
  style: {
@@ -217,7 +289,10 @@ var Table = exports.Table = function Table(_ref4) {
217
289
  marginRight: 8
218
290
  }
219
291
  }, column.label), column.sortable && getSortIcon(column));
220
- }))), /*#__PURE__*/_react["default"].createElement("tbody", null, paginatedData.map(function (row, rowIndex) {
292
+ }))), /*#__PURE__*/_react["default"].createElement("tbody", null, loading && /*#__PURE__*/_react["default"].createElement("tr", null, /*#__PURE__*/_react["default"].createElement("td", {
293
+ colSpan: columns.length,
294
+ className: "text-center py-3"
295
+ }, /*#__PURE__*/_react["default"].createElement(_index.Spinner, null))), paginatedData.map(function (row, rowIndex) {
221
296
  return /*#__PURE__*/_react["default"].createElement("tr", {
222
297
  key: rowIndex
223
298
  }, columns.map(function (column, colIndex) {
@@ -230,18 +305,24 @@ var Table = exports.Table = function Table(_ref4) {
230
305
  className: "d-flex justify-content-between align-items-center mt-2 ".concat(paginationClassName)
231
306
  }, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_index.Button, {
232
307
  onClick: function onClick() {
233
- return setCurrentPage(function (p) {
234
- return Math.max(p - 1, 1);
235
- });
308
+ var prev = Math.max(effectivePage - 1, 1);
309
+ if (useExternalPagination) {
310
+ if (typeof onSetPage === "function") return onSetPage(prev);
311
+ if (typeof onPageChange === "function") return onPageChange(prev);
312
+ }
313
+ setCurrentPage(prev);
236
314
  },
237
- disabled: currentPage === 1
315
+ disabled: loading || effectivePage === 1
238
316
  }, "Previous"), /*#__PURE__*/_react["default"].createElement(_index.Button, {
239
317
  onClick: function onClick() {
240
- return setCurrentPage(function (p) {
241
- return Math.min(p + 1, totalPages);
242
- });
318
+ var next = Math.min(effectivePage + 1, totalPages);
319
+ if (useExternalPagination) {
320
+ if (typeof onSetPage === "function") return onSetPage(next);
321
+ if (typeof onPageChange === "function") return onPageChange(next);
322
+ }
323
+ setCurrentPage(next);
243
324
  },
244
- disabled: currentPage === totalPages,
325
+ disabled: loading || effectivePage === totalPages,
245
326
  style: {
246
327
  marginLeft: 8
247
328
  }
@@ -249,11 +330,16 @@ var Table = exports.Table = function Table(_ref4) {
249
330
  style: {
250
331
  marginLeft: 16
251
332
  }
252
- }, "Page ", currentPage, " of ", totalPages), /*#__PURE__*/_react["default"].createElement("span", {
333
+ }, "Page ", effectivePage, " of ", totalPages), /*#__PURE__*/_react["default"].createElement("span", {
253
334
  style: {
254
335
  marginLeft: 16
255
336
  }
256
- }, "Showing ", (currentPage - 1) * pageSize + 1, " to", " ", Math.min(currentPage * pageSize, sortedData.length), " of", " ", sortedData.length, " rows")), /*#__PURE__*/_react["default"].createElement(_index.DropdownInput, {
337
+ }, function () {
338
+ var hasData = paginatedData.length > 0;
339
+ var startIndex = hasData ? (effectivePage - 1) * effectivePageSize + 1 : 0;
340
+ var endIndex = hasData ? startIndex + paginatedData.length - 1 : 0;
341
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, "Showing ", startIndex, " to ", endIndex, " of ", totalRowCount || 0, " rows");
342
+ }())), /*#__PURE__*/_react["default"].createElement(_index.DropdownInput, {
257
343
  prompt: "Rows per page",
258
344
  items: pageSizeOptions.map(function (size) {
259
345
  return {
@@ -261,7 +347,13 @@ var Table = exports.Table = function Table(_ref4) {
261
347
  label: size
262
348
  };
263
349
  }),
350
+ value: effectivePageSize,
351
+ disabled: loading,
264
352
  onChange: function onChange(selected) {
353
+ if (useExternalPagination) {
354
+ if (typeof onSetSize === "function") return onSetSize(selected.id);
355
+ if (typeof onRowsPerPageChange === "function") return onRowsPerPageChange(selected.id);
356
+ }
265
357
  setPageSize(selected.id);
266
358
  setCurrentPage(1);
267
359
  }
@@ -282,5 +374,21 @@ Table.propTypes = {
282
374
  stickyHeader: _propTypes["default"].bool,
283
375
  className: _propTypes["default"].string,
284
376
  showPagination: _propTypes["default"].bool,
285
- defaultRowsPerPage: _propTypes["default"].number
377
+ defaultRowsPerPage: _propTypes["default"].number,
378
+ // external pagination
379
+ page: _propTypes["default"].number,
380
+ rowsPerPage: _propTypes["default"].number,
381
+ size: _propTypes["default"].number,
382
+ totalRows: _propTypes["default"].number,
383
+ onPageChange: _propTypes["default"].func,
384
+ onRowsPerPageChange: _propTypes["default"].func,
385
+ onSetPage: _propTypes["default"].func,
386
+ onSetSize: _propTypes["default"].func,
387
+ pageSizeOptions: _propTypes["default"].arrayOf(_propTypes["default"].number),
388
+ // external ordering
389
+ orderBy: _propTypes["default"].string,
390
+ order: _propTypes["default"].oneOf(["asc", "desc"]),
391
+ onSetOrder: _propTypes["default"].func,
392
+ // loading
393
+ loading: _propTypes["default"].bool
286
394
  };