@jobber/components 4.29.0 → 4.30.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.
@@ -1,8 +1,10 @@
1
1
  /// <reference types="react" />
2
2
  import { DataListLayout } from "./components/DataListLayout";
3
3
  import { DataListObject, DataListProps } from "./DataList.types";
4
- export declare function DataList<T extends DataListObject>({ data, headers, loading, filterApplied, children, title, totalCount, headerVisibility, }: DataListProps<T>): JSX.Element;
4
+ import { DataListFilters } from "./components/DataListFilters";
5
+ export declare function DataList<T extends DataListObject>(props: DataListProps<T>): JSX.Element;
5
6
  export declare namespace DataList {
6
7
  var Layout: typeof DataListLayout;
7
8
  var EmptyState: typeof import("./components/EmptyState").EmptyState;
9
+ var Filters: typeof DataListFilters;
8
10
  }
@@ -0,0 +1 @@
1
+ export declare const CONTAINER_TEST_ID = "ATL-DataListFilters-Container";
@@ -0,0 +1,10 @@
1
+ import { ReactElement } from "react";
2
+ interface DataListFiltersProps {
3
+ readonly children: ReactElement | ReactElement[];
4
+ }
5
+ export declare function DataListFilters(_: DataListFiltersProps): null;
6
+ /**
7
+ * Renders the DataList.Filters component
8
+ */
9
+ export declare function InternalDataListFilters(): JSX.Element | null;
10
+ export {};
@@ -0,0 +1 @@
1
+ export * from "./DataListFilters";
@@ -0,0 +1,9 @@
1
+ /// <reference types="react" />
2
+ import { DataListObject, DataListProps } from "../../DataList.types";
3
+ export declare const defaultValues: {
4
+ data: never[];
5
+ headers: {};
6
+ children: never[];
7
+ };
8
+ export declare const DataListContext: import("react").Context<DataListProps<DataListObject>>;
9
+ export declare function useDataListContext(): DataListProps<DataListObject>;
@@ -0,0 +1 @@
1
+ export * from "./DataListContext";
@@ -11,10 +11,11 @@ var InlineLabel = require('../InlineLabel-afd5fc6f.js');
11
11
  var FormatDate = require('../FormatDate-70ea5b43.js');
12
12
  var Heading = require('../Heading-a1191b15.js');
13
13
  var Glimmer = require('../Glimmer-cfa92a88.js');
14
- require('classnames');
14
+ var classnames = require('classnames');
15
15
  require('react-router-dom');
16
16
  require('@jobber/design');
17
17
  require('../Typography-fd6f932a.js');
18
+ var useInView = require('@jobber/hooks/useInView');
18
19
  require('../Icon-405a216c.js');
19
20
  require('../tslib.es6-5b8768b7.js');
20
21
  require('../Content-2ca1ffe1.js');
@@ -23,17 +24,18 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
23
24
 
24
25
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
25
26
  var isEmpty__default = /*#__PURE__*/_interopDefaultLegacy(isEmpty);
27
+ var classnames__default = /*#__PURE__*/_interopDefaultLegacy(classnames);
26
28
 
27
- var css_248z$4 = ".TkdrExYnvcY- {\n -ms-flex: 1;\n flex: 1;\n}\n\n.IcAlZHoB4LI- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n margin-bottom: calc(16px / 2);\n margin-bottom: var(--space-small);\n}\n\n.Z8C7qJtq5Xc- {\n position: sticky;\n top: 0;\n z-index: 1;\n z-index: var(--elevation-base);\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 background-color: rgba(255, 255, 255, 1);\n background-color: var(--color-surface);\n}\n\n.Gj9kAGnfKco- > * {\n font-weight: 500;\n}\n\n.ise8kHCfhCY- {\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}\n";
28
- var styles$4 = {"wrapper":"TkdrExYnvcY-","titleContainer":"IcAlZHoB4LI-","header":"Z8C7qJtq5Xc-","headerLabel":"Gj9kAGnfKco-","listItem":"ise8kHCfhCY-"};
29
- styleInject_es.styleInject(css_248z$4);
29
+ var css_248z$5 = ".TkdrExYnvcY- {\n -ms-flex: 1;\n flex: 1;\n}\n\n.IcAlZHoB4LI- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n margin-bottom: calc(16px / 2);\n margin-bottom: var(--space-small);\n}\n\n.Z8C7qJtq5Xc- {\n position: sticky;\n top: 0;\n z-index: 1;\n z-index: var(--elevation-base);\n background-color: rgba(255, 255, 255, 1);\n background-color: var(--color-surface);\n}\n\n.Z8C7qJtq5Xc-:empty {\n display: none;\n}\n\n.jGHZZYZm1ZY- {\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.Gj9kAGnfKco- > * {\n font-weight: 500;\n}\n\n.ise8kHCfhCY- {\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}\n";
30
+ var styles$5 = {"wrapper":"TkdrExYnvcY-","titleContainer":"IcAlZHoB4LI-","header":"Z8C7qJtq5Xc-","headerTitles":"jGHZZYZm1ZY-","headerLabel":"Gj9kAGnfKco-","listItem":"ise8kHCfhCY-"};
31
+ styleInject_es.styleInject(css_248z$5);
30
32
 
31
- var css_248z$3 = "._--dXJma0jX0- {\n display: -ms-flexbox;\n display: flex;\n height: 100%;\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}\n";
32
- var styles$3 = {"emptyStateWrapper":"_--dXJma0jX0-"};
33
- styleInject_es.styleInject(css_248z$3);
33
+ var css_248z$4 = "._--dXJma0jX0- {\n display: -ms-flexbox;\n display: flex;\n height: 100%;\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}\n";
34
+ var styles$4 = {"emptyStateWrapper":"_--dXJma0jX0-"};
35
+ styleInject_es.styleInject(css_248z$4);
34
36
 
35
37
  function DataListEmptyState({ message, action }) {
36
- return (React__default["default"].createElement("div", { className: styles$3.emptyStateWrapper },
38
+ return (React__default["default"].createElement("div", { className: styles$4.emptyStateWrapper },
37
39
  React__default["default"].createElement(Text.Text, { align: "center" }, message),
38
40
  action && (React__default["default"].createElement(Button.Button, Object.assign({}, Object.assign(Object.assign({}, action), { variation: "subtle" }))))));
39
41
  }
@@ -58,9 +60,9 @@ const BREAKPOINT_SIZES = {
58
60
  xl: 1440,
59
61
  };
60
62
 
61
- var css_248z$2 = ".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(--color-white);\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}\n";
62
- var styles$2 = {"tags":"WRV-UmQmPzo-","tagCount":"liQeWCMenD0-"};
63
- styleInject_es.styleInject(css_248z$2);
63
+ var css_248z$3 = ".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(--color-white);\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}\n";
64
+ var styles$3 = {"tags":"WRV-UmQmPzo-","tagCount":"liQeWCMenD0-"};
65
+ styleInject_es.styleInject(css_248z$3);
64
66
 
65
67
  function DataListTags({ items }) {
66
68
  const ref = React.useRef(null);
@@ -82,10 +84,10 @@ function DataListTags({ items }) {
82
84
  elements === null || elements === void 0 ? void 0 : elements.forEach(element => observer.unobserve(element));
83
85
  };
84
86
  }, [items]);
85
- return (React__default["default"].createElement("div", { className: styles$2.tags, ref: ref },
87
+ return (React__default["default"].createElement("div", { className: styles$3.tags, ref: ref },
86
88
  items.filter(Boolean).map((tag, index) => (React__default["default"].createElement("div", { key: tag, "data-tag-element": index },
87
89
  React__default["default"].createElement(InlineLabel.InlineLabel, null, tag)))),
88
- Boolean(visibleItems) && (React__default["default"].createElement("div", { className: styles$2.tagCount },
90
+ Boolean(visibleItems) && (React__default["default"].createElement("div", { className: styles$3.tagCount },
89
91
  React__default["default"].createElement(Text.Text, null,
90
92
  "+",
91
93
  visibleItems)))));
@@ -163,7 +165,7 @@ function generateListItemElements(data) {
163
165
  * Generate the header elements with the default styling
164
166
  */
165
167
  function generateHeaderElements(headers) {
166
- const headerElements = Object.keys(headers).reduce((acc, key) => (Object.assign(Object.assign({}, acc), { [key]: (React__default["default"].createElement("div", { className: styles$4.headerLabel },
168
+ const headerElements = Object.keys(headers).reduce((acc, key) => (Object.assign(Object.assign({}, acc), { [key]: (React__default["default"].createElement("div", { className: styles$5.headerLabel },
167
169
  React__default["default"].createElement(Text.Text, { variation: "subdued", maxLines: "single", size: "small" }, headers[key]))) })), {});
168
170
  return isEmpty__default["default"](headerElements) ? undefined : headerElements;
169
171
  }
@@ -196,9 +198,9 @@ function sortSizeProp(sizeProp) {
196
198
  return sizeProp.sort((a, b) => BREAKPOINTS.indexOf(a) - BREAKPOINTS.indexOf(b));
197
199
  }
198
200
 
199
- var css_248z$1 = ".F56prQsXm3A- {\n min-width: 80px;\n margin-left: calc(16px / 2);\n margin-left: var(--space-small);\n}\n";
200
- var styles$1 = {"results":"F56prQsXm3A-"};
201
- styleInject_es.styleInject(css_248z$1);
201
+ var css_248z$2 = ".F56prQsXm3A- {\n min-width: 80px;\n margin-left: calc(16px / 2);\n margin-left: var(--space-small);\n}\n";
202
+ var styles$2 = {"results":"F56prQsXm3A-"};
203
+ styleInject_es.styleInject(css_248z$2);
202
204
 
203
205
  const DATALIST_TOTALCOUNT_TEST_ID = "ATL-DataList-TotalCount";
204
206
  function DataListTotalCount({ totalCount, loading, }) {
@@ -214,12 +216,12 @@ function DataListTotalCount({ totalCount, loading, }) {
214
216
  totalCount.toLocaleString(),
215
217
  " results)"));
216
218
  }
217
- return (React__default["default"].createElement("div", { className: styles$1.results, "data-testid": DATALIST_TOTALCOUNT_TEST_ID }, output));
219
+ return (React__default["default"].createElement("div", { className: styles$2.results, "data-testid": DATALIST_TOTALCOUNT_TEST_ID }, output));
218
220
  }
219
221
 
220
- var css_248z = ".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";
221
- var styles = {"loadingItem":"Rh--6fVpkm4-","mobileLoadingState":"zbS7UvpVoWI-"};
222
- styleInject_es.styleInject(css_248z);
222
+ var css_248z$1 = ".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";
223
+ var styles$1 = {"loadingItem":"Rh--6fVpkm4-","mobileLoadingState":"zbS7UvpVoWI-"};
224
+ styleInject_es.styleInject(css_248z$1);
223
225
 
224
226
  function DataListLayoutInternal({ layouts, renderLayout, mediaMatches, }) {
225
227
  const sizePropsOfLayouts = layouts === null || layouts === void 0 ? void 0 : layouts.map(layout => layout.props.size || "xs");
@@ -257,7 +259,7 @@ function DataListItems({ layouts, mediaMatches, data, }) {
257
259
  const elementData = generateListItemElements(data);
258
260
  return (React__default["default"].createElement(DataListLayoutInternal, { layouts: layouts, mediaMatches: mediaMatches, renderLayout: layout => {
259
261
  return (React__default["default"].createElement(React__default["default"].Fragment, null, elementData.map((child, i) => {
260
- return (React__default["default"].createElement("div", { className: styles$4.listItem, key: `${data[i].id}` }, layout.props.children(child)));
262
+ return (React__default["default"].createElement("div", { className: styles$5.listItem, key: `${data[i].id}` }, layout.props.children(child)));
261
263
  })));
262
264
  } }));
263
265
  }
@@ -273,7 +275,7 @@ function DataListHeader({ layouts, mediaMatches, headerData, headerVisibility, }
273
275
  if (!showHeader || !headerData)
274
276
  return React__default["default"].createElement(React__default["default"].Fragment, null);
275
277
  return (React__default["default"].createElement(DataListLayoutInternal, { layouts: layouts, renderLayout: layout => {
276
- return (React__default["default"].createElement("div", { className: styles$4.header }, layout.props.children(headerData)));
278
+ return (React__default["default"].createElement("div", { className: styles$5.headerTitles }, layout.props.children(headerData)));
277
279
  }, mediaMatches: mediaMatches }));
278
280
  }
279
281
 
@@ -291,13 +293,13 @@ function DataListLoadingState({ loading, headers, layouts, mediaMatches, }) {
291
293
  if (layout.props.size === "xs") {
292
294
  return React__default["default"].createElement(LoadingStateXSBreakpoint, null);
293
295
  }
294
- return (React__default["default"].createElement(React__default["default"].Fragment, null, loadingElements.map((child, i) => (React__default["default"].createElement("div", { className: styles.loadingItem, key: i, "data-testid": DATALIST_LOADINGSTATE_ROW_TEST_ID }, layout.props.children(child))))));
296
+ return (React__default["default"].createElement(React__default["default"].Fragment, null, loadingElements.map((child, i) => (React__default["default"].createElement("div", { className: styles$1.loadingItem, key: i, "data-testid": DATALIST_LOADINGSTATE_ROW_TEST_ID }, layout.props.children(child))))));
295
297
  } }));
296
298
  }
297
299
  function LoadingStateXSBreakpoint() {
298
300
  const loadingData = new Array(LOADING_STATE_LIMIT_ITEMS).fill(0);
299
301
  return (React__default["default"].createElement(React__default["default"].Fragment, null, loadingData.map((_, i) => {
300
- return (React__default["default"].createElement("div", { className: styles.mobileLoadingState, key: i },
302
+ return (React__default["default"].createElement("div", { className: styles$1.mobileLoadingState, key: i },
301
303
  React__default["default"].createElement(Glimmer.Glimmer.Text, null)));
302
304
  })));
303
305
  }
@@ -327,7 +329,53 @@ function breakpointToMediaQuery(breakpoint) {
327
329
  return `(min-width: ${BREAKPOINT_SIZES[breakpoint]}px)`;
328
330
  }
329
331
 
330
- function DataList({ data, headers, loading = false, filterApplied = false, children, title, totalCount, headerVisibility = { xs: true, sm: true, md: true, lg: true, xl: true }, }) {
332
+ const defaultValues = {
333
+ data: [],
334
+ headers: {},
335
+ children: [],
336
+ };
337
+ const DataListContext = React.createContext(defaultValues);
338
+ function useDataListContext() {
339
+ return React.useContext(DataListContext);
340
+ }
341
+
342
+ var css_248z = ".E-mG3prPSN8- {\n position: relative;\n}\n\n._0LGNoZxtqSE- {\n display: grid;\n padding: calc(16px / 2) 0;\n padding: var(--space-small) 0;\n overflow-x: auto;\n grid-auto-flow: column;\n grid-auto-columns: -webkit-max-content;\n grid-auto-columns: max-content;\n -ms-flex-align: center;\n align-items: center;\n}\n\n._0LGNoZxtqSE- > :nth-child(n + 3):not(:last-child) {\n margin-left: calc(16px / 2);\n margin-left: var(--space-small);\n}\n\n.LA3-gtgehrE- {\n visibility: hidden;\n}\n\n.fSPvawYWzZ8-::before,\n.ChfEJMPPVTk-::after {\n content: \"\";\n position: absolute;\n top: 0;\n width: calc(16px * 1.5);\n width: var(--space-large);\n height: 100%;\n background-image: linear-gradient(\n to right,\n rgba(255, 255, 255, 1) 0%,\n rgba(255, 255, 255, 0) 100%\n );\n background-image: linear-gradient(\n var(--data-list-filters-overflow-shadow-angle, to right),\n var(--color-surface) 0%,\n rgba(var(--color-white--rgb), 0) 100%\n );\n pointer-events: none;\n}\n\n.fSPvawYWzZ8-::before {\n left: 0;\n}\n\n.ChfEJMPPVTk-::after {\n --data-list-filters-overflow-shadow-angle: to left;\n right: 0;\n}\n";
343
+ var styles = {"filters":"E-mG3prPSN8-","filterActions":"_0LGNoZxtqSE-","overflowTrigger":"LA3-gtgehrE-","overflowLeft":"fSPvawYWzZ8-","overflowRight":"ChfEJMPPVTk-"};
344
+ styleInject_es.styleInject(css_248z);
345
+
346
+ const CONTAINER_TEST_ID = "ATL-DataListFilters-Container";
347
+
348
+ // This component is meant to capture the props of the DataList.Filters
349
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
350
+ function DataListFilters(_) {
351
+ return null;
352
+ }
353
+ /**
354
+ * Renders the DataList.Filters component
355
+ */
356
+ function InternalDataListFilters() {
357
+ const { children: parentChildren } = useDataListContext();
358
+ const component = getCompoundComponent(parentChildren, DataListFilters);
359
+ const [leftRef, isLeftVisible] = useInView.useInView();
360
+ const [rightRef, isRightVisible] = useInView.useInView();
361
+ if (!component)
362
+ return null;
363
+ const { children } = component.props;
364
+ return (React__default["default"].createElement("div", { "data-testid": CONTAINER_TEST_ID, className: classnames__default["default"](styles.filters, {
365
+ [styles.overflowLeft]: !isLeftVisible,
366
+ [styles.overflowRight]: !isRightVisible,
367
+ }) },
368
+ React__default["default"].createElement("div", { className: styles.filterActions },
369
+ React__default["default"].createElement("span", { ref: leftRef, className: styles.overflowTrigger }),
370
+ children,
371
+ React__default["default"].createElement("span", { ref: rightRef, className: styles.overflowTrigger }))));
372
+ }
373
+
374
+ function DataList(props) {
375
+ return (React__default["default"].createElement(DataListContext.Provider, { value: props },
376
+ React__default["default"].createElement(InternalDataList, Object.assign({}, props))));
377
+ }
378
+ function InternalDataList({ data, headers, loading = false, filterApplied = false, children, title, totalCount, headerVisibility = { xs: true, sm: true, md: true, lg: true, xl: true }, }) {
331
379
  const allLayouts = getCompoundComponents(children, DataListLayout);
332
380
  const headerData = generateHeaderElements(headers);
333
381
  const mediaMatches = useLayoutMediaQueries();
@@ -338,16 +386,19 @@ function DataList({ data, headers, loading = false, filterApplied = false, child
338
386
  isFilterApplied,
339
387
  setIsFilterApplied,
340
388
  });
341
- return (React__default["default"].createElement("div", { className: styles$4.wrapper },
342
- React__default["default"].createElement("div", { className: styles$4.titleContainer },
389
+ return (React__default["default"].createElement("div", { className: styles$5.wrapper },
390
+ React__default["default"].createElement("div", { className: styles$5.titleContainer },
343
391
  title && React__default["default"].createElement(Heading.Heading, { level: 3 }, title),
344
392
  React__default["default"].createElement(DataListTotalCount, { totalCount: totalCount, loading: loading })),
345
- headerData && (React__default["default"].createElement(DataListHeader, { layouts: allLayouts, headerData: headerData, headerVisibility: headerVisibility, mediaMatches: mediaMatches })),
393
+ React__default["default"].createElement("div", { className: styles$5.header },
394
+ React__default["default"].createElement(InternalDataListFilters, null),
395
+ headerData && (React__default["default"].createElement(DataListHeader, { layouts: allLayouts, headerData: headerData, headerVisibility: headerVisibility, mediaMatches: mediaMatches }))),
346
396
  React__default["default"].createElement(DataListLoadingState, { loading: loading, headers: headers, layouts: allLayouts, mediaMatches: mediaMatches }),
347
397
  !loading && (React__default["default"].createElement(DataListItems, { data: data, layouts: allLayouts, mediaMatches: mediaMatches })),
348
398
  showEmptyState && EmptyStateComponent));
349
399
  }
350
400
  DataList.Layout = DataListLayout;
351
401
  DataList.EmptyState = DataListEmptyState;
402
+ DataList.Filters = DataListFilters;
352
403
 
353
404
  exports.DataList = DataList;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jobber/components",
3
- "version": "4.29.0",
3
+ "version": "4.30.0",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -21,7 +21,7 @@
21
21
  "dependencies": {
22
22
  "@jobber/design": "^0.44.4",
23
23
  "@jobber/formatters": "*",
24
- "@jobber/hooks": "^2.1.5",
24
+ "@jobber/hooks": "^2.2.0",
25
25
  "@popperjs/core": "^2.0.6",
26
26
  "@std-proposal/temporal": "0.0.1",
27
27
  "@tanstack/react-table": "8.5.13",
@@ -84,5 +84,5 @@
84
84
  "> 1%",
85
85
  "IE 10"
86
86
  ],
87
- "gitHead": "55ffa8935cb077bc56d52eb7d8a5e060f78224b7"
87
+ "gitHead": "3e19cd88bd918e5e8a6c047bc5b3683d60c31451"
88
88
  }