@jobber/components 4.77.5 → 4.77.6-JOB-84042.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/index.js +3 -2
- package/dist/Card/index.js +3 -2
- package/dist/{Card-426a68a8.js → Card-0a6f3a28.js} +1 -1
- package/dist/Chip/index.js +3 -2
- package/dist/{Chip-c91fd6c8.js → Chip-3d1bfddc.js} +1 -1
- package/dist/Chips/index.js +2 -1
- 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 +8 -5
- package/dist/{Combobox-237caf42.js → Combobox-d24f1fec.js} +56 -39
- 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/index.d.ts +1 -1
- package/dist/DataList/index.js +27 -25
- package/dist/InputText/index.js +2 -1
- package/dist/{InputText-6e356985.js → InputText-6c71361e.js} +2 -1
- 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/Page/index.js +2 -1
- package/dist/Tooltip/index.js +2 -1
- package/dist/{Tooltip-27771182.js → Tooltip-ef3d6ef4.js} +2 -1
- package/package.json +5 -5
|
@@ -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;
|
|
@@ -10,10 +10,11 @@ var classnames = require('classnames');
|
|
|
10
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');
|
|
13
14
|
var Text = require('../Text-259af966.js');
|
|
14
15
|
var Icon = require('../Icon-405a216c.js');
|
|
15
16
|
var Heading = require('../Heading-1e8e4bd3.js');
|
|
16
|
-
var InputText = require('../InputText-
|
|
17
|
+
var InputText = require('../InputText-6c71361e.js');
|
|
17
18
|
require('../Typography-c45bf216.js');
|
|
18
19
|
require('@jobber/design');
|
|
19
20
|
require('../getAtlantisConfig-0f3e8af2.js');
|
|
@@ -127,7 +128,7 @@ function useRepositionMenu(attachTo, visible = false) {
|
|
|
127
128
|
{ name: "flip", options: { fallbackPlacements: ["top"] } },
|
|
128
129
|
],
|
|
129
130
|
});
|
|
130
|
-
|
|
131
|
+
useSafeLayoutEffect.useSafeLayoutEffect(() => {
|
|
131
132
|
var _a;
|
|
132
133
|
(_a = popper === null || popper === void 0 ? void 0 : popper.update) === null || _a === void 0 ? void 0 : _a.call(popper);
|
|
133
134
|
}, [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
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var Chip = require('../Chip-
|
|
5
|
+
var Chip = require('../Chip-3d1bfddc.js');
|
|
6
6
|
var tslib_es6 = require('../tslib.es6-754e2961.js');
|
|
7
7
|
var React = require('react');
|
|
8
8
|
var Icon = require('../Icon-405a216c.js');
|
|
@@ -12,9 +12,10 @@ require('../style-inject.es-9d2f5f4e.js');
|
|
|
12
12
|
require('../Avatar-76a799fa.js');
|
|
13
13
|
require('color');
|
|
14
14
|
require('../Typography-c45bf216.js');
|
|
15
|
-
require('../Tooltip-
|
|
15
|
+
require('../Tooltip-ef3d6ef4.js');
|
|
16
16
|
require('react-dom');
|
|
17
17
|
require('framer-motion');
|
|
18
|
+
require('@jobber/hooks/useSafeLayoutEffect');
|
|
18
19
|
require('react-popper');
|
|
19
20
|
require('@jobber/design');
|
|
20
21
|
|
|
@@ -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-ef3d6ef4.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
|
@@ -9,7 +9,7 @@ var useAssert = require('@jobber/hooks/useAssert');
|
|
|
9
9
|
var Icon = require('../Icon-405a216c.js');
|
|
10
10
|
var Avatar = require('../Avatar-76a799fa.js');
|
|
11
11
|
var Typography = require('../Typography-c45bf216.js');
|
|
12
|
-
var Tooltip = require('../Tooltip-
|
|
12
|
+
var Tooltip = require('../Tooltip-ef3d6ef4.js');
|
|
13
13
|
var uuid = require('uuid');
|
|
14
14
|
var sortBy = require('lodash/sortBy');
|
|
15
15
|
var useLiveAnnounce = require('@jobber/hooks/useLiveAnnounce');
|
|
@@ -22,6 +22,7 @@ require('@jobber/design');
|
|
|
22
22
|
require('color');
|
|
23
23
|
require('react-dom');
|
|
24
24
|
require('framer-motion');
|
|
25
|
+
require('@jobber/hooks/useSafeLayoutEffect');
|
|
25
26
|
require('react-router-dom');
|
|
26
27
|
|
|
27
28
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
@@ -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
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var Combobox = require('../Combobox-
|
|
5
|
+
var Combobox = require('../Combobox-d24f1fec.js');
|
|
6
6
|
require('react');
|
|
7
7
|
require('classnames');
|
|
8
8
|
require('react-dom');
|
|
@@ -14,18 +14,21 @@ require('../Typography-c45bf216.js');
|
|
|
14
14
|
require('../Glimmer-7c317864.js');
|
|
15
15
|
require('../tslib.es6-754e2961.js');
|
|
16
16
|
require('../Content-e3f7b6fc.js');
|
|
17
|
+
require('../Spinner-9d8fc7ff.js');
|
|
18
|
+
require('../AnimatedPresence-20a02aaa.js');
|
|
19
|
+
require('framer-motion');
|
|
20
|
+
require('@jobber/hooks/useInView');
|
|
17
21
|
require('../Button-b73a5e01.js');
|
|
18
22
|
require('react-router-dom');
|
|
19
23
|
require('@jobber/hooks/useRefocusOnActivator');
|
|
20
24
|
require('@jobber/hooks/useFocusTrap');
|
|
21
25
|
require('react-popper');
|
|
22
26
|
require('@jobber/hooks/useOnKeyDown');
|
|
23
|
-
require('../Chip-
|
|
24
|
-
require('@jobber/hooks/useInView');
|
|
27
|
+
require('../Chip-3d1bfddc.js');
|
|
25
28
|
require('../Avatar-76a799fa.js');
|
|
26
29
|
require('color');
|
|
27
|
-
require('../Tooltip-
|
|
28
|
-
require('
|
|
30
|
+
require('../Tooltip-ef3d6ef4.js');
|
|
31
|
+
require('@jobber/hooks/useSafeLayoutEffect');
|
|
29
32
|
require('lodash/debounce');
|
|
30
33
|
require('lodash/noop');
|
|
31
34
|
require('@jobber/hooks/useAssert');
|
|
@@ -7,14 +7,17 @@ var styleInject_es = require('./style-inject.es-9d2f5f4e.js');
|
|
|
7
7
|
var Icon = require('./Icon-405a216c.js');
|
|
8
8
|
var Text = require('./Text-259af966.js');
|
|
9
9
|
var Glimmer = require('./Glimmer-7c317864.js');
|
|
10
|
+
var Spinner = require('./Spinner-9d8fc7ff.js');
|
|
11
|
+
var AnimatedPresence = require('./AnimatedPresence-20a02aaa.js');
|
|
10
12
|
var tslib_es6 = require('./tslib.es6-754e2961.js');
|
|
13
|
+
var useInView = require('@jobber/hooks/useInView');
|
|
11
14
|
var Typography = require('./Typography-c45bf216.js');
|
|
12
15
|
var Button = require('./Button-b73a5e01.js');
|
|
13
16
|
var useRefocusOnActivator = require('@jobber/hooks/useRefocusOnActivator');
|
|
14
17
|
var useFocusTrap = require('@jobber/hooks/useFocusTrap');
|
|
15
18
|
var reactPopper = require('react-popper');
|
|
16
19
|
var useOnKeyDown = require('@jobber/hooks/useOnKeyDown');
|
|
17
|
-
var Chip = require('./Chip-
|
|
20
|
+
var Chip = require('./Chip-3d1bfddc.js');
|
|
18
21
|
var debounce = require('lodash/debounce');
|
|
19
22
|
var noop = require('lodash/noop');
|
|
20
23
|
require('@jobber/design');
|
|
@@ -28,13 +31,13 @@ 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 {
|
|
@@ -283,16 +299,16 @@ function ComboboxContent(props) {
|
|
|
283
299
|
const optionsExist = props.options.length > 0;
|
|
284
300
|
const { optionsListRef } = useComboboxContent(props.open, props.selected);
|
|
285
301
|
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$
|
|
302
|
+
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
303
|
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: () => {
|
|
304
|
+
props.multiselect && (optionsExist || props.selected.length > 0) && (React__default["default"].createElement(ComboboxContentHeader, { hasOptionsVisible: optionsExist, subjectNoun: props.subjectNoun, selectedCount: props.selected.length, onClearAll: () => {
|
|
289
305
|
props.selectedStateSetter([]);
|
|
290
306
|
}, onSelectAll: () => {
|
|
291
307
|
props.selectedStateSetter(props.options);
|
|
292
308
|
} })),
|
|
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$
|
|
309
|
+
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 }),
|
|
310
|
+
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"]({
|
|
311
|
+
[styles$7.actionPadding]: index === childrenArray.length - 1,
|
|
296
312
|
}) }, child)))))));
|
|
297
313
|
return ReactDOM__default["default"].createPortal(template, document.body);
|
|
298
314
|
}
|
|
@@ -335,15 +351,16 @@ var css_248z = ".W8qMZnORYxI- {\n position: fixed;\n top: 0;\n right: 0;\n b
|
|
|
335
351
|
var styles = {"overlay":"W8qMZnORYxI-","wrapper":"_-0dkolvLF-Y-"};
|
|
336
352
|
styleInject_es.styleInject(css_248z);
|
|
337
353
|
|
|
338
|
-
function useMakeComboboxHandlers(setOpen, setSearchValue, selectedOptions, shouldScroll, selectedStateSetter, multiSelect, onClose) {
|
|
354
|
+
function useMakeComboboxHandlers(setOpen, setSearchValue, selectedOptions, shouldScroll, selectedStateSetter, multiSelect, onClose, onSearch) {
|
|
339
355
|
const handleClose = React.useCallback(() => {
|
|
340
356
|
setOpen(false);
|
|
341
357
|
setSearchValue("");
|
|
358
|
+
onSearch && onSearch("");
|
|
342
359
|
onClose && onClose();
|
|
343
360
|
if (selectedOptions.length > 0) {
|
|
344
361
|
shouldScroll.current = true;
|
|
345
362
|
}
|
|
346
|
-
}, [setOpen, setSearchValue, onClose, selectedOptions.length]);
|
|
363
|
+
}, [setOpen, setSearchValue, onClose, onSearch, selectedOptions.length]);
|
|
347
364
|
const handleSelection = React.useCallback((selection) => {
|
|
348
365
|
if (multiSelect) {
|
|
349
366
|
handleMultiSelect(selectedStateSetter, selectedOptions, selection);
|
|
@@ -376,7 +393,7 @@ function useCombobox(selected, onSelect, options, onClose, multiSelect, onSearch
|
|
|
376
393
|
const [open, setOpen] = React.useState(false);
|
|
377
394
|
const [searchValue, setSearchValue] = React.useState("");
|
|
378
395
|
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);
|
|
396
|
+
const { handleClose, handleSelection } = useMakeComboboxHandlers(setOpen, setSearchValue, selected, shouldScroll, onSelect, multiSelect, onClose, onSearch);
|
|
380
397
|
const internalFilteredOptions = options.filter(option => option.label.toLowerCase().includes(searchValue.toLowerCase()));
|
|
381
398
|
return {
|
|
382
399
|
wrapperRef,
|
|
@@ -448,7 +465,7 @@ function Combobox(props) {
|
|
|
448
465
|
React__default["default"].createElement("div", { ref: wrapperRef, className: styles.wrapper },
|
|
449
466
|
open && (React__default["default"].createElement("div", { className: styles.overlay, onClick: () => handleClose(), "data-testid": "ATL-Combobox-Overlay" })),
|
|
450
467
|
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 }))));
|
|
468
|
+
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
469
|
}
|
|
453
470
|
Combobox.Activator = ComboboxActivator;
|
|
454
471
|
Combobox.Action = ComboboxAction;
|
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
|
};
|
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
|
@@ -11,7 +11,7 @@ var noop = require('lodash/noop');
|
|
|
11
11
|
var design = require('@jobber/design');
|
|
12
12
|
var framerMotion = require('framer-motion');
|
|
13
13
|
var classnames = require('classnames');
|
|
14
|
-
var Tooltip = require('../Tooltip-
|
|
14
|
+
var Tooltip = require('../Tooltip-ef3d6ef4.js');
|
|
15
15
|
var Button = require('../Button-b73a5e01.js');
|
|
16
16
|
var useInView = require('@jobber/hooks/useInView');
|
|
17
17
|
var isEmpty = require('lodash/isEmpty');
|
|
@@ -26,17 +26,19 @@ var ReactDOM = require('react-dom');
|
|
|
26
26
|
var Checkbox = require('../Checkbox-99f6297f.js');
|
|
27
27
|
var reactRouterDom = require('react-router-dom');
|
|
28
28
|
var AnimatedSwitcher = require('../AnimatedSwitcher-3d45ec5d.js');
|
|
29
|
-
var Combobox = require('../Combobox-
|
|
30
|
-
var Chip = require('../Chip-
|
|
29
|
+
var Combobox = require('../Combobox-d24f1fec.js');
|
|
30
|
+
var Chip = require('../Chip-3d1bfddc.js');
|
|
31
31
|
var debounce = require('lodash/debounce');
|
|
32
|
-
var InputText = require('../InputText-
|
|
32
|
+
var InputText = require('../InputText-6c71361e.js');
|
|
33
33
|
var Spinner = require('../Spinner-9d8fc7ff.js');
|
|
34
34
|
var Typography = require('../Typography-c45bf216.js');
|
|
35
35
|
require('../Content-e3f7b6fc.js');
|
|
36
|
+
require('@jobber/hooks/useSafeLayoutEffect');
|
|
36
37
|
require('react-popper');
|
|
37
38
|
require('../getAtlantisConfig-0f3e8af2.js');
|
|
38
39
|
require('uuid');
|
|
39
40
|
require('react-hook-form');
|
|
41
|
+
require('../AnimatedPresence-20a02aaa.js');
|
|
40
42
|
require('@jobber/hooks/useAssert');
|
|
41
43
|
require('../Avatar-76a799fa.js');
|
|
42
44
|
require('color');
|
|
@@ -52,7 +54,7 @@ var classnames__default = /*#__PURE__*/_interopDefaultLegacy(classnames);
|
|
|
52
54
|
var isEmpty__default = /*#__PURE__*/_interopDefaultLegacy(isEmpty);
|
|
53
55
|
var debounce__default = /*#__PURE__*/_interopDefaultLegacy(debounce);
|
|
54
56
|
|
|
55
|
-
var css_248z$g = ".TkdrExYnvcY-,\n.TkdrExYnvcY- * {\n box-sizing: border-box;\n}\n\n.TkdrExYnvcY- {\n --data-list--minimum-item-height: calc(var(--base-unit) * 3.5);\n\n display: -ms-flexbox;\n\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n position: relative;\n z-index: 0;\n z-index: var(--elevation-default);\n -ms-flex: 1;\n flex: 1;\n}\n\n/*\n * Header\n */\n\n.IcAlZHoB4LI- {\n display: -ms-flexbox;\n display: flex;\n position: relative;\n z-index: 1;\n z-index: var(--elevation-base);\n margin-bottom: calc(16px / 2);\n margin-bottom: var(--space-small);\n -ms-flex-align: center;\n align-items: center;\n}\n\n.TFO76ysivmg- {\n display: grid;\n padding: calc((16px / 2) + (16px / 4)) 0;\n padding: calc(calc(16px / 2) + calc(16px / 4)) 0;\n padding: calc(var(--space-small) + var(--space-smaller)) 0;\n gap: calc(16px / 2);\n grid-gap: calc(16px / 2);\n grid-gap: var(--space-small);\n gap: var(--space-small);\n grid-template-columns: auto fit-content(calc(16px * 14));\n grid-template-columns: auto fit-content(calc(var(--base-unit) * 14));\n}\n\n.jGHZZYZm1ZY- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-pack: center;\n justify-content: center;\n min-height: calc(16px * 3);\n min-height: var(--space-largest);\n padding: calc(16px / 2);\n padding: var(--space-small);\n border-bottom: calc(16px / 8) solid rgb(217, 223, 225);\n border-bottom: var(--border-thick) solid var(--color-border);\n}\n\n.GiD7MjZJbcw- {\n --data-list--header-actions-gap: var(--space-small);\n display: -ms-flexbox;\n display: flex;\n gap: calc(16px / 2);\n gap: var(--data-list--header-actions-gap);\n}\n\n@media (max-width: 489px) {\n\n.GiD7MjZJbcw- {\n -ms-flex-pack: justify;\n justify-content: space-between;\n width: 100%;\n}\n }\n\n@media (--small-screens-and-below) {\n\n.GiD7MjZJbcw- {\n -ms-flex-pack: justify;\n justify-content: space-between;\n width: 100%;\n}\n }\n\n.jMSVGIAr5tk- > p {\n font-weight: 500;\n white-space: nowrap;\n}\n\n.jMSVGIAr5tk- {\n display: -ms-flexbox;\n display: flex;\n margin: calc((16px / 2) * -1) 0;\n margin: calc(calc(16px / 2) * -1) 0;\n margin: calc(var(--space-small) * -1) 0;\n -ms-flex-align: center;\n align-items: center;\n gap: var(--data-list--header-actions-gap);\n}\n\n/*\n * List Item\n */\n\n.ise8kHCfhCY- {\n position: relative;\n padding: calc(16px / 2);\n padding: var(--space-small);\n border-bottom: calc(16px / 16) solid rgb(217, 223, 225);\n border-bottom: var(--border-base) solid var(--color-border);\n transition: all 200ms;\n transition: all var(--timing-base);\n}\n\n.ise8kHCfhCY-,\n.Tq6e0BGwcSM- {\n display: grid;\n grid-template-columns: minmax(0px, auto);\n min-height: var(--data-list--minimum-item-height);\n -ms-flex-align: center;\n align-items: center;\n}\n\n.ise8kHCfhCY-.Pc0JGX6jCD4-,\n.ise8kHCfhCY-:hover,\n.ise8kHCfhCY-:focus-within {\n --data-list-item-active-color: var(--color-surface--hover);\n background-color: rgb(244, 246, 250);\n background-color: var(--data-list-item-active-color);\n}\n\n.Tq6e0BGwcSM- {\n margin: calc((16px / 2) * -1) 0;\n margin: calc(calc(16px / 2) * -1) 0;\n margin: calc(var(--space-small) * -1) 0;\n padding: calc(16px / 2) 0;\n padding: var(--space-small) 0;\n border: none;\n text-align: left;\n -webkit-text-decoration: none;\n text-decoration: none;\n background-color: transparent;\n cursor: pointer;\n}\n\n/**\n * Reset CSS properties on focus to ensure we only have the focus state on the\n * parent .listItem\n */\n\n.Tq6e0BGwcSM-:focus {\n outline: none;\n background-color: transparent;\n}\n\n/**\n * Enable a better hover and focus experience when :has() is supported.\n * This is a workaround for Firefox where the :has() selector is not supported.\n */\n\n@supports selector(*:has(*)) {\n .ise8kHCfhCY-:hover,\n .ise8kHCfhCY-:focus-within {\n background-color: transparent;\n }\n\n .ise8kHCfhCY-:has(.Tq6e0BGwcSM-:hover, .Tq6e0BGwcSM-:focus) {\n background-color: var(--data-list-item-active-color);\n }\n}\n\n/*\n * List Item Selection\n */\n\n.d-79rkMqufg- {\n display: grid;\n -ms-flex-align: start;\n align-items: flex-start;\n}\n\n@media (min-width: 768px) {\n\n.d-79rkMqufg- {\n -ms-flex-align: center;\n align-items: center;\n}\n }\n\n@media (--medium-screens-and-up) {\n\n.d-79rkMqufg- {\n -ms-flex-align: center;\n align-items: center;\n}\n }\n\n.d-79rkMqufg-,\n.jGHZZYZm1ZY- .d-79rkMqufg- {\n grid-template-columns: -webkit-max-content minmax(0px, auto);\n grid-template-columns: max-content minmax(0px, auto);\n -webkit-column-gap: calc(16px / 2);\n -webkit-column-gap: var(--space-small);\n -moz-column-gap: calc(16px / 2);\n -moz-column-gap: var(--space-small);\n column-gap: calc(16px / 2);\n column-gap: var(--space-small);\n}\n\n.jGHZZYZm1ZY- .d-79rkMqufg- {\n display: grid;\n -ms-flex-align: center;\n align-items: center;\n}\n\n.qm-SSuWTXkI- {\n display: -ms-flexbox;\n display: flex;\n visibility: hidden;\n\n /* To compensate the Checkbox's label margin that we are using for screen-readers */\n margin-right: calc((16px * 1) * -1);\n margin-right: calc(calc(16px * 1) * -1);\n margin-right: calc(var(--space-base) * -1);\n}\n\n.qm-SSuWTXkI-.VA9RnQp6nbI- {\n visibility: visible;\n}\n\n.ise8kHCfhCY- .d-79rkMqufg- > :first-child {\n -ms-flex-order: 2;\n order: 2;\n}\n\n.ise8kHCfhCY- .d-79rkMqufg- > :last-child {\n -ms-flex-order: 1;\n order: 1;\n padding-top: calc(16px / 4);\n padding-top: var(--space-smaller);\n opacity: 1;\n transition: opacity 100ms ease-in-out;\n transition: opacity var(--transition-properties);\n --transition-properties: var(--timing-quick) ease-in-out;\n}\n\n@media (min-width: 768px) {\n\n.ise8kHCfhCY- .d-79rkMqufg- > :last-child {\n padding-top: 0;\n opacity: 0;\n}\n }\n\n@media (--medium-screens-and-up) {\n\n.ise8kHCfhCY- .d-79rkMqufg- > :last-child {\n padding-top: 0;\n opacity: 0;\n}\n }\n\n.ise8kHCfhCY-:hover .d-79rkMqufg- > :last-child,\n.ise8kHCfhCY-:focus-within .d-79rkMqufg- > :last-child,\n.ise8kHCfhCY- .d-79rkMqufg-._4L7iXXzLr5k- > :last-child {\n opacity: 1;\n}\n\n/*\n * Filters\n */\n\n.Kkp-IYmwq-s- {\n display: -ms-flexbox;\n display: flex;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: rgba(255, 255, 255, 0.6);\n background-color: var(--color-overlay--dimmed);\n -ms-flex-align: start;\n align-items: flex-start;\n -ms-flex-pack: center;\n justify-content: center;\n}\n\n.m-eCShL7TU4- {\n position: sticky;\n top: 50vh;\n}\n\n/* This hides the text from the UI but not from the screen readers */\n\n.esUiRgWabYw- {\n position: absolute;\n top: auto;\n left: -10000px;\n width: 1px;\n height: 1px;\n overflow: hidden;\n text-indent: -10000px;\n}\n";
|
|
57
|
+
var css_248z$g = ".TkdrExYnvcY-,\n.TkdrExYnvcY- * {\n box-sizing: border-box;\n}\n\n.TkdrExYnvcY- {\n --data-list--minimum-item-height: calc(var(--base-unit) * 3.5);\n\n display: -ms-flexbox;\n\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n position: relative;\n z-index: 0;\n z-index: var(--elevation-default);\n -ms-flex: 1;\n flex: 1;\n}\n\n/*\n * Header\n */\n\n.IcAlZHoB4LI- {\n display: -ms-flexbox;\n display: flex;\n position: relative;\n z-index: 1;\n z-index: var(--elevation-base);\n margin-bottom: calc(16px / 2);\n margin-bottom: var(--space-small);\n -ms-flex-align: center;\n align-items: center;\n}\n\n.TFO76ysivmg- {\n display: grid;\n padding: calc((16px / 2) + (16px / 4)) 0;\n padding: calc(calc(16px / 2) + calc(16px / 4)) 0;\n padding: calc(var(--space-small) + var(--space-smaller)) 0;\n gap: calc(16px / 2);\n grid-gap: calc(16px / 2);\n grid-gap: var(--space-small);\n gap: var(--space-small);\n grid-template-columns: auto fit-content(calc(16px * 14));\n grid-template-columns: auto fit-content(calc(var(--base-unit) * 14));\n}\n\n.TFO76ysivmg-:empty {\n display: none;\n}\n\n.jGHZZYZm1ZY- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-pack: center;\n justify-content: center;\n min-height: calc(16px * 3);\n min-height: var(--space-largest);\n padding: calc(16px / 2);\n padding: var(--space-small);\n border-bottom: calc(16px / 8) solid rgb(217, 223, 225);\n border-bottom: var(--border-thick) solid var(--color-border);\n}\n\n.GiD7MjZJbcw- {\n --data-list--header-actions-gap: var(--space-small);\n display: -ms-flexbox;\n display: flex;\n gap: calc(16px / 2);\n gap: var(--data-list--header-actions-gap);\n}\n\n@media (max-width: 489px) {\n\n.GiD7MjZJbcw- {\n -ms-flex-pack: justify;\n justify-content: space-between;\n width: 100%;\n}\n }\n\n@media (--small-screens-and-below) {\n\n.GiD7MjZJbcw- {\n -ms-flex-pack: justify;\n justify-content: space-between;\n width: 100%;\n}\n }\n\n.jMSVGIAr5tk- > p {\n font-weight: 500;\n white-space: nowrap;\n}\n\n.jMSVGIAr5tk- {\n display: -ms-flexbox;\n display: flex;\n margin: calc((16px / 2) * -1) 0;\n margin: calc(calc(16px / 2) * -1) 0;\n margin: calc(var(--space-small) * -1) 0;\n -ms-flex-align: center;\n align-items: center;\n gap: var(--data-list--header-actions-gap);\n}\n\n/*\n * List Item\n */\n\n.ise8kHCfhCY- {\n position: relative;\n padding: calc(16px / 2);\n padding: var(--space-small);\n border-bottom: calc(16px / 16) solid rgb(217, 223, 225);\n border-bottom: var(--border-base) solid var(--color-border);\n transition: all 200ms;\n transition: all var(--timing-base);\n}\n\n.ise8kHCfhCY-,\n.Tq6e0BGwcSM- {\n display: grid;\n grid-template-columns: minmax(0px, auto);\n min-height: var(--data-list--minimum-item-height);\n -ms-flex-align: center;\n align-items: center;\n}\n\n.ise8kHCfhCY-.Pc0JGX6jCD4-,\n.ise8kHCfhCY-:hover,\n.ise8kHCfhCY-:focus-within {\n --data-list-item-active-color: var(--color-surface--hover);\n background-color: rgb(244, 246, 250);\n background-color: var(--data-list-item-active-color);\n}\n\n.Tq6e0BGwcSM- {\n margin: calc((16px / 2) * -1) 0;\n margin: calc(calc(16px / 2) * -1) 0;\n margin: calc(var(--space-small) * -1) 0;\n padding: calc(16px / 2) 0;\n padding: var(--space-small) 0;\n border: none;\n text-align: left;\n -webkit-text-decoration: none;\n text-decoration: none;\n background-color: transparent;\n cursor: pointer;\n}\n\n/**\n * Reset CSS properties on focus to ensure we only have the focus state on the\n * parent .listItem\n */\n\n.Tq6e0BGwcSM-:focus {\n outline: none;\n background-color: transparent;\n}\n\n/**\n * Enable a better hover and focus experience when :has() is supported.\n * This is a workaround for Firefox where the :has() selector is not supported.\n */\n\n@supports selector(*:has(*)) {\n .ise8kHCfhCY-:hover,\n .ise8kHCfhCY-:focus-within {\n background-color: transparent;\n }\n\n .ise8kHCfhCY-:has(.Tq6e0BGwcSM-:hover, .Tq6e0BGwcSM-:focus) {\n background-color: var(--data-list-item-active-color);\n }\n}\n\n/*\n * List Item Selection\n */\n\n.d-79rkMqufg- {\n display: grid;\n -ms-flex-align: start;\n align-items: flex-start;\n}\n\n@media (min-width: 768px) {\n\n.d-79rkMqufg- {\n -ms-flex-align: center;\n align-items: center;\n}\n }\n\n@media (--medium-screens-and-up) {\n\n.d-79rkMqufg- {\n -ms-flex-align: center;\n align-items: center;\n}\n }\n\n.d-79rkMqufg-,\n.jGHZZYZm1ZY- .d-79rkMqufg- {\n grid-template-columns: -webkit-max-content minmax(0px, auto);\n grid-template-columns: max-content minmax(0px, auto);\n -webkit-column-gap: calc(16px / 2);\n -webkit-column-gap: var(--space-small);\n -moz-column-gap: calc(16px / 2);\n -moz-column-gap: var(--space-small);\n column-gap: calc(16px / 2);\n column-gap: var(--space-small);\n}\n\n.jGHZZYZm1ZY- .d-79rkMqufg- {\n display: grid;\n -ms-flex-align: center;\n align-items: center;\n}\n\n.qm-SSuWTXkI- {\n display: -ms-flexbox;\n display: flex;\n visibility: hidden;\n\n /* To compensate the Checkbox's label margin that we are using for screen-readers */\n margin-right: calc((16px * 1) * -1);\n margin-right: calc(calc(16px * 1) * -1);\n margin-right: calc(var(--space-base) * -1);\n}\n\n.qm-SSuWTXkI-.VA9RnQp6nbI- {\n visibility: visible;\n}\n\n.ise8kHCfhCY- .d-79rkMqufg- > :first-child {\n -ms-flex-order: 2;\n order: 2;\n}\n\n.ise8kHCfhCY- .d-79rkMqufg- > :last-child {\n -ms-flex-order: 1;\n order: 1;\n padding-top: calc(16px / 4);\n padding-top: var(--space-smaller);\n opacity: 1;\n transition: opacity 100ms ease-in-out;\n transition: opacity var(--transition-properties);\n --transition-properties: var(--timing-quick) ease-in-out;\n}\n\n@media (min-width: 768px) {\n\n.ise8kHCfhCY- .d-79rkMqufg- > :last-child {\n padding-top: 0;\n opacity: 0;\n}\n }\n\n@media (--medium-screens-and-up) {\n\n.ise8kHCfhCY- .d-79rkMqufg- > :last-child {\n padding-top: 0;\n opacity: 0;\n}\n }\n\n.ise8kHCfhCY-:hover .d-79rkMqufg- > :last-child,\n.ise8kHCfhCY-:focus-within .d-79rkMqufg- > :last-child,\n.ise8kHCfhCY- .d-79rkMqufg-._4L7iXXzLr5k- > :last-child {\n opacity: 1;\n}\n\n/*\n * Filters\n */\n\n.Kkp-IYmwq-s- {\n display: -ms-flexbox;\n display: flex;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: rgba(255, 255, 255, 0.6);\n background-color: var(--color-overlay--dimmed);\n -ms-flex-align: start;\n align-items: flex-start;\n -ms-flex-pack: center;\n justify-content: center;\n}\n\n.m-eCShL7TU4- {\n position: sticky;\n top: 50vh;\n}\n\n/* This hides the text from the UI but not from the screen readers */\n\n.esUiRgWabYw- {\n position: absolute;\n top: auto;\n left: -10000px;\n width: 1px;\n height: 1px;\n overflow: hidden;\n text-indent: -10000px;\n}\n";
|
|
56
58
|
var styles$g = {"wrapper":"TkdrExYnvcY-","titleContainer":"IcAlZHoB4LI-","headerFilters":"TFO76ysivmg-","headerTitles":"jGHZZYZm1ZY-","batchSelectContainer":"GiD7MjZJbcw-","headerBatchSelect":"jMSVGIAr5tk-","listItem":"ise8kHCfhCY-","listItemClickable":"Tq6e0BGwcSM-","active":"Pc0JGX6jCD4-","selectable":"d-79rkMqufg-","selectAllCheckbox":"qm-SSuWTXkI-","visible":"VA9RnQp6nbI-","selected":"_4L7iXXzLr5k-","filtering":"Kkp-IYmwq-s-","filteringSpinner":"m-eCShL7TU4-","srOnly":"esUiRgWabYw-"};
|
|
57
59
|
styleInject_es.styleInject(css_248z$g);
|
|
58
60
|
|
|
@@ -144,6 +146,7 @@ const SEARCH_DEBOUNCE_DELAY = design.tokens["timing-slowest"];
|
|
|
144
146
|
const DATA_LIST_FILTERING_SPINNER_TEST_ID = "ATL-DataList-filteringSpinner";
|
|
145
147
|
const DATA_LIST_LOADING_MORE_SPINNER_TEST_ID = "ATL-DataList-loadingMoreSpinner";
|
|
146
148
|
const DATA_LOAD_MORE_TEST_ID = "ATL-DataList-LoadMore-trigger";
|
|
149
|
+
const DATA_LIST_STICKY_HEADER_TEST_ID = "ATL-DataList-stickyHeader";
|
|
147
150
|
const TRANSITION_DURATION_IN_SECONDS = design.tokens["timing-base"] / 1000;
|
|
148
151
|
const TRANSITION_DELAY_IN_SECONDS = design.tokens["timing-quick"] / 1000;
|
|
149
152
|
|
|
@@ -304,13 +307,13 @@ styleInject_es.styleInject(css_248z$8);
|
|
|
304
307
|
function DataListSortingOptions({ options, selectedOption, onSelectChange, onClose, optionsListRef, dataListHeaderTileRef, }) {
|
|
305
308
|
useRefocusOnActivator.useRefocusOnActivator(!optionsListRef.current);
|
|
306
309
|
useOnKeyDown.useOnKeyDown(() => onClose(), "Escape");
|
|
307
|
-
|
|
310
|
+
React.useEffect(() => {
|
|
308
311
|
document.addEventListener("mousedown", handleClickOutside);
|
|
309
312
|
return () => {
|
|
310
313
|
document.removeEventListener("mousedown", handleClickOutside);
|
|
311
314
|
};
|
|
312
315
|
}, [optionsListRef, dataListHeaderTileRef, onClose]);
|
|
313
|
-
return (React__default["default"].createElement("ul", { className: styles$8.optionsList, ref: optionsListRef }, options.map(
|
|
316
|
+
return (React__default["default"].createElement("ul", { className: styles$8.optionsList, ref: optionsListRef }, options.map(option => (React__default["default"].createElement("li", { className: styles$8.option, key: option.id, onClick: () => onSelectChange(option), onKeyDown: event => handleKeyDown(event, option), tabIndex: 0, "data-value": option.id },
|
|
314
317
|
option.label,
|
|
315
318
|
option.label === (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.label) && (React__default["default"].createElement(Icon.Icon, { name: "checkmark", color: "blue" })))))));
|
|
316
319
|
function handleKeyDown(event, option) {
|
|
@@ -320,9 +323,9 @@ function DataListSortingOptions({ options, selectedOption, onSelectChange, onClo
|
|
|
320
323
|
}
|
|
321
324
|
function handleClickOutside(event) {
|
|
322
325
|
var _a, _b;
|
|
323
|
-
const
|
|
324
|
-
|
|
325
|
-
if (!
|
|
326
|
+
const isClickInside = ((_a = optionsListRef.current) === null || _a === void 0 ? void 0 : _a.contains(event.target)) ||
|
|
327
|
+
((_b = dataListHeaderTileRef.current) === null || _b === void 0 ? void 0 : _b.contains(event.target));
|
|
328
|
+
if (!isClickInside) {
|
|
326
329
|
onClose();
|
|
327
330
|
}
|
|
328
331
|
}
|
|
@@ -332,9 +335,9 @@ function DataListSortingOptions({ options, selectedOption, onSelectChange, onClo
|
|
|
332
335
|
function DataListHeaderTile({ headers, headerKey, visible = false, }) {
|
|
333
336
|
useRefocusOnActivator.useRefocusOnActivator(visible);
|
|
334
337
|
const { sorting } = useDataListContext();
|
|
335
|
-
const [isDropDownOpen, setIsDropDownOpen] =
|
|
338
|
+
const [isDropDownOpen, setIsDropDownOpen] = React.useState(false);
|
|
336
339
|
const optionsListRef = useFocusTrap.useFocusTrap(isDropDownOpen);
|
|
337
|
-
const dataListHeaderTileRef =
|
|
340
|
+
const dataListHeaderTileRef = React.useRef(null);
|
|
338
341
|
const sortableItem = sorting === null || sorting === void 0 ? void 0 : sorting.sortable.find(item => item.key === headerKey);
|
|
339
342
|
const isSortable = Boolean(sortableItem);
|
|
340
343
|
const sortingState = sorting === null || sorting === void 0 ? void 0 : sorting.state;
|
|
@@ -344,15 +347,15 @@ function DataListHeaderTile({ headers, headerKey, visible = false, }) {
|
|
|
344
347
|
}), onClick: handleOnClick, ref: dataListHeaderTileRef },
|
|
345
348
|
React__default["default"].createElement(Text.Text, { maxLines: "single" }, headers[headerKey]),
|
|
346
349
|
isSortable && (sortableItem === null || sortableItem === void 0 ? void 0 : sortableItem.options) && isDropDownOpen && (React__default["default"].createElement(DataListSortingOptions, { options: sortableItem.options, selectedOption: (sorting === null || sorting === void 0 ? void 0 : sorting.state) || null, onSelectChange: handleSelectChange, onClose: () => setIsDropDownOpen(false), optionsListRef: optionsListRef, dataListHeaderTileRef: dataListHeaderTileRef })),
|
|
347
|
-
|
|
348
|
-
function toggleSorting(newSortingKey, newId, newLabel
|
|
350
|
+
isSortable && (React__default["default"].createElement(DataListSortingArrows, { order: (sortingState === null || sortingState === void 0 ? void 0 : sortingState.key) === headerKey ? sortingState.order : "none" }))));
|
|
351
|
+
function toggleSorting(newSortingKey, newId, newLabel) {
|
|
349
352
|
const isSameKey = newSortingKey === (sortingState === null || sortingState === void 0 ? void 0 : sortingState.key);
|
|
350
353
|
const isDescending = (sortingState === null || sortingState === void 0 ? void 0 : sortingState.order) === "desc";
|
|
351
|
-
if (isSameKey && isDescending
|
|
354
|
+
if (isSameKey && isDescending) {
|
|
352
355
|
sorting === null || sorting === void 0 ? void 0 : sorting.onSort(undefined);
|
|
353
356
|
return;
|
|
354
357
|
}
|
|
355
|
-
const sortingOrder =
|
|
358
|
+
const sortingOrder = isSameKey ? "desc" : "asc";
|
|
356
359
|
setSorting(newSortingKey, newId, newLabel, sortingOrder);
|
|
357
360
|
}
|
|
358
361
|
function setSorting(newSortingKey, newId, newLabel, newOrder) {
|
|
@@ -371,11 +374,8 @@ function DataListHeaderTile({ headers, headerKey, visible = false, }) {
|
|
|
371
374
|
setIsDropDownOpen(!isDropDownOpen);
|
|
372
375
|
}
|
|
373
376
|
else {
|
|
374
|
-
const headerValue = headers[headerKey];
|
|
375
377
|
const id = ((_b = (_a = sortableItem === null || sortableItem === void 0 ? void 0 : sortableItem.options) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.id) || headerKey;
|
|
376
|
-
|
|
377
|
-
toggleSorting(id, headerKey, headerValue);
|
|
378
|
-
}
|
|
378
|
+
toggleSorting(id, headerKey, headers[headerKey]);
|
|
379
379
|
}
|
|
380
380
|
}
|
|
381
381
|
function handleSelectChange(newSortOption) {
|
|
@@ -1019,7 +1019,7 @@ function DataListStickyHeader({ children }) {
|
|
|
1019
1019
|
ref.current && observer.unobserve(ref.current);
|
|
1020
1020
|
};
|
|
1021
1021
|
}, [handleObserver, ref.current]);
|
|
1022
|
-
return (React__default["default"].createElement("div", { ref: ref, className: classnames__default["default"](styles$5.header, { [styles$5.stuck]: isStuck }) }, children));
|
|
1022
|
+
return (React__default["default"].createElement("div", { "data-testid": DATA_LIST_STICKY_HEADER_TEST_ID, ref: ref, className: classnames__default["default"](styles$5.header, { [styles$5.stuck]: isStuck }) }, children));
|
|
1023
1023
|
}
|
|
1024
1024
|
|
|
1025
1025
|
var css_248z$4 = ".tj0MOMhLEEY- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n}\n\n.SaPMOnvw-3c- {\n --transition-properties: var(--timing-base) ease-in-out;\n --button-offset: calc(var(--space-largest) - var(--space-smaller));\n\n position: absolute;\n top: 50%;\n right: calc((16px * 3) - (16px / 4));\n right: calc(calc(16px * 3) - calc(16px / 4));\n right: var(--button-offset);\n visibility: hidden;\n width: 0;\n padding: calc(16px / 4) 0;\n padding: var(--space-smaller) 0;\n background-color: rgba(255, 255, 255, 1);\n background-color: var(--color-surface);\n opacity: 0;\n -webkit-transform: translateY(-50%);\n transform: translateY(-50%);\n transition: opacity 200ms ease-in-out,\n width 200ms ease-in-out, visibility 200ms ease-in-out;\n transition: opacity var(--transition-properties),\n width var(--transition-properties), visibility var(--transition-properties);\n}\n\n._3S1-91v2SYI- {\n visibility: visible;\n width: calc(100% - var(--button-offset));\n opacity: 1;\n}\n\n@media (min-width: 768px) {\n\n.SaPMOnvw-3c-,\n._3S1-91v2SYI- {\n position: static;\n visibility: visible;\n width: auto;\n padding: 0;\n background-color: transparent;\n opacity: 1;\n -webkit-transform: none;\n transform: none;\n transition: none;\n}\n }\n\n@media (--medium-screens-and-up) {\n\n.SaPMOnvw-3c-,\n._3S1-91v2SYI- {\n position: static;\n visibility: visible;\n width: auto;\n padding: 0;\n background-color: transparent;\n opacity: 1;\n -webkit-transform: none;\n transform: none;\n transition: none;\n}\n }\n\n._9GlBktsUALw- {\n display: block;\n}\n\n@media (min-width: 768px) {\n\n._9GlBktsUALw- {\n display: none;\n}\n }\n\n@media (--medium-screens-and-up) {\n\n._9GlBktsUALw- {\n display: none;\n}\n }\n\n/*\n * No Filters Styling\n *\n * When there are no filters, the search input is always visible.\n * ------------------------------------------------------------------------- */\n\n._3Pjrt42x454- .SaPMOnvw-3c- {\n position: static;\n visibility: visible;\n width: auto;\n opacity: 1;\n transition: none;\n}\n\n@media (min-width: 768px) {\n\n._3Pjrt42x454- .SaPMOnvw-3c- {\n max-width: 30%;\n}\n }\n\n@media (--medium-screens-and-up) {\n\n._3Pjrt42x454- .SaPMOnvw-3c- {\n max-width: 30%;\n}\n }\n\n._3Pjrt42x454- ._9GlBktsUALw- {\n display: none;\n}\n";
|
|
@@ -1233,6 +1233,8 @@ function DataList(_a) {
|
|
|
1233
1233
|
const emptyStateComponents = getCompoundComponents(props.children, DataListEmptyState);
|
|
1234
1234
|
const itemActionComponent = getCompoundComponent(props.children, DataListItemActions);
|
|
1235
1235
|
const bulkActionsComponent = getCompoundComponent(props.children, DataListBulkActions);
|
|
1236
|
+
const headerCount = Object.keys(props.headers).length;
|
|
1237
|
+
const shouldRenderStickyHeader = !!filterComponent || !!searchComponent || headerCount > 0;
|
|
1236
1238
|
return (React__default["default"].createElement(DataListContext.Provider, { value: Object.assign(Object.assign({ searchComponent,
|
|
1237
1239
|
filterComponent,
|
|
1238
1240
|
layoutComponents,
|
|
@@ -1245,7 +1247,7 @@ function DataList(_a) {
|
|
|
1245
1247
|
registerLayout }, props), { selected,
|
|
1246
1248
|
// T !== DataListObject
|
|
1247
1249
|
sorting: sorting }) },
|
|
1248
|
-
React__default["default"].createElement(InternalDataList,
|
|
1250
|
+
React__default["default"].createElement(InternalDataList, { shouldRenderStickyHeader: shouldRenderStickyHeader })));
|
|
1249
1251
|
function registerLayoutBreakpoints(size) {
|
|
1250
1252
|
setLayoutBreakpoints(prev => sortBreakpoints([...prev, size]));
|
|
1251
1253
|
}
|
|
@@ -1253,7 +1255,7 @@ function DataList(_a) {
|
|
|
1253
1255
|
setLayouts(prev => (Object.assign(Object.assign({}, prev), { [size]: children })));
|
|
1254
1256
|
}
|
|
1255
1257
|
}
|
|
1256
|
-
function InternalDataList() {
|
|
1258
|
+
function InternalDataList({ shouldRenderStickyHeader, }) {
|
|
1257
1259
|
const { data, title, totalCount, loadingState = "none", layoutComponents, } = useDataListContext();
|
|
1258
1260
|
const backToTopRef = React.useRef(null);
|
|
1259
1261
|
const initialLoading = loadingState === "initial";
|
|
@@ -1264,12 +1266,12 @@ function InternalDataList() {
|
|
|
1264
1266
|
title && React__default["default"].createElement(Heading.Heading, { level: 3 }, title),
|
|
1265
1267
|
React__default["default"].createElement(DataListTotalCount, { totalCount: totalCount, loading: initialLoading })),
|
|
1266
1268
|
React__default["default"].createElement("div", { ref: backToTopRef }),
|
|
1267
|
-
React__default["default"].createElement(DataListStickyHeader, null,
|
|
1269
|
+
shouldRenderStickyHeader && (React__default["default"].createElement(DataListStickyHeader, null,
|
|
1268
1270
|
React__default["default"].createElement("div", { className: styles$g.headerFilters },
|
|
1269
1271
|
React__default["default"].createElement(InternalDataListFilters, null),
|
|
1270
1272
|
React__default["default"].createElement(InternalDataListSearch, null)),
|
|
1271
1273
|
React__default["default"].createElement(InternalDataListStatusBar, null),
|
|
1272
|
-
React__default["default"].createElement(DataListHeader, null)),
|
|
1274
|
+
React__default["default"].createElement(DataListHeader, null))),
|
|
1273
1275
|
initialLoading && React__default["default"].createElement(DataListLoadingState, null),
|
|
1274
1276
|
showEmptyState && React__default["default"].createElement(InternalDataListEmptyState, null),
|
|
1275
1277
|
layoutComponents,
|
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
|
}
|
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/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/Tooltip/index.js
CHANGED
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var Tooltip = require('../Tooltip-
|
|
5
|
+
var Tooltip = require('../Tooltip-ef3d6ef4.js');
|
|
6
6
|
require('react');
|
|
7
7
|
require('classnames');
|
|
8
8
|
require('react-dom');
|
|
9
9
|
require('framer-motion');
|
|
10
|
+
require('@jobber/hooks/useSafeLayoutEffect');
|
|
10
11
|
require('../style-inject.es-9d2f5f4e.js');
|
|
11
12
|
require('react-popper');
|
|
12
13
|
|
|
@@ -4,6 +4,7 @@ var React = require('react');
|
|
|
4
4
|
var classnames = require('classnames');
|
|
5
5
|
var ReactDOM = require('react-dom');
|
|
6
6
|
var framerMotion = require('framer-motion');
|
|
7
|
+
var useSafeLayoutEffect = require('@jobber/hooks/useSafeLayoutEffect');
|
|
7
8
|
var styleInject_es = require('./style-inject.es-9d2f5f4e.js');
|
|
8
9
|
var reactPopper = require('react-popper');
|
|
9
10
|
|
|
@@ -95,7 +96,7 @@ function Tooltip({ message, children }) {
|
|
|
95
96
|
activator.removeEventListener("blur", hideTooltip);
|
|
96
97
|
}
|
|
97
98
|
};
|
|
98
|
-
|
|
99
|
+
useSafeLayoutEffect.useSafeLayoutEffect(() => {
|
|
99
100
|
injectAttributes();
|
|
100
101
|
addListeners();
|
|
101
102
|
return () => {
|
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.2+a50b038f",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
],
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@jobber/design": "^0.53.0",
|
|
23
|
-
"@jobber/formatters": "
|
|
24
|
-
"@jobber/hooks": "^2.8.
|
|
23
|
+
"@jobber/formatters": "^0.2.2",
|
|
24
|
+
"@jobber/hooks": "^2.8.2-JOB-84042.26+a50b038f",
|
|
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": "a50b038fd5abd4f90eec3d8cd47d4cc70dca2c87"
|
|
88
88
|
}
|