@jobber/components 4.39.0 → 4.40.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/Chip-4916a642.js +514 -0
- package/dist/Chips/index.js +19 -505
- package/dist/DataList/DataList.types.d.ts +1 -1
- package/dist/DataList/components/DataListFilters/components/DataListSort/DataListSort.d.ts +2 -0
- package/dist/DataList/components/DataListFilters/components/DataListSort/index.d.ts +1 -0
- package/dist/DataList/components/DataListLayoutInternal/DataListHeader.d.ts +1 -1
- package/dist/DataList/hooks/useMediaQuery.d.ts +1 -0
- package/dist/DataList/hooks/useResponsiveSizing.d.ts +2 -0
- package/dist/DataList/hooks/useShowHeader.d.ts +1 -0
- package/dist/DataList/index.js +115 -18
- package/dist/Popover/index.js +7 -48
- package/dist/Popover-bbfc6aa1.js +53 -0
- package/package.json +2 -2
package/dist/DataList/index.js
CHANGED
|
@@ -29,10 +29,18 @@ var useOnKeyDown = require('@jobber/hooks/useOnKeyDown');
|
|
|
29
29
|
var AnimatedSwitcher = require('../AnimatedSwitcher-d1e1ddcf.js');
|
|
30
30
|
var Icon = require('../Icon-405a216c.js');
|
|
31
31
|
var useInView = require('@jobber/hooks/useInView');
|
|
32
|
+
var Popover = require('../Popover-bbfc6aa1.js');
|
|
33
|
+
var Content = require('../Content-2ca1ffe1.js');
|
|
34
|
+
var Chip = require('../Chip-4916a642.js');
|
|
35
|
+
require('@jobber/hooks/useAssert');
|
|
36
|
+
require('../Avatar-1aa30ee1.js');
|
|
37
|
+
require('color');
|
|
32
38
|
var debounce = require('lodash/debounce');
|
|
33
39
|
var InputText = require('../InputText-d1a52550.js');
|
|
34
40
|
var Spinner = require('../Spinner-9d8fc7ff.js');
|
|
35
|
-
require('../
|
|
41
|
+
require('../ButtonDismiss-82680c7d.js');
|
|
42
|
+
require('lodash/sortBy');
|
|
43
|
+
require('@jobber/hooks/useLiveAnnounce');
|
|
36
44
|
require('../FormField-d6138b7f.js');
|
|
37
45
|
require('../InputValidation-b5a3d92c.js');
|
|
38
46
|
|
|
@@ -187,14 +195,14 @@ function DataListHeaderTile({ headers, headerKey, }) {
|
|
|
187
195
|
[styles$9.sortable]: isSortable,
|
|
188
196
|
}), onClick: handleOnClick },
|
|
189
197
|
React__default["default"].createElement(Text.Text, { maxLines: "single" }, headers[headerKey]),
|
|
190
|
-
(sortingState === null || sortingState === void 0 ? void 0 : sortingState.key) === headerKey && (React__default["default"].createElement(DataListSortingArrows, { order: sortingState.
|
|
198
|
+
(sortingState === null || sortingState === void 0 ? void 0 : sortingState.key) === headerKey && (React__default["default"].createElement(DataListSortingArrows, { order: sortingState.order }))));
|
|
191
199
|
function toggleSorting(sortingKey) {
|
|
192
|
-
if ((sortingState === null || sortingState === void 0 ? void 0 : sortingState.
|
|
200
|
+
if ((sortingState === null || sortingState === void 0 ? void 0 : sortingState.order) === "desc") {
|
|
193
201
|
sorting === null || sorting === void 0 ? void 0 : sorting.onSort(undefined);
|
|
194
202
|
return;
|
|
195
203
|
}
|
|
196
204
|
sorting === null || sorting === void 0 ? void 0 : sorting.onSort({
|
|
197
|
-
|
|
205
|
+
order: (sortingState === null || sortingState === void 0 ? void 0 : sortingState.order) === "asc" ? "desc" : "asc",
|
|
198
206
|
key: sortingKey,
|
|
199
207
|
});
|
|
200
208
|
}
|
|
@@ -479,14 +487,45 @@ function DataListHeaderCheckbox({ children }) {
|
|
|
479
487
|
}
|
|
480
488
|
}
|
|
481
489
|
|
|
482
|
-
function
|
|
483
|
-
const
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
+
function useMediaQuery(CSSMediaQuery) {
|
|
491
|
+
const [matches, setMatches] = React.useState(window.matchMedia(CSSMediaQuery).matches);
|
|
492
|
+
React.useEffect(() => {
|
|
493
|
+
const media = window.matchMedia(CSSMediaQuery);
|
|
494
|
+
if (media.matches !== matches) {
|
|
495
|
+
setMatches(media.matches);
|
|
496
|
+
}
|
|
497
|
+
const listener = () => setMatches(media.matches);
|
|
498
|
+
media.addEventListener("change", listener);
|
|
499
|
+
return () => media.removeEventListener("change", listener);
|
|
500
|
+
}, [CSSMediaQuery]);
|
|
501
|
+
return matches;
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
function useResponsiveSizing() {
|
|
505
|
+
const xs = useMediaQuery(`(width > ${BREAKPOINT_SIZES.xs}px)`);
|
|
506
|
+
const sm = useMediaQuery(`(width >= ${BREAKPOINT_SIZES.sm}px)`);
|
|
507
|
+
const md = useMediaQuery(`(width >= ${BREAKPOINT_SIZES.md}px)`);
|
|
508
|
+
const lg = useMediaQuery(`(width >= ${BREAKPOINT_SIZES.lg}px)`);
|
|
509
|
+
const xl = useMediaQuery(`(width >= ${BREAKPOINT_SIZES.xl}px)`);
|
|
510
|
+
return { xs, sm, md, lg, xl };
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
function useShowHeader() {
|
|
514
|
+
const { headerVisibility } = useDataListContext();
|
|
515
|
+
if (headerVisibility === undefined)
|
|
516
|
+
return true;
|
|
517
|
+
const sizes = useResponsiveSizing();
|
|
518
|
+
const sizeKeys = Object.keys(sizes);
|
|
519
|
+
const showHeader = sizeKeys.reduce((previous, breakpoint) => {
|
|
520
|
+
const isHeaderVisible = headerVisibility[breakpoint] || false;
|
|
521
|
+
const isBreakpointTriggered = sizes[breakpoint];
|
|
522
|
+
return previous || (isBreakpointTriggered && isHeaderVisible);
|
|
523
|
+
}, false);
|
|
524
|
+
return showHeader;
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
function DataListHeader({ layouts, mediaMatches, headerData, }) {
|
|
528
|
+
const showHeader = useShowHeader();
|
|
490
529
|
if (!showHeader || !headerData)
|
|
491
530
|
return null;
|
|
492
531
|
return (React__default["default"].createElement(DataListLayoutInternal, { layouts: layouts, mediaMatches: mediaMatches, renderLayout: layout => (React__default["default"].createElement("div", { className: classnames__default["default"](styles$d.headerTitles) },
|
|
@@ -528,6 +567,59 @@ styleInject_es.styleInject(css_248z$4);
|
|
|
528
567
|
|
|
529
568
|
const CONTAINER_TEST_ID = "ATL-DataListFilters-Container";
|
|
530
569
|
|
|
570
|
+
function DataListSort() {
|
|
571
|
+
const { sorting, headers } = useDataListContext();
|
|
572
|
+
const divRef = React.useRef(null);
|
|
573
|
+
const [showPopover, setShowPopover] = React.useState(false);
|
|
574
|
+
if (!sorting)
|
|
575
|
+
return null;
|
|
576
|
+
const { sortable, state, onSort } = sorting;
|
|
577
|
+
const sortByOptions = getSortByOptions();
|
|
578
|
+
const canChangeOrder = !(state === null || state === void 0 ? void 0 : state.key);
|
|
579
|
+
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
580
|
+
React__default["default"].createElement("span", { ref: divRef },
|
|
581
|
+
React__default["default"].createElement(Button.Button, Object.assign({}, (!state && { icon: "add", iconOnRight: true }), { label: getButtonLabel(), variation: "subtle", onClick: () => setShowPopover(!showPopover) }))),
|
|
582
|
+
React__default["default"].createElement(Popover.Popover, { attachTo: divRef, open: showPopover, onRequestClose: () => setShowPopover(false) },
|
|
583
|
+
React__default["default"].createElement(Content.Content, null,
|
|
584
|
+
React__default["default"].createElement(Heading.Heading, { level: 5 }, "Sort by"),
|
|
585
|
+
React__default["default"].createElement(Chip.Chips, { selected: (state === null || state === void 0 ? void 0 : state.key) || "none", onChange: handleKeyChange }, sortByOptions.map(({ label, value }) => (React__default["default"].createElement(Chip.Chip, { key: label, label: label, value: value })))),
|
|
586
|
+
React__default["default"].createElement(Heading.Heading, { level: 5 }, "Ordered by"),
|
|
587
|
+
React__default["default"].createElement(Chip.Chips, { selected: state === null || state === void 0 ? void 0 : state.order, onChange: handleSortingChange },
|
|
588
|
+
React__default["default"].createElement(Chip.Chip, { label: "Ascending", value: "asc", disabled: canChangeOrder }),
|
|
589
|
+
React__default["default"].createElement(Chip.Chip, { label: "Descending", value: "desc", disabled: canChangeOrder }))))));
|
|
590
|
+
function getSortByOptions() {
|
|
591
|
+
const options = sortable.reduce((acc, sort) => {
|
|
592
|
+
const label = headers[sort];
|
|
593
|
+
if (!label)
|
|
594
|
+
return acc;
|
|
595
|
+
acc.push({ label, value: sort.toString() });
|
|
596
|
+
return acc;
|
|
597
|
+
}, []);
|
|
598
|
+
// Inject a none option as the first option
|
|
599
|
+
options.unshift({ label: "None", value: "none" });
|
|
600
|
+
return options;
|
|
601
|
+
}
|
|
602
|
+
function getButtonLabel() {
|
|
603
|
+
const label = state && headers[state.key];
|
|
604
|
+
if (!label)
|
|
605
|
+
return "Sort by";
|
|
606
|
+
return `Sort by: ${label}, ${state.order}`;
|
|
607
|
+
}
|
|
608
|
+
function handleKeyChange(value) {
|
|
609
|
+
if (value && value !== "none") {
|
|
610
|
+
onSort({ key: value, order: (state === null || state === void 0 ? void 0 : state.order) || "asc" });
|
|
611
|
+
return;
|
|
612
|
+
}
|
|
613
|
+
onSort(undefined);
|
|
614
|
+
}
|
|
615
|
+
function handleSortingChange(value) {
|
|
616
|
+
if ((state === null || state === void 0 ? void 0 : state.key) && value) {
|
|
617
|
+
onSort({ key: state.key, order: value });
|
|
618
|
+
return;
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
|
|
531
623
|
// This component is meant to capture the props of the DataList.Filters
|
|
532
624
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
533
625
|
function DataListFilters(_) {
|
|
@@ -538,19 +630,22 @@ function DataListFilters(_) {
|
|
|
538
630
|
*/
|
|
539
631
|
function InternalDataListFilters() {
|
|
540
632
|
const { children: parentChildren } = useDataListContext();
|
|
633
|
+
const showHeader = useShowHeader();
|
|
634
|
+
const showSortButton = !showHeader;
|
|
541
635
|
const component = getCompoundComponent(parentChildren, DataListFilters);
|
|
542
636
|
const [leftRef, isLeftVisible] = useInView.useInView();
|
|
543
637
|
const [rightRef, isRightVisible] = useInView.useInView();
|
|
544
|
-
if (!component)
|
|
638
|
+
if (!showSortButton && !component)
|
|
545
639
|
return null;
|
|
546
|
-
const
|
|
640
|
+
const children = component === null || component === void 0 ? void 0 : component.props.children;
|
|
547
641
|
return (React__default["default"].createElement("div", { "data-testid": CONTAINER_TEST_ID, className: classnames__default["default"](styles$4.filters, {
|
|
548
642
|
[styles$4.overflowLeft]: !isLeftVisible,
|
|
549
643
|
[styles$4.overflowRight]: !isRightVisible,
|
|
550
644
|
}) },
|
|
551
645
|
React__default["default"].createElement("div", { className: styles$4.filterActions },
|
|
552
646
|
React__default["default"].createElement("span", { ref: leftRef, className: styles$4.overflowTrigger }),
|
|
553
|
-
children,
|
|
647
|
+
children && children,
|
|
648
|
+
showSortButton && React__default["default"].createElement(DataListSort, null),
|
|
554
649
|
React__default["default"].createElement("span", { ref: rightRef, className: styles$4.overflowTrigger }))));
|
|
555
650
|
}
|
|
556
651
|
|
|
@@ -574,7 +669,7 @@ function DataListStickyHeader({ children }) {
|
|
|
574
669
|
return (React__default["default"].createElement("div", { ref: ref, className: classnames__default["default"](styles$3.header, { [styles$3.stuck]: isStuck }) }, children));
|
|
575
670
|
}
|
|
576
671
|
|
|
577
|
-
var css_248z$2 = ".SaPMOnvw-3c- {\n --transition-properties: var(--timing-base) ease-in-out;\n --button-offset: calc(var(--space-largest) - var(--space-smallest));\n\n position: absolute;\n /* Inputs are off by 1 when put beside a button */\n top: calc((16px / 2)
|
|
672
|
+
var css_248z$2 = ".SaPMOnvw-3c- {\n --transition-properties: var(--timing-base) ease-in-out;\n --button-offset: calc(var(--space-largest) - var(--space-smallest));\n\n position: absolute;\n /* Inputs are off by 1 when put beside a button */\n top: calc((16px / 2) + 1px);\n top: calc(calc(16px / 2) + 1px);\n top: calc(var(--space-small) + 1px);\n right: calc((16px * 3) - (16px / 8));\n right: calc(calc(16px * 3) - calc(16px / 8));\n right: var(--button-offset);\n visibility: hidden;\n width: 0;\n opacity: 0;\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 opacity: 1;\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 opacity: 1;\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";
|
|
578
673
|
var styles$2 = {"searchInput":"SaPMOnvw-3c-","searchInputVisible":"_3S1-91v2SYI-","searchButton":"_9GlBktsUALw-","withNoFilters":"_3Pjrt42x454-"};
|
|
579
674
|
styleInject_es.styleInject(css_248z$2);
|
|
580
675
|
|
|
@@ -590,12 +685,14 @@ function DataListSearch(_) {
|
|
|
590
685
|
function InternalDataListSearch() {
|
|
591
686
|
const inputRef = React.useRef(null);
|
|
592
687
|
const [visible, setVisible] = React.useState(false);
|
|
593
|
-
const { searchComponent, filterComponent, title } = useDataListContext();
|
|
688
|
+
const { searchComponent, filterComponent, sorting, title } = useDataListContext();
|
|
594
689
|
const debouncedSearch = React.useCallback(debounce__default["default"]((value) => { var _a; return (_a = searchComponent === null || searchComponent === void 0 ? void 0 : searchComponent.props) === null || _a === void 0 ? void 0 : _a.onSearch(value); }, SEARCH_DEBOUNCE_DELAY), [searchComponent === null || searchComponent === void 0 ? void 0 : searchComponent.props.onSearch]);
|
|
595
690
|
if (!searchComponent)
|
|
596
691
|
return null;
|
|
597
692
|
const { placeholder } = searchComponent.props;
|
|
598
|
-
return (React__default["default"].createElement("div", { className: classnames__default["default"]({
|
|
693
|
+
return (React__default["default"].createElement("div", { className: classnames__default["default"]({
|
|
694
|
+
[styles$2.withNoFilters]: !filterComponent && !sorting,
|
|
695
|
+
}) },
|
|
599
696
|
React__default["default"].createElement("div", { "data-testid": DATA_LIST_SEARCH_TEST_ID, className: classnames__default["default"](styles$2.searchInput, {
|
|
600
697
|
[styles$2.searchInputVisible]: visible,
|
|
601
698
|
}) },
|
package/dist/Popover/index.js
CHANGED
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
var Popover = require('../Popover-bbfc6aa1.js');
|
|
6
|
+
require('react');
|
|
7
|
+
require('react-popper');
|
|
8
|
+
require('@jobber/hooks/useRefocusOnActivator');
|
|
9
|
+
require('../style-inject.es-9d2f5f4e.js');
|
|
10
|
+
require('../ButtonDismiss-82680c7d.js');
|
|
10
11
|
require('../Button-fd8413b2.js');
|
|
11
12
|
require('classnames');
|
|
12
13
|
require('react-router-dom');
|
|
@@ -14,48 +15,6 @@ require('../Icon-405a216c.js');
|
|
|
14
15
|
require('@jobber/design');
|
|
15
16
|
require('../Typography-fd6f932a.js');
|
|
16
17
|
|
|
17
|
-
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
18
18
|
|
|
19
|
-
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
20
19
|
|
|
21
|
-
|
|
22
|
-
var classes = {"header":"oSlK4rLUvzE-","dismissButton":"XVPpPb-7e30-","popover":"TDuYbqXaLW0-","arrow":"LJCpn0zf1e8-"};
|
|
23
|
-
styleInject_es.styleInject(css_248z);
|
|
24
|
-
|
|
25
|
-
function Popover({ onRequestClose, children, attachTo, open, preferredPlacement = "auto", }) {
|
|
26
|
-
const [popperElement, setPopperElement] = React.useState();
|
|
27
|
-
const [arrowElement, setArrowElement] = React.useState();
|
|
28
|
-
const { styles: popperStyles, attributes } = reactPopper.usePopper(attachTo instanceof Element ? attachTo : attachTo.current, popperElement, {
|
|
29
|
-
modifiers: buildModifiers(arrowElement),
|
|
30
|
-
placement: preferredPlacement,
|
|
31
|
-
});
|
|
32
|
-
useRefocusOnActivator.useRefocusOnActivator(open);
|
|
33
|
-
return (React__default["default"].createElement(React__default["default"].Fragment, null, open && (React__default["default"].createElement("div", Object.assign({ role: "dialog", ref: setPopperElement, style: popperStyles.popper, className: classes.popover }, attributes.popper),
|
|
34
|
-
React__default["default"].createElement("div", { className: classes.dismissButton },
|
|
35
|
-
React__default["default"].createElement(ButtonDismiss.ButtonDismiss, { onClick: onRequestClose, ariaLabel: "Close dialog" })),
|
|
36
|
-
children,
|
|
37
|
-
React__default["default"].createElement("div", { ref: setArrowElement, className: classes.arrow, style: popperStyles.arrow })))));
|
|
38
|
-
}
|
|
39
|
-
function buildModifiers(arrowElement) {
|
|
40
|
-
const modifiers = [
|
|
41
|
-
{
|
|
42
|
-
name: "arrow",
|
|
43
|
-
options: { element: arrowElement, padding: 10 },
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
name: "offset",
|
|
47
|
-
options: {
|
|
48
|
-
offset: [0, 10],
|
|
49
|
-
},
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
name: "flip",
|
|
53
|
-
options: {
|
|
54
|
-
fallbackPlacements: ["auto"],
|
|
55
|
-
},
|
|
56
|
-
},
|
|
57
|
-
];
|
|
58
|
-
return modifiers;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
exports.Popover = Popover;
|
|
20
|
+
exports.Popover = Popover.Popover;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var reactPopper = require('react-popper');
|
|
5
|
+
var useRefocusOnActivator = require('@jobber/hooks/useRefocusOnActivator');
|
|
6
|
+
var styleInject_es = require('./style-inject.es-9d2f5f4e.js');
|
|
7
|
+
var ButtonDismiss = require('./ButtonDismiss-82680c7d.js');
|
|
8
|
+
|
|
9
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
10
|
+
|
|
11
|
+
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
12
|
+
|
|
13
|
+
var css_248z = ":root {\n --card--base-padding: var(--space-base);\n --popover--padding: var(--space-base);\n --popover--width: calc(var(--base-unit) * 21.875);\n --dismiss--button-padding: calc(var(--base-unit) / 4);\n}\n\n.oSlK4rLUvzE- {\n display: -ms-flexbox;\n display: flex;\n position: \"relative\";\n padding: calc(16px * 1);\n padding: var(--popover--padding);\n -ms-flex-pack: justify;\n justify-content: space-between;\n -ms-flex-align: center;\n align-items: center;\n}\n\n.XVPpPb-7e30- {\n float: right;\n padding: calc(16px / 4);\n padding: var(--dismiss--button-padding);\n text-align: right;\n}\n\n.TDuYbqXaLW0- {\n z-index: 1002;\n z-index: var(--elevation-tooltip);\n width: -webkit-max-content;\n width: max-content;\n max-width: calc(16px * 21.875);\n max-width: var(--popover--width);\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 border: calc(16px / 16) solid rgb(225, 225, 225);\n border: var(--border-base) solid var(--color-border);\n border-radius: calc(16px / 8);\n border-radius: var(--radius-base);\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 line-height: normal;\n background: rgba(255, 255, 255, 1);\n background: var(--color-surface);\n}\n\n.TDuYbqXaLW0- > * {\n --public-content--padding: var(--card--base-padding);\n}\n\n.LJCpn0zf1e8- {\n visibility: hidden;\n}\n\n.LJCpn0zf1e8-,\n.LJCpn0zf1e8-::before {\n position: absolute;\n width: 16px;\n width: var(--base-unit);\n height: 16px;\n height: var(--base-unit);\n background: inherit;\n}\n\n.LJCpn0zf1e8-::before {\n content: \"\";\n visibility: visible;\n border: calc(16px / 16) solid rgb(225, 225, 225);\n border: var(--border-base) solid var(--color-border);\n -webkit-transform: rotate(45deg);\n transform: rotate(45deg);\n -webkit-transform-origin: center;\n transform-origin: center;\n -webkit-clip-path: polygon(-4px -4px, 15.3px 0, 0 15.3px);\n clip-path: polygon(-4px -4px, 15.3px 0, 0 15.3px);\n}\n\n.TDuYbqXaLW0-[data-popper-placement^=\"top\"] > .LJCpn0zf1e8- {\n bottom: -5px;\n}\n\n.TDuYbqXaLW0-[data-popper-placement^=\"top\"] > .LJCpn0zf1e8-::before {\n -webkit-transform: rotate(-135deg);\n transform: rotate(-135deg);\n}\n\n.TDuYbqXaLW0-[data-popper-placement^=\"bottom\"] > .LJCpn0zf1e8- {\n top: -7px;\n}\n\n.TDuYbqXaLW0-[data-popper-placement^=\"left\"] > .LJCpn0zf1e8- {\n right: -5px;\n}\n\n.TDuYbqXaLW0-[data-popper-placement^=\"left\"] > .LJCpn0zf1e8-::before {\n -webkit-transform: rotate(135deg);\n transform: rotate(135deg);\n}\n\n.TDuYbqXaLW0-[data-popper-placement^=\"right\"] > .LJCpn0zf1e8- {\n left: -7px;\n}\n\n.TDuYbqXaLW0-[data-popper-placement^=\"right\"] > .LJCpn0zf1e8-::before {\n -webkit-transform: rotate(-45deg);\n transform: rotate(-45deg);\n}\n";
|
|
14
|
+
var classes = {"header":"oSlK4rLUvzE-","dismissButton":"XVPpPb-7e30-","popover":"TDuYbqXaLW0-","arrow":"LJCpn0zf1e8-"};
|
|
15
|
+
styleInject_es.styleInject(css_248z);
|
|
16
|
+
|
|
17
|
+
function Popover({ onRequestClose, children, attachTo, open, preferredPlacement = "auto", }) {
|
|
18
|
+
const [popperElement, setPopperElement] = React.useState();
|
|
19
|
+
const [arrowElement, setArrowElement] = React.useState();
|
|
20
|
+
const { styles: popperStyles, attributes } = reactPopper.usePopper(attachTo instanceof Element ? attachTo : attachTo.current, popperElement, {
|
|
21
|
+
modifiers: buildModifiers(arrowElement),
|
|
22
|
+
placement: preferredPlacement,
|
|
23
|
+
});
|
|
24
|
+
useRefocusOnActivator.useRefocusOnActivator(open);
|
|
25
|
+
return (React__default["default"].createElement(React__default["default"].Fragment, null, open && (React__default["default"].createElement("div", Object.assign({ role: "dialog", ref: setPopperElement, style: popperStyles.popper, className: classes.popover }, attributes.popper),
|
|
26
|
+
React__default["default"].createElement("div", { className: classes.dismissButton },
|
|
27
|
+
React__default["default"].createElement(ButtonDismiss.ButtonDismiss, { onClick: onRequestClose, ariaLabel: "Close dialog" })),
|
|
28
|
+
children,
|
|
29
|
+
React__default["default"].createElement("div", { ref: setArrowElement, className: classes.arrow, style: popperStyles.arrow })))));
|
|
30
|
+
}
|
|
31
|
+
function buildModifiers(arrowElement) {
|
|
32
|
+
const modifiers = [
|
|
33
|
+
{
|
|
34
|
+
name: "arrow",
|
|
35
|
+
options: { element: arrowElement, padding: 10 },
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: "offset",
|
|
39
|
+
options: {
|
|
40
|
+
offset: [0, 10],
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: "flip",
|
|
45
|
+
options: {
|
|
46
|
+
fallbackPlacements: ["auto"],
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
];
|
|
50
|
+
return modifiers;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
exports.Popover = Popover;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jobber/components",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.40.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -84,5 +84,5 @@
|
|
|
84
84
|
"> 1%",
|
|
85
85
|
"IE 10"
|
|
86
86
|
],
|
|
87
|
-
"gitHead": "
|
|
87
|
+
"gitHead": "621f279e8f27d74e69fd76f63b763e38196cd000"
|
|
88
88
|
}
|