@jobber/components 6.75.2 → 6.76.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Autocomplete-es.js +1 -1
- package/dist/Chips/InternalChipDismissible/InternalChipDismissibleTypes.d.ts +1 -1
- package/dist/Chips/InternalChipDismissible/hooks/index.cjs +2 -1
- package/dist/Chips/InternalChipDismissible/hooks/index.mjs +2 -1
- package/dist/Chips/InternalChipDismissible/hooks/useInternalChipDismissible.d.ts +2 -1
- package/dist/Chips/InternalChipDismissible/hooks/useRepositionMenu.d.ts +9 -15
- package/dist/Chips/InternalChipDismissible/hooks/useScrollToActive.d.ts +1 -1
- package/dist/Chips/InternalChipDismissible/index.cjs +3 -2
- package/dist/Chips/InternalChipDismissible/index.mjs +3 -2
- package/dist/Chips/index.cjs +3 -2
- package/dist/Chips/index.mjs +3 -2
- package/dist/ComboboxContent-es.js +1 -1
- package/dist/InternalChipDismissible-cjs.js +21 -16
- package/dist/InternalChipDismissible-es.js +21 -16
- package/dist/Modal/index.mjs +1 -1
- package/dist/floating-ui.react-es.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.mjs +1 -1
- package/dist/styles.css +1 -4
- package/dist/useScrollToActive-cjs.js +31 -11
- package/dist/useScrollToActive-es.js +32 -12
- package/package.json +2 -2
package/dist/Autocomplete-es.js
CHANGED
|
@@ -3,7 +3,7 @@ import React__default, { useCallback, useEffect, useState, forwardRef, useMemo,
|
|
|
3
3
|
import { u as useDebounce_2 } from './useDebounce-es.js';
|
|
4
4
|
import classnames from 'classnames';
|
|
5
5
|
import { u as useIsMounted_2 } from './useIsMounted-es.js';
|
|
6
|
-
import { b as useFloating, o as offset, i as flip, q as size, d as autoUpdate,
|
|
6
|
+
import { b as useFloating, o as offset, i as flip, q as size, d as autoUpdate, F as FloatingPortal } from './floating-ui.react-es.js';
|
|
7
7
|
import { u as useSafeLayoutEffect_1 } from './useSafeLayoutEffect-es.js';
|
|
8
8
|
import { H as Heading } from './Heading-es.js';
|
|
9
9
|
import { T as Text } from './Text-es.js';
|
|
@@ -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: HTMLElement | null;
|
|
6
6
|
readonly options: ChipProps[];
|
|
7
7
|
onCustomOptionSelect?(value: string): void;
|
|
8
8
|
onOptionSelect(value: string): void;
|
|
@@ -1,7 +1,8 @@
|
|
|
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").
|
|
4
|
+
ref: import("react").Dispatch<import("react").SetStateAction<HTMLDivElement | null>>;
|
|
5
|
+
wrapperElement: HTMLDivElement | null;
|
|
5
6
|
sortedVisibleChipOptions: import("../../Chip").ChipProps[];
|
|
6
7
|
availableChipOptions: import("../../Chip").ChipProps[];
|
|
7
8
|
handleChipRemove: (value: string) => () => void;
|
|
@@ -1,16 +1,10 @@
|
|
|
1
|
-
import
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
targetWidth: number | undefined;
|
|
5
|
-
styles: {
|
|
6
|
-
|
|
1
|
+
import React from "react";
|
|
2
|
+
export interface UseRepositionMenu {
|
|
3
|
+
readonly setFloatingRef: (ref: HTMLElement | null) => void;
|
|
4
|
+
readonly targetWidth: number | undefined;
|
|
5
|
+
readonly styles: {
|
|
6
|
+
float: React.CSSProperties;
|
|
7
7
|
};
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
};
|
|
8
|
+
readonly update: () => void;
|
|
9
|
+
}
|
|
10
|
+
export declare function useRepositionMenu(attachTo: HTMLElement | null): UseRepositionMenu;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function useScrollToActive(index: number): import("react").
|
|
1
|
+
export declare function useScrollToActive(index: number): import("react").MutableRefObject<HTMLDivElement | null>;
|
|
@@ -18,7 +18,8 @@ require('../../_setToString-cjs.js');
|
|
|
18
18
|
require('../../debounce-cjs.js');
|
|
19
19
|
require('../../Icon-cjs.js');
|
|
20
20
|
require('@jobber/design');
|
|
21
|
-
require('react-
|
|
21
|
+
require('../../floating-ui.react-cjs.js');
|
|
22
|
+
require('react-dom');
|
|
22
23
|
require('classnames');
|
|
23
24
|
require('../../useSafeLayoutEffect-cjs.js');
|
|
24
25
|
require('../../Text-cjs.js');
|
|
@@ -33,9 +34,9 @@ require('../../Avatar-cjs.js');
|
|
|
33
34
|
require('color');
|
|
34
35
|
require('../../useChildComponent-cjs.js');
|
|
35
36
|
require('../../Tooltip-cjs.js');
|
|
36
|
-
require('react-dom');
|
|
37
37
|
require('framer-motion');
|
|
38
38
|
require('../../useIsMounted-cjs.js');
|
|
39
|
+
require('react-popper');
|
|
39
40
|
|
|
40
41
|
|
|
41
42
|
|
|
@@ -16,7 +16,8 @@ import '../../_setToString-es.js';
|
|
|
16
16
|
import '../../debounce-es.js';
|
|
17
17
|
import '../../Icon-es.js';
|
|
18
18
|
import '@jobber/design';
|
|
19
|
-
import 'react-
|
|
19
|
+
import '../../floating-ui.react-es.js';
|
|
20
|
+
import 'react-dom';
|
|
20
21
|
import 'classnames';
|
|
21
22
|
import '../../useSafeLayoutEffect-es.js';
|
|
22
23
|
import '../../Text-es.js';
|
|
@@ -31,6 +32,6 @@ import '../../Avatar-es.js';
|
|
|
31
32
|
import 'color';
|
|
32
33
|
import '../../useChildComponent-es.js';
|
|
33
34
|
import '../../Tooltip-es.js';
|
|
34
|
-
import 'react-dom';
|
|
35
35
|
import 'framer-motion';
|
|
36
36
|
import '../../useIsMounted-es.js';
|
|
37
|
+
import 'react-popper';
|
package/dist/Chips/index.cjs
CHANGED
|
@@ -20,7 +20,8 @@ require('../_setToString-cjs.js');
|
|
|
20
20
|
require('../debounce-cjs.js');
|
|
21
21
|
require('../Icon-cjs.js');
|
|
22
22
|
require('@jobber/design');
|
|
23
|
-
require('react-
|
|
23
|
+
require('../floating-ui.react-cjs.js');
|
|
24
|
+
require('react-dom');
|
|
24
25
|
require('classnames');
|
|
25
26
|
require('../useSafeLayoutEffect-cjs.js');
|
|
26
27
|
require('../Text-cjs.js');
|
|
@@ -34,9 +35,9 @@ require('../Avatar-cjs.js');
|
|
|
34
35
|
require('color');
|
|
35
36
|
require('../useChildComponent-cjs.js');
|
|
36
37
|
require('../Tooltip-cjs.js');
|
|
37
|
-
require('react-dom');
|
|
38
38
|
require('framer-motion');
|
|
39
39
|
require('../useIsMounted-cjs.js');
|
|
40
|
+
require('react-popper');
|
|
40
41
|
|
|
41
42
|
function ChipDismissible({ label, disabled, invalid, prefix, onClick, onRequestRemove, }) {
|
|
42
43
|
return (React.createElement(InternalChipDismissible.InternalChip, { label: label, disabled: disabled, invalid: invalid, prefix: prefix, onClick: onClick, suffix: React.createElement(Chip$1.InternalChipButton, { icon: "remove", label: label, invalid: invalid, disabled: disabled, onClick: onRequestRemove }) }));
|
package/dist/Chips/index.mjs
CHANGED
|
@@ -18,7 +18,8 @@ import '../_setToString-es.js';
|
|
|
18
18
|
import '../debounce-es.js';
|
|
19
19
|
import '../Icon-es.js';
|
|
20
20
|
import '@jobber/design';
|
|
21
|
-
import 'react-
|
|
21
|
+
import '../floating-ui.react-es.js';
|
|
22
|
+
import 'react-dom';
|
|
22
23
|
import 'classnames';
|
|
23
24
|
import '../useSafeLayoutEffect-es.js';
|
|
24
25
|
import '../Text-es.js';
|
|
@@ -32,9 +33,9 @@ import '../Avatar-es.js';
|
|
|
32
33
|
import 'color';
|
|
33
34
|
import '../useChildComponent-es.js';
|
|
34
35
|
import '../Tooltip-es.js';
|
|
35
|
-
import 'react-dom';
|
|
36
36
|
import 'framer-motion';
|
|
37
37
|
import '../useIsMounted-es.js';
|
|
38
|
+
import 'react-popper';
|
|
38
39
|
|
|
39
40
|
function ChipDismissible({ label, disabled, invalid, prefix, onClick, onRequestRemove, }) {
|
|
40
41
|
return (React__default.createElement(InternalChip, { label: label, disabled: disabled, invalid: invalid, prefix: prefix, onClick: onClick, suffix: React__default.createElement(InternalChipButton, { icon: "remove", label: label, invalid: invalid, disabled: disabled, onClick: onRequestRemove }) }));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React__default, { useContext, useRef, useEffect, useMemo } from 'react';
|
|
2
2
|
import classnames from 'classnames';
|
|
3
|
-
import { u as useFloatingParentNodeId, a as useFloatingNodeId, b as useFloating, c as autoPlacement, o as offset, s as shift, d as autoUpdate, e as useDismiss, f as useInteractions,
|
|
3
|
+
import { u as useFloatingParentNodeId, a as useFloatingNodeId, b as useFloating, c as autoPlacement, o as offset, s as shift, d as autoUpdate, e as useDismiss, f as useInteractions, g as FloatingTree, h as FloatingNode, F as FloatingPortal } from './floating-ui.react-es.js';
|
|
4
4
|
import ReactDOM__default from 'react-dom';
|
|
5
5
|
import { C as ComboboxContentSearch } from './ComboboxContentSearch-es.js';
|
|
6
6
|
import { C as ComboboxContentList } from './ComboboxContentList-es.js';
|
|
@@ -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');
|
|
8
7
|
var classnames = require('classnames');
|
|
9
8
|
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,14 +19,16 @@ 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-","
|
|
22
|
+
var styles = {"wrapper":"XRnU90M2-fs-","input":"Dq-yFHd1zK0-","menu":"F7CpurjKzBI-","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
|
|
24
26
|
function InternalChipDismissibleInput(props) {
|
|
25
27
|
const { activator = React.createElement(Button.Button, { icon: "add", type: "secondary", ariaLabel: "Add" }), attachTo, isLoadingMore = false, onLoadMore, options, } = props;
|
|
26
28
|
const { activeIndex, allOptions, hasAvailableOptions, inputRef, menuId, menuOpen, searchValue, showInput, generateDescendantId, handleBlur, handleFocus, handleSearchChange, handleCancelBlur, handleEnableBlur, handleSetActiveOnMouseOver, handleKeyDown, handleSelectOption, handleShowInput, handleDebouncedSearch, } = useScrollToActive.useInternalChipDismissibleInput(props);
|
|
27
|
-
const
|
|
29
|
+
const scrollableRef = useScrollToActive.useScrollToActive(activeIndex);
|
|
28
30
|
const { ref: visibleChildRef, isInView } = useScrollToActive.useInView();
|
|
29
|
-
const { styles:
|
|
31
|
+
const { styles: floatingStyles, update, setFloatingRef, } = useScrollToActive.useRepositionMenu(attachTo);
|
|
30
32
|
useSafeLayoutEffect.useSafeLayoutEffect_1(() => {
|
|
31
33
|
update === null || update === void 0 ? void 0 : update();
|
|
32
34
|
}, [allOptions, menuOpen, update, options]);
|
|
@@ -41,25 +43,28 @@ function InternalChipDismissibleInput(props) {
|
|
|
41
43
|
return React.cloneElement(activator, { onClick: handleShowInput });
|
|
42
44
|
}
|
|
43
45
|
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 })))));
|
|
44
58
|
return (React.createElement(React.Fragment, null,
|
|
45
59
|
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 }),
|
|
46
|
-
shouldShowMenu &&
|
|
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 }))))))));
|
|
60
|
+
shouldShowMenu && React.createElement(floatingUi_react.FloatingPortal, null, menuContent)));
|
|
56
61
|
}
|
|
57
62
|
|
|
58
63
|
function InternalChipDismissible(props) {
|
|
59
|
-
const { availableChipOptions, ref: wrapperRef, sortedVisibleChipOptions, handleChipAdd, handleChipClick, handleChipKeyDown, handleChipRemove, handleCustomAdd, handleWrapperKeyDown, } = useScrollToActive.useInternalChipDismissible(props);
|
|
64
|
+
const { availableChipOptions, ref: wrapperRef, wrapperElement, sortedVisibleChipOptions, handleChipAdd, handleChipClick, handleChipKeyDown, handleChipRemove, handleCustomAdd, handleWrapperKeyDown, } = useScrollToActive.useInternalChipDismissible(props);
|
|
60
65
|
return (React.createElement("div", { ref: wrapperRef, className: styles.wrapper, "data-testid": "dismissible-chips", onKeyDown: handleWrapperKeyDown, role: "listbox" },
|
|
61
66
|
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) }) })))),
|
|
62
|
-
React.createElement(InternalChipDismissibleInput, { activator: props.activator, attachTo:
|
|
67
|
+
React.createElement(InternalChipDismissibleInput, { activator: props.activator, attachTo: wrapperElement, isLoadingMore: props.isLoadingMore, options: availableChipOptions, onOptionSelect: handleChipAdd, onCustomOptionSelect: handleCustomAdd, onSearch: props.onSearch, onLoadMore: props.onLoadMore, onlyShowMenuOnSearch: props.onlyShowMenuOnSearch, autoSelectOnClickOutside: props.autoSelectOnClickOutside })));
|
|
63
68
|
}
|
|
64
69
|
|
|
65
70
|
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';
|
|
6
5
|
import classnames from 'classnames';
|
|
7
6
|
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,14 +17,16 @@ 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-","
|
|
20
|
+
var styles = {"wrapper":"XRnU90M2-fs-","input":"Dq-yFHd1zK0-","menu":"F7CpurjKzBI-","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
|
|
22
24
|
function InternalChipDismissibleInput(props) {
|
|
23
25
|
const { activator = React__default.createElement(Button, { icon: "add", type: "secondary", ariaLabel: "Add" }), attachTo, isLoadingMore = false, onLoadMore, options, } = props;
|
|
24
26
|
const { activeIndex, allOptions, hasAvailableOptions, inputRef, menuId, menuOpen, searchValue, showInput, generateDescendantId, handleBlur, handleFocus, handleSearchChange, handleCancelBlur, handleEnableBlur, handleSetActiveOnMouseOver, handleKeyDown, handleSelectOption, handleShowInput, handleDebouncedSearch, } = useInternalChipDismissibleInput(props);
|
|
25
|
-
const
|
|
27
|
+
const scrollableRef = useScrollToActive(activeIndex);
|
|
26
28
|
const { ref: visibleChildRef, isInView } = useInView();
|
|
27
|
-
const { styles:
|
|
29
|
+
const { styles: floatingStyles, update, setFloatingRef, } = useRepositionMenu(attachTo);
|
|
28
30
|
useSafeLayoutEffect_1(() => {
|
|
29
31
|
update === null || update === void 0 ? void 0 : update();
|
|
30
32
|
}, [allOptions, menuOpen, update, options]);
|
|
@@ -39,25 +41,28 @@ function InternalChipDismissibleInput(props) {
|
|
|
39
41
|
return React__default.cloneElement(activator, { onClick: handleShowInput });
|
|
40
42
|
}
|
|
41
43
|
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 })))));
|
|
42
56
|
return (React__default.createElement(React__default.Fragment, null,
|
|
43
57
|
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 }),
|
|
44
|
-
shouldShowMenu &&
|
|
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 }))))))));
|
|
58
|
+
shouldShowMenu && React__default.createElement(FloatingPortal, null, menuContent)));
|
|
54
59
|
}
|
|
55
60
|
|
|
56
61
|
function InternalChipDismissible(props) {
|
|
57
|
-
const { availableChipOptions, ref: wrapperRef, sortedVisibleChipOptions, handleChipAdd, handleChipClick, handleChipKeyDown, handleChipRemove, handleCustomAdd, handleWrapperKeyDown, } = useInternalChipDismissible(props);
|
|
62
|
+
const { availableChipOptions, ref: wrapperRef, wrapperElement, sortedVisibleChipOptions, handleChipAdd, handleChipClick, handleChipKeyDown, handleChipRemove, handleCustomAdd, handleWrapperKeyDown, } = useInternalChipDismissible(props);
|
|
58
63
|
return (React__default.createElement("div", { ref: wrapperRef, className: styles.wrapper, "data-testid": "dismissible-chips", onKeyDown: handleWrapperKeyDown, role: "listbox" },
|
|
59
64
|
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) }) })))),
|
|
60
|
-
React__default.createElement(InternalChipDismissibleInput, { activator: props.activator, attachTo:
|
|
65
|
+
React__default.createElement(InternalChipDismissibleInput, { activator: props.activator, attachTo: wrapperElement, isLoadingMore: props.isLoadingMore, options: availableChipOptions, onOptionSelect: handleChipAdd, onCustomOptionSelect: handleCustomAdd, onSearch: props.onSearch, onLoadMore: props.onLoadMore, onlyShowMenuOnSearch: props.onlyShowMenuOnSearch, autoSelectOnClickOutside: props.autoSelectOnClickOutside })));
|
|
61
66
|
}
|
|
62
67
|
|
|
63
68
|
export { InternalChipDismissible as I, InternalChip as a };
|
package/dist/Modal/index.mjs
CHANGED
|
@@ -9,7 +9,7 @@ import { H as Heading } from '../Heading-es.js';
|
|
|
9
9
|
import { B as Button } from '../Button-es.js';
|
|
10
10
|
import { B as ButtonDismiss } from '../ButtonDismiss-es.js';
|
|
11
11
|
import { n as noop } from '../noop-es.js';
|
|
12
|
-
import { a as useFloatingNodeId, b as useFloating, k as useClick, e as useDismiss, m as useRole, f as useInteractions, u as useFloatingParentNodeId,
|
|
12
|
+
import { a as useFloatingNodeId, b as useFloating, k as useClick, e as useDismiss, m as useRole, f as useInteractions, u as useFloatingParentNodeId, g as FloatingTree, h as FloatingNode, F as FloatingPortal, n as FloatingOverlay, p as FloatingFocusManager } from '../floating-ui.react-es.js';
|
|
13
13
|
import { b as identity } from '../identity-es.js';
|
|
14
14
|
import { A as AtlantisPortalContent } from '../AtlantisPortalContent-es.js';
|
|
15
15
|
import '../Typography-es.js';
|
|
@@ -6029,4 +6029,4 @@ function useRole(context, props) {
|
|
|
6029
6029
|
} : {}, [enabled, reference, floating, item]);
|
|
6030
6030
|
}
|
|
6031
6031
|
|
|
6032
|
-
export {
|
|
6032
|
+
export { FloatingPortal as F, useFloatingNodeId as a, useFloating as b, autoPlacement as c, autoUpdate as d, useDismiss as e, useInteractions as f, FloatingTree as g, FloatingNode as h, flip as i, arrow as j, useClick as k, limitShift as l, useRole as m, FloatingOverlay as n, offset as o, FloatingFocusManager as p, size as q, shift as s, useFloatingParentNodeId as u };
|
package/dist/index.cjs
CHANGED
|
@@ -128,7 +128,6 @@ require('./_getTag-cjs.js');
|
|
|
128
128
|
require('./isSymbol-cjs.js');
|
|
129
129
|
require('./_baseEach-cjs.js');
|
|
130
130
|
require('./debounce-cjs.js');
|
|
131
|
-
require('react-popper');
|
|
132
131
|
require('./ComboboxContent-cjs.js');
|
|
133
132
|
require('./ComboboxContentSearch-cjs.js');
|
|
134
133
|
require('./ComboboxContentList-cjs.js');
|
|
@@ -178,6 +177,7 @@ require('./DataListAction-cjs.js');
|
|
|
178
177
|
require('./DataListLayoutActions-cjs.js');
|
|
179
178
|
require('./DataListStatusBar-cjs.js');
|
|
180
179
|
require('./throttle-cjs.js');
|
|
180
|
+
require('react-popper');
|
|
181
181
|
require('./omit-cjs.js');
|
|
182
182
|
require('./useFormFieldFocus-cjs.js');
|
|
183
183
|
require('filesize');
|
package/dist/index.mjs
CHANGED
|
@@ -126,7 +126,6 @@ import './_getTag-es.js';
|
|
|
126
126
|
import './isSymbol-es.js';
|
|
127
127
|
import './_baseEach-es.js';
|
|
128
128
|
import './debounce-es.js';
|
|
129
|
-
import 'react-popper';
|
|
130
129
|
import './ComboboxContent-es.js';
|
|
131
130
|
import './ComboboxContentSearch-es.js';
|
|
132
131
|
import './ComboboxContentList-es.js';
|
|
@@ -176,6 +175,7 @@ import './DataListAction-es.js';
|
|
|
176
175
|
import './DataListLayoutActions-es.js';
|
|
177
176
|
import './DataListStatusBar-es.js';
|
|
178
177
|
import './throttle-es.js';
|
|
178
|
+
import 'react-popper';
|
|
179
179
|
import './omit-es.js';
|
|
180
180
|
import './useFormFieldFocus-es.js';
|
|
181
181
|
import 'filesize';
|
package/dist/styles.css
CHANGED
|
@@ -3548,12 +3548,9 @@ 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;
|
|
3555
3551
|
box-shadow: 0px 1px 4px 0px rgba(0, 0, 0, 0.1), 0px 4px 12px 0px rgba(0, 0, 0, 0.05);
|
|
3556
3552
|
box-shadow: var(--shadow-base);
|
|
3553
|
+
box-sizing: border-box;
|
|
3557
3554
|
padding: 8px 0;
|
|
3558
3555
|
padding: var(--space-small) 0;
|
|
3559
3556
|
border-radius: 8px;
|
|
@@ -11,7 +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
|
|
14
|
+
var floatingUi_react = require('./floating-ui.react-cjs.js');
|
|
15
15
|
|
|
16
16
|
var baseEach = _baseEach._baseEach,
|
|
17
17
|
isArrayLike = isTypedArray.isArrayLike_1;
|
|
@@ -310,7 +310,7 @@ function findFocusableElement(element, direction) {
|
|
|
310
310
|
return findFocusableElement(nextElement, direction);
|
|
311
311
|
}
|
|
312
312
|
function useInternalChipDismissible({ children, selected, onChange, onClick, onCustomAdd, }) {
|
|
313
|
-
const
|
|
313
|
+
const [wrapperElement, setWrapperElement] = React.useState(null);
|
|
314
314
|
const chipOptions = children.map(chip => chip.props);
|
|
315
315
|
const visibleChipOptions = chipOptions.filter(chip => selected.includes(chip.value));
|
|
316
316
|
const sortedVisibleChipOptions = sortBy$1(visibleChipOptions, chip => selected.indexOf(chip.value));
|
|
@@ -367,7 +367,7 @@ function useInternalChipDismissible({ children, selected, onChange, onClick, onC
|
|
|
367
367
|
};
|
|
368
368
|
},
|
|
369
369
|
};
|
|
370
|
-
return Object.assign(Object.assign({}, actions), { ref,
|
|
370
|
+
return Object.assign(Object.assign({}, actions), { ref: setWrapperElement, wrapperElement,
|
|
371
371
|
sortedVisibleChipOptions,
|
|
372
372
|
availableChipOptions });
|
|
373
373
|
}
|
|
@@ -573,17 +573,37 @@ function useInView() {
|
|
|
573
573
|
return { ref, isInView };
|
|
574
574
|
}
|
|
575
575
|
|
|
576
|
+
const ROUNDED_BORDER_ARROW_EDGE_OFFSET = 8;
|
|
577
|
+
const PREFERRED_MAX_HEIGHT = 320;
|
|
576
578
|
function useRepositionMenu(attachTo) {
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
{
|
|
582
|
-
{
|
|
579
|
+
const { refs, floatingStyles, update } = floatingUi_react.useFloating({
|
|
580
|
+
placement: "bottom",
|
|
581
|
+
middleware: [
|
|
582
|
+
floatingUi_react.offset(ROUNDED_BORDER_ARROW_EDGE_OFFSET),
|
|
583
|
+
floatingUi_react.flip({ fallbackPlacements: ["top"] }),
|
|
584
|
+
floatingUi_react.size({
|
|
585
|
+
apply({ availableHeight, elements }) {
|
|
586
|
+
const maxHeight = Math.min(PREFERRED_MAX_HEIGHT, availableHeight);
|
|
587
|
+
Object.assign(elements.floating.style, {
|
|
588
|
+
maxHeight: `${maxHeight}px`,
|
|
589
|
+
});
|
|
590
|
+
},
|
|
591
|
+
}),
|
|
583
592
|
],
|
|
593
|
+
elements: {
|
|
594
|
+
reference: attachTo,
|
|
595
|
+
},
|
|
596
|
+
whileElementsMounted: floatingUi_react.autoUpdate,
|
|
584
597
|
});
|
|
585
|
-
const targetWidth =
|
|
586
|
-
return
|
|
598
|
+
const targetWidth = attachTo === null || attachTo === void 0 ? void 0 : attachTo.clientWidth;
|
|
599
|
+
return {
|
|
600
|
+
setFloatingRef: refs.setFloating,
|
|
601
|
+
targetWidth,
|
|
602
|
+
styles: {
|
|
603
|
+
float: floatingStyles,
|
|
604
|
+
},
|
|
605
|
+
update,
|
|
606
|
+
};
|
|
587
607
|
}
|
|
588
608
|
|
|
589
609
|
function useScrollToActive(index) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React__default, {
|
|
1
|
+
import React__default, { useState, useId, useEffect, useRef } 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,7 +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 {
|
|
12
|
+
import { b as useFloating, o as offset, i as flip, q as size, d as autoUpdate } from './floating-ui.react-es.js';
|
|
13
13
|
|
|
14
14
|
var baseEach = _baseEach,
|
|
15
15
|
isArrayLike = isArrayLike_1;
|
|
@@ -308,7 +308,7 @@ function findFocusableElement(element, direction) {
|
|
|
308
308
|
return findFocusableElement(nextElement, direction);
|
|
309
309
|
}
|
|
310
310
|
function useInternalChipDismissible({ children, selected, onChange, onClick, onCustomAdd, }) {
|
|
311
|
-
const
|
|
311
|
+
const [wrapperElement, setWrapperElement] = useState(null);
|
|
312
312
|
const chipOptions = children.map(chip => chip.props);
|
|
313
313
|
const visibleChipOptions = chipOptions.filter(chip => selected.includes(chip.value));
|
|
314
314
|
const sortedVisibleChipOptions = sortBy$1(visibleChipOptions, chip => selected.indexOf(chip.value));
|
|
@@ -365,7 +365,7 @@ function useInternalChipDismissible({ children, selected, onChange, onClick, onC
|
|
|
365
365
|
};
|
|
366
366
|
},
|
|
367
367
|
};
|
|
368
|
-
return Object.assign(Object.assign({}, actions), { ref,
|
|
368
|
+
return Object.assign(Object.assign({}, actions), { ref: setWrapperElement, wrapperElement,
|
|
369
369
|
sortedVisibleChipOptions,
|
|
370
370
|
availableChipOptions });
|
|
371
371
|
}
|
|
@@ -571,17 +571,37 @@ function useInView() {
|
|
|
571
571
|
return { ref, isInView };
|
|
572
572
|
}
|
|
573
573
|
|
|
574
|
+
const ROUNDED_BORDER_ARROW_EDGE_OFFSET = 8;
|
|
575
|
+
const PREFERRED_MAX_HEIGHT = 320;
|
|
574
576
|
function useRepositionMenu(attachTo) {
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
{
|
|
580
|
-
{
|
|
577
|
+
const { refs, floatingStyles, update } = useFloating({
|
|
578
|
+
placement: "bottom",
|
|
579
|
+
middleware: [
|
|
580
|
+
offset(ROUNDED_BORDER_ARROW_EDGE_OFFSET),
|
|
581
|
+
flip({ fallbackPlacements: ["top"] }),
|
|
582
|
+
size({
|
|
583
|
+
apply({ availableHeight, elements }) {
|
|
584
|
+
const maxHeight = Math.min(PREFERRED_MAX_HEIGHT, availableHeight);
|
|
585
|
+
Object.assign(elements.floating.style, {
|
|
586
|
+
maxHeight: `${maxHeight}px`,
|
|
587
|
+
});
|
|
588
|
+
},
|
|
589
|
+
}),
|
|
581
590
|
],
|
|
591
|
+
elements: {
|
|
592
|
+
reference: attachTo,
|
|
593
|
+
},
|
|
594
|
+
whileElementsMounted: autoUpdate,
|
|
582
595
|
});
|
|
583
|
-
const targetWidth =
|
|
584
|
-
return
|
|
596
|
+
const targetWidth = attachTo === null || attachTo === void 0 ? void 0 : attachTo.clientWidth;
|
|
597
|
+
return {
|
|
598
|
+
setFloatingRef: refs.setFloating,
|
|
599
|
+
targetWidth,
|
|
600
|
+
styles: {
|
|
601
|
+
float: floatingStyles,
|
|
602
|
+
},
|
|
603
|
+
update,
|
|
604
|
+
};
|
|
585
605
|
}
|
|
586
606
|
|
|
587
607
|
function useScrollToActive(index) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jobber/components",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.76.0",
|
|
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": "662d5d1d30f55231de5d9a0754d21f1829cd594e"
|
|
546
546
|
}
|