nzk-react-components 0.3.4 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/dist/components/DrawingTool/DrawingTool.d.ts +3 -0
  2. package/dist/components/DrawingTool/DrawingTool.js +72 -47
  3. package/dist/components/DrawingTool/DrawingTool.js.map +1 -1
  4. package/dist/components/DrawingTool/DrawingTool.styles.d.ts +1 -0
  5. package/dist/components/DrawingTool/DrawingTool.styles.js +5 -4
  6. package/dist/components/DrawingTool/DrawingTool.styles.js.map +1 -1
  7. package/dist/components/DrawingTool/DrawingToolProvider.d.ts +5 -4
  8. package/dist/components/DrawingTool/DrawingToolProvider.js +15 -10
  9. package/dist/components/DrawingTool/DrawingToolProvider.js.map +1 -1
  10. package/dist/components/DrawingTool/components/CropChoicePopup/CropChoicePopup.d.ts +8 -0
  11. package/dist/components/DrawingTool/components/CropChoicePopup/CropChoicePopup.js +27 -0
  12. package/dist/components/DrawingTool/components/CropChoicePopup/CropChoicePopup.js.map +1 -0
  13. package/dist/components/DrawingTool/components/CropChoicePopup/CropChoicePopup.styles.d.ts +5 -0
  14. package/dist/components/DrawingTool/components/CropChoicePopup/CropChoicePopup.styles.js +20 -0
  15. package/dist/components/DrawingTool/components/CropChoicePopup/CropChoicePopup.styles.js.map +1 -0
  16. package/dist/components/DrawingTool/components/CropChoicePopup/index.d.ts +2 -0
  17. package/dist/components/DrawingTool/components/CropChoicePopup/index.js +8 -0
  18. package/dist/components/DrawingTool/components/CropChoicePopup/index.js.map +1 -0
  19. package/dist/components/DrawingTool/components/Header/Header.js +2 -2
  20. package/dist/components/DrawingTool/components/ImageInputPopup/ImageInputPopup.d.ts +9 -0
  21. package/dist/components/DrawingTool/components/ImageInputPopup/ImageInputPopup.js +83 -0
  22. package/dist/components/DrawingTool/components/ImageInputPopup/ImageInputPopup.js.map +1 -0
  23. package/dist/components/DrawingTool/components/ImageInputPopup/ImageInputPopup.styles.d.ts +4 -0
  24. package/dist/components/DrawingTool/components/ImageInputPopup/ImageInputPopup.styles.js +22 -0
  25. package/dist/components/DrawingTool/components/ImageInputPopup/ImageInputPopup.styles.js.map +1 -0
  26. package/dist/components/DrawingTool/components/ImageInputPopup/index.d.ts +2 -0
  27. package/dist/components/DrawingTool/components/ImageInputPopup/index.js +8 -0
  28. package/dist/components/DrawingTool/components/ImageInputPopup/index.js.map +1 -0
  29. package/dist/components/DrawingTool/components/Loader.d.ts +19 -0
  30. package/dist/components/DrawingTool/components/Loader.js +35 -0
  31. package/dist/components/DrawingTool/components/Loader.js.map +1 -0
  32. package/dist/components/DrawingTool/components/MagicCropPopup/MagicCropPopup.d.ts +8 -0
  33. package/dist/components/DrawingTool/components/MagicCropPopup/MagicCropPopup.js +82 -0
  34. package/dist/components/DrawingTool/components/MagicCropPopup/MagicCropPopup.js.map +1 -0
  35. package/dist/components/DrawingTool/components/MagicCropPopup/MagicCropPopup.styles.d.ts +8 -0
  36. package/dist/components/DrawingTool/components/MagicCropPopup/MagicCropPopup.styles.js +26 -0
  37. package/dist/components/DrawingTool/components/MagicCropPopup/MagicCropPopup.styles.js.map +1 -0
  38. package/dist/components/DrawingTool/components/MagicCropPopup/index.d.ts +2 -0
  39. package/dist/components/DrawingTool/components/MagicCropPopup/index.js +8 -0
  40. package/dist/components/DrawingTool/components/MagicCropPopup/index.js.map +1 -0
  41. package/dist/components/DrawingTool/components/ManualCropPopup/ManualCropPopup.d.ts +7 -0
  42. package/dist/components/DrawingTool/components/ManualCropPopup/ManualCropPopup.js +25 -0
  43. package/dist/components/DrawingTool/components/ManualCropPopup/ManualCropPopup.js.map +1 -0
  44. package/dist/components/DrawingTool/components/ManualCropPopup/ManualCropPopup.styles.d.ts +4 -0
  45. package/dist/components/DrawingTool/components/ManualCropPopup/ManualCropPopup.styles.js +18 -0
  46. package/dist/components/DrawingTool/components/ManualCropPopup/ManualCropPopup.styles.js.map +1 -0
  47. package/dist/components/DrawingTool/components/ManualCropPopup/index.d.ts +2 -0
  48. package/dist/components/DrawingTool/components/ManualCropPopup/index.js +8 -0
  49. package/dist/components/DrawingTool/components/ManualCropPopup/index.js.map +1 -0
  50. package/dist/components/DrawingTool/components/Popup.d.ts +13 -0
  51. package/dist/components/DrawingTool/components/Popup.js +34 -0
  52. package/dist/components/DrawingTool/components/Popup.js.map +1 -0
  53. package/dist/components/DrawingTool/lib/Sketch.js +1 -4
  54. package/dist/components/DrawingTool/lib/Sketch.js.map +1 -1
  55. package/dist/hooks/useInterval.js +20 -0
  56. package/dist/hooks/useInterval.js.map +1 -0
  57. package/dist/index.d.ts +5 -1
  58. package/dist/index.js +8 -0
  59. package/dist/index.js.map +1 -1
  60. package/package.json +1 -1
@@ -9,6 +9,8 @@ export interface Props {
9
9
  minImageUploadSize?: number;
10
10
  disableAutoCache?: boolean;
11
11
  openUploadPopupOnStart?: boolean;
12
+ enableMagicCrop?: boolean;
13
+ magicCropUploadPreset?: string;
12
14
  cacheKey?: string;
13
15
  }
14
16
  export declare type Orientation = 'LANDSCAPE' | 'PORTRAIT';
@@ -24,6 +26,7 @@ declare const Drawing: {
24
26
  disableAutoCache: boolean;
25
27
  cacheKey: string;
26
28
  openUploadPopupOnStart: boolean;
29
+ enableMagicCrop: boolean;
27
30
  };
28
31
  };
29
32
  export default Drawing;
@@ -15,10 +15,14 @@ var IconButton = require('../IconButton/IconButton.js');
15
15
  var ColourToolbar = require('./components/ColourToolbar/ColourToolbar.js');
16
16
  var Modal = require('../Modal/Modal.js');
17
17
  var DrawingToolProvider = require('./DrawingToolProvider.js');
18
- var FileInput = require('./components/FileInput/FileInput.js');
18
+ var ImageInputPopup = require('./components/ImageInputPopup/ImageInputPopup.js');
19
19
  var index = require('./components/Placeable/index.js');
20
20
  var OpacityToggle = require('./components/OpacityToggle/OpacityToggle.js');
21
21
  var Header = require('./components/Header/Header.js');
22
+ var CropChoicePopup = require('./components/CropChoicePopup/CropChoicePopup.js');
23
+ var ManualCropPopup = require('./components/ManualCropPopup/ManualCropPopup.js');
24
+ var MagicCropPopup = require('./components/MagicCropPopup/MagicCropPopup.js');
25
+ var Loader = require('./components/Loader.js');
22
26
 
23
27
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
24
28
 
@@ -47,13 +51,14 @@ var Drawing = function (props) {
47
51
  var _g = React.useState(50), buttonSize = _g[0], setButtonSize = _g[1];
48
52
  var _h = React.useState(false), isMobile = _h[0], setIsMobile = _h[1];
49
53
  var _j = React.useState(true), resizing = _j[0], setResizing = _j[1];
50
- var _k = React.useState(false), showRestartConfirmModal = _k[0], setShowRestartConfirmModal = _k[1];
51
- var _l = React.useState(props.openUploadPopupOnStart), showFileInput = _l[0], setShowFileInput = _l[1];
52
- var _m = React.useState(), imageToCut = _m[0], setImageToCut = _m[1];
53
- var _o = React.useState(true), showCutTutorial = _o[0], setShowCutTutorial = _o[1];
54
- var _p = React.useState(false), showSaveCutAction = _p[0], setShowSaveCutAction = _p[1];
55
- var _q = React.useState(), imageToPlace = _q[0], setImageToPlace = _q[1];
56
- var _r = DrawingToolProvider.useDrawingTool(), initSketch = _r.initSketch, initSketchCut = _r.initSketchCut, exportSketchCut = _r.exportSketchCut, currentColour = _r.currentColour, brushSize = _r.brushSize, setBrushSize = _r.setBrushSize, brushType = _r.brushType, setBrushType = _r.setBrushType, undo = _r.undo, redo = _r.redo, restart = _r.restart, setCacheKey = _r.setCacheKey, setAutoCache = _r.setAutoCache, resetCut = _r.resetCut, mergeImage = _r.mergeImage, setToolMode = _r.setToolMode;
54
+ var _k = React.useState(false), showRestartConfirmPopup = _k[0], setShowRestartConfirmPopup = _k[1];
55
+ var _l = React.useState(props.openUploadPopupOnStart), showImageInputPopup = _l[0], setShowImageInputPopup = _l[1];
56
+ var _m = React.useState(false), showCropChoicePopup = _m[0], setShowCropChoicePopup = _m[1];
57
+ var _o = React.useState(false), showMagicCropPopup = _o[0], setShowMagicCropPopup = _o[1];
58
+ var _p = React.useState(false), showManualCropPopup = _p[0], setShowManualCropPopup = _p[1];
59
+ var _q = React.useState(false), showManualCropTool = _q[0], setShowManualCropTool = _q[1];
60
+ var _r = React.useState(false), showSaveCropAction = _r[0], setShowSaveCropAction = _r[1];
61
+ var _s = DrawingToolProvider.useDrawingTool(), initSketch = _s.initSketch, initSketchCut = _s.initSketchCut, sketchLoading = _s.sketchLoading, exportSketchCut = _s.exportSketchCut, currentColour = _s.currentColour, brushSize = _s.brushSize, setBrushSize = _s.setBrushSize, brushType = _s.brushType, setBrushType = _s.setBrushType, undo = _s.undo, redo = _s.redo, restart = _s.restart, setCacheKey = _s.setCacheKey, setAutoCache = _s.setAutoCache, resetCut = _s.resetCut, mergeImage = _s.mergeImage, imageToCrop = _s.imageToCrop, setImageToCrop = _s.setImageToCrop, imageToPlace = _s.imageToPlace, setImageToPlace = _s.setImageToPlace;
57
62
  React.useEffect(function () {
58
63
  if (typeof props.disableAutoCache === 'boolean') {
59
64
  setAutoCache(!props.disableAutoCache);
@@ -96,28 +101,22 @@ var Drawing = function (props) {
96
101
  }
97
102
  }, [containerWidth, containerHeight]);
98
103
  React.useEffect(function () {
99
- if (!imageToCut && !resizing && sketchInnerRef.current) {
104
+ if (!showManualCropTool && !resizing && sketchInnerRef.current) {
100
105
  initSketch(sketchInnerRef.current);
101
106
  }
102
- }, [resizing, sketchInnerRef, imageToCut]);
107
+ }, [resizing, sketchInnerRef, imageToCrop, showManualCropTool]);
103
108
  React.useEffect(function () {
104
- if (!resizing && sketchCutInnerRef.current && imageToCut) {
105
- initSketchCut(sketchCutInnerRef.current, imageToCut, function () {
106
- setShowSaveCutAction(true);
109
+ if (!resizing && sketchCutInnerRef.current && imageToCrop && showManualCropTool) {
110
+ initSketchCut(sketchCutInnerRef.current, imageToCrop, function () {
111
+ setShowSaveCropAction(true);
107
112
  });
108
113
  }
109
- }, [resizing, sketchCutInnerRef, imageToCut]);
114
+ }, [resizing, sketchCutInnerRef, imageToCrop, showManualCropTool]);
110
115
  var onClickRestart = function () {
111
- setShowRestartConfirmModal(true);
116
+ setShowRestartConfirmPopup(true);
112
117
  };
113
118
  var onClickCamera = function () {
114
- setShowFileInput(true);
115
- };
116
- var onImageUploaded = function (image) {
117
- setShowFileInput(false);
118
- setImageToCut(image);
119
- setShowCutTutorial(true);
120
- setToolMode("CUT");
119
+ setShowImageInputPopup(true);
121
120
  };
122
121
  var getImageToPlaceSize = function (img) {
123
122
  var ratio = 0.8;
@@ -156,26 +155,25 @@ var Drawing = function (props) {
156
155
  left: '0px'
157
156
  };
158
157
  }
159
- var disableToolbars = (showFileInput || showRestartConfirmModal || imageToCut || imageToPlace);
158
+ var disableToolbars = (showImageInputPopup || showRestartConfirmPopup || imageToCrop || imageToPlace);
160
159
  var inSketchActions = [];
161
- if (showSaveCutAction) {
160
+ if (showSaveCropAction) {
162
161
  inSketchActions.push({
163
162
  key: 'retry-cut',
164
163
  component: React__default['default'].createElement(IconButton, { icon: React__default['default'].createElement(Icon, { name: "drawing-tool-undo", fill: "white" }), theme: 'orange', size: isMobile ? "small" : "regular", onClick: function () {
165
- setShowSaveCutAction(false);
166
- setShowCutTutorial(true);
164
+ setShowSaveCropAction(false);
165
+ setShowManualCropPopup(true);
167
166
  resetCut();
168
167
  } }, "Retry")
169
168
  }, {
170
169
  key: 'save-cut',
171
170
  component: React__default['default'].createElement(IconButton, { icon: React__default['default'].createElement(Icon, { name: "tick" }), theme: 'confirm', size: isMobile ? "small" : "regular", onClick: function () {
172
- setShowSaveCutAction(false);
173
- setImageToCut(undefined);
171
+ setShowSaveCropAction(false);
172
+ setShowManualCropTool(false);
173
+ setImageToCrop(undefined);
174
174
  var newImage = new Image;
175
175
  newImage.onload = function () {
176
- setShowCutTutorial(true);
177
176
  setImageToPlace(newImage);
178
- setToolMode('PLACE');
179
177
  };
180
178
  newImage.src = exportSketchCut();
181
179
  } }, "Save")
@@ -186,7 +184,6 @@ var Drawing = function (props) {
186
184
  key: 'cancel-place',
187
185
  component: React__default['default'].createElement(IconButton, { icon: React__default['default'].createElement(Icon, { name: "close" }), theme: 'red', size: isMobile ? "small" : "regular", onClick: function () {
188
186
  setImageToPlace(undefined);
189
- setToolMode('DRAW');
190
187
  } }, "Cancel")
191
188
  }, {
192
189
  key: 'save-place',
@@ -202,7 +199,6 @@ var Drawing = function (props) {
202
199
  height: Math.hypot(rect.pos3[0] - rect.pos2[0], rect.pos3[1] - rect.pos2[1]),
203
200
  rotation: rect.rotation
204
201
  });
205
- setToolMode('DRAW');
206
202
  setImageToPlace(undefined);
207
203
  }
208
204
  } }, "Save")
@@ -243,36 +239,64 @@ var Drawing = function (props) {
243
239
  React__default['default'].createElement(Button, tslib.__assign({ height: buttonSize, round: true }, largeLineColourProps, { onClick: function () { return setBrushSize(DrawingToolProvider.BrushSize.large); } }),
244
240
  React__default['default'].createElement(Icon, { fill: brushSize === DrawingToolProvider.BrushSize.large ? 'white' : currentColour.hex, name: 'drawing-tool-large-line' })))),
245
241
  React__default['default'].createElement(DrawingTool_styles.SketchContainer, { orientation: orientation, ref: sketchOuterRef },
246
- props.showPaperBackground && React__default['default'].createElement(DrawingTool_styles.PaperBackground, { cutMode: imageToCut && true }),
247
- !imageToCut && sketchStyles && React__default['default'].createElement("div", { style: sketchStyles, ref: sketchInnerRef }),
248
- imageToCut && sketchStyles && React__default['default'].createElement("div", { style: sketchStyles, ref: sketchCutInnerRef }),
242
+ props.showPaperBackground && React__default['default'].createElement(DrawingTool_styles.PaperBackground, { cutMode: imageToCrop && true }),
243
+ !showManualCropTool && sketchStyles && React__default['default'].createElement("div", { style: sketchStyles, ref: sketchInnerRef }),
244
+ showManualCropTool && imageToCrop && sketchStyles && React__default['default'].createElement("div", { style: sketchStyles, ref: sketchCutInnerRef }),
249
245
  imageToPlace && sketchStyles && (React__default['default'].createElement("div", { style: tslib.__assign(tslib.__assign({}, sketchStyles), { zIndex: '101' }) },
250
246
  React__default['default'].createElement(DrawingTool_styles.ImageToPlaceContainer, null,
251
247
  React__default['default'].createElement(DrawingTool_styles.ImageToPlace, { size: getImageToPlaceSize(imageToPlace), ref: imageToPlaceContainerRef, src: imageToPlace.src })),
252
248
  React__default['default'].createElement(Moveable__default['default'], { ref: moveableRef, target: imageToPlaceContainerRef, ables: [index], props: {
253
249
  placeable: true,
254
250
  }, snappable: true, bounds: { left: 0, top: 0, bottom: (_a = sketchOuterRef.current) === null || _a === void 0 ? void 0 : _a.offsetHeight, right: (_b = sketchOuterRef.current) === null || _b === void 0 ? void 0 : _b.offsetWidth }, draggable: true, scalable: true, keepRatio: true, rotatable: true, onDragStart: helper.onDragStart, onDrag: helper.onDrag, onScaleStart: helper.onScaleStart, onScale: helper.onScale, onRotateStart: helper.onRotateStart, onRotate: helper.onRotate }))),
255
- inSketchActions.length && (React__default['default'].createElement(DrawingTool_styles.InSketchActions, null, inSketchActions.map(function (action) { return (React__default['default'].createElement(DrawingTool_styles.InSketchAction, { key: action.key }, action.component)); }))),
256
- imageToCut && showCutTutorial && React__default['default'].createElement(DrawingTool_styles.CutImageTutorial, { onClick: function () { return setShowCutTutorial(false); } },
257
- React__default['default'].createElement("div", null, "Now cut out your animal: Click, hold and make sure you draw around it."),
258
- React__default['default'].createElement("img", { alt: "crop example", src: "https://cdn.nightzookeeper.com/nzk-assets/crop-tutorial.png" }),
259
- React__default['default'].createElement("div", null,
260
- React__default['default'].createElement(Button, { size: isMobile ? "small" : "regular", theme: "primary" }, "Ok")))),
251
+ sketchLoading && React__default['default'].createElement(DrawingTool_styles.LoaderOverlay, null,
252
+ React__default['default'].createElement(Loader, { placeholder: "Loading drawing...", color: 'white' })),
253
+ inSketchActions.length && (React__default['default'].createElement(DrawingTool_styles.InSketchActions, null, inSketchActions.map(function (action) { return (React__default['default'].createElement(DrawingTool_styles.InSketchAction, { key: action.key }, action.component)); })))),
261
254
  React__default['default'].createElement(DrawingTool_styles.RightToolbarContainer, { orientation: orientation, buttonSize: buttonSize, disabled: disableToolbars },
262
255
  React__default['default'].createElement(ColourToolbar, { orientation: orientation, size: buttonSize, currentColour: currentColour }),
263
256
  React__default['default'].createElement(OpacityToggle, { orientation: orientation, buttonSize: buttonSize }))),
264
- showRestartConfirmModal && React__default['default'].createElement(DrawingTool_styles.ModalOverlay, null,
257
+ showRestartConfirmPopup && React__default['default'].createElement(DrawingTool_styles.ModalOverlay, null,
265
258
  React__default['default'].createElement(Modal, { title: "Are you sure?", actions: [
266
259
  React__default['default'].createElement(Button, { key: 'cancel', size: isMobile ? "small" : "regular", theme: "red", onClick: function () {
267
- setShowRestartConfirmModal(false);
260
+ setShowRestartConfirmPopup(false);
268
261
  } }, "No"),
269
262
  React__default['default'].createElement(Button, { key: 'confirm', size: isMobile ? "small" : "regular", theme: "confirm", onClick: function () {
270
263
  restart();
271
- setShowRestartConfirmModal(false);
264
+ setShowRestartConfirmPopup(false);
272
265
  } }, "Yes"),
273
266
  ] })),
274
- showFileInput && React__default['default'].createElement(DrawingTool_styles.ModalOverlay, null,
275
- React__default['default'].createElement(FileInput, { isMobile: isMobile, dismiss: function () { return setShowFileInput(false); }, onImageUploaded: onImageUploaded, minImageSize: props.minImageUploadSize })));
267
+ showImageInputPopup && React__default['default'].createElement(ImageInputPopup, { isMobile: isMobile, onDismiss: function () { return setShowImageInputPopup(false); }, minImageSize: props.minImageUploadSize, onImageSelected: function () {
268
+ setShowImageInputPopup(false);
269
+ if (props.enableMagicCrop) {
270
+ setShowCropChoicePopup(true);
271
+ }
272
+ else {
273
+ setShowManualCropTool(true);
274
+ setShowManualCropPopup(true);
275
+ }
276
+ } }),
277
+ showCropChoicePopup && React__default['default'].createElement(CropChoicePopup, { onDismiss: function () {
278
+ setShowCropChoicePopup(false);
279
+ setImageToCrop(undefined);
280
+ }, onMagicCrop: function () {
281
+ setShowCropChoicePopup(false);
282
+ setShowMagicCropPopup(true);
283
+ }, onManualCrop: function () {
284
+ setShowCropChoicePopup(false);
285
+ setShowManualCropPopup(true);
286
+ setShowManualCropTool(true);
287
+ } }),
288
+ showMagicCropPopup && props.magicCropUploadPreset && React__default['default'].createElement(MagicCropPopup, { cloudinaryUploadPreset: props.magicCropUploadPreset, onManual: function () {
289
+ setShowMagicCropPopup(false);
290
+ setShowManualCropPopup(true);
291
+ setShowManualCropTool(true);
292
+ }, onDismiss: function () {
293
+ setImageToCrop(undefined);
294
+ setShowMagicCropPopup(false);
295
+ } }),
296
+ showManualCropPopup && React__default['default'].createElement(ManualCropPopup, { onNext: function () { return setShowManualCropPopup(false); }, onDismiss: function () {
297
+ setShowManualCropPopup(false);
298
+ setImageToCrop(undefined);
299
+ } }));
276
300
  };
277
301
  Drawing.defaultProps = {
278
302
  prompt: 'Draw your Animal',
@@ -283,7 +307,8 @@ Drawing.defaultProps = {
283
307
  disableCameraUpload: false,
284
308
  disableAutoCache: false,
285
309
  cacheKey: 'nzk-sketch-cache',
286
- openUploadPopupOnStart: false
310
+ openUploadPopupOnStart: false,
311
+ enableMagicCrop: false
287
312
  };
288
313
 
289
314
  module.exports = Drawing;
@@ -1 +1 @@
1
- {"version":3,"file":"DrawingTool.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"DrawingTool.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -44,3 +44,4 @@ export declare const ImageToPlace: import("styled-components").StyledComponent<"
44
44
  };
45
45
  }, never>;
46
46
  export declare const CutImageTutorial: import("styled-components").StyledComponent<"div", any, {}, never>;
47
+ export declare const LoaderOverlay: import("styled-components").StyledComponent<"div", any, {}, never>;
@@ -32,20 +32,21 @@ var PaperBackground = styled__default['default'].div(templateObject_9 || (templa
32
32
  : '#ebebeb'; });
33
33
  var InSketchActions = styled__default['default'].div(templateObject_10 || (templateObject_10 = tslib.__makeTemplateObject(["\n position: absolute;\n width: 100%;\n bottom: 20px;\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 102;\n @media (max-width: 768px) {\n bottom: 10px;\n }\n @media (max-height: 500px) {\n bottom: 10px;\n }\n"], ["\n position: absolute;\n width: 100%;\n bottom: 20px;\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 102;\n @media (max-width: 768px) {\n bottom: 10px;\n }\n @media (max-height: 500px) {\n bottom: 10px;\n }\n"])));
34
34
  var InSketchAction = styled__default['default'].div(templateObject_11 || (templateObject_11 = tslib.__makeTemplateObject(["\n position: relative;\n margin-right: 20px;\n"], ["\n position: relative;\n margin-right: 20px;\n"])));
35
- var ModalOverlay = styled__default['default'].div(templateObject_12 || (templateObject_12 = tslib.__makeTemplateObject(["\n position: absolute;\n top: 0px;\n left: 0px;\n width: 100%;\n height: 100%;\n z-index: 100;\n display: flex;\n justify-content: center;\n align-items: center;\n"], ["\n position: absolute;\n top: 0px;\n left: 0px;\n width: 100%;\n height: 100%;\n z-index: 100;\n display: flex;\n justify-content: center;\n align-items: center;\n"])));
35
+ var ModalOverlay = styled__default['default'].div(templateObject_12 || (templateObject_12 = tslib.__makeTemplateObject(["\n position: fixed;\n top: 0px;\n left: 0px;\n width: 100%;\n height: 100%;\n z-index: 100;\n display: flex;\n justify-content: center;\n align-items: center;\n"], ["\n position: fixed;\n top: 0px;\n left: 0px;\n width: 100%;\n height: 100%;\n z-index: 100;\n display: flex;\n justify-content: center;\n align-items: center;\n"])));
36
36
  var ImageToPlaceContainer = styled__default['default'].div(templateObject_13 || (templateObject_13 = tslib.__makeTemplateObject(["\n position: absolute;\n left: 0;\n top: 0;\n z-index: 101;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n}"], ["\n position: absolute;\n left: 0;\n top: 0;\n z-index: 101;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n}"])));
37
37
  var ImageToPlace = styled__default['default'].img(templateObject_14 || (templateObject_14 = tslib.__makeTemplateObject(["\n position: absolute;\n width: ", "px;\n height: ", "px;\n}\n"], ["\n position: absolute;\n width: ", "px;\n height: ", "px;\n}\n"])), function (props) { return props.size.width; }, function (props) { return props.size.height; });
38
- var CutImageTutorial = styled__default['default'].div(templateObject_15 || (templateObject_15 = tslib.__makeTemplateObject(["\n position: absolute;\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n align-items: center;\n left: 50%;\n top: 50%;\n width: 90%;\n height: 90%;\n transform: translate(-50%, -50%);\n max-width: 800px;\n max-height: 600px;\n background-color: white;\n z-index: 101;\n border-radius: 50px;\n padding: 40px;\n background-color: #341644;\n box-shadow: 0 -5px 0 #531D75, 0 10px 0 #1C042B, 0 14px 0 rgba(0,0,0,0.3);\n box-sizing: border-box;\n color: white;\n font-size: 30px;\n text-align: center;\n\n @media (max-width: 960px) {\n font-size: 24px;\n }\n\n @media (max-width: 760px), (max-height: 600px) {\n font-size: 16px;\n width: 95%;\n padding: 30px;\n }\n\n img {\n width: 100%;\n max-width: 350px;\n @media (max-width: 960px) {\n max-width: 250px;\n }\n @media (max-width: 760px), (max-height: 600px) {\n max-width: 120px;\n }\n }\n > :last-child {\n width: 100%;\n display: flex;\n justify-content: center;\n }\n\n"], ["\n position: absolute;\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n align-items: center;\n left: 50%;\n top: 50%;\n width: 90%;\n height: 90%;\n transform: translate(-50%, -50%);\n max-width: 800px;\n max-height: 600px;\n background-color: white;\n z-index: 101;\n border-radius: 50px;\n padding: 40px;\n background-color: #341644;\n box-shadow: 0 -5px 0 #531D75, 0 10px 0 #1C042B, 0 14px 0 rgba(0,0,0,0.3);\n box-sizing: border-box;\n color: white;\n font-size: 30px;\n text-align: center;\n\n @media (max-width: 960px) {\n font-size: 24px;\n }\n\n @media (max-width: 760px), (max-height: 600px) {\n font-size: 16px;\n width: 95%;\n padding: 30px;\n }\n\n img {\n width: 100%;\n max-width: 350px;\n @media (max-width: 960px) {\n max-width: 250px;\n }\n @media (max-width: 760px), (max-height: 600px) {\n max-width: 120px;\n }\n }\n > :last-child {\n width: 100%;\n display: flex;\n justify-content: center;\n }\n\n"])));
39
- var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10, templateObject_11, templateObject_12, templateObject_13, templateObject_14, templateObject_15;
38
+ styled__default['default'].div(templateObject_15 || (templateObject_15 = tslib.__makeTemplateObject(["\n position: absolute;\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n align-items: center;\n left: 50%;\n top: 50%;\n width: 90%;\n height: 90%;\n transform: translate(-50%, -50%);\n max-width: 800px;\n max-height: 600px;\n background-color: white;\n z-index: 101;\n border-radius: 50px;\n padding: 40px;\n background-color: #341644;\n box-shadow: 0 -5px 0 #531D75, 0 10px 0 #1C042B, 0 14px 0 rgba(0,0,0,0.3);\n box-sizing: border-box;\n color: white;\n font-size: 30px;\n text-align: center;\n\n @media (max-width: 960px) {\n font-size: 24px;\n }\n\n @media (max-width: 760px), (max-height: 600px) {\n font-size: 16px;\n width: 95%;\n padding: 30px;\n }\n\n img {\n width: 100%;\n max-width: 350px;\n @media (max-width: 960px) {\n max-width: 250px;\n }\n @media (max-width: 760px), (max-height: 600px) {\n max-width: 120px;\n }\n }\n > :last-child {\n width: 100%;\n display: flex;\n justify-content: center;\n }\n"], ["\n position: absolute;\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n align-items: center;\n left: 50%;\n top: 50%;\n width: 90%;\n height: 90%;\n transform: translate(-50%, -50%);\n max-width: 800px;\n max-height: 600px;\n background-color: white;\n z-index: 101;\n border-radius: 50px;\n padding: 40px;\n background-color: #341644;\n box-shadow: 0 -5px 0 #531D75, 0 10px 0 #1C042B, 0 14px 0 rgba(0,0,0,0.3);\n box-sizing: border-box;\n color: white;\n font-size: 30px;\n text-align: center;\n\n @media (max-width: 960px) {\n font-size: 24px;\n }\n\n @media (max-width: 760px), (max-height: 600px) {\n font-size: 16px;\n width: 95%;\n padding: 30px;\n }\n\n img {\n width: 100%;\n max-width: 350px;\n @media (max-width: 960px) {\n max-width: 250px;\n }\n @media (max-width: 760px), (max-height: 600px) {\n max-width: 120px;\n }\n }\n > :last-child {\n width: 100%;\n display: flex;\n justify-content: center;\n }\n"])));
39
+ var LoaderOverlay = styled__default['default'].div(templateObject_16 || (templateObject_16 = tslib.__makeTemplateObject(["\n background-color: rgba(0,0,0,.5);\n width: 100%;\n height: 100%;\n position: absolute;\n top: 0px;\n left: 0px;\n display: flex;\n justify-content: center;\n align-items: center;\n text-align: center;\n z-index: 10;\n font-size: 24px;\n"], ["\n background-color: rgba(0,0,0,.5);\n width: 100%;\n height: 100%;\n position: absolute;\n top: 0px;\n left: 0px;\n display: flex;\n justify-content: center;\n align-items: center;\n text-align: center;\n z-index: 10;\n font-size: 24px;\n"])));
40
+ var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10, templateObject_11, templateObject_12, templateObject_13, templateObject_14, templateObject_15, templateObject_16;
40
41
 
41
42
  exports.ButtonGroup = ButtonGroup;
42
43
  exports.Container = Container;
43
- exports.CutImageTutorial = CutImageTutorial;
44
44
  exports.ImageToPlace = ImageToPlace;
45
45
  exports.ImageToPlaceContainer = ImageToPlaceContainer;
46
46
  exports.InSketchAction = InSketchAction;
47
47
  exports.InSketchActions = InSketchActions;
48
48
  exports.LeftToolbarContainer = LeftToolbarContainer;
49
+ exports.LoaderOverlay = LoaderOverlay;
49
50
  exports.ModalOverlay = ModalOverlay;
50
51
  exports.PaperBackground = PaperBackground;
51
52
  exports.RightToolbarContainer = RightToolbarContainer;
@@ -1 +1 @@
1
- {"version":3,"file":"DrawingTool.styles.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"DrawingTool.styles.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -14,7 +14,6 @@ export interface Colour {
14
14
  rgb: number[];
15
15
  hex: string;
16
16
  }
17
- declare type ToolMode = 'LOADING' | 'DRAW' | 'CUT' | 'PLACE';
18
17
  export interface Props {
19
18
  cache?: string;
20
19
  }
@@ -22,6 +21,7 @@ export declare const DrawingToolProvider: import("react").ComponentType<import("
22
21
  export declare const useDrawingTool: () => {
23
22
  initSketch: (containerEl: any) => void;
24
23
  initSketchCut: (containerEl: any, imageToCut: HTMLImageElement, onImageCut: () => void) => void;
24
+ sketchLoading: boolean;
25
25
  exportSketch: (options?: {
26
26
  crop: boolean;
27
27
  }) => string;
@@ -49,8 +49,9 @@ export declare const useDrawingTool: () => {
49
49
  clearCache: () => void;
50
50
  resetCut: () => void;
51
51
  mergeImage: (data: SketchActionMergeData) => void | null;
52
- setToolMode: import("react").Dispatch<import("react").SetStateAction<ToolMode>>;
53
- toolMode: ToolMode;
54
52
  exportCache: () => string | null;
53
+ imageToCrop: HTMLImageElement | undefined;
54
+ setImageToCrop: import("react").Dispatch<import("react").SetStateAction<HTMLImageElement | undefined>>;
55
+ imageToPlace: HTMLImageElement | undefined;
56
+ setImageToPlace: import("react").Dispatch<import("react").SetStateAction<HTMLImageElement | undefined>>;
55
57
  };
56
- export {};
@@ -34,11 +34,13 @@ var DrawingToolState = function (props) {
34
34
  var sketchCutRef = React.useRef();
35
35
  var _a = React.useState(true), autoCache = _a[0], setAutoCache = _a[1];
36
36
  var _b = React.useState('nzk-sketch-cache'), cacheKey = _b[0], setCacheKey = _b[1];
37
- var _c = React.useState(BrushSize.small), brushSize = _c[0], setBrushSize = _c[1];
38
- var _d = React.useState('line'), brushType = _d[0], setBrushType = _d[1];
39
- var _e = React.useState(Colours[0]), currentColour = _e[0], setCurrentColour = _e[1];
40
- var _f = React.useState(1), brushOpacity = _f[0], setBruchOpacity = _f[1];
41
- var _g = React.useState('LOADING'), toolMode = _g[0], setToolMode = _g[1];
37
+ var _c = React.useState(false), sketchLoading = _c[0], setSketchLoading = _c[1];
38
+ var _d = React.useState(BrushSize.small), brushSize = _d[0], setBrushSize = _d[1];
39
+ var _e = React.useState('line'), brushType = _e[0], setBrushType = _e[1];
40
+ var _f = React.useState(Colours[0]), currentColour = _f[0], setCurrentColour = _f[1];
41
+ var _g = React.useState(1), brushOpacity = _g[0], setBruchOpacity = _g[1];
42
+ var _h = React.useState(), imageToCrop = _h[0], setImageToCrop = _h[1];
43
+ var _j = React.useState(), imageToPlace = _j[0], setImageToPlace = _j[1];
42
44
  var setSketchRef = React.useCallback(function (node) {
43
45
  sketchRef.current = node;
44
46
  if (sketchRef.current) {
@@ -76,8 +78,8 @@ var DrawingToolState = function (props) {
76
78
  return (props && props.cache) || window.localStorage.getItem(cacheKey);
77
79
  };
78
80
  var initSketch = function (containerEl) {
79
- setToolMode('LOADING');
80
81
  var data;
82
+ setSketchLoading(true);
81
83
  if (sketchRef.current) {
82
84
  data = sketchRef.current.serialize();
83
85
  }
@@ -92,7 +94,7 @@ var DrawingToolState = function (props) {
92
94
  sketchData: data,
93
95
  onChange: onSketchChange,
94
96
  onReady: function () {
95
- setToolMode('DRAW');
97
+ setSketchLoading(false);
96
98
  }
97
99
  }));
98
100
  };
@@ -148,6 +150,7 @@ var DrawingToolState = function (props) {
148
150
  return {
149
151
  initSketch: initSketch,
150
152
  initSketchCut: initSketchCut,
153
+ sketchLoading: sketchLoading,
151
154
  exportSketch: exportSketch,
152
155
  exportSketchCut: exportSketchCut,
153
156
  currentColour: currentColour,
@@ -167,9 +170,11 @@ var DrawingToolState = function (props) {
167
170
  clearCache: clearCache,
168
171
  resetCut: resetCut,
169
172
  mergeImage: mergeImage,
170
- setToolMode: setToolMode,
171
- toolMode: toolMode,
172
- exportCache: exportCache
173
+ exportCache: exportCache,
174
+ imageToCrop: imageToCrop,
175
+ setImageToCrop: setImageToCrop,
176
+ imageToPlace: imageToPlace,
177
+ setImageToPlace: setImageToPlace
173
178
  };
174
179
  };
175
180
  var DrawingToolProviderContainer = unstatedNext.createContainer(DrawingToolState);
@@ -1 +1 @@
1
- {"version":3,"file":"DrawingToolProvider.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"DrawingToolProvider.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ interface Props {
3
+ onDismiss: () => void;
4
+ onManualCrop: () => void;
5
+ onMagicCrop: () => void;
6
+ }
7
+ declare const _default: (props: Props) => JSX.Element;
8
+ export default _default;
@@ -0,0 +1,27 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var CropChoicePopup_styles = require('./CropChoicePopup.styles.js');
5
+ var Button = require('../../../Button/Button.js');
6
+ var Popup = require('../Popup.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
+
12
+ var CropChoicePopup = (function (props) {
13
+ return React__default['default'].createElement(Popup['default'], { onDismiss: props.onDismiss },
14
+ React__default['default'].createElement(CropChoicePopup_styles.Title, null, "Cut-Out Your Drawing"),
15
+ React__default['default'].createElement(CropChoicePopup_styles.Container, null,
16
+ React__default['default'].createElement("div", null,
17
+ React__default['default'].createElement(CropChoicePopup_styles.Image, { src: "https://cdn.nightzookeeper.com/nzk-assets/auto-crop-tutorial.png" }),
18
+ React__default['default'].createElement(Button, { size: 'regular', theme: 'primary', onClick: props.onMagicCrop }, "Auto cut-out"),
19
+ React__default['default'].createElement("div", null, "Automatically removes the background.")),
20
+ React__default['default'].createElement("div", null,
21
+ React__default['default'].createElement(CropChoicePopup_styles.Image, { src: "https://cdn.nightzookeeper.com/nzk-assets/crop-tutorial.png" }),
22
+ React__default['default'].createElement(Button, { size: 'regular', theme: 'primary', onClick: props.onManualCrop }, "Manual cut-out"),
23
+ React__default['default'].createElement("div", null, "Drag round the drawing edge to cut it out."))));
24
+ });
25
+
26
+ module.exports = CropChoicePopup;
27
+ //# sourceMappingURL=CropChoicePopup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CropChoicePopup.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,5 @@
1
+ export declare const Container: import("styled-components").StyledComponent<"div", any, {}, never>;
2
+ export declare const Title: import("styled-components").StyledComponent<"div", any, {}, never>;
3
+ export declare const Image: import("styled-components").StyledComponent<"div", any, {
4
+ src: string;
5
+ }, never>;
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var tslib = require('tslib');
6
+ var styled = require('styled-components');
7
+
8
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
9
+
10
+ var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
11
+
12
+ var Container = styled__default['default'].div(templateObject_1 || (templateObject_1 = tslib.__makeTemplateObject(["\n position: relative;\n width: 100%;\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n align-items: center;\n @media (max-width: 700px) and (min-height: 400px) {\n flex-direction: column;\n }\n & > div {\n width: 50%;\n text-align: center;\n font-size: 24px;\n & > :last-child {\n max-width: 250px;\n margin-left: auto;\n margin-right: auto;\n margin-top: 10px;\n }\n @media (max-width: 700px) and (min-height: 400px) {\n width: 100%;\n }\n @media (max-width: 700px) and (max-height: 700px) {\n font-size: 18px;\n }\n }\n"], ["\n position: relative;\n width: 100%;\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n align-items: center;\n @media (max-width: 700px) and (min-height: 400px) {\n flex-direction: column;\n }\n & > div {\n width: 50%;\n text-align: center;\n font-size: 24px;\n & > :last-child {\n max-width: 250px;\n margin-left: auto;\n margin-right: auto;\n margin-top: 10px;\n }\n @media (max-width: 700px) and (min-height: 400px) {\n width: 100%;\n }\n @media (max-width: 700px) and (max-height: 700px) {\n font-size: 18px;\n }\n }\n"])));
13
+ var Title = styled__default['default'].div(templateObject_2 || (templateObject_2 = tslib.__makeTemplateObject(["\n font-size: 44px;\n font-family: 'Rammetto One';\n text-shadow: 0px 3px 0px #A6A6A6, 0px 6px 0px rgba(0,0,0, .5);\n margin-bottom: 20px;\n text-align: center;\n width: 100%;\n @media (max-width: 850px) and (max-height: 850px), (max-width: 700px) {\n font-size: 28px;\n text-shadow: 0px 2px 0px #A6A6A6, 0px 2px 0px rgba(0,0,0, .5);\n margin-bottom: 10px;\n }\n @media (max-width: 500px) {\n max-width: 250px;\n margin-left: auto;\n margin-right: auto;\n }\n"], ["\n font-size: 44px;\n font-family: 'Rammetto One';\n text-shadow: 0px 3px 0px #A6A6A6, 0px 6px 0px rgba(0,0,0, .5);\n margin-bottom: 20px;\n text-align: center;\n width: 100%;\n @media (max-width: 850px) and (max-height: 850px), (max-width: 700px) {\n font-size: 28px;\n text-shadow: 0px 2px 0px #A6A6A6, 0px 2px 0px rgba(0,0,0, .5);\n margin-bottom: 10px;\n }\n @media (max-width: 500px) {\n max-width: 250px;\n margin-left: auto;\n margin-right: auto;\n }\n"])));
14
+ var Image = styled__default['default'].div(templateObject_3 || (templateObject_3 = tslib.__makeTemplateObject(["\n position: relative;\n background-image: url(", ");\n background-position: center;\n background-size: contain;\n background-repeat: no-repeat;\n height: 250px;\n @media (max-width: 850px) and (max-height: 900px) {\n height: 200px;\n }\n @media (max-width: 815px) and (max-height: 900px) {\n height: 180px;\n }\n @media (max-width: 700px) and (max-height: 700px) {\n height: 120px;\n }\n"], ["\n position: relative;\n background-image: url(", ");\n background-position: center;\n background-size: contain;\n background-repeat: no-repeat;\n height: 250px;\n @media (max-width: 850px) and (max-height: 900px) {\n height: 200px;\n }\n @media (max-width: 815px) and (max-height: 900px) {\n height: 180px;\n }\n @media (max-width: 700px) and (max-height: 700px) {\n height: 120px;\n }\n"])), function (props) { return props.src; });
15
+ var templateObject_1, templateObject_2, templateObject_3;
16
+
17
+ exports.Container = Container;
18
+ exports.Image = Image;
19
+ exports.Title = Title;
20
+ //# sourceMappingURL=CropChoicePopup.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CropChoicePopup.styles.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,2 @@
1
+ import CropChoicePopup from "./CropChoicePopup";
2
+ export default CropChoicePopup;
@@ -0,0 +1,8 @@
1
+ 'use strict';
2
+
3
+ var CropChoicePopup = require('./CropChoicePopup.js');
4
+
5
+
6
+
7
+ module.exports = CropChoicePopup;
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -21,8 +21,8 @@ var getButtonSizeForHeight = function (height) {
21
21
  return 'regular';
22
22
  };
23
23
  var Header = (function (props) {
24
- var toolMode = DrawingToolProvider.useDrawingTool().toolMode;
25
- var disableButtons = toolMode !== 'DRAW';
24
+ var _a = DrawingToolProvider.useDrawingTool(), imageToCrop = _a.imageToCrop, imageToPlace = _a.imageToPlace;
25
+ var disableButtons = (imageToCrop || imageToPlace) && true;
26
26
  var onSave = function () {
27
27
  if (!disableButtons)
28
28
  props.onSave();
@@ -0,0 +1,9 @@
1
+ /// <reference types="react" />
2
+ export interface Props {
3
+ onDismiss?: () => void;
4
+ minImageSize?: number;
5
+ isMobile: boolean;
6
+ onImageSelected: () => void;
7
+ }
8
+ declare const _default: (props: Props) => JSX.Element;
9
+ export default _default;
@@ -0,0 +1,83 @@
1
+ 'use strict';
2
+
3
+ var tslib = require('tslib');
4
+ var React = require('react');
5
+ var reactDropzone = require('react-dropzone');
6
+ var ImageInputPopup_styles = require('./ImageInputPopup.styles.js');
7
+ var Button = require('../../../Button/Button.js');
8
+ var Popup = require('../Popup.js');
9
+ var DrawingToolProvider = require('../../DrawingToolProvider.js');
10
+
11
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
12
+
13
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
14
+
15
+ var bytesForHuman = function (bytes) {
16
+ var bytes$ = bytes;
17
+ var units = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];
18
+ var i = 0;
19
+ for (i; bytes$ > 1024; i += 1) {
20
+ bytes$ /= 1024;
21
+ }
22
+ return "" + parseFloat(bytes$.toFixed(1)) + units[i];
23
+ };
24
+ var ImageInputPopup = (function (props) {
25
+ function fileSizeValidator(file) {
26
+ var minSize = props.minImageSize || 1024 * 10;
27
+ if (file.size < minSize) {
28
+ return {
29
+ code: "image-to-small",
30
+ message: "This image is too small. Please pick an image over " + bytesForHuman(minSize)
31
+ };
32
+ }
33
+ return null;
34
+ }
35
+ var _a = reactDropzone.useDropzone({
36
+ accept: 'image/jpeg, image/png',
37
+ maxFiles: 1,
38
+ validator: fileSizeValidator
39
+ }), acceptedFiles = _a.acceptedFiles, fileRejections = _a.fileRejections, getRootProps = _a.getRootProps, getInputProps = _a.getInputProps, isDragActive = _a.isDragActive;
40
+ var setImageToCrop = DrawingToolProvider.useDrawingTool().setImageToCrop;
41
+ var _b = React.useState(true), supportDragAndDrop = _b[0], setSupportDragAndDrop = _b[1];
42
+ React.useEffect(function () {
43
+ if ('draggable' in document.createElement('span')) {
44
+ setSupportDragAndDrop(true);
45
+ }
46
+ else {
47
+ setSupportDragAndDrop(false);
48
+ }
49
+ }, []);
50
+ React.useEffect(function () {
51
+ if (acceptedFiles && acceptedFiles.length) {
52
+ var img_1 = new Image();
53
+ img_1.onload = function () {
54
+ setImageToCrop(img_1);
55
+ props.onImageSelected();
56
+ };
57
+ var reader = new FileReader();
58
+ reader.readAsDataURL(acceptedFiles[0]);
59
+ reader.onloadend = function (e) {
60
+ if (e.target) {
61
+ img_1.src = e.target.result;
62
+ }
63
+ };
64
+ }
65
+ }, [acceptedFiles]);
66
+ var ErrorMessage = fileRejections && fileRejections.length
67
+ ? React__default['default'].createElement(ImageInputPopup_styles.ErrorMessage, null, fileRejections[0].errors[0].message)
68
+ : null;
69
+ return React__default['default'].createElement(Popup['default'], { onDismiss: props.onDismiss },
70
+ React__default['default'].createElement(ImageInputPopup_styles.Container, tslib.__assign({}, getRootProps()),
71
+ React__default['default'].createElement("input", tslib.__assign({}, getInputProps())),
72
+ isDragActive
73
+ ? React__default['default'].createElement("p", null, "Drop your image here...")
74
+ : (React__default['default'].createElement(ImageInputPopup_styles.Instructions, null,
75
+ ErrorMessage,
76
+ React__default['default'].createElement("p", null, !supportDragAndDrop ? "Upload a drawing" : "Drag and drop a drawing here"),
77
+ supportDragAndDrop && React__default['default'].createElement("p", null, "Or"),
78
+ React__default['default'].createElement(Button, { theme: "primary", size: props.isMobile ? "small" : "regular" }, "Select Image"),
79
+ React__default['default'].createElement(ImageInputPopup_styles.Copyright, null, "Please do not upload copyrighted images.")))));
80
+ });
81
+
82
+ module.exports = ImageInputPopup;
83
+ //# sourceMappingURL=ImageInputPopup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageInputPopup.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,4 @@
1
+ export declare const Container: import("styled-components").StyledComponent<"div", any, {}, never>;
2
+ export declare const Instructions: import("styled-components").StyledComponent<"div", any, {}, never>;
3
+ export declare const Copyright: import("styled-components").StyledComponent<"div", any, {}, never>;
4
+ export declare const ErrorMessage: import("styled-components").StyledComponent<"div", any, {}, never>;
@@ -0,0 +1,22 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var tslib = require('tslib');
6
+ var styled = require('styled-components');
7
+
8
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
9
+
10
+ var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
11
+
12
+ var Container = styled__default['default'].div(templateObject_1 || (templateObject_1 = tslib.__makeTemplateObject(["\n min-height: 400px;\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: 24px;\n @media (max-width: 850px) and (max-height: 850px), (max-width: 700px) {\n min-height: 300px;\n height: 100%;\n }\n"], ["\n min-height: 400px;\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: 24px;\n @media (max-width: 850px) and (max-height: 850px), (max-width: 700px) {\n min-height: 300px;\n height: 100%;\n }\n"])));
13
+ var Instructions = styled__default['default'].div(templateObject_2 || (templateObject_2 = tslib.__makeTemplateObject(["\n text-align: center;\n"], ["\n text-align: center;\n"])));
14
+ var Copyright = styled__default['default'].div(templateObject_3 || (templateObject_3 = tslib.__makeTemplateObject(["\n margin-top: 20px;\n text-align: center;\n"], ["\n margin-top: 20px;\n text-align: center;\n"])));
15
+ var ErrorMessage = styled__default['default'].div(templateObject_4 || (templateObject_4 = tslib.__makeTemplateObject(["\n padding: 15px;\n border-radius: 10px;\n background-color: #E30514;\n color: white;\n"], ["\n padding: 15px;\n border-radius: 10px;\n background-color: #E30514;\n color: white;\n"])));
16
+ var templateObject_1, templateObject_2, templateObject_3, templateObject_4;
17
+
18
+ exports.Container = Container;
19
+ exports.Copyright = Copyright;
20
+ exports.ErrorMessage = ErrorMessage;
21
+ exports.Instructions = Instructions;
22
+ //# sourceMappingURL=ImageInputPopup.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageInputPopup.styles.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,2 @@
1
+ import ImageInputPopup from "./ImageInputPopup";
2
+ export default ImageInputPopup;
@@ -0,0 +1,8 @@
1
+ 'use strict';
2
+
3
+ var ImageInputPopup = require('./ImageInputPopup.js');
4
+
5
+
6
+
7
+ module.exports = ImageInputPopup;
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,19 @@
1
+ /// <reference types="react" />
2
+ export interface ILoaderProps {
3
+ bgColor?: string;
4
+ color?: string;
5
+ size?: number;
6
+ placeholder?: string;
7
+ minHeight?: number;
8
+ }
9
+ declare const Loader: {
10
+ (props: ILoaderProps): JSX.Element;
11
+ defaultProps: {
12
+ color: string;
13
+ size: number;
14
+ bgColor: null;
15
+ placeholder: null;
16
+ minHeight: null;
17
+ };
18
+ };
19
+ export default Loader;
@@ -0,0 +1,35 @@
1
+ 'use strict';
2
+
3
+ var tslib = require('tslib');
4
+ var React = require('react');
5
+ var styled = require('styled-components');
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
+ var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
11
+
12
+ var LoaderWrap = styled__default['default'].div(templateObject_1 || (templateObject_1 = tslib.__makeTemplateObject(["\n position: relative;\n color: ", ";\n width: 100%;\n min-height: ", "px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n\n z-index: 99991;\n animation: fadein 1s;\n @keyframes fadein {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n"], ["\n position: relative;\n color: ", ";\n width: 100%;\n min-height: ", "px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n\n z-index: 99991;\n animation: fadein 1s;\n @keyframes fadein {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n"])), function (props) { return props.color; }, function (props) { return props.minHeight; });
13
+ var LoaderAnimate = styled__default['default'].div(templateObject_2 || (templateObject_2 = tslib.__makeTemplateObject(["\n\tbackground: inherit;\n flex: 1;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n"], ["\n\tbackground: inherit;\n flex: 1;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n"])));
14
+ var StyledLoader = styled__default['default'].div(templateObject_3 || (templateObject_3 = tslib.__makeTemplateObject(["\n & > svg {\n display: inline-block;\n overflow: show;\n margin: auto;\n text-indent: -9999em;\n animation: spin 1.5s linear infinite;\n fill: ", ";\n height: ", "px;\n width: ", "px;\n @keyframes spin { 100% { -webkit-transform: rotate(360deg); transform:rotate(360deg); } }\n };\n"], ["\n & > svg {\n display: inline-block;\n overflow: show;\n margin: auto;\n text-indent: -9999em;\n animation: spin 1.5s linear infinite;\n fill: ", ";\n height: ", "px;\n width: ", "px;\n @keyframes spin { 100% { -webkit-transform: rotate(360deg); transform:rotate(360deg); } }\n };\n"])), function (props) { return props.color; }, function (props) { return props.size; }, function (props) { return props.size; });
15
+ var Placeholder = styled__default['default'].div(templateObject_4 || (templateObject_4 = tslib.__makeTemplateObject(["\n margin-top: 10px;\n"], ["\n margin-top: 10px;\n"])));
16
+ var Loader = function (props) {
17
+ var color = props.color, size = props.size, minHeight = props.minHeight, placeholder = props.placeholder;
18
+ return (React__default['default'].createElement(LoaderWrap, { color: color, minHeight: minHeight || size },
19
+ React__default['default'].createElement(LoaderAnimate, null,
20
+ React__default['default'].createElement(StyledLoader, { color: color, size: size },
21
+ React__default['default'].createElement("svg", { version: "1.1", id: "Layer_1", xmlns: "http://www.w3.org/2000/svg", xmlnsXlink: "http://www.w3.org/1999/xlink", x: "0px", y: "0px", viewBox: "0 0 64 64", xmlSpace: "preserve" },
22
+ React__default['default'].createElement("path", { d: "M32,0C14.4,0,0,14.4,0,32s14.3,32,32,32s32-14.3,32-32C64,14.4,49.6,0,32,0z M36.3,21.2L35,22.9c-0.9,1.2-2,2.5-3,3.6c-1-1.2-2-2.5-3-3.6l-1.4-1.7c-3.6-4.4-3.6-10.1-3.3-13.1c4.9-1.6,10.4-1.6,15.2,0C39.9,11.1,39.9,16.8,36.3,21.2z M17.7,11.3c0.1,4,1.2,9.4,4.9,14l1.4,1.7c1.3,1.6,2.6,3.1,3.8,4.7c-2.9,3.5-4.9,6.2-5.2,6.5c-3.9,4.8-4.8,10.3-4.9,14.4C10.9,48,6.8,40.3,6.8,32C6.9,23.7,10.9,16,17.7,11.3z M27.7,42.3L27.7,42.3c0.4-0.4,2.1-2.5,4.3-5.5c2.5,3.1,4.3,5.3,4.3,5.5c3.8,4.7,3.6,10.8,3.3,13.7c-4.9,1.6-10.3,1.6-15.2,0C24.1,53.1,23.8,47.1,27.7,42.3z M46.3,52.7c0-4.2-1-9.6-4.9-14.4v-0.1c-0.4-0.5-2.5-3.1-5.2-6.5c1.3-1.6,2.6-3.1,3.8-4.7l1.4-1.7c3.8-4.7,4.8-10,4.9-14c6.8,4.7,10.9,12.4,10.9,20.7C57.1,40.3,53.1,48,46.3,52.7z" })))),
23
+ placeholder && React__default['default'].createElement(Placeholder, null, placeholder)));
24
+ };
25
+ Loader.defaultProps = {
26
+ color: '#EC5E2E',
27
+ size: 70,
28
+ bgColor: null,
29
+ placeholder: null,
30
+ minHeight: null
31
+ };
32
+ var templateObject_1, templateObject_2, templateObject_3, templateObject_4;
33
+
34
+ module.exports = Loader;
35
+ //# sourceMappingURL=Loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Loader.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ export interface Props {
3
+ onDismiss: () => void;
4
+ onManual: () => void;
5
+ cloudinaryUploadPreset: string;
6
+ }
7
+ declare const _default: (props: Props) => JSX.Element;
8
+ export default _default;
@@ -0,0 +1,82 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var MagicCropPopup_styles = require('./MagicCropPopup.styles.js');
5
+ var Button = require('../../../Button/Button.js');
6
+ var index = require('../../../../hooks/useCloudinary/index.js');
7
+ var DrawingToolProvider = require('../../DrawingToolProvider.js');
8
+ var Loader = require('../Loader.js');
9
+ var Popup = require('../Popup.js');
10
+
11
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
12
+
13
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
14
+
15
+ function changeExt(fileName, newExt) {
16
+ var pos = fileName.includes(".") ? fileName.lastIndexOf(".") : fileName.length;
17
+ var fileRoot = fileName.substr(0, pos);
18
+ return fileRoot + "." + newExt;
19
+ }
20
+ var MagicCropPopup = (function (props) {
21
+ var uploadImage = index({
22
+ unsignedUploadPreset: props.cloudinaryUploadPreset
23
+ }).uploadImage;
24
+ var _a = DrawingToolProvider.useDrawingTool(), imageToCrop = _a.imageToCrop, setImageToCrop = _a.setImageToCrop, setImageToPlace = _a.setImageToPlace;
25
+ var _b = React.useState(), croppedImage = _b[0], setCroppedImage = _b[1];
26
+ var checkImageIsReady = function (imageUrl, size, retries) {
27
+ if (size === void 0) { size = 0; }
28
+ if (retries === void 0) { retries = 0; }
29
+ var img = new Image();
30
+ img.onload = function () {
31
+ fetch(img.src).then(function (resp) { return resp.blob(); }).then(function (blob) {
32
+ if (retries === 0 || size === blob.size) {
33
+ var delay = retries === 0 ? 10000 : 4000;
34
+ setTimeout(function () { return checkImageIsReady(imageUrl, blob.size, retries + 1); }, delay);
35
+ }
36
+ else {
37
+ var croppedImg_1 = new Image();
38
+ croppedImg_1.crossOrigin = "Anonymous";
39
+ croppedImg_1.onload = function () {
40
+ setCroppedImage(croppedImg_1);
41
+ };
42
+ croppedImg_1.src = changeExt(imageUrl.replace('/image/upload', '/image/upload/e_trim:10'), 'png');
43
+ }
44
+ });
45
+ };
46
+ img.crossOrigin = "Anonymous";
47
+ img.src = changeExt(imageUrl.replace('/image/upload', '/image/upload/w_150'), 'png') + "?" + Date.now();
48
+ };
49
+ React.useEffect(function () {
50
+ if (imageToCrop) {
51
+ uploadImage(imageToCrop.src, checkImageIsReady);
52
+ }
53
+ }, []);
54
+ var onNext = function () {
55
+ if (!croppedImage)
56
+ return;
57
+ setImageToCrop(undefined);
58
+ setImageToPlace(croppedImage);
59
+ props.onDismiss();
60
+ };
61
+ return React__default['default'].createElement(Popup['default'], { onDismiss: props.onDismiss },
62
+ React__default['default'].createElement(MagicCropPopup_styles.Title, null, "Your Drawing"),
63
+ React__default['default'].createElement(MagicCropPopup_styles.Container, null,
64
+ React__default['default'].createElement(MagicCropPopup_styles.DrawingContainer, null, croppedImage
65
+ ? React__default['default'].createElement(MagicCropPopup_styles.Image, { src: croppedImage.src })
66
+ : React__default['default'].createElement("div", null,
67
+ React__default['default'].createElement(Loader, { color: "#fff" }),
68
+ React__default['default'].createElement("br", null),
69
+ "Processing your image.",
70
+ React__default['default'].createElement("br", null),
71
+ "This can take a couple of minutes.")),
72
+ React__default['default'].createElement(MagicCropPopup_styles.Text, null,
73
+ "Select next to make final edits.",
74
+ React__default['default'].createElement("br", null),
75
+ "Not happy? Try manual cut-out instead.")),
76
+ React__default['default'].createElement(MagicCropPopup_styles.Actions, null,
77
+ React__default['default'].createElement(Button, { size: 'regular', theme: 'primary', onClick: props.onManual }, "Manual cut-out"),
78
+ React__default['default'].createElement(Button, { size: 'regular', theme: 'confirm', disabled: !croppedImage, onClick: onNext }, "Next")));
79
+ });
80
+
81
+ module.exports = MagicCropPopup;
82
+ //# sourceMappingURL=MagicCropPopup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MagicCropPopup.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,8 @@
1
+ export declare const Title: import("styled-components").StyledComponent<"div", any, {}, never>;
2
+ export declare const Container: import("styled-components").StyledComponent<"div", any, {}, never>;
3
+ export declare const DrawingContainer: import("styled-components").StyledComponent<"div", any, {}, never>;
4
+ export declare const Text: import("styled-components").StyledComponent<"div", any, {}, never>;
5
+ export declare const Image: import("styled-components").StyledComponent<"div", any, {
6
+ src: string;
7
+ }, never>;
8
+ export declare const Actions: import("styled-components").StyledComponent<"div", any, {}, never>;
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var tslib = require('tslib');
6
+ var styled = require('styled-components');
7
+
8
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
9
+
10
+ var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
11
+
12
+ var Title = styled__default['default'].div(templateObject_1 || (templateObject_1 = tslib.__makeTemplateObject(["\n font-size: 60px;\n font-family: 'Rammetto One';\n text-shadow: 0px 4px 0px #A6A6A6, 0px 8px 0px rgba(0,0,0, .5);\n margin-bottom: 20px;\n text-align: center;\n width: 100%;\n max-width: 600px;\n margin-left: auto;\n margin-right: auto;\n @media (max-width: 850px) and (max-height: 850px), (max-width: 700px) {\n font-size: 32px;\n text-shadow: 0px 2px 0px #A6A6A6, 0px 2px 0px rgba(0,0,0, .5);\n }\n"], ["\n font-size: 60px;\n font-family: 'Rammetto One';\n text-shadow: 0px 4px 0px #A6A6A6, 0px 8px 0px rgba(0,0,0, .5);\n margin-bottom: 20px;\n text-align: center;\n width: 100%;\n max-width: 600px;\n margin-left: auto;\n margin-right: auto;\n @media (max-width: 850px) and (max-height: 850px), (max-width: 700px) {\n font-size: 32px;\n text-shadow: 0px 2px 0px #A6A6A6, 0px 2px 0px rgba(0,0,0, .5);\n }\n"])));
13
+ var Container = styled__default['default'].div(templateObject_2 || (templateObject_2 = tslib.__makeTemplateObject(["\n width: 100%;\n max-width: 600px;\n margin-left: auto;\n margin-right: auto;\n display: flex;\n justify-content: center;\n align-items: center;\n flex-wrap: wrap;\n margin-bottom: 20px;\n font-size: 24px;\n @media (max-height: 650px) {\n font-size: 20px;\n }\n @media (max-height: 370px) {\n font-size: 16px;\n }\n"], ["\n width: 100%;\n max-width: 600px;\n margin-left: auto;\n margin-right: auto;\n display: flex;\n justify-content: center;\n align-items: center;\n flex-wrap: wrap;\n margin-bottom: 20px;\n font-size: 24px;\n @media (max-height: 650px) {\n font-size: 20px;\n }\n @media (max-height: 370px) {\n font-size: 16px;\n }\n"])));
14
+ var DrawingContainer = styled__default['default'].div(templateObject_3 || (templateObject_3 = tslib.__makeTemplateObject(["\n position: relative;\n padding: 20px;\n border-radius: 50px;\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 350px;\n background-color: #701EA8;\n color: white;\n text-align: center;\n margin-bottom: 20px;\n @media (max-height: 750px) {\n height: 300px;\n }\n @media (max-height: 650px) {\n width: 50%;\n margin-bottom: 0px;\n padding: 10px;\n height: 220px;\n }\n @media (max-width: 400px) {\n height: 250px;\n padding: 10px;\n }\n @media (max-height: 450px) {\n height: 200px;\n }\n @media (max-height: 370px) {\n height: 150px;\n }\n"], ["\n position: relative;\n padding: 20px;\n border-radius: 50px;\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 350px;\n background-color: #701EA8;\n color: white;\n text-align: center;\n margin-bottom: 20px;\n @media (max-height: 750px) {\n height: 300px;\n }\n @media (max-height: 650px) {\n width: 50%;\n margin-bottom: 0px;\n padding: 10px;\n height: 220px;\n }\n @media (max-width: 400px) {\n height: 250px;\n padding: 10px;\n }\n @media (max-height: 450px) {\n height: 200px;\n }\n @media (max-height: 370px) {\n height: 150px;\n }\n"])));
15
+ var Text = styled__default['default'].div(templateObject_4 || (templateObject_4 = tslib.__makeTemplateObject(["\n color: white;\n width: 100%;\n text-align: center;\n @media (max-height: 650px) {\n width: 50%;\n padding-left: 40px;\n }\n @media (max-height: 370px) {\n padding-left: 20px;\n }\n"], ["\n color: white;\n width: 100%;\n text-align: center;\n @media (max-height: 650px) {\n width: 50%;\n padding-left: 40px;\n }\n @media (max-height: 370px) {\n padding-left: 20px;\n }\n"])));
16
+ var Image = styled__default['default'].div(templateObject_5 || (templateObject_5 = tslib.__makeTemplateObject(["\n position: relative;\n background-image: url(", ");\n background-position: center;\n background-size: contain;\n background-repeat: no-repeat;\n width: 100%;\n height: 100%;\n"], ["\n position: relative;\n background-image: url(", ");\n background-position: center;\n background-size: contain;\n background-repeat: no-repeat;\n width: 100%;\n height: 100%;\n"])), function (props) { return props.src; });
17
+ var Actions = styled__default['default'].div(templateObject_6 || (templateObject_6 = tslib.__makeTemplateObject(["\n position: relative;\n display: flex;\n justify-content: space-between;\n width: 100%;\n max-width: 600px;\n margin-left: auto;\n margin-right: auto;\n"], ["\n position: relative;\n display: flex;\n justify-content: space-between;\n width: 100%;\n max-width: 600px;\n margin-left: auto;\n margin-right: auto;\n"])));
18
+ var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6;
19
+
20
+ exports.Actions = Actions;
21
+ exports.Container = Container;
22
+ exports.DrawingContainer = DrawingContainer;
23
+ exports.Image = Image;
24
+ exports.Text = Text;
25
+ exports.Title = Title;
26
+ //# sourceMappingURL=MagicCropPopup.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MagicCropPopup.styles.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,2 @@
1
+ import MagicCropPopup from "./MagicCropPopup";
2
+ export default MagicCropPopup;
@@ -0,0 +1,8 @@
1
+ 'use strict';
2
+
3
+ var MagicCropPopup = require('./MagicCropPopup.js');
4
+
5
+
6
+
7
+ module.exports = MagicCropPopup;
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ interface Props {
3
+ onDismiss: () => void;
4
+ onNext: () => void;
5
+ }
6
+ declare const _default: (props: Props) => JSX.Element;
7
+ export default _default;
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var ManualCropPopup_styles = require('./ManualCropPopup.styles.js');
5
+ var Button = require('../../../Button/Button.js');
6
+ var Popup = require('../Popup.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
+
12
+ var ManualCropPopup = (function (props) {
13
+ return React__default['default'].createElement(Popup['default'], { onDismiss: props.onDismiss },
14
+ React__default['default'].createElement(ManualCropPopup_styles.Container, null,
15
+ React__default['default'].createElement("div", null,
16
+ "Cut out your animal.",
17
+ React__default['default'].createElement("br", null),
18
+ "Click, hold and make sure you draw around it."),
19
+ React__default['default'].createElement(ManualCropPopup_styles.Image, { src: "https://cdn.nightzookeeper.com/nzk-assets/crop-tutorial.png" }),
20
+ React__default['default'].createElement("div", null,
21
+ React__default['default'].createElement(Button, { size: 'regular', theme: "primary", onClick: props.onNext }, "Ok"))));
22
+ });
23
+
24
+ module.exports = ManualCropPopup;
25
+ //# sourceMappingURL=ManualCropPopup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ManualCropPopup.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,4 @@
1
+ export declare const Container: import("styled-components").StyledComponent<"div", any, {}, never>;
2
+ export declare const Image: import("styled-components").StyledComponent<"div", any, {
3
+ src: string;
4
+ }, never>;
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var tslib = require('tslib');
6
+ var styled = require('styled-components');
7
+
8
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
9
+
10
+ var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
11
+
12
+ var Container = styled__default['default'].div(templateObject_1 || (templateObject_1 = tslib.__makeTemplateObject(["\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n flex-wrap: wrap;\n font-size: 24px;\n text-align: center;\n > :last-child {\n width: 100%;\n display: flex;\n justify-content: center;\n }\n"], ["\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n flex-wrap: wrap;\n font-size: 24px;\n text-align: center;\n > :last-child {\n width: 100%;\n display: flex;\n justify-content: center;\n }\n"])));
13
+ var Image = styled__default['default'].div(templateObject_2 || (templateObject_2 = tslib.__makeTemplateObject(["\n width: 100%;\n height: 250px;\n background-image: url(", ");\n background-size: contain;\n background-position: center;\n background-repeat: no-repeat;\n @media (max-height: 400px) {\n height: 170px;\n }\n"], ["\n width: 100%;\n height: 250px;\n background-image: url(", ");\n background-size: contain;\n background-position: center;\n background-repeat: no-repeat;\n @media (max-height: 400px) {\n height: 170px;\n }\n"])), function (props) { return props.src; });
14
+ var templateObject_1, templateObject_2;
15
+
16
+ exports.Container = Container;
17
+ exports.Image = Image;
18
+ //# sourceMappingURL=ManualCropPopup.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ManualCropPopup.styles.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,2 @@
1
+ import ManualCropPopup from './ManualCropPopup';
2
+ export default ManualCropPopup;
@@ -0,0 +1,8 @@
1
+ 'use strict';
2
+
3
+ var ManualCropPopup = require('./ManualCropPopup.js');
4
+
5
+
6
+
7
+ module.exports = ManualCropPopup;
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ export declare const QuitButton: import("styled-components").StyledComponent<"div", any, {}, never>;
3
+ interface Props {
4
+ children: React.ReactNode;
5
+ onDismiss?: undefined | (() => void);
6
+ }
7
+ declare const Popup: {
8
+ (props: Props): JSX.Element;
9
+ defaultProps: {
10
+ onDismiss: undefined;
11
+ };
12
+ };
13
+ export default Popup;
@@ -0,0 +1,34 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var tslib = require('tslib');
6
+ var React = require('react');
7
+ var styled = require('styled-components');
8
+ var Button = require('../../Button/Button.js');
9
+ var Icon = require('../../Icon/Icon.js');
10
+
11
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
12
+
13
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
14
+ var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
15
+
16
+ var Overlay = styled__default['default'].div(templateObject_1 || (templateObject_1 = tslib.__makeTemplateObject(["\n position: fixed;\n top: 0px;\n left: 0px;\n width: 100%;\n height: 100%;\n z-index: 100;\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: rgba(0,0,0, .4);\n"], ["\n position: fixed;\n top: 0px;\n left: 0px;\n width: 100%;\n height: 100%;\n z-index: 100;\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: rgba(0,0,0, .4);\n"])));
17
+ var Container = styled__default['default'].div(templateObject_2 || (templateObject_2 = tslib.__makeTemplateObject(["\n position: relative;\n width: 90%;\n max-width: 900px;\n border-radius: 50px;\n padding: 40px;\n background-color: #341644;\n box-shadow: 0 -5px 0 #531D75, 0 10px 0 #1C042B, 0 14px 0 rgba(0,0,0,0.3);\n color: white;\n * {\n box-sizing: border-box;\n }\n @media (max-width: 850px) and (max-height: 850px), (max-width: 700px) {\n width: 100%;\n height: 100%;\n border-radius: 0px;\n box-shadow: none;\n padding: 20px;\n }\n"], ["\n position: relative;\n width: 90%;\n max-width: 900px;\n border-radius: 50px;\n padding: 40px;\n background-color: #341644;\n box-shadow: 0 -5px 0 #531D75, 0 10px 0 #1C042B, 0 14px 0 rgba(0,0,0,0.3);\n color: white;\n * {\n box-sizing: border-box;\n }\n @media (max-width: 850px) and (max-height: 850px), (max-width: 700px) {\n width: 100%;\n height: 100%;\n border-radius: 0px;\n box-shadow: none;\n padding: 20px;\n }\n"])));
18
+ var QuitButton = styled__default['default'].div(templateObject_3 || (templateObject_3 = tslib.__makeTemplateObject(["\n position: absolute;\n top: -15px;\n right: -15px;\n @media (max-width: 850px) and (max-height: 850px), (max-width: 700px) {\n top: 15px;\n right: 15px;\n }\n"], ["\n position: absolute;\n top: -15px;\n right: -15px;\n @media (max-width: 850px) and (max-height: 850px), (max-width: 700px) {\n top: 15px;\n right: 15px;\n }\n"])));
19
+ var Popup = function (props) {
20
+ return React__default['default'].createElement(Overlay, null,
21
+ React__default['default'].createElement(Container, null,
22
+ props.onDismiss && React__default['default'].createElement(QuitButton, { onClick: props.onDismiss },
23
+ React__default['default'].createElement(Button, { size: "regular", round: true, theme: 'red' },
24
+ React__default['default'].createElement(Icon, { name: 'close' }))),
25
+ props.children));
26
+ };
27
+ Popup.defaultProps = {
28
+ onDismiss: undefined
29
+ };
30
+ var templateObject_1, templateObject_2, templateObject_3;
31
+
32
+ exports.QuitButton = QuitButton;
33
+ exports['default'] = Popup;
34
+ //# sourceMappingURL=Popup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Popup.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -124,6 +124,7 @@ var Sketch = (function () {
124
124
  }
125
125
  else if (data.imageSrc) {
126
126
  var img_1 = new Image;
127
+ img_1.crossOrigin = "Anonymous";
127
128
  img_1.onload = function () { doMerge(img_1); };
128
129
  img_1.src = data.imageSrc;
129
130
  }
@@ -141,15 +142,11 @@ var Sketch = (function () {
141
142
  return;
142
143
  this.model.lastActionIndex -= 1;
143
144
  this.drawingLayer.clear();
144
- console.log('Last action Index before undo', this.model.lastActionIndex);
145
145
  for (var i = 0; i <= this.model.lastActionIndex; i += 1) {
146
- console.log('I=', i);
147
146
  if (this.model.actions[i].type === 'STROKE' && this.model.actions[i].model) {
148
- console.log('draw stroke');
149
147
  this.drawUndoStroke(this.model.actions[i].model);
150
148
  }
151
149
  else if (this.model.actions[i].type === 'IMAGE_MERGE' && this.model.actions[i]) {
152
- console.log('merge image');
153
150
  this.mergeImage(this.model.actions[i].data, false);
154
151
  }
155
152
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Sketch.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Sketch.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+
5
+ function useInterval(callback, delay) {
6
+ var savedCallback = React.useRef(callback);
7
+ React.useLayoutEffect(function () {
8
+ savedCallback.current = callback;
9
+ }, [callback]);
10
+ React.useEffect(function () {
11
+ if (!delay) {
12
+ return;
13
+ }
14
+ var id = setInterval(function () { return savedCallback.current(); }, delay);
15
+ return function () { return clearInterval(id); };
16
+ }, [delay]);
17
+ }
18
+
19
+ module.exports = useInterval;
20
+ //# sourceMappingURL=useInterval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInterval.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}
package/dist/index.d.ts CHANGED
@@ -8,6 +8,10 @@ import useAsync from './hooks/useAsync';
8
8
  import useConfettis from './hooks/useConfettis';
9
9
  import useMountState from './hooks/useMountState';
10
10
  import useCloudinary from './hooks/useCloudinary';
11
+ import useInterval from './hooks/useInterval';
12
+ import useEventListener from './hooks/useEventListener';
13
+ import useElementSize from './hooks/useElementSize';
14
+ import useDebounce from './hooks/useDebounce';
11
15
  import DrawingTool from './components/DrawingTool/DrawingTool';
12
16
  import { DrawingToolProvider, useDrawingTool } from './components/DrawingTool/DrawingToolProvider';
13
- export { Button, IconButton, Modal, Icon, Avatar, ModalProvider, DrawingTool, DrawingToolProvider, useDrawingTool, useModalState, useAsync, useMountState, useConfettis, useCloudinary };
17
+ export { Button, IconButton, Modal, Icon, Avatar, ModalProvider, DrawingTool, DrawingToolProvider, useDrawingTool, useModalState, useAsync, useMountState, useConfettis, useCloudinary, useInterval, useElementSize, useEventListener, useDebounce };
package/dist/index.js CHANGED
@@ -12,6 +12,10 @@ var useAsync = require('./hooks/useAsync.js');
12
12
  var index = require('./hooks/useConfettis/index.js');
13
13
  var useMountState = require('./hooks/useMountState.js');
14
14
  var index$1 = require('./hooks/useCloudinary/index.js');
15
+ var useInterval = require('./hooks/useInterval.js');
16
+ var useEventListener = require('./hooks/useEventListener.js');
17
+ var useElementSize = require('./hooks/useElementSize.js');
18
+ var useDebounce = require('./hooks/useDebounce.js');
15
19
  var DrawingTool = require('./components/DrawingTool/DrawingTool.js');
16
20
  var DrawingToolProvider = require('./components/DrawingTool/DrawingToolProvider.js');
17
21
 
@@ -28,6 +32,10 @@ exports.useAsync = useAsync;
28
32
  exports.useConfettis = index;
29
33
  exports.useMountState = useMountState;
30
34
  exports.useCloudinary = index$1;
35
+ exports.useInterval = useInterval;
36
+ exports.useEventListener = useEventListener;
37
+ exports.useElementSize = useElementSize;
38
+ exports.useDebounce = useDebounce;
31
39
  exports.DrawingTool = DrawingTool;
32
40
  exports.DrawingToolProvider = DrawingToolProvider.DrawingToolProvider;
33
41
  exports.useDrawingTool = DrawingToolProvider.useDrawingTool;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nzk-react-components",
3
- "version": "0.3.4",
3
+ "version": "0.3.5",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "files": [