@jobber/components 4.77.5 → 4.77.6-JOB-84042.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/AnimatedPresence.d.ts +1 -0
- package/AnimatedPresence.js +17 -0
- package/dist/AnimatedPresence/AnimatedPresence.d.ts +24 -0
- package/dist/AnimatedPresence/AnimatedPresence.transitions.d.ts +11 -0
- package/dist/AnimatedPresence/hooks/usePreviousValue.d.ts +2 -0
- package/dist/AnimatedPresence/index.d.ts +1 -0
- package/dist/AnimatedPresence/index.js +12 -0
- package/dist/AnimatedPresence-20a02aaa.js +104 -0
- package/dist/Autocomplete/Menu.d.ts +2 -2
- package/dist/Autocomplete/index.js +10 -4
- package/dist/Card/index.js +3 -2
- package/dist/{Card-426a68a8.js → Card-0a6f3a28.js} +1 -1
- package/dist/Chip/index.js +0 -0
- package/dist/{Chip-c91fd6c8.js → Chip-be6a438f.js} +1 -1
- package/dist/Chips/index.js +0 -0
- package/dist/Combobox/Combobox.types.d.ts +12 -0
- package/dist/Combobox/components/ComboboxContent/ComboboxLoadMore/ComboboxLoadMore.d.ts +6 -0
- package/dist/Combobox/components/ComboboxContent/ComboboxLoadMore/index.d.ts +1 -0
- package/dist/Combobox/hooks/useMakeComboboxHandlers.d.ts +1 -1
- package/dist/Combobox/index.js +0 -0
- package/dist/{Combobox-237caf42.js → Combobox-e0d16e4f.js} +60 -42
- package/dist/ConfirmationModal/index.js +0 -0
- package/dist/{ConfirmationModal-f1a049fb.js → ConfirmationModal-8da79c12.js} +1 -1
- package/dist/DataDump/index.js +3 -2
- package/dist/DataList/DataList.const.d.ts +1 -0
- package/dist/DataList/DataList.types.d.ts +5 -4
- package/dist/DataList/components/DataListActionsMenu/DataListActionsMenu.d.ts +2 -2
- package/dist/DataList/index.d.ts +1 -1
- package/dist/DataList/index.js +0 -0
- package/dist/FormatFile/index.js +0 -0
- package/dist/{FormatFile-652edda8.js → FormatFile-e4237595.js} +1 -1
- package/dist/Gallery/index.js +0 -0
- package/dist/InputText/index.js +2 -1
- package/dist/{InputText-6e356985.js → InputText-6c71361e.js} +2 -1
- package/dist/LightBox/LightBox.d.ts +2 -2
- package/dist/LightBox/index.js +0 -0
- package/dist/{LightBox-a89d8863.js → LightBox-bdc90b7b.js} +4 -3
- package/dist/Menu/Menu.d.ts +4 -4
- package/dist/Menu/index.js +2 -1
- package/dist/{Menu-81b12936.js → Menu-5fc613a1.js} +2 -1
- package/dist/Modal/Modal.d.ts +2 -2
- package/dist/Modal/index.js +0 -0
- package/dist/{Modal-a0627c92.js → Modal-13c0ea54.js} +4 -3
- package/dist/Page/index.js +2 -1
- package/dist/Table/index.js +2 -2
- package/dist/Tooltip/index.js +0 -0
- package/dist/{Tooltip-27771182.js → Tooltip-7635add8.js} +8 -6
- package/dist/index-6e91168e.js +0 -0
- package/package.json +6 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./dist/AnimatedPresence";
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true,
|
|
5
|
+
});
|
|
6
|
+
|
|
7
|
+
var AnimatedPresence = require("./dist/AnimatedPresence");
|
|
8
|
+
|
|
9
|
+
Object.keys(AnimatedPresence).forEach(function(key) {
|
|
10
|
+
if (key === "default" || key === "__esModule") return;
|
|
11
|
+
Object.defineProperty(exports, key, {
|
|
12
|
+
enumerable: true,
|
|
13
|
+
get: function get() {
|
|
14
|
+
return AnimatedPresence[key];
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { PropsWithChildren } from "react";
|
|
2
|
+
declare const transitions: {
|
|
3
|
+
fromBottom: import("framer-motion").Variants;
|
|
4
|
+
fromTop: import("framer-motion").Variants;
|
|
5
|
+
fromLeft: import("framer-motion").Variants;
|
|
6
|
+
fromRight: import("framer-motion").Variants;
|
|
7
|
+
popIn: import("framer-motion").Variants;
|
|
8
|
+
fromLeftToRight: import("framer-motion").Variants;
|
|
9
|
+
fromRightToLeft: import("framer-motion").Variants;
|
|
10
|
+
fade: import("framer-motion").Variants;
|
|
11
|
+
};
|
|
12
|
+
export type AnimatedPresenceTransitions = keyof typeof transitions;
|
|
13
|
+
interface AnimatedPresenceProps extends Required<PropsWithChildren> {
|
|
14
|
+
/**
|
|
15
|
+
* The type of transition you can use.
|
|
16
|
+
*/
|
|
17
|
+
readonly transition?: AnimatedPresenceTransitions;
|
|
18
|
+
/**
|
|
19
|
+
* Whether or not to animate the children on mount. By default it's set to false.
|
|
20
|
+
*/
|
|
21
|
+
readonly initial?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare function AnimatedPresence(props: AnimatedPresenceProps): JSX.Element;
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Variants } from "framer-motion";
|
|
2
|
+
export declare const TIMING_QUICK: number;
|
|
3
|
+
export declare const TIMING_BASE: number;
|
|
4
|
+
export declare const fade: Variants;
|
|
5
|
+
export declare const popIn: Variants;
|
|
6
|
+
export declare const fromTop: Variants;
|
|
7
|
+
export declare const fromBottom: Variants;
|
|
8
|
+
export declare const fromLeft: Variants;
|
|
9
|
+
export declare const fromRight: Variants;
|
|
10
|
+
export declare const fromLeftToRight: Variants;
|
|
11
|
+
export declare const fromRightToLeft: Variants;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./AnimatedPresence";
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var AnimatedPresence = require('../AnimatedPresence-20a02aaa.js');
|
|
6
|
+
require('react');
|
|
7
|
+
require('framer-motion');
|
|
8
|
+
require('@jobber/design');
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
exports.AnimatedPresence = AnimatedPresence.AnimatedPresence;
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var framerMotion = require('framer-motion');
|
|
5
|
+
var design = require('@jobber/design');
|
|
6
|
+
|
|
7
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
8
|
+
|
|
9
|
+
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
10
|
+
|
|
11
|
+
const TIMING_QUICK = toSeconds(design.tokens["timing-quick"]);
|
|
12
|
+
const TIMING_BASE = toSeconds(design.tokens["timing-base"]);
|
|
13
|
+
const baseTransition = {
|
|
14
|
+
visible: { opacity: 1 },
|
|
15
|
+
hidden: { opacity: 0 },
|
|
16
|
+
};
|
|
17
|
+
const fade = {
|
|
18
|
+
visible: { opacity: 1 },
|
|
19
|
+
hidden: { opacity: 0 },
|
|
20
|
+
};
|
|
21
|
+
const popIn = {
|
|
22
|
+
visible: Object.assign({ scale: 1 }, baseTransition.visible),
|
|
23
|
+
hidden: Object.assign({ scale: 0.95 }, baseTransition.hidden),
|
|
24
|
+
};
|
|
25
|
+
const fromTop = {
|
|
26
|
+
visible: Object.assign({ y: 0 }, baseTransition.visible),
|
|
27
|
+
hidden: Object.assign({ y: -design.tokens["space-base"] }, baseTransition.hidden),
|
|
28
|
+
};
|
|
29
|
+
const fromBottom = {
|
|
30
|
+
visible: Object.assign({ y: 0 }, baseTransition.visible),
|
|
31
|
+
hidden: Object.assign({ y: design.tokens["space-base"] }, baseTransition.hidden),
|
|
32
|
+
};
|
|
33
|
+
const fromLeft = {
|
|
34
|
+
visible: Object.assign({ x: 0 }, baseTransition.visible),
|
|
35
|
+
hidden: Object.assign({ x: -design.tokens["space-base"] }, baseTransition.hidden),
|
|
36
|
+
};
|
|
37
|
+
const fromRight = {
|
|
38
|
+
visible: Object.assign({ x: 0 }, baseTransition.visible),
|
|
39
|
+
hidden: Object.assign({ x: design.tokens["space-base"] }, baseTransition.hidden),
|
|
40
|
+
};
|
|
41
|
+
const fromLeftToRight = {
|
|
42
|
+
initial: Object.assign({ x: -design.tokens["space-base"] }, baseTransition.hidden),
|
|
43
|
+
visible: Object.assign({ x: 0 }, baseTransition.visible),
|
|
44
|
+
hidden: Object.assign({ x: design.tokens["space-base"] }, baseTransition.hidden),
|
|
45
|
+
};
|
|
46
|
+
const fromRightToLeft = {
|
|
47
|
+
initial: Object.assign({ x: design.tokens["space-base"] }, baseTransition.hidden),
|
|
48
|
+
visible: Object.assign({ x: 0 }, baseTransition.visible),
|
|
49
|
+
hidden: Object.assign({ x: -design.tokens["space-base"] }, baseTransition.hidden),
|
|
50
|
+
};
|
|
51
|
+
function toSeconds(ms) {
|
|
52
|
+
return ms / 1000;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function usePreviousValue(value) {
|
|
56
|
+
const [previousValue, setPreviousValue] = React.useState(value);
|
|
57
|
+
React.useEffect(() => {
|
|
58
|
+
setPreviousValue(value);
|
|
59
|
+
}, [value]);
|
|
60
|
+
return [previousValue, setPreviousValue];
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const transitions = {
|
|
64
|
+
fromBottom,
|
|
65
|
+
fromTop,
|
|
66
|
+
fromLeft,
|
|
67
|
+
fromRight,
|
|
68
|
+
popIn,
|
|
69
|
+
fromLeftToRight,
|
|
70
|
+
fromRightToLeft,
|
|
71
|
+
fade,
|
|
72
|
+
};
|
|
73
|
+
function AnimatedPresence(props) {
|
|
74
|
+
const shouldReduceMotion = framerMotion.useReducedMotion();
|
|
75
|
+
if (shouldReduceMotion) {
|
|
76
|
+
return React__default["default"].createElement(React__default["default"].Fragment, null, props.children);
|
|
77
|
+
}
|
|
78
|
+
return React__default["default"].createElement(InternalAnimatedPresence, Object.assign({}, props));
|
|
79
|
+
}
|
|
80
|
+
function InternalAnimatedPresence({ transition = "fromTop", initial = false, children, }) {
|
|
81
|
+
const transitionVariation = transitions[transition];
|
|
82
|
+
const hasInitialTransition = "initial" in transitionVariation;
|
|
83
|
+
const childCount = React.Children.count(children);
|
|
84
|
+
// Set the initial value to 0 so it staggers the animation on mount when
|
|
85
|
+
// initial is true.
|
|
86
|
+
const [lastChildIndex, setLastChildIndex] = usePreviousValue(0);
|
|
87
|
+
// Whenever the children count changes, update the last index.
|
|
88
|
+
React.useEffect(() => {
|
|
89
|
+
setLastChildIndex(childCount - 1);
|
|
90
|
+
}, [childCount]);
|
|
91
|
+
return (React__default["default"].createElement(framerMotion.AnimatePresence, { initial: initial, mode: "popLayout" }, React.Children.map(children, (child, i) => child && (React__default["default"].createElement(framerMotion.motion.div, { layout: true, variants: transitionVariation, initial: hasInitialTransition ? "initial" : "hidden", animate: "visible", exit: "hidden", transition: {
|
|
92
|
+
duration: TIMING_BASE,
|
|
93
|
+
delay: generateDelayTime(i),
|
|
94
|
+
} }, child)))));
|
|
95
|
+
function generateDelayTime(index) {
|
|
96
|
+
// Don't add a delay if it's already rendered.
|
|
97
|
+
if (lastChildIndex > index)
|
|
98
|
+
return 0;
|
|
99
|
+
// Stagger the animation starting after the previous last child index.
|
|
100
|
+
return (index - lastChildIndex) * TIMING_QUICK;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
exports.AnimatedPresence = AnimatedPresence;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { RefObject } from "react";
|
|
2
2
|
import { Option } from "./Option";
|
|
3
3
|
interface MenuProps {
|
|
4
4
|
readonly visible: boolean;
|
|
@@ -10,5 +10,5 @@ interface MenuProps {
|
|
|
10
10
|
readonly attachTo: RefObject<Element | null>;
|
|
11
11
|
onOptionSelect(chosenOption: Option): void;
|
|
12
12
|
}
|
|
13
|
-
export declare function Menu({ visible, options, selectedOption, onOptionSelect, attachTo, }: MenuProps):
|
|
13
|
+
export declare function Menu({ visible, options, selectedOption, onOptionSelect, attachTo, }: MenuProps): JSX.Element;
|
|
14
14
|
export {};
|
|
@@ -7,13 +7,15 @@ var React = require('react');
|
|
|
7
7
|
var debounce = require('lodash/debounce');
|
|
8
8
|
var styleInject_es = require('../style-inject.es-9d2f5f4e.js');
|
|
9
9
|
var classnames = require('classnames');
|
|
10
|
-
var
|
|
10
|
+
var reactDom = require('react-dom');
|
|
11
11
|
var reactPopper = require('react-popper');
|
|
12
12
|
var useOnKeyDown = require('@jobber/hooks/useOnKeyDown');
|
|
13
|
+
var useSafeLayoutEffect = require('@jobber/hooks/useSafeLayoutEffect');
|
|
14
|
+
var useIsMounted = require('@jobber/hooks/useIsMounted');
|
|
13
15
|
var Text = require('../Text-259af966.js');
|
|
14
16
|
var Icon = require('../Icon-405a216c.js');
|
|
15
17
|
var Heading = require('../Heading-1e8e4bd3.js');
|
|
16
|
-
var InputText = require('../InputText-
|
|
18
|
+
var InputText = require('../InputText-6c71361e.js');
|
|
17
19
|
require('../Typography-c45bf216.js');
|
|
18
20
|
require('@jobber/design');
|
|
19
21
|
require('../getAtlantisConfig-0f3e8af2.js');
|
|
@@ -42,6 +44,9 @@ var IndexChange;
|
|
|
42
44
|
IndexChange[IndexChange["Previous"] = -1] = "Previous";
|
|
43
45
|
IndexChange[IndexChange["Next"] = 1] = "Next";
|
|
44
46
|
})(IndexChange || (IndexChange = {}));
|
|
47
|
+
// Adding useIsMounted is what tipped this to 13 statements.
|
|
48
|
+
// Any additions beyond useIsMounted should probably see this component refactored a bit
|
|
49
|
+
// eslint-disable-next-line max-statements
|
|
45
50
|
function Menu({ visible, options, selectedOption, onOptionSelect, attachTo, }) {
|
|
46
51
|
const [highlightedIndex, setHighlightedIndex] = React.useState(0);
|
|
47
52
|
const { menuRef, setMenuRef, styles: popperStyles, attributes, targetWidth, } = useRepositionMenu(attachTo, visible);
|
|
@@ -51,6 +56,7 @@ function Menu({ visible, options, selectedOption, onOptionSelect, attachTo, }) {
|
|
|
51
56
|
const initialHighlight = options.some(detectGroups) ? 1 : 0;
|
|
52
57
|
setupKeyListeners();
|
|
53
58
|
React.useEffect(() => setHighlightedIndex(initialHighlight), [options]);
|
|
59
|
+
const mounted = useIsMounted.useIsMounted();
|
|
54
60
|
const menu = (React__default["default"].createElement("div", Object.assign({ className: classnames__default["default"](styles.options, { [styles.visible]: visible }), ref: setMenuRef, style: Object.assign(Object.assign({}, popperStyles.popper), { width: targetWidth }) }, attributes.popper), options.map((option, index) => {
|
|
55
61
|
const optionClass = classnames__default["default"](styles.option, {
|
|
56
62
|
[styles.active]: index === highlightedIndex,
|
|
@@ -69,7 +75,7 @@ function Menu({ visible, options, selectedOption, onOptionSelect, attachTo, }) {
|
|
|
69
75
|
option.details !== undefined && (React__default["default"].createElement("div", { className: styles.details },
|
|
70
76
|
React__default["default"].createElement(Text.Text, null, option.details))))));
|
|
71
77
|
})));
|
|
72
|
-
return
|
|
78
|
+
return mounted ? reactDom.createPortal(menu, document.body) : menu;
|
|
73
79
|
function setupKeyListeners() {
|
|
74
80
|
React.useEffect(() => {
|
|
75
81
|
var _a, _b;
|
|
@@ -127,7 +133,7 @@ function useRepositionMenu(attachTo, visible = false) {
|
|
|
127
133
|
{ name: "flip", options: { fallbackPlacements: ["top"] } },
|
|
128
134
|
],
|
|
129
135
|
});
|
|
130
|
-
|
|
136
|
+
useSafeLayoutEffect.useSafeLayoutEffect(() => {
|
|
131
137
|
var _a;
|
|
132
138
|
(_a = popper === null || popper === void 0 ? void 0 : popper.update) === null || _a === void 0 ? void 0 : _a.call(popper);
|
|
133
139
|
}, [visible]);
|
package/dist/Card/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var Card = require('../Card-
|
|
5
|
+
var Card = require('../Card-0a6f3a28.js');
|
|
6
6
|
require('react');
|
|
7
7
|
require('classnames');
|
|
8
8
|
require('../style-inject.es-9d2f5f4e.js');
|
|
@@ -13,11 +13,12 @@ require('../Button-b73a5e01.js');
|
|
|
13
13
|
require('react-router-dom');
|
|
14
14
|
require('../Icon-405a216c.js');
|
|
15
15
|
require('@jobber/design');
|
|
16
|
-
require('../Menu-
|
|
16
|
+
require('../Menu-5fc613a1.js');
|
|
17
17
|
require('uuid');
|
|
18
18
|
require('framer-motion');
|
|
19
19
|
require('@jobber/hooks/useOnKeyDown');
|
|
20
20
|
require('@jobber/hooks/useRefocusOnActivator');
|
|
21
|
+
require('@jobber/hooks/useSafeLayoutEffect');
|
|
21
22
|
|
|
22
23
|
|
|
23
24
|
|
|
@@ -5,7 +5,7 @@ var classnames = require('classnames');
|
|
|
5
5
|
var styleInject_es = require('./style-inject.es-9d2f5f4e.js');
|
|
6
6
|
var Heading = require('./Heading-1e8e4bd3.js');
|
|
7
7
|
var Button = require('./Button-b73a5e01.js');
|
|
8
|
-
var Menu = require('./Menu-
|
|
8
|
+
var Menu = require('./Menu-5fc613a1.js');
|
|
9
9
|
|
|
10
10
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
11
11
|
|
package/dist/Chip/index.js
CHANGED
|
Binary file
|
|
@@ -7,7 +7,7 @@ var styleInject_es = require('./style-inject.es-9d2f5f4e.js');
|
|
|
7
7
|
var Avatar = require('./Avatar-76a799fa.js');
|
|
8
8
|
var Icon = require('./Icon-405a216c.js');
|
|
9
9
|
var Typography = require('./Typography-c45bf216.js');
|
|
10
|
-
var Tooltip = require('./Tooltip-
|
|
10
|
+
var Tooltip = require('./Tooltip-7635add8.js');
|
|
11
11
|
|
|
12
12
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
13
13
|
|
package/dist/Chips/index.js
CHANGED
|
Binary file
|
|
@@ -34,6 +34,10 @@ export interface ComboboxProps {
|
|
|
34
34
|
* The amount of time in ms to debounce the onSearch callback. Defaults to 300ms.
|
|
35
35
|
*/
|
|
36
36
|
readonly onSearchDebounce?: number;
|
|
37
|
+
/**
|
|
38
|
+
* Callback to load more options, this is called when the user scrolls to the bottom of the list.
|
|
39
|
+
*/
|
|
40
|
+
readonly onLoadMore?: () => void;
|
|
37
41
|
/**
|
|
38
42
|
* The Chip heading for the trigger
|
|
39
43
|
*/
|
|
@@ -97,6 +101,10 @@ export interface ComboboxContentProps {
|
|
|
97
101
|
* Function called when search input changes.
|
|
98
102
|
*/
|
|
99
103
|
readonly handleSearchChange: (value: string) => void;
|
|
104
|
+
/**
|
|
105
|
+
* Callback to load more options, this is called when the user scrolls to the bottom of the list.
|
|
106
|
+
*/
|
|
107
|
+
readonly onLoadMore?: () => void;
|
|
100
108
|
/**
|
|
101
109
|
* Reference to the wrapping div element of all the Combobox pieces
|
|
102
110
|
*/
|
|
@@ -191,6 +199,10 @@ export interface ComboboxListProps {
|
|
|
191
199
|
* Should loading state be shown.
|
|
192
200
|
*/
|
|
193
201
|
readonly loading?: boolean;
|
|
202
|
+
/**
|
|
203
|
+
* Callback to load more options, this is called when the user scrolls to the bottom of the list.
|
|
204
|
+
*/
|
|
205
|
+
readonly onLoadMore?: () => void;
|
|
194
206
|
}
|
|
195
207
|
export interface ComboboxActionProps {
|
|
196
208
|
/**
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ComboboxLoadMore } from "./ComboboxLoadMore";
|
|
@@ -4,4 +4,4 @@ export interface UseMakeComboboxHandlersReturn {
|
|
|
4
4
|
handleClose: () => void;
|
|
5
5
|
handleSelection: (selection: ComboboxOption) => void;
|
|
6
6
|
}
|
|
7
|
-
export declare function useMakeComboboxHandlers(setOpen: (open: boolean) => void, setSearchValue: (searchValue: string) => void, selectedOptions: ComboboxOption[], shouldScroll: React.MutableRefObject<boolean>, selectedStateSetter: (selected: ComboboxOption[]) => void, multiSelect?: boolean, onClose?: () => void): UseMakeComboboxHandlersReturn;
|
|
7
|
+
export declare function useMakeComboboxHandlers(setOpen: (open: boolean) => void, setSearchValue: (searchValue: string) => void, selectedOptions: ComboboxOption[], shouldScroll: React.MutableRefObject<boolean>, selectedStateSetter: (selected: ComboboxOption[]) => void, multiSelect?: boolean, onClose?: () => void, onSearch?: (searchValue: string) => void): UseMakeComboboxHandlersReturn;
|
package/dist/Combobox/index.js
CHANGED
|
Binary file
|
|
@@ -2,19 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
var React = require('react');
|
|
4
4
|
var classnames = require('classnames');
|
|
5
|
-
var
|
|
5
|
+
var index = require('./index-6e91168e.js');
|
|
6
|
+
var reactDom = require('react-dom');
|
|
6
7
|
var styleInject_es = require('./style-inject.es-9d2f5f4e.js');
|
|
7
8
|
var Icon = require('./Icon-405a216c.js');
|
|
8
9
|
var Text = require('./Text-259af966.js');
|
|
9
10
|
var Glimmer = require('./Glimmer-7c317864.js');
|
|
11
|
+
var Spinner = require('./Spinner-9d8fc7ff.js');
|
|
12
|
+
var AnimatedPresence = require('./AnimatedPresence-20a02aaa.js');
|
|
10
13
|
var tslib_es6 = require('./tslib.es6-754e2961.js');
|
|
14
|
+
var useInView = require('@jobber/hooks/useInView');
|
|
11
15
|
var Typography = require('./Typography-c45bf216.js');
|
|
12
16
|
var Button = require('./Button-b73a5e01.js');
|
|
13
17
|
var useRefocusOnActivator = require('@jobber/hooks/useRefocusOnActivator');
|
|
14
18
|
var useFocusTrap = require('@jobber/hooks/useFocusTrap');
|
|
15
19
|
var reactPopper = require('react-popper');
|
|
16
20
|
var useOnKeyDown = require('@jobber/hooks/useOnKeyDown');
|
|
17
|
-
var Chip = require('./Chip-
|
|
21
|
+
var Chip = require('./Chip-be6a438f.js');
|
|
18
22
|
var debounce = require('lodash/debounce');
|
|
19
23
|
var noop = require('lodash/noop');
|
|
20
24
|
require('@jobber/design');
|
|
@@ -24,17 +28,16 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
|
|
|
24
28
|
|
|
25
29
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
26
30
|
var classnames__default = /*#__PURE__*/_interopDefaultLegacy(classnames);
|
|
27
|
-
var ReactDOM__default = /*#__PURE__*/_interopDefaultLegacy(ReactDOM);
|
|
28
31
|
var debounce__default = /*#__PURE__*/_interopDefaultLegacy(debounce);
|
|
29
32
|
var noop__default = /*#__PURE__*/_interopDefaultLegacy(noop);
|
|
30
33
|
|
|
31
|
-
var css_248z$
|
|
32
|
-
var styles$
|
|
33
|
-
styleInject_es.styleInject(css_248z$
|
|
34
|
+
var css_248z$7 = ".m1w5vdUZ6rQ- {\n z-index: 1002;\n z-index: var(--elevation-tooltip);\n width: calc((16px * 4) * 3.75);\n width: calc(calc(16px * 4) * 3.75);\n width: calc(var(--space-extravagant) * 3.75);\n box-shadow: 0px calc(16px / 16) calc(16px / 4) 0px\n rgba(0, 0, 0, 0.1),\n 0px calc(16px / 4) 12px 0px rgba(0, 0, 0, 0.05);\n box-shadow: var(--shadow-base);\n margin-top: calc(16px / 2);\n margin-top: var(--space-small);\n border: calc(16px / 16) solid rgb(217, 223, 225);\n border: var(--border-base) solid var(--color-border);\n border-radius: calc(16px / 2);\n border-radius: var(--radius-larger);\n overflow: auto;\n background: rgba(255, 255, 255, 1);\n background: var(--color-surface);\n}\n\n.jobber-retheme .m1w5vdUZ6rQ- {\n border-radius: calc(16px / 8);\n border-radius: var(--radius-base);\n}\n\n/* CAUTION: Tests for content visibility assume this class' presence hides the content\n* so please be careful if you change this class name, or the css rules within.\n*/\n\n.m1w5vdUZ6rQ-.Zlkv2HA096A- {\n display: none;\n visibility: hidden;\n}\n\n.m1w5vdUZ6rQ-:focus,\n.m1w5vdUZ6rQ-:focus-visible {\n outline: none;\n}\n\n.m1w5vdUZ6rQ-:focus-visible {\n box-shadow: 0px 0px 0px calc(16px / 8) rgba(255, 255, 255, 1),\n 0px 0px 0px calc(16px / 4) rgb(147, 161, 169);\n box-shadow: var(--shadow-focus);\n}\n\n.YQry-Rd6zfQ- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n position: sticky;\n gap: calc(16px / 4);\n gap: var(--space-smaller);\n bottom: 0;\n width: 100%;\n background-color: rgba(255, 255, 255, 1);\n background-color: var(--color-surface);\n}\n\n.TcpqL34s4lI- {\n padding-bottom: calc(16px / 2);\n padding-bottom: var(--space-small);\n}\n";
|
|
35
|
+
var styles$7 = {"content":"m1w5vdUZ6rQ-","hidden":"Zlkv2HA096A-","actions":"YQry-Rd6zfQ-","actionPadding":"TcpqL34s4lI-"};
|
|
36
|
+
styleInject_es.styleInject(css_248z$7);
|
|
34
37
|
|
|
35
|
-
var css_248z$
|
|
36
|
-
var styles$
|
|
37
|
-
styleInject_es.styleInject(css_248z$
|
|
38
|
+
var css_248z$6 = ".MIyb-oFZg9w- {\n position: relative;\n}\n\n.WZPK91I4aJs- {\n width: 100%;\n padding: calc(16px * 1);\n padding: var(--space-base);\n padding-right: calc((16px * 1.5) * 2.25);\n padding-right: calc(calc(16px * 1.5) * 2.25);\n padding-right: calc(var(--space-large) * 2.25);\n border: none;\n border-bottom: calc(16px / 16) solid rgb(217, 223, 225);\n border-bottom: var(--border-base) solid var(--color-border);\n font-family: \"Inter\", Helvetica, Arial, sans-serif;\n font-family: var(--typography--fontFamily-normal);\n font-size: calc((16px * 1) * 0.875);\n font-size: calc(calc(16px * 1) * 0.875);\n font-size: var(--typography--fontSize-base);\n}\n\n.WZPK91I4aJs-::-webkit-search-decoration,\n.WZPK91I4aJs-::-webkit-search-cancel-button,\n.WZPK91I4aJs-::-webkit-search-results-button,\n.WZPK91I4aJs-::-webkit-search-results-decoration {\n -webkit-appearance: none;\n}\n\n.WZPK91I4aJs-:focus {\n outline: none;\n}\n\n._7loHrVUe-Rk- {\n display: -ms-flexbox;\n display: flex;\n position: absolute;\n top: 50%;\n right: calc(16px * 1);\n right: var(--space-base);\n z-index: 1002;\n z-index: var(--elevation-tooltip);\n width: calc(16px * 1.5);\n width: var(--space-large);\n height: calc(16px * 1.5);\n height: var(--space-large);\n padding: 0;\n border: none;\n border-radius: 100%;\n border-radius: var(--radius-circle);\n background-color: rgb(238, 240, 242);\n background-color: var(--color-surface--background);\n cursor: pointer;\n -webkit-transform: translateY(-50%);\n transform: translateY(-50%);\n -ms-flex-pack: center;\n justify-content: center;\n -ms-flex-align: center;\n align-items: center;\n}\n\n._7loHrVUe-Rk-:focus {\n outline: transparent;\n}\n\n._7loHrVUe-Rk-:focus-visible {\n box-shadow: 0px 0px 0px calc(16px / 8) rgba(255, 255, 255, 1),\n 0px 0px 0px calc(16px / 4) rgb(147, 161, 169);\n box-shadow: var(--shadow-focus);\n}\n";
|
|
39
|
+
var styles$6 = {"search":"MIyb-oFZg9w-","searchInput":"WZPK91I4aJs-","clearSearch":"_7loHrVUe-Rk-"};
|
|
40
|
+
styleInject_es.styleInject(css_248z$6);
|
|
38
41
|
|
|
39
42
|
function ComboboxContentSearch(props) {
|
|
40
43
|
const searchRef = React.useRef(null);
|
|
@@ -46,9 +49,9 @@ function ComboboxContentSearch(props) {
|
|
|
46
49
|
}, 0);
|
|
47
50
|
}
|
|
48
51
|
}, [props.open]);
|
|
49
|
-
return (React__default["default"].createElement("div", { className: styles$
|
|
50
|
-
React__default["default"].createElement("input", { type: "search", ref: searchRef, className: styles$
|
|
51
|
-
props.searchValue && (React__default["default"].createElement("button", { className: styles$
|
|
52
|
+
return (React__default["default"].createElement("div", { className: styles$6.search },
|
|
53
|
+
React__default["default"].createElement("input", { type: "search", ref: searchRef, className: styles$6.searchInput, placeholder: props.placeholder ? `Search ${props.placeholder}` : "Search", onChange: (event) => handleSearch(event), value: props.searchValue }),
|
|
54
|
+
props.searchValue && (React__default["default"].createElement("button", { className: styles$6.clearSearch, onClick: clearSearch, type: "button", "data-testid": "ATL-Combobox-Content-Search-Clear", "aria-label": "Clear search" },
|
|
52
55
|
React__default["default"].createElement(Icon.Icon, { name: "remove", size: "small" })))));
|
|
53
56
|
function clearSearch() {
|
|
54
57
|
var _a;
|
|
@@ -62,13 +65,13 @@ function ComboboxContentSearch(props) {
|
|
|
62
65
|
}
|
|
63
66
|
}
|
|
64
67
|
|
|
65
|
-
var css_248z$
|
|
66
|
-
var styles$
|
|
67
|
-
styleInject_es.styleInject(css_248z$
|
|
68
|
+
var css_248z$5 = ".SgMzjOcdE-E- {\n position: relative;\n padding: calc(16px / 2) 0;\n padding: var(--space-small) 0;\n}\n\n.TwoTCjgcssc- {\n display: -ms-flexbox;\n display: flex;\n\n max-height: calc((16px / 2) * 33.33);\n\n max-height: calc(calc(16px / 2) * 33.33);\n\n max-height: calc(var(--space-small) * 33.33);\n margin: 0;\n padding: 0;\n overflow: auto;\n list-style: none;\n -ms-flex-direction: column;\n flex-direction: column;\n gap: calc(16px / 4);\n gap: var(--space-smaller);\n}\n\n._8T5M7MGwCRE-,\n._4y5NXkNeIQM- {\n padding: calc(16px / 2) calc(16px * 1);\n padding: var(--space-small) var(--space-base);\n}\n\n.SgMzjOcdE-E-::before,\n.SgMzjOcdE-E-::after {\n content: \"\";\n display: block;\n position: absolute;\n right: 0;\n left: 0;\n height: calc(16px * 1);\n height: var(--space-base);\n pointer-events: none;\n transition: opacity 0.3s ease-in-out;\n}\n\n.SgMzjOcdE-E-::after {\n bottom: calc(16px / 2);\n bottom: var(--space-small);\n background: linear-gradient(\n 180deg,\n rgba(255, 255, 255, 0) 0%,\n rgb(255, 255, 255) 100%\n );\n}\n\n.SgMzjOcdE-E-::before {\n top: calc(16px / 2);\n top: var(--space-small);\n background: linear-gradient(\n to bottom,\n rgba(255, 255, 255, 1),\n rgba(255, 255, 255, 0)\n );\n}\n\n.T6E3VwBGoQM-::before,\n._6HQzxMQkXnE-::before {\n opacity: 0;\n}\n\n._5YsJZyMDkbA-::after,\n._6HQzxMQkXnE-::after {\n opacity: 0;\n}\n\n.A6z4OI58xoE- {\n padding: calc(16px * 1) calc(16px * 1);\n padding: var(--space-base) var(--space-base);\n}\n\n.A6z4OI58xoE-.QqHBSf52fPk- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: center;\n justify-content: center;\n position: sticky;\n bottom: 0;\n padding: calc(16px * 1) 0;\n padding: var(--space-base) 0;\n}\n\n.A6z4OI58xoE-.QqHBSf52fPk-:empty {\n display: none;\n}\n";
|
|
69
|
+
var styles$5 = {"container":"SgMzjOcdE-E-","optionsList":"TwoTCjgcssc-","filterMessage":"_8T5M7MGwCRE-","emptyStateMessage":"_4y5NXkNeIQM-","scrollTop":"T6E3VwBGoQM-","scrollNone":"_6HQzxMQkXnE-","scrollBottom":"_5YsJZyMDkbA-","loadingContainer":"A6z4OI58xoE-","hasOptions":"QqHBSf52fPk-"};
|
|
70
|
+
styleInject_es.styleInject(css_248z$5);
|
|
68
71
|
|
|
69
|
-
var css_248z$
|
|
70
|
-
var styles$
|
|
71
|
-
styleInject_es.styleInject(css_248z$
|
|
72
|
+
var css_248z$4 = "._5QdRGmaNHvc- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-negative: 0;\n flex-shrink: 0;\n min-height: calc((calc(16px * 3) - calc(16px / 4)));\n min-height: calc((var(--space-largest) - var(--space-smaller)));\n box-sizing: border-box;\n margin: 0 calc(16px / 2);\n margin: 0 var(--space-small);\n padding: calc(16px / 2);\n padding: var(--space-small);\n border-radius: calc(16px / 4);\n border-radius: var(--radius-large);\n color: rgb(1, 41, 57);\n color: var(--color-heading);\n font-weight: 500;\n cursor: pointer;\n transition: all 200ms;\n transition: all var(--timing-base);\n -ms-flex-pack: justify;\n justify-content: space-between;\n -ms-flex-align: center;\n align-items: center;\n}\n\n.jobber-retheme ._5QdRGmaNHvc- {\n border-radius: calc(16px / 8);\n border-radius: var(--radius-base);\n}\n\n._5QdRGmaNHvc-:hover,\n._5QdRGmaNHvc-:focus-visible {\n background-color: rgb(244, 246, 250);\n background-color: var(--color-surface--hover);\n}\n\n._5QdRGmaNHvc-:focus,\n._5QdRGmaNHvc-:focus-visible {\n outline: none;\n}\n\n._5QdRGmaNHvc-:focus-visible {\n box-shadow: 0px 0px 0px calc(16px / 8) rgba(255, 255, 255, 1),\n 0px 0px 0px calc(16px / 4) rgb(147, 161, 169);\n box-shadow: var(--shadow-focus);\n}\n";
|
|
73
|
+
var styles$4 = {"option":"_5QdRGmaNHvc-"};
|
|
74
|
+
styleInject_es.styleInject(css_248z$4);
|
|
72
75
|
|
|
73
76
|
const ComboboxContext = React__default["default"].createContext({});
|
|
74
77
|
function ComboboxContextProvider(_a) {
|
|
@@ -80,29 +83,42 @@ function ComboboxOption(props) {
|
|
|
80
83
|
const { selected, selectionHandler } = React.useContext(ComboboxContext);
|
|
81
84
|
const isSelected = selected.some(selection => selection.id.toString() === props.id.toString());
|
|
82
85
|
return (React__default["default"].createElement("li", { key: props.id, tabIndex: -1, "data-selected": isSelected, role: "option", "aria-selected": isSelected, onClick: () => selectionHandler &&
|
|
83
|
-
selectionHandler({ id: props.id, label: props.label }), className: classnames__default["default"](styles$
|
|
86
|
+
selectionHandler({ id: props.id, label: props.label }), className: classnames__default["default"](styles$4.option) },
|
|
84
87
|
props.label,
|
|
85
|
-
isSelected && React__default["default"].createElement(Icon.Icon, { name: "checkmark", color: "blue" })));
|
|
88
|
+
React__default["default"].createElement("div", null, isSelected && React__default["default"].createElement(Icon.Icon, { name: "checkmark", color: "blue" }))));
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
var css_248z$3 = "._3s8-RC5Ky3s- {\n -webkit-transform: translateY(calc((16px * 3) * -1));\n -webkit-transform: translateY(calc(calc(16px * 3) * -1));\n -webkit-transform: translateY(calc(var(--space-largest) * -1));\n transform: translateY(calc((16px * 3) * -1));\n transform: translateY(calc(calc(16px * 3) * -1));\n transform: translateY(calc(var(--space-largest) * -1));\n}\n";
|
|
92
|
+
var styles$3 = {"trigger":"_3s8-RC5Ky3s-"};
|
|
93
|
+
styleInject_es.styleInject(css_248z$3);
|
|
94
|
+
|
|
95
|
+
function ComboboxLoadMore({ onLoadMore }) {
|
|
96
|
+
const [inViewRef, isInView] = useInView.useInView();
|
|
97
|
+
React.useEffect(() => {
|
|
98
|
+
isInView && onLoadMore();
|
|
99
|
+
}, [isInView]);
|
|
100
|
+
return (React__default["default"].createElement("div", { "data-testid": "ATL-Combobox-Loadmore-Trigger", ref: inViewRef, className: styles$3.trigger }));
|
|
86
101
|
}
|
|
87
102
|
|
|
88
103
|
function ComboboxContentList(props) {
|
|
89
104
|
const optionsExist = props.options.length > 0;
|
|
90
|
-
const showOptions = optionsExist && !props.loading;
|
|
91
105
|
const hasSearchTerm = props.searchValue.length > 0;
|
|
92
106
|
const { listScrollState } = useScrollState(props.optionsListRef, props.options);
|
|
93
|
-
return (React__default["default"].createElement("div", { className: classnames__default["default"](styles$
|
|
94
|
-
optionsExist && (React__default["default"].createElement("ul", { className: styles$
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
107
|
+
return (React__default["default"].createElement("div", { className: classnames__default["default"](styles$5.container, styles$5[listScrollState]) },
|
|
108
|
+
optionsExist && (React__default["default"].createElement("ul", { className: styles$5.optionsList, role: "listbox", "aria-multiselectable": props.multiselect, ref: props.optionsListRef },
|
|
109
|
+
props.options.map(option => {
|
|
110
|
+
return (React__default["default"].createElement(ComboboxOption, { key: option.id, id: option.id, label: option.label }));
|
|
111
|
+
}),
|
|
112
|
+
React__default["default"].createElement("div", { className: classnames__default["default"]([styles$5.loadingContainer, styles$5.hasOptions]) },
|
|
113
|
+
React__default["default"].createElement(AnimatedPresence.AnimatedPresence, { transition: "fromBottom" }, Boolean(props.loading && optionsExist) && (React__default["default"].createElement(Spinner.Spinner, { size: "small" })))),
|
|
114
|
+
props.onLoadMore && (React__default["default"].createElement(ComboboxLoadMore, { onLoadMore: props.onLoadMore })))),
|
|
115
|
+
props.loading && !optionsExist && (React__default["default"].createElement(React__default["default"].Fragment, null, Array.from({ length: 5 }).map((_, index) => (React__default["default"].createElement("div", { className: styles$5.loadingContainer, key: index },
|
|
116
|
+
React__default["default"].createElement(Glimmer.Glimmer, { shape: "rectangle", size: "small" })))))),
|
|
117
|
+
hasSearchTerm && !props.loading && !optionsExist && (React__default["default"].createElement("div", { className: styles$5.filterMessage },
|
|
102
118
|
React__default["default"].createElement(Text.Text, { variation: "subdued" },
|
|
103
119
|
"No results for ",
|
|
104
120
|
`“${props.searchValue}”`))),
|
|
105
|
-
!hasSearchTerm && !optionsExist && (React__default["default"].createElement("div", { className: styles$
|
|
121
|
+
!hasSearchTerm && !props.loading && !optionsExist && (React__default["default"].createElement("div", { className: styles$5.emptyStateMessage },
|
|
106
122
|
React__default["default"].createElement(Text.Text, { variation: "subdued" }, getZeroIndexStateText(props.subjectNoun))))));
|
|
107
123
|
}
|
|
108
124
|
function getZeroIndexStateText(subjectNoun) {
|
|
@@ -123,7 +139,7 @@ function useScrollState(optionsListRef, options) {
|
|
|
123
139
|
else if (scrollTop === 0) {
|
|
124
140
|
setlistScrollState("scrollTop");
|
|
125
141
|
}
|
|
126
|
-
else if (scrollTop + clientHeight
|
|
142
|
+
else if (scrollTop + clientHeight >= scrollHeight) {
|
|
127
143
|
setlistScrollState("scrollBottom");
|
|
128
144
|
}
|
|
129
145
|
else {
|
|
@@ -282,19 +298,20 @@ function useComboboxAccessibility(selectionCallback, filteredOptions, optionsLis
|
|
|
282
298
|
function ComboboxContent(props) {
|
|
283
299
|
const optionsExist = props.options.length > 0;
|
|
284
300
|
const { optionsListRef } = useComboboxContent(props.open, props.selected);
|
|
301
|
+
const mounted = index.useAssert.useIsMounted();
|
|
285
302
|
const { popperRef, popperStyles, attributes } = useComboboxAccessibility(props.handleSelection, props.options, optionsListRef, props.open, props.wrapperRef);
|
|
286
|
-
const template = (React__default["default"].createElement("div", Object.assign({ ref: popperRef, id: "ATL-Combobox-Content", "data-testid": "ATL-Combobox-Content", tabIndex: 0, className: classnames__default["default"](styles$
|
|
303
|
+
const template = (React__default["default"].createElement("div", Object.assign({ ref: popperRef, id: "ATL-Combobox-Content", "data-testid": "ATL-Combobox-Content", tabIndex: 0, className: classnames__default["default"](styles$7.content, { [styles$7.hidden]: !props.open }), style: popperStyles.popper }, attributes.popper),
|
|
287
304
|
React__default["default"].createElement(ComboboxContentSearch, { open: props.open, placeholder: props.subjectNoun, searchValue: props.searchValue, setSearchValue: props.setSearchValue, handleSearchChange: props.handleSearchChange }),
|
|
288
|
-
props.multiselect && optionsExist && (React__default["default"].createElement(ComboboxContentHeader, { hasOptionsVisible: optionsExist, subjectNoun: props.subjectNoun, selectedCount: props.selected.length, onClearAll: () => {
|
|
305
|
+
props.multiselect && (optionsExist || props.selected.length > 0) && (React__default["default"].createElement(ComboboxContentHeader, { hasOptionsVisible: optionsExist, subjectNoun: props.subjectNoun, selectedCount: props.selected.length, onClearAll: () => {
|
|
289
306
|
props.selectedStateSetter([]);
|
|
290
307
|
}, onSelectAll: () => {
|
|
291
308
|
props.selectedStateSetter(props.options);
|
|
292
309
|
} })),
|
|
293
|
-
React__default["default"].createElement(ComboboxContentList, { multiselect: props.multiselect, options: props.options, selected: props.selected, optionsListRef: optionsListRef, searchValue: props.searchValue, subjectNoun: props.subjectNoun, loading: props.loading }),
|
|
294
|
-
props.actionElements && (React__default["default"].createElement("div", { className: styles$
|
|
295
|
-
[styles$
|
|
310
|
+
React__default["default"].createElement(ComboboxContentList, { multiselect: props.multiselect, options: props.options, selected: props.selected, optionsListRef: optionsListRef, searchValue: props.searchValue, subjectNoun: props.subjectNoun, loading: props.loading, onLoadMore: props.onLoadMore }),
|
|
311
|
+
props.actionElements && (React__default["default"].createElement("div", { className: styles$7.actions, role: "group" }, props.actionElements.map((child, index, childrenArray) => (React__default["default"].createElement("div", { key: index, className: classnames__default["default"]({
|
|
312
|
+
[styles$7.actionPadding]: index === childrenArray.length - 1,
|
|
296
313
|
}) }, child)))))));
|
|
297
|
-
return
|
|
314
|
+
return mounted ? reactDom.createPortal(template, document.body) : template;
|
|
298
315
|
}
|
|
299
316
|
|
|
300
317
|
var css_248z$1 = ".Ow9wSNnGP-g- {\n width: 100%;\n box-sizing: border-box;\n padding: 0 calc(16px / 2);\n padding: 0 var(--space-small);\n background-color: rgba(255, 255, 255, 1);\n background-color: var(--color-surface);\n}\n\n.ncp0nKHQ7d8- {\n position: relative;\n width: 100%;\n min-height: calc((calc(16px * 3) - calc(16px / 2)));\n min-height: calc((var(--space-largest) - var(--space-small)));\n padding: calc(16px / 2) 0;\n padding: var(--space-small) 0;\n border: none;\n border-radius: calc(16px / 4);\n border-radius: var(--radius-large);\n text-align: left;\n background-color: rgba(255, 255, 255, 1);\n background-color: var(--color-surface);\n cursor: pointer;\n transition: all 200ms;\n transition: all var(--timing-base);\n}\n\n.jobber-retheme .ncp0nKHQ7d8- {\n border-radius: calc(16px / 8);\n border-radius: var(--radius-base);\n}\n\n.ncp0nKHQ7d8-:focus {\n outline: none;\n}\n\n.ncp0nKHQ7d8-:hover,\n.ncp0nKHQ7d8-:focus-visible {\n outline: none;\n background-color: rgb(244, 246, 250);\n background-color: var(--color-surface--hover);\n}\n\n.ncp0nKHQ7d8-:focus-visible {\n box-shadow: 0px 0px 0px calc(16px / 8) rgba(255, 255, 255, 1),\n 0px 0px 0px calc(16px / 4) rgb(147, 161, 169);\n box-shadow: var(--shadow-focus);\n}\n\n.ncp0nKHQ7d8- span {\n margin-left: calc(16px / 2);\n margin-left: var(--space-small);\n}\n";
|
|
@@ -335,15 +352,16 @@ var css_248z = ".W8qMZnORYxI- {\n position: fixed;\n top: 0;\n right: 0;\n b
|
|
|
335
352
|
var styles = {"overlay":"W8qMZnORYxI-","wrapper":"_-0dkolvLF-Y-"};
|
|
336
353
|
styleInject_es.styleInject(css_248z);
|
|
337
354
|
|
|
338
|
-
function useMakeComboboxHandlers(setOpen, setSearchValue, selectedOptions, shouldScroll, selectedStateSetter, multiSelect, onClose) {
|
|
355
|
+
function useMakeComboboxHandlers(setOpen, setSearchValue, selectedOptions, shouldScroll, selectedStateSetter, multiSelect, onClose, onSearch) {
|
|
339
356
|
const handleClose = React.useCallback(() => {
|
|
340
357
|
setOpen(false);
|
|
341
358
|
setSearchValue("");
|
|
359
|
+
onSearch && onSearch("");
|
|
342
360
|
onClose && onClose();
|
|
343
361
|
if (selectedOptions.length > 0) {
|
|
344
362
|
shouldScroll.current = true;
|
|
345
363
|
}
|
|
346
|
-
}, [setOpen, setSearchValue, onClose, selectedOptions.length]);
|
|
364
|
+
}, [setOpen, setSearchValue, onClose, onSearch, selectedOptions.length]);
|
|
347
365
|
const handleSelection = React.useCallback((selection) => {
|
|
348
366
|
if (multiSelect) {
|
|
349
367
|
handleMultiSelect(selectedStateSetter, selectedOptions, selection);
|
|
@@ -376,7 +394,7 @@ function useCombobox(selected, onSelect, options, onClose, multiSelect, onSearch
|
|
|
376
394
|
const [open, setOpen] = React.useState(false);
|
|
377
395
|
const [searchValue, setSearchValue] = React.useState("");
|
|
378
396
|
const searchCallback = React.useCallback(debounce__default["default"]((value) => onSearch === null || onSearch === void 0 ? void 0 : onSearch(value), debounceTime), [onSearch, debounceTime]);
|
|
379
|
-
const { handleClose, handleSelection } = useMakeComboboxHandlers(setOpen, setSearchValue, selected, shouldScroll, onSelect, multiSelect, onClose);
|
|
397
|
+
const { handleClose, handleSelection } = useMakeComboboxHandlers(setOpen, setSearchValue, selected, shouldScroll, onSelect, multiSelect, onClose, onSearch);
|
|
380
398
|
const internalFilteredOptions = options.filter(option => option.label.toLowerCase().includes(searchValue.toLowerCase()));
|
|
381
399
|
return {
|
|
382
400
|
wrapperRef,
|
|
@@ -448,7 +466,7 @@ function Combobox(props) {
|
|
|
448
466
|
React__default["default"].createElement("div", { ref: wrapperRef, className: styles.wrapper },
|
|
449
467
|
open && (React__default["default"].createElement("div", { className: styles.overlay, onClick: () => handleClose(), "data-testid": "ATL-Combobox-Overlay" })),
|
|
450
468
|
triggerElement || (React__default["default"].createElement(ComboboxTrigger, { label: props.label, selected: props.selected })),
|
|
451
|
-
React__default["default"].createElement(ComboboxContent, { multiselect: props.multiSelect, subjectNoun: props.subjectNoun, selected: selectedOptions, actionElements: actionElements, selectedStateSetter: selectedStateSetter, handleSelection: handleSelection, searchValue: searchValue, setSearchValue: setSearchValue, wrapperRef: wrapperRef, open: open, setOpen: setOpen, options: props.onSearch ? options : internalFilteredOptions, loading: props.loading, handleSearchChange: handleSearchChange }))));
|
|
469
|
+
React__default["default"].createElement(ComboboxContent, { multiselect: props.multiSelect, subjectNoun: props.subjectNoun, selected: selectedOptions, actionElements: actionElements, selectedStateSetter: selectedStateSetter, handleSelection: handleSelection, searchValue: searchValue, setSearchValue: setSearchValue, wrapperRef: wrapperRef, open: open, setOpen: setOpen, options: props.onSearch ? options : internalFilteredOptions, loading: props.loading, handleSearchChange: handleSearchChange, onLoadMore: props.onLoadMore }))));
|
|
452
470
|
}
|
|
453
471
|
Combobox.Activator = ComboboxActivator;
|
|
454
472
|
Combobox.Action = ComboboxAction;
|
|
Binary file
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var React = require('react');
|
|
4
4
|
var useOnKeyDown = require('@jobber/hooks/useOnKeyDown');
|
|
5
|
-
var Modal = require('./Modal-
|
|
5
|
+
var Modal = require('./Modal-13c0ea54.js');
|
|
6
6
|
var Content = require('./Content-e3f7b6fc.js');
|
|
7
7
|
var Markdown = require('./Markdown-f7c55304.js');
|
|
8
8
|
|
package/dist/DataDump/index.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var React = require('react');
|
|
6
|
-
var Card = require('../Card-
|
|
6
|
+
var Card = require('../Card-0a6f3a28.js');
|
|
7
7
|
var Content = require('../Content-e3f7b6fc.js');
|
|
8
8
|
var Emphasis = require('../Emphasis-bda56d3b.js');
|
|
9
9
|
require('classnames');
|
|
@@ -15,11 +15,12 @@ require('../Button-b73a5e01.js');
|
|
|
15
15
|
require('react-router-dom');
|
|
16
16
|
require('../Icon-405a216c.js');
|
|
17
17
|
require('@jobber/design');
|
|
18
|
-
require('../Menu-
|
|
18
|
+
require('../Menu-5fc613a1.js');
|
|
19
19
|
require('uuid');
|
|
20
20
|
require('framer-motion');
|
|
21
21
|
require('@jobber/hooks/useOnKeyDown');
|
|
22
22
|
require('@jobber/hooks/useRefocusOnActivator');
|
|
23
|
+
require('@jobber/hooks/useSafeLayoutEffect');
|
|
23
24
|
|
|
24
25
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
25
26
|
|
|
@@ -15,6 +15,7 @@ export declare const SEARCH_DEBOUNCE_DELAY: number;
|
|
|
15
15
|
export declare const DATA_LIST_FILTERING_SPINNER_TEST_ID = "ATL-DataList-filteringSpinner";
|
|
16
16
|
export declare const DATA_LIST_LOADING_MORE_SPINNER_TEST_ID = "ATL-DataList-loadingMoreSpinner";
|
|
17
17
|
export declare const DATA_LOAD_MORE_TEST_ID = "ATL-DataList-LoadMore-trigger";
|
|
18
|
+
export declare const DATA_LIST_STICKY_HEADER_TEST_ID = "ATL-DataList-stickyHeader";
|
|
18
19
|
export declare const TRANSITION_DURATION_IN_SECONDS: number;
|
|
19
20
|
export declare const TRANSITION_DELAY_IN_SECONDS: number;
|
|
20
21
|
export {};
|
|
@@ -39,6 +39,10 @@ export interface SortableOptions {
|
|
|
39
39
|
readonly label: string;
|
|
40
40
|
readonly order: "asc" | "desc";
|
|
41
41
|
}
|
|
42
|
+
export interface DataListSortable {
|
|
43
|
+
readonly key: string;
|
|
44
|
+
readonly options?: SortableOptions[];
|
|
45
|
+
}
|
|
42
46
|
export interface DataListProps<T extends DataListObject> {
|
|
43
47
|
/**
|
|
44
48
|
* The data to render in the DataList.
|
|
@@ -92,10 +96,7 @@ export interface DataListProps<T extends DataListObject> {
|
|
|
92
96
|
* `onSort`: The callback function when the user sorting a column.
|
|
93
97
|
*/
|
|
94
98
|
readonly sorting?: {
|
|
95
|
-
readonly sortable:
|
|
96
|
-
key: string;
|
|
97
|
-
options?: SortableOptions[];
|
|
98
|
-
}[];
|
|
99
|
+
readonly sortable: DataListSortable[];
|
|
99
100
|
readonly state: DataListSorting | undefined;
|
|
100
101
|
readonly onSort: (sorting?: DataListSorting) => void;
|
|
101
102
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { PropsWithChildren } from "react";
|
|
2
2
|
interface DataListActionsMenuProps {
|
|
3
3
|
readonly visible: boolean;
|
|
4
4
|
readonly position: {
|
|
@@ -7,5 +7,5 @@ interface DataListActionsMenuProps {
|
|
|
7
7
|
};
|
|
8
8
|
readonly onRequestClose: () => void;
|
|
9
9
|
}
|
|
10
|
-
export declare function DataListActionsMenu({ visible, position, onRequestClose, children, }: PropsWithChildren<DataListActionsMenuProps>):
|
|
10
|
+
export declare function DataListActionsMenu({ visible, position, onRequestClose, children, }: PropsWithChildren<DataListActionsMenuProps>): JSX.Element;
|
|
11
11
|
export {};
|
package/dist/DataList/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export * from "./DataList";
|
|
2
|
-
export { DataListItemType, DataListSorting, DataListSelectedType, DataListSelectedAllType, } from "./DataList.types";
|
|
2
|
+
export { DataListItemType, DataListSorting, DataListSortable, DataListSelectedType, DataListSelectedAllType, } from "./DataList.types";
|
package/dist/DataList/index.js
CHANGED
|
Binary file
|
package/dist/FormatFile/index.js
CHANGED
|
Binary file
|
|
@@ -5,7 +5,7 @@ var classnames = require('classnames');
|
|
|
5
5
|
var getHumanReadableFileSize = require('filesize');
|
|
6
6
|
var styleInject_es = require('./style-inject.es-9d2f5f4e.js');
|
|
7
7
|
var Button = require('./Button-b73a5e01.js');
|
|
8
|
-
var ConfirmationModal = require('./ConfirmationModal-
|
|
8
|
+
var ConfirmationModal = require('./ConfirmationModal-8da79c12.js');
|
|
9
9
|
var Glimmer = require('./Glimmer-7c317864.js');
|
|
10
10
|
var Icon = require('./Icon-405a216c.js');
|
|
11
11
|
var Typography = require('./Typography-c45bf216.js');
|
package/dist/Gallery/index.js
CHANGED
|
Binary file
|
package/dist/InputText/index.js
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var InputText = require('../InputText-
|
|
5
|
+
var InputText = require('../InputText-6c71361e.js');
|
|
6
6
|
require('react');
|
|
7
|
+
require('@jobber/hooks/useSafeLayoutEffect');
|
|
7
8
|
require('../FormField-b4e6c549.js');
|
|
8
9
|
require('../tslib.es6-754e2961.js');
|
|
9
10
|
require('uuid');
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var React = require('react');
|
|
4
|
+
var useSafeLayoutEffect = require('@jobber/hooks/useSafeLayoutEffect');
|
|
4
5
|
var FormField = require('./FormField-b4e6c549.js');
|
|
5
6
|
|
|
6
7
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
@@ -34,7 +35,7 @@ function InputTextInternal(props, ref) {
|
|
|
34
35
|
}
|
|
35
36
|
},
|
|
36
37
|
}));
|
|
37
|
-
|
|
38
|
+
useSafeLayoutEffect.useSafeLayoutEffect(() => {
|
|
38
39
|
if (inputRef && inputRef.current instanceof HTMLTextAreaElement) {
|
|
39
40
|
resize(inputRef.current);
|
|
40
41
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
/// <reference types="react" />
|
|
2
2
|
interface PresentedImage {
|
|
3
3
|
title?: string;
|
|
4
4
|
caption?: string;
|
|
@@ -33,5 +33,5 @@ interface LightBoxProps {
|
|
|
33
33
|
*/
|
|
34
34
|
onRequestClose(options: RequestCloseOptions): void;
|
|
35
35
|
}
|
|
36
|
-
export declare function LightBox({ open, images, imageIndex, onRequestClose, }: LightBoxProps):
|
|
36
|
+
export declare function LightBox({ open, images, imageIndex, onRequestClose, }: LightBoxProps): JSX.Element;
|
|
37
37
|
export {};
|
package/dist/LightBox/index.js
CHANGED
|
Binary file
|
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
var React = require('react');
|
|
4
4
|
var framerMotion = require('framer-motion');
|
|
5
|
-
var
|
|
5
|
+
var reactDom = require('react-dom');
|
|
6
6
|
var debounce = require('lodash/debounce');
|
|
7
7
|
var useRefocusOnActivator = require('@jobber/hooks/useRefocusOnActivator');
|
|
8
8
|
var useOnKeyDown = require('@jobber/hooks/useOnKeyDown');
|
|
9
9
|
var useFocusTrap = require('@jobber/hooks/useFocusTrap');
|
|
10
|
+
var index = require('./index-6e91168e.js');
|
|
10
11
|
var styleInject_es = require('./style-inject.es-9d2f5f4e.js');
|
|
11
12
|
var ButtonDismiss = require('./ButtonDismiss-350af163.js');
|
|
12
13
|
var Button = require('./Button-b73a5e01.js');
|
|
@@ -14,7 +15,6 @@ var Button = require('./Button-b73a5e01.js');
|
|
|
14
15
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
15
16
|
|
|
16
17
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
17
|
-
var ReactDOM__default = /*#__PURE__*/_interopDefaultLegacy(ReactDOM);
|
|
18
18
|
var debounce__default = /*#__PURE__*/_interopDefaultLegacy(debounce);
|
|
19
19
|
|
|
20
20
|
var css_248z = "._3JgBCebdbNU-,\n.JJOBEL7d-10- {\n display: -ms-flexbox;\n display: flex;\n position: absolute;\n top: 50%;\n z-index: 1;\n z-index: var(--elevation-base);\n -webkit-transform: translateY(-50%);\n transform: translateY(-50%);\n}\n\n._3JgBCebdbNU- {\n right: calc(16px * 1);\n right: var(--space-base);\n}\n\n.JJOBEL7d-10- {\n left: calc(16px * 1);\n left: var(--space-base);\n}\n\n.fAep1A-0xIU- {\n display: -ms-flexbox;\n display: flex;\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1001;\n z-index: var(--elevation-modal);\n width: 100%;\n height: 100%;\n -ms-flex-pack: justify;\n justify-content: space-between;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n\n.AfUUWErd5S4- {\n display: -ms-flexbox;\n display: flex;\n z-index: 1;\n z-index: var(--elevation-base);\n padding: calc(16px / 2) calc(16px * 1);\n padding: var(--space-small) var(--space-base);\n color: rgb(193, 201, 206);\n color: var(--color-text--reverse--secondary);\n font-size: calc(16px * 1);\n font-size: var(--typography--fontSize-large);\n background-color: rgb(1, 41, 57);\n background-color: var(--color-surface--reverse);\n -ms-flex-pack: justify;\n justify-content: space-between;\n}\n\n.jobber-retheme .AfUUWErd5S4- {\n color: rgb(77, 105, 116);\n color: var(--color-text--secondary);\n background-color: rgb(238, 240, 242);\n background-color: var(--color-surface--background);\n}\n\n.ysUYbBTaORk- {\n display: -ms-inline-flexbox;\n display: inline-flex;\n -ms-flex-align: center;\n align-items: center;\n}\n\n.GSOVtN1Y3IU- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: center;\n justify-content: center;\n position: relative;\n -ms-flex: 1 1 0px;\n flex: 1 1 0;\n min-height: 0;\n}\n\n.-V917BdNqSs- {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: rgba(0, 0, 0, 0.32);\n background-color: var(--color-overlay);\n}\n\n.sjwUjzb3a5c- {\n position: absolute;\n top: 50%;\n max-width: 100%;\n max-height: 100%;\n margin: auto;\n}\n";
|
|
@@ -60,6 +60,7 @@ function LightBox({ open, images, imageIndex = 0, onRequestClose, }) {
|
|
|
60
60
|
const lightboxRef = useFocusTrap.useFocusTrap(open);
|
|
61
61
|
const debouncedHandleNext = debounce__default["default"](handleMoveNext, debounceDuration);
|
|
62
62
|
const debouncedHandlePrevious = debounce__default["default"](handleMovePrevious, debounceDuration);
|
|
63
|
+
const mounted = index.useAssert.useIsMounted();
|
|
63
64
|
useRefocusOnActivator.useRefocusOnActivator(open);
|
|
64
65
|
useOnKeyDown.useOnKeyDown(handleRequestClose, "Escape");
|
|
65
66
|
useOnKeyDown.useOnKeyDown(debouncedHandlePrevious, {
|
|
@@ -83,7 +84,7 @@ function LightBox({ open, images, imageIndex = 0, onRequestClose, }) {
|
|
|
83
84
|
React__default["default"].createElement(NextButton, { onClick: debouncedHandleNext }))),
|
|
84
85
|
React__default["default"].createElement("div", { className: styles.toolbar }, images[currentImageIndex].caption),
|
|
85
86
|
React__default["default"].createElement("div", { className: styles.overlay, onClick: handleRequestClose })))));
|
|
86
|
-
return
|
|
87
|
+
return mounted ? reactDom.createPortal(template, document.body) : template;
|
|
87
88
|
function handleMovePrevious() {
|
|
88
89
|
setDirection(-1);
|
|
89
90
|
setCurrentImageIndex((currentImageIndex + images.length - 1) % images.length);
|
package/dist/Menu/Menu.d.ts
CHANGED
|
@@ -25,15 +25,15 @@ export interface ActionProps {
|
|
|
25
25
|
/**
|
|
26
26
|
* Action label
|
|
27
27
|
*/
|
|
28
|
-
label: string;
|
|
28
|
+
readonly label: string;
|
|
29
29
|
/**
|
|
30
30
|
* Parent Section Label
|
|
31
31
|
*/
|
|
32
|
-
sectionLabel?: string;
|
|
32
|
+
readonly sectionLabel?: string;
|
|
33
33
|
/**
|
|
34
34
|
* Visual cue for the action label
|
|
35
35
|
*/
|
|
36
|
-
icon?: IconNames;
|
|
36
|
+
readonly icon?: IconNames;
|
|
37
37
|
/**
|
|
38
38
|
* Callback when an action gets clicked
|
|
39
39
|
*/
|
|
@@ -41,5 +41,5 @@ export interface ActionProps {
|
|
|
41
41
|
/**
|
|
42
42
|
* Focus on the action when rendered
|
|
43
43
|
*/
|
|
44
|
-
shouldFocus?: boolean;
|
|
44
|
+
readonly shouldFocus?: boolean;
|
|
45
45
|
}
|
package/dist/Menu/index.js
CHANGED
|
@@ -2,13 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var Menu = require('../Menu-
|
|
5
|
+
var Menu = require('../Menu-5fc613a1.js');
|
|
6
6
|
require('react');
|
|
7
7
|
require('uuid');
|
|
8
8
|
require('classnames');
|
|
9
9
|
require('framer-motion');
|
|
10
10
|
require('@jobber/hooks/useOnKeyDown');
|
|
11
11
|
require('@jobber/hooks/useRefocusOnActivator');
|
|
12
|
+
require('@jobber/hooks/useSafeLayoutEffect');
|
|
12
13
|
require('../style-inject.es-9d2f5f4e.js');
|
|
13
14
|
require('../Button-b73a5e01.js');
|
|
14
15
|
require('react-router-dom');
|
|
@@ -6,6 +6,7 @@ var classnames = require('classnames');
|
|
|
6
6
|
var framerMotion = require('framer-motion');
|
|
7
7
|
var useOnKeyDown = require('@jobber/hooks/useOnKeyDown');
|
|
8
8
|
var useRefocusOnActivator = require('@jobber/hooks/useRefocusOnActivator');
|
|
9
|
+
var useSafeLayoutEffect = require('@jobber/hooks/useSafeLayoutEffect');
|
|
9
10
|
var styleInject_es = require('./style-inject.es-9d2f5f4e.js');
|
|
10
11
|
var Button = require('./Button-b73a5e01.js');
|
|
11
12
|
var Typography = require('./Typography-c45bf216.js');
|
|
@@ -45,7 +46,7 @@ function Menu({ activator, items }) {
|
|
|
45
46
|
const buttonID = uuid.v1();
|
|
46
47
|
const menuID = uuid.v1();
|
|
47
48
|
useOnKeyDown.useOnKeyDown(handleKeyboardShortcut, ["Escape"]);
|
|
48
|
-
|
|
49
|
+
useSafeLayoutEffect.useSafeLayoutEffect(() => {
|
|
49
50
|
if (wrapperRef.current) {
|
|
50
51
|
const bounds = wrapperRef.current.getBoundingClientRect();
|
|
51
52
|
const newPosition = Object.assign({}, position);
|
package/dist/Modal/Modal.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
2
|
import sizes from "./Sizes.css";
|
|
3
3
|
import { ButtonProps } from "../Button";
|
|
4
4
|
export interface ModalProps {
|
|
@@ -18,4 +18,4 @@ export interface ModalProps {
|
|
|
18
18
|
readonly tertiaryAction?: ButtonProps;
|
|
19
19
|
onRequestClose?(): void;
|
|
20
20
|
}
|
|
21
|
-
export declare function Modal({ open, title, size, dismissible, children, primaryAction, secondaryAction, tertiaryAction, onRequestClose, }: ModalProps):
|
|
21
|
+
export declare function Modal({ open, title, size, dismissible, children, primaryAction, secondaryAction, tertiaryAction, onRequestClose, }: ModalProps): JSX.Element;
|
package/dist/Modal/index.js
CHANGED
|
Binary file
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var React = require('react');
|
|
4
|
-
var
|
|
4
|
+
var reactDom = require('react-dom');
|
|
5
5
|
var classnames = require('classnames');
|
|
6
6
|
var framerMotion = require('framer-motion');
|
|
7
7
|
var useRefocusOnActivator = require('@jobber/hooks/useRefocusOnActivator');
|
|
8
8
|
var useOnKeyDown = require('@jobber/hooks/useOnKeyDown');
|
|
9
9
|
var useFocusTrap = require('@jobber/hooks/useFocusTrap');
|
|
10
|
+
var index = require('./index-6e91168e.js');
|
|
10
11
|
var styleInject_es = require('./style-inject.es-9d2f5f4e.js');
|
|
11
12
|
var Heading = require('./Heading-1e8e4bd3.js');
|
|
12
13
|
var Button = require('./Button-b73a5e01.js');
|
|
@@ -15,7 +16,6 @@ var ButtonDismiss = require('./ButtonDismiss-350af163.js');
|
|
|
15
16
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
16
17
|
|
|
17
18
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
18
|
-
var ReactDOM__default = /*#__PURE__*/_interopDefaultLegacy(ReactDOM);
|
|
19
19
|
var classnames__default = /*#__PURE__*/_interopDefaultLegacy(classnames);
|
|
20
20
|
|
|
21
21
|
var css_248z$1 = ":root {\n --modal--width: calc(var(--base-unit) * 37.5);\n --modal--padding-horizontal: var(--space-base);\n --modal--padding-vertical: var(--space-base);\n --modal--padding: var(--modal--padding-vertical)\n var(--modal--padding-horizontal);\n}\n\n@media (min-width: 768px) {\n\n:root {\n --modal--padding-horizontal: var(--space-large);\n}\n }\n\n@media (--medium-screens-and-up) {\n\n:root {\n --modal--padding-horizontal: var(--space-large);\n}\n }\n\n:root .jobber-retheme {\n --modal--shadow: var(--shadow-base);\n}\n\n@media (min-width: 768px) {\n\n:root .jobber-retheme {\n --modal--padding-horizontal: var(--space-large);\n --modal--padding-vertical: var(--space-large);\n --modal--padding: var(--modal--padding-vertical)\n var(--modal--padding-horizontal);\n}\n }\n\n@media (--medium-screens-and-up) {\n\n:root .jobber-retheme {\n --modal--padding-horizontal: var(--space-large);\n --modal--padding-vertical: var(--space-large);\n --modal--padding: var(--modal--padding-vertical)\n var(--modal--padding-horizontal);\n}\n }\n\n.QGRLFHPoV5E- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n z-index: 1001;\n z-index: var(--elevation-modal);\n padding: calc(16px / 2);\n padding: var(--space-small);\n overflow: auto;\n}\n\n.QGRLFHPoV5E-,\n._4WzGOMUGj5I- {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n}\n\n._4WzGOMUGj5I- {\n background-color: rgba(0, 0, 0, 0.32);\n background-color: var(--color-overlay);\n}\n\n.WLId2NJBQcQ- {\n position: relative;\n width: 100%;\n max-width: calc(16px * 37.5);\n max-width: var(--modal--width);\n box-shadow: var(--modal--shadow);\n margin: auto;\n border: calc(16px / 16) solid rgb(217, 223, 225);\n border: var(--border-base) solid var(--color-border);\n border-radius: calc(16px / 8);\n border-radius: var(--radius-base);\n background-color: rgba(255, 255, 255, 1);\n background-color: var(--color-surface);\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n outline-color: rgb(147, 161, 169);\n outline-color: var(--color-focus);\n}\n\n/* Adjust `Content` and `Tab` components public padding to match the modal */\n\n.WLId2NJBQcQ- > * {\n --public-content--padding: var(--modal--padding);\n --public-tab--inset: var(--modal--padding-horizontal);\n}\n\n/* Remove the nested `Content` components public padding */\n\n.WLId2NJBQcQ- > * > * {\n --public-content--padding: 0;\n}\n\n.wjrPpIUNNrk- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: justify;\n justify-content: space-between;\n -ms-flex-align: center;\n align-items: center;\n padding: calc(16px * 1)\n calc(16px * 1);\n padding: var(--modal--padding);\n background-color: rgb(238, 240, 242);\n background-color: var(--color-surface--background);\n}\n\n.jobber-retheme .wjrPpIUNNrk- {\n background-color: transparent;\n}\n\n.jobber-retheme .wjrPpIUNNrk- h3 {\n font-family: \"Inter\", Helvetica, Arial, sans-serif;\n font-family: var(--typography--fontFamily-normal);\n font-size: calc((16px * 1) * 1.5);\n font-size: calc(calc(16px * 1) * 1.5);\n font-size: var(--typography--fontSize-largest);\n}\n\n/**\n * Ensure there's no extra padding top on the next element. This mostly negates\n * the <Content /> padding\n */\n\n.jobber-retheme .wjrPpIUNNrk- + * {\n padding-top: 0;\n}\n\n.rKvigUnOyYE- {\n padding: 0;\n border: none;\n background-color: transparent;\n cursor: pointer;\n -webkit-appearance: none;\n appearance: none;\n}\n\n._62c8HLZFwvs- {\n display: -ms-flexbox;\n display: flex;\n padding: calc(16px * 1)\n calc(16px * 1);\n padding: var(--modal--padding);\n padding-top: 0;\n -ms-flex: 1 1 100%;\n flex: 1 1 100%;\n -ms-flex-pack: end;\n justify-content: flex-end;\n}\n\n/**\n * 1. Use CSS `order` to adjust the buttons position on the UI\n */\n\n.Xl1Ptn-P9Ew- {\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n -ms-flex-order: 1;\n order: 1; /* 1 */\n}\n\n.p2s7GtpoZz0- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n -ms-flex-order: 2;\n order: 2; /* 1 */\n}\n\n/* This is in a correct position and order */\n\n/* stylelint-disable-next-line no-descending-specificity */\n\n.p2s7GtpoZz0- > * {\n margin-left: calc(16px / 2);\n margin-left: var(--space-small);\n}\n\n.p2s7GtpoZz0- *:first-child {\n -ms-flex-order: 2;\n order: 2; /* 1 */\n}\n\n.p2s7GtpoZz0- *:nth-child(2) {\n -ms-flex-order: 1;\n order: 1; /* 1 */\n}\n";
|
|
@@ -31,6 +31,7 @@ function Modal({ open = false, title, size, dismissible = true, children, primar
|
|
|
31
31
|
useRefocusOnActivator.useRefocusOnActivator(open);
|
|
32
32
|
const modalRef = useFocusTrap.useFocusTrap(open);
|
|
33
33
|
useOnKeyDown.useOnKeyDown(handleRequestClose, "Escape");
|
|
34
|
+
const mounted = index.useAssert.useIsMounted();
|
|
34
35
|
const template = (React__default["default"].createElement(framerMotion.AnimatePresence, null, open && (React__default["default"].createElement("div", { ref: modalRef, role: "dialog", className: styles.container, tabIndex: 0 },
|
|
35
36
|
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
37
|
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: {
|
|
@@ -40,7 +41,7 @@ function Modal({ open = false, title, size, dismissible = true, children, primar
|
|
|
40
41
|
title != undefined && (React__default["default"].createElement(Header, { title: title, dismissible: dismissible, onRequestClose: onRequestClose })),
|
|
41
42
|
children,
|
|
42
43
|
React__default["default"].createElement(Actions, { primary: primaryAction, secondary: secondaryAction, tertiary: tertiaryAction }))))));
|
|
43
|
-
return
|
|
44
|
+
return mounted ? reactDom.createPortal(template, document.body) : template;
|
|
44
45
|
function handleRequestClose() {
|
|
45
46
|
if (open && onRequestClose) {
|
|
46
47
|
onRequestClose();
|
package/dist/Page/index.js
CHANGED
|
@@ -11,7 +11,7 @@ var Text = require('../Text-259af966.js');
|
|
|
11
11
|
var Content = require('../Content-e3f7b6fc.js');
|
|
12
12
|
var Markdown = require('../Markdown-f7c55304.js');
|
|
13
13
|
var Button = require('../Button-b73a5e01.js');
|
|
14
|
-
var Menu = require('../Menu-
|
|
14
|
+
var Menu = require('../Menu-5fc613a1.js');
|
|
15
15
|
var Emphasis = require('../Emphasis-bda56d3b.js');
|
|
16
16
|
require('../Typography-c45bf216.js');
|
|
17
17
|
require('../getAtlantisConfig-0f3e8af2.js');
|
|
@@ -23,6 +23,7 @@ require('uuid');
|
|
|
23
23
|
require('framer-motion');
|
|
24
24
|
require('@jobber/hooks/useOnKeyDown');
|
|
25
25
|
require('@jobber/hooks/useRefocusOnActivator');
|
|
26
|
+
require('@jobber/hooks/useSafeLayoutEffect');
|
|
26
27
|
|
|
27
28
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
28
29
|
|
package/dist/Table/index.js
CHANGED
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var React = require('react');
|
|
6
6
|
var styleInject_es = require('../style-inject.es-9d2f5f4e.js');
|
|
7
7
|
var classnames = require('classnames');
|
|
8
|
-
var
|
|
8
|
+
var require$$3 = require('@jobber/formatters');
|
|
9
9
|
|
|
10
10
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
11
11
|
|
|
@@ -39,7 +39,7 @@ function CellNumeric({ value }) {
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
function CellCurrency({ value, currency = undefined, }) {
|
|
42
|
-
return React__default["default"].createElement(CellNumeric, { value:
|
|
42
|
+
return React__default["default"].createElement(CellNumeric, { value: require$$3.formatCurrency(value, currency) });
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
function Header({ children }) {
|
package/dist/Tooltip/index.js
CHANGED
|
Binary file
|
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
var React = require('react');
|
|
4
4
|
var classnames = require('classnames');
|
|
5
|
-
var
|
|
5
|
+
var reactDom = require('react-dom');
|
|
6
6
|
var framerMotion = require('framer-motion');
|
|
7
|
+
var index = require('./index-6e91168e.js');
|
|
8
|
+
var useSafeLayoutEffect = require('@jobber/hooks/useSafeLayoutEffect');
|
|
7
9
|
var styleInject_es = require('./style-inject.es-9d2f5f4e.js');
|
|
8
10
|
var reactPopper = require('react-popper');
|
|
9
11
|
|
|
@@ -11,7 +13,6 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
|
|
|
11
13
|
|
|
12
14
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
13
15
|
var classnames__default = /*#__PURE__*/_interopDefaultLegacy(classnames);
|
|
14
|
-
var ReactDOM__default = /*#__PURE__*/_interopDefaultLegacy(ReactDOM);
|
|
15
16
|
|
|
16
17
|
var css_248z = ":root {\n --tooltip--arrow-size: var(--space-small);\n --tooltip--offset: calc(-1 * var(--space-smaller));\n --tooltip--surface: var(--color-surface--reverse);\n}\n\n.q07bkGoq714- {\n display: none;\n}\n\n.dkCTRfc3vYk- {\n display: inline-block;\n position: absolute;\n z-index: 1002;\n z-index: var(--elevation-tooltip);\n pointer-events: none;\n}\n\n.yAFP4gRKlTM- {\n display: inline-block;\n position: relative;\n max-width: calc(16px * 15);\n max-width: calc(var(--base-unit) * 15);\n padding: calc((16px * 1) - (16px / 8)) calc(16px * 1);\n padding: calc(calc(16px * 1) - calc(16px / 8)) calc(16px * 1);\n padding: calc(var(--space-base) - var(--space-smallest)) var(--space-base);\n border-radius: calc(16px / 2);\n border-radius: var(--radius-larger);\n background-color: rgb(1, 41, 57);\n background-color: var(--tooltip--surface);\n}\n\n.jobber-retheme .yAFP4gRKlTM- {\n border-radius: calc(16px / 8);\n border-radius: var(--radius-base);\n}\n\n.yAFP4gRKlTM- .j9KgRON7iTU-,\n.yAFP4gRKlTM- .j9KgRON7iTU-::after {\n width: calc(16px / 2);\n width: var(--tooltip--arrow-size);\n height: calc(16px / 2);\n height: var(--tooltip--arrow-size);\n background-color: transparent;\n}\n\n.yAFP4gRKlTM- .j9KgRON7iTU-::after {\n content: \"\";\n display: block;\n position: absolute;\n background-color: rgb(1, 41, 57);\n background-color: var(--tooltip--surface);\n -webkit-transform: rotate(45deg);\n transform: rotate(45deg);\n}\n\n.B6uh34-qEuA- {\n padding-bottom: calc(16px / 2);\n padding-bottom: var(--space-small);\n}\n\n.B6uh34-qEuA- .yAFP4gRKlTM- {\n -webkit-transform-origin: bottom center;\n transform-origin: bottom center;\n}\n\n.B6uh34-qEuA- .yAFP4gRKlTM- .j9KgRON7iTU- {\n bottom: calc(-1 * (16px / 4));\n bottom: calc(-1 * calc(16px / 4));\n bottom: var(--tooltip--offset);\n}\n\n.B6uh34-qEuA- .yAFP4gRKlTM- .j9KgRON7iTU-::after {\n border-top-width: 0;\n border-left-width: 0;\n}\n\n.Wft7Ug-lXEc- {\n padding-top: calc(16px / 2);\n padding-top: var(--space-small);\n}\n\n.Wft7Ug-lXEc- .yAFP4gRKlTM- {\n -webkit-transform-origin: top center;\n transform-origin: top center;\n}\n\n.Wft7Ug-lXEc- .yAFP4gRKlTM- .j9KgRON7iTU- {\n top: calc(-1 * (16px / 4));\n top: calc(-1 * calc(16px / 4));\n top: var(--tooltip--offset);\n}\n\n.Wft7Ug-lXEc- .yAFP4gRKlTM- .j9KgRON7iTU-::after {\n border-bottom-width: 0;\n border-right-width: 0;\n}\n\n.TpdeLUuiQMg- {\n margin: 0;\n color: rgba(255, 255, 255, 1);\n color: var(--color-text--reverse);\n font-size: calc((16px * 1) * 0.875);\n font-size: calc(calc(16px * 1) * 0.875);\n font-size: var(--typography--fontSize-base);\n font-weight: 600;\n line-height: 1.25;\n line-height: var(--typography--lineHeight-base);\n}\n";
|
|
17
18
|
var styles = {"shadowActivator":"q07bkGoq714-","tooltipWrapper":"dkCTRfc3vYk-","tooltip":"yAFP4gRKlTM-","arrow":"j9KgRON7iTU-","above":"B6uh34-qEuA-","below":"Wft7Ug-lXEc-","tooltipMessage":"TpdeLUuiQMg-"};
|
|
@@ -43,19 +44,20 @@ const variation = {
|
|
|
43
44
|
};
|
|
44
45
|
function Tooltip({ message, children }) {
|
|
45
46
|
const [show, setShow] = React.useState(false);
|
|
47
|
+
const mounted = index.useAssert.useIsMounted();
|
|
46
48
|
const { attributes, placement, shadowRef, styles: popperStyles, setArrowRef, setTooltipRef, } = useTooltipPositioning();
|
|
47
49
|
initializeListeners();
|
|
48
50
|
const toolTipClassNames = classnames__default["default"](styles.tooltipWrapper, placement === "bottom" && styles.below, placement === "top" && styles.above);
|
|
49
51
|
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
50
52
|
React__default["default"].createElement("span", { className: styles.shadowActivator, ref: shadowRef }),
|
|
51
53
|
children,
|
|
52
|
-
React__default["default"].createElement(TooltipPortal, null, show && Boolean(message) && (React__default["default"].createElement("div", Object.assign({ className: toolTipClassNames, style: popperStyles.popper, ref: setTooltipRef, role: "tooltip" }, attributes.popper),
|
|
54
|
+
mounted && (React__default["default"].createElement(TooltipPortal, null, show && Boolean(message) && (React__default["default"].createElement("div", Object.assign({ className: toolTipClassNames, style: popperStyles.popper, ref: setTooltipRef, role: "tooltip" }, attributes.popper),
|
|
53
55
|
React__default["default"].createElement(framerMotion.motion.div, { className: styles.tooltip, variants: variation, initial: "startOrStop", animate: "done", exit: "startOrStop", transition: {
|
|
54
56
|
damping: 50,
|
|
55
57
|
stiffness: 500,
|
|
56
58
|
} },
|
|
57
59
|
React__default["default"].createElement("p", { className: styles.tooltipMessage }, message),
|
|
58
|
-
React__default["default"].createElement("div", { ref: setArrowRef, style: popperStyles.arrow, className: styles.arrow })))))));
|
|
60
|
+
React__default["default"].createElement("div", { ref: setArrowRef, style: popperStyles.arrow, className: styles.arrow }))))))));
|
|
59
61
|
function initializeListeners() {
|
|
60
62
|
const showTooltip = () => {
|
|
61
63
|
setShow(true);
|
|
@@ -95,7 +97,7 @@ function Tooltip({ message, children }) {
|
|
|
95
97
|
activator.removeEventListener("blur", hideTooltip);
|
|
96
98
|
}
|
|
97
99
|
};
|
|
98
|
-
|
|
100
|
+
useSafeLayoutEffect.useSafeLayoutEffect(() => {
|
|
99
101
|
injectAttributes();
|
|
100
102
|
addListeners();
|
|
101
103
|
return () => {
|
|
@@ -105,7 +107,7 @@ function Tooltip({ message, children }) {
|
|
|
105
107
|
}
|
|
106
108
|
}
|
|
107
109
|
function TooltipPortal({ children }) {
|
|
108
|
-
return
|
|
110
|
+
return reactDom.createPortal(children, document.body);
|
|
109
111
|
}
|
|
110
112
|
|
|
111
113
|
exports.Tooltip = Tooltip;
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jobber/components",
|
|
3
|
-
"version": "4.77.
|
|
3
|
+
"version": "4.77.6-JOB-84042.1+dc73bd04",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -19,9 +19,9 @@
|
|
|
19
19
|
"dist/*"
|
|
20
20
|
],
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@jobber/design": "^0.53.
|
|
23
|
-
"@jobber/formatters": "
|
|
24
|
-
"@jobber/hooks": "^2.8.
|
|
22
|
+
"@jobber/design": "^0.53.1-JOB-84042.9+dc73bd04",
|
|
23
|
+
"@jobber/formatters": "^0.2.2",
|
|
24
|
+
"@jobber/hooks": "^2.8.2-JOB-84042.25+dc73bd04",
|
|
25
25
|
"@popperjs/core": "^2.0.6",
|
|
26
26
|
"@std-proposal/temporal": "0.0.1",
|
|
27
27
|
"@tanstack/react-table": "8.5.13",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"@types/react-router": "5.1.7",
|
|
32
32
|
"@types/react-router-dom": "^5.3.3",
|
|
33
33
|
"@types/uuid": "^8.3.3",
|
|
34
|
-
"axios": "^
|
|
34
|
+
"axios": "^1.6.0",
|
|
35
35
|
"classnames": "^2.3.2",
|
|
36
36
|
"color": "^3.1.2",
|
|
37
37
|
"filesize": "^6.1.0",
|
|
@@ -84,5 +84,5 @@
|
|
|
84
84
|
"> 1%",
|
|
85
85
|
"IE 10"
|
|
86
86
|
],
|
|
87
|
-
"gitHead": "
|
|
87
|
+
"gitHead": "dc73bd04b7349a7a940d57cf1bce9dc89a3bc67b"
|
|
88
88
|
}
|