@jobber/components 4.85.4-CJS-to-ESM.1 → 4.85.4

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 (139) hide show
  1. package/.eslintrc.js +10 -0
  2. package/dist/AnimatedPresence/index.js +12 -0
  3. package/dist/AnimatedPresence-20a02aaa.js +104 -0
  4. package/dist/AnimatedSwitcher/index.js +13 -0
  5. package/dist/AnimatedSwitcher-3d45ec5d.js +96 -0
  6. package/dist/Autocomplete/index.js +209 -0
  7. package/dist/Avatar/index.js +15 -0
  8. package/dist/Avatar-76a799fa.js +78 -0
  9. package/dist/Banner/index.js +110 -0
  10. package/dist/Button/index.js +16 -0
  11. package/dist/Button-b73a5e01.js +57 -0
  12. package/dist/ButtonDismiss/index.js +17 -0
  13. package/dist/ButtonDismiss-350af163.js +14 -0
  14. package/dist/Card/colors.css.d.ts +89 -0
  15. package/dist/Card/index.js +24 -0
  16. package/dist/Card-e3144022.js +93 -0
  17. package/dist/Checkbox/index.js +18 -0
  18. package/dist/Checkbox-787e2e47.js +63 -0
  19. package/dist/Chip/index.js +41 -0
  20. package/dist/Chip-3d1bfddc.js +89 -0
  21. package/dist/Chips/index.js +524 -0
  22. package/dist/Combobox/index.js +40 -0
  23. package/dist/Combobox-a24c8241.js +479 -0
  24. package/dist/ConfirmationModal/index.js +31 -0
  25. package/dist/ConfirmationModal-52e16873.js +100 -0
  26. package/dist/Content/Spacing.css.d.ts +13 -0
  27. package/dist/Content/index.js +12 -0
  28. package/dist/Content-e3f7b6fc.js +24 -0
  29. package/dist/Countdown/index.js +72 -0
  30. package/dist/DataDump/index.js +37 -0
  31. package/dist/DataList/index.js +1335 -0
  32. package/dist/DataTable/index.js +301 -0
  33. package/dist/DatePicker/index.js +20 -0
  34. package/dist/DatePicker-64c5ab1a.js +134 -0
  35. package/dist/DescriptionList/index.js +24 -0
  36. package/dist/Disclosure/index.js +46 -0
  37. package/dist/Divider/index.js +29 -0
  38. package/dist/Drawer/index.js +49 -0
  39. package/dist/Emphasis/index.js +13 -0
  40. package/dist/Emphasis-bda56d3b.js +19 -0
  41. package/dist/FeatureSwitch/index.js +70 -0
  42. package/dist/Flex/index.js +12 -0
  43. package/dist/Flex-d490c4db.js +38 -0
  44. package/dist/Form/index.js +56 -0
  45. package/dist/FormField/index.js +24 -0
  46. package/dist/FormField-6ff183f8.js +253 -0
  47. package/dist/FormatDate/index.js +11 -0
  48. package/dist/FormatDate-70ea5b43.js +34 -0
  49. package/dist/FormatEmail/index.js +23 -0
  50. package/dist/FormatFile/index.js +36 -0
  51. package/dist/FormatFile-f036902d.js +162 -0
  52. package/dist/FormatRelativeDateTime/index.js +72 -0
  53. package/dist/FormatTime/index.js +36 -0
  54. package/dist/Gallery/Gallery.css.d.ts +9 -0
  55. package/dist/Gallery/index.js +99 -0
  56. package/dist/Glimmer/index.js +15 -0
  57. package/dist/Glimmer/style/Shape.css.d.ts +9 -0
  58. package/dist/Glimmer/style/Sizes.css.d.ts +10 -0
  59. package/dist/Glimmer/style/Timing.css.d.ts +6 -0
  60. package/dist/Glimmer-84dee1ed.js +77 -0
  61. package/dist/Grid/GridAlign.css.d.ts +8 -0
  62. package/dist/Grid/index.js +76 -0
  63. package/dist/Heading/index.js +14 -0
  64. package/dist/Heading-1e8e4bd3.js +55 -0
  65. package/dist/Icon/index.js +11 -0
  66. package/dist/Icon-405a216c.js +40 -0
  67. package/dist/InlineLabel/index.js +13 -0
  68. package/dist/InlineLabel-a6557829.js +28 -0
  69. package/dist/InputAvatar/index.js +70 -0
  70. package/dist/InputDate/index.js +57 -0
  71. package/dist/InputEmail/index.js +43 -0
  72. package/dist/InputFile/index.js +25 -0
  73. package/dist/InputFile-bb945071.js +190 -0
  74. package/dist/InputGroup/index.js +12 -0
  75. package/dist/InputGroup-8d4fd4eb.js +33 -0
  76. package/dist/InputNumber/index.js +25 -0
  77. package/dist/InputNumber-d451b52e.js +62 -0
  78. package/dist/InputPassword/index.js +41 -0
  79. package/dist/InputPhoneNumber/index.js +116 -0
  80. package/dist/InputText/index.js +26 -0
  81. package/dist/InputText-55b6cb65.js +102 -0
  82. package/dist/InputTime/index.js +209 -0
  83. package/dist/InputValidation/index.js +17 -0
  84. package/dist/InputValidation-05e839fa.js +29 -0
  85. package/dist/LightBox/index.js +24 -0
  86. package/dist/LightBox-a89d8863.js +117 -0
  87. package/dist/Link/index.js +15 -0
  88. package/dist/List/index.js +93 -0
  89. package/dist/Markdown/index.js +19 -0
  90. package/dist/Markdown-f7c55304.js +62 -0
  91. package/dist/Menu/index.js +21 -0
  92. package/dist/Menu-083fc4c4.js +139 -0
  93. package/dist/Modal/Sizes.css.d.ts +6 -0
  94. package/dist/Modal/index.js +25 -0
  95. package/dist/Modal-c336cac6.js +71 -0
  96. package/dist/MultiSelect/index.js +182 -0
  97. package/dist/Option-3c4d377e.js +19 -0
  98. package/dist/Page/index.js +78 -0
  99. package/dist/Popover/index.js +61 -0
  100. package/dist/ProgressBar/Sizes.css.d.ts +7 -0
  101. package/dist/ProgressBar/index.js +12 -0
  102. package/dist/ProgressBar-b68edc8f.js +43 -0
  103. package/dist/RadioGroup/index.js +15 -0
  104. package/dist/RadioGroup-17b67ade.js +46 -0
  105. package/dist/RecurringSelect/index.js +227 -0
  106. package/dist/Select/index.js +26 -0
  107. package/dist/Spinner/index.js +12 -0
  108. package/dist/Spinner-9d8fc7ff.js +24 -0
  109. package/dist/StatusIndicator/index.js +11 -0
  110. package/dist/StatusIndicator-b179d06e.js +18 -0
  111. package/dist/StatusLabel/index.js +29 -0
  112. package/dist/Switch/index.js +13 -0
  113. package/dist/Switch-7d4aa7c3.js +56 -0
  114. package/dist/Table/index.js +66 -0
  115. package/dist/Tabs/index.js +80 -0
  116. package/dist/Text/index.js +13 -0
  117. package/dist/Text-259af966.js +31 -0
  118. package/dist/Toast/index.js +111 -0
  119. package/dist/Tooltip/index.js +16 -0
  120. package/dist/Tooltip-ef3d6ef4.js +112 -0
  121. package/dist/Typography/css/Emphasis.css.d.ts +6 -0
  122. package/dist/Typography/css/FontFamilies.css.d.ts +6 -0
  123. package/dist/Typography/css/FontSizes.css.d.ts +12 -0
  124. package/dist/Typography/css/FontWeights.css.d.ts +10 -0
  125. package/dist/Typography/css/TextAlignment.css.d.ts +7 -0
  126. package/dist/Typography/css/TextCases.css.d.ts +7 -0
  127. package/dist/Typography/css/TextColors.css.d.ts +22 -0
  128. package/dist/Typography/css/Truncate.css.d.ts +5 -0
  129. package/dist/Typography/css/Typography.css.d.ts +5 -0
  130. package/dist/Typography/index.js +12 -0
  131. package/dist/Typography-c45bf216.js +62 -0
  132. package/dist/getAtlantisConfig-0f3e8af2.js +13 -0
  133. package/dist/style-inject.es-9d2f5f4e.js +30 -0
  134. package/dist/tslib.es6-754e2961.js +46 -0
  135. package/package.json +4 -371
  136. package/rollup.config.js +77 -21
  137. package/dist/index.cjs +0 -6721
  138. package/dist/index.d.ts +0 -73
  139. package/dist/index.esm.js +0 -6603
@@ -0,0 +1,76 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var React = require('react');
6
+ var classnames = require('classnames');
7
+ var styleInject_es = require('../style-inject.es-9d2f5f4e.js');
8
+ var useAssert = require('@jobber/hooks/useAssert');
9
+
10
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
11
+
12
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
13
+ var classnames__default = /*#__PURE__*/_interopDefaultLegacy(classnames);
14
+
15
+ var css_248z$2 = ".YJHtDDKq6WI- {\n grid-column: initial;\n grid-column-end: span var(--gridCell--size-xs);\n}@media (min-width: 490px) {.YJHtDDKq6WI- {\n grid-column-end: span var(--gridCell--size-sm);\n}\n }@media (--small-screens-and-up) {.YJHtDDKq6WI- {\n grid-column-end: span var(--gridCell--size-sm);\n}\n }@media (min-width: 768px) {.YJHtDDKq6WI- {\n grid-column-end: span var(--gridCell--size-md);\n}\n }@media (--medium-screens-and-up) {.YJHtDDKq6WI- {\n grid-column-end: span var(--gridCell--size-md);\n}\n }@media (min-width: 1080px) {.YJHtDDKq6WI- {\n grid-column-end: span var(--gridCell--size-lg);\n}\n }@media (--large-screens-and-up) {.YJHtDDKq6WI- {\n grid-column-end: span var(--gridCell--size-lg);\n}\n }@media (min-width: 1440px) {.YJHtDDKq6WI- {\n grid-column-end: span var(--gridCell--size-xl);\n}\n }@media (--extra-large-screens-and-up) {.YJHtDDKq6WI- {\n grid-column-end: span var(--gridCell--size-xl);\n}\n }\n";
16
+ var styles$1 = {"gridCell":"YJHtDDKq6WI-"};
17
+ styleInject_es.styleInject(css_248z$2);
18
+
19
+ /**
20
+ * Breakpoints that we support
21
+ */
22
+ const breakpoints = ["xs", "sm", "md", "lg", "xl"];
23
+ const MAX_COLUMNS = 12;
24
+ const GRID_CELL_TEST_ID = "ATL-Grid-GridCell";
25
+ function InternalGridCell({ size, children, }) {
26
+ /**
27
+ * Build CSS variables for column sizes for all possible breakpoints to size
28
+ * the column
29
+ */
30
+ const cssSizeVariables = breakpoints.reduce(getSizeCSSVariables(size), {});
31
+ return (React__default["default"].createElement("div", { "data-testid": GRID_CELL_TEST_ID, className: styles$1.gridCell, style: cssSizeVariables }, children));
32
+ }
33
+ function getSizeCSSVariables(size) {
34
+ return (breakpointsObj, currentSize) => {
35
+ let columnSize = size[currentSize];
36
+ // If a column size isn't provided in the size prop, use the previous
37
+ // breakpoint's value
38
+ if (!columnSize) {
39
+ const existingValues = Object.values(breakpointsObj);
40
+ const lastKnownValue = existingValues[existingValues.length - 1];
41
+ columnSize = lastKnownValue || MAX_COLUMNS;
42
+ }
43
+ breakpointsObj[`--gridCell--size-${currentSize}`] = columnSize;
44
+ return breakpointsObj;
45
+ };
46
+ }
47
+
48
+ var css_248z$1 = ".NqFGJV-UF3Q- {\n display: grid;\n grid-template-columns: repeat(12, minmax(0, 1fr));\n}\n\n.IZLiiSquUTM- {\n gap: calc(16px * 1);\n gap: var(--space-base);\n}\n\n@media (min-width: 768px) {\n .IZLiiSquUTM- {\n gap: calc(16px * 1.5);\n gap: var(--space-large);\n }\n}\n\n@media (--medium-screens-and-up) {\n .IZLiiSquUTM- {\n gap: calc(16px * 1.5);\n gap: var(--space-large);\n }\n}\n";
49
+ var styles = {"grid":"NqFGJV-UF3Q-","gap":"IZLiiSquUTM-"};
50
+ styleInject_es.styleInject(css_248z$1);
51
+
52
+ var css_248z = "._8XlrWg3FV-Q- {\n -ms-flex-align: center;\n align-items: center;\n}\n\n.uKzqJPlYxJs- {\n -ms-flex-align: start;\n align-items: start;\n}\n\n.CSBjeFlj2xQ- {\n -ms-flex-align: end;\n align-items: end;\n}\n\n.BYyFdzONXyk- {\n -ms-flex-align: stretch;\n align-items: stretch;\n}\n";
53
+ var alignments = {"center":"_8XlrWg3FV-Q-","start":"uKzqJPlYxJs-","end":"CSBjeFlj2xQ-","stretch":"BYyFdzONXyk-"};
54
+ styleInject_es.styleInject(css_248z);
55
+
56
+ // Only need the component to pass in the data as a react children
57
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
58
+ function GridCell(props) {
59
+ // Throw error when <Grid.Cell /> gets used outside of the <Grid />
60
+ useAssert.useAssert(true, "`<Grid.Cell>` can only be used inside of a `<Grid>` component!");
61
+ return React__default["default"].createElement(React__default["default"].Fragment, null);
62
+ }
63
+
64
+ const GRID_TEST_ID = "ATL-Grid";
65
+ function Grid({ alignItems = "start", gap = true, children, }) {
66
+ const classnames = classnames__default["default"](styles.grid, alignments[alignItems], {
67
+ [styles.gap]: gap,
68
+ });
69
+ return (React__default["default"].createElement("div", { "data-testid": GRID_TEST_ID, className: classnames }, React__default["default"].Children.map(children, ({ props }) => {
70
+ return React__default["default"].createElement(InternalGridCell, Object.assign({}, props));
71
+ })));
72
+ }
73
+ Grid.Cell = GridCell;
74
+
75
+ exports.GRID_TEST_ID = GRID_TEST_ID;
76
+ exports.Grid = Grid;
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var Heading = require('../Heading-1e8e4bd3.js');
6
+ require('react');
7
+ require('../Typography-c45bf216.js');
8
+ require('classnames');
9
+ require('../style-inject.es-9d2f5f4e.js');
10
+ require('../getAtlantisConfig-0f3e8af2.js');
11
+
12
+
13
+
14
+ exports.Heading = Heading.Heading;
@@ -0,0 +1,55 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var Typography = require('./Typography-c45bf216.js');
5
+ var getAtlantisConfig = require('./getAtlantisConfig-0f3e8af2.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
+
11
+ function Heading({ level = 5, children }) {
12
+ const { JOBBER_RETHEME: inRetheme } = getAtlantisConfig.getAtlantisConfig();
13
+ const levelMap = {
14
+ 1: {
15
+ element: "h1",
16
+ size: "jumbo",
17
+ fontWeight: inRetheme ? "extraBold" : "black",
18
+ textColor: "heading",
19
+ },
20
+ 2: {
21
+ element: "h2",
22
+ size: "largest",
23
+ fontWeight: inRetheme ? "bold" : "black",
24
+ textColor: "heading",
25
+ },
26
+ 3: {
27
+ element: "h3",
28
+ size: "larger",
29
+ fontWeight: inRetheme ? "bold" : "extraBold",
30
+ textColor: "heading",
31
+ },
32
+ 4: {
33
+ element: "h4",
34
+ size: "large",
35
+ fontWeight: "bold",
36
+ textColor: "heading",
37
+ },
38
+ 5: {
39
+ element: "h5",
40
+ size: "base",
41
+ fontWeight: "bold",
42
+ textColor: "heading",
43
+ },
44
+ 6: {
45
+ element: "h6",
46
+ size: "small",
47
+ textCase: "uppercase",
48
+ fontWeight: inRetheme ? "semiBold" : "bold",
49
+ textColor: "heading",
50
+ },
51
+ };
52
+ return React__default["default"].createElement(Typography.Typography, Object.assign({}, levelMap[level]), children);
53
+ }
54
+
55
+ exports.Heading = Heading;
@@ -0,0 +1,11 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var Icon = require('../Icon-405a216c.js');
6
+ require('react');
7
+ require('@jobber/design');
8
+
9
+
10
+
11
+ exports.Icon = Icon.Icon;
@@ -0,0 +1,40 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var design = require('@jobber/design');
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
+ function Icon({ name, color, customColor, size = "base" }) {
11
+ let icon;
12
+ const { svgClassNames, pathClassNames, paths, viewBox } = design.getIcon({
13
+ name,
14
+ color: getIconColor(name, color),
15
+ size,
16
+ });
17
+ if (name === "truck") {
18
+ icon = getTruck(pathClassNames, customColor);
19
+ }
20
+ else {
21
+ icon = paths.map((path) => (React__default["default"].createElement("path", { key: path, className: pathClassNames, d: path, fill: customColor })));
22
+ }
23
+ return (React__default["default"].createElement("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: viewBox, className: svgClassNames, "data-testid": name }, icon));
24
+ }
25
+ function getIconColor(name, color) {
26
+ if (name === "truck") {
27
+ return color || "green";
28
+ }
29
+ return color;
30
+ }
31
+ function getTruck(pathClassNames, customColor) {
32
+ return (React__default["default"].createElement("g", { transform: "translate(233.000000, 0.000000)", className: pathClassNames },
33
+ React__default["default"].createElement("path", { d: "M31.030303,124.121212 C31.030303,106.983796 44.9231903,93.0909091 62.0606061,93.0909091 L93.0909091,93.0909091 L93.0909091,279.272727 L62.0606061,279.272727 C44.9231903,279.272727 31.030303,265.37984 31.030303,248.242424 L31.030303,124.121212 Z M31.030303,744.727273 C31.030303,727.589236 44.9231903,713.69697 62.0606061,713.69697 L93.0909091,713.69697 L93.0909091,899.878788 L62.0606061,899.878788 C44.9231903,899.878788 31.030303,885.986521 31.030303,868.848485 L31.030303,744.727273 Z M62.0606061,961.939394 L496.484848,961.939394 L496.484848,992.969697 C496.484848,1010.10773 482.592582,1024 465.454545,1024 L93.0909091,1024 C75.9534933,1024 62.0606061,1010.10773 62.0606061,992.969697 L62.0606061,961.939394 Z M494.858861,713.715588 L463.834764,714.258618 L467.083636,900.412509 L498.107733,899.869479 C515.242667,899.571588 528.889794,885.437285 528.591903,868.302352 L526.425988,744.199758 C526.128097,727.064824 511.993794,713.417697 494.858861,713.715588 Z M496.484848,93.0909091 L465.454545,93.0909091 L465.454545,279.272727 L496.484848,279.272727 C513.622885,279.272727 527.515152,265.37984 527.515152,248.242424 L527.515152,124.121212 C527.515152,106.983796 513.622885,93.0909091 496.484848,93.0909091 Z", id: "Shape", fill: "#2B2B2B" }),
34
+ React__default["default"].createElement("path", { d: "M124.121212,0 C89.8460703,0 62.0606061,27.7854642 62.0606061,62.0606061 L62.0606061,310.30303 L31.030303,310.30303 C13.8927321,310.30303 0,324.195297 0,341.333333 L62.0606061,341.333333 L62.0606061,992.969697 L496.484848,992.969697 L496.484848,341.333333 L558.545455,341.333333 C558.545455,324.195297 544.653188,310.30303 527.515152,310.30303 L496.484848,310.30303 L496.484848,62.0606061 C496.484848,27.7854642 468.700315,0 434.424242,0 L124.121212,0 Z", id: "Path", fill: customColor }),
35
+ React__default["default"].createElement("path", { d: "M465.454545,589.575758 L93.0909091,589.575758 L93.0909091,713.69697 L124.121212,713.69697 C141.258628,713.69697 155.151515,727.589236 155.151515,744.727273 L155.151515,868.848485 C155.151515,885.986521 141.258628,899.878788 124.121212,899.878788 L93.0909091,899.878788 L93.0909091,961.939394 L465.454545,961.939394 L465.454545,899.878788 L434.424242,899.878788 C417.286206,899.878788 403.393939,885.986521 403.393939,868.848485 L403.393939,744.727273 C403.393939,727.589236 417.286206,713.69697 434.424242,713.69697 L465.454545,713.69697 L465.454545,589.575758 Z", id: "Path", fillOpacity: "0.35", fill: "#000000" }),
36
+ React__default["default"].createElement("path", { d: "M93.0909091,62.0606061 C93.0909091,44.9231903 106.983796,31.030303 124.121212,31.030303 L434.424242,31.030303 C451.562279,31.030303 465.454545,44.9231903 465.454545,62.0606061 L465.454545,589.575758 L93.0909091,589.575758 L93.0909091,62.0606061 Z M93.0909091,713.69697 L124.121212,713.69697 C141.258628,713.69697 155.151515,727.589236 155.151515,744.727273 L155.151515,868.848485 C155.151515,885.986521 141.258628,899.878788 124.121212,899.878788 L93.0909091,899.878788 L93.0909091,713.69697 Z M434.424242,713.69697 C417.286206,713.69697 403.393939,727.589236 403.393939,744.727273 L403.393939,868.848485 C403.393939,885.986521 417.286206,899.878788 434.424242,899.878788 L465.454545,899.878788 L465.454545,713.69697 L434.424242,713.69697 Z", id: "Shape", fill: "#FFFFFF", opacity: "0.5" }),
37
+ React__default["default"].createElement("path", { d: "M93.0909091,279.272727 C113.777881,268.929396 192.387879,248.242424 279.272727,248.242424 C366.157576,248.242424 444.766642,268.929396 465.454545,279.272727 L403.393939,372.363636 C393.051539,362.021236 341.333333,341.333333 279.272727,341.333333 C217.212121,341.333333 165.494846,362.021236 155.151515,372.363636 L93.0909091,279.272727 Z M155.151515,512 L155.151515,403.393939 L93.0909091,310.30303 L93.0909091,512 L155.151515,512 Z M403.393939,512 L403.393939,403.393939 L465.454545,310.30303 L465.454545,512 L403.393939,512 Z", id: "Shape", fill: "#2A2A2A" })));
38
+ }
39
+
40
+ exports.Icon = Icon;
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var InlineLabel = require('../InlineLabel-a6557829.js');
6
+ require('react');
7
+ require('classnames');
8
+ require('../style-inject.es-9d2f5f4e.js');
9
+ require('../Typography-c45bf216.js');
10
+
11
+
12
+
13
+ exports.InlineLabel = InlineLabel.InlineLabel;
@@ -0,0 +1,28 @@
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
+ var Typography = require('./Typography-c45bf216.js');
7
+
8
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
9
+
10
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
11
+ var classnames__default = /*#__PURE__*/_interopDefaultLegacy(classnames);
12
+
13
+ var css_248z = ".S72WkdRbhc0- {\n display: -ms-inline-flexbox;\n display: inline-flex;\n border-radius: calc(16px / 4);\n border-radius: var(--radius-large);\n}\n\n.bMWuAXJHkbw- {\n padding: calc((16px / 4) * 1.5) calc((16px / 2) * 1.25);\n padding: calc(calc(16px / 4) * 1.5) calc(calc(16px / 2) * 1.25);\n padding: calc(var(--space-smaller) * 1.5) calc(var(--space-small) * 1.25);\n}\n\n.ui07veHjPII- {\n padding: calc((16px / 4) * 1.5) calc((16px / 2) * 1.25);\n padding: calc(calc(16px / 4) * 1.5) calc(calc(16px / 2) * 1.25);\n padding: calc(var(--space-smaller) * 1.5) calc(var(--space-small) * 1.25);\n}\n\n.WIXhLSQ7z8A- {\n padding: calc((16px / 2) * 1.25) calc((16px / 4) * 3.5);\n padding: calc(calc(16px / 2) * 1.25) calc(calc(16px / 4) * 3.5);\n padding: calc(var(--space-small) * 1.25) calc(var(--space-smaller) * 3.5);\n}\n\n._8RuKvOhj-Ro- {\n color: rgb(66, 78, 86);\n color: var(--color-greyBlue--dark);\n background-color: rgb(238, 240, 242);\n background-color: var(--color-greyBlue--lightest);\n}\n\n._2vEF1nvVWm8- {\n color: rgb(128, 25, 0);\n color: var(--color-red--dark);\n background-color: rgb(255, 226, 219);\n background-color: var(--color-red--lightest);\n}\n\n.Wt305sIAeoE- {\n color: rgb(158, 98, 23);\n color: var(--color-orange--dark);\n background-color: rgb(253, 239, 222);\n background-color: var(--color-orange--lightest);\n}\n\n.F8KkNxz8W3A- {\n color: rgb(81, 114, 9);\n color: var(--color-green--dark);\n background-color: rgb(236, 243, 219);\n background-color: var(--color-green--lightest);\n}\n\n.URZZoKSX4So- {\n color: rgb(1, 27, 37);\n color: var(--color-blue--dark);\n background-color: rgb(217, 223, 225);\n background-color: var(--color-blue--lightest);\n}\n\n.OeLBV-9i0Rs- {\n color: rgb(49, 69, 98);\n color: var(--color-navy--dark);\n background-color: rgb(228, 233, 239);\n background-color: var(--color-navy--lightest);\n}\n\n._2Xwx5tarf1w- {\n color: rgb(144, 127, 10);\n color: var(--color-yellow--dark);\n background-color: rgb(250, 246, 219);\n background-color: var(--color-yellow--lightest);\n}\n\n.iCqIjI7GkEk- {\n color: rgb(99, 125, 46);\n color: var(--color-lime--dark);\n background-color: rgb(240, 246, 227);\n background-color: var(--color-lime--lightest);\n}\n\n._4iEIjiZj9oA- {\n color: rgb(88, 73, 127);\n color: var(--color-purple--dark);\n background-color: rgb(237, 234, 246);\n background-color: var(--color-purple--lightest);\n}\n\n.JRW9QFSjLTA- {\n color: rgb(116, 62, 98);\n color: var(--color-pink--dark);\n background-color: rgb(244, 231, 239);\n background-color: var(--color-pink--lightest);\n}\n\n.fbhprd-Gl8k- {\n color: rgb(40, 112, 95);\n color: var(--color-teal--dark);\n background-color: rgb(226, 243, 239);\n background-color: var(--color-teal--lightest);\n}\n\n.yrF9aZSaTdw- {\n color: rgb(122, 128, 21);\n color: var(--color-yellowGreen--dark);\n background-color: rgb(245, 246, 222);\n background-color: var(--color-yellowGreen--lightest);\n}\n\n.RPvjah0FdjI- {\n color: rgba(255, 255, 255, 1);\n color: var(--color-white);\n background-color: rgb(77, 105, 116);\n background-color: var(--color-blue--light);\n}\n\n.apwauWJ6ITc- {\n color: rgb(39, 105, 146);\n color: var(--color-lightBlue--dark);\n background-color: rgb(226, 241, 250);\n background-color: var(--color-lightBlue--lightest);\n}\n\n.n8qJynvE-n0- {\n color: rgb(55, 69, 132);\n color: var(--color-indigo--dark);\n background-color: rgb(230, 233, 247);\n background-color: var(--color-indigo--lightest);\n}\n";
14
+ var styles = {"inlineLabel":"S72WkdRbhc0-","base":"bMWuAXJHkbw-","large":"ui07veHjPII-","larger":"WIXhLSQ7z8A-","greyBlue":"_8RuKvOhj-Ro-","red":"_2vEF1nvVWm8-","orange":"Wt305sIAeoE-","green":"F8KkNxz8W3A-","blue":"URZZoKSX4So-","navy":"OeLBV-9i0Rs-","yellow":"_2Xwx5tarf1w-","lime":"iCqIjI7GkEk-","purple":"_4iEIjiZj9oA-","pink":"JRW9QFSjLTA-","teal":"fbhprd-Gl8k-","yellowGreen":"yrF9aZSaTdw-","blueDark":"RPvjah0FdjI-","lightBlue":"apwauWJ6ITc-","indigo":"n8qJynvE-n0-"};
15
+ styleInject_es.styleInject(css_248z);
16
+
17
+ function InlineLabel({ size = "base", color = "greyBlue", children, }) {
18
+ const className = classnames__default["default"](styles.inlineLabel, styles[size], styles[color]);
19
+ const sizeMapper = {
20
+ base: "small",
21
+ large: "large",
22
+ larger: "large",
23
+ };
24
+ return (React__default["default"].createElement("span", { className: className },
25
+ React__default["default"].createElement(Typography.Typography, { element: "span", size: sizeMapper[size] }, children)));
26
+ }
27
+
28
+ exports.InlineLabel = InlineLabel;
@@ -0,0 +1,70 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var tslib_es6 = require('../tslib.es6-754e2961.js');
6
+ var React = require('react');
7
+ var styleInject_es = require('../style-inject.es-9d2f5f4e.js');
8
+ var Avatar = require('../Avatar-76a799fa.js');
9
+ var InputFile = require('../InputFile-bb945071.js');
10
+ var ProgressBar = require('../ProgressBar-b68edc8f.js');
11
+ var Button = require('../Button-b73a5e01.js');
12
+ require('classnames');
13
+ require('color');
14
+ require('../Icon-405a216c.js');
15
+ require('@jobber/design');
16
+ require('react-dropzone');
17
+ require('axios');
18
+ require('../InputValidation-05e839fa.js');
19
+ require('framer-motion');
20
+ require('../Text-259af966.js');
21
+ require('../Typography-c45bf216.js');
22
+ require('../Content-e3f7b6fc.js');
23
+ require('react-router-dom');
24
+
25
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
26
+
27
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
28
+
29
+ var css_248z = ".a2KrLEZNB04- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n}\n\n.a2KrLEZNB04- > *:not(:last-child) {\n margin-right: calc(16px / 2);\n margin-right: var(--space-small);\n}\n\n._7-uM-6dFidA- {\n position: relative;\n}\n\n._4tvG9ksH3oM- {\n display: -ms-flexbox;\n display: flex;\n position: relative;\n height: 100%;\n margin: 0 calc(16px / 2);\n margin: 0 var(--space-small);\n -ms-flex-align: center;\n align-items: center;\n}\n\n.ah2Ak5EObRo- {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n}\n\n.ah2Ak5EObRo-::before {\n content: \"\";\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n border-radius: 100%;\n border-radius: var(--radius-circle);\n background-color: rgb(1, 27, 37);\n background-color: var(--color-blue--dark);\n opacity: 0.3;\n mix-blend-mode: multiply;\n}\n";
30
+ var styles = {"inputAvatar":"a2KrLEZNB04-","preview":"_7-uM-6dFidA-","centered":"_4tvG9ksH3oM-","overlay":"ah2Ak5EObRo-"};
31
+ styleInject_es.styleInject(css_248z);
32
+
33
+ function InputAvatar(_a) {
34
+ var { getUploadParams, onUploadComplete, onChange } = _a, avatarProps = tslib_es6.__rest(_a, ["getUploadParams", "onUploadComplete", "onChange"]);
35
+ const [progress, setProgress] = React.useState(1);
36
+ return (React__default["default"].createElement("div", { className: styles.inputAvatar },
37
+ React__default["default"].createElement("div", { className: styles.preview },
38
+ React__default["default"].createElement(Avatar.Avatar, Object.assign({ size: "large" }, avatarProps)),
39
+ progress < 1 && (React__default["default"].createElement(Overlay, null,
40
+ React__default["default"].createElement(Centered, null,
41
+ React__default["default"].createElement(ProgressBar.ProgressBar, { size: "small", currentStep: progress * 100, totalSteps: 100 }))))),
42
+ React__default["default"].createElement(InputFile.InputFile, { variation: "button", buttonLabel: avatarProps.imageUrl ? "Change Image" : undefined, size: "small", allowedTypes: "images", getUploadParams: getUploadParams, onUploadStart: handleChange, onUploadProgress: handleUpload, onUploadComplete: handleUploadComplete }),
43
+ avatarProps.imageUrl != undefined && progress === 1 && (React__default["default"].createElement(Button.Button, { label: "Remove", size: "small", type: "secondary", variation: "destructive", onClick: clearAvatar }))));
44
+ function handleChange(newFile) {
45
+ onChange && onChange(newFile);
46
+ handleUpload(newFile);
47
+ }
48
+ function handleUploadComplete(newFile) {
49
+ onUploadComplete && onUploadComplete(newFile);
50
+ handleUpload(newFile);
51
+ }
52
+ function handleUpload(newFile) {
53
+ return tslib_es6.__awaiter(this, void 0, void 0, function* () {
54
+ setProgress(newFile.progress);
55
+ });
56
+ }
57
+ function clearAvatar() {
58
+ onChange && onChange(undefined);
59
+ setProgress(1);
60
+ }
61
+ }
62
+ function Overlay({ children }) {
63
+ return React__default["default"].createElement("div", { className: styles.overlay }, children);
64
+ }
65
+ function Centered({ children }) {
66
+ // Note: this HIGHLY experimental Centered component is applying margin.
67
+ return React__default["default"].createElement("div", { className: styles.centered }, children);
68
+ }
69
+
70
+ exports.InputAvatar = InputAvatar;
@@ -0,0 +1,57 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var omit = require('lodash/omit');
6
+ var React = require('react');
7
+ var FormField = require('../FormField-6ff183f8.js');
8
+ var DatePicker = require('../DatePicker-64c5ab1a.js');
9
+ require('../tslib.es6-754e2961.js');
10
+ require('react-hook-form');
11
+ require('../style-inject.es-9d2f5f4e.js');
12
+ require('classnames');
13
+ require('@jobber/hooks/useShowClear');
14
+ require('../Button-b73a5e01.js');
15
+ require('react-router-dom');
16
+ require('../Icon-405a216c.js');
17
+ require('@jobber/design');
18
+ require('../Typography-c45bf216.js');
19
+ require('../Text-259af966.js');
20
+ require('../InputValidation-05e839fa.js');
21
+ require('framer-motion');
22
+ require('../Spinner-9d8fc7ff.js');
23
+ require('react-datepicker');
24
+ require('@jobber/hooks/useRefocusOnActivator');
25
+
26
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
27
+
28
+ var omit__default = /*#__PURE__*/_interopDefaultLegacy(omit);
29
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
30
+
31
+ function InputDate(inputProps) {
32
+ const formFieldActionsRef = React.useRef(null);
33
+ return (React__default["default"].createElement(DatePicker.DatePicker, { selected: inputProps.value, onChange: inputProps.onChange, disabled: inputProps.disabled, readonly: inputProps.readonly, fullWidth: !inputProps.inline, minDate: inputProps.minDate, maxDate: inputProps.maxDate, smartAutofocus: false, activator: activatorProps => {
34
+ var _a;
35
+ const { onChange, onClick, value } = activatorProps;
36
+ const newActivatorProps = omit__default["default"](activatorProps, ["activator"]);
37
+ const suffix = Object.assign({ icon: "calendar" }, (onClick && {
38
+ onClick: onClick,
39
+ ariaLabel: "Show calendar",
40
+ }));
41
+ // Set form field to formatted date string immediately, to avoid validations
42
+ // triggering incorrectly when it blurs (to handle the datepicker UI click)
43
+ value && ((_a = formFieldActionsRef.current) === null || _a === void 0 ? void 0 : _a.setValue(value));
44
+ return (
45
+ // 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
+ 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: () => {
48
+ inputProps.onBlur && inputProps.onBlur();
49
+ activatorProps.onBlur && activatorProps.onBlur();
50
+ }, onFocus: () => {
51
+ inputProps.onFocus && inputProps.onFocus();
52
+ activatorProps.onFocus && activatorProps.onFocus();
53
+ }, actionsRef: formFieldActionsRef, suffix: suffix }))));
54
+ } }));
55
+ }
56
+
57
+ exports.InputDate = InputDate;
@@ -0,0 +1,43 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var React = require('react');
6
+ var FormField = require('../FormField-6ff183f8.js');
7
+ require('../tslib.es6-754e2961.js');
8
+ require('react-hook-form');
9
+ require('../style-inject.es-9d2f5f4e.js');
10
+ require('classnames');
11
+ require('@jobber/hooks/useShowClear');
12
+ require('../Button-b73a5e01.js');
13
+ require('react-router-dom');
14
+ require('../Icon-405a216c.js');
15
+ require('@jobber/design');
16
+ require('../Typography-c45bf216.js');
17
+ require('../Text-259af966.js');
18
+ require('../InputValidation-05e839fa.js');
19
+ require('framer-motion');
20
+ require('../Spinner-9d8fc7ff.js');
21
+
22
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
23
+
24
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
25
+
26
+ const validationMessage = "Please enter a valid email";
27
+ function InputEmail(props) {
28
+ const { validations } = props;
29
+ return (React__default["default"].createElement(FormField.FormField, Object.assign({}, props, { type: "email", validations: Object.assign(Object.assign({}, validations), { validate: checkForValidEmail }) })));
30
+ function checkForValidEmail(value) {
31
+ const emailRegex = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
32
+ if (!value) {
33
+ return true;
34
+ }
35
+ if (!value.match(emailRegex)) {
36
+ return validationMessage;
37
+ }
38
+ return true;
39
+ }
40
+ }
41
+
42
+ exports.InputEmail = InputEmail;
43
+ exports.validationMessage = validationMessage;
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var InputFile = require('../InputFile-bb945071.js');
6
+ require('../tslib.es6-754e2961.js');
7
+ require('react');
8
+ require('classnames');
9
+ require('react-dropzone');
10
+ require('axios');
11
+ require('../style-inject.es-9d2f5f4e.js');
12
+ require('../InputValidation-05e839fa.js');
13
+ require('framer-motion');
14
+ require('../Text-259af966.js');
15
+ require('../Typography-c45bf216.js');
16
+ require('../Icon-405a216c.js');
17
+ require('@jobber/design');
18
+ require('../Button-b73a5e01.js');
19
+ require('react-router-dom');
20
+ require('../Content-e3f7b6fc.js');
21
+
22
+
23
+
24
+ exports.InputFile = InputFile.InputFile;
25
+ exports.updateFiles = InputFile.updateFiles;
@@ -0,0 +1,190 @@
1
+ 'use strict';
2
+
3
+ var tslib_es6 = require('./tslib.es6-754e2961.js');
4
+ var React = require('react');
5
+ var classnames = require('classnames');
6
+ var reactDropzone = require('react-dropzone');
7
+ var axios = require('axios');
8
+ var styleInject_es = require('./style-inject.es-9d2f5f4e.js');
9
+ var InputValidation = require('./InputValidation-05e839fa.js');
10
+ var Button = require('./Button-b73a5e01.js');
11
+ var Content = require('./Content-e3f7b6fc.js');
12
+ var Typography = require('./Typography-c45bf216.js');
13
+
14
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
15
+
16
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
17
+ var classnames__default = /*#__PURE__*/_interopDefaultLegacy(classnames);
18
+ var axios__default = /*#__PURE__*/_interopDefaultLegacy(axios);
19
+
20
+ var css_248z = ".grljXfTWj84- {\n font-size: 0;\n line-height: 0;\n -webkit-user-select: none;\n -ms-user-select: none;\n user-select: none;\n cursor: pointer;\n}\n\n.grljXfTWj84-:focus,\n.grljXfTWj84-:focus-within {\n border-color: rgb(147, 161, 169);\n border-color: var(--color-focus);\n outline: none;\n}\n\n.WHhHWgaoXk4- {\n padding: calc(16px * 1);\n padding: var(--space-base);\n border: rgb(217, 223, 225) dashed calc(16px / 8);\n border: var(--color-border) dashed var(--border-thick);\n border-radius: calc(16px / 2);\n border-radius: var(--radius-larger);\n text-align: center;\n}\n\n.WHhHWgaoXk4-.n1h-T2metRA- {\n border-color: rgb(147, 161, 169);\n border-color: var(--color-focus);\n background-color: rgb(244, 246, 250);\n background-color: var(--color-surface--hover);\n}\n\n.WHhHWgaoXk4-.MRRclAp51-w- {\n border-color: rgb(201, 66, 33);\n border-color: var(--color-critical);\n}\n\n.TIbSRNvDK10- {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n";
21
+ var styles = {"dropZoneBase":"grljXfTWj84-","dropZone":"WHhHWgaoXk4-","active":"n1h-T2metRA-","error":"MRRclAp51-w-","validationErrors":"TIbSRNvDK10-"};
22
+ styleInject_es.styleInject(css_248z);
23
+
24
+ function InputFile({ variation = "dropzone", size = "base", buttonLabel: providedButtonLabel, allowMultiple = false, allowedTypes = "all", getUploadParams, onUploadStart, onUploadProgress, onUploadComplete, onUploadError, validator, }) {
25
+ const options = {
26
+ multiple: allowMultiple,
27
+ onDrop: React.useCallback(handleDrop, [uploadFile]),
28
+ validator: validator && React.useCallback(validator, []),
29
+ };
30
+ if (allowedTypes === "images") {
31
+ options.accept = "image/*";
32
+ }
33
+ else if (allowedTypes === "basicImages") {
34
+ options.accept = "image/png, image/jpg, image/jpeg";
35
+ }
36
+ else if (Array.isArray(allowedTypes)) {
37
+ options.accept = allowedTypes.join(",");
38
+ }
39
+ const { getRootProps, getInputProps, isDragActive, fileRejections } = reactDropzone.useDropzone(options);
40
+ const validationErrors = fileRejections === null || fileRejections === void 0 ? void 0 : fileRejections.map(({ file, errors }) => {
41
+ return errors.map(error => {
42
+ return (React__default["default"].createElement(InputValidation.InputValidation, { message: `${file.name} ${error.message}`, key: `${file.name}${error.code}` }));
43
+ });
44
+ });
45
+ const { buttonLabel, hintText } = getLabels(providedButtonLabel, allowMultiple, allowedTypes);
46
+ const dropZone = classnames__default["default"](styles.dropZoneBase, {
47
+ [styles.dropZone]: variation === "dropzone",
48
+ [styles.active]: isDragActive,
49
+ [styles.error]: (fileRejections === null || fileRejections === void 0 ? void 0 : fileRejections.length) > 0,
50
+ });
51
+ return (React__default["default"].createElement(React__default["default"].Fragment, null,
52
+ React__default["default"].createElement("div", Object.assign({}, getRootProps({ className: dropZone }), { tabIndex: variation === "button" ? -1 : 0 }),
53
+ React__default["default"].createElement("input", Object.assign({}, getInputProps())),
54
+ variation === "dropzone" && (React__default["default"].createElement(Content.Content, { spacing: "small" },
55
+ React__default["default"].createElement(Button.Button, { label: buttonLabel, size: "small", type: "secondary" }),
56
+ size === "base" && (React__default["default"].createElement(Typography.Typography, { size: "small", textColor: "textSecondary" }, hintText)))),
57
+ variation === "button" && (React__default["default"].createElement(Button.Button, { label: buttonLabel, size: size, type: "secondary", fullWidth: true }))),
58
+ (fileRejections === null || fileRejections === void 0 ? void 0 : fileRejections.length) > 0 && (React__default["default"].createElement("div", { className: styles.validationErrors }, validationErrors))));
59
+ function handleDrop(acceptedFiles) {
60
+ acceptedFiles.forEach(file => {
61
+ uploadFile(file);
62
+ });
63
+ }
64
+ function uploadFile(file) {
65
+ return tslib_es6.__awaiter(this, void 0, void 0, function* () {
66
+ let params;
67
+ try {
68
+ params = yield getUploadParams(file);
69
+ }
70
+ catch (_a) {
71
+ onUploadError && onUploadError(new Error("Failed to get upload params"));
72
+ return;
73
+ }
74
+ const { url, key = generateId(), fields = {}, httpMethod = "POST", } = params;
75
+ const fileUpload = getFileUpload(file, key, url);
76
+ onUploadStart && onUploadStart(Object.assign({}, fileUpload));
77
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
78
+ const handleUploadProgress = (progressEvent) => {
79
+ onUploadProgress &&
80
+ onUploadProgress(Object.assign(Object.assign({}, fileUpload), { progress: progressEvent.loaded / progressEvent.total }));
81
+ };
82
+ const handleUploadComplete = () => {
83
+ onUploadComplete === null || onUploadComplete === void 0 ? void 0 : onUploadComplete(Object.assign(Object.assign({}, fileUpload), { progress: 1 }));
84
+ };
85
+ const axiosConfig = createAxiosConfig({
86
+ url,
87
+ httpMethod,
88
+ fields,
89
+ file,
90
+ handleUploadProgress,
91
+ });
92
+ axios__default["default"]
93
+ .request(axiosConfig)
94
+ .then(handleUploadComplete)
95
+ .catch(() => {
96
+ onUploadError && onUploadError(new Error("Failed to upload file"));
97
+ });
98
+ });
99
+ }
100
+ }
101
+ function createAxiosConfig({ url, httpMethod = "POST", fields = {}, file, handleUploadProgress, }) {
102
+ let data;
103
+ let headers;
104
+ if (httpMethod === "POST") {
105
+ const formData = new FormData();
106
+ Object.entries(fields).forEach(([field, value]) => formData.append(field, value));
107
+ formData.append("file", file);
108
+ data = formData;
109
+ headers = { "X-Requested-With": "XMLHttpRequest" };
110
+ }
111
+ else {
112
+ data = file;
113
+ headers = fields;
114
+ }
115
+ return {
116
+ method: httpMethod,
117
+ url: url,
118
+ headers: headers,
119
+ data: data,
120
+ onUploadProgress: handleUploadProgress,
121
+ };
122
+ }
123
+ function getLabels(providedButtonLabel, multiple, allowedTypes) {
124
+ let buttonLabel = multiple ? "Upload Files" : "Upload File";
125
+ let hintText = multiple
126
+ ? "or drag files here to upload"
127
+ : "or drag a file here to upload";
128
+ if (allowedTypes === "images" || allowedTypes === "basicImages") {
129
+ buttonLabel = multiple ? "Upload Images" : "Upload Image";
130
+ hintText = multiple
131
+ ? "or drag images here to upload"
132
+ : "or drag an image here to upload";
133
+ }
134
+ if (providedButtonLabel)
135
+ buttonLabel = providedButtonLabel;
136
+ return { buttonLabel, hintText };
137
+ }
138
+ function getFileUpload(file, key, uploadUrl) {
139
+ return {
140
+ key: key,
141
+ name: file.name,
142
+ type: file.type,
143
+ size: file.size,
144
+ progress: 0,
145
+ src: getSrc,
146
+ uploadUrl,
147
+ };
148
+ function getSrc() {
149
+ const promise = new Promise((resolve, reject) => {
150
+ const reader = new FileReader();
151
+ reader.onload = event => {
152
+ if (event.target &&
153
+ event.target.result &&
154
+ typeof event.target.result === "string") {
155
+ resolve(event.target.result);
156
+ }
157
+ else {
158
+ reject("Could not generate file data url.");
159
+ }
160
+ };
161
+ reader.readAsDataURL(file);
162
+ });
163
+ return promise;
164
+ }
165
+ }
166
+ /**
167
+ * Upsert a given `FileUpload` into an array of `FileUpload`s.
168
+ * `key` is used to uniquely identify files.
169
+ *
170
+ * @param updatedFile FileUpload File that was updated.
171
+ * @param files Existing array of FileUploads.
172
+ * @returns FileUpload[] updated set of files.
173
+ */
174
+ function updateFiles(updatedFile, files) {
175
+ const newFiles = [...files];
176
+ const index = files.findIndex(file => file.key === updatedFile.key);
177
+ if (index !== -1) {
178
+ newFiles[index] = updatedFile;
179
+ }
180
+ else {
181
+ newFiles.push(updatedFile);
182
+ }
183
+ return newFiles;
184
+ }
185
+ function generateId() {
186
+ return Math.floor(Math.random() * Date.now()).toString(16);
187
+ }
188
+
189
+ exports.InputFile = InputFile;
190
+ exports.updateFiles = updateFiles;