@reacteditor/core 0.0.1-alpha.0 → 0.0.2

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/index.js CHANGED
@@ -587,24 +587,6 @@ var init_globe = __esm({
587
587
  }
588
588
  });
589
589
 
590
- // ../../node_modules/lucide-react/dist/esm/icons/grip-vertical.js
591
- var GripVertical;
592
- var init_grip_vertical = __esm({
593
- "../../node_modules/lucide-react/dist/esm/icons/grip-vertical.js"() {
594
- "use strict";
595
- init_react_import();
596
- init_createLucideIcon();
597
- GripVertical = createLucideIcon("GripVertical", [
598
- ["circle", { cx: "9", cy: "12", r: "1", key: "1vctgf" }],
599
- ["circle", { cx: "9", cy: "5", r: "1", key: "hp0tcf" }],
600
- ["circle", { cx: "9", cy: "19", r: "1", key: "fkjjf6" }],
601
- ["circle", { cx: "15", cy: "12", r: "1", key: "1tmaij" }],
602
- ["circle", { cx: "15", cy: "5", r: "1", key: "19l28e" }],
603
- ["circle", { cx: "15", cy: "19", r: "1", key: "f4zoj3" }]
604
- ]);
605
- }
606
- });
607
-
608
590
  // ../../node_modules/lucide-react/dist/esm/icons/heading-1.js
609
591
  var Heading1;
610
592
  var init_heading_1 = __esm({
@@ -976,6 +958,20 @@ var init_redo_2 = __esm({
976
958
  }
977
959
  });
978
960
 
961
+ // ../../node_modules/lucide-react/dist/esm/icons/rotate-ccw.js
962
+ var RotateCcw;
963
+ var init_rotate_ccw = __esm({
964
+ "../../node_modules/lucide-react/dist/esm/icons/rotate-ccw.js"() {
965
+ "use strict";
966
+ init_react_import();
967
+ init_createLucideIcon();
968
+ RotateCcw = createLucideIcon("RotateCcw", [
969
+ ["path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8", key: "1357e3" }],
970
+ ["path", { d: "M3 3v5h5", key: "1xhq8a" }]
971
+ ]);
972
+ }
973
+ });
974
+
979
975
  // ../../node_modules/lucide-react/dist/esm/icons/search.js
980
976
  var Search;
981
977
  var init_search = __esm({
@@ -1183,7 +1179,6 @@ var init_lucide_react = __esm({
1183
1179
  init_copy();
1184
1180
  init_corner_left_up();
1185
1181
  init_globe();
1186
- init_grip_vertical();
1187
1182
  init_heading_1();
1188
1183
  init_heading_2();
1189
1184
  init_heading_3();
@@ -1204,6 +1199,7 @@ var init_lucide_react = __esm({
1204
1199
  init_plus();
1205
1200
  init_quote();
1206
1201
  init_redo_2();
1202
+ init_rotate_ccw();
1207
1203
  init_search();
1208
1204
  init_sliders_horizontal();
1209
1205
  init_smartphone();
@@ -7869,7 +7865,6 @@ var styles_module_default16 = { "Drawer": "_Drawer_rcm43_1", "Drawer--tile": "_D
7869
7865
 
7870
7866
  // components/Drawer/index.tsx
7871
7867
  init_get_class_name_factory();
7872
- init_lucide_react();
7873
7868
  var import_react71 = require("react");
7874
7869
  init_generate_id();
7875
7870
 
@@ -10789,6 +10784,8 @@ var DragDropContextClient = ({
10789
10784
  }
10790
10785
  }, []);
10791
10786
  const [plugins] = (0, import_react70.useState)(() => [
10787
+ import_dom.ScrollListener,
10788
+ import_dom.Scroller,
10792
10789
  ...disableAutoScroll ? import_dom.defaultPreset.plugins.filter((plugin) => plugin !== import_dom.AutoScroller) : import_dom.defaultPreset.plugins,
10793
10790
  createNestedDroppablePlugin(
10794
10791
  {
@@ -11113,7 +11110,7 @@ var DrawerItemInner = ({
11113
11110
  "data-testid": dragRef ? `drawer-item:${name}` : "",
11114
11111
  "data-editor-drawer-item": true,
11115
11112
  children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(CustomInner, { name, children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("div", { className: getClassNameItem2("draggableWrapper"), children: /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: getClassNameItem2("draggable"), children: [
11116
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("div", { className: getClassNameItem2("icon"), children: icon != null ? icon : /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(GripVertical, { size: 14 }) }),
11113
+ icon && /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("div", { className: getClassNameItem2("icon"), children: icon }),
11117
11114
  /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("div", { className: getClassNameItem2("name"), children: label != null ? label : name })
11118
11115
  ] }) }) })
11119
11116
  }
@@ -11935,9 +11932,7 @@ var useBubbleIframeEvents = (ref) => {
11935
11932
  (_a = iframe.contentDocument) == null ? void 0 : _a.addEventListener(
11936
11933
  "pointermove",
11937
11934
  handlePointerMove,
11938
- {
11939
- capture: true
11940
- }
11935
+ { capture: true }
11941
11936
  );
11942
11937
  };
11943
11938
  const unregister = () => {
@@ -12963,6 +12958,7 @@ var SidebarSection = ({
12963
12958
  init_react_import();
12964
12959
  init_css_box_model_esm();
12965
12960
  var import_react87 = require("react");
12961
+ init_lucide_react();
12966
12962
  init_store();
12967
12963
 
12968
12964
  // components/BrowserBar/index.tsx
@@ -12975,7 +12971,7 @@ init_IconButton2();
12975
12971
 
12976
12972
  // css-module:/Users/rami/Documents/apps/frontend-react-editor/packages/core/components/BrowserBar/styles.module.css#css-module
12977
12973
  init_react_import();
12978
- var styles_module_default27 = { "BrowserBar": "_BrowserBar_1l19b_1", "BrowserBar-urlTrigger": "_BrowserBar-urlTrigger_1l19b_16", "BrowserBar-urlIcon": "_BrowserBar-urlIcon_1l19b_47", "BrowserBar-urlText": "_BrowserBar-urlText_1l19b_52", "BrowserBar-urlPath": "_BrowserBar-urlPath_1l19b_64", "BrowserBar-urlTitle": "_BrowserBar-urlTitle_1l19b_69", "BrowserBar-actions": "_BrowserBar-actions_1l19b_82", "BrowserBar-deviceIcon": "_BrowserBar-deviceIcon_1l19b_89" };
12974
+ var styles_module_default27 = { "BrowserBar": "_BrowserBar_oz0sq_1", "BrowserBar-urlTrigger": "_BrowserBar-urlTrigger_oz0sq_16", "BrowserBar-urlIcon": "_BrowserBar-urlIcon_oz0sq_47", "BrowserBar-urlText": "_BrowserBar-urlText_oz0sq_52", "BrowserBar-urlPath": "_BrowserBar-urlPath_oz0sq_64", "BrowserBar-urlTitle": "_BrowserBar-urlTitle_oz0sq_69", "BrowserBar-actions": "_BrowserBar-actions_oz0sq_82", "BrowserBar-deviceIcon": "_BrowserBar-deviceIcon_oz0sq_89" };
12979
12975
 
12980
12976
  // components/BrowserBar/index.tsx
12981
12977
  var import_jsx_runtime82 = require("react/jsx-runtime");
@@ -13067,11 +13063,12 @@ var BrowserBar = ({
13067
13063
 
13068
13064
  // css-module:/Users/rami/Documents/apps/frontend-react-editor/packages/core/components/Editor/components/Canvas/styles.module.css#css-module
13069
13065
  init_react_import();
13070
- var styles_module_default28 = { "EditorCanvas": "_EditorCanvas_1485f_1", "EditorCanvas-controls": "_EditorCanvas-controls_1485f_17", "EditorCanvas--fullScreen": "_EditorCanvas--fullScreen_1485f_22", "EditorCanvas-inner": "_EditorCanvas-inner_1485f_33", "EditorCanvas-rootColumn": "_EditorCanvas-rootColumn_1485f_46", "EditorCanvas-root": "_EditorCanvas-root_1485f_46", "EditorCanvas--ready": "_EditorCanvas--ready_1485f_86", "EditorCanvas-loader": "_EditorCanvas-loader_1485f_91", "EditorCanvas--showLoader": "_EditorCanvas--showLoader_1485f_101", "EditorCanvas-browserBar": "_EditorCanvas-browserBar_1485f_111" };
13066
+ var styles_module_default28 = { "EditorCanvas": "_EditorCanvas_19sb3_1", "EditorCanvas-controls": "_EditorCanvas-controls_19sb3_17", "EditorCanvas--fullScreen": "_EditorCanvas--fullScreen_19sb3_22", "EditorCanvas-inner": "_EditorCanvas-inner_19sb3_33", "EditorCanvas-rootColumn": "_EditorCanvas-rootColumn_19sb3_46", "EditorCanvas-root": "_EditorCanvas-root_19sb3_46", "EditorCanvas--ready": "_EditorCanvas--ready_19sb3_83", "EditorCanvas-loader": "_EditorCanvas-loader_19sb3_88", "EditorCanvas--showLoader": "_EditorCanvas--showLoader_19sb3_98", "EditorCanvas-browserBar": "_EditorCanvas-browserBar_19sb3_108", "EditorCanvas-zoomControls": "_EditorCanvas-zoomControls_19sb3_113" };
13071
13067
 
13072
13068
  // components/Editor/components/Canvas/index.tsx
13073
13069
  init_lib();
13074
13070
  init_Loader();
13071
+ init_IconButton2();
13075
13072
  var import_shallow9 = require("zustand/react/shallow");
13076
13073
 
13077
13074
  // lib/frame-context.tsx
@@ -13103,11 +13100,18 @@ var useCanvasFrame = () => {
13103
13100
  init_default_viewports();
13104
13101
  var import_jsx_runtime84 = require("react/jsx-runtime");
13105
13102
  var getClassName35 = get_class_name_factory_default("EditorCanvas", styles_module_default28);
13103
+ var ZOOM_STEP = 0.15;
13104
+ var MIN_ZOOM = 0.25;
13105
+ var MAX_ZOOM = 3;
13106
13106
  var TRANSITION_DURATION = 150;
13107
13107
  var Canvas = () => {
13108
13108
  var _a;
13109
13109
  const { frameRef } = useCanvasFrame();
13110
- const { viewports: viewportOptions = defaultViewports, ui: uiProp } = usePropsContext();
13110
+ const {
13111
+ viewports: viewportOptions = defaultViewports,
13112
+ ui: uiProp,
13113
+ disableZoomControls
13114
+ } = usePropsContext();
13111
13115
  const {
13112
13116
  dispatch,
13113
13117
  overrides,
@@ -13130,6 +13134,10 @@ var Canvas = () => {
13130
13134
  }))
13131
13135
  );
13132
13136
  const viewports = useAppStore((s) => s.state.ui.viewports);
13137
+ const [canvasZoom, setCanvasZoom] = (0, import_react87.useState)(1);
13138
+ const zoomIn = () => setCanvasZoom((z) => Math.min(z + ZOOM_STEP, MAX_ZOOM));
13139
+ const zoomOut = () => setCanvasZoom((z) => Math.max(z - ZOOM_STEP, MIN_ZOOM));
13140
+ const resetZoom = () => setCanvasZoom(1);
13133
13141
  const [showTransition, setShowTransition] = (0, import_react87.useState)(false);
13134
13142
  const isResizingRef = (0, import_react87.useRef)(false);
13135
13143
  const defaultRender = (0, import_react87.useMemo)(() => {
@@ -13231,13 +13239,20 @@ var Canvas = () => {
13231
13239
  }
13232
13240
  },
13233
13241
  children: /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: getClassName35("inner"), ref: frameRef, children: [
13242
+ !disableZoomControls && /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: getClassName35("zoomControls"), children: [
13243
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(IconButton, { type: "button", title: "Zoom out", onClick: zoomOut, children: /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(Minus, { size: 14 }) }),
13244
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(IconButton, { type: "button", title: "Reset zoom", onClick: resetZoom, children: /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(RotateCcw, { size: 14 }) }),
13245
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(IconButton, { type: "button", title: "Zoom in", onClick: zoomIn, children: /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(Plus, { size: 14 }) })
13246
+ ] }),
13234
13247
  /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)(
13235
13248
  "div",
13236
13249
  {
13237
13250
  className: getClassName35("rootColumn"),
13238
13251
  style: {
13239
13252
  width: iframe.enabled ? viewports.current.width : "100%",
13240
- transition: showTransition ? `width ${TRANSITION_DURATION}ms ease-out` : ""
13253
+ transform: disableZoomControls ? void 0 : `scale(${canvasZoom})`,
13254
+ transformOrigin: disableZoomControls ? void 0 : "center center",
13255
+ transition: showTransition ? `width ${TRANSITION_DURATION}ms ease-out, transform ${TRANSITION_DURATION}ms ease-out` : disableZoomControls ? void 0 : "transform 150ms ease-out"
13241
13256
  },
13242
13257
  children: [
13243
13258
  iframe.enabled && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("div", { className: getClassName35("browserBar"), children: /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
@@ -13260,12 +13275,6 @@ var Canvas = () => {
13260
13275
  "div",
13261
13276
  {
13262
13277
  className: getClassName35("root"),
13263
- style: {
13264
- height: zoomConfig.rootHeight,
13265
- transform: iframe.enabled ? `scale(${zoomConfig.zoom})` : void 0,
13266
- transition: showTransition ? `height ${TRANSITION_DURATION}ms ease-out, transform ${TRANSITION_DURATION}ms ease-out` : "",
13267
- overflow: iframe.enabled ? void 0 : "auto"
13268
- },
13269
13278
  suppressHydrationWarning: true,
13270
13279
  id: "editor-canvas-root",
13271
13280
  onTransitionEnd: () => {
@@ -14643,7 +14652,6 @@ lucide-react/dist/esm/icons/component.js:
14643
14652
  lucide-react/dist/esm/icons/copy.js:
14644
14653
  lucide-react/dist/esm/icons/corner-left-up.js:
14645
14654
  lucide-react/dist/esm/icons/globe.js:
14646
- lucide-react/dist/esm/icons/grip-vertical.js:
14647
14655
  lucide-react/dist/esm/icons/heading-1.js:
14648
14656
  lucide-react/dist/esm/icons/heading-2.js:
14649
14657
  lucide-react/dist/esm/icons/heading-3.js:
@@ -14666,6 +14674,7 @@ lucide-react/dist/esm/icons/plus.js:
14666
14674
  lucide-react/dist/esm/icons/quote.js:
14667
14675
  lucide-react/dist/esm/icons/rectangle-ellipsis.js:
14668
14676
  lucide-react/dist/esm/icons/redo-2.js:
14677
+ lucide-react/dist/esm/icons/rotate-ccw.js:
14669
14678
  lucide-react/dist/esm/icons/search.js:
14670
14679
  lucide-react/dist/esm/icons/sliders-horizontal.js:
14671
14680
  lucide-react/dist/esm/icons/smartphone.js:
package/dist/index.mjs CHANGED
@@ -19,8 +19,8 @@ import {
19
19
  setDeep,
20
20
  useEditor,
21
21
  useGetEditor
22
- } from "./chunk-QNHSXCWU.mjs";
23
- import "./chunk-F7S5S6I2.mjs";
22
+ } from "./chunk-BQ2PZ2YN.mjs";
23
+ import "./chunk-TCVU3WEN.mjs";
24
24
  import {
25
25
  migrate,
26
26
  resolveAllData,
@@ -35,11 +35,11 @@ import {
35
35
  Label,
36
36
  RichTextMenu,
37
37
  Separator
38
- } from "./chunk-V2OPYD42.mjs";
39
- import "./chunk-6B2Q5R3C.mjs";
40
- import "./chunk-DXGQXXQG.mjs";
41
- import "./chunk-GUMYXUO3.mjs";
42
- import "./chunk-SURZYH7D.mjs";
38
+ } from "./chunk-6Q6A3BQH.mjs";
39
+ import "./chunk-HMTHZBH6.mjs";
40
+ import "./chunk-ZHNRSSMW.mjs";
41
+ import "./chunk-M2RKJTNY.mjs";
42
+ import "./chunk-2LVYDXZS.mjs";
43
43
  import "./chunk-VUEM62JF.mjs";
44
44
  import "./chunk-VOLQMQPK.mjs";
45
45
  import "./chunk-Y2EFNT5P.mjs";
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  useAlignOptions
3
- } from "./chunk-6B2Q5R3C.mjs";
3
+ } from "./chunk-HMTHZBH6.mjs";
4
4
  import {
5
5
  AlignLeft,
6
6
  SelectControl,
7
7
  useControlContext
8
- } from "./chunk-SURZYH7D.mjs";
8
+ } from "./chunk-2LVYDXZS.mjs";
9
9
  import "./chunk-VUEM62JF.mjs";
10
10
  import "./chunk-VOLQMQPK.mjs";
11
11
  import "./chunk-Y2EFNT5P.mjs";
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  useListOptions
3
- } from "./chunk-GUMYXUO3.mjs";
3
+ } from "./chunk-M2RKJTNY.mjs";
4
4
  import {
5
5
  List,
6
6
  SelectControl,
7
7
  useControlContext
8
- } from "./chunk-SURZYH7D.mjs";
8
+ } from "./chunk-2LVYDXZS.mjs";
9
9
  import "./chunk-VUEM62JF.mjs";
10
10
  import "./chunk-VOLQMQPK.mjs";
11
11
  import "./chunk-Y2EFNT5P.mjs";
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  useHeadingOptions
3
- } from "./chunk-DXGQXXQG.mjs";
3
+ } from "./chunk-ZHNRSSMW.mjs";
4
4
  import {
5
5
  Heading,
6
6
  SelectControl,
7
7
  useControlContext
8
- } from "./chunk-SURZYH7D.mjs";
8
+ } from "./chunk-2LVYDXZS.mjs";
9
9
  import "./chunk-VUEM62JF.mjs";
10
10
  import "./chunk-VOLQMQPK.mjs";
11
11
  import "./chunk-Y2EFNT5P.mjs";
@@ -2610,7 +2610,7 @@ body:has(._DropZone--isAnimating_q9qsx_70:empty) [data-editor-overlay] {
2610
2610
  }
2611
2611
 
2612
2612
  /* css-module:/Users/rami/Documents/apps/frontend-react-editor/packages/core/components/BrowserBar/styles.module.css/#css-module-data */
2613
- ._BrowserBar_1l19b_1 {
2613
+ ._BrowserBar_oz0sq_1 {
2614
2614
  align-items: center;
2615
2615
  background: var(--re-surface-panel);
2616
2616
  border: 1px solid var(--re-border-subtle);
@@ -2621,7 +2621,7 @@ body:has(._DropZone--isAnimating_q9qsx_70:empty) [data-editor-overlay] {
2621
2621
  padding: 8px 10px;
2622
2622
  width: 100%;
2623
2623
  }
2624
- ._BrowserBar-urlTrigger_1l19b_16 {
2624
+ ._BrowserBar-urlTrigger_oz0sq_16 {
2625
2625
  align-items: center !important;
2626
2626
  background: var(--re-surface-sunken) !important;
2627
2627
  border: 1px solid var(--re-border-subtle) !important;
@@ -2634,26 +2634,26 @@ body:has(._DropZone--isAnimating_q9qsx_70:empty) [data-editor-overlay] {
2634
2634
  justify-content: flex-start !important;
2635
2635
  min-width: 0 !important;
2636
2636
  overflow: hidden !important;
2637
- padding: 8px 12px !important;
2637
+ padding: 4px 12px !important;
2638
2638
  width: 100% !important;
2639
2639
  }
2640
2640
  @media (hover: hover) and (pointer: fine) {
2641
- ._BrowserBar-urlTrigger_1l19b_16:hover {
2641
+ ._BrowserBar-urlTrigger_oz0sq_16:hover {
2642
2642
  background: var(--re-surface-hover) !important;
2643
2643
  border-color: var(--re-border-default) !important;
2644
2644
  }
2645
2645
  }
2646
- ._BrowserBar-urlTrigger_1l19b_16[data-state=open],
2647
- ._BrowserBar-urlTrigger_1l19b_16:focus-visible {
2646
+ ._BrowserBar-urlTrigger_oz0sq_16[data-state=open],
2647
+ ._BrowserBar-urlTrigger_oz0sq_16:focus-visible {
2648
2648
  border-color: var(--re-border-default) !important;
2649
2649
  box-shadow: var(--re-ring) !important;
2650
2650
  outline: none !important;
2651
2651
  }
2652
- ._BrowserBar-urlIcon_1l19b_47 {
2652
+ ._BrowserBar-urlIcon_oz0sq_47 {
2653
2653
  color: var(--re-text-tertiary);
2654
2654
  flex-shrink: 0;
2655
2655
  }
2656
- ._BrowserBar-urlText_1l19b_52 {
2656
+ ._BrowserBar-urlText_oz0sq_52 {
2657
2657
  color: var(--re-text-primary);
2658
2658
  display: inline-flex;
2659
2659
  flex: 1;
@@ -2664,58 +2664,58 @@ body:has(._DropZone--isAnimating_q9qsx_70:empty) [data-editor-overlay] {
2664
2664
  text-overflow: ellipsis;
2665
2665
  white-space: nowrap;
2666
2666
  }
2667
- ._BrowserBar-urlPath_1l19b_64 {
2667
+ ._BrowserBar-urlPath_oz0sq_64 {
2668
2668
  color: var(--re-text-tertiary);
2669
2669
  flex-shrink: 0;
2670
2670
  }
2671
- ._BrowserBar-urlTitle_1l19b_69 {
2671
+ ._BrowserBar-urlTitle_oz0sq_69 {
2672
2672
  color: var(--re-text-primary);
2673
2673
  overflow: hidden;
2674
2674
  text-overflow: ellipsis;
2675
2675
  }
2676
- ._BrowserBar-urlTrigger_1l19b_16 > svg:last-child {
2676
+ ._BrowserBar-urlTrigger_oz0sq_16 > svg:last-child {
2677
2677
  display: none;
2678
2678
  }
2679
- ._BrowserBar-actions_1l19b_82 {
2679
+ ._BrowserBar-actions_oz0sq_82 {
2680
2680
  align-items: center;
2681
2681
  display: flex;
2682
2682
  flex-shrink: 0;
2683
2683
  gap: 2px;
2684
2684
  }
2685
- ._BrowserBar-deviceIcon_1l19b_89 {
2685
+ ._BrowserBar-deviceIcon_oz0sq_89 {
2686
2686
  color: var(--re-text-primary);
2687
2687
  display: inline-flex;
2688
2688
  }
2689
2689
 
2690
2690
  /* css-module:/Users/rami/Documents/apps/frontend-react-editor/packages/core/components/Editor/components/Canvas/styles.module.css/#css-module-data */
2691
- ._EditorCanvas_1485f_1 {
2691
+ ._EditorCanvas_19sb3_1 {
2692
2692
  background: var(--re-surface-sunken);
2693
2693
  display: flex;
2694
2694
  grid-area: editor;
2695
2695
  flex-direction: column;
2696
2696
  padding: var(--re-space-px);
2697
2697
  position: relative;
2698
- overflow: auto;
2698
+ overflow: hidden;
2699
2699
  }
2700
2700
  @media (min-width: 1198px) {
2701
- ._EditorCanvas_1485f_1 {
2701
+ ._EditorCanvas_19sb3_1 {
2702
2702
  padding: calc(var(--re-space-px) * 1.5);
2703
2703
  padding-top: calc(var(--re-space-px) * 0.5);
2704
2704
  }
2705
- ._EditorCanvas_1485f_1:not(._EditorCanvas_1485f_1:has(._EditorCanvas-controls_1485f_17)) {
2705
+ ._EditorCanvas_19sb3_1:not(._EditorCanvas_19sb3_1:has(._EditorCanvas-controls_19sb3_17)) {
2706
2706
  padding-top: calc(var(--re-space-px) * 1.5);
2707
2707
  }
2708
2708
  }
2709
- ._EditorCanvas--fullScreen_1485f_22 {
2709
+ ._EditorCanvas--fullScreen_19sb3_22 {
2710
2710
  padding: 0;
2711
2711
  overflow: hidden;
2712
2712
  }
2713
2713
  @media (min-width: 1198px) {
2714
- ._EditorCanvas--fullScreen_1485f_22 {
2714
+ ._EditorCanvas--fullScreen_19sb3_22 {
2715
2715
  padding: 0;
2716
2716
  }
2717
2717
  }
2718
- ._EditorCanvas-inner_1485f_33 {
2718
+ ._EditorCanvas-inner_19sb3_33 {
2719
2719
  display: flex;
2720
2720
  height: 100%;
2721
2721
  justify-content: center;
@@ -2723,46 +2723,43 @@ body:has(._DropZone--isAnimating_q9qsx_70:empty) [data-editor-overlay] {
2723
2723
  position: relative;
2724
2724
  width: 100%;
2725
2725
  }
2726
- ._EditorCanvas-rootColumn_1485f_46 {
2726
+ ._EditorCanvas-rootColumn_19sb3_46 {
2727
2727
  box-sizing: content-box;
2728
2728
  display: flex;
2729
2729
  flex-direction: column;
2730
2730
  min-width: 321px;
2731
- position: absolute;
2732
- top: 0;
2733
- bottom: 0;
2731
+ height: 100%;
2734
2732
  transform-origin: top;
2735
2733
  }
2736
2734
  @media (min-width: 1198px) {
2737
- ._EditorCanvas-rootColumn_1485f_46 {
2735
+ ._EditorCanvas-rootColumn_19sb3_46 {
2738
2736
  min-width: unset;
2739
2737
  }
2740
2738
  }
2741
2739
  @media (prefers-reduced-motion: reduce) {
2742
- ._EditorCanvas-rootColumn_1485f_46 {
2740
+ ._EditorCanvas-rootColumn_19sb3_46 {
2743
2741
  transition: none !important;
2744
2742
  }
2745
2743
  }
2746
- ._EditorCanvas-root_1485f_46 {
2744
+ ._EditorCanvas-root_19sb3_46 {
2747
2745
  background: var(--re-surface-panel);
2748
2746
  outline: 1px solid var(--re-border-subtle);
2749
2747
  box-shadow: var(--re-shadow-lg);
2750
2748
  border-radius: 0 0 var(--re-radius-md) var(--re-radius-md);
2751
2749
  flex: 1;
2752
- min-height: 0;
2753
2750
  pointer-events: none;
2754
2751
  opacity: 0;
2755
2752
  }
2756
2753
  @media (prefers-reduced-motion: reduce) {
2757
- ._EditorCanvas-root_1485f_46 {
2754
+ ._EditorCanvas-root_19sb3_46 {
2758
2755
  transition: none !important;
2759
2756
  }
2760
2757
  }
2761
- ._EditorCanvas--ready_1485f_86 ._EditorCanvas-root_1485f_46 {
2758
+ ._EditorCanvas--ready_19sb3_83 ._EditorCanvas-root_19sb3_46 {
2762
2759
  pointer-events: unset;
2763
2760
  opacity: 1;
2764
2761
  }
2765
- ._EditorCanvas-loader_1485f_91 {
2762
+ ._EditorCanvas-loader_19sb3_88 {
2766
2763
  align-items: center;
2767
2764
  color: var(--re-text-tertiary);
2768
2765
  display: flex;
@@ -2771,18 +2768,32 @@ body:has(._DropZone--isAnimating_q9qsx_70:empty) [data-editor-overlay] {
2771
2768
  transition: opacity 250ms ease-out;
2772
2769
  opacity: 0;
2773
2770
  }
2774
- ._EditorCanvas--showLoader_1485f_101 ._EditorCanvas-loader_1485f_91 {
2771
+ ._EditorCanvas--showLoader_19sb3_98 ._EditorCanvas-loader_19sb3_88 {
2775
2772
  opacity: 1;
2776
2773
  }
2777
- ._EditorCanvas--showLoader_1485f_101._EditorCanvas--ready_1485f_86 ._EditorCanvas-loader_1485f_91 {
2774
+ ._EditorCanvas--showLoader_19sb3_98._EditorCanvas--ready_19sb3_83 ._EditorCanvas-loader_19sb3_88 {
2778
2775
  opacity: 0;
2779
2776
  height: 0;
2780
2777
  transition: none;
2781
2778
  }
2782
- ._EditorCanvas-browserBar_1485f_111 {
2779
+ ._EditorCanvas-browserBar_19sb3_108 {
2783
2780
  flex-shrink: 0;
2784
2781
  width: 100%;
2785
2782
  }
2783
+ ._EditorCanvas-zoomControls_19sb3_113 {
2784
+ align-items: center;
2785
+ background: var(--re-surface-panel);
2786
+ border: 1px solid var(--re-border-subtle);
2787
+ border-radius: var(--re-radius-md);
2788
+ bottom: 16px;
2789
+ box-shadow: var(--re-shadow-md);
2790
+ display: flex;
2791
+ gap: 2px;
2792
+ padding: 4px;
2793
+ position: absolute;
2794
+ right: 16px;
2795
+ z-index: 10;
2796
+ }
2786
2797
 
2787
2798
  /* css-module:/Users/rami/Documents/apps/frontend-react-editor/packages/core/components/Editor/components/ResizeHandle/styles.module.css/#css-module-data */
2788
2799
  @media (min-width: 766px) {