Skip to content

Commit f0c3395

Browse files
Merge pull request #227 from frappe/develop
2 parents 7073c9b + 24ed39b commit f0c3395

File tree

5 files changed

+39
-36
lines changed

5 files changed

+39
-36
lines changed

frontend/src/builder.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ declare type HashString = `#${string}`;
6868

6969
declare type RGBString = `rgb(${number}, ${number}, ${number})`;
7070

71-
declare type LeftSidebarTabOption = "Blocks" | "Layers" | "Assets";
71+
declare type LeftSidebarTabOption = "Blocks" | "Layers" | "Assets" | "Code";
7272
declare type RightSidebarTabOption = "Properties" | "Script" | "Options";
7373

7474
declare type BuilderMode = "select" | "text" | "container" | "image" | "repeater" | "move";

frontend/src/components/BlockProperties.vue

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<template>
22
<div v-if="blockController.isBLockSelected()" class="flex select-none flex-col pb-16">
3-
<div class="sticky top-[41px] z-50 mt-[-16px] flex w-full bg-surface-white py-3">
3+
<div class="sticky top-0 z-50 mt-[-16px] flex w-full bg-surface-white py-3">
44
<BuilderInput
55
ref="searchInput"
66
type="text"
@@ -28,7 +28,9 @@
2828
</div>
2929
</div>
3030
<div v-else>
31-
<p class="text-center text-sm text-gray-600 dark:text-zinc-500">Select a block to edit properties.</p>
31+
<p class="mt-2 text-center text-sm text-gray-600 dark:text-zinc-500">
32+
Select a block to edit properties.
33+
</p>
3234
</div>
3335
</template>
3436
<script setup lang="ts">

frontend/src/components/BuilderLeftPanel.vue

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@
44
<button
55
v-for="option of leftPanelOptions"
66
:key="option.value"
7-
class="size-8 rounded text-text-icons-gray-7 hover:bg-surface-gray-2 focus:!bg-surface-gray-3"
7+
class="flex size-8 items-center justify-center rounded text-text-icons-gray-7 hover:bg-surface-gray-2 focus:!bg-surface-gray-3"
88
:class="{
99
'bg-surface-gray-3 text-text-icons-gray-9': store.leftPanelActiveTab === option.value,
1010
}"
11-
@click.stop="setActiveTab(option.value as LeftSidebarTabOption)">
12-
<component :is="option.icon" />
11+
@click.stop="setActiveTab(option.value as LeftSidebarTabOption)"
12+
:title="option.label">
13+
<FeatherIcon :name="option.icon" v-if="typeof option.icon === 'string'" class="size-4"></FeatherIcon>
14+
<component :is="option.icon" v-else />
1315
</button>
1416
</div>
1517
<div
@@ -55,6 +57,13 @@
5557
:blocks="[fragmentCanvas?.getFirstBlock()]"
5658
v-if="store.editingMode === 'fragment' && fragmentCanvas" />
5759
</div>
60+
<div v-show="store.leftPanelActiveTab === 'Code'">
61+
<PageScript
62+
class="p-4"
63+
:key="store.selectedPage"
64+
v-if="store.selectedPage && store.activePage"
65+
:page="store.activePage" />
66+
</div>
5867
</div>
5968
</div>
6069
</template>
@@ -72,6 +81,7 @@ import BuilderAssets from "./BuilderAssets.vue";
7281
import BuilderBlockTemplates from "./BuilderBlockTemplates.vue";
7382
import BuilderCanvas from "./BuilderCanvas.vue";
7483
import PanelResizer from "./PanelResizer.vue";
84+
import PageScript from "@/components/PageScript.vue";
7585
7686
const pageCanvas = inject("pageCanvas") as Ref<InstanceType<typeof BuilderCanvas> | null>;
7787
const fragmentCanvas = inject("fragmentCanvas") as Ref<InstanceType<typeof BuilderCanvas> | null>;
@@ -108,6 +118,11 @@ const leftPanelOptions = [
108118
value: "Assets",
109119
icon: ComponentIcon,
110120
},
121+
{
122+
label: "Code",
123+
value: "Code",
124+
icon: "code",
125+
},
111126
];
112127
113128
const getPage = () => {

frontend/src/components/BuilderRightPanel.vue

Lines changed: 1 addition & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -10,40 +10,13 @@
1010
@resize="(width) => (store.builderLayout.rightPanelWidth = width)"
1111
:min-dimension="275"
1212
:max-dimension="400" />
13-
<div class="sticky top-0 z-[12] flex w-full bg-surface-white px-2 text-base">
14-
<button
15-
v-for="tab of ['Properties', 'Script'] as RightSidebarTabOption[]"
16-
:key="tab"
17-
class="mx-2 flex-1 p-2 py-3"
18-
@click="store.rightPanelActiveTab = tab"
19-
:class="{
20-
'border-b-[1px] border-gray-900 dark:border-zinc-500 dark:text-zinc-300':
21-
store.rightPanelActiveTab === tab,
22-
'text-gray-700 dark:text-zinc-500': store.rightPanelActiveTab !== tab,
23-
}">
24-
{{ tab }}
25-
</button>
26-
</div>
27-
<BlockProperties v-show="store.rightPanelActiveTab === 'Properties'" class="p-4" />
28-
<PageScript
29-
class="p-4"
30-
v-show="store.rightPanelActiveTab === 'Script'"
31-
:key="store.selectedPage"
32-
v-if="store.selectedPage && store.activePage"
33-
:page="store.activePage" />
34-
<!-- <PageOptions
35-
class="p-4"
36-
v-show="store.rightPanelActiveTab === 'Options'"
37-
:key="store.selectedPage"
38-
v-if="store.selectedPage && store.activePage"
39-
:page="store.activePage" /> -->
13+
<BlockProperties class="p-3" />
4014
</div>
4115
</div>
4216
</template>
4317
<script setup lang="ts">
4418
import useStore from "@/store";
4519
import BlockProperties from "./BlockProperties.vue";
46-
import PageScript from "./PageScript.vue";
4720
import PanelResizer from "./PanelResizer.vue";
4821
const store = useStore();
4922
</script>

frontend/src/utils/panAndZoom.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,22 @@ function setPanAndZoom(
3434
};
3535
panAndZoomAreaElement.addEventListener("mousemove", clearPinchPoint, { once: true });
3636
}
37-
// Multiplying with 0.01 to make the zooming less sensitive
37+
38+
let sensitivity = 0.008;
39+
function tooMuchScroll() {
40+
if (e.deltaY > 30 || e.deltaY < -30) {
41+
return true;
42+
}
43+
}
44+
if (tooMuchScroll()) {
45+
// If the user scrolls too much, reduce the sensitivity
46+
// this mostly happens when the user uses mouse wheel to scroll
47+
// probably not the best way to handle this, but works for now
48+
sensitivity = 0.001;
49+
}
50+
3851
// Multiplying with scale to make the zooming feel consistent
39-
let scale = props.scale - e.deltaY * 0.008 * props.scale;
52+
let scale = props.scale - e.deltaY * sensitivity * props.scale;
4053
scale = Math.min(Math.max(scale, zoomLimits.min), zoomLimits.max);
4154
props.scale = scale;
4255
nextTick(() => {

0 commit comments

Comments
 (0)