diff --git a/projects/editor/src/app/file.service.ts b/projects/common/file.service.ts
similarity index 100%
rename from projects/editor/src/app/file.service.ts
rename to projects/common/file.service.ts
diff --git a/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-component.directive.ts b/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-component.directive.ts
index 425eab410d1c2f8e709e84010ead1ad434c4ce79..c2ae89ac1929eb68ea9d72f7c9ae46404e14b804 100644
--- a/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-component.directive.ts
+++ b/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-component.directive.ts
@@ -6,9 +6,7 @@ import { UnitUIElement } from '../../../../../../../common/unit';
 @Directive()
 export abstract class CanvasElementComponent {
   @Input() elementModel!: UnitUIElement;
-  @Input() canvasSize!: [number, number];
-  @Input() manualPositioning!: boolean;
-  @Input() sectionIndex!: number;
+  @Input() draggable!: boolean;
   @Output() elementSelected = new EventEmitter<{ componentElement: CanvasElementComponent, multiSelect: boolean }>();
 
   style: Record<string, string> = {};
diff --git a/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/audio.component.ts b/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/audio.component.ts
index 7ba347c69ed108c692892f490fa1b0c7e396342c..1a743427b473f09ff07d152a3f49f90ecc799c9b 100644
--- a/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/audio.component.ts
+++ b/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/audio.component.ts
@@ -4,17 +4,17 @@ import { CanvasElementComponent } from '../canvas-element-component.directive';
 @Component({
   selector: 'app-audio',
   template: `
-    <div *ngIf="!manualPositioning"
-         cdkDrag [cdkDragData]="this"
-         (click)="click($event)"
-         [ngStyle]="style">
-      <audio controls src="{{$any(elementModel).src}}"></audio>
-    </div>
-    <div *ngIf="manualPositioning"
-         (click)="click($event)"
-         [ngStyle]="style">
-      <audio controls src="{{$any(elementModel).src}}"></audio>
-    </div>
+      <div *ngIf="!draggable"
+           cdkDrag [cdkDragData]="this"
+           (click)="click($event)"
+           [ngStyle]="style">
+          <audio controls src="{{$any(elementModel).src}}"></audio>
+      </div>
+      <div *ngIf="draggable"
+           (click)="click($event)"
+           [ngStyle]="style">
+          <audio controls src="{{$any(elementModel).src}}"></audio>
+      </div>
   `,
   styles: [
     'div {position: absolute; display: inline-block; border: 5px solid; padding: 12px 9px 9px 9px;}'
diff --git a/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/button.component.ts b/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/button.component.ts
index 9d44b08044cc1c592d98bd9fb21bdc1d8651cd7f..f6a0fe9f56c242fad02d3c44d9f02b64ebf113d2 100644
--- a/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/button.component.ts
+++ b/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/button.component.ts
@@ -4,13 +4,13 @@ import { CanvasElementComponent } from '../canvas-element-component.directive';
 @Component({
   selector: 'app-button',
   template: `
-    <button *ngIf="!manualPositioning"
+    <button *ngIf="!draggable"
             cdkDrag [cdkDragData]="this"
             mat-button (click)="click($event)"
             [ngStyle]="style">
       {{$any(elementModel).label}}
     </button>
-    <button *ngIf="manualPositioning"
+    <button *ngIf="draggable"
             mat-button (click)="click($event)"
             [ngStyle]="style">
       {{$any(elementModel).label}}
diff --git a/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/checkbox.component.ts b/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/checkbox.component.ts
index ff6f11ad408663afdc0304c0edba316a72bce6b2..a7e85cc033e02a83d5581a3967ff15fb381dc62f 100644
--- a/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/checkbox.component.ts
+++ b/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/checkbox.component.ts
@@ -4,19 +4,19 @@ import { CanvasElementComponent } from '../canvas-element-component.directive';
 @Component({
   selector: 'app-checkbox',
   template: `
-    <mat-checkbox *ngIf="!manualPositioning"
-                  cdkDrag [cdkDragData]="this"
-                  class="example-margin"
-                  (click)="click($event)"
-                  [ngStyle]="style">
-      {{$any(elementModel).label}}
-    </mat-checkbox>
-    <mat-checkbox *ngIf="manualPositioning"
-                  class="example-margin"
-                  (click)="click($event)"
-                  [ngStyle]="style">
-      {{$any(elementModel).label}}
-    </mat-checkbox>
+      <mat-checkbox *ngIf="!draggable"
+                    cdkDrag [cdkDragData]="this"
+                    class="example-margin"
+                    (click)="click($event)"
+                    [ngStyle]="style">
+          {{$any(elementModel).label}}
+      </mat-checkbox>
+      <mat-checkbox *ngIf="draggable"
+                    class="example-margin"
+                    (click)="click($event)"
+                    [ngStyle]="style">
+          {{$any(elementModel).label}}
+      </mat-checkbox>
   `,
   styles: [
     'button {position: absolute}'
diff --git a/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/dropdown.component.ts b/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/dropdown.component.ts
index ca3a3a5596a67198a66e77e2c7829b21e63e0a8f..ed53e8b7fcb03bacf101f5a82c93adf8525e03ec 100644
--- a/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/dropdown.component.ts
+++ b/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/dropdown.component.ts
@@ -4,29 +4,29 @@ import { CanvasElementComponent } from '../canvas-element-component.directive';
 @Component({
   selector: 'app-dropdown',
   template: `
-    <mat-form-field *ngIf="!manualPositioning"
-                    cdkDrag [cdkDragData]="this"
-                    appearance="fill"
-                    (click)="click($event)"
-                    [ngStyle]="style">
-      <mat-label>{{$any(elementModel).label}}</mat-label>
-      <mat-select>
-        <mat-option *ngFor="let option of $any(elementModel).options" [value]="option">
-          {{option}}
-        </mat-option>
-      </mat-select>
-    </mat-form-field>
-    <mat-form-field *ngIf="manualPositioning"
-                    appearance="fill"
-                    (click)="click($event)"
-                    [ngStyle]="style">
-      <mat-label>{{$any(elementModel).label}}</mat-label>
-      <mat-select>
-        <mat-option *ngFor="let option of $any(elementModel).options" [value]="option">
-          {{option}}
-        </mat-option>
-      </mat-select>
-    </mat-form-field>
+      <mat-form-field *ngIf="!draggable"
+                      cdkDrag [cdkDragData]="this"
+                      appearance="fill"
+                      (click)="click($event)"
+                      [ngStyle]="style">
+          <mat-label>{{$any(elementModel).label}}</mat-label>
+          <mat-select>
+              <mat-option *ngFor="let option of $any(elementModel).options" [value]="option">
+                  {{option}}
+              </mat-option>
+          </mat-select>
+      </mat-form-field>
+      <mat-form-field *ngIf="draggable"
+                      appearance="fill"
+                      (click)="click($event)"
+                      [ngStyle]="style">
+          <mat-label>{{$any(elementModel).label}}</mat-label>
+          <mat-select>
+              <mat-option *ngFor="let option of $any(elementModel).options" [value]="option">
+                  {{option}}
+              </mat-option>
+          </mat-select>
+      </mat-form-field>
   `,
   styles: [
     'mat-form-field {position: absolute}'
diff --git a/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/image.component.ts b/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/image.component.ts
index 829bc99f04654bd8cb3ab15a1476c9f9de8b2c2c..77695707d843d4857c45b11731e266a5f0f8b86e 100644
--- a/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/image.component.ts
+++ b/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/image.component.ts
@@ -4,15 +4,15 @@ import { CanvasElementComponent } from '../canvas-element-component.directive';
 @Component({
   selector: 'app-image',
   template: `
-    <img *ngIf="!manualPositioning"
-         cdkDrag [cdkDragData]="this"
-         src="{{$any(elementModel).src}}" alt="Image Placeholder"
-         (click)="click($event)"
-         [ngStyle]="style">
-    <img *ngIf="manualPositioning"
-         src="{{$any(elementModel).src}}" alt="Image Placeholder"
-         (click)="click($event)"
-         [ngStyle]="style">
+      <img *ngIf="!draggable"
+           cdkDrag [cdkDragData]="this"
+           src="{{$any(elementModel).src}}" alt="Image Placeholder"
+           (click)="click($event)"
+           [ngStyle]="style">
+      <img *ngIf="draggable"
+           src="{{$any(elementModel).src}}" alt="Image Placeholder"
+           (click)="click($event)"
+           [ngStyle]="style">
   `,
   styles: [
     'img {position: absolute}'
diff --git a/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/label.component.ts b/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/label.component.ts
index 74abd2292a4d17e5cc4170c33d84aa452d7abe61..e3ee46f91531044881854a417a42dc2efd7ca400 100644
--- a/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/label.component.ts
+++ b/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/label.component.ts
@@ -4,17 +4,17 @@ import { CanvasElementComponent } from '../canvas-element-component.directive';
 @Component({
   selector: 'app-label',
   template: `
-    <div *ngIf="!manualPositioning"
-         cdkDrag [cdkDragData]="this"
-         (click)="click($event)"
-         [ngStyle]="style">
-      {{$any(elementModel).label}}
-    </div>
-    <div *ngIf="manualPositioning"
-         (click)="click($event)"
-         [ngStyle]="style">
-      {{$any(elementModel).label}}
-    </div>
+      <div *ngIf="!draggable"
+           cdkDrag [cdkDragData]="this"
+           (click)="click($event)"
+           [ngStyle]="style">
+          {{$any(elementModel).label}}
+      </div>
+      <div *ngIf="draggable"
+           (click)="click($event)"
+           [ngStyle]="style">
+          {{$any(elementModel).label}}
+      </div>
   `,
   styles: [
     'div {position: absolute}'
diff --git a/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/radio-button-group.component.ts b/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/radio-button-group.component.ts
index d284dea6519d071d9aac6672c3c4a35c7432bf02..b28b8082988c5a22df37170dfb56d2e0fd3449b8 100644
--- a/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/radio-button-group.component.ts
+++ b/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/radio-button-group.component.ts
@@ -4,27 +4,27 @@ import { CanvasElementComponent } from '../canvas-element-component.directive';
 @Component({
   selector: 'app-radio-button-group',
   template: `
-    <div *ngIf="!manualPositioning"
-         cdkDrag [cdkDragData]="this"
-         (click)="click($event)"
-         [ngStyle]="style">
-      <label id="radio-group-label">{{$any(elementModel).text}}</label>
-      <mat-radio-group aria-labelledby="radio-group-label" fxLayout="{{elementModel.alignment}}">
-        <mat-radio-button *ngFor="let option of $any(elementModel).options" [value]="option">
-          {{option}}
-        </mat-radio-button>
-      </mat-radio-group>
-    </div>
-    <div *ngIf="manualPositioning"
-         (click)="click($event)"
-         [ngStyle]="style">
-      <label id="radio-group-label">{{$any(elementModel).text}}</label>
-      <mat-radio-group aria-labelledby="radio-group-label" fxLayout="{{elementModel.alignment}}">
-        <mat-radio-button *ngFor="let option of $any(elementModel).options" [value]="option">
-          {{option}}
-        </mat-radio-button>
-      </mat-radio-group>
-    </div>
+      <div *ngIf="!draggable"
+           cdkDrag [cdkDragData]="this"
+           (click)="click($event)"
+           [ngStyle]="style">
+          <label id="radio-group-label">{{$any(elementModel).text}}</label>
+          <mat-radio-group aria-labelledby="radio-group-label" fxLayout="{{elementModel.alignment}}">
+              <mat-radio-button *ngFor="let option of $any(elementModel).options" [value]="option">
+                  {{option}}
+              </mat-radio-button>
+          </mat-radio-group>
+      </div>
+      <div *ngIf="draggable"
+           (click)="click($event)"
+           [ngStyle]="style">
+          <label id="radio-group-label">{{$any(elementModel).text}}</label>
+          <mat-radio-group aria-labelledby="radio-group-label" fxLayout="{{elementModel.alignment}}">
+              <mat-radio-button *ngFor="let option of $any(elementModel).options" [value]="option">
+                  {{option}}
+              </mat-radio-button>
+          </mat-radio-group>
+      </div>
   `,
   styles: [
     'div {position: absolute}'
diff --git a/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/text-field.component.ts b/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/text-field.component.ts
index 964d4b7139ec3ba90a6d57087a326aa56af12c1c..2eaca65c17c35877237cf21c9b1202a460aad08a 100644
--- a/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/text-field.component.ts
+++ b/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/text-field.component.ts
@@ -4,27 +4,27 @@ import { CanvasElementComponent } from '../canvas-element-component.directive';
 @Component({
   selector: 'app-text-field',
   template: `
-    <div *ngIf="!manualPositioning"
-         cdkDrag [cdkDragData]="this">
-      <input *ngIf="$any(elementModel).multiline === false" matInput (click)="click($event)"
-             [ngStyle]="style"
-             placeholder="{{$any(elementModel).placeholder}}">
-      <textarea *ngIf="$any(elementModel).multiline === true" matInput
-                (click)="click($event)"
-                [ngStyle]="style"
-                placeholder="{{$any(elementModel).placeholder}}">
+      <div *ngIf="!draggable"
+           cdkDrag [cdkDragData]="this">
+          <input *ngIf="$any(elementModel).multiline === false" matInput (click)="click($event)"
+                 [ngStyle]="style"
+                 placeholder="{{$any(elementModel).placeholder}}">
+          <textarea *ngIf="$any(elementModel).multiline === true" matInput
+                    (click)="click($event)"
+                    [ngStyle]="style"
+                    placeholder="{{$any(elementModel).placeholder}}">
       </textarea>
-    </div>
-    <div *ngIf="manualPositioning">
-      <input *ngIf="$any(elementModel).multiline === false" matInput (click)="click($event)"
-             [ngStyle]="style"
-             placeholder="{{$any(elementModel).placeholder}}">
-      <textarea *ngIf="$any(elementModel).multiline === true" matInput
-                (click)="click($event)"
-                [ngStyle]="style"
-                placeholder="{{$any(elementModel).placeholder}}">
+      </div>
+      <div *ngIf="draggable">
+          <input *ngIf="$any(elementModel).multiline === false" matInput (click)="click($event)"
+                 [ngStyle]="style"
+                 placeholder="{{$any(elementModel).placeholder}}">
+          <textarea *ngIf="$any(elementModel).multiline === true" matInput
+                    (click)="click($event)"
+                    [ngStyle]="style"
+                    placeholder="{{$any(elementModel).placeholder}}">
       </textarea>
-    </div>
+      </div>
   `,
   styles: [
     'div {position: absolute}'
diff --git a/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/video.component.ts b/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/video.component.ts
index 59025610a4eac413cb8a743745381c582b571996..8ebaf34fba735ff4331f6a52f9ca5b94607a6a20 100644
--- a/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/video.component.ts
+++ b/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-element-components/video.component.ts
@@ -4,17 +4,17 @@ import { CanvasElementComponent } from '../canvas-element-component.directive';
 @Component({
   selector: 'app-video',
   template: `
-    <div *ngIf="!manualPositioning"
-         cdkDrag [cdkDragData]="this"
-         (click)="click($event)"
-         [ngStyle]="style">
-      <video controls src="{{$any(elementModel).src}}"></video>
-    </div>
-    <div *ngIf="manualPositioning"
-         (click)="click($event)"
-         [ngStyle]="style">
-      <video controls src="{{$any(elementModel).src}}"></video>
-    </div>
+      <div *ngIf="!draggable"
+           cdkDrag [cdkDragData]="this"
+           (click)="click($event)"
+           [ngStyle]="style">
+          <video controls src="{{$any(elementModel).src}}"></video>
+      </div>
+      <div *ngIf="draggable"
+           (click)="click($event)"
+           [ngStyle]="style">
+          <video controls src="{{$any(elementModel).src}}"></video>
+      </div>
   `,
   styles: [
     'div {position: absolute; display: inline-block;border: 5px solid; padding: 12px 9px 9px 9px}'
diff --git a/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-section.component.ts b/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-section.component.ts
index 5b80a0096dcd0b92bff1e5ed72727c8b3f189e7f..a2b89eeb14fd60d9f4bd6a5ec4dc29d4316224e2 100644
--- a/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-section.component.ts
+++ b/projects/editor/src/app/components/unit-view/page-view/canvas/canvas-section.component.ts
@@ -72,8 +72,7 @@ export class CanvasSectionComponent implements OnInit {
     const componentFactory = this.getComponentFactory(element);
     const componentRef = this.elementContainer.createComponent(componentFactory);
     componentRef.instance.elementModel = element;
-    componentRef.instance.canvasSize = [this.section.width, this.section.height];
-    componentRef.instance.manualPositioning = this.manualPositioning;
+    componentRef.instance.draggable = this.manualPositioning;
     componentRef.instance.updateStyle();
 
     componentRef.instance.elementSelected.subscribe(