@jobber/components 4.72.0 → 4.74.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.
Files changed (39) hide show
  1. package/dist/Autocomplete/index.js +2 -2
  2. package/dist/ConfirmationModal/index.js +3 -3
  3. package/dist/{ConfirmationModal-189e107a.js → ConfirmationModal-f1a049fb.js} +2 -2
  4. package/dist/Content/index.js +1 -1
  5. package/dist/Content-e3f7b6fc.js +24 -0
  6. package/dist/DataDump/index.js +1 -1
  7. package/dist/DataList/index.js +4 -4
  8. package/dist/DataTable/index.js +4 -4
  9. package/dist/FeatureSwitch/index.js +2 -2
  10. package/dist/FormField/FormFieldTypes.d.ts +1 -0
  11. package/dist/FormField/index.js +1 -1
  12. package/dist/{FormField-a332b2a6.js → FormField-b0e74d32.js} +2 -2
  13. package/dist/FormatFile/index.js +5 -5
  14. package/dist/{FormatFile-cc949eaf.js → FormatFile-9f8e4996.js} +2 -2
  15. package/dist/Gallery/index.js +5 -5
  16. package/dist/Glimmer/index.js +2 -2
  17. package/dist/{Glimmer-cfa92a88.js → Glimmer-f40d5ea5.js} +1 -1
  18. package/dist/InputAvatar/index.js +2 -2
  19. package/dist/InputDate/index.js +1 -1
  20. package/dist/InputEmail/index.js +1 -1
  21. package/dist/InputFile/index.js +2 -2
  22. package/dist/{InputFile-8767b7fd.js → InputFile-d080dec5.js} +1 -1
  23. package/dist/InputNumber/index.js +2 -2
  24. package/dist/{InputNumber-3f5d3f8d.js → InputNumber-79da1cdc.js} +1 -1
  25. package/dist/InputPassword/index.js +1 -1
  26. package/dist/InputPhoneNumber/index.js +1 -1
  27. package/dist/InputText/index.js +2 -2
  28. package/dist/{InputText-e2d4ac19.js → InputText-9e61365c.js} +1 -1
  29. package/dist/InputTime/hooks/useTimePredict.d.ts +8 -0
  30. package/dist/InputTime/index.js +160 -5
  31. package/dist/List/index.js +2 -2
  32. package/dist/Markdown/index.js +2 -2
  33. package/dist/{Markdown-b80706ed.js → Markdown-f7c55304.js} +1 -1
  34. package/dist/{Option-e5274cd8.js → Option-b715f6b4.js} +1 -1
  35. package/dist/Page/index.js +2 -2
  36. package/dist/RecurringSelect/index.js +4 -4
  37. package/dist/Select/index.js +2 -2
  38. package/package.json +3 -3
  39. package/dist/Content-2ca1ffe1.js +0 -24
@@ -13,11 +13,11 @@ var useOnKeyDown = require('@jobber/hooks/useOnKeyDown');
13
13
  var Text = require('../Text-259af966.js');
14
14
  var Icon = require('../Icon-405a216c.js');
15
15
  var Heading = require('../Heading-1e8e4bd3.js');
16
- var InputText = require('../InputText-e2d4ac19.js');
16
+ var InputText = require('../InputText-9e61365c.js');
17
17
  require('../Typography-c45bf216.js');
18
18
  require('@jobber/design');
19
19
  require('../getAtlantisConfig-0f3e8af2.js');
20
- require('../FormField-a332b2a6.js');
20
+ require('../FormField-b0e74d32.js');
21
21
  require('uuid');
22
22
  require('react-hook-form');
23
23
  require('@jobber/hooks/useShowClear');
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var ConfirmationModal = require('../ConfirmationModal-189e107a.js');
5
+ var ConfirmationModal = require('../ConfirmationModal-f1a049fb.js');
6
6
  require('react');
7
7
  require('@jobber/hooks/useOnKeyDown');
8
8
  require('../Modal-a0627c92.js');
@@ -20,8 +20,8 @@ require('react-router-dom');
20
20
  require('../Icon-405a216c.js');
21
21
  require('@jobber/design');
22
22
  require('../ButtonDismiss-350af163.js');
23
- require('../Content-2ca1ffe1.js');
24
- require('../Markdown-b80706ed.js');
23
+ require('../Content-e3f7b6fc.js');
24
+ require('../Markdown-f7c55304.js');
25
25
  require('react-markdown');
26
26
  require('../Text-259af966.js');
27
27
  require('../Emphasis-bda56d3b.js');
@@ -3,8 +3,8 @@
3
3
  var React = require('react');
4
4
  var useOnKeyDown = require('@jobber/hooks/useOnKeyDown');
5
5
  var Modal = require('./Modal-a0627c92.js');
6
- var Content = require('./Content-2ca1ffe1.js');
7
- var Markdown = require('./Markdown-b80706ed.js');
6
+ var Content = require('./Content-e3f7b6fc.js');
7
+ var Markdown = require('./Markdown-f7c55304.js');
8
8
 
9
9
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
10
10
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var Content = require('../Content-2ca1ffe1.js');
5
+ var Content = require('../Content-e3f7b6fc.js');
6
6
  require('react');
7
7
  require('classnames');
8
8
  require('../style-inject.es-9d2f5f4e.js');
@@ -0,0 +1,24 @@
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 classnames__default = /*#__PURE__*/_interopDefaultLegacy(classnames);
10
+
11
+ var css_248z$1 = "._340SlNuzSDQ- > :not(:last-child) {\n margin-bottom: calc(16px / 16);\n margin-bottom: var(--space-minuscule);\n}\n\n.H1BK-YSBQBQ- > :not(:last-child) {\n margin-bottom: calc(16px / 8);\n margin-bottom: var(--space-smallest);\n}\n\n.xUe31mY0kro- > :not(:last-child) {\n margin-bottom: calc(16px / 4);\n margin-bottom: var(--space-smaller);\n}\n\n.rDJFaGPzCbE- > :not(:last-child) {\n margin-bottom: calc(16px / 2);\n margin-bottom: var(--space-small);\n}\n\n.SRYe3DkjH1c- > :not(:last-child) {\n margin-bottom: calc(16px * 1);\n margin-bottom: var(--space-base);\n}\n\n._7TZ4MI3kr4Y- > :not(:last-child) {\n margin-bottom: calc(16px * 1.5);\n margin-bottom: var(--space-large);\n}\n\n.jvPl3aAN9PA- > :not(:last-child) {\n margin-bottom: calc(16px * 2);\n margin-bottom: var(--space-larger);\n}\n\n.fFTgb4ra1X0- > :not(:last-child) {\n margin-bottom: calc(16px * 3);\n margin-bottom: var(--space-largest);\n}\n\n.kKnfL37LO6A- > :not(:last-child) {\n margin-bottom: calc(16px * 4);\n margin-bottom: var(--space-extravagant);\n}\n";
12
+ var spacings = {"minuscule":"_340SlNuzSDQ-","smallest":"H1BK-YSBQBQ-","smaller":"xUe31mY0kro-","small":"rDJFaGPzCbE-","base":"SRYe3DkjH1c-","large":"_7TZ4MI3kr4Y-","larger":"jvPl3aAN9PA-","largest":"fFTgb4ra1X0-","extravagant":"kKnfL37LO6A-"};
13
+ styleInject_es.styleInject(css_248z$1);
14
+
15
+ var css_248z = "._4On2F-4nWuY- {\n padding: 0;\n padding: var(--public-content--padding, 0);\n}\n";
16
+ var styles = {"padded":"_4On2F-4nWuY-"};
17
+ styleInject_es.styleInject(css_248z);
18
+
19
+ function Content({ children, spacing = "base", type = "div", }) {
20
+ const className = classnames__default["default"](styles.padded, spacings[spacing]);
21
+ return React.createElement(type, { className }, children);
22
+ }
23
+
24
+ exports.Content = Content;
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var React = require('react');
6
6
  var Card = require('../Card-426a68a8.js');
7
- var Content = require('../Content-2ca1ffe1.js');
7
+ var Content = require('../Content-e3f7b6fc.js');
8
8
  var Emphasis = require('../Emphasis-bda56d3b.js');
9
9
  require('classnames');
10
10
  require('../style-inject.es-9d2f5f4e.js');
@@ -6,7 +6,7 @@ var tslib_es6 = require('../tslib.es6-5b8768b7.js');
6
6
  var React = require('react');
7
7
  var styleInject_es = require('../style-inject.es-9d2f5f4e.js');
8
8
  var Text = require('../Text-259af966.js');
9
- var Glimmer = require('../Glimmer-cfa92a88.js');
9
+ var Glimmer = require('../Glimmer-f40d5ea5.js');
10
10
  var noop = require('lodash/noop');
11
11
  var design = require('@jobber/design');
12
12
  var framerMotion = require('framer-motion');
@@ -29,10 +29,10 @@ var Combobox = require('../Combobox-95b3c413.js');
29
29
  var Chip = require('../Chip-c91fd6c8.js');
30
30
  var Icon = require('../Icon-405a216c.js');
31
31
  var debounce = require('lodash/debounce');
32
- var InputText = require('../InputText-e2d4ac19.js');
32
+ var InputText = require('../InputText-9e61365c.js');
33
33
  var Spinner = require('../Spinner-9d8fc7ff.js');
34
34
  var Typography = require('../Typography-c45bf216.js');
35
- require('../Content-2ca1ffe1.js');
35
+ require('../Content-e3f7b6fc.js');
36
36
  require('react-popper');
37
37
  require('../getAtlantisConfig-0f3e8af2.js');
38
38
  require('uuid');
@@ -40,7 +40,7 @@ require('react-hook-form');
40
40
  require('@jobber/hooks/useAssert');
41
41
  require('../Avatar-76a799fa.js');
42
42
  require('color');
43
- require('../FormField-a332b2a6.js');
43
+ require('../FormField-b0e74d32.js');
44
44
  require('@jobber/hooks/useShowClear');
45
45
  require('../InputValidation-a7a737f9.js');
46
46
 
@@ -7,13 +7,13 @@ var classnames = require('classnames');
7
7
  var React = require('react');
8
8
  var jobberHooks = require('@jobber/hooks/useResizeObserver');
9
9
  var styleInject_es = require('../style-inject.es-9d2f5f4e.js');
10
- var Glimmer = require('../Glimmer-cfa92a88.js');
10
+ var Glimmer = require('../Glimmer-f40d5ea5.js');
11
11
  var tslib_es6 = require('../tslib.es6-5b8768b7.js');
12
- var Option = require('../Option-e5274cd8.js');
12
+ var Option = require('../Option-b715f6b4.js');
13
13
  var Button = require('../Button-b73a5e01.js');
14
14
  var Text = require('../Text-259af966.js');
15
- require('../Content-2ca1ffe1.js');
16
- require('../FormField-a332b2a6.js');
15
+ require('../Content-e3f7b6fc.js');
16
+ require('../FormField-b0e74d32.js');
17
17
  require('uuid');
18
18
  require('react-hook-form');
19
19
  require('@jobber/hooks/useShowClear');
@@ -8,11 +8,11 @@ var classnames = require('classnames');
8
8
  var styleInject_es = require('../style-inject.es-9d2f5f4e.js');
9
9
  var Heading = require('../Heading-1e8e4bd3.js');
10
10
  var Text = require('../Text-259af966.js');
11
- var Content = require('../Content-2ca1ffe1.js');
11
+ var Content = require('../Content-e3f7b6fc.js');
12
12
  var Switch = require('../Switch-7d4aa7c3.js');
13
13
  var Button = require('../Button-b73a5e01.js');
14
14
  var Emphasis = require('../Emphasis-bda56d3b.js');
15
- var Markdown = require('../Markdown-b80706ed.js');
15
+ var Markdown = require('../Markdown-f7c55304.js');
16
16
  require('../Typography-c45bf216.js');
17
17
  require('../getAtlantisConfig-0f3e8af2.js');
18
18
  require('react-router-dom');
@@ -147,6 +147,7 @@ export interface FormFieldProps extends CommonFormFieldProps {
147
147
  * Blur callback.
148
148
  */
149
149
  onBlur?(): void;
150
+ onKeyUp?(event: React.KeyboardEvent<HTMLInputElement>): void;
150
151
  /**
151
152
  * Exclusively for textareas. Specifies the visible height of a textarea.
152
153
  */
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var FormField = require('../FormField-a332b2a6.js');
5
+ var FormField = require('../FormField-b0e74d32.js');
6
6
  require('../tslib.es6-5b8768b7.js');
7
7
  require('react');
8
8
  require('uuid');
@@ -146,7 +146,7 @@ function FormFieldPostFix({ variation }) {
146
146
  /*eslint max-statements: ["error", 13]*/
147
147
  function FormField(props) {
148
148
  var _a, _b;
149
- 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, clearable = "never", } = props;
149
+ 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;
150
150
  const { control, formState: { errors }, setValue, watch, } = reactHookForm.useFormContext() != undefined
151
151
  ? reactHookForm.useFormContext()
152
152
  : // If there isn't a Form Context being provided, get a form for this field.
@@ -188,7 +188,7 @@ function FormField(props) {
188
188
  return (React__default["default"].createElement("textarea", Object.assign({}, textFieldProps, { rows: rows, ref: inputRef })));
189
189
  default:
190
190
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
191
- React__default["default"].createElement("input", Object.assign({}, textFieldProps, { autoComplete: setAutocomplete(autocomplete), type: type, maxLength: maxLength, max: max, min: min, ref: inputRef })),
191
+ React__default["default"].createElement("input", Object.assign({}, textFieldProps, { autoComplete: setAutocomplete(autocomplete), type: type, maxLength: maxLength, max: max, min: min, ref: inputRef, onKeyUp: onKeyUp })),
192
192
  loading && React__default["default"].createElement(FormFieldPostFix, { variation: "spinner" }),
193
193
  children));
194
194
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var FormatFile = require('../FormatFile-cc949eaf.js');
5
+ var FormatFile = require('../FormatFile-9f8e4996.js');
6
6
  require('react');
7
7
  require('classnames');
8
8
  require('filesize');
@@ -12,7 +12,7 @@ require('react-router-dom');
12
12
  require('../Icon-405a216c.js');
13
13
  require('@jobber/design');
14
14
  require('../Typography-c45bf216.js');
15
- require('../ConfirmationModal-189e107a.js');
15
+ require('../ConfirmationModal-f1a049fb.js');
16
16
  require('@jobber/hooks/useOnKeyDown');
17
17
  require('../Modal-a0627c92.js');
18
18
  require('react-dom');
@@ -22,12 +22,12 @@ require('@jobber/hooks/useFocusTrap');
22
22
  require('../Heading-1e8e4bd3.js');
23
23
  require('../getAtlantisConfig-0f3e8af2.js');
24
24
  require('../ButtonDismiss-350af163.js');
25
- require('../Content-2ca1ffe1.js');
26
- require('../Markdown-b80706ed.js');
25
+ require('../Content-e3f7b6fc.js');
26
+ require('../Markdown-f7c55304.js');
27
27
  require('react-markdown');
28
28
  require('../Text-259af966.js');
29
29
  require('../Emphasis-bda56d3b.js');
30
- require('../Glimmer-cfa92a88.js');
30
+ require('../Glimmer-f40d5ea5.js');
31
31
  require('../tslib.es6-5b8768b7.js');
32
32
  require('../ProgressBar-b68edc8f.js');
33
33
 
@@ -5,8 +5,8 @@ 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-189e107a.js');
9
- var Glimmer = require('./Glimmer-cfa92a88.js');
8
+ var ConfirmationModal = require('./ConfirmationModal-f1a049fb.js');
9
+ var Glimmer = require('./Glimmer-f40d5ea5.js');
10
10
  var Icon = require('./Icon-405a216c.js');
11
11
  var Typography = require('./Typography-c45bf216.js');
12
12
  var Text = require('./Text-259af966.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-cc949eaf.js');
9
+ var FormatFile = require('../FormatFile-9f8e4996.js');
10
10
  var Button = require('../Button-b73a5e01.js');
11
11
  require('framer-motion');
12
12
  require('react-dom');
@@ -16,17 +16,17 @@ require('@jobber/hooks/useOnKeyDown');
16
16
  require('@jobber/hooks/useFocusTrap');
17
17
  require('../ButtonDismiss-350af163.js');
18
18
  require('filesize');
19
- require('../ConfirmationModal-189e107a.js');
19
+ require('../ConfirmationModal-f1a049fb.js');
20
20
  require('../Modal-a0627c92.js');
21
21
  require('../Heading-1e8e4bd3.js');
22
22
  require('../Typography-c45bf216.js');
23
23
  require('../getAtlantisConfig-0f3e8af2.js');
24
- require('../Content-2ca1ffe1.js');
25
- require('../Markdown-b80706ed.js');
24
+ require('../Content-e3f7b6fc.js');
25
+ require('../Markdown-f7c55304.js');
26
26
  require('react-markdown');
27
27
  require('../Text-259af966.js');
28
28
  require('../Emphasis-bda56d3b.js');
29
- require('../Glimmer-cfa92a88.js');
29
+ require('../Glimmer-f40d5ea5.js');
30
30
  require('../tslib.es6-5b8768b7.js');
31
31
  require('../Icon-405a216c.js');
32
32
  require('@jobber/design');
@@ -2,12 +2,12 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var Glimmer = require('../Glimmer-cfa92a88.js');
5
+ var Glimmer = require('../Glimmer-f40d5ea5.js');
6
6
  require('../tslib.es6-5b8768b7.js');
7
7
  require('react');
8
8
  require('classnames');
9
9
  require('../style-inject.es-9d2f5f4e.js');
10
- require('../Content-2ca1ffe1.js');
10
+ require('../Content-e3f7b6fc.js');
11
11
 
12
12
 
13
13
 
@@ -4,7 +4,7 @@ var tslib_es6 = require('./tslib.es6-5b8768b7.js');
4
4
  var React = require('react');
5
5
  var classnames = require('classnames');
6
6
  var styleInject_es = require('./style-inject.es-9d2f5f4e.js');
7
- var Content = require('./Content-2ca1ffe1.js');
7
+ var Content = require('./Content-e3f7b6fc.js');
8
8
 
9
9
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
10
10
 
@@ -6,7 +6,7 @@ var tslib_es6 = require('../tslib.es6-5b8768b7.js');
6
6
  var React = require('react');
7
7
  var styleInject_es = require('../style-inject.es-9d2f5f4e.js');
8
8
  var Avatar = require('../Avatar-76a799fa.js');
9
- var InputFile = require('../InputFile-8767b7fd.js');
9
+ var InputFile = require('../InputFile-d080dec5.js');
10
10
  var ProgressBar = require('../ProgressBar-b68edc8f.js');
11
11
  var Button = require('../Button-b73a5e01.js');
12
12
  require('classnames');
@@ -20,7 +20,7 @@ require('../InputValidation-a7a737f9.js');
20
20
  require('framer-motion');
21
21
  require('../Text-259af966.js');
22
22
  require('../Typography-c45bf216.js');
23
- require('../Content-2ca1ffe1.js');
23
+ require('../Content-e3f7b6fc.js');
24
24
  require('react-router-dom');
25
25
 
26
26
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -4,7 +4,7 @@ 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-a332b2a6.js');
7
+ var FormField = require('../FormField-b0e74d32.js');
8
8
  var DatePicker = require('../DatePicker-64c5ab1a.js');
9
9
  require('../tslib.es6-5b8768b7.js');
10
10
  require('uuid');
@@ -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-a332b2a6.js');
6
+ var FormField = require('../FormField-b0e74d32.js');
7
7
  require('../tslib.es6-5b8768b7.js');
8
8
  require('uuid');
9
9
  require('react-hook-form');
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var InputFile = require('../InputFile-8767b7fd.js');
5
+ var InputFile = require('../InputFile-d080dec5.js');
6
6
  require('../tslib.es6-5b8768b7.js');
7
7
  require('react');
8
8
  require('classnames');
@@ -18,7 +18,7 @@ require('../Icon-405a216c.js');
18
18
  require('@jobber/design');
19
19
  require('../Button-b73a5e01.js');
20
20
  require('react-router-dom');
21
- require('../Content-2ca1ffe1.js');
21
+ require('../Content-e3f7b6fc.js');
22
22
 
23
23
 
24
24
 
@@ -9,7 +9,7 @@ var uuid = require('uuid');
9
9
  var styleInject_es = require('./style-inject.es-9d2f5f4e.js');
10
10
  var InputValidation = require('./InputValidation-a7a737f9.js');
11
11
  var Button = require('./Button-b73a5e01.js');
12
- var Content = require('./Content-2ca1ffe1.js');
12
+ var Content = require('./Content-e3f7b6fc.js');
13
13
  var Typography = require('./Typography-c45bf216.js');
14
14
 
15
15
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -2,9 +2,9 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var InputNumber = require('../InputNumber-3f5d3f8d.js');
5
+ var InputNumber = require('../InputNumber-79da1cdc.js');
6
6
  require('react');
7
- require('../FormField-a332b2a6.js');
7
+ require('../FormField-b0e74d32.js');
8
8
  require('../tslib.es6-5b8768b7.js');
9
9
  require('uuid');
10
10
  require('react-hook-form');
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var React = require('react');
4
- var FormField = require('./FormField-a332b2a6.js');
4
+ var FormField = require('./FormField-b0e74d32.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-a332b2a6.js');
6
+ var FormField = require('../FormField-b0e74d32.js');
7
7
  require('../tslib.es6-5b8768b7.js');
8
8
  require('uuid');
9
9
  require('react-hook-form');
@@ -6,7 +6,7 @@ var tslib_es6 = require('../tslib.es6-5b8768b7.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-a332b2a6.js');
9
+ var FormField = require('../FormField-b0e74d32.js');
10
10
  require('uuid');
11
11
  require('classnames');
12
12
  require('@jobber/hooks/useShowClear');
@@ -2,9 +2,9 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var InputText = require('../InputText-e2d4ac19.js');
5
+ var InputText = require('../InputText-9e61365c.js');
6
6
  require('react');
7
- require('../FormField-a332b2a6.js');
7
+ require('../FormField-b0e74d32.js');
8
8
  require('../tslib.es6-5b8768b7.js');
9
9
  require('uuid');
10
10
  require('react-hook-form');
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var React = require('react');
4
- var FormField = require('./FormField-a332b2a6.js');
4
+ var FormField = require('./FormField-b0e74d32.js');
5
5
 
6
6
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
7
7
 
@@ -0,0 +1,8 @@
1
+ import { InputTimeProps } from "../InputTimeProps";
2
+ interface UseTimePredictProps extends Pick<InputTimeProps, "value"> {
3
+ readonly handleChange: (value: string) => void;
4
+ }
5
+ export declare function useTimePredict({ value, handleChange }: UseTimePredictProps): {
6
+ setTypedTime: import("react").Dispatch<import("react").SetStateAction<string>>;
7
+ };
8
+ export {};
@@ -6,7 +6,7 @@ var tslib_es6 = require('../tslib.es6-5b8768b7.js');
6
6
  var React = require('react');
7
7
  var debounce = require('lodash/debounce');
8
8
  var temporal = require('@std-proposal/temporal');
9
- var FormField = require('../FormField-a332b2a6.js');
9
+ var FormField = require('../FormField-b0e74d32.js');
10
10
  require('uuid');
11
11
  require('react-hook-form');
12
12
  require('../style-inject.es-9d2f5f4e.js');
@@ -786,18 +786,173 @@ function InputTimeSafari(_a) {
786
786
  }
787
787
  }
788
788
 
789
+ const DEBOUNCE_TIME = 300;
790
+ function useTimePredict({ value, handleChange }) {
791
+ const IS_12_HOUR_FORMAT = React.useRef(Intl.DateTimeFormat(navigator.language, {
792
+ hour: "numeric",
793
+ }).resolvedOptions().hour12);
794
+ const [typedTime, setTypedTime] = React.useState("");
795
+ const predictTime = React.useCallback(debounce__default["default"](() => {
796
+ if (value)
797
+ return;
798
+ handleChange(predictHours(typedTime, IS_12_HOUR_FORMAT.current));
799
+ }, DEBOUNCE_TIME), [typedTime, value, handleChange]);
800
+ /**
801
+ * Predict the hour when user types a number
802
+ */
803
+ React.useEffect(() => {
804
+ /**
805
+ * Don't try to predict if the user types 0 as the user would almost always
806
+ * type another number after 0.
807
+ */
808
+ if (typedTime && typedTime !== "0") {
809
+ predictTime();
810
+ if ((IS_12_HOUR_FORMAT && typedTime !== "1") || typedTime.length === 2) {
811
+ // Immediately predict the hour
812
+ predictTime.flush();
813
+ }
814
+ }
815
+ return predictTime.cancel;
816
+ }, [typedTime]);
817
+ /**
818
+ * Reset typed time when the value changed
819
+ */
820
+ React.useEffect(() => {
821
+ setTypedTime("");
822
+ }, [value]);
823
+ return {
824
+ setTypedTime,
825
+ };
826
+ }
827
+ function predictHours(time, is12HourFormat = false) {
828
+ const today = new Date();
829
+ const currentHour = today.getHours();
830
+ const parsedTime = parseInt(time, 10);
831
+ let predictedTime;
832
+ if (is12HourFormat) {
833
+ predictedTime = predict12Hours(parsedTime, currentHour);
834
+ }
835
+ else {
836
+ predictedTime = predict24Hours(time, parsedTime, currentHour);
837
+ }
838
+ return formatHour(predictedTime);
839
+ }
840
+ function predict12Hours(parsedTime, currentHour) {
841
+ /**
842
+ * We need to predict what the user wants when they type 1 since it could be
843
+ * 10, 11, 12, or 1.
844
+ *
845
+ * If the current hour is over 12PM, we can skip this and go to the next logic.
846
+ */
847
+ if (parsedTime === 1 && currentHour < 12) {
848
+ if (currentHour < 10) {
849
+ return 10;
850
+ }
851
+ else {
852
+ return currentHour + 1;
853
+ }
854
+ }
855
+ /**
856
+ * Typing 1-5 predicts that the user want that exact hour on the afternoon.
857
+ */
858
+ if (parsedTime <= 5) {
859
+ return parsedTime + 12;
860
+ }
861
+ /**
862
+ * Typing 13-15 predicts that the user want the 2nd number as the minute interval.
863
+ */
864
+ if (parsedTime > 12 && parsedTime <= 15) {
865
+ const timeArray = parsedTime.toString().split("").map(Number); // 13 -> [1, 3]
866
+ const convertToHoursAndMinutes = timeArray.map((time, i) => {
867
+ if (i === 0)
868
+ return time + 12; // 1 -> 13 as 1PM
869
+ if (i === 1)
870
+ return time * 10; // 3 -> 30 as 30 minutes
871
+ });
872
+ return Number(convertToHoursAndMinutes.join("")); // [13, 30] -> 1330
873
+ }
874
+ /**
875
+ * Anything after 5 will be predicted to be set as AM.
876
+ */
877
+ return parsedTime;
878
+ }
879
+ function predict24Hours(time, parsedTime, currentHour) {
880
+ /**
881
+ * Typing 1 could be predicted from 10 to 19.
882
+ * Typing 01 skips this logic and sets the time to 01:00.
883
+ */
884
+ if (parsedTime === 1 && time !== "01") {
885
+ if (currentHour < 10 || currentHour > 19) {
886
+ return 10;
887
+ }
888
+ else {
889
+ return currentHour + 1;
890
+ }
891
+ }
892
+ /**
893
+ * Typing 2 could be predicted from 20 to 24.
894
+ * Typing 02 skips this logic and sets the time to 02:00.
895
+ */
896
+ if (parsedTime === 2 && time !== "02") {
897
+ if (currentHour < 20) {
898
+ return 20;
899
+ }
900
+ else {
901
+ return currentHour + 1;
902
+ }
903
+ }
904
+ /**
905
+ * Typing 24 or 00 is set to midnight. This ensures the time doesn't get set
906
+ * to 24 as that would be invalid.
907
+ */
908
+ if (parsedTime === 24 || time === "00") {
909
+ return 0;
910
+ }
911
+ return parsedTime;
912
+ }
913
+ function formatHour(time) {
914
+ if (time > 99) {
915
+ const splitTime = time.toString().split("");
916
+ if (splitTime.length === 3)
917
+ splitTime.unshift("0"); // 130 -> 0130
918
+ splitTime.splice(2, 0, ":"); // 0130 -> 01:30
919
+ return splitTime.join("");
920
+ }
921
+ if (time < 10) {
922
+ return `0${time}:00`;
923
+ }
924
+ return `${time}:00`;
925
+ }
926
+
789
927
  function InputTime(_a) {
790
928
  var { defaultValue, value, onChange } = _a, params = tslib_es6.__rest(_a, ["defaultValue", "value", "onChange"]);
791
- const handleChange = (newValue) => {
792
- onChange && onChange(htmlTimeToCivilTime(newValue));
793
- };
929
+ const ref = React.useRef(null);
930
+ const { setTypedTime } = useTimePredict({ value, handleChange });
794
931
  if (supportsTime) {
795
932
  const fieldProps = Object.assign(Object.assign(Object.assign({ onChange: handleChange }, (defaultValue && { defaultValue: civilTimeToHTMLTime(defaultValue) })), (!defaultValue && { value: civilTimeToHTMLTime(value) })), params);
796
- return React__default["default"].createElement(FormField.FormField, Object.assign({ type: "time" }, fieldProps));
933
+ return (React__default["default"].createElement(FormField.FormField, Object.assign({ inputRef: ref, type: "time" }, fieldProps, { onBlur: handleBlur, onKeyUp: e => {
934
+ var _a;
935
+ (_a = fieldProps.onKeyUp) === null || _a === void 0 ? void 0 : _a.call(fieldProps, e);
936
+ !isNaN(parseInt(e.key, 10)) && setTypedTime(prev => prev + e.key);
937
+ } })));
797
938
  }
798
939
  else {
799
940
  return (React__default["default"].createElement(InputTimeSafari, Object.assign({ defaultValue: defaultValue, value: value, onChange: onChange }, params)));
800
941
  }
942
+ function handleChange(newValue) {
943
+ onChange === null || onChange === void 0 ? void 0 : onChange(htmlTimeToCivilTime(newValue));
944
+ }
945
+ function handleBlur() {
946
+ var _a;
947
+ (_a = params.onBlur) === null || _a === void 0 ? void 0 : _a.call(params);
948
+ // Time inputs doesn't clear the typed value when it's invalid. This should
949
+ // force it to reset the input value when the typed value is invalid.
950
+ if (ref.current) {
951
+ if (!ref.current.checkValidity()) {
952
+ ref.current.value = "";
953
+ }
954
+ }
955
+ }
801
956
  }
802
957
 
803
958
  exports.InputTime = InputTime;
@@ -11,12 +11,12 @@ var Icon = require('../Icon-405a216c.js');
11
11
  var Text = require('../Text-259af966.js');
12
12
  var Heading = require('../Heading-1e8e4bd3.js');
13
13
  var Typography = require('../Typography-c45bf216.js');
14
- var Markdown = require('../Markdown-b80706ed.js');
14
+ var Markdown = require('../Markdown-f7c55304.js');
15
15
  var Emphasis = require('../Emphasis-bda56d3b.js');
16
16
  require('@jobber/design');
17
17
  require('../getAtlantisConfig-0f3e8af2.js');
18
18
  require('react-markdown');
19
- require('../Content-2ca1ffe1.js');
19
+ require('../Content-e3f7b6fc.js');
20
20
 
21
21
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
22
22
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var Markdown = require('../Markdown-b80706ed.js');
5
+ var Markdown = require('../Markdown-f7c55304.js');
6
6
  require('react');
7
7
  require('react-markdown');
8
8
  require('../Text-259af966.js');
@@ -12,7 +12,7 @@ require('../style-inject.es-9d2f5f4e.js');
12
12
  require('../Emphasis-bda56d3b.js');
13
13
  require('../Heading-1e8e4bd3.js');
14
14
  require('../getAtlantisConfig-0f3e8af2.js');
15
- require('../Content-2ca1ffe1.js');
15
+ require('../Content-e3f7b6fc.js');
16
16
 
17
17
 
18
18
 
@@ -5,7 +5,7 @@ var ReactMarkdown = require('react-markdown');
5
5
  var Text = require('./Text-259af966.js');
6
6
  var Emphasis = require('./Emphasis-bda56d3b.js');
7
7
  var Heading = require('./Heading-1e8e4bd3.js');
8
- var Content = require('./Content-2ca1ffe1.js');
8
+ var Content = require('./Content-e3f7b6fc.js');
9
9
 
10
10
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
11
11
 
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var React = require('react');
4
- var FormField = require('./FormField-a332b2a6.js');
4
+ var FormField = require('./FormField-b0e74d32.js');
5
5
 
6
6
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
7
7
 
@@ -8,8 +8,8 @@ var jobberHooks = require('@jobber/hooks/useResizeObserver');
8
8
  var styleInject_es = require('../style-inject.es-9d2f5f4e.js');
9
9
  var Heading = require('../Heading-1e8e4bd3.js');
10
10
  var Text = require('../Text-259af966.js');
11
- var Content = require('../Content-2ca1ffe1.js');
12
- var Markdown = require('../Markdown-b80706ed.js');
11
+ var Content = require('../Content-e3f7b6fc.js');
12
+ var Markdown = require('../Markdown-f7c55304.js');
13
13
  var Button = require('../Button-b73a5e01.js');
14
14
  var Menu = require('../Menu-81b12936.js');
15
15
  var Emphasis = require('../Emphasis-bda56d3b.js');
@@ -9,11 +9,11 @@ var RadioGroup = require('../RadioGroup-ca7a5978.js');
9
9
  var Text = require('../Text-259af966.js');
10
10
  require('classnames');
11
11
  require('../Typography-c45bf216.js');
12
- var Option = require('../Option-e5274cd8.js');
13
- var InputNumber = require('../InputNumber-3f5d3f8d.js');
12
+ var Option = require('../Option-b715f6b4.js');
13
+ var InputNumber = require('../InputNumber-79da1cdc.js');
14
14
  var InputGroup = require('../InputGroup-8d4fd4eb.js');
15
- var Content = require('../Content-2ca1ffe1.js');
16
- require('../FormField-a332b2a6.js');
15
+ var Content = require('../Content-e3f7b6fc.js');
16
+ require('../FormField-b0e74d32.js');
17
17
  require('../tslib.es6-5b8768b7.js');
18
18
  require('react-hook-form');
19
19
  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-e5274cd8.js');
5
+ var Option = require('../Option-b715f6b4.js');
6
6
  require('react');
7
- require('../FormField-a332b2a6.js');
7
+ require('../FormField-b0e74d32.js');
8
8
  require('../tslib.es6-5b8768b7.js');
9
9
  require('uuid');
10
10
  require('react-hook-form');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jobber/components",
3
- "version": "4.72.0",
3
+ "version": "4.74.0",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -19,7 +19,7 @@
19
19
  "dist/*"
20
20
  ],
21
21
  "dependencies": {
22
- "@jobber/design": "^0.51.1",
22
+ "@jobber/design": "^0.52.0",
23
23
  "@jobber/formatters": "*",
24
24
  "@jobber/hooks": "^2.8.0",
25
25
  "@popperjs/core": "^2.0.6",
@@ -83,5 +83,5 @@
83
83
  "> 1%",
84
84
  "IE 10"
85
85
  ],
86
- "gitHead": "58a975b16f769405c26ebad6b5b8d8e699edbd04"
86
+ "gitHead": "112dd86d030e24299b20c1597be67f6466e1b065"
87
87
  }
@@ -1,24 +0,0 @@
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 classnames__default = /*#__PURE__*/_interopDefaultLegacy(classnames);
10
-
11
- var css_248z$1 = ".SRYe3DkjH1c- > :not(:last-child) {\n margin-bottom: calc(16px * 1);\n margin-bottom: var(--space-base);\n}\n\n.rDJFaGPzCbE- > :not(:last-child) {\n margin-bottom: calc(16px / 2);\n margin-bottom: var(--space-small);\n}\n\n._7TZ4MI3kr4Y- > :not(:last-child) {\n margin-bottom: calc(16px * 1.5);\n margin-bottom: var(--space-large);\n}\n";
12
- var spacings = {"base":"SRYe3DkjH1c-","small":"rDJFaGPzCbE-","large":"_7TZ4MI3kr4Y-"};
13
- styleInject_es.styleInject(css_248z$1);
14
-
15
- var css_248z = "._4On2F-4nWuY- {\n padding: 0;\n padding: var(--public-content--padding, 0);\n}\n";
16
- var styles = {"padded":"_4On2F-4nWuY-"};
17
- styleInject_es.styleInject(css_248z);
18
-
19
- function Content({ children, spacing = "base", type = "div", }) {
20
- const className = classnames__default["default"](styles.padded, spacings[spacing]);
21
- return React.createElement(type, { className }, children);
22
- }
23
-
24
- exports.Content = Content;