@jobber/components 4.87.10 → 4.87.11-JOB-91526-.5

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/AtlantisContext";
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true,
5
+ });
6
+
7
+ var AtlantisContext = require("./dist/AtlantisContext");
8
+
9
+ Object.keys(AtlantisContext).forEach(function(key) {
10
+ if (key === "default" || key === "__esModule") return;
11
+ Object.defineProperty(exports, key, {
12
+ enumerable: true,
13
+ get: function get() {
14
+ return AtlantisContext[key];
15
+ },
16
+ });
17
+ });
@@ -0,0 +1,34 @@
1
+ /// <reference types="react" />
2
+ export interface AtlantisContextProps {
3
+ /**
4
+ * The date format Atlantis components would use
5
+ */
6
+ readonly dateFormat: string;
7
+ /**
8
+ * The time format Atlantis components would use
9
+ */
10
+ readonly timeFormat: string;
11
+ /**
12
+ * Time zone used in converting the date and time formats
13
+ */
14
+ readonly timeZone: string;
15
+ /**
16
+ * Grabs the decimal separator and group separator based on locale
17
+ */
18
+ readonly floatSeparators: Record<"decimal" | "group", string>;
19
+ /**
20
+ * The currency symbol Atlantis components will use
21
+ */
22
+ readonly currencySymbol: string;
23
+ /**
24
+ * Change the locale of the components. This updates the strings that comes
25
+ * with the components, updates the date and time formats, and/or the
26
+ * native 3rd-party packages.
27
+ *
28
+ * @default "en"
29
+ */
30
+ readonly locale: string;
31
+ }
32
+ export declare const atlantisContextDefaultValues: AtlantisContextProps;
33
+ export declare const AtlantisContext: import("react").Context<AtlantisContextProps>;
34
+ export declare function useAtlantisContext(): AtlantisContextProps;
@@ -0,0 +1 @@
1
+ export * from "./AtlantisContext";
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var AtlantisContext = require('../AtlantisContext-64608897.js');
6
+ require('react');
7
+
8
+
9
+
10
+ exports.AtlantisContext = AtlantisContext.AtlantisContext;
11
+ exports.atlantisContextDefaultValues = AtlantisContext.atlantisContextDefaultValues;
12
+ exports.useAtlantisContext = AtlantisContext.useAtlantisContext;
@@ -0,0 +1,22 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+
5
+ /* eslint-disable @typescript-eslint/no-unused-vars */
6
+ const atlantisContextDefaultValues = {
7
+ dateFormat: "P",
8
+ // The system time is "p"
9
+ timeFormat: "p",
10
+ timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,
11
+ floatSeparators: { group: ",", decimal: "." },
12
+ currencySymbol: "$",
13
+ locale: "en",
14
+ };
15
+ const AtlantisContext = React.createContext(atlantisContextDefaultValues);
16
+ function useAtlantisContext() {
17
+ return React.useContext(AtlantisContext);
18
+ }
19
+
20
+ exports.AtlantisContext = AtlantisContext;
21
+ exports.atlantisContextDefaultValues = atlantisContextDefaultValues;
22
+ exports.useAtlantisContext = useAtlantisContext;
@@ -15,11 +15,11 @@ var useIsMounted = require('@jobber/hooks/useIsMounted');
15
15
  var Text = require('../Text-fbeaaca6.js');
16
16
  var Icon = require('../Icon-405a216c.js');
17
17
  var Heading = require('../Heading-bae3c69e.js');
18
- var InputText = require('../InputText-130b0440.js');
18
+ var InputText = require('../InputText-e657103e.js');
19
19
  require('../Typography-e2a23b7e.js');
20
20
  require('@jobber/design');
21
21
  require('../useAtlantisConfig-ed0bee66.js');
22
- require('../FormField-f6fadff2.js');
22
+ require('../FormField-0a06da6a.js');
23
23
  require('react-hook-form');
24
24
  require('@jobber/hooks/useShowClear');
25
25
  require('../Button-6b922fc1.js');
@@ -30,7 +30,7 @@ var AnimatedSwitcher = require('../AnimatedSwitcher-3d45ec5d.js');
30
30
  var Combobox = require('../Combobox-6d864202.js');
31
31
  var Chip = require('../Chip-76f18555.js');
32
32
  var debounce = require('lodash/debounce');
33
- var InputText = require('../InputText-130b0440.js');
33
+ var InputText = require('../InputText-e657103e.js');
34
34
  var Spinner = require('../Spinner-9d8fc7ff.js');
35
35
  var Typography = require('../Typography-e2a23b7e.js');
36
36
  require('../Content-e3f7b6fc.js');
@@ -43,7 +43,7 @@ require('../Flex-d490c4db.js');
43
43
  require('@jobber/hooks/useAssert');
44
44
  require('../Avatar-76a799fa.js');
45
45
  require('color');
46
- require('../FormField-f6fadff2.js');
46
+ require('../FormField-0a06da6a.js');
47
47
  require('@jobber/hooks/useShowClear');
48
48
  require('../InputValidation-a92bb519.js');
49
49
 
@@ -9,11 +9,11 @@ var jobberHooks = require('@jobber/hooks/useResizeObserver');
9
9
  var styleInject_es = require('../style-inject.es-9d2f5f4e.js');
10
10
  var Glimmer = require('../Glimmer-84dee1ed.js');
11
11
  var tslib_es6 = require('../tslib.es6-754e2961.js');
12
- var Option = require('../Option-a1dbc08a.js');
12
+ var Option = require('../Option-b76d664f.js');
13
13
  var Button = require('../Button-6b922fc1.js');
14
14
  var Text = require('../Text-fbeaaca6.js');
15
15
  require('../Content-e3f7b6fc.js');
16
- require('../FormField-f6fadff2.js');
16
+ require('../FormField-0a06da6a.js');
17
17
  require('react-hook-form');
18
18
  require('@jobber/hooks/useShowClear');
19
19
  require('../Icon-405a216c.js');
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var DatePicker = require('../DatePicker-dd9173c7.js');
5
+ var DatePicker = require('../DatePicker-305a5b82.js');
6
6
  require('react');
7
7
  require('classnames');
8
8
  require('react-datepicker');
@@ -14,6 +14,7 @@ require('react-router-dom');
14
14
  require('../Icon-405a216c.js');
15
15
  require('@jobber/design');
16
16
  require('lodash/omit');
17
+ require('../AtlantisContext-64608897.js');
17
18
 
18
19
 
19
20
 
@@ -8,6 +8,7 @@ var styleInject_es = require('./style-inject.es-9d2f5f4e.js');
8
8
  var Typography = require('./Typography-e2a23b7e.js');
9
9
  var Button = require('./Button-6b922fc1.js');
10
10
  var omit = require('lodash/omit');
11
+ var AtlantisContext = require('./AtlantisContext-64608897.js');
11
12
 
12
13
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
14
 
@@ -65,9 +66,11 @@ function useFocusOnSelectedDate() {
65
66
  return { ref, focusOnSelectedDate };
66
67
  }
67
68
 
69
+ /*eslint max-statements: ["error", 13]*/
68
70
  function DatePicker({ onChange, onMonthChange, activator, inline, selected, readonly = false, disabled = false, fullWidth = false, smartAutofocus = true, maxDate, minDate, highlightDates, }) {
69
71
  const { ref, focusOnSelectedDate } = useFocusOnSelectedDate();
70
72
  const [open, setOpen] = React.useState(false);
73
+ const { dateFormat } = AtlantisContext.useAtlantisContext();
71
74
  const wrapperClassName = classnames__default["default"](styles.datePickerWrapper, {
72
75
  // react-datepicker uses this class name to not close the date picker when
73
76
  // the activator is clicked
@@ -88,7 +91,14 @@ function DatePicker({ onChange, onMonthChange, activator, inline, selected, read
88
91
  React.useEffect(focusOnSelectedDate, [open]);
89
92
  }
90
93
  return (React__default["default"].createElement("div", { className: wrapperClassName, ref: ref },
91
- React__default["default"].createElement(ReactDatePicker__default["default"], { ref: pickerRef, calendarClassName: datePickerClassNames, showPopperArrow: false, selected: selected, inline: inline, disabled: disabled, readOnly: readonly, onChange: handleChange, maxDate: maxDate, preventOpenOnFocus: true, minDate: minDate, useWeekdaysShort: true, customInput: React__default["default"].createElement(DatePickerActivator, { activator: activator, fullWidth: fullWidth }), renderCustomHeader: props => React__default["default"].createElement(DatePickerCustomHeader, Object.assign({}, props)), onCalendarOpen: handleCalendarOpen, onCalendarClose: handleCalendarClose, dateFormat: ["P", "PP", "PPP", "MMM dd yyyy", "MMMM dd yyyy"], highlightDates: highlightDates, onMonthChange: onMonthChange })));
94
+ React__default["default"].createElement(ReactDatePicker__default["default"], { ref: pickerRef, calendarClassName: datePickerClassNames, showPopperArrow: false, selected: selected, inline: inline, disabled: disabled, readOnly: readonly, onChange: handleChange, maxDate: maxDate, preventOpenOnFocus: true, minDate: minDate, useWeekdaysShort: true, customInput: React__default["default"].createElement(DatePickerActivator, { activator: activator, fullWidth: fullWidth }), renderCustomHeader: props => React__default["default"].createElement(DatePickerCustomHeader, Object.assign({}, props)), onCalendarOpen: handleCalendarOpen, onCalendarClose: handleCalendarClose, dateFormat: [
95
+ dateFormat,
96
+ "P",
97
+ "PP",
98
+ "PPP",
99
+ "MMM dd yyyy",
100
+ "MMMM dd yyyy",
101
+ ], highlightDates: highlightDates, onMonthChange: onMonthChange })));
92
102
  /**
93
103
  * The onChange callback on ReactDatePicker returns a Date and an Event, but
94
104
  * the onChange in our interface only provides the Date. Simplifying the code
@@ -165,5 +165,6 @@ export interface FormFieldProps extends CommonFormFieldProps {
165
165
  * highlights the the field red if an error message shows up.
166
166
  */
167
167
  readonly validations?: RegisterOptions;
168
+ readonly emptyValuePlaceholder?: string;
168
169
  }
169
170
  export {};
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var FormField = require('../FormField-f6fadff2.js');
5
+ var FormField = require('../FormField-0a06da6a.js');
6
6
  require('../tslib.es6-754e2961.js');
7
7
  require('react');
8
8
  require('react-hook-form');
@@ -145,8 +145,8 @@ function FormFieldPostFix({ variation }) {
145
145
  /*eslint max-statements: ["error", 13]*/
146
146
  function FormField(props) {
147
147
  var _a, _b;
148
- const { actionsRef, autocomplete = true, children, defaultValue, description, disabled, inputRef, inline, keyboard, max, maxLength, min, name, readonly, rows, loading, type = "text", validations, value, onChange, onEnter, onFocus, onBlur, onValidation, onKeyUp, clearable = "never", } = props;
149
- const { control, formState: { errors }, setValue, watch, } = reactHookForm.useFormContext() != undefined
148
+ const { actionsRef, autocomplete = true, children, defaultValue, description, disabled, inputRef, inline, keyboard, max, maxLength, min, name, readonly, rows, loading, type = "text", validations, value, onChange, onEnter, onFocus, onBlur, onValidation, onKeyUp, clearable = "never", emptyValuePlaceholder, } = props;
149
+ const { control, formState: { errors, isDirty }, setValue, watch, } = reactHookForm.useFormContext() != undefined
150
150
  ? reactHookForm.useFormContext()
151
151
  : // If there isn't a Form Context being provided, get a form for this field.
152
152
  reactHookForm.useForm({ mode: "onTouched" });
@@ -159,7 +159,10 @@ function FormField(props) {
159
159
  */
160
160
  const [controlledName] = React.useState(name ? name : `generatedName--${identifier}`);
161
161
  React.useEffect(() => {
162
- if (value != undefined) {
162
+ if (emptyValuePlaceholder && !isDirty) {
163
+ setValue(controlledName, emptyValuePlaceholder);
164
+ }
165
+ else if (value != undefined) {
163
166
  setValue(controlledName, value);
164
167
  }
165
168
  }, [value, watch(controlledName)]);
@@ -15,6 +15,15 @@ interface InputDateProps extends Omit<CommonFormFieldProps, "clearable">, Pick<F
15
15
  * The minimum selectable date.
16
16
  */
17
17
  readonly minDate?: Date;
18
+ /**
19
+ * Whether to show the calendar icon
20
+ * @default true
21
+ */
22
+ readonly showIcon?: boolean;
23
+ /**
24
+ * Text to display instead of a date value
25
+ */
26
+ readonly emptyValuePlaceholder?: string;
18
27
  }
19
28
  export declare function InputDate(inputProps: InputDateProps): JSX.Element;
20
29
  export {};
@@ -4,8 +4,8 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var omit = require('lodash/omit');
6
6
  var React = require('react');
7
- var FormField = require('../FormField-f6fadff2.js');
8
- var DatePicker = require('../DatePicker-dd9173c7.js');
7
+ var FormField = require('../FormField-0a06da6a.js');
8
+ var DatePicker = require('../DatePicker-305a5b82.js');
9
9
  require('../tslib.es6-754e2961.js');
10
10
  require('react-hook-form');
11
11
  require('../style-inject.es-9d2f5f4e.js');
@@ -22,6 +22,7 @@ require('framer-motion');
22
22
  require('../Spinner-9d8fc7ff.js');
23
23
  require('react-datepicker');
24
24
  require('@jobber/hooks/useRefocusOnActivator');
25
+ require('../AtlantisContext-64608897.js');
25
26
 
26
27
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
27
28
 
@@ -34,23 +35,37 @@ function InputDate(inputProps) {
34
35
  var _a;
35
36
  const { onChange, onClick, value } = activatorProps;
36
37
  const newActivatorProps = omit__default["default"](activatorProps, ["activator"]);
37
- const suffix = Object.assign({ icon: "calendar" }, (onClick && {
38
- onClick: onClick,
39
- ariaLabel: "Show calendar",
40
- }));
38
+ const [showEmptyPlaceholder, setShowEmptyPlaceholder] = React.useState(!value);
39
+ const suffix = inputProps.showIcon !== false
40
+ ? {
41
+ icon: "calendar",
42
+ ariaLabel: "Show calendar",
43
+ onClick: onClick && onClick,
44
+ }
45
+ : {};
41
46
  // Set form field to formatted date string immediately, to avoid validations
42
47
  // triggering incorrectly when it blurs (to handle the datepicker UI click)
43
48
  value && ((_a = formFieldActionsRef.current) === null || _a === void 0 ? void 0 : _a.setValue(value));
44
49
  return (
45
50
  // We prevent the picker from opening on focus for keyboard navigation, so to maintain a good UX for mouse users we want to open the picker on click
46
51
  React__default["default"].createElement("div", { onClick: onClick },
47
- React__default["default"].createElement(FormField.FormField, Object.assign({}, newActivatorProps, inputProps, { value: value, onChange: (_, event) => onChange && onChange(event), onBlur: () => {
52
+ React__default["default"].createElement(FormField.FormField, Object.assign({}, newActivatorProps, inputProps, { value: showEmptyPlaceholder ? inputProps.emptyValuePlaceholder : value, placeholder: inputProps.placeholder, onChange: (_, event) => {
53
+ onChange && onChange(event);
54
+ setShowEmptyPlaceholder(false);
55
+ }, onBlur: () => {
48
56
  inputProps.onBlur && inputProps.onBlur();
49
57
  activatorProps.onBlur && activatorProps.onBlur();
58
+ setShowEmptyPlaceholder(!value);
50
59
  }, onFocus: () => {
51
60
  inputProps.onFocus && inputProps.onFocus();
52
61
  activatorProps.onFocus && activatorProps.onFocus();
53
- }, actionsRef: formFieldActionsRef, suffix: suffix }))));
62
+ }, onKeyUp: event => {
63
+ var _a;
64
+ if (inputProps.showIcon === false &&
65
+ event.key === "ArrowDown") {
66
+ (_a = activatorProps.onClick) === null || _a === void 0 ? void 0 : _a.call(activatorProps);
67
+ }
68
+ }, actionsRef: formFieldActionsRef, suffix: suffix, emptyValuePlaceholder: inputProps.emptyValuePlaceholder }))));
54
69
  } }));
55
70
  }
56
71
 
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var React = require('react');
6
- var FormField = require('../FormField-f6fadff2.js');
6
+ var FormField = require('../FormField-0a06da6a.js');
7
7
  require('../tslib.es6-754e2961.js');
8
8
  require('react-hook-form');
9
9
  require('../style-inject.es-9d2f5f4e.js');
@@ -2,9 +2,9 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var InputNumber = require('../InputNumber-e15cc1a3.js');
5
+ var InputNumber = require('../InputNumber-e768c654.js');
6
6
  require('react');
7
- require('../FormField-f6fadff2.js');
7
+ require('../FormField-0a06da6a.js');
8
8
  require('../tslib.es6-754e2961.js');
9
9
  require('react-hook-form');
10
10
  require('../style-inject.es-9d2f5f4e.js');
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var React = require('react');
4
- var FormField = require('./FormField-f6fadff2.js');
4
+ var FormField = require('./FormField-0a06da6a.js');
5
5
 
6
6
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
7
7
 
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var React = require('react');
6
- var FormField = require('../FormField-f6fadff2.js');
6
+ var FormField = require('../FormField-0a06da6a.js');
7
7
  require('../tslib.es6-754e2961.js');
8
8
  require('react-hook-form');
9
9
  require('../style-inject.es-9d2f5f4e.js');
@@ -6,7 +6,7 @@ var tslib_es6 = require('../tslib.es6-754e2961.js');
6
6
  var React = require('react');
7
7
  var reactHookForm = require('react-hook-form');
8
8
  var styleInject_es = require('../style-inject.es-9d2f5f4e.js');
9
- var FormField = require('../FormField-f6fadff2.js');
9
+ var FormField = require('../FormField-0a06da6a.js');
10
10
  require('classnames');
11
11
  require('@jobber/hooks/useShowClear');
12
12
  require('../Button-6b922fc1.js');
@@ -2,10 +2,10 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var InputText = require('../InputText-130b0440.js');
5
+ var InputText = require('../InputText-e657103e.js');
6
6
  require('react');
7
7
  require('@jobber/hooks/useSafeLayoutEffect');
8
- require('../FormField-f6fadff2.js');
8
+ require('../FormField-0a06da6a.js');
9
9
  require('../tslib.es6-754e2961.js');
10
10
  require('react-hook-form');
11
11
  require('../style-inject.es-9d2f5f4e.js');
@@ -2,7 +2,7 @@
2
2
 
3
3
  var React = require('react');
4
4
  var useSafeLayoutEffect = require('@jobber/hooks/useSafeLayoutEffect');
5
- var FormField = require('./FormField-f6fadff2.js');
5
+ var FormField = require('./FormField-0a06da6a.js');
6
6
 
7
7
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
8
 
@@ -6,7 +6,7 @@ var tslib_es6 = require('../tslib.es6-754e2961.js');
6
6
  var React = require('react');
7
7
  var temporal = require('@std-proposal/temporal');
8
8
  var debounce = require('lodash/debounce');
9
- var FormField = require('../FormField-f6fadff2.js');
9
+ var FormField = require('../FormField-0a06da6a.js');
10
10
  require('react-hook-form');
11
11
  require('../style-inject.es-9d2f5f4e.js');
12
12
  require('classnames');
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var React = require('react');
4
- var FormField = require('./FormField-f6fadff2.js');
4
+ var FormField = require('./FormField-0a06da6a.js');
5
5
 
6
6
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
7
7
 
@@ -8,11 +8,11 @@ var RadioGroup = require('../RadioGroup-678f4932.js');
8
8
  var Text = require('../Text-fbeaaca6.js');
9
9
  require('classnames');
10
10
  require('../Typography-e2a23b7e.js');
11
- var Option = require('../Option-a1dbc08a.js');
12
- var InputNumber = require('../InputNumber-e15cc1a3.js');
11
+ var Option = require('../Option-b76d664f.js');
12
+ var InputNumber = require('../InputNumber-e768c654.js');
13
13
  var InputGroup = require('../InputGroup-8d4fd4eb.js');
14
14
  var Content = require('../Content-e3f7b6fc.js');
15
- require('../FormField-f6fadff2.js');
15
+ require('../FormField-0a06da6a.js');
16
16
  require('../tslib.es6-754e2961.js');
17
17
  require('react-hook-form');
18
18
  require('@jobber/hooks/useShowClear');
@@ -2,9 +2,9 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var Option = require('../Option-a1dbc08a.js');
5
+ var Option = require('../Option-b76d664f.js');
6
6
  require('react');
7
- require('../FormField-f6fadff2.js');
7
+ require('../FormField-0a06da6a.js');
8
8
  require('../tslib.es6-754e2961.js');
9
9
  require('react-hook-form');
10
10
  require('../style-inject.es-9d2f5f4e.js');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jobber/components",
3
- "version": "4.87.10",
3
+ "version": "4.87.11-JOB-91526-.5+97982a09",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -20,7 +20,7 @@
20
20
  ],
21
21
  "dependencies": {
22
22
  "@jobber/design": "^0.56.0",
23
- "@jobber/formatters": "*",
23
+ "@jobber/formatters": "^0.2.2",
24
24
  "@jobber/hooks": "^2.9.4",
25
25
  "@popperjs/core": "^2.0.6",
26
26
  "@std-proposal/temporal": "0.0.1",
@@ -72,6 +72,8 @@
72
72
  "typescript": "^4.9.5"
73
73
  },
74
74
  "peerDependencies": {
75
+ "date-fns": "^2.0.0",
76
+ "date-fns-tz": "^2.0.0",
75
77
  "react": "^18",
76
78
  "react-dom": "^18"
77
79
  },
@@ -80,5 +82,5 @@
80
82
  "> 1%",
81
83
  "IE 10"
82
84
  ],
83
- "gitHead": "5ddeb02c0553241a32a1ef03b5231894b690fa7b"
85
+ "gitHead": "97982a092ed086b08f04e7ed018c9d90a7b37ff6"
84
86
  }