@reacteditor/core 0.0.1-alpha.0 → 0.0.3

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.
@@ -4,16 +4,16 @@ import {
4
4
  import {
5
5
  EditorInner,
6
6
  LoadedRichTextMenu
7
- } from "./chunk-F7S5S6I2.mjs";
7
+ } from "./chunk-TCVU3WEN.mjs";
8
8
  import "./chunk-MFI3RDA4.mjs";
9
- import "./chunk-V2OPYD42.mjs";
10
- import "./chunk-6B2Q5R3C.mjs";
11
- import "./chunk-DXGQXXQG.mjs";
12
- import "./chunk-GUMYXUO3.mjs";
9
+ import "./chunk-6Q6A3BQH.mjs";
10
+ import "./chunk-HMTHZBH6.mjs";
11
+ import "./chunk-ZHNRSSMW.mjs";
12
+ import "./chunk-M2RKJTNY.mjs";
13
13
  import {
14
14
  useAppStore,
15
15
  useAppStoreApi
16
- } from "./chunk-SURZYH7D.mjs";
16
+ } from "./chunk-2LVYDXZS.mjs";
17
17
  import "./chunk-VUEM62JF.mjs";
18
18
  import "./chunk-VOLQMQPK.mjs";
19
19
  import "./chunk-Y2EFNT5P.mjs";
@@ -255,17 +255,6 @@ var Globe = createLucideIcon("Globe", [
255
255
  ["path", { d: "M2 12h20", key: "9i4pu4" }]
256
256
  ]);
257
257
 
258
- // ../../node_modules/lucide-react/dist/esm/icons/grip-vertical.js
259
- init_react_import();
260
- var GripVertical = createLucideIcon("GripVertical", [
261
- ["circle", { cx: "9", cy: "12", r: "1", key: "1vctgf" }],
262
- ["circle", { cx: "9", cy: "5", r: "1", key: "hp0tcf" }],
263
- ["circle", { cx: "9", cy: "19", r: "1", key: "fkjjf6" }],
264
- ["circle", { cx: "15", cy: "12", r: "1", key: "1tmaij" }],
265
- ["circle", { cx: "15", cy: "5", r: "1", key: "19l28e" }],
266
- ["circle", { cx: "15", cy: "19", r: "1", key: "f4zoj3" }]
267
- ]);
268
-
269
258
  // ../../node_modules/lucide-react/dist/esm/icons/heading-1.js
270
259
  init_react_import();
271
260
  var Heading1 = createLucideIcon("Heading1", [
@@ -464,6 +453,13 @@ var Redo2 = createLucideIcon("Redo2", [
464
453
  ["path", { d: "M20 9H9.5A5.5 5.5 0 0 0 4 14.5A5.5 5.5 0 0 0 9.5 20H13", key: "6uklza" }]
465
454
  ]);
466
455
 
456
+ // ../../node_modules/lucide-react/dist/esm/icons/rotate-ccw.js
457
+ init_react_import();
458
+ var RotateCcw = createLucideIcon("RotateCcw", [
459
+ ["path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8", key: "1357e3" }],
460
+ ["path", { d: "M3 3v5h5", key: "1xhq8a" }]
461
+ ]);
462
+
467
463
  // ../../node_modules/lucide-react/dist/esm/icons/search.js
468
464
  init_react_import();
469
465
  var Search = createLucideIcon("Search", [
@@ -1609,7 +1605,6 @@ export {
1609
1605
  Copy,
1610
1606
  CornerLeftUp,
1611
1607
  Globe,
1612
- GripVertical,
1613
1608
  Heading1,
1614
1609
  Heading2,
1615
1610
  Heading3,
@@ -1632,6 +1627,7 @@ export {
1632
1627
  Quote,
1633
1628
  RectangleEllipsis,
1634
1629
  Redo2,
1630
+ RotateCcw,
1635
1631
  Search,
1636
1632
  SlidersHorizontal,
1637
1633
  Smartphone,
@@ -1683,7 +1679,6 @@ lucide-react/dist/esm/icons/component.js:
1683
1679
  lucide-react/dist/esm/icons/copy.js:
1684
1680
  lucide-react/dist/esm/icons/corner-left-up.js:
1685
1681
  lucide-react/dist/esm/icons/globe.js:
1686
- lucide-react/dist/esm/icons/grip-vertical.js:
1687
1682
  lucide-react/dist/esm/icons/heading-1.js:
1688
1683
  lucide-react/dist/esm/icons/heading-2.js:
1689
1684
  lucide-react/dist/esm/icons/heading-3.js:
@@ -1704,6 +1699,7 @@ lucide-react/dist/esm/icons/plus.js:
1704
1699
  lucide-react/dist/esm/icons/quote.js:
1705
1700
  lucide-react/dist/esm/icons/rectangle-ellipsis.js:
1706
1701
  lucide-react/dist/esm/icons/redo-2.js:
1702
+ lucide-react/dist/esm/icons/rotate-ccw.js:
1707
1703
  lucide-react/dist/esm/icons/search.js:
1708
1704
  lucide-react/dist/esm/icons/sliders-horizontal.js:
1709
1705
  lucide-react/dist/esm/icons/smartphone.js:
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  useAlignOptions
3
- } from "./chunk-6B2Q5R3C.mjs";
3
+ } from "./chunk-HMTHZBH6.mjs";
4
4
  import {
5
5
  useHeadingOptions
6
- } from "./chunk-DXGQXXQG.mjs";
6
+ } from "./chunk-ZHNRSSMW.mjs";
7
7
  import {
8
8
  useListOptions
9
- } from "./chunk-GUMYXUO3.mjs";
9
+ } from "./chunk-M2RKJTNY.mjs";
10
10
  import {
11
11
  AlignCenter,
12
12
  AlignJustify,
@@ -26,7 +26,7 @@ import {
26
26
  Strikethrough,
27
27
  Underline,
28
28
  useControlContext
29
- } from "./chunk-SURZYH7D.mjs";
29
+ } from "./chunk-2LVYDXZS.mjs";
30
30
  import {
31
31
  get_class_name_factory_default
32
32
  } from "./chunk-Y2EFNT5P.mjs";
@@ -349,7 +349,7 @@ function AlignSelectFallback() {
349
349
  // components/RichTextMenu/controls/AlignSelect/index.tsx
350
350
  import { jsx as jsx10 } from "react/jsx-runtime";
351
351
  var AlignSelectLoaded = lazy(
352
- () => import("./loaded-ULSROV73.mjs").then((m) => ({
352
+ () => import("./loaded-CBJRWD4Z.mjs").then((m) => ({
353
353
  default: m.AlignSelectLoaded
354
354
  }))
355
355
  );
@@ -580,7 +580,7 @@ function HeadingSelectFallback() {
580
580
  // components/RichTextMenu/controls/HeadingSelect/index.tsx
581
581
  import { jsx as jsx22 } from "react/jsx-runtime";
582
582
  var HeadingSelectLoaded = lazy2(
583
- () => import("./loaded-35WC23HJ.mjs").then((m) => ({
583
+ () => import("./loaded-IJNA4SY5.mjs").then((m) => ({
584
584
  default: m.HeadingSelectLoaded
585
585
  }))
586
586
  );
@@ -612,7 +612,7 @@ function ListSelectFallback() {
612
612
  // components/RichTextMenu/controls/ListSelect/index.tsx
613
613
  import { jsx as jsx24 } from "react/jsx-runtime";
614
614
  var ListSelectLoaded = lazy3(
615
- () => import("./loaded-YYRJPIWZ.mjs").then((m) => ({
615
+ () => import("./loaded-DGSPK47E.mjs").then((m) => ({
616
616
  default: m.ListSelectLoaded
617
617
  }))
618
618
  );
@@ -3,7 +3,7 @@ import {
3
3
  AlignJustify,
4
4
  AlignLeft,
5
5
  AlignRight
6
- } from "./chunk-SURZYH7D.mjs";
6
+ } from "./chunk-2LVYDXZS.mjs";
7
7
  import {
8
8
  init_react_import
9
9
  } from "./chunk-M6W7YEVX.mjs";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  List,
3
3
  ListOrdered
4
- } from "./chunk-SURZYH7D.mjs";
4
+ } from "./chunk-2LVYDXZS.mjs";
5
5
  import {
6
6
  init_react_import
7
7
  } from "./chunk-M6W7YEVX.mjs";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  EditorInner,
3
3
  LoadedRichTextMenu
4
- } from "./chunk-F7S5S6I2.mjs";
4
+ } from "./chunk-TCVU3WEN.mjs";
5
5
  import {
6
6
  RichTextRenderFallback,
7
7
  SlotRender,
@@ -16,7 +16,7 @@ import {
16
16
  IconButton,
17
17
  LoadedRichTextMenuInner,
18
18
  Loader
19
- } from "./chunk-V2OPYD42.mjs";
19
+ } from "./chunk-6Q6A3BQH.mjs";
20
20
  import {
21
21
  Check,
22
22
  ChevronDown,
@@ -26,17 +26,18 @@ import {
26
26
  Copy,
27
27
  CornerLeftUp,
28
28
  Globe,
29
- GripVertical,
30
29
  Layers,
31
30
  Link,
32
31
  Lock,
33
32
  Maximize,
34
33
  Minimize,
34
+ Minus,
35
35
  Monitor,
36
36
  Moon,
37
37
  Plus,
38
38
  RectangleEllipsis,
39
39
  Redo2,
40
+ RotateCcw,
40
41
  Search,
41
42
  SlidersHorizontal,
42
43
  Smartphone,
@@ -59,7 +60,7 @@ import {
59
60
  useRegisterFieldsSlice,
60
61
  useRegisterHistorySlice,
61
62
  useRegisterPermissionsSlice
62
- } from "./chunk-SURZYH7D.mjs";
63
+ } from "./chunk-2LVYDXZS.mjs";
63
64
  import {
64
65
  getItem,
65
66
  insert,
@@ -2104,7 +2105,7 @@ EditorFallback.displayName = "EditorFallback";
2104
2105
  // components/AutoField/fields/RichtextField/index.tsx
2105
2106
  import { Fragment as Fragment3, jsx as jsx19 } from "react/jsx-runtime";
2106
2107
  var Editor = lazy(
2107
- () => import("./Editor-IKMJILGR.mjs").then((m) => ({
2108
+ () => import("./Editor-2TYODRQT.mjs").then((m) => ({
2108
2109
  default: m.Editor
2109
2110
  }))
2110
2111
  );
@@ -4024,7 +4025,7 @@ var DrawerItemInner = ({
4024
4025
  "data-testid": dragRef ? `drawer-item:${name}` : "",
4025
4026
  "data-editor-drawer-item": true,
4026
4027
  children: /* @__PURE__ */ jsx25(CustomInner, { name, children: /* @__PURE__ */ jsx25("div", { className: getClassNameItem2("draggableWrapper"), children: /* @__PURE__ */ jsxs9("div", { className: getClassNameItem2("draggable"), children: [
4027
- /* @__PURE__ */ jsx25("div", { className: getClassNameItem2("icon"), children: icon != null ? icon : /* @__PURE__ */ jsx25(GripVertical, { size: 14 }) }),
4028
+ icon && /* @__PURE__ */ jsx25("div", { className: getClassNameItem2("icon"), children: icon }),
4028
4029
  /* @__PURE__ */ jsx25("div", { className: getClassNameItem2("name"), children: label != null ? label : name })
4029
4030
  ] }) }) })
4030
4031
  }
@@ -4604,7 +4605,7 @@ import {
4604
4605
  } from "react";
4605
4606
  import { jsx as jsx29 } from "react/jsx-runtime";
4606
4607
  var Editor2 = lazy2(
4607
- () => import("./Editor-IKMJILGR.mjs").then((m) => ({
4608
+ () => import("./Editor-2TYODRQT.mjs").then((m) => ({
4608
4609
  default: m.Editor
4609
4610
  }))
4610
4611
  );
@@ -7030,9 +7031,7 @@ var useBubbleIframeEvents = (ref) => {
7030
7031
  (_a = iframe.contentDocument) == null ? void 0 : _a.addEventListener(
7031
7032
  "pointermove",
7032
7033
  handlePointerMove,
7033
- {
7034
- capture: true
7035
- }
7034
+ { capture: true }
7036
7035
  );
7037
7036
  };
7038
7037
  const unregister = () => {
@@ -7351,7 +7350,7 @@ import { useMemo as useMemo20 } from "react";
7351
7350
 
7352
7351
  // css-module:/Users/rami/Documents/apps/frontend-react-editor/packages/core/components/BrowserBar/styles.module.css#css-module
7353
7352
  init_react_import();
7354
- var styles_module_default24 = { "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" };
7353
+ var styles_module_default24 = { "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" };
7355
7354
 
7356
7355
  // components/BrowserBar/index.tsx
7357
7356
  import { jsx as jsx47, jsxs as jsxs18 } from "react/jsx-runtime";
@@ -7443,7 +7442,7 @@ var BrowserBar = ({
7443
7442
 
7444
7443
  // css-module:/Users/rami/Documents/apps/frontend-react-editor/packages/core/components/Editor/components/Canvas/styles.module.css#css-module
7445
7444
  init_react_import();
7446
- var styles_module_default25 = { "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" };
7445
+ var styles_module_default25 = { "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" };
7447
7446
 
7448
7447
  // components/Editor/components/Canvas/index.tsx
7449
7448
  import { useShallow as useShallow9 } from "zustand/react/shallow";
@@ -7481,11 +7480,18 @@ var useCanvasFrame = () => {
7481
7480
  // components/Editor/components/Canvas/index.tsx
7482
7481
  import { Fragment as Fragment13, jsx as jsx49, jsxs as jsxs19 } from "react/jsx-runtime";
7483
7482
  var getClassName29 = get_class_name_factory_default("EditorCanvas", styles_module_default25);
7483
+ var ZOOM_STEP = 0.15;
7484
+ var MIN_ZOOM = 0.25;
7485
+ var MAX_ZOOM = 3;
7484
7486
  var TRANSITION_DURATION = 150;
7485
7487
  var Canvas = () => {
7486
7488
  var _a;
7487
7489
  const { frameRef } = useCanvasFrame();
7488
- const { viewports: viewportOptions = defaultViewports, ui: uiProp } = usePropsContext();
7490
+ const {
7491
+ viewports: viewportOptions = defaultViewports,
7492
+ ui: uiProp,
7493
+ disableZoomControls
7494
+ } = usePropsContext();
7489
7495
  const {
7490
7496
  dispatch,
7491
7497
  overrides,
@@ -7508,6 +7514,10 @@ var Canvas = () => {
7508
7514
  }))
7509
7515
  );
7510
7516
  const viewports = useAppStore((s) => s.state.ui.viewports);
7517
+ const [canvasZoom, setCanvasZoom] = useState20(1);
7518
+ const zoomIn = () => setCanvasZoom((z) => Math.min(z + ZOOM_STEP, MAX_ZOOM));
7519
+ const zoomOut = () => setCanvasZoom((z) => Math.max(z - ZOOM_STEP, MIN_ZOOM));
7520
+ const resetZoom = () => setCanvasZoom(1);
7511
7521
  const [showTransition, setShowTransition] = useState20(false);
7512
7522
  const isResizingRef = useRef13(false);
7513
7523
  const defaultRender = useMemo22(() => {
@@ -7609,13 +7619,20 @@ var Canvas = () => {
7609
7619
  }
7610
7620
  },
7611
7621
  children: /* @__PURE__ */ jsxs19("div", { className: getClassName29("inner"), ref: frameRef, children: [
7622
+ !disableZoomControls && /* @__PURE__ */ jsxs19("div", { className: getClassName29("zoomControls"), children: [
7623
+ /* @__PURE__ */ jsx49(IconButton, { type: "button", title: "Zoom out", onClick: zoomOut, children: /* @__PURE__ */ jsx49(Minus, { size: 14 }) }),
7624
+ /* @__PURE__ */ jsx49(IconButton, { type: "button", title: "Reset zoom", onClick: resetZoom, children: /* @__PURE__ */ jsx49(RotateCcw, { size: 14 }) }),
7625
+ /* @__PURE__ */ jsx49(IconButton, { type: "button", title: "Zoom in", onClick: zoomIn, children: /* @__PURE__ */ jsx49(Plus, { size: 14 }) })
7626
+ ] }),
7612
7627
  /* @__PURE__ */ jsxs19(
7613
7628
  "div",
7614
7629
  {
7615
7630
  className: getClassName29("rootColumn"),
7616
7631
  style: {
7617
7632
  width: iframe.enabled ? viewports.current.width : "100%",
7618
- transition: showTransition ? `width ${TRANSITION_DURATION}ms ease-out` : ""
7633
+ transform: disableZoomControls ? void 0 : `scale(${canvasZoom})`,
7634
+ transformOrigin: disableZoomControls ? void 0 : "center center",
7635
+ transition: showTransition ? `width ${TRANSITION_DURATION}ms ease-out, transform ${TRANSITION_DURATION}ms ease-out` : disableZoomControls ? void 0 : "transform 150ms ease-out"
7619
7636
  },
7620
7637
  children: [
7621
7638
  iframe.enabled && /* @__PURE__ */ jsx49("div", { className: getClassName29("browserBar"), children: /* @__PURE__ */ jsx49(
@@ -7638,12 +7655,6 @@ var Canvas = () => {
7638
7655
  "div",
7639
7656
  {
7640
7657
  className: getClassName29("root"),
7641
- style: {
7642
- height: zoomConfig.rootHeight,
7643
- transform: iframe.enabled ? `scale(${zoomConfig.zoom})` : void 0,
7644
- transition: showTransition ? `height ${TRANSITION_DURATION}ms ease-out, transform ${TRANSITION_DURATION}ms ease-out` : "",
7645
- overflow: iframe.enabled ? void 0 : "auto"
7646
- },
7647
7658
  suppressHydrationWarning: true,
7648
7659
  id: "editor-canvas-root",
7649
7660
  onTransitionEnd: () => {
@@ -3,11 +3,11 @@ import {
3
3
  } from "./chunk-MFI3RDA4.mjs";
4
4
  import {
5
5
  LoadedRichTextMenuInner
6
- } from "./chunk-V2OPYD42.mjs";
6
+ } from "./chunk-6Q6A3BQH.mjs";
7
7
  import {
8
8
  useAppStore,
9
9
  useAppStoreApi
10
- } from "./chunk-SURZYH7D.mjs";
10
+ } from "./chunk-2LVYDXZS.mjs";
11
11
  import {
12
12
  get_class_name_factory_default
13
13
  } from "./chunk-Y2EFNT5P.mjs";
@@ -100,7 +100,7 @@ init_react_import();
100
100
  import { lazy, Suspense } from "react";
101
101
  import { jsx as jsx2 } from "react/jsx-runtime";
102
102
  var LoadedRichTextMenuFull = lazy(
103
- () => import("./full-OBTPW7TC.mjs").then((m) => ({
103
+ () => import("./full-7KJICNR5.mjs").then((m) => ({
104
104
  default: m.LoadedRichTextMenuFull
105
105
  }))
106
106
  );
@@ -5,7 +5,7 @@ import {
5
5
  Heading4,
6
6
  Heading5,
7
7
  Heading6
8
- } from "./chunk-SURZYH7D.mjs";
8
+ } from "./chunk-2LVYDXZS.mjs";
9
9
  import {
10
10
  init_react_import
11
11
  } from "./chunk-M6W7YEVX.mjs";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  LoadedRichTextMenuInner
3
- } from "./chunk-V2OPYD42.mjs";
4
- import "./chunk-6B2Q5R3C.mjs";
5
- import "./chunk-DXGQXXQG.mjs";
6
- import "./chunk-GUMYXUO3.mjs";
7
- import "./chunk-SURZYH7D.mjs";
3
+ } from "./chunk-6Q6A3BQH.mjs";
4
+ import "./chunk-HMTHZBH6.mjs";
5
+ import "./chunk-ZHNRSSMW.mjs";
6
+ import "./chunk-M2RKJTNY.mjs";
7
+ import "./chunk-2LVYDXZS.mjs";
8
8
  import "./chunk-VUEM62JF.mjs";
9
9
  import "./chunk-VOLQMQPK.mjs";
10
10
  import "./chunk-Y2EFNT5P.mjs";
package/dist/index.css CHANGED
@@ -2612,7 +2612,7 @@ body:has(._DropZone--isAnimating_q9qsx_70:empty) [data-editor-overlay] {
2612
2612
  }
2613
2613
 
2614
2614
  /* css-module:/Users/rami/Documents/apps/frontend-react-editor/packages/core/components/BrowserBar/styles.module.css/#css-module-data */
2615
- ._BrowserBar_1l19b_1 {
2615
+ ._BrowserBar_oz0sq_1 {
2616
2616
  align-items: center;
2617
2617
  background: var(--re-surface-panel);
2618
2618
  border: 1px solid var(--re-border-subtle);
@@ -2623,7 +2623,7 @@ body:has(._DropZone--isAnimating_q9qsx_70:empty) [data-editor-overlay] {
2623
2623
  padding: 8px 10px;
2624
2624
  width: 100%;
2625
2625
  }
2626
- ._BrowserBar-urlTrigger_1l19b_16 {
2626
+ ._BrowserBar-urlTrigger_oz0sq_16 {
2627
2627
  align-items: center !important;
2628
2628
  background: var(--re-surface-sunken) !important;
2629
2629
  border: 1px solid var(--re-border-subtle) !important;
@@ -2636,26 +2636,26 @@ body:has(._DropZone--isAnimating_q9qsx_70:empty) [data-editor-overlay] {
2636
2636
  justify-content: flex-start !important;
2637
2637
  min-width: 0 !important;
2638
2638
  overflow: hidden !important;
2639
- padding: 8px 12px !important;
2639
+ padding: 4px 12px !important;
2640
2640
  width: 100% !important;
2641
2641
  }
2642
2642
  @media (hover: hover) and (pointer: fine) {
2643
- ._BrowserBar-urlTrigger_1l19b_16:hover {
2643
+ ._BrowserBar-urlTrigger_oz0sq_16:hover {
2644
2644
  background: var(--re-surface-hover) !important;
2645
2645
  border-color: var(--re-border-default) !important;
2646
2646
  }
2647
2647
  }
2648
- ._BrowserBar-urlTrigger_1l19b_16[data-state=open],
2649
- ._BrowserBar-urlTrigger_1l19b_16:focus-visible {
2648
+ ._BrowserBar-urlTrigger_oz0sq_16[data-state=open],
2649
+ ._BrowserBar-urlTrigger_oz0sq_16:focus-visible {
2650
2650
  border-color: var(--re-border-default) !important;
2651
2651
  box-shadow: var(--re-ring) !important;
2652
2652
  outline: none !important;
2653
2653
  }
2654
- ._BrowserBar-urlIcon_1l19b_47 {
2654
+ ._BrowserBar-urlIcon_oz0sq_47 {
2655
2655
  color: var(--re-text-tertiary);
2656
2656
  flex-shrink: 0;
2657
2657
  }
2658
- ._BrowserBar-urlText_1l19b_52 {
2658
+ ._BrowserBar-urlText_oz0sq_52 {
2659
2659
  color: var(--re-text-primary);
2660
2660
  display: inline-flex;
2661
2661
  flex: 1;
@@ -2666,58 +2666,58 @@ body:has(._DropZone--isAnimating_q9qsx_70:empty) [data-editor-overlay] {
2666
2666
  text-overflow: ellipsis;
2667
2667
  white-space: nowrap;
2668
2668
  }
2669
- ._BrowserBar-urlPath_1l19b_64 {
2669
+ ._BrowserBar-urlPath_oz0sq_64 {
2670
2670
  color: var(--re-text-tertiary);
2671
2671
  flex-shrink: 0;
2672
2672
  }
2673
- ._BrowserBar-urlTitle_1l19b_69 {
2673
+ ._BrowserBar-urlTitle_oz0sq_69 {
2674
2674
  color: var(--re-text-primary);
2675
2675
  overflow: hidden;
2676
2676
  text-overflow: ellipsis;
2677
2677
  }
2678
- ._BrowserBar-urlTrigger_1l19b_16 > svg:last-child {
2678
+ ._BrowserBar-urlTrigger_oz0sq_16 > svg:last-child {
2679
2679
  display: none;
2680
2680
  }
2681
- ._BrowserBar-actions_1l19b_82 {
2681
+ ._BrowserBar-actions_oz0sq_82 {
2682
2682
  align-items: center;
2683
2683
  display: flex;
2684
2684
  flex-shrink: 0;
2685
2685
  gap: 2px;
2686
2686
  }
2687
- ._BrowserBar-deviceIcon_1l19b_89 {
2687
+ ._BrowserBar-deviceIcon_oz0sq_89 {
2688
2688
  color: var(--re-text-primary);
2689
2689
  display: inline-flex;
2690
2690
  }
2691
2691
 
2692
2692
  /* css-module:/Users/rami/Documents/apps/frontend-react-editor/packages/core/components/Editor/components/Canvas/styles.module.css/#css-module-data */
2693
- ._EditorCanvas_1485f_1 {
2693
+ ._EditorCanvas_19sb3_1 {
2694
2694
  background: var(--re-surface-sunken);
2695
2695
  display: flex;
2696
2696
  grid-area: editor;
2697
2697
  flex-direction: column;
2698
2698
  padding: var(--re-space-px);
2699
2699
  position: relative;
2700
- overflow: auto;
2700
+ overflow: hidden;
2701
2701
  }
2702
2702
  @media (min-width: 1198px) {
2703
- ._EditorCanvas_1485f_1 {
2703
+ ._EditorCanvas_19sb3_1 {
2704
2704
  padding: calc(var(--re-space-px) * 1.5);
2705
2705
  padding-top: calc(var(--re-space-px) * 0.5);
2706
2706
  }
2707
- ._EditorCanvas_1485f_1:not(._EditorCanvas_1485f_1:has(._EditorCanvas-controls_1485f_17)) {
2707
+ ._EditorCanvas_19sb3_1:not(._EditorCanvas_19sb3_1:has(._EditorCanvas-controls_19sb3_17)) {
2708
2708
  padding-top: calc(var(--re-space-px) * 1.5);
2709
2709
  }
2710
2710
  }
2711
- ._EditorCanvas--fullScreen_1485f_22 {
2711
+ ._EditorCanvas--fullScreen_19sb3_22 {
2712
2712
  padding: 0;
2713
2713
  overflow: hidden;
2714
2714
  }
2715
2715
  @media (min-width: 1198px) {
2716
- ._EditorCanvas--fullScreen_1485f_22 {
2716
+ ._EditorCanvas--fullScreen_19sb3_22 {
2717
2717
  padding: 0;
2718
2718
  }
2719
2719
  }
2720
- ._EditorCanvas-inner_1485f_33 {
2720
+ ._EditorCanvas-inner_19sb3_33 {
2721
2721
  display: flex;
2722
2722
  height: 100%;
2723
2723
  justify-content: center;
@@ -2725,46 +2725,43 @@ body:has(._DropZone--isAnimating_q9qsx_70:empty) [data-editor-overlay] {
2725
2725
  position: relative;
2726
2726
  width: 100%;
2727
2727
  }
2728
- ._EditorCanvas-rootColumn_1485f_46 {
2728
+ ._EditorCanvas-rootColumn_19sb3_46 {
2729
2729
  box-sizing: content-box;
2730
2730
  display: flex;
2731
2731
  flex-direction: column;
2732
2732
  min-width: 321px;
2733
- position: absolute;
2734
- top: 0;
2735
- bottom: 0;
2733
+ height: 100%;
2736
2734
  transform-origin: top;
2737
2735
  }
2738
2736
  @media (min-width: 1198px) {
2739
- ._EditorCanvas-rootColumn_1485f_46 {
2737
+ ._EditorCanvas-rootColumn_19sb3_46 {
2740
2738
  min-width: unset;
2741
2739
  }
2742
2740
  }
2743
2741
  @media (prefers-reduced-motion: reduce) {
2744
- ._EditorCanvas-rootColumn_1485f_46 {
2742
+ ._EditorCanvas-rootColumn_19sb3_46 {
2745
2743
  transition: none !important;
2746
2744
  }
2747
2745
  }
2748
- ._EditorCanvas-root_1485f_46 {
2746
+ ._EditorCanvas-root_19sb3_46 {
2749
2747
  background: var(--re-surface-panel);
2750
2748
  outline: 1px solid var(--re-border-subtle);
2751
2749
  box-shadow: var(--re-shadow-lg);
2752
2750
  border-radius: 0 0 var(--re-radius-md) var(--re-radius-md);
2753
2751
  flex: 1;
2754
- min-height: 0;
2755
2752
  pointer-events: none;
2756
2753
  opacity: 0;
2757
2754
  }
2758
2755
  @media (prefers-reduced-motion: reduce) {
2759
- ._EditorCanvas-root_1485f_46 {
2756
+ ._EditorCanvas-root_19sb3_46 {
2760
2757
  transition: none !important;
2761
2758
  }
2762
2759
  }
2763
- ._EditorCanvas--ready_1485f_86 ._EditorCanvas-root_1485f_46 {
2760
+ ._EditorCanvas--ready_19sb3_83 ._EditorCanvas-root_19sb3_46 {
2764
2761
  pointer-events: unset;
2765
2762
  opacity: 1;
2766
2763
  }
2767
- ._EditorCanvas-loader_1485f_91 {
2764
+ ._EditorCanvas-loader_19sb3_88 {
2768
2765
  align-items: center;
2769
2766
  color: var(--re-text-tertiary);
2770
2767
  display: flex;
@@ -2773,18 +2770,32 @@ body:has(._DropZone--isAnimating_q9qsx_70:empty) [data-editor-overlay] {
2773
2770
  transition: opacity 250ms ease-out;
2774
2771
  opacity: 0;
2775
2772
  }
2776
- ._EditorCanvas--showLoader_1485f_101 ._EditorCanvas-loader_1485f_91 {
2773
+ ._EditorCanvas--showLoader_19sb3_98 ._EditorCanvas-loader_19sb3_88 {
2777
2774
  opacity: 1;
2778
2775
  }
2779
- ._EditorCanvas--showLoader_1485f_101._EditorCanvas--ready_1485f_86 ._EditorCanvas-loader_1485f_91 {
2776
+ ._EditorCanvas--showLoader_19sb3_98._EditorCanvas--ready_19sb3_83 ._EditorCanvas-loader_19sb3_88 {
2780
2777
  opacity: 0;
2781
2778
  height: 0;
2782
2779
  transition: none;
2783
2780
  }
2784
- ._EditorCanvas-browserBar_1485f_111 {
2781
+ ._EditorCanvas-browserBar_19sb3_108 {
2785
2782
  flex-shrink: 0;
2786
2783
  width: 100%;
2787
2784
  }
2785
+ ._EditorCanvas-zoomControls_19sb3_113 {
2786
+ align-items: center;
2787
+ background: var(--re-surface-panel);
2788
+ border: 1px solid var(--re-border-subtle);
2789
+ border-radius: var(--re-radius-md);
2790
+ bottom: 16px;
2791
+ box-shadow: var(--re-shadow-md);
2792
+ display: flex;
2793
+ gap: 2px;
2794
+ padding: 4px;
2795
+ position: absolute;
2796
+ right: 16px;
2797
+ z-index: 10;
2798
+ }
2788
2799
 
2789
2800
  /* css-module:/Users/rami/Documents/apps/frontend-react-editor/packages/core/components/Editor/components/ResizeHandle/styles.module.css/#css-module-data */
2790
2801
  @media (min-width: 766px) {
package/dist/index.d.mts CHANGED
@@ -201,6 +201,7 @@ type EditorProps<UserConfig extends Config = Config, G extends UserGenerics<User
201
201
  metadata?: Metadata;
202
202
  height?: CSSProperties["height"];
203
203
  fullScreenCanvas?: boolean;
204
+ disableZoomControls?: boolean;
204
205
  _experimentalVirtualization?: boolean;
205
206
  };
206
207
  declare function Editor<UserConfig extends Config = Config, G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>>(props: EditorProps<UserConfig>): react_jsx_runtime.JSX.Element;
package/dist/index.d.ts CHANGED
@@ -201,6 +201,7 @@ type EditorProps<UserConfig extends Config = Config, G extends UserGenerics<User
201
201
  metadata?: Metadata;
202
202
  height?: CSSProperties["height"];
203
203
  fullScreenCanvas?: boolean;
204
+ disableZoomControls?: boolean;
204
205
  _experimentalVirtualization?: boolean;
205
206
  };
206
207
  declare function Editor<UserConfig extends Config = Config, G extends UserGenerics<UserConfig> = UserGenerics<UserConfig>>(props: EditorProps<UserConfig>): react_jsx_runtime.JSX.Element;