@tenancy.nz/feature-ui 1.10.5 → 1.10.7

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,15 @@ function _defineProperty(e, r, t) {
19
19
  writable: true
20
20
  }) : e[r] = t, e;
21
21
  }
22
+ function _extends() {
23
+ return _extends = Object.assign ? Object.assign.bind() : function (n) {
24
+ for (var e = 1; e < arguments.length; e++) {
25
+ var t = arguments[e];
26
+ for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
27
+ }
28
+ return n;
29
+ }, _extends.apply(null, arguments);
30
+ }
22
31
  function _iterableToArray(r) {
23
32
  if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r);
24
33
  }
@@ -55,6 +64,9 @@ function _nonIterableRest() {
55
64
  function _nonIterableSpread() {
56
65
  throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
57
66
  }
67
+ function _objectDestructuringEmpty(t) {
68
+ if (null == t) throw new TypeError("Cannot destructure " + t);
69
+ }
58
70
  function ownKeys(e, r) {
59
71
  var t = Object.keys(e);
60
72
  if (Object.getOwnPropertySymbols) {
@@ -135,10 +147,12 @@ exports.arrayLikeToArray = _arrayLikeToArray;
135
147
  exports.arrayWithHoles = _arrayWithHoles;
136
148
  exports.arrayWithoutHoles = _arrayWithoutHoles;
137
149
  exports.defineProperty = _defineProperty;
150
+ exports.extends = _extends;
138
151
  exports.iterableToArray = _iterableToArray;
139
152
  exports.iterableToArrayLimit = _iterableToArrayLimit;
140
153
  exports.nonIterableRest = _nonIterableRest;
141
154
  exports.nonIterableSpread = _nonIterableSpread;
155
+ exports.objectDestructuringEmpty = _objectDestructuringEmpty;
142
156
  exports.objectSpread2 = _objectSpread2;
143
157
  exports.objectWithoutProperties = _objectWithoutProperties;
144
158
  exports.objectWithoutPropertiesLoose = _objectWithoutPropertiesLoose;
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var React = require('react');
6
+ var ArrowLeftOutlinedIcon = require('@tenancy.nz/icons/ArrowLeftOutlined');
7
+ var ui = require('@tenancy.nz/ui');
8
+
9
+ function BackButton(_ref) {
10
+ var onClick = _ref.onClick;
11
+ return /* @__PURE__ */React.createElement(ui.Button, {
12
+ startIcon: /* @__PURE__ */React.createElement(ArrowLeftOutlinedIcon, null),
13
+ variant: "outlined",
14
+ onClick: onClick
15
+ }, "Back");
16
+ }
17
+
18
+ exports.default = BackButton;
@@ -0,0 +1,91 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _rollupPluginBabelHelpers = require('../_virtual/_rollupPluginBabelHelpers.cjs');
6
+ var React = require('react');
7
+ var ui = require('@tenancy.nz/ui');
8
+
9
+ var _excluded = ["Component", "children", "color", "confirmMessage", "label", "onClick", "title", "confirmProps"];
10
+ var errorConfirmProps = {
11
+ severity: "error",
12
+ cancelBtnText: "Don't delete",
13
+ confirmBtnText: "Delete"
14
+ };
15
+ function ConfirmButton(_ref) {
16
+ var _ref$Component = _ref.Component,
17
+ Component = _ref$Component === void 0 ? null : _ref$Component,
18
+ children = _ref.children,
19
+ _ref$color = _ref.color,
20
+ color = _ref$color === void 0 ? "inherit" : _ref$color,
21
+ _ref$confirmMessage = _ref.confirmMessage,
22
+ confirmMessage = _ref$confirmMessage === void 0 ? void 0 : _ref$confirmMessage,
23
+ _ref$label = _ref.label,
24
+ label = _ref$label === void 0 ? "" : _ref$label,
25
+ onClick = _ref.onClick,
26
+ _ref$title = _ref.title,
27
+ title = _ref$title === void 0 ? "" : _ref$title,
28
+ _ref$confirmProps = _ref.confirmProps,
29
+ confirmProps = _ref$confirmProps === void 0 ? {} : _ref$confirmProps,
30
+ rest = _rollupPluginBabelHelpers.objectWithoutProperties(_ref, _excluded);
31
+ var _useState = React.useState(false),
32
+ _useState2 = _rollupPluginBabelHelpers.slicedToArray(_useState, 2),
33
+ showConfirm = _useState2[0],
34
+ setShowConfirm = _useState2[1];
35
+ var _useState3 = React.useState(void 0),
36
+ _useState4 = _rollupPluginBabelHelpers.slicedToArray(_useState3, 2),
37
+ value = _useState4[0],
38
+ setValue = _useState4[1];
39
+ var handleCancel = function handleCancel(e) {
40
+ e.stopPropagation();
41
+ setShowConfirm(false);
42
+ setValue(void 0);
43
+ };
44
+ var handleClick = function handleClick(e) {
45
+ e.stopPropagation();
46
+ if (!confirmMessage) {
47
+ onClick(e);
48
+ } else {
49
+ setShowConfirm(true);
50
+ setValue(e);
51
+ }
52
+ };
53
+ var handleConfirm = function handleConfirm() {
54
+ if (value) {
55
+ onClick(value);
56
+ }
57
+ setShowConfirm(false);
58
+ setValue(void 0);
59
+ };
60
+ return /* @__PURE__ */React.createElement(React.Fragment, null, Component ? /* @__PURE__ */React.createElement(Component, _rollupPluginBabelHelpers.objectSpread2({
61
+ color: color,
62
+ onClick: handleClick
63
+ }, rest), children) : /* @__PURE__ */React.createElement(ui.Tooltip, {
64
+ title: title,
65
+ placement: "top"
66
+ }, /* @__PURE__ */React.createElement(ui.Box, {
67
+ display: "inline-flex",
68
+ color: color.indexOf(".") === -1 ? "".concat(color, ".main") : color,
69
+ align: "center",
70
+ direction: "column"
71
+ }, /* @__PURE__ */React.createElement(ui.IconButton, _rollupPluginBabelHelpers.objectSpread2({
72
+ color: color === "error" ? "error" : "inherit",
73
+ onClick: handleClick
74
+ }, rest), children), !!label && /* @__PURE__ */React.createElement(ui.Box, {
75
+ color: "#617391",
76
+ display: "inline-flex",
77
+ fontSize: "11px",
78
+ onClick: handleClick,
79
+ sx: {
80
+ cursor: "pointer"
81
+ }
82
+ }, label))), !!confirmMessage && /* @__PURE__ */React.createElement(ui.Confirmation, _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({
83
+ open: showConfirm,
84
+ message: confirmMessage,
85
+ title: "Please confirm",
86
+ onCancel: handleCancel,
87
+ onConfirm: handleConfirm
88
+ }, color === "error" && errorConfirmProps), confirmProps)));
89
+ }
90
+
91
+ exports.default = ConfirmButton;
@@ -0,0 +1,73 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _rollupPluginBabelHelpers = require('../_virtual/_rollupPluginBabelHelpers.cjs');
6
+ var React = require('react');
7
+ var Stack = require('@mui/material/Stack');
8
+ var EmailOutlinedIcon = require('@tenancy.nz/icons/EmailOutlined');
9
+ var PhoneOutlinedIcon = require('@tenancy.nz/icons/PhoneOutlined');
10
+ var ui = require('@tenancy.nz/ui');
11
+ var ContactCardHeader = require('./ContactCardHeader.cjs');
12
+ var ContactMethod = require('./ContactMethod.cjs');
13
+
14
+ var _excluded = ["avatarColor", "avatarUrl", "email", "firstName", "lastName", "mobile", "phone", "role", "sx"];
15
+ function ContactCard(_ref) {
16
+ var _ref$avatarColor = _ref.avatarColor,
17
+ avatarColor = _ref$avatarColor === void 0 ? "grey" : _ref$avatarColor,
18
+ _ref$avatarUrl = _ref.avatarUrl,
19
+ avatarUrl = _ref$avatarUrl === void 0 ? void 0 : _ref$avatarUrl,
20
+ _ref$email = _ref.email,
21
+ email = _ref$email === void 0 ? void 0 : _ref$email,
22
+ _ref$firstName = _ref.firstName,
23
+ firstName = _ref$firstName === void 0 ? void 0 : _ref$firstName,
24
+ _ref$lastName = _ref.lastName,
25
+ lastName = _ref$lastName === void 0 ? void 0 : _ref$lastName,
26
+ _ref$mobile = _ref.mobile,
27
+ mobile = _ref$mobile === void 0 ? void 0 : _ref$mobile,
28
+ _ref$phone = _ref.phone,
29
+ phone = _ref$phone === void 0 ? void 0 : _ref$phone,
30
+ _ref$role = _ref.role,
31
+ role = _ref$role === void 0 ? void 0 : _ref$role,
32
+ _ref$sx = _ref.sx,
33
+ sx = _ref$sx === void 0 ? {} : _ref$sx,
34
+ rest = _rollupPluginBabelHelpers.objectWithoutProperties(_ref, _excluded);
35
+ return /* @__PURE__ */React.createElement(ui.Paper, _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({
36
+ inset: "large"
37
+ }, rest), {}, {
38
+ sx: sx,
39
+ outlined: true
40
+ }), /* @__PURE__ */React.createElement(Stack, {
41
+ gap: 4
42
+ }, /* @__PURE__ */React.createElement(ContactCardHeader.default, {
43
+ avatarColor: avatarColor,
44
+ avatarUrl: avatarUrl,
45
+ firstName: firstName,
46
+ lastName: lastName,
47
+ role: role
48
+ }), /* @__PURE__ */React.createElement(Stack, {
49
+ divider: /* @__PURE__ */React.createElement(ui.Divider, {
50
+ disableGutter: true
51
+ })
52
+ }, email && /* @__PURE__ */React.createElement(ContactMethod.default, {
53
+ label: "Email",
54
+ type: "email",
55
+ value: email,
56
+ Icon: EmailOutlinedIcon,
57
+ tooltip: "Email"
58
+ }), mobile && /* @__PURE__ */React.createElement(ContactMethod.default, {
59
+ label: "Mobile",
60
+ type: "phone",
61
+ value: mobile,
62
+ Icon: PhoneOutlinedIcon,
63
+ tooltip: "Call"
64
+ }), phone && /* @__PURE__ */React.createElement(ContactMethod.default, {
65
+ label: "Office",
66
+ type: "phone",
67
+ value: phone,
68
+ Icon: PhoneOutlinedIcon,
69
+ tooltip: "Call"
70
+ }))));
71
+ }
72
+
73
+ exports.default = ContactCard;
@@ -0,0 +1,59 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _rollupPluginBabelHelpers = require('../_virtual/_rollupPluginBabelHelpers.cjs');
6
+ var React = require('react');
7
+ var Stack = require('@mui/material/Stack');
8
+ var ProfileOutlinedIcon = require('@tenancy.nz/icons/ProfileOutlined');
9
+ var ui = require('@tenancy.nz/ui');
10
+
11
+ var _excluded = ["avatarColor", "avatarUrl", "firstName", "lastName", "role", "sx"];
12
+ var styles = {
13
+ role: {
14
+ display: "flex",
15
+ alignItems: "center",
16
+ gap: 1
17
+ }
18
+ };
19
+ function ContactCardHeader(_ref) {
20
+ var _ref$avatarColor = _ref.avatarColor,
21
+ avatarColor = _ref$avatarColor === void 0 ? "grey" : _ref$avatarColor,
22
+ _ref$avatarUrl = _ref.avatarUrl,
23
+ avatarUrl = _ref$avatarUrl === void 0 ? void 0 : _ref$avatarUrl,
24
+ _ref$firstName = _ref.firstName,
25
+ firstName = _ref$firstName === void 0 ? void 0 : _ref$firstName,
26
+ _ref$lastName = _ref.lastName,
27
+ lastName = _ref$lastName === void 0 ? void 0 : _ref$lastName,
28
+ _ref$role = _ref.role,
29
+ role = _ref$role === void 0 ? void 0 : _ref$role,
30
+ _ref$sx = _ref.sx,
31
+ sx = _ref$sx === void 0 ? {} : _ref$sx,
32
+ rest = _rollupPluginBabelHelpers.objectWithoutProperties(_ref, _excluded);
33
+ var name = [firstName, lastName].filter(Boolean).join(" ");
34
+ return /* @__PURE__ */React.createElement(Stack, _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({
35
+ direction: "row",
36
+ alignItems: "center",
37
+ gap: 4
38
+ }, rest), {}, {
39
+ sx: sx
40
+ }), /* @__PURE__ */React.createElement(ui.Avatar, {
41
+ color: avatarColor,
42
+ src: avatarUrl,
43
+ alt: name,
44
+ size: 64
45
+ }), /* @__PURE__ */React.createElement(Stack, {
46
+ gap: 2
47
+ }, name && /* @__PURE__ */React.createElement(ui.Heading, {
48
+ as: "h5",
49
+ color: "inherit"
50
+ }, name), role && /* @__PURE__ */React.createElement(ui.Text, {
51
+ variant: "small",
52
+ color: "textPrimary",
53
+ sx: styles.role
54
+ }, /* @__PURE__ */React.createElement(ProfileOutlinedIcon, {
55
+ size: 16
56
+ }), /* @__PURE__ */React.createElement("span", null, role))));
57
+ }
58
+
59
+ exports.default = ContactCardHeader;
@@ -0,0 +1,111 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _rollupPluginBabelHelpers = require('../_virtual/_rollupPluginBabelHelpers.cjs');
6
+ var React = require('react');
7
+ var Stack = require('@mui/material/Stack');
8
+ var CopyOutlinedIcon = require('@tenancy.nz/icons/CopyOutlined');
9
+ var ui = require('@tenancy.nz/ui');
10
+
11
+ var _excluded = ["Icon", "label", "sx", "type", "value", "tooltip"];
12
+ var ActionButton = ui.IconButton;
13
+ var wide = "@420/contact-method";
14
+ var styles = {
15
+ container: {
16
+ containerType: "inline-size",
17
+ containerName: "contact-method"
18
+ },
19
+ details: {
20
+ flexDirection: _rollupPluginBabelHelpers.defineProperty({}, wide, "row"),
21
+ alignItems: _rollupPluginBabelHelpers.defineProperty({}, wide, "center"),
22
+ gap: _rollupPluginBabelHelpers.defineProperty({
23
+ xs: 1
24
+ }, wide, 4)
25
+ },
26
+ copyButton: {
27
+ display: _rollupPluginBabelHelpers.defineProperty({
28
+ xs: "none"
29
+ }, wide, "inline-flex")
30
+ }
31
+ };
32
+ var makeHref = function makeHref(type, value) {
33
+ if (!type) {
34
+ return "";
35
+ }
36
+ if (type === "email") {
37
+ return "mailto:".concat(value);
38
+ }
39
+ if (type === "phone") {
40
+ return "tel:".concat(value);
41
+ }
42
+ return "";
43
+ };
44
+ function ContactMethod(_ref) {
45
+ var _ref$Icon = _ref.Icon,
46
+ Icon = _ref$Icon === void 0 ? void 0 : _ref$Icon,
47
+ _ref$label = _ref.label,
48
+ label = _ref$label === void 0 ? void 0 : _ref$label,
49
+ _ref$sx = _ref.sx,
50
+ sx = _ref$sx === void 0 ? {} : _ref$sx,
51
+ _ref$type = _ref.type,
52
+ type = _ref$type === void 0 ? "" : _ref$type,
53
+ _ref$value = _ref.value,
54
+ value = _ref$value === void 0 ? void 0 : _ref$value,
55
+ _ref$tooltip = _ref.tooltip,
56
+ tooltip = _ref$tooltip === void 0 ? "" : _ref$tooltip,
57
+ rest = _rollupPluginBabelHelpers.objectWithoutProperties(_ref, _excluded);
58
+ if (!value) {
59
+ return null;
60
+ }
61
+ var handleCopy = function handleCopy() {
62
+ var _navigator$clipboard;
63
+ (_navigator$clipboard = navigator.clipboard) === null || _navigator$clipboard === void 0 || _navigator$clipboard.writeText(value);
64
+ };
65
+ var href = makeHref(type, value);
66
+ return /* @__PURE__ */React.createElement(Stack, _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({
67
+ direction: "row",
68
+ alignItems: "center",
69
+ gap: 4,
70
+ py: 3
71
+ }, rest), {}, {
72
+ sx: [styles.container].concat(_rollupPluginBabelHelpers.toConsumableArray(Array.isArray(sx) ? sx : [sx]))
73
+ }), /* @__PURE__ */React.createElement(Stack, {
74
+ sx: styles.details
75
+ }, label && /* @__PURE__ */React.createElement(ui.Text, {
76
+ variant: "body2",
77
+ weight: "600",
78
+ color: "textPrimary",
79
+ sx: {
80
+ width: "64px"
81
+ }
82
+ }, label), /* @__PURE__ */React.createElement(ui.Text, {
83
+ color: "textPrimary"
84
+ }, value)), /* @__PURE__ */React.createElement(Stack, {
85
+ direction: "row",
86
+ ml: "auto",
87
+ flexShrink: 0
88
+ }, /* @__PURE__ */React.createElement(ui.Tooltip, {
89
+ title: "Copy",
90
+ placement: "top"
91
+ }, /* @__PURE__ */React.createElement(ActionButton, {
92
+ "aria-label": "Copy ".concat(label !== null && label !== void 0 ? label : value),
93
+ color: "primary",
94
+ onClick: handleCopy,
95
+ sx: styles.copyButton
96
+ }, /* @__PURE__ */React.createElement(CopyOutlinedIcon, {
97
+ size: 20
98
+ }))), Icon && href && /* @__PURE__ */React.createElement(ui.Tooltip, {
99
+ title: tooltip,
100
+ placement: "top"
101
+ }, /* @__PURE__ */React.createElement(ActionButton, {
102
+ component: "a",
103
+ color: "primary",
104
+ href: href,
105
+ "aria-label": label
106
+ }, /* @__PURE__ */React.createElement(Icon, {
107
+ size: 20
108
+ })))));
109
+ }
110
+
111
+ exports.default = ContactMethod;
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _rollupPluginBabelHelpers = require('../_virtual/_rollupPluginBabelHelpers.cjs');
6
+ var React = require('react');
7
+ var DeleteOutlinedIcon = require('@tenancy.nz/icons/DeleteOutlined');
8
+ var ConfirmButton = require('./ConfirmButton.cjs');
9
+
10
+ function DeleteIconButton(_ref) {
11
+ var rest = _rollupPluginBabelHelpers.extends({}, (_rollupPluginBabelHelpers.objectDestructuringEmpty(_ref), _ref));
12
+ return /* @__PURE__ */React.createElement(ConfirmButton.default, _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({}, rest), {}, {
13
+ color: "error"
14
+ }), /* @__PURE__ */React.createElement(DeleteOutlinedIcon, null));
15
+ }
16
+
17
+ exports.default = DeleteIconButton;
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _rollupPluginBabelHelpers = require('../_virtual/_rollupPluginBabelHelpers.cjs');
6
+ var React = require('react');
7
+ var DownloadOutlinedIcon = require('@tenancy.nz/icons/DownloadOutlined');
8
+ var ui = require('@tenancy.nz/ui');
9
+
10
+ function DownloadIconButton(_ref) {
11
+ var rest = _rollupPluginBabelHelpers.extends({}, (_rollupPluginBabelHelpers.objectDestructuringEmpty(_ref), _ref));
12
+ return /* @__PURE__ */React.createElement(ui.IconButton, _rollupPluginBabelHelpers.objectSpread2({
13
+ color: "primary"
14
+ }, rest), /* @__PURE__ */React.createElement(DownloadOutlinedIcon, null));
15
+ }
16
+
17
+ exports.default = DownloadIconButton;
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _rollupPluginBabelHelpers = require('../_virtual/_rollupPluginBabelHelpers.cjs');
6
+ var React = require('react');
7
+ var EditOutlinedIcon = require('@tenancy.nz/icons/EditOutlined');
8
+ var ConfirmButton = require('./ConfirmButton.cjs');
9
+
10
+ function EditIconButton(_ref) {
11
+ var rest = _rollupPluginBabelHelpers.extends({}, (_rollupPluginBabelHelpers.objectDestructuringEmpty(_ref), _ref));
12
+ return /* @__PURE__ */React.createElement(ConfirmButton.default, _rollupPluginBabelHelpers.objectSpread2({
13
+ color: "primary"
14
+ }, rest), /* @__PURE__ */React.createElement(EditOutlinedIcon, null));
15
+ }
16
+
17
+ exports.default = EditIconButton;
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _rollupPluginBabelHelpers = require('../_virtual/_rollupPluginBabelHelpers.cjs');
6
+ var React = require('react');
7
+ var LogoutOutlinedIcon = require('@tenancy.nz/icons/LogoutOutlined');
8
+ var ui = require('@tenancy.nz/ui');
9
+
10
+ function LogoutButton(_ref) {
11
+ var rest = _rollupPluginBabelHelpers.extends({}, (_rollupPluginBabelHelpers.objectDestructuringEmpty(_ref), _ref));
12
+ return /* @__PURE__ */React.createElement(ui.Button, _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({}, rest), {}, {
13
+ startIcon: /* @__PURE__ */React.createElement(LogoutOutlinedIcon, null)
14
+ }), "Logout");
15
+ }
16
+
17
+ exports.default = LogoutButton;
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _rollupPluginBabelHelpers = require('../_virtual/_rollupPluginBabelHelpers.cjs');
6
+ var React = require('react');
7
+ var ExternalLinkOutlinedIcon = require('@tenancy.nz/icons/ExternalLinkOutlined');
8
+ var ui = require('@tenancy.nz/ui');
9
+
10
+ function OpenInNewIconButton(_ref) {
11
+ var rest = _rollupPluginBabelHelpers.extends({}, (_rollupPluginBabelHelpers.objectDestructuringEmpty(_ref), _ref));
12
+ return /* @__PURE__ */React.createElement(ui.IconButton, _rollupPluginBabelHelpers.objectSpread2({
13
+ color: "primary"
14
+ }, rest), /* @__PURE__ */React.createElement(ExternalLinkOutlinedIcon, null));
15
+ }
16
+
17
+ exports.default = OpenInNewIconButton;
@@ -0,0 +1,194 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _rollupPluginBabelHelpers = require('../_virtual/_rollupPluginBabelHelpers.cjs');
6
+ var React = require('react');
7
+ var Box = require('@mui/material/Box');
8
+ var Portal = require('@mui/material/Portal');
9
+ var ui = require('@tenancy.nz/ui');
10
+ var ChevronUpOutlinedIcon = require('@tenancy.nz/icons/ChevronUpOutlined');
11
+
12
+ var _excluded = ["anchorOrigin", "asIcon", "behavior", "container", "disablePortal", "label", "onClick", "position", "scrollContainer", "threshold", "x", "y"];
13
+ var icon = /* @__PURE__ */React.createElement(ChevronUpOutlinedIcon, null);
14
+ var defaultAnchorOrigin = {
15
+ horizontal: "right",
16
+ vertical: "bottom"
17
+ };
18
+ function resolveTarget(target) {
19
+ if (!target) {
20
+ return null;
21
+ }
22
+ if (typeof target === "function") {
23
+ return target();
24
+ }
25
+ if ("current" in target) {
26
+ return target.current;
27
+ }
28
+ return target;
29
+ }
30
+ function isDocumentScroller(element) {
31
+ if (!element) {
32
+ return true;
33
+ }
34
+ return element === document.body || element === document.documentElement;
35
+ }
36
+ function getScrollEventTarget(element) {
37
+ if (isDocumentScroller(element)) {
38
+ return window;
39
+ }
40
+ return element;
41
+ }
42
+ function getScrollTop(element) {
43
+ if (!element || isDocumentScroller(element)) {
44
+ return window.scrollY;
45
+ }
46
+ return element.scrollTop;
47
+ }
48
+ function scrollToTop(scrollElement, behavior) {
49
+ if (!scrollElement || isDocumentScroller(scrollElement)) {
50
+ window.scrollTo({
51
+ top: 0,
52
+ behavior: behavior
53
+ });
54
+ return;
55
+ }
56
+ scrollElement.scrollTo({
57
+ top: 0,
58
+ behavior: behavior
59
+ });
60
+ }
61
+ function getPosition(position, portalElement) {
62
+ if (position) {
63
+ return position;
64
+ }
65
+ if (!portalElement) {
66
+ return "static";
67
+ }
68
+ if (portalElement === document.body) {
69
+ return "fixed";
70
+ }
71
+ return "absolute";
72
+ }
73
+ function getPlacementSx(position, anchorOrigin, x, y) {
74
+ return _rollupPluginBabelHelpers.defineProperty(_rollupPluginBabelHelpers.defineProperty({
75
+ position: position,
76
+ zIndex: "fab"
77
+ }, anchorOrigin.horizontal, x), anchorOrigin.vertical, y);
78
+ }
79
+ function useResolvedTarget(target, fallbackToBody) {
80
+ var _useState = React.useState(null),
81
+ _useState2 = _rollupPluginBabelHelpers.slicedToArray(_useState, 2),
82
+ element = _useState2[0],
83
+ setElement = _useState2[1];
84
+ React.useEffect(function () {
85
+ var resolved = resolveTarget(target);
86
+ if (resolved) {
87
+ setElement(resolved);
88
+ return;
89
+ }
90
+ if (fallbackToBody) {
91
+ setElement(document.body);
92
+ return;
93
+ }
94
+ setElement(null);
95
+ }, [target, fallbackToBody]);
96
+ return element;
97
+ }
98
+ function useScrolledPast(scrollElement, threshold) {
99
+ var _useState3 = React.useState(threshold <= 0),
100
+ _useState4 = _rollupPluginBabelHelpers.slicedToArray(_useState3, 2),
101
+ scrolled = _useState4[0],
102
+ setScrolled = _useState4[1];
103
+ React.useEffect(function () {
104
+ if (threshold <= 0) {
105
+ setScrolled(true);
106
+ return void 0;
107
+ }
108
+ var eventTarget = getScrollEventTarget(scrollElement);
109
+ var update = function update() {
110
+ return setScrolled(getScrollTop(scrollElement) > threshold);
111
+ };
112
+ update();
113
+ eventTarget.addEventListener("scroll", update, {
114
+ passive: true
115
+ });
116
+ return function () {
117
+ return eventTarget.removeEventListener("scroll", update);
118
+ };
119
+ }, [scrollElement, threshold]);
120
+ return scrolled;
121
+ }
122
+ function ScrollTopButton(_ref2) {
123
+ var _ref2$anchorOrigin = _ref2.anchorOrigin,
124
+ anchorOrigin = _ref2$anchorOrigin === void 0 ? defaultAnchorOrigin : _ref2$anchorOrigin,
125
+ _ref2$asIcon = _ref2.asIcon,
126
+ asIcon = _ref2$asIcon === void 0 ? false : _ref2$asIcon,
127
+ _ref2$behavior = _ref2.behavior,
128
+ behavior = _ref2$behavior === void 0 ? "smooth" : _ref2$behavior,
129
+ _ref2$container = _ref2.container,
130
+ container = _ref2$container === void 0 ? null : _ref2$container,
131
+ _ref2$disablePortal = _ref2.disablePortal,
132
+ disablePortal = _ref2$disablePortal === void 0 ? false : _ref2$disablePortal,
133
+ _ref2$label = _ref2.label,
134
+ label = _ref2$label === void 0 ? "Back to top" : _ref2$label,
135
+ _ref2$onClick = _ref2.onClick,
136
+ onClick = _ref2$onClick === void 0 ? void 0 : _ref2$onClick,
137
+ _ref2$position = _ref2.position,
138
+ position = _ref2$position === void 0 ? void 0 : _ref2$position,
139
+ _ref2$scrollContainer = _ref2.scrollContainer,
140
+ scrollContainer = _ref2$scrollContainer === void 0 ? null : _ref2$scrollContainer,
141
+ _ref2$threshold = _ref2.threshold,
142
+ threshold = _ref2$threshold === void 0 ? 120 : _ref2$threshold,
143
+ _ref2$x = _ref2.x,
144
+ x = _ref2$x === void 0 ? 32 : _ref2$x,
145
+ _ref2$y = _ref2.y,
146
+ y = _ref2$y === void 0 ? 32 : _ref2$y,
147
+ rest = _rollupPluginBabelHelpers.objectWithoutProperties(_ref2, _excluded);
148
+ var portalElement = useResolvedTarget(container, !disablePortal);
149
+ var scrollElement = useResolvedTarget(scrollContainer, true);
150
+ var scrolled = useScrolledPast(scrollElement, threshold);
151
+ var handleClick = function handleClick(event) {
152
+ scrollToTop(scrollElement, behavior);
153
+ onClick === null || onClick === void 0 || onClick(event);
154
+ };
155
+ if (!scrolled) {
156
+ return null;
157
+ }
158
+ if (!disablePortal && !portalElement) {
159
+ return null;
160
+ }
161
+ var resolvedPosition = getPosition(position, portalElement);
162
+ var withPlacement = function withPlacement(node) {
163
+ if (resolvedPosition === "static") {
164
+ return node;
165
+ }
166
+ return /* @__PURE__ */React.createElement(Box, {
167
+ sx: getPlacementSx(resolvedPosition, anchorOrigin, x, y)
168
+ }, node);
169
+ };
170
+ var withPortal = function withPortal(node) {
171
+ if (!portalElement) {
172
+ return node;
173
+ }
174
+ return /* @__PURE__ */React.createElement(Portal, {
175
+ container: portalElement
176
+ }, node);
177
+ };
178
+ if (asIcon) {
179
+ return withPortal(withPlacement(/* @__PURE__ */React.createElement(ui.IconButton, _rollupPluginBabelHelpers.objectSpread2({
180
+ variant: "outlined",
181
+ size: "large",
182
+ onClick: handleClick,
183
+ color: "primary"
184
+ }, rest), icon)));
185
+ }
186
+ return withPortal(withPlacement(/* @__PURE__ */React.createElement(ui.Button, _rollupPluginBabelHelpers.objectSpread2({
187
+ variant: "outlined",
188
+ startIcon: icon,
189
+ size: "large",
190
+ onClick: handleClick
191
+ }, rest), label)));
192
+ }
193
+
194
+ exports.default = ScrollTopButton;