@arbisoft/react-design-tool 1.0.67 → 1.0.69

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
@@ -340,6 +340,9 @@ var propTypes$z = {
340
340
  disableWhiteLabel: PropTypes.bool,
341
341
  defaultTemplatesList: PropTypes.array,
342
342
  customTemplatesList: PropTypes.array,
343
+ templatesDisplayOrder: PropTypes.oneOf(['defaultFirst', 'customFirst']),
344
+ showOutsideBoundaryPreview: PropTypes.bool,
345
+ outsideBoundaryPreviewPadding: PropTypes.number,
343
346
  qrLink: PropTypes.string,
344
347
  styleProps: PropTypes.object,
345
348
  defaultText: PropTypes.string,
@@ -2267,10 +2270,12 @@ var propTypes$w = {
2267
2270
  setLoadingUploadImage: PropTypes.func,
2268
2271
  cuttingGuideStroke: PropTypes.number,
2269
2272
  cuttingGuideStrokeColor: PropTypes.string,
2270
- onChangeCuttingGuideProp: PropTypes.func
2273
+ onChangeCuttingGuideProp: PropTypes.func,
2274
+ showOutsideBoundaryPreview: PropTypes.bool,
2275
+ outsideBoundaryPreviewPadding: PropTypes.number
2271
2276
  };
2272
2277
 
2273
- var _templateObject$r, _templateObject2$l, _templateObject3$b, _templateObject4$7, _templateObject5$3;
2278
+ var _templateObject$r, _templateObject2$l, _templateObject3$b, _templateObject4$7, _templateObject5$4;
2274
2279
  var Container$4 = styled.div(_templateObject$r || (_templateObject$r = _taggedTemplateLiteral(["\n flex: 1;\n display: flex;\n background-color: ", ";\n background-image: ", ";\n position: relative;\n flex-direction: column;\n overflow: hidden;\n"])), theme.color.white_F7F7F7, function (_ref) {
2275
2280
  var selectedTab = _ref.selectedTab;
2276
2281
  return selectedTab ? 'none' : "url(".concat(EditorBg, ")");
@@ -2290,7 +2295,7 @@ var InnerContainerWrapper = styled.div(_templateObject3$b || (_templateObject3$b
2290
2295
  return editorWidth || 400;
2291
2296
  });
2292
2297
  var Title = styled.p(_templateObject4$7 || (_templateObject4$7 = _taggedTemplateLiteral(["\n border: 1px solid ", ";\n align-self: flex-start;\n font-size: 14px;\n font-family: ", ";\n font-weight: ", ";\n color: ", ";\n padding: 0 6px;\n border-bottom-width: 0;\n"])), theme.color.gray_E8E8E8, theme.fonts.primary, theme.fontWeights[300], theme.color.gray_7A7979);
2293
- var EditorBox = styled.div(_templateObject5$3 || (_templateObject5$3 = _taggedTemplateLiteral(["\n height: ", "px;\n width: ", "px;\n min-height: ", "px;\n min-width: ", "px;\n background: ", ";\n box-shadow: 1.317px 1.317px 1.317px 0px rgba(0, 0, 0, 0.08);\n // transition: all 0.1s ease-in-out;\n overflow: hidden;\n"])), function (_ref6) {
2298
+ var EditorBox = styled.div(_templateObject5$4 || (_templateObject5$4 = _taggedTemplateLiteral(["\n height: ", "px;\n width: ", "px;\n min-height: ", "px;\n min-width: ", "px;\n background: ", ";\n box-shadow: 1.317px 1.317px 1.317px 0px rgba(0, 0, 0, 0.08);\n // transition: all 0.1s ease-in-out;\n overflow: hidden;\n"])), function (_ref6) {
2294
2299
  var editorHeight = _ref6.editorHeight;
2295
2300
  return editorHeight || 470;
2296
2301
  }, function (_ref7) {
@@ -2441,7 +2446,7 @@ var StyledContainer$6 = styled.div(_templateObject$p || (_templateObject$p = _ta
2441
2446
  return disabled ? 'none' : 'all';
2442
2447
  });
2443
2448
 
2444
- var _templateObject$o, _templateObject2$j, _templateObject3$a, _templateObject4$6, _templateObject5$2, _templateObject6, _templateObject7;
2449
+ var _templateObject$o, _templateObject2$j, _templateObject3$a, _templateObject4$6, _templateObject5$3, _templateObject6$1, _templateObject7$1;
2445
2450
  var Wrapper = styled.span(_templateObject$o || (_templateObject$o = _taggedTemplateLiteral(["\n position: relative;\n display: inline-flex;\n cursor: ", ";\n"])), function (_ref) {
2446
2451
  var disabled = _ref.disabled;
2447
2452
  return disabled ? 'not-allowed' : 'pointer';
@@ -2452,13 +2457,13 @@ styled.div(_templateObject3$a || (_templateObject3$a = _taggedTemplateLiteral(["
2452
2457
  return position === 'top' && css(_templateObject4$6 || (_templateObject4$6 = _taggedTemplateLiteral(["\n bottom: 110%;\n left: 50%;\n transform: translateX(-50%);\n "])));
2453
2458
  }, function (_ref3) {
2454
2459
  var position = _ref3.position;
2455
- return position === 'right' && css(_templateObject5$2 || (_templateObject5$2 = _taggedTemplateLiteral(["\n top: 50%;\n left: 105%;\n transform: translateY(-50%);\n "])));
2460
+ return position === 'right' && css(_templateObject5$3 || (_templateObject5$3 = _taggedTemplateLiteral(["\n top: 50%;\n left: 105%;\n transform: translateY(-50%);\n "])));
2456
2461
  }, function (_ref4) {
2457
2462
  var position = _ref4.position;
2458
- return position === 'bottom' && css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n top: 110%;\n left: 50%;\n transform: translateX(-50%);\n "])));
2463
+ return position === 'bottom' && css(_templateObject6$1 || (_templateObject6$1 = _taggedTemplateLiteral(["\n top: 110%;\n left: 50%;\n transform: translateX(-50%);\n "])));
2459
2464
  }, function (_ref5) {
2460
2465
  var position = _ref5.position;
2461
- return position === 'left' && css(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["\n top: 50%;\n right: 105%;\n transform: translateY(-50%);\n "])));
2466
+ return position === 'left' && css(_templateObject7$1 || (_templateObject7$1 = _taggedTemplateLiteral(["\n top: 50%;\n right: 105%;\n transform: translateY(-50%);\n "])));
2462
2467
  }, Wrapper);
2463
2468
 
2464
2469
  var Tooltip = function Tooltip(_ref) {
@@ -3014,14 +3019,16 @@ var removeImageProperty = function removeImageProperty() {
3014
3019
  var exportStageAsImage = /*#__PURE__*/function () {
3015
3020
  var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(stageRef, pageSizeKey) {
3016
3021
  var scale,
3022
+ cropArea,
3017
3023
  _args3 = arguments;
3018
3024
  return _regenerator().w(function (_context3) {
3019
3025
  while (1) switch (_context3.n) {
3020
3026
  case 0:
3021
3027
  scale = _args3.length > 2 && _args3[2] !== undefined ? _args3[2] : 2;
3028
+ cropArea = _args3.length > 3 && _args3[3] !== undefined ? _args3[3] : null;
3022
3029
  return _context3.a(2, new Promise(/*#__PURE__*/function () {
3023
3030
  var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(resolve, reject) {
3024
- var stage, canvas, dataURL, _t;
3031
+ var stage, canvasOptions, canvas, dataURL, _t;
3025
3032
  return _regenerator().w(function (_context2) {
3026
3033
  while (1) switch (_context2.p = _context2.n) {
3027
3034
  case 0:
@@ -3033,10 +3040,19 @@ var exportStageAsImage = /*#__PURE__*/function () {
3033
3040
  }
3034
3041
  return _context2.a(2, reject('Stage is not available'));
3035
3042
  case 1:
3036
- _context2.n = 2;
3037
- return stage.toCanvas({
3043
+ canvasOptions = {
3038
3044
  pixelRatio: scale
3039
- });
3045
+ };
3046
+ if (cropArea && Number.isFinite(cropArea.x) && Number.isFinite(cropArea.y) && Number.isFinite(cropArea.width) && Number.isFinite(cropArea.height)) {
3047
+ canvasOptions.x = cropArea.x;
3048
+ canvasOptions.y = cropArea.y;
3049
+ canvasOptions.width = cropArea.width;
3050
+ canvasOptions.height = cropArea.height;
3051
+ }
3052
+
3053
+ // Create a canvas with the scale factor
3054
+ _context2.n = 2;
3055
+ return stage.toCanvas(canvasOptions);
3040
3056
  case 2:
3041
3057
  canvas = _context2.v;
3042
3058
  _context2.n = 3;
@@ -4089,12 +4105,12 @@ var propTypes$i = {
4089
4105
  translation: PropTypes.object
4090
4106
  };
4091
4107
 
4092
- var _templateObject$e, _templateObject2$a, _templateObject3$7, _templateObject4$4, _templateObject5$1;
4108
+ var _templateObject$e, _templateObject2$a, _templateObject3$7, _templateObject4$4, _templateObject5$2;
4093
4109
  var Container$3 = styled.div(_templateObject$e || (_templateObject$e = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n align-items: center;\n position: relative;\n"])));
4094
4110
  var ZoomControlWrapper = styled.div(_templateObject2$a || (_templateObject2$a = _taggedTemplateLiteral(["\n border: 1px solid ", ";\n border-radius: 6px;\n height: 44px;\n display: flex;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n background: white;\n"])), theme.color.gray_200);
4095
4111
  var ZoomButton = styled.div(_templateObject3$7 || (_templateObject3$7 = _taggedTemplateLiteral(["\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 0 14px;\n cursor: pointer;\n"])));
4096
4112
  var Divider = styled.div(_templateObject4$4 || (_templateObject4$4 = _taggedTemplateLiteral(["\n width: 1px;\n height: 80%;\n background: rgba(77, 98, 119, 0.2);\n"])));
4097
- var ZoomPercentage = styled.p(_templateObject5$1 || (_templateObject5$1 = _taggedTemplateLiteral(["\n padding: 0 14px;\n font-family: ", ";\n font-weight: ", ";\n color: ", ";\n"])), theme.fonts.primary, theme.fontWeights[500], theme.color.icon_gray);
4113
+ var ZoomPercentage = styled.p(_templateObject5$2 || (_templateObject5$2 = _taggedTemplateLiteral(["\n padding: 0 14px;\n font-family: ", ";\n font-weight: ", ";\n color: ", ";\n"])), theme.fonts.primary, theme.fontWeights[500], theme.color.icon_gray);
4098
4114
 
4099
4115
  var propTypes$h = {
4100
4116
  varient: PropTypes.oneOf(Object.values(ButtonVarients)),
@@ -5362,8 +5378,23 @@ var Editor = function Editor(_ref) {
5362
5378
  onRemoveBackgroundImage = _ref.onRemoveBackgroundImage,
5363
5379
  showBackgroundImagePicker = _ref.showBackgroundImagePicker,
5364
5380
  showOpacityPicker = _ref.showOpacityPicker,
5365
- changeSelectedElementProperty = _ref.changeSelectedElementProperty;
5381
+ changeSelectedElementProperty = _ref.changeSelectedElementProperty,
5382
+ _ref$showOutsideBound = _ref.showOutsideBoundaryPreview,
5383
+ showOutsideBoundaryPreview = _ref$showOutsideBound === void 0 ? false : _ref$showOutsideBound,
5384
+ _ref$outsideBoundaryP = _ref.outsideBoundaryPreviewPadding,
5385
+ outsideBoundaryPreviewPadding = _ref$outsideBoundaryP === void 0 ? 120 : _ref$outsideBoundaryP;
5366
5386
  var transformerRef = useRef(null);
5387
+ var previewPadding = useMemo(function () {
5388
+ return showOutsideBoundaryPreview ? Math.max(0, Number(outsideBoundaryPreviewPadding) || 0) : 0;
5389
+ }, [showOutsideBoundaryPreview, outsideBoundaryPreviewPadding]);
5390
+ var stageWidth = useMemo(function () {
5391
+ return editorWidth + previewPadding * 2;
5392
+ }, [editorWidth, previewPadding]);
5393
+ var stageHeight = useMemo(function () {
5394
+ return editorHeight + previewPadding * 2;
5395
+ }, [editorHeight, previewPadding]);
5396
+ var pageOffsetX = previewPadding;
5397
+ var pageOffsetY = previewPadding;
5367
5398
  useEffect(function () {
5368
5399
  if (transformerRef !== null && transformerRef !== void 0 && transformerRef.current) {
5369
5400
  var _stageRef$current;
@@ -5699,14 +5730,14 @@ var Editor = function Editor(_ref) {
5699
5730
  showOpacityPicker: showOpacityPicker,
5700
5731
  changeSelectedElementProperty: changeSelectedElementProperty
5701
5732
  }), /*#__PURE__*/React.createElement(InnerContainer, null, /*#__PURE__*/React.createElement(InnerContainerWrapper, {
5702
- editorHeight: editorHeight + 50,
5703
- editorWidth: editorWidth
5733
+ editorHeight: stageHeight + 50,
5734
+ editorWidth: stageWidth
5704
5735
  }, title && /*#__PURE__*/React.createElement(Title, null, title), /*#__PURE__*/React.createElement(EditorBox, {
5705
- editorHeight: editorHeight,
5706
- editorWidth: editorWidth
5736
+ editorHeight: stageHeight,
5737
+ editorWidth: stageWidth
5707
5738
  }, !loadingImages && !loadingFonts && /*#__PURE__*/React.createElement(Stage, {
5708
- width: editorWidth,
5709
- height: editorHeight,
5739
+ width: stageWidth,
5740
+ height: stageHeight,
5710
5741
  ref: stageRef,
5711
5742
  onMouseDown: function onMouseDown(e) {
5712
5743
  if (e.target === e.target.getStage()) {
@@ -5721,15 +5752,21 @@ var Editor = function Editor(_ref) {
5721
5752
  },
5722
5753
  listening: false
5723
5754
  }, /*#__PURE__*/React.createElement(Rect, {
5755
+ x: pageOffsetX,
5756
+ y: pageOffsetY,
5724
5757
  width: editorWidth,
5725
5758
  height: editorHeight,
5726
5759
  fill: canvasBackgroundColor || theme.color.white
5727
5760
  }), canvasBackgroundImage && /*#__PURE__*/React.createElement(CanvasImage, {
5728
5761
  element: _objectSpread2(_objectSpread2({}, canvasBackgroundImage), {}, {
5762
+ x: pageOffsetX,
5763
+ y: pageOffsetY,
5729
5764
  width: editorWidth,
5730
5765
  height: editorHeight
5731
5766
  })
5732
5767
  })), /*#__PURE__*/React.createElement(Layer, null, /*#__PURE__*/React.createElement(Group, {
5768
+ x: pageOffsetX,
5769
+ y: pageOffsetY,
5733
5770
  scaleX: zoomPercentage / 100,
5734
5771
  scaleY: zoomPercentage / 100
5735
5772
  }, elements === null || elements === void 0 ? void 0 : elements.map(function (el) {
@@ -5760,12 +5797,42 @@ var Editor = function Editor(_ref) {
5760
5797
  }
5761
5798
  return newBox;
5762
5799
  }
5763
- }))), /*#__PURE__*/React.createElement(Layer, {
5800
+ }))), showOutsideBoundaryPreview && previewPadding > 0 ? /*#__PURE__*/React.createElement(Layer, {
5764
5801
  listening: false
5765
5802
  }, /*#__PURE__*/React.createElement(Rect, {
5766
5803
  listening: false,
5767
5804
  x: 0,
5768
5805
  y: 0,
5806
+ width: stageWidth,
5807
+ height: pageOffsetY,
5808
+ fill: "rgba(0, 0, 0, 0.14)"
5809
+ }), /*#__PURE__*/React.createElement(Rect, {
5810
+ listening: false,
5811
+ x: 0,
5812
+ y: pageOffsetY,
5813
+ width: pageOffsetX,
5814
+ height: editorHeight,
5815
+ fill: "rgba(0, 0, 0, 0.14)"
5816
+ }), /*#__PURE__*/React.createElement(Rect, {
5817
+ listening: false,
5818
+ x: pageOffsetX + editorWidth,
5819
+ y: pageOffsetY,
5820
+ width: stageWidth - (pageOffsetX + editorWidth),
5821
+ height: editorHeight,
5822
+ fill: "rgba(0, 0, 0, 0.14)"
5823
+ }), /*#__PURE__*/React.createElement(Rect, {
5824
+ listening: false,
5825
+ x: 0,
5826
+ y: pageOffsetY + editorHeight,
5827
+ width: stageWidth,
5828
+ height: stageHeight - (pageOffsetY + editorHeight),
5829
+ fill: "rgba(0, 0, 0, 0.14)"
5830
+ })) : null, /*#__PURE__*/React.createElement(Layer, {
5831
+ listening: false
5832
+ }, /*#__PURE__*/React.createElement(Rect, {
5833
+ listening: false,
5834
+ x: pageOffsetX,
5835
+ y: pageOffsetY,
5769
5836
  width: editorWidth,
5770
5837
  height: editorHeight,
5771
5838
  stroke: cuttingGuideStrokeColor,
@@ -5817,6 +5884,7 @@ var propTypes$b = {
5817
5884
  setLoadingUploadImage: PropTypes.func,
5818
5885
  defaultTemplatesList: PropTypes.array,
5819
5886
  customTemplatesList: PropTypes.array,
5887
+ templatesDisplayOrder: PropTypes.oneOf(['defaultFirst', 'customFirst']),
5820
5888
  styleProps: PropTypes.object
5821
5889
  };
5822
5890
 
@@ -5871,7 +5939,8 @@ var propTypes$9 = {
5871
5939
  oncreateNewTemplate: PropTypes.func,
5872
5940
  languageLocale: PropTypes.string,
5873
5941
  defaultTemplatesList: PropTypes.array,
5874
- customTemplatesList: PropTypes.array
5942
+ customTemplatesList: PropTypes.array,
5943
+ templatesDisplayOrder: PropTypes.oneOf(['defaultFirst', 'customFirst'])
5875
5944
  };
5876
5945
 
5877
5946
  var propTypes$8 = {
@@ -5883,7 +5952,7 @@ var propTypes$8 = {
5883
5952
  content: PropTypes.node
5884
5953
  };
5885
5954
 
5886
- var _templateObject$8, _templateObject2$6, _templateObject3$6, _templateObject4$3, _templateObject5;
5955
+ var _templateObject$8, _templateObject2$6, _templateObject3$6, _templateObject4$3, _templateObject5$1;
5887
5956
  var CollapsableContainer = styled.div(_templateObject$8 || (_templateObject$8 = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n margin-top: ", "px;\n margin-bottom: ", "px;\n"])), function (_ref) {
5888
5957
  var marginTop = _ref.marginTop;
5889
5958
  return marginTop;
@@ -5894,7 +5963,7 @@ var CollapsableContainer = styled.div(_templateObject$8 || (_templateObject$8 =
5894
5963
  var CollapsableHeader = styled.div(_templateObject2$6 || (_templateObject2$6 = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: row;\n align-items: center;\n cursor: pointer;\n justify-content: flex-start;\n align-self: flex-start;\n margin-bottom: 14px;\n"])));
5895
5964
  var LeftIconWrapper = styled.div(_templateObject3$6 || (_templateObject3$6 = _taggedTemplateLiteral(["\n margin-right: 6px;\n display: flex;\n align-items: center;\n"])));
5896
5965
  var IconWrapper = styled.div(_templateObject4$3 || (_templateObject4$3 = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-top: 3px;\n"])));
5897
- var CollapsableContent = styled.div(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n display: ", ";\n"])), function (_ref3) {
5966
+ var CollapsableContent = styled.div(_templateObject5$1 || (_templateObject5$1 = _taggedTemplateLiteral(["\n display: ", ";\n"])), function (_ref3) {
5898
5967
  var visible = _ref3.visible;
5899
5968
  return visible ? 'flex' : 'none';
5900
5969
  });
@@ -5934,11 +6003,14 @@ var Collapsable = function Collapsable(_ref) {
5934
6003
  };
5935
6004
  Collapsable.propTypes = propTypes$8;
5936
6005
 
5937
- var _templateObject$7, _templateObject2$5, _templateObject3$5, _templateObject4$2;
6006
+ var _templateObject$7, _templateObject2$5, _templateObject3$5, _templateObject4$2, _templateObject5, _templateObject6, _templateObject7;
5938
6007
  var TemplatesContainer = styled.div(_templateObject$7 || (_templateObject$7 = _taggedTemplateLiteral(["\n display: flex;\n flex-wrap: wrap;\n justify-content: space-between;\n gap: 10px;\n align-items: flex-start;\n"])));
5939
- var TemplateItem = styled.div(_templateObject2$5 || (_templateObject2$5 = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n cursor: pointer;\n position: relative;\n overflow: hidden;\n\n &::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(0, 0, 0, 0.2);\n opacity: 0;\n transition: opacity 0.3s ease;\n z-index: 1;\n }\n\n &:hover::before {\n opacity: 1;\n }\n &:hover > button {\n display: flex;\n z-index: 2;\n }\n"])));
5940
- var StyledDeleteButton = styled.button(_templateObject3$5 || (_templateObject3$5 = _taggedTemplateLiteral(["\n display: none;\n justify-content: center;\n align-items: center;\n height: 30px;\n width: 30px;\n padding: 8px;\n border-radius: 100%;\n background: rgba(255, 255, 255, 1);\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n\n &:hover {\n border-color: #d91919;\n }\n &:focus {\n outline: none;\n }\n"])));
5941
- var StyledContainer$5 = styled.div(_templateObject4$2 || (_templateObject4$2 = _taggedTemplateLiteral(["\n display: flex;\n flex: 1;\n flex-direction: column;\n padding: 20px 18px;\n overflow: auto;\n"])));
6008
+ var TemplateItem = styled.div(_templateObject2$5 || (_templateObject2$5 = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n cursor: pointer;\n position: relative;\n gap: 6px;\n overflow: hidden;\n\n &::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(0, 0, 0, 0.2);\n opacity: 0;\n transition: opacity 0.3s ease;\n z-index: 1;\n pointer-events: none;\n }\n\n &:hover::before {\n opacity: 1;\n }\n"])));
6009
+ var StyledDeleteButton = styled.button(_templateObject3$5 || (_templateObject3$5 = _taggedTemplateLiteral(["\n display: inline-flex;\n justify-content: center;\n align-items: center;\n height: 24px;\n width: 24px;\n padding: 0;\n border-radius: 6px;\n background: #fff;\n border: 1px solid #e7e7e7;\n flex-shrink: 0;\n z-index: 3;\n cursor: pointer;\n position: absolute;\n top: 6px;\n right: 6px;\n opacity: 0;\n pointer-events: none;\n transform: translateY(-4px);\n transition:\n border-color 0.2s ease,\n background-color 0.2s ease,\n opacity 0.2s ease,\n transform 0.2s ease;\n\n ", ":hover &,\n ", ":focus-within & {\n opacity: 1;\n pointer-events: auto;\n transform: translateY(0);\n }\n\n img {\n height: 14px;\n }\n\n &:hover {\n border-color: #d91919;\n background: #fff5f5;\n }\n\n &:focus {\n outline: 2px solid #d91919;\n outline-offset: 1px;\n }\n"])), TemplateItem, TemplateItem);
6010
+ var TemplateFooter = styled.div(_templateObject4$2 || (_templateObject4$2 = _taggedTemplateLiteral(["\n width: 115px;\n display: flex;\n align-items: center;\n gap: 6px;\n"])));
6011
+ var TemplateTitle = styled.div(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n color: #a1a1a1;\n font-size: 10px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n flex: 1;\n min-width: 0;\n line-height: 1.2;\n padding-bottom: 2px;\n"])));
6012
+ var TemplatePreview = styled.div(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n position: relative;\n width: 115px;\n height: 125px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n overflow: hidden;\n\n img {\n border-radius: 6px;\n }\n"])));
6013
+ var StyledContainer$5 = styled.div(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["\n display: flex;\n flex: 1;\n flex-direction: column;\n padding: 20px 18px;\n overflow: auto;\n"])));
5942
6014
 
5943
6015
  var propTypes$7 = {
5944
6016
  text: PropTypes.string,
@@ -5995,12 +6067,14 @@ var RadioSection = function RadioSection(_ref) {
5995
6067
  RadioSection.propTypes = propTypes$7;
5996
6068
 
5997
6069
  var TemplateSideBar = function TemplateSideBar(_ref) {
5998
- var _TEXT_DICTIONARY$lang, _TEXT_DICTIONARY$lang2, _TEXT_DICTIONARY$lang3, _TEXT_DICTIONARY$lang4, _TEXT_DICTIONARY$lang5, _TEXT_DICTIONARY$lang6, _TEXT_DICTIONARY$lang7;
6070
+ var _TEXT_DICTIONARY$lang, _TEXT_DICTIONARY$lang2, _TEXT_DICTIONARY$lang3, _TEXT_DICTIONARY$lang4, _TEXT_DICTIONARY$lang5, _TEXT_DICTIONARY$lang6, _TEXT_DICTIONARY$lang7, _TEXT_DICTIONARY$lang8;
5999
6071
  var oncreateNewTemplate = _ref.oncreateNewTemplate,
6000
6072
  languageLocale = _ref.languageLocale,
6001
6073
  onDeleteCustomTemplate = _ref.onDeleteCustomTemplate,
6002
6074
  defaultTemplatesList = _ref.defaultTemplatesList,
6003
6075
  customTemplatesList = _ref.customTemplatesList,
6076
+ _ref$templatesDisplay = _ref.templatesDisplayOrder,
6077
+ templatesDisplayOrder = _ref$templatesDisplay === void 0 ? 'defaultFirst' : _ref$templatesDisplay,
6004
6078
  onTemplateSelect = _ref.onTemplateSelect,
6005
6079
  isLocationTextActive = _ref.isLocationTextActive,
6006
6080
  onToggleLocationText = _ref.onToggleLocationText,
@@ -6017,21 +6091,12 @@ var TemplateSideBar = function TemplateSideBar(_ref) {
6017
6091
  onTemplateSelect(item === null || item === void 0 ? void 0 : item.id);
6018
6092
  }
6019
6093
  }
6020
- }, /*#__PURE__*/React.createElement(StyledImage, {
6094
+ }, /*#__PURE__*/React.createElement(TemplatePreview, null, /*#__PURE__*/React.createElement(StyledImage, {
6021
6095
  src: item === null || item === void 0 ? void 0 : item.image,
6022
6096
  maxHeight: 125,
6023
6097
  maxWidth: 115,
6024
6098
  borderRadius: 6
6025
- }), /*#__PURE__*/React.createElement(StyledText, {
6026
- color: theme.color.gray_A1A1A1,
6027
- fontSize: 10,
6028
- style: {
6029
- whiteSpace: 'nowrap',
6030
- overflow: 'hidden',
6031
- textOverflow: 'ellipsis',
6032
- maxWidth: 115
6033
- }
6034
- }, item === null || item === void 0 ? void 0 : item.title));
6099
+ })), /*#__PURE__*/React.createElement(TemplateFooter, null, /*#__PURE__*/React.createElement(TemplateTitle, null, item === null || item === void 0 ? void 0 : item.title)));
6035
6100
  }));
6036
6101
  }, []);
6037
6102
  var renderCustomContent = useMemo(function () {
@@ -6044,29 +6109,23 @@ var TemplateSideBar = function TemplateSideBar(_ref) {
6044
6109
  onTemplateSelect(item === null || item === void 0 ? void 0 : item.id);
6045
6110
  }
6046
6111
  }
6047
- }, /*#__PURE__*/React.createElement(StyledImage, {
6112
+ }, /*#__PURE__*/React.createElement(TemplatePreview, null, /*#__PURE__*/React.createElement(StyledImage, {
6048
6113
  src: item === null || item === void 0 ? void 0 : item.image,
6049
6114
  maxHeight: 125,
6050
6115
  maxWidth: 115,
6051
6116
  borderRadius: 6
6052
6117
  }), /*#__PURE__*/React.createElement(StyledDeleteButton, {
6118
+ "aria-label": "Delete ".concat((item === null || item === void 0 ? void 0 : item.title) || 'template'),
6053
6119
  onClick: function onClick(e) {
6054
- e.stopPropagation(); // ⛔ Prevents parent onClick
6055
- onDeleteCustomTemplate === null || onDeleteCustomTemplate === void 0 || onDeleteCustomTemplate(item);
6120
+ e.stopPropagation();
6121
+ var shouldDelete = window.confirm("Delete \"".concat((item === null || item === void 0 ? void 0 : item.title) || 'this template', "\"?"));
6122
+ if (shouldDelete) {
6123
+ onDeleteCustomTemplate === null || onDeleteCustomTemplate === void 0 || onDeleteCustomTemplate(item);
6124
+ }
6056
6125
  }
6057
6126
  }, /*#__PURE__*/React.createElement(StyledImage, {
6058
- src: IconDelete,
6059
- height: 24
6060
- })), /*#__PURE__*/React.createElement(StyledText, {
6061
- color: theme.color.gray_A1A1A1,
6062
- fontSize: 10,
6063
- style: {
6064
- whiteSpace: 'nowrap',
6065
- overflow: 'hidden',
6066
- textOverflow: 'ellipsis',
6067
- maxWidth: 115
6068
- }
6069
- }, item === null || item === void 0 ? void 0 : item.title));
6127
+ src: IconDelete
6128
+ }))), /*#__PURE__*/React.createElement(TemplateFooter, null, /*#__PURE__*/React.createElement(TemplateTitle, null, item === null || item === void 0 ? void 0 : item.title)));
6070
6129
  }));
6071
6130
  }, []);
6072
6131
  return /*#__PURE__*/React.createElement(StyledContainer$5, null, /*#__PURE__*/React.createElement(Button, {
@@ -6118,13 +6177,16 @@ var TemplateSideBar = function TemplateSideBar(_ref) {
6118
6177
  isActive: !!isQrIdTextActive,
6119
6178
  onToggle: onToggleQrIdText,
6120
6179
  disabled: false
6121
- })) : null), /*#__PURE__*/React.createElement(Collapsable, {
6122
- title: TEXT_DICTIONARY === null || TEXT_DICTIONARY === void 0 || (_TEXT_DICTIONARY$lang6 = TEXT_DICTIONARY[languageLocale]) === null || _TEXT_DICTIONARY$lang6 === void 0 ? void 0 : _TEXT_DICTIONARY$lang6.DEFAULT,
6180
+ })) : null), templatesDisplayOrder === 'customFirst' && customTemplatesList.length > 0 ? /*#__PURE__*/React.createElement(Collapsable, {
6181
+ title: TEXT_DICTIONARY === null || TEXT_DICTIONARY === void 0 || (_TEXT_DICTIONARY$lang6 = TEXT_DICTIONARY[languageLocale]) === null || _TEXT_DICTIONARY$lang6 === void 0 ? void 0 : _TEXT_DICTIONARY$lang6.CUSTOM_TEMPLATES,
6182
+ content: renderCustomContent
6183
+ }) : null, /*#__PURE__*/React.createElement(Collapsable, {
6184
+ title: TEXT_DICTIONARY === null || TEXT_DICTIONARY === void 0 || (_TEXT_DICTIONARY$lang7 = TEXT_DICTIONARY[languageLocale]) === null || _TEXT_DICTIONARY$lang7 === void 0 ? void 0 : _TEXT_DICTIONARY$lang7.DEFAULT,
6123
6185
  content: renderDefaultContent
6124
- }), customTemplatesList.length > 0 && /*#__PURE__*/React.createElement(Collapsable, {
6125
- title: TEXT_DICTIONARY === null || TEXT_DICTIONARY === void 0 || (_TEXT_DICTIONARY$lang7 = TEXT_DICTIONARY[languageLocale]) === null || _TEXT_DICTIONARY$lang7 === void 0 ? void 0 : _TEXT_DICTIONARY$lang7.CUSTOM_TEMPLATES,
6186
+ }), templatesDisplayOrder !== 'customFirst' && customTemplatesList.length > 0 ? /*#__PURE__*/React.createElement(Collapsable, {
6187
+ title: TEXT_DICTIONARY === null || TEXT_DICTIONARY === void 0 || (_TEXT_DICTIONARY$lang8 = TEXT_DICTIONARY[languageLocale]) === null || _TEXT_DICTIONARY$lang8 === void 0 ? void 0 : _TEXT_DICTIONARY$lang8.CUSTOM_TEMPLATES,
6126
6188
  content: renderCustomContent
6127
- }));
6189
+ }) : null);
6128
6190
  };
6129
6191
  TemplateSideBar.propTypes = propTypes$9;
6130
6192
 
@@ -6464,6 +6526,7 @@ var HelperSideBar = function HelperSideBar(_ref) {
6464
6526
  setLoadingUploadImage = _ref.setLoadingUploadImage,
6465
6527
  defaultTemplatesList = _ref.defaultTemplatesList,
6466
6528
  customTemplatesList = _ref.customTemplatesList,
6529
+ templatesDisplayOrder = _ref.templatesDisplayOrder,
6467
6530
  onDeleteCustomTemplate = _ref.onDeleteCustomTemplate,
6468
6531
  styleProps = _ref.styleProps,
6469
6532
  defaultText = _ref.defaultText,
@@ -6489,6 +6552,7 @@ var HelperSideBar = function HelperSideBar(_ref) {
6489
6552
  onDeleteCustomTemplate: onDeleteCustomTemplate,
6490
6553
  defaultTemplatesList: defaultTemplatesList,
6491
6554
  customTemplatesList: customTemplatesList,
6555
+ templatesDisplayOrder: templatesDisplayOrder,
6492
6556
  onTemplateSelect: onTemplateSelect,
6493
6557
  styleProps: styleProps,
6494
6558
  isLocationTextActive: isLocationTextActive,
@@ -6627,6 +6691,9 @@ var isPropValid = /* #__PURE__ */memoize(function (prop) {
6627
6691
  * @property {boolean} [disableWhiteLabel]
6628
6692
  * @property {Array} [defaultTemplatesList]
6629
6693
  * @property {Array} [customTemplatesList]
6694
+ * @property {'defaultFirst'|'customFirst'} [templatesDisplayOrder]
6695
+ * @property {boolean} [showOutsideBoundaryPreview]
6696
+ * @property {number} [outsideBoundaryPreviewPadding]
6630
6697
  * @property {string} [qrLink]
6631
6698
  * @property {Object} [styleProps]
6632
6699
  * @property {string} [defaultText]
@@ -6665,6 +6732,12 @@ var Studio = /*#__PURE__*/forwardRef(function (_ref, ref) {
6665
6732
  defaultTemplatesList = _ref$defaultTemplates === void 0 ? [] : _ref$defaultTemplates,
6666
6733
  _ref$customTemplatesL = _ref.customTemplatesList,
6667
6734
  customTemplatesList = _ref$customTemplatesL === void 0 ? [] : _ref$customTemplatesL,
6735
+ _ref$templatesDisplay = _ref.templatesDisplayOrder,
6736
+ templatesDisplayOrder = _ref$templatesDisplay === void 0 ? 'defaultFirst' : _ref$templatesDisplay,
6737
+ _ref$showOutsideBound = _ref.showOutsideBoundaryPreview,
6738
+ showOutsideBoundaryPreview = _ref$showOutsideBound === void 0 ? false : _ref$showOutsideBound,
6739
+ _ref$outsideBoundaryP = _ref.outsideBoundaryPreviewPadding,
6740
+ outsideBoundaryPreviewPadding = _ref$outsideBoundaryP === void 0 ? 120 : _ref$outsideBoundaryP,
6668
6741
  onDeleteCustomTemplate = _ref.onDeleteCustomTemplate,
6669
6742
  _ref$qrLink = _ref.qrLink,
6670
6743
  qrLink = _ref$qrLink === void 0 ? 'www.google.com' : _ref$qrLink,
@@ -6896,7 +6969,7 @@ var Studio = /*#__PURE__*/forwardRef(function (_ref, ref) {
6896
6969
  case 1:
6897
6970
  processedElements = removeImageProperty(elements);
6898
6971
  _context.n = 2;
6899
- return exportStageAsImage(stageRef);
6972
+ return exportStageAsImage(stageRef, null, 2, exportCropArea);
6900
6973
  case 2:
6901
6974
  dataURL = _context.v;
6902
6975
  setLoading(false);
@@ -6961,9 +7034,13 @@ var Studio = /*#__PURE__*/forwardRef(function (_ref, ref) {
6961
7034
  var isMac = navigator.platform.toUpperCase().includes('MAC');
6962
7035
  var ctrlOrCmd = isMac ? e.metaKey : e.ctrlKey;
6963
7036
  var shiftKey = e.shiftKey;
7037
+ var activeElement = document.activeElement;
7038
+ var isTypingTarget = ['INPUT', 'TEXTAREA'].includes(activeElement === null || activeElement === void 0 ? void 0 : activeElement.tagName) || (activeElement === null || activeElement === void 0 ? void 0 : activeElement.isContentEditable);
7039
+ var isDeleteKey = e.key === 'Delete' || e.key === 'Del';
7040
+ var isBackspaceKey = e.key === 'Backspace';
6964
7041
 
6965
- // Delete
6966
- if ((e.key === 'Delete' || e.key === 'Backspace') && selectedElement && (selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.draggable) !== false && !['INPUT', 'TEXTAREA'].includes(document.activeElement.tagName) && !document.activeElement.isContentEditable) {
7042
+ // Delete selected element with Delete (Win) or Backspace (Mac)
7043
+ if ((isDeleteKey || isBackspaceKey) && selectedElement && !isTypingTarget) {
6967
7044
  e.preventDefault();
6968
7045
  onDeleteSelectedElement();
6969
7046
  }
@@ -7070,6 +7147,18 @@ var Studio = /*#__PURE__*/forwardRef(function (_ref, ref) {
7070
7147
  return (e === null || e === void 0 ? void 0 : e.type) === (elementTypes === null || elementTypes === void 0 ? void 0 : elementTypes.pageSize);
7071
7148
  })) === null || _elements$find2 === void 0 ? void 0 : _elements$find2.size) || (pageSizes === null || pageSizes === void 0 ? void 0 : pageSizes.A4)]) === null || _pageSizesDimensions2 === void 0 ? void 0 : _pageSizesDimensions2.width, zoomPercentage);
7072
7149
  }, [zoomPercentage, elements]);
7150
+ var normalizedOutsidePreviewPadding = useMemo(function () {
7151
+ return Math.max(0, Number(outsideBoundaryPreviewPadding) || 0);
7152
+ }, [outsideBoundaryPreviewPadding]);
7153
+ var exportCropArea = useMemo(function () {
7154
+ if (!showOutsideBoundaryPreview) return null;
7155
+ return {
7156
+ x: normalizedOutsidePreviewPadding,
7157
+ y: normalizedOutsidePreviewPadding,
7158
+ width: editorWidth,
7159
+ height: editorHeight
7160
+ };
7161
+ }, [showOutsideBoundaryPreview, normalizedOutsidePreviewPadding, editorWidth, editorHeight]);
7073
7162
  var selectedPageSize = useMemo(function () {
7074
7163
  var _elements$find3;
7075
7164
  return (elements === null || elements === void 0 || (_elements$find3 = elements.find(function (e) {
@@ -7812,7 +7901,7 @@ var Studio = /*#__PURE__*/forwardRef(function (_ref, ref) {
7812
7901
  case 2:
7813
7902
  processedElements = removeImageProperty(elements);
7814
7903
  _context3.n = 3;
7815
- return exportStageAsImage(stageRef);
7904
+ return exportStageAsImage(stageRef, null, 2, exportCropArea);
7816
7905
  case 3:
7817
7906
  dataURL = _context3.v;
7818
7907
  setLoading(false);
@@ -7862,6 +7951,7 @@ var Studio = /*#__PURE__*/forwardRef(function (_ref, ref) {
7862
7951
  setLoadingUploadImage: setLoadingUploadImage,
7863
7952
  defaultTemplatesList: defaultTemplatesList,
7864
7953
  customTemplatesList: customTemplatesList,
7954
+ templatesDisplayOrder: templatesDisplayOrder,
7865
7955
  onDeleteCustomTemplate: onDeleteCustomTemplate,
7866
7956
  styleProps: styleProps,
7867
7957
  defaultText: defaultText,
@@ -7951,7 +8041,9 @@ var Studio = /*#__PURE__*/forwardRef(function (_ref, ref) {
7951
8041
  onRemoveBackgroundImage: onRemoveBackgroundImage,
7952
8042
  showBackgroundImagePicker: showBackgroundImagePicker,
7953
8043
  showOpacityPicker: showOpacityPicker,
7954
- changeSelectedElementProperty: changeSelectedElementProperty
8044
+ changeSelectedElementProperty: changeSelectedElementProperty,
8045
+ showOutsideBoundaryPreview: showOutsideBoundaryPreview,
8046
+ outsideBoundaryPreviewPadding: normalizedOutsidePreviewPadding
7955
8047
  }), overallLoading && /*#__PURE__*/React.createElement(Overlay, null, /*#__PURE__*/React.createElement(LoadingSpinner, {
7956
8048
  size: "60px",
7957
8049
  color: theme.color.secondary