@jobber/components 4.41.0 → 4.42.1

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.
@@ -3,12 +3,14 @@ import { DataListLayout } from "./components/DataListLayout";
3
3
  import { DataListFilters } from "./components/DataListFilters";
4
4
  import { DataListSearch } from "./components/DataListSearch";
5
5
  import { DataListEmptyState } from "./components/DataListEmptyState";
6
- import { DataListObject, DataListProps } from "./DataList.types";
7
6
  import { DataListItemActions } from "./components/DataListItemActions";
8
7
  import { DataListAction } from "./components/DataListAction";
8
+ import { DataListLayoutActions } from "./components/DataListLayoutActions";
9
+ import { DataListObject, DataListProps } from "./DataList.types";
9
10
  export declare function DataList<T extends DataListObject>({ sorting, ...props }: DataListProps<T>): JSX.Element;
10
11
  export declare namespace DataList {
11
12
  var Layout: typeof DataListLayout;
13
+ var LayoutActions: typeof DataListLayoutActions;
12
14
  var EmptyState: typeof DataListEmptyState;
13
15
  var Filters: typeof DataListFilters;
14
16
  var Search: typeof DataListSearch;
@@ -148,6 +148,19 @@ export interface DataListContextProps<T extends DataListObject> extends DataList
148
148
  readonly layoutComponents?: ReactElement<DataListLayoutProps<T>>[];
149
149
  readonly itemActionComponent?: ReactElement<DataListItemActionsProps<T>>;
150
150
  }
151
+ export interface DataListLayoutContextProps {
152
+ readonly isInLayoutProvider: boolean;
153
+ /**
154
+ * Determine if the consumer of the DataList manually added an action to the
155
+ * layout. This is used to determine if the DataList should render the
156
+ * action column.
157
+ */
158
+ readonly hasInLayoutActions: boolean;
159
+ readonly setHasInLayoutActions: (state: boolean) => void;
160
+ }
161
+ export interface DataListLayoutActionsContextProps<T extends DataListObject> {
162
+ readonly activeItem?: T;
163
+ }
151
164
  type Fragment<T> = T | T[];
152
165
  export interface DataListItemActionsProps<T extends DataListObject> {
153
166
  /**
@@ -10,9 +10,9 @@ export declare function getCompoundComponent<T>(children: ReactElement | ReactEl
10
10
  */
11
11
  export declare function getCompoundComponents<T>(children: ReactElement | ReactElement[], type: ReactElement<T>["type"]): ReactElement<T>[];
12
12
  /**
13
- * Generate the default elements the DataList would use on the data provided.
13
+ * Generate the default element the DataList would use on the data provided.
14
14
  */
15
- export declare function generateListItemElements<T extends DataListObject>(data: T[]): DataListItemType<T[]>[];
15
+ export declare function generateListItemElement<T extends DataListObject>(item: T): DataListItemType<T[]>;
16
16
  /**
17
17
  * Generate the header elements with the default styling
18
18
  */
@@ -1,4 +1,4 @@
1
- import { PropsWithChildren } from "react";
1
+ import React, { PropsWithChildren } from "react";
2
2
  interface DataListActionsMenuProps {
3
3
  readonly visible: boolean;
4
4
  readonly position: {
@@ -7,5 +7,5 @@ interface DataListActionsMenuProps {
7
7
  };
8
8
  readonly onRequestClose: () => void;
9
9
  }
10
- export declare function DataListActionsMenu({ visible, position, onRequestClose, children, }: PropsWithChildren<DataListActionsMenuProps>): JSX.Element;
10
+ export declare function DataListActionsMenu({ visible, position, onRequestClose, children, }: PropsWithChildren<DataListActionsMenuProps>): React.ReactPortal;
11
11
  export {};
@@ -0,0 +1,9 @@
1
+ import { ReactElement } from "react";
2
+ import { DataListLayoutProps, DataListObject } from "@jobber/components/DataList/DataList.types";
3
+ interface DataListItem<T extends DataListObject> {
4
+ readonly item: T;
5
+ readonly index: number;
6
+ readonly layout: ReactElement<DataListLayoutProps<T>>;
7
+ }
8
+ export declare function DataListItem<T extends DataListObject>({ item, layout, }: DataListItem<T>): JSX.Element;
9
+ export {};
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import { DataListObject } from "../../DataList.types";
2
+ import { DataListObject } from "@jobber/components/DataList/DataList.types";
3
3
  interface ListItemInternalProps<T extends DataListObject> {
4
4
  readonly children: JSX.Element;
5
5
  readonly item: T;
@@ -0,0 +1 @@
1
+ export * from "./DataListItem";
@@ -1,6 +1,6 @@
1
1
  import { ReactElement } from "react";
2
2
  import { DataListActionProps, DataListObject, InternalDataListActionProps } from "../../DataList.types";
3
- interface DataListItemActionsOverflowProps<T extends DataListObject> extends Pick<InternalDataListActionProps<T>, "item"> {
3
+ interface DataListItemActionsOverflowProps<T extends DataListObject> extends Partial<Pick<InternalDataListActionProps<T>, "item">> {
4
4
  readonly actions: ReactElement<DataListActionProps<T>>[];
5
5
  }
6
6
  export declare function DataListItemActionsOverflow<T extends DataListObject>({ item, actions, }: DataListItemActionsOverflowProps<T>): JSX.Element;
@@ -1 +1,2 @@
1
1
  export * from "./DataListItemActions";
2
+ export * from "./DataListItemActionsOverflow";
@@ -0,0 +1,2 @@
1
+ /// <reference types="react" />
2
+ export declare function DataListLayoutActions(): JSX.Element | null;
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ import { DataListLayoutActionsContextProps, DataListObject } from "@jobber/components/DataList/DataList.types";
3
+ export declare const DataListLayoutActionsContext: import("react").Context<DataListLayoutActionsContextProps<DataListObject>>;
4
+ export declare function useDataListLayoutActionsContext(): DataListLayoutActionsContextProps<DataListObject>;
@@ -0,0 +1 @@
1
+ export * from "./DataListLayoutContext";
@@ -0,0 +1 @@
1
+ export { DataListLayoutActions } from "./DataListLayoutActions";
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
- import { Breakpoints } from "../../DataList.const";
3
- import { DataListLayoutProps, DataListObject } from "../../DataList.types";
2
+ import { Breakpoints } from "@jobber/components/DataList/DataList.const";
3
+ import { DataListLayoutProps, DataListObject } from "@jobber/components/DataList/DataList.types";
4
4
  interface DataListItemsProps<T extends DataListObject> {
5
5
  readonly layouts: React.ReactElement<DataListLayoutProps<T>>[] | undefined;
6
6
  readonly mediaMatches?: Record<Breakpoints, boolean>;
@@ -1,11 +1,5 @@
1
1
  /// <reference types="react" />
2
2
  import { DataListContextProps, DataListObject } from "../../DataList.types";
3
- export declare const defaultValues: {
4
- title: string;
5
- data: never[];
6
- headers: {};
7
- children: never[];
8
- selected: never[];
9
- };
3
+ export declare const defaultValues: DataListContextProps<DataListObject>;
10
4
  export declare const DataListContext: import("react").Context<DataListContextProps<DataListObject>>;
11
5
  export declare function useDataListContext(): DataListContextProps<DataListObject>;
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ import { DataListLayoutContextProps } from "@jobber/components/DataList/DataList.types";
3
+ export declare const defaultValues: DataListLayoutContextProps;
4
+ export declare const DataListLayoutContext: import("react").Context<DataListLayoutContextProps>;
5
+ export declare function useDataListLayoutContext(): DataListLayoutContextProps;
@@ -0,0 +1 @@
1
+ export * from "./DataListLayoutContext";
@@ -9,23 +9,26 @@ var Text = require('../Text-e7ed0974.js');
9
9
  var Glimmer = require('../Glimmer-cfa92a88.js');
10
10
  var framerMotion = require('framer-motion');
11
11
  var classnames = require('classnames');
12
- var design = require('@jobber/design');
13
- var isEmpty = require('lodash/isEmpty');
14
- var InlineLabel = require('../InlineLabel-afd5fc6f.js');
15
- var FormatDate = require('../FormatDate-70ea5b43.js');
16
- var Heading = require('../Heading-a1191b15.js');
17
- require('uuid');
18
- require('react-hook-form');
19
- var Checkbox = require('../Checkbox-3bccf65c.js');
20
- var Typography = require('../Typography-fd6f932a.js');
12
+ var noop = require('lodash/noop');
21
13
  require('react-router-dom');
22
14
  var Button = require('../Button-fd8413b2.js');
23
- require('react-dom');
15
+ var design = require('@jobber/design');
16
+ var Typography = require('../Typography-fd6f932a.js');
17
+ var ReactDOM = require('react-dom');
24
18
  var Tooltip = require('../Tooltip-bf67fe6e.js');
25
19
  require('react-popper');
26
20
  var useFocusTrap = require('@jobber/hooks/useFocusTrap');
27
21
  var useRefocusOnActivator = require('@jobber/hooks/useRefocusOnActivator');
28
22
  var useOnKeyDown = require('@jobber/hooks/useOnKeyDown');
23
+ var foundation = require('@jobber/design/foundation');
24
+ var styles$f = require('@jobber/components/DataList/DataList.css');
25
+ require('uuid');
26
+ require('react-hook-form');
27
+ var Checkbox = require('../Checkbox-3bccf65c.js');
28
+ var isEmpty = require('lodash/isEmpty');
29
+ var InlineLabel = require('../InlineLabel-afd5fc6f.js');
30
+ var FormatDate = require('../FormatDate-70ea5b43.js');
31
+ var Heading = require('../Heading-a1191b15.js');
29
32
  var AnimatedSwitcher = require('../AnimatedSwitcher-d1e1ddcf.js');
30
33
  var Icon = require('../Icon-405a216c.js');
31
34
  var useInView = require('@jobber/hooks/useInView');
@@ -48,16 +51,18 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
48
51
 
49
52
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
50
53
  var classnames__default = /*#__PURE__*/_interopDefaultLegacy(classnames);
54
+ var noop__default = /*#__PURE__*/_interopDefaultLegacy(noop);
55
+ var styles__default = /*#__PURE__*/_interopDefaultLegacy(styles$f);
51
56
  var isEmpty__default = /*#__PURE__*/_interopDefaultLegacy(isEmpty);
52
57
  var debounce__default = /*#__PURE__*/_interopDefaultLegacy(debounce);
53
58
 
54
- var css_248z$d = ".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.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}\n\n.jMSVGIAr5tk- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n gap: calc(16px / 4);\n gap: var(--space-smaller);\n margin: calc((16px / 2) * -1) 0;\n margin: calc(calc(16px / 2) * -1) 0;\n margin: calc(var(--space-small) * -1) 0;\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 --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.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\n.qm-SSuWTXkI-.VA9RnQp6nbI- {\n visibility: visible;\n}\n\n.ise8kHCfhCY- .d-79rkMqufg- > :first-child {\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- > :first-child {\n padding-top: 0;\n opacity: 0;\n}\n }\n\n@media (--medium-screens-and-up) {\n\n.ise8kHCfhCY- .d-79rkMqufg- > :first-child {\n padding-top: 0;\n opacity: 0;\n}\n }\n\n.ise8kHCfhCY-:hover .d-79rkMqufg- > :first-child,\n.ise8kHCfhCY-:focus-within .d-79rkMqufg- > :first-child,\n.ise8kHCfhCY- .d-79rkMqufg-._4L7iXXzLr5k- > :first-child {\n opacity: 1;\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";
55
- var styles$d = {"wrapper":"TkdrExYnvcY-","titleContainer":"IcAlZHoB4LI-","headerFilters":"TFO76ysivmg-","headerTitles":"jGHZZYZm1ZY-","headerBatchSelect":"jMSVGIAr5tk-","listItem":"ise8kHCfhCY-","active":"Pc0JGX6jCD4-","selectable":"d-79rkMqufg-","selectAllCheckbox":"qm-SSuWTXkI-","visible":"VA9RnQp6nbI-","selected":"_4L7iXXzLr5k-","filtering":"Kkp-IYmwq-s-","filteringSpinner":"m-eCShL7TU4-"};
56
- styleInject_es.styleInject(css_248z$d);
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.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}\n\n.jMSVGIAr5tk- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n gap: calc(16px / 4);\n gap: var(--space-smaller);\n margin: calc((16px / 2) * -1) 0;\n margin: calc(calc(16px / 2) * -1) 0;\n margin: calc(var(--space-small) * -1) 0;\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 --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.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\n.qm-SSuWTXkI-.VA9RnQp6nbI- {\n visibility: visible;\n}\n\n.ise8kHCfhCY- .d-79rkMqufg- > :first-child {\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- > :first-child {\n padding-top: 0;\n opacity: 0;\n}\n }\n\n@media (--medium-screens-and-up) {\n\n.ise8kHCfhCY- .d-79rkMqufg- > :first-child {\n padding-top: 0;\n opacity: 0;\n}\n }\n\n.ise8kHCfhCY-:hover .d-79rkMqufg- > :first-child,\n.ise8kHCfhCY-:focus-within .d-79rkMqufg- > :first-child,\n.ise8kHCfhCY- .d-79rkMqufg-._4L7iXXzLr5k- > :first-child {\n opacity: 1;\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";
60
+ var styles$e = {"wrapper":"TkdrExYnvcY-","titleContainer":"IcAlZHoB4LI-","headerFilters":"TFO76ysivmg-","headerTitles":"jGHZZYZm1ZY-","headerBatchSelect":"jMSVGIAr5tk-","listItem":"ise8kHCfhCY-","active":"Pc0JGX6jCD4-","selectable":"d-79rkMqufg-","selectAllCheckbox":"qm-SSuWTXkI-","visible":"VA9RnQp6nbI-","selected":"_4L7iXXzLr5k-","filtering":"Kkp-IYmwq-s-","filteringSpinner":"m-eCShL7TU4-"};
61
+ styleInject_es.styleInject(css_248z$e);
57
62
 
58
- var css_248z$c = ".F56prQsXm3A- {\n min-width: 80px;\n margin-left: calc(16px / 2);\n margin-left: var(--space-small);\n}\n";
59
- var styles$c = {"results":"F56prQsXm3A-"};
60
- styleInject_es.styleInject(css_248z$c);
63
+ var css_248z$d = ".F56prQsXm3A- {\n min-width: 80px;\n margin-left: calc(16px / 2);\n margin-left: var(--space-small);\n}\n";
64
+ var styles$d = {"results":"F56prQsXm3A-"};
65
+ styleInject_es.styleInject(css_248z$d);
61
66
 
62
67
  const DATALIST_TOTALCOUNT_TEST_ID = "ATL-DataList-TotalCount";
63
68
  function DataListTotalCount({ totalCount, loading, }) {
@@ -73,13 +78,60 @@ function DataListTotalCount({ totalCount, loading, }) {
73
78
  totalCount.toLocaleString(),
74
79
  " results)"));
75
80
  }
76
- return (React__default["default"].createElement("div", { className: styles$c.results, "data-testid": DATALIST_TOTALCOUNT_TEST_ID }, output));
81
+ return (React__default["default"].createElement("div", { className: styles$d.results, "data-testid": DATALIST_TOTALCOUNT_TEST_ID }, output));
82
+ }
83
+
84
+ var css_248z$c = ".Rh--6fVpkm4- {\n padding: calc(16px / 2);\n padding: var(--space-small);\n}\n\n.zbS7UvpVoWI- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-pack: justify;\n justify-content: space-between;\n height: calc(16px * 3);\n height: var(--space-largest);\n padding: calc(16px * 1) 0;\n padding: var(--space-base) 0;\n}\n";
85
+ var styles$c = {"loadingItem":"Rh--6fVpkm4-","mobileLoadingState":"zbS7UvpVoWI-"};
86
+ styleInject_es.styleInject(css_248z$c);
87
+
88
+ const defaultValues$1 = {
89
+ title: "",
90
+ data: [],
91
+ headers: {},
92
+ children: [],
93
+ selected: [],
94
+ };
95
+ const DataListContext = React.createContext(defaultValues$1);
96
+ function useDataListContext() {
97
+ return React.useContext(DataListContext);
98
+ }
99
+
100
+ const defaultValues = {
101
+ isInLayoutProvider: false,
102
+ hasInLayoutActions: false,
103
+ setHasInLayoutActions: noop__default["default"],
104
+ };
105
+ const DataListLayoutContext = React.createContext(defaultValues);
106
+ function useDataListLayoutContext() {
107
+ return React.useContext(DataListLayoutContext);
77
108
  }
78
109
 
79
- var css_248z$b = ".Rh--6fVpkm4- {\n padding: calc(16px / 2);\n padding: var(--space-small);\n}\n\n.zbS7UvpVoWI- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-pack: justify;\n justify-content: space-between;\n height: calc(16px * 3);\n height: var(--space-largest);\n padding: calc(16px * 1) 0;\n padding: var(--space-base) 0;\n}\n";
80
- var styles$b = {"loadingItem":"Rh--6fVpkm4-","mobileLoadingState":"zbS7UvpVoWI-"};
110
+ var css_248z$b = ".jHcHGQ-HDbk- {\n display: -ms-flexbox;\n display: flex;\n position: absolute;\n top: calc((16px / 2) * -1);\n top: calc(calc(16px / 2) * -1);\n top: calc(var(--space-small) * -1);\n right: 0;\n z-index: 6;\n z-index: var(--elevation-menu);\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 gap: calc(16px / 4);\n gap: var(--space-smaller);\n}\n";
111
+ var styles$b = {"menu":"jHcHGQ-HDbk-"};
81
112
  styleInject_es.styleInject(css_248z$b);
82
113
 
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: () => onClick === null || onClick === void 0 ? void 0 : onClick(item) },
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
+ }
130
+
131
+ 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: 6;\n z-index: var(--elevation-menu);\n width: 100%;\n height: 100%;\n}\n";
132
+ var styles$9 = {"menu":"aokwZU8jbWU-","overlay":"XtVRP97TVSE-"};
133
+ styleInject_es.styleInject(css_248z$9);
134
+
83
135
  const EMPTY_RESULTS_MESSAGE = "List is looking empty";
84
136
  const EMPTY_FILTER_RESULTS_MESSAGE = "No results for selected filters";
85
137
  const EMPTY_STATE_ACTION_BUTTON_ONLY_ERROR = "DataListEmptyState action prop must be a Button component";
@@ -101,9 +153,137 @@ const DATA_LOAD_MORE_TEST_ID = "ATL-DataList-LoadMore-trigger";
101
153
  const TRANSITION_DURATION_IN_SECONDS = design.tokens["timing-base"] / 1000;
102
154
  const TRANSITION_DELAY_IN_SECONDS = design.tokens["timing-quick"] / 1000;
103
155
 
104
- var css_248z$a = ".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";
105
- var styles$a = {"tags":"WRV-UmQmPzo-","tagCount":"liQeWCMenD0-"};
106
- styleInject_es.styleInject(css_248z$a);
156
+ const variants$1 = {
157
+ hidden: { opacity: 0, y: -10 },
158
+ visible: { opacity: 1, y: 0 },
159
+ };
160
+ function DataListActionsMenu({ visible = false, position, onRequestClose, children, }) {
161
+ const [ref, setRef] = React.useState();
162
+ useRefocusOnActivator.useRefocusOnActivator(visible);
163
+ const focusTrapRef = useFocusTrap.useFocusTrap(visible);
164
+ useOnKeyDown.useOnKeyDown(onRequestClose, "Escape");
165
+ return ReactDOM.createPortal(React__default["default"].createElement(framerMotion.AnimatePresence, null, visible && (React__default["default"].createElement(React__default["default"].Fragment, null,
166
+ React__default["default"].createElement("div", { className: styles$9.overlay, onClick: onRequestClose }),
167
+ 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 },
168
+ React__default["default"].createElement("div", { tabIndex: 0, ref: focusTrapRef }, children))))), document.body);
169
+ function getPositionCssVars() {
170
+ const { posX, posY } = getPosition();
171
+ return {
172
+ "--actions-menu-x": `${posX}px`,
173
+ "--actions-menu-y": `${posY}px`,
174
+ };
175
+ }
176
+ function getPosition() {
177
+ const rect = ref === null || ref === void 0 ? void 0 : ref.getBoundingClientRect();
178
+ const { width = 0, height = 0 } = rect || {};
179
+ const { x = 0, y = 0 } = position;
180
+ const xIsOffScreen = x + width > window.innerWidth;
181
+ const yIsOffScreen = y + height > window.innerHeight;
182
+ const xOffSet = x + width - window.innerWidth + foundation.tokens["space-base"];
183
+ const yOffSet = y + height - window.innerHeight;
184
+ const newPosX = Math.floor(xIsOffScreen ? x - xOffSet : x);
185
+ const newPosY = Math.floor(yIsOffScreen ? y - yOffSet : y);
186
+ return { posX: newPosX, posY: newPosY };
187
+ }
188
+ }
189
+
190
+ function DataListItemActionsOverflow({ item, actions, }) {
191
+ const [menuPosition, setMenuPosition] = React.useState({ x: 0, y: 0 });
192
+ const [showMenu, setShowMenu] = React.useState(false);
193
+ return (React__default["default"].createElement(React__default["default"].Fragment, null,
194
+ React__default["default"].createElement(Tooltip.Tooltip, { message: "More actions" },
195
+ React__default["default"].createElement(Button.Button, { icon: "more", ariaLabel: "More actions", type: "secondary", variation: "subtle", onClick: handleMoreClick })),
196
+ item && (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 }))))))));
197
+ function handleMoreClick(event) {
198
+ setShowMenu(true);
199
+ const rect = event.currentTarget.getBoundingClientRect();
200
+ const posX = rect.x;
201
+ const posY = rect.y + rect.height;
202
+ setMenuPosition({ x: posX, y: posY });
203
+ }
204
+ function handleClose() {
205
+ setShowMenu(false);
206
+ }
207
+ }
208
+
209
+ // This component is meant to capture the props of the DataList.ItemActions
210
+ function DataListItemActions(
211
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
212
+ _) {
213
+ return null;
214
+ }
215
+ const variants = {
216
+ hidden: { opacity: 0, y: 10 },
217
+ visible: { opacity: 1, y: 0 },
218
+ };
219
+ function InternalDataListItemActions({ item, }) {
220
+ const { itemActionComponent } = useDataListContext();
221
+ if (!itemActionComponent)
222
+ return null;
223
+ const { children } = itemActionComponent.props;
224
+ const childrenArray = React.Children.toArray(children).filter(React.isValidElement);
225
+ const exposedActions = getExposedActions(childrenArray);
226
+ childrenArray.splice(0, exposedActions.length);
227
+ return (React__default["default"].createElement(framerMotion.motion.div, { variants: variants, initial: "hidden", animate: "visible", exit: "hidden", transition: {
228
+ duration: TRANSITION_DURATION_IN_SECONDS,
229
+ delay: TRANSITION_DELAY_IN_SECONDS,
230
+ }, className: styles$b.menu, onContextMenu: handleContextMenu },
231
+ exposedActions.map(({ props }) => {
232
+ if (!props.icon)
233
+ return null;
234
+ return (React__default["default"].createElement(Tooltip.Tooltip, { key: props.label, message: props.label },
235
+ 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" })));
236
+ }),
237
+ React__default["default"].createElement(DataListItemActionsOverflow, { actions: childrenArray, item: item })));
238
+ }
239
+ function handleContextMenu(event) {
240
+ event.stopPropagation();
241
+ }
242
+ function getExposedActions(childrenArray) {
243
+ const firstTwoChildren = childrenArray.slice(0, 2);
244
+ return firstTwoChildren.reduce((result, child, i) => {
245
+ const hasIcon = Boolean(child.props.icon);
246
+ const isFirstChild = i === 0;
247
+ if (isFirstChild && hasIcon) {
248
+ return [...result, child];
249
+ }
250
+ const isSecondChild = i === 1;
251
+ const hasFirstChild = result.length === 1;
252
+ if (isSecondChild && hasIcon && hasFirstChild) {
253
+ return [...result, child];
254
+ }
255
+ return result;
256
+ }, []);
257
+ }
258
+
259
+ const DataListLayoutActionsContext = React.createContext({ activeItem: undefined });
260
+ function useDataListLayoutActionsContext() {
261
+ return React.useContext(DataListLayoutActionsContext);
262
+ }
263
+
264
+ function DataListItemInternal({ children, item, }) {
265
+ const { selected, onSelect } = useDataListContext();
266
+ if (selected !== undefined && onSelect) {
267
+ return (React__default["default"].createElement("div", { className: classnames__default["default"](styles__default["default"].selectable, {
268
+ [styles__default["default"].selected]: selected === null || selected === void 0 ? void 0 : selected.length,
269
+ }) },
270
+ React__default["default"].createElement(Checkbox.Checkbox, { checked: selected === null || selected === void 0 ? void 0 : selected.includes(item.id), onChange: handleChange }),
271
+ children));
272
+ }
273
+ return children;
274
+ function handleChange() {
275
+ if (selected === null || selected === void 0 ? void 0 : selected.includes(item.id)) {
276
+ onSelect === null || onSelect === void 0 ? void 0 : onSelect(selected === null || selected === void 0 ? void 0 : selected.filter(id => id !== item.id));
277
+ }
278
+ else if (selected) {
279
+ onSelect === null || onSelect === void 0 ? void 0 : onSelect([...selected, item.id]);
280
+ }
281
+ }
282
+ }
283
+
284
+ 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";
285
+ var styles$8 = {"tags":"WRV-UmQmPzo-","tagCount":"liQeWCMenD0-"};
286
+ styleInject_es.styleInject(css_248z$8);
107
287
 
108
288
  function DataListTags({ items }) {
109
289
  const ref = React.useRef(null);
@@ -123,10 +303,10 @@ function DataListTags({ items }) {
123
303
  elements === null || elements === void 0 ? void 0 : elements.forEach(element => observer.unobserve(element));
124
304
  };
125
305
  }, [items]);
126
- return (React__default["default"].createElement("div", { className: styles$a.tags, ref: ref },
306
+ return (React__default["default"].createElement("div", { className: styles$8.tags, ref: ref },
127
307
  items.filter(Boolean).map((tag, index) => (React__default["default"].createElement("div", { key: tag, "data-tag-element": index },
128
308
  React__default["default"].createElement(InlineLabel.InlineLabel, null, tag)))),
129
- Boolean(visibleItems) && (React__default["default"].createElement("div", { className: styles$a.tagCount },
309
+ Boolean(visibleItems) && (React__default["default"].createElement("div", { className: styles$8.tagCount },
130
310
  React__default["default"].createElement(Text.Text, null,
131
311
  "+",
132
312
  visibleItems)))));
@@ -155,44 +335,32 @@ function buildIntersectionThreshold(items) {
155
335
  return thresholds;
156
336
  }
157
337
 
158
- var css_248z$9 = ".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";
159
- var styles$9 = {"headerLabel":"fLmJZJJqMcE-","sortable":"UG8cHUT3Hds-"};
160
- styleInject_es.styleInject(css_248z$9);
338
+ 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";
339
+ var styles$7 = {"headerLabel":"fLmJZJJqMcE-","sortable":"UG8cHUT3Hds-"};
340
+ styleInject_es.styleInject(css_248z$7);
161
341
 
162
- var css_248z$8 = ".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";
163
- var styles$8 = {"sortIcon":"AN5egORYy-0-","active":"F1uTDCK0Sb0-","inactive":"_6KYeQXWXLQ8-"};
164
- styleInject_es.styleInject(css_248z$8);
342
+ 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";
343
+ var styles$6 = {"sortIcon":"AN5egORYy-0-","active":"F1uTDCK0Sb0-","inactive":"_6KYeQXWXLQ8-"};
344
+ styleInject_es.styleInject(css_248z$6);
165
345
 
166
346
  const SORTING_ICON_TEST_ID = "ATL-DataList-Sorting-Icon";
167
347
  function DataListSortingArrows({ order }) {
168
- return (React__default["default"].createElement("div", { className: styles$8.sortIcon, "data-testid": SORTING_ICON_TEST_ID },
348
+ return (React__default["default"].createElement("div", { className: styles$6.sortIcon, "data-testid": SORTING_ICON_TEST_ID },
169
349
  React__default["default"].createElement("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
170
350
  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" }),
171
351
  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" }))));
172
352
  function getActiveClassName(targetOrder) {
173
- return order === targetOrder ? styles$8.active : styles$8.inactive;
353
+ return order === targetOrder ? styles$6.active : styles$6.inactive;
174
354
  }
175
355
  }
176
356
 
177
- const defaultValues = {
178
- title: "",
179
- data: [],
180
- headers: {},
181
- children: [],
182
- selected: [],
183
- };
184
- const DataListContext = React.createContext(defaultValues);
185
- function useDataListContext() {
186
- return React.useContext(DataListContext);
187
- }
188
-
189
357
  function DataListHeaderTile({ headers, headerKey, }) {
190
358
  const { sorting } = useDataListContext();
191
359
  const isSortable = sorting === null || sorting === void 0 ? void 0 : sorting.sortable.includes(headerKey);
192
360
  const sortingState = sorting === null || sorting === void 0 ? void 0 : sorting.state;
193
361
  const Tag = isSortable ? "button" : "div";
194
- return (React__default["default"].createElement(Tag, { className: classnames__default["default"](styles$9.headerLabel, {
195
- [styles$9.sortable]: isSortable,
362
+ return (React__default["default"].createElement(Tag, { className: classnames__default["default"](styles$7.headerLabel, {
363
+ [styles$7.sortable]: isSortable,
196
364
  }), onClick: handleOnClick },
197
365
  React__default["default"].createElement(Text.Text, { maxLines: "single" }, headers[headerKey]),
198
366
  (sortingState === null || sortingState === void 0 ? void 0 : sortingState.key) === headerKey && (React__default["default"].createElement(DataListSortingArrows, { order: sortingState.order }))));
@@ -231,10 +399,10 @@ function getCompoundComponents(children, type) {
231
399
  return elements;
232
400
  }
233
401
  /**
234
- * Generate the default elements the DataList would use on the data provided.
402
+ * Generate the default element the DataList would use on the data provided.
235
403
  */
236
- function generateListItemElements(data) {
237
- return data.map(item => Object.keys(item).reduce((acc, key) => {
404
+ function generateListItemElement(item) {
405
+ return Object.keys(item).reduce((acc, key) => {
238
406
  const currentItem = item[key];
239
407
  if (!currentItem) {
240
408
  return acc;
@@ -256,7 +424,7 @@ function generateListItemElements(data) {
256
424
  acc[key] = React__default["default"].createElement(Text.Text, { variation: "subdued" }, currentItem);
257
425
  }
258
426
  return acc;
259
- }, {}));
427
+ }, {});
260
428
  }
261
429
  /**
262
430
  * Generate the header elements with the default styling
@@ -269,6 +437,41 @@ function sortSizeProp(sizeProp) {
269
437
  return sizeProp.sort((a, b) => BREAKPOINTS.indexOf(a) - BREAKPOINTS.indexOf(b));
270
438
  }
271
439
 
440
+ function DataListItem({ item, layout, }) {
441
+ const { itemActionComponent } = useDataListContext();
442
+ const { hasInLayoutActions } = useDataListLayoutContext();
443
+ const [showMenu, setShowMenu] = React.useState(false);
444
+ const [contextPosition, setContextPosition] = React.useState();
445
+ const generatedItem = React.useMemo(() => generateListItemElement(item), [item]);
446
+ const contextMenuActions = itemActionComponent === null || itemActionComponent === void 0 ? void 0 : itemActionComponent.props.children;
447
+ const isContextMenuVisible = Boolean(contextPosition);
448
+ const shouldShowContextMenu = showMenu && isContextMenuVisible && Boolean(contextMenuActions);
449
+ return (React__default["default"].createElement(DataListLayoutActionsContext.Provider, { value: { activeItem: item } },
450
+ React__default["default"].createElement("div", { onMouseEnter: handleShowMenu, onMouseLeave: handleHideMenu, onContextMenu: handleContextMenu, className: classnames__default["default"](styles__default["default"].listItem, {
451
+ [styles__default["default"].active]: showMenu && isContextMenuVisible,
452
+ }), key: item.id },
453
+ React__default["default"].createElement(DataListItemInternal, { item: item }, layout.props.children(generatedItem)),
454
+ React__default["default"].createElement(framerMotion.AnimatePresence, null,
455
+ showMenu && !hasInLayoutActions && (React__default["default"].createElement(InternalDataListItemActions, { item: item })),
456
+ React__default["default"].createElement(DataListActionsMenu, { key: item.id, visible: shouldShowContextMenu, position: contextPosition || { x: 0, y: 0 }, onRequestClose: () => setContextPosition(undefined) }, contextMenuActions &&
457
+ React.Children.map(contextMenuActions, action => (React__default["default"].createElement(InternalDataListAction, Object.assign({ key: item.id }, action.props, { item: item })))))))));
458
+ function handleShowMenu() {
459
+ setShowMenu(true);
460
+ }
461
+ function handleHideMenu() {
462
+ setShowMenu(false);
463
+ }
464
+ function handleContextMenu(event) {
465
+ if (!contextMenuActions || isContextMenuVisible)
466
+ return;
467
+ event.preventDefault();
468
+ setContextPosition({
469
+ x: event.clientX,
470
+ y: event.clientY,
471
+ });
472
+ }
473
+ }
474
+
272
475
  function DataListLayoutInternal({ layouts, renderLayout, mediaMatches, }) {
273
476
  const sizePropsOfLayouts = layouts === null || layouts === void 0 ? void 0 : layouts.map(layout => layout.props.size || "xs");
274
477
  const layoutToRender = layouts === null || layouts === void 0 ? void 0 : layouts.find(layout => {
@@ -301,200 +504,26 @@ function isLayoutVisible({ layoutSize, mediaMatches, sizePropsOfLayouts, }) {
301
504
  return isVisibleBreakpoint && largerLayoutIsNotVisible;
302
505
  }
303
506
 
304
- function DataListItemInternal({ children, item, }) {
305
- const { selected, onSelect } = useDataListContext();
306
- if (selected !== undefined && onSelect) {
307
- return (React__default["default"].createElement("div", { className: classnames__default["default"](styles$d.selectable, {
308
- [styles$d.selected]: selected === null || selected === void 0 ? void 0 : selected.length,
309
- }) },
310
- React__default["default"].createElement(Checkbox.Checkbox, { checked: selected === null || selected === void 0 ? void 0 : selected.includes(item.id), onChange: handleChange }),
311
- children));
312
- }
313
- return children;
314
- function handleChange() {
315
- if (selected === null || selected === void 0 ? void 0 : selected.includes(item.id)) {
316
- onSelect === null || onSelect === void 0 ? void 0 : onSelect(selected === null || selected === void 0 ? void 0 : selected.filter(id => id !== item.id));
317
- }
318
- else if (selected) {
319
- onSelect === null || onSelect === void 0 ? void 0 : onSelect([...selected, item.id]);
320
- }
321
- }
322
- }
323
-
324
- var css_248z$7 = ".jHcHGQ-HDbk- {\n display: -ms-flexbox;\n display: flex;\n position: absolute;\n top: calc((16px / 2) * -1);\n top: calc(calc(16px / 2) * -1);\n top: calc(var(--space-small) * -1);\n right: 0;\n z-index: 6;\n z-index: var(--elevation-menu);\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 gap: calc(16px / 4);\n gap: var(--space-smaller);\n}\n";
325
- var styles$7 = {"menu":"jHcHGQ-HDbk-"};
326
- styleInject_es.styleInject(css_248z$7);
327
-
328
- var css_248z$6 = ".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 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";
329
- var styles$6 = {"action":"iyg43v-S9yU-","label":"AUJNqz93ZDA-"};
330
- styleInject_es.styleInject(css_248z$6);
331
-
332
- function DataListAction(
333
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
334
- _) {
335
- return null;
336
- }
337
- function InternalDataListAction({ label, icon, destructive, onClick, item, }) {
338
- const color = destructive ? "critical" : "blue";
339
- return (React__default["default"].createElement("button", { className: styles$6.action, onClick: () => onClick === null || onClick === void 0 ? void 0 : onClick(item) },
340
- icon && React__default["default"].createElement(Icon.Icon, { name: icon, color: color }),
341
- React__default["default"].createElement(Typography.Typography, { textColor: color },
342
- React__default["default"].createElement("span", { className: styles$6.label }, label))));
343
- }
344
-
345
- var css_248z$5 = ".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: 6;\n z-index: var(--elevation-menu);\n width: 100%;\n height: 100%;\n}\n";
346
- var styles$5 = {"menu":"aokwZU8jbWU-","overlay":"XtVRP97TVSE-"};
347
- styleInject_es.styleInject(css_248z$5);
348
-
349
- const variants$1 = {
350
- hidden: { opacity: 0, y: -10 },
351
- visible: { opacity: 1, y: 0 },
352
- };
353
- function DataListActionsMenu({ visible = false, position, onRequestClose, children, }) {
354
- const [ref, setRef] = React.useState();
355
- useRefocusOnActivator.useRefocusOnActivator(visible);
356
- const focusTrapRef = useFocusTrap.useFocusTrap(visible);
357
- useOnKeyDown.useOnKeyDown(onRequestClose, "Escape");
358
- return (React__default["default"].createElement(framerMotion.AnimatePresence, null, visible && (React__default["default"].createElement(React__default["default"].Fragment, null,
359
- React__default["default"].createElement("div", { className: styles$5.overlay, onClick: onRequestClose }),
360
- 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$5.menu, style: getPositionCssVars() },
361
- React__default["default"].createElement("div", { tabIndex: 0, ref: focusTrapRef }, children))))));
362
- function getPositionCssVars() {
363
- const { posX, posY } = getPosition();
364
- return {
365
- "--actions-menu-x": `${posX}px`,
366
- "--actions-menu-y": `${posY}px`,
367
- };
368
- }
369
- function getPosition() {
370
- const rect = ref === null || ref === void 0 ? void 0 : ref.getBoundingClientRect();
371
- const { width = 0, height = 0 } = rect || {};
372
- const { x = 0, y = 0 } = position;
373
- const xIsOffScreen = x + width > window.innerWidth;
374
- const yIsOffScreen = y + height > window.innerHeight;
375
- const yOffSet = y + height - window.innerHeight;
376
- const newPosX = Math.floor(xIsOffScreen ? x - width : x);
377
- const newPosY = Math.floor(yIsOffScreen ? y - yOffSet : y);
378
- return { posX: newPosX, posY: newPosY };
379
- }
380
- }
381
-
382
- function DataListItemActionsOverflow({ item, actions, }) {
383
- const [menuPosition, setMenuPosition] = React.useState({ x: 0, y: 0 });
384
- const [showMenu, setShowMenu] = React.useState(false);
385
- return (React__default["default"].createElement(React__default["default"].Fragment, null,
386
- React__default["default"].createElement(Tooltip.Tooltip, { message: "More actions" },
387
- React__default["default"].createElement(Button.Button, { icon: "more", ariaLabel: "More actions", type: "secondary", variation: "subtle", onClick: handleMoreClick })),
388
- 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 })))))));
389
- function handleMoreClick(event) {
390
- setShowMenu(true);
391
- const rect = event.currentTarget.getBoundingClientRect();
392
- const posX = rect.x + rect.width;
393
- const posY = rect.y + rect.height;
394
- setMenuPosition({ x: posX, y: posY });
395
- }
396
- function handleClose() {
397
- setShowMenu(false);
398
- }
399
- }
400
-
401
- // This component is meant to capture the props of the DataList.ItemActions
402
- function DataListItemActions(
403
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
404
- _) {
405
- return null;
406
- }
407
- const variants = {
408
- hidden: { opacity: 0, y: 10 },
409
- visible: { opacity: 1, y: 0 },
410
- };
411
- function InternalDataListItemActions({ item, }) {
412
- const { itemActionComponent } = useDataListContext();
413
- if (!itemActionComponent)
414
- return null;
415
- const { children } = itemActionComponent.props;
416
- const childrenArray = React.Children.toArray(children).filter(React.isValidElement);
417
- const exposedActions = getExposedActions(childrenArray);
418
- childrenArray.splice(0, exposedActions.length);
419
- return (React__default["default"].createElement(framerMotion.motion.div, { variants: variants, initial: "hidden", animate: "visible", exit: "hidden", transition: {
420
- duration: TRANSITION_DURATION_IN_SECONDS,
421
- delay: TRANSITION_DELAY_IN_SECONDS,
422
- }, className: styles$7.menu, onContextMenu: handleContextMenu },
423
- exposedActions.map(({ props }) => {
424
- if (!props.icon)
425
- return null;
426
- return (React__default["default"].createElement(Tooltip.Tooltip, { key: props.label, message: props.label },
427
- 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" })));
428
- }),
429
- React__default["default"].createElement(DataListItemActionsOverflow, { actions: childrenArray, item: item })));
430
- }
431
- function handleContextMenu(event) {
432
- event.stopPropagation();
433
- }
434
- function getExposedActions(childrenArray) {
435
- const firstTwoChildren = childrenArray.slice(0, 2);
436
- return firstTwoChildren.reduce((result, child, i) => {
437
- const hasIcon = Boolean(child.props.icon);
438
- const isFirstChild = i === 0;
439
- if (isFirstChild && hasIcon) {
440
- return [...result, child];
441
- }
442
- const isSecondChild = i === 1;
443
- const hasFirstChild = result.length === 1;
444
- if (isSecondChild && hasIcon && hasFirstChild) {
445
- return [...result, child];
446
- }
447
- return result;
448
- }, []);
449
- }
450
-
451
507
  function DataListItems({ layouts, mediaMatches, data, }) {
452
- const { itemActionComponent } = useDataListContext();
453
- const elementData = React.useMemo(() => generateListItemElements(data), [data]);
454
- const [activeID, setActiveID] = React.useState();
455
- const [contextPosition, setContextPosition] = React.useState();
456
- const contextMenuActions = itemActionComponent === null || itemActionComponent === void 0 ? void 0 : itemActionComponent.props.children;
457
- const isContextMenuVisible = Boolean(contextPosition);
458
- return (React__default["default"].createElement(DataListLayoutInternal, { layouts: layouts, mediaMatches: mediaMatches, renderLayout: layout => (React__default["default"].createElement(React__default["default"].Fragment, null, elementData.map((child, i) => {
459
- const item = data[i];
460
- const isActive = activeID === item.id;
461
- const shouldShowContextMenu = isActive && isContextMenuVisible && Boolean(contextMenuActions);
462
- return (React__default["default"].createElement("div", { onMouseEnter: handleMouseEnter(item), onMouseLeave: handleMouseLeave, onContextMenu: handleContextMenu, className: classnames__default["default"](styles$d.listItem, {
463
- [styles$d.active]: isActive && isContextMenuVisible,
464
- }), key: item.id },
465
- React__default["default"].createElement(DataListItemInternal, { item: data[i] }, layout.props.children(child)),
466
- React__default["default"].createElement(framerMotion.AnimatePresence, null,
467
- isActive && React__default["default"].createElement(InternalDataListItemActions, { item: item }),
468
- React__default["default"].createElement(DataListActionsMenu, { key: item.id, visible: shouldShowContextMenu, position: contextPosition || { x: 0, y: 0 }, onRequestClose: () => setContextPosition(undefined) }, contextMenuActions &&
469
- React.Children.map(contextMenuActions, action => (React__default["default"].createElement(InternalDataListAction, Object.assign({ key: item.id }, action.props, { item: item }))))))));
470
- }))) }));
471
- function handleMouseEnter(item) {
472
- return () => setActiveID(item.id);
473
- }
474
- function handleMouseLeave() {
475
- !isContextMenuVisible && setActiveID(undefined);
476
- }
477
- function handleContextMenu(event) {
478
- if (!contextMenuActions || isContextMenuVisible)
479
- return;
480
- event.preventDefault();
481
- setContextPosition({
482
- x: event.clientX,
483
- y: event.clientY,
484
- });
485
- }
508
+ const [hasInLayoutActions, setHasInLayoutActions] = React.useState(false);
509
+ return (React__default["default"].createElement(DataListLayoutContext.Provider, { value: {
510
+ isInLayoutProvider: true,
511
+ hasInLayoutActions,
512
+ setHasInLayoutActions,
513
+ } },
514
+ 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 }))))) })));
486
515
  }
487
516
 
488
517
  function DataListHeaderCheckbox({ children }) {
489
518
  const { data, totalCount, selected = [], onSelectAll, onSelect, } = useDataListContext();
490
519
  if (!onSelectAll && !onSelect)
491
520
  return children;
492
- return (React__default["default"].createElement("div", { className: classnames__default["default"](styles$d.selectable) },
493
- React__default["default"].createElement("div", { className: classnames__default["default"](styles$d.selectAllCheckbox, {
494
- [styles$d.visible]: Boolean(onSelectAll),
521
+ return (React__default["default"].createElement("div", { className: classnames__default["default"](styles$e.selectable) },
522
+ React__default["default"].createElement("div", { className: classnames__default["default"](styles$e.selectAllCheckbox, {
523
+ [styles$e.visible]: Boolean(onSelectAll),
495
524
  }) },
496
525
  React__default["default"].createElement(Checkbox.Checkbox, { checked: isAllSelected(), indeterminate: selected.length > 0 && !isAllSelected(), onChange: onSelectAll })),
497
- React__default["default"].createElement(AnimatedSwitcher.AnimatedSwitcher, { switched: Boolean(selected.length), initialChild: children, switchTo: React__default["default"].createElement("div", { className: styles$d.headerBatchSelect },
526
+ React__default["default"].createElement(AnimatedSwitcher.AnimatedSwitcher, { switched: Boolean(selected.length), initialChild: children, switchTo: React__default["default"].createElement("div", { className: styles$e.headerBatchSelect },
498
527
  React__default["default"].createElement(Text.Text, null,
499
528
  React__default["default"].createElement("b", null,
500
529
  selected.length,
@@ -555,7 +584,7 @@ function DataListHeader({ layouts, mediaMatches, headerData, }) {
555
584
  const showHeader = useShowHeader();
556
585
  if (!showHeader || !headerData)
557
586
  return null;
558
- return (React__default["default"].createElement(DataListLayoutInternal, { layouts: layouts, mediaMatches: mediaMatches, renderLayout: layout => (React__default["default"].createElement("div", { className: classnames__default["default"](styles$d.headerTitles) },
587
+ return (React__default["default"].createElement(DataListLayoutInternal, { layouts: layouts, mediaMatches: mediaMatches, renderLayout: layout => (React__default["default"].createElement("div", { className: classnames__default["default"](styles$e.headerTitles) },
559
588
  React__default["default"].createElement(DataListHeaderCheckbox, null, layout.props.children(headerData)))) }));
560
589
  }
561
590
 
@@ -571,13 +600,13 @@ function DataListLoadingState({ headers, layouts, mediaMatches, }) {
571
600
  if (layout.props.size === "xs") {
572
601
  return React__default["default"].createElement(LoadingStateXSBreakpoint, null);
573
602
  }
574
- return (React__default["default"].createElement(React__default["default"].Fragment, null, loadingElements.map((child, i) => (React__default["default"].createElement("div", { className: styles$b.loadingItem, key: i, "data-testid": DATALIST_LOADINGSTATE_ROW_TEST_ID }, layout.props.children(child))))));
603
+ return (React__default["default"].createElement(React__default["default"].Fragment, null, loadingElements.map((child, i) => (React__default["default"].createElement("div", { className: styles$c.loadingItem, key: i, "data-testid": DATALIST_LOADINGSTATE_ROW_TEST_ID }, layout.props.children(child))))));
575
604
  } }));
576
605
  }
577
606
  function LoadingStateXSBreakpoint() {
578
607
  const loadingData = new Array(LOADING_STATE_LIMIT_ITEMS).fill(0);
579
608
  return (React__default["default"].createElement(React__default["default"].Fragment, null, loadingData.map((_, i) => {
580
- return (React__default["default"].createElement("div", { className: styles$b.mobileLoadingState, key: i },
609
+ return (React__default["default"].createElement("div", { className: styles$c.mobileLoadingState, key: i },
581
610
  React__default["default"].createElement(Glimmer.Glimmer.Text, null)));
582
611
  })));
583
612
  }
@@ -588,9 +617,9 @@ _) {
588
617
  return React__default["default"].createElement(React__default["default"].Fragment, null);
589
618
  }
590
619
 
591
- var css_248z$4 = ".E-mG3prPSN8- {\n -ms-flex-item-align: center;\n align-self: center;\n position: relative;\n min-width: 0;\n}\n\n._0LGNoZxtqSE- {\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._0LGNoZxtqSE- > :nth-child(n + 3):not(:last-child) {\n margin-left: calc(16px / 2);\n margin-left: var(--space-small);\n}\n\n.LA3-gtgehrE- {\n visibility: hidden;\n}\n\n.fSPvawYWzZ8-::before,\n.ChfEJMPPVTk-::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-filters-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.fSPvawYWzZ8-::before {\n left: 0;\n}\n\n.ChfEJMPPVTk-::after {\n --data-list-filters-overflow-shadow-angle: to left;\n right: 0;\n}\n";
592
- var styles$4 = {"filters":"E-mG3prPSN8-","filterActions":"_0LGNoZxtqSE-","overflowTrigger":"LA3-gtgehrE-","overflowLeft":"fSPvawYWzZ8-","overflowRight":"ChfEJMPPVTk-"};
593
- styleInject_es.styleInject(css_248z$4);
620
+ var css_248z$5 = ".E-mG3prPSN8- {\n -ms-flex-item-align: center;\n align-self: center;\n position: relative;\n min-width: 0;\n}\n\n._0LGNoZxtqSE- {\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._0LGNoZxtqSE- > :nth-child(n + 3):not(:last-child) {\n margin-left: calc(16px / 2);\n margin-left: var(--space-small);\n}\n\n.LA3-gtgehrE- {\n visibility: hidden;\n}\n\n.fSPvawYWzZ8-::before,\n.ChfEJMPPVTk-::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-filters-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.fSPvawYWzZ8-::before {\n left: 0;\n}\n\n.ChfEJMPPVTk-::after {\n --data-list-filters-overflow-shadow-angle: to left;\n right: 0;\n}\n";
621
+ var styles$5 = {"filters":"E-mG3prPSN8-","filterActions":"_0LGNoZxtqSE-","overflowTrigger":"LA3-gtgehrE-","overflowLeft":"fSPvawYWzZ8-","overflowRight":"ChfEJMPPVTk-"};
622
+ styleInject_es.styleInject(css_248z$5);
594
623
 
595
624
  const CONTAINER_TEST_ID = "ATL-DataListFilters-Container";
596
625
 
@@ -665,20 +694,20 @@ function InternalDataListFilters() {
665
694
  if (!showSortButton && !component)
666
695
  return null;
667
696
  const children = component === null || component === void 0 ? void 0 : component.props.children;
668
- return (React__default["default"].createElement("div", { "data-testid": CONTAINER_TEST_ID, className: classnames__default["default"](styles$4.filters, {
669
- [styles$4.overflowLeft]: !isLeftVisible,
670
- [styles$4.overflowRight]: !isRightVisible,
697
+ return (React__default["default"].createElement("div", { "data-testid": CONTAINER_TEST_ID, className: classnames__default["default"](styles$5.filters, {
698
+ [styles$5.overflowLeft]: !isLeftVisible,
699
+ [styles$5.overflowRight]: !isRightVisible,
671
700
  }) },
672
- React__default["default"].createElement("div", { className: styles$4.filterActions },
673
- React__default["default"].createElement("span", { ref: leftRef, className: styles$4.overflowTrigger }),
701
+ React__default["default"].createElement("div", { className: styles$5.filterActions },
702
+ React__default["default"].createElement("span", { ref: leftRef, className: styles$5.overflowTrigger }),
674
703
  children && children,
675
704
  showSortButton && React__default["default"].createElement(DataListSort, null),
676
- React__default["default"].createElement("span", { ref: rightRef, className: styles$4.overflowTrigger }))));
705
+ React__default["default"].createElement("span", { ref: rightRef, className: styles$5.overflowTrigger }))));
677
706
  }
678
707
 
679
- var css_248z$3 = ".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";
680
- var styles$3 = {"header":"PGOHzrMh374-","stuck":"PGjWc5ocjpI-"};
681
- styleInject_es.styleInject(css_248z$3);
708
+ 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";
709
+ var styles$4 = {"header":"PGOHzrMh374-","stuck":"PGjWc5ocjpI-"};
710
+ styleInject_es.styleInject(css_248z$4);
682
711
 
683
712
  function DataListStickyHeader({ children }) {
684
713
  const [isStuck, setIsStuck] = React.useState(false);
@@ -693,12 +722,12 @@ function DataListStickyHeader({ children }) {
693
722
  ref.current && observer.unobserve(ref.current);
694
723
  };
695
724
  }, [handleObserver, ref.current]);
696
- return (React__default["default"].createElement("div", { ref: ref, className: classnames__default["default"](styles$3.header, { [styles$3.stuck]: isStuck }) }, children));
725
+ return (React__default["default"].createElement("div", { ref: ref, className: classnames__default["default"](styles$4.header, { [styles$4.stuck]: isStuck }) }, children));
697
726
  }
698
727
 
699
- var css_248z$2 = ".SaPMOnvw-3c- {\n --transition-properties: var(--timing-base) ease-in-out;\n --button-offset: calc(var(--space-largest) - var(--space-smallest));\n\n position: absolute;\n /* Inputs are off by 1 when put beside a button */\n top: calc((16px / 2) + 1px);\n top: calc(calc(16px / 2) + 1px);\n top: calc(var(--space-small) + 1px);\n right: calc((16px * 3) - (16px / 8));\n right: calc(calc(16px * 3) - calc(16px / 8));\n right: var(--button-offset);\n visibility: hidden;\n width: 0;\n opacity: 0;\n transition: opacity 200ms ease-in-out,\n width 200ms ease-in-out, visibility 200ms ease-in-out;\n transition: opacity var(--transition-properties),\n width var(--transition-properties), visibility var(--transition-properties);\n}\n\n._3S1-91v2SYI- {\n visibility: visible;\n width: calc(100% - var(--button-offset));\n opacity: 1;\n}\n\n@media (min-width: 768px) {\n\n.SaPMOnvw-3c-,\n._3S1-91v2SYI- {\n position: static;\n visibility: visible;\n width: auto;\n opacity: 1;\n transition: none;\n}\n }\n\n@media (--medium-screens-and-up) {\n\n.SaPMOnvw-3c-,\n._3S1-91v2SYI- {\n position: static;\n visibility: visible;\n width: auto;\n opacity: 1;\n transition: none;\n}\n }\n\n._9GlBktsUALw- {\n display: block;\n}\n\n@media (min-width: 768px) {\n\n._9GlBktsUALw- {\n display: none;\n}\n }\n\n@media (--medium-screens-and-up) {\n\n._9GlBktsUALw- {\n display: none;\n}\n }\n\n/*\n * No Filters Styling\n *\n * When there are no filters, the search input is always visible.\n * ------------------------------------------------------------------------- */\n\n._3Pjrt42x454- .SaPMOnvw-3c- {\n position: static;\n visibility: visible;\n width: auto;\n opacity: 1;\n transition: none;\n}\n\n@media (min-width: 768px) {\n\n._3Pjrt42x454- .SaPMOnvw-3c- {\n max-width: 30%;\n}\n }\n\n@media (--medium-screens-and-up) {\n\n._3Pjrt42x454- .SaPMOnvw-3c- {\n max-width: 30%;\n}\n }\n\n._3Pjrt42x454- ._9GlBktsUALw- {\n display: none;\n}\n";
700
- var styles$2 = {"searchInput":"SaPMOnvw-3c-","searchInputVisible":"_3S1-91v2SYI-","searchButton":"_9GlBktsUALw-","withNoFilters":"_3Pjrt42x454-"};
701
- styleInject_es.styleInject(css_248z$2);
728
+ 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";
729
+ var styles$3 = {"searchInput":"SaPMOnvw-3c-","searchInputVisible":"_3S1-91v2SYI-","searchButton":"_9GlBktsUALw-","withNoFilters":"_3Pjrt42x454-"};
730
+ styleInject_es.styleInject(css_248z$3);
702
731
 
703
732
  const DATA_LIST_SEARCH_TEST_ID = "ATL-DataList-Search-input-wrapper";
704
733
  // This component is meant to capture the props of the DataList.Search
@@ -718,13 +747,13 @@ function InternalDataListSearch() {
718
747
  return null;
719
748
  const { placeholder } = searchComponent.props;
720
749
  return (React__default["default"].createElement("div", { className: classnames__default["default"]({
721
- [styles$2.withNoFilters]: !filterComponent && !sorting,
750
+ [styles$3.withNoFilters]: !filterComponent && !sorting,
722
751
  }) },
723
- React__default["default"].createElement("div", { "data-testid": DATA_LIST_SEARCH_TEST_ID, className: classnames__default["default"](styles$2.searchInput, {
724
- [styles$2.searchInputVisible]: visible,
752
+ React__default["default"].createElement("div", { "data-testid": DATA_LIST_SEARCH_TEST_ID, className: classnames__default["default"](styles$3.searchInput, {
753
+ [styles$3.searchInputVisible]: visible,
725
754
  }) },
726
755
  React__default["default"].createElement(InputText.InputText, { ref: inputRef, placeholder: getPlaceholder(), onChange: debouncedSearch, prefix: { icon: "search" }, size: "small" })),
727
- React__default["default"].createElement("div", { className: styles$2.searchButton },
756
+ React__default["default"].createElement("div", { className: styles$3.searchButton },
728
757
  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 }) }))));
729
758
  function getPlaceholder() {
730
759
  if (placeholder)
@@ -742,9 +771,9 @@ function InternalDataListSearch() {
742
771
  }
743
772
  }
744
773
 
745
- var css_248z$1 = ".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";
746
- var styles$1 = {"emptyStateWrapper":"zg3w9nQga-M-"};
747
- styleInject_es.styleInject(css_248z$1);
774
+ 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";
775
+ var styles$2 = {"emptyStateWrapper":"zg3w9nQga-M-"};
776
+ styleInject_es.styleInject(css_248z$2);
748
777
 
749
778
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
750
779
  function DataListEmptyState(_) {
@@ -753,7 +782,7 @@ function DataListEmptyState(_) {
753
782
  function InternalDataListEmptyState() {
754
783
  const { emptyStateComponents: components, filtered } = React.useContext(DataListContext);
755
784
  const { message, action } = getMessages();
756
- return (React__default["default"].createElement("div", { className: styles$1.emptyStateWrapper },
785
+ return (React__default["default"].createElement("div", { className: styles$2.emptyStateWrapper },
757
786
  React__default["default"].createElement(Text.Text, { align: "center" }, message),
758
787
  renderButton(action)));
759
788
  function getMessages() {
@@ -787,9 +816,9 @@ function getEmptyStates(components) {
787
816
  return { defaultEmptyState, filteredEmptyState };
788
817
  }
789
818
 
790
- var css_248z = ".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";
791
- var styles = {"trigger":"IC-Y9bTIVFo-","loadingMore":"PbZLGpbI6ZM-","backToTop":"_6zA6B-jmz6o-","fadeIn":"gZ4DUv82g5I-"};
792
- styleInject_es.styleInject(css_248z);
819
+ 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";
820
+ var styles$1 = {"trigger":"IC-Y9bTIVFo-","loadingMore":"PbZLGpbI6ZM-","backToTop":"_6zA6B-jmz6o-","fadeIn":"gZ4DUv82g5I-"};
821
+ styleInject_es.styleInject(css_248z$1);
793
822
 
794
823
  function DataListLoadMoreTrigger() {
795
824
  const { onLoadMore } = useDataListContext();
@@ -797,7 +826,7 @@ function DataListLoadMoreTrigger() {
797
826
  React.useEffect(() => {
798
827
  isInView && (onLoadMore === null || onLoadMore === void 0 ? void 0 : onLoadMore());
799
828
  }, [isInView]);
800
- return (React__default["default"].createElement("div", { ref: inViewRef, className: styles.trigger, "data-testid": DATA_LOAD_MORE_TEST_ID }));
829
+ return (React__default["default"].createElement("div", { ref: inViewRef, className: styles$1.trigger, "data-testid": DATA_LOAD_MORE_TEST_ID }));
801
830
  }
802
831
 
803
832
  const MAX_DATA_COUNT = 50;
@@ -806,12 +835,41 @@ function DataListLoadMore({ onBackToTop }) {
806
835
  const showBackToTop = data.length > MAX_DATA_COUNT && loadingState !== "loadingMore";
807
836
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
808
837
  React__default["default"].createElement(DataListLoadMoreTrigger, { key: data.length }),
809
- loadingState === "loadingMore" && (React__default["default"].createElement("div", { "data-testid": DATA_LIST_LOADING_MORE_SPINNER_TEST_ID, className: styles.loadingMore },
838
+ loadingState === "loadingMore" && (React__default["default"].createElement("div", { "data-testid": DATA_LIST_LOADING_MORE_SPINNER_TEST_ID, className: styles$1.loadingMore },
810
839
  React__default["default"].createElement(Spinner.Spinner, { size: "small" }))),
811
- showBackToTop && (React__default["default"].createElement("div", { className: styles.backToTop },
840
+ showBackToTop && (React__default["default"].createElement("div", { className: styles$1.backToTop },
812
841
  React__default["default"].createElement(Button.Button, { label: "Back to top", onClick: onBackToTop, size: "small", variation: "subtle" })))));
813
842
  }
814
843
 
844
+ var css_248z = "._0m75bgCVBhk- {\n visibility: hidden;\n}\n";
845
+ var styles = {"hidden":"_0m75bgCVBhk-"};
846
+ styleInject_es.styleInject(css_248z);
847
+
848
+ function DataListLayoutActions() {
849
+ const { itemActionComponent } = useDataListContext();
850
+ const { setHasInLayoutActions } = useDataListLayoutContext();
851
+ const { activeItem } = useDataListLayoutActionsContext();
852
+ const { children: actionsChildren } = (itemActionComponent === null || itemActionComponent === void 0 ? void 0 : itemActionComponent.props) || {};
853
+ const actions = React.Children.toArray(actionsChildren);
854
+ const hasActions = actions.length > 0;
855
+ React.useEffect(() => {
856
+ setHasInLayoutActions(hasActions);
857
+ return () => {
858
+ setHasInLayoutActions(false);
859
+ };
860
+ }, []);
861
+ if (!hasActions)
862
+ return null;
863
+ return (React__default["default"].createElement(DataListLayoutActionsWrapper, null,
864
+ React__default["default"].createElement(DataListItemActionsOverflow, { actions: actions, item: activeItem })));
865
+ }
866
+ function DataListLayoutActionsWrapper({ children }) {
867
+ const { isInLayoutProvider } = useDataListLayoutContext();
868
+ if (isInLayoutProvider)
869
+ return React__default["default"].createElement(React__default["default"].Fragment, null, children);
870
+ return React__default["default"].createElement("div", { className: styles.hidden }, children);
871
+ }
872
+
815
873
  function useLayoutMediaQueries() {
816
874
  const mediaQueries = BREAKPOINTS.reduce((previous, breakpoint) => (Object.assign(Object.assign({}, previous), { [breakpoint]: window.matchMedia(breakpointToMediaQuery(breakpoint)) })), {});
817
875
  const initialMatches = BREAKPOINTS.reduce((previous, breakpoint) => (Object.assign(Object.assign({}, previous), { [breakpoint]: mediaQueries[breakpoint].matches })), {});
@@ -862,21 +920,21 @@ function InternalDataList() {
862
920
  const initialLoading = loadingState === "initial";
863
921
  const showEmptyState = !initialLoading && data.length === 0;
864
922
  const shouldRenderLoadMoreTrigger = !initialLoading && !showEmptyState;
865
- return (React__default["default"].createElement("div", { className: styles$d.wrapper },
866
- React__default["default"].createElement("div", { className: styles$d.titleContainer },
923
+ return (React__default["default"].createElement("div", { className: styles$e.wrapper },
924
+ React__default["default"].createElement("div", { className: styles$e.titleContainer },
867
925
  title && React__default["default"].createElement(Heading.Heading, { level: 3 }, title),
868
926
  React__default["default"].createElement(DataListTotalCount, { totalCount: totalCount, loading: initialLoading })),
869
927
  React__default["default"].createElement("div", { ref: backToTopRef }),
870
928
  React__default["default"].createElement(DataListStickyHeader, null,
871
- React__default["default"].createElement("div", { className: styles$d.headerFilters },
929
+ React__default["default"].createElement("div", { className: styles$e.headerFilters },
872
930
  React__default["default"].createElement(InternalDataListFilters, null),
873
931
  React__default["default"].createElement(InternalDataListSearch, null)),
874
932
  headerData && (React__default["default"].createElement(DataListHeader, { layouts: layoutComponents, headerData: headerData, headerVisibility: headerVisibility, mediaMatches: mediaMatches }))),
875
933
  initialLoading && (React__default["default"].createElement(DataListLoadingState, { headers: headers, layouts: layoutComponents, mediaMatches: mediaMatches })),
876
934
  showEmptyState && React__default["default"].createElement(InternalDataListEmptyState, null),
877
935
  !initialLoading && (React__default["default"].createElement(DataListItems, { data: data, layouts: layoutComponents, mediaMatches: mediaMatches })),
878
- loadingState === "filtering" && (React__default["default"].createElement("div", { "data-testid": DATA_LIST_FILTERING_SPINNER_TEST_ID, className: styles$d.filtering },
879
- React__default["default"].createElement("div", { className: styles$d.filteringSpinner },
936
+ loadingState === "filtering" && (React__default["default"].createElement("div", { "data-testid": DATA_LIST_FILTERING_SPINNER_TEST_ID, className: styles$e.filtering },
937
+ React__default["default"].createElement("div", { className: styles$e.filteringSpinner },
880
938
  React__default["default"].createElement(Spinner.Spinner, { size: "small" })))),
881
939
  shouldRenderLoadMoreTrigger && (React__default["default"].createElement(DataListLoadMore, { onBackToTop: handleBackToTop }))));
882
940
  function handleBackToTop() {
@@ -892,11 +950,36 @@ function InternalDataList() {
892
950
  });
893
951
  }
894
952
  }
953
+ /**
954
+ * Sets the layout that the DataList item and header will use.
955
+ */
895
956
  DataList.Layout = DataListLayout;
957
+ /**
958
+ * By using this component, we can render the actions anywhere in the layout
959
+ * instead of being added automatically on hover.
960
+ */
961
+ DataList.LayoutActions = DataListLayoutActions;
962
+ /**
963
+ * When the DataList is either empty and/or filtered, this component will be
964
+ * rendered.
965
+ */
896
966
  DataList.EmptyState = DataListEmptyState;
967
+ /**
968
+ * Adds the filter components of your choosing to the DataList.
969
+ */
897
970
  DataList.Filters = DataListFilters;
971
+ /**
972
+ * Enables the search functionality of the DataList.
973
+ */
898
974
  DataList.Search = DataListSearch;
975
+ /**
976
+ * Defines the group actions you could do on a single DataList item.
977
+ */
899
978
  DataList.ItemActions = DataListItemActions;
979
+ /**
980
+ * Defines the action in a DataList. This should be used inside the
981
+ * DataListItemActions component.
982
+ */
900
983
  DataList.Action = DataListAction;
901
984
 
902
985
  exports.DataList = DataList;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jobber/components",
3
- "version": "4.41.0",
3
+ "version": "4.42.1",
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": "43230912b7cb5c6e144d2d44331dfcc904f6e4ec"
87
+ "gitHead": "e46abe091488d7bacf653ac8fd7ffb73b575e8aa"
88
88
  }