Browse Source

Fullscreen support and more iframe context.

pull/822/head
Sebastian 4 years ago
parent
commit
9abdbacb90
  1. 28
      frontend/app-config/webpack.config.js
  2. 4
      frontend/app/features/content/pages/content/content-page.component.ts
  3. 8
      frontend/app/features/content/pages/content/editor/content-field.component.html
  4. 27
      frontend/app/features/content/pages/content/editor/content-field.component.scss
  5. 1
      frontend/app/features/content/pages/content/editor/field-languages.component.scss
  6. 4
      frontend/app/features/content/shared/forms/array-editor.component.html
  7. 5
      frontend/app/features/content/shared/forms/array-editor.component.scss
  8. 3
      frontend/app/features/content/shared/forms/array-item.component.scss
  9. 31
      frontend/app/features/content/shared/forms/field-editor.component.html
  10. 31
      frontend/app/features/content/shared/forms/field-editor.component.scss
  11. 5
      frontend/app/features/content/shared/forms/field-editor.component.ts
  12. 4
      frontend/app/features/content/shared/forms/iframe-editor.component.html
  13. 51
      frontend/app/features/content/shared/forms/iframe-editor.component.ts
  14. 3
      frontend/app/features/content/shared/references/content-creator.component.ts
  15. 6
      frontend/app/shared/components/forms/markdown-editor.component.html
  16. 5
      frontend/app/shared/components/forms/markdown-editor.component.scss
  17. 49
      frontend/app/shared/components/forms/markdown-editor.component.ts
  18. 2
      frontend/app/theme/_bootstrap-vars.scss
  19. 684
      frontend/app/theme/icomoon/demo.html
  20. BIN
      frontend/app/theme/icomoon/fonts/icomoon.eot
  21. 2
      frontend/app/theme/icomoon/fonts/icomoon.svg
  22. BIN
      frontend/app/theme/icomoon/fonts/icomoon.ttf
  23. BIN
      frontend/app/theme/icomoon/fonts/icomoon.woff
  24. 2
      frontend/app/theme/icomoon/selection.json
  25. 166
      frontend/app/theme/icomoon/style.css
  26. 126
      frontend/package-lock.json
  27. 1
      frontend/package.json

28
frontend/app-config/webpack.config.js

@ -133,29 +133,6 @@ module.exports = function calculateConfig(env) {
use: [{
loader: 'raw-loader',
}],
}, {
test: /\.(woff|woff2|ttf|eot)(\?.*$|$)/,
use: [{
loader: 'file-loader',
options: {
name: '[name].[hash].[ext]',
// Store the assets in custom path because of fonts need relative urls.
outputPath: 'assets',
// Use custom public path as ./ is not supported by fonts.
publicPath: isDevServer ? undefined : 'assets',
},
}],
}, {
test: /\.(png|jpe?g|gif|svg|ico)(\?.*$|$)/,
use: [{
loader: 'file-loader',
options: {
name: '[name].[hash].[ext]',
// Store the assets in custom path because of fonts need relative urls.
outputPath: 'assets',
},
}],
}, {
test: /\.css$/,
use: [
@ -342,6 +319,11 @@ module.exports = function calculateConfig(env) {
* See: https://webpack.js.org/configuration/output/#output-chunkfilename
*/
chunkFilename: '[id].[fullhash].chunk.js',
/*
* The filename for assets.
*/
assetModuleFilename: 'assets/[hash][ext][query]',
};
} else {
config.output = {

4
frontend/app/features/content/pages/content/content-page.component.ts

@ -77,7 +77,7 @@ export class ContentPageComponent extends ResourceOwner implements CanComponentD
this.own(
this.languagesState.isoLanguages
.subscribe(languages => {
.subscribe(languages => {
this.languages = languages;
}));
@ -94,6 +94,8 @@ export class ContentPageComponent extends ResourceOwner implements CanComponentD
.subscribe(content => {
const isNewContent = isOtherContent(content, this.content);
this.formContext['languages'] = this.languages;
this.formContext['schema'] = this.schema;
this.formContext['initialContent'] = content;
this.content = content;

8
frontend/app/features/content/pages/content/editor/content-field.component.html

@ -50,9 +50,11 @@
</div>
<div class="col-6 col-right" *ngIf="formModelCompare && formCompare">
<button type="button" class="btn btn-primary btn-sm field-copy" (click)="copy()" *ngIf="isDifferent | async">
<i class="icon-arrow_back"></i>
</button>
<div class="copy-button-container">
<button type="button" class="btn btn-primary btn-sm field-copy" (click)="copy()" *ngIf="isDifferent | async">
<i class="icon-arrow_back"></i>
</button>
</div>
<div class="table-items-row table-items-row-summary" *ngIf="!(formModelCompare!.hiddenChanges | async)">
<div class="languages-container">

27
frontend/app/features/content/pages/content/editor/content-field.component.scss

@ -1,6 +1,7 @@
.table-items-row {
border-left-width: 4px;
position: relative;
overflow-x: hidden;
overflow-y: hidden;
}
.languages {
@ -8,16 +9,26 @@
position: relative;
}
&-buttons {
@include absolute(-.6rem, 2rem);
&-buttons,
&-buttons-compare {
@include absolute(-.5rem, 4.25rem);
background: $color-white;
z-index: 1000;
display: flex;
flex-grow: 1;
flex-wrap: nowrap;
justify-content: right;
margin: 0;
margin-top: -1px;
white-space: nowrap;
z-index: 1;
}
&-buttons {
@include absolute(-.5rem, 4.25rem);
}
&-buttons-compare {
@include absolute(-.6rem, 0);
background: $color-white;
z-index: 1000;
@include absolute(-.5rem, 0);
}
}
@ -29,7 +40,7 @@
}
}
.col-right {
.copy-button-container {
position: relative;
}

1
frontend/app/features/content/pages/content/editor/field-languages.component.scss

@ -2,6 +2,7 @@
display: inline-block;
max-width: none;
min-width: 5rem;
text-align: right;
}
sqx-language-selector {

4
frontend/app/features/content/shared/forms/array-editor.component.html

@ -1,6 +1,6 @@
<ng-container *ngIf="formModel.itemChanges | async; let items">
<div class="array-container" *ngIf="items.length > 0">
<div class="cdk-container" *ngIf="items.length <= 50;"
<div class="cdk-container" *ngIf="items.length <= 5;"
cdkDropList
[cdkDropListDisabled]="false"
[cdkDropListData]="items"
@ -29,7 +29,7 @@
</div>
</div>
<cdk-virtual-scroll-viewport autosize *ngIf="items.length > 50">
<cdk-virtual-scroll-viewport autosize *ngIf="items.length > 5">
<div *cdkVirtualFor="let itemForm of items; index as i; last as isLast; first as isFirst" class="table-drag item">
<sqx-array-item
[canUnset]="canUnset"

5
frontend/app/features/content/shared/forms/array-editor.component.scss

@ -8,8 +8,7 @@
background: $color-border-lighter;
margin: 0;
margin-bottom: 1rem;
padding-bottom: 1rem;
position: relative;
padding: .5rem 0;
}
.drag-container {
@ -21,5 +20,5 @@ cdk-virtual-scroll-viewport {
}
.item {
padding: 1rem 1rem 0;
margin: .25rem 1rem;
}

3
frontend/app/features/content/shared/forms/array-item.component.scss

@ -7,8 +7,9 @@
}
.card {
border: 1px solid darken($color-border, 5%);
border: 1px solid $color-border;
border-left-width: 4px;
position: static;
&-header {
line-height: 2.2rem;

31
frontend/app/features/content/shared/forms/field-editor.component.html

@ -1,4 +1,21 @@
<div class="field" *ngIf="formModel">
<div class="field" [class.fullscreen]="isFullscreen" *ngIf="formModel">
<div class="buttons-container" *ngIf="canUnset">
<div class="buttons">
<button type="button" class="btn btn-sm btn-outline-secondary force" (click)="toggleFullscreen()">
<i class="icon-fullscreen"></i>
</button>
<button type="button" class="btn btn-sm btn-outline-secondary btn-clear force ms-1" [disabled]="isEmpty | async"
(sqxConfirmClick)="unset()"
confirmTitle="i18n:contents.unsetValueConfirmTitle"
confirmText="i18n:contents.unsetValueConfirmText"
confirmRememberKey="unsetValue"
title="i18n:contents.unsetValue">
<i class="icon-close"></i>
</button>
</div>
</div>
<label>
{{field.displayName}} {{displaySuffix}} <span class="field-required" [class.hidden]="!field.properties.isRequired">*</span>
</label>
@ -14,6 +31,7 @@
[formControlBinding]="$any(fieldForm)"
[formValue]="form.valueChanges | async"
[formIndex]="index"
[formField]="formModel.field.name"
[language]="language?.iso2Code">
</sqx-iframe-editor>
</ng-container>
@ -213,17 +231,6 @@
</ng-template>
</div>
<div *ngIf="canUnset" class="unset" >
<button type="button" class="btn btn-sm btn-text-secondary force" [disabled]="isEmpty | async"
(sqxConfirmClick)="unset()"
confirmTitle="i18n:contents.unsetValueConfirmTitle"
confirmText="i18n:contents.unsetValueConfirmText"
confirmRememberKey="unsetValue"
title="i18n:contents.unsetValue">
<i class="icon-close"></i>
</button>
</div>
<sqx-form-hint *ngIf="field.properties.hints && field.properties.hints.length > 0">
<span [sqxMarkdown]="field.properties.hints" [optional]="true" [inline]="true"></span>
</sqx-form-hint>

31
frontend/app/features/content/shared/forms/field-editor.component.scss

@ -1,6 +1,4 @@
.field {
position: relative;
&-required {
color: $color-theme-error;
}
@ -10,13 +8,34 @@
font-size: $font-smallest;
font-weight: normal;
}
&.fullscreen {
@include absolute(0, 0, 0, 0);
background-color: $color-white;
border: 0;
border-radius: 0;
overflow-x: hidden;
overflow-y: auto;
padding: .75rem 1.25rem;
z-index: 500;
}
}
.unset {
@include absolute(-.5rem, 0);
.buttons {
& {
@include absolute(-.5rem, 0);
margin: 0;
margin-top: -1px;
}
i {
font-size: $font-smallest;
&-container {
position: relative;
}
.btn-clear {
i {
font-size: $font-smallest;
}
}
}

5
frontend/app/features/content/shared/forms/field-editor.component.ts

@ -49,6 +49,7 @@ export class FieldEditorComponent implements OnChanges {
public editor!: ElementRef;
public isEmpty?: Observable<boolean>;
public isFullscreen = false;
public get field() {
return this.formModel.field;
@ -78,6 +79,10 @@ export class FieldEditorComponent implements OnChanges {
}
}
public toggleFullscreen() {
this.isFullscreen = !this.isFullscreen;
}
public unset() {
this.formModel.unset();
}

4
frontend/app/features/content/shared/forms/iframe-editor.component.html

@ -1,7 +1,5 @@
<div #container>
<div #inner [class.fullscreen]="snapshot.isFullscreen">
<iframe #iframe scrolling="no" width="100%" [style.height]="0" [attr.src]="computedUrl | sqxSafeResourceUrl"></iframe>
</div>
<iframe #iframe scrolling="no" width="100%" [style.height]="0" [attr.src]="computedUrl | sqxSafeResourceUrl"></iframe>
</div>
<ng-container *sqxModal="assetsDialog">

51
frontend/app/features/content/shared/forms/iframe-editor.component.ts

@ -11,18 +11,13 @@ import { Router } from '@angular/router';
import { DialogModel, DialogService, disabled$, StatefulComponent, Types, value$ } from '@app/framework';
import { AppsState, AssetDto, computeEditorUrl } from '@app/shared';
interface State {
// True, when the editor is shown as fullscreen.
isFullscreen: boolean;
}
@Component({
selector: 'sqx-iframe-editor[context][formValue][formControlBinding]',
selector: 'sqx-iframe-editor[context][formField][formIndex][formValue][formControlBinding]',
styleUrls: ['./iframe-editor.component.scss'],
templateUrl: './iframe-editor.component.html',
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class IFrameEditorComponent extends StatefulComponent<State> implements OnChanges, OnDestroy {
export class IFrameEditorComponent extends StatefulComponent<{}> implements OnChanges, OnDestroy {
private value: any;
private isInitialized = false;
private isDisabled = false;
@ -31,18 +26,15 @@ export class IFrameEditorComponent extends StatefulComponent<State> implements O
@ViewChild('iframe', { static: false })
public iframe!: ElementRef<HTMLIFrameElement>;
@ViewChild('container', { static: false })
public container!: ElementRef<HTMLElement>;
@ViewChild('inner', { static: false })
public inner!: ElementRef<HTMLElement>;
@Input()
public context: any = {};
@Input()
public formValue!: any;
@Input()
public formField = '';
@Input()
public formIndex?: number | null;
@ -72,15 +64,11 @@ export class IFrameEditorComponent extends StatefulComponent<State> implements O
private readonly renderer: Renderer2,
private readonly router: Router,
) {
super(changeDetector, {
isFullscreen: false,
});
super(changeDetector, {});
}
public ngOnDestroy() {
super.ngOnDestroy();
this.toggleFullscreen(false);
}
public ngOnChanges(changes: SimpleChanges) {
@ -124,7 +112,6 @@ export class IFrameEditorComponent extends StatefulComponent<State> implements O
this.isInitialized = true;
this.sendInit();
this.sendFullscreen();
this.sendFormValue();
this.sendLanguage();
this.sendDisabled();
@ -138,12 +125,6 @@ export class IFrameEditorComponent extends StatefulComponent<State> implements O
const { url } = event.data;
this.router.navigateByUrl(url);
} else if (type === 'fullscreen') {
const { mode } = event.data;
if (mode !== this.snapshot.isFullscreen) {
this.toggleFullscreen(mode);
}
} else if (type === 'valueChanged') {
const { value } = event.data;
@ -218,17 +199,13 @@ export class IFrameEditorComponent extends StatefulComponent<State> implements O
}
private sendInit() {
this.sendMessage('init', { context: this.context || {} });
this.sendMessage('init', { context: { ...this.context || {}, field: this.formField } });
}
private sendValue() {
this.sendMessage('valueChanged', { value: this.value });
}
private sendFullscreen() {
this.sendMessage('fullscreenChanged', { fullscreen: this.snapshot.isFullscreen });
}
private sendDisabled() {
this.sendMessage('disabled', { isDisabled: this.isDisabled });
}
@ -251,20 +228,6 @@ export class IFrameEditorComponent extends StatefulComponent<State> implements O
}
}
private toggleFullscreen(isFullscreen: boolean) {
this.next({ isFullscreen });
let target = this.container.nativeElement;
if (isFullscreen) {
target = document.body;
}
this.renderer.appendChild(target, this.inner.nativeElement);
this.sendFullscreen();
}
private sendMessage(type: string, payload: any) {
if (!this.iframe?.nativeElement) {
return;

3
frontend/app/features/content/shared/references/content-creator.component.ts

@ -71,6 +71,9 @@ export class ContentCreatorComponent extends ResourceOwner implements OnInit {
this.contentsState.schema = schema;
this.contentForm = new EditContentForm(this.languages, this.schema, this.schemasState.schemaMap, { user: this.formContext.user });
this.formContext['languages'] = this.languages;
this.formContext['schema'] = schema;
if (this.initialData) {
this.contentForm.load(this.initialData, true);

6
frontend/app/shared/components/forms/markdown-editor.component.html

@ -1,9 +1,7 @@
<div #container class="drop-container"
<div class="drop-container"
(sqxDropFile)="insertFiles($event)"
[sqxDropOnlyImages]="true">
<div #inner [class.fullscreen]="snapshot.isFullscreen">
<textarea class="form-control editor" #editor></textarea>
</div>
<textarea class="form-control editor" #editor></textarea>
</div>
<ng-container *sqxModal="assetsDialog">

5
frontend/app/shared/components/forms/markdown-editor.component.scss

@ -8,9 +8,4 @@ $background: #fff;
padding-bottom: 10px;
padding-top: 10px;
}
}
.fullscreen {
@include fixed(0, 0, 0, 0);
z-index: 1040;
}

49
frontend/app/shared/components/forms/markdown-editor.component.ts

@ -5,7 +5,7 @@
* Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved.
*/
import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, forwardRef, Input, Renderer2, ViewChild } from '@angular/core';
import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, forwardRef, Input, ViewChild } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { ApiUrlConfig, AssetDto, AssetUploaderState, DialogModel, ResourceLoaderService, StatefulControlComponent, Types, UploadCanceled } from '@app/shared/internal';
import { marked } from 'marked';
@ -16,11 +16,6 @@ export const SQX_MARKDOWN_EDITOR_CONTROL_VALUE_ACCESSOR: any = {
provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => MarkdownEditorComponent), multi: true,
};
interface State {
// True, when the editor is shown as fullscreen.
isFullscreen: boolean;
}
@Component({
selector: 'sqx-markdown-editor',
styleUrls: ['./markdown-editor.component.scss'],
@ -30,38 +25,29 @@ interface State {
],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class MarkdownEditorComponent extends StatefulControlComponent<State, string> implements AfterViewInit {
export class MarkdownEditorComponent extends StatefulControlComponent<{}, string> implements AfterViewInit {
private simplemde: any;
private value?: string;
@Input()
public folderId?: string;
@Input()
public set disabled(value: boolean | undefined | null) {
this.setDisabledState(value === true);
}
@Input()
public folderId?: string;
@ViewChild('editor', { static: false })
public editor!: ElementRef;
@ViewChild('container', { static: false })
public container!: ElementRef;
@ViewChild('inner', { static: false })
public inner!: ElementRef;
public assetsDialog = new DialogModel();
constructor(changeDetector: ChangeDetectorRef,
private readonly apiUrl: ApiUrlConfig,
private readonly assetUploader: AssetUploaderState,
private readonly renderer: Renderer2,
private readonly resourceLoader: ResourceLoaderService,
) {
super(changeDetector, {
isFullscreen: false,
});
super(changeDetector, {});
}
public writeValue(obj: any) {
@ -149,11 +135,6 @@ export class MarkdownEditorComponent extends StatefulControlComponent<State, str
action: SimpleMDE.togglePreview,
className: 'fa fa-eye no-disable',
title: 'Toggle Preview',
}, {
name: 'fullscreen',
action: SimpleMDE.toggleFullScreen,
className: 'fa fa-arrows-alt no-disable no-mobile',
title: 'Toggle Fullscreen',
}, {
name: 'side-by-side',
action: SimpleMDE.toggleSideBySide,
@ -191,12 +172,6 @@ export class MarkdownEditorComponent extends StatefulControlComponent<State, str
}
});
this.simplemde.codemirror.on('refresh', () => {
const isFullscreen = this.simplemde.isFullscreenActive();
this.toggleFullscreen(isFullscreen);
});
this.simplemde.codemirror.on('blur', () => {
this.callTouched();
});
@ -262,18 +237,6 @@ export class MarkdownEditorComponent extends StatefulControlComponent<State, str
});
}
private toggleFullscreen(isFullscreen: boolean) {
let target = this.container.nativeElement;
if (isFullscreen) {
target = document.body;
}
this.renderer.appendChild(target, this.inner.nativeElement);
this.next({ isFullscreen });
}
private buildMarkups(assets: readonly AssetDto[]) {
let content = '';

2
frontend/app/theme/_bootstrap-vars.scss

@ -47,6 +47,7 @@ $body-bg: $color-background;
// Borders.
$border-color: $color-border;
$border-radius: .25rem;
//
// COMPONENTS
//
@ -65,6 +66,7 @@ $alert-link-font-weight: normal;
$label-margin-bottom: .25rem;
// Imputs
$input-bg: $color-white;
$input-border-color: $color-input;
$input-disabled-bg: $color-input-disabled;
$input-group-addon-bg: $color-white;

684
frontend/app/theme/icomoon/demo.html

File diff suppressed because it is too large

BIN
frontend/app/theme/icomoon/fonts/icomoon.eot

Binary file not shown.

2
frontend/app/theme/icomoon/fonts/icomoon.svg

@ -150,6 +150,8 @@
<glyph unicode="&#xe98c;" glyph-name="roles" horiz-adv-x="964" d="M345.882 381.092c-54.454 0-93.859-39.044-121.294-72.824s-44.118-67.294-44.118-67.294c-2.389-4.219-3.798-9.265-3.798-14.641 0-16.635 13.485-30.121 30.121-30.121 12.135 0 22.594 7.176 27.364 17.516l0.077 0.187c0 0 14.348 28.391 37.059 56.353s52.544 50.588 74.588 50.588h277.059c22.044 0 51.878-22.626 74.588-50.588s37.059-56.353 37.059-56.353c4.848-10.526 15.307-17.702 27.441-17.702 16.635 0 30.121 13.485 30.121 30.121 0 5.375-1.408 10.422-3.875 14.791l0.078-0.15c0 0-16.682 33.515-44.118 67.294s-66.84 72.824-121.294 72.824zM484.118 782.269c-89.664 0-163.059-73.277-163.059-162.941s73.395-163.059 163.059-163.059c89.664 0 162.941 73.395 162.941 163.059s-73.277 162.941-162.941 162.941zM484.118 722.033c57.11 0 102.706-45.596 102.706-102.706s-45.596-102.824-102.706-102.824c-57.11 0-102.824 45.713-102.824 102.824s45.713 102.706 102.824 102.706zM120.471 950.857c-66.22 0-120.471-54.251-120.471-120.471v-783.059c0-66.22 54.251-120.471 120.471-120.471h722.824c66.22 0 120.471 54.251 120.471 120.471v783.059c0 66.22-54.251 120.471-120.471 120.471zM120.471 890.622h722.824c33.891 0 60.235-26.344 60.235-60.235v-783.059c0-33.891-26.344-60.235-60.235-60.235h-722.824c-33.891 0-60.235 26.344-60.235 60.235v783.059c0 33.891 26.344 60.235 60.235 60.235zM391.529 167.916c-0.127 0.002-0.276 0.003-0.426 0.003-16.635 0-30.121-13.485-30.121-30.121s13.485-30.121 30.121-30.121c0.15 0 0.299 0.001 0.448 0.003h180.683c0.127-0.002 0.276-0.003 0.426-0.003 16.635 0 30.121 13.485 30.121 30.121s-13.485 30.121-30.121 30.121c-0.15 0-0.299-0.001-0.448-0.003h0.023z" />
<glyph unicode="&#xe98d;" glyph-name="subscription" d="M855.509 9.167l7.314-34.328c0.337-1.714 0.53-3.686 0.53-5.702 0-5.892-1.648-11.398-4.508-16.084l0.077 0.136c-3.469-6.522-9.66-11.204-17.016-12.558l-0.149-0.023c-36.275-8.739-77.923-13.751-120.742-13.751-0.134 0-0.269 0-0.403 0h0.020c-3.435-0.087-7.48-0.136-11.536-0.136-111.713 0-214.681 37.447-297.034 100.474l1.175-0.863c-83.817 64.681-143.45 157.126-165.203 263.373l-0.49 2.867h-59.49c-0.166-0.004-0.362-0.006-0.558-0.006-7.428 0-14.139 3.064-18.941 7.997l-0.006 0.006c-4.881 4.798-7.905 11.472-7.905 18.851 0 0.196 0.002 0.391 0.006 0.585v-0.029 18.237c-0.004 0.166-0.006 0.362-0.006 0.558 0 7.428 3.064 14.139 7.997 18.941l0.006 0.006c4.807 4.939 11.519 8.003 18.946 8.003 0.196 0 0.392-0.002 0.587-0.006l-0.029 0.001h47.884q-2.243 27.404-2.243 70.9c-0.029 1.956-0.045 4.265-0.045 6.578 0 24.275 1.789 48.132 5.242 71.447l-0.321-2.639h-50.615c-0.166-0.004-0.362-0.006-0.558-0.006-7.428 0-14.139 3.064-18.941 7.997l-0.006 0.006c-4.881 4.798-7.905 11.472-7.905 18.851 0 0.196 0.002 0.391 0.006 0.585v-0.029 18.237c-0.004 0.166-0.006 0.362-0.006 0.558 0 7.428 3.064 14.139 7.997 18.941l0.006 0.006c4.807 4.938 11.518 8.001 18.945 8.001 0.163 0 0.325-0.001 0.487-0.004h61.709c28.466 107.153 88.956 197.45 170.455 262.549l0.992 0.766c78.807 63.833 180.289 102.48 290.797 102.48 3.024 0 6.042-0.029 9.053-0.087l-0.452 0.007c37.267-0.031 73.546-4.186 108.428-12.034l-3.298 0.624c7.43-1.104 13.693-5.346 17.494-11.309l0.060-0.101c2.584-4.095 4.117-9.078 4.117-14.418 0-2.184-0.256-4.309-0.741-6.345l0.037 0.186-9.167-36.571c-1.931-6.644-5.964-12.163-11.318-15.932l-0.093-0.062c-4.144-3.232-9.425-5.183-15.163-5.183-1.919 0-3.788 0.218-5.582 0.631l0.167-0.032c-25.319 7.096-54.417 11.251-84.461 11.41h-0.092c-2.61 0.067-5.685 0.106-8.767 0.106-84.523 0-162.305-28.858-224.032-77.259l0.791 0.597c-63.522-50.125-110.592-118.549-133.414-197.278l-0.681-2.743h395.459c0.308 0.013 0.67 0.021 1.034 0.021 8.421 0 15.909-3.998 20.668-10.199l0.046-0.062c3.87-4.492 6.227-10.383 6.227-16.825 0-1.741-0.172-3.443-0.501-5.087l0.027 0.165-2.828-18.334c-1.095-7.053-4.844-13.073-10.174-17.116l-0.066-0.048c-4.736-3.543-10.693-5.694-17.15-5.754h-409.614c-2.186-21.926-3.432-47.389-3.432-73.143s1.246-51.218 3.682-76.334l-0.25 3.191h372.541c0.308 0.013 0.67 0.021 1.034 0.021 8.421 0 15.909-3.998 20.668-10.199l0.046-0.062c3.87-4.492 6.227-10.383 6.227-16.825 0-1.741-0.172-3.443-0.501-5.087l0.027 0.165-4.584-18.237c0.031-0.413 0.049-0.895 0.049-1.38 0-6.466-3.146-12.197-7.991-15.746l-0.055-0.038c-4.513-3.345-10.136-5.433-16.235-5.655l-0.052-0.001h-356.547c20.764-82.906 67.838-152.643 131.672-201.629l0.862-0.636c62.224-46.492 140.664-74.44 225.632-74.44 3.443 0 6.875 0.046 10.296 0.137l-0.505-0.011c0.29-0.001 0.634-0.001 0.977-0.001 35.421 0 69.711 4.842 102.245 13.9l-2.675-0.636c1.85 0.447 3.975 0.704 6.159 0.704 5.341 0 10.323-1.533 14.532-4.183l-0.113 0.066c6.198-3.962 10.97-9.677 13.669-16.443l0.082-0.234z" />
<glyph unicode="&#xe98e;" glyph-name="workflows" d="M823.125 919.232c-17.62-0.072-31.877-14.372-31.877-32.003 0-9.085 3.786-17.286 9.865-23.111l0.011-0.011 132.375-130.875-132.375-130.875c-6.134-5.842-9.949-14.071-9.949-23.19 0-17.675 14.328-32.003 32.003-32.003 8.996 0 17.124 3.711 22.938 9.686l0.007 0.007 155.375 153.625c5.864 5.803 9.494 13.853 9.494 22.75s-3.631 16.947-9.492 22.747l-155.378 153.628c-5.815 5.942-13.917 9.625-22.879 9.625-0.043 0-0.085 0-0.128 0h0.007zM576 767.107c-0.135 0.002-0.293 0.003-0.453 0.003-17.675 0-32.003-14.328-32.003-32.003s14.328-32.003 32.003-32.003c0.159 0 0.318 0.001 0.477 0.003h402.976c0.135-0.002 0.293-0.003 0.453-0.003 17.675 0 32.003 14.328 32.003 32.003s-14.328 32.003-32.003 32.003c-0.159 0-0.318-0.001-0.477-0.003h0.024zM218.875 343.107c-8.624-0.212-16.371-3.805-21.997-9.497l-0.003-0.003-147.625-146c-10.536-5.383-17.624-16.16-17.624-28.591 0-2.992 0.41-5.887 1.178-8.634l-0.054 0.225c0.167-0.686 0.296-1.146 0.434-1.602l-0.059 0.227c1.502-5.803 4.423-10.792 8.375-14.75v0l155.375-153.625c5.821-5.982 13.95-9.693 22.945-9.693 17.675 0 32.003 14.328 32.003 32.003 0 9.12-3.815 17.348-9.935 23.178l-0.013 0.012-101.875 100.75h327c0.135-0.002 0.293-0.003 0.453-0.003 17.675 0 32.003 14.328 32.003 32.003s-14.328 32.003-32.003 32.003c-0.159 0-0.318-0.001-0.477-0.003h-323.226l98.125 97c6.019 5.826 9.756 13.98 9.756 23.006 0 17.675-14.328 32.003-32.003 32.003-0.265 0-0.529-0.003-0.792-0.010l0.039 0.001zM128 950.857c-70.358 0-128-57.642-128-128v-192c0-70.358 57.642-128 128-128h192c70.358 0 128 57.642 128 128v192c0 70.358-57.642 128-128 128zM128 886.857h192c36.010 0 64-27.99 64-64v-192c0-36.010-27.99-64-64-64h-192c-36.010 0-64 27.99-64 64v192c0 36.010 27.99 64 64 64zM704 374.857c-70.358 0-128-57.642-128-128v-192c0-70.358 57.642-128 128-128h192c70.358 0 128 57.642 128 128v192c0 70.358-57.642 128-128 128zM704 310.857h192c36.010 0 64-27.99 64-64v-192c0-36.010-27.99-64-64-64h-192c-36.010 0-64 27.99-64 64v192c0 36.010 27.99 64 64 64z" />
<glyph unicode="&#xe98f;" glyph-name="fullscreen_exit" d="M682 596.667h128v-84h-212v212h84v-128zM598 128.667v212h212v-84h-128v-128h-84zM342 596.667v128h84v-212h-212v84h128zM214 256.667v84h212v-212h-84v128h-128z" />
<glyph unicode="&#xe990;" glyph-name="fullscreen" d="M598 724.667h212v-212h-84v128h-128v84zM726 212.667v128h84v-212h-212v84h128zM214 512.667v212h212v-84h-128v-128h-84zM298 340.667v-128h128v-84h-212v212h84z" />
<glyph unicode="&#xe9ca;" glyph-name="earth" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512-0.002c-62.958 0-122.872 13.012-177.23 36.452l233.148 262.29c5.206 5.858 8.082 13.422 8.082 21.26v96c0 17.674-14.326 32-32 32-112.99 0-232.204 117.462-233.374 118.626-6 6.002-14.14 9.374-22.626 9.374h-128c-17.672 0-32-14.328-32-32v-192c0-12.122 6.848-23.202 17.69-28.622l110.31-55.156v-187.886c-116.052 80.956-192 215.432-192 367.664 0 68.714 15.49 133.806 43.138 192h116.862c8.488 0 16.626 3.372 22.628 9.372l128 128c6 6.002 9.372 14.14 9.372 22.628v77.412c40.562 12.074 83.518 18.588 128 18.588 70.406 0 137.004-16.26 196.282-45.2-4.144-3.502-8.176-7.164-12.046-11.036-36.266-36.264-56.236-84.478-56.236-135.764s19.97-99.5 56.236-135.764c36.434-36.432 85.218-56.264 135.634-56.26 3.166 0 6.342 0.080 9.518 0.236 13.814-51.802 38.752-186.656-8.404-372.334-0.444-1.744-0.696-3.488-0.842-5.224-81.324-83.080-194.7-134.656-320.142-134.656z" />
<glyph unicode="&#xf00a;" glyph-name="grid" d="M292.571 237.714v-109.714c0-30.286-24.571-54.857-54.857-54.857h-182.857c-30.286 0-54.857 24.571-54.857 54.857v109.714c0 30.286 24.571 54.857 54.857 54.857h182.857c30.286 0 54.857-24.571 54.857-54.857zM292.571 530.286v-109.714c0-30.286-24.571-54.857-54.857-54.857h-182.857c-30.286 0-54.857 24.571-54.857 54.857v109.714c0 30.286 24.571 54.857 54.857 54.857h182.857c30.286 0 54.857-24.571 54.857-54.857zM658.286 237.714v-109.714c0-30.286-24.571-54.857-54.857-54.857h-182.857c-30.286 0-54.857 24.571-54.857 54.857v109.714c0 30.286 24.571 54.857 54.857 54.857h182.857c30.286 0 54.857-24.571 54.857-54.857zM292.571 822.857v-109.714c0-30.286-24.571-54.857-54.857-54.857h-182.857c-30.286 0-54.857 24.571-54.857 54.857v109.714c0 30.286 24.571 54.857 54.857 54.857h182.857c30.286 0 54.857-24.571 54.857-54.857zM658.286 530.286v-109.714c0-30.286-24.571-54.857-54.857-54.857h-182.857c-30.286 0-54.857 24.571-54.857 54.857v109.714c0 30.286 24.571 54.857 54.857 54.857h182.857c30.286 0 54.857-24.571 54.857-54.857zM1024 237.714v-109.714c0-30.286-24.571-54.857-54.857-54.857h-182.857c-30.286 0-54.857 24.571-54.857 54.857v109.714c0 30.286 24.571 54.857 54.857 54.857h182.857c30.286 0 54.857-24.571 54.857-54.857zM658.286 822.857v-109.714c0-30.286-24.571-54.857-54.857-54.857h-182.857c-30.286 0-54.857 24.571-54.857 54.857v109.714c0 30.286 24.571 54.857 54.857 54.857h182.857c30.286 0 54.857-24.571 54.857-54.857zM1024 530.286v-109.714c0-30.286-24.571-54.857-54.857-54.857h-182.857c-30.286 0-54.857 24.571-54.857 54.857v109.714c0 30.286 24.571 54.857 54.857 54.857h182.857c30.286 0 54.857-24.571 54.857-54.857zM1024 822.857v-109.714c0-30.286-24.571-54.857-54.857-54.857h-182.857c-30.286 0-54.857 24.571-54.857 54.857v109.714c0 30.286 24.571 54.857 54.857 54.857h182.857c30.286 0 54.857-24.571 54.857-54.857z" />
<glyph unicode="&#xf0c9;" glyph-name="list1" horiz-adv-x="878" d="M877.714 182.857v-73.143c0-20-16.571-36.571-36.571-36.571h-804.571c-20 0-36.571 16.571-36.571 36.571v73.143c0 20 16.571 36.571 36.571 36.571h804.571c20 0 36.571-16.571 36.571-36.571zM877.714 475.428v-73.143c0-20-16.571-36.571-36.571-36.571h-804.571c-20 0-36.571 16.571-36.571 36.571v73.143c0 20 16.571 36.571 36.571 36.571h804.571c20 0 36.571-16.571 36.571-36.571zM877.714 768v-73.143c0-20-16.571-36.571-36.571-36.571h-804.571c-20 0-36.571 16.571-36.571 36.571v73.143c0 20 16.571 36.571 36.571 36.571h804.571c20 0 36.571-16.571 36.571-36.571z" />

Before

Width:  |  Height:  |  Size: 118 KiB

After

Width:  |  Height:  |  Size: 119 KiB

BIN
frontend/app/theme/icomoon/fonts/icomoon.ttf

Binary file not shown.

BIN
frontend/app/theme/icomoon/fonts/icomoon.woff

Binary file not shown.

2
frontend/app/theme/icomoon/selection.json

File diff suppressed because one or more lines are too long

166
frontend/app/theme/icomoon/style.css

@ -1,10 +1,10 @@
@font-face {
font-family: 'icomoon';
src: url('fonts/icomoon.eot?yp975g');
src: url('fonts/icomoon.eot?yp975g#iefix') format('embedded-opentype'),
url('fonts/icomoon.ttf?yp975g') format('truetype'),
url('fonts/icomoon.woff?yp975g') format('woff'),
url('fonts/icomoon.svg?yp975g#icomoon') format('svg');
src: url('fonts/icomoon.eot?ywommh');
src: url('fonts/icomoon.eot?ywommh#iefix') format('embedded-opentype'),
url('fonts/icomoon.ttf?ywommh') format('truetype'),
url('fonts/icomoon.woff?ywommh') format('woff'),
url('fonts/icomoon.svg?ywommh#icomoon') format('svg');
font-weight: normal;
font-style: normal;
font-display: block;
@ -25,6 +25,87 @@
-moz-osx-font-smoothing: grayscale;
}
.icon-fullscreen_exit:before {
content: "\e98f";
}
.icon-fullscreen:before {
content: "\e990";
}
.icon-enter:before {
content: "\e984";
}
.icon-zoom_out:before {
content: "\e982";
}
.icon-zoom_in:before {
content: "\e983";
}
.icon-flip:before {
content: "\e97f";
}
.icon-rotate_right:before {
content: "\e980";
}
.icon-rotate_left:before {
content: "\e981";
}
.icon-create_new_folder:before {
content: "\e97b";
}
.icon-folder:before {
content: "\e97c";
}
.icon-help2:before {
content: "\e97a";
}
.icon-trigger-Manual:before {
content: "\e979";
}
.icon-play-line:before {
content: "\e979";
}
.icon-corner-down-right:before {
content: "\e977";
}
.icon-info-outline:before {
content: "\e974";
}
.icon-upload-2:before {
content: "\e972";
}
.icon-translate:before {
content: "\e96f";
}
.icon-arrow_back:before {
content: "\e96e";
}
.icon-external-link:before {
content: "\e96d";
}
.icon-minus-square:before {
content: "\e969";
}
.icon-plus-square:before {
content: "\e968";
}
.icon-drag2:before {
content: "\e961";
}
.icon-comments:before {
content: "\e95f";
}
.icon-backup:before {
content: "\e95b";
}
.icon-support:before {
content: "\e95a";
}
.icon-control-RichText:before {
content: "\e939";
}
.icon-download:before {
content: "\e93e";
}
.icon-backups:before {
content: "\e987";
}
@ -175,81 +256,6 @@
.icon-search-Rule:before {
content: "\e947";
}
.icon-enter:before {
content: "\e984";
}
.icon-zoom_out:before {
content: "\e982";
}
.icon-zoom_in:before {
content: "\e983";
}
.icon-flip:before {
content: "\e97f";
}
.icon-rotate_right:before {
content: "\e980";
}
.icon-rotate_left:before {
content: "\e981";
}
.icon-create_new_folder:before {
content: "\e97b";
}
.icon-folder:before {
content: "\e97c";
}
.icon-help2:before {
content: "\e97a";
}
.icon-trigger-Manual:before {
content: "\e979";
}
.icon-play-line:before {
content: "\e979";
}
.icon-corner-down-right:before {
content: "\e977";
}
.icon-info-outline:before {
content: "\e974";
}
.icon-upload-2:before {
content: "\e972";
}
.icon-translate:before {
content: "\e96f";
}
.icon-arrow_back:before {
content: "\e96e";
}
.icon-external-link:before {
content: "\e96d";
}
.icon-minus-square:before {
content: "\e969";
}
.icon-plus-square:before {
content: "\e968";
}
.icon-drag2:before {
content: "\e961";
}
.icon-comments:before {
content: "\e95f";
}
.icon-backup:before {
content: "\e95b";
}
.icon-support:before {
content: "\e95a";
}
.icon-control-RichText:before {
content: "\e939";
}
.icon-download:before {
content: "\e93e";
}
.icon-type-UI:before {
content: "\e975";
}

126
frontend/package-lock.json

@ -98,7 +98,6 @@
"eslint-plugin-import": "2.25.3",
"eslint-plugin-jsx-a11y": "6.5.1",
"eslint-webpack-plugin": "3.1.1",
"file-loader": "6.2.0",
"html-loader": "2.1.2",
"html-webpack-plugin": "5.5.0",
"ignore-loader": "0.1.2",
@ -114,7 +113,6 @@
"karma-sourcemap-loader": "0.3.8",
"karma-webpack": "5.0.0",
"mini-css-extract-plugin": "2.4.5",
"optimize-css-assets-webpack-plugin": "6.0.1",
"postcss-import": "14.0.2",
"postcss-loader": "6.2.1",
"postcss-preset-env": "7.1.0",
@ -6318,26 +6316,6 @@
"node": "^10.12.0 || >=12.0.0"
}
},
"node_modules/file-loader": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz",
"integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==",
"dev": true,
"dependencies": {
"loader-utils": "^2.0.0",
"schema-utils": "^3.0.0"
},
"engines": {
"node": ">= 10.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
"peerDependencies": {
"webpack": "^4.0.0 || ^5.0.0"
}
},
"node_modules/fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
@ -8544,16 +8522,6 @@
"language-subtag-registry": "~0.3.2"
}
},
"node_modules/last-call-webpack-plugin": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz",
"integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==",
"dev": true,
"dependencies": {
"lodash": "^4.17.5",
"webpack-sources": "^1.1.0"
}
},
"node_modules/leaflet": {
"version": "1.7.1",
"resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.7.1.tgz",
@ -10060,20 +10028,6 @@
"opener": "bin/opener-bin.js"
}
},
"node_modules/optimize-css-assets-webpack-plugin": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-6.0.1.tgz",
"integrity": "sha512-BshV2UZPfggZLdUfN3zFBbG4sl/DynUI+YCB6fRRDWaqO2OiWN8GPcp4Y0/fEV6B3k9Hzyk3czve3V/8B/SzKQ==",
"dev": true,
"dependencies": {
"cssnano": "^5.0.2",
"last-call-webpack-plugin": "^3.0.0",
"postcss": "^8.2.1"
},
"peerDependencies": {
"webpack": "^4.0.0"
}
},
"node_modules/optionator": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
@ -12692,12 +12646,6 @@
"node": ">= 10"
}
},
"node_modules/source-list-map": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
"integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
"dev": true
},
"node_modules/source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
@ -14909,25 +14857,6 @@
"lodash": "^4.17.15"
}
},
"node_modules/webpack-sources": {
"version": "1.4.3",
"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
"integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
"dev": true,
"dependencies": {
"source-list-map": "^2.0.0",
"source-map": "~0.6.1"
}
},
"node_modules/webpack-sources/node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/webpack/node_modules/enhanced-resolve": {
"version": "5.8.3",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz",
@ -19988,16 +19917,6 @@
"flat-cache": "^3.0.4"
}
},
"file-loader": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz",
"integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==",
"dev": true,
"requires": {
"loader-utils": "^2.0.0",
"schema-utils": "^3.0.0"
}
},
"fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
@ -21628,16 +21547,6 @@
"language-subtag-registry": "~0.3.2"
}
},
"last-call-webpack-plugin": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz",
"integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==",
"dev": true,
"requires": {
"lodash": "^4.17.5",
"webpack-sources": "^1.1.0"
}
},
"leaflet": {
"version": "1.7.1",
"resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.7.1.tgz",
@ -22780,17 +22689,6 @@
"integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==",
"dev": true
},
"optimize-css-assets-webpack-plugin": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-6.0.1.tgz",
"integrity": "sha512-BshV2UZPfggZLdUfN3zFBbG4sl/DynUI+YCB6fRRDWaqO2OiWN8GPcp4Y0/fEV6B3k9Hzyk3czve3V/8B/SzKQ==",
"dev": true,
"requires": {
"cssnano": "^5.0.2",
"last-call-webpack-plugin": "^3.0.0",
"postcss": "^8.2.1"
}
},
"optionator": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
@ -24623,12 +24521,6 @@
"socks": "^2.6.1"
}
},
"source-list-map": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
"integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
"dev": true
},
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
@ -26291,24 +26183,6 @@
"lodash": "^4.17.15"
}
},
"webpack-sources": {
"version": "1.4.3",
"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
"integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
"dev": true,
"requires": {
"source-list-map": "^2.0.0",
"source-map": "~0.6.1"
},
"dependencies": {
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
}
}
},
"websocket-driver": {
"version": "0.7.4",
"resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",

1
frontend/package.json

@ -106,7 +106,6 @@
"eslint-plugin-import": "2.25.3",
"eslint-plugin-jsx-a11y": "6.5.1",
"eslint-webpack-plugin": "3.1.1",
"file-loader": "6.2.0",
"html-loader": "2.1.2",
"html-webpack-plugin": "5.5.0",
"ignore-loader": "0.1.2",

Loading…
Cancel
Save