@jobber/components 4.84.0 → 4.85.0

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.
@@ -0,0 +1 @@
1
+ export * from "./dist/StatusIndicator";
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true,
5
+ });
6
+
7
+ var StatusIndicator = require("./dist/StatusIndicator");
8
+
9
+ Object.keys(StatusIndicator).forEach(function(key) {
10
+ if (key === "default" || key === "__esModule") return;
11
+ Object.defineProperty(exports, key, {
12
+ enumerable: true,
13
+ get: function get() {
14
+ return StatusIndicator[key];
15
+ },
16
+ });
17
+ });
@@ -62,6 +62,10 @@ export interface ComboboxOption {
62
62
  * The value to be visually displayed in the Combobox options list.
63
63
  */
64
64
  label: string;
65
+ /**
66
+ * An optional component to be displayed before the label.
67
+ */
68
+ prefix?: React.ReactElement;
65
69
  }
66
70
  export interface ComboboxContentProps {
67
71
  /**
@@ -1,6 +1,7 @@
1
- /// <reference types="react" />
1
+ import React from "react";
2
2
  export interface ComboboxOptionProps {
3
3
  readonly id: string | number;
4
4
  readonly label: string;
5
+ readonly prefix?: React.ReactNode;
5
6
  }
6
7
  export declare function ComboboxOption(props: ComboboxOptionProps): JSX.Element;
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var Combobox = require('../Combobox-df332d89.js');
5
+ var Combobox = require('../Combobox-a24c8241.js');
6
6
  require('react');
7
7
  require('classnames');
8
8
  require('react-dom');
@@ -17,6 +17,7 @@ require('../Content-e3f7b6fc.js');
17
17
  require('../Spinner-9d8fc7ff.js');
18
18
  require('../AnimatedPresence-20a02aaa.js');
19
19
  require('framer-motion');
20
+ require('../Flex-d490c4db.js');
20
21
  require('@jobber/hooks/useInView');
21
22
  require('../Button-b73a5e01.js');
22
23
  require('react-router-dom');
@@ -9,6 +9,7 @@ var Text = require('./Text-259af966.js');
9
9
  var Glimmer = require('./Glimmer-84dee1ed.js');
10
10
  var Spinner = require('./Spinner-9d8fc7ff.js');
11
11
  var AnimatedPresence = require('./AnimatedPresence-20a02aaa.js');
12
+ var Flex = require('./Flex-d490c4db.js');
12
13
  var tslib_es6 = require('./tslib.es6-754e2961.js');
13
14
  var useInView = require('@jobber/hooks/useInView');
14
15
  var Typography = require('./Typography-c45bf216.js');
@@ -84,7 +85,9 @@ function ComboboxOption(props) {
84
85
  const isSelected = selected.some(selection => selection.id.toString() === props.id.toString());
85
86
  return (React__default["default"].createElement("li", { key: props.id, tabIndex: -1, "data-selected": isSelected, role: "option", "aria-selected": isSelected, onClick: () => selectionHandler &&
86
87
  selectionHandler({ id: props.id, label: props.label }), className: classnames__default["default"](styles$4.option) },
87
- props.label,
88
+ React__default["default"].createElement(Flex.Flex, { template: props.prefix ? ["shrink", "grow"] : ["grow"] },
89
+ props.prefix,
90
+ props.label),
88
91
  React__default["default"].createElement("div", null, isSelected && React__default["default"].createElement(Icon.Icon, { name: "checkmark", color: "blue" }))));
89
92
  }
90
93
 
@@ -107,7 +110,7 @@ function ComboboxContentList(props) {
107
110
  return (React__default["default"].createElement("div", { className: classnames__default["default"](styles$5.container, styles$5[listScrollState]) },
108
111
  optionsExist && (React__default["default"].createElement("ul", { className: styles$5.optionsList, role: "listbox", "aria-multiselectable": props.multiselect, ref: props.optionsListRef },
109
112
  props.options.map(option => {
110
- return (React__default["default"].createElement(ComboboxOption, { key: option.id, id: option.id, label: option.label }));
113
+ return (React__default["default"].createElement(ComboboxOption, { key: option.id, id: option.id, label: option.label, prefix: option.prefix }));
111
114
  }),
112
115
  React__default["default"].createElement("div", { className: classnames__default["default"]([styles$5.loadingContainer, styles$5.hasOptions]) },
113
116
  React__default["default"].createElement(AnimatedPresence.AnimatedPresence, { transition: "fromBottom" }, Boolean(props.loading && optionsExist) && (React__default["default"].createElement(Spinner.Spinner, { size: "small" })))),
@@ -459,6 +462,7 @@ function Combobox(props) {
459
462
  const options = React.useMemo(() => (optionElements === null || optionElements === void 0 ? void 0 : optionElements.map(option => ({
460
463
  id: option.props.id,
461
464
  label: option.props.label,
465
+ prefix: option.props.prefix,
462
466
  }))) || [], [optionElements]);
463
467
  const { selectedOptions, selectedStateSetter, shouldScroll, wrapperRef, searchValue, setSearchValue, open, setOpen, handleClose, handleSelection, internalFilteredOptions, handleSearchChange, } = useCombobox(props.selected, props.onSelect, options, props.onClose, props.multiSelect, props.onSearch, props.onSearchDebounce);
464
468
  return (React__default["default"].createElement(ComboboxContextProvider, { selected: selectedOptions, selectionHandler: handleSelection, open: open, setOpen: setOpen, handleClose: handleClose, shouldScroll: shouldScroll, searchValue: searchValue },
@@ -2,10 +2,10 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var ConfirmationModal = require('../ConfirmationModal-f1a049fb.js');
5
+ var ConfirmationModal = require('../ConfirmationModal-52e16873.js');
6
6
  require('react');
7
7
  require('@jobber/hooks/useOnKeyDown');
8
- require('../Modal-a0627c92.js');
8
+ require('../Modal-c336cac6.js');
9
9
  require('react-dom');
10
10
  require('classnames');
11
11
  require('framer-motion');
@@ -2,7 +2,7 @@
2
2
 
3
3
  var React = require('react');
4
4
  var useOnKeyDown = require('@jobber/hooks/useOnKeyDown');
5
- var Modal = require('./Modal-a0627c92.js');
5
+ var Modal = require('./Modal-c336cac6.js');
6
6
  var Content = require('./Content-e3f7b6fc.js');
7
7
  var Markdown = require('./Markdown-f7c55304.js');
8
8
 
@@ -189,7 +189,6 @@ export interface DataListContextProps<T extends DataListObject> extends DataList
189
189
  readonly itemActionComponent?: ReactElement<DataListItemActionsProps<T>>;
190
190
  readonly bulkActionsComponent?: ReactElement<DataListItemActionsProps<T>>;
191
191
  readonly layoutBreakpoints: Breakpoints[];
192
- readonly registerLayoutBreakpoints: (breakpoint: Breakpoints) => void;
193
192
  readonly layouts: {
194
193
  readonly [Breakpoint in Breakpoints]?: LayoutRenderer<T>;
195
194
  };
@@ -26,7 +26,7 @@ var ReactDOM = require('react-dom');
26
26
  var Checkbox = require('../Checkbox-787e2e47.js');
27
27
  var reactRouterDom = require('react-router-dom');
28
28
  var AnimatedSwitcher = require('../AnimatedSwitcher-3d45ec5d.js');
29
- var Combobox = require('../Combobox-df332d89.js');
29
+ var Combobox = require('../Combobox-a24c8241.js');
30
30
  var Chip = require('../Chip-3d1bfddc.js');
31
31
  var debounce = require('lodash/debounce');
32
32
  var InputText = require('../InputText-55b6cb65.js');
@@ -38,6 +38,7 @@ require('react-popper');
38
38
  require('../getAtlantisConfig-0f3e8af2.js');
39
39
  require('react-hook-form');
40
40
  require('../AnimatedPresence-20a02aaa.js');
41
+ require('../Flex-d490c4db.js');
41
42
  require('@jobber/hooks/useAssert');
42
43
  require('../Avatar-76a799fa.js');
43
44
  require('color');
@@ -85,7 +86,6 @@ const defaultValues$1 = {
85
86
  children: [],
86
87
  selected: [],
87
88
  layoutBreakpoints: [],
88
- registerLayoutBreakpoints: noop__default["default"],
89
89
  layouts: {
90
90
  xs: children => React__default["default"].createElement(React__default["default"].Fragment, null, children),
91
91
  sm: children => React__default["default"].createElement(React__default["default"].Fragment, null, children),
@@ -766,17 +766,14 @@ function DataListItems({ size = "xs", }) {
766
766
  }
767
767
 
768
768
  function DataListLayout({ children, size = "xs", }) {
769
- const { layoutBreakpoints, registerLayout, registerLayoutBreakpoints, loadingState, } = useDataListContext();
770
- const breakpoints = useResponsiveSizing();
771
- React.useEffect(() => {
772
- registerLayoutBreakpoints(size);
773
- }, [size]);
769
+ const { registerLayout, loadingState, layouts } = useDataListContext();
770
+ const { activeBreakpoint } = useActiveLayout();
774
771
  React.useEffect(() => {
772
+ if (layouts[size])
773
+ return;
775
774
  registerLayout(size, children);
776
775
  }, [size, children]);
777
- const sizeIndex = layoutBreakpoints.indexOf(size);
778
- const nextAvailableSize = layoutBreakpoints[sizeIndex + 1];
779
- const shouldRenderList = breakpoints[size] && !breakpoints[nextAvailableSize];
776
+ const shouldRenderList = size === activeBreakpoint;
780
777
  if (loadingState !== "initial" && shouldRenderList) {
781
778
  return React__default["default"].createElement(DataListItems, { size: size });
782
779
  }
@@ -1224,8 +1221,8 @@ function InternalDataListStatusBar() {
1224
1221
 
1225
1222
  function DataList(_a) {
1226
1223
  var { selected = [], sorting } = _a, props = tslib_es6.__rest(_a, ["selected", "sorting"]);
1227
- const [layoutBreakpoints, setLayoutBreakpoints] = React.useState([]);
1228
1224
  const [layouts, setLayouts] = React.useState({});
1225
+ const layoutBreakpoints = React.useMemo(() => sortBreakpoints(Object.keys(layouts)), [layouts]);
1229
1226
  const searchComponent = getCompoundComponent(props.children, DataListSearch);
1230
1227
  const filterComponent = getCompoundComponent(props.children, DataListFilters);
1231
1228
  const layoutComponents = getCompoundComponents(props.children, DataListLayout);
@@ -1241,15 +1238,11 @@ function DataList(_a) {
1241
1238
  itemActionComponent,
1242
1239
  bulkActionsComponent,
1243
1240
  layoutBreakpoints,
1244
- registerLayoutBreakpoints,
1245
1241
  layouts,
1246
1242
  registerLayout }, props), { selected,
1247
1243
  // T !== DataListObject
1248
1244
  sorting: sorting }) },
1249
1245
  React__default["default"].createElement(InternalDataList, { shouldRenderStickyHeader: shouldRenderStickyHeader })));
1250
- function registerLayoutBreakpoints(size) {
1251
- setLayoutBreakpoints(prev => sortBreakpoints([...prev, size]));
1252
- }
1253
1246
  function registerLayout(size, children) {
1254
1247
  setLayouts(prev => (Object.assign(Object.assign({}, prev), { [size]: children })));
1255
1248
  }
@@ -2,39 +2,11 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var React = require('react');
6
- var classnames = require('classnames');
7
- var styleInject_es = require('../style-inject.es-9d2f5f4e.js');
5
+ var Flex = require('../Flex-d490c4db.js');
6
+ require('react');
7
+ require('classnames');
8
+ require('../style-inject.es-9d2f5f4e.js');
8
9
 
9
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
10
10
 
11
- var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
12
- var classnames__default = /*#__PURE__*/_interopDefaultLegacy(classnames);
13
11
 
14
- var css_248z = "._8VpnrMKmsqQ- {\n display: grid;\n /* If this gets wrapped in a flex container, it should take the remaining space */\n -ms-flex: 1;\n flex: 1;\n}\n\n.ooF1YfV4Usc- {\n gap: calc(16px / 8);\n gap: var(--space-smallest);\n}\n\n.ppCZfXq-Kqc- {\n gap: calc(16px / 4);\n gap: var(--space-smaller);\n}\n\n.tElkBalXH3g- {\n gap: calc(16px / 2);\n gap: var(--space-small);\n}\n\n._4u3OwUKxxbg- {\n gap: calc(16px * 1);\n gap: var(--space-base);\n}\n\n.RL7CJla0AAI- {\n gap: calc(16px * 1.5);\n gap: var(--space-large);\n}\n\n.fV4cvFYkhgo- {\n gap: 0;\n}\n\n._04xVVjZgr-0- {\n -ms-flex-align: start;\n align-items: start;\n}\n\n.Nc3zrqHHYSg- {\n -ms-flex-align: center;\n align-items: center;\n}\n\n.qA-v50wBX1U- {\n -ms-flex-align: end;\n align-items: end;\n}\n";
15
- var styles = {"flexible":"_8VpnrMKmsqQ-","smallestGap":"ooF1YfV4Usc-","smallerGap":"ppCZfXq-Kqc-","smallGap":"tElkBalXH3g-","baseGap":"_4u3OwUKxxbg-","largeGap":"RL7CJla0AAI-","noneGap":"fV4cvFYkhgo-","startAlign":"_04xVVjZgr-0-","centerAlign":"Nc3zrqHHYSg-","endAlign":"qA-v50wBX1U-"};
16
- styleInject_es.styleInject(css_248z);
17
-
18
- function Flex({ align = "center", children, direction = "row", gap = "base", template, }) {
19
- return (React__default["default"].createElement("div", { className: classnames__default["default"](styles.flexible, {
20
- [styles[`${gap}Gap`]]: Boolean(gap),
21
- [styles[`${align}Align`]]: Boolean(align),
22
- }), style: generateGridStylesFromTemplate(direction, template) }, children));
23
- }
24
- function generateGridStylesFromTemplate(direction, layoutTemplate) {
25
- const containerStyles = {};
26
- const templateKeys = {
27
- row: "gridTemplateColumns",
28
- column: "gridTemplateRows",
29
- };
30
- const templateValues = {
31
- grow: "1fr",
32
- shrink: "max-content",
33
- };
34
- containerStyles[templateKeys[direction]] = layoutTemplate
35
- .map(key => templateValues[key])
36
- .join(" ");
37
- return containerStyles;
38
- }
39
-
40
- exports.Flex = Flex;
12
+ exports.Flex = Flex.Flex;
@@ -0,0 +1,38 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var classnames = require('classnames');
5
+ var styleInject_es = require('./style-inject.es-9d2f5f4e.js');
6
+
7
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
+
9
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
10
+ var classnames__default = /*#__PURE__*/_interopDefaultLegacy(classnames);
11
+
12
+ var css_248z = "._8VpnrMKmsqQ- {\n display: grid;\n /* If this gets wrapped in a flex container, it should take the remaining space */\n -ms-flex: 1;\n flex: 1;\n}\n\n.ooF1YfV4Usc- {\n gap: calc(16px / 8);\n gap: var(--space-smallest);\n}\n\n.ppCZfXq-Kqc- {\n gap: calc(16px / 4);\n gap: var(--space-smaller);\n}\n\n.tElkBalXH3g- {\n gap: calc(16px / 2);\n gap: var(--space-small);\n}\n\n._4u3OwUKxxbg- {\n gap: calc(16px * 1);\n gap: var(--space-base);\n}\n\n.RL7CJla0AAI- {\n gap: calc(16px * 1.5);\n gap: var(--space-large);\n}\n\n.fV4cvFYkhgo- {\n gap: 0;\n}\n\n._04xVVjZgr-0- {\n -ms-flex-align: start;\n align-items: start;\n}\n\n.Nc3zrqHHYSg- {\n -ms-flex-align: center;\n align-items: center;\n}\n\n.qA-v50wBX1U- {\n -ms-flex-align: end;\n align-items: end;\n}\n";
13
+ var styles = {"flexible":"_8VpnrMKmsqQ-","smallestGap":"ooF1YfV4Usc-","smallerGap":"ppCZfXq-Kqc-","smallGap":"tElkBalXH3g-","baseGap":"_4u3OwUKxxbg-","largeGap":"RL7CJla0AAI-","noneGap":"fV4cvFYkhgo-","startAlign":"_04xVVjZgr-0-","centerAlign":"Nc3zrqHHYSg-","endAlign":"qA-v50wBX1U-"};
14
+ styleInject_es.styleInject(css_248z);
15
+
16
+ function Flex({ align = "center", children, direction = "row", gap = "base", template, }) {
17
+ return (React__default["default"].createElement("div", { className: classnames__default["default"](styles.flexible, {
18
+ [styles[`${gap}Gap`]]: Boolean(gap),
19
+ [styles[`${align}Align`]]: Boolean(align),
20
+ }), style: generateGridStylesFromTemplate(direction, template) }, children));
21
+ }
22
+ function generateGridStylesFromTemplate(direction, layoutTemplate) {
23
+ const containerStyles = {};
24
+ const templateKeys = {
25
+ row: "gridTemplateColumns",
26
+ column: "gridTemplateRows",
27
+ };
28
+ const templateValues = {
29
+ grow: "1fr",
30
+ shrink: "max-content",
31
+ };
32
+ containerStyles[templateKeys[direction]] = layoutTemplate
33
+ .map(key => templateValues[key])
34
+ .join(" ");
35
+ return containerStyles;
36
+ }
37
+
38
+ exports.Flex = Flex;
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var FormatFile = require('../FormatFile-f10799f5.js');
5
+ var FormatFile = require('../FormatFile-f036902d.js');
6
6
  require('react');
7
7
  require('classnames');
8
8
  require('filesize');
@@ -12,9 +12,9 @@ require('react-router-dom');
12
12
  require('../Icon-405a216c.js');
13
13
  require('@jobber/design');
14
14
  require('../Typography-c45bf216.js');
15
- require('../ConfirmationModal-f1a049fb.js');
15
+ require('../ConfirmationModal-52e16873.js');
16
16
  require('@jobber/hooks/useOnKeyDown');
17
- require('../Modal-a0627c92.js');
17
+ require('../Modal-c336cac6.js');
18
18
  require('react-dom');
19
19
  require('framer-motion');
20
20
  require('@jobber/hooks/useRefocusOnActivator');
@@ -5,7 +5,7 @@ var classnames = require('classnames');
5
5
  var getHumanReadableFileSize = require('filesize');
6
6
  var styleInject_es = require('./style-inject.es-9d2f5f4e.js');
7
7
  var Button = require('./Button-b73a5e01.js');
8
- var ConfirmationModal = require('./ConfirmationModal-f1a049fb.js');
8
+ var ConfirmationModal = require('./ConfirmationModal-52e16873.js');
9
9
  var Glimmer = require('./Glimmer-84dee1ed.js');
10
10
  var Icon = require('./Icon-405a216c.js');
11
11
  var Typography = require('./Typography-c45bf216.js');
@@ -6,7 +6,7 @@ var React = require('react');
6
6
  var classnames = require('classnames');
7
7
  var styleInject_es = require('../style-inject.es-9d2f5f4e.js');
8
8
  var LightBox = require('../LightBox-a89d8863.js');
9
- var FormatFile = require('../FormatFile-f10799f5.js');
9
+ var FormatFile = require('../FormatFile-f036902d.js');
10
10
  var Button = require('../Button-b73a5e01.js');
11
11
  require('framer-motion');
12
12
  require('react-dom');
@@ -16,8 +16,8 @@ require('@jobber/hooks/useOnKeyDown');
16
16
  require('@jobber/hooks/useFocusTrap');
17
17
  require('../ButtonDismiss-350af163.js');
18
18
  require('filesize');
19
- require('../ConfirmationModal-f1a049fb.js');
20
- require('../Modal-a0627c92.js');
19
+ require('../ConfirmationModal-52e16873.js');
20
+ require('../Modal-c336cac6.js');
21
21
  require('../Heading-1e8e4bd3.js');
22
22
  require('../Typography-c45bf216.js');
23
23
  require('../getAtlantisConfig-0f3e8af2.js');
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var Modal = require('../Modal-a0627c92.js');
5
+ var Modal = require('../Modal-c336cac6.js');
6
6
  require('react');
7
7
  require('react-dom');
8
8
  require('classnames');
@@ -18,7 +18,7 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
18
18
  var ReactDOM__default = /*#__PURE__*/_interopDefaultLegacy(ReactDOM);
19
19
  var classnames__default = /*#__PURE__*/_interopDefaultLegacy(classnames);
20
20
 
21
- var css_248z$1 = ":root {\n --modal--width: calc(var(--base-unit) * 37.5);\n --modal--padding-horizontal: var(--space-base);\n --modal--padding-vertical: var(--space-base);\n --modal--padding: var(--modal--padding-vertical)\n var(--modal--padding-horizontal);\n}\n\n@media (min-width: 768px) {\n\n:root {\n --modal--padding-horizontal: var(--space-large);\n}\n }\n\n@media (--medium-screens-and-up) {\n\n:root {\n --modal--padding-horizontal: var(--space-large);\n}\n }\n\n:root .jobber-retheme {\n --modal--shadow: var(--shadow-base);\n}\n\n@media (min-width: 768px) {\n\n:root .jobber-retheme {\n --modal--padding-horizontal: var(--space-large);\n --modal--padding-vertical: var(--space-large);\n --modal--padding: var(--modal--padding-vertical)\n var(--modal--padding-horizontal);\n}\n }\n\n@media (--medium-screens-and-up) {\n\n:root .jobber-retheme {\n --modal--padding-horizontal: var(--space-large);\n --modal--padding-vertical: var(--space-large);\n --modal--padding: var(--modal--padding-vertical)\n var(--modal--padding-horizontal);\n}\n }\n\n.QGRLFHPoV5E- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n z-index: 1001;\n z-index: var(--elevation-modal);\n padding: calc(16px / 2);\n padding: var(--space-small);\n overflow: auto;\n}\n\n.QGRLFHPoV5E-,\n._4WzGOMUGj5I- {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n}\n\n._4WzGOMUGj5I- {\n background-color: rgba(0, 0, 0, 0.32);\n background-color: var(--color-overlay);\n}\n\n.WLId2NJBQcQ- {\n position: relative;\n width: 100%;\n max-width: calc(16px * 37.5);\n max-width: var(--modal--width);\n box-shadow: var(--modal--shadow);\n margin: auto;\n border: calc(16px / 16) solid rgb(217, 223, 225);\n border: var(--border-base) solid var(--color-border);\n border-radius: calc(16px / 8);\n border-radius: var(--radius-base);\n background-color: rgba(255, 255, 255, 1);\n background-color: var(--color-surface);\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n outline-color: rgb(147, 161, 169);\n outline-color: var(--color-focus);\n}\n\n/* Adjust `Content` and `Tab` components public padding to match the modal */\n\n.WLId2NJBQcQ- > * {\n --public-content--padding: var(--modal--padding);\n --public-tab--inset: var(--modal--padding-horizontal);\n}\n\n/* Remove the nested `Content` components public padding */\n\n.WLId2NJBQcQ- > * > * {\n --public-content--padding: 0;\n}\n\n.wjrPpIUNNrk- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: justify;\n justify-content: space-between;\n -ms-flex-align: center;\n align-items: center;\n padding: calc(16px * 1)\n calc(16px * 1);\n padding: var(--modal--padding);\n background-color: rgb(238, 240, 242);\n background-color: var(--color-surface--background);\n}\n\n.jobber-retheme .wjrPpIUNNrk- {\n background-color: transparent;\n}\n\n.jobber-retheme .wjrPpIUNNrk- h3 {\n font-family: \"Inter\", Helvetica, Arial, sans-serif;\n font-family: var(--typography--fontFamily-normal);\n font-size: calc((16px * 1) * 1.5);\n font-size: calc(calc(16px * 1) * 1.5);\n font-size: var(--typography--fontSize-largest);\n}\n\n/**\n * Ensure there's no extra padding top on the next element. This mostly negates\n * the <Content /> padding\n */\n\n.jobber-retheme .wjrPpIUNNrk- + * {\n padding-top: 0;\n}\n\n.rKvigUnOyYE- {\n padding: 0;\n border: none;\n background-color: transparent;\n cursor: pointer;\n -webkit-appearance: none;\n appearance: none;\n}\n\n._62c8HLZFwvs- {\n display: -ms-flexbox;\n display: flex;\n padding: calc(16px * 1)\n calc(16px * 1);\n padding: var(--modal--padding);\n padding-top: 0;\n -ms-flex: 1 1 100%;\n flex: 1 1 100%;\n -ms-flex-pack: end;\n justify-content: flex-end;\n}\n\n/**\n * 1. Use CSS `order` to adjust the buttons position on the UI\n */\n\n.Xl1Ptn-P9Ew- {\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n -ms-flex-order: 1;\n order: 1; /* 1 */\n}\n\n.p2s7GtpoZz0- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n -ms-flex-order: 2;\n order: 2; /* 1 */\n}\n\n/* This is in a correct position and order */\n\n/* stylelint-disable-next-line no-descending-specificity */\n\n.p2s7GtpoZz0- > * {\n margin-left: calc(16px / 2);\n margin-left: var(--space-small);\n}\n\n.p2s7GtpoZz0- *:first-child {\n -ms-flex-order: 2;\n order: 2; /* 1 */\n}\n\n.p2s7GtpoZz0- *:nth-child(2) {\n -ms-flex-order: 1;\n order: 1; /* 1 */\n}\n";
21
+ var css_248z$1 = ":root {\n --modal--width: calc(var(--base-unit) * 37.5);\n --modal--padding-horizontal: var(--space-base);\n --modal--padding-vertical: var(--space-base);\n --modal--padding: var(--modal--padding-vertical)\n var(--modal--padding-horizontal);\n}\n\n@media (min-width: 768px) {\n\n:root {\n --modal--padding-horizontal: var(--space-large);\n}\n }\n\n@media (--medium-screens-and-up) {\n\n:root {\n --modal--padding-horizontal: var(--space-large);\n}\n }\n\n:root .jobber-retheme {\n --modal--shadow: var(--shadow-base);\n}\n\n@media (min-width: 768px) {\n\n:root .jobber-retheme {\n --modal--padding-horizontal: var(--space-large);\n --modal--padding-vertical: var(--space-large);\n --modal--padding: var(--modal--padding-vertical)\n var(--modal--padding-horizontal);\n}\n }\n\n@media (--medium-screens-and-up) {\n\n:root .jobber-retheme {\n --modal--padding-horizontal: var(--space-large);\n --modal--padding-vertical: var(--space-large);\n --modal--padding: var(--modal--padding-vertical)\n var(--modal--padding-horizontal);\n}\n }\n\n.QGRLFHPoV5E- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n z-index: 1001;\n z-index: var(--elevation-modal);\n padding: calc(16px / 2);\n padding: var(--space-small);\n overflow: auto;\n}\n\n.QGRLFHPoV5E-,\n._4WzGOMUGj5I- {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n}\n\n._4WzGOMUGj5I- {\n background-color: rgba(0, 0, 0, 0.32);\n background-color: var(--color-overlay);\n}\n\n.WLId2NJBQcQ- {\n position: relative;\n width: 100%;\n max-width: calc(16px * 37.5);\n max-width: var(--modal--width);\n box-shadow: var(--modal--shadow);\n margin: auto;\n border: calc(16px / 16) solid rgb(217, 223, 225);\n border: var(--border-base) solid var(--color-border);\n border-radius: calc(16px / 8);\n border-radius: var(--radius-base);\n background-color: rgba(255, 255, 255, 1);\n background-color: var(--color-surface);\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n outline-color: rgb(147, 161, 169);\n outline-color: var(--color-focus);\n}\n\n/* Adjust `Content` and `Tab` components public padding to match the modal */\n\n.WLId2NJBQcQ- > * {\n --public-content--padding: var(--modal--padding);\n --public-tab--inset: var(--modal--padding-horizontal);\n}\n\n/* Remove the nested `Content` components public padding */\n\n.WLId2NJBQcQ- > * > * {\n --public-content--padding: 0;\n}\n\n.wjrPpIUNNrk- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: justify;\n justify-content: space-between;\n -ms-flex-align: center;\n align-items: center;\n padding: calc(16px * 1)\n calc(16px * 1);\n padding: var(--modal--padding);\n background-color: rgb(238, 240, 242);\n background-color: var(--color-surface--background);\n}\n\n.jobber-retheme .wjrPpIUNNrk- {\n background-color: transparent;\n}\n\n.jobber-retheme .wjrPpIUNNrk- h3 {\n font-family: \"Inter\", Helvetica, Arial, sans-serif;\n font-family: var(--typography--fontFamily-normal);\n font-size: calc((16px * 1) * 1.5);\n font-size: calc(calc(16px * 1) * 1.5);\n font-size: var(--typography--fontSize-largest);\n}\n\n/**\n * Ensure there's no extra padding top on the next element. This mostly negates\n * the <Content /> padding\n */\n\n.jobber-retheme .wjrPpIUNNrk- + * {\n padding-top: 0;\n}\n\n.rKvigUnOyYE- {\n padding: 0;\n border: none;\n background-color: transparent;\n cursor: pointer;\n -webkit-appearance: none;\n appearance: none;\n}\n\n._62c8HLZFwvs- {\n display: -ms-flexbox;\n display: flex;\n padding: calc(16px * 1)\n calc(16px * 1);\n padding: var(--modal--padding);\n padding-top: 0;\n -ms-flex: 1 1 100%;\n flex: 1 1 100%;\n -ms-flex-pack: end;\n justify-content: flex-end;\n}\n\n/**\n * 1. Use CSS `order` to adjust the buttons position on the UI\n */\n\n.Xl1Ptn-P9Ew- {\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n -ms-flex-order: 1;\n order: 1; /* 1 */\n}\n\n.p2s7GtpoZz0- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n -ms-flex-order: 2;\n order: 2; /* 1 */\n}\n\n/* This is in a correct position and order */\n\n/* stylelint-disable-next-line no-descending-specificity */\n\n.p2s7GtpoZz0- > * {\n margin-left: calc(16px / 2);\n margin-left: var(--space-small);\n}\n\n.p2s7GtpoZz0- > *:first-child {\n -ms-flex-order: 2;\n order: 2; /* 1 */\n}\n\n.p2s7GtpoZz0- > *:nth-child(2) {\n -ms-flex-order: 1;\n order: 1; /* 1 */\n}\n";
22
22
  var styles = {"container":"QGRLFHPoV5E-","overlay":"_4WzGOMUGj5I-","modal":"WLId2NJBQcQ-","header":"wjrPpIUNNrk-","closeButton":"rKvigUnOyYE-","actionBar":"_62c8HLZFwvs-","leftAction":"Xl1Ptn-P9Ew-","rightAction":"p2s7GtpoZz0-"};
23
23
  styleInject_es.styleInject(css_248z$1);
24
24
 
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ import { StatusIndicatorType } from "./StatusIndicator.type";
3
+ interface StatusIndicatorProps {
4
+ readonly status: StatusIndicatorType;
5
+ }
6
+ export declare function StatusIndicator({ status }: StatusIndicatorProps): JSX.Element;
7
+ export {};
@@ -0,0 +1 @@
1
+ export type StatusIndicatorType = "success" | "warning" | "critical" | "inactive" | "informative";
@@ -0,0 +1,2 @@
1
+ export { StatusIndicator } from "./StatusIndicator";
2
+ export type { StatusIndicatorType } from "./StatusIndicator.type";
@@ -0,0 +1,11 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var StatusIndicator = require('../StatusIndicator-b179d06e.js');
6
+ require('react');
7
+ require('../style-inject.es-9d2f5f4e.js');
8
+
9
+
10
+
11
+ exports.StatusIndicator = StatusIndicator.StatusIndicator;
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var styleInject_es = require('./style-inject.es-9d2f5f4e.js');
5
+
6
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
7
+
8
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
9
+
10
+ var css_248z = ".ob7nhx1U-HQ- {\n display: inline-block;\n width: var(--statusLabel-icon-diameter);\n height: var(--statusLabel-icon-diameter);\n border-radius: 3px;\n background-color: rgb(125, 176, 14);\n background-color: var(--color-success);\n -ms-flex-negative: 0;\n flex-shrink: 0;\n}\n";
11
+ var styles = {"statusIndicator":"ob7nhx1U-HQ-"};
12
+ styleInject_es.styleInject(css_248z);
13
+
14
+ function StatusIndicator({ status }) {
15
+ return (React__default["default"].createElement("span", { style: { backgroundColor: `var(--color-${status})` }, className: styles.statusIndicator, "data-testid": `ATL-Status-Indicator-${status}` }));
16
+ }
17
+
18
+ exports.StatusIndicator = StatusIndicator;
@@ -1,8 +1,8 @@
1
1
  /// <reference types="react" />
2
- export type StatusType = "success" | "warning" | "critical" | "inactive" | "informative";
2
+ import { StatusIndicatorType } from "../StatusIndicator/StatusIndicator.type";
3
3
  export interface StatusLabelType {
4
4
  readonly statusLabel: string;
5
- readonly statusType?: StatusType;
5
+ readonly statusType?: StatusIndicatorType;
6
6
  }
7
7
  interface StatusLabelProps {
8
8
  /**
@@ -20,7 +20,7 @@ interface StatusLabelProps {
20
20
  *
21
21
  * @default "inactive"
22
22
  */
23
- readonly status: StatusType;
23
+ readonly status: StatusIndicatorType;
24
24
  }
25
25
  export declare function StatusLabel({ label, alignment, status, }: StatusLabelProps): JSX.Element;
26
26
  export {};
@@ -6,6 +6,7 @@ var React = require('react');
6
6
  var classnames = require('classnames');
7
7
  var styleInject_es = require('../style-inject.es-9d2f5f4e.js');
8
8
  var Text = require('../Text-259af966.js');
9
+ var StatusIndicator = require('../StatusIndicator-b179d06e.js');
9
10
  require('../Typography-c45bf216.js');
10
11
 
11
12
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -13,18 +14,16 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
13
14
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
14
15
  var classnames__default = /*#__PURE__*/_interopDefaultLegacy(classnames);
15
16
 
16
- var css_248z = ":root {\n --statusLabel-icon-diameter: 10px;\n}\n\n.MB0ycTR4PHg- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: row;\n flex-direction: row;\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n gap: calc(16px / 2);\n gap: var(--space-small);\n width: -webkit-fit-content;\n width: -moz-fit-content;\n width: fit-content;\n}\n\n.fNl6zDhsox0- {\n width: 10px;\n width: var(--statusLabel-icon-diameter);\n height: 10px;\n height: var(--statusLabel-icon-diameter);\n margin-top: calc(16px / 16);\n margin-top: var(--space-minuscule);\n border-radius: 3px;\n background-color: rgb(125, 176, 14);\n background-color: var(--color-success);\n -ms-flex-negative: 0;\n flex-shrink: 0;\n}\n\n._0kNfkSPBETw- {\n -ms-flex-direction: row-reverse;\n flex-direction: row-reverse;\n}\n";
17
- var styles = {"statusLabelRow":"MB0ycTR4PHg-","statusIndicator":"fNl6zDhsox0-","labelTextEndAligned":"_0kNfkSPBETw-"};
17
+ var css_248z = ":root {\n --statusLabel-icon-diameter: 10px;\n}\n\n.MB0ycTR4PHg- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: row;\n flex-direction: row;\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n gap: calc(16px / 2);\n gap: var(--space-small);\n width: -webkit-fit-content;\n width: -moz-fit-content;\n width: fit-content;\n}\n\n._0kNfkSPBETw- {\n -ms-flex-direction: row-reverse;\n flex-direction: row-reverse;\n}\n\n.fNl6zDhsox0- {\n display: -ms-inline-flexbox;\n display: inline-flex;\n padding-top: calc(16px / 16);\n padding-top: var(--space-minuscule);\n}\n";
18
+ var styles = {"statusLabelRow":"MB0ycTR4PHg-","labelTextEndAligned":"_0kNfkSPBETw-","statusIndicator":"fNl6zDhsox0-"};
18
19
  styleInject_es.styleInject(css_248z);
19
20
 
20
21
  function StatusLabel({ label, alignment = "start", status = "inactive", }) {
21
22
  const containerClassNames = classnames__default["default"](styles.statusLabelRow, alignment === "end" && styles.labelTextEndAligned);
22
23
  return (React__default["default"].createElement("div", { role: "status", className: containerClassNames },
23
- React__default["default"].createElement(StatusLabelIcon, { status: status }),
24
+ React__default["default"].createElement("div", { className: styles.statusIndicator },
25
+ React__default["default"].createElement(StatusIndicator.StatusIndicator, { status: status })),
24
26
  React__default["default"].createElement(Text.Text, { size: "small", align: alignment }, label)));
25
27
  }
26
- function StatusLabelIcon({ status }) {
27
- return (React__default["default"].createElement("div", { style: { backgroundColor: `var(--color-${status}` }, className: styles.statusIndicator }));
28
- }
29
28
 
30
29
  exports.StatusLabel = StatusLabel;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jobber/components",
3
- "version": "4.84.0",
3
+ "version": "4.85.0",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -80,5 +80,5 @@
80
80
  "> 1%",
81
81
  "IE 10"
82
82
  ],
83
- "gitHead": "4780cde621bb770d24f6bd324ee868b302afc579"
83
+ "gitHead": "8a94ae96fa60a2d0db036ab5bc87d9dc4df39f78"
84
84
  }