@nutui/nutui-react 2.0.0-alpha.1 → 2.0.0-alpha.2

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,11 +28,10 @@ import { Check } from "@nutui/icons-react";
28
28
  import { O as Overlay } from "./overlay2.js";
29
29
  import { C as ComponentDefaults } from "./typings.js";
30
30
  var defaultProps = _objectSpread(_objectSpread({}, ComponentDefaults), {}, {
31
- className: "",
32
- style: {},
33
31
  columns: 1,
34
32
  direction: "down",
35
- optionsIcon: null,
33
+ icon: null,
34
+ closeOnClickAway: false,
36
35
  activeTitleClass: "",
37
36
  inactiveTitleClass: "",
38
37
  onChange: function onChange(value) {
@@ -40,20 +39,18 @@ var defaultProps = _objectSpread(_objectSpread({}, ComponentDefaults), {}, {
40
39
  }
41
40
  });
42
41
  var MenuItem = forwardRef(function(props, ref) {
43
- var mergedProps = _objectSpread(_objectSpread({}, defaultProps), props);
44
- var _defaultProps$props = _objectSpread(_objectSpread({}, defaultProps), props), style = _defaultProps$props.style, options = _defaultProps$props.options, value = _defaultProps$props.value, columns = _defaultProps$props.columns, title = _defaultProps$props.title, optionsIcon = _defaultProps$props.optionsIcon, direction = _defaultProps$props.direction, onChange2 = _defaultProps$props.onChange, activeTitleClass = _defaultProps$props.activeTitleClass, inactiveTitleClass = _defaultProps$props.inactiveTitleClass, children = _defaultProps$props.children;
45
- var activeColor = mergedProps.activeColor, showPopup = mergedProps.showPopup, parent = mergedProps.parent, orderKey = mergedProps.orderKey;
46
- var _useState = useState(showPopup), _useState2 = _slicedToArray(_useState, 2), _showPopup = _useState2[0], setShowPopup = _useState2[1];
42
+ var _defaultProps$props = _objectSpread(_objectSpread({}, defaultProps), props), className = _defaultProps$props.className, style = _defaultProps$props.style, options = _defaultProps$props.options, value = _defaultProps$props.value, columns = _defaultProps$props.columns, title = _defaultProps$props.title, icon = _defaultProps$props.icon, direction = _defaultProps$props.direction, onChange2 = _defaultProps$props.onChange, activeTitleClass = _defaultProps$props.activeTitleClass, inactiveTitleClass = _defaultProps$props.inactiveTitleClass, closeOnClickAway = _defaultProps$props.closeOnClickAway, children = _defaultProps$props.children, activeColor = _defaultProps$props.activeColor, show = _defaultProps$props.show, parent = _defaultProps$props.parent, index = _defaultProps$props.index;
43
+ var _useState = useState(show), _useState2 = _slicedToArray(_useState, 2), _showPopup = _useState2[0], setShowPopup = _useState2[1];
47
44
  var _useState3 = useState(value), _useState4 = _slicedToArray(_useState3, 2), _value = _useState4[0], setValue = _useState4[1];
48
45
  useEffect(function() {
49
- setShowPopup(showPopup);
50
- }, [showPopup]);
46
+ setShowPopup(show);
47
+ }, [show]);
51
48
  useEffect(function() {
52
49
  getParentOffset();
53
50
  }, [_showPopup]);
54
51
  useImperativeHandle(ref, function() {
55
52
  return {
56
- toggle: parent.toggleItemShow
53
+ toggle: parent.toggleMenuItem
57
54
  };
58
55
  });
59
56
  var getIconCName = function getIconCName2(optionVal, value2) {
@@ -62,11 +59,11 @@ var MenuItem = forwardRef(function(props, ref) {
62
59
  };
63
60
  var setTitle = function setTitle2(text) {
64
61
  if (!title) {
65
- parent.updateTitle(text, orderKey);
62
+ parent.updateTitle(text, index);
66
63
  }
67
64
  };
68
65
  var handleClick = function handleClick2(item) {
69
- parent.toggleItemShow(orderKey);
66
+ parent.toggleMenuItem(index);
70
67
  setTitle(item.text);
71
68
  setValue(item.value);
72
69
  onChange2 && onChange2(item);
@@ -77,7 +74,7 @@ var MenuItem = forwardRef(function(props, ref) {
77
74
  }), _useState6 = _slicedToArray(_useState5, 2), position = _useState6[0], setPosition = _useState6[1];
78
75
  var getParentOffset = function getParentOffset2() {
79
76
  setTimeout(function() {
80
- var p = parent.parent().current;
77
+ var p = parent.menuRef.current;
81
78
  var rect = p.getBoundingClientRect();
82
79
  setPosition({
83
80
  height: rect.height,
@@ -102,42 +99,47 @@ var MenuItem = forwardRef(function(props, ref) {
102
99
  };
103
100
  var placeholderStyle = function placeholderStyle2() {
104
101
  if (direction === "down") {
105
- return _objectSpread(_objectSpread({
106
- height: "".concat(position.top + position.height, "px")
107
- }, isShow()), style);
102
+ return _objectSpread({
103
+ height: "".concat(position.top + position.height, "px"),
104
+ top: 0
105
+ }, isShow());
108
106
  }
109
- return _objectSpread(_objectSpread({
107
+ return _objectSpread({
110
108
  height: "".concat(window.innerHeight - position.top, "px"),
109
+ bottom: "0px",
111
110
  top: "auto"
112
- }, isShow()), style);
111
+ }, isShow());
113
112
  };
114
- return React__default.createElement(React__default.Fragment, null, React__default.createElement("div", {
113
+ return React__default.createElement(React__default.Fragment, null, closeOnClickAway ? React__default.createElement("div", {
115
114
  className: "placeholder-element ".concat(classNames({
116
115
  up: direction === "up"
117
116
  })),
118
117
  style: placeholderStyle(),
119
118
  onClick: function onClick() {
120
- return parent.toggleItemShow(orderKey);
119
+ return parent.toggleMenuItem(index);
121
120
  }
122
- }), React__default.createElement(Overlay, {
121
+ }) : null, React__default.createElement(Overlay, {
123
122
  className: "nut-menu__overlay",
124
123
  style: getPosition(),
125
124
  lockScroll: parent.lockScroll,
126
125
  visible: _showPopup,
127
- closeOnOverlayClick: parent.closeOnClickOverlay,
126
+ closeOnOverlayClick: parent.closeOnOverlayClick,
128
127
  onClick: function onClick() {
129
- parent.closeOnClickOverlay && parent.toggleItemShow(orderKey);
128
+ parent.closeOnOverlayClick && parent.toggleMenuItem(index);
130
129
  }
131
130
  }), React__default.createElement("div", {
132
- className: direction === "down" ? "nut-menu-item__wrap" : "nut-menu-item__wrap-up",
133
- style: _objectSpread({}, isShow())
131
+ className: classNames(className, {
132
+ "nut-menu-item__wrap": direction === "down",
133
+ "nut-menu-item__wrap-up": direction !== "down"
134
+ }),
135
+ style: _objectSpread(_objectSpread({}, style), isShow())
134
136
  }, React__default.createElement(CSSTransition, {
135
137
  "in": _showPopup,
136
138
  timeout: 100,
137
139
  classNames: direction === "down" ? "menu-item" : "menu-item-up"
138
140
  }, React__default.createElement("div", {
139
141
  className: "nut-menu-item__content"
140
- }, options === null || options === void 0 ? void 0 : options.map(function(item, index) {
142
+ }, options === null || options === void 0 ? void 0 : options.map(function(item, index2) {
141
143
  return React__default.createElement("div", {
142
144
  className: "nut-menu-item__option ".concat(classNames({
143
145
  active: item.value === _value
@@ -149,7 +151,7 @@ var MenuItem = forwardRef(function(props, ref) {
149
151
  onClick: function onClick() {
150
152
  handleClick(item);
151
153
  }
152
- }, item.value === _value ? React__default.createElement("i", null, optionsIcon || React__default.createElement(Check, {
154
+ }, item.value === _value ? React__default.createElement("i", null, icon || React__default.createElement(Check, {
153
155
  color: activeColor,
154
156
  className: getIconCName(item.value, value)
155
157
  })) : null, React__default.createElement("div", {
@@ -22,35 +22,21 @@ function _objectSpread(target) {
22
22
  }
23
23
  import React__default from "react";
24
24
  import classNames from "classnames";
25
- import { Left } from "@nutui/icons-react";
26
- import { c as cn } from "./bem.js";
27
25
  import { C as ComponentDefaults } from "./typings.js";
28
- import "@bem-react/classname";
29
26
  var defaultProps = _objectSpread(_objectSpread({}, ComponentDefaults), {}, {
30
- title: "",
31
- description: "",
32
- leftShow: true,
33
- className: "",
34
- leftText: "",
27
+ left: "",
28
+ right: "",
29
+ back: "",
35
30
  fixed: false,
36
31
  safeAreaInsetTop: false,
37
- border: false,
38
32
  placeholder: false,
39
- zIndex: 10,
40
- style: {}
33
+ zIndex: 10
41
34
  });
42
35
  var NavBar = function NavBar2(props) {
43
36
  var _classNames;
44
- var _defaultProps$props = _objectSpread(_objectSpread({}, defaultProps), props), description = _defaultProps$props.description, title = _defaultProps$props.title, leftShow = _defaultProps$props.leftShow, className = _defaultProps$props.className, style = _defaultProps$props.style, leftText = _defaultProps$props.leftText, fixed = _defaultProps$props.fixed, safeAreaInsetTop = _defaultProps$props.safeAreaInsetTop, border = _defaultProps$props.border, placeholder = _defaultProps$props.placeholder, zIndex = _defaultProps$props.zIndex, onClickTitle = _defaultProps$props.onClickTitle, onClickIcon = _defaultProps$props.onClickIcon, onClickBack = _defaultProps$props.onClickBack, onClickRight = _defaultProps$props.onClickRight;
45
- var b = cn("navbar");
37
+ var _defaultProps$props = _objectSpread(_objectSpread({}, defaultProps), props), right = _defaultProps$props.right, left = _defaultProps$props.left, className = _defaultProps$props.className, style = _defaultProps$props.style, back = _defaultProps$props.back, fixed = _defaultProps$props.fixed, safeAreaInsetTop = _defaultProps$props.safeAreaInsetTop, placeholder = _defaultProps$props.placeholder, zIndex = _defaultProps$props.zIndex, onClickBack = _defaultProps$props.onClickBack;
38
+ var classPrefix = "nut-navbar";
46
39
  var children = Array.isArray(props.children) ? props.children : [props.children];
47
- var slot = children.reduce(function(slot2, item) {
48
- var data = slot2;
49
- if (item && item.props) {
50
- data[item.props.slot] = item.props.children;
51
- }
52
- return data;
53
- }, {});
54
40
  var styles = function styles2() {
55
41
  return _objectSpread(_objectSpread({}, style), {}, {
56
42
  zIndex
@@ -58,40 +44,23 @@ var NavBar = function NavBar2(props) {
58
44
  };
59
45
  var renderLeft = function renderLeft2() {
60
46
  return React__default.createElement("div", {
61
- className: "".concat(b("left")),
47
+ className: "".concat(classPrefix, "__left")
48
+ }, back && React__default.createElement("div", {
49
+ className: "".concat(classPrefix, "__left__back"),
62
50
  onClick: function onClick(e) {
63
51
  return onClickBack(e);
64
52
  }
65
- }, leftShow && React__default.createElement(Left, {
66
- name: "left",
67
- color: "#979797"
68
- }), leftText && React__default.createElement("div", {
69
- className: "".concat(b("text"))
70
- }, leftText), slot.left);
53
+ }, back), left);
71
54
  };
72
55
  var renderContent = function renderContent2() {
73
56
  return React__default.createElement("div", {
74
- className: "".concat(b("title"))
75
- }, title && React__default.createElement("div", {
76
- className: "title",
77
- onClick: function onClick(e) {
78
- return onClickTitle(e);
79
- }
80
- }, title), slot.titleIcon && React__default.createElement("div", {
81
- onClick: function onClick(e) {
82
- return onClickIcon(e);
83
- }
84
- }, slot.titleIcon), slot.content);
57
+ className: "".concat(classPrefix, "__title")
58
+ }, children);
85
59
  };
86
60
  var renderRight = function renderRight2() {
87
61
  return React__default.createElement("div", {
88
- className: "".concat(b("right")),
89
- onClick: function onClick(e) {
90
- return onClickRight(e);
91
- }
92
- }, description && React__default.createElement("div", {
93
- className: "".concat(b("text"))
94
- }, description), slot.right);
62
+ className: "".concat(classPrefix, "__right")
63
+ }, right);
95
64
  };
96
65
  var renderWrapper = function renderWrapper2() {
97
66
  return React__default.createElement("div", {
@@ -99,10 +68,10 @@ var NavBar = function NavBar2(props) {
99
68
  style: styles()
100
69
  }, renderLeft(), renderContent(), renderRight());
101
70
  };
102
- var classes = classNames((_classNames = {}, _defineProperty(_classNames, "nut-navbar--border", border), _defineProperty(_classNames, "nut-navbar--fixed", fixed), _defineProperty(_classNames, "nut-navbar--safe-area-inset-top", safeAreaInsetTop), _classNames));
103
- var cls = classNames(b(""), classes, className);
71
+ var classes = classNames((_classNames = {}, _defineProperty(_classNames, "".concat(classPrefix, "--fixed"), fixed), _defineProperty(_classNames, "".concat(classPrefix, "--safe-area-inset-top"), safeAreaInsetTop), _classNames));
72
+ var cls = classNames(classPrefix, classes, className);
104
73
  return React__default.createElement(React__default.Fragment, null, fixed && placeholder ? React__default.createElement("div", {
105
- className: "".concat(b(""), "--placeholder")
74
+ className: "".concat(classPrefix, "--placeholder")
106
75
  }, renderWrapper()) : renderWrapper());
107
76
  };
108
77
  NavBar.defaultProps = defaultProps;
@@ -1,6 +1,6 @@
1
1
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
2
2
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
- var _excluded = ["className", "style", "isShowPercentage", "percentage", "fillColor", "strokeColor", "strokeWidth", "size", "textColor", "textWidth", "showText", "textInside", "textBackground", "textType", "status", "icon", "children"];
3
+ var _excluded = ["className", "style", "percent", "background", "color", "strokeWidth", "showText", "animated", "children"];
4
4
  function ownKeys(object, enumerableOnly) {
5
5
  var keys = Object.keys(object);
6
6
  if (Object.getOwnPropertySymbols) {
@@ -24,93 +24,45 @@ function _objectSpread(target) {
24
24
  }
25
25
  import React__default from "react";
26
26
  import classNames from "classnames";
27
- import { Checked } from "@nutui/icons-react";
28
- import { c as cn } from "./bem.js";
29
27
  import { C as ComponentDefaults } from "./typings.js";
30
- import "@bem-react/classname";
31
28
  var defaultProps = _objectSpread(_objectSpread({}, ComponentDefaults), {}, {
32
- className: "",
33
- style: {},
34
- isShowPercentage: true,
35
- percentage: 0,
36
- fillColor: "#f3f3f3",
37
- strokeColor: "linear-gradient(135deg, #fa2c19 0%, #fa6419 100%)",
38
- strokeWidth: "",
39
- textColor: "",
40
- textWidth: "",
41
- showText: true,
42
- textInside: false,
43
- textBackground: "linear-gradient(135deg, #fa2c19 0%, #fa6419 100%)",
44
- textType: "text",
45
- status: false,
46
- icon: null,
47
- children: void 0
29
+ percent: 0,
30
+ showText: false,
31
+ animated: false
48
32
  });
49
33
  var Progress = function Progress2(props) {
50
- var _classNames, _classNames2, _classNames4;
51
- var _defaultProps$props = _objectSpread(_objectSpread({}, defaultProps), props), className = _defaultProps$props.className, style = _defaultProps$props.style, isShowPercentage = _defaultProps$props.isShowPercentage, percentage = _defaultProps$props.percentage, fillColor = _defaultProps$props.fillColor, strokeColor = _defaultProps$props.strokeColor, strokeWidth = _defaultProps$props.strokeWidth, size = _defaultProps$props.size, textColor = _defaultProps$props.textColor, textWidth = _defaultProps$props.textWidth, showText = _defaultProps$props.showText, textInside = _defaultProps$props.textInside, textBackground = _defaultProps$props.textBackground, textType = _defaultProps$props.textType, status = _defaultProps$props.status, icon = _defaultProps$props.icon, children = _defaultProps$props.children, rest = _objectWithoutProperties(_defaultProps$props, _excluded);
52
- var b = cn("progress");
53
- var classes = classNames(b(""));
54
- var classesOuter = classNames((_classNames = {}, _defineProperty(_classNames, "".concat(b(""), "-outer"), true), _defineProperty(_classNames, "".concat(b(""), "-").concat(size || "base"), true), _classNames));
55
- var classesInner = classNames((_classNames2 = {}, _defineProperty(_classNames2, "".concat(b(""), "-inner"), true), _defineProperty(_classNames2, "".concat(b(""), "-active"), status), _classNames2));
56
- var classesText = classNames(_defineProperty({}, "".concat(b(""), "-text"), true));
57
- var classesInsideText = classNames((_classNames4 = {}, _defineProperty(_classNames4, "".concat(b(""), "-text"), true), _defineProperty(_classNames4, "".concat(b(""), "-insidetext"), true), _classNames4));
58
- var classesTextInner = classNames(_defineProperty({}, "".concat(b(""), "-text__inner"), true));
34
+ var _classNames;
35
+ var _defaultProps$props = _objectSpread(_objectSpread({}, defaultProps), props), className = _defaultProps$props.className, style = _defaultProps$props.style, percent = _defaultProps$props.percent, background = _defaultProps$props.background, color = _defaultProps$props.color, strokeWidth = _defaultProps$props.strokeWidth, showText = _defaultProps$props.showText, animated = _defaultProps$props.animated, children = _defaultProps$props.children, rest = _objectWithoutProperties(_defaultProps$props, _excluded);
36
+ var classPrefix = "nut-progress";
37
+ var classesInner = classNames((_classNames = {}, _defineProperty(_classNames, "".concat(classPrefix, "-inner"), true), _defineProperty(_classNames, "".concat(classPrefix, "-active"), animated), _classNames));
59
38
  var stylesOuter = {
60
39
  height: "".concat(strokeWidth, "px"),
61
- // eslint-disable-next-line no-nested-ternary
62
- background: "".concat(fillColor)
40
+ background
63
41
  };
64
42
  var stylesInner = {
65
- width: "".concat(percentage, "%"),
66
- // eslint-disable-next-line no-nested-ternary
67
- background: "".concat(strokeColor)
68
- };
69
- var stylesInsideText = {
70
- width: "".concat(textWidth, "px"),
71
- left: "".concat(percentage, "%"),
72
- background: textBackground || strokeColor
73
- };
74
- var stylesInsideIcon = {
75
- width: "".concat(textWidth, "px"),
76
- left: "".concat(percentage, "%")
77
- };
78
- var stylesText = {
79
- width: "".concat(textWidth, "px")
43
+ width: "".concat(percent, "%"),
44
+ background: color
80
45
  };
81
46
  return React__default.createElement("div", _objectSpread({
82
- className: "".concat(classes, " ").concat(className),
47
+ className: classNames(classPrefix, className),
83
48
  style
84
49
  }, rest), React__default.createElement("div", {
85
- className: classesOuter,
50
+ className: "".concat(classPrefix, "-outer"),
86
51
  style: stylesOuter
87
52
  }, React__default.createElement("div", {
88
53
  className: classesInner,
89
54
  style: stylesInner
90
- }, showText && textInside && React__default.createElement(React__default.Fragment, null, children ? React__default.createElement("div", {
91
- className: classesInsideText,
92
- style: stylesInsideIcon
93
- }, children) : React__default.createElement("div", {
94
- className: classesInsideText,
95
- style: stylesInsideText
96
- }, React__default.createElement("span", {
97
- className: classesTextInner,
55
+ }, showText && React__default.createElement("div", {
56
+ className: "".concat(classPrefix, "-text"),
98
57
  style: {
99
- color: textColor
58
+ left: "".concat(percent, "%")
100
59
  }
101
- }, percentage, isShowPercentage ? "%" : ""))))), showText && !textInside && React__default.createElement("div", {
102
- className: classesText,
103
- style: stylesText
104
- }, textType === "text" && React__default.createElement("span", {
105
- className: classesTextInner,
60
+ }, children || React__default.createElement("div", {
61
+ className: "".concat(classPrefix, "-text__inner"),
106
62
  style: {
107
- color: textColor
63
+ background: color
108
64
  }
109
- }, percentage, isShowPercentage ? "%" : ""), textType === "icon" && React__default.createElement(React__default.Fragment, null, icon || React__default.createElement(Checked, {
110
- width: 16,
111
- height: 16,
112
- color: "#439422"
113
- }))));
65
+ }, percent, "%")))));
114
66
  };
115
67
  Progress.defaultProps = defaultProps;
116
68
  Progress.displayName = "NutProgress";
@@ -473,9 +473,8 @@ var InternalUploader = function InternalUploader2(props, ref) {
473
473
  return onDeleteItem(item, index);
474
474
  }
475
475
  }), item.status === "uploading" && React__default.createElement(Progress, {
476
- size: "small",
477
- percentage: item.percentage,
478
- strokeColor: "linear-gradient(270deg, rgba(18,126,255,1) 0%,rgba(32,147,255,1) 32.815625%,rgba(13,242,204,1) 100%)",
476
+ percent: item.percentage,
477
+ color: "linear-gradient(270deg, rgba(18,126,255,1) 0%,rgba(32,147,255,1) 32.815625%,rgba(13,242,204,1) 100%)",
479
478
  showText: false
480
479
  })));
481
480
  }), maxCount > fileList.length && previewType === "picture" && !children && React__default.createElement("div", {
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @nutui/nutui-react v2.0.0-alpha.1 Fri Apr 21 2023 18:05:14 GMT+0800 (China Standard Time)
2
+ * @nutui/nutui-react v2.0.0-alpha.2 Wed Apr 26 2023 18:37:18 GMT+0800 (China Standard Time)
3
3
  * (c) 2023 @jdf2e.
4
4
  * Released under the MIT License.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @nutui/nutui-react v2.0.0-alpha.1 Fri Apr 21 2023 18:05:14 GMT+0800 (China Standard Time)
2
+ * @nutui/nutui-react v2.0.0-alpha.2 Wed Apr 26 2023 18:37:18 GMT+0800 (China Standard Time)
3
3
  * (c) 2023 @jdf2e.
4
4
  * Released under the MIT License.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @nutui/nutui-react v2.0.0-alpha.1 Fri Apr 21 2023 18:05:14 GMT+0800 (China Standard Time)
2
+ * @nutui/nutui-react v2.0.0-alpha.2 Wed Apr 26 2023 18:37:18 GMT+0800 (China Standard Time)
3
3
  * (c) 2023 @jdf2e.
4
4
  * Released under the MIT License.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @nutui/nutui-react v2.0.0-alpha.1 Fri Apr 21 2023 18:05:14 GMT+0800 (China Standard Time)
2
+ * @nutui/nutui-react v2.0.0-alpha.2 Wed Apr 26 2023 18:37:18 GMT+0800 (China Standard Time)
3
3
  * (c) 2023 @jdf2e.
4
4
  * Released under the MIT License.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @nutui/nutui-react v2.0.0-alpha.1 Fri Apr 21 2023 18:05:14 GMT+0800 (China Standard Time)
2
+ * @nutui/nutui-react v2.0.0-alpha.2 Wed Apr 26 2023 18:37:18 GMT+0800 (China Standard Time)
3
3
  * (c) 2023 @jdf2e.
4
4
  * Released under the MIT License.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @nutui/nutui-react v2.0.0-alpha.1 Fri Apr 21 2023 18:05:14 GMT+0800 (China Standard Time)
2
+ * @nutui/nutui-react v2.0.0-alpha.2 Wed Apr 26 2023 18:37:18 GMT+0800 (China Standard Time)
3
3
  * (c) 2023 @jdf2e.
4
4
  * Released under the MIT License.
5
5
  */