@jobber/components 6.9.0 → 6.9.1-CLEANUPau-2d4ca7d.34

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.
@@ -16,6 +16,7 @@ export declare const DATA_LIST_FILTERING_SPINNER_TEST_ID = "ATL-DataList-filteri
16
16
  export declare const DATA_LIST_LOADING_MORE_SPINNER_TEST_ID = "ATL-DataList-loadingMoreSpinner";
17
17
  export declare const DATA_LOAD_MORE_TEST_ID = "ATL-DataList-LoadMore-trigger";
18
18
  export declare const DATA_LIST_STICKY_HEADER_TEST_ID = "ATL-DataList-stickyHeader";
19
+ export declare const DATA_LIST_TITLE_CONTAINER_TEST_ID = "ATL-DataList-titleContainer";
19
20
  export declare const TRANSITION_DURATION_IN_SECONDS: number;
20
21
  export declare const TRANSITION_DELAY_IN_SECONDS: number;
21
22
  export {};
@@ -57,10 +57,11 @@ function InternalDataList({ shouldRenderStickyHeader, }) {
57
57
  const initialLoading = loadingState === "initial";
58
58
  const showEmptyState = !initialLoading && data.length === 0;
59
59
  const shouldRenderLoadMoreTrigger = !initialLoading && !showEmptyState;
60
+ const shouldRenderTitleContainer = initialLoading || title !== undefined || totalCount !== undefined;
60
61
  return (React.createElement("div", { className: DataList_module.styles.wrapper },
61
- React.createElement("div", { className: DataList_module.styles.titleContainer },
62
+ shouldRenderTitleContainer && (React.createElement("div", { className: DataList_module.styles.titleContainer, "data-testid": DataList_const.DATA_LIST_TITLE_CONTAINER_TEST_ID },
62
63
  title && React.createElement(Heading.Heading, { level: 3 }, title),
63
- React.createElement(DataListTotalCount.DataListTotalCount, { totalCount: totalCount, loading: initialLoading })),
64
+ totalCount !== undefined && (React.createElement(DataListTotalCount.DataListTotalCount, { totalCount: totalCount, loading: initialLoading })))),
64
65
  React.createElement("div", { ref: backToTopRef }),
65
66
  shouldRenderStickyHeader && (React.createElement(DataListStickyHeader.DataListStickyHeader, null,
66
67
  React.createElement("div", { className: DataList_module.styles.headerFilters },
@@ -15,7 +15,7 @@ import { D as DataListAction } from './DataListAction-es.js';
15
15
  import { D as DataListLayoutActions } from './DataListLayoutActions-es.js';
16
16
  import { D as DataListContext, u as useDataListContext } from './DataListContext-es.js';
17
17
  import { s as sortBreakpoints, g as getCompoundComponent, a as getCompoundComponents } from './DataList.utils-es.js';
18
- import { D as DATA_LIST_FILTERING_SPINNER_TEST_ID } from './DataList.const-es.js';
18
+ import { D as DATA_LIST_TITLE_CONTAINER_TEST_ID, a as DATA_LIST_FILTERING_SPINNER_TEST_ID } from './DataList.const-es.js';
19
19
  import { D as DataListBulkActions } from './DataListBulkActions-es.js';
20
20
  import { I as InternalDataListStatusBar, D as DataListStatusBar } from './DataListStatusBar-es.js';
21
21
  import { H as Heading } from './Heading-es.js';
@@ -55,10 +55,11 @@ function InternalDataList({ shouldRenderStickyHeader, }) {
55
55
  const initialLoading = loadingState === "initial";
56
56
  const showEmptyState = !initialLoading && data.length === 0;
57
57
  const shouldRenderLoadMoreTrigger = !initialLoading && !showEmptyState;
58
+ const shouldRenderTitleContainer = initialLoading || title !== undefined || totalCount !== undefined;
58
59
  return (React.createElement("div", { className: styles.wrapper },
59
- React.createElement("div", { className: styles.titleContainer },
60
+ shouldRenderTitleContainer && (React.createElement("div", { className: styles.titleContainer, "data-testid": DATA_LIST_TITLE_CONTAINER_TEST_ID },
60
61
  title && React.createElement(Heading, { level: 3 }, title),
61
- React.createElement(DataListTotalCount, { totalCount: totalCount, loading: initialLoading })),
62
+ totalCount !== undefined && (React.createElement(DataListTotalCount, { totalCount: totalCount, loading: initialLoading })))),
62
63
  React.createElement("div", { ref: backToTopRef }),
63
64
  shouldRenderStickyHeader && (React.createElement(DataListStickyHeader, null,
64
65
  React.createElement("div", { className: styles.headerFilters },
@@ -21,6 +21,7 @@ const DATA_LIST_FILTERING_SPINNER_TEST_ID = "ATL-DataList-filteringSpinner";
21
21
  const DATA_LIST_LOADING_MORE_SPINNER_TEST_ID = "ATL-DataList-loadingMoreSpinner";
22
22
  const DATA_LOAD_MORE_TEST_ID = "ATL-DataList-LoadMore-trigger";
23
23
  const DATA_LIST_STICKY_HEADER_TEST_ID = "ATL-DataList-stickyHeader";
24
+ const DATA_LIST_TITLE_CONTAINER_TEST_ID = "ATL-DataList-titleContainer";
24
25
  const TRANSITION_DURATION_IN_SECONDS = design.tokens["timing-base"] / 1000;
25
26
  const TRANSITION_DELAY_IN_SECONDS = design.tokens["timing-quick"] / 1000;
26
27
 
@@ -29,6 +30,7 @@ exports.BREAKPOINT_SIZES = BREAKPOINT_SIZES;
29
30
  exports.DATA_LIST_FILTERING_SPINNER_TEST_ID = DATA_LIST_FILTERING_SPINNER_TEST_ID;
30
31
  exports.DATA_LIST_LOADING_MORE_SPINNER_TEST_ID = DATA_LIST_LOADING_MORE_SPINNER_TEST_ID;
31
32
  exports.DATA_LIST_STICKY_HEADER_TEST_ID = DATA_LIST_STICKY_HEADER_TEST_ID;
33
+ exports.DATA_LIST_TITLE_CONTAINER_TEST_ID = DATA_LIST_TITLE_CONTAINER_TEST_ID;
32
34
  exports.DATA_LOAD_MORE_TEST_ID = DATA_LOAD_MORE_TEST_ID;
33
35
  exports.EMPTY_FILTER_RESULTS_MESSAGE = EMPTY_FILTER_RESULTS_MESSAGE;
34
36
  exports.EMPTY_RESULTS_MESSAGE = EMPTY_RESULTS_MESSAGE;
@@ -19,7 +19,8 @@ const DATA_LIST_FILTERING_SPINNER_TEST_ID = "ATL-DataList-filteringSpinner";
19
19
  const DATA_LIST_LOADING_MORE_SPINNER_TEST_ID = "ATL-DataList-loadingMoreSpinner";
20
20
  const DATA_LOAD_MORE_TEST_ID = "ATL-DataList-LoadMore-trigger";
21
21
  const DATA_LIST_STICKY_HEADER_TEST_ID = "ATL-DataList-stickyHeader";
22
+ const DATA_LIST_TITLE_CONTAINER_TEST_ID = "ATL-DataList-titleContainer";
22
23
  const TRANSITION_DURATION_IN_SECONDS = tokens["timing-base"] / 1000;
23
24
  const TRANSITION_DELAY_IN_SECONDS = tokens["timing-quick"] / 1000;
24
25
 
25
- export { BREAKPOINTS as B, DATA_LIST_FILTERING_SPINNER_TEST_ID as D, EMPTY_FILTER_RESULTS_MESSAGE as E, SEARCH_DEBOUNCE_DELAY as S, TRANSITION_DURATION_IN_SECONDS as T, DATA_LIST_STICKY_HEADER_TEST_ID as a, EMPTY_RESULTS_MESSAGE as b, EMPTY_STATE_ACTION_BUTTON_ONLY_ERROR as c, TRANSITION_DELAY_IN_SECONDS as d, BREAKPOINT_SIZES as e, DATA_LOAD_MORE_TEST_ID as f, DATA_LIST_LOADING_MORE_SPINNER_TEST_ID as g };
26
+ export { BREAKPOINTS as B, DATA_LIST_TITLE_CONTAINER_TEST_ID as D, EMPTY_FILTER_RESULTS_MESSAGE as E, SEARCH_DEBOUNCE_DELAY as S, TRANSITION_DURATION_IN_SECONDS as T, DATA_LIST_FILTERING_SPINNER_TEST_ID as a, DATA_LIST_STICKY_HEADER_TEST_ID as b, EMPTY_RESULTS_MESSAGE as c, EMPTY_STATE_ACTION_BUTTON_ONLY_ERROR as d, TRANSITION_DELAY_IN_SECONDS as e, BREAKPOINT_SIZES as f, DATA_LOAD_MORE_TEST_ID as g, DATA_LIST_LOADING_MORE_SPINNER_TEST_ID as h };
@@ -6,7 +6,7 @@ import { u as useOnKeyDown_2 } from './useOnKeyDown-es.js';
6
6
  import { createPortal } from 'react-dom';
7
7
  import { tokens } from '@jobber/design';
8
8
  import { u as useIsMounted_2 } from './useIsMounted-es.js';
9
- import { d as TRANSITION_DELAY_IN_SECONDS } from './DataList.const-es.js';
9
+ import { e as TRANSITION_DELAY_IN_SECONDS } from './DataList.const-es.js';
10
10
 
11
11
  var styles = {"menu":"e1ztw2-YxtM-","overlay":"uMoOb93Pf1Q-","spinning":"_0wS9DWCNuj4-"};
12
12
 
@@ -3,7 +3,7 @@ import React, { useContext, cloneElement } from 'react';
3
3
  import { D as DataListContext } from './DataListContext-es.js';
4
4
  import { T as Text } from './Text-es.js';
5
5
  import { B as Button } from './Button-es.js';
6
- import { E as EMPTY_FILTER_RESULTS_MESSAGE, b as EMPTY_RESULTS_MESSAGE, c as EMPTY_STATE_ACTION_BUTTON_ONLY_ERROR } from './DataList.const-es.js';
6
+ import { E as EMPTY_FILTER_RESULTS_MESSAGE, c as EMPTY_RESULTS_MESSAGE, d as EMPTY_STATE_ACTION_BUTTON_ONLY_ERROR } from './DataList.const-es.js';
7
7
 
8
8
  var styles = {"emptyStateWrapper":"R0MWvfTO9vg-","spinning":"hVJ2XoR6bR0-"};
9
9
 
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { motion } from 'framer-motion';
3
- import { T as TRANSITION_DURATION_IN_SECONDS, d as TRANSITION_DELAY_IN_SECONDS } from './DataList.const-es.js';
3
+ import { T as TRANSITION_DURATION_IN_SECONDS, e as TRANSITION_DELAY_IN_SECONDS } from './DataList.const-es.js';
4
4
  import { D as DataListActions } from './DataListActions-es.js';
5
5
 
6
6
  var styles = {"menu":"SSm2j6d2kYo-","spinning":"Mpmu6IiBTSI-"};
@@ -1,7 +1,7 @@
1
1
  import React, { useEffect } from 'react';
2
2
  import { u as useInView_2 } from './useInView-es.js';
3
3
  import { u as useDataListContext } from './DataListContext-es.js';
4
- import { f as DATA_LOAD_MORE_TEST_ID, g as DATA_LIST_LOADING_MORE_SPINNER_TEST_ID } from './DataList.const-es.js';
4
+ import { g as DATA_LOAD_MORE_TEST_ID, h as DATA_LIST_LOADING_MORE_SPINNER_TEST_ID } from './DataList.const-es.js';
5
5
  import { S as Spinner } from './Spinner-es.js';
6
6
  import { B as Button } from './Button-es.js';
7
7
 
@@ -1,6 +1,6 @@
1
1
  import classnames from 'classnames';
2
2
  import React, { useState, useRef, useCallback, useEffect } from 'react';
3
- import { a as DATA_LIST_STICKY_HEADER_TEST_ID } from './DataList.const-es.js';
3
+ import { b as DATA_LIST_STICKY_HEADER_TEST_ID } from './DataList.const-es.js';
4
4
 
5
5
  var styles = {"header":"u5YTRL-PlTI-","stuck":"rylbmDbzCts-","spinning":"_2VUVOWcGjbc-"};
6
6
 
@@ -7,20 +7,22 @@ var Glimmer = require('./Glimmer-cjs.js');
7
7
  var styles = {"results":"_9wfZRG5vXI8-","spinning":"_7A1FU9kI3mY-"};
8
8
 
9
9
  const DATALIST_TOTALCOUNT_TEST_ID = "ATL-DataList-TotalCount";
10
+ function DataListTotalCountContainer({ children }) {
11
+ return (React.createElement("div", { className: styles.results, "data-testid": DATALIST_TOTALCOUNT_TEST_ID }, children));
12
+ }
10
13
  function DataListTotalCount({ totalCount, loading, }) {
11
- if (totalCount === undefined)
12
- return null;
13
- let output = null;
14
14
  if (totalCount === null && loading) {
15
- output = React.createElement(Glimmer.Glimmer, { size: "auto", shape: "rectangle" });
15
+ return (React.createElement(DataListTotalCountContainer, null,
16
+ React.createElement(Glimmer.Glimmer, { size: "auto", shape: "rectangle" })));
16
17
  }
17
18
  if (typeof totalCount === "number") {
18
- output = (React.createElement(Text.Text, { variation: "subdued" },
19
- "(",
20
- totalCount.toLocaleString(),
21
- " results)"));
19
+ return (React.createElement(DataListTotalCountContainer, null,
20
+ React.createElement(Text.Text, { variation: "subdued" },
21
+ "(",
22
+ totalCount.toLocaleString(),
23
+ " results)")));
22
24
  }
23
- return (React.createElement("div", { className: styles.results, "data-testid": DATALIST_TOTALCOUNT_TEST_ID }, output));
25
+ return null;
24
26
  }
25
27
 
26
28
  exports.DATALIST_TOTALCOUNT_TEST_ID = DATALIST_TOTALCOUNT_TEST_ID;
@@ -5,20 +5,22 @@ import { G as Glimmer } from './Glimmer-es.js';
5
5
  var styles = {"results":"_9wfZRG5vXI8-","spinning":"_7A1FU9kI3mY-"};
6
6
 
7
7
  const DATALIST_TOTALCOUNT_TEST_ID = "ATL-DataList-TotalCount";
8
+ function DataListTotalCountContainer({ children }) {
9
+ return (React.createElement("div", { className: styles.results, "data-testid": DATALIST_TOTALCOUNT_TEST_ID }, children));
10
+ }
8
11
  function DataListTotalCount({ totalCount, loading, }) {
9
- if (totalCount === undefined)
10
- return null;
11
- let output = null;
12
12
  if (totalCount === null && loading) {
13
- output = React.createElement(Glimmer, { size: "auto", shape: "rectangle" });
13
+ return (React.createElement(DataListTotalCountContainer, null,
14
+ React.createElement(Glimmer, { size: "auto", shape: "rectangle" })));
14
15
  }
15
16
  if (typeof totalCount === "number") {
16
- output = (React.createElement(Text, { variation: "subdued" },
17
- "(",
18
- totalCount.toLocaleString(),
19
- " results)"));
17
+ return (React.createElement(DataListTotalCountContainer, null,
18
+ React.createElement(Text, { variation: "subdued" },
19
+ "(",
20
+ totalCount.toLocaleString(),
21
+ " results)")));
20
22
  }
21
- return (React.createElement("div", { className: styles.results, "data-testid": DATALIST_TOTALCOUNT_TEST_ID }, output));
23
+ return null;
22
24
  }
23
25
 
24
26
  export { DATALIST_TOTALCOUNT_TEST_ID as D, DataListTotalCount as a };
@@ -1,6 +1,6 @@
1
1
  import { RefObject } from "react";
2
2
  import { FormFieldProps } from "../FormFieldTypes";
3
- export interface useFormFieldWrapperStylesProps extends Pick<FormFieldProps, "size" | "align" | "placeholder" | "value" | "invalid" | "max" | "maxLength" | "type" | "disabled" | "inline"> {
3
+ export interface useFormFieldWrapperStylesProps extends Pick<FormFieldProps, "size" | "align" | "placeholder" | "value" | "invalid" | "max" | "maxLength" | "type" | "disabled" | "inline" | "toolbar"> {
4
4
  readonly error: string;
5
5
  suffixRef: RefObject<HTMLDivElement>;
6
6
  prefixRef: RefObject<HTMLDivElement>;
@@ -12,7 +12,7 @@ export interface LabelPadding {
12
12
  /**
13
13
  * Hook for getting the correct styles for the FormField and its children
14
14
  */
15
- export declare function useFormFieldWrapperStyles({ size, align, placeholder, value, invalid, error, max, prefixRef, suffixRef, maxLength, type, disabled, inline, }: useFormFieldWrapperStylesProps): {
15
+ export declare function useFormFieldWrapperStyles({ size, align, placeholder, value, invalid, error, max, prefixRef, suffixRef, maxLength, type, disabled, inline, toolbar, }: useFormFieldWrapperStylesProps): {
16
16
  inputStyle: string;
17
17
  wrapperClasses: string;
18
18
  containerClasses: string;
@@ -1,6 +1,7 @@
1
1
  import { FormFieldProps } from "../FormFieldTypes";
2
2
  interface UseToolBarProps {
3
3
  focused: boolean;
4
+ disabled?: boolean;
4
5
  toolbar: React.ReactNode;
5
6
  toolbarVisibility: FormFieldProps["toolbarVisibility"];
6
7
  }
@@ -33,7 +33,7 @@ function useShowClear({ clearable, multiline, focused, hasValue, disabled = fals
33
33
  }
34
34
  }
35
35
 
36
- var styles$1 = {"container":"YL-mNv-Bl6g-","wrapper":"_8lhbGTQ-hhg-","horizontalWrapper":"b5mv1x1H7YE-","textarea":"hGr6YW4AeLM-","safari":"QBCWi9GBgMs-","timeInputLabel":"_0pmqVa2zSE4-","miniLabel":"F1t76G6bDKo-","large":"_9tjyT9QUtP8-","text":"QmMiyoAWp-g-","invalid":"XWDSfe6weSY-","disabled":"Tz9LK9ABKMk-","small":"Sw5O4I0lMJg-","inline":"SaORbL7SYWY-","center":"ozy2UoT2vsg-","right":"_3TJdT91YD3c-","maxLength":"W6GrMqLy2qk-","inputWrapper":"-LmjnYRU0r0-","childrenWrapper":"yVXYv6hkuOA-","input":"vtSDcuzNr9Q-","label":"Dgk00tzlODA-","select":"NwQGiWBWIsc-","postfix":"yTDzs9h1otI-","affixIcon":"m0YpdssD2dY-","suffix":"_-3mMnjSh6ok-","hasAction":"OLE9N3Uem4o-","affixLabel":"-Wzcb0pBh5I-","description":"DHX5ijY3xIw-","toolbar":"AL-2brNI7dk-","spinning":"_8Rzv7CcDW80-"};
36
+ var styles$1 = {"container":"YL-mNv-Bl6g-","wrapper":"_8lhbGTQ-hhg-","textarea":"hGr6YW4AeLM-","horizontalWrapper":"b5mv1x1H7YE-","timeInputLabel":"_0pmqVa2zSE4-","miniLabel":"F1t76G6bDKo-","large":"_9tjyT9QUtP8-","text":"QmMiyoAWp-g-","invalid":"XWDSfe6weSY-","disabled":"Tz9LK9ABKMk-","small":"Sw5O4I0lMJg-","inline":"SaORbL7SYWY-","center":"ozy2UoT2vsg-","right":"_3TJdT91YD3c-","maxLength":"W6GrMqLy2qk-","inputWrapper":"-LmjnYRU0r0-","childrenWrapper":"yVXYv6hkuOA-","input":"vtSDcuzNr9Q-","label":"Dgk00tzlODA-","select":"NwQGiWBWIsc-","postfix":"yTDzs9h1otI-","affixIcon":"m0YpdssD2dY-","suffix":"_-3mMnjSh6ok-","hasAction":"OLE9N3Uem4o-","affixLabel":"-Wzcb0pBh5I-","description":"DHX5ijY3xIw-","hasToolbar":"aPyUFddVSTc-","toolbarWrapper":"gZBJ3Xcpka4-","toolbar":"AL-2brNI7dk-","spinning":"_8Rzv7CcDW80-"};
37
37
 
38
38
  function AffixLabel({ label, variation = "prefix", labelRef, }) {
39
39
  const affixLabelClass = classnames(styles$1.affixLabel, {
@@ -82,6 +82,7 @@ function ClearAction({ onClick, visible, }) {
82
82
 
83
83
  function useToolbar(props) {
84
84
  const isToolbarVisible = props.toolbar !== undefined &&
85
+ !props.disabled &&
85
86
  (props.toolbarVisibility === "always" || props.focused);
86
87
  const toolbarAnimationEnd = { opacity: 0, height: 0 };
87
88
  const toolbarAnimationStart = { opacity: 1, height: "auto" };
@@ -92,17 +93,10 @@ function useToolbar(props) {
92
93
  };
93
94
  }
94
95
 
95
- function useIsSafari() {
96
- return (globalThis === null || globalThis === void 0 ? void 0 : globalThis.navigator)
97
- ? /^((?!chrome|android).)*safari/i.test(navigator.userAgent)
98
- : false;
99
- }
100
-
101
96
  /**
102
97
  * Hook for getting the correct styles for the FormField and its children
103
98
  */
104
- function useFormFieldWrapperStyles({ size, align, placeholder, value, invalid, error, max, prefixRef, suffixRef, maxLength, type, disabled, inline, }) {
105
- const isSafari = useIsSafari();
99
+ function useFormFieldWrapperStyles({ size, align, placeholder, value, invalid, error, max, prefixRef, suffixRef, maxLength, type, disabled, inline, toolbar, }) {
106
100
  const wrapperClasses = classnames(styles$1.wrapper, size && styles$1[size], align && styles$1[align], {
107
101
  [styles$1.miniLabel]: (placeholder && value !== "") ||
108
102
  (placeholder && type === "select") ||
@@ -110,7 +104,7 @@ function useFormFieldWrapperStyles({ size, align, placeholder, value, invalid, e
110
104
  (placeholder && type === "tel"),
111
105
  [styles$1.text]: type === "textarea" || type === "text",
112
106
  [styles$1.textarea]: type === "textarea",
113
- [styles$1.safari]: isSafari && type === "textarea",
107
+ [styles$1.hasToolbar]: toolbar && !disabled,
114
108
  [styles$1.select]: type === "select",
115
109
  [styles$1.invalid]: invalid !== null && invalid !== void 0 ? invalid : error,
116
110
  [styles$1.disabled]: disabled,
@@ -183,6 +177,7 @@ function FormFieldWrapper({ align, description, descriptionIdentifier, placehold
183
177
  disabled,
184
178
  inline,
185
179
  size,
180
+ toolbar,
186
181
  });
187
182
  const { focused } = useFormFieldFocus.useFormFieldFocus({ wrapperRef });
188
183
  const showClear = useShowClear_2({
@@ -194,6 +189,7 @@ function FormFieldWrapper({ align, description, descriptionIdentifier, placehold
194
189
  });
195
190
  const { isToolbarVisible, toolbarAnimationEnd, toolbarAnimationStart } = useToolbar({
196
191
  focused,
192
+ disabled,
197
193
  toolbar,
198
194
  toolbarVisibility,
199
195
  });
@@ -229,11 +225,11 @@ function FormFieldLabel({ placeholder, identifier, style, }) {
229
225
  return (React.createElement("label", { className: styles$1.label, htmlFor: identifier, style: style }, placeholder));
230
226
  }
231
227
  function FormFieldWrapperToolbar({ toolbar, isToolbarVisible, toolbarAnimationEnd, toolbarAnimationStart, toolbarVisibility, }) {
232
- return (React.createElement(framerMotion.AnimatePresence, { initial: toolbarVisibility === "always" ? false : true }, isToolbarVisible && (React.createElement(framerMotion.motion.div, { key: "toolbar", initial: toolbarAnimationEnd, animate: toolbarAnimationStart, exit: toolbarAnimationEnd, transition: {
228
+ return (React.createElement(framerMotion.AnimatePresence, { initial: toolbarVisibility === "always" ? false : true }, isToolbarVisible && (React.createElement(framerMotion.motion.div, { key: "toolbar", className: styles$1.toolbarWrapper, initial: toolbarAnimationEnd, animate: toolbarAnimationStart, exit: toolbarAnimationEnd, transition: {
233
229
  duration: design.tokens["timing-base"] / 1000,
234
230
  ease: "easeInOut",
235
231
  }, tabIndex: -1 },
236
- React.createElement("div", { className: styles$1.toolbar, "data-testid": "ATL-InputText-Toolbar" }, toolbar)))));
232
+ React.createElement("div", { className: styles$1.toolbar, "data-testid": "ATL-InputText-Toolbar", "data-elevation": "elevated" }, toolbar)))));
237
233
  }
238
234
 
239
235
  function FormFieldPostFix({ variation, visible = true, }) {
@@ -31,7 +31,7 @@ function useShowClear({ clearable, multiline, focused, hasValue, disabled = fals
31
31
  }
32
32
  }
33
33
 
34
- var styles$1 = {"container":"YL-mNv-Bl6g-","wrapper":"_8lhbGTQ-hhg-","horizontalWrapper":"b5mv1x1H7YE-","textarea":"hGr6YW4AeLM-","safari":"QBCWi9GBgMs-","timeInputLabel":"_0pmqVa2zSE4-","miniLabel":"F1t76G6bDKo-","large":"_9tjyT9QUtP8-","text":"QmMiyoAWp-g-","invalid":"XWDSfe6weSY-","disabled":"Tz9LK9ABKMk-","small":"Sw5O4I0lMJg-","inline":"SaORbL7SYWY-","center":"ozy2UoT2vsg-","right":"_3TJdT91YD3c-","maxLength":"W6GrMqLy2qk-","inputWrapper":"-LmjnYRU0r0-","childrenWrapper":"yVXYv6hkuOA-","input":"vtSDcuzNr9Q-","label":"Dgk00tzlODA-","select":"NwQGiWBWIsc-","postfix":"yTDzs9h1otI-","affixIcon":"m0YpdssD2dY-","suffix":"_-3mMnjSh6ok-","hasAction":"OLE9N3Uem4o-","affixLabel":"-Wzcb0pBh5I-","description":"DHX5ijY3xIw-","toolbar":"AL-2brNI7dk-","spinning":"_8Rzv7CcDW80-"};
34
+ var styles$1 = {"container":"YL-mNv-Bl6g-","wrapper":"_8lhbGTQ-hhg-","textarea":"hGr6YW4AeLM-","horizontalWrapper":"b5mv1x1H7YE-","timeInputLabel":"_0pmqVa2zSE4-","miniLabel":"F1t76G6bDKo-","large":"_9tjyT9QUtP8-","text":"QmMiyoAWp-g-","invalid":"XWDSfe6weSY-","disabled":"Tz9LK9ABKMk-","small":"Sw5O4I0lMJg-","inline":"SaORbL7SYWY-","center":"ozy2UoT2vsg-","right":"_3TJdT91YD3c-","maxLength":"W6GrMqLy2qk-","inputWrapper":"-LmjnYRU0r0-","childrenWrapper":"yVXYv6hkuOA-","input":"vtSDcuzNr9Q-","label":"Dgk00tzlODA-","select":"NwQGiWBWIsc-","postfix":"yTDzs9h1otI-","affixIcon":"m0YpdssD2dY-","suffix":"_-3mMnjSh6ok-","hasAction":"OLE9N3Uem4o-","affixLabel":"-Wzcb0pBh5I-","description":"DHX5ijY3xIw-","hasToolbar":"aPyUFddVSTc-","toolbarWrapper":"gZBJ3Xcpka4-","toolbar":"AL-2brNI7dk-","spinning":"_8Rzv7CcDW80-"};
35
35
 
36
36
  function AffixLabel({ label, variation = "prefix", labelRef, }) {
37
37
  const affixLabelClass = classnames(styles$1.affixLabel, {
@@ -80,6 +80,7 @@ function ClearAction({ onClick, visible, }) {
80
80
 
81
81
  function useToolbar(props) {
82
82
  const isToolbarVisible = props.toolbar !== undefined &&
83
+ !props.disabled &&
83
84
  (props.toolbarVisibility === "always" || props.focused);
84
85
  const toolbarAnimationEnd = { opacity: 0, height: 0 };
85
86
  const toolbarAnimationStart = { opacity: 1, height: "auto" };
@@ -90,17 +91,10 @@ function useToolbar(props) {
90
91
  };
91
92
  }
92
93
 
93
- function useIsSafari() {
94
- return (globalThis === null || globalThis === void 0 ? void 0 : globalThis.navigator)
95
- ? /^((?!chrome|android).)*safari/i.test(navigator.userAgent)
96
- : false;
97
- }
98
-
99
94
  /**
100
95
  * Hook for getting the correct styles for the FormField and its children
101
96
  */
102
- function useFormFieldWrapperStyles({ size, align, placeholder, value, invalid, error, max, prefixRef, suffixRef, maxLength, type, disabled, inline, }) {
103
- const isSafari = useIsSafari();
97
+ function useFormFieldWrapperStyles({ size, align, placeholder, value, invalid, error, max, prefixRef, suffixRef, maxLength, type, disabled, inline, toolbar, }) {
104
98
  const wrapperClasses = classnames(styles$1.wrapper, size && styles$1[size], align && styles$1[align], {
105
99
  [styles$1.miniLabel]: (placeholder && value !== "") ||
106
100
  (placeholder && type === "select") ||
@@ -108,7 +102,7 @@ function useFormFieldWrapperStyles({ size, align, placeholder, value, invalid, e
108
102
  (placeholder && type === "tel"),
109
103
  [styles$1.text]: type === "textarea" || type === "text",
110
104
  [styles$1.textarea]: type === "textarea",
111
- [styles$1.safari]: isSafari && type === "textarea",
105
+ [styles$1.hasToolbar]: toolbar && !disabled,
112
106
  [styles$1.select]: type === "select",
113
107
  [styles$1.invalid]: invalid !== null && invalid !== void 0 ? invalid : error,
114
108
  [styles$1.disabled]: disabled,
@@ -181,6 +175,7 @@ function FormFieldWrapper({ align, description, descriptionIdentifier, placehold
181
175
  disabled,
182
176
  inline,
183
177
  size,
178
+ toolbar,
184
179
  });
185
180
  const { focused } = useFormFieldFocus({ wrapperRef });
186
181
  const showClear = useShowClear_2({
@@ -192,6 +187,7 @@ function FormFieldWrapper({ align, description, descriptionIdentifier, placehold
192
187
  });
193
188
  const { isToolbarVisible, toolbarAnimationEnd, toolbarAnimationStart } = useToolbar({
194
189
  focused,
190
+ disabled,
195
191
  toolbar,
196
192
  toolbarVisibility,
197
193
  });
@@ -227,11 +223,11 @@ function FormFieldLabel({ placeholder, identifier, style, }) {
227
223
  return (React.createElement("label", { className: styles$1.label, htmlFor: identifier, style: style }, placeholder));
228
224
  }
229
225
  function FormFieldWrapperToolbar({ toolbar, isToolbarVisible, toolbarAnimationEnd, toolbarAnimationStart, toolbarVisibility, }) {
230
- return (React.createElement(AnimatePresence, { initial: toolbarVisibility === "always" ? false : true }, isToolbarVisible && (React.createElement(motion.div, { key: "toolbar", initial: toolbarAnimationEnd, animate: toolbarAnimationStart, exit: toolbarAnimationEnd, transition: {
226
+ return (React.createElement(AnimatePresence, { initial: toolbarVisibility === "always" ? false : true }, isToolbarVisible && (React.createElement(motion.div, { key: "toolbar", className: styles$1.toolbarWrapper, initial: toolbarAnimationEnd, animate: toolbarAnimationStart, exit: toolbarAnimationEnd, transition: {
231
227
  duration: tokens["timing-base"] / 1000,
232
228
  ease: "easeInOut",
233
229
  }, tabIndex: -1 },
234
- React.createElement("div", { className: styles$1.toolbar, "data-testid": "ATL-InputText-Toolbar" }, toolbar)))));
230
+ React.createElement("div", { className: styles$1.toolbar, "data-testid": "ATL-InputText-Toolbar", "data-elevation": "elevated" }, toolbar)))));
235
231
  }
236
232
 
237
233
  function FormFieldPostFix({ variation, visible = true, }) {
@@ -38,22 +38,12 @@ function InputTextInternal(props, ref) {
38
38
  }
39
39
  },
40
40
  }));
41
- useSafeLayoutEffect.useSafeLayoutEffect_1(() => {
42
- if (inputRef &&
43
- inputRef.current instanceof HTMLTextAreaElement &&
44
- wrapperRef &&
45
- wrapperRef.current instanceof HTMLDivElement) {
46
- resize(inputRef.current, wrapperRef.current);
47
- }
48
- }, [inputRef.current, wrapperRef.current]);
41
+ const resize = useAutoResize(inputRef, rowRange, props.value);
49
42
  return (React.createElement(FormField.FormField, Object.assign({}, props, { type: props.multiline ? "textarea" : "text", inputRef: inputRef, actionsRef: actionsRef, wrapperRef: wrapperRef, onChange: handleChange, rows: rowRange.min })));
50
43
  function handleChange(newValue) {
51
44
  props.onChange && props.onChange(newValue);
52
- if (inputRef &&
53
- inputRef.current instanceof HTMLTextAreaElement &&
54
- wrapperRef &&
55
- (wrapperRef === null || wrapperRef === void 0 ? void 0 : wrapperRef.current) instanceof HTMLDivElement) {
56
- resize(inputRef.current, wrapperRef.current);
45
+ if (inputRef && inputRef.current instanceof HTMLTextAreaElement) {
46
+ resize(inputRef.current);
57
47
  }
58
48
  }
59
49
  function getRowRange() {
@@ -67,25 +57,6 @@ function InputTextInternal(props, ref) {
67
57
  return { min: props.rows, max: props.rows };
68
58
  }
69
59
  }
70
- function resize(textArea, wrapper) {
71
- if (rowRange.min === rowRange.max)
72
- return;
73
- textArea.style.flexBasis = "auto";
74
- wrapper.style.height = "auto";
75
- textArea.style.flexBasis = textAreaHeight(textArea) + "px";
76
- }
77
- function textAreaHeight(textArea) {
78
- const { lineHeight, borderBottomWidth, borderTopWidth, paddingBottom, paddingTop, } = window.getComputedStyle(textArea);
79
- const maxHeight = rowRange.max * parseFloat(lineHeight) +
80
- parseFloat(borderTopWidth) +
81
- parseFloat(borderBottomWidth) +
82
- parseFloat(paddingTop) +
83
- parseFloat(paddingBottom);
84
- const scrollHeight = textArea.scrollHeight +
85
- parseFloat(borderTopWidth) +
86
- parseFloat(borderBottomWidth);
87
- return Math.min(scrollHeight, maxHeight);
88
- }
89
60
  function insertText(text) {
90
61
  var _a;
91
62
  const input = inputRef.current;
@@ -108,5 +79,38 @@ function insertAtCursor(input, newText) {
108
79
  input.selectionStart = input.selectionEnd = start + newText.length;
109
80
  input.focus();
110
81
  }
82
+ function useAutoResize(inputRef, rowRange, value) {
83
+ useSafeLayoutEffect.useSafeLayoutEffect_1(() => {
84
+ if (inputRef && inputRef.current instanceof HTMLTextAreaElement) {
85
+ resize(inputRef.current);
86
+ }
87
+ }, [inputRef.current]);
88
+ useSafeLayoutEffect.useSafeLayoutEffect_1(() => {
89
+ setTimeout(() => {
90
+ if (inputRef && inputRef.current instanceof HTMLTextAreaElement) {
91
+ resize(inputRef.current);
92
+ }
93
+ }, 0);
94
+ }, [value]);
95
+ function resize(textArea) {
96
+ if (rowRange.min === rowRange.max)
97
+ return;
98
+ textArea.style.height = "auto";
99
+ textArea.style.height = textAreaHeight(textArea) + "px";
100
+ }
101
+ function textAreaHeight(textArea) {
102
+ const { lineHeight, borderBottomWidth, borderTopWidth, paddingBottom, paddingTop, } = window.getComputedStyle(textArea);
103
+ const maxHeight = rowRange.max * parseFloat(lineHeight) +
104
+ parseFloat(borderTopWidth) +
105
+ parseFloat(borderBottomWidth) +
106
+ parseFloat(paddingTop) +
107
+ parseFloat(paddingBottom);
108
+ const scrollHeight = textArea.scrollHeight +
109
+ parseFloat(borderTopWidth) +
110
+ parseFloat(borderBottomWidth);
111
+ return Math.min(scrollHeight, maxHeight);
112
+ }
113
+ return resize;
114
+ }
111
115
 
112
116
  exports.InputText = InputText;
@@ -36,22 +36,12 @@ function InputTextInternal(props, ref) {
36
36
  }
37
37
  },
38
38
  }));
39
- useSafeLayoutEffect_1(() => {
40
- if (inputRef &&
41
- inputRef.current instanceof HTMLTextAreaElement &&
42
- wrapperRef &&
43
- wrapperRef.current instanceof HTMLDivElement) {
44
- resize(inputRef.current, wrapperRef.current);
45
- }
46
- }, [inputRef.current, wrapperRef.current]);
39
+ const resize = useAutoResize(inputRef, rowRange, props.value);
47
40
  return (React.createElement(FormField, Object.assign({}, props, { type: props.multiline ? "textarea" : "text", inputRef: inputRef, actionsRef: actionsRef, wrapperRef: wrapperRef, onChange: handleChange, rows: rowRange.min })));
48
41
  function handleChange(newValue) {
49
42
  props.onChange && props.onChange(newValue);
50
- if (inputRef &&
51
- inputRef.current instanceof HTMLTextAreaElement &&
52
- wrapperRef &&
53
- (wrapperRef === null || wrapperRef === void 0 ? void 0 : wrapperRef.current) instanceof HTMLDivElement) {
54
- resize(inputRef.current, wrapperRef.current);
43
+ if (inputRef && inputRef.current instanceof HTMLTextAreaElement) {
44
+ resize(inputRef.current);
55
45
  }
56
46
  }
57
47
  function getRowRange() {
@@ -65,25 +55,6 @@ function InputTextInternal(props, ref) {
65
55
  return { min: props.rows, max: props.rows };
66
56
  }
67
57
  }
68
- function resize(textArea, wrapper) {
69
- if (rowRange.min === rowRange.max)
70
- return;
71
- textArea.style.flexBasis = "auto";
72
- wrapper.style.height = "auto";
73
- textArea.style.flexBasis = textAreaHeight(textArea) + "px";
74
- }
75
- function textAreaHeight(textArea) {
76
- const { lineHeight, borderBottomWidth, borderTopWidth, paddingBottom, paddingTop, } = window.getComputedStyle(textArea);
77
- const maxHeight = rowRange.max * parseFloat(lineHeight) +
78
- parseFloat(borderTopWidth) +
79
- parseFloat(borderBottomWidth) +
80
- parseFloat(paddingTop) +
81
- parseFloat(paddingBottom);
82
- const scrollHeight = textArea.scrollHeight +
83
- parseFloat(borderTopWidth) +
84
- parseFloat(borderBottomWidth);
85
- return Math.min(scrollHeight, maxHeight);
86
- }
87
58
  function insertText(text) {
88
59
  var _a;
89
60
  const input = inputRef.current;
@@ -106,5 +77,38 @@ function insertAtCursor(input, newText) {
106
77
  input.selectionStart = input.selectionEnd = start + newText.length;
107
78
  input.focus();
108
79
  }
80
+ function useAutoResize(inputRef, rowRange, value) {
81
+ useSafeLayoutEffect_1(() => {
82
+ if (inputRef && inputRef.current instanceof HTMLTextAreaElement) {
83
+ resize(inputRef.current);
84
+ }
85
+ }, [inputRef.current]);
86
+ useSafeLayoutEffect_1(() => {
87
+ setTimeout(() => {
88
+ if (inputRef && inputRef.current instanceof HTMLTextAreaElement) {
89
+ resize(inputRef.current);
90
+ }
91
+ }, 0);
92
+ }, [value]);
93
+ function resize(textArea) {
94
+ if (rowRange.min === rowRange.max)
95
+ return;
96
+ textArea.style.height = "auto";
97
+ textArea.style.height = textAreaHeight(textArea) + "px";
98
+ }
99
+ function textAreaHeight(textArea) {
100
+ const { lineHeight, borderBottomWidth, borderTopWidth, paddingBottom, paddingTop, } = window.getComputedStyle(textArea);
101
+ const maxHeight = rowRange.max * parseFloat(lineHeight) +
102
+ parseFloat(borderTopWidth) +
103
+ parseFloat(borderBottomWidth) +
104
+ parseFloat(paddingTop) +
105
+ parseFloat(paddingBottom);
106
+ const scrollHeight = textArea.scrollHeight +
107
+ parseFloat(borderTopWidth) +
108
+ parseFloat(borderBottomWidth);
109
+ return Math.min(scrollHeight, maxHeight);
110
+ }
111
+ return resize;
112
+ }
109
113
 
110
114
  export { InputText as I };
@@ -1,4 +1,4 @@
1
- import React from "react";
1
+ import React, { CSSProperties } from "react";
2
2
  export interface PopoverProps {
3
3
  /**
4
4
  * Element the Popover will attach to and point at. A `useRef` must be attached to an html element
@@ -22,5 +22,25 @@ export interface PopoverProps {
22
22
  * @default 'auto'
23
23
  */
24
24
  readonly preferredPlacement?: "top" | "bottom" | "left" | "right" | "auto";
25
+ /**
26
+ * **Use at your own risk:** Custom class names for specific elements. This should only be used as a
27
+ * **last resort**. Using this may result in unexpected side effects.
28
+ * More information [here](https://atlantis.getjobber.com/storybook/?path=/docs/guides-customizing-components--docs#unsafe_-props).
29
+ */
30
+ readonly UNSAFE_className?: {
31
+ container?: string;
32
+ dismissButtonContainer?: string;
33
+ arrow?: string;
34
+ };
35
+ /**
36
+ * **Use at your own risk:** Custom style for specific elements. This should only be used as a
37
+ * **last resort**. Using this may result in unexpected side effects.
38
+ * More information [here](https://atlantis.getjobber.com/storybook/?path=/docs/guides-customizing-components--docs#unsafe_-props).
39
+ */
40
+ readonly UNSAFE_style?: {
41
+ container?: CSSProperties;
42
+ dismissButtonContainer?: CSSProperties;
43
+ arrow?: CSSProperties;
44
+ };
25
45
  }
26
- export declare function Popover({ onRequestClose, children, attachTo, open, preferredPlacement, }: PopoverProps): JSX.Element;
46
+ export declare function Popover({ onRequestClose, children, attachTo, open, preferredPlacement, UNSAFE_className, UNSAFE_style, }: PopoverProps): JSX.Element;
@@ -4,9 +4,9 @@ var Popover = require('../Popover-cjs.js');
4
4
  require('react');
5
5
  require('react-popper');
6
6
  require('../useRefocusOnActivator-cjs.js');
7
+ require('classnames');
7
8
  require('../ButtonDismiss-cjs.js');
8
9
  require('../Button-cjs.js');
9
- require('classnames');
10
10
  require('react-router-dom');
11
11
  require('../Icon-cjs.js');
12
12
  require('@jobber/design');
@@ -2,9 +2,9 @@ export { P as Popover } from '../Popover-es.js';
2
2
  import 'react';
3
3
  import 'react-popper';
4
4
  import '../useRefocusOnActivator-es.js';
5
+ import 'classnames';
5
6
  import '../ButtonDismiss-es.js';
6
7
  import '../Button-es.js';
7
- import 'classnames';
8
8
  import 'react-router-dom';
9
9
  import '../Icon-es.js';
10
10
  import '@jobber/design';
@@ -3,11 +3,13 @@
3
3
  var React = require('react');
4
4
  var reactPopper = require('react-popper');
5
5
  var useRefocusOnActivator = require('./useRefocusOnActivator-cjs.js');
6
+ var classnames = require('classnames');
6
7
  var ButtonDismiss = require('./ButtonDismiss-cjs.js');
7
8
 
8
9
  var classes = {"popover":"rY8OtuArIi0-","header":"UI1AohefbSo-","dismissButton":"HyA0TM5soDM-","arrow":"uClo-5-xhAc-","spinning":"VA0ROLmpLPs-"};
9
10
 
10
- function Popover({ onRequestClose, children, attachTo, open, preferredPlacement = "auto", }) {
11
+ function Popover({ onRequestClose, children, attachTo, open, preferredPlacement = "auto", UNSAFE_className = {}, UNSAFE_style = {}, }) {
12
+ var _a, _b, _c;
11
13
  const [popperElement, setPopperElement] = React.useState();
12
14
  const [arrowElement, setArrowElement] = React.useState();
13
15
  const { styles: popperStyles, attributes } = reactPopper.usePopper(isHTMLElement(attachTo) ? attachTo : attachTo.current, popperElement, {
@@ -15,11 +17,14 @@ function Popover({ onRequestClose, children, attachTo, open, preferredPlacement
15
17
  placement: preferredPlacement,
16
18
  });
17
19
  useRefocusOnActivator.useRefocusOnActivator_2(open);
18
- return (React.createElement(React.Fragment, null, open && (React.createElement("div", Object.assign({ role: "dialog", "data-elevation": "elevated", ref: setPopperElement, style: popperStyles.popper, className: classes.popover }, attributes.popper),
19
- React.createElement("div", { className: classes.dismissButton },
20
+ const popoverClassNames = classnames(classes.popover, UNSAFE_className.container);
21
+ const dismissButtonClassNames = classnames(classes.dismissButton, UNSAFE_className.dismissButtonContainer);
22
+ const arrowClassNames = classnames(classes.arrow, UNSAFE_className.arrow);
23
+ return (React.createElement(React.Fragment, null, open && (React.createElement("div", Object.assign({ role: "dialog", "data-elevation": "elevated", ref: setPopperElement, style: Object.assign(Object.assign({}, popperStyles.popper), ((_a = UNSAFE_style.container) !== null && _a !== void 0 ? _a : {})), className: popoverClassNames }, attributes.popper, { "data-testid": "popover-container" }),
24
+ React.createElement("div", { className: dismissButtonClassNames, style: (_b = UNSAFE_style.dismissButtonContainer) !== null && _b !== void 0 ? _b : {}, "data-testid": "popover-dismiss-button-container" },
20
25
  React.createElement(ButtonDismiss.ButtonDismiss, { onClick: onRequestClose, ariaLabel: "Close dialog" })),
21
26
  children,
22
- React.createElement("div", { ref: setArrowElement, className: classes.arrow, style: popperStyles.arrow })))));
27
+ React.createElement("div", { ref: setArrowElement, className: arrowClassNames, style: Object.assign(Object.assign({}, popperStyles.arrow), ((_c = UNSAFE_style.arrow) !== null && _c !== void 0 ? _c : {})), "data-testid": "popover-arrow" })))));
23
28
  }
24
29
  function buildModifiers(arrowElement) {
25
30
  const modifiers = [
@@ -1,11 +1,13 @@
1
1
  import React, { useState } from 'react';
2
2
  import { usePopper } from 'react-popper';
3
3
  import { u as useRefocusOnActivator_2 } from './useRefocusOnActivator-es.js';
4
+ import classnames from 'classnames';
4
5
  import { B as ButtonDismiss } from './ButtonDismiss-es.js';
5
6
 
6
7
  var classes = {"popover":"rY8OtuArIi0-","header":"UI1AohefbSo-","dismissButton":"HyA0TM5soDM-","arrow":"uClo-5-xhAc-","spinning":"VA0ROLmpLPs-"};
7
8
 
8
- function Popover({ onRequestClose, children, attachTo, open, preferredPlacement = "auto", }) {
9
+ function Popover({ onRequestClose, children, attachTo, open, preferredPlacement = "auto", UNSAFE_className = {}, UNSAFE_style = {}, }) {
10
+ var _a, _b, _c;
9
11
  const [popperElement, setPopperElement] = useState();
10
12
  const [arrowElement, setArrowElement] = useState();
11
13
  const { styles: popperStyles, attributes } = usePopper(isHTMLElement(attachTo) ? attachTo : attachTo.current, popperElement, {
@@ -13,11 +15,14 @@ function Popover({ onRequestClose, children, attachTo, open, preferredPlacement
13
15
  placement: preferredPlacement,
14
16
  });
15
17
  useRefocusOnActivator_2(open);
16
- return (React.createElement(React.Fragment, null, open && (React.createElement("div", Object.assign({ role: "dialog", "data-elevation": "elevated", ref: setPopperElement, style: popperStyles.popper, className: classes.popover }, attributes.popper),
17
- React.createElement("div", { className: classes.dismissButton },
18
+ const popoverClassNames = classnames(classes.popover, UNSAFE_className.container);
19
+ const dismissButtonClassNames = classnames(classes.dismissButton, UNSAFE_className.dismissButtonContainer);
20
+ const arrowClassNames = classnames(classes.arrow, UNSAFE_className.arrow);
21
+ return (React.createElement(React.Fragment, null, open && (React.createElement("div", Object.assign({ role: "dialog", "data-elevation": "elevated", ref: setPopperElement, style: Object.assign(Object.assign({}, popperStyles.popper), ((_a = UNSAFE_style.container) !== null && _a !== void 0 ? _a : {})), className: popoverClassNames }, attributes.popper, { "data-testid": "popover-container" }),
22
+ React.createElement("div", { className: dismissButtonClassNames, style: (_b = UNSAFE_style.dismissButtonContainer) !== null && _b !== void 0 ? _b : {}, "data-testid": "popover-dismiss-button-container" },
18
23
  React.createElement(ButtonDismiss, { onClick: onRequestClose, ariaLabel: "Close dialog" })),
19
24
  children,
20
- React.createElement("div", { ref: setArrowElement, className: classes.arrow, style: popperStyles.arrow })))));
25
+ React.createElement("div", { ref: setArrowElement, className: arrowClassNames, style: Object.assign(Object.assign({}, popperStyles.arrow), ((_c = UNSAFE_style.arrow) !== null && _c !== void 0 ? _c : {})), "data-testid": "popover-arrow" })))));
21
26
  }
22
27
  function buildModifiers(arrowElement) {
23
28
  const modifiers = [
package/dist/styles.css CHANGED
@@ -711,6 +711,10 @@
711
711
  box-sizing: border-box;
712
712
  }
713
713
 
714
+ ._8lhbGTQ-hhg-.hGr6YW4AeLM- {
715
+ overflow: hidden;
716
+ }
717
+
714
718
  ._8lhbGTQ-hhg-:focus-within {
715
719
  position: relative;
716
720
  z-index: var(--field--base-elevation);
@@ -726,10 +730,6 @@
726
730
  flex: 1;
727
731
  }
728
732
 
729
- .hGr6YW4AeLM-.QBCWi9GBgMs- .b5mv1x1H7YE- {
730
- margin-right: var(--field--padding-right);
731
- }
732
-
733
733
  ._0pmqVa2zSE4-:not(:focus-within) input {
734
734
  color: var(--field--background-color);
735
735
  -webkit-text-fill-color: var(--field--background-color);
@@ -755,11 +755,6 @@
755
755
  min-height: auto;
756
756
  }
757
757
 
758
- ._8lhbGTQ-hhg-.hGr6YW4AeLM- {
759
- resize: vertical;
760
- overflow: auto;
761
- }
762
-
763
758
  .XWDSfe6weSY-,
764
759
  .XWDSfe6weSY-:focus-within {
765
760
  --field--border-color: var(--color-critical);
@@ -769,8 +764,8 @@
769
764
  .Tz9LK9ABKMk- {
770
765
  --field--placeholder-color: var(--color-disabled);
771
766
  --field--value-color: var(--color-disabled);
772
- --field--background-color: var(--color-surface--background);
773
- --field--border-color: var(--color-disabled--secondary);
767
+ --field--background-color: var(--color-disabled--secondary);
768
+ --field--border-color: var(--color-border);
774
769
  }
775
770
 
776
771
  /* override iOS default styling for disabled input */
@@ -889,11 +884,8 @@
889
884
  }
890
885
 
891
886
  .hGr6YW4AeLM- .vtSDcuzNr9Q- {
892
- -ms-flex: 1;
893
- flex: 1;
894
- resize: none;
895
- scroll-padding-bottom: 16px;
896
- scroll-padding-bottom: var(--space-base);
887
+ height: auto;
888
+ resize: vertical;
897
889
  padding-top: 0;
898
890
  }
899
891
 
@@ -913,10 +905,6 @@
913
905
  padding-top: var(--field--padding-top);
914
906
  }
915
907
 
916
- .hGr6YW4AeLM-.QBCWi9GBgMs- .vtSDcuzNr9Q- {
917
- padding-right: 0;
918
- }
919
-
920
908
  /**
921
909
  * Label
922
910
  **/
@@ -975,6 +963,8 @@
975
963
  }
976
964
 
977
965
  .hGr6YW4AeLM-.F1t76G6bDKo- .Dgk00tzlODA- {
966
+ border-radius: 8px;
967
+ border-radius: var(--radius-base);
978
968
  background-color: var(--field--background-color);
979
969
  }
980
970
 
@@ -1062,30 +1052,35 @@
1062
1052
  margin-top: var(--space-smaller);
1063
1053
  }
1064
1054
 
1065
- .AL-2brNI7dk- {
1066
- display: -ms-flexbox;
1067
- display: flex;
1055
+ ._8lhbGTQ-hhg-.aPyUFddVSTc- {
1068
1056
  position: relative;
1069
- margin: 8px var(--field--padding-right) 16px
1070
- var(--field--padding-left);
1071
- margin: var(--space-small) var(--field--padding-right) var(--space-base)
1072
- var(--field--padding-left);
1057
+ overflow: visible;
1073
1058
  }
1074
1059
 
1075
- .AL-2brNI7dk-::before {
1076
- content: "";
1077
- display: block;
1060
+ .gZBJ3Xcpka4- {
1078
1061
  position: absolute;
1079
- top: calc(-1.25 * 16px);
1080
- top: calc(-1.25 * var(--space-base));
1081
- right: 0;
1082
- left: 0;
1062
+ top: 100%;
1063
+ right: calc(1px * -1);
1064
+ right: calc(var(--border-base) * -1);
1065
+ left: calc(1px * -1);
1066
+ left: calc(var(--border-base) * -1);
1083
1067
  z-index: 1;
1084
- z-index: var(--elevation-base);
1085
- height: 16px;
1086
- height: var(--space-base);
1087
- background: linear-gradient(to bottom, transparent, rgba(255, 255, 255, 1) 60%);
1088
- background: linear-gradient(to bottom, transparent, var(--color-surface) 60%);
1068
+ }
1069
+
1070
+ .AL-2brNI7dk- {
1071
+ display: -ms-flexbox;
1072
+ display: flex;
1073
+ box-shadow: 0px 1px 4px 0px rgba(0, 0, 0, 0.1), 0px 4px 12px 0px rgba(0, 0, 0, 0.05);
1074
+ box-shadow: var(--shadow-base);
1075
+ margin-top: 8px;
1076
+ margin-top: var(--space-small);
1077
+ padding: 8px;
1078
+ padding: var(--space-small);
1079
+ border-radius: 8px;
1080
+ border-radius: var(--radius-base);
1081
+ overflow: hidden;
1082
+ background-color: rgba(255, 255, 255, 1);
1083
+ background-color: var(--color-surface);
1089
1084
  }
1090
1085
 
1091
1086
  :root {
@@ -1444,8 +1439,8 @@ a._7BLGtYNuJOU-.zgRx3ehZ2z8-:hover {
1444
1439
  border: none;
1445
1440
  border-radius: 100%;
1446
1441
  border-radius: var(--radius-circle);
1447
- background-color: hsl(53, 21%, 93%);
1448
- background-color: var(--color-surface--background);
1442
+ background-color: hsl(51, 17%, 85%);
1443
+ background-color: var(--color-interactive--background);
1449
1444
  cursor: pointer;
1450
1445
  -ms-flex-pack: center;
1451
1446
  justify-content: center;
@@ -1462,8 +1457,8 @@ a._7BLGtYNuJOU-.zgRx3ehZ2z8-:hover {
1462
1457
  .YmRTd-KeXv4-:hover,
1463
1458
  .YmRTd-KeXv4-:focus-visible {
1464
1459
  outline: none;
1465
- background-color: hsl(51, 17%, 85%);
1466
- background-color: var(--color-surface--background--hover);
1460
+ background-color: hsl(49, 7%, 70%);
1461
+ background-color: var(--color-interactive--background--hover);
1467
1462
  }
1468
1463
 
1469
1464
  .YmRTd-KeXv4-:focus-visible {
@@ -2735,8 +2730,10 @@ a._7BLGtYNuJOU-.zgRx3ehZ2z8-:hover {
2735
2730
  }
2736
2731
 
2737
2732
  :root {
2738
- --public-chip-base-bg-color: var(--color-surface--background);
2739
- --public-chip-base-hover-bg-color: var(--color-surface--background--hover);
2733
+ --public-chip-base-bg-color: var(--color-interactive--background);
2734
+ --public-chip-base-hover-bg-color: var(
2735
+ --color-interactive--background--hover
2736
+ );
2740
2737
  --public-chip-base-content-color: var(--color-heading);
2741
2738
  }
2742
2739
 
@@ -2763,7 +2760,7 @@ a._7BLGtYNuJOU-.zgRx3ehZ2z8-:hover {
2763
2760
  color: hsl(197, 90%, 12%);
2764
2761
  color: var(--color-heading);
2765
2762
  text-align: left;
2766
- background-color: hsl(53, 21%, 93%);
2763
+ background-color: hsl(51, 17%, 85%);
2767
2764
  background-color: var(--chip-base-bg-color);
2768
2765
  cursor: pointer;
2769
2766
  transition: all 200ms;
@@ -2880,7 +2877,7 @@ a._7BLGtYNuJOU-.zgRx3ehZ2z8-:hover {
2880
2877
  .ln-ky9jFiLI-.CMvHum0PGzY-:hover,
2881
2878
  .ln-ky9jFiLI-.CMvHum0PGzY-:focus-visible {
2882
2879
  --chip-border-color: var(--color-critical);
2883
- --chip-base-hover-bg-color: var(--color-surface--background--hover);
2880
+ --chip-base-hover-bg-color: var(--color-interactive--background--hover);
2884
2881
  }
2885
2882
 
2886
2883
  .ln-ky9jFiLI- {
@@ -2893,7 +2890,7 @@ a._7BLGtYNuJOU-.zgRx3ehZ2z8-:hover {
2893
2890
  .ln-ky9jFiLI-:focus-visible,
2894
2891
  .ln-ky9jFiLI-:hover {
2895
2892
  --chip-border-color: var(--chip-base-bg-color);
2896
- --chip-base-hover-bg-color: var(--color-surface--background);
2893
+ --chip-base-hover-bg-color: var(--color-interactive--background);
2897
2894
  }
2898
2895
 
2899
2896
  .CMvHum0PGzY-._3uJEejbZvig-,
@@ -3015,14 +3012,14 @@ a._7BLGtYNuJOU-.zgRx3ehZ2z8-:hover {
3015
3012
 
3016
3013
  .ulLzwMsQL3U-._3LLjp8oIxJ0-:focus-visible ~ div[role="option"],
3017
3014
  .ulLzwMsQL3U-._3LLjp8oIxJ0-:focus-visible ~ div[role="button"] {
3018
- background-color: hsl(53, 21%, 93%);
3019
- background-color: var(--color-surface--background);
3015
+ background-color: hsl(51, 17%, 85%);
3016
+ background-color: var(--color-interactive--background);
3020
3017
  }
3021
3018
 
3022
3019
  .ulLzwMsQL3U-.H7VZzUBkgjk-:focus-visible ~ div[role="option"],
3023
3020
  .ulLzwMsQL3U-.H7VZzUBkgjk-:focus-visible ~ div[role="button"] {
3024
- background-color: hsl(51, 17%, 85%);
3025
- background-color: var(--color-surface--background--hover);
3021
+ background-color: hsl(49, 7%, 70%);
3022
+ background-color: var(--color-interactive--background--hover);
3026
3023
  }
3027
3024
 
3028
3025
  .ulLzwMsQL3U-.-yQxZSnxBBU-:focus-visible ~ div[role="option"],
@@ -3439,8 +3436,8 @@ a._7BLGtYNuJOU-.zgRx3ehZ2z8-:hover {
3439
3436
  border: none;
3440
3437
  border-radius: 100%;
3441
3438
  border-radius: var(--radius-circle);
3442
- background-color: hsl(53, 21%, 93%);
3443
- background-color: var(--color-surface--background);
3439
+ background-color: hsl(51, 17%, 85%);
3440
+ background-color: var(--color-interactive--background);
3444
3441
  cursor: pointer;
3445
3442
  -webkit-transform: translateY(-50%);
3446
3443
  transform: translateY(-50%);
@@ -5384,8 +5381,7 @@ a._7BLGtYNuJOU-.zgRx3ehZ2z8-:hover {
5384
5381
 
5385
5382
  .vWFyXrAaFtQ-:hover,
5386
5383
  .vWFyXrAaFtQ-:hover :first-child {
5387
- background: hsl(53, 21%, 93%);
5388
- background: var(--color-surface--background);
5384
+ background: var(--color-surface--element);
5389
5385
  cursor: pointer;
5390
5386
  }
5391
5387
 
@@ -6223,8 +6219,8 @@ a._7BLGtYNuJOU-.zgRx3ehZ2z8-:hover {
6223
6219
  border-radius: 0;
6224
6220
  color: hsl(198, 35%, 21%);
6225
6221
  color: var(--color-text);
6226
- background: hsl(53, 21%, 93%);
6227
- background: var(--color-surface--background);
6222
+ background: hsl(51, 17%, 85%);
6223
+ background: var(--color-interactive--background);
6228
6224
  }
6229
6225
  .Ma55F5Y-XhE- .react-datepicker__day--disabled {
6230
6226
  color: hsl(0, 0%, 72%);
@@ -6268,8 +6264,8 @@ a._7BLGtYNuJOU-.zgRx3ehZ2z8-:hover {
6268
6264
  }
6269
6265
  .Ma55F5Y-XhE- .react-datepicker__day--outside-month:hover,
6270
6266
  .Ma55F5Y-XhE- .react-datepicker__day--outside-month:focus {
6271
- background: hsl(51, 17%, 85%);
6272
- background: var(--color-surface--background--hover);
6267
+ background: hsl(49, 7%, 70%);
6268
+ background: var(--color-interactive--background--hover);
6273
6269
  }
6274
6270
  .Ma55F5Y-XhE- .react-datepicker__day:focus {
6275
6271
  position: relative;
@@ -6881,8 +6877,8 @@ a._7BLGtYNuJOU-.zgRx3ehZ2z8-:hover {
6881
6877
  box-sizing: border-box;
6882
6878
  padding: 0;
6883
6879
  overflow: hidden;
6884
- background-color: hsl(53, 21%, 93%);
6885
- background-color: var(--color-surface--background);
6880
+ background-color: hsl(51, 17%, 85%);
6881
+ background-color: var(--color-interactive--background);
6886
6882
  -ms-flex-negative: 0;
6887
6883
  flex-shrink: 0;
6888
6884
  -ms-flex-align: center;
@@ -7110,8 +7106,8 @@ progress.p9AgTzIbTwY-[value]::-webkit-progress-bar {
7110
7106
  }
7111
7107
 
7112
7108
  progress.p9AgTzIbTwY-[value]::-webkit-progress-bar {
7113
- background-color: hsl(53, 21%, 93%);
7114
- background-color: var(--color-surface--background);
7109
+ background-color: hsl(51, 17%, 85%);
7110
+ background-color: var(--color-interactive--background);
7115
7111
  }
7116
7112
 
7117
7113
  progress.p9AgTzIbTwY-[value]::-webkit-progress-value {
@@ -7647,8 +7643,8 @@ html.atlantisLightBoxActive {
7647
7643
 
7648
7644
  .h6M4H38O32Y-:hover > *,
7649
7645
  .h6M4H38O32Y-:focus > * {
7650
- background-color: hsl(51, 17%, 85%);
7651
- background-color: var(--color-surface--background--hover);
7646
+ background-color: hsl(49, 7%, 70%);
7647
+ background-color: var(--color-interactive--background--hover);
7652
7648
  }
7653
7649
 
7654
7650
  /* TODO: Move truncate in typography */
@@ -8251,8 +8247,8 @@ html.atlantisLightBoxActive {
8251
8247
  .XGjk9DHJAmw-:disabled + .zulupkPyEs8- {
8252
8248
  color: hsl(0, 0%, 72%);
8253
8249
  color: var(--color-disabled);
8254
- background: hsl(53, 21%, 93%);
8255
- background: var(--color-surface--background);
8250
+ background: hsl(0, 0%, 93%);
8251
+ background: var(--color-disabled--secondary);
8256
8252
  cursor: default;
8257
8253
  }
8258
8254
 
@@ -8404,8 +8400,8 @@ html.atlantisLightBoxActive {
8404
8400
  border: var(--border-base) solid var(--color-border--interactive);
8405
8401
  border-radius: 8px;
8406
8402
  border-radius: var(--radius-base);
8407
- background-color: hsl(53, 21%, 93%);
8408
- background-color: var(--color-surface--background);
8403
+ background-color: hsl(51, 17%, 85%);
8404
+ background-color: var(--color-interactive--background);
8409
8405
  }
8410
8406
 
8411
8407
  .V41prM1xcKI- {
@@ -1,5 +1,5 @@
1
1
  import { useCallback, useSyncExternalStore } from 'react';
2
- import { e as BREAKPOINT_SIZES } from './DataList.const-es.js';
2
+ import { f as BREAKPOINT_SIZES } from './DataList.const-es.js';
3
3
 
4
4
  const mediaQueryStore = {
5
5
  subscribe(onChange, query) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jobber/components",
3
- "version": "6.9.0",
3
+ "version": "6.9.1-CLEANUPau-2d4ca7d.34+2d4ca7db",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",
@@ -487,5 +487,5 @@
487
487
  "> 1%",
488
488
  "IE 10"
489
489
  ],
490
- "gitHead": "e3061144a300e82ee790f5c7d99f90e8e21adfc0"
490
+ "gitHead": "2d4ca7dbe73e0ea7d7b146f4b4e213d51d1203bb"
491
491
  }
@@ -1 +0,0 @@
1
- export declare function useIsSafari(): boolean;