@jobber/components 6.13.2 → 6.14.1-aidenfix--e9ec00c.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.
@@ -11,7 +11,7 @@ export interface GalleryProps {
11
11
  /**
12
12
  * The files for the Gallery to display
13
13
  */
14
- files: File[];
14
+ files: GalleryFile[];
15
15
  /**
16
16
  * The max number of thumbnails before no more thumbnails are displayed
17
17
  * unless the user clicks an action to display the rest
@@ -21,9 +21,9 @@ export interface GalleryProps {
21
21
  * onDelete callback - this function will be called when the delete action is
22
22
  * triggered on a Gallery image
23
23
  */
24
- onDelete?(file: File): void;
24
+ onDelete?(file: GalleryFile): void;
25
25
  }
26
- export interface File extends Pick<FileUpload, "key" | "name" | "type" | "size" | "progress"> {
26
+ export interface GalleryFile extends Pick<FileUpload, "key" | "name" | "type" | "size" | "progress"> {
27
27
  /**
28
28
  * The thumbnail url of the file.
29
29
  */
@@ -31,5 +31,5 @@ export interface File extends Pick<FileUpload, "key" | "name" | "type" | "size"
31
31
  /**
32
32
  * The data url of the file.
33
33
  */
34
- readonly src: string;
34
+ readonly src: string | (() => Promise<string>);
35
35
  }
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var Gallery = require('../Gallery-cjs.js');
4
+ require('../tslib.es6-cjs.js');
4
5
  require('react');
5
6
  require('classnames');
6
7
  require('../LightBox-cjs.js');
@@ -33,7 +34,6 @@ require('../Emphasis-cjs.js');
33
34
  require('../index-cjs.js');
34
35
  require('../_polyfill-node.process-cjs.js');
35
36
  require('../Glimmer-cjs.js');
36
- require('../tslib.es6-cjs.js');
37
37
  require('../ProgressBar-cjs.js');
38
38
 
39
39
 
@@ -1 +1,2 @@
1
1
  export { Gallery } from "./Gallery";
2
+ export type { GalleryFile, GalleryProps } from "./GalleryTypes";
@@ -1,4 +1,5 @@
1
1
  export { G as Gallery } from '../Gallery-es.js';
2
+ import '../tslib.es6-es.js';
2
3
  import 'react';
3
4
  import 'classnames';
4
5
  import '../LightBox-es.js';
@@ -31,5 +32,4 @@ import '../Emphasis-es.js';
31
32
  import '../index-es.js';
32
33
  import '../_polyfill-node.process-es.js';
33
34
  import '../Glimmer-es.js';
34
- import '../tslib.es6-es.js';
35
35
  import '../ProgressBar-es.js';
@@ -1,5 +1,6 @@
1
1
  'use strict';
2
2
 
3
+ var tslib_es6 = require('./tslib.es6-cjs.js');
3
4
  var React = require('react');
4
5
  var classnames = require('classnames');
5
6
  var LightBox = require('./LightBox-cjs.js');
@@ -9,7 +10,14 @@ var Button = require('./Button-cjs.js');
9
10
  var styles = {"gallery":"_6UhvrmKZdns-","galleryLarge":"f0hnJ8v-iHE-","showMoreButton":"EvHA4-Q7O9g-","baseShowMoreButton":"VWW-3mSlumg-","largeShowMoreButton":"DNhegGxB75M-","spinning":"aqCoXiyvGKw-"};
10
11
 
11
12
  function Gallery({ files, size = "base", max, onDelete }) {
12
- const { images, filesToImageIndex } = generateImagesArray(files);
13
+ const [images, setImages] = React.useState([]);
14
+ const [filesToImageIndex, setFilesToImageIndex] = React.useState([]);
15
+ React.useEffect(() => {
16
+ generateImagesArray(files).then(result => {
17
+ setImages(result.images);
18
+ setFilesToImageIndex(result.filesToImageIndex);
19
+ });
20
+ }, [files]);
13
21
  const [lightboxOpen, setLightboxOpen] = React.useState(false);
14
22
  const [lightboxIndex, setLightboxIndex] = React.useState(0);
15
23
  const [displayPastMax, setDisplayPastMax] = React.useState(max ? false : true);
@@ -17,7 +25,7 @@ function Gallery({ files, size = "base", max, onDelete }) {
17
25
  return (React.createElement(React.Fragment, null,
18
26
  React.createElement("div", { className: size === "large" ? styles.galleryLarge : styles.gallery },
19
27
  visibleFiles.map((file, index) => {
20
- return (React.createElement(FormatFile.FormatFile, { key: file.key, file: Object.assign(Object.assign({}, file), { src: () => Promise.resolve(file.thumbnailSrc || file.src) }), display: "compact", displaySize: size, onClick: () => {
28
+ return (React.createElement(FormatFile.FormatFile, { key: file.key, file: Object.assign(Object.assign({}, file), { src: () => Promise.resolve(file.thumbnailSrc || getFileSrc(file)) }), display: "compact", displaySize: size, onClick: () => {
21
29
  handleThumbnailClicked(index);
22
30
  }, onDelete: onDelete ? () => onDelete === null || onDelete === void 0 ? void 0 : onDelete(file) : undefined }));
23
31
  }),
@@ -27,13 +35,15 @@ function Gallery({ files, size = "base", max, onDelete }) {
27
35
  } })))),
28
36
  React.createElement(LightBox.LightBox, { open: lightboxOpen, images: images, imageIndex: lightboxIndex, onRequestClose: handleLightboxClose })));
29
37
  function handleThumbnailClicked(index) {
30
- if (files[index].type.startsWith("image/") &&
31
- isSupportedImageType(files[index])) {
32
- handleLightboxOpen(index);
33
- }
34
- else {
35
- window.open(files[index].src, "_blank");
36
- }
38
+ return tslib_es6.__awaiter(this, void 0, void 0, function* () {
39
+ if (files[index].type.startsWith("image/") &&
40
+ isSupportedImageType(files[index])) {
41
+ handleLightboxOpen(index);
42
+ }
43
+ else {
44
+ window.open(yield getFileSrc(files[index]), "_blank");
45
+ }
46
+ });
37
47
  }
38
48
  function handleLightboxOpen(index) {
39
49
  const fileToImageIndex = filesToImageIndex[index];
@@ -46,6 +56,11 @@ function Gallery({ files, size = "base", max, onDelete }) {
46
56
  setLightboxOpen(false);
47
57
  }
48
58
  }
59
+ function getFileSrc(file) {
60
+ return tslib_es6.__awaiter(this, void 0, void 0, function* () {
61
+ return typeof file.src === "string" ? file.src : file.src();
62
+ });
63
+ }
49
64
  function isSupportedImageType(file) {
50
65
  const userAgent = typeof document === "undefined" ? "" : window.navigator.userAgent;
51
66
  const nonHeicImage = !file.type.startsWith("image/heic");
@@ -53,20 +68,22 @@ function isSupportedImageType(file) {
53
68
  return (nonHeicImage || FormatFile.isSafari(userAgent)) && nonSVGImage;
54
69
  }
55
70
  function generateImagesArray(files) {
56
- const images = [];
57
- const filesToImageIndex = [];
58
- let imageIndex = 0;
59
- for (let i = 0; i < files.length; i++) {
60
- if (files[i].type.startsWith("image/") && isSupportedImageType(files[i])) {
61
- images.push({ title: files[i].name, url: files[i].src });
62
- filesToImageIndex.push(imageIndex);
63
- imageIndex++;
71
+ return tslib_es6.__awaiter(this, void 0, void 0, function* () {
72
+ const images = [];
73
+ const filesToImageIndex = [];
74
+ let imageIndex = 0;
75
+ for (let i = 0; i < files.length; i++) {
76
+ if (files[i].type.startsWith("image/") && isSupportedImageType(files[i])) {
77
+ images.push({ title: files[i].name, url: yield getFileSrc(files[i]) });
78
+ filesToImageIndex.push(imageIndex);
79
+ imageIndex++;
80
+ }
81
+ else {
82
+ filesToImageIndex.push(undefined);
83
+ }
64
84
  }
65
- else {
66
- filesToImageIndex.push(undefined);
67
- }
68
- }
69
- return { images, filesToImageIndex };
85
+ return { images, filesToImageIndex };
86
+ });
70
87
  }
71
88
 
72
89
  exports.Gallery = Gallery;
@@ -1,3 +1,4 @@
1
+ import { a as __awaiter } from './tslib.es6-es.js';
1
2
  import React, { useState } from 'react';
2
3
  import classnames from 'classnames';
3
4
  import { L as LightBox } from './LightBox-es.js';
@@ -7,7 +8,14 @@ import { B as Button } from './Button-es.js';
7
8
  var styles = {"gallery":"_6UhvrmKZdns-","galleryLarge":"f0hnJ8v-iHE-","showMoreButton":"EvHA4-Q7O9g-","baseShowMoreButton":"VWW-3mSlumg-","largeShowMoreButton":"DNhegGxB75M-","spinning":"aqCoXiyvGKw-"};
8
9
 
9
10
  function Gallery({ files, size = "base", max, onDelete }) {
10
- const { images, filesToImageIndex } = generateImagesArray(files);
11
+ const [images, setImages] = useState([]);
12
+ const [filesToImageIndex, setFilesToImageIndex] = useState([]);
13
+ React.useEffect(() => {
14
+ generateImagesArray(files).then(result => {
15
+ setImages(result.images);
16
+ setFilesToImageIndex(result.filesToImageIndex);
17
+ });
18
+ }, [files]);
11
19
  const [lightboxOpen, setLightboxOpen] = useState(false);
12
20
  const [lightboxIndex, setLightboxIndex] = useState(0);
13
21
  const [displayPastMax, setDisplayPastMax] = useState(max ? false : true);
@@ -15,7 +23,7 @@ function Gallery({ files, size = "base", max, onDelete }) {
15
23
  return (React.createElement(React.Fragment, null,
16
24
  React.createElement("div", { className: size === "large" ? styles.galleryLarge : styles.gallery },
17
25
  visibleFiles.map((file, index) => {
18
- return (React.createElement(FormatFile, { key: file.key, file: Object.assign(Object.assign({}, file), { src: () => Promise.resolve(file.thumbnailSrc || file.src) }), display: "compact", displaySize: size, onClick: () => {
26
+ return (React.createElement(FormatFile, { key: file.key, file: Object.assign(Object.assign({}, file), { src: () => Promise.resolve(file.thumbnailSrc || getFileSrc(file)) }), display: "compact", displaySize: size, onClick: () => {
19
27
  handleThumbnailClicked(index);
20
28
  }, onDelete: onDelete ? () => onDelete === null || onDelete === void 0 ? void 0 : onDelete(file) : undefined }));
21
29
  }),
@@ -25,13 +33,15 @@ function Gallery({ files, size = "base", max, onDelete }) {
25
33
  } })))),
26
34
  React.createElement(LightBox, { open: lightboxOpen, images: images, imageIndex: lightboxIndex, onRequestClose: handleLightboxClose })));
27
35
  function handleThumbnailClicked(index) {
28
- if (files[index].type.startsWith("image/") &&
29
- isSupportedImageType(files[index])) {
30
- handleLightboxOpen(index);
31
- }
32
- else {
33
- window.open(files[index].src, "_blank");
34
- }
36
+ return __awaiter(this, void 0, void 0, function* () {
37
+ if (files[index].type.startsWith("image/") &&
38
+ isSupportedImageType(files[index])) {
39
+ handleLightboxOpen(index);
40
+ }
41
+ else {
42
+ window.open(yield getFileSrc(files[index]), "_blank");
43
+ }
44
+ });
35
45
  }
36
46
  function handleLightboxOpen(index) {
37
47
  const fileToImageIndex = filesToImageIndex[index];
@@ -44,6 +54,11 @@ function Gallery({ files, size = "base", max, onDelete }) {
44
54
  setLightboxOpen(false);
45
55
  }
46
56
  }
57
+ function getFileSrc(file) {
58
+ return __awaiter(this, void 0, void 0, function* () {
59
+ return typeof file.src === "string" ? file.src : file.src();
60
+ });
61
+ }
47
62
  function isSupportedImageType(file) {
48
63
  const userAgent = typeof document === "undefined" ? "" : window.navigator.userAgent;
49
64
  const nonHeicImage = !file.type.startsWith("image/heic");
@@ -51,20 +66,22 @@ function isSupportedImageType(file) {
51
66
  return (nonHeicImage || isSafari(userAgent)) && nonSVGImage;
52
67
  }
53
68
  function generateImagesArray(files) {
54
- const images = [];
55
- const filesToImageIndex = [];
56
- let imageIndex = 0;
57
- for (let i = 0; i < files.length; i++) {
58
- if (files[i].type.startsWith("image/") && isSupportedImageType(files[i])) {
59
- images.push({ title: files[i].name, url: files[i].src });
60
- filesToImageIndex.push(imageIndex);
61
- imageIndex++;
69
+ return __awaiter(this, void 0, void 0, function* () {
70
+ const images = [];
71
+ const filesToImageIndex = [];
72
+ let imageIndex = 0;
73
+ for (let i = 0; i < files.length; i++) {
74
+ if (files[i].type.startsWith("image/") && isSupportedImageType(files[i])) {
75
+ images.push({ title: files[i].name, url: yield getFileSrc(files[i]) });
76
+ filesToImageIndex.push(imageIndex);
77
+ imageIndex++;
78
+ }
79
+ else {
80
+ filesToImageIndex.push(undefined);
81
+ }
62
82
  }
63
- else {
64
- filesToImageIndex.push(undefined);
65
- }
66
- }
67
- return { images, filesToImageIndex };
83
+ return { images, filesToImageIndex };
84
+ });
68
85
  }
69
86
 
70
87
  export { Gallery as G };
@@ -5,6 +5,7 @@ require('react');
5
5
  require('react-popper');
6
6
  require('../useRefocusOnActivator-cjs.js');
7
7
  require('classnames');
8
+ require('react-dom');
8
9
  require('../ButtonDismiss-cjs.js');
9
10
  require('../Button-cjs.js');
10
11
  require('react-router-dom');
@@ -3,6 +3,7 @@ import 'react';
3
3
  import 'react-popper';
4
4
  import '../useRefocusOnActivator-es.js';
5
5
  import 'classnames';
6
+ import 'react-dom';
6
7
  import '../ButtonDismiss-es.js';
7
8
  import '../Button-es.js';
8
9
  import 'react-router-dom';
@@ -4,6 +4,7 @@ var React = require('react');
4
4
  var reactPopper = require('react-popper');
5
5
  var useRefocusOnActivator = require('./useRefocusOnActivator-cjs.js');
6
6
  var classnames = require('classnames');
7
+ var ReactDOM = require('react-dom');
7
8
  var ButtonDismiss = require('./ButtonDismiss-cjs.js');
8
9
 
9
10
  var classes = {"popover":"rY8OtuArIi0-","header":"UI1AohefbSo-","dismissButton":"HyA0TM5soDM-","arrow":"uClo-5-xhAc-","spinning":"VA0ROLmpLPs-"};
@@ -20,11 +21,15 @@ function Popover({ onRequestClose, children, attachTo, open, preferredPlacement
20
21
  const popoverClassNames = classnames(classes.popover, UNSAFE_className.container);
21
22
  const dismissButtonClassNames = classnames(classes.dismissButton, UNSAFE_className.dismissButtonContainer);
22
23
  const arrowClassNames = classnames(classes.arrow, UNSAFE_className.arrow);
23
- return (React.createElement(React.Fragment, null, open && (React.createElement("div", Object.assign({ role: "dialog", "data-elevation": "elevated", ref: setPopperElement, style: Object.assign(Object.assign({}, popperStyles.popper), ((_a = UNSAFE_style.container) !== null && _a !== void 0 ? _a : {})), className: popoverClassNames }, attributes.popper, { "data-testid": "popover-container" }),
24
+ const popoverContent = (React.createElement("div", Object.assign({ role: "dialog", "data-elevation": "elevated", ref: setPopperElement, style: Object.assign(Object.assign({}, popperStyles.popper), ((_a = UNSAFE_style.container) !== null && _a !== void 0 ? _a : {})), className: popoverClassNames }, attributes.popper, { "data-testid": "popover-container" }),
24
25
  React.createElement("div", { className: dismissButtonClassNames, style: (_b = UNSAFE_style.dismissButtonContainer) !== null && _b !== void 0 ? _b : {}, "data-testid": "popover-dismiss-button-container" },
25
26
  React.createElement(ButtonDismiss.ButtonDismiss, { onClick: onRequestClose, ariaLabel: "Close dialog" })),
26
27
  children,
27
- React.createElement("div", { ref: setArrowElement, className: arrowClassNames, style: Object.assign(Object.assign({}, popperStyles.arrow), ((_c = UNSAFE_style.arrow) !== null && _c !== void 0 ? _c : {})), "data-testid": "popover-arrow" })))));
28
+ React.createElement("div", { ref: setArrowElement, className: arrowClassNames, style: Object.assign(Object.assign({}, popperStyles.arrow), ((_c = UNSAFE_style.arrow) !== null && _c !== void 0 ? _c : {})), "data-testid": "popover-arrow" })));
29
+ return React.createElement(React.Fragment, null, open && React.createElement(PopoverPortal, null, popoverContent));
30
+ }
31
+ function PopoverPortal({ children }) {
32
+ return ReactDOM.createPortal(children, document.body);
28
33
  }
29
34
  function buildModifiers(arrowElement) {
30
35
  const modifiers = [
@@ -2,6 +2,7 @@ import React, { useState } from 'react';
2
2
  import { usePopper } from 'react-popper';
3
3
  import { u as useRefocusOnActivator_2 } from './useRefocusOnActivator-es.js';
4
4
  import classnames from 'classnames';
5
+ import ReactDOM from 'react-dom';
5
6
  import { B as ButtonDismiss } from './ButtonDismiss-es.js';
6
7
 
7
8
  var classes = {"popover":"rY8OtuArIi0-","header":"UI1AohefbSo-","dismissButton":"HyA0TM5soDM-","arrow":"uClo-5-xhAc-","spinning":"VA0ROLmpLPs-"};
@@ -18,11 +19,15 @@ function Popover({ onRequestClose, children, attachTo, open, preferredPlacement
18
19
  const popoverClassNames = classnames(classes.popover, UNSAFE_className.container);
19
20
  const dismissButtonClassNames = classnames(classes.dismissButton, UNSAFE_className.dismissButtonContainer);
20
21
  const arrowClassNames = classnames(classes.arrow, UNSAFE_className.arrow);
21
- return (React.createElement(React.Fragment, null, open && (React.createElement("div", Object.assign({ role: "dialog", "data-elevation": "elevated", ref: setPopperElement, style: Object.assign(Object.assign({}, popperStyles.popper), ((_a = UNSAFE_style.container) !== null && _a !== void 0 ? _a : {})), className: popoverClassNames }, attributes.popper, { "data-testid": "popover-container" }),
22
+ const popoverContent = (React.createElement("div", Object.assign({ role: "dialog", "data-elevation": "elevated", ref: setPopperElement, style: Object.assign(Object.assign({}, popperStyles.popper), ((_a = UNSAFE_style.container) !== null && _a !== void 0 ? _a : {})), className: popoverClassNames }, attributes.popper, { "data-testid": "popover-container" }),
22
23
  React.createElement("div", { className: dismissButtonClassNames, style: (_b = UNSAFE_style.dismissButtonContainer) !== null && _b !== void 0 ? _b : {}, "data-testid": "popover-dismiss-button-container" },
23
24
  React.createElement(ButtonDismiss, { onClick: onRequestClose, ariaLabel: "Close dialog" })),
24
25
  children,
25
- React.createElement("div", { ref: setArrowElement, className: arrowClassNames, style: Object.assign(Object.assign({}, popperStyles.arrow), ((_c = UNSAFE_style.arrow) !== null && _c !== void 0 ? _c : {})), "data-testid": "popover-arrow" })))));
26
+ React.createElement("div", { ref: setArrowElement, className: arrowClassNames, style: Object.assign(Object.assign({}, popperStyles.arrow), ((_c = UNSAFE_style.arrow) !== null && _c !== void 0 ? _c : {})), "data-testid": "popover-arrow" })));
27
+ return React.createElement(React.Fragment, null, open && React.createElement(PopoverPortal, null, popoverContent));
28
+ }
29
+ function PopoverPortal({ children }) {
30
+ return ReactDOM.createPortal(children, document.body);
26
31
  }
27
32
  function buildModifiers(arrowElement) {
28
33
  const modifiers = [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jobber/components",
3
- "version": "6.13.2",
3
+ "version": "6.14.1-aidenfix--e9ec00c.0+e9ec00ce",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",
@@ -489,5 +489,5 @@
489
489
  "> 1%",
490
490
  "IE 10"
491
491
  ],
492
- "gitHead": "baec68accebefa70b2f1234d757473e67a713ced"
492
+ "gitHead": "e9ec00ce31bcd08dc7f334f2f8c7672e133ed1a2"
493
493
  }