tabler-react-2 0.1.171 → 0.1.173

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.
@@ -19,6 +19,18 @@ var Dropdown = exports.Dropdown = function Dropdown(_ref) {
19
19
  onclick();
20
20
  }
21
21
  };
22
+ var isPrimitive = function isPrimitive(val) {
23
+ return typeof val === "string" || typeof val === "number";
24
+ };
25
+ var getItemKey = function getItemKey(item, index) {
26
+ if ((item === null || item === void 0 ? void 0 : item.key) !== undefined && (item === null || item === void 0 ? void 0 : item.key) !== null) {
27
+ return item.key;
28
+ }
29
+ if ((item === null || item === void 0 ? void 0 : item.id) !== undefined && (item === null || item === void 0 ? void 0 : item.id) !== null) {
30
+ return item.id;
31
+ }
32
+ return index;
33
+ };
22
34
  return /*#__PURE__*/_react["default"].createElement("div", {
23
35
  className: "dropdown"
24
36
  }, /*#__PURE__*/_react["default"].createElement("a", {
@@ -29,21 +41,32 @@ var Dropdown = exports.Dropdown = function Dropdown(_ref) {
29
41
  }, prompt), /*#__PURE__*/_react["default"].createElement("div", {
30
42
  className: "dropdown-menu"
31
43
  }, items.map(function (item, index) {
44
+ var key = getItemKey(item, index);
32
45
  if (item.type === "divider") {
33
46
  return /*#__PURE__*/_react["default"].createElement("div", {
34
- key: index,
47
+ key: key,
35
48
  className: "dropdown-divider"
36
49
  });
37
50
  }
38
51
  if (item.type === "header") {
39
52
  return /*#__PURE__*/_react["default"].createElement("span", {
40
- key: index,
53
+ key: key,
41
54
  className: "dropdown-header"
42
55
  }, item.text);
43
56
  }
57
+ var hasInteraction = Boolean(item.href || item.onclick);
58
+ var shouldRenderAsStaticItem = !hasInteraction && !isPrimitive(item.text);
59
+ if (shouldRenderAsStaticItem) {
60
+ return /*#__PURE__*/_react["default"].createElement("div", {
61
+ key: key,
62
+ className: "dropdown-item"
63
+ }, item.icon && /*#__PURE__*/_react["default"].createElement("span", {
64
+ className: "dropdown-item-icon"
65
+ }, item.icon), item.text);
66
+ }
44
67
  return /*#__PURE__*/_react["default"].createElement("a", {
45
- key: index,
46
- href: item.href || "#",
68
+ key: key,
69
+ href: item.href || "javascript:void(0)",
47
70
  className: "dropdown-item".concat(item.active ? " active" : "").concat(item.disabled ? " disabled" : ""),
48
71
  onClick: function onClick(e) {
49
72
  return handleClick(e, item.onclick);
@@ -60,7 +83,9 @@ Dropdown.propTypes = {
60
83
  prompt: _propTypes["default"].string.isRequired,
61
84
  items: _propTypes["default"].arrayOf(_propTypes["default"].shape({
62
85
  type: _propTypes["default"].oneOf(["item", "divider", "header"]).isRequired,
63
- text: _propTypes["default"].string,
86
+ key: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
87
+ id: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
88
+ text: _propTypes["default"].node,
64
89
  href: _propTypes["default"].string,
65
90
  onclick: _propTypes["default"].func,
66
91
  disabled: _propTypes["default"].bool,
@@ -32,7 +32,6 @@ var Offcanvas = exports.Offcanvas = /*#__PURE__*/_react["default"].memo(function
32
32
  size = _ref$size === void 0 ? 300 : _ref$size,
33
33
  _ref$zIndex = _ref.zIndex,
34
34
  zIndex = _ref$zIndex === void 0 ? 1000 : _ref$zIndex;
35
- // backdrop style
36
35
  var backdropStyle = (0, _react.useMemo)(function () {
37
36
  return {
38
37
  position: "fixed",
@@ -43,9 +42,7 @@ var Offcanvas = exports.Offcanvas = /*#__PURE__*/_react["default"].memo(function
43
42
  backgroundColor: "rgba(0,0,0,0.1)",
44
43
  zIndex: zIndex - 1
45
44
  };
46
- }, []);
47
-
48
- // offcanvas container style
45
+ }, [zIndex]);
49
46
  var containerStyle = (0, _react.useMemo)(function () {
50
47
  var base = {
51
48
  position: "fixed",
@@ -91,7 +88,7 @@ var Offcanvas = exports.Offcanvas = /*#__PURE__*/_react["default"].memo(function
91
88
  transform: show ? "translateX(0)" : "translateX(-100%)"
92
89
  });
93
90
  }
94
- }, [position, show]);
91
+ }, [position, show, size, zIndex]);
95
92
  return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, show && /*#__PURE__*/_react["default"].createElement("div", {
96
93
  style: backdropStyle,
97
94
  onClick: onHide
@@ -103,13 +100,9 @@ var Offcanvas = exports.Offcanvas = /*#__PURE__*/_react["default"].memo(function
103
100
  });
104
101
  Offcanvas.displayName = "Offcanvas";
105
102
  Offcanvas.propTypes = {
106
- /** Show or hide the offcanvas */
107
103
  show: _propTypes["default"].bool.isRequired,
108
- /** Callback when the backdrop is clicked */
109
104
  onHide: _propTypes["default"].func.isRequired,
110
- /** Position: 'start' (left), 'end' (right), 'top', or 'bottom' */
111
105
  position: _propTypes["default"].oneOf(["start", "end", "top", "bottom"]),
112
- /** Content inside the offcanvas */
113
106
  children: _propTypes["default"].node
114
107
  };
115
108
  Offcanvas.defaultProps = {
@@ -127,10 +120,14 @@ var useOffcanvas = exports.useOffcanvas = function useOffcanvas() {
127
120
  _useState2 = _slicedToArray(_useState, 2),
128
121
  state = _useState2[0],
129
122
  setState = _useState2[1];
130
- var _useState3 = (0, _react.useState)(Math.random()),
123
+ var _useState3 = (0, _react.useState)(false),
131
124
  _useState4 = _slicedToArray(_useState3, 2),
132
- rand = _useState4[0],
133
- setRand = _useState4[1];
125
+ isMounted = _useState4[0],
126
+ setIsMounted = _useState4[1];
127
+ var _useState5 = (0, _react.useState)(Math.random()),
128
+ _useState6 = _slicedToArray(_useState5, 2),
129
+ rand = _useState6[0],
130
+ setRand = _useState6[1];
134
131
  var offcanvas = (0, _react.useCallback)(function () {
135
132
  var newOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
136
133
  return new Promise(function (resolve) {
@@ -143,6 +140,7 @@ var useOffcanvas = exports.useOffcanvas = function useOffcanvas() {
143
140
  position: (_newOptions$position = newOptions.position) !== null && _newOptions$position !== void 0 ? _newOptions$position : prev.position
144
141
  });
145
142
  });
143
+ setIsMounted(true); // mount instantly
146
144
  setRand(Math.random());
147
145
  });
148
146
  }, []);
@@ -157,11 +155,23 @@ var useOffcanvas = exports.useOffcanvas = function useOffcanvas() {
157
155
  });
158
156
  });
159
157
  }, [state.resolve]);
158
+
159
+ // Delay unmount by 500ms to allow animation
160
+ (0, _react.useEffect)(function () {
161
+ if (!state.show && isMounted) {
162
+ var timer = setTimeout(function () {
163
+ setIsMounted(false);
164
+ }, 500);
165
+ return function () {
166
+ return clearTimeout(timer);
167
+ };
168
+ }
169
+ }, [state.show, isMounted]);
160
170
  var OffcanvasElement = /*#__PURE__*/_react["default"].createElement(Offcanvas, _extends({
161
171
  show: state.show,
162
172
  onHide: close,
163
173
  position: state.position
164
- }, options.offcanvasProps || {}), /*#__PURE__*/_react["default"].createElement(_button.Button, {
174
+ }, options.offcanvasProps || {}), isMounted && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_button.Button, {
165
175
  type: "button",
166
176
  className: "btn-close",
167
177
  "aria-label": "Close",
@@ -173,7 +183,7 @@ var useOffcanvas = exports.useOffcanvas = function useOffcanvas() {
173
183
  }
174
184
  }), /*#__PURE__*/_react["default"].createElement("div", {
175
185
  key: rand
176
- }, state.content));
186
+ }, state.content)));
177
187
  return {
178
188
  offcanvas: offcanvas,
179
189
  OffcanvasElement: OffcanvasElement,