@arbisoft/react-design-tool 1.0.28 → 1.0.30

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.
package/dist/esm/index.js CHANGED
@@ -567,6 +567,8 @@ var IconUnlock = "data:image/svg+xml,%3Csvg%20width%3D%2217%22%20height%3D%2216%
567
567
 
568
568
  var IconCross = "data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%2024%2024%22%20xml%3Aspace%3D%22preserve%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20enable-background%3D%22new%200%200%2024%2024%22%3E%3Cpath%20d%3D%22M5.3%2018.7c.2.2.4.3.7.3s.5-.1.7-.3l5.3-5.3%205.3%205.3c.2.2.5.3.7.3s.5-.1.7-.3c.4-.4.4-1%200-1.4L13.4%2012l5.3-5.3c.4-.4.4-1%200-1.4s-1-.4-1.4%200L12%2010.6%206.7%205.3c-.4-.4-1-.4-1.4%200s-.4%201%200%201.4l5.3%205.3-5.3%205.3c-.4.4-.4%201%200%201.4z%22%20id%3D%22_icons%22%20fill%3D%22%23ffffff%22%20class%3D%22fill-000000%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E";
569
569
 
570
+ var IconRoundedCorner = "data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20enable-background%3D%22new%200%200%2024%2024%22%20height%3D%2224px%22%20viewBox%3D%220%200%2024%2024%22%20width%3D%2224px%22%20fill%3D%22%234D6277%22%3E%3Cg%3E%3Crect%20fill%3D%22none%22%20height%3D%2224%22%20width%3D%2224%22%2F%3E%3C%2Fg%3E%3Cg%3E%3Cg%3E%3Cg%3E%3Cpath%20d%3D%22M19%2C19h2v2h-2V19z%20M19%2C17h2v-2h-2V17z%20M3%2C13h2v-2H3V13z%20M3%2C17h2v-2H3V17z%20M3%2C9h2V7H3V9z%20M3%2C5h2V3H3V5z%20M7%2C5h2V3H7V5z%20M15%2C21h2v-2h-2V21z%20M11%2C21h2v-2h-2V21z%20M15%2C21h2v-2h-2V21z%20M7%2C21h2v-2H7V21z%20M3%2C21h2v-2H3V21z%20M21%2C8c0-2.76-2.24-5-5-5h-5v2h5%20c1.65%2C0%2C3%2C1.35%2C3%2C3v5h2V8z%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E";
571
+
570
572
  var EditorBg = "/images/small-dots.png";
571
573
 
572
574
  var topTabBarpadding = '11.51px 14.16px';
@@ -2534,7 +2536,8 @@ var OpacityPicker = function OpacityPicker(_ref) {
2534
2536
  _ref$tooltip = _ref.tooltip,
2535
2537
  tooltip = _ref$tooltip === void 0 ? TEXT_DICTIONARY === null || TEXT_DICTIONARY === void 0 || (_TEXT_DICTIONARY$lang = TEXT_DICTIONARY[languageLocale]) === null || _TEXT_DICTIONARY$lang === void 0 ? void 0 : _TEXT_DICTIONARY$lang.OPACITY : _ref$tooltip,
2536
2538
  _ref$tooltipPosition = _ref.tooltipPosition,
2537
- tooltipPosition = _ref$tooltipPosition === void 0 ? 'bottom' : _ref$tooltipPosition;
2539
+ tooltipPosition = _ref$tooltipPosition === void 0 ? 'bottom' : _ref$tooltipPosition,
2540
+ toolBarIcon = _ref.toolBarIcon;
2538
2541
  var pickerRef = useRef(null);
2539
2542
  var _useState = useState(false),
2540
2543
  _useState2 = _slicedToArray(_useState, 2),
@@ -2564,10 +2567,10 @@ var OpacityPicker = function OpacityPicker(_ref) {
2564
2567
  tooltip: tooltip,
2565
2568
  tooltipPosition: tooltipPosition
2566
2569
  }, showLeftChild && (leftChild ? leftChild : /*#__PURE__*/React.createElement(StyledImage, {
2567
- src: IconOpacity
2570
+ src: varient === 'opacity' ? IconOpacity : toolBarIcon
2568
2571
  })), /*#__PURE__*/React.createElement(StyledText, {
2569
2572
  fontFamily: fontFamily
2570
- }, varient === 'opacity' ? "".concat(value * 100, "%") : Math.round(value)), rightChild && rightChild), opacityPickerVisible && /*#__PURE__*/React.createElement("div", {
2573
+ }, varient === 'opacity' ? "".concat(value * 100, "%") : "".concat(Math.round(value), "px")), rightChild && rightChild), opacityPickerVisible && /*#__PURE__*/React.createElement("div", {
2571
2574
  style: {
2572
2575
  position: 'absolute',
2573
2576
  bottom: -50,
@@ -2753,7 +2756,11 @@ var TemplateToolBar = function TemplateToolBar(_ref) {
2753
2756
  cuttingGuideStrokeColor = _ref.cuttingGuideStrokeColor,
2754
2757
  onChangeCuttingGuideProp = _ref.onChangeCuttingGuideProp,
2755
2758
  canvasBackgroundImage = _ref.canvasBackgroundImage,
2756
- onRemoveBackgroundImage = _ref.onRemoveBackgroundImage;
2759
+ onRemoveBackgroundImage = _ref.onRemoveBackgroundImage,
2760
+ _ref$showBackgroundIm = _ref.showBackgroundImagePicker,
2761
+ showBackgroundImagePicker = _ref$showBackgroundIm === void 0 ? true : _ref$showBackgroundIm,
2762
+ _ref$showOpacityPicke = _ref.showOpacityPicker,
2763
+ showOpacityPicker = _ref$showOpacityPicke === void 0 ? true : _ref$showOpacityPicke;
2757
2764
  var selectBackgroundColor = function selectBackgroundColor(e) {
2758
2765
  onSetBackgroundColor(e);
2759
2766
  };
@@ -2818,7 +2825,7 @@ var TemplateToolBar = function TemplateToolBar(_ref) {
2818
2825
  }), /*#__PURE__*/React.createElement(ColorBox, {
2819
2826
  backgroundColor: canvasBackgroundColor || theme.color.white,
2820
2827
  onChange: selectBackgroundColor
2821
- })), /*#__PURE__*/React.createElement(ToolBarButtonWrapper, {
2828
+ })), showBackgroundImagePicker && /*#__PURE__*/React.createElement(ToolBarButtonWrapper, {
2822
2829
  paddingRight: 17,
2823
2830
  paddingLeft: 17,
2824
2831
  onClick: handleBackgroundUpload,
@@ -2837,7 +2844,7 @@ var TemplateToolBar = function TemplateToolBar(_ref) {
2837
2844
  src: (canvasBackgroundImage === null || canvasBackgroundImage === void 0 ? void 0 : canvasBackgroundImage.src) || IconBackgroundImage,
2838
2845
  height: 24,
2839
2846
  width: 24
2840
- })), /*#__PURE__*/React.createElement(OpacityPicker, {
2847
+ })), showOpacityPicker && /*#__PURE__*/React.createElement(OpacityPicker, {
2841
2848
  tooltip: TEXT_DICTIONARY === null || TEXT_DICTIONARY === void 0 || (_TEXT_DICTIONARY$lang4 = TEXT_DICTIONARY[languageLocale]) === null || _TEXT_DICTIONARY$lang4 === void 0 ? void 0 : _TEXT_DICTIONARY$lang4.BACKGROUND_IMAGE_OPACITY,
2842
2849
  gap: 10,
2843
2850
  value: backgroundImageOpacity,
@@ -3214,7 +3221,8 @@ var propTypes$l = {
3214
3221
  onChangeShapeFill: PropTypes.func,
3215
3222
  onChangeShapeOpacity: PropTypes.func,
3216
3223
  selectedElement: PropTypes.object,
3217
- languageLocale: PropTypes.string
3224
+ languageLocale: PropTypes.string,
3225
+ onChangeCornerRadius: PropTypes.func
3218
3226
  };
3219
3227
 
3220
3228
  var _templateObject$g, _templateObject2$c;
@@ -3222,7 +3230,7 @@ styled.p(_templateObject$g || (_templateObject$g = _taggedTemplateLiteral(["\n
3222
3230
  var RowContainer$1 = styled.div(_templateObject2$c || (_templateObject2$c = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: row;\n align-items: center;\n flex-wrap: wrap;\n gap: 2px;\n"])));
3223
3231
 
3224
3232
  var ShapeToolBar = function ShapeToolBar(_ref) {
3225
- var _TEXT_DICTIONARY$lang, _TEXT_DICTIONARY$lang2;
3233
+ var _TEXT_DICTIONARY$lang, _TEXT_DICTIONARY$lang2, _TEXT_DICTIONARY$lang3;
3226
3234
  var shapeStrokeColor = _ref.shapeStrokeColor,
3227
3235
  shapeStrokeWidth = _ref.shapeStrokeWidth,
3228
3236
  shapeFillColor = _ref.shapeFillColor,
@@ -3232,7 +3240,8 @@ var ShapeToolBar = function ShapeToolBar(_ref) {
3232
3240
  onChangeShapeFill = _ref.onChangeShapeFill,
3233
3241
  onChangeShapeOpacity = _ref.onChangeShapeOpacity,
3234
3242
  selectedElement = _ref.selectedElement,
3235
- languageLocale = _ref.languageLocale;
3243
+ languageLocale = _ref.languageLocale,
3244
+ onChangeCornerRadius = _ref.onChangeCornerRadius;
3236
3245
  return /*#__PURE__*/React.createElement(RowContainer$1, null, /*#__PURE__*/React.createElement(ToolBarButtonWrapper, {
3237
3246
  gap: 11,
3238
3247
  tooltip: TEXT_DICTIONARY === null || TEXT_DICTIONARY === void 0 || (_TEXT_DICTIONARY$lang = TEXT_DICTIONARY[languageLocale]) === null || _TEXT_DICTIONARY$lang === void 0 ? void 0 : _TEXT_DICTIONARY$lang.SHAPE_FILL,
@@ -3253,6 +3262,16 @@ var ShapeToolBar = function ShapeToolBar(_ref) {
3253
3262
  value: isElementShape(selectedElement) ? selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.opacity : shapeOpacity,
3254
3263
  onChangeOpacity: onChangeShapeOpacity,
3255
3264
  languageLocale: languageLocale
3265
+ }), (selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.type) === 'square' && /*#__PURE__*/React.createElement(OpacityPicker, {
3266
+ tooltip: (TEXT_DICTIONARY === null || TEXT_DICTIONARY === void 0 || (_TEXT_DICTIONARY$lang3 = TEXT_DICTIONARY[languageLocale]) === null || _TEXT_DICTIONARY$lang3 === void 0 ? void 0 : _TEXT_DICTIONARY$lang3.CORNER_RADIUS) || 'Corner Radius',
3267
+ value: selectedElement.cornerRadius || 0,
3268
+ min: 0,
3269
+ max: 50,
3270
+ step: 1,
3271
+ varient: "radius",
3272
+ onChangeOpacity: onChangeCornerRadius,
3273
+ languageLocale: languageLocale,
3274
+ toolBarIcon: IconRoundedCorner
3256
3275
  }));
3257
3276
  };
3258
3277
  ShapeToolBar.propTypes = propTypes$l;
@@ -3336,7 +3355,10 @@ var TopToolBar = function TopToolBar(_ref) {
3336
3355
  cuttingGuideStroke = _ref.cuttingGuideStroke,
3337
3356
  cuttingGuideStrokeColor = _ref.cuttingGuideStrokeColor,
3338
3357
  onChangeCuttingGuideProp = _ref.onChangeCuttingGuideProp,
3339
- onRemoveBackgroundImage = _ref.onRemoveBackgroundImage;
3358
+ onRemoveBackgroundImage = _ref.onRemoveBackgroundImage,
3359
+ showBackgroundImagePicker = _ref.showBackgroundImagePicker,
3360
+ showOpacityPicker = _ref.showOpacityPicker,
3361
+ changeSelectedElementProperty = _ref.changeSelectedElementProperty;
3340
3362
  return /*#__PURE__*/React.createElement(ToolBarWrapper, {
3341
3363
  disabled: selectedElement && !(selectedElement !== null && selectedElement !== void 0 && selectedElement.draggable)
3342
3364
  }, selectedElement && !(selectedElement !== null && selectedElement !== void 0 && selectedElement.draggable) && /*#__PURE__*/React.createElement(OverlayBlocker, {
@@ -3358,7 +3380,9 @@ var TopToolBar = function TopToolBar(_ref) {
3358
3380
  cuttingGuideStroke: cuttingGuideStroke,
3359
3381
  cuttingGuideStrokeColor: cuttingGuideStrokeColor,
3360
3382
  onChangeCuttingGuideProp: onChangeCuttingGuideProp,
3361
- onRemoveBackgroundImage: onRemoveBackgroundImage
3383
+ onRemoveBackgroundImage: onRemoveBackgroundImage,
3384
+ showBackgroundImagePicker: showBackgroundImagePicker,
3385
+ showOpacityPicker: showOpacityPicker
3362
3386
  }) : selectedTab === (sideBarpillsList === null || sideBarpillsList === void 0 ? void 0 : sideBarpillsList.text) ? /*#__PURE__*/React.createElement(TextToolBar, {
3363
3387
  fontFamily: isElementOfSameType(selectedElement, elementTypes.text) ? selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.fontFamily : defaultTextProps === null || defaultTextProps === void 0 ? void 0 : defaultTextProps.fontFamily,
3364
3388
  fontSize: isElementOfSameType(selectedElement, elementTypes.text) ? selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.fontSize : defaultTextProps === null || defaultTextProps === void 0 ? void 0 : defaultTextProps.fontSize,
@@ -3391,7 +3415,10 @@ var TopToolBar = function TopToolBar(_ref) {
3391
3415
  shapeOpacity: shapeOpacity,
3392
3416
  onChangeShapeOpacity: onChangeShapeOpacity,
3393
3417
  selectedElement: selectedElement,
3394
- languageLocale: languageLocale
3418
+ languageLocale: languageLocale,
3419
+ onChangeCornerRadius: function onChangeCornerRadius(val) {
3420
+ changeSelectedElementProperty('cornerRadius', Number(val));
3421
+ }
3395
3422
  }) : selectedTab === (sideBarpillsList === null || sideBarpillsList === void 0 ? void 0 : sideBarpillsList.qr) ? /*#__PURE__*/React.createElement(QrToolBar, {
3396
3423
  qrStrokeWidth: qrStrokeWidth,
3397
3424
  qrStrokeColor: qrStrokeColor,
@@ -4531,7 +4558,10 @@ var Editor = function Editor(_ref) {
4531
4558
  showSaveButton = _ref.showSaveButton,
4532
4559
  onSetSelectedTab = _ref.onSetSelectedTab,
4533
4560
  saveButtonText = _ref.saveButtonText,
4534
- onRemoveBackgroundImage = _ref.onRemoveBackgroundImage;
4561
+ onRemoveBackgroundImage = _ref.onRemoveBackgroundImage,
4562
+ showBackgroundImagePicker = _ref.showBackgroundImagePicker,
4563
+ showOpacityPicker = _ref.showOpacityPicker,
4564
+ changeSelectedElementProperty = _ref.changeSelectedElementProperty;
4535
4565
  var transformerRef = useRef(null);
4536
4566
  useEffect(function () {
4537
4567
  if (transformerRef !== null && transformerRef !== void 0 && transformerRef.current) {
@@ -4635,6 +4665,7 @@ var Editor = function Editor(_ref) {
4635
4665
  key: el.id
4636
4666
  }, el, {
4637
4667
  id: el.id,
4668
+ cornerRadius: el.cornerRadius || 0,
4638
4669
  onClick: function onClick() {
4639
4670
  return handleSelect(el);
4640
4671
  },
@@ -4856,7 +4887,10 @@ var Editor = function Editor(_ref) {
4856
4887
  cuttingGuideStroke: cuttingGuideStroke,
4857
4888
  cuttingGuideStrokeColor: cuttingGuideStrokeColor,
4858
4889
  onChangeCuttingGuideProp: onChangeCuttingGuideProp,
4859
- onRemoveBackgroundImage: onRemoveBackgroundImage
4890
+ onRemoveBackgroundImage: onRemoveBackgroundImage,
4891
+ showBackgroundImagePicker: showBackgroundImagePicker,
4892
+ showOpacityPicker: showOpacityPicker,
4893
+ changeSelectedElementProperty: changeSelectedElementProperty
4860
4894
  }), /*#__PURE__*/React.createElement(InnerContainer, null, /*#__PURE__*/React.createElement(InnerContainerWrapper, {
4861
4895
  editorHeight: editorHeight + 50,
4862
4896
  editorWidth: editorWidth
@@ -5710,13 +5744,17 @@ var isPropValid = /* #__PURE__ */memoize(function (prop) {
5710
5744
  * @property {'en'|'ru'|'pl'|'de'|'es'|'fr'|'it'} [locale]
5711
5745
  * @property {Function} [onCreateNewTemplate] - called when user creates a new template, passes new canvas elements
5712
5746
  * @property {Function} [onTemplateSelect] - called when a template is selected, passes template id
5747
+ * @property {Function} [uploadQRLogoImage] - Optional callback to upload the QR logo image. Should return a string or an object with `{ url }`
5748
+ * @property {number} [zoomLevel] - Optional zoom level (e.g. 100 for 100%)
5749
+ * @property {boolean} [showBackgroundImagePicker] - Used to set background image on entire canvas
5750
+ * @property {boolean} [showOpacityPicker] - Related to showBackgroundImagePicker and it's opacity
5713
5751
  */
5714
5752
 
5715
5753
  /**
5716
5754
  * @type {React.ForwardRefExoticComponent<StudioProps & React.RefAttributes<HTMLDivElement>>}
5717
5755
  */
5718
5756
  var Studio = /*#__PURE__*/forwardRef(function (_ref, ref) {
5719
- var _elements$elements$fi, _elements$find4, _elements$find5, _elements$find6;
5757
+ var _elements$elements$fi, _elements$find5, _elements$find6, _elements$find7;
5720
5758
  var _ref$title = _ref.title,
5721
5759
  title = _ref$title === void 0 ? '' : _ref$title,
5722
5760
  _ref$defaultQrLogo = _ref.defaultQrLogo,
@@ -5744,7 +5782,11 @@ var Studio = /*#__PURE__*/forwardRef(function (_ref, ref) {
5744
5782
  _ref$locale = _ref.locale,
5745
5783
  locale = _ref$locale === void 0 ? 'en' : _ref$locale,
5746
5784
  onCreateNewTemplate = _ref.onCreateNewTemplate,
5747
- onTemplateSelect = _ref.onTemplateSelect;
5785
+ onTemplateSelect = _ref.onTemplateSelect,
5786
+ showBackgroundImagePicker = _ref.showBackgroundImagePicker,
5787
+ showOpacityPicker = _ref.showOpacityPicker,
5788
+ uploadQRLogoImage = _ref.uploadQRLogoImage,
5789
+ zoomLevel = _ref.zoomLevel;
5748
5790
  var stageRef = useRef(null);
5749
5791
  var _useState = useState(null),
5750
5792
  _useState2 = _slicedToArray(_useState, 2),
@@ -5778,7 +5820,7 @@ var Studio = /*#__PURE__*/forwardRef(function (_ref, ref) {
5778
5820
  _useState14 = _slicedToArray(_useState13, 2),
5779
5821
  helperSideBarVisible = _useState14[0],
5780
5822
  setHelperSideBarVisible = _useState14[1];
5781
- var _useState15 = useState(100),
5823
+ var _useState15 = useState(zoomLevel !== null && zoomLevel !== void 0 ? zoomLevel : 100),
5782
5824
  _useState16 = _slicedToArray(_useState15, 2),
5783
5825
  zoomPercentage = _useState16[0],
5784
5826
  setZoomPercentage = _useState16[1];
@@ -5908,9 +5950,17 @@ var Studio = /*#__PURE__*/forwardRef(function (_ref, ref) {
5908
5950
  return onSave;
5909
5951
  }(),
5910
5952
  loading: overallLoading,
5911
- setLoading: setLoading
5953
+ setLoading: setLoading,
5954
+ undoCount: history.length,
5955
+ hasChanges: history.length > 0,
5956
+ redoCount: redoStack.length
5912
5957
  };
5913
5958
  });
5959
+ useEffect(function () {
5960
+ if (typeof zoomLevel === 'number') {
5961
+ setZoomPercentage(zoomLevel);
5962
+ }
5963
+ }, [zoomLevel]);
5914
5964
  useEffect(function () {
5915
5965
  var handleKeyDown = function handleKeyDown(e) {
5916
5966
  var isMac = navigator.platform.toUpperCase().includes('MAC');
@@ -6063,25 +6113,41 @@ var Studio = /*#__PURE__*/forwardRef(function (_ref, ref) {
6063
6113
  };
6064
6114
  saveHistory([].concat(_toConsumableArray(elemClone), [newElement]));
6065
6115
  };
6066
- var onSetPageSize = function onSetPageSize(size) {
6067
- if (!size) {
6068
- return;
6069
- }
6070
- var elemClone = JSON.parse(JSON.stringify(elements));
6071
- var sizeIndex = elemClone.findIndex(function (e) {
6116
+ var onSetPageSize = function onSetPageSize(newSize) {
6117
+ var _elements$find4;
6118
+ if (!newSize) return;
6119
+ var oldSize = (elements === null || elements === void 0 || (_elements$find4 = elements.find(function (e) {
6072
6120
  return (e === null || e === void 0 ? void 0 : e.type) === (elementTypes === null || elementTypes === void 0 ? void 0 : elementTypes.pageSize);
6121
+ })) === null || _elements$find4 === void 0 ? void 0 : _elements$find4.size) || pageSizes.A4;
6122
+ var oldDims = pageSizesDimensions[oldSize];
6123
+ var newDims = pageSizesDimensions[newSize];
6124
+ var scaleX = newDims.width / oldDims.width;
6125
+ var scaleY = newDims.height / oldDims.height;
6126
+ var scaledElements = elements.map(function (elem) {
6127
+ if (elem.type === elementTypes.pageSize) {
6128
+ return _objectSpread2(_objectSpread2({}, elem), {}, {
6129
+ size: newSize
6130
+ }); // Just update the size
6131
+ }
6132
+ var scaled = _objectSpread2({}, elem);
6133
+
6134
+ // Scale common position and size props
6135
+ if (typeof scaled.x === 'number') scaled.x *= scaleX;
6136
+ if (typeof scaled.y === 'number') scaled.y *= scaleY;
6137
+ if (typeof scaled.width === 'number') scaled.width *= scaleX;
6138
+ if (typeof scaled.height === 'number') scaled.height *= scaleY;
6139
+ if (typeof scaled.radius === 'number') scaled.radius *= Math.min(scaleX, scaleY); // for circles, stars
6140
+ if (typeof scaled.fontSize === 'number') scaled.fontSize *= Math.min(scaleX, scaleY);
6141
+
6142
+ // Special case: QR codes or icons that have scale or size props
6143
+ if (scaled.points && Array.isArray(scaled.points)) {
6144
+ scaled.points = scaled.points.map(function (val, idx) {
6145
+ return idx % 2 === 0 ? val * scaleX : val * scaleY;
6146
+ });
6147
+ }
6148
+ return scaled;
6073
6149
  });
6074
- if (sizeIndex > -1) {
6075
- elemClone[sizeIndex]['size'] = size;
6076
- } else {
6077
- var sizeElement = {
6078
- type: elementTypes === null || elementTypes === void 0 ? void 0 : elementTypes.pageSize,
6079
- id: "element".concat(Date.now()),
6080
- size: size
6081
- };
6082
- elemClone.push(sizeElement);
6083
- }
6084
- saveHistory(removeImageProperty(elemClone));
6150
+ saveHistory(removeImageProperty(scaledElements));
6085
6151
  };
6086
6152
  var _onChangeCuttingGuideProp = function onChangeCuttingGuideProp(type, value) {
6087
6153
  var elemClone = JSON.parse(JSON.stringify(elements));
@@ -6125,6 +6191,7 @@ var Studio = /*#__PURE__*/forwardRef(function (_ref, ref) {
6125
6191
  shapeProps['height'] = 100;
6126
6192
  shapeProps['width'] = 100;
6127
6193
  shapeProps['name'] = elementTypes.square;
6194
+ shapeProps['cornerRadius'] = 0;
6128
6195
  addElement(shapeProps);
6129
6196
  } else if (type === elementTypes.arrowRight) {
6130
6197
  shapeProps['points'] = [0, 0, 100, 0];
@@ -6508,7 +6575,7 @@ var Studio = /*#__PURE__*/forwardRef(function (_ref, ref) {
6508
6575
  };
6509
6576
  var addQrLogo = /*#__PURE__*/function () {
6510
6577
  var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {
6511
- var file, imageUrl, reader;
6578
+ var file, result, imageUrl, reader, _t;
6512
6579
  return _regenerator().w(function (_context2) {
6513
6580
  while (1) switch (_context2.n) {
6514
6581
  case 0:
@@ -6522,29 +6589,45 @@ var Studio = /*#__PURE__*/forwardRef(function (_ref, ref) {
6522
6589
  }
6523
6590
  return _context2.a(2);
6524
6591
  case 2:
6525
- if (!uploadImageCallBack) {
6526
- _context2.n = 4;
6592
+ if (!uploadQRLogoImage) {
6593
+ _context2.n = 8;
6527
6594
  break;
6528
6595
  }
6596
+ _context2.p = 3;
6529
6597
  setLoadingUploadImage(true);
6530
- _context2.n = 3;
6531
- return uploadImageCallBack(file);
6532
- case 3:
6533
- imageUrl = _context2.v;
6534
- addLogo(imageUrl);
6598
+ _context2.n = 4;
6599
+ return uploadQRLogoImage(file);
6600
+ case 4:
6601
+ result = _context2.v;
6602
+ imageUrl = typeof result === 'string' ? result : result === null || result === void 0 ? void 0 : result.url;
6603
+ if (imageUrl) {
6604
+ addLogo(imageUrl);
6605
+ } else {
6606
+ console.warn('uploadQRLogoImage did not return a valid image URL');
6607
+ }
6608
+ _context2.n = 6;
6609
+ break;
6610
+ case 5:
6611
+ _context2.p = 5;
6612
+ _t = _context2.v;
6613
+ console.error('Error uploading QR logo image:', _t);
6614
+ case 6:
6615
+ _context2.p = 6;
6535
6616
  setLoadingUploadImage(false);
6536
- _context2.n = 5;
6617
+ return _context2.f(6);
6618
+ case 7:
6619
+ _context2.n = 9;
6537
6620
  break;
6538
- case 4:
6621
+ case 8:
6539
6622
  reader = new FileReader();
6540
6623
  reader.onload = function () {
6541
6624
  addLogo(reader.result);
6542
6625
  };
6543
6626
  reader.readAsDataURL(file);
6544
- case 5:
6627
+ case 9:
6545
6628
  return _context2.a(2);
6546
6629
  }
6547
- }, _callee2);
6630
+ }, _callee2, null, [[3, 5, 6, 7]]);
6548
6631
  }));
6549
6632
  return function addQrLogo() {
6550
6633
  return _ref3.apply(this, arguments);
@@ -6655,12 +6738,12 @@ var Studio = /*#__PURE__*/forwardRef(function (_ref, ref) {
6655
6738
  }), loadingFonts ? null : /*#__PURE__*/React.createElement(Editor
6656
6739
  // canvasSize={canvasSize}
6657
6740
  , {
6658
- cuttingGuideStroke: (elements === null || elements === void 0 || (_elements$find4 = elements.find(function (e) {
6741
+ cuttingGuideStroke: (elements === null || elements === void 0 || (_elements$find5 = elements.find(function (e) {
6659
6742
  return (e === null || e === void 0 ? void 0 : e.type) === (elementTypes === null || elementTypes === void 0 ? void 0 : elementTypes.pageSize);
6660
- })) === null || _elements$find4 === void 0 ? void 0 : _elements$find4.cuttingGuideStroke) || 0,
6661
- cuttingGuideStrokeColor: (elements === null || elements === void 0 || (_elements$find5 = elements.find(function (e) {
6743
+ })) === null || _elements$find5 === void 0 ? void 0 : _elements$find5.cuttingGuideStroke) || 0,
6744
+ cuttingGuideStrokeColor: (elements === null || elements === void 0 || (_elements$find6 = elements.find(function (e) {
6662
6745
  return (e === null || e === void 0 ? void 0 : e.type) === (elementTypes === null || elementTypes === void 0 ? void 0 : elementTypes.pageSize);
6663
- })) === null || _elements$find5 === void 0 ? void 0 : _elements$find5.cuttingGuideStrokeColor) || (theme === null || theme === void 0 ? void 0 : theme.color.black),
6746
+ })) === null || _elements$find6 === void 0 ? void 0 : _elements$find6.cuttingGuideStrokeColor) || (theme === null || theme === void 0 ? void 0 : theme.color.black),
6664
6747
  onChangeCuttingGuideProp: function onChangeCuttingGuideProp(type, value) {
6665
6748
  _onChangeCuttingGuideProp(type, value);
6666
6749
  },
@@ -6702,9 +6785,9 @@ var Studio = /*#__PURE__*/forwardRef(function (_ref, ref) {
6702
6785
  stageRef: stageRef,
6703
6786
  saveHistory: saveHistory,
6704
6787
  onChangeBackgroundImageOpacity: onChangeBackgroundImageOpacity,
6705
- backgroundImageOpacity: (elements === null || elements === void 0 || (_elements$find6 = elements.find(function (e) {
6788
+ backgroundImageOpacity: (elements === null || elements === void 0 || (_elements$find7 = elements.find(function (e) {
6706
6789
  return (e === null || e === void 0 ? void 0 : e.type) === (elementTypes === null || elementTypes === void 0 ? void 0 : elementTypes.backgroundImage);
6707
- })) === null || _elements$find6 === void 0 ? void 0 : _elements$find6.opacity) || backgroundImageOpacity,
6790
+ })) === null || _elements$find7 === void 0 ? void 0 : _elements$find7.opacity) || backgroundImageOpacity,
6708
6791
  onDeleteSelectedElement: onDeleteSelectedElement,
6709
6792
  onCopySelectedElement: onCopySelectedElement,
6710
6793
  onToggleLockElement: onToggleLockElement,
@@ -6723,7 +6806,10 @@ var Studio = /*#__PURE__*/forwardRef(function (_ref, ref) {
6723
6806
  onSetSelectedTab: onSelectedTab,
6724
6807
  saveButtonText: saveButtonText,
6725
6808
  languageLocale: languageLocale,
6726
- onRemoveBackgroundImage: onRemoveBackgroundImage
6809
+ onRemoveBackgroundImage: onRemoveBackgroundImage,
6810
+ showBackgroundImagePicker: showBackgroundImagePicker,
6811
+ showOpacityPicker: showOpacityPicker,
6812
+ changeSelectedElementProperty: changeSelectedElementProperty
6727
6813
  }), overallLoading && /*#__PURE__*/React.createElement(Overlay, null, /*#__PURE__*/React.createElement(LoadingSpinner, {
6728
6814
  size: "60px",
6729
6815
  color: theme.color.secondary