@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.
@@ -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, InternalDataListActionProps } from "../../DataList.types";
3
- export declare function DataListAction<T extends DataListObject>(_: DataListActionProps<T>): null;
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,3 @@
1
+ /// <reference types="react" />
2
+ import { DataListActionsProps, DataListObject } from "../../DataList.types";
3
+ export declare function DataListActions<T extends DataListObject>({ children, itemsToExpose, }: DataListActionsProps<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
- interface InternalDataListItemActionsProps<T extends DataListObject> {
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;
@@ -1,2 +1 @@
1
1
  export * from "./DataListItemActions";
2
- export * from "./DataListItemActionsOverflow";
@@ -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";
@@ -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 width: 100%;\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.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";
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 variants$1 = {
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
- function DataListItemActionsOverflow({ item, actions, }) {
198
- const [menuPosition, setMenuPosition] = React.useState({ x: 0, y: 0 });
199
- const [showMenu, setShowMenu] = React.useState(false);
200
- return (React__default["default"].createElement(React__default["default"].Fragment, null,
201
- React__default["default"].createElement(Tooltip.Tooltip, { message: "More actions" },
202
- React__default["default"].createElement(Button.Button, { icon: "more", ariaLabel: "More actions", type: "secondary", variation: "subtle", onClick: handleMoreClick })),
203
- actions && (React__default["default"].createElement(DataListActionsMenu, { visible: showMenu, position: menuPosition, onRequestClose: handleClose }, React.Children.map(actions, action => (React__default["default"].createElement(InternalDataListAction, Object.assign({}, action.props, { item: item }))))))));
204
- function handleMoreClick(event) {
205
- setShowMenu(true);
206
- const rect = event.currentTarget.getBoundingClientRect();
207
- const posX = rect.x;
208
- const posY = rect.y + rect.height;
209
- setMenuPosition({ x: posX, y: posY });
210
- }
211
- function handleClose() {
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$8 = ".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";
217
- var styles$8 = {"tags":"WRV-UmQmPzo-","tagCount":"liQeWCMenD0-"};
218
- styleInject_es.styleInject(css_248z$8);
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$8.tags, ref: ref },
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$8.tagCount },
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$7 = ".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";
271
- var styles$7 = {"headerLabel":"fLmJZJJqMcE-","sortable":"UG8cHUT3Hds-"};
272
- styleInject_es.styleInject(css_248z$7);
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$6 = ".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";
275
- var styles$6 = {"sortIcon":"AN5egORYy-0-","active":"F1uTDCK0Sb0-","inactive":"_6KYeQXWXLQ8-"};
276
- styleInject_es.styleInject(css_248z$6);
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$6.sortIcon, "data-testid": SORTING_ICON_TEST_ID },
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$6.active : styles$6.inactive;
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$7.headerLabel, {
295
- [styles$7.sortable]: isSortable,
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({ item, }) {
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
- exposedActions.map(({ props }) => {
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"](styles__default["default"].selectable, {
429
- [styles__default["default"].selected]: selected === null || selected === void 0 ? void 0 : selected.length,
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: styles__default["default"].listItemClickable, to: computedTo, onClick: handleClick }, children));
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: styles__default["default"].listItemClickable, href: href, onClick: handleClick }, children));
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: styles__default["default"].listItemClickable, onClick: handleClick }, children));
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"](styles__default["default"].listItem, {
486
- [styles__default["default"].active]: showMenu && isContextMenuVisible,
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 && (React__default["default"].createElement(InternalDataListItemActions, { item: item })),
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.headerBatchSelect },
634
- React__default["default"].createElement(Text.Text, null,
635
- React__default["default"].createElement("b", null,
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
- React__default["default"].createElement(Button.Button, { label: deselectText, onClick: () => onSelect === null || onSelect === void 0 ? void 0 : onSelect([]), type: "tertiary" }),
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$4 = ".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";
782
- var styles$4 = {"header":"PGOHzrMh374-","stuck":"PGjWc5ocjpI-"};
783
- styleInject_es.styleInject(css_248z$4);
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$4.header, { [styles$4.stuck]: isStuck }) }, children));
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$3 = ".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";
802
- var styles$3 = {"searchInput":"SaPMOnvw-3c-","searchInputVisible":"_3S1-91v2SYI-","searchButton":"_9GlBktsUALw-","withNoFilters":"_3Pjrt42x454-"};
803
- styleInject_es.styleInject(css_248z$3);
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$3.withNoFilters]: !filterComponent && !sorting,
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$3.searchInput, {
826
- [styles$3.searchInputVisible]: visible,
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$3.searchButton },
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$2 = ".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";
848
- var styles$2 = {"emptyStateWrapper":"zg3w9nQga-M-"};
849
- styleInject_es.styleInject(css_248z$2);
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$2.emptyStateWrapper },
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$1 = ".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";
893
- var styles$1 = {"trigger":"IC-Y9bTIVFo-","loadingMore":"PbZLGpbI6ZM-","backToTop":"_6zA6B-jmz6o-","fadeIn":"gZ4DUv82g5I-"};
894
- styleInject_es.styleInject(css_248z$1);
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$1.trigger, "data-testid": DATA_LOAD_MORE_TEST_ID }));
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$1.loadingMore },
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$1.backToTop },
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, item: activeItem })));
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.0",
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": "a9227f6a45605548771faa0858de58efdb3fc75a"
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 {};