@jobber/components 4.45.0 → 4.45.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/dist/DataList/DataList.types.d.ts +12 -4
- package/dist/DataList/components/DataListAction/DataListAction.d.ts +2 -3
- package/dist/DataList/components/DataListActions/DataListActions.d.ts +3 -0
- package/dist/DataList/components/DataListActions/index.d.ts +1 -0
- package/dist/DataList/components/DataListItemActions/DataListItemActions.d.ts +1 -5
- package/dist/DataList/components/DataListItemActions/index.d.ts +0 -1
- package/dist/DataList/components/DataListItemActionsOverflow/DataListItemActionsOverflow.d.ts +7 -0
- package/dist/DataList/components/DataListItemActionsOverflow/index.d.ts +1 -0
- package/dist/DataList/index.js +202 -201
- package/package.json +2 -2
- package/dist/DataList/components/DataListItemActions/DataListItemActionsOverflow.d.ts +0 -7
|
@@ -215,13 +215,21 @@ export interface DataListActionProps<T extends DataListObject> {
|
|
|
215
215
|
*/
|
|
216
216
|
readonly onClick?: (data: T) => void;
|
|
217
217
|
}
|
|
218
|
+
export interface DataListActionsProps<T extends DataListObject> {
|
|
219
|
+
/**
|
|
220
|
+
* The actions to render for each item in the DataList. This only accepts the
|
|
221
|
+
* DataList.Action component.
|
|
222
|
+
*/
|
|
223
|
+
readonly children?: Fragment<ReactElement<DataListActionProps<T>>>;
|
|
224
|
+
/**
|
|
225
|
+
* The number of items to expose before the "More" button is shown.
|
|
226
|
+
* @default 2
|
|
227
|
+
*/
|
|
228
|
+
readonly itemsToExpose?: number;
|
|
229
|
+
}
|
|
218
230
|
export interface DataListBulkActionProps extends DataListActionProps<DataListObject> {
|
|
219
231
|
/**
|
|
220
232
|
* The callback function when the action is clicked.
|
|
221
233
|
*/
|
|
222
234
|
readonly onClick?: () => void;
|
|
223
235
|
}
|
|
224
|
-
export interface InternalDataListActionProps<T extends DataListObject> extends DataListActionProps<T> {
|
|
225
|
-
readonly item?: T;
|
|
226
|
-
readonly onClick?: ((data: T) => void) | (() => void);
|
|
227
|
-
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import { DataListActionProps, DataListObject
|
|
3
|
-
export declare function DataListAction<T extends DataListObject>(
|
|
4
|
-
export declare function InternalDataListAction<T extends DataListObject>({ label, icon, destructive, onClick, item, }: InternalDataListActionProps<T>): JSX.Element;
|
|
2
|
+
import { DataListActionProps, DataListObject } from "@jobber/components/DataList/DataList.types";
|
|
3
|
+
export declare function DataListAction<T extends DataListObject>({ label, icon, destructive, onClick, }: DataListActionProps<T>): JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./DataListActions";
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { DataListItemActionsProps, DataListObject } from "../../DataList.types";
|
|
3
3
|
export declare function DataListItemActions<T extends DataListObject>(_: DataListItemActionsProps<T>): null;
|
|
4
|
-
|
|
5
|
-
readonly item: T;
|
|
6
|
-
}
|
|
7
|
-
export declare function InternalDataListItemActions<T extends DataListObject>({ item, }: InternalDataListItemActionsProps<T>): JSX.Element | null;
|
|
8
|
-
export {};
|
|
4
|
+
export declare function InternalDataListItemActions(): JSX.Element | null;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ReactElement } from "react";
|
|
2
|
+
import { DataListActionProps, DataListObject } from "../../DataList.types";
|
|
3
|
+
interface DataListItemActionsOverflowProps<T extends DataListObject> {
|
|
4
|
+
readonly actions: ReactElement<DataListActionProps<T>>[];
|
|
5
|
+
}
|
|
6
|
+
export declare function DataListItemActionsOverflow<T extends DataListObject>({ actions, }: DataListItemActionsOverflowProps<T>): JSX.Element | null;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./DataListItemActionsOverflow";
|
package/dist/DataList/index.js
CHANGED
|
@@ -10,28 +10,26 @@ var Glimmer = require('../Glimmer-cfa92a88.js');
|
|
|
10
10
|
var framerMotion = require('framer-motion');
|
|
11
11
|
var classnames = require('classnames');
|
|
12
12
|
var noop = require('lodash/noop');
|
|
13
|
-
var reactRouterDom = require('react-router-dom');
|
|
14
|
-
var Button = require('../Button-d89f2271.js');
|
|
15
13
|
var design = require('@jobber/design');
|
|
16
|
-
var Typography = require('../Typography-9bff9c91.js');
|
|
17
14
|
var ReactDOM = require('react-dom');
|
|
18
15
|
var Tooltip = require('../Tooltip-59dbab5b.js');
|
|
19
16
|
require('react-popper');
|
|
17
|
+
var Typography = require('../Typography-9bff9c91.js');
|
|
18
|
+
var reactRouterDom = require('react-router-dom');
|
|
19
|
+
var Button = require('../Button-d89f2271.js');
|
|
20
|
+
var useInView = require('@jobber/hooks/useInView');
|
|
21
|
+
var isEmpty = require('lodash/isEmpty');
|
|
22
|
+
var InlineLabel = require('../InlineLabel-3d461632.js');
|
|
20
23
|
var useFocusTrap = require('@jobber/hooks/useFocusTrap');
|
|
21
24
|
var useRefocusOnActivator = require('@jobber/hooks/useRefocusOnActivator');
|
|
22
25
|
var useOnKeyDown = require('@jobber/hooks/useOnKeyDown');
|
|
23
26
|
var foundation = require('@jobber/design/foundation');
|
|
24
|
-
var isEmpty = require('lodash/isEmpty');
|
|
25
|
-
var InlineLabel = require('../InlineLabel-3d461632.js');
|
|
26
|
-
var styles$f = require('@jobber/components/DataList/DataList.css');
|
|
27
27
|
require('uuid');
|
|
28
28
|
require('react-hook-form');
|
|
29
29
|
var Checkbox = require('../Checkbox-eac63b7f.js');
|
|
30
30
|
var FormatDate = require('../FormatDate-70ea5b43.js');
|
|
31
31
|
var Heading = require('../Heading-4562900a.js');
|
|
32
32
|
var AnimatedSwitcher = require('../AnimatedSwitcher-d1e1ddcf.js');
|
|
33
|
-
var useInView = require('@jobber/hooks/useInView');
|
|
34
|
-
var Icon = require('../Icon-405a216c.js');
|
|
35
33
|
var Popover = require('../Popover-d401fb54.js');
|
|
36
34
|
var Content = require('../Content-2ca1ffe1.js');
|
|
37
35
|
var Chip = require('../Chip-4d8e6370.js');
|
|
@@ -41,6 +39,7 @@ require('color');
|
|
|
41
39
|
var debounce = require('lodash/debounce');
|
|
42
40
|
var InputText = require('../InputText-5ac5cfe0.js');
|
|
43
41
|
var Spinner = require('../Spinner-9d8fc7ff.js');
|
|
42
|
+
var Icon = require('../Icon-405a216c.js');
|
|
44
43
|
require('../ButtonDismiss-250840a4.js');
|
|
45
44
|
require('lodash/sortBy');
|
|
46
45
|
require('@jobber/hooks/useLiveAnnounce');
|
|
@@ -53,11 +52,10 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
|
53
52
|
var classnames__default = /*#__PURE__*/_interopDefaultLegacy(classnames);
|
|
54
53
|
var noop__default = /*#__PURE__*/_interopDefaultLegacy(noop);
|
|
55
54
|
var isEmpty__default = /*#__PURE__*/_interopDefaultLegacy(isEmpty);
|
|
56
|
-
var styles__default = /*#__PURE__*/_interopDefaultLegacy(styles$f);
|
|
57
55
|
var debounce__default = /*#__PURE__*/_interopDefaultLegacy(debounce);
|
|
58
56
|
|
|
59
|
-
var css_248z$e = ".TkdrExYnvcY-,\n.TkdrExYnvcY- * {\n box-sizing: border-box;\n}\n\n.TkdrExYnvcY- {\n display: -ms-flexbox;\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) 0;\n padding: var(--space-small) 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 -webkit-max-content;\n grid-template-columns: auto max-content;\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(225, 225, 225);\n border-bottom: var(--border-thick) solid var(--color-border);\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
|
|
60
|
-
var styles$e = {"wrapper":"TkdrExYnvcY-","titleContainer":"IcAlZHoB4LI-","headerFilters":"TFO76ysivmg-","headerTitles":"jGHZZYZm1ZY-","headerBatchSelect":"jMSVGIAr5tk-","listItem":"ise8kHCfhCY-","active":"Pc0JGX6jCD4-","listItemClickable":"Tq6e0BGwcSM-","selectable":"d-79rkMqufg-","selectAllCheckbox":"qm-SSuWTXkI-","visible":"VA9RnQp6nbI-","selected":"_4L7iXXzLr5k-","filtering":"Kkp-IYmwq-s-","filteringSpinner":"m-eCShL7TU4-","srOnly":"esUiRgWabYw-"};
|
|
57
|
+
var css_248z$e = ".TkdrExYnvcY-,\n.TkdrExYnvcY- * {\n box-sizing: border-box;\n}\n\n.TkdrExYnvcY- {\n display: -ms-flexbox;\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) 0;\n padding: var(--space-small) 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 -webkit-max-content;\n grid-template-columns: auto max-content;\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(225, 225, 225);\n border-bottom: var(--border-thick) solid var(--color-border);\n}\n\n.GiD7MjZJbcw- {\n display: -ms-flexbox;\n display: flex;\n}\n\n@media (max-width: 489.98px) {\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: calc(16px / 4);\n gap: var(--space-smaller);\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(225, 225, 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-.Pc0JGX6jCD4-,\n.ise8kHCfhCY-:hover,\n.ise8kHCfhCY-:focus-within {\n --data-list-item-active-color: var(--color-surface--background);\n background-color: rgb(244, 244, 244);\n background-color: var(--data-list-item-active-color);\n}\n\n.Tq6e0BGwcSM- {\n display: block;\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 * 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";
|
|
58
|
+
var styles$e = {"wrapper":"TkdrExYnvcY-","titleContainer":"IcAlZHoB4LI-","headerFilters":"TFO76ysivmg-","headerTitles":"jGHZZYZm1ZY-","batchSelectContainer":"GiD7MjZJbcw-","headerBatchSelect":"jMSVGIAr5tk-","listItem":"ise8kHCfhCY-","active":"Pc0JGX6jCD4-","listItemClickable":"Tq6e0BGwcSM-","selectable":"d-79rkMqufg-","selectAllCheckbox":"qm-SSuWTXkI-","visible":"VA9RnQp6nbI-","selected":"_4L7iXXzLr5k-","filtering":"Kkp-IYmwq-s-","filteringSpinner":"m-eCShL7TU4-","srOnly":"esUiRgWabYw-"};
|
|
61
59
|
styleInject_es.styleInject(css_248z$e);
|
|
62
60
|
|
|
63
61
|
var css_248z$d = ".F56prQsXm3A- {\n min-width: 80px;\n margin-left: calc(16px / 2);\n margin-left: var(--space-small);\n}\n";
|
|
@@ -111,35 +109,6 @@ var css_248z$b = ".jHcHGQ-HDbk- {\n display: -ms-flexbox;\n display: flex;\n
|
|
|
111
109
|
var styles$b = {"menu":"jHcHGQ-HDbk-"};
|
|
112
110
|
styleInject_es.styleInject(css_248z$b);
|
|
113
111
|
|
|
114
|
-
var css_248z$a = ".iyg43v-S9yU- {\n display: -ms-flexbox;\n display: flex;\n width: 100%;\n min-height: 44px;\n padding: calc(16px / 2);\n padding: var(--space-small);\n border: none;\n border-radius: 0;\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 text-align: left;\n background: none;\n cursor: pointer;\n transition: background 200ms ease;\n transition: background var(--timing-base) ease;\n -webkit-appearance: none;\n appearance: none;\n -ms-flex-align: center;\n align-items: center;\n gap: calc(16px / 2);\n gap: var(--space-small);\n}\n\n.iyg43v-S9yU-:hover,\n.iyg43v-S9yU-:focus {\n background-color: rgb(250, 246, 219);\n background-color: var(--color-surface--hover);\n}\n\n.AUJNqz93ZDA- {\n font-weight: 500;\n}\n";
|
|
115
|
-
var styles$a = {"action":"iyg43v-S9yU-","label":"AUJNqz93ZDA-"};
|
|
116
|
-
styleInject_es.styleInject(css_248z$a);
|
|
117
|
-
|
|
118
|
-
function DataListAction(
|
|
119
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
120
|
-
_) {
|
|
121
|
-
return null;
|
|
122
|
-
}
|
|
123
|
-
function InternalDataListAction({ label, icon, destructive, onClick, item, }) {
|
|
124
|
-
const color = destructive ? "critical" : "blue";
|
|
125
|
-
return (React__default["default"].createElement("button", { className: styles$a.action, onClick: handleClick },
|
|
126
|
-
icon && React__default["default"].createElement(Icon.Icon, { name: icon, color: color }),
|
|
127
|
-
React__default["default"].createElement(Typography.Typography, { textColor: color },
|
|
128
|
-
React__default["default"].createElement("span", { className: styles$a.label }, label))));
|
|
129
|
-
function handleClick() {
|
|
130
|
-
if (item) {
|
|
131
|
-
onClick === null || onClick === void 0 ? void 0 : onClick(item);
|
|
132
|
-
}
|
|
133
|
-
else {
|
|
134
|
-
onClick === null || onClick === void 0 ? void 0 : onClick();
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
var css_248z$9 = ".aokwZU8jbWU- {\n position: fixed;\n top: 0;\n top: var(--actions-menu-y, 0);\n left: 0;\n left: var(--actions-menu-x, 0);\n z-index: 6;\n z-index: var(--elevation-menu);\n min-width: 150px;\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 padding: calc(16px / 4);\n padding: var(--space-smaller);\n border: calc(16px / 16) solid rgb(225, 225, 225);\n border: var(--border-base) solid var(--color-border);\n border-radius: calc(16px / 2);\n border-radius: var(--radius-larger);\n background-color: rgba(255, 255, 255, 1);\n background-color: var(--color-surface);\n}\n\n.XtVRP97TVSE- {\n position: fixed;\n top: 0;\n left: 0;\n z-index: calc(6 - 1);\n z-index: calc(var(--elevation-menu) - 1);\n width: 100%;\n height: 100%;\n padding: 0;\n border: none;\n background-color: transparent;\n}\n";
|
|
140
|
-
var styles$9 = {"menu":"aokwZU8jbWU-","overlay":"XtVRP97TVSE-"};
|
|
141
|
-
styleInject_es.styleInject(css_248z$9);
|
|
142
|
-
|
|
143
112
|
const EMPTY_RESULTS_MESSAGE = "List is looking empty";
|
|
144
113
|
const EMPTY_FILTER_RESULTS_MESSAGE = "No results for selected filters";
|
|
145
114
|
const EMPTY_STATE_ACTION_BUTTON_ONLY_ERROR = "DataListEmptyState action prop must be a Button component";
|
|
@@ -161,61 +130,28 @@ const DATA_LOAD_MORE_TEST_ID = "ATL-DataList-LoadMore-trigger";
|
|
|
161
130
|
const TRANSITION_DURATION_IN_SECONDS = design.tokens["timing-base"] / 1000;
|
|
162
131
|
const TRANSITION_DELAY_IN_SECONDS = design.tokens["timing-quick"] / 1000;
|
|
163
132
|
|
|
164
|
-
const
|
|
165
|
-
hidden: { opacity: 0, y: -10 },
|
|
166
|
-
visible: { opacity: 1, y: 0 },
|
|
167
|
-
};
|
|
168
|
-
function DataListActionsMenu({ visible = false, position, onRequestClose, children, }) {
|
|
169
|
-
const [ref, setRef] = React.useState();
|
|
170
|
-
useRefocusOnActivator.useRefocusOnActivator(visible);
|
|
171
|
-
const focusTrapRef = useFocusTrap.useFocusTrap(visible);
|
|
172
|
-
useOnKeyDown.useOnKeyDown(onRequestClose, "Escape");
|
|
173
|
-
return ReactDOM.createPortal(React__default["default"].createElement(framerMotion.AnimatePresence, null, visible && (React__default["default"].createElement("div", { ref: focusTrapRef },
|
|
174
|
-
React__default["default"].createElement(framerMotion.motion.div, { role: "menu", ref: setRef, variants: variants$1, initial: "hidden", animate: "visible", exit: "hidden", transition: { duration: TRANSITION_DELAY_IN_SECONDS }, className: styles$9.menu, style: getPositionCssVars(), onClick: onRequestClose }, children),
|
|
175
|
-
React__default["default"].createElement("button", { className: styles$9.overlay, onClick: onRequestClose, "aria-label": "Close menu" })))), document.body);
|
|
176
|
-
function getPositionCssVars() {
|
|
177
|
-
const { posX, posY } = getPosition();
|
|
178
|
-
return {
|
|
179
|
-
"--actions-menu-x": `${posX}px`,
|
|
180
|
-
"--actions-menu-y": `${posY}px`,
|
|
181
|
-
};
|
|
182
|
-
}
|
|
183
|
-
function getPosition() {
|
|
184
|
-
const rect = ref === null || ref === void 0 ? void 0 : ref.getBoundingClientRect();
|
|
185
|
-
const { width = 0, height = 0 } = rect || {};
|
|
186
|
-
const { x = 0, y = 0 } = position;
|
|
187
|
-
const xIsOffScreen = x + width > window.innerWidth;
|
|
188
|
-
const yIsOffScreen = y + height > window.innerHeight;
|
|
189
|
-
const xOffSet = x + width - window.innerWidth + foundation.tokens["space-base"];
|
|
190
|
-
const yOffSet = y + height - window.innerHeight;
|
|
191
|
-
const newPosX = Math.floor(xIsOffScreen ? x - xOffSet : x);
|
|
192
|
-
const newPosY = Math.floor(yIsOffScreen ? y - yOffSet : y);
|
|
193
|
-
return { posX: newPosX, posY: newPosY };
|
|
194
|
-
}
|
|
195
|
-
}
|
|
133
|
+
const CONTAINER_TEST_ID = "ATL-DataListFilters-Container";
|
|
196
134
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
setShowMenu(false);
|
|
213
|
-
}
|
|
135
|
+
var css_248z$a = ".jbBRoxlZlNI- {\n -ms-flex-item-align: center;\n align-self: center;\n position: relative;\n min-width: 0;\n}\n\n.MnN8qbS4hw4- {\n display: grid;\n overflow-x: auto;\n grid-auto-flow: column;\n grid-auto-columns: -webkit-max-content;\n grid-auto-columns: max-content;\n -ms-flex-align: center;\n align-items: center;\n}\n\n.MnN8qbS4hw4- > :nth-child(n + 3):not(:last-child) {\n margin-left: calc(16px / 2);\n margin-left: var(--space-small);\n}\n\n.b-5P7Z8eGO8- {\n visibility: hidden;\n}\n\n.xzaCS4slLpI-::before,\n.Jf227kC8Nu0-::after {\n content: \"\";\n position: absolute;\n top: 0;\n width: calc(16px * 1.5);\n width: var(--space-large);\n height: 100%;\n background-image: linear-gradient(\n to right,\n rgba(255, 255, 255, 1) 0%,\n rgba(255, 255, 255, 0) 100%\n );\n background-image: linear-gradient(\n var(--data-list-overflow-shadow-angle, to right),\n var(--color-surface) 0%,\n rgba(var(--color-white--rgb), 0) 100%\n );\n pointer-events: none;\n}\n\n.xzaCS4slLpI-::before {\n left: 0;\n}\n\n.Jf227kC8Nu0-::after {\n --data-list-overflow-shadow-angle: to left;\n right: 0;\n}\n";
|
|
136
|
+
var styles$a = {"fadeContainer":"jbBRoxlZlNI-","overflowGrid":"MnN8qbS4hw4-","overflowTrigger":"b-5P7Z8eGO8-","overflowLeft":"xzaCS4slLpI-","overflowRight":"Jf227kC8Nu0-"};
|
|
137
|
+
styleInject_es.styleInject(css_248z$a);
|
|
138
|
+
|
|
139
|
+
function DataListOverflowFade({ children }) {
|
|
140
|
+
const [leftRef, isLeftVisible] = useInView.useInView();
|
|
141
|
+
const [rightRef, isRightVisible] = useInView.useInView();
|
|
142
|
+
return (React__default["default"].createElement("div", { "data-testid": CONTAINER_TEST_ID, className: classnames__default["default"](styles$a.fadeContainer, {
|
|
143
|
+
[styles$a.overflowLeft]: !isLeftVisible,
|
|
144
|
+
[styles$a.overflowRight]: !isRightVisible,
|
|
145
|
+
}) },
|
|
146
|
+
React__default["default"].createElement("div", { className: styles$a.overflowGrid },
|
|
147
|
+
React__default["default"].createElement("span", { ref: leftRef, className: styles$a.overflowTrigger }),
|
|
148
|
+
children,
|
|
149
|
+
React__default["default"].createElement("span", { ref: rightRef, className: styles$a.overflowTrigger }))));
|
|
214
150
|
}
|
|
215
151
|
|
|
216
|
-
var css_248z$
|
|
217
|
-
var styles$
|
|
218
|
-
styleInject_es.styleInject(css_248z$
|
|
152
|
+
var css_248z$9 = ".WRV-UmQmPzo- {\n display: -ms-flexbox;\n display: flex;\n position: relative;\n z-index: 0;\n z-index: var(--elevation-default);\n overflow: hidden;\n gap: calc(16px / 2);\n gap: var(--space-small);\n}\n\n.liQeWCMenD0- {\n --overflow-bg: var(--data-list-item-active-color, var(--color-surface));\n\n display: -ms-flexbox;\n\n display: flex;\n position: absolute;\n top: 0;\n right: 0;\n height: 100%;\n padding-left: calc(16px * 1);\n padding-left: var(--space-base);\n background-image: linear-gradient(\n 90deg,\n transparent 0,\n rgba(255, 255, 255, 1) calc(16px * 1),\n rgba(255, 255, 255, 1) 100%\n );\n background-image: linear-gradient(\n 90deg,\n transparent 0,\n var(--overflow-bg) var(--space-base),\n var(--overflow-bg) 100%\n );\n -ms-flex-align: center;\n align-items: center;\n transition: all 200ms;\n transition: all var(--timing-base);\n}\n";
|
|
153
|
+
var styles$9 = {"tags":"WRV-UmQmPzo-","tagCount":"liQeWCMenD0-"};
|
|
154
|
+
styleInject_es.styleInject(css_248z$9);
|
|
219
155
|
|
|
220
156
|
function DataListTags({ items }) {
|
|
221
157
|
const ref = React.useRef(null);
|
|
@@ -235,10 +171,10 @@ function DataListTags({ items }) {
|
|
|
235
171
|
elements === null || elements === void 0 ? void 0 : elements.forEach(element => observer.unobserve(element));
|
|
236
172
|
};
|
|
237
173
|
}, [items]);
|
|
238
|
-
return (React__default["default"].createElement("div", { className: styles$
|
|
174
|
+
return (React__default["default"].createElement("div", { className: styles$9.tags, ref: ref },
|
|
239
175
|
items.filter(Boolean).map((tag, index) => (React__default["default"].createElement("div", { key: tag, "data-tag-element": index },
|
|
240
176
|
React__default["default"].createElement(InlineLabel.InlineLabel, null, tag)))),
|
|
241
|
-
Boolean(visibleItems) && (React__default["default"].createElement("div", { className: styles$
|
|
177
|
+
Boolean(visibleItems) && (React__default["default"].createElement("div", { className: styles$9.tagCount },
|
|
242
178
|
React__default["default"].createElement(Text.Text, null,
|
|
243
179
|
"+",
|
|
244
180
|
visibleItems)))));
|
|
@@ -267,22 +203,22 @@ function buildIntersectionThreshold(items) {
|
|
|
267
203
|
return thresholds;
|
|
268
204
|
}
|
|
269
205
|
|
|
270
|
-
var css_248z$
|
|
271
|
-
var styles$
|
|
272
|
-
styleInject_es.styleInject(css_248z$
|
|
206
|
+
var css_248z$8 = ".fLmJZJJqMcE- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n padding: 0;\n border: none;\n background-color: transparent;\n}\n\n.UG8cHUT3Hds- {\n cursor: pointer;\n}\n";
|
|
207
|
+
var styles$8 = {"headerLabel":"fLmJZJJqMcE-","sortable":"UG8cHUT3Hds-"};
|
|
208
|
+
styleInject_es.styleInject(css_248z$8);
|
|
273
209
|
|
|
274
|
-
var css_248z$
|
|
275
|
-
var styles$
|
|
276
|
-
styleInject_es.styleInject(css_248z$
|
|
210
|
+
var css_248z$7 = ".AN5egORYy-0- {\n padding-right: calc(16px / 2);\n padding-right: var(--space-small);\n}\n\n.AN5egORYy-0- path {\n fill: rgba(101, 120, 132, 1);\n fill: var(--color-greyBlue);\n transition: all 200ms ease;\n transition: all var(--timing-base) ease;\n}\n\n.AN5egORYy-0- path.F1uTDCK0Sb0- {\n fill: rgb(1, 41, 57);\n fill: var(--color-blue);\n}\n\n.AN5egORYy-0- path._6KYeQXWXLQ8- {\n fill: rgb(193, 201, 206);\n fill: var(--color-greyBlue--lighter);\n}\n";
|
|
211
|
+
var styles$7 = {"sortIcon":"AN5egORYy-0-","active":"F1uTDCK0Sb0-","inactive":"_6KYeQXWXLQ8-"};
|
|
212
|
+
styleInject_es.styleInject(css_248z$7);
|
|
277
213
|
|
|
278
214
|
const SORTING_ICON_TEST_ID = "ATL-DataList-Sorting-Icon";
|
|
279
215
|
function DataListSortingArrows({ order }) {
|
|
280
|
-
return (React__default["default"].createElement("div", { className: styles$
|
|
216
|
+
return (React__default["default"].createElement("div", { className: styles$7.sortIcon, "data-testid": SORTING_ICON_TEST_ID },
|
|
281
217
|
React__default["default"].createElement("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
|
|
282
218
|
React__default["default"].createElement("path", { className: getActiveClassName("asc"), d: "M16.2929 10.6661C15.9024 11.0566 15.2692 11.0566 14.8787 10.6661L12.2891 8.14263L9.70711 10.6661C9.31658 11.0566 8.68342 11.0566 8.29289 10.6661C7.90237 10.2756 7.90237 9.64239 8.29289 9.25186L11.5858 5.95897C11.9763 5.56845 12.6095 5.56845 13 5.95897L16.2929 9.25186C16.6834 9.64239 16.6834 10.2756 16.2929 10.6661Z" }),
|
|
283
219
|
React__default["default"].createElement("path", { className: getActiveClassName("desc"), d: "M8.29292 13.3339C8.68345 12.9434 9.31661 12.9434 9.70714 13.3339L12.2968 15.8573L14.8787 13.3339C15.2692 12.9434 15.9024 12.9434 16.2929 13.3339C16.6834 13.7244 16.6834 14.3576 16.2929 14.7481L13 18.041C12.6095 18.4315 11.9763 18.4315 11.5858 18.041L8.29292 14.7481C7.9024 14.3576 7.9024 13.7244 8.29292 13.3339Z" }))));
|
|
284
220
|
function getActiveClassName(targetOrder) {
|
|
285
|
-
return order === targetOrder ? styles$
|
|
221
|
+
return order === targetOrder ? styles$7.active : styles$7.inactive;
|
|
286
222
|
}
|
|
287
223
|
}
|
|
288
224
|
|
|
@@ -291,8 +227,8 @@ function DataListHeaderTile({ headers, headerKey, }) {
|
|
|
291
227
|
const isSortable = sorting === null || sorting === void 0 ? void 0 : sorting.sortable.includes(headerKey);
|
|
292
228
|
const sortingState = sorting === null || sorting === void 0 ? void 0 : sorting.state;
|
|
293
229
|
const Tag = isSortable ? "button" : "div";
|
|
294
|
-
return (React__default["default"].createElement(Tag, { className: classnames__default["default"](styles$
|
|
295
|
-
[styles$
|
|
230
|
+
return (React__default["default"].createElement(Tag, { className: classnames__default["default"](styles$8.headerLabel, {
|
|
231
|
+
[styles$8.sortable]: isSortable,
|
|
296
232
|
}), onClick: handleOnClick },
|
|
297
233
|
React__default["default"].createElement(Text.Text, { maxLines: "single" }, headers[headerKey]),
|
|
298
234
|
(sortingState === null || sortingState === void 0 ? void 0 : sortingState.key) === headerKey && (React__default["default"].createElement(DataListSortingArrows, { order: sortingState.order }))));
|
|
@@ -383,6 +319,92 @@ function getExposedActions(childrenArray, childCount = 2) {
|
|
|
383
319
|
}, []);
|
|
384
320
|
}
|
|
385
321
|
|
|
322
|
+
const DataListLayoutActionsContext = React.createContext({ activeItem: undefined });
|
|
323
|
+
function useDataListLayoutActionsContext() {
|
|
324
|
+
return React.useContext(DataListLayoutActionsContext);
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
var css_248z$6 = ".aokwZU8jbWU- {\n position: fixed;\n top: 0;\n top: var(--actions-menu-y, 0);\n left: 0;\n left: var(--actions-menu-x, 0);\n z-index: 6;\n z-index: var(--elevation-menu);\n min-width: 150px;\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 padding: calc(16px / 4);\n padding: var(--space-smaller);\n border: calc(16px / 16) solid rgb(225, 225, 225);\n border: var(--border-base) solid var(--color-border);\n border-radius: calc(16px / 2);\n border-radius: var(--radius-larger);\n background-color: rgba(255, 255, 255, 1);\n background-color: var(--color-surface);\n}\n\n.XtVRP97TVSE- {\n position: fixed;\n top: 0;\n left: 0;\n z-index: calc(6 - 1);\n z-index: calc(var(--elevation-menu) - 1);\n width: 100%;\n height: 100%;\n padding: 0;\n border: none;\n background-color: transparent;\n}\n";
|
|
328
|
+
var styles$6 = {"menu":"aokwZU8jbWU-","overlay":"XtVRP97TVSE-"};
|
|
329
|
+
styleInject_es.styleInject(css_248z$6);
|
|
330
|
+
|
|
331
|
+
const variants$1 = {
|
|
332
|
+
hidden: { opacity: 0, y: -10 },
|
|
333
|
+
visible: { opacity: 1, y: 0 },
|
|
334
|
+
};
|
|
335
|
+
function DataListActionsMenu({ visible = false, position, onRequestClose, children, }) {
|
|
336
|
+
const [ref, setRef] = React.useState();
|
|
337
|
+
useRefocusOnActivator.useRefocusOnActivator(visible);
|
|
338
|
+
const focusTrapRef = useFocusTrap.useFocusTrap(visible);
|
|
339
|
+
useOnKeyDown.useOnKeyDown(onRequestClose, "Escape");
|
|
340
|
+
return ReactDOM.createPortal(React__default["default"].createElement(framerMotion.AnimatePresence, null, visible && (React__default["default"].createElement("div", { ref: focusTrapRef },
|
|
341
|
+
React__default["default"].createElement(framerMotion.motion.div, { role: "menu", ref: setRef, variants: variants$1, initial: "hidden", animate: "visible", exit: "hidden", transition: { duration: TRANSITION_DELAY_IN_SECONDS }, className: styles$6.menu, style: getPositionCssVars(), onClick: onRequestClose }, children),
|
|
342
|
+
React__default["default"].createElement("button", { className: styles$6.overlay, onClick: onRequestClose, "aria-label": "Close menu" })))), document.body);
|
|
343
|
+
function getPositionCssVars() {
|
|
344
|
+
const { posX, posY } = getPosition();
|
|
345
|
+
return {
|
|
346
|
+
"--actions-menu-x": `${posX}px`,
|
|
347
|
+
"--actions-menu-y": `${posY}px`,
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
function getPosition() {
|
|
351
|
+
const rect = ref === null || ref === void 0 ? void 0 : ref.getBoundingClientRect();
|
|
352
|
+
const { width = 0, height = 0 } = rect || {};
|
|
353
|
+
const { x, y } = position;
|
|
354
|
+
const xIsOffScreen = x + width > window.innerWidth;
|
|
355
|
+
const yIsOffScreen = y + height > window.innerHeight;
|
|
356
|
+
const xOffSet = x + width - window.innerWidth + foundation.tokens["space-base"];
|
|
357
|
+
const yOffSet = y + height - window.innerHeight;
|
|
358
|
+
const newPosX = Math.floor(xIsOffScreen ? x - xOffSet : x);
|
|
359
|
+
const newPosY = Math.floor(yIsOffScreen ? y - yOffSet : y);
|
|
360
|
+
return { posX: newPosX, posY: newPosY };
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
function DataListItemActionsOverflow({ actions, }) {
|
|
365
|
+
const [menuPosition, setMenuPosition] = React.useState({ x: 0, y: 0 });
|
|
366
|
+
const [showMenu, setShowMenu] = React.useState(false);
|
|
367
|
+
if (actions.length === 0)
|
|
368
|
+
return null;
|
|
369
|
+
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
370
|
+
React__default["default"].createElement(Tooltip.Tooltip, { message: "More actions" },
|
|
371
|
+
React__default["default"].createElement(Button.Button, { icon: "more", ariaLabel: "More actions", type: "secondary", variation: "subtle", onClick: handleMoreClick })),
|
|
372
|
+
React__default["default"].createElement(DataListActionsMenu, { visible: showMenu, position: menuPosition, onRequestClose: handleClose }, actions)));
|
|
373
|
+
function handleMoreClick(event) {
|
|
374
|
+
setShowMenu(true);
|
|
375
|
+
const rect = event.currentTarget.getBoundingClientRect();
|
|
376
|
+
const posX = rect.x;
|
|
377
|
+
const posY = rect.y + rect.height;
|
|
378
|
+
setMenuPosition({ x: posX, y: posY });
|
|
379
|
+
}
|
|
380
|
+
function handleClose() {
|
|
381
|
+
setShowMenu(false);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
function DataListActions({ children, itemsToExpose = 2, }) {
|
|
386
|
+
const { activeItem } = useDataListLayoutActionsContext();
|
|
387
|
+
const childrenArray = React.Children.toArray(children).filter(React.isValidElement);
|
|
388
|
+
const exposedActions = getExposedActions(childrenArray, itemsToExpose);
|
|
389
|
+
childrenArray.splice(0, exposedActions.length);
|
|
390
|
+
return (React__default["default"].createElement(DataListOverflowFade, null,
|
|
391
|
+
exposedActions.map(({ props }) => {
|
|
392
|
+
if (!props.icon)
|
|
393
|
+
return null;
|
|
394
|
+
return (React__default["default"].createElement(Tooltip.Tooltip, { key: props.label, message: props.label },
|
|
395
|
+
React__default["default"].createElement(Button.Button, { icon: props.icon, ariaLabel: props.label, onClick: () => {
|
|
396
|
+
var _a, _b;
|
|
397
|
+
if (activeItem) {
|
|
398
|
+
(_a = props.onClick) === null || _a === void 0 ? void 0 : _a.call(props, activeItem);
|
|
399
|
+
}
|
|
400
|
+
else {
|
|
401
|
+
(_b = props.onClick) === null || _b === void 0 ? void 0 : _b.call(props);
|
|
402
|
+
}
|
|
403
|
+
}, type: "secondary", variation: "subtle" })));
|
|
404
|
+
}),
|
|
405
|
+
React__default["default"].createElement(DataListItemActionsOverflow, { actions: childrenArray })));
|
|
406
|
+
}
|
|
407
|
+
|
|
386
408
|
// This component is meant to capture the props of the DataList.ItemActions
|
|
387
409
|
function DataListItemActions(
|
|
388
410
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
@@ -393,40 +415,26 @@ const variants = {
|
|
|
393
415
|
hidden: { opacity: 0, y: 10 },
|
|
394
416
|
visible: { opacity: 1, y: 0 },
|
|
395
417
|
};
|
|
396
|
-
function InternalDataListItemActions(
|
|
418
|
+
function InternalDataListItemActions() {
|
|
397
419
|
const { itemActionComponent } = useDataListContext();
|
|
398
420
|
if (!itemActionComponent)
|
|
399
421
|
return null;
|
|
400
422
|
const { children } = itemActionComponent.props;
|
|
401
|
-
const childrenArray = React.Children.toArray(children).filter(React.isValidElement);
|
|
402
|
-
const exposedActions = getExposedActions(childrenArray);
|
|
403
|
-
childrenArray.splice(0, exposedActions.length);
|
|
404
423
|
return (React__default["default"].createElement(framerMotion.motion.div, { variants: variants, initial: "hidden", animate: "visible", exit: "hidden", transition: {
|
|
405
424
|
duration: TRANSITION_DURATION_IN_SECONDS,
|
|
406
425
|
delay: TRANSITION_DELAY_IN_SECONDS,
|
|
407
426
|
}, className: styles$b.menu, onContextMenu: handleContextMenu },
|
|
408
|
-
|
|
409
|
-
if (!props.icon)
|
|
410
|
-
return null;
|
|
411
|
-
return (React__default["default"].createElement(Tooltip.Tooltip, { key: props.label, message: props.label },
|
|
412
|
-
React__default["default"].createElement(Button.Button, { icon: props.icon, ariaLabel: props.label, onClick: () => { var _a; return (_a = props.onClick) === null || _a === void 0 ? void 0 : _a.call(props, item); }, type: "secondary", variation: "subtle" })));
|
|
413
|
-
}),
|
|
414
|
-
React__default["default"].createElement(DataListItemActionsOverflow, { actions: childrenArray, item: item })));
|
|
427
|
+
React__default["default"].createElement(DataListActions, null, children)));
|
|
415
428
|
}
|
|
416
429
|
function handleContextMenu(event) {
|
|
417
430
|
event.stopPropagation();
|
|
418
431
|
}
|
|
419
432
|
|
|
420
|
-
const DataListLayoutActionsContext = React.createContext({ activeItem: undefined });
|
|
421
|
-
function useDataListLayoutActionsContext() {
|
|
422
|
-
return React.useContext(DataListLayoutActionsContext);
|
|
423
|
-
}
|
|
424
|
-
|
|
425
433
|
function DataListItemInternal({ children, item, }) {
|
|
426
434
|
const { selected, onSelect } = useDataListContext();
|
|
427
435
|
if (selected !== undefined && onSelect) {
|
|
428
|
-
return (React__default["default"].createElement("div", { className: classnames__default["default"](
|
|
429
|
-
[
|
|
436
|
+
return (React__default["default"].createElement("div", { className: classnames__default["default"](styles$e.selectable, {
|
|
437
|
+
[styles$e.selected]: selected === null || selected === void 0 ? void 0 : selected.length,
|
|
430
438
|
}) },
|
|
431
439
|
children,
|
|
432
440
|
React__default["default"].createElement(Checkbox.Checkbox, { checked: selected === null || selected === void 0 ? void 0 : selected.includes(item.id), onChange: handleChange })));
|
|
@@ -448,14 +456,14 @@ function DataListItemClickableInternal({ onClick, url, to, children, }) {
|
|
|
448
456
|
return React__default["default"].createElement(React__default["default"].Fragment, null, children);
|
|
449
457
|
if (to) {
|
|
450
458
|
const computedTo = typeof to === "string" ? to : to(activeItem);
|
|
451
|
-
return (React__default["default"].createElement(reactRouterDom.Link, { className:
|
|
459
|
+
return (React__default["default"].createElement(reactRouterDom.Link, { className: styles$e.listItemClickable, to: computedTo, onClick: handleClick }, children));
|
|
452
460
|
}
|
|
453
461
|
if (url) {
|
|
454
462
|
const href = typeof url === "string" ? url : url(activeItem);
|
|
455
|
-
return (React__default["default"].createElement("a", { className:
|
|
463
|
+
return (React__default["default"].createElement("a", { className: styles$e.listItemClickable, href: href, onClick: handleClick }, children));
|
|
456
464
|
}
|
|
457
465
|
if (onClick) {
|
|
458
|
-
return (React__default["default"].createElement("button", { className:
|
|
466
|
+
return (React__default["default"].createElement("button", { className: styles$e.listItemClickable, onClick: handleClick }, children));
|
|
459
467
|
}
|
|
460
468
|
return React__default["default"].createElement(React__default["default"].Fragment, null, children);
|
|
461
469
|
function handleClick() {
|
|
@@ -482,15 +490,14 @@ function DataListItem({ item, layout, }) {
|
|
|
482
490
|
const isContextMenuVisible = Boolean(contextPosition);
|
|
483
491
|
const shouldShowContextMenu = showMenu && isContextMenuVisible && Boolean(contextMenuActions);
|
|
484
492
|
return (React__default["default"].createElement(DataListLayoutActionsContext.Provider, { value: { activeItem: item } },
|
|
485
|
-
React__default["default"].createElement("div", { onMouseEnter: handleShowMenu, onMouseLeave: handleHideMenu, onFocus: handleShowMenu, onBlur: handleHideMenu, onContextMenu: handleContextMenu, className: classnames__default["default"](
|
|
486
|
-
[
|
|
493
|
+
React__default["default"].createElement("div", { onMouseEnter: handleShowMenu, onMouseLeave: handleHideMenu, onFocus: handleShowMenu, onBlur: handleHideMenu, onContextMenu: handleContextMenu, className: classnames__default["default"](styles$e.listItem, {
|
|
494
|
+
[styles$e.active]: showMenu && isContextMenuVisible,
|
|
487
495
|
}), key: item.id },
|
|
488
496
|
React__default["default"].createElement(DataListItemInternal, { item: item },
|
|
489
497
|
React__default["default"].createElement(DataListItemClickable, null, layout.props.children(generatedItem))),
|
|
490
498
|
React__default["default"].createElement(framerMotion.AnimatePresence, null,
|
|
491
|
-
showMenu && !hasInLayoutActions &&
|
|
492
|
-
React__default["default"].createElement(DataListActionsMenu, { key: item.id, visible: shouldShowContextMenu, position: contextPosition || { x: 0, y: 0 }, onRequestClose: () => setContextPosition(undefined) }, contextMenuActions
|
|
493
|
-
React.Children.map(contextMenuActions, action => (React__default["default"].createElement(InternalDataListAction, Object.assign({ key: item.id }, action.props, { item: item })))))))));
|
|
499
|
+
showMenu && !hasInLayoutActions && React__default["default"].createElement(InternalDataListItemActions, null),
|
|
500
|
+
React__default["default"].createElement(DataListActionsMenu, { key: item.id, visible: shouldShowContextMenu, position: contextPosition || { x: 0, y: 0 }, onRequestClose: () => setContextPosition(undefined) }, contextMenuActions)))));
|
|
494
501
|
function handleShowMenu() {
|
|
495
502
|
setShowMenu(true);
|
|
496
503
|
}
|
|
@@ -550,49 +557,6 @@ function DataListItems({ layouts, mediaMatches, data, }) {
|
|
|
550
557
|
React__default["default"].createElement(DataListLayoutInternal, { layouts: layouts, mediaMatches: mediaMatches, renderLayout: layout => (React__default["default"].createElement(React__default["default"].Fragment, null, data.map((child, i) => (React__default["default"].createElement(DataListItem, { key: data[i].id, index: i, item: child, layout: layout }))))) })));
|
|
551
558
|
}
|
|
552
559
|
|
|
553
|
-
const CONTAINER_TEST_ID = "ATL-DataListFilters-Container";
|
|
554
|
-
|
|
555
|
-
var css_248z$5 = ".jbBRoxlZlNI- {\n -ms-flex-item-align: center;\n align-self: center;\n position: relative;\n min-width: 0;\n}\n\n.MnN8qbS4hw4- {\n display: grid;\n overflow-x: auto;\n grid-auto-flow: column;\n grid-auto-columns: -webkit-max-content;\n grid-auto-columns: max-content;\n -ms-flex-align: center;\n align-items: center;\n}\n\n.MnN8qbS4hw4- > :nth-child(n + 3):not(:last-child) {\n margin-left: calc(16px / 2);\n margin-left: var(--space-small);\n}\n\n.b-5P7Z8eGO8- {\n visibility: hidden;\n}\n\n.xzaCS4slLpI-::before,\n.Jf227kC8Nu0-::after {\n content: \"\";\n position: absolute;\n top: 0;\n width: calc(16px * 1.5);\n width: var(--space-large);\n height: 100%;\n background-image: linear-gradient(\n to right,\n rgba(255, 255, 255, 1) 0%,\n rgba(255, 255, 255, 0) 100%\n );\n background-image: linear-gradient(\n var(--data-list-overflow-shadow-angle, to right),\n var(--color-surface) 0%,\n rgba(var(--color-white--rgb), 0) 100%\n );\n pointer-events: none;\n}\n\n.xzaCS4slLpI-::before {\n left: 0;\n}\n\n.Jf227kC8Nu0-::after {\n --data-list-overflow-shadow-angle: to left;\n right: 0;\n}\n";
|
|
556
|
-
var styles$5 = {"fadeContainer":"jbBRoxlZlNI-","overflowGrid":"MnN8qbS4hw4-","overflowTrigger":"b-5P7Z8eGO8-","overflowLeft":"xzaCS4slLpI-","overflowRight":"Jf227kC8Nu0-"};
|
|
557
|
-
styleInject_es.styleInject(css_248z$5);
|
|
558
|
-
|
|
559
|
-
function DataListOverflowFade({ children }) {
|
|
560
|
-
const [leftRef, isLeftVisible] = useInView.useInView();
|
|
561
|
-
const [rightRef, isRightVisible] = useInView.useInView();
|
|
562
|
-
return (React__default["default"].createElement("div", { "data-testid": CONTAINER_TEST_ID, className: classnames__default["default"](styles$5.fadeContainer, {
|
|
563
|
-
[styles$5.overflowLeft]: !isLeftVisible,
|
|
564
|
-
[styles$5.overflowRight]: !isRightVisible,
|
|
565
|
-
}) },
|
|
566
|
-
React__default["default"].createElement("div", { className: styles$5.overflowGrid },
|
|
567
|
-
React__default["default"].createElement("span", { ref: leftRef, className: styles$5.overflowTrigger }),
|
|
568
|
-
children,
|
|
569
|
-
React__default["default"].createElement("span", { ref: rightRef, className: styles$5.overflowTrigger }))));
|
|
570
|
-
}
|
|
571
|
-
|
|
572
|
-
// This component is meant to capture the props of the DataList.BulkActions
|
|
573
|
-
function DataListBulkActions(
|
|
574
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
575
|
-
_) {
|
|
576
|
-
return null;
|
|
577
|
-
}
|
|
578
|
-
function InternalDataListBulkActions() {
|
|
579
|
-
const { bulkActionsComponent } = useDataListContext();
|
|
580
|
-
if (!bulkActionsComponent)
|
|
581
|
-
return null;
|
|
582
|
-
const { children } = bulkActionsComponent.props;
|
|
583
|
-
const childrenArray = React.Children.toArray(children).filter(React.isValidElement);
|
|
584
|
-
const exposedActions = getExposedActions(childrenArray, 3);
|
|
585
|
-
childrenArray.splice(0, exposedActions.length);
|
|
586
|
-
return (React__default["default"].createElement(DataListOverflowFade, null,
|
|
587
|
-
exposedActions.map(({ props }) => {
|
|
588
|
-
if (!props.icon)
|
|
589
|
-
return null;
|
|
590
|
-
return (React__default["default"].createElement(Tooltip.Tooltip, { key: props.label, message: props.label },
|
|
591
|
-
React__default["default"].createElement(Button.Button, { icon: props.icon, ariaLabel: props.label, onClick: () => { var _a; return (_a = props.onClick) === null || _a === void 0 ? void 0 : _a.call(props); }, type: "secondary", variation: "subtle" })));
|
|
592
|
-
}),
|
|
593
|
-
React__default["default"].createElement(DataListItemActionsOverflow, { actions: childrenArray })));
|
|
594
|
-
}
|
|
595
|
-
|
|
596
560
|
function useMediaQuery(CSSMediaQuery) {
|
|
597
561
|
const [matches, setMatches] = React.useState(window.matchMedia(CSSMediaQuery).matches);
|
|
598
562
|
React.useEffect(() => {
|
|
@@ -616,6 +580,23 @@ function useResponsiveSizing() {
|
|
|
616
580
|
return { xs, sm, md, lg, xl };
|
|
617
581
|
}
|
|
618
582
|
|
|
583
|
+
// This component is meant to capture the props of the DataList.BulkActions
|
|
584
|
+
function DataListBulkActions(
|
|
585
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
586
|
+
_) {
|
|
587
|
+
return null;
|
|
588
|
+
}
|
|
589
|
+
function InternalDataListBulkActions() {
|
|
590
|
+
const { bulkActionsComponent } = useDataListContext();
|
|
591
|
+
if (!bulkActionsComponent)
|
|
592
|
+
return null;
|
|
593
|
+
const { children } = bulkActionsComponent.props;
|
|
594
|
+
const { sm } = useResponsiveSizing();
|
|
595
|
+
// Collapse all actions under "More actions" when breakpoint is smaller than sm
|
|
596
|
+
const itemsToExpose = sm ? 3 : 0;
|
|
597
|
+
return (React__default["default"].createElement(DataListActions, { itemsToExpose: itemsToExpose }, children));
|
|
598
|
+
}
|
|
599
|
+
|
|
619
600
|
function DataListHeaderCheckbox({ children }) {
|
|
620
601
|
const { data, totalCount, selected = [], onSelectAll, onSelect, } = useDataListContext();
|
|
621
602
|
if (!onSelectAll && !onSelect)
|
|
@@ -630,12 +611,12 @@ function DataListHeaderCheckbox({ children }) {
|
|
|
630
611
|
}) },
|
|
631
612
|
React__default["default"].createElement(Checkbox.Checkbox, { checked: isAllSelected(), indeterminate: selected.length > 0 && !isAllSelected(), onChange: onSelectAll },
|
|
632
613
|
React__default["default"].createElement("div", { className: styles$e.srOnly }, selectedLabel))),
|
|
633
|
-
React__default["default"].createElement(AnimatedSwitcher.AnimatedSwitcher, { switched: Boolean(selected.length), initialChild: children, switchTo: React__default["default"].createElement("div", { className: styles$e.
|
|
634
|
-
React__default["default"].createElement(
|
|
635
|
-
React__default["default"].createElement(
|
|
614
|
+
React__default["default"].createElement(AnimatedSwitcher.AnimatedSwitcher, { switched: Boolean(selected.length), initialChild: children, switchTo: React__default["default"].createElement("div", { className: styles$e.batchSelectContainer },
|
|
615
|
+
React__default["default"].createElement("div", { className: styles$e.headerBatchSelect },
|
|
616
|
+
React__default["default"].createElement(Text.Text, null,
|
|
636
617
|
selected.length,
|
|
637
|
-
" selected")
|
|
638
|
-
|
|
618
|
+
" selected"),
|
|
619
|
+
React__default["default"].createElement(Button.Button, { label: deselectText, onClick: () => onSelect === null || onSelect === void 0 ? void 0 : onSelect([]), type: "tertiary" })),
|
|
639
620
|
React__default["default"].createElement(InternalDataListBulkActions, null)) })));
|
|
640
621
|
function isAllSelected() {
|
|
641
622
|
// If there's a totalCount, we can use that to accurately determine if the
|
|
@@ -778,9 +759,9 @@ function InternalDataListFilters() {
|
|
|
778
759
|
showSortButton && React__default["default"].createElement(DataListSort, null)));
|
|
779
760
|
}
|
|
780
761
|
|
|
781
|
-
var css_248z$
|
|
782
|
-
var styles$
|
|
783
|
-
styleInject_es.styleInject(css_248z$
|
|
762
|
+
var css_248z$5 = ".PGOHzrMh374- {\n --offset: 1px;\n --sticky-header-transition-properties: var(--timing-base) ease-in-out;\n\n position: sticky;\n top: calc(1px * -1);\n top: calc(var(--offset) * -1);\n z-index: 1;\n z-index: var(--elevation-base);\n padding-top: 1px;\n padding-top: var(--offset);\n background-color: rgba(255, 255, 255, 1);\n background-color: var(--color-surface);\n}\n\n/**\n * Draw a border that gets covered by the column headers border when it shows up.\n *\n * Mostly to prevent us from writing some complex JS to remove the border when\n * the column headers show up.\n */\n\n.PGOHzrMh374-::before {\n content: \"\";\n display: block;\n position: absolute;\n bottom: 0;\n left: 50%;\n z-index: -1;\n width: 0;\n height: 0;\n background-color: rgb(225, 225, 225);\n background-color: var(--color-border);\n -webkit-transform: translateX(-50%);\n transform: translateX(-50%);\n transition: height var(--sticky-header-transition-properties)\n 100ms,\n width var(--sticky-header-transition-properties);\n transition: height var(--sticky-header-transition-properties)\n var(--timing-quick),\n width var(--sticky-header-transition-properties);\n}\n\n.PGjWc5ocjpI-::before {\n width: 100%;\n height: calc(16px / 8);\n height: var(--border-thick);\n transition: height var(--sticky-header-transition-properties),\n width var(--sticky-header-transition-properties) 100ms;\n transition: height var(--sticky-header-transition-properties),\n width var(--sticky-header-transition-properties) var(--timing-quick);\n}\n";
|
|
763
|
+
var styles$5 = {"header":"PGOHzrMh374-","stuck":"PGjWc5ocjpI-"};
|
|
764
|
+
styleInject_es.styleInject(css_248z$5);
|
|
784
765
|
|
|
785
766
|
function DataListStickyHeader({ children }) {
|
|
786
767
|
const [isStuck, setIsStuck] = React.useState(false);
|
|
@@ -795,12 +776,12 @@ function DataListStickyHeader({ children }) {
|
|
|
795
776
|
ref.current && observer.unobserve(ref.current);
|
|
796
777
|
};
|
|
797
778
|
}, [handleObserver, ref.current]);
|
|
798
|
-
return (React__default["default"].createElement("div", { ref: ref, className: classnames__default["default"](styles$
|
|
779
|
+
return (React__default["default"].createElement("div", { ref: ref, className: classnames__default["default"](styles$5.header, { [styles$5.stuck]: isStuck }) }, children));
|
|
799
780
|
}
|
|
800
781
|
|
|
801
|
-
var css_248z$
|
|
802
|
-
var styles$
|
|
803
|
-
styleInject_es.styleInject(css_248z$
|
|
782
|
+
var css_248z$4 = ".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";
|
|
783
|
+
var styles$4 = {"searchInput":"SaPMOnvw-3c-","searchInputVisible":"_3S1-91v2SYI-","searchButton":"_9GlBktsUALw-","withNoFilters":"_3Pjrt42x454-"};
|
|
784
|
+
styleInject_es.styleInject(css_248z$4);
|
|
804
785
|
|
|
805
786
|
const DATA_LIST_SEARCH_TEST_ID = "ATL-DataList-Search-input-wrapper";
|
|
806
787
|
// This component is meant to capture the props of the DataList.Search
|
|
@@ -820,13 +801,13 @@ function InternalDataListSearch() {
|
|
|
820
801
|
return null;
|
|
821
802
|
const { placeholder } = searchComponent.props;
|
|
822
803
|
return (React__default["default"].createElement("div", { className: classnames__default["default"]({
|
|
823
|
-
[styles$
|
|
804
|
+
[styles$4.withNoFilters]: !filterComponent && !sorting,
|
|
824
805
|
}) },
|
|
825
|
-
React__default["default"].createElement("div", { "data-testid": DATA_LIST_SEARCH_TEST_ID, className: classnames__default["default"](styles$
|
|
826
|
-
[styles$
|
|
806
|
+
React__default["default"].createElement("div", { "data-testid": DATA_LIST_SEARCH_TEST_ID, className: classnames__default["default"](styles$4.searchInput, {
|
|
807
|
+
[styles$4.searchInputVisible]: visible,
|
|
827
808
|
}) },
|
|
828
809
|
React__default["default"].createElement(InputText.InputText, { ref: inputRef, placeholder: getPlaceholder(), onChange: debouncedSearch, prefix: { icon: "search" }, size: "small" })),
|
|
829
|
-
React__default["default"].createElement("div", { className: styles$
|
|
810
|
+
React__default["default"].createElement("div", { className: styles$4.searchButton },
|
|
830
811
|
React__default["default"].createElement(AnimatedSwitcher.AnimatedSwitcher, { switched: visible, initialChild: React__default["default"].createElement(Button.Button, { variation: "subtle", icon: "search", ariaLabel: "Search", onClick: toggleSearch }), switchTo: React__default["default"].createElement(Button.Button, { variation: "subtle", icon: "remove", ariaLabel: "Close search bar", onClick: toggleSearch }) }))));
|
|
831
812
|
function getPlaceholder() {
|
|
832
813
|
if (placeholder)
|
|
@@ -844,9 +825,9 @@ function InternalDataListSearch() {
|
|
|
844
825
|
}
|
|
845
826
|
}
|
|
846
827
|
|
|
847
|
-
var css_248z$
|
|
848
|
-
var styles$
|
|
849
|
-
styleInject_es.styleInject(css_248z$
|
|
828
|
+
var css_248z$3 = ".zg3w9nQga-M- {\n display: -ms-flexbox;\n display: flex;\n box-sizing: border-box;\n padding: calc(16px * 1);\n padding: var(--space-base);\n -ms-flex-pack: center;\n justify-content: center;\n -ms-flex-direction: column;\n flex-direction: column;\n row-gap: calc(16px * 1);\n row-gap: var(--space-base);\n -ms-flex-align: center;\n align-items: center;\n -ms-flex: 1;\n flex: 1;\n}\n";
|
|
829
|
+
var styles$3 = {"emptyStateWrapper":"zg3w9nQga-M-"};
|
|
830
|
+
styleInject_es.styleInject(css_248z$3);
|
|
850
831
|
|
|
851
832
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
852
833
|
function DataListEmptyState(_) {
|
|
@@ -855,7 +836,7 @@ function DataListEmptyState(_) {
|
|
|
855
836
|
function InternalDataListEmptyState() {
|
|
856
837
|
const { emptyStateComponents: components, filtered } = React.useContext(DataListContext);
|
|
857
838
|
const { message, action } = getMessages();
|
|
858
|
-
return (React__default["default"].createElement("div", { className: styles$
|
|
839
|
+
return (React__default["default"].createElement("div", { className: styles$3.emptyStateWrapper },
|
|
859
840
|
React__default["default"].createElement(Text.Text, { align: "center" }, message),
|
|
860
841
|
renderButton(action)));
|
|
861
842
|
function getMessages() {
|
|
@@ -889,9 +870,9 @@ function getEmptyStates(components) {
|
|
|
889
870
|
return { defaultEmptyState, filteredEmptyState };
|
|
890
871
|
}
|
|
891
872
|
|
|
892
|
-
var css_248z$
|
|
893
|
-
var styles$
|
|
894
|
-
styleInject_es.styleInject(css_248z$
|
|
873
|
+
var css_248z$2 = ".IC-Y9bTIVFo- {\n position: relative;\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\n.PbZLGpbI6ZM-,\n._6zA6B-jmz6o- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: center;\n justify-content: center;\n padding: calc(16px / 2);\n padding: var(--space-small);\n}\n\n._6zA6B-jmz6o- {\n opacity: 0;\n -webkit-animation: gZ4DUv82g5I- 200ms ease 200ms forwards;\n -webkit-animation: gZ4DUv82g5I- var(--timing-base) ease var(--timing-base) forwards;\n animation: gZ4DUv82g5I- 200ms ease 200ms forwards;\n animation: gZ4DUv82g5I- var(--timing-base) ease var(--timing-base) forwards;\n}\n\n@-webkit-keyframes gZ4DUv82g5I- {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n\n@keyframes gZ4DUv82g5I- {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n";
|
|
874
|
+
var styles$2 = {"trigger":"IC-Y9bTIVFo-","loadingMore":"PbZLGpbI6ZM-","backToTop":"_6zA6B-jmz6o-","fadeIn":"gZ4DUv82g5I-"};
|
|
875
|
+
styleInject_es.styleInject(css_248z$2);
|
|
895
876
|
|
|
896
877
|
function DataListLoadMoreTrigger() {
|
|
897
878
|
const { onLoadMore } = useDataListContext();
|
|
@@ -899,7 +880,7 @@ function DataListLoadMoreTrigger() {
|
|
|
899
880
|
React.useEffect(() => {
|
|
900
881
|
isInView && (onLoadMore === null || onLoadMore === void 0 ? void 0 : onLoadMore());
|
|
901
882
|
}, [isInView]);
|
|
902
|
-
return (React__default["default"].createElement("div", { ref: inViewRef, className: styles$
|
|
883
|
+
return (React__default["default"].createElement("div", { ref: inViewRef, className: styles$2.trigger, "data-testid": DATA_LOAD_MORE_TEST_ID }));
|
|
903
884
|
}
|
|
904
885
|
|
|
905
886
|
const MAX_DATA_COUNT = 50;
|
|
@@ -908,12 +889,33 @@ function DataListLoadMore({ onBackToTop }) {
|
|
|
908
889
|
const showBackToTop = data.length > MAX_DATA_COUNT && loadingState !== "loadingMore";
|
|
909
890
|
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
910
891
|
React__default["default"].createElement(DataListLoadMoreTrigger, { key: data.length }),
|
|
911
|
-
loadingState === "loadingMore" && (React__default["default"].createElement("div", { "data-testid": DATA_LIST_LOADING_MORE_SPINNER_TEST_ID, className: styles$
|
|
892
|
+
loadingState === "loadingMore" && (React__default["default"].createElement("div", { "data-testid": DATA_LIST_LOADING_MORE_SPINNER_TEST_ID, className: styles$2.loadingMore },
|
|
912
893
|
React__default["default"].createElement(Spinner.Spinner, { size: "small" }))),
|
|
913
|
-
showBackToTop && (React__default["default"].createElement("div", { className: styles$
|
|
894
|
+
showBackToTop && (React__default["default"].createElement("div", { className: styles$2.backToTop },
|
|
914
895
|
React__default["default"].createElement(Button.Button, { label: "Back to top", onClick: onBackToTop, size: "small", variation: "subtle" })))));
|
|
915
896
|
}
|
|
916
897
|
|
|
898
|
+
var css_248z$1 = ".iyg43v-S9yU- {\n display: -ms-flexbox;\n display: flex;\n width: 100%;\n min-height: 44px;\n padding: calc(16px / 2);\n padding: var(--space-small);\n border: none;\n border-radius: 0;\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 text-align: left;\n background: none;\n cursor: pointer;\n transition: background 200ms ease;\n transition: background var(--timing-base) ease;\n -webkit-appearance: none;\n appearance: none;\n -ms-flex-align: center;\n align-items: center;\n gap: calc(16px / 2);\n gap: var(--space-small);\n}\n\n.iyg43v-S9yU-:hover,\n.iyg43v-S9yU-:focus {\n background-color: rgb(250, 246, 219);\n background-color: var(--color-surface--hover);\n}\n\n.AUJNqz93ZDA- {\n font-weight: 500;\n}\n";
|
|
899
|
+
var styles$1 = {"action":"iyg43v-S9yU-","label":"AUJNqz93ZDA-"};
|
|
900
|
+
styleInject_es.styleInject(css_248z$1);
|
|
901
|
+
|
|
902
|
+
function DataListAction({ label, icon, destructive, onClick, }) {
|
|
903
|
+
const { activeItem } = useDataListLayoutActionsContext();
|
|
904
|
+
const color = destructive ? "critical" : "blue";
|
|
905
|
+
return (React__default["default"].createElement("button", { className: styles$1.action, onClick: handleClick },
|
|
906
|
+
icon && React__default["default"].createElement(Icon.Icon, { name: icon, color: color }),
|
|
907
|
+
React__default["default"].createElement(Typography.Typography, { textColor: color },
|
|
908
|
+
React__default["default"].createElement("span", { className: styles$1.label }, label))));
|
|
909
|
+
function handleClick() {
|
|
910
|
+
if (activeItem) {
|
|
911
|
+
onClick === null || onClick === void 0 ? void 0 : onClick(activeItem);
|
|
912
|
+
}
|
|
913
|
+
else {
|
|
914
|
+
onClick === null || onClick === void 0 ? void 0 : onClick();
|
|
915
|
+
}
|
|
916
|
+
}
|
|
917
|
+
}
|
|
918
|
+
|
|
917
919
|
var css_248z = "._0m75bgCVBhk- {\n visibility: hidden;\n}\n";
|
|
918
920
|
var styles = {"hidden":"_0m75bgCVBhk-"};
|
|
919
921
|
styleInject_es.styleInject(css_248z);
|
|
@@ -921,7 +923,6 @@ styleInject_es.styleInject(css_248z);
|
|
|
921
923
|
function DataListLayoutActions() {
|
|
922
924
|
const { itemActionComponent } = useDataListContext();
|
|
923
925
|
const { setHasInLayoutActions } = useDataListLayoutContext();
|
|
924
|
-
const { activeItem } = useDataListLayoutActionsContext();
|
|
925
926
|
const { children: actionsChildren } = (itemActionComponent === null || itemActionComponent === void 0 ? void 0 : itemActionComponent.props) || {};
|
|
926
927
|
const actions = React.Children.toArray(actionsChildren);
|
|
927
928
|
const hasActions = actions.length > 0;
|
|
@@ -934,7 +935,7 @@ function DataListLayoutActions() {
|
|
|
934
935
|
if (!hasActions)
|
|
935
936
|
return null;
|
|
936
937
|
return (React__default["default"].createElement(DataListLayoutActionsWrapper, null,
|
|
937
|
-
React__default["default"].createElement(DataListItemActionsOverflow, { actions: actions
|
|
938
|
+
React__default["default"].createElement(DataListItemActionsOverflow, { actions: actions })));
|
|
938
939
|
}
|
|
939
940
|
function DataListLayoutActionsWrapper({ children }) {
|
|
940
941
|
const { isInLayoutProvider } = useDataListLayoutContext();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jobber/components",
|
|
3
|
-
"version": "4.45.
|
|
3
|
+
"version": "4.45.2",
|
|
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": "52699bf3dddbab1cb9f56e9399952ee5f6c389b3"
|
|
88
88
|
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { ReactElement } from "react";
|
|
2
|
-
import { DataListActionProps, DataListObject, InternalDataListActionProps } from "../../DataList.types";
|
|
3
|
-
interface DataListItemActionsOverflowProps<T extends DataListObject> extends Partial<Pick<InternalDataListActionProps<T>, "item">> {
|
|
4
|
-
readonly actions: ReactElement<DataListActionProps<T>>[];
|
|
5
|
-
}
|
|
6
|
-
export declare function DataListItemActionsOverflow<T extends DataListObject>({ item, actions, }: DataListItemActionsOverflowProps<T>): JSX.Element;
|
|
7
|
-
export {};
|