@jobber/components 6.82.3 → 6.82.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Chips/InternalChipDismissible/InternalChipDismissibleTypes.d.ts +1 -1
- package/dist/Chips/InternalChipDismissible/hooks/index.cjs +1 -3
- package/dist/Chips/InternalChipDismissible/hooks/index.mjs +1 -3
- package/dist/Chips/InternalChipDismissible/hooks/useInternalChipDismissible.d.ts +1 -2
- package/dist/Chips/InternalChipDismissible/hooks/useRepositionMenu.d.ts +15 -9
- package/dist/Chips/InternalChipDismissible/hooks/useScrollToActive.d.ts +1 -1
- package/dist/Chips/InternalChipDismissible/index.cjs +3 -3
- package/dist/Chips/InternalChipDismissible/index.mjs +3 -3
- package/dist/Chips/index.cjs +3 -3
- package/dist/Chips/index.mjs +3 -3
- package/dist/InternalChipDismissible-cjs.js +16 -21
- package/dist/InternalChipDismissible-es.js +16 -21
- package/dist/index.cjs +1 -1
- package/dist/index.mjs +1 -1
- package/dist/styles.css +4 -1
- package/dist/useScrollToActive-cjs.js +11 -34
- package/dist/useScrollToActive-es.js +12 -35
- package/package.json +2 -2
|
@@ -2,7 +2,7 @@ import { ChipProps } from "../Chip";
|
|
|
2
2
|
import { ChipDismissibleProps } from "../ChipsTypes";
|
|
3
3
|
export type InternalChipDismissibleProps = Omit<ChipDismissibleProps, "type">;
|
|
4
4
|
export interface ChipDismissibleInputProps extends Pick<InternalChipDismissibleProps, "activator" | "isLoadingMore" | "onSearch" | "onLoadMore"> {
|
|
5
|
-
readonly attachTo:
|
|
5
|
+
readonly attachTo: React.RefObject<Element | null>;
|
|
6
6
|
readonly options: ChipProps[];
|
|
7
7
|
onCustomOptionSelect?(value: string): void;
|
|
8
8
|
onOptionSelect(value: string): void;
|
|
@@ -17,9 +17,7 @@ require('../../../_setToString-cjs.js');
|
|
|
17
17
|
require('../../../debounce-cjs.js');
|
|
18
18
|
require('../../../Icon-cjs.js');
|
|
19
19
|
require('@jobber/design');
|
|
20
|
-
require('
|
|
21
|
-
require('react-dom');
|
|
22
|
-
require('../../../maxHeight-cjs.js');
|
|
20
|
+
require('react-popper');
|
|
23
21
|
|
|
24
22
|
|
|
25
23
|
|
|
@@ -15,6 +15,4 @@ import '../../../_setToString-es.js';
|
|
|
15
15
|
import '../../../debounce-es.js';
|
|
16
16
|
import '../../../Icon-es.js';
|
|
17
17
|
import '@jobber/design';
|
|
18
|
-
import '
|
|
19
|
-
import 'react-dom';
|
|
20
|
-
import '../../../maxHeight-es.js';
|
|
18
|
+
import 'react-popper';
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { KeyboardEvent, MouseEvent } from "react";
|
|
2
2
|
import { InternalChipDismissibleProps } from "../InternalChipDismissibleTypes";
|
|
3
3
|
export declare function useInternalChipDismissible({ children, selected, onChange, onClick, onCustomAdd, }: InternalChipDismissibleProps): {
|
|
4
|
-
ref: import("react").
|
|
5
|
-
wrapperElement: HTMLDivElement | null;
|
|
4
|
+
ref: import("react").RefObject<HTMLDivElement>;
|
|
6
5
|
sortedVisibleChipOptions: import("../../Chip").ChipProps[];
|
|
7
6
|
availableChipOptions: import("../../Chip").ChipProps[];
|
|
8
7
|
handleChipRemove: (value: string) => () => void;
|
|
@@ -1,10 +1,16 @@
|
|
|
1
|
-
import
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { RefObject } from "react";
|
|
2
|
+
export declare function useRepositionMenu(attachTo: RefObject<Element | null>): {
|
|
3
|
+
setPositionedElementRef: import("react").Dispatch<import("react").SetStateAction<HTMLElement | null | undefined>>;
|
|
4
|
+
targetWidth: number | undefined;
|
|
5
|
+
styles: {
|
|
6
|
+
[key: string]: React.CSSProperties;
|
|
7
7
|
};
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
attributes: {
|
|
9
|
+
[key: string]: {
|
|
10
|
+
[key: string]: string;
|
|
11
|
+
} | undefined;
|
|
12
|
+
};
|
|
13
|
+
state: import("@popperjs/core").State | null;
|
|
14
|
+
update: import("@popperjs/core").Instance["update"] | null;
|
|
15
|
+
forceUpdate: import("@popperjs/core").Instance["forceUpdate"] | null;
|
|
16
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function useScrollToActive(index: number): import("react").
|
|
1
|
+
export declare function useScrollToActive(index: number): import("react").RefObject<HTMLDivElement>;
|
|
@@ -18,9 +18,7 @@ require('../../_setToString-cjs.js');
|
|
|
18
18
|
require('../../debounce-cjs.js');
|
|
19
19
|
require('../../Icon-cjs.js');
|
|
20
20
|
require('@jobber/design');
|
|
21
|
-
require('
|
|
22
|
-
require('react-dom');
|
|
23
|
-
require('../../maxHeight-cjs.js');
|
|
21
|
+
require('react-popper');
|
|
24
22
|
require('classnames');
|
|
25
23
|
require('../../useSafeLayoutEffect-cjs.js');
|
|
26
24
|
require('../../Text-cjs.js');
|
|
@@ -35,6 +33,8 @@ require('../../Avatar-cjs.js');
|
|
|
35
33
|
require('color');
|
|
36
34
|
require('../../useChildComponent-cjs.js');
|
|
37
35
|
require('../../Tooltip-cjs.js');
|
|
36
|
+
require('../../floating-ui.react-cjs.js');
|
|
37
|
+
require('react-dom');
|
|
38
38
|
require('framer-motion');
|
|
39
39
|
require('../../useIsMounted-cjs.js');
|
|
40
40
|
|
|
@@ -16,9 +16,7 @@ import '../../_setToString-es.js';
|
|
|
16
16
|
import '../../debounce-es.js';
|
|
17
17
|
import '../../Icon-es.js';
|
|
18
18
|
import '@jobber/design';
|
|
19
|
-
import '
|
|
20
|
-
import 'react-dom';
|
|
21
|
-
import '../../maxHeight-es.js';
|
|
19
|
+
import 'react-popper';
|
|
22
20
|
import 'classnames';
|
|
23
21
|
import '../../useSafeLayoutEffect-es.js';
|
|
24
22
|
import '../../Text-es.js';
|
|
@@ -33,5 +31,7 @@ import '../../Avatar-es.js';
|
|
|
33
31
|
import 'color';
|
|
34
32
|
import '../../useChildComponent-es.js';
|
|
35
33
|
import '../../Tooltip-es.js';
|
|
34
|
+
import '../../floating-ui.react-es.js';
|
|
35
|
+
import 'react-dom';
|
|
36
36
|
import 'framer-motion';
|
|
37
37
|
import '../../useIsMounted-es.js';
|
package/dist/Chips/index.cjs
CHANGED
|
@@ -20,9 +20,7 @@ require('../_setToString-cjs.js');
|
|
|
20
20
|
require('../debounce-cjs.js');
|
|
21
21
|
require('../Icon-cjs.js');
|
|
22
22
|
require('@jobber/design');
|
|
23
|
-
require('
|
|
24
|
-
require('react-dom');
|
|
25
|
-
require('../maxHeight-cjs.js');
|
|
23
|
+
require('react-popper');
|
|
26
24
|
require('classnames');
|
|
27
25
|
require('../useSafeLayoutEffect-cjs.js');
|
|
28
26
|
require('../Text-cjs.js');
|
|
@@ -36,6 +34,8 @@ require('../Avatar-cjs.js');
|
|
|
36
34
|
require('color');
|
|
37
35
|
require('../useChildComponent-cjs.js');
|
|
38
36
|
require('../Tooltip-cjs.js');
|
|
37
|
+
require('../floating-ui.react-cjs.js');
|
|
38
|
+
require('react-dom');
|
|
39
39
|
require('framer-motion');
|
|
40
40
|
require('../useIsMounted-cjs.js');
|
|
41
41
|
|
package/dist/Chips/index.mjs
CHANGED
|
@@ -18,9 +18,7 @@ import '../_setToString-es.js';
|
|
|
18
18
|
import '../debounce-es.js';
|
|
19
19
|
import '../Icon-es.js';
|
|
20
20
|
import '@jobber/design';
|
|
21
|
-
import '
|
|
22
|
-
import 'react-dom';
|
|
23
|
-
import '../maxHeight-es.js';
|
|
21
|
+
import 'react-popper';
|
|
24
22
|
import 'classnames';
|
|
25
23
|
import '../useSafeLayoutEffect-es.js';
|
|
26
24
|
import '../Text-es.js';
|
|
@@ -34,6 +32,8 @@ import '../Avatar-es.js';
|
|
|
34
32
|
import 'color';
|
|
35
33
|
import '../useChildComponent-es.js';
|
|
36
34
|
import '../Tooltip-es.js';
|
|
35
|
+
import '../floating-ui.react-es.js';
|
|
36
|
+
import 'react-dom';
|
|
37
37
|
import 'framer-motion';
|
|
38
38
|
import '../useIsMounted-es.js';
|
|
39
39
|
|
|
@@ -4,9 +4,9 @@ var React = require('react');
|
|
|
4
4
|
var useScrollToActive = require('./useScrollToActive-cjs.js');
|
|
5
5
|
require('./isObjectLike-cjs.js');
|
|
6
6
|
require('@jobber/design');
|
|
7
|
+
require('react-popper');
|
|
7
8
|
var classnames = require('classnames');
|
|
8
9
|
var useSafeLayoutEffect = require('./useSafeLayoutEffect-cjs.js');
|
|
9
|
-
var floatingUi_react = require('./floating-ui.react-cjs.js');
|
|
10
10
|
var Text = require('./Text-cjs.js');
|
|
11
11
|
var Button = require('./Button-cjs.js');
|
|
12
12
|
var Spinner = require('./Spinner-cjs.js');
|
|
@@ -19,16 +19,14 @@ function InternalChip({ label, active = false, disabled = false, invalid = false
|
|
|
19
19
|
suffix && React.createElement(Chip.ChipNamespace.Suffix, null, suffix)));
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
var styles = {"wrapper":"XRnU90M2-fs-","input":"Dq-yFHd1zK0-","menu":"F7CpurjKzBI-","menuListOption":"_9SAK31TqNDY-","loadingIndicator":"s5vFJVv0t0Q-","activeOption":"_8d0w-JzgzS4-","spinning":"hDJGLX6kE-U-"};
|
|
22
|
+
var styles = {"wrapper":"XRnU90M2-fs-","input":"Dq-yFHd1zK0-","menu":"F7CpurjKzBI-","menuList":"J8USVG1tjPs-","menuListOption":"_9SAK31TqNDY-","loadingIndicator":"s5vFJVv0t0Q-","activeOption":"_8d0w-JzgzS4-","spinning":"hDJGLX6kE-U-"};
|
|
23
23
|
|
|
24
|
-
// Adding Portal moves it over the limit, but doesn't impact the readabiltiy
|
|
25
|
-
// eslint-disable-next-line max-statements
|
|
26
24
|
function InternalChipDismissibleInput(props) {
|
|
27
25
|
const { activator = React.createElement(Button.Button, { icon: "add", type: "secondary", ariaLabel: "Add" }), attachTo, isLoadingMore = false, onLoadMore, options, } = props;
|
|
28
26
|
const { activeIndex, allOptions, hasAvailableOptions, inputRef, menuId, menuOpen, searchValue, showInput, generateDescendantId, handleBlur, handleFocus, handleSearchChange, handleCancelBlur, handleEnableBlur, handleSetActiveOnMouseOver, handleKeyDown, handleSelectOption, handleShowInput, handleDebouncedSearch, } = useScrollToActive.useInternalChipDismissibleInput(props);
|
|
29
|
-
const
|
|
27
|
+
const menuRef = useScrollToActive.useScrollToActive(activeIndex);
|
|
30
28
|
const { ref: visibleChildRef, isInView } = useScrollToActive.useInView();
|
|
31
|
-
const { styles:
|
|
29
|
+
const { styles: popperStyles, attributes, update, setPositionedElementRef, } = useScrollToActive.useRepositionMenu(attachTo);
|
|
32
30
|
useSafeLayoutEffect.useSafeLayoutEffect_1(() => {
|
|
33
31
|
update === null || update === void 0 ? void 0 : update();
|
|
34
32
|
}, [allOptions, menuOpen, update, options]);
|
|
@@ -43,28 +41,25 @@ function InternalChipDismissibleInput(props) {
|
|
|
43
41
|
return React.cloneElement(activator, { onClick: handleShowInput });
|
|
44
42
|
}
|
|
45
43
|
const shouldShowMenu = menuOpen && (hasAvailableOptions || isLoadingMore);
|
|
46
|
-
const menuContent = (React.createElement("div", { ref: node => {
|
|
47
|
-
setFloatingRef(node);
|
|
48
|
-
scrollableRef.current = node;
|
|
49
|
-
}, role: "listbox", id: menuId, className: styles.menu, style: floatingStyles.float, "data-testid": "chip-menu" },
|
|
50
|
-
allOptions.map((option, i) => (React.createElement("button", { key: option.value, role: "option", type: "button", id: generateDescendantId(i), className: classnames(styles.menuListOption, {
|
|
51
|
-
[styles.activeOption]: activeIndex === i,
|
|
52
|
-
}), onClick: () => handleSelectOption(option), onMouseEnter: handleSetActiveOnMouseOver(i), onMouseDown: handleCancelBlur, onMouseUp: handleEnableBlur },
|
|
53
|
-
React.createElement("span", { "aria-hidden": true }, option.prefix),
|
|
54
|
-
React.createElement(Text.Text, null, option.label)))),
|
|
55
|
-
React.createElement("div", { ref: visibleChildRef }),
|
|
56
|
-
isLoadingMore && (React.createElement("div", { className: styles.loadingIndicator },
|
|
57
|
-
React.createElement(Spinner.Spinner, { size: "small", inline: true })))));
|
|
58
44
|
return (React.createElement(React.Fragment, null,
|
|
59
45
|
React.createElement("input", { ref: inputRef, className: styles.input, type: "text", role: "combobox", "aria-label": "Press up and down arrow to cycle through the options or type to narrow down the results", "aria-autocomplete": "list", "aria-owns": menuId, "aria-expanded": shouldShowMenu, "aria-activedescendant": generateDescendantId(activeIndex), value: searchValue, onChange: handleSearchChange, onKeyDown: handleKeyDown, onBlur: () => setTimeout(handleBlur, 200), onFocus: handleFocus, autoFocus: true }),
|
|
60
|
-
shouldShowMenu && React.createElement(
|
|
46
|
+
shouldShowMenu && (React.createElement("div", Object.assign({ ref: setPositionedElementRef, className: styles.menu, style: popperStyles.popper }, attributes.popper),
|
|
47
|
+
React.createElement("div", { ref: menuRef, role: "listbox", id: menuId, className: styles.menuList, "data-testid": "chip-menu" },
|
|
48
|
+
allOptions.map((option, i) => (React.createElement("button", { key: option.value, role: "option", type: "button", id: generateDescendantId(i), className: classnames(styles.menuListOption, {
|
|
49
|
+
[styles.activeOption]: activeIndex === i,
|
|
50
|
+
}), onClick: () => handleSelectOption(option), onMouseEnter: handleSetActiveOnMouseOver(i), onMouseDown: handleCancelBlur, onMouseUp: handleEnableBlur },
|
|
51
|
+
React.createElement("span", { "aria-hidden": true }, option.prefix),
|
|
52
|
+
React.createElement(Text.Text, null, option.label)))),
|
|
53
|
+
React.createElement("div", { ref: visibleChildRef }),
|
|
54
|
+
isLoadingMore && (React.createElement("div", { className: styles.loadingIndicator },
|
|
55
|
+
React.createElement(Spinner.Spinner, { size: "small", inline: true }))))))));
|
|
61
56
|
}
|
|
62
57
|
|
|
63
58
|
function InternalChipDismissible(props) {
|
|
64
|
-
const { availableChipOptions, ref: wrapperRef,
|
|
59
|
+
const { availableChipOptions, ref: wrapperRef, sortedVisibleChipOptions, handleChipAdd, handleChipClick, handleChipKeyDown, handleChipRemove, handleCustomAdd, handleWrapperKeyDown, } = useScrollToActive.useInternalChipDismissible(props);
|
|
65
60
|
return (React.createElement("div", { ref: wrapperRef, className: styles.wrapper, "data-testid": "dismissible-chips", onKeyDown: handleWrapperKeyDown, role: "listbox" },
|
|
66
61
|
sortedVisibleChipOptions.map(chip => (React.createElement(InternalChip, Object.assign({ key: chip.value }, chip, { onKeyDown: handleChipKeyDown(chip.value), onClick: handleChipClick(chip.value), ariaLabel: `${chip.label}. Press delete or backspace to remove ${chip.label}`, tabIndex: 0, suffix: React.createElement(Chip.InternalChipButton, { icon: "remove", invalid: chip.invalid, disabled: chip.disabled, label: chip.label, onClick: handleChipRemove(chip.value) }) })))),
|
|
67
|
-
React.createElement(InternalChipDismissibleInput, { activator: props.activator, attachTo:
|
|
62
|
+
React.createElement(InternalChipDismissibleInput, { activator: props.activator, attachTo: wrapperRef, isLoadingMore: props.isLoadingMore, options: availableChipOptions, onOptionSelect: handleChipAdd, onCustomOptionSelect: handleCustomAdd, onSearch: props.onSearch, onLoadMore: props.onLoadMore, onlyShowMenuOnSearch: props.onlyShowMenuOnSearch, autoSelectOnClickOutside: props.autoSelectOnClickOutside })));
|
|
68
63
|
}
|
|
69
64
|
|
|
70
65
|
exports.InternalChip = InternalChip;
|
|
@@ -2,9 +2,9 @@ import React__default, { useEffect } from 'react';
|
|
|
2
2
|
import { a as useInternalChipDismissibleInput, d as useScrollToActive, b as useInView, c as useRepositionMenu, u as useInternalChipDismissible } from './useScrollToActive-es.js';
|
|
3
3
|
import './isObjectLike-es.js';
|
|
4
4
|
import '@jobber/design';
|
|
5
|
+
import 'react-popper';
|
|
5
6
|
import classnames from 'classnames';
|
|
6
7
|
import { u as useSafeLayoutEffect_1 } from './useSafeLayoutEffect-es.js';
|
|
7
|
-
import { F as FloatingPortal } from './floating-ui.react-es.js';
|
|
8
8
|
import { T as Text } from './Text-es.js';
|
|
9
9
|
import { B as Button } from './Button-es.js';
|
|
10
10
|
import { S as Spinner } from './Spinner-es.js';
|
|
@@ -17,16 +17,14 @@ function InternalChip({ label, active = false, disabled = false, invalid = false
|
|
|
17
17
|
suffix && React__default.createElement(ChipNamespace.Suffix, null, suffix)));
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
var styles = {"wrapper":"XRnU90M2-fs-","input":"Dq-yFHd1zK0-","menu":"F7CpurjKzBI-","menuListOption":"_9SAK31TqNDY-","loadingIndicator":"s5vFJVv0t0Q-","activeOption":"_8d0w-JzgzS4-","spinning":"hDJGLX6kE-U-"};
|
|
20
|
+
var styles = {"wrapper":"XRnU90M2-fs-","input":"Dq-yFHd1zK0-","menu":"F7CpurjKzBI-","menuList":"J8USVG1tjPs-","menuListOption":"_9SAK31TqNDY-","loadingIndicator":"s5vFJVv0t0Q-","activeOption":"_8d0w-JzgzS4-","spinning":"hDJGLX6kE-U-"};
|
|
21
21
|
|
|
22
|
-
// Adding Portal moves it over the limit, but doesn't impact the readabiltiy
|
|
23
|
-
// eslint-disable-next-line max-statements
|
|
24
22
|
function InternalChipDismissibleInput(props) {
|
|
25
23
|
const { activator = React__default.createElement(Button, { icon: "add", type: "secondary", ariaLabel: "Add" }), attachTo, isLoadingMore = false, onLoadMore, options, } = props;
|
|
26
24
|
const { activeIndex, allOptions, hasAvailableOptions, inputRef, menuId, menuOpen, searchValue, showInput, generateDescendantId, handleBlur, handleFocus, handleSearchChange, handleCancelBlur, handleEnableBlur, handleSetActiveOnMouseOver, handleKeyDown, handleSelectOption, handleShowInput, handleDebouncedSearch, } = useInternalChipDismissibleInput(props);
|
|
27
|
-
const
|
|
25
|
+
const menuRef = useScrollToActive(activeIndex);
|
|
28
26
|
const { ref: visibleChildRef, isInView } = useInView();
|
|
29
|
-
const { styles:
|
|
27
|
+
const { styles: popperStyles, attributes, update, setPositionedElementRef, } = useRepositionMenu(attachTo);
|
|
30
28
|
useSafeLayoutEffect_1(() => {
|
|
31
29
|
update === null || update === void 0 ? void 0 : update();
|
|
32
30
|
}, [allOptions, menuOpen, update, options]);
|
|
@@ -41,28 +39,25 @@ function InternalChipDismissibleInput(props) {
|
|
|
41
39
|
return React__default.cloneElement(activator, { onClick: handleShowInput });
|
|
42
40
|
}
|
|
43
41
|
const shouldShowMenu = menuOpen && (hasAvailableOptions || isLoadingMore);
|
|
44
|
-
const menuContent = (React__default.createElement("div", { ref: node => {
|
|
45
|
-
setFloatingRef(node);
|
|
46
|
-
scrollableRef.current = node;
|
|
47
|
-
}, role: "listbox", id: menuId, className: styles.menu, style: floatingStyles.float, "data-testid": "chip-menu" },
|
|
48
|
-
allOptions.map((option, i) => (React__default.createElement("button", { key: option.value, role: "option", type: "button", id: generateDescendantId(i), className: classnames(styles.menuListOption, {
|
|
49
|
-
[styles.activeOption]: activeIndex === i,
|
|
50
|
-
}), onClick: () => handleSelectOption(option), onMouseEnter: handleSetActiveOnMouseOver(i), onMouseDown: handleCancelBlur, onMouseUp: handleEnableBlur },
|
|
51
|
-
React__default.createElement("span", { "aria-hidden": true }, option.prefix),
|
|
52
|
-
React__default.createElement(Text, null, option.label)))),
|
|
53
|
-
React__default.createElement("div", { ref: visibleChildRef }),
|
|
54
|
-
isLoadingMore && (React__default.createElement("div", { className: styles.loadingIndicator },
|
|
55
|
-
React__default.createElement(Spinner, { size: "small", inline: true })))));
|
|
56
42
|
return (React__default.createElement(React__default.Fragment, null,
|
|
57
43
|
React__default.createElement("input", { ref: inputRef, className: styles.input, type: "text", role: "combobox", "aria-label": "Press up and down arrow to cycle through the options or type to narrow down the results", "aria-autocomplete": "list", "aria-owns": menuId, "aria-expanded": shouldShowMenu, "aria-activedescendant": generateDescendantId(activeIndex), value: searchValue, onChange: handleSearchChange, onKeyDown: handleKeyDown, onBlur: () => setTimeout(handleBlur, 200), onFocus: handleFocus, autoFocus: true }),
|
|
58
|
-
shouldShowMenu && React__default.createElement(
|
|
44
|
+
shouldShowMenu && (React__default.createElement("div", Object.assign({ ref: setPositionedElementRef, className: styles.menu, style: popperStyles.popper }, attributes.popper),
|
|
45
|
+
React__default.createElement("div", { ref: menuRef, role: "listbox", id: menuId, className: styles.menuList, "data-testid": "chip-menu" },
|
|
46
|
+
allOptions.map((option, i) => (React__default.createElement("button", { key: option.value, role: "option", type: "button", id: generateDescendantId(i), className: classnames(styles.menuListOption, {
|
|
47
|
+
[styles.activeOption]: activeIndex === i,
|
|
48
|
+
}), onClick: () => handleSelectOption(option), onMouseEnter: handleSetActiveOnMouseOver(i), onMouseDown: handleCancelBlur, onMouseUp: handleEnableBlur },
|
|
49
|
+
React__default.createElement("span", { "aria-hidden": true }, option.prefix),
|
|
50
|
+
React__default.createElement(Text, null, option.label)))),
|
|
51
|
+
React__default.createElement("div", { ref: visibleChildRef }),
|
|
52
|
+
isLoadingMore && (React__default.createElement("div", { className: styles.loadingIndicator },
|
|
53
|
+
React__default.createElement(Spinner, { size: "small", inline: true }))))))));
|
|
59
54
|
}
|
|
60
55
|
|
|
61
56
|
function InternalChipDismissible(props) {
|
|
62
|
-
const { availableChipOptions, ref: wrapperRef,
|
|
57
|
+
const { availableChipOptions, ref: wrapperRef, sortedVisibleChipOptions, handleChipAdd, handleChipClick, handleChipKeyDown, handleChipRemove, handleCustomAdd, handleWrapperKeyDown, } = useInternalChipDismissible(props);
|
|
63
58
|
return (React__default.createElement("div", { ref: wrapperRef, className: styles.wrapper, "data-testid": "dismissible-chips", onKeyDown: handleWrapperKeyDown, role: "listbox" },
|
|
64
59
|
sortedVisibleChipOptions.map(chip => (React__default.createElement(InternalChip, Object.assign({ key: chip.value }, chip, { onKeyDown: handleChipKeyDown(chip.value), onClick: handleChipClick(chip.value), ariaLabel: `${chip.label}. Press delete or backspace to remove ${chip.label}`, tabIndex: 0, suffix: React__default.createElement(InternalChipButton, { icon: "remove", invalid: chip.invalid, disabled: chip.disabled, label: chip.label, onClick: handleChipRemove(chip.value) }) })))),
|
|
65
|
-
React__default.createElement(InternalChipDismissibleInput, { activator: props.activator, attachTo:
|
|
60
|
+
React__default.createElement(InternalChipDismissibleInput, { activator: props.activator, attachTo: wrapperRef, isLoadingMore: props.isLoadingMore, options: availableChipOptions, onOptionSelect: handleChipAdd, onCustomOptionSelect: handleCustomAdd, onSearch: props.onSearch, onLoadMore: props.onLoadMore, onlyShowMenuOnSearch: props.onlyShowMenuOnSearch, autoSelectOnClickOutside: props.autoSelectOnClickOutside })));
|
|
66
61
|
}
|
|
67
62
|
|
|
68
63
|
export { InternalChipDismissible as I, InternalChip as a };
|
package/dist/index.cjs
CHANGED
|
@@ -130,6 +130,7 @@ require('./_getTag-cjs.js');
|
|
|
130
130
|
require('./isSymbol-cjs.js');
|
|
131
131
|
require('./_baseEach-cjs.js');
|
|
132
132
|
require('./debounce-cjs.js');
|
|
133
|
+
require('react-popper');
|
|
133
134
|
require('./ComboboxContent-cjs.js');
|
|
134
135
|
require('./ComboboxContentSearch-cjs.js');
|
|
135
136
|
require('./ComboboxContentList-cjs.js');
|
|
@@ -179,7 +180,6 @@ require('./DataListAction-cjs.js');
|
|
|
179
180
|
require('./DataListLayoutActions-cjs.js');
|
|
180
181
|
require('./DataListStatusBar-cjs.js');
|
|
181
182
|
require('./throttle-cjs.js');
|
|
182
|
-
require('react-popper');
|
|
183
183
|
require('./omit-cjs.js');
|
|
184
184
|
require('./useFormFieldFocus-cjs.js');
|
|
185
185
|
require('filesize');
|
package/dist/index.mjs
CHANGED
|
@@ -128,6 +128,7 @@ import './_getTag-es.js';
|
|
|
128
128
|
import './isSymbol-es.js';
|
|
129
129
|
import './_baseEach-es.js';
|
|
130
130
|
import './debounce-es.js';
|
|
131
|
+
import 'react-popper';
|
|
131
132
|
import './ComboboxContent-es.js';
|
|
132
133
|
import './ComboboxContentSearch-es.js';
|
|
133
134
|
import './ComboboxContentList-es.js';
|
|
@@ -177,7 +178,6 @@ import './DataListAction-es.js';
|
|
|
177
178
|
import './DataListLayoutActions-es.js';
|
|
178
179
|
import './DataListStatusBar-es.js';
|
|
179
180
|
import './throttle-es.js';
|
|
180
|
-
import 'react-popper';
|
|
181
181
|
import './omit-es.js';
|
|
182
182
|
import './useFormFieldFocus-es.js';
|
|
183
183
|
import 'filesize';
|
package/dist/styles.css
CHANGED
|
@@ -3548,9 +3548,12 @@ a._7BLGtYNuJOU-.zgRx3ehZ2z8-:hover {
|
|
|
3548
3548
|
z-index: 6;
|
|
3549
3549
|
z-index: var(--elevation-menu);
|
|
3550
3550
|
width: 100%;
|
|
3551
|
+
}
|
|
3552
|
+
|
|
3553
|
+
.J8USVG1tjPs- {
|
|
3554
|
+
max-height: 320px;
|
|
3551
3555
|
box-shadow: 0px 1px 4px 0px rgba(0, 0, 0, 0.1), 0px 4px 12px 0px rgba(0, 0, 0, 0.05);
|
|
3552
3556
|
box-shadow: var(--shadow-base);
|
|
3553
|
-
box-sizing: border-box;
|
|
3554
3557
|
padding: 8px 0;
|
|
3555
3558
|
padding: var(--space-small) 0;
|
|
3556
3559
|
border-radius: 8px;
|
|
@@ -11,8 +11,7 @@ var identity$1 = require('./identity-cjs.js');
|
|
|
11
11
|
var _isIterateeCall = require('./_isIterateeCall-cjs.js');
|
|
12
12
|
var debounce = require('./debounce-cjs.js');
|
|
13
13
|
var Icon = require('./Icon-cjs.js');
|
|
14
|
-
var
|
|
15
|
-
var maxHeight = require('./maxHeight-cjs.js');
|
|
14
|
+
var reactPopper = require('react-popper');
|
|
16
15
|
|
|
17
16
|
var baseEach = _baseEach._baseEach,
|
|
18
17
|
isArrayLike = isTypedArray.isArrayLike_1;
|
|
@@ -311,7 +310,7 @@ function findFocusableElement(element, direction) {
|
|
|
311
310
|
return findFocusableElement(nextElement, direction);
|
|
312
311
|
}
|
|
313
312
|
function useInternalChipDismissible({ children, selected, onChange, onClick, onCustomAdd, }) {
|
|
314
|
-
const
|
|
313
|
+
const ref = React.useRef(null);
|
|
315
314
|
const chipOptions = children.map(chip => chip.props);
|
|
316
315
|
const visibleChipOptions = chipOptions.filter(chip => selected.includes(chip.value));
|
|
317
316
|
const sortedVisibleChipOptions = sortBy$1(visibleChipOptions, chip => selected.indexOf(chip.value));
|
|
@@ -368,7 +367,7 @@ function useInternalChipDismissible({ children, selected, onChange, onClick, onC
|
|
|
368
367
|
};
|
|
369
368
|
},
|
|
370
369
|
};
|
|
371
|
-
return Object.assign(Object.assign({}, actions), { ref
|
|
370
|
+
return Object.assign(Object.assign({}, actions), { ref,
|
|
372
371
|
sortedVisibleChipOptions,
|
|
373
372
|
availableChipOptions });
|
|
374
373
|
}
|
|
@@ -574,39 +573,17 @@ function useInView() {
|
|
|
574
573
|
return { ref, isInView };
|
|
575
574
|
}
|
|
576
575
|
|
|
577
|
-
const ROUNDED_BORDER_ARROW_EDGE_OFFSET = 8;
|
|
578
|
-
const PREFERRED_MAX_HEIGHT = 320;
|
|
579
576
|
function useRepositionMenu(attachTo) {
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
apply({ availableHeight, elements }) {
|
|
587
|
-
const maxHeight$1 = maxHeight.calculateMaxHeight(availableHeight, {
|
|
588
|
-
maxHeight: PREFERRED_MAX_HEIGHT,
|
|
589
|
-
});
|
|
590
|
-
Object.assign(elements.floating.style, {
|
|
591
|
-
maxHeight: `${maxHeight$1}px`,
|
|
592
|
-
});
|
|
593
|
-
},
|
|
594
|
-
}),
|
|
577
|
+
var _a;
|
|
578
|
+
const [positionElement, setPositionedElementRef] = React.useState();
|
|
579
|
+
const popper = reactPopper.usePopper(attachTo.current, positionElement, {
|
|
580
|
+
modifiers: [
|
|
581
|
+
{ name: "offset", options: { offset: [0, 8] } },
|
|
582
|
+
{ name: "flip", options: { fallbackPlacements: ["top"] } },
|
|
595
583
|
],
|
|
596
|
-
elements: {
|
|
597
|
-
reference: attachTo,
|
|
598
|
-
},
|
|
599
|
-
whileElementsMounted: floatingUi_react.autoUpdate,
|
|
600
584
|
});
|
|
601
|
-
const targetWidth = attachTo === null ||
|
|
602
|
-
return {
|
|
603
|
-
setFloatingRef: refs.setFloating,
|
|
604
|
-
targetWidth,
|
|
605
|
-
styles: {
|
|
606
|
-
float: floatingStyles,
|
|
607
|
-
},
|
|
608
|
-
update,
|
|
609
|
-
};
|
|
585
|
+
const targetWidth = (_a = attachTo.current) === null || _a === void 0 ? void 0 : _a.clientWidth;
|
|
586
|
+
return Object.assign(Object.assign({}, popper), { setPositionedElementRef, targetWidth });
|
|
610
587
|
}
|
|
611
588
|
|
|
612
589
|
function useScrollToActive(index) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React__default, {
|
|
1
|
+
import React__default, { useRef, useId, useState, useEffect } from 'react';
|
|
2
2
|
import { g as getDefaultExportFromCjs } from './_commonjsHelpers-es.js';
|
|
3
3
|
import { _ as _baseFlatten } from './_baseFlatten-es.js';
|
|
4
4
|
import { a as _arrayMap, b as _baseGet } from './_baseGet-es.js';
|
|
@@ -9,8 +9,7 @@ import { i as identity_1 } from './identity-es.js';
|
|
|
9
9
|
import { _ as _baseRest, a as _isIterateeCall } from './_isIterateeCall-es.js';
|
|
10
10
|
import { a as debounce } from './debounce-es.js';
|
|
11
11
|
import { I as Icon } from './Icon-es.js';
|
|
12
|
-
import {
|
|
13
|
-
import { c as calculateMaxHeight } from './maxHeight-es.js';
|
|
12
|
+
import { usePopper } from 'react-popper';
|
|
14
13
|
|
|
15
14
|
var baseEach = _baseEach,
|
|
16
15
|
isArrayLike = isArrayLike_1;
|
|
@@ -309,7 +308,7 @@ function findFocusableElement(element, direction) {
|
|
|
309
308
|
return findFocusableElement(nextElement, direction);
|
|
310
309
|
}
|
|
311
310
|
function useInternalChipDismissible({ children, selected, onChange, onClick, onCustomAdd, }) {
|
|
312
|
-
const
|
|
311
|
+
const ref = useRef(null);
|
|
313
312
|
const chipOptions = children.map(chip => chip.props);
|
|
314
313
|
const visibleChipOptions = chipOptions.filter(chip => selected.includes(chip.value));
|
|
315
314
|
const sortedVisibleChipOptions = sortBy$1(visibleChipOptions, chip => selected.indexOf(chip.value));
|
|
@@ -366,7 +365,7 @@ function useInternalChipDismissible({ children, selected, onChange, onClick, onC
|
|
|
366
365
|
};
|
|
367
366
|
},
|
|
368
367
|
};
|
|
369
|
-
return Object.assign(Object.assign({}, actions), { ref
|
|
368
|
+
return Object.assign(Object.assign({}, actions), { ref,
|
|
370
369
|
sortedVisibleChipOptions,
|
|
371
370
|
availableChipOptions });
|
|
372
371
|
}
|
|
@@ -572,39 +571,17 @@ function useInView() {
|
|
|
572
571
|
return { ref, isInView };
|
|
573
572
|
}
|
|
574
573
|
|
|
575
|
-
const ROUNDED_BORDER_ARROW_EDGE_OFFSET = 8;
|
|
576
|
-
const PREFERRED_MAX_HEIGHT = 320;
|
|
577
574
|
function useRepositionMenu(attachTo) {
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
apply({ availableHeight, elements }) {
|
|
585
|
-
const maxHeight = calculateMaxHeight(availableHeight, {
|
|
586
|
-
maxHeight: PREFERRED_MAX_HEIGHT,
|
|
587
|
-
});
|
|
588
|
-
Object.assign(elements.floating.style, {
|
|
589
|
-
maxHeight: `${maxHeight}px`,
|
|
590
|
-
});
|
|
591
|
-
},
|
|
592
|
-
}),
|
|
575
|
+
var _a;
|
|
576
|
+
const [positionElement, setPositionedElementRef] = useState();
|
|
577
|
+
const popper = usePopper(attachTo.current, positionElement, {
|
|
578
|
+
modifiers: [
|
|
579
|
+
{ name: "offset", options: { offset: [0, 8] } },
|
|
580
|
+
{ name: "flip", options: { fallbackPlacements: ["top"] } },
|
|
593
581
|
],
|
|
594
|
-
elements: {
|
|
595
|
-
reference: attachTo,
|
|
596
|
-
},
|
|
597
|
-
whileElementsMounted: autoUpdate,
|
|
598
582
|
});
|
|
599
|
-
const targetWidth = attachTo === null ||
|
|
600
|
-
return {
|
|
601
|
-
setFloatingRef: refs.setFloating,
|
|
602
|
-
targetWidth,
|
|
603
|
-
styles: {
|
|
604
|
-
float: floatingStyles,
|
|
605
|
-
},
|
|
606
|
-
update,
|
|
607
|
-
};
|
|
583
|
+
const targetWidth = (_a = attachTo.current) === null || _a === void 0 ? void 0 : _a.clientWidth;
|
|
584
|
+
return Object.assign(Object.assign({}, popper), { setPositionedElementRef, targetWidth });
|
|
608
585
|
}
|
|
609
586
|
|
|
610
587
|
function useScrollToActive(index) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jobber/components",
|
|
3
|
-
"version": "6.82.
|
|
3
|
+
"version": "6.82.4",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
@@ -542,5 +542,5 @@
|
|
|
542
542
|
"> 1%",
|
|
543
543
|
"IE 10"
|
|
544
544
|
],
|
|
545
|
-
"gitHead": "
|
|
545
|
+
"gitHead": "e427b1ce17860ffc8afd9ee3dccc75b4a89bdf2f"
|
|
546
546
|
}
|