@jobber/components 4.1.0 → 4.1.1
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/Autocomplete/Autocomplete.d.ts +1 -1
- package/dist/Autocomplete/Option.d.ts +2 -2
- package/dist/Autocomplete/index.js +51 -67
- package/dist/Avatar/Avatar.d.ts +2 -2
- package/dist/Avatar/index.js +2 -2
- package/dist/{Avatar-cfd04e86.js → Avatar-89cfd0a6.js} +14 -18
- package/dist/Banner/Banner.d.ts +1 -1
- package/dist/Banner/index.js +15 -19
- package/dist/Button/Button.d.ts +1 -1
- package/dist/Button/index.js +3 -4
- package/dist/{Button-cd30df0f.js → Button-16e043ec.js} +21 -24
- package/dist/ButtonDismiss/index.js +4 -5
- package/dist/{ButtonDismiss-a9590195.js → ButtonDismiss-3fb1eaf9.js} +2 -3
- package/dist/Card/Card.d.ts +1 -1
- package/dist/Card/index.js +6 -7
- package/dist/Card/types.d.ts +1 -1
- package/dist/{Card-b9f8d6f3.js → Card-edab9c3c.js} +18 -22
- package/dist/Checkbox/Checkbox.d.ts +1 -1
- package/dist/Checkbox/index.js +4 -5
- package/dist/{Checkbox-5103d2b9.js → Checkbox-c1efc2f6.js} +10 -12
- package/dist/Chips/ChipsTypes.d.ts +1 -1
- package/dist/Chips/InternalChipDismissible/InternalChipDismissibleTypes.d.ts +1 -1
- package/dist/Chips/InternalChipDismissible/hooks/useInternalChipDismissible.d.ts +1 -1
- package/dist/Chips/InternalChipDismissible/hooks/useInternalChipDismissibleInput.d.ts +3 -3
- package/dist/Chips/InternalChipMultiSelect.d.ts +1 -1
- package/dist/Chips/InternalChipSingleSelect.d.ts +1 -1
- package/dist/Chips/index.js +165 -185
- package/dist/ConfirmationModal/ConfirmationModal.d.ts +1 -1
- package/dist/ConfirmationModal/index.js +11 -12
- package/dist/{ConfirmationModal-e95f46d7.js → ConfirmationModal-6a7beee2.js} +28 -31
- package/dist/Content/index.js +1 -1
- package/dist/{Content-18de5fbb.js → Content-05df8f7f.js} +2 -3
- package/dist/Countdown/Countdown.d.ts +1 -1
- package/dist/Countdown/computeTimeUnit.d.ts +1 -1
- package/dist/Countdown/index.js +15 -18
- package/dist/DataDump/index.js +9 -11
- package/dist/DataTable/Footer.d.ts +1 -1
- package/dist/DataTable/createTableSettings.d.ts +2 -2
- package/dist/DataTable/index.js +74 -106
- package/dist/DataTable/test-utilities/helpers.d.ts +1 -1
- package/dist/DataTable/types.d.ts +2 -2
- package/dist/DatePicker/DatePicker.d.ts +1 -1
- package/dist/DatePicker/index.js +4 -5
- package/dist/{DatePicker-cf813028.js → DatePicker-0696b0f0.js} +31 -36
- package/dist/DescriptionList/index.js +5 -10
- package/dist/Disclosure/index.js +8 -10
- package/dist/Divider/index.js +8 -10
- package/dist/Drawer/index.js +10 -14
- package/dist/Emphasis/index.js +2 -3
- package/dist/{Emphasis-75a3f411.js → Emphasis-23dc2a0a.js} +4 -6
- package/dist/FeatureSwitch/index.js +15 -17
- package/dist/Form/index.js +23 -33
- package/dist/FormField/FormFieldTypes.d.ts +2 -2
- package/dist/FormField/index.js +8 -8
- package/dist/{FormField-ac310b6f.js → FormField-79a0a375.js} +68 -76
- package/dist/FormatDate/index.js +2 -3
- package/dist/FormatEmail/index.js +2 -3
- package/dist/FormatFile/index.js +13 -14
- package/dist/{FormatFile-18e8a54a.js → FormatFile-3512f838.js} +33 -40
- package/dist/FormatRelativeDateTime/index.js +5 -6
- package/dist/FormatTime/index.js +6 -7
- package/dist/Gallery/GalleryTypes.d.ts +2 -2
- package/dist/Gallery/index.js +31 -33
- package/dist/Heading/index.js +2 -3
- package/dist/{Heading-a9a66964.js → Heading-7b203f7f.js} +4 -6
- package/dist/Icon/index.js +1 -1
- package/dist/{Icon-d5ad1a6d.js → Icon-405a216c.js} +7 -8
- package/dist/InlineLabel/InlineLabel.d.ts +1 -1
- package/dist/InlineLabel/index.js +4 -6
- package/dist/InputAvatar/index.js +15 -20
- package/dist/InputDate/index.js +15 -15
- package/dist/InputEmail/InputEmail.d.ts +1 -1
- package/dist/InputEmail/index.js +12 -12
- package/dist/InputFile/index.js +6 -6
- package/dist/{InputFile-e108a7f8.js → InputFile-5e0ed2b5.js} +48 -62
- package/dist/InputGroup/index.js +4 -5
- package/dist/InputNumber/index.js +22 -22
- package/dist/InputPassword/index.js +12 -12
- package/dist/InputText/InputText.d.ts +1 -1
- package/dist/InputText/index.js +9 -9
- package/dist/{InputText-70f7d947.js → InputText-95ea24f9.js} +23 -24
- package/dist/InputTime/index.js +27 -27
- package/dist/InputValidation/index.js +4 -5
- package/dist/{InputValidation-06a8a7ba.js → InputValidation-97dd0dcf.js} +7 -8
- package/dist/LightBox/index.js +5 -6
- package/dist/{LightBox-1ad62669.js → LightBox-dd1afa97.js} +22 -26
- package/dist/List/index.js +26 -32
- package/dist/Markdown/index.js +6 -7
- package/dist/{Markdown-b53e0308.js → Markdown-be2dcd0c.js} +12 -18
- package/dist/Menu/index.js +4 -5
- package/dist/{Menu-826cfb89.js → Menu-d6a7d17b.js} +31 -36
- package/dist/Modal/index.js +6 -7
- package/dist/{Modal-cc3bd7bf.js → Modal-757e83fd.js} +13 -17
- package/dist/MultiSelect/index.js +53 -60
- package/dist/MultiSelect/types.d.ts +1 -1
- package/dist/{Option-7d5de76b.js → Option-4b665afd.js} +3 -5
- package/dist/Page/Page.d.ts +1 -1
- package/dist/Page/index.js +21 -24
- package/dist/Popover/index.js +11 -13
- package/dist/ProgressBar/index.js +1 -1
- package/dist/{ProgressBar-e9a49129.js → ProgressBar-f028b159.js} +3 -4
- package/dist/RadioGroup/RadioOption.d.ts +2 -2
- package/dist/RadioGroup/index.js +9 -13
- package/dist/RecurringSelect/types.d.ts +2 -2
- package/dist/Select/Select.d.ts +1 -1
- package/dist/Select/index.js +9 -9
- package/dist/Spinner/index.js +1 -1
- package/dist/{Spinner-e4e9c8eb.js → Spinner-ae4c8a85.js} +5 -7
- package/dist/StatusLabel/StatusLabel.d.ts +1 -1
- package/dist/StatusLabel/index.js +6 -9
- package/dist/Switch/index.js +2 -3
- package/dist/{Switch-f03b70fc.js → Switch-7ac32f7b.js} +12 -16
- package/dist/Table/index.js +9 -17
- package/dist/Tabs/index.js +28 -34
- package/dist/Text/index.js +2 -3
- package/dist/{Text-e012fb46.js → Text-7ce00adb.js} +4 -5
- package/dist/Toast/Toast.d.ts +2 -2
- package/dist/Toast/index.js +31 -32
- package/dist/Tooltip/index.js +3 -4
- package/dist/Tooltip/useTooltipPositioning.d.ts +1 -1
- package/dist/{Tooltip-041feb00.js → Tooltip-1090a43d.js} +25 -28
- package/dist/Typography/Typography.d.ts +1 -1
- package/dist/Typography/index.js +1 -2
- package/dist/{Typography-fbe0ed6e.js → Typography-9262511f.js} +5 -7
- package/dist/tslib.es6-efe27175.js +38 -0
- package/package.json +3 -3
- package/dist/tslib.es6-5b50eb8e.js +0 -103
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var tslib_es6 = require('./tslib.es6-5b50eb8e.js');
|
|
4
3
|
var React = require('react');
|
|
5
4
|
var ReactDOM = require('react-dom');
|
|
6
5
|
var classnames = require('classnames');
|
|
7
6
|
var framerMotion = require('framer-motion');
|
|
8
7
|
var jobberHooks = require('@jobber/hooks');
|
|
9
8
|
var styleInject_es = require('./style-inject.es-dcee06b6.js');
|
|
10
|
-
var Heading = require('./Heading-
|
|
11
|
-
var Button = require('./Button-
|
|
12
|
-
var ButtonDismiss = require('./ButtonDismiss-
|
|
9
|
+
var Heading = require('./Heading-7b203f7f.js');
|
|
10
|
+
var Button = require('./Button-16e043ec.js');
|
|
11
|
+
var ButtonDismiss = require('./ButtonDismiss-3fb1eaf9.js');
|
|
13
12
|
|
|
14
13
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
15
14
|
|
|
@@ -25,13 +24,12 @@ var css = "._1rPyLQMc1nSLWx4zAzSas0 {\n --modal--padding: var(--space-base);\n
|
|
|
25
24
|
var sizes = {"small":"_1rPyLQMc1nSLWx4zAzSas0","large":"_3GkHDHYnN_8P6NQFVSfYiB"};
|
|
26
25
|
styleInject_es.styleInject(css);
|
|
27
26
|
|
|
28
|
-
function Modal(
|
|
29
|
-
|
|
30
|
-
var modalClassName = classnames__default["default"](styles.modal, size && sizes[size]);
|
|
27
|
+
function Modal({ open = false, title, size, dismissible = true, children, primaryAction, secondaryAction, tertiaryAction, onRequestClose, }) {
|
|
28
|
+
const modalClassName = classnames__default["default"](styles.modal, size && sizes[size]);
|
|
31
29
|
jobberHooks.useRefocusOnActivator(open);
|
|
32
|
-
|
|
30
|
+
const modalRef = jobberHooks.useFocusTrap(open);
|
|
33
31
|
jobberHooks.useOnKeyDown(handleRequestClose, "Escape");
|
|
34
|
-
|
|
32
|
+
const template = (React__default["default"].createElement(framerMotion.AnimatePresence, null, open && (React__default["default"].createElement("div", { ref: modalRef, className: styles.container, tabIndex: 0 },
|
|
35
33
|
React__default["default"].createElement(framerMotion.motion.div, { key: styles.overlay, className: styles.overlay, onClick: onRequestClose, initial: { opacity: 0 }, animate: { opacity: 0.8 }, exit: { opacity: 0 }, transition: { duration: 0.2 } }),
|
|
36
34
|
React__default["default"].createElement(framerMotion.motion.div, { key: styles.modal, className: modalClassName, initial: { scale: 0.9, opacity: 0 }, animate: { scale: 1, opacity: 1 }, exit: { scale: 0.9, opacity: 0 }, transition: {
|
|
37
35
|
duration: 0.2,
|
|
@@ -47,15 +45,13 @@ function Modal(_a) {
|
|
|
47
45
|
}
|
|
48
46
|
}
|
|
49
47
|
}
|
|
50
|
-
function Header(
|
|
51
|
-
var title = _a.title, dismissible = _a.dismissible, onRequestClose = _a.onRequestClose;
|
|
48
|
+
function Header({ title, dismissible, onRequestClose }) {
|
|
52
49
|
return (React__default["default"].createElement("div", { className: styles.header, "data-testid": "modal-header" },
|
|
53
50
|
React__default["default"].createElement(Heading.Heading, { level: 3 }, title),
|
|
54
51
|
dismissible && (React__default["default"].createElement(ButtonDismiss.ButtonDismiss, { onClick: onRequestClose, ariaLabel: "Close modal" }))));
|
|
55
52
|
}
|
|
56
|
-
function Actions(
|
|
57
|
-
|
|
58
|
-
var shouldShow = primary != undefined || secondary != undefined || tertiary != undefined;
|
|
53
|
+
function Actions({ primary, secondary, tertiary }) {
|
|
54
|
+
const shouldShow = primary != undefined || secondary != undefined || tertiary != undefined;
|
|
59
55
|
if (secondary != undefined) {
|
|
60
56
|
secondary = Object.assign({ type: "primary", variation: "subtle" }, secondary);
|
|
61
57
|
}
|
|
@@ -64,10 +60,10 @@ function Actions(_a) {
|
|
|
64
60
|
}
|
|
65
61
|
return (React__default["default"].createElement(React__default["default"].Fragment, null, shouldShow && (React__default["default"].createElement("div", { className: styles.actionBar },
|
|
66
62
|
React__default["default"].createElement("div", { className: styles.rightAction },
|
|
67
|
-
primary && React__default["default"].createElement(Button.Button,
|
|
68
|
-
secondary && React__default["default"].createElement(Button.Button,
|
|
63
|
+
primary && React__default["default"].createElement(Button.Button, Object.assign({}, primary)),
|
|
64
|
+
secondary && React__default["default"].createElement(Button.Button, Object.assign({}, secondary))),
|
|
69
65
|
tertiary && (React__default["default"].createElement("div", { className: styles.leftAction },
|
|
70
|
-
React__default["default"].createElement(Button.Button,
|
|
66
|
+
React__default["default"].createElement(Button.Button, Object.assign({}, tertiary))))))));
|
|
71
67
|
}
|
|
72
68
|
|
|
73
69
|
exports.Modal = Modal;
|
|
@@ -2,15 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var tslib_es6 = require('../tslib.es6-5b50eb8e.js');
|
|
6
5
|
var React = require('react');
|
|
7
6
|
var classnames = require('classnames');
|
|
8
7
|
var jobberHooks = require('@jobber/hooks');
|
|
9
8
|
var styleInject_es = require('../style-inject.es-dcee06b6.js');
|
|
10
|
-
var Checkbox = require('../Checkbox-
|
|
11
|
-
var Text = require('../Text-
|
|
12
|
-
var Icon = require('../Icon-
|
|
13
|
-
require('../Typography-
|
|
9
|
+
var Checkbox = require('../Checkbox-c1efc2f6.js');
|
|
10
|
+
var Text = require('../Text-7ce00adb.js');
|
|
11
|
+
var Icon = require('../Icon-405a216c.js');
|
|
12
|
+
require('../Typography-9262511f.js');
|
|
14
13
|
require('@jobber/design');
|
|
15
14
|
|
|
16
15
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
@@ -28,30 +27,27 @@ styleInject_es.styleInject(css);
|
|
|
28
27
|
|
|
29
28
|
function handleKeyboardShortcut(setupKeyListeners) {
|
|
30
29
|
function callback(event) {
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
const { metaKey, ctrlKey, key, target } = event;
|
|
31
|
+
const shouldTriggerShortcut = target instanceof HTMLButtonElement ? metaKey || ctrlKey : true;
|
|
33
32
|
if (!shouldTriggerShortcut)
|
|
34
33
|
return;
|
|
35
34
|
event.preventDefault();
|
|
36
35
|
event.stopPropagation();
|
|
37
36
|
setupKeyListeners(key);
|
|
38
37
|
}
|
|
39
|
-
return { callback
|
|
38
|
+
return { callback };
|
|
40
39
|
}
|
|
41
40
|
|
|
42
|
-
function DropDownMenu(
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
return option;
|
|
53
|
-
});
|
|
54
|
-
});
|
|
41
|
+
function DropDownMenu({ options, setOptions }) {
|
|
42
|
+
const [highlightedIndex, setHighlightedIndex] = React.useState(0);
|
|
43
|
+
const menuDiv = React.useRef();
|
|
44
|
+
const handleOptionClick = React.useCallback((clickedOption) => {
|
|
45
|
+
setOptions(current => current.map(option => {
|
|
46
|
+
if (option.label == clickedOption.label) {
|
|
47
|
+
return Object.assign(Object.assign({}, option), { checked: !clickedOption.checked });
|
|
48
|
+
}
|
|
49
|
+
return option;
|
|
50
|
+
}));
|
|
55
51
|
}, []);
|
|
56
52
|
function handleOptionHover(event, index) {
|
|
57
53
|
event.preventDefault();
|
|
@@ -60,18 +56,18 @@ function DropDownMenu(_a) {
|
|
|
60
56
|
function handleOptionFocus(index) {
|
|
61
57
|
setHighlightedIndex(index);
|
|
62
58
|
if (menuDiv.current) {
|
|
63
|
-
|
|
59
|
+
const option = menuDiv.current.children[index].querySelector("input");
|
|
64
60
|
option === null || option === void 0 ? void 0 : option.focus();
|
|
65
61
|
}
|
|
66
62
|
}
|
|
67
63
|
function scrollMenuIfItemNotInView(menuDivElement, direction) {
|
|
68
|
-
|
|
64
|
+
const itemDiv = menuDivElement.querySelector(`:nth-child(${highlightedIndex + 1})`);
|
|
69
65
|
if (!itemDiv)
|
|
70
66
|
return;
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
67
|
+
const menuTop = menuDivElement.getBoundingClientRect().top;
|
|
68
|
+
const { top: itemTop, height: itemHeight, bottom: itemBottom, } = itemDiv.getBoundingClientRect();
|
|
69
|
+
const itemTrueBottom = itemBottom + itemHeight;
|
|
70
|
+
const menuBottom = menuDivElement.getBoundingClientRect().bottom;
|
|
75
71
|
if (direction == "up" && itemTop - itemHeight < menuTop) {
|
|
76
72
|
menuDivElement.scrollTop -= itemHeight;
|
|
77
73
|
}
|
|
@@ -89,13 +85,13 @@ function DropDownMenu(_a) {
|
|
|
89
85
|
break;
|
|
90
86
|
}
|
|
91
87
|
case "ArrowDown": {
|
|
92
|
-
|
|
88
|
+
const newIndex = Math.min(options.length - 1, highlightedIndex + 1);
|
|
93
89
|
handleOptionFocus(newIndex);
|
|
94
90
|
scrollMenuIfItemNotInView(menuDiv.current, "down");
|
|
95
91
|
break;
|
|
96
92
|
}
|
|
97
93
|
case "ArrowUp": {
|
|
98
|
-
|
|
94
|
+
const newIndex = Math.max(0, highlightedIndex - 1);
|
|
99
95
|
handleOptionFocus(newIndex);
|
|
100
96
|
scrollMenuIfItemNotInView(menuDiv.current, "up");
|
|
101
97
|
break;
|
|
@@ -108,43 +104,40 @@ function DropDownMenu(_a) {
|
|
|
108
104
|
"ArrowDown",
|
|
109
105
|
"ArrowUp",
|
|
110
106
|
]);
|
|
111
|
-
React.useEffect(
|
|
107
|
+
React.useEffect(() => {
|
|
112
108
|
// focus first option
|
|
113
109
|
handleOptionFocus(0);
|
|
114
110
|
}, [menuDiv]);
|
|
115
|
-
return (React__default["default"].createElement("ul", { "data-testid": "dropdown-menu", className: styles.dropDownMenuContainer, ref: menuDiv }, options.map(
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
return (React__default["default"].createElement("li", { key: index + "-" + option.label, className: optionClass, onClick: function (event) {
|
|
111
|
+
return (React__default["default"].createElement("ul", { "data-testid": "dropdown-menu", className: styles.dropDownMenuContainer, ref: menuDiv }, options.map((option, index) => {
|
|
112
|
+
const optionClass = classnames__default["default"](styles.option, {
|
|
113
|
+
[styles.active]: index === highlightedIndex,
|
|
114
|
+
});
|
|
115
|
+
return (React__default["default"].createElement("li", { key: `${index}-${option.label}`, className: optionClass, onClick: event => {
|
|
121
116
|
event.stopPropagation();
|
|
122
117
|
event.preventDefault();
|
|
123
118
|
handleOptionClick(option);
|
|
124
|
-
}, onMouseOver:
|
|
125
|
-
React__default["default"].createElement(Checkbox.Checkbox, { label: option.label, checked: option.checked, onFocus:
|
|
119
|
+
}, onMouseOver: e => handleOptionHover(e, index) },
|
|
120
|
+
React__default["default"].createElement(Checkbox.Checkbox, { label: option.label, checked: option.checked, onFocus: () => setHighlightedIndex(index) })));
|
|
126
121
|
})));
|
|
127
122
|
}
|
|
128
123
|
|
|
129
124
|
// eslint-disable-next-line max-statements
|
|
130
|
-
function MultiSelect(
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
_b[styles$1.small] = size === "small",
|
|
142
|
-
_b));
|
|
125
|
+
function MultiSelect({ defaultLabel, allSelectedLabel, options, onOptionsChange, size, }) {
|
|
126
|
+
const [label, setLabel] = React.useState(defaultLabel);
|
|
127
|
+
const [menuVisible, setMenuVisible] = React.useState(false);
|
|
128
|
+
const [focused, setFocused] = React.useState(false);
|
|
129
|
+
const multiSelectContainer = React.useRef();
|
|
130
|
+
const multiSelectRef = React.useRef();
|
|
131
|
+
const multiSelectClass = classnames__default["default"](styles$1.multiSelect, {
|
|
132
|
+
[styles$1.active]: menuVisible,
|
|
133
|
+
[styles$1.large]: size === "large",
|
|
134
|
+
[styles$1.small]: size === "small",
|
|
135
|
+
});
|
|
143
136
|
function handleMenuVisibility() {
|
|
144
137
|
multiSelectRef.current.focus();
|
|
145
138
|
setMenuVisible(!menuVisible);
|
|
146
139
|
}
|
|
147
|
-
|
|
140
|
+
const handleClickOutside = (e) => {
|
|
148
141
|
var _a;
|
|
149
142
|
if (!((_a = multiSelectContainer === null || multiSelectContainer === void 0 ? void 0 : multiSelectContainer.current) === null || _a === void 0 ? void 0 : _a.contains(e.target))) {
|
|
150
143
|
setMenuVisible(false);
|
|
@@ -171,12 +164,12 @@ function MultiSelect(_a) {
|
|
|
171
164
|
" ",
|
|
172
165
|
"Escape",
|
|
173
166
|
]);
|
|
174
|
-
React.useEffect(
|
|
167
|
+
React.useEffect(() => {
|
|
175
168
|
document.addEventListener("mousedown", handleClickOutside);
|
|
176
|
-
return
|
|
169
|
+
return () => document.removeEventListener("mousedown", handleClickOutside);
|
|
177
170
|
});
|
|
178
|
-
React.useEffect(
|
|
179
|
-
|
|
171
|
+
React.useEffect(() => {
|
|
172
|
+
const selected = options.filter(option => option.checked);
|
|
180
173
|
if (selected.length === 0) {
|
|
181
174
|
setLabel(defaultLabel);
|
|
182
175
|
}
|
|
@@ -184,13 +177,13 @@ function MultiSelect(_a) {
|
|
|
184
177
|
setLabel(allSelectedLabel);
|
|
185
178
|
}
|
|
186
179
|
else {
|
|
187
|
-
|
|
188
|
-
selected.forEach(
|
|
189
|
-
setLabel(
|
|
180
|
+
const selectedLabels = [];
|
|
181
|
+
selected.forEach(option => selectedLabels.push(option.label));
|
|
182
|
+
setLabel(selectedLabels.join(", "));
|
|
190
183
|
}
|
|
191
184
|
}, [options]);
|
|
192
185
|
return (React__default["default"].createElement("div", { ref: multiSelectContainer, className: styles$1.multiSelectContainer },
|
|
193
|
-
React__default["default"].createElement("div", { "data-testid": "multi-select", className: multiSelectClass, onClick: handleMenuVisibility, onFocus:
|
|
186
|
+
React__default["default"].createElement("div", { "data-testid": "multi-select", className: multiSelectClass, onClick: handleMenuVisibility, onFocus: () => setFocused(true), onBlur: () => setFocused(false), tabIndex: 0, ref: multiSelectRef, role: "button", "aria-label": `${defaultLabel}: ${label}`, "aria-multiselectable": true, "aria-haspopup": true },
|
|
194
187
|
React__default["default"].createElement(Text.Text, null, label),
|
|
195
188
|
React__default["default"].createElement(Icon.Icon, { name: "arrowDown" })),
|
|
196
189
|
menuVisible && (React__default["default"].createElement(DropDownMenu, { options: options, setOptions: onOptionsChange }))));
|
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var tslib_es6 = require('./tslib.es6-5b50eb8e.js');
|
|
4
3
|
var React = require('react');
|
|
5
|
-
var FormField = require('./FormField-
|
|
4
|
+
var FormField = require('./FormField-79a0a375.js');
|
|
6
5
|
|
|
7
6
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
8
7
|
|
|
9
8
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
10
9
|
|
|
11
10
|
function Select(props) {
|
|
12
|
-
return React__default["default"].createElement(FormField.FormField,
|
|
11
|
+
return React__default["default"].createElement(FormField.FormField, Object.assign({ type: "select" }, props));
|
|
13
12
|
}
|
|
14
13
|
|
|
15
|
-
function SelectOption(
|
|
16
|
-
var children = _a.children, disabled = _a.disabled, value = _a.value;
|
|
14
|
+
function SelectOption({ children, disabled, value }) {
|
|
17
15
|
return (React__default["default"].createElement("option", { disabled: disabled, value: value }, children));
|
|
18
16
|
}
|
|
19
17
|
|
package/dist/Page/Page.d.ts
CHANGED
|
@@ -54,6 +54,6 @@ interface PageWithIntroProps extends PageFoundationProps {
|
|
|
54
54
|
*/
|
|
55
55
|
readonly externalIntroLinks?: boolean;
|
|
56
56
|
}
|
|
57
|
-
export
|
|
57
|
+
export type PageProps = XOR<PageFoundationProps, PageWithIntroProps>;
|
|
58
58
|
export declare function Page({ title, intro, externalIntroLinks, subtitle, children, width, primaryAction, secondaryAction, moreActionsMenu, }: PageProps): JSX.Element;
|
|
59
59
|
export {};
|
package/dist/Page/index.js
CHANGED
|
@@ -2,22 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var tslib_es6 = require('../tslib.es6-5b50eb8e.js');
|
|
6
5
|
var React = require('react');
|
|
7
6
|
var classnames = require('classnames');
|
|
8
7
|
var jobberHooks = require('@jobber/hooks');
|
|
9
8
|
var styleInject_es = require('../style-inject.es-dcee06b6.js');
|
|
10
|
-
var Heading = require('../Heading-
|
|
11
|
-
var Text = require('../Text-
|
|
12
|
-
var Content = require('../Content-
|
|
13
|
-
var Markdown = require('../Markdown-
|
|
14
|
-
var Button = require('../Button-
|
|
15
|
-
var Menu = require('../Menu-
|
|
16
|
-
var Emphasis = require('../Emphasis-
|
|
17
|
-
require('../Typography-
|
|
9
|
+
var Heading = require('../Heading-7b203f7f.js');
|
|
10
|
+
var Text = require('../Text-7ce00adb.js');
|
|
11
|
+
var Content = require('../Content-05df8f7f.js');
|
|
12
|
+
var Markdown = require('../Markdown-be2dcd0c.js');
|
|
13
|
+
var Button = require('../Button-16e043ec.js');
|
|
14
|
+
var Menu = require('../Menu-d6a7d17b.js');
|
|
15
|
+
var Emphasis = require('../Emphasis-23dc2a0a.js');
|
|
16
|
+
require('../Typography-9262511f.js');
|
|
18
17
|
require('react-markdown');
|
|
19
18
|
require('react-router-dom');
|
|
20
|
-
require('../Icon-
|
|
19
|
+
require('../Icon-405a216c.js');
|
|
21
20
|
require('@jobber/design');
|
|
22
21
|
require('uuid');
|
|
23
22
|
require('framer-motion');
|
|
@@ -32,18 +31,16 @@ var styles = {"page":"D_deCgrOv6-H73MnfGJvm","fill":"_1ApfukxxkhoI4O2hiz5Uwn","s
|
|
|
32
31
|
styleInject_es.styleInject(css);
|
|
33
32
|
|
|
34
33
|
// eslint-disable-next-line max-statements
|
|
35
|
-
function Page(
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
var showMenu = moreActionsMenu.length > 0;
|
|
46
|
-
var showActionGroup = showMenu || primaryAction;
|
|
34
|
+
function Page({ title, intro, externalIntroLinks, subtitle, children, width = "standard", primaryAction, secondaryAction, moreActionsMenu = [], }) {
|
|
35
|
+
const pageStyles = classnames__default["default"](styles.page, styles[width]);
|
|
36
|
+
const [titleBarRef, { width: titleBarWidth = jobberHooks.Breakpoints.large }] = jobberHooks.useResizeObserver();
|
|
37
|
+
const titleBarClasses = classnames__default["default"](styles.titleBar, {
|
|
38
|
+
[styles.small]: titleBarWidth > jobberHooks.Breakpoints.smaller,
|
|
39
|
+
[styles.medium]: titleBarWidth > jobberHooks.Breakpoints.small,
|
|
40
|
+
[styles.large]: titleBarWidth > jobberHooks.Breakpoints.base,
|
|
41
|
+
});
|
|
42
|
+
const showMenu = moreActionsMenu.length > 0;
|
|
43
|
+
const showActionGroup = showMenu || primaryAction;
|
|
47
44
|
if (primaryAction != undefined) {
|
|
48
45
|
primaryAction = Object.assign({ fullWidth: true }, primaryAction);
|
|
49
46
|
}
|
|
@@ -65,9 +62,9 @@ function Page(_a) {
|
|
|
65
62
|
React__default["default"].createElement(Markdown.Markdown, { content: subtitle, basicUsage: true })))))),
|
|
66
63
|
showActionGroup && (React__default["default"].createElement("div", { className: styles.actionGroup },
|
|
67
64
|
primaryAction && (React__default["default"].createElement("div", { className: styles.primaryAction },
|
|
68
|
-
React__default["default"].createElement(Button.Button,
|
|
65
|
+
React__default["default"].createElement(Button.Button, Object.assign({}, primaryAction)))),
|
|
69
66
|
secondaryAction && (React__default["default"].createElement("div", { className: styles.actionButton },
|
|
70
|
-
React__default["default"].createElement(Button.Button,
|
|
67
|
+
React__default["default"].createElement(Button.Button, Object.assign({}, secondaryAction)))),
|
|
71
68
|
showMenu && (React__default["default"].createElement("div", { className: styles.actionButton },
|
|
72
69
|
React__default["default"].createElement(Menu.Menu, { items: moreActionsMenu })))))),
|
|
73
70
|
intro && (React__default["default"].createElement(Text.Text, { size: "large" },
|
package/dist/Popover/index.js
CHANGED
|
@@ -2,18 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var tslib_es6 = require('../tslib.es6-5b50eb8e.js');
|
|
6
5
|
var React = require('react');
|
|
7
6
|
var reactPopper = require('react-popper');
|
|
8
7
|
var jobberHooks = require('@jobber/hooks');
|
|
9
8
|
var styleInject_es = require('../style-inject.es-dcee06b6.js');
|
|
10
|
-
var ButtonDismiss = require('../ButtonDismiss-
|
|
11
|
-
require('../Button-
|
|
9
|
+
var ButtonDismiss = require('../ButtonDismiss-3fb1eaf9.js');
|
|
10
|
+
require('../Button-16e043ec.js');
|
|
12
11
|
require('classnames');
|
|
13
12
|
require('react-router-dom');
|
|
14
|
-
require('../Icon-
|
|
13
|
+
require('../Icon-405a216c.js');
|
|
15
14
|
require('@jobber/design');
|
|
16
|
-
require('../Typography-
|
|
15
|
+
require('../Typography-9262511f.js');
|
|
17
16
|
|
|
18
17
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
19
18
|
|
|
@@ -23,23 +22,22 @@ var css = ":root {\n --card--base-padding: var(--space-base);\n --popover--pad
|
|
|
23
22
|
var classes = {"header":"bmcwfoRgxW9uxv0uyXH04","dismissButton":"TjIegPUFwvTBnPHT-hzfN","popover":"_1v-Ekqld7VhWiu8_bFt62z","arrow":"ZBY5pcUZw7V-86CZwsJcF"};
|
|
24
23
|
styleInject_es.styleInject(css);
|
|
25
24
|
|
|
26
|
-
function Popover(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
var _e = reactPopper.usePopper(attachTo instanceof Element ? attachTo : attachTo.current, popperElement, {
|
|
25
|
+
function Popover({ onRequestClose, children, attachTo, open, preferredPlacement = "auto", }) {
|
|
26
|
+
const [popperElement, setPopperElement] = React.useState();
|
|
27
|
+
const [arrowElement, setArrowElement] = React.useState();
|
|
28
|
+
const { styles: popperStyles, attributes } = reactPopper.usePopper(attachTo instanceof Element ? attachTo : attachTo.current, popperElement, {
|
|
31
29
|
modifiers: buildModifiers(arrowElement),
|
|
32
30
|
placement: preferredPlacement,
|
|
33
|
-
})
|
|
31
|
+
});
|
|
34
32
|
jobberHooks.useRefocusOnActivator(open);
|
|
35
|
-
return (React__default["default"].createElement(React__default["default"].Fragment, null, open && (React__default["default"].createElement("div",
|
|
33
|
+
return (React__default["default"].createElement(React__default["default"].Fragment, null, open && (React__default["default"].createElement("div", Object.assign({ role: "dialog", ref: setPopperElement, style: popperStyles.popper, className: classes.popover }, attributes.popper),
|
|
36
34
|
React__default["default"].createElement("div", { className: classes.dismissButton },
|
|
37
35
|
React__default["default"].createElement(ButtonDismiss.ButtonDismiss, { onClick: onRequestClose, ariaLabel: "Close dialog" })),
|
|
38
36
|
children,
|
|
39
37
|
React__default["default"].createElement("div", { ref: setArrowElement, className: classes.arrow, style: popperStyles.arrow })))));
|
|
40
38
|
}
|
|
41
39
|
function buildModifiers(arrowElement) {
|
|
42
|
-
|
|
40
|
+
const modifiers = [
|
|
43
41
|
{
|
|
44
42
|
name: "arrow",
|
|
45
43
|
options: { element: arrowElement, padding: 10 },
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var ProgressBar = require('../ProgressBar-
|
|
5
|
+
var ProgressBar = require('../ProgressBar-f028b159.js');
|
|
6
6
|
require('react');
|
|
7
7
|
require('classnames');
|
|
8
8
|
require('../style-inject.es-dcee06b6.js');
|
|
@@ -17,10 +17,9 @@ var css = "._3m4bLvy45VVeWhtP3H5dQ3 {\n --progress-bar--height: var(--space-sma
|
|
|
17
17
|
var sizes = {"small":"_3m4bLvy45VVeWhtP3H5dQ3","base":"_2gLOi6dJvWt7HGwcOX4GlO"};
|
|
18
18
|
styleInject_es.styleInject(css);
|
|
19
19
|
|
|
20
|
-
function ProgressBar(
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
var progressBarClassName = classnames__default["default"](styles.ProgressBar, sizes[size]);
|
|
20
|
+
function ProgressBar({ currentStep, totalSteps, size = "base", }) {
|
|
21
|
+
const percentage = (currentStep / totalSteps) * 100;
|
|
22
|
+
const progressBarClassName = classnames__default["default"](styles.ProgressBar, sizes[size]);
|
|
24
23
|
return (React__default["default"].createElement("progress", { className: progressBarClassName, max: totalSteps, value: currentStep },
|
|
25
24
|
percentage,
|
|
26
25
|
"%"));
|
|
@@ -14,7 +14,7 @@ interface RadioOptionsWithDescription extends BaseRadioOptions {
|
|
|
14
14
|
*/
|
|
15
15
|
description?: string;
|
|
16
16
|
}
|
|
17
|
-
|
|
17
|
+
type RadioOptionProps = XOR<RadioOptionsWithDescription, PropsWithChildren<BaseRadioOptions>>;
|
|
18
18
|
/**
|
|
19
19
|
* For rendering props only. To make updates to
|
|
20
20
|
* the real RadioOption, look at InternalRadioOption
|
|
@@ -29,6 +29,6 @@ interface InternalRadioOptionsWithDescription extends BaseInternalRadioOptions {
|
|
|
29
29
|
label: string;
|
|
30
30
|
description?: string;
|
|
31
31
|
}
|
|
32
|
-
|
|
32
|
+
type InternalRadioOptionProps = XOR<InternalRadioOptionsWithDescription, PropsWithChildren<BaseInternalRadioOptions>>;
|
|
33
33
|
export declare function InternalRadioOption({ value, name, label, description, disabled, checked, children, onChange, }: PropsWithChildren<InternalRadioOptionProps>): JSX.Element;
|
|
34
34
|
export {};
|
package/dist/RadioGroup/index.js
CHANGED
|
@@ -2,12 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var tslib_es6 = require('../tslib.es6-5b50eb8e.js');
|
|
6
5
|
var React = require('react');
|
|
7
6
|
var uuid = require('uuid');
|
|
8
7
|
var styleInject_es = require('../style-inject.es-dcee06b6.js');
|
|
9
|
-
var Text = require('../Text-
|
|
10
|
-
require('../Typography-
|
|
8
|
+
var Text = require('../Text-7ce00adb.js');
|
|
9
|
+
require('../Typography-9262511f.js');
|
|
11
10
|
require('classnames');
|
|
12
11
|
|
|
13
12
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
@@ -22,26 +21,23 @@ styleInject_es.styleInject(css);
|
|
|
22
21
|
* For rendering props only. To make updates to
|
|
23
22
|
* the real RadioOption, look at InternalRadioOption
|
|
24
23
|
*/
|
|
25
|
-
function RadioOption(
|
|
26
|
-
var children = _a.children;
|
|
24
|
+
function RadioOption({ children }) {
|
|
27
25
|
return React__default["default"].createElement(React__default["default"].Fragment, null, children);
|
|
28
26
|
}
|
|
29
|
-
function InternalRadioOption(
|
|
30
|
-
|
|
31
|
-
var inputId = value.toString() + "_" + uuid.v1();
|
|
27
|
+
function InternalRadioOption({ value, name, label, description, disabled, checked, children, onChange, }) {
|
|
28
|
+
const inputId = `${value.toString()}_${uuid.v1()}`;
|
|
32
29
|
return (React__default["default"].createElement("div", null,
|
|
33
|
-
React__default["default"].createElement("input", { onChange: handleChange, type: "radio", name: name, value: value, disabled: disabled, checked: checked, id: inputId, className: styles.input, "aria-describedby": description ? inputId
|
|
30
|
+
React__default["default"].createElement("input", { onChange: handleChange, type: "radio", name: name, value: value, disabled: disabled, checked: checked, id: inputId, className: styles.input, "aria-describedby": description ? `${inputId}_description` : undefined }),
|
|
34
31
|
React__default["default"].createElement("label", { className: styles.label, htmlFor: inputId }, label ? label : children),
|
|
35
|
-
description && (React__default["default"].createElement("div", { className: styles.description, id: inputId
|
|
32
|
+
description && (React__default["default"].createElement("div", { className: styles.description, id: `${inputId}_description` },
|
|
36
33
|
React__default["default"].createElement(Text.Text, { variation: "subdued", size: "small" }, description)))));
|
|
37
34
|
function handleChange() {
|
|
38
35
|
onChange(value);
|
|
39
36
|
}
|
|
40
37
|
}
|
|
41
38
|
|
|
42
|
-
function RadioGroup(
|
|
43
|
-
|
|
44
|
-
return (React__default["default"].createElement("div", { role: "radiogroup", "aria-label": ariaLabel, className: styles.radioGroup }, React__default["default"].Children.map(children, function (option) { return (React__default["default"].createElement(InternalRadioOption, tslib_es6.__assign({ checked: value === option.props.value, name: name, onChange: handleChange }, option.props), option.props.children)); })));
|
|
39
|
+
function RadioGroup({ children, value, ariaLabel, onChange, name = uuid.v1(), }) {
|
|
40
|
+
return (React__default["default"].createElement("div", { role: "radiogroup", "aria-label": ariaLabel, className: styles.radioGroup }, React__default["default"].Children.map(children, option => (React__default["default"].createElement(InternalRadioOption, Object.assign({ checked: value === option.props.value, name: name, onChange: handleChange }, option.props), option.props.children)))));
|
|
45
41
|
function handleChange(newValue) {
|
|
46
42
|
if (newValue !== value) {
|
|
47
43
|
onChange(newValue);
|
|
@@ -7,7 +7,7 @@ export declare enum WeekDay {
|
|
|
7
7
|
Friday = 5,
|
|
8
8
|
Saturday = 6
|
|
9
9
|
}
|
|
10
|
-
export
|
|
10
|
+
export type DayOfMonth = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | "LAST";
|
|
11
11
|
export declare enum DurationPeriod {
|
|
12
12
|
Day = "Day",
|
|
13
13
|
Week = "Week",
|
|
@@ -34,7 +34,7 @@ export interface RecurrenceRuleWeekDayOfMonth {
|
|
|
34
34
|
type: DurationPeriod.WeekDayOfMonth;
|
|
35
35
|
dayOfWeek: [Set<WeekDay>, Set<WeekDay>, Set<WeekDay>, Set<WeekDay>];
|
|
36
36
|
}
|
|
37
|
-
export
|
|
37
|
+
export type RecurrenceRule = {
|
|
38
38
|
interval: number;
|
|
39
39
|
} & (RecurrenceRuleDay | RecurrenceRuleWeek | RecurrenceRuleYear | RecurrenceRuleDayOfMonth | RecurrenceRuleWeekDayOfMonth);
|
|
40
40
|
export interface InitialStateMap {
|
package/dist/Select/Select.d.ts
CHANGED
|
@@ -6,6 +6,6 @@ import { FormFieldProps } from "../FormField";
|
|
|
6
6
|
* Unfortunately Docz doesn't currently support Omit so it has been reduced to
|
|
7
7
|
* its component parts.
|
|
8
8
|
*/
|
|
9
|
-
|
|
9
|
+
type SelectProps = Pick<FormFieldProps, Exclude<keyof FormFieldProps, "type" | "rows" | "keyboard" | "actionsRef">>;
|
|
10
10
|
export declare function Select(props: SelectProps): JSX.Element;
|
|
11
11
|
export {};
|
package/dist/Select/index.js
CHANGED
|
@@ -2,23 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var Option = require('../Option-
|
|
6
|
-
require('../tslib.es6-5b50eb8e.js');
|
|
5
|
+
var Option = require('../Option-4b665afd.js');
|
|
7
6
|
require('react');
|
|
8
|
-
require('../FormField-
|
|
7
|
+
require('../FormField-79a0a375.js');
|
|
8
|
+
require('../tslib.es6-efe27175.js');
|
|
9
9
|
require('uuid');
|
|
10
10
|
require('react-hook-form');
|
|
11
11
|
require('../style-inject.es-dcee06b6.js');
|
|
12
12
|
require('classnames');
|
|
13
|
-
require('../Button-
|
|
13
|
+
require('../Button-16e043ec.js');
|
|
14
14
|
require('react-router-dom');
|
|
15
|
-
require('../Icon-
|
|
15
|
+
require('../Icon-405a216c.js');
|
|
16
16
|
require('@jobber/design');
|
|
17
|
-
require('../Typography-
|
|
18
|
-
require('../Text-
|
|
19
|
-
require('../InputValidation-
|
|
17
|
+
require('../Typography-9262511f.js');
|
|
18
|
+
require('../Text-7ce00adb.js');
|
|
19
|
+
require('../InputValidation-97dd0dcf.js');
|
|
20
20
|
require('framer-motion');
|
|
21
|
-
require('../Spinner-
|
|
21
|
+
require('../Spinner-ae4c8a85.js');
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
|
package/dist/Spinner/index.js
CHANGED