@jobber/components 4.45.0 → 4.45.1-visual-upd.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.
- package/Chip.d.ts +1 -0
- package/Chip.js +17 -0
- package/dist/Autocomplete/index.js +7 -7
- package/dist/Banner/index.js +3 -3
- package/dist/Button/index.js +2 -2
- package/dist/{Button-d89f2271.js → Button-db6114a6.js} +1 -1
- package/dist/ButtonDismiss/index.js +3 -3
- package/dist/{ButtonDismiss-250840a4.js → ButtonDismiss-1ccb84ec.js} +1 -1
- package/dist/Card/index.js +5 -5
- package/dist/{Card-69304e99.js → Card-116af709.js} +3 -3
- package/dist/Checkbox/index.js +3 -3
- package/dist/{Checkbox-eac63b7f.js → Checkbox-bc4bc968.js} +1 -1
- package/dist/Chip/Chip.d.ts +8 -0
- package/dist/Chip/components/ChipDismissible/ChipDismissible.d.ts +3 -0
- package/dist/Chip/components/ChipPrefix/Chip.Prefix.d.ts +2 -0
- package/dist/Chip/components/ChipSelectable/ChipSelectable.d.ts +3 -0
- package/dist/Chip/components/ChipSuffix/Chip.Suffix.d.ts +6 -0
- package/dist/Chip/hooks/index.d.ts +1 -0
- package/dist/Chip/hooks/useChildComponent.d.ts +8 -0
- package/dist/Chip/index.d.ts +3 -0
- package/dist/Chip/index.js +85 -0
- package/dist/{Chip-4d8e6370.js → Chip-b603ceaf.js} +5 -5
- package/dist/Chips/index.js +5 -5
- package/dist/Combobox/Combobox.d.ts +6 -0
- package/dist/Combobox/ComboboxProvider.d.ts +2 -0
- package/dist/Combobox/components/ComboboxContent/ComboboxContent.d.ts +17 -6
- package/dist/Combobox/components/ComboboxContent/ComboboxList.d.ts +9 -8
- package/dist/Combobox/hooks/useComboboxContent.d.ts +7 -3
- package/dist/Combobox/index.js +64 -30
- package/dist/ConfirmationModal/index.js +9 -9
- package/dist/{ConfirmationModal-92f07027.js → ConfirmationModal-285c3cbe.js} +2 -2
- package/dist/DataDump/index.js +6 -6
- package/dist/DataList/DataList.d.ts +1 -1
- package/dist/DataList/DataList.types.d.ts +29 -6
- package/dist/DataList/DataList.utils.d.ts +1 -1
- package/dist/DataList/components/DataListAction/DataListAction.d.ts +2 -3
- package/dist/DataList/components/DataListActions/DataListActions.d.ts +3 -0
- package/dist/DataList/components/DataListActions/index.d.ts +1 -0
- package/dist/DataList/components/DataListHeader/DataListHeader.d.ts +2 -0
- package/dist/DataList/components/DataListHeader/index.d.ts +1 -0
- package/dist/DataList/components/DataListItem/DataListItem.d.ts +2 -2
- package/dist/DataList/components/DataListItemActions/DataListItemActions.d.ts +1 -5
- package/dist/DataList/components/DataListItemActions/index.d.ts +0 -1
- package/dist/DataList/components/DataListItemActionsOverflow/DataListItemActionsOverflow.d.ts +7 -0
- package/dist/DataList/components/DataListItemActionsOverflow/index.d.ts +1 -0
- package/dist/DataList/components/DataListItems/DataListItems.d.ts +7 -0
- package/dist/DataList/components/DataListItems/index.d.ts +1 -0
- package/dist/DataList/components/DataListLayout/DataListLayout.d.ts +2 -2
- package/dist/DataList/components/DataListLoadingState/DataListLoadingState.d.ts +2 -9
- package/dist/DataList/components/DataListSearch/DataListSearch.d.ts +1 -1
- package/dist/DataList/context/DataListContext/DataListContext.d.ts +3 -3
- package/dist/DataList/hooks/useActiveLayout.d.ts +4 -0
- package/dist/DataList/index.js +396 -365
- package/dist/DataTable/index.js +6 -6
- package/dist/DatePicker/index.js +3 -3
- package/dist/{DatePicker-39d2dc8b.js → DatePicker-49213434.js} +2 -2
- package/dist/DescriptionList/index.js +1 -1
- package/dist/Disclosure/index.js +1 -1
- package/dist/Drawer/index.js +4 -4
- package/dist/Emphasis/index.js +2 -2
- package/dist/{Emphasis-cc3456ac.js → Emphasis-e10dde65.js} +1 -1
- package/dist/FeatureSwitch/index.js +7 -7
- package/dist/FormField/index.js +5 -5
- package/dist/{FormField-bef41ec9.js → FormField-fa9254dc.js} +3 -3
- package/dist/FormatFile/index.js +10 -10
- package/dist/{FormatFile-a470c0f2.js → FormatFile-6423c3b5.js} +4 -4
- package/dist/Gallery/index.js +11 -11
- package/dist/Heading/index.js +2 -2
- package/dist/{Heading-4562900a.js → Heading-4cde9989.js} +1 -1
- package/dist/InlineLabel/index.js +2 -2
- package/dist/{InlineLabel-3d461632.js → InlineLabel-a24706c4.js} +1 -1
- package/dist/InputAvatar/index.js +3 -3
- package/dist/InputDate/index.js +6 -6
- package/dist/InputEmail/index.js +5 -5
- package/dist/InputFile/index.js +3 -3
- package/dist/{InputFile-d327dee3.js → InputFile-25c3369b.js} +2 -2
- package/dist/InputNumber/index.js +6 -6
- package/dist/{InputNumber-5640fb55.js → InputNumber-ea9fcee1.js} +1 -1
- package/dist/InputPassword/index.js +5 -5
- package/dist/InputPhoneNumber/index.js +5 -5
- package/dist/InputText/index.js +6 -6
- package/dist/{InputText-5ac5cfe0.js → InputText-ab237501.js} +1 -1
- package/dist/InputTime/index.js +5 -5
- package/dist/InputValidation/index.js +3 -3
- package/dist/{InputValidation-4e809bdd.js → InputValidation-377d6c62.js} +1 -1
- package/dist/LightBox/index.js +4 -4
- package/dist/{LightBox-02ca409e.js → LightBox-93ef99b9.js} +2 -2
- package/dist/List/index.js +5 -5
- package/dist/Markdown/index.js +5 -5
- package/dist/{Markdown-b37cf9ec.js → Markdown-d53b01bf.js} +3 -3
- package/dist/Menu/index.js +3 -3
- package/dist/{Menu-cec53b50.js → Menu-2e64307a.js} +2 -2
- package/dist/Modal/index.js +5 -5
- package/dist/{Modal-dcdc0032.js → Modal-c17cc105.js} +3 -3
- package/dist/MultiSelect/index.js +3 -3
- package/dist/{Option-9f4a65da.js → Option-07a24acd.js} +1 -1
- package/dist/Page/index.js +7 -7
- package/dist/Popover/index.js +4 -4
- package/dist/{Popover-d401fb54.js → Popover-7c966790.js} +1 -1
- package/dist/RadioGroup/index.js +3 -3
- package/dist/{RadioGroup-46833fac.js → RadioGroup-9bdd8a59.js} +1 -1
- package/dist/RecurringSelect/index.js +8 -8
- package/dist/Select/index.js +6 -6
- package/dist/StatusLabel/index.js +2 -2
- package/dist/Switch/index.js +2 -2
- package/dist/{Switch-165f01e3.js → Switch-cc9b645c.js} +1 -1
- package/dist/Tabs/index.js +1 -1
- package/dist/Text/index.js +2 -2
- package/dist/{Text-59bde58c.js → Text-54334431.js} +1 -1
- package/dist/Toast/index.js +2 -2
- package/dist/Tooltip/index.js +1 -3
- package/dist/{Tooltip-59dbab5b.js → Tooltip-3f9048ce.js} +5 -6
- package/dist/Typography/index.js +1 -1
- package/dist/{Typography-9bff9c91.js → Typography-83915c54.js} +2 -2
- package/package.json +5 -5
- package/rollup.config.js +2 -5
- package/dist/DataList/components/DataListItemActions/DataListItemActionsOverflow.d.ts +0 -7
- package/dist/DataList/components/DataListLayoutInternal/DataListHeader.d.ts +0 -11
- package/dist/DataList/components/DataListLayoutInternal/DataListItems.d.ts +0 -10
- package/dist/DataList/components/DataListLayoutInternal/DataListLayoutInternal.d.ts +0 -10
- package/dist/DataList/components/DataListLayoutInternal/index.d.ts +0 -3
- package/dist/DataList/hooks/useLayoutMediaQueries.d.ts +0 -1
- /package/dist/DataList/components/{DataListLayoutInternal → DataListHeader}/DataListHeaderCheckbox.d.ts +0 -0
package/dist/DataList/index.js
CHANGED
|
@@ -5,59 +5,56 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var tslib_es6 = require('../tslib.es6-5b8768b7.js');
|
|
6
6
|
var React = require('react');
|
|
7
7
|
var styleInject_es = require('../style-inject.es-9d2f5f4e.js');
|
|
8
|
-
var Text = require('../Text-
|
|
8
|
+
var Text = require('../Text-54334431.js');
|
|
9
9
|
var Glimmer = require('../Glimmer-cfa92a88.js');
|
|
10
|
-
var framerMotion = require('framer-motion');
|
|
11
|
-
var classnames = require('classnames');
|
|
12
10
|
var noop = require('lodash/noop');
|
|
13
|
-
var reactRouterDom = require('react-router-dom');
|
|
14
|
-
var Button = require('../Button-d89f2271.js');
|
|
15
11
|
var design = require('@jobber/design');
|
|
16
|
-
var
|
|
17
|
-
var
|
|
18
|
-
var Tooltip = require('../Tooltip-
|
|
19
|
-
require('
|
|
12
|
+
var framerMotion = require('framer-motion');
|
|
13
|
+
var classnames = require('classnames');
|
|
14
|
+
var Tooltip = require('../Tooltip-3f9048ce.js');
|
|
15
|
+
var Button = require('../Button-db6114a6.js');
|
|
16
|
+
var useInView = require('@jobber/hooks/useInView');
|
|
17
|
+
var isEmpty = require('lodash/isEmpty');
|
|
18
|
+
var InlineLabel = require('../InlineLabel-a24706c4.js');
|
|
19
|
+
var FormatDate = require('../FormatDate-70ea5b43.js');
|
|
20
|
+
var Heading = require('../Heading-4cde9989.js');
|
|
20
21
|
var useFocusTrap = require('@jobber/hooks/useFocusTrap');
|
|
21
22
|
var useRefocusOnActivator = require('@jobber/hooks/useRefocusOnActivator');
|
|
22
23
|
var useOnKeyDown = require('@jobber/hooks/useOnKeyDown');
|
|
23
|
-
var
|
|
24
|
-
var
|
|
25
|
-
var
|
|
26
|
-
var styles$f = require('@jobber/components/DataList/DataList.css');
|
|
27
|
-
require('uuid');
|
|
28
|
-
require('react-hook-form');
|
|
29
|
-
var Checkbox = require('../Checkbox-eac63b7f.js');
|
|
30
|
-
var FormatDate = require('../FormatDate-70ea5b43.js');
|
|
31
|
-
var Heading = require('../Heading-4562900a.js');
|
|
24
|
+
var ReactDOM = require('react-dom');
|
|
25
|
+
var Checkbox = require('../Checkbox-bc4bc968.js');
|
|
26
|
+
var reactRouterDom = require('react-router-dom');
|
|
32
27
|
var AnimatedSwitcher = require('../AnimatedSwitcher-d1e1ddcf.js');
|
|
33
|
-
var
|
|
34
|
-
var Icon = require('../Icon-405a216c.js');
|
|
35
|
-
var Popover = require('../Popover-d401fb54.js');
|
|
28
|
+
var Popover = require('../Popover-7c966790.js');
|
|
36
29
|
var Content = require('../Content-2ca1ffe1.js');
|
|
37
|
-
var Chip = require('../Chip-
|
|
30
|
+
var Chip = require('../Chip-b603ceaf.js');
|
|
38
31
|
require('@jobber/hooks/useAssert');
|
|
39
32
|
require('../Avatar-1aa30ee1.js');
|
|
40
33
|
require('color');
|
|
34
|
+
var Typography = require('../Typography-83915c54.js');
|
|
35
|
+
require('react-popper');
|
|
41
36
|
var debounce = require('lodash/debounce');
|
|
42
|
-
var InputText = require('../InputText-
|
|
37
|
+
var InputText = require('../InputText-ab237501.js');
|
|
43
38
|
var Spinner = require('../Spinner-9d8fc7ff.js');
|
|
44
|
-
require('../
|
|
39
|
+
var Icon = require('../Icon-405a216c.js');
|
|
40
|
+
require('uuid');
|
|
41
|
+
require('react-hook-form');
|
|
42
|
+
require('../ButtonDismiss-1ccb84ec.js');
|
|
45
43
|
require('lodash/sortBy');
|
|
46
44
|
require('@jobber/hooks/useLiveAnnounce');
|
|
47
|
-
require('../FormField-
|
|
48
|
-
require('../InputValidation-
|
|
45
|
+
require('../FormField-fa9254dc.js');
|
|
46
|
+
require('../InputValidation-377d6c62.js');
|
|
49
47
|
|
|
50
48
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
51
49
|
|
|
52
50
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
53
|
-
var classnames__default = /*#__PURE__*/_interopDefaultLegacy(classnames);
|
|
54
51
|
var noop__default = /*#__PURE__*/_interopDefaultLegacy(noop);
|
|
52
|
+
var classnames__default = /*#__PURE__*/_interopDefaultLegacy(classnames);
|
|
55
53
|
var isEmpty__default = /*#__PURE__*/_interopDefaultLegacy(isEmpty);
|
|
56
|
-
var styles__default = /*#__PURE__*/_interopDefaultLegacy(styles$f);
|
|
57
54
|
var debounce__default = /*#__PURE__*/_interopDefaultLegacy(debounce);
|
|
58
55
|
|
|
59
|
-
var css_248z$e = ".TkdrExYnvcY-,\n.TkdrExYnvcY- * {\n box-sizing: border-box;\n}\n\n.TkdrExYnvcY- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n position: relative;\n z-index: 0;\n z-index: var(--elevation-default);\n -ms-flex: 1;\n flex: 1;\n}\n\n/*\n * Header\n */\n\n.IcAlZHoB4LI- {\n display: -ms-flexbox;\n display: flex;\n position: relative;\n z-index: 1;\n z-index: var(--elevation-base);\n margin-bottom: calc(16px / 2);\n margin-bottom: var(--space-small);\n -ms-flex-align: center;\n align-items: center;\n}\n\n.TFO76ysivmg- {\n display: grid;\n padding: calc(16px / 2) 0;\n padding: var(--space-small) 0;\n gap: calc(16px / 2);\n grid-gap: calc(16px / 2);\n grid-gap: var(--space-small);\n gap: var(--space-small);\n grid-template-columns: auto -webkit-max-content;\n grid-template-columns: auto max-content;\n}\n\n.jGHZZYZm1ZY- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n -ms-flex-pack: center;\n justify-content: center;\n min-height: calc(16px * 3);\n min-height: var(--space-largest);\n padding: calc(16px / 2);\n padding: var(--space-small);\n border-bottom: calc(16px / 8) solid rgb(225, 225, 225);\n border-bottom: var(--border-thick) solid var(--color-border);\n}\n\n.jMSVGIAr5tk- > p {\n font-weight: 500;\n white-space: nowrap;\n}\n\n.jMSVGIAr5tk- {\n display: -ms-flexbox;\n display: flex;\n
|
|
60
|
-
var styles$e = {"wrapper":"TkdrExYnvcY-","titleContainer":"IcAlZHoB4LI-","headerFilters":"TFO76ysivmg-","headerTitles":"jGHZZYZm1ZY-","headerBatchSelect":"jMSVGIAr5tk-","listItem":"ise8kHCfhCY-","active":"Pc0JGX6jCD4-","listItemClickable":"Tq6e0BGwcSM-","selectable":"d-79rkMqufg-","selectAllCheckbox":"qm-SSuWTXkI-","visible":"VA9RnQp6nbI-","selected":"_4L7iXXzLr5k-","filtering":"Kkp-IYmwq-s-","filteringSpinner":"m-eCShL7TU4-","srOnly":"esUiRgWabYw-"};
|
|
56
|
+
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";
|
|
57
|
+
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
58
|
styleInject_es.styleInject(css_248z$e);
|
|
62
59
|
|
|
63
60
|
var css_248z$d = ".F56prQsXm3A- {\n min-width: 80px;\n margin-left: calc(16px / 2);\n margin-left: var(--space-small);\n}\n";
|
|
@@ -81,65 +78,55 @@ function DataListTotalCount({ totalCount, loading, }) {
|
|
|
81
78
|
return (React__default["default"].createElement("div", { className: styles$d.results, "data-testid": DATALIST_TOTALCOUNT_TEST_ID }, output));
|
|
82
79
|
}
|
|
83
80
|
|
|
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
81
|
const defaultValues$1 = {
|
|
89
82
|
title: "",
|
|
90
83
|
data: [],
|
|
91
84
|
headers: {},
|
|
92
85
|
children: [],
|
|
93
86
|
selected: [],
|
|
87
|
+
layoutBreakpoints: [],
|
|
88
|
+
registerLayoutBreakpoints: noop__default["default"],
|
|
89
|
+
layouts: {
|
|
90
|
+
xs: children => React__default["default"].createElement(React__default["default"].Fragment, null, children),
|
|
91
|
+
sm: children => React__default["default"].createElement(React__default["default"].Fragment, null, children),
|
|
92
|
+
md: children => React__default["default"].createElement(React__default["default"].Fragment, null, children),
|
|
93
|
+
lg: children => React__default["default"].createElement(React__default["default"].Fragment, null, children),
|
|
94
|
+
xl: children => React__default["default"].createElement(React__default["default"].Fragment, null, children),
|
|
95
|
+
},
|
|
96
|
+
registerLayout: noop__default["default"],
|
|
94
97
|
};
|
|
95
98
|
const DataListContext = React.createContext(defaultValues$1);
|
|
96
99
|
function useDataListContext() {
|
|
97
100
|
return React.useContext(DataListContext);
|
|
98
101
|
}
|
|
99
102
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
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();
|
|
103
|
+
function useMediaQuery(CSSMediaQuery) {
|
|
104
|
+
/**
|
|
105
|
+
* matchMedia have had full support for browsers since 2012 but jest, being a
|
|
106
|
+
* lite version of a DOM, doesn't support it.
|
|
107
|
+
*
|
|
108
|
+
* Instead of the consumers mocking matchMedia on every usage of DataList,
|
|
109
|
+
* we can just return true to mimic the largest screen we support.
|
|
110
|
+
*
|
|
111
|
+
* In the event that the consumer wants to test the DataList on different
|
|
112
|
+
* screen sizes, they can use the `mockViewportWidth` function from
|
|
113
|
+
* `@jobber/components/useBreakpoints`.
|
|
114
|
+
*/
|
|
115
|
+
if (window.matchMedia === undefined)
|
|
116
|
+
return true;
|
|
117
|
+
const [matches, setMatches] = React.useState(window.matchMedia(CSSMediaQuery).matches);
|
|
118
|
+
React.useEffect(() => {
|
|
119
|
+
const media = window.matchMedia(CSSMediaQuery);
|
|
120
|
+
if (media.matches !== matches) {
|
|
121
|
+
setMatches(media.matches);
|
|
135
122
|
}
|
|
136
|
-
|
|
123
|
+
const listener = () => setMatches(media.matches);
|
|
124
|
+
media.addEventListener("change", listener);
|
|
125
|
+
return () => media.removeEventListener("change", listener);
|
|
126
|
+
}, [CSSMediaQuery]);
|
|
127
|
+
return matches;
|
|
137
128
|
}
|
|
138
129
|
|
|
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
130
|
const EMPTY_RESULTS_MESSAGE = "List is looking empty";
|
|
144
131
|
const EMPTY_FILTER_RESULTS_MESSAGE = "No results for selected filters";
|
|
145
132
|
const EMPTY_STATE_ACTION_BUTTON_ONLY_ERROR = "DataListEmptyState action prop must be a Button component";
|
|
@@ -161,61 +148,79 @@ const DATA_LOAD_MORE_TEST_ID = "ATL-DataList-LoadMore-trigger";
|
|
|
161
148
|
const TRANSITION_DURATION_IN_SECONDS = design.tokens["timing-base"] / 1000;
|
|
162
149
|
const TRANSITION_DELAY_IN_SECONDS = design.tokens["timing-quick"] / 1000;
|
|
163
150
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
151
|
+
function useResponsiveSizing() {
|
|
152
|
+
const xs = useMediaQuery(`(width > ${BREAKPOINT_SIZES.xs}px)`);
|
|
153
|
+
const sm = useMediaQuery(`(width >= ${BREAKPOINT_SIZES.sm}px)`);
|
|
154
|
+
const md = useMediaQuery(`(width >= ${BREAKPOINT_SIZES.md}px)`);
|
|
155
|
+
const lg = useMediaQuery(`(width >= ${BREAKPOINT_SIZES.lg}px)`);
|
|
156
|
+
const xl = useMediaQuery(`(width >= ${BREAKPOINT_SIZES.xl}px)`);
|
|
157
|
+
return { xs, sm, md, lg, xl };
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
function useActiveLayout() {
|
|
161
|
+
const { layoutBreakpoints, layouts } = useDataListContext();
|
|
162
|
+
const breakpoints = useResponsiveSizing();
|
|
163
|
+
const reversedLayoutBreakpoints = [...layoutBreakpoints].reverse();
|
|
164
|
+
const activeBreakpoint = reversedLayoutBreakpoints.find(key => breakpoints[key]) ||
|
|
165
|
+
layoutBreakpoints[0];
|
|
166
|
+
const layout = layouts[activeBreakpoint];
|
|
167
|
+
return { layout, activeBreakpoint };
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
var css_248z$c = "._8cMzUF8XEwY- {\n position: relative;\n}\n\n._8cMzUF8XEwY-::after {\n content: \"\";\n display: block;\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 100px;\n background-image: linear-gradient(\n to top,\n rgba(255, 255, 255, 1) 0%,\n rgba(255, 255, 255, 0) 100%\n );\n background-image: linear-gradient(\n to top,\n var(--color-surface) 0%,\n rgba(var(--color-white--rgb), 0) 100%\n );\n}\n\n.Rh--6fVpkm4- {\n padding: calc(16px / 2);\n padding: var(--space-small);\n}\n\n.NFaWWvmxtkw- {\n width: 100%;\n min-width: calc(16px * 3);\n min-width: var(--space-largest);\n}\n";
|
|
171
|
+
var styles$c = {"wrapper":"_8cMzUF8XEwY-","loadingItem":"Rh--6fVpkm4-","glimmer":"NFaWWvmxtkw-"};
|
|
172
|
+
styleInject_es.styleInject(css_248z$c);
|
|
173
|
+
|
|
174
|
+
const LOADING_STATE_LIMIT_ITEMS = 10;
|
|
175
|
+
const DATALIST_LOADINGSTATE_ROW_TEST_ID = "ATL-DataList-LoadingState-Row";
|
|
176
|
+
function DataListLoadingState() {
|
|
177
|
+
const { headers } = useDataListContext();
|
|
178
|
+
const { layout, activeBreakpoint } = useActiveLayout();
|
|
179
|
+
if (!layout)
|
|
180
|
+
return null;
|
|
181
|
+
const glimmerSize = activeBreakpoint === "xs" ? "small" : "base";
|
|
182
|
+
const glimmersFromHeader = Object.keys(headers).reduce((data, key) => (Object.assign(Object.assign({}, data), { [key]: (React__default["default"].createElement("div", { className: styles$c.glimmer },
|
|
183
|
+
React__default["default"].createElement(Glimmer.Glimmer, { size: glimmerSize }))) })), {});
|
|
184
|
+
const loadingData = new Array(LOADING_STATE_LIMIT_ITEMS).fill(glimmersFromHeader);
|
|
185
|
+
return (React__default["default"].createElement("div", { className: styles$c.wrapper }, loadingData.map((child, i) => (React__default["default"].createElement("div", { key: i, className: styles$c.loadingItem, "data-testid": DATALIST_LOADINGSTATE_ROW_TEST_ID }, layout(child))))));
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
const defaultValues = {
|
|
189
|
+
isInLayoutProvider: false,
|
|
190
|
+
hasInLayoutActions: false,
|
|
191
|
+
setHasInLayoutActions: noop__default["default"],
|
|
167
192
|
};
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
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
|
-
}
|
|
193
|
+
const DataListLayoutContext = React.createContext(defaultValues);
|
|
194
|
+
function useDataListLayoutContext() {
|
|
195
|
+
return React.useContext(DataListLayoutContext);
|
|
195
196
|
}
|
|
196
197
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
198
|
+
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";
|
|
199
|
+
var styles$b = {"menu":"jHcHGQ-HDbk-"};
|
|
200
|
+
styleInject_es.styleInject(css_248z$b);
|
|
201
|
+
|
|
202
|
+
const CONTAINER_TEST_ID = "ATL-DataListFilters-Container";
|
|
203
|
+
|
|
204
|
+
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";
|
|
205
|
+
var styles$a = {"fadeContainer":"jbBRoxlZlNI-","overflowGrid":"MnN8qbS4hw4-","overflowTrigger":"b-5P7Z8eGO8-","overflowLeft":"xzaCS4slLpI-","overflowRight":"Jf227kC8Nu0-"};
|
|
206
|
+
styleInject_es.styleInject(css_248z$a);
|
|
207
|
+
|
|
208
|
+
function DataListOverflowFade({ children }) {
|
|
209
|
+
const [leftRef, isLeftVisible] = useInView.useInView();
|
|
210
|
+
const [rightRef, isRightVisible] = useInView.useInView();
|
|
211
|
+
return (React__default["default"].createElement("div", { "data-testid": CONTAINER_TEST_ID, className: classnames__default["default"](styles$a.fadeContainer, {
|
|
212
|
+
[styles$a.overflowLeft]: !isLeftVisible,
|
|
213
|
+
[styles$a.overflowRight]: !isRightVisible,
|
|
214
|
+
}) },
|
|
215
|
+
React__default["default"].createElement("div", { className: styles$a.overflowGrid },
|
|
216
|
+
React__default["default"].createElement("span", { ref: leftRef, className: styles$a.overflowTrigger }),
|
|
217
|
+
children,
|
|
218
|
+
React__default["default"].createElement("span", { ref: rightRef, className: styles$a.overflowTrigger }))));
|
|
214
219
|
}
|
|
215
220
|
|
|
216
|
-
var css_248z$
|
|
217
|
-
var styles$
|
|
218
|
-
styleInject_es.styleInject(css_248z$
|
|
221
|
+
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";
|
|
222
|
+
var styles$9 = {"tags":"WRV-UmQmPzo-","tagCount":"liQeWCMenD0-"};
|
|
223
|
+
styleInject_es.styleInject(css_248z$9);
|
|
219
224
|
|
|
220
225
|
function DataListTags({ items }) {
|
|
221
226
|
const ref = React.useRef(null);
|
|
@@ -235,10 +240,10 @@ function DataListTags({ items }) {
|
|
|
235
240
|
elements === null || elements === void 0 ? void 0 : elements.forEach(element => observer.unobserve(element));
|
|
236
241
|
};
|
|
237
242
|
}, [items]);
|
|
238
|
-
return (React__default["default"].createElement("div", { className: styles$
|
|
243
|
+
return (React__default["default"].createElement("div", { className: styles$9.tags, ref: ref },
|
|
239
244
|
items.filter(Boolean).map((tag, index) => (React__default["default"].createElement("div", { key: tag, "data-tag-element": index },
|
|
240
245
|
React__default["default"].createElement(InlineLabel.InlineLabel, null, tag)))),
|
|
241
|
-
Boolean(visibleItems) && (React__default["default"].createElement("div", { className: styles$
|
|
246
|
+
Boolean(visibleItems) && (React__default["default"].createElement("div", { className: styles$9.tagCount },
|
|
242
247
|
React__default["default"].createElement(Text.Text, null,
|
|
243
248
|
"+",
|
|
244
249
|
visibleItems)))));
|
|
@@ -267,22 +272,22 @@ function buildIntersectionThreshold(items) {
|
|
|
267
272
|
return thresholds;
|
|
268
273
|
}
|
|
269
274
|
|
|
270
|
-
var css_248z$
|
|
271
|
-
var styles$
|
|
272
|
-
styleInject_es.styleInject(css_248z$
|
|
275
|
+
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";
|
|
276
|
+
var styles$8 = {"headerLabel":"fLmJZJJqMcE-","sortable":"UG8cHUT3Hds-"};
|
|
277
|
+
styleInject_es.styleInject(css_248z$8);
|
|
273
278
|
|
|
274
|
-
var css_248z$
|
|
275
|
-
var styles$
|
|
276
|
-
styleInject_es.styleInject(css_248z$
|
|
279
|
+
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";
|
|
280
|
+
var styles$7 = {"sortIcon":"AN5egORYy-0-","active":"F1uTDCK0Sb0-","inactive":"_6KYeQXWXLQ8-"};
|
|
281
|
+
styleInject_es.styleInject(css_248z$7);
|
|
277
282
|
|
|
278
283
|
const SORTING_ICON_TEST_ID = "ATL-DataList-Sorting-Icon";
|
|
279
284
|
function DataListSortingArrows({ order }) {
|
|
280
|
-
return (React__default["default"].createElement("div", { className: styles$
|
|
285
|
+
return (React__default["default"].createElement("div", { className: styles$7.sortIcon, "data-testid": SORTING_ICON_TEST_ID },
|
|
281
286
|
React__default["default"].createElement("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
|
|
282
287
|
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
288
|
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
289
|
function getActiveClassName(targetOrder) {
|
|
285
|
-
return order === targetOrder ? styles$
|
|
290
|
+
return order === targetOrder ? styles$7.active : styles$7.inactive;
|
|
286
291
|
}
|
|
287
292
|
}
|
|
288
293
|
|
|
@@ -291,8 +296,8 @@ function DataListHeaderTile({ headers, headerKey, }) {
|
|
|
291
296
|
const isSortable = sorting === null || sorting === void 0 ? void 0 : sorting.sortable.includes(headerKey);
|
|
292
297
|
const sortingState = sorting === null || sorting === void 0 ? void 0 : sorting.state;
|
|
293
298
|
const Tag = isSortable ? "button" : "div";
|
|
294
|
-
return (React__default["default"].createElement(Tag, { className: classnames__default["default"](styles$
|
|
295
|
-
[styles$
|
|
299
|
+
return (React__default["default"].createElement(Tag, { className: classnames__default["default"](styles$8.headerLabel, {
|
|
300
|
+
[styles$8.sortable]: isSortable,
|
|
296
301
|
}), onClick: handleOnClick },
|
|
297
302
|
React__default["default"].createElement(Text.Text, { maxLines: "single" }, headers[headerKey]),
|
|
298
303
|
(sortingState === null || sortingState === void 0 ? void 0 : sortingState.key) === headerKey && (React__default["default"].createElement(DataListSortingArrows, { order: sortingState.order }))));
|
|
@@ -365,7 +370,7 @@ function generateHeaderElements(headers) {
|
|
|
365
370
|
const headerElements = Object.keys(headers).reduce((acc, key) => (Object.assign(Object.assign({}, acc), { [key]: React__default["default"].createElement(DataListHeaderTile, { headers: headers, headerKey: key }) })), {});
|
|
366
371
|
return isEmpty__default["default"](headerElements) ? undefined : headerElements;
|
|
367
372
|
}
|
|
368
|
-
function
|
|
373
|
+
function sortBreakpoints(sizeProp) {
|
|
369
374
|
return sizeProp.sort((a, b) => BREAKPOINTS.indexOf(a) - BREAKPOINTS.indexOf(b));
|
|
370
375
|
}
|
|
371
376
|
function getExposedActions(childrenArray, childCount = 2) {
|
|
@@ -383,6 +388,100 @@ function getExposedActions(childrenArray, childCount = 2) {
|
|
|
383
388
|
}, []);
|
|
384
389
|
}
|
|
385
390
|
|
|
391
|
+
const DataListLayoutActionsContext = React.createContext({ activeItem: undefined });
|
|
392
|
+
function useDataListLayoutActionsContext() {
|
|
393
|
+
return React.useContext(DataListLayoutActionsContext);
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
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";
|
|
397
|
+
var styles$6 = {"menu":"aokwZU8jbWU-","overlay":"XtVRP97TVSE-"};
|
|
398
|
+
styleInject_es.styleInject(css_248z$6);
|
|
399
|
+
|
|
400
|
+
const variants$1 = {
|
|
401
|
+
hidden: { opacity: 0, y: -10 },
|
|
402
|
+
visible: { opacity: 1, y: 0 },
|
|
403
|
+
};
|
|
404
|
+
function DataListActionsMenu({ visible = false, position, onRequestClose, children, }) {
|
|
405
|
+
const [ref, setRef] = React.useState();
|
|
406
|
+
useRefocusOnActivator.useRefocusOnActivator(visible);
|
|
407
|
+
const focusTrapRef = useFocusTrap.useFocusTrap(visible);
|
|
408
|
+
useOnKeyDown.useOnKeyDown(onRequestClose, "Escape");
|
|
409
|
+
return ReactDOM.createPortal(React__default["default"].createElement(framerMotion.AnimatePresence, null, visible && (React__default["default"].createElement("div", { ref: focusTrapRef, onClick: handleClick },
|
|
410
|
+
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),
|
|
411
|
+
React__default["default"].createElement("button", { className: styles$6.overlay, onClick: onRequestClose, "aria-label": "Close menu" })))), document.body);
|
|
412
|
+
function handleClick(event) {
|
|
413
|
+
// Prevent menu from firing the parent's onClick event when it is nested
|
|
414
|
+
// within a clickable list item
|
|
415
|
+
event.stopPropagation();
|
|
416
|
+
}
|
|
417
|
+
function getPositionCssVars() {
|
|
418
|
+
const { posX, posY } = getPosition();
|
|
419
|
+
return {
|
|
420
|
+
"--actions-menu-x": `${posX}px`,
|
|
421
|
+
"--actions-menu-y": `${posY}px`,
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
function getPosition() {
|
|
425
|
+
const rect = ref === null || ref === void 0 ? void 0 : ref.getBoundingClientRect();
|
|
426
|
+
const { width = 0, height = 0 } = rect || {};
|
|
427
|
+
const { x, y } = position;
|
|
428
|
+
const xIsOffScreen = x + width > window.innerWidth;
|
|
429
|
+
const yIsOffScreen = y + height > window.innerHeight;
|
|
430
|
+
const xOffSet = x + width - window.innerWidth + design.tokens["space-base"];
|
|
431
|
+
const yOffSet = y + height - window.innerHeight;
|
|
432
|
+
const newPosX = Math.floor(xIsOffScreen ? x - xOffSet : x);
|
|
433
|
+
const newPosY = Math.floor(yIsOffScreen ? y - yOffSet : y);
|
|
434
|
+
return { posX: newPosX, posY: newPosY };
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
function DataListItemActionsOverflow({ actions, }) {
|
|
439
|
+
const [menuPosition, setMenuPosition] = React.useState({ x: 0, y: 0 });
|
|
440
|
+
const [showMenu, setShowMenu] = React.useState(false);
|
|
441
|
+
if (actions.length === 0)
|
|
442
|
+
return null;
|
|
443
|
+
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
444
|
+
React__default["default"].createElement(Tooltip.Tooltip, { message: "More actions" },
|
|
445
|
+
React__default["default"].createElement(Button.Button, { icon: "more", ariaLabel: "More actions", type: "secondary", variation: "subtle", onClick: handleMoreClick })),
|
|
446
|
+
React__default["default"].createElement(DataListActionsMenu, { visible: showMenu, position: menuPosition, onRequestClose: handleClose }, actions)));
|
|
447
|
+
function handleMoreClick(event) {
|
|
448
|
+
// Prevent firing the parent's onClick event when it is nested
|
|
449
|
+
// within a clickable list item
|
|
450
|
+
event.stopPropagation();
|
|
451
|
+
setShowMenu(true);
|
|
452
|
+
const rect = event.currentTarget.getBoundingClientRect();
|
|
453
|
+
const posX = rect.x;
|
|
454
|
+
const posY = rect.y + rect.height;
|
|
455
|
+
setMenuPosition({ x: posX, y: posY });
|
|
456
|
+
}
|
|
457
|
+
function handleClose() {
|
|
458
|
+
setShowMenu(false);
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
function DataListActions({ children, itemsToExpose = 2, }) {
|
|
463
|
+
const { activeItem } = useDataListLayoutActionsContext();
|
|
464
|
+
const childrenArray = React.Children.toArray(children).filter(React.isValidElement);
|
|
465
|
+
const exposedActions = getExposedActions(childrenArray, itemsToExpose);
|
|
466
|
+
childrenArray.splice(0, exposedActions.length);
|
|
467
|
+
return (React__default["default"].createElement(DataListOverflowFade, null,
|
|
468
|
+
exposedActions.map(({ props }) => {
|
|
469
|
+
if (!props.icon)
|
|
470
|
+
return null;
|
|
471
|
+
return (React__default["default"].createElement(Tooltip.Tooltip, { key: props.label, message: props.label },
|
|
472
|
+
React__default["default"].createElement(Button.Button, { icon: props.icon, ariaLabel: props.label, onClick: () => {
|
|
473
|
+
var _a, _b;
|
|
474
|
+
if (activeItem) {
|
|
475
|
+
(_a = props.onClick) === null || _a === void 0 ? void 0 : _a.call(props, activeItem);
|
|
476
|
+
}
|
|
477
|
+
else {
|
|
478
|
+
(_b = props.onClick) === null || _b === void 0 ? void 0 : _b.call(props);
|
|
479
|
+
}
|
|
480
|
+
}, type: "secondary", variation: "subtle" })));
|
|
481
|
+
}),
|
|
482
|
+
React__default["default"].createElement(DataListItemActionsOverflow, { actions: childrenArray })));
|
|
483
|
+
}
|
|
484
|
+
|
|
386
485
|
// This component is meant to capture the props of the DataList.ItemActions
|
|
387
486
|
function DataListItemActions(
|
|
388
487
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
@@ -393,40 +492,28 @@ const variants = {
|
|
|
393
492
|
hidden: { opacity: 0, y: 10 },
|
|
394
493
|
visible: { opacity: 1, y: 0 },
|
|
395
494
|
};
|
|
396
|
-
function InternalDataListItemActions(
|
|
495
|
+
function InternalDataListItemActions() {
|
|
397
496
|
const { itemActionComponent } = useDataListContext();
|
|
398
497
|
if (!itemActionComponent)
|
|
399
498
|
return null;
|
|
400
499
|
const { children } = itemActionComponent.props;
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
childrenArray.splice(0, exposedActions.length);
|
|
500
|
+
if (!children)
|
|
501
|
+
return null;
|
|
404
502
|
return (React__default["default"].createElement(framerMotion.motion.div, { variants: variants, initial: "hidden", animate: "visible", exit: "hidden", transition: {
|
|
405
503
|
duration: TRANSITION_DURATION_IN_SECONDS,
|
|
406
504
|
delay: TRANSITION_DELAY_IN_SECONDS,
|
|
407
505
|
}, className: styles$b.menu, onContextMenu: handleContextMenu },
|
|
408
|
-
|
|
409
|
-
if (!props.icon)
|
|
410
|
-
return null;
|
|
411
|
-
return (React__default["default"].createElement(Tooltip.Tooltip, { key: props.label, message: props.label },
|
|
412
|
-
React__default["default"].createElement(Button.Button, { icon: props.icon, ariaLabel: props.label, onClick: () => { var _a; return (_a = props.onClick) === null || _a === void 0 ? void 0 : _a.call(props, item); }, type: "secondary", variation: "subtle" })));
|
|
413
|
-
}),
|
|
414
|
-
React__default["default"].createElement(DataListItemActionsOverflow, { actions: childrenArray, item: item })));
|
|
506
|
+
React__default["default"].createElement(DataListActions, null, children)));
|
|
415
507
|
}
|
|
416
508
|
function handleContextMenu(event) {
|
|
417
509
|
event.stopPropagation();
|
|
418
510
|
}
|
|
419
511
|
|
|
420
|
-
const DataListLayoutActionsContext = React.createContext({ activeItem: undefined });
|
|
421
|
-
function useDataListLayoutActionsContext() {
|
|
422
|
-
return React.useContext(DataListLayoutActionsContext);
|
|
423
|
-
}
|
|
424
|
-
|
|
425
512
|
function DataListItemInternal({ children, item, }) {
|
|
426
513
|
const { selected, onSelect } = useDataListContext();
|
|
427
514
|
if (selected !== undefined && onSelect) {
|
|
428
|
-
return (React__default["default"].createElement("div", { className: classnames__default["default"](
|
|
429
|
-
[
|
|
515
|
+
return (React__default["default"].createElement("div", { className: classnames__default["default"](styles$e.selectable, {
|
|
516
|
+
[styles$e.selected]: selected === null || selected === void 0 ? void 0 : selected.length,
|
|
430
517
|
}) },
|
|
431
518
|
children,
|
|
432
519
|
React__default["default"].createElement(Checkbox.Checkbox, { checked: selected === null || selected === void 0 ? void 0 : selected.includes(item.id), onChange: handleChange })));
|
|
@@ -448,14 +535,22 @@ function DataListItemClickableInternal({ onClick, url, to, children, }) {
|
|
|
448
535
|
return React__default["default"].createElement(React__default["default"].Fragment, null, children);
|
|
449
536
|
if (to) {
|
|
450
537
|
const computedTo = typeof to === "string" ? to : to(activeItem);
|
|
451
|
-
return (React__default["default"].createElement(reactRouterDom.Link, { className:
|
|
538
|
+
return (React__default["default"].createElement(reactRouterDom.Link, { className: styles$e.listItemClickable, to: computedTo, onClick: handleClick }, children));
|
|
452
539
|
}
|
|
453
540
|
if (url) {
|
|
454
541
|
const href = typeof url === "string" ? url : url(activeItem);
|
|
455
|
-
return (React__default["default"].createElement("a", { className:
|
|
542
|
+
return (React__default["default"].createElement("a", { className: styles$e.listItemClickable, href: href, onClick: handleClick }, children));
|
|
456
543
|
}
|
|
457
544
|
if (onClick) {
|
|
458
|
-
return (
|
|
545
|
+
return (
|
|
546
|
+
// A button can be nested within the list item. To prevent a button inside
|
|
547
|
+
// button error, we need to manually declare a div to be a button
|
|
548
|
+
React__default["default"].createElement("div", { role: "button", tabIndex: 0, className: styles$e.listItemClickable, onClick: handleClick, onKeyDown: e => {
|
|
549
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
550
|
+
e.preventDefault();
|
|
551
|
+
handleClick();
|
|
552
|
+
}
|
|
553
|
+
} }, children));
|
|
459
554
|
}
|
|
460
555
|
return React__default["default"].createElement(React__default["default"].Fragment, null, children);
|
|
461
556
|
function handleClick() {
|
|
@@ -482,15 +577,14 @@ function DataListItem({ item, layout, }) {
|
|
|
482
577
|
const isContextMenuVisible = Boolean(contextPosition);
|
|
483
578
|
const shouldShowContextMenu = showMenu && isContextMenuVisible && Boolean(contextMenuActions);
|
|
484
579
|
return (React__default["default"].createElement(DataListLayoutActionsContext.Provider, { value: { activeItem: item } },
|
|
485
|
-
React__default["default"].createElement("div", { onMouseEnter: handleShowMenu, onMouseLeave: handleHideMenu, onFocus: handleShowMenu, onBlur: handleHideMenu, onContextMenu: handleContextMenu, className: classnames__default["default"](
|
|
486
|
-
[
|
|
580
|
+
React__default["default"].createElement("div", { onMouseEnter: handleShowMenu, onMouseLeave: handleHideMenu, onFocus: handleShowMenu, onBlur: handleHideMenu, onContextMenu: handleContextMenu, className: classnames__default["default"](styles$e.listItem, {
|
|
581
|
+
[styles$e.active]: showMenu && isContextMenuVisible,
|
|
487
582
|
}), key: item.id },
|
|
488
583
|
React__default["default"].createElement(DataListItemInternal, { item: item },
|
|
489
|
-
React__default["default"].createElement(DataListItemClickable, null, layout
|
|
584
|
+
React__default["default"].createElement(DataListItemClickable, null, layout(generatedItem))),
|
|
490
585
|
React__default["default"].createElement(framerMotion.AnimatePresence, null,
|
|
491
|
-
showMenu && !hasInLayoutActions &&
|
|
492
|
-
React__default["default"].createElement(DataListActionsMenu, { key: item.id, visible: shouldShowContextMenu, position: contextPosition || { x: 0, y: 0 }, onRequestClose: () => setContextPosition(undefined) }, contextMenuActions
|
|
493
|
-
React.Children.map(contextMenuActions, action => (React__default["default"].createElement(InternalDataListAction, Object.assign({ key: item.id }, action.props, { item: item })))))))));
|
|
586
|
+
showMenu && !hasInLayoutActions && React__default["default"].createElement(InternalDataListItemActions, null),
|
|
587
|
+
React__default["default"].createElement(DataListActionsMenu, { key: item.id, visible: shouldShowContextMenu, position: contextPosition || { x: 0, y: 0 }, onRequestClose: () => setContextPosition(undefined) }, contextMenuActions)))));
|
|
494
588
|
function handleShowMenu() {
|
|
495
589
|
setShowMenu(true);
|
|
496
590
|
}
|
|
@@ -508,65 +602,35 @@ function DataListItem({ item, layout, }) {
|
|
|
508
602
|
}
|
|
509
603
|
}
|
|
510
604
|
|
|
511
|
-
function
|
|
512
|
-
const
|
|
513
|
-
const layoutToRender = layouts === null || layouts === void 0 ? void 0 : layouts.find(layout => {
|
|
514
|
-
const layoutSize = layout.props.size || "xs";
|
|
515
|
-
const isVisible = isLayoutVisible({
|
|
516
|
-
layoutSize,
|
|
517
|
-
mediaMatches,
|
|
518
|
-
sizePropsOfLayouts,
|
|
519
|
-
});
|
|
520
|
-
return isVisible;
|
|
521
|
-
});
|
|
522
|
-
return (layoutToRender && renderLayout(layoutToRender)) || React__default["default"].createElement(React__default["default"].Fragment, null);
|
|
523
|
-
}
|
|
524
|
-
/**
|
|
525
|
-
* Determine is layout is visible by checking a media query matches for the
|
|
526
|
-
* visible sizes of the layout and there isn't a larger layout that should be rendered
|
|
527
|
-
*/
|
|
528
|
-
function isLayoutVisible({ layoutSize, mediaMatches, sizePropsOfLayouts, }) {
|
|
529
|
-
const largerBreakpointsToHide = sizePropsOfLayouts === null || sizePropsOfLayouts === void 0 ? void 0 : sizePropsOfLayouts.filter(size => BREAKPOINTS.indexOf(size) > BREAKPOINTS.indexOf(layoutSize));
|
|
530
|
-
const sortedLargerBreakpoints = sortSizeProp(largerBreakpointsToHide || []);
|
|
531
|
-
const visibleBreakpoints = BREAKPOINTS.slice(BREAKPOINTS.indexOf(layoutSize), sortedLargerBreakpoints[0]
|
|
532
|
-
? BREAKPOINTS.indexOf(sortedLargerBreakpoints[0])
|
|
533
|
-
: undefined);
|
|
534
|
-
const isVisibleBreakpoint = visibleBreakpoints.some(breakpoint => {
|
|
535
|
-
return Boolean(mediaMatches === null || mediaMatches === void 0 ? void 0 : mediaMatches[breakpoint]);
|
|
536
|
-
});
|
|
537
|
-
const largerLayoutIsNotVisible = largerBreakpointsToHide === null || largerBreakpointsToHide === void 0 ? void 0 : largerBreakpointsToHide.reduce((acc, breakpoint) => {
|
|
538
|
-
return acc && !(mediaMatches === null || mediaMatches === void 0 ? void 0 : mediaMatches[breakpoint]);
|
|
539
|
-
}, true);
|
|
540
|
-
return isVisibleBreakpoint && largerLayoutIsNotVisible;
|
|
541
|
-
}
|
|
542
|
-
|
|
543
|
-
function DataListItems({ layouts, mediaMatches, data, }) {
|
|
605
|
+
function DataListItems({ size = "xs", }) {
|
|
606
|
+
const { data, layouts } = useDataListContext();
|
|
544
607
|
const [hasInLayoutActions, setHasInLayoutActions] = React.useState(false);
|
|
608
|
+
const layout = layouts[size];
|
|
609
|
+
if (!layout)
|
|
610
|
+
return null;
|
|
545
611
|
return (React__default["default"].createElement(DataListLayoutContext.Provider, { value: {
|
|
546
612
|
isInLayoutProvider: true,
|
|
547
613
|
hasInLayoutActions,
|
|
548
614
|
setHasInLayoutActions,
|
|
549
|
-
} },
|
|
550
|
-
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 }))))) })));
|
|
615
|
+
} }, data.map((child, i) => (React__default["default"].createElement(DataListItem, { key: data[i].id, index: i, item: child, layout: layout })))));
|
|
551
616
|
}
|
|
552
617
|
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
React__default["default"].createElement(
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
React__default["default"].createElement("span", { ref: rightRef, className: styles$5.overflowTrigger }))));
|
|
618
|
+
function DataListLayout({ children, size = "xs", }) {
|
|
619
|
+
const { layoutBreakpoints, registerLayout, registerLayoutBreakpoints, loadingState, } = useDataListContext();
|
|
620
|
+
const breakpoints = useResponsiveSizing();
|
|
621
|
+
React.useEffect(() => {
|
|
622
|
+
registerLayoutBreakpoints(size);
|
|
623
|
+
}, [size]);
|
|
624
|
+
React.useEffect(() => {
|
|
625
|
+
registerLayout(size, children);
|
|
626
|
+
}, [size, children]);
|
|
627
|
+
const sizeIndex = layoutBreakpoints.indexOf(size);
|
|
628
|
+
const nextAvailableSize = layoutBreakpoints[sizeIndex + 1];
|
|
629
|
+
const shouldRenderList = breakpoints[size] && !breakpoints[nextAvailableSize];
|
|
630
|
+
if (loadingState !== "initial" && shouldRenderList) {
|
|
631
|
+
return React__default["default"].createElement(DataListItems, { size: size });
|
|
632
|
+
}
|
|
633
|
+
return null;
|
|
570
634
|
}
|
|
571
635
|
|
|
572
636
|
// This component is meant to capture the props of the DataList.BulkActions
|
|
@@ -580,40 +644,10 @@ function InternalDataListBulkActions() {
|
|
|
580
644
|
if (!bulkActionsComponent)
|
|
581
645
|
return null;
|
|
582
646
|
const { children } = bulkActionsComponent.props;
|
|
583
|
-
const
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
return (React__default["default"].createElement(
|
|
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
|
-
function useMediaQuery(CSSMediaQuery) {
|
|
597
|
-
const [matches, setMatches] = React.useState(window.matchMedia(CSSMediaQuery).matches);
|
|
598
|
-
React.useEffect(() => {
|
|
599
|
-
const media = window.matchMedia(CSSMediaQuery);
|
|
600
|
-
if (media.matches !== matches) {
|
|
601
|
-
setMatches(media.matches);
|
|
602
|
-
}
|
|
603
|
-
const listener = () => setMatches(media.matches);
|
|
604
|
-
media.addEventListener("change", listener);
|
|
605
|
-
return () => media.removeEventListener("change", listener);
|
|
606
|
-
}, [CSSMediaQuery]);
|
|
607
|
-
return matches;
|
|
608
|
-
}
|
|
609
|
-
|
|
610
|
-
function useResponsiveSizing() {
|
|
611
|
-
const xs = useMediaQuery(`(width > ${BREAKPOINT_SIZES.xs}px)`);
|
|
612
|
-
const sm = useMediaQuery(`(width >= ${BREAKPOINT_SIZES.sm}px)`);
|
|
613
|
-
const md = useMediaQuery(`(width >= ${BREAKPOINT_SIZES.md}px)`);
|
|
614
|
-
const lg = useMediaQuery(`(width >= ${BREAKPOINT_SIZES.lg}px)`);
|
|
615
|
-
const xl = useMediaQuery(`(width >= ${BREAKPOINT_SIZES.xl}px)`);
|
|
616
|
-
return { xs, sm, md, lg, xl };
|
|
647
|
+
const { sm } = useResponsiveSizing();
|
|
648
|
+
// Collapse all actions under "More actions" when breakpoint is smaller than sm
|
|
649
|
+
const itemsToExpose = sm ? 3 : 0;
|
|
650
|
+
return (React__default["default"].createElement(DataListActions, { itemsToExpose: itemsToExpose }, children));
|
|
617
651
|
}
|
|
618
652
|
|
|
619
653
|
function DataListHeaderCheckbox({ children }) {
|
|
@@ -630,12 +664,12 @@ function DataListHeaderCheckbox({ children }) {
|
|
|
630
664
|
}) },
|
|
631
665
|
React__default["default"].createElement(Checkbox.Checkbox, { checked: isAllSelected(), indeterminate: selected.length > 0 && !isAllSelected(), onChange: onSelectAll },
|
|
632
666
|
React__default["default"].createElement("div", { className: styles$e.srOnly }, selectedLabel))),
|
|
633
|
-
React__default["default"].createElement(AnimatedSwitcher.AnimatedSwitcher, { switched: Boolean(selected.length), initialChild: children, switchTo: React__default["default"].createElement("div", { className: styles$e.
|
|
634
|
-
React__default["default"].createElement(
|
|
635
|
-
React__default["default"].createElement(
|
|
667
|
+
React__default["default"].createElement(AnimatedSwitcher.AnimatedSwitcher, { switched: Boolean(selected.length), initialChild: children, switchTo: React__default["default"].createElement("div", { className: styles$e.batchSelectContainer },
|
|
668
|
+
React__default["default"].createElement("div", { className: styles$e.headerBatchSelect },
|
|
669
|
+
React__default["default"].createElement(Text.Text, null,
|
|
636
670
|
selected.length,
|
|
637
|
-
" selected")
|
|
638
|
-
|
|
671
|
+
" selected"),
|
|
672
|
+
React__default["default"].createElement(Button.Button, { label: deselectText, onClick: () => onSelect === null || onSelect === void 0 ? void 0 : onSelect([]), type: "tertiary" })),
|
|
639
673
|
React__default["default"].createElement(InternalDataListBulkActions, null)) })));
|
|
640
674
|
function isAllSelected() {
|
|
641
675
|
// If there's a totalCount, we can use that to accurately determine if the
|
|
@@ -651,57 +685,26 @@ function DataListHeaderCheckbox({ children }) {
|
|
|
651
685
|
}
|
|
652
686
|
}
|
|
653
687
|
|
|
654
|
-
function
|
|
655
|
-
const
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
const
|
|
659
|
-
const
|
|
660
|
-
const showHeader = sizeKeys.reduce((previous, breakpoint) => {
|
|
661
|
-
const isHeaderVisible = headerVisibility[breakpoint] || false;
|
|
662
|
-
const isBreakpointTriggered = sizes[breakpoint];
|
|
663
|
-
return previous || (isBreakpointTriggered && isHeaderVisible);
|
|
664
|
-
}, false);
|
|
665
|
-
return showHeader;
|
|
666
|
-
}
|
|
667
|
-
|
|
668
|
-
function DataListHeader({ layouts, mediaMatches, headerData, }) {
|
|
669
|
-
const showHeader = useShowHeader();
|
|
670
|
-
const { selected } = useDataListContext();
|
|
688
|
+
function DataListHeader() {
|
|
689
|
+
const breakpoints = useResponsiveSizing();
|
|
690
|
+
const { headerVisibility = { xs: true, sm: true, md: true, lg: true, xl: true }, headers, selected, layoutBreakpoints, } = useDataListContext();
|
|
691
|
+
const size = getVisibleSize();
|
|
692
|
+
const { layout } = useActiveLayout();
|
|
693
|
+
const visible = headerVisibility[size];
|
|
671
694
|
const noItemsSelected = (selected === null || selected === void 0 ? void 0 : selected.length) === 0;
|
|
672
|
-
if ((!
|
|
695
|
+
if ((!visible && noItemsSelected) || !layout)
|
|
673
696
|
return null;
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
}, {}));
|
|
686
|
-
return (React__default["default"].createElement(DataListLayoutInternal, { layouts: layouts, mediaMatches: mediaMatches, renderLayout: layout => {
|
|
687
|
-
if (layout.props.size === "xs") {
|
|
688
|
-
return React__default["default"].createElement(LoadingStateXSBreakpoint, null);
|
|
689
|
-
}
|
|
690
|
-
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))))));
|
|
691
|
-
} }));
|
|
692
|
-
}
|
|
693
|
-
function LoadingStateXSBreakpoint() {
|
|
694
|
-
const loadingData = new Array(LOADING_STATE_LIMIT_ITEMS).fill(0);
|
|
695
|
-
return (React__default["default"].createElement(React__default["default"].Fragment, null, loadingData.map((_, i) => {
|
|
696
|
-
return (React__default["default"].createElement("div", { className: styles$c.mobileLoadingState, key: i },
|
|
697
|
-
React__default["default"].createElement(Glimmer.Glimmer.Text, null)));
|
|
698
|
-
})));
|
|
699
|
-
}
|
|
700
|
-
|
|
701
|
-
function DataListLayout(
|
|
702
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
703
|
-
_) {
|
|
704
|
-
return React__default["default"].createElement(React__default["default"].Fragment, null);
|
|
697
|
+
const headerData = generateHeaderElements(headers);
|
|
698
|
+
if (!headerData)
|
|
699
|
+
return null;
|
|
700
|
+
return (React__default["default"].createElement("div", { className: styles$e.headerTitles },
|
|
701
|
+
React__default["default"].createElement(DataListHeaderCheckbox, null, layout(headerData))));
|
|
702
|
+
function getVisibleSize() {
|
|
703
|
+
const visibilityKeys = Object.keys(headerVisibility);
|
|
704
|
+
const headerBreakpoints = sortBreakpoints(visibilityKeys).reverse();
|
|
705
|
+
const visibleHeaderSize = headerBreakpoints.find(key => breakpoints[key]);
|
|
706
|
+
return visibleHeaderSize || layoutBreakpoints[0];
|
|
707
|
+
}
|
|
705
708
|
}
|
|
706
709
|
|
|
707
710
|
function DataListSort() {
|
|
@@ -757,6 +760,20 @@ function DataListSort() {
|
|
|
757
760
|
}
|
|
758
761
|
}
|
|
759
762
|
|
|
763
|
+
function useShowHeader() {
|
|
764
|
+
const { headerVisibility } = useDataListContext();
|
|
765
|
+
if (headerVisibility === undefined)
|
|
766
|
+
return true;
|
|
767
|
+
const sizes = useResponsiveSizing();
|
|
768
|
+
const sizeKeys = Object.keys(sizes);
|
|
769
|
+
const showHeader = sizeKeys.reduce((previous, breakpoint) => {
|
|
770
|
+
const isHeaderVisible = headerVisibility[breakpoint] || false;
|
|
771
|
+
const isBreakpointTriggered = sizes[breakpoint];
|
|
772
|
+
return previous || (isBreakpointTriggered && isHeaderVisible);
|
|
773
|
+
}, false);
|
|
774
|
+
return showHeader;
|
|
775
|
+
}
|
|
776
|
+
|
|
760
777
|
// This component is meant to capture the props of the DataList.Filters
|
|
761
778
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
762
779
|
function DataListFilters(_) {
|
|
@@ -778,9 +795,9 @@ function InternalDataListFilters() {
|
|
|
778
795
|
showSortButton && React__default["default"].createElement(DataListSort, null)));
|
|
779
796
|
}
|
|
780
797
|
|
|
781
|
-
var css_248z$
|
|
782
|
-
var styles$
|
|
783
|
-
styleInject_es.styleInject(css_248z$
|
|
798
|
+
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";
|
|
799
|
+
var styles$5 = {"header":"PGOHzrMh374-","stuck":"PGjWc5ocjpI-"};
|
|
800
|
+
styleInject_es.styleInject(css_248z$5);
|
|
784
801
|
|
|
785
802
|
function DataListStickyHeader({ children }) {
|
|
786
803
|
const [isStuck, setIsStuck] = React.useState(false);
|
|
@@ -795,12 +812,12 @@ function DataListStickyHeader({ children }) {
|
|
|
795
812
|
ref.current && observer.unobserve(ref.current);
|
|
796
813
|
};
|
|
797
814
|
}, [handleObserver, ref.current]);
|
|
798
|
-
return (React__default["default"].createElement("div", { ref: ref, className: classnames__default["default"](styles$
|
|
815
|
+
return (React__default["default"].createElement("div", { ref: ref, className: classnames__default["default"](styles$5.header, { [styles$5.stuck]: isStuck }) }, children));
|
|
799
816
|
}
|
|
800
817
|
|
|
801
|
-
var css_248z$
|
|
802
|
-
var styles$
|
|
803
|
-
styleInject_es.styleInject(css_248z$
|
|
818
|
+
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";
|
|
819
|
+
var styles$4 = {"searchInput":"SaPMOnvw-3c-","searchInputVisible":"_3S1-91v2SYI-","searchButton":"_9GlBktsUALw-","withNoFilters":"_3Pjrt42x454-"};
|
|
820
|
+
styleInject_es.styleInject(css_248z$4);
|
|
804
821
|
|
|
805
822
|
const DATA_LIST_SEARCH_TEST_ID = "ATL-DataList-Search-input-wrapper";
|
|
806
823
|
// This component is meant to capture the props of the DataList.Search
|
|
@@ -809,7 +826,7 @@ function DataListSearch(_) {
|
|
|
809
826
|
return null;
|
|
810
827
|
}
|
|
811
828
|
/**
|
|
812
|
-
* Renders the DataList.Search component
|
|
829
|
+
* Renders the DataList.Search component.
|
|
813
830
|
*/
|
|
814
831
|
function InternalDataListSearch() {
|
|
815
832
|
const inputRef = React.useRef(null);
|
|
@@ -818,15 +835,19 @@ function InternalDataListSearch() {
|
|
|
818
835
|
const debouncedSearch = React.useCallback(debounce__default["default"]((value) => { var _a; return (_a = searchComponent === null || searchComponent === void 0 ? void 0 : searchComponent.props) === null || _a === void 0 ? void 0 : _a.onSearch(value); }, SEARCH_DEBOUNCE_DELAY), [searchComponent === null || searchComponent === void 0 ? void 0 : searchComponent.props.onSearch]);
|
|
819
836
|
if (!searchComponent)
|
|
820
837
|
return null;
|
|
821
|
-
const { placeholder } = searchComponent.props;
|
|
838
|
+
const { placeholder, initialValue } = searchComponent.props;
|
|
822
839
|
return (React__default["default"].createElement("div", { className: classnames__default["default"]({
|
|
823
|
-
[styles$
|
|
840
|
+
[styles$4.withNoFilters]: !filterComponent && !sorting,
|
|
824
841
|
}) },
|
|
825
|
-
React__default["default"].createElement("div", { "data-testid": DATA_LIST_SEARCH_TEST_ID, className: classnames__default["default"](styles$
|
|
826
|
-
[styles$
|
|
842
|
+
React__default["default"].createElement("div", { "data-testid": DATA_LIST_SEARCH_TEST_ID, className: classnames__default["default"](styles$4.searchInput, {
|
|
843
|
+
[styles$4.searchInputVisible]: visible,
|
|
827
844
|
}) },
|
|
828
|
-
React__default["default"].createElement(InputText.InputText
|
|
829
|
-
|
|
845
|
+
React__default["default"].createElement(InputText.InputText
|
|
846
|
+
// If the initial value changes, reset the input.
|
|
847
|
+
, {
|
|
848
|
+
// If the initial value changes, reset the input.
|
|
849
|
+
key: initialValue, defaultValue: initialValue, ref: inputRef, placeholder: getPlaceholder(), onChange: debouncedSearch, prefix: { icon: "search" }, size: "small" })),
|
|
850
|
+
React__default["default"].createElement("div", { className: styles$4.searchButton },
|
|
830
851
|
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
852
|
function getPlaceholder() {
|
|
832
853
|
if (placeholder)
|
|
@@ -844,9 +865,9 @@ function InternalDataListSearch() {
|
|
|
844
865
|
}
|
|
845
866
|
}
|
|
846
867
|
|
|
847
|
-
var css_248z$
|
|
848
|
-
var styles$
|
|
849
|
-
styleInject_es.styleInject(css_248z$
|
|
868
|
+
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";
|
|
869
|
+
var styles$3 = {"emptyStateWrapper":"zg3w9nQga-M-"};
|
|
870
|
+
styleInject_es.styleInject(css_248z$3);
|
|
850
871
|
|
|
851
872
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
852
873
|
function DataListEmptyState(_) {
|
|
@@ -855,7 +876,7 @@ function DataListEmptyState(_) {
|
|
|
855
876
|
function InternalDataListEmptyState() {
|
|
856
877
|
const { emptyStateComponents: components, filtered } = React.useContext(DataListContext);
|
|
857
878
|
const { message, action } = getMessages();
|
|
858
|
-
return (React__default["default"].createElement("div", { className: styles$
|
|
879
|
+
return (React__default["default"].createElement("div", { className: styles$3.emptyStateWrapper },
|
|
859
880
|
React__default["default"].createElement(Text.Text, { align: "center" }, message),
|
|
860
881
|
renderButton(action)));
|
|
861
882
|
function getMessages() {
|
|
@@ -889,9 +910,9 @@ function getEmptyStates(components) {
|
|
|
889
910
|
return { defaultEmptyState, filteredEmptyState };
|
|
890
911
|
}
|
|
891
912
|
|
|
892
|
-
var css_248z$
|
|
893
|
-
var styles$
|
|
894
|
-
styleInject_es.styleInject(css_248z$
|
|
913
|
+
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";
|
|
914
|
+
var styles$2 = {"trigger":"IC-Y9bTIVFo-","loadingMore":"PbZLGpbI6ZM-","backToTop":"_6zA6B-jmz6o-","fadeIn":"gZ4DUv82g5I-"};
|
|
915
|
+
styleInject_es.styleInject(css_248z$2);
|
|
895
916
|
|
|
896
917
|
function DataListLoadMoreTrigger() {
|
|
897
918
|
const { onLoadMore } = useDataListContext();
|
|
@@ -899,7 +920,7 @@ function DataListLoadMoreTrigger() {
|
|
|
899
920
|
React.useEffect(() => {
|
|
900
921
|
isInView && (onLoadMore === null || onLoadMore === void 0 ? void 0 : onLoadMore());
|
|
901
922
|
}, [isInView]);
|
|
902
|
-
return (React__default["default"].createElement("div", { ref: inViewRef, className: styles$
|
|
923
|
+
return (React__default["default"].createElement("div", { ref: inViewRef, className: styles$2.trigger, "data-testid": DATA_LOAD_MORE_TEST_ID }));
|
|
903
924
|
}
|
|
904
925
|
|
|
905
926
|
const MAX_DATA_COUNT = 50;
|
|
@@ -908,20 +929,40 @@ function DataListLoadMore({ onBackToTop }) {
|
|
|
908
929
|
const showBackToTop = data.length > MAX_DATA_COUNT && loadingState !== "loadingMore";
|
|
909
930
|
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
910
931
|
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$
|
|
932
|
+
loadingState === "loadingMore" && (React__default["default"].createElement("div", { "data-testid": DATA_LIST_LOADING_MORE_SPINNER_TEST_ID, className: styles$2.loadingMore },
|
|
912
933
|
React__default["default"].createElement(Spinner.Spinner, { size: "small" }))),
|
|
913
|
-
showBackToTop && (React__default["default"].createElement("div", { className: styles$
|
|
934
|
+
showBackToTop && (React__default["default"].createElement("div", { className: styles$2.backToTop },
|
|
914
935
|
React__default["default"].createElement(Button.Button, { label: "Back to top", onClick: onBackToTop, size: "small", variation: "subtle" })))));
|
|
915
936
|
}
|
|
916
937
|
|
|
938
|
+
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";
|
|
939
|
+
var styles$1 = {"action":"iyg43v-S9yU-","label":"AUJNqz93ZDA-"};
|
|
940
|
+
styleInject_es.styleInject(css_248z$1);
|
|
941
|
+
|
|
942
|
+
function DataListAction({ label, icon, destructive, onClick, }) {
|
|
943
|
+
const { activeItem } = useDataListLayoutActionsContext();
|
|
944
|
+
const color = destructive ? "critical" : "blue";
|
|
945
|
+
return (React__default["default"].createElement("button", { className: styles$1.action, onClick: handleClick },
|
|
946
|
+
icon && React__default["default"].createElement(Icon.Icon, { name: icon, color: color }),
|
|
947
|
+
React__default["default"].createElement(Typography.Typography, { textColor: color },
|
|
948
|
+
React__default["default"].createElement("span", { className: styles$1.label }, label))));
|
|
949
|
+
function handleClick() {
|
|
950
|
+
if (activeItem) {
|
|
951
|
+
onClick === null || onClick === void 0 ? void 0 : onClick(activeItem);
|
|
952
|
+
}
|
|
953
|
+
else {
|
|
954
|
+
onClick === null || onClick === void 0 ? void 0 : onClick();
|
|
955
|
+
}
|
|
956
|
+
}
|
|
957
|
+
}
|
|
958
|
+
|
|
917
959
|
var css_248z = "._0m75bgCVBhk- {\n visibility: hidden;\n}\n";
|
|
918
960
|
var styles = {"hidden":"_0m75bgCVBhk-"};
|
|
919
961
|
styleInject_es.styleInject(css_248z);
|
|
920
962
|
|
|
921
963
|
function DataListLayoutActions() {
|
|
922
|
-
const { itemActionComponent } = useDataListContext();
|
|
964
|
+
const { itemActionComponent, loadingState } = useDataListContext();
|
|
923
965
|
const { setHasInLayoutActions } = useDataListLayoutContext();
|
|
924
|
-
const { activeItem } = useDataListLayoutActionsContext();
|
|
925
966
|
const { children: actionsChildren } = (itemActionComponent === null || itemActionComponent === void 0 ? void 0 : itemActionComponent.props) || {};
|
|
926
967
|
const actions = React.Children.toArray(actionsChildren);
|
|
927
968
|
const hasActions = actions.length > 0;
|
|
@@ -931,10 +972,13 @@ function DataListLayoutActions() {
|
|
|
931
972
|
setHasInLayoutActions(false);
|
|
932
973
|
};
|
|
933
974
|
}, []);
|
|
975
|
+
if (loadingState === "initial") {
|
|
976
|
+
return React__default["default"].createElement(Glimmer.Glimmer, { shape: "square", size: "large" });
|
|
977
|
+
}
|
|
934
978
|
if (!hasActions)
|
|
935
979
|
return null;
|
|
936
980
|
return (React__default["default"].createElement(DataListLayoutActionsWrapper, null,
|
|
937
|
-
React__default["default"].createElement(DataListItemActionsOverflow, { actions: actions
|
|
981
|
+
React__default["default"].createElement(DataListItemActionsOverflow, { actions: actions })));
|
|
938
982
|
}
|
|
939
983
|
function DataListLayoutActionsWrapper({ children }) {
|
|
940
984
|
const { isInLayoutProvider } = useDataListLayoutContext();
|
|
@@ -943,34 +987,10 @@ function DataListLayoutActionsWrapper({ children }) {
|
|
|
943
987
|
return React__default["default"].createElement("div", { className: styles.hidden }, children);
|
|
944
988
|
}
|
|
945
989
|
|
|
946
|
-
function useLayoutMediaQueries() {
|
|
947
|
-
const mediaQueries = BREAKPOINTS.reduce((previous, breakpoint) => (Object.assign(Object.assign({}, previous), { [breakpoint]: window.matchMedia(breakpointToMediaQuery(breakpoint)) })), {});
|
|
948
|
-
const initialMatches = BREAKPOINTS.reduce((previous, breakpoint) => (Object.assign(Object.assign({}, previous), { [breakpoint]: mediaQueries[breakpoint].matches })), {});
|
|
949
|
-
const [matches, setMatches] = React.useState(initialMatches);
|
|
950
|
-
const handlers = BREAKPOINTS.reduce((previous, breakpoint) => {
|
|
951
|
-
const handler = (e) => setMatches(previousMatches => (Object.assign(Object.assign({}, previousMatches), { [breakpoint]: e.matches })));
|
|
952
|
-
return Object.assign(Object.assign({}, previous), { [breakpoint]: handler });
|
|
953
|
-
}, {});
|
|
954
|
-
// Set up mediaQuery event handlers
|
|
955
|
-
React.useEffect(() => {
|
|
956
|
-
BREAKPOINTS.forEach(breakpoint => {
|
|
957
|
-
mediaQueries[breakpoint].addEventListener("change", handlers[breakpoint]);
|
|
958
|
-
});
|
|
959
|
-
return () => {
|
|
960
|
-
BREAKPOINTS.forEach(breakpoint => {
|
|
961
|
-
mediaQueries[breakpoint].removeEventListener("change", handlers[breakpoint]);
|
|
962
|
-
});
|
|
963
|
-
};
|
|
964
|
-
}, [mediaQueries]);
|
|
965
|
-
return matches;
|
|
966
|
-
}
|
|
967
|
-
function breakpointToMediaQuery(breakpoint) {
|
|
968
|
-
return `(min-width: ${BREAKPOINT_SIZES[breakpoint]}px)`;
|
|
969
|
-
}
|
|
970
|
-
|
|
971
990
|
function DataList(_a) {
|
|
972
|
-
var
|
|
973
|
-
|
|
991
|
+
var { selected = [], sorting } = _a, props = tslib_es6.__rest(_a, ["selected", "sorting"]);
|
|
992
|
+
const [layoutBreakpoints, setLayoutBreakpoints] = React.useState([]);
|
|
993
|
+
const [layouts, setLayouts] = React.useState({});
|
|
974
994
|
const searchComponent = getCompoundComponent(props.children, DataListSearch);
|
|
975
995
|
const filterComponent = getCompoundComponent(props.children, DataListFilters);
|
|
976
996
|
const layoutComponents = getCompoundComponents(props.children, DataListLayout);
|
|
@@ -982,16 +1002,24 @@ function DataList(_a) {
|
|
|
982
1002
|
layoutComponents,
|
|
983
1003
|
emptyStateComponents,
|
|
984
1004
|
itemActionComponent,
|
|
985
|
-
bulkActionsComponent
|
|
1005
|
+
bulkActionsComponent,
|
|
1006
|
+
layoutBreakpoints,
|
|
1007
|
+
registerLayoutBreakpoints,
|
|
1008
|
+
layouts,
|
|
1009
|
+
registerLayout }, props), { selected,
|
|
986
1010
|
// T !== DataListObject
|
|
987
1011
|
sorting: sorting }) },
|
|
988
1012
|
React__default["default"].createElement(InternalDataList, null)));
|
|
1013
|
+
function registerLayoutBreakpoints(size) {
|
|
1014
|
+
setLayoutBreakpoints(prev => sortBreakpoints([...prev, size]));
|
|
1015
|
+
}
|
|
1016
|
+
function registerLayout(size, children) {
|
|
1017
|
+
setLayouts(prev => (Object.assign(Object.assign({}, prev), { [size]: children })));
|
|
1018
|
+
}
|
|
989
1019
|
}
|
|
990
1020
|
function InternalDataList() {
|
|
991
|
-
const { data,
|
|
1021
|
+
const { data, title, totalCount, loadingState = "none", layoutComponents, } = useDataListContext();
|
|
992
1022
|
const backToTopRef = React.useRef(null);
|
|
993
|
-
const headerData = generateHeaderElements(headers);
|
|
994
|
-
const mediaMatches = useLayoutMediaQueries();
|
|
995
1023
|
const initialLoading = loadingState === "initial";
|
|
996
1024
|
const showEmptyState = !initialLoading && data.length === 0;
|
|
997
1025
|
const shouldRenderLoadMoreTrigger = !initialLoading && !showEmptyState;
|
|
@@ -1004,10 +1032,10 @@ function InternalDataList() {
|
|
|
1004
1032
|
React__default["default"].createElement("div", { className: styles$e.headerFilters },
|
|
1005
1033
|
React__default["default"].createElement(InternalDataListFilters, null),
|
|
1006
1034
|
React__default["default"].createElement(InternalDataListSearch, null)),
|
|
1007
|
-
|
|
1008
|
-
initialLoading &&
|
|
1035
|
+
React__default["default"].createElement(DataListHeader, null)),
|
|
1036
|
+
initialLoading && React__default["default"].createElement(DataListLoadingState, null),
|
|
1009
1037
|
showEmptyState && React__default["default"].createElement(InternalDataListEmptyState, null),
|
|
1010
|
-
|
|
1038
|
+
layoutComponents,
|
|
1011
1039
|
loadingState === "filtering" && (React__default["default"].createElement("div", { "data-testid": DATA_LIST_FILTERING_SPINNER_TEST_ID, className: styles$e.filtering },
|
|
1012
1040
|
React__default["default"].createElement("div", { className: styles$e.filteringSpinner },
|
|
1013
1041
|
React__default["default"].createElement(Spinner.Spinner, { size: "small" })))),
|
|
@@ -1045,6 +1073,9 @@ DataList.EmptyState = DataListEmptyState;
|
|
|
1045
1073
|
DataList.Filters = DataListFilters;
|
|
1046
1074
|
/**
|
|
1047
1075
|
* Enables the search functionality of the DataList.
|
|
1076
|
+
*
|
|
1077
|
+
* Since the debounce is implemented within the component, it can only be an
|
|
1078
|
+
* uncontrolled component. Thus the lack of a `value` prop.
|
|
1048
1079
|
*/
|
|
1049
1080
|
DataList.Search = DataListSearch;
|
|
1050
1081
|
/**
|